diff --git a/vendor/github.com/davecgh/go-spew/LICENSE b/vendor/github.com/davecgh/go-spew/LICENSE deleted file mode 100644 index c8364161..00000000 --- a/vendor/github.com/davecgh/go-spew/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -ISC License - -Copyright (c) 2012-2016 Dave Collins - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/davecgh/go-spew/spew/bypass.go b/vendor/github.com/davecgh/go-spew/spew/bypass.go deleted file mode 100644 index 8a4a6589..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/bypass.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2015-2016 Dave Collins -// -// Permission to use, copy, modify, and distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -// NOTE: Due to the following build constraints, this file will only be compiled -// when the code is not running on Google App Engine, compiled by GopherJS, and -// "-tags safe" is not added to the go build command line. The "disableunsafe" -// tag is deprecated and thus should not be used. -// +build !js,!appengine,!safe,!disableunsafe - -package spew - -import ( - "reflect" - "unsafe" -) - -const ( - // UnsafeDisabled is a build-time constant which specifies whether or - // not access to the unsafe package is available. - UnsafeDisabled = false - - // ptrSize is the size of a pointer on the current arch. - ptrSize = unsafe.Sizeof((*byte)(nil)) -) - -var ( - // offsetPtr, offsetScalar, and offsetFlag are the offsets for the - // internal reflect.Value fields. These values are valid before golang - // commit ecccf07e7f9d which changed the format. The are also valid - // after commit 82f48826c6c7 which changed the format again to mirror - // the original format. Code in the init function updates these offsets - // as necessary. - offsetPtr = uintptr(ptrSize) - offsetScalar = uintptr(0) - offsetFlag = uintptr(ptrSize * 2) - - // flagKindWidth and flagKindShift indicate various bits that the - // reflect package uses internally to track kind information. - // - // flagRO indicates whether or not the value field of a reflect.Value is - // read-only. - // - // flagIndir indicates whether the value field of a reflect.Value is - // the actual data or a pointer to the data. - // - // These values are valid before golang commit 90a7c3c86944 which - // changed their positions. Code in the init function updates these - // flags as necessary. - flagKindWidth = uintptr(5) - flagKindShift = uintptr(flagKindWidth - 1) - flagRO = uintptr(1 << 0) - flagIndir = uintptr(1 << 1) -) - -func init() { - // Older versions of reflect.Value stored small integers directly in the - // ptr field (which is named val in the older versions). Versions - // between commits ecccf07e7f9d and 82f48826c6c7 added a new field named - // scalar for this purpose which unfortunately came before the flag - // field, so the offset of the flag field is different for those - // versions. - // - // This code constructs a new reflect.Value from a known small integer - // and checks if the size of the reflect.Value struct indicates it has - // the scalar field. When it does, the offsets are updated accordingly. - vv := reflect.ValueOf(0xf00) - if unsafe.Sizeof(vv) == (ptrSize * 4) { - offsetScalar = ptrSize * 2 - offsetFlag = ptrSize * 3 - } - - // Commit 90a7c3c86944 changed the flag positions such that the low - // order bits are the kind. This code extracts the kind from the flags - // field and ensures it's the correct type. When it's not, the flag - // order has been changed to the newer format, so the flags are updated - // accordingly. - upf := unsafe.Pointer(uintptr(unsafe.Pointer(&vv)) + offsetFlag) - upfv := *(*uintptr)(upf) - flagKindMask := uintptr((1<>flagKindShift != uintptr(reflect.Int) { - flagKindShift = 0 - flagRO = 1 << 5 - flagIndir = 1 << 6 - - // Commit adf9b30e5594 modified the flags to separate the - // flagRO flag into two bits which specifies whether or not the - // field is embedded. This causes flagIndir to move over a bit - // and means that flagRO is the combination of either of the - // original flagRO bit and the new bit. - // - // This code detects the change by extracting what used to be - // the indirect bit to ensure it's set. When it's not, the flag - // order has been changed to the newer format, so the flags are - // updated accordingly. - if upfv&flagIndir == 0 { - flagRO = 3 << 5 - flagIndir = 1 << 7 - } - } -} - -// unsafeReflectValue converts the passed reflect.Value into a one that bypasses -// the typical safety restrictions preventing access to unaddressable and -// unexported data. It works by digging the raw pointer to the underlying -// value out of the protected value and generating a new unprotected (unsafe) -// reflect.Value to it. -// -// This allows us to check for implementations of the Stringer and error -// interfaces to be used for pretty printing ordinarily unaddressable and -// inaccessible values such as unexported struct fields. -func unsafeReflectValue(v reflect.Value) (rv reflect.Value) { - indirects := 1 - vt := v.Type() - upv := unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetPtr) - rvf := *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetFlag)) - if rvf&flagIndir != 0 { - vt = reflect.PtrTo(v.Type()) - indirects++ - } else if offsetScalar != 0 { - // The value is in the scalar field when it's not one of the - // reference types. - switch vt.Kind() { - case reflect.Uintptr: - case reflect.Chan: - case reflect.Func: - case reflect.Map: - case reflect.Ptr: - case reflect.UnsafePointer: - default: - upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + - offsetScalar) - } - } - - pv := reflect.NewAt(vt, upv) - rv = pv - for i := 0; i < indirects; i++ { - rv = rv.Elem() - } - return rv -} diff --git a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go b/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go deleted file mode 100644 index 1fe3cf3d..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2015-2016 Dave Collins -// -// Permission to use, copy, modify, and distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -// NOTE: Due to the following build constraints, this file will only be compiled -// when the code is running on Google App Engine, compiled by GopherJS, or -// "-tags safe" is added to the go build command line. The "disableunsafe" -// tag is deprecated and thus should not be used. -// +build js appengine safe disableunsafe - -package spew - -import "reflect" - -const ( - // UnsafeDisabled is a build-time constant which specifies whether or - // not access to the unsafe package is available. - UnsafeDisabled = true -) - -// unsafeReflectValue typically converts the passed reflect.Value into a one -// that bypasses the typical safety restrictions preventing access to -// unaddressable and unexported data. However, doing this relies on access to -// the unsafe package. This is a stub version which simply returns the passed -// reflect.Value when the unsafe package is not available. -func unsafeReflectValue(v reflect.Value) reflect.Value { - return v -} diff --git a/vendor/github.com/davecgh/go-spew/spew/common.go b/vendor/github.com/davecgh/go-spew/spew/common.go deleted file mode 100644 index 7c519ff4..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/common.go +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "io" - "reflect" - "sort" - "strconv" -) - -// Some constants in the form of bytes to avoid string overhead. This mirrors -// the technique used in the fmt package. -var ( - panicBytes = []byte("(PANIC=") - plusBytes = []byte("+") - iBytes = []byte("i") - trueBytes = []byte("true") - falseBytes = []byte("false") - interfaceBytes = []byte("(interface {})") - commaNewlineBytes = []byte(",\n") - newlineBytes = []byte("\n") - openBraceBytes = []byte("{") - openBraceNewlineBytes = []byte("{\n") - closeBraceBytes = []byte("}") - asteriskBytes = []byte("*") - colonBytes = []byte(":") - colonSpaceBytes = []byte(": ") - openParenBytes = []byte("(") - closeParenBytes = []byte(")") - spaceBytes = []byte(" ") - pointerChainBytes = []byte("->") - nilAngleBytes = []byte("") - maxNewlineBytes = []byte("\n") - maxShortBytes = []byte("") - circularBytes = []byte("") - circularShortBytes = []byte("") - invalidAngleBytes = []byte("") - openBracketBytes = []byte("[") - closeBracketBytes = []byte("]") - percentBytes = []byte("%") - precisionBytes = []byte(".") - openAngleBytes = []byte("<") - closeAngleBytes = []byte(">") - openMapBytes = []byte("map[") - closeMapBytes = []byte("]") - lenEqualsBytes = []byte("len=") - capEqualsBytes = []byte("cap=") -) - -// hexDigits is used to map a decimal value to a hex digit. -var hexDigits = "0123456789abcdef" - -// catchPanic handles any panics that might occur during the handleMethods -// calls. -func catchPanic(w io.Writer, v reflect.Value) { - if err := recover(); err != nil { - w.Write(panicBytes) - fmt.Fprintf(w, "%v", err) - w.Write(closeParenBytes) - } -} - -// handleMethods attempts to call the Error and String methods on the underlying -// type the passed reflect.Value represents and outputes the result to Writer w. -// -// It handles panics in any called methods by catching and displaying the error -// as the formatted value. -func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) { - // We need an interface to check if the type implements the error or - // Stringer interface. However, the reflect package won't give us an - // interface on certain things like unexported struct fields in order - // to enforce visibility rules. We use unsafe, when it's available, - // to bypass these restrictions since this package does not mutate the - // values. - if !v.CanInterface() { - if UnsafeDisabled { - return false - } - - v = unsafeReflectValue(v) - } - - // Choose whether or not to do error and Stringer interface lookups against - // the base type or a pointer to the base type depending on settings. - // Technically calling one of these methods with a pointer receiver can - // mutate the value, however, types which choose to satisify an error or - // Stringer interface with a pointer receiver should not be mutating their - // state inside these interface methods. - if !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() { - v = unsafeReflectValue(v) - } - if v.CanAddr() { - v = v.Addr() - } - - // Is it an error or Stringer? - switch iface := v.Interface().(type) { - case error: - defer catchPanic(w, v) - if cs.ContinueOnMethod { - w.Write(openParenBytes) - w.Write([]byte(iface.Error())) - w.Write(closeParenBytes) - w.Write(spaceBytes) - return false - } - - w.Write([]byte(iface.Error())) - return true - - case fmt.Stringer: - defer catchPanic(w, v) - if cs.ContinueOnMethod { - w.Write(openParenBytes) - w.Write([]byte(iface.String())) - w.Write(closeParenBytes) - w.Write(spaceBytes) - return false - } - w.Write([]byte(iface.String())) - return true - } - return false -} - -// printBool outputs a boolean value as true or false to Writer w. -func printBool(w io.Writer, val bool) { - if val { - w.Write(trueBytes) - } else { - w.Write(falseBytes) - } -} - -// printInt outputs a signed integer value to Writer w. -func printInt(w io.Writer, val int64, base int) { - w.Write([]byte(strconv.FormatInt(val, base))) -} - -// printUint outputs an unsigned integer value to Writer w. -func printUint(w io.Writer, val uint64, base int) { - w.Write([]byte(strconv.FormatUint(val, base))) -} - -// printFloat outputs a floating point value using the specified precision, -// which is expected to be 32 or 64bit, to Writer w. -func printFloat(w io.Writer, val float64, precision int) { - w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision))) -} - -// printComplex outputs a complex value using the specified float precision -// for the real and imaginary parts to Writer w. -func printComplex(w io.Writer, c complex128, floatPrecision int) { - r := real(c) - w.Write(openParenBytes) - w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision))) - i := imag(c) - if i >= 0 { - w.Write(plusBytes) - } - w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision))) - w.Write(iBytes) - w.Write(closeParenBytes) -} - -// printHexPtr outputs a uintptr formatted as hexidecimal with a leading '0x' -// prefix to Writer w. -func printHexPtr(w io.Writer, p uintptr) { - // Null pointer. - num := uint64(p) - if num == 0 { - w.Write(nilAngleBytes) - return - } - - // Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix - buf := make([]byte, 18) - - // It's simpler to construct the hex string right to left. - base := uint64(16) - i := len(buf) - 1 - for num >= base { - buf[i] = hexDigits[num%base] - num /= base - i-- - } - buf[i] = hexDigits[num] - - // Add '0x' prefix. - i-- - buf[i] = 'x' - i-- - buf[i] = '0' - - // Strip unused leading bytes. - buf = buf[i:] - w.Write(buf) -} - -// valuesSorter implements sort.Interface to allow a slice of reflect.Value -// elements to be sorted. -type valuesSorter struct { - values []reflect.Value - strings []string // either nil or same len and values - cs *ConfigState -} - -// newValuesSorter initializes a valuesSorter instance, which holds a set of -// surrogate keys on which the data should be sorted. It uses flags in -// ConfigState to decide if and how to populate those surrogate keys. -func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface { - vs := &valuesSorter{values: values, cs: cs} - if canSortSimply(vs.values[0].Kind()) { - return vs - } - if !cs.DisableMethods { - vs.strings = make([]string, len(values)) - for i := range vs.values { - b := bytes.Buffer{} - if !handleMethods(cs, &b, vs.values[i]) { - vs.strings = nil - break - } - vs.strings[i] = b.String() - } - } - if vs.strings == nil && cs.SpewKeys { - vs.strings = make([]string, len(values)) - for i := range vs.values { - vs.strings[i] = Sprintf("%#v", vs.values[i].Interface()) - } - } - return vs -} - -// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted -// directly, or whether it should be considered for sorting by surrogate keys -// (if the ConfigState allows it). -func canSortSimply(kind reflect.Kind) bool { - // This switch parallels valueSortLess, except for the default case. - switch kind { - case reflect.Bool: - return true - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return true - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - return true - case reflect.Float32, reflect.Float64: - return true - case reflect.String: - return true - case reflect.Uintptr: - return true - case reflect.Array: - return true - } - return false -} - -// Len returns the number of values in the slice. It is part of the -// sort.Interface implementation. -func (s *valuesSorter) Len() int { - return len(s.values) -} - -// Swap swaps the values at the passed indices. It is part of the -// sort.Interface implementation. -func (s *valuesSorter) Swap(i, j int) { - s.values[i], s.values[j] = s.values[j], s.values[i] - if s.strings != nil { - s.strings[i], s.strings[j] = s.strings[j], s.strings[i] - } -} - -// valueSortLess returns whether the first value should sort before the second -// value. It is used by valueSorter.Less as part of the sort.Interface -// implementation. -func valueSortLess(a, b reflect.Value) bool { - switch a.Kind() { - case reflect.Bool: - return !a.Bool() && b.Bool() - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return a.Int() < b.Int() - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - return a.Uint() < b.Uint() - case reflect.Float32, reflect.Float64: - return a.Float() < b.Float() - case reflect.String: - return a.String() < b.String() - case reflect.Uintptr: - return a.Uint() < b.Uint() - case reflect.Array: - // Compare the contents of both arrays. - l := a.Len() - for i := 0; i < l; i++ { - av := a.Index(i) - bv := b.Index(i) - if av.Interface() == bv.Interface() { - continue - } - return valueSortLess(av, bv) - } - } - return a.String() < b.String() -} - -// Less returns whether the value at index i should sort before the -// value at index j. It is part of the sort.Interface implementation. -func (s *valuesSorter) Less(i, j int) bool { - if s.strings == nil { - return valueSortLess(s.values[i], s.values[j]) - } - return s.strings[i] < s.strings[j] -} - -// sortValues is a sort function that handles both native types and any type that -// can be converted to error or Stringer. Other inputs are sorted according to -// their Value.String() value to ensure display stability. -func sortValues(values []reflect.Value, cs *ConfigState) { - if len(values) == 0 { - return - } - sort.Sort(newValuesSorter(values, cs)) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/config.go b/vendor/github.com/davecgh/go-spew/spew/config.go deleted file mode 100644 index 2e3d22f3..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/config.go +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "io" - "os" -) - -// ConfigState houses the configuration options used by spew to format and -// display values. There is a global instance, Config, that is used to control -// all top-level Formatter and Dump functionality. Each ConfigState instance -// provides methods equivalent to the top-level functions. -// -// The zero value for ConfigState provides no indentation. You would typically -// want to set it to a space or a tab. -// -// Alternatively, you can use NewDefaultConfig to get a ConfigState instance -// with default settings. See the documentation of NewDefaultConfig for default -// values. -type ConfigState struct { - // Indent specifies the string to use for each indentation level. The - // global config instance that all top-level functions use set this to a - // single space by default. If you would like more indentation, you might - // set this to a tab with "\t" or perhaps two spaces with " ". - Indent string - - // MaxDepth controls the maximum number of levels to descend into nested - // data structures. The default, 0, means there is no limit. - // - // NOTE: Circular data structures are properly detected, so it is not - // necessary to set this value unless you specifically want to limit deeply - // nested data structures. - MaxDepth int - - // DisableMethods specifies whether or not error and Stringer interfaces are - // invoked for types that implement them. - DisableMethods bool - - // DisablePointerMethods specifies whether or not to check for and invoke - // error and Stringer interfaces on types which only accept a pointer - // receiver when the current type is not a pointer. - // - // NOTE: This might be an unsafe action since calling one of these methods - // with a pointer receiver could technically mutate the value, however, - // in practice, types which choose to satisify an error or Stringer - // interface with a pointer receiver should not be mutating their state - // inside these interface methods. As a result, this option relies on - // access to the unsafe package, so it will not have any effect when - // running in environments without access to the unsafe package such as - // Google App Engine or with the "safe" build tag specified. - DisablePointerMethods bool - - // DisablePointerAddresses specifies whether to disable the printing of - // pointer addresses. This is useful when diffing data structures in tests. - DisablePointerAddresses bool - - // DisableCapacities specifies whether to disable the printing of capacities - // for arrays, slices, maps and channels. This is useful when diffing - // data structures in tests. - DisableCapacities bool - - // ContinueOnMethod specifies whether or not recursion should continue once - // a custom error or Stringer interface is invoked. The default, false, - // means it will print the results of invoking the custom error or Stringer - // interface and return immediately instead of continuing to recurse into - // the internals of the data type. - // - // NOTE: This flag does not have any effect if method invocation is disabled - // via the DisableMethods or DisablePointerMethods options. - ContinueOnMethod bool - - // SortKeys specifies map keys should be sorted before being printed. Use - // this to have a more deterministic, diffable output. Note that only - // native types (bool, int, uint, floats, uintptr and string) and types - // that support the error or Stringer interfaces (if methods are - // enabled) are supported, with other types sorted according to the - // reflect.Value.String() output which guarantees display stability. - SortKeys bool - - // SpewKeys specifies that, as a last resort attempt, map keys should - // be spewed to strings and sorted by those strings. This is only - // considered if SortKeys is true. - SpewKeys bool -} - -// Config is the active configuration of the top-level functions. -// The configuration can be changed by modifying the contents of spew.Config. -var Config = ConfigState{Indent: " "} - -// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the formatted string as a value that satisfies error. See NewFormatter -// for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Errorf(format string, a ...interface{}) (err error) { - return fmt.Errorf(format, c.convertArgs(a)...) -} - -// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprint(w, c.convertArgs(a)...) -} - -// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - return fmt.Fprintf(w, format, c.convertArgs(a)...) -} - -// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it -// passed with a Formatter interface returned by c.NewFormatter. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, c.convertArgs(a)...) -} - -// Print is a wrapper for fmt.Print that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Print(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Print(a ...interface{}) (n int, err error) { - return fmt.Print(c.convertArgs(a)...) -} - -// Printf is a wrapper for fmt.Printf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) { - return fmt.Printf(format, c.convertArgs(a)...) -} - -// Println is a wrapper for fmt.Println that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Println(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Println(a ...interface{}) (n int, err error) { - return fmt.Println(c.convertArgs(a)...) -} - -// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprint(a ...interface{}) string { - return fmt.Sprint(c.convertArgs(a)...) -} - -// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprintf(format string, a ...interface{}) string { - return fmt.Sprintf(format, c.convertArgs(a)...) -} - -// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it -// were passed with a Formatter interface returned by c.NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprintln(a ...interface{}) string { - return fmt.Sprintln(c.convertArgs(a)...) -} - -/* -NewFormatter returns a custom formatter that satisfies the fmt.Formatter -interface. As a result, it integrates cleanly with standard fmt package -printing functions. The formatter is useful for inline printing of smaller data -types similar to the standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Typically this function shouldn't be called directly. It is much easier to make -use of the custom formatter by calling one of the convenience functions such as -c.Printf, c.Println, or c.Printf. -*/ -func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter { - return newFormatter(c, v) -} - -// Fdump formats and displays the passed arguments to io.Writer w. It formats -// exactly the same as Dump. -func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) { - fdump(c, w, a...) -} - -/* -Dump displays the passed parameters to standard out with newlines, customizable -indentation, and additional debug information such as complete types and all -pointer addresses used to indirect to the final value. It provides the -following features over the built-in printing facilities provided by the fmt -package: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output - -The configuration options are controlled by modifying the public members -of c. See ConfigState for options documentation. - -See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to -get the formatted result as a string. -*/ -func (c *ConfigState) Dump(a ...interface{}) { - fdump(c, os.Stdout, a...) -} - -// Sdump returns a string with the passed arguments formatted exactly the same -// as Dump. -func (c *ConfigState) Sdump(a ...interface{}) string { - var buf bytes.Buffer - fdump(c, &buf, a...) - return buf.String() -} - -// convertArgs accepts a slice of arguments and returns a slice of the same -// length with each argument converted to a spew Formatter interface using -// the ConfigState associated with s. -func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) { - formatters = make([]interface{}, len(args)) - for index, arg := range args { - formatters[index] = newFormatter(c, arg) - } - return formatters -} - -// NewDefaultConfig returns a ConfigState with the following default settings. -// -// Indent: " " -// MaxDepth: 0 -// DisableMethods: false -// DisablePointerMethods: false -// ContinueOnMethod: false -// SortKeys: false -func NewDefaultConfig() *ConfigState { - return &ConfigState{Indent: " "} -} diff --git a/vendor/github.com/davecgh/go-spew/spew/doc.go b/vendor/github.com/davecgh/go-spew/spew/doc.go deleted file mode 100644 index aacaac6f..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/doc.go +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* -Package spew implements a deep pretty printer for Go data structures to aid in -debugging. - -A quick overview of the additional features spew provides over the built-in -printing facilities for Go data types are as follows: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output (only when using - Dump style) - -There are two different approaches spew allows for dumping Go data structures: - - * Dump style which prints with newlines, customizable indentation, - and additional debug information such as types and all pointer addresses - used to indirect to the final value - * A custom Formatter interface that integrates cleanly with the standard fmt - package and replaces %v, %+v, %#v, and %#+v to provide inline printing - similar to the default %v while providing the additional functionality - outlined above and passing unsupported format verbs such as %x and %q - along to fmt - -Quick Start - -This section demonstrates how to quickly get started with spew. See the -sections below for further details on formatting and configuration options. - -To dump a variable with full newlines, indentation, type, and pointer -information use Dump, Fdump, or Sdump: - spew.Dump(myVar1, myVar2, ...) - spew.Fdump(someWriter, myVar1, myVar2, ...) - str := spew.Sdump(myVar1, myVar2, ...) - -Alternatively, if you would prefer to use format strings with a compacted inline -printing style, use the convenience wrappers Printf, Fprintf, etc with -%v (most compact), %+v (adds pointer addresses), %#v (adds types), or -%#+v (adds types and pointer addresses): - spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - -Configuration Options - -Configuration of spew is handled by fields in the ConfigState type. For -convenience, all of the top-level functions use a global state available -via the spew.Config global. - -It is also possible to create a ConfigState instance that provides methods -equivalent to the top-level functions. This allows concurrent configuration -options. See the ConfigState documentation for more details. - -The following configuration options are available: - * Indent - String to use for each indentation level for Dump functions. - It is a single space by default. A popular alternative is "\t". - - * MaxDepth - Maximum number of levels to descend into nested data structures. - There is no limit by default. - - * DisableMethods - Disables invocation of error and Stringer interface methods. - Method invocation is enabled by default. - - * DisablePointerMethods - Disables invocation of error and Stringer interface methods on types - which only accept pointer receivers from non-pointer variables. - Pointer method invocation is enabled by default. - - * DisablePointerAddresses - DisablePointerAddresses specifies whether to disable the printing of - pointer addresses. This is useful when diffing data structures in tests. - - * DisableCapacities - DisableCapacities specifies whether to disable the printing of - capacities for arrays, slices, maps and channels. This is useful when - diffing data structures in tests. - - * ContinueOnMethod - Enables recursion into types after invoking error and Stringer interface - methods. Recursion after method invocation is disabled by default. - - * SortKeys - Specifies map keys should be sorted before being printed. Use - this to have a more deterministic, diffable output. Note that - only native types (bool, int, uint, floats, uintptr and string) - and types which implement error or Stringer interfaces are - supported with other types sorted according to the - reflect.Value.String() output which guarantees display - stability. Natural map order is used by default. - - * SpewKeys - Specifies that, as a last resort attempt, map keys should be - spewed to strings and sorted by those strings. This is only - considered if SortKeys is true. - -Dump Usage - -Simply call spew.Dump with a list of variables you want to dump: - - spew.Dump(myVar1, myVar2, ...) - -You may also call spew.Fdump if you would prefer to output to an arbitrary -io.Writer. For example, to dump to standard error: - - spew.Fdump(os.Stderr, myVar1, myVar2, ...) - -A third option is to call spew.Sdump to get the formatted output as a string: - - str := spew.Sdump(myVar1, myVar2, ...) - -Sample Dump Output - -See the Dump example for details on the setup of the types and variables being -shown here. - - (main.Foo) { - unexportedField: (*main.Bar)(0xf84002e210)({ - flag: (main.Flag) flagTwo, - data: (uintptr) - }), - ExportedField: (map[interface {}]interface {}) (len=1) { - (string) (len=3) "one": (bool) true - } - } - -Byte (and uint8) arrays and slices are displayed uniquely like the hexdump -C -command as shown. - ([]uint8) (len=32 cap=32) { - 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... | - 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0| - 00000020 31 32 |12| - } - -Custom Formatter - -Spew provides a custom formatter that implements the fmt.Formatter interface -so that it integrates cleanly with standard fmt package printing functions. The -formatter is useful for inline printing of smaller data types similar to the -standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Custom Formatter Usage - -The simplest way to make use of the spew custom formatter is to call one of the -convenience functions such as spew.Printf, spew.Println, or spew.Printf. The -functions have syntax you are most likely already familiar with: - - spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - spew.Println(myVar, myVar2) - spew.Fprintf(os.Stderr, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Fprintf(os.Stderr, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - -See the Index for the full list convenience functions. - -Sample Formatter Output - -Double pointer to a uint8: - %v: <**>5 - %+v: <**>(0xf8400420d0->0xf8400420c8)5 - %#v: (**uint8)5 - %#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5 - -Pointer to circular struct with a uint8 field and a pointer to itself: - %v: <*>{1 <*>} - %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)} - %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)} - %#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)} - -See the Printf example for details on the setup of variables being shown -here. - -Errors - -Since it is possible for custom Stringer/error interfaces to panic, spew -detects them and handles them internally by printing the panic information -inline with the output. Since spew is intended to provide deep pretty printing -capabilities on structures, it intentionally does not return any errors. -*/ -package spew diff --git a/vendor/github.com/davecgh/go-spew/spew/dump.go b/vendor/github.com/davecgh/go-spew/spew/dump.go deleted file mode 100644 index df1d582a..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/dump.go +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "encoding/hex" - "fmt" - "io" - "os" - "reflect" - "regexp" - "strconv" - "strings" -) - -var ( - // uint8Type is a reflect.Type representing a uint8. It is used to - // convert cgo types to uint8 slices for hexdumping. - uint8Type = reflect.TypeOf(uint8(0)) - - // cCharRE is a regular expression that matches a cgo char. - // It is used to detect character arrays to hexdump them. - cCharRE = regexp.MustCompile("^.*\\._Ctype_char$") - - // cUnsignedCharRE is a regular expression that matches a cgo unsigned - // char. It is used to detect unsigned character arrays to hexdump - // them. - cUnsignedCharRE = regexp.MustCompile("^.*\\._Ctype_unsignedchar$") - - // cUint8tCharRE is a regular expression that matches a cgo uint8_t. - // It is used to detect uint8_t arrays to hexdump them. - cUint8tCharRE = regexp.MustCompile("^.*\\._Ctype_uint8_t$") -) - -// dumpState contains information about the state of a dump operation. -type dumpState struct { - w io.Writer - depth int - pointers map[uintptr]int - ignoreNextType bool - ignoreNextIndent bool - cs *ConfigState -} - -// indent performs indentation according to the depth level and cs.Indent -// option. -func (d *dumpState) indent() { - if d.ignoreNextIndent { - d.ignoreNextIndent = false - return - } - d.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth)) -} - -// unpackValue returns values inside of non-nil interfaces when possible. -// This is useful for data types like structs, arrays, slices, and maps which -// can contain varying types packed inside an interface. -func (d *dumpState) unpackValue(v reflect.Value) reflect.Value { - if v.Kind() == reflect.Interface && !v.IsNil() { - v = v.Elem() - } - return v -} - -// dumpPtr handles formatting of pointers by indirecting them as necessary. -func (d *dumpState) dumpPtr(v reflect.Value) { - // Remove pointers at or below the current depth from map used to detect - // circular refs. - for k, depth := range d.pointers { - if depth >= d.depth { - delete(d.pointers, k) - } - } - - // Keep list of all dereferenced pointers to show later. - pointerChain := make([]uintptr, 0) - - // Figure out how many levels of indirection there are by dereferencing - // pointers and unpacking interfaces down the chain while detecting circular - // references. - nilFound := false - cycleFound := false - indirects := 0 - ve := v - for ve.Kind() == reflect.Ptr { - if ve.IsNil() { - nilFound = true - break - } - indirects++ - addr := ve.Pointer() - pointerChain = append(pointerChain, addr) - if pd, ok := d.pointers[addr]; ok && pd < d.depth { - cycleFound = true - indirects-- - break - } - d.pointers[addr] = d.depth - - ve = ve.Elem() - if ve.Kind() == reflect.Interface { - if ve.IsNil() { - nilFound = true - break - } - ve = ve.Elem() - } - } - - // Display type information. - d.w.Write(openParenBytes) - d.w.Write(bytes.Repeat(asteriskBytes, indirects)) - d.w.Write([]byte(ve.Type().String())) - d.w.Write(closeParenBytes) - - // Display pointer information. - if !d.cs.DisablePointerAddresses && len(pointerChain) > 0 { - d.w.Write(openParenBytes) - for i, addr := range pointerChain { - if i > 0 { - d.w.Write(pointerChainBytes) - } - printHexPtr(d.w, addr) - } - d.w.Write(closeParenBytes) - } - - // Display dereferenced value. - d.w.Write(openParenBytes) - switch { - case nilFound == true: - d.w.Write(nilAngleBytes) - - case cycleFound == true: - d.w.Write(circularBytes) - - default: - d.ignoreNextType = true - d.dump(ve) - } - d.w.Write(closeParenBytes) -} - -// dumpSlice handles formatting of arrays and slices. Byte (uint8 under -// reflection) arrays and slices are dumped in hexdump -C fashion. -func (d *dumpState) dumpSlice(v reflect.Value) { - // Determine whether this type should be hex dumped or not. Also, - // for types which should be hexdumped, try to use the underlying data - // first, then fall back to trying to convert them to a uint8 slice. - var buf []uint8 - doConvert := false - doHexDump := false - numEntries := v.Len() - if numEntries > 0 { - vt := v.Index(0).Type() - vts := vt.String() - switch { - // C types that need to be converted. - case cCharRE.MatchString(vts): - fallthrough - case cUnsignedCharRE.MatchString(vts): - fallthrough - case cUint8tCharRE.MatchString(vts): - doConvert = true - - // Try to use existing uint8 slices and fall back to converting - // and copying if that fails. - case vt.Kind() == reflect.Uint8: - // We need an addressable interface to convert the type - // to a byte slice. However, the reflect package won't - // give us an interface on certain things like - // unexported struct fields in order to enforce - // visibility rules. We use unsafe, when available, to - // bypass these restrictions since this package does not - // mutate the values. - vs := v - if !vs.CanInterface() || !vs.CanAddr() { - vs = unsafeReflectValue(vs) - } - if !UnsafeDisabled { - vs = vs.Slice(0, numEntries) - - // Use the existing uint8 slice if it can be - // type asserted. - iface := vs.Interface() - if slice, ok := iface.([]uint8); ok { - buf = slice - doHexDump = true - break - } - } - - // The underlying data needs to be converted if it can't - // be type asserted to a uint8 slice. - doConvert = true - } - - // Copy and convert the underlying type if needed. - if doConvert && vt.ConvertibleTo(uint8Type) { - // Convert and copy each element into a uint8 byte - // slice. - buf = make([]uint8, numEntries) - for i := 0; i < numEntries; i++ { - vv := v.Index(i) - buf[i] = uint8(vv.Convert(uint8Type).Uint()) - } - doHexDump = true - } - } - - // Hexdump the entire slice as needed. - if doHexDump { - indent := strings.Repeat(d.cs.Indent, d.depth) - str := indent + hex.Dump(buf) - str = strings.Replace(str, "\n", "\n"+indent, -1) - str = strings.TrimRight(str, d.cs.Indent) - d.w.Write([]byte(str)) - return - } - - // Recursively call dump for each item. - for i := 0; i < numEntries; i++ { - d.dump(d.unpackValue(v.Index(i))) - if i < (numEntries - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } -} - -// dump is the main workhorse for dumping a value. It uses the passed reflect -// value to figure out what kind of object we are dealing with and formats it -// appropriately. It is a recursive function, however circular data structures -// are detected and handled properly. -func (d *dumpState) dump(v reflect.Value) { - // Handle invalid reflect values immediately. - kind := v.Kind() - if kind == reflect.Invalid { - d.w.Write(invalidAngleBytes) - return - } - - // Handle pointers specially. - if kind == reflect.Ptr { - d.indent() - d.dumpPtr(v) - return - } - - // Print type information unless already handled elsewhere. - if !d.ignoreNextType { - d.indent() - d.w.Write(openParenBytes) - d.w.Write([]byte(v.Type().String())) - d.w.Write(closeParenBytes) - d.w.Write(spaceBytes) - } - d.ignoreNextType = false - - // Display length and capacity if the built-in len and cap functions - // work with the value's kind and the len/cap itself is non-zero. - valueLen, valueCap := 0, 0 - switch v.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - valueLen, valueCap = v.Len(), v.Cap() - case reflect.Map, reflect.String: - valueLen = v.Len() - } - if valueLen != 0 || !d.cs.DisableCapacities && valueCap != 0 { - d.w.Write(openParenBytes) - if valueLen != 0 { - d.w.Write(lenEqualsBytes) - printInt(d.w, int64(valueLen), 10) - } - if !d.cs.DisableCapacities && valueCap != 0 { - if valueLen != 0 { - d.w.Write(spaceBytes) - } - d.w.Write(capEqualsBytes) - printInt(d.w, int64(valueCap), 10) - } - d.w.Write(closeParenBytes) - d.w.Write(spaceBytes) - } - - // Call Stringer/error interfaces if they exist and the handle methods flag - // is enabled - if !d.cs.DisableMethods { - if (kind != reflect.Invalid) && (kind != reflect.Interface) { - if handled := handleMethods(d.cs, d.w, v); handled { - return - } - } - } - - switch kind { - case reflect.Invalid: - // Do nothing. We should never get here since invalid has already - // been handled above. - - case reflect.Bool: - printBool(d.w, v.Bool()) - - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - printInt(d.w, v.Int(), 10) - - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - printUint(d.w, v.Uint(), 10) - - case reflect.Float32: - printFloat(d.w, v.Float(), 32) - - case reflect.Float64: - printFloat(d.w, v.Float(), 64) - - case reflect.Complex64: - printComplex(d.w, v.Complex(), 32) - - case reflect.Complex128: - printComplex(d.w, v.Complex(), 64) - - case reflect.Slice: - if v.IsNil() { - d.w.Write(nilAngleBytes) - break - } - fallthrough - - case reflect.Array: - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - d.dumpSlice(v) - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.String: - d.w.Write([]byte(strconv.Quote(v.String()))) - - case reflect.Interface: - // The only time we should get here is for nil interfaces due to - // unpackValue calls. - if v.IsNil() { - d.w.Write(nilAngleBytes) - } - - case reflect.Ptr: - // Do nothing. We should never get here since pointers have already - // been handled above. - - case reflect.Map: - // nil maps should be indicated as different than empty maps - if v.IsNil() { - d.w.Write(nilAngleBytes) - break - } - - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - numEntries := v.Len() - keys := v.MapKeys() - if d.cs.SortKeys { - sortValues(keys, d.cs) - } - for i, key := range keys { - d.dump(d.unpackValue(key)) - d.w.Write(colonSpaceBytes) - d.ignoreNextIndent = true - d.dump(d.unpackValue(v.MapIndex(key))) - if i < (numEntries - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.Struct: - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - vt := v.Type() - numFields := v.NumField() - for i := 0; i < numFields; i++ { - d.indent() - vtf := vt.Field(i) - d.w.Write([]byte(vtf.Name)) - d.w.Write(colonSpaceBytes) - d.ignoreNextIndent = true - d.dump(d.unpackValue(v.Field(i))) - if i < (numFields - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.Uintptr: - printHexPtr(d.w, uintptr(v.Uint())) - - case reflect.UnsafePointer, reflect.Chan, reflect.Func: - printHexPtr(d.w, v.Pointer()) - - // There were not any other types at the time this code was written, but - // fall back to letting the default fmt package handle it in case any new - // types are added. - default: - if v.CanInterface() { - fmt.Fprintf(d.w, "%v", v.Interface()) - } else { - fmt.Fprintf(d.w, "%v", v.String()) - } - } -} - -// fdump is a helper function to consolidate the logic from the various public -// methods which take varying writers and config states. -func fdump(cs *ConfigState, w io.Writer, a ...interface{}) { - for _, arg := range a { - if arg == nil { - w.Write(interfaceBytes) - w.Write(spaceBytes) - w.Write(nilAngleBytes) - w.Write(newlineBytes) - continue - } - - d := dumpState{w: w, cs: cs} - d.pointers = make(map[uintptr]int) - d.dump(reflect.ValueOf(arg)) - d.w.Write(newlineBytes) - } -} - -// Fdump formats and displays the passed arguments to io.Writer w. It formats -// exactly the same as Dump. -func Fdump(w io.Writer, a ...interface{}) { - fdump(&Config, w, a...) -} - -// Sdump returns a string with the passed arguments formatted exactly the same -// as Dump. -func Sdump(a ...interface{}) string { - var buf bytes.Buffer - fdump(&Config, &buf, a...) - return buf.String() -} - -/* -Dump displays the passed parameters to standard out with newlines, customizable -indentation, and additional debug information such as complete types and all -pointer addresses used to indirect to the final value. It provides the -following features over the built-in printing facilities provided by the fmt -package: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output - -The configuration options are controlled by an exported package global, -spew.Config. See ConfigState for options documentation. - -See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to -get the formatted result as a string. -*/ -func Dump(a ...interface{}) { - fdump(&Config, os.Stdout, a...) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/format.go b/vendor/github.com/davecgh/go-spew/spew/format.go deleted file mode 100644 index c49875ba..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/format.go +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "reflect" - "strconv" - "strings" -) - -// supportedFlags is a list of all the character flags supported by fmt package. -const supportedFlags = "0-+# " - -// formatState implements the fmt.Formatter interface and contains information -// about the state of a formatting operation. The NewFormatter function can -// be used to get a new Formatter which can be used directly as arguments -// in standard fmt package printing calls. -type formatState struct { - value interface{} - fs fmt.State - depth int - pointers map[uintptr]int - ignoreNextType bool - cs *ConfigState -} - -// buildDefaultFormat recreates the original format string without precision -// and width information to pass in to fmt.Sprintf in the case of an -// unrecognized type. Unless new types are added to the language, this -// function won't ever be called. -func (f *formatState) buildDefaultFormat() (format string) { - buf := bytes.NewBuffer(percentBytes) - - for _, flag := range supportedFlags { - if f.fs.Flag(int(flag)) { - buf.WriteRune(flag) - } - } - - buf.WriteRune('v') - - format = buf.String() - return format -} - -// constructOrigFormat recreates the original format string including precision -// and width information to pass along to the standard fmt package. This allows -// automatic deferral of all format strings this package doesn't support. -func (f *formatState) constructOrigFormat(verb rune) (format string) { - buf := bytes.NewBuffer(percentBytes) - - for _, flag := range supportedFlags { - if f.fs.Flag(int(flag)) { - buf.WriteRune(flag) - } - } - - if width, ok := f.fs.Width(); ok { - buf.WriteString(strconv.Itoa(width)) - } - - if precision, ok := f.fs.Precision(); ok { - buf.Write(precisionBytes) - buf.WriteString(strconv.Itoa(precision)) - } - - buf.WriteRune(verb) - - format = buf.String() - return format -} - -// unpackValue returns values inside of non-nil interfaces when possible and -// ensures that types for values which have been unpacked from an interface -// are displayed when the show types flag is also set. -// This is useful for data types like structs, arrays, slices, and maps which -// can contain varying types packed inside an interface. -func (f *formatState) unpackValue(v reflect.Value) reflect.Value { - if v.Kind() == reflect.Interface { - f.ignoreNextType = false - if !v.IsNil() { - v = v.Elem() - } - } - return v -} - -// formatPtr handles formatting of pointers by indirecting them as necessary. -func (f *formatState) formatPtr(v reflect.Value) { - // Display nil if top level pointer is nil. - showTypes := f.fs.Flag('#') - if v.IsNil() && (!showTypes || f.ignoreNextType) { - f.fs.Write(nilAngleBytes) - return - } - - // Remove pointers at or below the current depth from map used to detect - // circular refs. - for k, depth := range f.pointers { - if depth >= f.depth { - delete(f.pointers, k) - } - } - - // Keep list of all dereferenced pointers to possibly show later. - pointerChain := make([]uintptr, 0) - - // Figure out how many levels of indirection there are by derferencing - // pointers and unpacking interfaces down the chain while detecting circular - // references. - nilFound := false - cycleFound := false - indirects := 0 - ve := v - for ve.Kind() == reflect.Ptr { - if ve.IsNil() { - nilFound = true - break - } - indirects++ - addr := ve.Pointer() - pointerChain = append(pointerChain, addr) - if pd, ok := f.pointers[addr]; ok && pd < f.depth { - cycleFound = true - indirects-- - break - } - f.pointers[addr] = f.depth - - ve = ve.Elem() - if ve.Kind() == reflect.Interface { - if ve.IsNil() { - nilFound = true - break - } - ve = ve.Elem() - } - } - - // Display type or indirection level depending on flags. - if showTypes && !f.ignoreNextType { - f.fs.Write(openParenBytes) - f.fs.Write(bytes.Repeat(asteriskBytes, indirects)) - f.fs.Write([]byte(ve.Type().String())) - f.fs.Write(closeParenBytes) - } else { - if nilFound || cycleFound { - indirects += strings.Count(ve.Type().String(), "*") - } - f.fs.Write(openAngleBytes) - f.fs.Write([]byte(strings.Repeat("*", indirects))) - f.fs.Write(closeAngleBytes) - } - - // Display pointer information depending on flags. - if f.fs.Flag('+') && (len(pointerChain) > 0) { - f.fs.Write(openParenBytes) - for i, addr := range pointerChain { - if i > 0 { - f.fs.Write(pointerChainBytes) - } - printHexPtr(f.fs, addr) - } - f.fs.Write(closeParenBytes) - } - - // Display dereferenced value. - switch { - case nilFound == true: - f.fs.Write(nilAngleBytes) - - case cycleFound == true: - f.fs.Write(circularShortBytes) - - default: - f.ignoreNextType = true - f.format(ve) - } -} - -// format is the main workhorse for providing the Formatter interface. It -// uses the passed reflect value to figure out what kind of object we are -// dealing with and formats it appropriately. It is a recursive function, -// however circular data structures are detected and handled properly. -func (f *formatState) format(v reflect.Value) { - // Handle invalid reflect values immediately. - kind := v.Kind() - if kind == reflect.Invalid { - f.fs.Write(invalidAngleBytes) - return - } - - // Handle pointers specially. - if kind == reflect.Ptr { - f.formatPtr(v) - return - } - - // Print type information unless already handled elsewhere. - if !f.ignoreNextType && f.fs.Flag('#') { - f.fs.Write(openParenBytes) - f.fs.Write([]byte(v.Type().String())) - f.fs.Write(closeParenBytes) - } - f.ignoreNextType = false - - // Call Stringer/error interfaces if they exist and the handle methods - // flag is enabled. - if !f.cs.DisableMethods { - if (kind != reflect.Invalid) && (kind != reflect.Interface) { - if handled := handleMethods(f.cs, f.fs, v); handled { - return - } - } - } - - switch kind { - case reflect.Invalid: - // Do nothing. We should never get here since invalid has already - // been handled above. - - case reflect.Bool: - printBool(f.fs, v.Bool()) - - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - printInt(f.fs, v.Int(), 10) - - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - printUint(f.fs, v.Uint(), 10) - - case reflect.Float32: - printFloat(f.fs, v.Float(), 32) - - case reflect.Float64: - printFloat(f.fs, v.Float(), 64) - - case reflect.Complex64: - printComplex(f.fs, v.Complex(), 32) - - case reflect.Complex128: - printComplex(f.fs, v.Complex(), 64) - - case reflect.Slice: - if v.IsNil() { - f.fs.Write(nilAngleBytes) - break - } - fallthrough - - case reflect.Array: - f.fs.Write(openBracketBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - numEntries := v.Len() - for i := 0; i < numEntries; i++ { - if i > 0 { - f.fs.Write(spaceBytes) - } - f.ignoreNextType = true - f.format(f.unpackValue(v.Index(i))) - } - } - f.depth-- - f.fs.Write(closeBracketBytes) - - case reflect.String: - f.fs.Write([]byte(v.String())) - - case reflect.Interface: - // The only time we should get here is for nil interfaces due to - // unpackValue calls. - if v.IsNil() { - f.fs.Write(nilAngleBytes) - } - - case reflect.Ptr: - // Do nothing. We should never get here since pointers have already - // been handled above. - - case reflect.Map: - // nil maps should be indicated as different than empty maps - if v.IsNil() { - f.fs.Write(nilAngleBytes) - break - } - - f.fs.Write(openMapBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - keys := v.MapKeys() - if f.cs.SortKeys { - sortValues(keys, f.cs) - } - for i, key := range keys { - if i > 0 { - f.fs.Write(spaceBytes) - } - f.ignoreNextType = true - f.format(f.unpackValue(key)) - f.fs.Write(colonBytes) - f.ignoreNextType = true - f.format(f.unpackValue(v.MapIndex(key))) - } - } - f.depth-- - f.fs.Write(closeMapBytes) - - case reflect.Struct: - numFields := v.NumField() - f.fs.Write(openBraceBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - vt := v.Type() - for i := 0; i < numFields; i++ { - if i > 0 { - f.fs.Write(spaceBytes) - } - vtf := vt.Field(i) - if f.fs.Flag('+') || f.fs.Flag('#') { - f.fs.Write([]byte(vtf.Name)) - f.fs.Write(colonBytes) - } - f.format(f.unpackValue(v.Field(i))) - } - } - f.depth-- - f.fs.Write(closeBraceBytes) - - case reflect.Uintptr: - printHexPtr(f.fs, uintptr(v.Uint())) - - case reflect.UnsafePointer, reflect.Chan, reflect.Func: - printHexPtr(f.fs, v.Pointer()) - - // There were not any other types at the time this code was written, but - // fall back to letting the default fmt package handle it if any get added. - default: - format := f.buildDefaultFormat() - if v.CanInterface() { - fmt.Fprintf(f.fs, format, v.Interface()) - } else { - fmt.Fprintf(f.fs, format, v.String()) - } - } -} - -// Format satisfies the fmt.Formatter interface. See NewFormatter for usage -// details. -func (f *formatState) Format(fs fmt.State, verb rune) { - f.fs = fs - - // Use standard formatting for verbs that are not v. - if verb != 'v' { - format := f.constructOrigFormat(verb) - fmt.Fprintf(fs, format, f.value) - return - } - - if f.value == nil { - if fs.Flag('#') { - fs.Write(interfaceBytes) - } - fs.Write(nilAngleBytes) - return - } - - f.format(reflect.ValueOf(f.value)) -} - -// newFormatter is a helper function to consolidate the logic from the various -// public methods which take varying config states. -func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter { - fs := &formatState{value: v, cs: cs} - fs.pointers = make(map[uintptr]int) - return fs -} - -/* -NewFormatter returns a custom formatter that satisfies the fmt.Formatter -interface. As a result, it integrates cleanly with standard fmt package -printing functions. The formatter is useful for inline printing of smaller data -types similar to the standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Typically this function shouldn't be called directly. It is much easier to make -use of the custom formatter by calling one of the convenience functions such as -Printf, Println, or Fprintf. -*/ -func NewFormatter(v interface{}) fmt.Formatter { - return newFormatter(&Config, v) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/spew.go b/vendor/github.com/davecgh/go-spew/spew/spew.go deleted file mode 100644 index 32c0e338..00000000 --- a/vendor/github.com/davecgh/go-spew/spew/spew.go +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2013-2016 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "fmt" - "io" -) - -// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the formatted string as a value that satisfies error. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Errorf(format string, a ...interface{}) (err error) { - return fmt.Errorf(format, convertArgs(a)...) -} - -// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprint(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprint(w, convertArgs(a)...) -} - -// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - return fmt.Fprintf(w, format, convertArgs(a)...) -} - -// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it -// passed with a default Formatter interface returned by NewFormatter. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, convertArgs(a)...) -} - -// Print is a wrapper for fmt.Print that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b)) -func Print(a ...interface{}) (n int, err error) { - return fmt.Print(convertArgs(a)...) -} - -// Printf is a wrapper for fmt.Printf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Printf(format string, a ...interface{}) (n int, err error) { - return fmt.Printf(format, convertArgs(a)...) -} - -// Println is a wrapper for fmt.Println that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b)) -func Println(a ...interface{}) (n int, err error) { - return fmt.Println(convertArgs(a)...) -} - -// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprint(a ...interface{}) string { - return fmt.Sprint(convertArgs(a)...) -} - -// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprintf(format string, a ...interface{}) string { - return fmt.Sprintf(format, convertArgs(a)...) -} - -// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it -// were passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprintln(a ...interface{}) string { - return fmt.Sprintln(convertArgs(a)...) -} - -// convertArgs accepts a slice of arguments and returns a slice of the same -// length with each argument converted to a default spew Formatter interface. -func convertArgs(args []interface{}) (formatters []interface{}) { - formatters = make([]interface{}, len(args)) - for index, arg := range args { - formatters[index] = NewFormatter(arg) - } - return formatters -} diff --git a/vendor/github.com/gosimple/slug/.gitignore b/vendor/github.com/gosimple/slug/.gitignore deleted file mode 100644 index 10a24424..00000000 --- a/vendor/github.com/gosimple/slug/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -_* -cover*.out -cover*.txt diff --git a/vendor/github.com/gosimple/slug/LICENSE b/vendor/github.com/gosimple/slug/LICENSE deleted file mode 100644 index a612ad98..00000000 --- a/vendor/github.com/gosimple/slug/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/gosimple/slug/README.md b/vendor/github.com/gosimple/slug/README.md deleted file mode 100644 index 7732dbcb..00000000 --- a/vendor/github.com/gosimple/slug/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# slug - -Package `slug` generate slug from Unicode string, URL-friendly slugify with -multiple languages support. - -[![Go Reference](https://pkg.go.dev/badge/github.com/gosimple/slug.svg)](https://pkg.go.dev/github.com/gosimple/slug) -[![Tests](https://github.com/gosimple/slug/actions/workflows/tests.yml/badge.svg)](https://github.com/gosimple/slug/actions/workflows/tests.yml) -[![codecov](https://codecov.io/gh/gosimple/slug/branch/master/graph/badge.svg?token=FT2kEZHQW7)](https://codecov.io/gh/gosimple/slug) -[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/gosimple/slug?logo=github&sort=semver)](https://github.com/gosimple/slug/releases) - -## Example - -```go -package main - -import ( - "fmt" - "github.com/gosimple/slug" -) - -func main() { - text := slug.Make("Hellö Wörld хелло ворлд") - fmt.Println(text) // Will print: "hello-world-khello-vorld" - - someText := slug.Make("影師") - fmt.Println(someText) // Will print: "ying-shi" - - enText := slug.MakeLang("This & that", "en") - fmt.Println(enText) // Will print: "this-and-that" - - deText := slug.MakeLang("Diese & Dass", "de") - fmt.Println(deText) // Will print: "diese-und-dass" - - slug.Lowercase = false // Keep uppercase characters - deUppercaseText := slug.MakeLang("Diese & Dass", "de") - fmt.Println(deUppercaseText) // Will print: "Diese-und-Dass" - - slug.CustomSub = map[string]string{ - "water": "sand", - } - textSub := slug.Make("water is hot") - fmt.Println(textSub) // Will print: "sand-is-hot" -} -``` - -## Design - -This library will always returns clean output from any Unicode string -containing only the following ASCII characters: - -* numbers: `0-9` -* small letters: `a-z` -* big letters: `A-Z` (only if you set `Lowercase` to `false`) -* minus sign: `-` -* underscore: `_` - -Minus sign and underscore characters will never appear at the beginning or -the end of the returned string. - -Thanks to context-insensitive transliteration of Unicode characters to ASCII -output returned string is safe for URL slugs and filenames. - -## Requests or bugs? - - - -If your language is missing you could add it in `languages_substitution.go` -file. - -In case of missing proper Unicode characters transliteration to ASCII you could -add them to underlying library: -. - -## Installation - -```shell -go get -u github.com/gosimple/slug -``` - -## Benchmarking - -```shell -go test -run=NONE -bench=. -benchmem -count=6 ./... > old.txt -# make changes -go test -run=NONE -bench=. -benchmem -count=6 ./... > new.txt - -go install golang.org/x/perf/cmd/benchstat@latest - -benchstat old.txt new.txt -``` - -## License - -The source files are distributed under the -[Mozilla Public License, version 2.0](http://mozilla.org/MPL/2.0/), -unless otherwise noted. -Please read the [FAQ](http://www.mozilla.org/MPL/2.0/FAQ.html) -if you have further questions regarding the license. diff --git a/vendor/github.com/gosimple/slug/codecov.yml b/vendor/github.com/gosimple/slug/codecov.yml deleted file mode 100644 index bd46b3e0..00000000 --- a/vendor/github.com/gosimple/slug/codecov.yml +++ /dev/null @@ -1,4 +0,0 @@ -comment: - layout: "diff, files" - behavior: default - require_changes: false # if true: only post the comment if coverage changes diff --git a/vendor/github.com/gosimple/slug/doc.go b/vendor/github.com/gosimple/slug/doc.go deleted file mode 100644 index f6f764e6..00000000 --- a/vendor/github.com/gosimple/slug/doc.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2013 by Dobrosław Żybort. All rights reserved. -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -/* -Package slug generate slug from unicode string, URL-friendly slugify with -multiple languages support. - -Example: - - package main - - import( - "github.com/gosimple/slug" - "fmt" - ) - - func main () { - text := slug.Make("Hellö Wörld хелло ворлд") - fmt.Println(text) // Will print: "hello-world-khello-vorld" - - someText := slug.Make("影師") - fmt.Println(someText) // Will print: "ying-shi" - - enText := slug.MakeLang("This & that", "en") - fmt.Println(enText) // Will print: "this-and-that" - - deText := slug.MakeLang("Diese & Dass", "de") - fmt.Println(deText) // Will print: "diese-und-dass" - - slug.Lowercase = false // Keep uppercase characters - deUppercaseText := slug.MakeLang("Diese & Dass", "de") - fmt.Println(deUppercaseText) // Will print: "Diese-und-Dass" - - slug.CustomSub = map[string]string{ - "water": "sand", - } - textSub := slug.Make("water is hot") - fmt.Println(textSub) // Will print: "sand-is-hot" - } - -Requests or bugs? - -https://github.com/gosimple/slug/issues -*/ -package slug diff --git a/vendor/github.com/gosimple/slug/go.mod b/vendor/github.com/gosimple/slug/go.mod deleted file mode 100644 index 2fd2e18f..00000000 --- a/vendor/github.com/gosimple/slug/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/gosimple/slug - -go 1.11 - -require github.com/gosimple/unidecode v1.0.1 diff --git a/vendor/github.com/gosimple/slug/go.sum b/vendor/github.com/gosimple/slug/go.sum deleted file mode 100644 index 725a8d00..00000000 --- a/vendor/github.com/gosimple/slug/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= -github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= diff --git a/vendor/github.com/gosimple/slug/languages_substitution.go b/vendor/github.com/gosimple/slug/languages_substitution.go deleted file mode 100644 index ad0963f5..00000000 --- a/vendor/github.com/gosimple/slug/languages_substitution.go +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2013 by Dobrosław Żybort. All rights reserved. -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -package slug - -func init() { - // Merge language subs with the default one. - // TODO: Find better way so all langs are merged automatically and better - // tested. - for _, sub := range []*map[rune]string{ - &csSub, - &deSub, - &enSub, - &esSub, - &fiSub, - &frSub, - &grSub, - &huSub, - &idSub, - &kkSub, - &nbSub, - &nlSub, - &nnSub, - &plSub, - &slSub, - &svSub, - &trSub, - } { - for key, value := range defaultSub { - (*sub)[key] = value - } - } -} - -var defaultSub = map[rune]string{ - '"': "", - '\'': "", - '’': "", - '‒': "-", // figure dash - '–': "-", // en dash - '—': "-", // em dash - '―': "-", // horizontal bar -} - -var csSub = map[rune]string{ - '&': "a", - '@': "zavinac", -} - -var deSub = map[rune]string{ - '&': "und", - '@': "an", - 'ä': "ae", - 'Ä': "Ae", - 'ö': "oe", - 'Ö': "Oe", - 'ü': "ue", - 'Ü': "Ue", -} - -var enSub = map[rune]string{ - '&': "and", - '@': "at", -} - -var esSub = map[rune]string{ - '&': "y", - '@': "en", -} - -var fiSub = map[rune]string{ - '&': "ja", - '@': "at", -} - -var frSub = map[rune]string{ - '&': "et", - '@': "arobase", -} - -var grSub = map[rune]string{ - '&': "kai", - 'η': "i", - 'ή': "i", - 'Η': "i", - 'ι': "i", - 'ί': "i", - 'ϊ': "i", - 'Ι': "i", - 'χ': "x", - 'Χ': "x", - 'ω': "w", - 'ώ': "w", - 'Ω': "w", - 'ϋ': "u", -} - -var huSub = map[rune]string{ - 'á': "a", - 'Á': "A", - 'é': "e", - 'É': "E", - 'í': "i", - 'Í': "I", - 'ó': "o", - 'Ó': "O", - 'ö': "o", - 'Ö': "O", - 'ő': "o", - 'Ő': "O", - 'ú': "u", - 'Ú': "U", - 'ü': "u", - 'Ü': "U", - 'ű': "u", - 'Ű': "U", -} - -var idSub = map[rune]string{ - '&': "dan", -} - -var kkSub = map[rune]string{ - '&': "jane", - 'ә': "a", - 'ғ': "g", - 'қ': "q", - 'ң': "n", - 'ө': "o", - 'ұ': "u", - 'Ә': "A", - 'Ғ': "G", - 'Қ': "Q", - 'Ң': "N", - 'Ө': "O", - 'Ұ': "U", -} - -var nbSub = map[rune]string{ - '&': "og", - '@': "at", - 'æ': "ae", - 'ø': "oe", - 'å': "aa", - 'Æ': "Ae", - 'Ø': "Oe", - 'Å': "Aa", -} - -// Norwegian Nynorsk has the same rules -var nnSub = nbSub - -var nlSub = map[rune]string{ - '&': "en", - '@': "at", -} - -var plSub = map[rune]string{ - '&': "i", - '@': "na", -} - -var slSub = map[rune]string{ - '&': "in", - 'Đ': "DZ", - 'đ': "dz", -} - -var svSub = map[rune]string{ - '&': "och", - '@': "snabel a", -} - -var trSub = map[rune]string{ - '&': "ve", - '@': "et", - 'ş': "s", - 'Ş': "S", - 'ü': "u", - 'Ü': "U", - 'ö': "o", - 'Ö': "O", - 'İ': "I", - 'ı': "i", - 'ğ': "g", - 'Ğ': "G", - 'ç': "c", - 'Ç': "C", -} diff --git a/vendor/github.com/gosimple/slug/slug.go b/vendor/github.com/gosimple/slug/slug.go deleted file mode 100644 index 14acce7d..00000000 --- a/vendor/github.com/gosimple/slug/slug.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2013 by Dobrosław Żybort. All rights reserved. -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -package slug - -import ( - "bytes" - "regexp" - "sort" - "strings" - - "github.com/gosimple/unidecode" -) - -var ( - // CustomSub stores custom substitution map - CustomSub map[string]string - // CustomRuneSub stores custom rune substitution map - CustomRuneSub map[rune]string - - // MaxLength stores maximum slug length. - // It's smart so it will cat slug after full word. - // By default slugs aren't shortened. - // If MaxLength is smaller than length of the first word, then returned - // slug will contain only substring from the first word truncated - // after MaxLength. - MaxLength int - - // Lowercase defines if the resulting slug is transformed to lowercase. - // Default is true. - Lowercase = true - - regexpNonAuthorizedChars = regexp.MustCompile("[^a-zA-Z0-9-_]") - regexpMultipleDashes = regexp.MustCompile("-+") -) - -//============================================================================= - -// Make returns slug generated from provided string. Will use "en" as language -// substitution. -func Make(s string) (slug string) { - return MakeLang(s, "en") -} - -// MakeLang returns slug generated from provided string and will use provided -// language for chars substitution. -func MakeLang(s string, lang string) (slug string) { - slug = strings.TrimSpace(s) - - // Custom substitutions - // Always substitute runes first - slug = SubstituteRune(slug, CustomRuneSub) - slug = Substitute(slug, CustomSub) - - // Process string with selected substitution language. - // Catch ISO 3166-1, ISO 639-1:2002 and ISO 639-3:2007. - switch strings.ToLower(lang) { - case "cs", "ces": - slug = SubstituteRune(slug, csSub) - case "de", "deu": - slug = SubstituteRune(slug, deSub) - case "en", "eng": - slug = SubstituteRune(slug, enSub) - case "es", "spa": - slug = SubstituteRune(slug, esSub) - case "fi", "fin": - slug = SubstituteRune(slug, fiSub) - case "fr", "fra": - slug = SubstituteRune(slug, frSub) - case "gr", "el", "ell": - slug = SubstituteRune(slug, grSub) - case "hu", "hun": - slug = SubstituteRune(slug, huSub) - case "id", "idn", "ind": - slug = SubstituteRune(slug, idSub) - case "kz", "kk", "kaz": - slug = SubstituteRune(slug, kkSub) - case "nb", "nob": - slug = SubstituteRune(slug, nbSub) - case "nl", "nld": - slug = SubstituteRune(slug, nlSub) - case "nn", "nno": - slug = SubstituteRune(slug, nnSub) - case "pl", "pol": - slug = SubstituteRune(slug, plSub) - case "sl", "slv": - slug = SubstituteRune(slug, slSub) - case "sv", "swe": - slug = SubstituteRune(slug, svSub) - case "tr", "tur": - slug = SubstituteRune(slug, trSub) - default: // fallback to "en" if lang not found - slug = SubstituteRune(slug, enSub) - } - - // Process all non ASCII symbols - slug = unidecode.Unidecode(slug) - - if Lowercase { - slug = strings.ToLower(slug) - } - - // Process all remaining symbols - slug = regexpNonAuthorizedChars.ReplaceAllString(slug, "-") - slug = regexpMultipleDashes.ReplaceAllString(slug, "-") - slug = strings.Trim(slug, "-_") - - if MaxLength > 0 { - slug = smartTruncate(slug) - } - - return slug -} - -// Substitute returns string with superseded all substrings from -// provided substitution map. Substitution map will be applied in alphabetic -// order. Many passes, on one substitution another one could apply. -func Substitute(s string, sub map[string]string) (buf string) { - buf = s - var keys []string - for k := range sub { - keys = append(keys, k) - } - sort.Strings(keys) - - for _, key := range keys { - buf = strings.Replace(buf, key, sub[key], -1) - } - return -} - -// SubstituteRune substitutes string chars with provided rune -// substitution map. One pass. -func SubstituteRune(s string, sub map[rune]string) string { - var buf bytes.Buffer - for _, c := range s { - if d, ok := sub[c]; ok { - buf.WriteString(d) - } else { - buf.WriteRune(c) - } - } - return buf.String() -} - -func smartTruncate(text string) string { - if len(text) < MaxLength { - return text - } - - var truncated string - words := strings.SplitAfter(text, "-") - // If MaxLength is smaller than length of the first word return word - // truncated after MaxLength. - if len(words[0]) > MaxLength { - return words[0][:MaxLength] - } - for _, word := range words { - if len(truncated)+len(word)-1 <= MaxLength { - truncated = truncated + word - } else { - break - } - } - return strings.Trim(truncated, "-") -} - -// IsSlug returns True if provided text does not contain white characters, -// punctuation, all letters are lower case and only from ASCII range. -// It could contain `-` and `_` but not at the beginning or end of the text. -// It should be in range of the MaxLength var if specified. -// All output from slug.Make(text) should pass this test. -func IsSlug(text string) bool { - if text == "" || - (MaxLength > 0 && len(text) > MaxLength) || - text[0] == '-' || text[0] == '_' || - text[len(text)-1] == '-' || text[len(text)-1] == '_' { - return false - } - for _, c := range text { - if (c < 'a' || c > 'z') && c != '-' && c != '_' && (c < '0' || c > '9') { - return false - } - } - return true -} diff --git a/vendor/github.com/gosimple/unidecode/.gitignore b/vendor/github.com/gosimple/unidecode/.gitignore deleted file mode 100644 index 83656241..00000000 --- a/vendor/github.com/gosimple/unidecode/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test diff --git a/vendor/github.com/gosimple/unidecode/LICENSE b/vendor/github.com/gosimple/unidecode/LICENSE deleted file mode 100644 index 50802eab..00000000 --- a/vendor/github.com/gosimple/unidecode/LICENSE +++ /dev/null @@ -1,203 +0,0 @@ -Copyright 2014 Rainy Cape S.L. - -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. diff --git a/vendor/github.com/gosimple/unidecode/README.md b/vendor/github.com/gosimple/unidecode/README.md deleted file mode 100644 index 3f95400c..00000000 --- a/vendor/github.com/gosimple/unidecode/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# unidecode - -[![Go Reference](https://pkg.go.dev/badge/github.com/gosimple/unidecode.svg)](https://pkg.go.dev/github.com/gosimple/unidecode) -[![Tests](https://github.com/gosimple/unidecode/actions/workflows/tests.yml/badge.svg)](https://github.com/gosimple/unidecode/actions/workflows/tests.yml) - -Unicode transliterator in Golang - Replaces non-ASCII characters with their -ASCII approximations. - -Fork of https://github.com/rainycape/unidecode - -## Example - -```go -package main - -import ( - "fmt" - - "github.com/gosimple/unidecode" -) - -func main() { - decoded := unidecode.Unidecode("Łódź") - fmt.Println(decoded) - // Output: Lodz -} -``` - -### Requests or bugs? - - - -## Installation - -```shell -go get -u github.com/gosimple/unidecode -``` - -## Benchmark - -```shell -go test -run=NONE -bench=. -benchmem -count=6 ./... > old.txt -# make changes -go test -run=NONE -bench=. -benchmem -count=6 ./... > new.txt - -go install golang.org/x/perf/cmd/benchstat@latest - -benchstat old.txt new.txt -``` - -## Add new characters - -1. Edit `table.txt` file. -2. Rebuild `table.go` file: - - ```go - go run ./make_table.go - ``` diff --git a/vendor/github.com/gosimple/unidecode/decode.go b/vendor/github.com/gosimple/unidecode/decode.go deleted file mode 100644 index f99e0bbb..00000000 --- a/vendor/github.com/gosimple/unidecode/decode.go +++ /dev/null @@ -1,44 +0,0 @@ -package unidecode - -import ( - "compress/zlib" - "io" - "strings" -) - -const ( - dummyLenght = byte(0xff) -) - -var ( - transliterations [65536][]rune - transCount = rune(len(transliterations)) -) - -func decodeTransliterations() { - r, err := zlib.NewReader(strings.NewReader(tableData)) - if err != nil { - panic(err) - } - defer r.Close() - b := make([]byte, 0, 13) // 13 = longest transliteration, adjust if needed - lenB := b[:1] - chr := uint16(0xffff) // char counter, rely on overflow on first pass - for { - chr++ - if _, err := io.ReadFull(r, lenB); err != nil { - if err == io.EOF { - break - } - panic(err) - } - if lenB[0] == dummyLenght { - continue - } - b = b[:lenB[0]] // resize, preserving allocation - if _, err := io.ReadFull(r, b); err != nil { - panic(err) - } - transliterations[int(chr)] = []rune(string(b)) - } -} diff --git a/vendor/github.com/gosimple/unidecode/go.mod b/vendor/github.com/gosimple/unidecode/go.mod deleted file mode 100644 index 3566dabe..00000000 --- a/vendor/github.com/gosimple/unidecode/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/gosimple/unidecode - -go 1.16 diff --git a/vendor/github.com/gosimple/unidecode/make_table.go b/vendor/github.com/gosimple/unidecode/make_table.go deleted file mode 100644 index 41a52e5d..00000000 --- a/vendor/github.com/gosimple/unidecode/make_table.go +++ /dev/null @@ -1,80 +0,0 @@ -//go:build none -// +build none - -package main - -import ( - "bytes" - "compress/zlib" - "encoding/binary" - "fmt" - "go/format" - "io/ioutil" - "strconv" - "strings" -) - -func main() { - data, err := ioutil.ReadFile("table.txt") - if err != nil { - panic(err) - } - var buf bytes.Buffer - previousVal := int64(-1) - for _, line := range strings.Split(string(data), "\n") { - if strings.HasPrefix(line, "/*") || line == "" { - continue - } - sep := strings.IndexByte(line, ':') - if sep == -1 { - panic(line) - } - val, err := strconv.ParseInt(line[:sep], 0, 32) - if err != nil { - panic(err) - } - - if previousVal+1 != val { - rangechars := 0 - for i := previousVal + 1; i <= val-1; i++ { - if err := binary.Write(&buf, binary.LittleEndian, uint8(0xff)); err != nil { - panic(err) - } - rangechars++ - } - fmt.Printf("Filled dummy range: 0x%04x - 0x%04x (%4d chars)\n", previousVal+1, val-1, rangechars) - } - - s, err := strconv.Unquote(line[sep+2:]) - if err != nil { - panic(err) - } - if err := binary.Write(&buf, binary.LittleEndian, uint8(len(s))); err != nil { - panic(err) - } - previousVal = val - buf.WriteString(s) - } - var cbuf bytes.Buffer - w, err := zlib.NewWriterLevel(&cbuf, zlib.BestCompression) - if err != nil { - panic(err) - } - if _, err := w.Write(buf.Bytes()); err != nil { - panic(err) - } - if err := w.Close(); err != nil { - panic(err) - } - buf.Reset() - buf.WriteString("package unidecode\n") - buf.WriteString("// AUTOGENERATED - DO NOT EDIT!\n\n") - fmt.Fprintf(&buf, "const tableData = %q;\n", cbuf.String()) - dst, err := format.Source(buf.Bytes()) - if err != nil { - panic(err) - } - if err := ioutil.WriteFile("table.go", dst, 0644); err != nil { - panic(err) - } -} diff --git a/vendor/github.com/gosimple/unidecode/table.go b/vendor/github.com/gosimple/unidecode/table.go deleted file mode 100644 index 8f9441e1..00000000 --- a/vendor/github.com/gosimple/unidecode/table.go +++ /dev/null @@ -1,5 +0,0 @@ -package unidecode - -// AUTOGENERATED - DO NOT EDIT! - -const tableData = "x\xda\xec\xbd\t\u007f\x1bǕ/\xaa\xaajHN\xe6\xed\xfb\xfe\x10\xdf;C\xc92)\x91\x94,%\x93\xd8&\x00\x11\x10\xb1\b$ \x11\x80c\x87E\xa2\x84.bi\x12@\v\x02\xaf\xaf\xdfG\xcf\xfb\x9d\xad\xba)\xc9\x13;v\x96;!\xc1.l\x8d\xee\xea\xaaS\xe7\xfc\xcf\xda\xea\x96RJ+\xa3\"UP\xb7\xd5\x1d\xf5\x91\xfa\x85\xfa\xa5\xfa'\xf5_\xa9\xffZ\xfd7\xea\xbfU\xff\x9d\xfa\xef\xd5\xff\xa0\xfeG\xf5?\xa9\xffY\xfd/\xea\u007fU\xff\x9b\xfa\xdf\xd5\xff\xa1\xfeO\xf5\u007f\xa9\xff[\xfd?\xea\xffUE\xf5+\xf5\xb1\xfa\x0f\xea?\xaa\u007fV\xff\xa26\xd4]uO}\xa2\xee\xabOզ\xdaR\x0f\xd4C\xb5\xadvԮz\xa4\x1e\xab\xcf\xd4\x13\xf5T\xfdZ\xfdF\xfd\xab\xfa\xad\xfa\x9d\xfa\\}\xa1\xbeT{\xaa\xa4ʪ\xa2\x9e\xa9}UU5\xf5\\\x1d\xa8\xbaj\xa8\xa6j\xa9\x17\xaa\xad\x0eՑꨮz\xa9^\xa9c\xd5S}5P_\xab߫\xaf\xd57\xea\x0f\xeaDYu\xaa\xce\xd4P9\xf5Z\x8dT\xac\xbc:Wc5QS5S\x89\xbaP\x97j\xae\x16j\xa9R\xf5F\xad\xd4[\xb5VW\xea?\xa9o\xd5\u007fVߩ\xff\xef֟\xf8\x83\xeb\xd3\xe5\a\xba\xdd\xd1\xff\xf1\v\xdd\xff\x9d\xfaVw:\xeacs\xf7잲\xfa\xb7\xbfU\xbf\xbae\xee\xce\xef\xa9M3t#}\u007f\x13\xafuC\xa5\xaa\xad>Q\x9f\xaam\x95\xe8\xcf?7\xdb\x0f\x1e\x99\xed\a;f\xf7\xc1#\xf5\x85\xda\xcb\x1ez\xef\x99*\xabg\xfcxΏ\n^\xb9<ު\x17\xea%?\xfa\xba\x1b\xeb\xc5B\xd9졭Sg\xca\xf1\xc3\xf3c\x88\x17/\x8f\a*Q)?\xd6z\x19\xab\xb5\xdaS6leuvm\xab\xa8!nϔ{o\xab\xaaѵ\xad\xa6bܞ+\xff\ue99f\x1fh\u007f\xae\x0eԹ\xaa\xab\xb1\x1a\xab\x86\x9a\xbc\xb7\xb5\xd4L6\xbd1ӳ\x91nU\xd5\v\x95Ȧ_<ӉSGj\x1e\xb6\x8eZ\\ۺj\x19\xb6\x97*\xfd\xe0v\xacV\xaa\xaf\xd6HS\x9f\xa9\x17|\xf1\x15\xbc\xf8\xa1\xdaU_\"Q\xbeVUU\xd5\xf1\x1b\x9c\x9b:\xd2\xd6D\x1dc\xaf_P\x17\x9f\xebī\xb6\xba\xd0\xfd#\xb5\xa3vt\xa7\xa6\x17q\xe8\x15\x9c\xbf\xaf^\xe1\xf9\a\xeaJ\x0fj\xf0\u007f\x15\xeb\xabX\xed\xa8\xc7\xea\xb1^.\xd4J}\xab\xbf\xfdV\u007f\xfb;\xf5+]\x19\xe8ʕ\x1e^\xe9Ɓn\x9c\xebɹn\x1d\xe8ֹ\x9e\x9d\xe3t\xc1\xf0\xc2\xe8|\xe8:\xbf\x94I\xd5{π2d\x9a\xa0\xdb2\xa2xru\x1eN\x03;\xe8\xda+\xbe\xa4췰\xbf\x90\x88L\xbfL\xaf̐̉\x9c_\xe6\x03\xae\x15Ȣ\xa5\x86\xfa\xc5K\x9d\xa48\xder\xa4\xdc\xfc\xe2\x06{O\xd4L-չ\x1e\x9e\xea\xcb\v\xb5\x87s\xd1P]\xb5PW\xe6\xab/\xbe\x86M\x95\xd4K\xf5\r\x1e\x01\x88\xeaR]\xe2\xb9\xe1״\x18NU\x82\xac\x00\x98\xc1\x97\xea˰*\xceՈ\x1f0\x1312\t\xb8\x0e\x98ȉ\x9e\fԱ:F~\x01\x0f 9\xf5B\xed\xab\xf9\xb5Ǒ:Bz;W\x1d\xd5QKd(/\xd5\x1b\xf5\x8dZ!]]!M\r\xd4\x17\xf8(\xab/UI=C\x86v\x8e\xa4\u007f\t\x9fä\x0e\a\xd0.\x17z\xd9\xd1˲~\xddғ\x85\x9e\\\xe9\xe3c\xfd\xf5\xd7ع\xb1\x8a\xd5y81\x1c~C}\xacNԆ:\xc1\x16N\xf0[\xf5\xb9\xfaF\xbd\xc2mCm\xaa\a\xea\xf7\xeaS\xf5\a\xf5{\xf5@\xfdFm\xe1~\xf0\xdd}\xb5\xa9^\xa9-\xf5\xa5\xfaT}\xa7>VG\xaa\xa7\xaaj\xa2\x16\xea\xad\xfaB\x98\xdc+\xf5;\xf5\xb1\x8c\xf2\x9f\xbb\xfd\xf1\xd6\xcf\xfb\xf7S\xfb\x03\x1b\\\x9cE\xb6\b\f\x10H#VS5WK\xf5F\xbd}wg\xb5\xa1>}\xef\x00\xd7v\xf8\xe2\xc3\xe7P{\xea_\x89\x81\xe3^/\xb0}\xa9^\xa8\xe7(ܪ(\xdc\x06\xea\x99\xee\xc6\xc8AP\xb6\xe9\xfa\x02\xc5\xdb\x11\xee\x8d\x02N\xb7c]\x8fu{\x81?}\x89=\x87\xbe\xa7H\xda#$\xeb+倁\xfb \xe2ޢ\x90\x03\x11\x87BN_\xc4z\x1c닅J\xf0\x97p\xdd\t\x9e\xe2\x14~\x87bD_\xc4\xeaB\xfd\x8b\\\x80\xee,\xf5b\x89,\xf2P]\xea΅^\\\xe8N\f,l_\xbd\x86\x1e\x8d\x89\xc7\x03\x9f(\xd7\xf4Y\xac\xbb^/\xa1\vsu\xa6\xce\u007f\x14\x91\xe8\xe7N?Ot\xe5\\W\xcf\xe1u\xe5J=\xd7}\xaf\x90ӵ\xceMw\x11\xeb\xfa9\\\xbe\xa9\\\xc58~\xafh\x04\xf5 V\x03\xe6\xc1\x19:\x10l\xb0\x0f\xfd\xec.t9֝8\xea\xc4g\xb1\xdaP}\xb5\xa1\x9e\xe9\xe7\xa9~N\xdc\xe1\r\r\"\xb0\xbf+d\x01y\x9c (\xe15\x8c\xdfr\x01\x97\xb9\x88\xa3\x05\x1d\t\x96\xa0\xd3>\xd5\xdej\xef\xb4O\xf4\xf0\\\x8f\xce\xe1\xf5\xf0Jy\xbd\xf6\n\x19\xf5\xec\xdc,\x17\xb1\x1e\x9f\xc3\xe0\x9b\xe1U\x8c\xfc\xed\x99rp\xad\xde\xe5^\x01'~\x9e\xc0\x91\xea\v=^\xe8\xf6\x02&\r\xa4\rɩ5J\xeb \x05\x97:Y\xc2\xf4\xdc\xfed\xfb\xe1Ç\x9f\xc8\x02\xf9\x05\xbc݂O\xfe\xe9\x93mx\xc6ׁ`?V\x1f\xeb\xa3\r=\xdf\xd0\xd5\r=\xba֚A\xbca\xae\xe2\r=\xd8\xd0W\x1b\xba\xbe\xa1\xc7\x1fj[\x1bz\xb6\xa1[#\x90\xcc\xed\r}\xb1A\xf4\xa0;\x1bz\xb1\xa1\xbb\x1bz\xb9\x01\x8c_\xbf\xdc\xd0醩\xc7\x1bf\x1co\x98\xeera\x96˅)\xc7\x1b\xe6,ސg\xa0\"\x98\xa1\xb38|r\xa2\a \b\xe9l\x81\"\xf1\xac\xe1\x1d\xfd\"\xbf\x10\xad\b9\xa7\xad\f\xe8\x97\xf4\xa0㡠%\xe9\xf6\xae\xc8\xe2\tɋ\xcd\xebg\x80\xc1\xff \xed\xfe\x1c\x1c\xe9o\xbd]\xe7H\xc0\x93`\x06\xd4sՠ\x05\xa4\xea\xaa\x06\x03W\x85\x89RM\xd5W-݉\xd5\vS\x8eOT[\x1d\xe8\xa3Xu\xd4+\xd5UG\xa6\xbb8QǺ}\xa2\xeb' 0\xc3)~\xab6\xd4\x03\xf5+\xf5\xa9\xfaBm\xf1|\xe5\xf8\x17p\xb0\x13\x98#\xaf&\xb4\xd6@\xe2\x81P\x1c\xc14\xa8\xa9Z\xab\x19p\x9fĜ\xc5'\xeaB\x9d\xeby\xac\x16\xea\x8dZ\xaa\xb9Y.N\xd4J_\x9c\xe8\xf1\x89J\xd4k\xedVx\x86-\xb5\xf9o\b\x81\xf7%\xcbu\x94\x0fP\xc1\"\xc7t\xf8\xca2\xcfL\xd5\x06\xef\xf1\x9b\x1f%\x8fn\xf1\xf5\xc6ꍺ\x02\xf6\xb9Tk\x84\xc0\xc0n\bh,\x14\\\xda\x05\x02\x81\x05()\b\x19?8e\xaft\xb2V\x1e@\xc0\x0ff\xb3?\x9a,>\xfd\xb3\t\xea_\xdf\x17\x91 t7\xf4j\xe3\x96^o\xc0P|\xa9\x96 |\xceU\r\xc6b\xa8\x87\xb1\x9a\x03\xfc\x86K\uea0aꪁ:Q\xd5\x0f\x8f\xe4ku\x19\xf8t\xacV\xea;\xb5\xd6v\xa6ә\xf63eU\xaa\xbc:\xbeuKm\xa8\x8d\x1f\xdc\xe5\x0f)\xa5\xff\xac\xb6ԧ\xea\x93\xec\xbc\x1b\xf0\xb8\xa56\xf4\xc6Jo\xa4zc\xad\x97K\xb3\\\xc6\xea\x14Q\xfd\x85^\xc6\xfa4\xd6\x1b\xb1\xaa\xe9\xd9Z\x0f\xd7\nD\xa39;\x8b\xf5\x10\xf4\xa7\x8a\xae,\xf506\xc3a\xac\xe8\xfd\x9cP\xa4<\xceQxɣ\xab\xab5\xb5\x8f\x8f7\xea5\x88\xe8Cu\b\xc35VuU\xd73\xc0\xf0\x80\xe5[\xa0\x8d\xa8\xaaj\xf0\xa3\x15\x1e\xc8Z\xe35*d_\xaac\x9d8МR\xbd\x86\u007fu\xacޠ\\\xe9\xe3h\xad\xf5zCmi\xeb\xb2\x15\xf0\x1fr\xeb\xe1\x9b<\x00\xfb\xd0p\x01O\xa8\xe8j\xac\xfeEߟ\xfeQ?x\xa0\x1e\xa8OկԯԦ\xfaT}\xaa\xfeU}\xa1\xbeS\xffI\xfdg\x1a\xd1[j\x83\x96\xc4\b\xd19L㕪!\x8a^\xebu\x1c\xe6w!\xcbBu>\xb8$\x18\xe7\x93\xf6L\xd8\xfe\x19\nr\xd2m\x93[\x80{o\xddR=u\x88\xd2\xe0[u\xff\xdf\x03\xd3~\x8f\x80\x11\x9c\xcd\xd4\\\x9d\xaa\x86\x1a\xab\r\xf5FM\xd5k=\x8ca\x99M\xd4H\xcf\xd6j\xa1\x86\xea\n\x19\x0fpгX/\x97:Fٽ\x8c\xd5\x15\x1c\x00\xf6X\xaa+u\xa2G\xb1\xbaT+e\xb5\xb5\xcak\aT\x93$\xcai\xb7V\x89N\xec\xad\u007f\x8f\x83\xf8\xd7\xd8\xfe\xf8\x8f\xfe\x87\xd4\n̩F˗\b\xcc{\x95\xea4UG\xaa\xa1]\v\x11\x81\xf5:i\xa9D%ڦj\f|o\x04p`6Rg\x80\t\xce\xf5y\f\\\x96X\xb0\x1e\x0e\x81\xad\xeaٌ\x04\vJ\x94\x99\x99\xcdf\xea\x028\xe7\xa9>%\x181\a\x9e;Q\x133\x99L\xd4\x1b\xbd@\xe3\xd9B\xc59\x95o\xe3\x9d.飣\x0f\xf5)[\x02{/\x9b(\x1bN\xae\v\x1cui\xc6qlFq\xac\xae\xa2!\xf4n\x1e\xab\xd7z\xbd\x86\x036\x1a\xaa\xa1\x1b\rS|P\x8c\x8a\x0f\x1e\x14?(\x81\xb6~2[\xf8\xfe\x81\xd6GGa/\xb8\xb0\xf0槌7\xfc\xfe\x9d\xf1\xc6\xcf&\xf9N}h\xd0\xf1\xf3\x1f\xd1\xc1\x1f\xc4\u007f\xdeg\xf5z>\xd7s<\xed;\xd3\xf0o\t\xb6\xf9\x86\x9e\x9f\xe8\xa3\x05\xfco?\xd0;\x0f\xf4\xee\x03\xfd\xe8\xc1\x9d\xe2vq\xb3\xb8\xfd\xc0<\xd8\xfe\xec\xd6\xf7\xc2-\xd5\xca$յ\v|\xafk.\u007f\x91:\xf9\xb9\xa6\xe14?\rz\x823\x81\x84\x8f/\xfe\xedI\xf8!}\xfcq\x92 ,\b=\xa7.\xbd\xfeѰ\xac\xa5j\xb7nݮn=\xdbz\xb1\xf53\xae\a\xba\xbeV 7\x9d\xb4~\xee\xe5\xa0\xd7\xf6C\x13\xf1C9\xd0\a\xbbv\x8d\v\xfd\x14V\x91[n\u007fj\n~\x92\xfc\xfb\x93\xfc\xff\xafȕx\x16n\xfd\xa0I\xb86*?\x9e!\xa9\xfb?\x88\x1d\xfd\x90\xf1\xffY\xc0\xd7\xf7\xcc\xc0;W\x19\x16<\xa0>\x9a\x83k\x17\x00\xf3\x80_\x9f\xd3[\x9c\x89k;\xcc\xde\xc1\xeb,\x94\xaf}\x96\tf\x98\x11\x94\xcc$(\xae\xcdI8\xe6\x8f\xe9\xef\x9f)(~\x8a\xe2\x18\xdd\xdf~x\xbfp\u007f\xfb\xe1\xc3\xfb\xb7\xa1}x\xff/\xb3H><=?\xdb\x12\t\xf3\xf1=|\xea\x83\xd3\x11\xc4\xf6\x8f\x9e\x8b\x0f\xad\x8f\xef\xe1S?p\x99\xfcl\xba\xd5\xcd4\xe4\xb6\tu\xe5\xaf3\r\u007f\xfc;\x9b\x83\xefQ\x1a\xbeg\x0e\xde\xe5K\xb7~f\xa6\xf47^\n\xda:c\xad{\x87\xea\x10O\xcb\x15\xcb\x05_;F~^\xcc읹1糵\x99\xad\xcfߛ\xa3h6\x1b\x0eߝ(=\x1b^\x03X\xd3\xd3\xf7U\x8e\xfc\x84\xe9\xc9\xe4:\xe2\xbc\xf5\x81)\xbc~]\xf8!\xc9\x19u\xf4\xeeu\xa9\xc6\xcf5\xb2<\x97ŭ\xe2\x8f\x13\x120\x98\xd7\xfeg#48\xe6\xfe\xd5Z\xd1\xc0ѿ\x9a\xbd\xfb\xf6\x94\xc6\xf0uh\x90\xe8\xd5\x11\x06d\xac\xd0\x04\xb7P\xb1\x9a\xa8\x13\x15\xab\xef(\xc4\xc4j;\xc5\x11ҩ3i\xea\x88\x00\xde7\xb8\x96\xe2-\x00K\x0e@\x92\xc7\xffD\xddg\x9bb\xf3\x96)~\xf2A\xcd\x17U\xe2B\xf1\xc1\x83\aſKk\x1b\x8c:\xce\xda8\xceA!\xf6\x18\xa9E\xf6\xd9\xfa{\x0f1T<\x01\x84\x8a\xaeOB\x86\x8a2ZV\xab\xf0[f=\xea\xe4\x16Lǭ\xdcl\xa8\xb5^\xaf\x030R\x89\x9a\xe4\xfa\x00\xd4\v\xa4k\xd7\xc2*\xef\aLJj\xfe\x10\xfe\xa1㙎\xa7\u007f\x17v4\xd0w\xd88\x8d\xd4\x02\xa4tKm\x9a\"\xbcd\xa3JT܄\xe6>4\xbd\a\xc5\xdb\xc5\a\xbd\x1e\xd2U\xefAQ\u007fZ\xcc\xfb{>\xa4\xf8o=6\xdb[\x8f\xcd\xce\xd6c\xb3\xbb\xf5\xd8<\xdazl\x1eo=6\x9fm=6O\xb6\x1e\x9b\xa7[\x8f\xcd\xe6\xd6cu_}\xa2\xbeQ\u007f\xb8\xa5\xbe\xc3\xe1\xfbZ\u007f\xf5\x95\xfe\xfa\xeb[\xb7>$\x80r(\xf9{%\xd05\x8e\xb6\\\xa0\xfbxx\x85\xae\xe3\x159\xaa7p}N@\x89_\xa0\xd56V\u058c\x17\v\"\x97\x0f\xb2\x97\xf7\xd0AƧ\x91\x99\xa9\xa6\xaa\xe1\x1e\xdf\x1fn\xf1\u05f8\x1e\xe6\xd3|9\xab\xb0\x02z\x85\xe2oz\xbf\x81\xa9{\x81\x13\x98@\xfb\xfb\xe4\xf7\xc5B\xf1\xee\x8b{\xc5\xf7\xfa\xfc_\xb4}\xfa\x8f\xdf\x0f]\xcc\xec\x03\x83\xad\x97\xdf3\xda4\xac\xc8\xc2Q\xf4Y\x1cˌ\x0e\\P_ߧ\x91\xbc\x86ˢ\u007f\xe3\xdf\xf0y~\x90k\xc8:ԳO\xf4\xfc\x13=\xf9D\xbbOx\x923\x12\f\xafn\xdc\x03\u007f\xd2A\xffJ\rt\xf7\xe4z\xc0\x8b\x1e\xc4\x12\xf3B\x9ew]\xddP\x87\xba\x13\x9br|\xa2\xcb'z\xb0\xa1ʺ\x1c\xab\x9e:P5\xf5L\xf5ձ\xee\xc5\xfaų\x1f܁\xccY\xffF]\xe9\xe5\xc9\xf58\x19X\xc3s\x895:\xd1\xe3\x13=\xdaP\x97\xc0\x9c\xce\xe2\x13}v\xa2\xaf6\x88\x86ߪs\x15+\xa7\xd6j\xa5\xdf\xc6:q\xef[\xff\x88\x95_[\v#=\x1a\x01f\xd1á\x9a\xab)\xd94\x17z\xb1\xb8\x05\x8b\xe2\\\x9d\xa9\xb1Z\xaa\v\x05k\x05\x16\xc3l\xa8g\xa7z8\xd2\xf3\x19\xd9W\xf4\xbc\xa5\xa7\xa7z\xdaҧ#}:\xbb\xa5O\x17\xe6t12\xa7\x8b\xa59]\x9c\x9a\xd3\x05\xbc?ק\xe7\xfa\xf4L\x9f.\xf5\xe9\x85>m\x99\xd3Ӗ^\x8c\xf4b\xa6\x17C\xbd\x98\xeb\xc5T/N\xcd\xe2td\x16\xc0\xa4\xf4\xe2\\/\xce\xf4b\xac\x17K\xbd\xb8Ћ\x18\xe5\xc8\x00\aj\xaaN\xd5B\rn)\xe8\x1et\xae\xa5\xce\xe1k}6\xd6g\xf1\xad[\xfa\xe2T_\xb4t\x1c\xab\xc3\xef\t \x03\x14\xaa\xd7֬\xad\xd3.Qά]\xa2\xd7\xc0\xabW֬\xacӉ\xd3\xebD\xa5f\xe5\x12\xbdrz\xe5\xf5:\xd5.\xd5k\xaf\xbc\xb1\x9b\x89\xb1\x9bi\xb4\xb6\x9bIam7\xd7I\xe4\x92Ml҂K6]ZX\xc3\aئQ\xb2\xe9\x12\x93l\xba(\xd9\\;\x93l\u009b\xb4\xb0N6\xd7\xf66\xb6\x0e\x9f\\\x12\xad\xe1(\xebdӛt\xd3F\xe9\xa6uw\xd2M<`\x94\xc2oS8i\xbai\vk\xf8\x18^\xba\xdbk\xf8&)\xe0\x13|\x82{\xf8ȥЗ\x14~\xba\xf6\x9b\xa9\xf1\x9b6\xf2\x9bkk\xfcfb\xfcf\x1a\xf9M\a\x9f\xbeT/\xa3\x97\xd0\xc1\x97\x9b\xa9y\xb9\xe9\xf5˗\x1f$R\xa0\x13=Z\xa8\x99\x9e\x9d\xebY\xac\x86\xa0\xb2\x8d\xf4d\xaa'\xa7\x18P\xb9ԓ\v=\x89\x89\x84p\x06\x17\xc0^\xf3\x144\x9a\x98\xd1\x02#\x9b\x80\x8a\x16z6г%\xd0\xd2rb&\xa3\x85\x9e\xcc\xf4dh&\xcb\x18\x95\xc1\xe9\xc8L\xa6\v39\x85-6\xf3օ\x99,\x16z2Г\xb1\x9e\x1c\xea\xe9HO'Hz\v3],\xf4t\xa0\xa7gz\x1a#)N\x80\xcc.b \x03\xa0\xb2\xa1^L\xf4\xe2\x14\xe8\aH\x1b\xf8\u007fK\xb7\x16\xba5\x10Z\x99\xe9x\xa2㩎O?L4\u007fԱ\xd5q\xaacobkM윎\x9d\x8e1lEO\xac\x9e\xa4z\xe2\xcd\xc4Z3qNO\x9c\x9e$f\xb2\xb2&\x8eaKM\x1c\xfb(\x8e\xad\x8d\xe2\xd89\x13ǰ%Q\x1c\xaf\xac\x9eZ=M\xf5ԛ\xa9\xb5fꜞ:=M\xccte\xcd\xe2\n\xb6\xd4,\xae|\xb4\xb8\xb26Z\\9g\x16W\xb0%\xd1\xe2je\xf5\xdc\xeay\xaa\xe7\xdḙ5s\xe7\xf4\xdc\xe9yb\xe6+\xab\x17V/R\xbd\xf0fa\xadY8\xa7\x17N/\x12\xb3\x80\x03ǰ\xa5f\x11\xfbh\x01\xddZ@\xb7\x161lI\xb4\x80n]Z}\x99\xeaKo.\xad5\x97\xce\xe9K\xa7/\xf1z\xcd\xe5\xca\xf2\xb3\x8f.W\xd6F\x97+\xe7\xcc\xe5ʅ\x11\xbb\x8c\xad\xb9\x8cSs\x19\xfb\xe8\x12\x8e\u007f\tǿ\x8ca\xc3cD\x971\x1d\x04^\xf8\x02\xbc\xb3\xd0:\a\x1f\x84\x03\xe9S\xabOS}\xeaͩ\xb5\xe6\xd49}\xea\xf4ibNWV\xbf\xb1\xfaM\xaa\xdfx\xf3\xc6Z\xf3\xc69\xfd\xc6\xe97\x89y\xb3\xb2zi\xf52\xd5Ko\x96֚\xa5sz\xe9\xf421˕\xd5gV\x9f\xa5\xfa̛3k͙s\xfa\xcc\xe9\xb3Ĝ\xad\xac~k\xf5\xdbT\xbf\xf5歵\xe6\xads\xfa\xad\xd3o\xe9\x8a\xdf\xf2\x15\xbf]\xf9\xe8-\\\xf1[\xb8ⷹ\x8eά\x9e\xa5z\xe6\xcd\xccZ3sNϜ\x9e%f\xb6\xb2f\xb6\x86-5\xb3\xb5\x8ffkk\xa3\xd9\xda93[ÖD\xb3\xf5\xca\xea\r\xab7H\x8f߰\xd6l8\xa77\x9c\xdeH\xcc\xc6\xca\xea\xb1\xd5\xe3T\x8f\xbd\x19[k\xc6\xce\xe9\xb1\xd3c\xea֘\xbb5^\xf9h\f\xdd\x1aC\xb7ƹ\x89\x18\xbf\xb5f\xfc65\xe3\xb7>\x1a\xbf\x85=\xde\xc2\x1eoa\xa3\x89\x18\xf3\xb5\xc1\v_\x80w\x16Z\xe7\xe0\x83\xec\xfaVV\xafR\xbd\xf2fe\xadY9\x87l\x91\xc8\xff\xc4\xea\x93T\x9fxsb\xad9qN\x9f8}B_]Y}\x95\xea+o\xae\xac5W\xce\xe9+\xa7\xaf\x12s\xb5\xb2\xe6*\x86-5W\xb1\x8f\xae\x80D\xae\x80D\xaebؒ\xe8\nHpm1\x98ƛ\xb5\xb5f\xed\x9c^\x03[\xc6\x03\x0f\xad\x1e\xa6z\xe8\xcd\xd0Z3tN\x0f\x9d\x1e&f\xb8\xb2f8\x84-5á\x8f\x86Ck\xa3\xe1\xd093\x1c\u0096D\xc3\xe1\xca\xeas\xab\xcfS}\xee\u0379\xb5\xe6\xdc9}\xee\xf4yb\xceWV\x8f\xac\x1e\xa5z\xe4\xcd\xc8Z3rN\x8f\x9c\x1e\xd1h\x8fx\xb4G+\x1f\x8d`\xb4G0ڣ\xdch\x8fF\u058cF\xa9\x19\x8d|4\x1a\xc1\x1e#\xd8c\x04\x1b\x1dc\x19[\xb3\x8cS\xb3\x8c}\xb4\x84\xab^\xc2U/cؒh\t\x8b\xe2,\x86-5g\xb1\x8f\xce`\x973\xd8\xe5,\x86-\x89\xce`\x97\x8b\x18\xb6\xd4\\\xc4>\xba\x80].`\x97\x8b\x18\xb6$\xba\x80]\x96\v\xd8R\xb3\\\xf8h\xb9\x80\x13-\xe0D\vؒh\tL`y\x05[j\x96W>Z\x02wY\x02wY^\xc1F\xa3\xfc\xda\xeaש~\xed\xcdkk\xcdk\xe7\xf4k\xa7_'\xe6\xf5\xca\xea\v\xab/R}\xe1ͅ\xb5\xe6\xc29}\xe1\xf4Eb.V\xd6\xcc\xd7\xd6L\xd7ּ^\xdb\xef\x05=E\f\xff\xfaW\xf5\x1b\xf3\x9b\xdf\x14\xd5\x17\xfa\xc1\x83\x0f \xdc\xed\x87\xf7\xcd\xce\xc3\xfbf\xf7\xe1}\xf3\xe8\xe1}\xf3\xf8\xe1}\xf3\xd9\xc3\xfb\xe6\xc9\xc3\xfb\xe6\xe9\xc3\xfb\xe6\xd7\x0f\xefG\xdb\x0f\x1f\u07bf\xb3\xfd\xf0\xd3?\xc7\x13\xf0\x17ŕY\x1c\xfc\x1b \xaa\xb1EJ\xf2z\x94 \x81\xbdA\x81\xe2t\xecu\x9c\xa0dy\x83r\xc4\xe9\x89ד\x04\x05\xca\x1b\x94\rNO\xbd\x9e& $f\xd6\xc43kf6F\xf6\xe2\xf5,A\xae\xf3\xc6\\\xa6\xd6\\\xa6\xce\\\xa6\xde\\\xa6\x89\xb9LSs\x99\xbe\xd1\v\v\xa2\xd8\xe9\x85\u05cb\x04\xc5\xc1\x1bX;K\v\vf\xe9\xf4\xd0\xeb\xa5\xd7\xc3\x04W\xd3\x1b3\x9cX\xb3\xc4͙\xe5ě\xe5$1\xcbIj\x96\x937LQ@?\x1eh\x88\xa9\xeb\rr\x06\x84H\xab\x04Y\xc4\x1b\\\xb7N\xaf\xbd^'\xb8\x80\xdf\xfc8\xab\x9b3\xd6zR\x96\xd0\x12\x98$\xa0G{2\x8c\xad\x9c\x9c͛\x95\xc7\rO\x9c\x98U\x126\xec\x93%VE\x9b\xb6^\xadԆZ\xaa1\x85b\xcdԊ\xcd\xd1+u\xa6\xbeP\x13\xedf\xda\xcft2\xd3v\xa6/\\ta\xadG\xfa\xf6\x1e\t;\xa1\r%\xbf\xd7\x17\x96\b\u007f\xe5x\xf3\xb0E\x17+O\x8d\xb9X\xc1bH\xa2\x8bUB\r.\x8d\x8b\x95\x8d.\x80u\x84\x06\xa3\xefb\xbdt\xd1\x12N\b2\xcb{\x14V\tm\xc8ܼ^Z\x12f+Ǜ\x87-Z\xc2\t\xa11\xcb\x15\b\xb8$Z\xc2\t\xa1\x01q\a[\xb4\x84s\x85F\x81~\xeb\xcc\x12\xce\x04\xa7YZ=v\xd1\x18N\x0e2\xc6{\x10.\xe3\x047=\xb6$uV\x8e7ϲ\xc6Scƫ\x04\xb6h\fg\x85\x06e\xd2xeE\x1eq\x03J\xf7ʌ]l\xc6>6\xe3$6c\x1b\xeb3\x17\x9d\xc1\x89A\x1c{\x8fr8\xc1M\x9fY\x12\xd0+Ǜ\x87-:\x83\x13Cc\xceV \xb4\x93\xe8\fN\f\r\x88pآ38ghԙ^\xc6z\xea\xa2)\x9c\bP\x96\xf7\b\xaf\x12\xdc\xf4\xd4\x12\xeeZ9\xde\xe1\x16\xd1,6\xf0\xder\xab\x17\xb1\x06\x85\t.\x1c\x00\x86\afe\xd6\tn\xa4\x1aZ\xb3^9\xde\tR=\x93\xe1\u058c\xe2Ԍ\xe2Čb\x17\x8d\x00\x92\x8dboF1\xa9h\x89\x9e;\xd2\xd0O\xf4\xb9#\xd8\xed\xf1ߚ\xf3\xf3Ԝ\x03\x02?w\xd1\xf9\xb9s\xe6\x1c\xc0\xf99\xe9Չ\x9e8R\xab=\xf0\xbd\xe1$5\xc3Ib\x86\x13\x17\r'\x00\xed'\x1e\x81\xcb$Na\xca\rP\xda\x04\xaee\x12{\x9c\xfa\xe5$N\x03ٹ\x024\x19-Z\x068\x00t\xe0S'ȇT\x97D_9\xd2\\\xbc\xbe\xb2\xeaJ]\x99\xe1Uj\x86W\x89\x19^\xb9h\b\x90yx\xe5\xcd\xf0\x8a\xb4\xedD/\x1c)\xdb\x1e\xf9'*\xd9@\xaaNtl\xa0]\xe0?\f\xa0\x00H9A\xe7\x1eQ\x16\xa1\xff\x040\xbf\x80\u007f\x0fjA\xb4\\.Rh`\x89.\\\x01\x1a\x98w\x80\xf8˅U=\xb5e.-\xac hf#_\x80\x06_&\xf02Iॅ\x97\xd6\xfe \x10[T\xa7j\xa2^#^\x8a1|\xfdL]\xaa\xa9\x1a\xe9\xd9H]\xa99f\xf1\xa4\xb0^0\xe2=\xa6TǷ\xeaB\xfdV}~\xedH\xaf\xd5\x1b\x95\xea\xf5\x1c\xed\x93\xe4\x1b\xb5*\xd1\xf6\fݗ\x18\xf5\x9b8\x9d\xcc\xd4\\\x8d\xd1f\x84\xa7\x80\xc7\n\x93t\xe1A\tÞ2\x8c\xe1wV\xbbD]`f9<\xce0\x00\u007f\xa9\x86\xeaT\x9d\"\xb0r\x98\xff3E97\xc3#\x0eUb\x9c\x9d\x1b\x9f\xccѾ\x01\xffj\xa1\xd7s\xfaW\x97\xea\xad\xdaR\xbfQ\xf7\xf5\xf6\x13\xbd\xfdTo\xff\xfa'\x87W\xdcl\xff\xa0\xae\x85\xefu4)\xcal\xfaS\xfe<\xf60\xe5B,\xd4D]^\x8f\xd2\x19\xeb45i\xfaF\xcf\xd7f\xbe^\xeb\xc9\xdaL\xd6k\x8ed\x95@\n\n)\xb0\xef8\xb1uj\xd1\xd0m\xb5\xc7\xf0{\xf9\x8dMUSմ=\xb9u떚\xdfR\xbf\"'\xee\x16\x85\xd2\xc3Ҹ\u007f\xdf\x14?\xe1\x10\x02]?z'2\xff/\x18\"s}}\x15\xbf,\x16\x8a[[[E\xfdiQo\x15\xf5o\xc8!vKm\xd2\a\xc1i\xf9c\xba\x94S\xdc_\xa8\x97\xa0y\x02\x1aG~r\xa9F\xc8K\x16Tnb\x883\x8a\x93\xb4R\xaf\xd5\x18\xe4\xa6^.ԕ\x8a\xf5\xd5\\O0\xd1\xf6,V\x9b\xd7\x0ex\xedXr\x10\xf8\xd9Z\xad\x80\xed\xa9X\x9f\xaf1\xc3\xed\n\xf9\xaa_c\xca\xeclD_\xaa\v>\xb9:\xa7\x02,t\xc69\xf0\xdf+JT\x9f\xab\xd7\xfa*\xfeA\x14ZS=u\xac\x9a\xa6\xb8[,\x14www\x8b\xca\xc2!\x88^\x83'\x14ITQ0\x90^,ȭl\xd5\x12\xaeO\x88\xfb<\x06܁\xd9wK=\xc4\xdd\xceִg\xaa\xd6@\xce\x1b7<\xe1&\xe3\xe9\xe6\xef\xe6\xef\xe6\xefg\xfc\xbb\xf5W\xfcS\xa7j\xa8^cd\xc2\x05Z'\x16\x98\xcf:\xa2//\xc2\x0e\xa3\x10\xc0\x80e>n\xa97ꭺ\xba\xf5W\xfe\xfb#\xd6?*a\xcd)\xda\xf2Ŷ\xf2ۇ\noQ\x1d\xaa\xac\xe0V~\x93\x12\x17uL\x16\xa7\xed\xddB[M5\r[\xae\xe8\x16\x97\xb1\xba^\x8f\xa9\xad.p\xcbW\xdd\xfaP\xe5\xadw\xabo}_\x05\xaeW\xea\rn\xc7j\xf5\xde\xd6Soq\xe3\xeaXa\x03L\xb1\xc2\xcaN\x9d\xacP͂#d\xec\x8f\xda>4\x9c\xf9\xedC\x15B~\xc8\xf6}\xc5ƨ\xe0\xd7:\xbf}8\xf0˾\xf3\xd8{\xe7\xe1\xb2G@HϲG\x16\xe9\xf9\xce\xe3\xd9;\x0f\xff\xce\xe3\xf9;\x8f\xacR\\\x12\x8e\x99\x15\xa0{\x11>K\xaf?\xa8\xce\xd1\xfbm\xfex\xf8x\xf1\xce\xc3ri#\xa9X\x97p}\xba\xfc\xf9\u007f\xc4\xd8|\xf0\x9a\u007fH\x1f\xf0\x91+(#\x8f\r\xac\xb6\xf1\x9d\xfe\xf8\xbbl\xf0\xaf\x9fDo\x9c\xe8\x8d\r\xbd\xf1\x9d\x8ci\xe8wn|\xc9\x19\xbd\x81\xff߅a;RG\xf8,5\xfd\x8e\xf4\xc7'\xfa\xe3\ru\x92e\x98\xc9@\xbc\xd3\xf1\ru\xf2GU\xfc\xf0\x039\xde&=\xf4&\xfe\u007f\xfb\xad\xfa\x03f*\u007f\x8a\xf5\xc3>֟~\xaa>FeI}\xa2?\xf9\\m\xe9\xad-\xb3\xb5\xb5\xa5\xb6\xd4/\xf5/\u007f\xc9\xf5\x0e\xf5??4\xff\xfc\xf0\xa1\xda\xd0\x1b\x1bfccC\x9d\xe8\x93\x13srr\xa2\xbe\xc1\xa2c\x9f\xe8_\xfdJ\xff\xea\v\xb5\xa9\xfe\xa06\xd57\xe6\x93O>ћ\x9b\xea\x81\xde\xfcJ\u007f\x8d5X\xf4\x17\xb8\xc3\x13\xddn\xeb\xbb_\xeb\xaf\xee\xfd\xb51\xa8\x04\xf9B\x93\xcf%\xbd\xaf6\xd5\xef\xb0B\xe5샹\xa6\xe1\xfb\x9f\xa5#\xcf\xca/u\xb9\xa1\xcbs\xbd\xbf\xaf\x1af\xea'\xaae\xda˅>Z\xa8c\xddꨊ~\xf6R\xd5UWW\xe6\u007fk\xd4\xfe\x97\xaa\xbf\xf6\x17\xa8\x1d\xa7\xeaj\x8f_\xed\xff%\xba\x9a\xd51\x92\xadP\xdc~\x00\xea\xe8\x0e\xb6\xdb\x0f\x1e\xe3khw\xb1}\x84\xed\xf6\x83ϊ\x85\xe2cl\xb7\x1f<\xc5o\x9f\xe2'\xd0>y\xf0\xb4h\x8a\xdb\x0f\xd4s\xfd\xfc\xb9y\xfe\xfc\xb9~\xfeJ\xbdү\x9e\x9bWϟG\xaf\xf0\x83\x9e\xea\xe9\xdes\xd3{\xfe\\5\xb0\"j\x13\xed#\xc6{\xaf\xfd\x1b\xf5\x06C\x8b\xbc\x8f\xde\xe0\ao\xd5[\f\r\xf2^M\xb0\xb2\xddT߭\xe8ʽ\xc2ݻ\xdf\u07bb\xf7\xe3iXm\xaao\xc3\xf6{\xac'\xf8\x00\xd9\xc9w\xea\xbb\xdcw\x9bᵼ\x93\xcf\xf2\x8fo\xd4+\xf5{\xf5;\xacO\xb8\x99\xdb\x1b\x9e\u007f\x87\xdb\xefr\xaf\xe4\xf1m\xd8\xe4\xfc\xf0)\x9c\xff\xdb\\߮\xf7!{l\xaa߫߫oo,\xa27\xdb\xcdv\xb3\xdd,\xfe\x9b\xedf\xbb\xd9~\x1a\xe0\xfc+\x83\xef\xbf\x16\xb6\xff\x8b\x1a\xe5\xfe\x9c\x82\xfc\x0f\u007f\xfe\xac\xbawq\xa7<\xdf\xff\x1b?\xb2\xfe\xfcԾ\x00F\xee]\xc3\xed\xf9\xed?\xfc\xc0\xc7\xe6\x0f\xc7\xcc?\xe8x\xdf\xf0\xe3\xf3\xdc\xe3\x15?~\x9b{|\xf2\x93\x1f\xef\x9e\xf3Ż}\xf9\xd1\x1c௺~n\xf8\xf0\xcd\xf6g\x81ֿ,\xff\xfe\v\xd1\xfd\xfb\x87\xfc\x87\x9fKUTVm\xabS\xb5\xa1\xc6jGMԗ\xeaLy\xf5Z=PS\xb5P\x17\xeac\xe5Ԯ\x8aկU\xa2>Ss\xf5\rFY\x8c\xd4\xe7x\xaf\x8cK\xf5\xa9\xfaD=V\xbfU\x9b*UO\xd5\x1b\xb5\xa5\xfeY}\xa5\xfe\xa3\xba\xafު_\xa9\u007fQ\xff\xaa~\xa3\x1e\xa9߫\x87\xeaJ=Qw\xd5\x1f\xd4\x17j\xa5\x80\x8d\xaf\xd5=\xf5\xbb\xe8\xabᓯ\v_\r\xb7\xb1\xddy\xf2\xf5\xed\xaf\x86\xdb;\xf8f\x97\xde\xd0\xd3\xce\ue4ef\xef\xc0W\xbb\xf8\xdd#\xfa\x8e\x9ev\x1e\xf1w\xf4v\x97\xdf\xf2\xf3\x0e<\u007f\x84?}\x84\xbf}L\xbf\xa5\xa7\x9d\xc7\xfc[z\xbb\xcbo\xf9y\a\x9e\xe9\xb7\xf4\xfd#\xfe\x9e\x9fw\x1e\xc9\xf7\xfc\xc1\xae| /v\xf0\xc5/\xe8\xf4\x8f\xf1\xfc\x9f\xd1\xf9\xe9i\xe73>?\xbd\xdd\xe5\xb7\xfc\xbc\x03\xcft~\xfa\xfe\x11\u007f\xcf\xcf;\x8f\xe4{\xfe`W>\x90\x17;\xf8\x82\xcfO\xc7x\xcc\xc7\xe0\xe7\x9d\xc7r\f\xfe`W>\x90\x17;\xf8\x82\x8e\xc1\xfb<\x92}\xe4\xc5Σ\xb0\x8f|\xb4\x1b>\n\xafv\xe8\xd5/y8>{\xf2u\xf4\xd5\xf0)\xce?\xb6;Oi\xfe\xf1\xcd.\xbd\xa1\xa7\x9dݧ<\xff\xf8\xdd#\xfa\x8e\x9ev\x1e\xf1w\xf4v\x97\xdf\xf2\xf3\x0e<\xf3\xfc\xe3o\x1f\xd3o\xe9i\xe71\xff\x96\xde\xee\xf2[~ށg\x9e\xff\xa74\xffOy\xfe\x9f\xf2\xfc?\x95\xf9\u007f\xca\xf3\xffT\xe6\xff\xa9\xcc\xff\xd30\xffx\xfe\xcf\xe8\xfc\xf4\xb4\xf3\x19\x9f\x9f\xde\xee\xf2[~ށg\x9e\u007f:?\u007f\xcf\xcf;\x8f\xe4{\xfe`W>\x90\x17;\xf8B\xe6\xff)\xcd\xffS\x9e\xff\xa7<\xffOe\xfe\x9f\xf2\xfc?\x95\xf9\u007f*\xf3\xff4\xcc\xffS\x9e\xff\xa72\xffOe\xfe\x9f\x86\xf9\u007f*\xf3\xff4\xcc\xff\xd30\xffO\xb3\xf9\xc7\xf1xB\xe3AO;Ox<\xe8\xed.\xbf\xe5\xe7\x1dx\xa6\xf1\xa0\xef\x1f\xf1\xf7\xfc\xbc\xf3H\xbe\xe7\x0fv\xe5\x03y\xb1\x83/x<\xe8\x18\x8f\xf9\x18\xfc\xbc\xf3X\x8e\xc1\x1f\xec\xca\a\xf2b\a_\xf0x<\xe1\xf1x\"\xe3\xf1D\xc6\xe3I\x18\x8f'2\x1eO\xc2x<\t\xe3\xf1$\x1b\x0f\xea\xcfg\xdc\x1f~\xde\xf9L\xfa\xc3\x1f\xec\xca\a\xf2b\a_\xfc\x82\xd9\x04\xf5G\xf6\x91\x17;\x8f\xc2>\xf2\xd1n\xf8(\xbcڡW\xbf\x14v\x81\xc7z,ǒ\x17;\x8fñ\xe4\xa3\xdd\xf0Qx\xb5C\xaf~)l\x03\xf7{\x14\xf6\v\xafv\x1ee\xfb\x85\x0fw\xb3\x0f\xb3\x97;\xfc\xf2\x9f\x02\xfbxz\x13\xebu\xf3w\x13\xea\xf4\x97\xb4\xa4P\xecN[\x1d)\xab\x96\x18\xe9SWc5PW\xb7TS\xbc\xa0\u007f7\u007f7\xb5\xeeo\xf4\xd3\u007f\xe8-\xfaꋯ\x8b\u007f\xd3\xe6\xef\xa3\x177\xcdO\x9a\xc0\x1fl>\xb8\x19\xb0\x9b榹i~~\xd6\U000b7482\xefXG)iN}\\\xf8\xea\xe0y\xe7k\xf51\xdeN\xfc\xb7\xfa\xf3\xa2\xfe\xedo\xcd\xe7\x9f\x17\xd5W\xfa\xeb\xa2\xfaO\xfa?\x17\xf5Wwͽ\xaf\x8b\xeaKݣO\xf5W_\x99\xaf\xbf.\xea\xbbwͽ{\xe1\xddwE}\x82q\xbb\x9f~\xaa\xbe\xfc\xc0\x9d\x16\bu\u007f'\x0e\xb6[\xeaK*,{\u007f\xfb\xe1\xfd\xe8\xfe\x0e4\xbb\u05eb\xfap:\x9f\xc545\xba\r\x99S\x98?\x8c\x05v\xac\x1e{=\xf2z\x9c\xeaQ\xaa\xc7X\xbci\x9c\xe8Q\xa2\x17V_Y\xb3\x88\xbd\xbe\xf2z\x91\xea\xabT/\xb0\x1a\xd5\"\xd1W\t\xd6ñ\xe6,\xf6z\xe89/;\xd5\xc3\x14+\xe48\xbdL\xf4\x10\xf3\xfeg\x1esߝ\x9e%:\xb6\xfa\x14\xcb \xc5^\x9fz}\xe1u\x9c\xea\xd3T_\xa4:\xc62e\x17Nlj>M\xf4E\x82u|<&\xc9;=M\xb0@\x0e%\xc8S\x8e|\x82e\xdc<\x96\tpz\xce\xf5k\xb0*\x80ӫD\xcd\xf4\x9b\xf4C~2\xf5qv\x8f\xc2\u007f\xc8A\xc1\xe2h\x0eK\xc1y\xaa\xffF\x83\xf2A\xe5@\x95T[5\xd5>\xde\x01\xb1\xa5\x1a\xaa\xaaꪦ\x0eԡ\xea\xe9AM\x97k\xbaSSGj\xa0ʪ\xa3\xf6\xd4\v\xf5L?\xab\xe9\xbd\xe7\xfa\xd9s\xbd\xf7R\xbfx\xa9\xf7Z\xfaY\xcb쵪\xe6Y\xab\xaa\x9f\x1d\xa9\xe7\xea\xa5~\xfeR\xbdҭ\xaa\xae\xb6\xfet\xd9D\xac\xb3\xf9\x81ʉs\xae\x9c\x18\x8a'\xbe[\u007f\xf3\xa7լ\xbc%\xb5;\x17z6\xa0b\x8bC39\xa5r\x8a\x87TE\x11+(\xb6\xf4\xe9\xe8\x96\x14\xf0Ģ\x9d\xcb\xf7\xcbu\x9e\xeaŹ\x1a\xdc\xcaj(R\xb1\xcdk5-\xb1\x8e\xe5{\xd5)\xbdzi^n\xfa\x0f\xf9\xbbt\xe9\xa5\x1e<\xd7\a\xcfu\xf5\xa5~\xf6\xcc\x1a\xc4\xf8M?\xc1\xa7N\xec\xe0WM?\x1b\xe1\x8ex\xa8\xb2\xcd\xefٰ\t\x82f4\xb7\xd3_\xc0\x8b\xa9[\xba9~\xb4\xb2\xcbe\x04\x9f\u007f\x04Mq\x99\xcc>:\x9b\xa7W\xceϓ\xc2x\x9e\xcc\\tf\x17\xee\xf68\x99\xa73[8K6\x93\x8b\xc2\xd9\xfal\xe2\ue739\xd9\xd2O\xddG\x8b\xd8O&~6*\xe0\a\x11\xb4\x85ar\xe5f\xd1\xd0-\xfc\xeda2\x99عY&\xb3hfgI4\x9e%\xcb;\xb1\xf3\xa3x\xb9\xb8s\xe1\xe6\xb8?\x8c\xce\xe2\xf6\xa9\x9d\xcf\xdd\xe4΅\xb7\x8b\xa5\x9b\x17.\xfcY:\x89.\xfcY\xf2\xd1)\\\t\x9c㵝\xdba\xf4ڹ\xe5\xed\xd3t\x11\xbbI\xe1\xf5\xdc\xce\xce\xee\xc4\xeeli\xe7.\xbap\x8b\xe4\xce\xc5k7\x9b\xf9Q!v\xf3\xe5U\xe1\xc2\xcd\xce\\taG.:uK[\xb8H\xfcl\x19\xbdI&K\x13'\xb3\xc2E\x92ΆQl'\x93(N\xe6\xb3\xc2ԟ͓h\xea'.\x9aڳ8\x9a\xda\xf9\xf8\xce\xd4\xce\x16>\x99\xdd\xc6/a\x9f\xc9\xc4\u007f\x84\xed\xa9\x9dGS7\xb2w\xa0Y\xc2w0\xb4\xd1\xda·ܤvV\x98x\xf8p\xe2\xe7\xb60O/\x9c+\xcc\xd3Ӊ3s7\xfdh\x9e\xb8\xd9r\xe4f\x11̄~\x18\xeb\xedX\xef\xc4z7֏b\xfd8֟\xc5\xfaI\xac\x9f\xc6\xfaױ\xd9~\x18\x9b\xed\xed\xd8l\xef\xc4f{76ۏb\xb3\xfd86۟\xc5f\xfbIl\xb6\x9f\xc6f\xfbױ\xd9y\x18\x9b\x9d\xed\xd8\xec\xec\xc4fg76;\x8fbSk\xef\xe9\xa1\xd5{/ͩ\x9d\xeb䕾8{w\xb9ܮ9\xbfp\xfevg\x9d\xa4+{\xa7k\xfdb\x9d\xa4\x85\xa6\xf3\xe7>z>;\xdb\xd2\x17{z\xb6\xf7\x11\x8e\x82\x9d^\xe8\xe9\x9e\x1e\xef\xe9qI7K\xbaZ2gv\x12\x8d\xcf\xecD_\xec\xeb\xd9\xfe/q\xb7}\x98\xb0_\xe0K 0=\x1d\xe9\xf1H\u05ee̸ve\x9a\xb5+S\xad]\x99n\xed\x8a\xf6\xc6q\xd2Ӊ\x1eN\xf4x\xa2_O\xf5lJ\xdf\xe0\xb0\xea\xe9T\x9fM\xf5x\x1aM\xa7\xdf\xecDg\xd3ov\f\xbc\x18C3\x9d~\xf3\b>\xda5\xd3ov\xe1\xa3]3}\xb0(L\x1f,\xbe\xd9\xd1mk\xc6mk\x9amk\xaamk\xe6vX\x98\xdb\xe1\x83\xc5\x1dl\xbf\xd9\xd1\x17\v=[\xfc\x13\x9ej\xe1Β\xd9\x10\xa0\xe4\xc5+={E\x9d\az\xd1\xd3Wz\xfcJ7_\xe9\x8bc=;\xa6/pڦ\xc7z|\xac\x9b\xc7\xd1\xf8E<\x8d\x9a\xd0ح\xe9\x96.]\xea\xb33}6\x8c\xca\x0f\xc6#SN\xb6\xf4\xb0\xa4\xabk\xe0(\xb5\xb6\xf6\xb3\xa8\xbeU\xdf\xd2\xf5\xa6\x1e/\x11J\xcf\xcc$\x19\xe9\xc9[==5S?1\xd3d\xa2/j\xd1\xc5\xd6t˴\xdbM\xdd>ҋ\xb9\xee\xbc\xd1ǧ\x19k\x1cꝡ\xde\x1d\xeaGC\xfdx\xa8?\x1b\xea'C\xfdt\xa8\u007f=4\xdb\x0f\x87f{{h\xb6w\x86f{wh\xb6\x1f\r\xcd\xf6\xe3\xa1\xd9\xfelh\xb6\x9f\f\xcd\xf6ӡ\xd9\xfe\xf5\xd0\xec<\x1c\x9a\x9d\xed\xa1\xd9\xd9\x19\x9a\x9dݡ\xd9y44;\x8f\x87f糡\xd9y24;O\x87f\xe7\xd7C\xb3\xfbphv\xb7\x877>\xbc\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\x9b\xbf\u007fw\u007f7\x91\xa17\xcdM\xf3\x8f\x16\xa3\xfc_t\xa4\x1c\x8eT\xa1\xe2g\xa3bT\xb7I\xd1\x1c\xfa\xe2m\x8c\xf6)F=oy$\x9bI\xf1\xf6\x80>\xec\xd8ٵ\x1d́/\x9aRZ4\xfd\xb4Xhz;+FU닅r\x9c\xa4\xdc\xde\x1e\xc4)|~\xe8]Ѵ}1\xea\xc4\xd2\x1c\xfa\xb4X(\xc1\xd9M\xdf\x15\v\xe5d6*\x16*К\x8e/\xde.\xc7\x0e\xceS\xf1)\xedz\xbb\xe1m\xf8\xa0\x9fd\x1f\xf4팏S\xe8\xe0\a\xd5tV\x8c\x0e|Z4UW4}[\xbc}\x88{\xde\xc6\x00&\xecut\xe0]\xb1\xb0\x0fg(T\xa1\x83\xb7\xcb\xd8\xcfB9\x86\xde6\xfc\xacX\x18\xc4iR\x8c\x06qZ45[\x8c\x8e\xe1\x8b\n4\xc7\xce\xd3\xe7\x85\x03\xec}\xc3\x17\xcdAZ\x8c\xdap\x8d\xfb0\x1c\x1e\xb7\xa8eq@\xfd\xd4Q\u007f\xa8\x19\xc4\x0e:\x9d\xd0>H\xb2\x83\xd8\x17\xcd1~g\x8b\xa6\x96\x16;-\x9a\x86\x93.\x17\xdaxym\xb8\x8a¡\x87\xdf\xd6R\xecy\x18(~\xc2c\xf6\xfd\x8c\x0f\xdc\xf4|j\x98[\x18f\xd3\xf3\xc5\xdb=\x1a8\x98+\x1aΚ\x9d\xf0\x0f:pY\xddU:\xa1I\x82\xb1*\xb4p\xef\x03\xa0\x88\xba\xe3/\x886^L\x8aQ\x13f\xbc\x81\x93\\\xb6\x93\xa29J\x8bQ/u4/0\x1cQ\a.\xaaeᄳb\xd4I&E\xf3lR,\x94\xf1,xV\xfc\xa2\f\x87\xad\xa6\x9e\xde\xf2!a&\xf0\x9a\x0eRW,4\xf0қ\x16)\xee\xf6\x80($P\x94y6\x87\xa3\x10=\xca\x16\xf5\xd3\x19\r\xe9!\x8d1OZ\a~\x84's3j\x80R\xa2\x9e'\x92\xa1\xf1\"\x12\x8f\xba@\xce\xc78\xf8uhM\xd7\xc2al\x02#GsM\x84S\xa8\xe1\x1c4S\xba.\x1eh:c\xa1\v-\x13\xed\xb5o`^\xa2C\xb8\xd0RB\xa4\x8d\xdd@b\x83K\x06\xba\x03RD\xba;\x82\xeeB\x83\x8b\xafa\xb9c8F8\x12\xf8]\xc3\xf1\xc26\x03$\x80YѴeI\x9a\x92\r+\x1a\xbe\xa1\xb5@\v\xe8\bW\x04.E\xb3\x9fЊ\x8f\x1a\xb0\x9e:k[,\x94\xf1T\x03\x19\xefn8\x10\xccs\x01\xae\x89ۨ\x9b&\xc5B\ri\xb7\v-v\vHwFӋk\xa4\x02\xf4\x87\xe4\xe3\xf9\x12`\x18\x13\xa0e\t\x9c\x88E\x1b\xf0\x8f\x1aP,\xce+\xb0\xb7\xc2!J\x9a.\x10\x13q\x11\xb8氀\v=\x12e0\xcctau\x1a-\xcf\x1c\xbb\xc1,\x87\x18f=\xb5\xc5\xdb \xc2H\x10\x11\xef\xc7\xd5\xd9\xe4\xf1\x83\x19\xc4\xe13{\xc0\x19`\x19\xc1\x1b`\x96H#\xb4>˱\xe5#\x02\xb5\x14\xaaI\x98q\x1cϣ\xb0\x90\x10\x19\xa00\x18@G\x1ai\xd1\xd4\xe5B\n\x03$\x8e\xb2c)U\xa8\xa7\x84\a\xa0\xa5Ih%\xc2wP\xe0\xd5@\x90\x1f\xf8$\x93`t\f\x9c<\xe2W\xc4\x1a\xe1<\a\xa9\b\xa8w\x86\b\x19g\x8bh,\x81\x91'\x16Dk\bD\x9e)\xa7E\xfd\x8c\x80\x04\x8c\xc7\xed:\x8dX=\xa5n\x1c\xa4̒`M6\x88˥\"j\x1b\x9e\xe9$\xaa\xc1\xd0\x107'6\x87K\xb2\r\xe3\xd0Ii\xb1\xc3\xc9\x1a| \x94\xdaQ\tE=\xad\x17\x1a=\\\x8a\xc0\x11\xf0㮧\x95\xccW\x8b\x84\xd7'\xd9giNa\xc6i\xc1\xca\x14\xf0ɀ\xfe\x0f\x88\xf3&\xd4\x0f\xda\x03F !Y\x18\xed\x03\r\xef\x136\xb0H\x03Ȃ\x90\xbb\xf4P\xe8ȯ\x84s\x00\x15\x10\xf5F\x038]\x1f\x8f\x05\xb2\x12zD@\xa8\x81\xf3\x8a\x9cw\x90\xc8z@$\x85G\a\xea\x9e\xd1dQ\x83\x9c\xbb\x02\a\xea\"7N\xf1z\xd3@\xeem\x9cz\xe4\x86H\x138\x19 \x83\xbb\x82\a\x0exu9\x92\xdb\xd2Y\x02r\xf8\x12\x96H\xa1\x8e\x84{\x80K\x8czv\x90\xf2\xe2FƆ$O\xd0\x0e\x99a\x03謃?j\xb80\xc7\x04CAЕ܌\xb9yJ\x80.*g\xc3<\x88-\xc1*Z\x9e\x00t\n\x87\xd8O\x9c\xad\xbeϑ5M\x1d\x82\xd5V\x9a\xc9*\x18\x05\x96gtq\xc7\"mh\x06\x8e\x80\xbc\xbb\xcc\x13\v\xed\xec \xfbو\x99\xe3\x04\xa9\x1b\x996\x90\xd2\xed\x0eA#\xe0\x1c\xc4Gӄ\x968-\x1d\xa6\x00W\xbc]K\x19C'\xccS\x99\n\x91\x00\x91\xe7b\xbf\x91\x87 8-\xb3P+y\x1ep\x1cdB\xff(\xf1\xfa\"=\x80\x8f\xa0\x8c\xa8 \xb7\x05\xa6@\xec\xe1EJ\x90\x8a\x1a\xec\xca\xc0\x12g\n#\x80\xe2X\xe6\x18Aa'I\x19(wRV?`\x8d\xf5q\xa6\x8f\x12\x01\xe2G\f\xf9\xa2*PQ\xd3\x16\v%\x1bD\x90\x10\x18\xd0!\x9c\nV+\x88\x9d\x00M\x88.y\x15\xa4\xbc\xbe\x91\xa0q\x891\x1b\xe8\a:\xee\xa4\x02@P\x02\x94\x82\x04@\\\x83\x1c\x92ω˺\xe4g|\xe0\x16N\b\xae$\xb8ZX]|\xf0\x01NE\x92-\n$N\xb3\x97\x88\xd8G\xe2@ʋ\xca\xc0=Y\xec\x1f\xe6\x10%1r G\x14\xba\fҘ4\xfbL\x14Īx\x06\x80\xb2\x12\xe2\xcb\x049IP\x84\x91\x11X\a/\x91\xaci\x89\xb0z'p6\fe\"L\x1d\xb9p4H\t\x80\xc2)I\x8a\xd2̲\xe0b\\\u007f\b\xb4B\xe0,\x16\xa8\x83\xf2s\x1f9{\x86\x84x-U\xf8eB*N\xa1\xe3\x04\xc7qoa6\xf53\x91M\xb4dI\xda5\x18m\x03\xe6!\x99\xdf\x11\x00{\xfb\x80\xb4\xa3&j\x1e.`d+\xe2\xa0-\xfc\x94\xc5\xe3\x1e\f\xb5\xc8d\x10$$\xe3\xe8\"\x10\xd4VrZ\x00B\x0f\x96\x8bt\x19H\x0f\xb9k\xc1i\x1b\b\xcbG\x9aA\xc9\r\x94\xddͫ\xd7\x04\x06\x98\xaf\xe1\xcc\xd1T5\x91\xd9\x1f\v\xee\xb9}\xe8\x05\xf8\x04l\b\xcb\f\b\x0ff\x99e!ɩJ*\xc2c \xa8\x03\xe5\x16AS\x8b2\xd9\u0378E\xc9\xd8\xc5QG\xee\xd4Hd\xe1\xb0:tDf\x838eD\xdb`\x86K\a\x875\xc0\xab\xa3/+\x81\x94M\x00'(\x97q%\x0f\x90\xe8\x98\xce\x18)0\xa7\xba\xb7\x11(\x90\xb5M\x9a\x92(\x0f\xf4#\xf8\x96\xf9\"Q\r\xac!2?\xc1ņK\xac#\xefJiV\x91C!\xce\xeaĩe\x06\x82H\x0e\xe7\xa7.\xe7\x02\x88\x84\xaa3b%\x9c\x14\xfc\xf9\x01Ah>c\x03\x97'\x8c\r\\*\xad\xf62\xd0N\x0fF\xa4\xeeȠă\x19۬O\xd0U\x11W)]\x15\x82RP.\xa2v\"\f\x1fH?\x8c\xdd@\xd6\x1f\x99bJ\t\xcf\bp\xfd\f\x89\x10\x16g\x94\x89\xf6\xe4\x84!\xca\x01\x1bC\x18̊Ї\xbd\tQ\x82\x80\x80\x8e\xc1,]\xdb\t\x94\x11D\xab8\x10\xd2!V\nh\x06\xba)c\x1c\xa4\x83\xfdD\xa6\x96qP\x9d\x91o\u0097~H(\x03\xc8\x05\xc9\b\x0e\xce='\xb4t\x90\x92\xd5\t舴|\xf9\xb5\xcfXE\x0e\x81\xf2\xdcp\u007f\xfb\x01\f\xe0TS\x17\xcb\xd8\xc5&\x8d6i\xf2\r2J2\x15\x94\x82\x8c \xa3\xc3q\xca敆g\xd8R\xa8;\xb2ճ\x86\xc2|\x06\x8f\xd5b\xb8\x8df\x102\xbd\xf4Ů\xdd\fz/\xd3\r\\J\x03A\x14\x9e\xb9\x9e\x19c\x8e\xad\xa8\x9f\xc0\xfb\x05K\x1cx^Xh7AsD\xdd\xc9\xd1\x00F\xe047=\x9b}I\xe5&\x00\xcc-Ɏ:\xeb\x11M~K\x14\x16\xe1q\xb7\x81\x9f\x93\xfb\x8c\xaf\x9f\xfbWJY\x13Ǟ#\xb1\xa3\xf1\xae\xc1\xf0\x109ޱ\x9c!\x936\xa85\xefex\x9fL\x12\b\xf0\xfab\xfa\xe5u\x8e\x84\x8d\xfe\x94T.\x8b\x176\"\xa9\x9e\x98\xaaa\x1f\xb1d\x83\x1eu(\x90\x820j\x8dM 3\xfc\xb2+З\x1c\\5;\v\xfc\n=+\f\xaa\xc5V\x82\x1c\xb4\x1dTc4e\xf5-k\x1ce\xc7߁\x90\xc1c\xe2\x0fk\x89\xd8\xfe\xa2A\xeaYt\xed\a\xe0\x8a?\xeb\xe7\xf4Q\x92#\rY\xa4h\x9e\xa9d:ׁ\x17\xe3\xe2\x1esj\xfaA\x87\xce\x19\x94%9H\xd0\r\xf8t\x1d\x9fa\xf7\x19\xdb\x16\x0fy{9f\x05\xab\x12\xf4\xcaAΊ_~\xbfA=\x12\xad\x06\xa8k\xa1\x88?\xe0ww:\x02\u007f\x02\xa6'\xe7\x1f\xe8\x0f\xe8_8J\x93\xa0\xb2\b\r2gOd\xdd\xf1\xc4ZF+hP\xa9Z1\x84\xe1\xdb\nP\xd2\x11\xac2b$\xc0\xe8\xd1/p ^\x00B-]\x11\x92$V\xc4\xf8\x8b\x8c݊\xeb\t\x98w\xd7\xfa`\x8d\x90KÁj\v\x05\xa34\x00\x10\xdb\x15' {\xaf\x84RєV#M\x83ɳ\xd0\f\x86J4<\xa2RM>Ձg\xb3\xa8\x17$Y\x0eFnV\x1eо\xd8 P*\x94\x82h\x01\xd9T\xdf\xe1Z\xd3{\xe4h|\xc1\xee\xccL\xbb'\x03\x19Ny7\x15\xa8\x8e\xbc\xab\xc4\x02\x83\x1a\x14\xae\xa5\x94\xd0\x05\f\vy\x8e\x00\xc1\xeag\xbczȐ]c\xe3IJ\b\x8a/\x96Q\x9f\xd8\x1f\x8fSvx\x99\x96\xe3.\xf5<\x1bQI\x03=F7\x03\x9c\xec\x05\v\x8b*Ju\xcb\xf6\xed\x06\xda\xc0\x11\x1c\xa1\xae\xb2G&V\xf1\x1c\x87\x1f\xec\v\xf6\xe1\x8e\xc00\vC\x84s\xc3U\x8b\x9f\x1b)\x16\xcf\xd7\xf0\xac\x03\xf73\v\a\t\"\x12\x9fp|\xb8n\xe46$\xee\xdaNT\x9d\b\x1f\xb2\xac\xe0`\xe0bEIW\a\xbc\x8b>/\\\xe5tz`\xf0\xbdT|\x0fѱ\x15v\xd8`܈ܫ\xedg<\xaa\xbcސ~\x18\x88\xd0j\x85\x01\xa8\x89\xef\xa8OS\x8c\x8e\v\xf1\xab\xed\xb1\xbf,(\xe5\x16'\x86{Y\x12\xa5\x8d\x04Pj\x8b\xb7;v\x01\x1c\x8e\xe8\r'\n\xe5\t\x06.\x10\xd3@-:a\xf3\x15Q'Y\xaa\bD\x8a;\x0f\x88\xb3\x1c\a!\t\f\xa2Eh\x00\x19J]\xfc,b\t\x10\x14;\x88\x99\x00Į\x03K\x1dg\xa0\xc1\xbe\n\xe6\x00)/\xfa\x1a\x85\x9d8^\xf4\x04ʈ5\xa2\xfc\xa9\x12\xcf\xc5\xd5D\xcaq\x87\x9ca\xe2\xa4\xda\x13wk7x\xddk\xa9\xc8\xdb^09\xa3\xd1\x1f\x98-9\x8a1\xbeD\x18\x020\f$\xa7\n\xf3,`vQ\xd3Nd\xd1#G\xa9\xbb\x05\xdbk9֦Cƻ\x84OH\xb8\x9d\x02<\x0e\xd8\xcd\x00\u0604\xed\x04\xc0\x19%\xf4\x82\x04\x91\xa0\x10\x98\xb8\xcc\x16\x87Җ\xb9Ğp\xce~\"\x98\xac\x9f\x8a?\t\x1da\x1d&y\xf2\xfc\xd5\xc8\x02˼\xa1E\xbd\x0ej%\xb6l!GnRs\"\xd2\xf5\x1eϧ\x88\x00dk\xc7\xc2G\xd1\xdfՑp\x9cCb5$\xf7*\x01\xcb\xf5i\xbd!Y\xa2\t\xbf\x8c\xd3Y\xcbbH\x88:\x80\xf1\x88\xf1\a\xe7\x8bC\xa1,*ܨ\x8c\x1f\x06\xe1jږ~f:.\xa0\x86\x16)\xf9\t\xdbOņό\xb4\xcb\n6\t^֦H+C\xe9\xd9\xcd\xc4%\x00\xaa=Q-*\xacc\xb1\xeb\xe1\xd81R%]\x18]\x84ؑ\x868\xa7j\t\x131\"\x05\x8e\b K4\xf0\x04s\xe48\xe8\xc6\xcfr\xceC$\tR\xe8j\xac\xc2H\b\x03\xb0\x1c\xa6%\"\xe1^&\xbf\xd1\x12\"\x06\x16\xc2(8\xf5i\xb0\xae\x02\xf0\x87\x91!ޔ\xb3\xabr$\x18.g\xd2\xdd\xfb!|\v\xa5N9\xc0ӄ\x85?Rf\x93\xbc<8\x17\xb0_\xa1\x1d'\v6\xc9\xf4\xd8iJ\xba-\xac\x9f:z\x88\x12f\xce]a\xb55\aą\x9cR\xa8\xba#c\x8c~\x06Za=\xb6b\xe1\xa2\xc2\xe5W&\x87\r)\xcb\x18d\x84\x97Aď\xf6\xff\x8e\b\x11`om\x11\xab\xe2\x8cf8\x84\"\x80z\tk\xe0ر\x9e\x8e(\v\xb1\x18:\xc0:d4\xe4S\xd2[\x04.-\xd1\xdb\xcb~\xc1\xae\x8d\x16\xb1H\x8c\xe2\xaa\x00\xe7\xd9\x13`\xd6\x15U\x11@4l\x1c\xb1\x84\xeb\a\x89\xa7\x990\xb8Ħ+ާC\xc1\x8db\xcd'\x83I\xdd\n\x14d\xa0̝\xc4EN\xfc\x97Tt\x9c\x81*\xc9R\x96\x0e5\xd1\xd6`\xa1\x00(\xe1\xc56p\x81\xdb\xf4\bz\x9a\x8a#xפ\x05\x1e\xb0:\x1c\x91\x9d\xaa}\xc7\xe1-\xec\xf0\xeaX+]Fc3\xad/\xd4\x02Q\xc5C\u0602a\v\xed`V\xe0\x8e\x1d\x88a\x05\x01\x1c\x92\x13j0\xfcu\x87\xa7\x84\xa2\x0f\xc8ʀ_\xf4<\v\xdcnX\xe5̈́\x8c\b \xad\x06\xa9\x18tiVS\x16\xe9\xc1\x04W\x965\x0etۥe\xe7\xc2XK< \xf2\xa9\x9a\r\xb6,\x00\xd8\x15\xf6\x85sD\x89i\xa7\xacD!\x85\xa0)\x03ɤ\x91\xf3\x9b\xd08\xa1\x19\xa1\x92\xf9)\x13\xd6&Y\x1a\xf7S\x06\x1apV\xbc\b\xb1x\x1du\x86\x16lY$z>\xca\xfc\xe2(\x85\xba\x82\xb2x\x12P\x96\x11W&;lN\x14q\xffʖ}\x13\x1c9`9\xf8\xa5/\x81\x15\x14::@m\x99m3\x9d`\xed\x1dX\x0e\xf0j\x84ö\xae\x8f)q\xfd@\x85\xa49\x02\xb9\xb5|\xf0\x94\xe0\xb7H\x03\xb8K+Xw\xa9%ʨ\x93}1\xcd\\_\x12J\x81\x1a]\"\x86*\x14Gd\x17\xef\x93\x11\n\x97\xab\xecC\x8aE7\r\xb1#3\xde\xe5\x10\xb0\xc3Q\x88d\xac\xcaO\xbbV\xb8Q7\xcd\x1f\x12\xbbZ\x13\xafx_\x90!\x9d\x19CT\x0e\x83\xab_\x90A\b\x00 QE@\x96v\xab\xa7\xf9`\blA\xd3\xeb\xa6a\xe3\xc1h\x84\xd5\xd7\x0f\x87hd-\xee\xddg`I\xf1\xaa\xac\xf7\xb5\xc9\x02\x15=\x9f{\xb6\xd3Xѳ\xaa\x1cvw\xccF\xbb\x10\x04X\xf1b[;\xe4h\x99\f\x98\xd1R=\xf4\xb6xgo\x9c.\x17\xa8MM\xad\xc0~aׇ\x9e\xf9L3\x915h\x83\x01I\xccrȍ\xba\x12)F.\"\xd4\xd4\xc9\xfa\r|\x8fm\x96\xf8U\xc91/%\xbbp\x9bq+\xed\x8d\xd1P=\xe1\x12\xec\xcf\x05aK\xdc'|\xc6\xc4ו\xc5Yb\xfb\xfb>_\xa2'\vG;3\xf9\xd7S\n9\xa4Sc\xefQ\xb7\xac\x92\xd7!\v\x93D\f\xd8\xf2D<\xb8\xae\x99b9΄\xc4,y\x1apA4SRߪ\x89\xd8*J\x12ˇ\x16fҪ\xd1\xe8\x8fAcip3\xa4\x1cBL\xda'1\x97\x06{\xea\xbavM\xea.\x87\x8af~J4a֙\xf9\x97\x05S`\x1c\v\x1a\xa2\x89\xb8ќ\x94z1\v\xed\xa7Ag\xed[Q\xa9+\x12\x13I\xb1I\x14O\x89\x8cr\xdf\xd2\xf5\U00012a10\xdb\xd5\x11\xb8\x97\x01A\x95\x02\b\xbd&\x86=\x82V8\x13\xa0\xc7\x12\x13A5\xb6\x12\xbc\x95\x85\xaa\x1d\xb3Y\x00\x900_YN\x8d\xa2\x88!\xb2\x16\xc0\xbc\x86\x90\xfa\x9aHG2\xba\x94a\xaeQ\x8dCQE\xd1:Dh\xa8\xf2\x93\xec\xeaIx\x17\x8a\x1d\x8a\x96\xb7!\x12D\xd2\x1c\xfa\x14\xa3\tk\xa9\n\xac\xd7\xcfğQe\xb6F\xfez\n\x12\xbf\x1eĻ'9\x10Hd8\xdb\xdd4\x1b\xef\xc0\x80K\xe2R \xce\f\x94&\x92\xae\x96\x88\xfb%\xc4pVĦ\x8eq\x87G\xcci\x89\n\xc8\x15MA\x87\xfd\xa0\xa4\x00\xc6\xe9\a\r\xa4$p\xb0\xe9\x02\x86@5\xa6+b\x81tgQ{\x0e\xbc\x84\xcdI\xb6\n\xb3\xc7,\x0e\xeav{\r\xdf\xdc\xe9&s?t\x82\x02\xf8\xec4@\xe40\xcd\xc7|\x1f\xf8\x1c[c\xe0ֵ\x81Ԉt\xeb\x12\xd8\xdaI\xb3\x98b\xc4\t\xc7\xf9\x94\x93\xaeı#\xd9K\xc8F#,\x89\x12'\x0fy\xf6\xf7\x10[ \xa5\xe68\x9b\x12t\x8dUC\x94\xe0^\xb0\xae\xf7\x85Ws(L\x9f\x85\xa0xא\x13\xeeM-/,\x1eU99\a\x94a\\2\xbbQ^HD(\xd9A\x9b\x01\xdb\x04;;\x06t4\xc8\x0e\xef9\x0e\xae\xc4\xd8H\xe4\x12\xec\x03\xf4 \xb9\x14\xd8Cr^\x12/\"t6\x10\xa7\x11.U\xd2\a)\xfe\xb9\x12ҭ0\xb9\xa1\x1c\x1c\x100\xc2\x03\xc7\xe7\x91\xe4%\xb6\xc0\xe0\x1c\xa2\x80\xe1\x10kڱ\x17\x1cؤ\xba\x03\xdfj\x8bY\x8c\xd71j\n\xe8\xd3iJ\x1aCh\xb83\x94r\x15Xs7\xc4u\x04\xe1&Е\xf48\xb2\x97G\x9d\x18\x14|\x90\xdfH\xf8\xac\xf4\x1e\x04\xe5\xbb\xce\xd9\x12\b\rJ\x9e\a\x88\x1d\x85ȷH9.I\\e\x83Y\x13\x19\"9\x02\xeb(\x17\x87\x85̯\x917\x18\xec10\xa9X1\xf5\x1dQ\xc0\x10t\v\x19\xaa\x98\x14\x1b\x12\xdf\xda\r`\x8aN\x93\x13\x83\xe8\x04ah\x1e\x02ٺN\xce\x1c\xe2\xd5P\xd4r\xe6\x94d\xe7\xc0\xdb;\x03\xa2$y\x16\x1c\xd5g\x19\x80\x02\x1bD\xb2쀪A-e.\xd8'O(y\xaf\xd3\xe0\xf3i\xb2]/\x04v\x05n[\xe5@\x15\xf1Ē\x01\x0e\x1d\xb7e\xbb\x16\xc7+\x1a#\x01\xab2Nݗ\xec\nP{\xc4N\x8bW\x93\x19\xcd\xc5\xf6\x81\x06\x9e\\\x84\x182\x85@*8\x89\x84T_\xae\x17\x8cE\xaald$G=\xbb\xeb\x99\xf3J$!\xd2\xd0\xc0\x89\x85\x0f1Ͼ\xb8\xb7(.\x99\xe2\xd9j\x9c\xb3&~.\x86q\x9c\x9eE\v\xa7\xc4r\ae?\x85\xe1\"\x80_e\x91\t\xfd \x8e۶h\x9e\x05O2Y\x9f*b\xd7n\aW?aP+A\x9f\xc4r\x10\xe6U\x82\xb0a\x8d>I\xe58\x87\x12\x84\x83\xa6\xa5\x12\x93\xbf\x84\x96\" !V\x88_\xe5r\xf2ЛI~\xab^\x80\xb0\xac\xa4\xedq\x92\vq_\nR\xdbK\xc8;\xb4\x97\x84\xa9\xcfe\x8c\xa1\xa5\x8dO\x8a\x83\xb6/\x99(9\xb1\x87\xd3ע\x88\x10\xce\x06\xc5\xcb=̢VPQF\x8baKB\x83h\x89\x91\xe1i\x9f%\n[\xb3\x8f$\xeb\x80R\xe6\x10\x92\x052ߧ\xa8l2\xc5a\xaeھ\xe4\xe4\xd1ȓG\xdd咹l\ba\xa3\xe1\b\xe9R\x12\xb1\xccA\x11\x94\x04Ⴏ1u\xe1\xb4Q\xcb\v\x8d\xb4$\x01\x03\x13\xbeJ^\x8c#!3\x8c\xb4\xa2}1\xae\xe1ר\xd7Tȍ\x87\x10\x85,\x9fbd\xc6\xc8Y\xcb\xe3FK\x04s\x06\xc9e\x02\v\x14P\x80\b\x1b\xb4&\x97Ĺ\x87\x81\x10\bbɷ\t\xd0WR\x1b1@\x06\xb3\xb0\x9a\xa9X\x87\xc4\xd75\b\t\u007f\x81\xeb3\x80nJ\xbe\x1b\xa2\xa4\x8e(4\xa4\xad\r|>\x90\xad\xed%\xa1\x0eW\x1a\x1a\xf32\x82a\xbbG\xd5fy\xc1\xf5T\x82\x80$\xc0)!\r$\x1f\xe4\x84\xcae+\xc43\x05\xb0\xc1\x18\xdbe\x91ߨ\xa7\xd1r\xedgѝ\x18\xbf\x84\x13\x19\xd2\x10\xe8\x15j\t4j}\x9fO\x19\xe5\xa5:\xf0\x1co\xc9\\]\x92\xbb\xc8X\b\xd2\xe1(\xb3o\x90\xde\xdbΡ\xff\xe0\xf8\x11\x18D\xe6\x90f\b\x05DK\xed1\xab\xff\xc8\xc2)\x0f\x86TZԗ[b\xe5\xa7uĶ7\f\xf7\xc7+\xc28[\x1a\xc0N\xc0\a\xa4YT|\xa0W \x97\xb6\xe7$&\xb2\r4\x05/\x11\x19\x1fs8H\x9fO\x81Q\v}\xb2\x0e\x8b\xc6&\x81i\x14\a\xc067\xbeV\x82\x10\x95$\xa7l7ȕ\xa2\x9f\xe1\xe9\x1b\x89D\xf0\xb2\xed\xa3\x9d\xa4\x1c\xe7\x96p\x12\f1\x8b\xe3\f\x1c\xf58x*e\x9bbJ\xcc\x1c\xa8\xfbXD;\x86\f\xa2\xf9\x04\xb1mW\x82r8\xb0\x8aCIJD+bC\x15\x1f\x029Q0\xe2\xa4Zv\xbd l\x96\xa8\xf84ɳ\x94F&\xad\x11E\x8aÞr{\xc9m\x1d\x0e\x8e\x98\u007feɨ\xcbV\xb2rl3\xa7&\xe9\xc0A\x89\xc5\xd9@\x8ex\x14l\xe9]\x0e~\xc6i's\x11\xacф\x03\x84\xc9nw\xc49\xf1l\xbeB\x1b\xfe!c\xc6T\xe4\xeb>\xfb\x1a8ڱ\x97\xf9BPw`|Od\xb1\x17\xacz\xc4r\xb2\x88\xa0ff+\x1a0\xbb\xe1\x9c3d\xb4\xdd\x10\u0098ł#\xcb \xf3\x18^\xc013\u007f\xf2\xb5%\x92\x97\xc0\x17\x9a\x8b\xd6\x1a\xd0B\xa5\x1c\t4\x9e\xb2A\x8a\xec\x8d\t\aij\xbd\xc0ː\x04A\xd6d\xa5\x9f\xc4\xe9\xa1\xe4]\xa0\xce\xc8JP?Ŀ\x868\xc1`\xa1G>\xd3\xc1\xb4\x87L6\xa1\xac\xa5\xc4yrV\xb6\x82>\xb7\xc7\xe6\xe16瘓c\x01'\x0eS\x11z\x8cuXxs\x12M=\vUD\x1d\xb6\xc1N\xd4\x10?\x84\"I\x12cxi\x959\"*j9q\x1d7\xd9u,\xc0\x0fG\x16\xbe\x16\xf8\f\xa3\xd1\x16.~\x1c\xe2Q\xbb\xa9\xa4jQ\xe0}.\xeb\x1a\x8e\xc9\xfe\x83\x86\x0f!j\xc8\x1fɞO\xba\b\xe3F\xf8\x12Y\bZP\x8f\xc4ߐ\xb3\x13\xd3\tq\x8e\xb2\xb0\xf1\x9epx\xe2\xb1\xe4I\xd8\x17\x05\xb1\x14\u009d1I\xef0\aIؔܣ\xe0t\xb4\xc9H\xec\u007f\b\x80\x12\xf6\xd9r<\x02\x9c&[\x0en\x04ʕM9ؠ/q\x9e\x94\x9a\xd7\x17\b\xc9.\xbc\xb2\x95s\xa1\v\x92\xe8\x90xZݎ\xc9\xfd\xc3k\x9bXK\x8b\xc4<\xd9\xe3\xd9\x1a+Q_\xa2\x1cr\xc8>\xf9\xae\xa8\xbf\x94\xaeA3\x81'\x91}9Ђ\xc5S\x93C\xf9\x1bi\xc82\t\xf6\xef\xcci\x87n\x16\xf2x$\x82X\x83\xc4\xc7\x10\xf7\x0e\a\xe0p\xcca\xf0E\xe1\xd06CFvW\xa2BqaT9\xe6\xb7'\xe1\x13\xc1ʑ\x15p\x80\x03s\xecGӇ\x9a\x1c\x87!\x97Sr\x9a,u\xa8Ź\x80\x03V\x95\xc8\xf6\xc8\b\x10}\xf5\xe8\xf9@\xcb>\x8d}#\r\xa2\x8c\x1cb\xc4\x14\xbaB\xa6\x98\xd6&\xf1\xa7}\t_\xc3\xf4\xa7n\x1ad;r\\\xe15,\xe5\xfb\xc12K\xb6&\xc9~fݑJ\x11PZ]\x95\xb9a\x92\xe6E\x18\xd2a\xc9&\xb9\xcc\x1f1\x83Q\xa0P=\x04\x9a\x85P6F\xfb}\xcft*\t\xdc!0[l\x1b\x87YNu\x8f\xb3\xab\x82r e$h\xe5\xf5\xbcx<\x990)\xdf\n\xc7I\xdc\xdepmu\x0ez\x99q\x86\x18hce\x89\xe9A\xb4\xd5\x17C\x0f\t\xbc\xf0#\xd2\xd28(\xc9\x05̶\x1f\xf2\xe4)\x8b\x86V+.\xfe\xc3`\xfc\xecK(\x16\xc5(\x1d\x86D\x13\xb6\xf9\xb1\xbd\x8c:\x96\xdb\t\xb9\x1d\x854r\xd0>}\\c\xd6\xd6\b\xa3G\x93\x86t\xc0\x00\t\xc5\x18\b+\xbe\xdc\x1a\a\x01'l\xe5\x0fs\x90\xcd Fms\x96O)\xd4|\xa0\xc5S\x91\xa4\x19T\xe4ы\xd8\x10S5Q[;ɌpiVĄ2$$\xba\xf9@JʤYI\x18\t\xf0&\xf3Q\x85\u0096\xf3N`F\x98\xcf\xe6\xd9V\r\x89\x15\xbc\xc0\\V\xc9A\x8cC\t\xee&v\xad\x86\u007f\x87\xed\x13\xdc#e\x8br͐6\x83 Hx\xa14\xb3=\xf2-\x1c;g\x93\xcf\a]\xa0\xcaW\xe5\x98$\xaa\xd2ҕ\x02-\\\xcd%\xf6y,\x8ee\x84$\x1d\x91\x04\x04\xb1_Ώ(\x94\x9dd%\x95\xb8jN\x0e\x05\x1e22A\xdd\xe58\x14\xdc\xc82\xf1ڡ\xa4B\x8f\x92iX{f\x95\x8ca\x12\x97\xbe!\xd3,\xe1X\xfaa\xc8X\xc1\xf9\xc1\xf8\x8b.\x9b\x049\xba\x9a\xfb'\xc5\x06p\x97\x834_}FB\x89\x19~\x97c\t\x88l\x05ɗC\xdf\xc2\x15\v-\xbb\x14\\\xde\b\x19o\x87R\xae\xe5X\x1c\x80\xc4i\xfa\xa9\xa4\x1f3f\xe7\xa2\x00)\xd7\xe4\xa0\xd9ړ\xf0\xb8c\x1eE\x80\xd9\a\xa2\xb8\x93\x89\xa2\x1f\xac\x11\xe5P\u007f\x85\xde\xc66\x97\xfeQ\xcdE&\xa1o\xc9\xca\xd2(q\x90\"\xb9\xc8\xc8\x03u \xbf\xb8\xeeu\"i\xd4\x10^\x88\xe3\x16j\x00q\xfd\x13+ިnP\x88P\xbb\xabX\x9f\xb3\xd0P\xaf\x909\xb49M\x04\x11n7˘\xa3О~:\x0f\xd6Ͳ\x9b2p\xc4s5\x83>\x1b\xc2w\v\xf5tn9\x98\x8f\x83c`Ȱ{);\x99H\t\x9aQ\xdeU\xd5f\xd5:\xb24E\x81:{\x82\x8fš&\xf2\x1d'\xa1\x9bE-\xe1j\xecdU\xb3\x1ab\xd8\"\b\xc1\x8e\x97F\xa6T\x93\x06F\xb5L\xc8\x05\xc4vT\x14#d\xa5 \x8e\xd6b\x85\x95\xce\xd1\xcb\\`\xc4x\x90\x9c\xf2fz\xf2S\xa0\xd2\x1d\xc2\x1dX\x1f\x92\xc2\x17\xe4\xd0ጟ\x10~z\x18\xf0\b\xf3U~B\xd1\xdd\xf0\x8c5ɛd\x99h\xd1zQO\xb9\xc1@\xca*۹%+\x80\x13\xc4PKC\xb7w\xc3I\xbc\ar#1\x84\x04\xa79O6g\xb5\xbbl\x8cY\xeb !\xda\xc9|'T\xa0f k\xb8\"\x89\xc3\xcc\xd3B\xa9,\f\x12b\xf9*\xaa\x1b[\x1ei\xa81\x90\x12M\xe5]\x9f\x19^Yf\x89\xad\x12\x03ZbI9\n\x86\xe6\xa6c\xa6\x19L!\xb54\x84\u007f\x8b\xd9\x1d5\xb5C\x1fr\x95R\xc6+\xb4\x1a\x0f\xa4\xa4\x165ؽAV\xb9\x058\x05\x81\x84_\xf6\xed\xd4.b?\x13\x19\xdbO\x8b\xbf\xa8\xbb\x15|\xe6\xd9\x12\xd2e\xf1\x84,\xef8\xab\x87\x94\aK\xc4\x1d\xf6XSCv\xdcI\xb2\xfac\x12f\xcd\x0e\x96J\xc8\rdE\x96\x19!\xe3ն\x9d\xd4\xfd\x1b\x04ʥ\x94\xed\x12\x17}E(.\xc4߶\x14Z\xda\x15\x8fS\x8d\xbd\xbd\x15\x11j\xe8\x16\xa4l\b)܋\xd3)\x91\xed\xc8.\x0fB\xd4\x1f\x85Ւ\x01\xaa\xe5%_]Jd\x96\xb2dp1\xab3\xc5#\xc8\x11B\xeeI\xfd\x1dv(Rޟ\x9d\x15?\xaa's\xeb\xe6AG\xae\x04\x8d\xa8\x9e\xaf\x8ez\xe42\x93\xac\xcf\xca\xcfq\f\x02ǃ5\xd3\x009\x9c\bp\x04\"\x01YJ\x9e:{d\x90G\xd6Ē\x99\xf3z\xeb\x0e\a3`m\xf3\xbe\r945\x91<\x14z\xd4\xf7\xa1<\a\xc595\x82+x\xe0\xe5\xaa3x\x04s\x05\xec\xc7'\xd9m\xe2\xe9b\xd4ıPޅyEU\x9c,\xb0\xcdP\xb1\x80\xa3ԉ\x95\x1de\x86r\xd2\xdd$\x1a\x81\xeb\xe0\x87\xf0ޖ\xd4\xe0\xec\x06\xed\x96\xfd}\xb9\x96*Pp\xb9\xa7\\\xc9\xe7N\x16\xa3\xd1\xcbU\x8a\x91\xf2\xc9UQDĶP˩\x9ad\x9e\xaf\x84\xdb(P<6\x96\xa2s\x02\x84\x0e\x04\xcb\xd7\xc5\xde]O9\xe2\x94\xebI\xe2Q\x02\xcf\v'\xe4\x1a\x11i\xbe\xaevp\xe2\x06O\xb0T\xc8\x11k\x8ax\x15y\x93r4\xc8\xfa\x9a\x9cA\x8e\x96\x8e\xfdP키PHXHr~y1\xb2R\xc6E\x8d\x8d/\xec\x81\xc2Դ\xae\xc4dČ\tA\xf7A\xf8S\xe2\xb2&x\xc3\r\xa0\x81;5;\x05J\xees\x82̥ͥΛ$\x1a\xc5\xddoE\xaf:LCQDv\x97\xa3\x95\x82\x9cO\x838K\xfb\xb6\xe4\x88\xe6t\xbf\x86ͮ\x93f\xac\x9d\xddU\xa5eY\xc9`\xa8{\x90\xca=\x13\xa4\xba\x11\xbe\xdbc\x1f\n\xd9S\xdaV&\x93\xec\xbf%N~\xc5K:H9\x0e\xbc\x91!E6\x1e\x06\u007f%gڗ\x12\xa9nbلB\xfc\xb6\x13\xb3QY\xa6\x18\x13\xbaI\x95\xc9)4誐®\x03\xd2U\x04H\xa0c\xac,\x06ض\xc4\\\x8a/\xa6e\x89\xedr\x88\xb8d\r\xd7\xd3k\xb9\xa7\x83\x98\x81\x1c\xc6\x17\xb4\x92̞W\x15[\aښ+\x12\xbb\xca\x16ꆗ\xa2O\r\xae\x9aFQ\xb2\xa9+~\xd4L\x17\xb1\x9fs\x04\t\x92\x0f\xe5V\xf7-\x93,\xfa\xcc\x11\x83\xb5Bf\xea\xb5X\x00\xbaiHʖ'̒ܓta*\x1c\xcf\xf7\xbc`\xf3:\xdd\x10%s\xf5S-\x8fNHjΙgp\x8e۹R\xa9}\x9f\xddN#`\xd9\xe3\x80\x121\xd2v?W3B\xee\x96AE\xaeH\x8bD\x1f\u007f\x8d\xb3܅\x82\x12\xe1v6\xb0+\x189TL\bJ\x01at$s\x95\xd7\u007f\x88\xa9+\xa5\\6\xbe/a\x818\xd4TC$e\xb4B\x18\xb7\x94\xabwM\"\xb0\"i\xcbt%\x87\xc1\xa2H\x86T\x9c=2\t9\x89\xa4\xb4^\x8avR\xb0(\n}ʛEez\x90\x84\x13U\xb2n\x03\xaf\xc1PÒ\x80\x05\xba\x03HV\b\xa9c\xc5\xce\xddI%\xa8\x84g9\xe7\x89\x150\xc2Q\xa9\\9\x96\x8b(\x91\x97\x91\x02f\x1b\xb9\x12\xd3\xe5PJ\x1fW\\C\\\x8cl\x9e@\x83{\x8d\xef\xea\x12JdKuj˚y\xcbr~\xf4\x81\x0f^av\xc1\xe0\xe0\xed\x89\fmQ\x99c\xc9D#lE\xb7\xff\xc1\xbb\xe8p\x02\xa8S\x8ea惶C\xc0L\xb8\x1f\x9fL>\a\xe4\x1d\xfa\xec\xa69>\xa7\x8f1\n\x9d\xc9])}p\x9d\n\x8d\x1d\xdb|\xd2\x1dPV0\xa1\xf7\xd2\x00\r\xc9g>\xcbR\xd6%y\x81\x8a\xcbH\x94c\x1a\xeaІh>̚ne\xf7wi\xa5!\x1f;\xf3o\x12\xf6\xef\xc8]\x9a8i9W\xf0\x14\x15\x1d)\xaa\x14*\xdf\xd5l\xbe\xfe\xe3^.B\x8b\xac\xb8\x83̙'\xb70i\x8a+\n\xa9\x91\xcd\x06|\a\x8b\x84\xc1H/\u007f\xc3\xf3\\6\x99\x04\x98\xa1\xd6\x14\x82\x04\xbb\xec4\x96\x1b.e\x05\x80|\x06\xc0\x1al/`\xdac\xf7\x92\xe4\x0e\xb2%\xb1\xc6\xecQH\x91\x80]&\xdb\xc8\xecʒԳ\xa7F\xb0\x1e\x8dy3T\x8a⌏T\nPf%\xc3iEf\xa1\xe75F\xb8HNG\xb9\xa8\xf7\x16瞄Z\x10\xb46rw\xa4C\xd9EQ\xf4\x92\x94\xd4\x17e\x1c;VK\xe5\x0e7◂\xe6N+9M\xe6r\xffIJ\xcb\xf2\v\xba\x92\x91P\xceXLV\xdc\xd2I\x88\xb8T9Ǭ\x9e\xa3\xcc\x00Bzl\xa8\x03Bw\x1d8\x94pܖ\x98'YYff\x97\xe5\xbes\x1c{3\x17a\xc3l\xbe\x1b\x18\x1d\n\x9bCѳ\xd8\x1cp\x9c\xe3+\x8d\xac\f\x15\x056\x93]\xb1\x19\x8a\xc6\x1es\x99\x13\xaa\xd03\x88\xa5\xcag\xb8\xed4\xbd\xc2\xc47,Su\xcd\"[\x91\x8c&\t\xd4'kH\x89#\x829ܴ\xccŠo?;M\xe7dT焄\xc3`\x06\xaaJ`\aW\r\te\xa3\xf6%\xc5f\x10\xb0\x139\xcd%\xa6\f\xc3\xcf\xc8\\\x89\xcaWf\x81\xcb\xdfx\x82}.r\xf3\x9c잵D\xaa\xd5\x1cWo&ctKOm\xf1v79\x8b\xf9\x9e\xbe\x85N:\xf2!\xd8F\x92\xfe\xd9\x18\xd5\t\xe5\x13j\xf6zL\n\x15\x85HB9\xa4~\xb6\x82\x91`1j\xbfmÍ\x17\xb9\xe0M\xf0Rʍ\xe0\xd9\xf1Z\n\x19S\xe4\xb1I垗U\x89&oJI\x87R\xc0\x05{Y\xad\xc3}\x97\xdd;\x99\xbc\x8d\x9c\xd9\x10\n\xcdS\x12\x05\xa1\xf4>\x99\xcfg\x14l\"eq\x98CT\xc5&/\xeet\xbcW\x93\x1d\xb3sGt.\xa9\xf1\x0fsW\xb3W.\xbb\u007f1rЦ].2\x80)\x89r\xb3k\xe5\xfb)\x82<\xd8I{\x12\x80N\x9e\x92,\t\x9b\x9a\xaa\x84\xb7\x85\xdc\n'\x85\xcf|\xa6L\x04\xfd\x81\x01F)\xa0\xc3\x06\xdf\x1d\xa2-U\x14$\xc1\x16\xbd\x92e\x1fj{r.\a\xddFQ\x82\x1d\x8fB\xbe{3\xdcf\x85\xe7n\x10;\x91^ٽ\xd9\xc5\xc3C\xd1\u007f\xad\xe0\x8d\xe1H\xee\x10\xd50\x88\xa5\xe6xEn;\xd0\x16\xeb\xe3^v\x1f\x106\xe9Q!a\xc7q\xdd\x03\x0e\xe8$\xa8K\xf95\x03\xbec\x05\xad\xefP\x88\x89Q-\x9e($A\x11z\xed\x84B\xaeY5\x90Z\xb2\x96\x94&\xec r\x9a\x92ϒ\xb0\x90\xfcs\xf7ˠ\xf0\x0e\xbb\x96\x18\x96Ff\xe1\xa0<\xdf48\x92\x18\xe7;\x8e\xe3\xe0R\xc5Yp\x92\xc4vu$I\xbd\x1e\x10%1\x85^\xb0\xd3\xe0ےTcb\xff]?\x97*A\v\x8d\xef\xea\xc6\xf7\x1aŐu\xf2\xfa\x87\x14\x96z\xb8\xb7\x1a\xa9Br\x13\xf7\xdc\xddE\xaa\xa1N\x90\xdc\xf1\x86\xee,\xdc\b\xd9\xe9\aA\xd1!xеI\xc8\x028Ε\xbe;\xe2\xec\xd6=Ijb\xf7\x8a\x14\x89\xc6 \x05\n\xc6bvO\x15\xe8;\xf6\x1dC\x0fN_O\xd24\xb9\xe2m\x9f-\"\xb7\xebv\xe1\x82\bi\xdaE\x1a\xea\x16\xb2#\x8c\xacn$\xa0*A\x03;\f\x15\xd5ɆĶ\xc0Pċ\x029S\xbeG.3\x14\xbe\xddx\xee.\x85\x12q!\xd65\nk\xebf\xf7\xfc\xecI\rV\xa2\xde}\t\xce!\xc5\x19\xd1/.\xber\x1a<&\x87A\xf6\xb0\xee\xe8B^R#\xbb\xcdZȮ\xa9\b\xc8D3>\x968ߣ\xbb\r\xa3\xc2^\x91\x92O\x03\x9f\xf7\xcf\xe3\xa5Tݻެ\xe3\xe0\x97\xa3̦PM\xa0'\xa9\x1b\x1c,C\"\xab\xec$\xf1\x88\x82'\xc3\xed\x80\xc9$%w\v\xc2\xc4J23aY\xab\x83\\\xf2\xbd \xfe4\xc9\xd7\xfd\xa0x!\x0e\xfd\x96\x9c\x10\\\x02w\xf6\xd3i\xb2L\x8a\x1fub?\xf6SqP\r\x82\xa0k\xe4\xee\x80(\xb7M\x94;v\x1f\x86\x1b\xb7\xd2\rSsEG\xb8\xba\x91\xdc}\xa3L\xf9g\xc1i\xd1ur\aJ\x1br\xd40\x1c\xe0\xffg\xef߶\xd4H\x96\xadAxl\x02\x95j\xed\xf5\xfd\xef\xa07\xf9G\x02\x05,\b(H\xd8#\tz\xf4\x85\xa7\x14\x95\xb8RI \x12WA\xbe|\xf7p\xb39͜\xfa\xfa\xb6\xef\xfa\xa2\xa8\x10\xc9!\x88\xf0\x83\x1d\xe6\xc11\x83\x06\xccghc\xb2\xa4\x06\x0f\x9c\xa4\xd2\xf4]\xc3?\xec\xdeO\xbc\x99\x86*g\x1boO\xbbK\xaa\x85\x9bZ\xb7%\x15\x9b\x02ɞ\x88\x05\xc4\n\x04\x91*\x93\x10S餽k\xca)\xd6ml\xb7R\x03\xdcutV\xed\x13%k\x95\x88`\x96\xe6\x8dk\xd6\xeb\u007fv\t\x92\xf9\xb8\x18C\x16\f\x8ahzX:\x06\xcbR\xd3>\xdeQ2F\x91\x1e\xcf\x04\xa2\xcf\xd31\x871\x9f\x17\xdd[\xfcn\xea\xbd\x13Zf\x8cX\xc2\xe7\v?m\xbaW1e\x89\xdfX\xbd\xd4\xd6|\xfe\x85\x8b\x1bl\xed\xff⚱\xf2\xeb\r\x02qBĒ'\xc5_G33\x19\x9d\xa3D\xd4J\tfE\xff\x0e\x92\x11NEq\xee\xa9\tpɸ0_\xa7\xa7\x0erX\x8aZ7Ï]\x02\xbb\a\xf8I\x9a\xdc\rZ\xc0V\xb5\x01\x81\t\xa5t\xd3RDrkю\x9e\xdf\x02;\xbc\x96=\x81Q\"\xa1\xacu\xb2\x9b\xa9\xca\xf9J\xa43\xbdHk\x19\xbe\xcb\n\xbbbg\x10\xf1t\xcb6a\xa2똔M\xed\"\x8aP\xe1(\xfa\xcb5IUP{d7\x95^:h\xf4\xff6\r\x1f]\xfa\xf2\xfb\xf8\xdep\xfb\xdcs\x1f\xed\xf2J\xe4$Q\x83$-\xb5\xcdPYO\xf7\xe9=|\xf9\xb4L\xdfZiWj\x17iƾ\x91\nL\x91l\vМ\xb5l7.\xe0\x8cղ\xf0͉\xec\xf9%\x13\x1aR\v\xa1\x92\x1b3!\xc2oϙ\xb1f\xd3\xce$\xab\xb1\x05M\x9d\xe89c\xd3a\xd0Q\x9e\x9b\x9bm;\ua6f9c6\x96a3\xf3iX>u\xe3\xfc<\xa8\v\x8bq\x05l\x17E\x86\xc8m\x9e\x80c\xa1.\x8fZ\xfehT\xb7\xa2\xf1\xea%-\xd2t\x8a\x9d\xda6z/\x98\x86\xce\xe8\xcc\xd6d\xf8˸\xfb3q\xaac\x89\x92\x88\xa8aKV\x95\x92\x11jw\xc91\x1co]q2\xb0\xffN\x85\xa5\xed\xde\xe4\xc2L\xfciC\xc1t-I4l4h\x88\xe9\xb2T\xfd\xf9\xdf@\x8c\xef\\Q\t\x11\x83_E-)ȳ̐\x97TiGB@\x99\xf6B7\x1f\xba\xa3\x8c\xe2\x13\xbb{CG\xd86\x80\xa3\xfc\xa3W\r\x8c\x81dh\u007f\xbc!T\xa8]$\x11\xeaRB\xda^\x9aћ\xba\xf0o\xdfӫ\x8d\x8da,\xb5&\x8d̿&?\x84\xbd/^`(\x97E\xf7\xf3V\xec8\x8d\xab\x1b\xd3\xd1\xd7\xddb\x9e\f\x90$/|p/Ri\x8a\x0e\x0fё\x10\xb4.\xf0Cꞈ`\x86T\x19\x94Q\x1f\xe9\xbfl'\xcb6M4\x88\x91.\v\xb2\x93\xfd\x89\x18q\x1b\xcd:\x0f\xd6XNJ\xd4\x06 r\x11\x1a\xb3\x1dP\xa8\x98\a\x8b\xc2\xdc\xe8IF:\xf9Р\xea=\xc1\x00q\x00\x13\xcb'`%1\x15\xa4&\xb1i\xfd\x80\xc5-Q\x9b\xdfPG\u007f\x88\xf6\xbc\xfcc\x92hv\xa9G\n\"\xec\xda\xd0UU2\xfcykc&\xb8\xbd\x8f\xfeV`\xba\x1a\xb7I`\xe0\x85\xebG\x8e\xe1\xc0\x8bɺf\xff\xf7\xe6\x10/\xe1-~\x00\xf2\xbd\x04\v^\vF\x93d\x05:\xc0\xed9e\xf6\xad)\x8c\xbb\xb2\xe7\x88k\x9eF\b\n\x85\xa3\xf1\x99U\xa1L\x9bA¸\x85\xd5\xe8`5K\x0e\x84\xa1\xe0\xdcD[\xc7\xd6&*\x9c\u007fR*ޫCq\xfa\xf2y\xfb\x9e\xa4IS\x98\xa7Z\xf9\xd5\x03\x10Y<\x9f\x82\xb3\x06g\x1eM*\xf1\xacc\xa3\x14\x1b\xe1\x8c\xda'\xe0\xb6N\fq\n\x91\x01\xc5JA+@\x06\x89z\x83/#\xac4t(\x10ױ\x86r\xb5\xa0m\x1a\xcbJQ\tn̄\x06q\xc2\xc8\x02\x1aA3M\xc1!V\x02D\x9eY&S.\x164\x8b¡\xc7\xd9\xcc\xd0#!\xa1bE\x05oԑ\xf6\xd4\U000362be\xa26dG\xa1O\xb8 ߇E{\x86:\x8a\xb2\xec/\xd8b\xd7H֒\x01'\xabL\xb5\xe5\xac7AEP\xc0\xbd\xea\xcc+\xd85\xbd\xa44\xa0\x93\x94\xfe\xfe$\xe2\xc19\x8bZ\x9f:\x84\x1a\xb0\xd3xS\xf4\xde\r\xa0u!\xf9ݠ\xbdC\x1e\x89\xa4E\x03\xaf|\xdc\xf6\tӠ\x05\xbay\x92\xb7\xae\xac}9\xf6\xbd\x93ʻ\xccl\xb4\xb9\xbbB\xabA\xf6\xdeM\xc1\xbd\x91\x0e]\xde\x03\xb8\x0f\x16j\xe5\x82\xfaR.\x90\x01w|\x19\x98Y\x1e\xae\xa8\xfaAK}L7\u007f\xd3\xe5e\x00D\x91\x98\xa5\xee[s舆\x04\x99\x99\xe6\x8bY\x8fzr\xa6!\x8dr\xcbM\x04\x89\b\xca\xfc\xb1\x1b\xc0\x9a\xf2\x1a\xbf\xa3\x1c\x8b\xe2*\xad \xd8\xc4\xc2\xe7`\xae\x05eO\x90j\xb3\xfa~8\x96R\xe2\xd2;\xab\xe1\xf4^H\xf2\xcc(C,\xe1)\x05\xb3[J⨁R^k\xe6\xc9LZtf\xe4}'\x9f\xa7\xfe\xeeG\xdeEm,a\xae\x96\x19\xc2\xf4\x0e\xd6\xd4)\xc4\\\"\x10Q|y\x02ѫ.\xc7Ziv\xc0\x98`V2}7&v#\xa4\xa7U\xf8Qfe\xec\xc2\xd1\xd4,\x0f\xb5ei?w\x04\xd6U\x16_U+>\xb4\xa6\x04j$\x9a\x05Y\xfa@u\xaaVG\x87\x96\xc1\x93;쉙\x93\x95\x03kj<\xa0\xad2%\x96tBz#U\x9eYał\xd0`\x15\xddvt̥\x83>\xeaM\\z\x9e\x8cǤ\xc2\xf2\xb8*\xab6:A\xa0E\xbbE\xe8H+:\x19\x93X\xec\xb8\x14\x81\xe8+snK\xa3\xfe\xb27\xac\x9b\x15\x12*\x85F(\x11H\x12\xff-\x9a\bj\xa8\xb1A\x1a\x88mrK];\xd7O\xad\v#\x05\xae\xd2n6$!\xc9c2/7-\xfe\xe4(\x9a.H\xe6P(\xb5\x0362\x953\xe8,Q\x89N\xe7\x1dٹS.\x9a\x98\x18y\xc1|\x02\xedrR\xe8K\xc8`\xd9\x06s\xe5T\xadW\xe8\xfe\x90\xa6\x15Y0\xc7Zd\xee\xa6S\xabQl\x83c۴:5u]23\x04\x01`@\x16\xbd\x1a\xfa3ڭv\x06}\xdd\xc6;\xd2\xe5\xd8\xcb\xdb[sN\xa7\xbd\xb02,\x91\x19OX\x17 O\xdd\xfd?\"\n\x8a\x92\x89NM\xc8g\xe9\x03G\xf3\x04\xe2\x1b\x83\x8b\xffG4\x87\xbc\x9c\x80\xdcl\x1b\x8d8T,W\xb69\xb8I]\xf5\x886\x15\x03\xac\x04`1\xd8\xcf$\xf0|\xde\x1c\xe2s\x82\xe6\xdb\x1eF\x04\x12\x81̌\x83\xaf\x9a~\xe1\x88\x1fи\x8f\f\xd8\xc0\x8f\xa6J_\xf4\x9f\x01JkR\xd9\xc7\x144ӈ\xedO\xedt\f\xc0}{R\xd0\v[*0\x1f7ƥ\x89mL<Θz\aB\xb6\xe59P\x91X!\xcc\xc8\a/\\D\x87\xf6+\xfa\x92WZ\xf1\x05\xf3\x04\xf4\x808\xe1\x04\x93\x98\xba\xeb\a.Z\xfa\b\x16͋\xa1\x1b\x00/\\_f\x81dx\x16a\xec^\xda\x15My\x15J=Blu&r>sz\xfe\x9d\a\x1e2 \x02\xbeU\x10\x89piE\\\xac\x93\x8bP&\x8a\a\xa2ɶ\x8e&\xfb\xb7\xf5v\xb2\x12\xf3@w3l\xb6\\?\xea\xae&\x17\xbd\x19Zl\x03\xb8\xa1\x94\u007fD\xa1\xd7N\u007faM\xa1\xdf\x1e\x05\x1f\xa3\x97\xd8\xc7\x17\xe5\x1dQ;7|\xb8fm\x04\x9bj0\xefn\xcaJ\xefi\b%\xa4&墵~.\xbb\x1b\xf3\x96\xe8\xe3\x00\xfb\x9e\x98(d'o\x89\x06\xf9\xd8\x1c\xccCZ;.\x92k=\xb5\xac$\x04W\xec*\xf9Z\x02B\xde \xa2B˨%\xddJ\x12\x1aQ\x06\x97k\xfd\xd8\xd9\xf2G\xe5\x95ed\x15Vs\x03\x1dN+\x83UI9TE'\v\xc9d\xa9\xf4I\xf6\x88L\xdbu\xa3d\xf3\xdcGGܠ\xe4>vf_p\xc3~Y\x03\xb7-\v'\x92A\x17\nk\x13[Ȥ\xd8Y[ԡSK\no~\x8f\xb1\x90\xd5\xc0\xf1\x83\f\xa2\xbe=\xf1\xe8#W\x19/S\x88\xe4\fl1c\x9057T\x11\xeb,\xd0C\x148C\xedmJ\x1d\x9b\x0e\x13\x00\x00g\x92\\h\x85\x15\xbb\x15\xf1\vjM\x1b\xb9\xad\xec\x10\x12Rv\xb0v\x15\x17\x15F\xea\xd8n\x049%Xw\v\x92\xeaG\x90\x93f\x85\"\x8bH\xa6\xcbr \x05\x94\xadA7w\xb1\x90\xc5\x10\x8e\x1b\n7S\x1f\xcb5\xd82\xb2\xe1벯\\h\x87\x0e/\xac\x9b\xe8\xee@\x1a\x11\x90pl-\x1d\xfe\x0f\xdas\xbb\xa2\x8dՕ:\x16օP\xb2\x85l\\[\xc6\xf0\f\x0e\xb5\xbe\xaa7{ꑞB\x0f\x8b\x0e\xb0\x86<>\x93ww\xfa\xc1:\xa9V({\xe2f\xac\xcc.y\x9a\n7\x06\x91\x88\x9bqJ\xc8B\xb0\xc3\x12\xe6I\xf6.:\xd6vg\xfe\xeb\\0\x17\x11\x8d\x1e\xc9yj\x97\x1b.\x14\x1bu\xe31\x06\xdd\xd64#\xf4\a\xaa\x14u\x8e\xdb\xd5KcKd\xe9F\x15\x06J\x0f\"\xf7\xa5\xe7\x95\xd9ZS\xabf\x82\"\xb1\xd6\xc6\xd7vh|\x98\xd8\x18Ǩ\x86t\xc2\xe3\x9bP\x93\xc0y\x83\xfa\xf1\f}X#T[\u007f\xf3\xec\x9fB\x18\x02a\xe6,\xba_k^\xca\xfed\xf3[\xe3i\xaf\x95\x1b\ac\xefN\xd6O\xe0CX\xc9X\xf5\x9b\x0e4\x9c\xa8#u\x93dt6\xaea\xa8;d\xed\xb2&2\x1d\x1eX\x02F\xc7|hj\xc9Ng\xd4B#-\xde\xd9f_C\x98̀=\xc1\x9aV\x13\"\u07b5l\xb1i\xbd\xd7DI<\xfd\x10Dx#\x97\x92\x821\x12\xc1'5\x8b.\xa4`\xa4\xa2\a\x84\xa1\x0e\xb8Yk\x06\xbbk\x9e)\xb0\xf4\xb2\xaaKg쩔\xb9\x82\xdeOR(\xa6n\xbd\xb3X(\xef\x03\x89\xbe2q\x83\xa7\x16\xe7%\xf9\xfeڽ\xe9>M\xc5mVT&Ƭ\xd5}\x1a\b\xfcwf\x89\x00@/\xac1\x9a\u007fCc\xb2\xab\x1b\xc2|\x8dx\x00ܭ\xaaBD`I\x11\xfa\r\\qZ\x85\x89\x9c\x0f\xbfJ\xe5\xe0\x96\xd0\xdd\xdai\xf4(I\x85\xc3\x0f/\xa5i\xfe\x16\x89\x93\xa1\xc5biʣ\r\xa7)\xd3\xf3\xb2\xe3$\xe2Sc\x8a\xe3\xd4w!\x05~\x19H\x9fw\x00\xb1&\x9ahZMk6\xac\x8eJ=g\x01\x10\xd4șs'ǥOW\xe3$2\x04\xb9\x1b\xf7Vw\x99\xc0u\xba\x03'(4ӥ\xc6\x1a\xdf\xd5oF\x1a.\x18\x96\xc6\xcfXX\xe5qk\xdd,nE\x8e^\x9a\x9a\xab\n\x9d\xbf\xa0\x97\xe2z\u007fu\"T\x1d\xed\xba\xc6j\x85&\x9d;%3NT\xa3Px\x18yc\xb7\xa0\x03*^\xa2\xf3\x9ch\x1f\x9c\\\f\x12Y0\xb9\x0fkF\xaaC\x95\xad\x17\r\x8b\xd5\xec\xee\xc8\xfdY\xc6\xc4\x15S\xf3\x84\x15\xfaU5\xf1'*\x19\x19\xb8m\x98\xe0$\x88w\v\xb6\xe2\xb0\xd9ɶ27N\x021\xac\x86P\xc0\x13w\xd8\xd6R\xbdg\x046?i\xda\xd27\x9d\xb7\xac\x04\x8eUz\xc9\xf9\x06\xe8}\xea \x815\xba\xb5\x12\x82y뫴\xce\xd6\x14Y\a^*G\xedbj\x8d\x19\x01\v\x8d|\xb2oL\xcbME=\xb1\x17Rl\b\x88\x9d\xbad\x15\xa2u\x875E\xebW5&\x9b1\x8bX\xc22q5\xd6\xcb \x1aܘw\x92\x8aޙ\x17\x8e\xdeU\xb9\t\x1a9Դ\x80\xd6\x19\xac\x88\x02\xea\xc2vF\xa3qaq\xa9\x1dAy\x8f\xd1\xc5\xd8\x1dT\x1b\xfe\xb5\xa8\x9f˂\xfc\xd8\x16\xf8\xa0\xb1\x0f\x1d\xa1ɯ\nEm\xd1\f0k6\xedd(\x10\xb0\x0e\xa6U\xe3y\x9b\x8e[ŁM\xd9\xf2<\x00\xc3G\r\x9d\x82~\xef\x00\xc0|\xdb\f_<\x83\x11:|\x9f\xa2K\xdds\xee2͢9ڑ^\x19\x94\xa3\xf4e\x8b\xaa8\x05\x85JC\xb9'\x8b\tf`\x15<\xddǬ\x881\xd5]\x81\xf0\x134\x9b\xf9o'Ė\x9a\xdal_7\x06\xebzD\xc9DV~q\xfd\xdb\x1c\n\x9a\x19 \xc3\xfe\x13}}Vl\u07b4\xbds\x04C\x03RƊ\xac3\xe3\xd6\xfd\x1dw^\xacr\v\x0f\xe7\xc0\x0e\n\xe9\x88T*1\xa2\xb0\x93C\xc6e\xb2rE\x91\xd52&\x9b\x99/ {\x04\x81R\x9f\xad^\x12\xbb\\\x86\x8c\xb4\xd68\xd0\x1fO\xe6f)\xa5PA\xd3x]ZO͠\x1aڞ\x1fP/\x049d(/\xd3\xc0\xf5ط\x9e\x1b\xeb\x92&\xa3\xb4\xb7\x94\xba\n\xa7\xfd\x0e*\xb9n\xe0\x9b\xf42\xab\xffs4\xbd\xd4Ό\xb8U\x9f\a\xbf\xac1\x82\xef¶\xcd\xc6e\xd6e\x0e\xfc\xfeg\xf7\x91.D\xdds}\x94z3\xb4\x97I\xa8`\xd1\xdfbQ\xb2\x18\x04\xc06\xf6l\xb4\xb9CЃ\r\xdb$g\xea\xba\x1e\xc8Sk\xfe|S\".\x1e[\x9b\xeb\vn\x85\xa4\xab\xaay̾Фڹس\xf7\xa3\xcbœ>\x94\xa6,\xf6h3s\x17M\xf7B\xa5;\xe8\xcec\xd1\xd2\f\xe4D(Z\xd7n\xfa\x1a\r\xe2\xa7\xd3B\xe1\u05f6mI\xfeQ\xd3\xcf\t\x89\xa3\xf9N*%\xf3\x9f\xf1M\x93\n\xa7\x9f\x9a\fl\xe50\ri\x93\xaa\xba\xcdɴS\x1d5\xa9\xe3\x11\xba\xd4\xd6(k\x18{\x81W\x99\xe7\xe7V\x8a:\x9f\x96\xc9\xc42\x1emc\x98[\xf64+\x9d\x92ͭw\x8asèxd\xf0\xa7,>\x9a\x18h\xac\xaa*z\xda\xfb\x00sY702\xb2\x14\xec\xe4~y\x8d\xa1\x03\x8d\xb7\xe3\xf2\x1f\x8f\xe6\xf8VDd\xfa\xee\x02k\xa9WU6\t\x17\xb2td\x90\xba\xeaE\x1bK\xd0\"H\xe1\xcb\xffo\xfb\x9e\xde\xda\xd7p|\x13\x96\xe0\xcaゕ\xb7VP\x90}`T\xab^I&I8\xa6\v\x1b\xd4+\x955\x1dT㋱f\xf5Ǚ\xf3\xecN\xabro\x84Tb/%\xd24\xc3\a\xd7X\\\xd9\xf6Iǐ\xa0%`\xd3\x01\xdav\f.t\xcd\x19\x89\xbd\x19\xf5E\xede\xd2\xdf\xd5XH)xLes\xac\xf6\xfb\xff\xbc\x1f\xa2\x14\xc5V\x91\xd1߂\x92j\xd2\x02\x96,WX\vZ\xd0\x18\a\xb2\x9c%V\x9b\x98\xd1HC\xd9(1X1\x04\x8f\xba\xaau\xaa\xdb\xc1\xda\xdfBe\xccX)H\xf6(\xe5\xb1-(9\xa8\xa0\xb4\x1e\x8aS\x19d\x17\x9d\xbc\xb2\"\xd2y\xe2}y\xa9\xb8k\x98$ՅQ\xa2\xb7$\x11˶\xa7Z\xed=\x99\x98`*\xe4\xc7ULE\xfaခx\xddQ\u0590\xad\xa1j\xc9N\xfa\xcfk{\x84\xb3\x16\xbc\x83U\xf0\x06У\x01\x055u\xc2=\xb5\xa8nc\x1a\xeaYK\x92\x94G\x98\xedLP\x13\xa2~\xa9p\xdc\xf3y1XA(&\xa7٘\xf0\xa5v\xa9iv/\x95N\xd9\x00-\xc4i|\xdeʀ\xc0m)L3\x16\xf4\x15f\x8e\xbf4\x84\xbaF\xc1\xb2\x01j\x1b\xfe\x9e\x88\xbcB\x8f\xfa\xc1$a:t\xab\xa1\xac\x87\xfc`bV\x85\xcbB?h\xea\xda!Ӷ #k\"d\xd2^@\x04\xa9J\x9e\xb7\r\xe5\xca˙m\x0e\xf0\xb6f\x04+e\xce\xe4\x95z\xf7\x89@\x83\xab\x8e\x85\x11\xe2\xa7Mr\x03\x9f\x01\x9bQ,\xb2BAl\xea;\r\xe8\xf2!\x9a\xfa+\xb4Fװ%\x1d\x98#\x8d\xdax\xec\xe2?\xf0\xb2\xf3\xe4RĶ'/LK\xc26W\xfb=\x86\x9b\x95B\xf80\x99\xe8\xd8\x19>\x9f\n=\x9aR\xebK\xae\xe2\x93!\u007f\xd5\n\xbbЬ\x97Eta\xb6\x1e\xfc\x93\xf5Q\x8c\xb0\xe7\x84\f\xed\xea\x0f\xe2\x9d\xf3\x14\x1a9\xc6\xf3\xa4\x1a\x9c\xb5\u00ad\xad\xa6zO\xf6\xcf\x11\xedM\xf4\xde\x19\xbf\xd7J\xf8\xb6\xb8M\x89\xe6\xd7\xebNF\xc0\xc2M\x01\x87\xb4\x03\x94a8e\x01U\xf7r\u0558\x84\x1d\x12\x8a\xf4,\x06\x16}\xe8\xc6\xf2Q0\xe9\xd17\xfe[\x94f]\xd6\n\xe3gD\x04\xdd<\xb9a\xa6\xba\xcb\x06\xfbg2?\xe4\x15\xeb/B\xda X\x8cr\xa0\xcc\xe5\r)\xee\x1f\"\x9b\xdfc\xc1\xc4T4\xbdWr֬㖢\x86{/\xa9\xcb\f\xd8X-I\x96\x99I\xa0\xbd\"\xc4:՞\x92La\xacO\x13\xd6\n\xe4#fl?\x1ae}b\x0e%\xe3D\x1a\xa5\xec\x95\x01\xfc5\xa0\x9eZ\xdb\xee\xd5\xcf2\xd1\xd9\xf2ɽ\x8dd\x14\x8d\xd8\xea}\xb2 \x1e\x908\xb3\x947\xfet\xa3\x12 \x90c\x1f\x99\x9b\xf5\x8e:Y\xd2\xd7\x1cF,H\xf0\xd6F\xa5[P\xae\xf3VCH\xb6\xed6f\xe9\xb4';H4\xa76p\x81\xc4B\xa2\x95RhPJ\xac\x10ʶ\xc5]\xf6S;>d\x17\xdd\u007f|\xe2*-;\xf3\f\x11l\x97\xcc\xe1\r\xab\xdbR\xa0\x9b\x9b\x9b\xc9\x006\xd2$34\\\x98AQ\x80ʎ\xb9\xe3\x0f\b\x8d\xd4`Ia\xff\u007f\xb0\xe3\xfa\xa4\x02\x87f\x14\xeb\xfe\x1a\x8c\x1d\x04'\xb2\xa0\x02\x01\x04cw\x84s\xdc\t\x8b菑>\xf3ڗR\xa3\u0558\xde9\x9b0\xce\x04Ջ\xa6\xc1\xef&u_~\x1f\x1eb|\xb7\xaa\xe1\x93\xfbJ\xae\xbc7\xeb\x06\x02Mb2\u07b2s\xff\xd4:XX\x99\x81\x06\x81\xa6Lm\xeb\xb2\xe6SE)\xf4\xfe\x80\x80\x91+\xb1`\xe0>\x11)9,b\xd3&\x1c\u0379\xaa\xa5\xb2\xfc\x1a\xbdz\x91a\x00ۋ\xb2U\x02\nCbF\xe9\b\xf6\x03Q\xdd[P\x94\b`\x19P\x89\xa3\xbb\x8cD\xe6\xb8&\x96\xad?\xf0\xb1\xf0\xb9@\xc7:\x85\x02]Rԏj\x0f\xc6t\xe8\xa8\xe8\x96F\xc3\r\x8dI\xa7\xa9He\x98\xc4>&@\xbek\xb2\xf8ɁK\x9d9M\x1d\xe9Lͼ\x03\x15߀һT\xa9\xb7\x1c\x1c\xd8q]\xdeLjk\xa9\xf0M%(\xfc\x81\xf5\xf7\xad\xf1P\xf5\x9e\xe1\x17\x0em\x12*\x92\xd4\tM\xe0\xfd\x17\xccg\x1d\xabz\x89\x1fL!n\xe1h\x1c\xb7P-\xa5/\xe1\x84\b\x99\xfa]\x14\xee\xae\xc9\xd3HUy\x84\xbc\x9b2;\xbc\xe1\x1b\xbf\x92B\x93\xb5ʗ\x86\u007f3\xf2\xa3\xcc4\x17|\xeb\a\x80\x99\x87 U\x14\xfd 3\x9d=\x16\x9c'\x14?\xf2\x8d\xda$\x83JX_i\x06o\f\xed\xb0l\x10\x9e\x82W\xa49$z\xb2\xf4\x1cH\xd4\xd3Q|\x80\xa0\xecF\x89|\x14\x8cI\xa3u\xb0d!\xd5\u0089\x93\x01B\x816\xb4\x17C\xb6\x81M\x01\"1v\xd1\fe\xa8\xe0\x84\xd1-\x1a\xc6\x02M\x8bmQ\xa3Q\xe8P\xa4\x12\xba\xee\x97\x12\x9b?\x85/\xff\x1e\xb5\xaf\xe1%\x9dÛ#\xefᖮ\v$\xe5\nU\n鉠\xd5\xff5j\xdf\x0f\x11o\xfc\xf7\"\x9ey\xfci{\xe8\x8eE 즫y_\xf9\xf7\xb4}M\x97.\xbf\x16\xb1\x02\xc7\xea\xf0\x10\xbf|ބsxmy\x035\x0eX\x81\x02Ώ\xc1Ʃ\x9b\x85̋\u007fo\xda\xe3W=\x19H\x87\x98B\x16|D!\x1a-\xfd\xee\x05\f\xdd\n\r!U\xcd3Q\x00\xe2\xa9\x00j(\xe0:\x13\xeb\xb3h\xe1d\xeb\xb8'5\xe0\xd6\x1f\xc3Ms]\x98Y\xdfu^\xf3j\xc1Lp\x03~'\xf2`H\xd9\xd6P\xd8k\\1\x18\t۲0qk\x8a\xdd\xdb$\xf7m\xbbW\xa1\x93\x91{\xa6\xa0\x80,a\xe7\xd6\v\xe9ڬo鮸\xa6\xf8Ȏ\r[\xae\xfb\vV\xfc\xc6\f(&\xad\x9f\xcc̜\xf8\xd6n@4&\xfaX\x99\f\xe1\x04\x87Z\x84\xa9Oj\xfa\xa0\x88\x1e\xf9ҁ\a\x10\x92\x87.\xf0\xdf\x10\xceת\xaa9\x88\x90\xa2\x15=\x05\xe8:\xaaF\xe9J\xe5sߙ:\n\xa4\x84\xca\x06\vh\xb5\x9b&\xa1L\xfbQ4\xfdf\xb96\xa3\xc2%j\x86\xde;\x8d)\xef\x8b\xc5\xcaӭa\xa8\xaa\x8a.\xf9c?o\xc3EgC2\x156|\x00\xd1\nfS,\xb3u\x84\x14Y\x01\x9a#\xb6\xe7Ʉ\u0558\u0382~)\x82\x8e̫v\x16Y[B\xd89iM\a\xb4C\x16Ȯz\x1e\x16p\x003=\xb6\xf6H\xbf\xd8\xc0ۘZs\x80\vN\x1a\xd1F\x16E\xc0\r\x951v\xf6튮\xf3\x13\x96\x15\x86\xec\x1e\xac9\xad\xa0\xf2I\x97\xe9-\xf9\xaar\t)\xe0U2\xac\xa9\xe4\x14\n\x05\xa1;{'b\x85\xb1\xa0\xb8X\vh]\xb1p\xf5\xd2&Wc\x8b\x0e\x1c\x98\xedy\xabi\xc1\x9d\xd4\x04\xc0'Hk'$>\xceL\x8ce\xd5\xda\x1f\x1et\xc8O\xad\xc32\x884,=\x98`:\x99\xa9l\xbb\x14\xb8D\xc5 \xec[$OSG\n4J\xf8Чf\xd4,\xbek驀\x8e\x95\xe9\x80\x18\xa3f\xf2J\x11]\x1dMB\xa4\xc7&\x9azj\xdb&j\xf9\xe6 b\xb2\xa2\xf6\a\x88\t\x8c(\rmB\x842f\x06\xa6\x14G\x10\xc2\n=J\xbch\xaa\xfa7r\x93$Y\xcb\xe3\xf1\xc1\xf5c\x9a\x02\xf3\xabmRœ\x8d\xa9\x92\xaaQ\xe6\x8a!E>}'\x9bBk\xa9\xe0\xf8Y\xd6JMV\x16\xf2'\xe6\x01Q's+\xea\x98\x12\xc8\x1f&\x10dZ\xa4{\xf6\xfe\x8e\xcb.Xm\xf4\x99Ej\xa7\x04X\xa4\xfd\xa3D\x92\xf3\x8e,\xac\xb1\xb5\xbb47\\\x14Q\x99\xd6\xd7\xd4\xe0\xd3\xcfUe\x8d\x17\xee\x17\xadTO\xd5&\xb5\xc5\xfbO&zM!\xe7\r\xa7\xc2CK\x82\xfe\x88\xb2\\\x14\x1c\x9b%\xf7\xa9\xf2:\xf2\x82\x12\x91\xfbC\xba+\xa3\x80s62]\xa5\x11$\x8d\xa4\x8c\xa5Bk\x8a4\nLJ\x06L\x19Py\x91Lgd6\xd7\xf6\x01\u007f\x9c\xa9\xbb\xbaK\x86\xc5@\aK\xe9\x1d\v\x8b\xb1\xa1\xb3\xd1\x18\xbc]\xf0\xa1\x18s\x8bP\x8cB\xa7\xa5̒)pMC\xc9\xf1\xe0\xdd\x15e\u007f\xf9&ٰ\xfc\xd2\xee`\xaa\xaa|\x91\x02\x15\xc8X\xdb\xe4xuuظH\x9b\xd6\r\x9b\xc0&$k\xc45\x84\xb7\xf4j\xccHXg\n6*X\xbb\v\x1a\x83.\v\xbb\xf9Y\x84\v\fHO\r_\xb4\xa0[Ǝz\xbd\x9as\xb2SqW\xc5\xd3ʨ\xb9\xac\bE\x1a\xfen\x1dx\x92⬹SA<\xddg\x17\x85\xc1\xe7\x1c|;\xd0\u007f\xe66\x83\x80N\x10]\x15\xc6|\xbc$\vG\x93/\xecw\xe7\xe5Ψ2\xc62\xfd3ч˄\xc7\x14`<4\xc8\xfc*\xde;\x9a!O3ގ\xeeF;\xd3x_Q\xf9o\xe4\x95D|>\xe0\xbcf{\x01\x06\xbe\xca\x05\xa2\xf4\xac\xec5j\x0f3pj\xb5\xe21M\x94A\xf2^\x1b\x1a%k\"*\xf4\xc2\t\xa2~\x19\xef\xc4r\x15\xf3\xa7\xc8\xfc\x85\xd1\xcd1\xe3j\x9b\f\xff\xa8 \x17\x02\xba\xa5\xde+b\xb7\x05\xc7\xef\xd0\xd4m\xd4\xe4\xd6{\n\xb3x,\n\xec\x1bc\xb0I\xb8D\xa4\xbfet$\f\xeau\xd3U}f\xab\xe7\f\x80\xe8\x8el\xf5\x87x\xef\x9b){\xfd\x80&`H\x1a\xd6\x00\x96\xefc!\n\xbb\x85\xe4!\x11\xe4&\xf0\x86%adݵ\r\x152\xb5\xc6[\x97\x02\xd1K3\xbc\x9f\xdf-\xd6z\x11fT\xf4\xed\xfd\xa1\xf4\xeb\x15yw\r[\xff\xc4\xe1\t\xaexd\x12O\x8d\x99=\x8c\x19Y`\xbd\f\x90!\xa6\xa5\x8b\x93bG\xd4\xf9G\xca\xf1\xc0\xfcb\x91\xa8\x1fB\xfa\xb1H\x05k\x92\xbc\xfa'\xe3\xb4\x06\xe9s\x00$\xb8\x06\x9b\xfb\x00c\xab\x9a\vm\xd1\t\xcdO\xfe\xfep\x0e/\xe1HY1tq\x8d\x88\xc4\xc1\x95\xafU^\xfe\x96f#P3\x18|`\xfbu\xdeZk\xaaqե\x15\xfd\xb6\xf5\xbaL\v'$\xda\xf7\x98\xe9W\x1b\xcb\u007f\xe3d\xb4\x89\xb36\b)\xa0dS\x86\xa4\x06\xa8\v܀\xf5w\xfe\xc7 j\xf2\x90Ͼ6%4R\xcf\r)*\xa3e\xceB\xae~}x5D\xa4Q\x8f4\xd4\xdft\x8ew\x83\tNk\xbf[\xcb@j$=t\xf1@\xa7\xfb\xebB1c\x9bM\xd1\xd3\vӝ(\"\x9d\x1a\x16r\x1b\xb3\x1e\xd6;\xae\xfeP\x06\u007f\x86҇\xb2\xe6\xbcގV\xbbH+\xac\xa9\xb6\x8dj`cP\x84\x91i\xa4o\xd9D\xc75\x1aX\xd7}\xc0\x8eN\xa9P=*JЁ*\xd9K\vz\xf13FnI\x96\xf3\xfb\xf6\x153\xcdg\t6v\xb9\x17\"qa\x9d)\xb0=7b\xf9)9\xbaTC6\x86\xd7\x1a\x98\xef\x917\x9d6F\xe5\xa0)O\x8b\xd3,\xa4\xcdV\x06\xf3\x94R\xd1(a\x86˯\xad)_\xbb\x8e$\xc3X\x81\x9a\xfa\x91Rrֱ\x8d.\x9d\x8aĬcY\xae\x88\xd4n\x1a\x18]f\xd1A\x143\xdd\x0f\n4dd^\xce\f\x92\\c\x93\x00\xcejt\x8f\xb6b\x9ee\xfd3f\n\x12\t\xef9\xbb\xa4\xaaX\x93\x81\x88\xd5X:\x19H9\xd7\xf1އ\x89H\x1cU\xd1ׅR\xd3R\xc9\xf5\xe6X-$\x99\xd3\xf4\x94\x1b4Kf\xd4\x13ɓiEL\xff\x03\xe1\xab\xe6\xf9\x86\xe0xa(\x05\xb9Ɏh\x14\x92\xd60\xdc[.\xb8\x88\x13*\xfaH?\xc76\x8aV\x86z/\xd6=\xe8\x9d\xeb\x12i`\xf3Ir\xb9\"\x9b\x17n\x17\x91\xdf\xfe\xe8\x18t\x01El\xa0\x19\xb4\r\x8c\xab\x8c\x1a\xb23\x86\x8eY\x86\xa0\a5r0\xa65\xc9\x11ד\x19\x05\x85\xd815\xab\xd1Ɣ?m\x92E\xf8{蓠ln\x81\xfa\x86\xb9(lF\xa3\xf5\x8eY\x94\u007f2\xa1\xf9U$\xee_\v\xfc\x00\x11ө\xc0\xedQ'h\xa6Gà\xb1\xba\xa9\x8b刹\x97\xec\xe0ۂj\x8c++Zg\xb5\xd9(ђ\xf0X\xfaș\x8d\x15\x81\x1b\xc4!\x93ʮ\x89\xfe>\xdaP\xa4\xff\x966\xbd\x9e\f\x98\xd2p\x1dR\x8e\x17\x10N\xc6\xd86+\x1a\xabd\xfb\xefՎ\xd6F\xcbYB\x90Q\xe1-s\x0fo\x92s\xdd6&\x93\xb3\r\xe6\x9cE\xc9$TK\x96\xd1U\xf1\v\xc0\x9cz\tX)\xe9\x11a\xba9 Q\xd0\x02;\xc06\xa1\xff\xba\x81ڰ\x94\xb8\xf6,\xe3N\n\xed\x1f3QYF\xc3ɮ\xa3\x1b\x9b\v\x94bJe>A\xd7;\r\x1a\x94\xff\x01'U\x83\x118G\x17\xdaPBd\xbd\x88U\xe6\n\xba^z\x83\x17\x8e\xcd\xe3)\x98z\xc4\xde\xe4!\xf6\x87B&\xc4n\xaaXTP!\xd0I\x92SȆ\xf8\bpc0\xb9\x1a#\x83\xb1\x12ͱ$o\xcb\xf4'\xd0\xca\xceO\x89w\xe9\x01lm\xcd\xde\xc4Y\xcd\fY\xad\x99nN@\x1b\xea\xec*\xad\xb5\x86\xf4\xb0\xfc\xa0G艘T\xe9\x80\xca\x0e\xfeSE\x93\xb9\xf6 A.\xfc zy}\xef\b\x0fm\x0ep}\x90\xf4D7\xe1Y\x04\t\"\x9a\xa4\xb4\tv\x01-\xb4\xf3\x82Ĉ\x9d\\\xf0\xaf\xf6\xd1\x01 \xbb\xe4\xd6ǜ\xbc\xe6\xe9=\xa1(\xa2\xcc\xe0G\x97\x03k\x88ޛ\x1b\xfdCg삟d\x1c\xd0M*\r\xff`X\xa9t&\xfbeܧֱ\xa0\x96\xa1\x98\xb5JwB\xc6\x18\r\x1bs\x92\xf5{\xbc\xa1˦ή%\x8d\xc4\x06\x91v\xab\x89`\x02\xa3\x05Z\xf7AW#\x8b5\x1f]A\xc3{\x9b\xa2\xca\"\x06\xc11Y\x17\xd8\xd1\xfc\x10nh\x92\xb9\xa1\xb0\xb6\xe2\xda\xc4\t\xe2\x165eI\xb0\x916\x81\x8eE\x8a\xd4m̺Z\xbe\x90\"\x00\x1d\xc56G\xe6\xe2;IT3Η\xdd\U00063c88E\xab\x00\xf2\x0f($\xea\xc55\xcfRA\x12\xeb\xe2\x89\xf2\x91\xd8\x15+\xe3\x06fE\x029\x9a\xb8#\xe3\x88\bU0VT!E\x12$`8\xee\xc0\xee\xc5\t\xa9\xa2jc.\xb3\xfacff\x9e\x06\\\xbd|\x8dky\x1e<\x11\xd0BnI\xf0\x1c&\xeb\x17\xef\xcd@Q\xaf\x15\xcfB\xcew\xef\xac\xeb5ОJ\v\x97\xbdw\xdc\x15rx\xc6\xefX\x1b\xe4uR\xbaG%B\xb3fw\xdeހ0k\x901(\xfc\x15Y\xd91\xd3\xf9͝\xc0\x14!\xebEk\xc85\xb46\a\xf3VZ\xd3'\x008)\x97\x8c\xb7\xa0\xd4cC\xbd.\xc2\xed\xc3p\x9c;\xda\xd1\xec\\DB\xd7\xd4\xd4\xe1\xb5m.\xbe*\xa9\xfa?\x97\xf7\xf4\f\xb58\x17\xadϋ\xfd\xc64\xb1X\x014\xd4 \xbc\xb2Y\x06\x94\x06\xfb\xa4`=\ra\x93C\x96<6\xafQg\xe4 \x96\x1a%^\x1fѱb\x19衐\xe82C+\xe8\x81\r3ټ\xc7\xe8\u008a\x98\xb7d>\xa3`l~\xecS\xfbV\x1d\xe9\xc7ĺ\x8e\xcd-\u007f\xd2\xe2_\x10_\xd0d\xba\xbfio\x8e\xfe\xf4h\xf2\xb7M\x97^[\xcecI\x82'\x90+q\u05fc\xc2\xe7E\xf0\x8b\x18\x9dbz0*\xfcz%\xbeZ'\x9a\xf2\x8a\xe7\xc38Xлw\x1e\xf4L\u007f\x15jyCWnTg\xfc\xe0\\jJŚ4$T\xa6\x1a,K\xc2\r7\x14\x8f\f\xec\x89㎴ \n\x02\x1a#Dnқd\x97IǕ\x01.\xb1onyvD%t\f\x94&\xde\U000d81d7\xce\xf4H\xd2\xf1K\xef\xcf;\rMgú\xdc\xfe\x9dn\xe1\xa4u\xc7\\\xa0\x1b\xe9V\x80]L\v\xc6\xe8\xc3\u03a2\xe9\x89\xef\r\xa89\xe8(\xc6D\x18\xb1\xe6\xe6\xe3\xb2\xc11/\xfd?\xed5\xb0\b\x98\x14\b\xac!\x94\xa7`\xa1\xaf#UE\x91\x13\x96ZL\x86G\xf7\xc3fI\x9c7߭\xb6\x1c\x16\xb1?\xb4w\xee|ŵ\a\xbf\x96\xe1\xc9\x13\x9d\xef1i\xa9\xffk\x9et.\xdf2vQ\x12\x82M\x1cv\xafcnj\x8b\xa7\x94\xf8\x14v\xb5p\x05\x01\xdd\x12T\xf8%\xbe\xa2\x10Kv\x14]\xb9\xdc{zb\x16c\x8f\xc9K\xf12\r\xc5c\xbe\xbc\xfb\xba\xa8k)@y\xa7@-\x01\xc6i\x0e\x922\xd4\xd9(w\x0f!r\x9a\xad\xf0:H\xec-Fs\xf4\xa0g\x91#m6\xad%\xfcjQ\xa1\xfb̈\x15\xf5\x85\xc6^4\xc3G5\x1d\fک\xe9i\xe4\xd9(\x12\xa8\xab\"أ\x13\x9cF{\xd6C\xab)k\xa4\xc2,C\x15\x16\n\xef\xe1\fi5Y\xb2G\x84\x01\x86\xc2\xd2F\xc2\xf4\rg:\xaa\xd5#W\t0; \xf7\xc6St\x10\x02\x8bR\x19g\x93PsPĖ~\xc7\xc8ƚ\xddm\xb9*\xd3p\x816\x9a\xe9W\xeb\xfd!\xcbd`\xaa\a\x12\xbd\xcd\xdb{\x1bݚ\x1eEh&:Ѽv\x91x\xea\xe6M='\x155\x9a-:\f~U\xb5\xbc\x98\xcfI\xc1\x1a\x1c\xd0\xfa\xe1c\xe2\xd7Q\x92\x9e\xa7\xef&}\xb0-\xcb8\xb8V\"\xc2\xe5-L\x95\x04\x13\x92\xde\xe6\x10\x8f\xef\xce\r\xae\xdd\x06\xb8I\xb6\x14Kͦv\xc9H:\xa3\x92\xb8\xa0\x02d\xc9u\x96\fk*\x91\xd7\x02I\xeb\xd80\x10*حE]\xfa\xaeC@\xd0B\xfc%\x8d\xd0P\xbc\xd2\xd4\xf4\r\xf5\xbb\x01K\xe8\xb2\xfci\xdd[\xb0\xa8B\xa9\x1b\xd0\xff\xc0\xfa\xefy6\xfdk\x99^\xc3[|\xef\xbeT\x8f\xe0G\xd4\xe5\xed^\x15B\xbfKG\xbcь\t\xfb2\xdcbT纀\xbd\xe4s\x1e\xb6\xf6\xe3\xd9B1\xd2ˠ0\xbb=\xfaM\xfe\xbcI\xaf\xe9\xcdLQp\x01\xc6n\xfa3\U0010cb863\x1a\xcd*\xac\xf4&\x1fN\xa0\xa8B\xeb<\x10\x93\xd9\xfcۼ\xcbcD\xc9D\x1b3h\xc7*-\x82]賠\x17\x86\xf5$ܗ\x16瘝a\x163{sN0FEW\x9c\xb0fD;\x13\x9c\"\xaaK\xf5\a\a&\x1e\xad\xa5\x11W\xecU\xb7|\x05\x85-\x194\xefѫ\xd0Uz\vi\x15\x93n\xd3\b\x06\n2\xaaΊ\xa5]\xc8j\xcc\x1f)\x0eKw9\xbd\xf7V˗T_\xa8\xe3\x8f-\x00\xeeE\x06\xb9\f\x90\\\xd2\xcd\"A\xfcy\x16[\xb3;J\xb4a\x8c\xa8\xe9c\xfb\xb2\xda\xd6\u0604\xa0\x1fMZU\x90\x00\x1b\xf3\xbb\xddP\x81\xd8U\x16>\xcd\xe3\x91\xc8\xdb1\xb1n\xc3Xx\x88\xd9\xf7\x04\x14IA\x95\xd7\xea\xe0\xc6,\xaf4\x9e]\x1b\x03\v\x05<ͻ\x8f\x85\xa1\x9c\xae@\xb0\xc8vk\xf5\xcd\xc1Iݘ\xf9\xce\xc7\x1f\x98\xdcrGP^\x12\xeb\xbfK0\x95\xdb\xd6\xfc\x10v\x84B\x16ނdN\x83\x91B8\xc04iiQ\x91\x94\xf2\xa8`p\x19\xd5s\xcfU\x93!2jSf0k_\xc23&\xed\xbd23F\x93U\xcb\xf5\x9a\xadM\x1c]\xda\x1aҫ\xd0uccuf\x02*T\xf0\x88p@\x8a\xc4\x19^\x00j\xc5{\xda\xd60\x89\\\xd3\xc6\x032\x9a\xa5\v\xea\x93\x15\xb0&\xb8Z0ڒ)[*\x90\x1a\x80Ԫ%\xd2N\x98'\xdb|\x19\xb1\x19%\x8dI\xf9\xb85\x1f\x87\xee5O\xe5w#iבNI\xf5\x9dOI\xc9?\x04\x1d\xc6\xdd\xc2iv\xfe\xe4z\x87;g\x88k\xbfnM\x9b\xaf'k\x11A\ry@\xf57\xf7\xec\xe2L\xa8\x89\xb2-,\xb7\a-Y\x8eH\x81\xcd\x00\x02AoપX\x83=H\xea2i\x14\x9b\x84\x05\x1bRC\x91\xe0\x02v\x9d\xf5\xcdc\n\xee\xecҗ\xdf\xf2v\xf9\x83\v\xf7\xe7yx\x17\x86\xf0Ί\xdc\b\xf4\xe6V\x92\u007fLw\x86d\xba\x11s\x97\xa6\xb07\xe2Y\xf7\x06R`\xfa\x86\xeeI\x03\xb7u\xc3\x1c\x18vޏ'\x86\xd8ь\x93\x8e12I\xe0v-Ⱦ\xa3.\x9c\x8c)\x99u{\xa2|\x98b\xb9b\x8ev\xd9 \x8cc*d\xcb\xf0w\xf8\xf2\xf9\xcfoݻ\x15p\x01Ҏ%\x8d\x02\x15\x9d%\xbd\xd6d\xe3Y9<]7+镭S!\xc4\xe3\xba\t\xc4{\x9b\x13\xafV\xfa\x99I\x16\xbd\x02\xc9Ze\xa8\a\x82f1\xf17\x8e\x18\xb2O\xf84\xed\xce\x1d\xf8\x90\x03\xe39\x0e)\x8a\x95:WE\xe7\xach=SY\x1b\xe1Ù\x1d\v67\\y\n\x8b\x90Q*Q\xb8\xdc\x10@\x86\x1f\xa7\xa3_\x8b/\xa13TQgل\xe2y6\xed\x1b9\xa8\\\x15\xd4cf\xe7R\xe8\xeb\x02\xd9`uo~m(`\x15\x1a\xdfՔ0\xa5\xf4\xc1\f\xda\b]\x89\xc4ׯ\x82js`(\xb9s-\xbd\xffQ\xf0)\v(S\x1a\xb9m\xcc\xe8\x05\xdb?dF]kO\xaaK3\xe6\x13\x14i@3\xd7u$$\xc925\xceA\xb4[P3GW\xbfXs\xec\\\xb5\xa5 \x81\xaf\xec\xf2\n\xd65\x1aDOE0[\xe6O5\xd3)\f\xeaa\x88\xf7\xd91\f\xc9\x13+0\x92\x8d\x8d\x18\x9d\xe8\xa7\xeaX\xd8D\xe7B\"\x0e\xd5\t\xb0c\xbf\x1d\xa4g\x82鉅\x8b\x16\x8e\x10\x867\xed\\\xacq\x05E\x13p엁m\x81΄lǭ\xeb\xf6\x19U\xc5\xdc 4\x94\x91mh\xe7\xf2\xf2\x8c\x17Y\xc2O\xa5\t\u07be\x88\x024\x982\x87iMi \xe8cU\xc0\x919-b\x02ϰq\xcb0\xd3\xcduj\xe3Fwh\xd5\x13*e\xbb]l\x902\x0f\x8e\xd0\xc0v\xbb\x8b\xc9\xfd\x8et\x99\x98!]c\xf7\xa16\xb58\x19Lk\x9a锺\xc8\xdat/)\x80\v\xdfǰQi\xc0✴\xb5\xcfs\xecPF\xfc\x83ƽ&\xa1w;\x05\x96\xf0\x9aD\xbd\x05\x1b\xf5\x85\xaf\xfc\x86x\xfc\x91\x97ix\xab\x9c\xf7c\xc0A\xb6\x16\b\xe5l\\\xc7|\f!r]\bǭsi4\t\x18\xd2J\xb6\x10OS\x13\xc7h~hu{O\x83[\x108f[\r%lt\t\xba'Lɴ\x9f\xb2\xc6\xd7q\xe6\x8c;\x065Z\x8b\x93\u007fK/}\xac\xe6\x80\xe1\xb5=kU\v*\xeaSv\x03\x10B\x94Z~\x8a\x9b\x90=\x8b]`\xb4JKrfI\\\x92\xc5a\xcbۥ\xf5\xb4\xa7\"4)\xc2\x14\x95s\xd2:\x01\xfd8\x17j&\xa0\x8d9:\x10,X\x01\x94\xbb\xa0\xb3s\x00\xef\x1e\xb9\xd73\xf3\xe1\xad\xe3\xd1\xc0;tR\xd3\n\xad\xe6\xe4\rc\xfe\apB\x96f\xef\xb2\x01\xd2a\x11\xc80\x0ez.\xb5\xa1^\x9f\xa0n\xa95\xf3\xa2\xc5I\xb2 \xceĽ\xae\xe4\x87A\x02Qu\xf6\x9c\x00\xaa\xe5',\xfa[\x90A\x88y5N\xff\x186\xed:\xae\x1a\xee\xfb\xac\x8c\xed\xdd<\xd0\bpz\xe5F\xee\xa3w\xdf[~4]V\x15g]\x17V\xb7\xfb\x02\xf4\x18\xbf\xfc\xab\t\xef\x87x\f\xfeu\x8e*\x99\xb4\xb6\xe3\x14r\xc4\x06\xe3\xc3.9n\rK[\x9bo\x17\u07bb\xf4-\x99[\x95\xb9\xb97\xf1\x1f\xca\xf3\xf2A\xd3\xceh4C\xfa<\"7\v\xc0\xa27p\xfbn\xf4nR\x85<\U000bebd3\x8b\xe1\x14\x1cG3L\\\xbb\xe2\xaf\xeb\xf8\xc9\xd6;-\x9cJ\xe4\xe2BրQ\xf8\xe6\x10\x8a\xcaeY\x0fV,\xe4\xcaCG\x88\xaa%\x80-\xa9>\xa5d\x82\aF>p2'\xd7T'J$MR\x01A\x0f\x1d\xc2\xea\xc6N\xd8ɚ\x8d\xa9\xa6je\x97\f\b\x05H\xad\xc9\xc7\xf7\a\xe7\x86\xfdq\x96~y@\xd8-.\x85\xcb\xe0p\xc9\xdaX\xe8\x92\x04LZ\x13\xdd*\x80\t+\xa0\xb9\xd4d\x83\xfd:\xedQ\xa3D0<\x98V?\xfc\xe0P\x1f\xf9\x93U\xd5%\xcf\x0e\x85\xe3}\v\xfa\x8cT\xfa\r\xb1\"\xd1Ǣ\xa3\xba|>_)\xb4\xe996\xad6Z6(\x813n\x1f\x1eb!\xaf\x8ah`\xd2\x1ajA\xae\x9bq\xe4\x8c(H\xf8\x9e\xa1\xf0\xf3\x97?\x85;\xbe\x8eƊF\x9fT\xb9\x00u\xe4\x17u\xb3\x14L8\xc9\x04.i'\"\xf2\xa2\x91\xed>\xedB\xa0\x908I\xe4v\xef\xbc \xcdr\xe6k\xb8\xb0Ӻ5\xb9g\r\r\xe7)~\xf9\xef\xed{:\x87c^\xff\xa1\x80\xe3jWDx'\x135\xab\xdd\xc42\x0f3\x93f\xe8\x9c\xda)%\xe8el\r\x82`\x1a\x1b\xc4\x03\x80\xf8\xb9\xf5Ϊ\xd9\xc1icg\xe3j\xe1*\x04Υ\x13\v\xe8#s\xcd\x1a\x01\x9d\xa4\xfa\"\xc40\x84\r\xab\xd4\xfee\xf9\"E\xa6\x89wv\xf1\x8fV,n\xa8\x17\x82}\xe8ќb\xa4\x9eU=\x99g\x02v \xfa\x84\x8f\x13\xa6\xfa\x98\xedH(\x91C\xdc(\x98ܺ\x0e\x86e\xa0\t\x90\x9cꣵ?\xc0\xbd:\x9a\xdd-<\x05֥\xf0\x9a~\xd5ܡ\b[#\x01#XdtU\x14\xa5\x9eZ\xb2\x050\x8f\x8d\xd67\x80\xb3\xc0ڼy\xa4\x80%CPj\xf0\xfb\xe8\xee\xf3\x92^\xae8\xb3%\x12]\xb9;\xbf\x85\xea\x90nP\x8f\x90\xcd\xc1\xa7\xcc\x00JUD\xb6\t\x10\xb31[,3\x92\xd3\x06\x82\xf2D\xe6\x81\x15{\t\xbc\x13\x9b8\x90\x15\xd0\xe5\x9cڗ\xc2ȝ\xb4tϒi\xa6\x98\b\xd5\xec\xc3\xff\xf2t\xeb\xfdA\tO]|\x97-~\x16\xf59Z/Z\xb9q\xf0\x82\xf9\x8d\xfeS\xe2w\xb1E\x02$\xe8\xdf\u007f>\xc7[\b\xafn\xab\xafu\xd8M\xc0v,K\xab\x887,\bq\x81\xa6\xec\x13\x19l\x92>@\xe4ֽ\bf\xff\xf4v\x16ng\r\xb1m\xb33.\x84)6\xc0Īa\x88j+\x0f\x93ն\xe8\xdcT\xa8\xad\x89\x85\x99\x8c\xe7\x11u\xc7\xd4ᶿ\xecn.U)\xb1U\xcdŀ\xc3mH=rְ\xb4K\xb02\x99%1\x96Z\xb9\xc70\x84\xb6\x12W\a\x1d~K\xb3\xb0\xd7\xf4\x85\x1b\xf6\x03\r\xdb7\x90\xc0N\x05\x8cr\x86)\xc8,^\xe1\xd1F^t\xed&\x00\xa1\x9f\xa8@\xf9\x98\\z\x03\xb7\x99\x05R!\xa0\x8c _\xb3\x83\xb9\xb7\x86\x89\xb4<[\xb2\xc8\xc3\xde|\xbe=\xbd?\xd0\n\xdbB¯\x10\x97F\x02ސ+\xafD\x89\x81\xebI\x8d-S]\x9a\xd9\xea\x13\x9b]*b9\xf0@_\x1b\xc1\x01=/\x80\x1b-\x13\x9a8\xe1\x0e\x10\x9cY,\xbc\xbb'\xf49\x1e\xc0\xb1\x92\xe7P\xc3BF\xe7\x98\xfcV\xb6G\x19\xe2\x8cS\xa1\xcd/\xf5\ttJk\x1b\xaf\r᠀\xbd\x8a\xad\xf1\xf0`\xbe\x8eẃ%}\xbc]U\xbf\x14\xb1\xd7_?6簙\xa7?r+\xe5\xf5\x8f\xdeRG\xddǫd[\xe0\xb4@\x16\x81\x18\x94\xea\xa0o\xddjr@\xca+\xf9°\xaa\x80\x14Y0\x01\x1c\x11\x1cNG\xb7\x02\xd7nS\x84\x04\x90h\x99+\x8a\xb5\xe8\xf0\x0f\xdcVE\xc1N\xe6J/\x97\xc9_o\xee\x84x\xbb\x92[\xf3\x80\xd8\x17\x8e\xd8P\xe1sU\xaa\xbd\xb5\xb9\xa8?\xb7\xb7\xae\xcd\xd2t\x05\x1c\f\xab5fM\x8d}\xa3\x96u~\xc2r\x92n\x17\xa0\xdf'l6\x10U2qc\xe0\x8b -\x86\t\xd2\x15ѳ\xabS5\x14N\x86\x04 W\"\x01^\xe7\x87\xcfM\xf8֝\xdd}\x9bĂ\r\xe1\\X&F亯\f\xbf6\xd5=˜\x19aK- #W^\x16\x03\xc7I!Tܘ\xab=\xb6<\x1dh\x83⃦\x85\xda\xe2\x80\x00\xf4\xcf\xd3\xf6=\xbcz\x89\x06\xc6ޅ\x00\x96\xa4Z\xfb\x16\x15\xfe\x81\x01\x84&&\xfdc,\x1b\x84\x97\xabP\xf2h\xb4\v\x15:\xe3\xc1G\xab\xf9$2d\xb6\xaeʯ\x19\xa8\xd1Ȗ\xf4\xe5$\"D\xcb*e}z\xc1\xb2\x10\xe4r͌\xde*\xa4\xf0Q\x19\x92\x98\x0eɑ\xeeLt\xa3\xcc\xe2\xcfM\xf7W:\x92\"`)\xbe\xb1\x15\x8942\x8e\x9b*\xfd\x94\x95?\xabGOZs\xc0\xba\xf3\x01\xda\x00c\xa4QG\xe1[Dg\x11\x8d\xf9\x10\x0e\xe2\xbaHG\xf1!B\xa6\xa2\x00N\x02l\xe7\xcaQ\r1\xf5\x98\x10\x8b\b/\t\xa6ȩ\xe0\xc8\x11%\xbaM\x05\xe7d\xc1)\xa7\xc9\xdb&\xb1\x84\x87Lr\x10\xd9\xf23˱T0\x885'~\xb2\x99\xad\xd5H)\xd1\xcc\xd9\x00e\x83\x04\xc1.9\xd8nC:\bVGF/]&\x85ԒǦ\x0e*\x8b\xdbļZ\x9aDQ\xac\a\xba.KU\xa5\x81q\xa3r#0\t\x86fx\xaeʖ\x03+ l\xd2{pAμ\xcfh\x88\xe5\x05!L\x8e\x05\xc5fTb Q#\x18\xb3fk\xb7J\x82\xf7E)\xceT\x9b&\xc1\x1c\xae\x98\x12h\n\xb8vB\xc9-5\xae\x83@\xe6\n\x18$İ\xb0\x12\x1a\x10\x87\x8b\xcb.\x89\x83C\xf8T\xfae\xea..\x90\xb31?J\x993K\x0e\x117\x8fT6\xc2؈\xe9\xb2?\x90W\xe5\x95[\x9dxc\xfa\xb9AR\x8c\xe2\x94{\x10\x88\xe8Nd\x82\x1b3ϔt\xc2.\x9dV'\xbe\"M\xa1J.k\xf8\xc2\xe81\x8f~\xdf&6\xc60╯ې\x84\xb0\x8f\xd0I}J\x85\v\xfb\xb0\xb5U\x9dj}\xdcx\x16\xa6`\xe2\xaaz\b\xce\x1a^\xf5\xbd\xfb\x16)\xeb#2\xaf\x1aS74\xef\x9a,\xec,\xbcU[\x12j \xb9l6}\x92\x00\x14\riI䩖\xe2$ǡ\x05Вh?X\xafTr\xfcG\xe3\xfd\t7\x00\xab\xe5\xeaN\xf9N\xab\ty\x13\"VC4@Dm\xe41\xa83\xbf\xf0\x0e\xbcF\xa4\x8dH\xb3\x13(\\\xadX\x0eud\x90\x1bAn\xccJja\x1e\x00\x85g\x80\xe0\xb4\xd4J\xed\x800]\x16\x95ǶP\xf9P\xe0$\x01z#\x84\xa2\xe6\xf8\xed\x9dG\xca\xc0\rH\x936<\r\x00\x10Z7\xc9O\xd8Ϟ\xa1Nξz \x9aͫ\xddZ\x98m\xc9\xc7ƭИ^\xa8\x9a;R#\xc1!u\\\xb4f5Oĥj\x99SU\xe6r\xbc\xfc\xe4\x05\xd0e4\xf2\x86\x86W\xc6\xff\xe8\xfdA/Q\xd2|\x97T}\x9a\xd37\x90\x81\xdcA\xfdf~\xfb\x9f\xf7\xf0\x12]ܻ+\r\xf6q\x8f\x96\xe9+\x03\xd8B\x02B&Ó\xc1\xaf\xe5j\xaf\r\x9a\t\x88\x10\xccg%\x97\x01FIo⌆p\n$\x98\xaa\xd3\x02\xc8\xd0\x1d\x00\x87c\xa0#l\x15\x95}|\xc3\ue535\xea\x17\xed\x91mV\xcd\xcf\x04\xfc;\xa0\x17\xe4 @\xe3\x10\xe1\xec\x8e{Ȉ>R+\x93śE\xab\x92\xcbr<1\xbf%\xc1ɺ\xae\xb0\x16)\x1e\x8e\xffD\x17t\x84\aά\xf7\\\xd3\xdb\fnO\x91\xb5Hj;jя\x1d%\xb8\xe5\rZK\x8e0\xe5\xc7-\xf4\x13t\xd7u;\x06\xbd\xa4\xa3`\xa0\xa0T\x9a/`K!pB0i9*\xf8\xf7<]\xc2sy\x1c\xd2\xf8\xd2\rWs\xb3\x86\x95\xd2\xcd\x1cƓS\xeb/,\x00\x96F\xa7\xb6q\xa2\x92Ak\xa7Ʉ*\vV\x99\x17\x84\x8b\x94Ӟ{t\x8aBC6\xae\x16\x895ds\xa5I*L;{\\!\xf0ۻO/\x16\xb4\xfc;F\x80\xef\xcbǎ\xc8\xfd\x92\xdb,\x81\xde,Q\x06]\x01\xa2\xc4\x05\xa2\xbe\xcbz\xb43\xaf\xa2'7\xa1\xd4ha`8C\x94}\xe9\xe5)\xa73%#G[\xd7\xdc\xea\xcc\xcfO\n\xa0\xcb\x10\x01\x8cCp!\t\xc2\xc20\x8eO\xd6\xf9\xa5\xa7|bv\xba\xe90;\xffiu\xa8[\u0090f\x86\xda\xf9\xef\\\x02\x8fmlo\xc0*\x10o\x9dL\x04\x8b\x85\xae\xc4fY\xfe\x1d̒\x9aX*\xb7':\xa0 \xd7x2\xfc\x81L\xdf\x05T\xa7&\x89\xb2\xce\vs*c#D%0e\xaf\xfd\xd7<\xbc\x85\xd7x6\xb2\xa3\xae~\xec<-\x00v5\xaa\x8b\xac\xeej\xc6\xe0\x925t\xfbG=\x18\xadx\xf3\x93\xa7,\x12J!\x1cר\xc6u\x85+\x9f\x17\xf8\x91Y\x15\xedz%<(\xf9*/\xdcܸ%0۰|\x82\x02\xf5\xa80\xa7i\x8bv-K\xad\xa1\x94j\xf3\x84\x03NҴt\xc1@P\xc1\xac\x1aez]Fkە̭\x1da#e\xe21P\x81\"o)\xd0\\\xb8m\xa0\xa3#\xd3~@\x99mɯǦ\xffd@\x96E$d\x98k\xa1\f\xfa%{{#S:t\xbb\xeeB\xddL\xab\xebM\x8b:+3\xfa\xbc5\xaa\x8clS\xa0\xee\v/\x12\xd0\xec\xf2\xd4\x19\x1a\x9dF\xef\x97\xf9\xaa\x9a\xcf4\xef\xac\x10\x16D\\c\x89.\xbd\xb9\xd0\x01\xb08\xc7/\x95q隐\xaaF\xd28\xeb\xb4.\x94}\x9d\x01\x01\x00H\xed\xec\x14\x84\xd6A\xe75\xaa\xb9\x9d\x8d\x11{\x02bLS\x86\x00\xd6\xf0\x1b0\x96kL\xf7\x87\xddl\x80\xa4\x86\xdc,\xb5P2n\x8d\x1a\xa47i\x19l\xc2J\xd4\xf1\x18\vT]W\x8e\f]\x9e\x1fm\xde>\xb6X\xb8`\xaa\x93\x8e\xe5ڎ\xe1\xf7\xd0\xdd\x15E\x1e\t\x01P\xa8\x95\xdbfi\xe0\xbb2\xa0\xae\x94o\al\xffk\x83\x9d0YMV#\t\a\x8an\x0eV\xd4\x11\xf9\x1e\xfb\xc1\xaeX\xf5H\x85DUQ\v̭\x96\xac\xbc\x14,\x1d]\x14Z\xe8\t\xcbJ\xb0Db$\xe4.m\xf5\xb1U9G?\x8a\x1b\xc5L}\x1b\x8eT\xb4W\b\xb1\x17\xf3\\\xa1N\x9b\x82\x01\xfd\xc7\xff\x9e\x87\xb7\xf8~\x88oR\xaa|\xf5\x1eT\xd1U\xd3\xd8AАz]7\x84\x11\xd3&ʐ\x13\x14Z\x16\x90&c\xc6&\x12p\xda\xd2\xf6C%Ր(rX\xd9WC\xa8\xf9\x10\xf0\x9a\xfa\x1e\x13K\x9a,Z\xf7\xb8|\x83h\xee?f\xefW[4}\xd7\xd7Q\x0e\x8a\x8c]\x12\xbaaK#\x9d\xeeUK\"M\x93\n9\x1aZ\xb9\x8e\x92S\x87Ȅw\xa52\xd9\xe1\xe7\x84)K\x8c\x808\xc1\x96a+:h\x8b[d\xcdF\xc6\xf9\xd1Rꔵ\x19\x1d\xa5\x83\xa2\xd7\v>\xb9y\x92렑\x1c0\xef\xa3\u007f\x1c×ߦ\xf1ҵ\xecM2O\x18\x05\n\x1a!\xd2Hp\xc9Ud9r\xf2M\x82s\x90\x82($\xcf\x12%P\xbd\xf9F\x89l\v\xe2\x82\x0eH,\xf5\x83@\xe5\xaf\x03\x05\x8e\x89S\x91\xdf\xeb*\x8fZ\xef\xc1\x1a\x82|\x92\x03z\xd3⣰\xe1\xfc><\xc4C\xb8\x05\x935s)љ\xb1״q\n\xc9Nx\x8a\xda'h)j\xa0+\x8aq\x80\x80\xf8\xd7v\xeb\x84\x15\xe3B\x1c\x8dZ\xb9\x04\xafii\bj\x1c\aTf\xe4\x0fd\xefa\xc2Y3\xe2@\x00\xe1\x81\xce\b;\x96<\xbc\xf2\x82}h\xe7.F\xcc3d\xb1\xfa\xbc\r\xefyz\xaat\xc8Ƹپ\xba\x0eL\xec\xaa-\x9a\xa4Sù*lF\x96Ա\x99(L\xa8\xa7\xaa%*\xa5\xe2c=R\f=\x9e\x9d$\x93E\x188\xc8j\x14̧\x8e\x8b\x90\x8a,0\x0f\x1b\x9a\xa23q\xf05\xd1\xf1\xda\xcb\xf4Pm\x8f\ueb24\r{#g\xeaK\xf6\x05\xff\xc8!\xfaH\x90d\v\x1fD\xdcX\x02\xe1\xdd\xcf}\xef\xf4W(\x1aC\x99H'\x0e3XE@\xafL\xf4\x021\xdc\xc2\xccST\x95i̻\xa11\xce\xf0N\xea\x90\xca\xe3#d\xed\xb6)(\xdd\xdc0i\xfb\x00\xd04Z\xc7C\x96,HTy\xf0\xc8\xc2\x14\xb3\x85ź\xb7V\xd0S\x8b\x1a\x11~F\xc1\x9a\x85:\x8e\x96\xcb\x14\xc7\xeaŝ\xfd\xbdi\xd6\xc6T{\n\t3\xa5Z\xe9\xbc\xde\x1b]jD,\x96\xbf{\xe7*\xf1\xfa\x1eE\x04\xfb\xf0\xf4\xb6'J\x04C\xfe\n\xe0E\vIЩ\xf9U\xd8\bUm\x85\x81\xe9\xfe\xe8\xfe5\xa1\xd0\x05W\x0en|[\xd678\x1c\xa5z\xbf\xa0\xfc1M/e|\x15\x80\x80)\x94\x8a4`\xa8\tl\x06\xf0\x9fK\xf5:ze: t\x945\br\xed\n}A\x13hc\x82ɝ)\xb0\xac(\xb8S\xdez\x8d\xc9\xc6\xc9n o\xb3^\xe5=\xf1~\x10\xb1\xd9\x14\xba\\\x13j-z$\xbb\xf4\x14W\xa2}\x14ܧm\x11\x00\xb4\xe8[\xa3K\xdda\xe3\x05\xb9&\x91\x18EyL\xa7\xc39\xd0\xc2L\x8b\x86\xc4N\xae͋xh\xaeW\xbe\xd5J\xa2\xa75\xab\x11\xe4\xd1\\\xcc_\x15\xc0(\xb9O\xcd\x18\xeab\x8a\x1fĐ\xf5A-\xbe֤z\xa9L\xf301?\x10`\a@\xac\x05\xd7A\xb0\xda[\xf7\xeeV5\x9a\x1a\x05\xc1\x91\xa9\xc0\xcar\xb7-\xc4\xe4\x19\"\xac\xdd\x15\x02\xb5\xc9\xfcM[\xd6m\xf7\x16\x9d\xeeU\xdf]+\xdbpwP\xaf:I\"\xc6\xf7\xc6f\xa6J\xa6\x92\x04z!V\x81ZX&9\x04纀\xe0z\x19\xbdc\xb1\x80j\x84^湓&\x14\x89\xa4M\xabu\f\x85F\x93q\x88eiY\x91\x16\xa2\xd1pN'\x97\xd1@D\xc2N# Z٦\xbbhMd\xbd\x1b(P\x19\x01L\x8e)܀!3Oe\x04I\xbd.\x8f\x18t\x1fDy\xdf\"\x82\xad\xb9i\r\xac\xd8=B\x05\xcf|\xc1\xa5h\xbe\x05h\x11<\x89el\v\xb5n\x1dR\xa2\xa2\xb4 \x9e\x14P\t\x9a\x84;\x01۽\xf0\xe4\xeb=\xe7\u007f\xeaL\xb8\x83\x1df\xf9\xfe%Ʒ\\[\xda\xd5\xc0|F\x1b\x1e3B\xbb\x9eL\xc9^F\x99\xc8\xd5'W`\x11I罭\x92\xe0\x06\xaf\xec*\x11\xe7?rǫ\x06-*5\x12S~JS\xf4G\r]\x87M\x02\xea\x013\xc8>\x18\x94c\x86pjO\xd3\xfb\x95cc$ \xdf\xd2\xfdh\x9b\xec\xfd#2\xc4$\xc8\xda\x06W\xbar\x047U\xe8\x94V\xb5\xa0\x9b?\xb2ׁaf\xf4\xa2\xc9\x1d\x1b\x9a=\xe6(@\x92\x12\xbe\xafE\xf7\x8ch\xa6\x11\x91\x17\xfbB \a\x03K\x8d=\x03[9ۄ\x8a\x93\x16\xfc\x87\xc5&?&6Һ\xcd0\n\x94\xb5e\x9fJ8\x85\bI\xda\xc8t+S\xaa\xc0ˍ(\xd5\x16u\xad\bf\xa0\xe03QFla\x04g\x8a\x00\x92>\t:uY\x18zۼ\xa5\xa1<ʉ\xf21#g\xda\xd4&f[6\xcf\xf6\xee\xba&}\xb5GCV\xe8\x10ކ\xc2\xf7dXH\xa7\xf3\xda\xfb\xcfG\xf25\xb1\xc6\xfc\xe7M\xfb\x12κ\x8a\xcbP\x19\xd1\xe9\x1e\x8d\x06\x99m\xbf-\xdbs\xa0\x13\xfbC\xb4i\xacw[\xdcO^[\xda݄\xe3\x97\u007fm\x0eQ\x9f\x83\x05ҚJS5\xfb\xe3\xea\xc7ӄ\x97p\x81\xcdW\x1e\x94\xf6\x84*!\xb4Zܟ\x18\xf1\xc1\xc0\xbfJ\xcc\x1eYEp\x1c\\\xd6ĝ\x05ѼK\xbe\xa5)\x0eP\xf2\x825\x02\f`P\x94&^\xb4\x1c\xa7\x14(\xcfg\xcf2\xb8\xf9\xa2\xc8G\t\x0eA\x03\x8b\xc2VU\u0378u\xf6S\xbb\\\x16\xf8\x95\x01R\x1e\x01\x9f\x13\x8b\x18\xba\x83\xa3\x9fG1\x1f\xe4\xd7\xd05\x03疤\xe4\x19\x1b-\x94\xa8POEC\x1b\xe33\x83[\x88\x99\x9e\fRq\xa6\xf8\xa4\xf7%\x96}\x9e(\x0e\xb0\x8e\xae>\xb3\x8c.\xc6\xc0\x18\x80\x9fG\xaa>\xaaκQ\xab2\r\xeb>\xab\xd6E\x15'\xe9ȝpUtߤ\xc3]'\xb8H\xb0&\x80{CC\xad\xc2\a\x9f\xca\x0fCb\xeb\xa4\x0e۸\xba\xb8l/\xe3d\x12K\n\x1f\x1e\xb4̾]%jK\x0f/w\xbf$5\f\x02\x1a\x1a\x02q\xaf\x04M\xe3H\x01\x87\xe1\xa1u\x17.\xb7`\xe9\b\"6\x15\xdbI\xab\xfa\vs\xf7ζ\x1d:E\xa8\x97Y^>5\xf6\x88\u0087\xeah\xf2ֺ\xae\xdcM\x10\x14\xa3G\xac~鹲\xc8\x05eg\x1d\xd3\bo \xf6\xc9\xc1g\x86\x1cP\xfef{ه\xa1\x8f'\xfb\xb5V\u007fr\xc5\x1a-\xed\xba\xc3\x00W\xf2\xd6q\xb0\xa4\xb9\xbaJw\xea\xe0\xd3\xd7Q\x89\b\xb8>\x9d\xc2+Gj\xc8\xdd\xd1\xcb\\c\x91Ы!+\xc2\x04\xf5\xb6!\x00\xaf\xfbd\xaepB\x1aFp%\x95\xf0\x81\xeb\x93\x16\x8f\xd6C\x87v\x89\x84\xb0嫴h\xf3\x98\x88\x1dXv\xae\xdc\xc56J\xea\xbe|ޤ\xe7\xf6\x9c\xa8\xfaP~\xc3&\x9e\xbeT\xff9q\xdb4\xfc\xdd\xff\x83N\x86\"\xa4Xw\x99$Jd\xe5\xb8foD\xee\x99^\x13\xa3\xc4\xcbzڐ\v\xaf\xb5\x04\x95\xa1`#j$m\x13\x96g\x0f\xed\x97\xcf\xdb\xeeҾ\xd1Y\xa9)\xf6\xa4\xc8dE\xc7\xdb2\x96j^\xb01uе\xaf\xb32\x9aGJi\xc3yJ\xa8\xbboM̑A\xef\xbc=1\x00\x94\x85D\x99\x1e*7hb\xd33ȏ\xb8\x1a\x8a\xf6\xa3j\xe3\xe0I\x84\xb3\xb1.\xa1V\x8c\x95\xd19\xc5\"&۵\xb1V\x12[\xd3\xca\xf2\xef\f5(\xa5\x88-\xd3VM1F\xd14\x00\x00\x9c\xdcF\xfa\xdc0VS\xa1\x05,\xc9O\xc9\xc0\xc5T\xea\xd0\u0381 \x81\xc7%\x9e7Q\xeb@\xa4i\xc2k\x87LU\x8c\xb9\x86\xa6&\xa4\xe0\xa8\xc1\xfbh\xf4\x1b,\xae\xe4\x98>Y\xc8;+jnz\xf6\v\x82\u007f\xb4+4M^\xee\xd5\x16\xf4\x1fg*\xe8\x17k\x82\xaeN\xb6\xc85\xa6k˾\f8\x05\xe6\x90ݸ\v\x9c\xa3\xfd\x95\xab\xf1\xe8ނ\x82\x02\x862\xf78\xd1\xc8FD\x92\xc7\xeen%\x95ѝ\x87\x87\x83\xa2q8L,>*\xa6\x8d#[~\xb9\xb6\b\x02l\x86t\x9a\f\xb0]\xb9.L\x870\xe8)\x14M\x91\x06\xcb6c\xa6I\x8ae\ts\x9e\xc8(\x82\x00\x9b\xa3\xf1\x88\x01\x99v\xc9%1\x80\xea֏\x11G\x96\xdaWF!d#\a\xfb\xed\xcfK\xf7J\xee\x1cFwk\x06\x88\xccpe\vz\xa2\xeb\x1d\x15W\xcbτ4\xaf/\xb9\x03\x9c\xc1\xa0\xa5\xef+֕\x82\x9e\xb8\x8an\x93mNN[J[\x80\x18$\x92\f\xcbX\"U\x84\xbe\x8c$|Ĵ\xbfq\x8a\xa0\x01\xfa\x1b\xe3@<&\\v6Cf\x1c\xc1\xd0\xea\xee\xd2]ro\x98oS\xc0\x03\x0f`\xa7\xecL\xc5\x05\xedy\xfbfz}\xf8.\xfdH\xe3\xdfH´0/˱\xe5XM\xb4\xc8DB\r\x16f\\\xfdplΔҦ\x1a\x99Ѯl\uf0c8\xf4Oi)\xe8r-\x1c\x16/a֊\x9e^\v\xe2\xbcU\xb9F\xd5\xeat\xe1]XS\x9e\xed\xad\xdal\x88\n\xb0\x87\x16t\xfc\xb9\xbd\x15p\x10\xbf\xed\xa25P\xc2\xd1\r\u007f\xc1\xa0E\xe5\x91J\x9e\b\xa6\xad\xbe\x8fN\x02o\x9c\bi/\xe8H&\xf5\xf4mgai\x8e%\xff\xbd\t\xaf\xed\xb1{\xeb\xa8A\xabW\x9eROGT\x8c\xb6\x94\xaaХa\x02\x12\xfc\x8a\xb5\x125\x9cX\xb8z\x0e\xe3\x16*b\x17\xae\u0088\xb6g\xc4жl\xf8\xcaF\b\x06B\vt\xe8Ƅ\x8b%\x06\x96\x1f4\r\x05v췥\x03\x804\x90\xb5\xa2\xb6\xc4\x04\xb8J\xc1\xa8\xfe[S\xcc\xd6 q\b'b\xea\xcf\x1f\x8d\x86#\xe3eg2\x85\x8c\xdbY\xbf\x17\xfb\xad9\x98\xc9\x12V\xac\x93Y+\xea\xca\xdfX\x11FR8E\x04L\x03\xe9*DT\xac\n\xd5\xc4&\xd1\x01\x172\xd0w\xbe\xee\xa9\\\x9a\x04C\x9ao\xc1\x92\xea\xdbT\x9e\xa0\x9a\xa5]\x1e\x99p;+,\x94\n\x05\x80e\xf2:\xee\xe2\xb1\xf8\x0e\xe9N\x16\f\xa9a\xb8\xf3M\xbfsj7\xe6\xa3'\x86&\xd2dUsm\xda\xc3$\x8fz\xc1\xe8ӯ\x10'Im~|g\x94\xac6\xd7\xd6\x04\x11ѸQ!\xb5\xaf\xd3~ޙ\x02\xa8,,c.P\xaa\xb5\xe6r\xbe\xae\n\xf7\x88\x18\x8c\x14)S\x9bӟ\xb5\x05tqɎ\xea\xbf\xfe\xf3~\x88\xb7\xf4f\x85Ia\x18\xd1!{@57\x94v1x:\xda\xe8Q&\x8f\xadD\xb9\xda9\xac\x91z\x8a\x04I\x13\xaa\x90 \x16\x19\x84\x02\x81\x00,\x8b\x9aoQ\xf3\xc35\xe7LQu\xea\x9ab3\xaa\x98\xa0\x8b߱(\xaa;\xe1\xa3ѷ\x03\xed\xa5?Oó\xc8'\xfe眓\xd1ߖ/!\xbcbq\x18!\xadR&*G\xc0\x02\x89R\x0e\xd7t)\x1b\x90\xf1\xa5:k\xc1\x98X\xd2 U\xd2D\xf2\xe6\xe9\xd12\x8e\xb6\xf4\xff\xd7\xee\xa1\xfb\xfdnXx\xa0\xa9\xcc\xc1`\xeeh*RGb\xe8\xadK:\xed\xcbN\xbc\x0f:c\xb6n\x84\xc8\x1eG\xa4\x8f\x85\x8b\xedнne\n\xff\x03J\x01+|\x96%d\xc29\x16\xc8\t\xa4\x8a6b\x1bs\x01\\\xae\xe3\x0f\xc4C\vQ\xd4<\xa0I6+\xb87\x1a\x85L\xbd$\xad\xa7\x9f\x13\xa0\t鹸\xf6\x1d{\xdcv\xbbᛣ\xd5T\xebi\x92 \xa4\x8b錖\xfal\xc2\xeeIB\xa1T\xc0\xe6`\xfe];Xn\x98\x8c\x8f\x8c\xb4\xad1\x94\xa6*WJ\x84d\xa1ׇ\xaa\xa3P\x14f\x89\xb8κ\x90\xbc\x15ˢEt\xb5i&;\x0fR7\xe6\xfe\x81*\x87\x85ϲ\x16\xfc>\x0f\xef\xe9%\x00\x0552\xf4\x82J\x10HB17\xa71\xa3o\xb5$\xe5\x04\xa6\\C\xea3\x99u\x9e!\x1fdK\x11\x9eP\xed\xfd\xf3\x9dI\xd1\x0f\xa0\x16\xa9\xa2\x89\xa6X\xb2e\x00\xa7\xa7#c\x1b\xa65\x05Kxh\xfdV\xf4}\xac\xe6\x02d'\x80\xf0\x93\xce\xcc\xd1š\x9ew\":mf\xaa\x19XK\t\xecbLΌ\u007f\xbc5\x16\x9d\x10\x0ejh\n\xc9\xd5\xe2>\xc2\x19\x94\xb9e\x88\x1c \xc6w\x1e\xddi\x89\xc8\xe2M6\xb5Qj\x81\xddh\x18\x81F\xd4\xeaU\xa4R\xa5\x1f\x05bI\x93\n\xf3\x8aoY\xa91\xba>\xcek\t\xba\xa8\x19\xb1\vs{v\xb7\xcc22\xd0\xf2\x92\xc9\xef\xe9\xb8\\\x06(Z\xe5O\xffS/\x04\xf0L\xb2\xdc*=\xa6\xa0\xf7\xaaҧTU\x16\x10{\xf1\"\x92I\xd4\xc8\xf8];\x94\x98,\x12\xe9\x94\xcc\v5\x03\xed\xe4\xaf\x1d־u\bpSp\xb2\xc6nE\x0eX\x8c\x94\r\xeb\x8ed\xcda\xc1~\xdd;\xe0lH\x86\x9a\f\xf9\x1d\xa3%TwM\x80P+$X{9\xd1u\xb3#\xfa\x11w\u007f\xc5\xd2\xd0F\x8b!Iu^\xb8\x12\xcf\xc9\v\x97\xbb\xbb\x14<\xbbbGX\n*R[\xa4\x1e\x8d\xffp&\xd2n\x1a\xa6\x98\xe5\xdaD\x96\xb5\xa10\":R\xd3M#uQ<[\xf3\xe5\xc6\xc4\rF\xd6\xfe\x13\b\xf2\x16?lk\xb3E\xaeǨ\x90\xf0\x9d{\x9bY a\x1bӶ1R\x87\xcaf\xfb\x9a\xeb\xcb\xc0\xd16>\xb88\xe9.\xe6K\xc1\x88\xbd!\xa0-gt_\x1a!\xaer\x94\xb4\xf1ٱ9\xa9\xbfz\x01\xbd\xb1\x1e\xfe6\x00\x11\xa9\xb5\x95\x81\x91\xd5u\xbdZFz@\x16:؟\x9apfg\\\xf5F\xa8\xdf\xc0\x80\xeb\xcey\x8fq٪\x14\u007f\xf0ՠ3\x1f3F\xb8u*/p\xcd~_\x9dѭh^\xe8\xc9kZDE[Ib\x1a;g\xe0/4Y\x98\xa8\x9a\xab\xa8\fif#8\x1c5\xd66N\xc0\xc8BA\xcdx$\x83ޒ\xd4Y\x17\x84\x1d\xf8:F\xaa\x82\xde\x11U\x80\x9e\\\xa2\x1f5J\xb4.P\xab\xa8\x1a\xa6E\b\xf4\x1a@T\x9d>\x14\xb0=\xb1\xe1\x02\b\xfd֠\x17#\xb7\x03\x9e\a\xec\xfc:W\xa0\x0e\xa0뀙\f\x14\xf4B\xddz4\x1b\x81Ϗ\xe6\x05\\\x107mQ\x9b\xc0\xc0,\x95R\x14Q\x1d\x8f\x05\xff\xbc\x06\xa8Bn\x92\x942\xb7f\xe9:oK\x9aR\xc72\x84\xa7\x80\xd2ߒr\xeb6\"\xeeGM>ߛqk\f_\xdbBi\xff\x99\xb45\x01pК\x92\xfd\xbd\aW8L\x1dC\x97\xa1I\x87\xe7\xe0R\"\xc6Q\x8bdh\xee\x02\xc1Tմ\x12\x19\xf1\x99d\xb08\xa6\xcaT,$$.\xc2SJ{Z0\xb9\x87\xe1/\x17\xa8\xe0̞\r5u\x84b'k\xaa-뉲/\f%tI}@\xddWb\xa1\x1a\x1cC]\xb7\xa5&\xb7`,!\xe5\xe9IKCr][ܳ|\x19\xa80g\xa0w\xb4\xd9\x02\xd6\xd3\xc7\xcev\xe0b\xab\xd6K\xa3m\xa9\xc6-\xe1\xa5F\xb3\xb7\x98\xae6h\xfc,\x11\x05\xab9M\xc2\x0eE\x9c<\xf07\xb8 \xa3\xd6&6U\xd7l˩\xa9\x97\xafWKC\xf3:\xdc/\x9f\xb8\x91Li\x04#\xf9\x00\xab\x06؊\x83aŗ\xc8\x02\xb6\x80\x89\xaf9\xec\xc9),Z\xd2\a\x06\x84\x98\x0fh0?\xb7r\f{tjc\x93\xe8\x86_\xa4\xd7\xc6\x17p\xa8\xc1\x99NA2y\x97\xe6u\x03\x10\t\x82Wk#\xcb\xf7>\x02\xab\x0eLm\x0e\x01\xf3\u007f\xe3\x00XѴ\xb3\xb6\x8a\x14|6\x94!\xa8\x89\x17\xa1\t\xf7!\xa0\x9bC)\xb5B\xacBZ4F<\fp\xeaF\x9f\x81>\x90\xca\xd3,\x10\x15\x8cf\nn\xbf\xeb\xf4)\f#(\xdf\x0e\x88\x9e\b\x011uѬ\xc9\f\xca{\xe7\xe7\xd5\xe1\xef\xe40o\xdb\xf0\xe7\xd0.R\x0f\x91!d%4\xe1\x1b\xb1r\xaf\xf9\x8a\xff\x05\x92\x8b\xf3\x92\xfb\x87_\xbb\xb2\xb5U\xa7\xd66\xe0T-M\xbb\x1f\x13\x8du\xde\x06\x80*\xf0$\xf4\xb6\xbbt\xb2\x17\x86hr:\xb7\xb1\xe6w\\o\x95\xb8ΉOe<:\xa8G\xed:a`8OG6\rd6\x11\xb7\xae\xbd\x9dp\xb7|\xe9/\x98\xa6c\xc9\xe6\xb2\xc0cMb\x87]z\xd9\x02\xb6\x84p\xea\xdd(\xc0*\xb4\x89\xaaA\xbd\xd3Pfm\xf4ֆ\x8c,\xa9\x886\xa6,\xdb\xfb\xc3J}\x03\xc3\xeak\xad\xa71p\x8aVUVƆ\xd5\xcalc\x043\xb3\xcb1Ht\xde\xc1\xd7\xc9V\x1b)TBvMfK\xef\x81\x00܄Xf@\x86\x19\xd9\xf1\x10\x04*\xeb\xbf#\xcaN\t\xf1qV\x00\xc9F\x9e\x91\x93ZaMJ\x8c\x8a]\xb2\x18\u007f\x17\xdd\xf6x\x9c\xd8\xc4\nD\xa8\x15~n\x12\x92\x8f\xcc;\xcf,\x10\xbd\x14\xd4A\xdcH/\xd7\xce\b\x0f\xfa@\xafx\xac\xa5f\x96\xae\xd8mW\x04v\xafέ\x8b\x14\xd6\x05\xb9\xd1\xe47\v\xbe+\xf0+\x9bb\xf3\aC\b`\x03B\x02\x90\x83=Q\x81\r\x9e\x8etKȳ\x9d\xa5\x86\x99\xe5Dj\xa4\xc1\x0e\x91f\x17\x13\xaa\x9a3\xfd\x05\x89\xb6\xd6\xd6Rb8\xaf\xbbAG\x15raZɎ2\x01\x15\xd3\u007fY\xa1\xa6=(\xa5\xd8y*\xee\x18d\xe70\r\x0eI\xe7E\x82\xeeO\xf2^\x9a\t\x80̨3\xb1\x87@(L\xe8j:\xa8\xa1\xba\xa5w_^\xb0j\xdd%,Z\\\xadR\xcf\x1c\xfb\xa8z\xad\x8a\xaa\x91\xb2\x16\xa7\xa1P\xac٩uNYt_\xdf\xc1P\x9eؾv`\xdc\xc8ħVf}>\xa4\x11\x89.(SZ5\xf5\xfe\x90\xad\xf2\xa9u\xb1\xa2P\xb4P\xad\xf1\x85(\x05\xd0\xef\x95\u007fҘ\x8d\xd1m\xe7a)\v\xdc5\xe7>\x17\x15\xea;\xc0\xe7`\x1a\xdc\xc67\xd1\x16b\x15I\xf8ۢ\xa7$\xea;\x1a\x11\x8d\fk\xe5\x91<\x06\xfc\x1c\xf69ĵRE\x15n\xa4\x91\xbf\x15\x11\x8b\t5\xa2\x19iZR6\x02J\xb9]4\tFш6D\x8b\xcc\x13\xd2\\5\xb86{r-\xb7\xab\xb05\x81h\n\x90\x9a$\x0f8\xa9N\xab\xc8\xe8GK\x00\aN&Y1\xa5\xa8\x99H\xa1=\xfcϡ4\xfd\xe7P\xa2θr\x03&\xa8\xde\xc99\r\xac\x93\xe3c\t\x94 T\xcd\v\x13Zc\x8b\xf1\x82S\b\x17\a\x8e\xea\xf7\n\x12ۻ\xd2k_\x19|DS\u007f\xa0\x06Zs\xdc\xc7\xd6\xecj\xb9<\xe1<\xa0d\xaf3\xb0\x9b\xea'\x89\xba\xce!\xb1\xf7$\x01\xb6|\xdd\xcc\xe26!\xf0/\n\xea\x94^\xff\xad\x95ڷ\xa4J\xe6m\x11M$\xb9\xec\x0f\x91|\xafD\x1c\xb2\x02;V\x91\xca'Xb\x8d\xc0\xac\xf2r\xd11\xd0\xd8\x06\b\xd9\xd6u\xb9\x81h\x10\":mǯ<\x94ו\xedN\xb1g\x8a҅l\xe2\xeb\x82\xd5e\xb1\xa9B[6TD\xda\x1a\x9be\xd3\x15}Hg\xa1\xeb.\x16\\\xa8~G[0\xa2\xe2Agث\x1e\x87\xe1wI\xc8eb\xaf\xce\xc0\xf0v!\x93d\x01ᲡU\x90\x01nX'\xf2\x82\v|\x9e \b\x06\xaag\x80zEm\x1a\xee\x8a\x1aՆ\x88,`&\uf06dj\x1b) Qێ\x8a\xa6J\x03\xec\xaa\\\rQL\xd9\x1b8x\xd5ZQ\xbf-\x14\xebg\xc5/\xa3\xc5ݔ\xa6w\x88\v0\x9f]JK\xc1\x8b\xf9\xb7=b\xc90a\r\x13\x82\xd5\x1a*\x95\x9f\xf6dr\x89Ĺ6-#@\xaa;~\x89-\xb5\x1d\x10\xbe57lק\xe9JW\x12\xbd\f\xbbx,{\xbf\xf4ɘ\xb76\x96;\x92\xab\x86\xc6)\xd5Q\xa1#\x06\xe3S\xee\xa0CF\x81DF\x90\x95L\xfa\x0e0\u007f \xabx\xf1x='\xa9,pR\xd8\xca49\x156\xbe\xed(!5\x80\x02\x82S\xa7F\xd0\xf5\x96\x9f\xad\xf9\xeaD\x97n\xad\xf0k\xc1r\xd2\xda$\x92e;O\xc49n\x93\x94\xf8j,\x92\xb0\bZqS\x97\x82\xe1ܵ\x92\x16\x16*JF\xbe\fT\xe82\xae\x97\xa0\xc5du\x9f\x1b\xe3U-S\x1d\xd95\xf7Ú\x1a\x1a\x88\x13U6\x9cx|\x8a\xa8ҿƸ\f\xfa:9\xa51\xf5\"0f\xf7\xda\xdePm\xe3-\x84/\xa4\xa8\xb5\xa0\x8c\xf1\x1fgZ\\\xac\x13\xc9\xeb\xf2%\x13\x80ul\xcdל3\xa0\xe4'W\xbc\xe6\xef3C\x0f\xbcz\xd3y\xa7\x9b\xaci\xd7\xfc\xa1RB\x82\xafj\x1d\xd0?\\GǾ\xd8Ψ?e\xd1!\x1cZ\xf0\xe1Ӧ\xa5\xa0j\xedj\xda\xfa\xb8t\x94\x1c\x98)K\x83\xaf\xe8\xab\x1f\xad\x81\xa2\x0fK\x17\xd6݁z\xa8;\xb9\xbfd\x16\r\xe5i\x14R\x13m\a\xab\x9bjqXo\xeb\x88Z\r\x15p\x1a\xca\xc8/\b=^3\b\x9f'0\x9f\xb5\xf2H\xea\xc7.y\xc6ە8a[\xa4+L\x1e\xf0\x8f\xb3\x99\x06mSWXVA\xe0O\xd5\\\x03崶\xa5x>J\x12c7\x02\xa5\xcc\xd5\x13\xec\x13e3ؓ$\x80F\x01\x10\x1a\x9f\x97\xe1-|\bS\xe6\x9b\x02\xda\xe1`\x9f\\~\x8c͖\x84Xn\x1dI\xf2bC\b4g\xca[\x98\xeeI\xd3\xc1h@>f\xe9\x80n\xcd:)\x15\xaf\x92\x833-\xed|\x9e\x87\xef\xf15\x90\xbbC!\x14\x1a\xe9\x00\xf8͕\f\xfe\xddz+\xb6\x06\xb0B(B\xd3^dJ\rn\xe2 \x96w\x0f\xac\x00%\x9fGV\xe2$'\x19t\xe7\x90\x03\x95\va\xe0\x13!\xca+\xb8\x13\xabE\xe1\xbb\"\x151\xf5\x02\xa0\xc3ܲ\xa5\xba\xbc\xd0\xc5'\xe6uO\x87\x1b\xa0\xb6\xc7,]5TBR<\xa5\b\x12{\x97\xe1\u007f^\xf2\x00\u007fx\x0f\xe7\xf8\xe5\xbf7\xe99\xbc\x1f\xe29~\xf9\xd7<|$1\xc2DSd\x89BњL=\x86\xd2\xcb\xd6\xecFf\x86^_\xc3 \x11Dx\r\xfb\xa4\xa6$\xa2UK\xd43橐\x12`7\x1dE4s\x924)'\x9c\xf1\xde\x19Xr\xff?o\x0e\xe1\xeb!~\xf9m\xd4}\xefҗ\xdf7\xe9\xb5}'\xabDŽ!M\x1c\xd7ȑ\x1a\xff\xd6\f\xaf\xe4\xecK:\xbb.@kӓ\xbb\xdf\xd9\x04m-\x05\xd4Rx\xb1v\xed\xf8;\xddo\x9dC\xa2\xbfJʩ\x14\xcdL\xa9\x91J\xd5\xd3\xf4\xe5\xf7E:w\xe2\xfe\xfc\x98\xba/\x9f\xa7\xe1\x1c^\x83{\xf9P\x180G\x96:\xfd6V\x00X\x84\xb2\x18!]\xba=\x03\xbfm\tfz,x#\xebh\x06rݗ\u007fM\xc3%\x1c\u0085\xa0`u(\xa2\xe5\x8e\xf4\xdegnu]\x18\xfb\x11\xfd\xbaC)\x1dA\xcb\xcc\x04n\\\xcdVL\U000d09716(WO\xbb\xff*A@d\x9e$4\x98\x9a\x03\x1a\xa9\xc1\xcdǓ\xfe}\xb2\xc0E\xb3\xec\xb1\xe9\n\xd6\xf4\xe0Tn\xb1\x9c\xe0\x1f\xef9\x83\xbau\xc0X\"픡\xa1y՞\xf1<2\xef\t\xb7\x06\xaa\xd9Ն\x8c\xf1+\xf6ys\x88\xf1\x1c\xbe\xfc\xb6H\x97wuB\xe0\x8aˮ\xa3\xfc]\xc1\x94DU.\fҍ\x9f\t4$\xe0+u\xe9\b\xa9\x1d\xd8\x19ik[J3\x8d\xad\xe75\x05\fO\x16S\x9d\x1f\x96<\xea\xa28.\xb2H-\x8e\xac\x10\x91BN&biұ\x9eC\f]\xeb\xf2\x1c\xf0KT\xe8\xf9\xea\xe9\xed\x83{M\xf8\xc2\xe4\xee%:\v\xeah*\xe2f&,K\xd2S` ;\x8bN\xe1\xf5\xee\xdb\x1a\xed|4\xc3\n0\xda\x04*,K\xb725\xd9pҰ\x80\xfe\xa2v\xdb\xc0qM\x9bC4\x13ET\xb2\xf3\u07b8\x86j\x9cɥ\xa5\xa2=3\xb01/\xd3c\x1d1\xbb\"\x91\xaa\xe3\x02\xa2Z\xb7\f\t}`/\f\xf0\xd2\x184@A\xeb\xa9-\t\xbb\xcafR\xdbu\x0e\x06M|\x14\xb4\xb34\x8e\xf3\xb8T\xbb\x1b$\xa7\xe8\xf9Ώ\xba\xc42vT\x9a;8\xe97\x12\x95\xc4t\xf0\x10iᆞΘF\x93EQHƤ\xd8\xd04\xf1ΡKv\xe7i\x81\xd90\x9fM\xe9\xf2#\xb6\xd4\xcb4\x06mYű\xc59L\x12\xa5e2E8\xbaIJ&\xf6\xd4z\x96\xc63\x9d\x98\x9b\xef\x1e\x9a\xc2;S\xe20b\xb8\ue113\xe4\fO\x87r\x10u\x00\xa1O\x81~\xc4\x17\x92O\x80fxJķ\x04m\x14\x9b*,\x1aT33\x065#H\x94\xd6\xcc\xfa\xd3L\x89\xe8*\xa9EY,k\xf1NxF^\xfc\xfb\xf0\x10\xbf\xe5 \xe1Ӷ{\xcd3\xb55\f\xb3\\&\x80\x10\x00\x93\u0602\x92(ۃ1\xdbe\xc2K\x06\xab\x9a\x1e6\xda\xe0\xf2t\xa7ܡ\xd1!i}S|\xd6\xc6T\"\u007f\xff\xcfk8\xa7\x97\x90\xe3\xaa\xd7\xf6\x1d]\x8dU\xbc\x93\x16z8\x9a\xdbBk\xf5\x99\xb5\xe9\xdd`T\xd6\tJ\x86\x06\x06\x15\xa6jc2Ck J\x1aKj\xe7\x9d\xdd\x0f]\x05\xb0 \xaf\xe3]5\xc0\xfe\xb5\xa7,\xe9\xa8s\xfc\x83\xafO3\xa8X\xfd\xe7=\xbd\x86/\xffk\x1e_S\xbc\x84o\xe15\xba\x14\x9f6K%\x1e_\xa8ow\xa7\xbf\x10Vwp/\xd7K\xa7\xeb'34\x04F[NHs6B6.\xed\xd1\x05\xfcύ\x99p\xb4\xce\xf3\xef\xdb\xf7\xf4\",ݡ#\xbaݩ\x14\x9f\xb5s\x1fD\x9d\x96Sp\xe7\xcc\xd3:@\xf7@\xabf\x00\xd6X\xf9\x9d-Q4\x02\x85\xfa\xd9\u0604\x85\x8b=\xbaSs\xb2%\xb6ΞU\x8aM\xb4\xe4x[\xc8\x01ձ\xd0qm\xb5\xd8\xd0p\xd5\xfa\x93\x15g\x89\xe6\xb4\xc7\xf3رO\x9eǩ\xe1J\x94\xc3\xd6 \xceU\xd5h\xebQ\t\xe5Ъ\xce(4\x19s\xac\x88\x13\xc6\xee\x16X\x9b\u0082\xeevޚƆ\xb6\x85\x05\xb7,ºVD\xab%\xa5\xa2\x8d\x99 ؿ\xe2x\xa9\x8dng\xd1OK\x170\xb6\x155\x0e\\Yr+\xa5\xbf\x85-8\x8a\x89\x1e\x91\xb9۠\x05j\x14\n\x19I\x82N\xe1\x15RУ\xbe{B\xf2\x83\ueffeW\xe8\xfe0\xb3\x9e\xeb\xc2\b\xb8\xb2\xf6\xe6\x8974\x80*\x00\xd2\x13\x06\xf0\xead\x15X[i\n\xbc\xcf\x1e\x851JQ\xa5\xb6\xa8\f\x9b\x10\xb3\xaa\x9fƂ\xad\x825\x10\xa7\xa8\x19\xfcSBmͲ\xf3ir\xe5rS`|\xe2ڡa݃\xd5R\xda{Y\xb5r\xba\x17*9S\xbd\x86\xf9s'ɵR\x81\x0eO>\t0\xafl\xe6,\xad7\x00\xe9]L[\x919\xaa}h\x15vG\xd6\xfa\xdd\x15\x9a7\x8d\xddv\xe45r\xd3\xcar\xab25kG\xcbc\xc0\rSw\xc7\xd8\xd1A<\x04\xd7Fw\xb9a\xb2\x84\x06\xfa\x93\x03OeglA\xe0\x87@:A\x99\t\xd1\x14\xe5g\xc4}\xc9<_GOՔ\x9e=3\xb3d\x8a\x9dئ\x04\x1bJU\xd7C\xf3\xae\x8e\xf6\x9e\x99\x95\x00d\x85\x19r\xa6- jSȣ\x14h'\x88\xbb\xc2\x12՜\x99\xbd5SCF\x1d\xe0(A\xab)bk\x9c\x8a?\xa8\xf9i\a!s\x98\xbbB\xa9\x9fx=,\x18\x8e\xcb4B7\xd6\xc1\xad\x19ވz\a\xa4R\xa6\xad\xed\x825CR]\xe1\xa6-\x1e\xa0`\xa8JU\xa00m\x13:yR\x97\xe4\x1f)\x1a\xec\xea\x02\xea場\x14\xc0\x94\x85\xe0\xd0\x14\xb5p|\xf5\xc8T\xbb\x87\x06\xe9{pE\x91#\xb7\xe8־ʜ\x1a\xdbXx6\v\xca\xc7ܲƭ\x83\x9d\x15\xe6\xbe0U4\x19skSE~\nE\x9b\v,\x9e\x87΄K\xa1\x80\xdb$\xb76A\xa1\nb\x1e\x14\xc7`)t\x92\x8a\xa5H\xa3Q7;\xcc\v)#\xfa\tD\x85JZ(\xacf6\a\xea}\xc3Ĝ\xc0\xf2A0\xa6\xb7\x17w\xd6\x06\x00\xfe\x87T\b*,9,Z:bO\xcb\u007f3n\xf5[\xec\x93njט\x04\x8cib\x99#\xb1\x99 IF\xb6\x03\x10\v\x96\xa9$\xe0*\xbc\x13\xe2z42\x00\x1c`\x86\xbd{\xe6\x95I\xd9z\x86\x87{\xf1j]\xb5h\xd3\b\xacZg,o\xa4JC\xab\xae\xa8\x9a)\x965_\xf0U\xe7\xd5\x1dt\xe6$\xa3S\xb5\xa7s\xad5k-\x03q\xb5\xa4T\xc1\x1e\x06v2\xed\xb0\xb4\xff\xa9k\xfd\x93Q\xab\xf8B\xb0͆\a\x93s\v\xe5\xafS\x06@\x8b\x13\xae\xa3\xc1\x10\xb5T\xb1\a-\xddE\xe0d\x11y\xea\x88\xf1\\\xb9\xe7\x1b\xb1\xba\xa6\x03\x8fG-\xa7\xce)\xe3\xacy\xa9\x1c\xfd\xe3ϚH˽\x1dP\xbe\x9d\xfc\x11\xa2\xa2g\x149\x90\x19\xfb\u007f\xfc\xff\xff\xcf\xff\xef\xbf\xffw\xff\xfb\xbfz\xf1ҋ\xd7\xff\x8a\xbdx\xaab{\xa9b{\xedŶ\x8a\xed\xa9\x17.\xbdp\xfd\xaf\xd0\v\xa7*u\xd7^\xea\xaaԝzݥ\xd7]\xff\xab\xebu\xa7^{\xfd\xaf\xb6\xf7w\xaa\x9e\xe3\xa5z\x8e\xd7\xdes\xac\x9e\xe3\xa9\xff\x1c\xdbK~\xb8Vϱ\xcd\a\xa7\xea9\\\xaa\xe7p\xed=\x87\xea9\x9c\xfaϩ\xbbVϩ\xcb\a\xa7깻T\xcfݵ\xf7\xdcU\xcf\xf9\x9f\xed\xb5\xf7\xdcV\xcf\xf9m\xe9R=\xa7k\xef9U\xcf)\xbf\xed\x9c\xdfv\xae\x9eo\x97\xea\xf9v\xed=ߪ\xe7۩\xff|\xcb\xcf\xdf\xce\xd5)^\xaaS\xbc\xf6N\xb1:\xc5S\xff\x94\xcf\xe1\x14\xdb|p\xaaN\xe1R\x9dµw\n\xd5)\x9c\xfa\xa7|\x0e\xa7\xd4\xe5\x83Su\xea.թ\xbb\xf6N]u\xca\xffL\x97ꔮ\xbdS\xaaN)\xbf\xf6\x9c_{\xaeN\xb7Ku\xba]{\xa7[u\xba\x9d\xfa\xa7\xfcŧ۹\xff\xfc\x1c/\xf9\xe1Z=?\xc7|p\xfa\xf4\x9c/\x83<^\xf3\x13\xad\x1c\x9e\xfa\xcf\xcf!\xbf2\xe4W\x86|\x90_\x99\xba\xfc\x9a\xd4\xc9a~M\x97_\x93\xaf\xd1s\x97\x0f\xf2S\xf9r>\xb7\xf9 \xff+\xe5\x17\xa4\xfcT\xca\a\xf2!g\xf9\x90|2\xb7\xfc\xd7[\xfe\xeb-\x1f\x9c\xfa\xc7|~\xc7|~\xc7\xe7\x98\x0fN\x9f\x8erf\xf9Q\x0e\xf3kB~Mȯ\t\xf9 ?\xd5姺\xfcT\x97\x0f\xf2S)?\x95\xf2S)\x1f\xe4O\xca_\x9d\x1f\xfb\xc7\xfc\xd5\xc7\xfc\xd5\xc7\xe7[>\xc8\u007f\xbd\xc9_o\xe7\xfe\xe1-^\xf2õ:\xbc\xc5|p\xfatx\xcbg\x91\x1f\xe5\xf0\xd4?\xbc\x85\xfc\x9a\x90_\x13\xf2A~M\xbe>\xf9Q\x0e\xf3k\xba\xfc\x9a.\xbf\xa6\xcb\a\xf9\xa9\x94\x9fJ\xf9\xa9\x94\x0f\xe4mgy[\xfe\xe2[\xfe\xc3-\x1f\xe4?\xdc\xe4\x0f\xb7s\xf5\x16/\xd5[\xbc\xf6\xdeb\xf5\x16O\xfd|2\xd5[l\xf3\xc1\xa9z\v\x97\xea-\\{o\xa1z\v\xa7\xfe[\xea.\xf9\xe1Z\xbd\xa5.\x1f\x9c\xaa\xb7\xeeR\xbdu\xd7\xde[W\xbd\xe5\u007f\xb6\xd7\xde[[\xbd\xa5K\xf5\x96\xae\xbd\xb7T\xbd\xa5\xfc\xbes~˹z\xbb]\xaa\xb7۵\xf7v\xab\xden\xa7\xea\xafx\xa9\xfe\x8a\xd7\xde_\xb1\xfa+\x9e\xaa\xbf¥\xfa+\\{\u007f\x85\xea\xafp\xaa\xfeꮽ\xbf\xba\xea\xaf\xeeT\xfd\x95.\xd5_\xe9\xda\xfb+U\u007f\xa5S\xff\xaf\xfcy\u007f\xa5s\xf5\xd7\xedR\xfdu\xbb\xf6\xfe\xbaU\u007f\xddNկx\xa9~\xc5k\xefW\xac~\xc5S\xffW\x9e\x85\xbf\xf2\x0f\xfa\x15\xdb|p\xaa~\x85K\xf5+\\{\xbfB\xf5+\x9c\xaa_ݥ\xfa\xd5]{\xbf\xba\xeaWw\xaa~\xe5\x97\xe6W\xa5K\xf5+]{\xbfR\xf5+\x9d\xfa\xbf\xf2\xd7\xfdJ\xe7\xea\xd7\xedR\xfd\xba]{\xbfnկ۩\xff+\x8f\xfd_\xb7s\xf5-^\xaao\xf1\xda\xfb\x16\xabo\xf1\xd4\xff\x96\xbf\xf2[l\xf3\xc1\xa9\xfa\x16.շp\xed}\vշp\xea\u007f˗\xef[\xea\xaaoݥ\xfa\xd6]{\xdf\xf2\xe1\xa9\xfa\xd6^{\xdf\xda\xea[~G\xbaT\xdfҵ\xf7-U\xdfR~\xc79\xbf\xe3\\]⥺\xc4k\xef\x12\xabK<\xf5/\xf9k.\xb1\xcd\a\xa7\xea\x12.\xd5%\\{\x97P]©\u007fɷ꒿뒺|p\xaa.ݥ\xbat\xd7ޥ\xab.\xf9\x9f\xed\xb5wi\xabK~o\xbaT\x97t\xed]RuI\xf9\xbd\xe7\xfc\xb6s\xff۷x\xc9\x0f\xd7\xea۷\x98\x0fN\x9f\xbe\xe5\x1f\x97\x0f[9<\xf5\xbf}\v\xf95!\xbf&\xe4\x83\xfc\x9a\xc8\xffJ\xf9\x05)?\x95\xf2\x81|\xc8Y>\xe4\xdc?\xe6\xd38\xe6\xd38~\x8b\xf9\xe0\xf4\xe9(\xa7\x91\x1f\xfb\xc7|\x02\xc7|\x02\xc7o!\x1f\x9c\xfa\xc7\xfc}\xc7\xfc}\xc7o]>\xc8O\xb5\xf9_\xf9\xe5y\xa2\xe7\xef;\xe6\xef;~K\xf9 \u007f\xa2L\xe1\xfc}\x87c\x9e\xa4\xc7\x1d\x8ey)ˏ\xd7\xfcD+\x87\xa7\xfeᘧ\xea1O\xd5c\xc8\a\xf9\x952U\x8f\xa9\xeb\x1f\x8ey\x92\x1e\xe5\x9fy\x82\x1e\xdb\xfc\xba6\x1f\xe4\u007f\xa5Ku\x8c\xf9\xbfk\xef\x18\xabc<\xf5\xf3\xc7W\xc7\xfc\x9b\xf2\x1d=\x86k\xef\x18\xaac\xfeA\xf9F\xe6\x8f<\xe6\x1by\xec.ձ\xbb\xf6\x8e]u\xcc\xffl\xaf\xbdc[\x1d\xf3[\xf2g\xa6k\uf62ac\xcao;緝\xfb\x87\x1f\xf9\x17\xfdȿ\xe8G\xcc\a\xa7O\x87\x1f\xf2[~\xe4\xdf\xf2C~ˏ\xfc[~\xe4\xdf\xf2#\xe4\x83\xfc\x1a\xf9-?\xf2\xb2\xf3C\x96\x9d\x1fy\xc5\xf9\xd1\xe5\x83\xfc\xaf\xfc\x83~\xb4\xf9 \xff+\xaf??\xf2\xfa\xf3#\xe5\x03y\xffYޟ\xcf\xe0\x96\xff\x9a\x17\xa1\x1f\xb7|\x90\xff*\x8bЏ۹\xfa\x11/Տx\xed\xfd\x88Տx\xea\xff\xc8\x137\x9f_\xf5#\xb6\xf9\xe0T\xfd\b\x97\xeaG\xb8\xf6~\x84\xeaG8\xf5\u007f\xe4\xe1\x9dϮ\xfa\x91\xba|p\xaa~t\x97\xeaGw\xed\xfd\xe8\xaa\x1f\xf9\x9f\xed\xb5\xf7\xa3\xad~\xe4\xf7\xa6K\xf5#]{?R\xf5#\xe5\xf7\x9e\xf3\xdb\xceՏۥ\xfaq\xbb\xf6~ܪ\x1f\xb7S?\x9fN\x95\xcf\xe6%^\xaa\x97x\xed\xbd\xc4\xea%\x9e\xfa/\xf9l^\xf2ټ\xc46\x1f\x9c\xaa\x97p\xa9^µ\xf7\x12\xaa\x97p\xea\xbf\xe4\xb3y\xc9g\xf3\x92\xba|p\xaa^\xbaK\xf5\xd2]{/]\xf5\x92\xff\xd9^\xaa\x97\xf6\xda{i\xab\x97\xfc\xfet\xa9^ҵ\xf7\x92\xaa\x97\x94\xdf\u007f\xceo=W\xaf\xf1R\xbd\xc6k\xef5V\xaf\xf1\xd4\u007f\xcd_\xfa\x1a\xdb|p\xaa^åz\r\xd7\xdek\xa8^é\xff\x9a\xbf\xef5u\xf9\xe0T\xbdv\x97굻\xf6^\xbb\xea5\xff\xb3\xbdT\xaf\xed\xb5\xf7\xdaV\xaf\xf9\xad\xe9R\xbd\xa6k\xef5U\xaf)\xbf\xf5\x9c\xdfz\ueffc\xc4K~\xb8V//\xf1\xd3K\xfe\x91\xf9\x9f\xad\x1c\x9e\xfa//!\xff9\xe4?\x87|p\xfa\xf4\x92\u007f\xab<\xe6W\xa6N\x0e\xf3+\xf3\x15x\xc9W\xe0\xa5\xcb\a\xf9\xa9|\xd9^\xf2e{i\xf3A~*\xe5\xa7R~*\xe5\x03\xf9\xbc\xb3|\xd2\xf9ӛ|}~\xec\xbf\xe5/~\xcb_\xfc\xf6\x12\xf2\xc1\xe9ӛ|e~\x94\xc3S\xff-\u007f\xe5[\xfeʷ\x97.\x1f\xe4\xa7\xf2\xe6\xf5\x92\xdf\xdf\xe6\u007f\xa5\xfc\x82\x94\x9fJ\xf9@>\xe4,\x1fr\xee\x1f\xaeyJ\\\xf3\x94\xb8\xc6|p\xfat\xb8\xca$\xbf\xcaĸ\xe6\x89q\x95\x89q\xcd\x13\xe3\x9a'\xc65\xe4\x83\xfc\xca|\x15\xf2c~e\x9e\x1eW\x99\x1e\xd7<\xe1\xafy\x8e\\\xbb|\x90\x9f\xcas\xe4\xda\xe6\x83ӧ\xa3\xfc\xc4\xfc(\x87\xa7\xfe1\xff\xd0c\xfe\xa1Ǘ\x90\x0f\xf2k\xf2g\x1f\xe5\xe7\xe6\xc7\xfe1\xff\xd0c\xfe\xa1\xc7\x17\xf9W~[^(^\xda|p\xaa\x0e\xf9\x97\xe4\xa1r\x88mu\b\x97\xea\x10\xae\xbdC\xa8\x0e\xe1\xd4?\xe4\xa1y\xc8C\xe5\x90W\xa4\xe2\xb5\xf7\x11\xab\x8fx\xea\u007f\xe4\xd3\xf8\x88m>8U\x1f\xe1R}\x84k\xef#T\x1f\xe1\xd4\xffȟ\xf7\x91\xba|p\xaa>\xbaK\xf5\xd1]{\x1f]\xf5\x91\xff\xd9^{\x1fm\xf5\x91ߖ.\xd5G\xba\xf6>R\xf5\x91\xf2\xdb\xce\xf9m\xe7\xea\xe3v\xa9>n\xd7\xdeǭ\xfa\xb8\x9d\xfa\x1fy\xbe~\xdc\xce\xd5\xd7x\xa9\xbe\xc6k\xefk\xac\xbe\xc6S\xffk\x9e\xaf_\xf3\x89|\x8dm>8U_å\xfa\x1a\xae\xbd\xaf\xa1\xfa\x1aN\xfd\xaf\xf9D\xbe\xa6.\x1f\x9c\xaa\xafݥ\xfa\xda]{_\xbb\xeak\xfeg{\xed}m\xab\xaf\xf9m\xe9R}M\xd7\xde\xd7T}M\xf9m\xe7\xfc\xb6s\xf5\xf5v\xa9\xbeޮ\xbd\xaf\xb7\xea\xeb\xed\xd4\xff\x9aO\xe4\xeb\xed\xdc\xff\xf8\x88\x97\xfcp\xad>>b>8}\xfa\xf8\xc8c*?^\xf3\x13\xad\x1c\x9e\xfa\x1f\x1f!\xbf2\xe4W\x86|\x90\x9f\xcaW\xe7\xa3\xcb\a\xf9_\xf9B~\xb4\xf9 \xff+\xe5\u007f\xa5|\x90?3\x8f\xe2\xfc\xd8\xff\xf8\xb8\xe5Ϲ\xe5\xbf\xde\xf2A\xfe\xebM\xfez;\xf7\x8f\xf9|\x8e\xf9|\x8e\x1f1\x1f\x9c>\x1d\xe5L\xf2\xa3\x1c\x9e\xfa\xc7|&\xc7|&Ǐ\x90\x0f\xf2kd\xec\xe5;u\xfc\x90\xa3<\xe4\xf2\t\x1d?\xda\xfc|>H\xf9@^{\x96\xd7\xe6oˑo>\x97\xe3\xc7-\x1f\xe4\xbfJ\xe4\x9bo\xd2{\xbcT\xef\xf1\xda{\x8f\xd5{<\xf5\xdf\xf3\xfdy\x8fm>8U\xef\xe1R\xbd\x87k\xef=T\xef\xe1\xd4\u007f\xcf\xf7\xe7=u\xf9\xe0T\xbdw\x97꽻\xf6\u07bb\xea=\xff\xb3\xbd\xf6\xde\xdb\xea=\xbf-]\xaa\xf7t\xed\xbd\xa7\xea=川\xf3\xdb\xce\xd5\xfb\xedR\xbd߮\xbd\xf7[\xf5~;\xf5\xdf\xf3\xfdy\xbf\x9d\xfb\xef\xef\xf1\x92\x1f\xae\xd5\xfb{\xcc\a\xa7O\xef\xf9D\xf2a+\x87\xa7\xfe\xfb{ȯ\t\xf95!\x1f䧺\xfcT>\xa7\xf7.\x1f\xe4\xa7\xf2鿷\xf9 \xff+\xe5\x17\xa4\xfcT\xca\a\xf9\xa9[~ꖟ\xba\xe5\x83\xfcU\xf9b\xe4\xc7\xfe\xc7!\xdf\xfeC\xbe\xfd\x87\x90\x0fN\x9f>\xf2$\xed\xe7G9<\xf5?\x0e]~M\x1e\x14\x87.\x1f\xe4\xa7\xda\xfcT\x1e\x19\x876\x1f\xe4\xa7R~*\x0f\x8fC\xca\a\xf2Ig\xf9\xa4\xfc=yx\x1c\xf2\xf08\xdc\xf2A\xfe\xab\f\x8f\xc3\xed\xdc\xff\x9a\xcf\xe2k>\x8b\xaf\x87\x90\x0fN\x9f\xbe\xe6\xf5B\x1e\xaf\xfd\xfc(\x87\xa7\xfe\xd7|._\xf3\xb9|=t\xf9 ?\x95gY>\x97\xaf\x876\x1f\xe4\xa7R\xfeW\xca\a\xf2Qg\xf9\x90\xfcE\xb7\xfc\xda[\xfe\xeb-\x1f\xe4\xbf\xde䯷s\xff|\x0e\xd7\xea|\x0e\x9f\xce\xe7\xfc\xb5\xf9\xb1\u007f>w\x97\xfc\x90\xff \xff:\xf5\xcf\xe76?\xd5\xe6\xa7\xda|\x90\x9fJ\xf9\xa9\x94\x9fJ\xf9\xe0\x94?\xe3,\x9f\x91?\xf7\x96\xffz\xcb\u007f\xbd\xe5\x83\xfcכ\xfc5ύs\x1e\xf7\xf9\xab\x8f\xe7\x90\x0fN\xfdc\xfe\xbe\xe3\xb9\xcb\a\xf9_m~A\x1e\xf5\xe76\x1f\xe4\xa7rؘ\xbf\xefxN\xf9\xe0\xf4\xe9(ߗ\x1f\xfb\xc7\xfc}\xc7\xfc}\xc7\xf3-\x1f\xe4\xbf\xca\xf8\xcf\xdf\xf7\x9e/\xf6{\xbe\xd8\uf1d0\x0fN\x9f\xde\xe52\xe7G9<\xf5\xdf\xf3e~ϗ\xf9\xfd\xd0\xe5\x83\xfcT\x9b\x9fʣ\xed\xd0\xe6\x83\xfcT\x1em\xf9Z\xbf\x1fR>\x90O:\xcb'\xe5\xef\xc9\x03/_\xeb\xf7\xc3-\x1f\xe4\xbf\xca\xc0;\xdc\xce\xd59\\\xaas\xb8\xf6Ρʿ8_\xf0J\xaew\x9eh\xe7\xeeR\x9d\xbbk\xef\xdcU\xe7\xfc\xcf\xf6\xda;\xb7չ=U\xe7t\xa9\xce\xe9\xda;\xa7\xea\x9c\xf2\xdb\xce\xf9m\xe7\xea|\xbbT\xe7۵w\xbeU\xe7۩\x9f\u007fmu\xbe\x9d\xab\xef\xf1R}\x8f\xd7\xde\xf7X}\x8f\xa7\xfe\xf7\xbc\"\u007f\xcf3\xfe{l\xf3\xc1\xa9\xff=\xefK\xdf\xf3\xd7\u007fO]>8U\u07fbK\xf5\xbd\xbb\xf6\xbew\xd5\xf7\xfc\xcft\xa9\xbe\xa7k\xef{\xaa\xbe\xa7\xfc\x86s~\xed\xb9\xfa~\xbbT\xdfo\xd7\xde\xf7[\xf5\xfdv\xea\u007f\xcf\xdf\xf9\xfdv\xae~\xc6K\xf53^{?c\xf53\x9e\xfa?\xf3w\xfe\xcc\xdf\xf93\xb6\xf9\xe0\xd4\xff\x99\xbf\xf3g\xfeΟ\xa9\xcb\a\xa7\xeagw\xa9~v\xd7\xdeϮ\xfa\x99\xff\x99.\xd5\xcft\xed\xfdL\xd5ϔ\xdfpί=W?o\x97\xea\xe7\xed\xda\xfby\xab~\xdeN\xfd\x9f\xf9;\u007f\xde\xce\xfd\xef\xdf\xe3%?\\\xab\xef\xdfc>8}\xfa\x9e\u007f\xac<^\xf3\x13\xad\x1c\xe6\xa7\xf3\xbdΏrx\xea\u007f\xff\x9e/\xc0\xf7|\x01\xbew\xf9 ?\x95\xf2S)?\x95\xf2\x81\xbc\xed,o\xcb\xdfu\xcb\u007f\xbd\xe5\xbf\xde\xf2\xc1\xa9\u007f\xcc_\u007f\xcc_\u007f\xfc\x1e\xf3\xc1\xe9\xd3Q\xbe\xfe(_\x9f\x1f\xe50?-Kz\xbe\xd6\xc7\xfc\xc5\xc7\xfc\xc5\xc7\xef\xf2\xaf\xfc9yH\u007fO\xf9@^{\x96מ\xfb\xc7\xfc\x9d\xc7\xfc\x9d\xc7\xef\xb7|\x90\xff*C\xfa{\x9eB\xb7\xfc\xf5\xb7\xfc\xf5\xb7\x98\x0fN\x9f\x8e7\xf9\xfa\x9b|\xfd-\u007f\xfdM\xbe\xfe&_\u007fK\x9d\x1c\x9e\xfa\xc7[>\x89[>\x89[\x97\x0f\xf2Syr\xdd\xf2\x99\xdcR>8U\xd7x\xa9\xae\xf1ڻ\xc6\xea\x1aO\xfd\x1c\x9e\xe5\x87ku\x8dm_b\xb3\x1c\x81U\xd7\xd4U\xd7\xeeR]\xbbk\xef\x9a\x0fO\xd5\xf5v\xa9\xae\xb7k\xefz\xab\xae\xb7S\xff\x9ao\xd8\xf5v\xaen\xf1R\xdd\xe2\xb5w\x8b\xd5-\x9e\xfa\xf9l\xf3õ\xba\xc56\x1f\x9c\xfa\xb7\xef\xf0\xff\x9b\xf7\xf1_\xb1U\xfc\xdfw\xff\xbc\xfe\xc7|\xfd\x1f\x9f\xe3߱~\xfeW\xff\x86\xff\xbe\xbf\xe1\xbf\xd5\x1e\xfe\xaf\xfc\r\xffs\xde\xe1?\xfev\xf8\x9f\xf1\xf3\xfa_\xe7\xeb\xdf;?\xe7\xdf\xcb\x0e\xff\xb5\u007f\x8f\u007f/9\xbe\xfe\xcf\xfe\xfa/\xf3\xf8\x8f\xbfy\x87\xff-\xc7\u05ff\xed\xe3\xdfp\x0f\xfe-\u007f\x8e\xff\x86\r\xed\u007f`\x83\x89\xef\xfc\x1f\xd8<\xfe\xdb_\xfc\xf9_\xd8\xe2\xe0\xa5\xd7\xff?\xfe\xbf\xfe?\x16\xff\xf3\u007f\xff\xfc\xdf?\xff\xf7\xcf\xff\xfd\xf3\u007f\xff\xfc\xdf\xff\x17\xff\xa7\xff䙎t&\x86\x11\xd2َt\xb6\x82\xf0\x17\xd2\xe9!\x9dב\xce\vׯ\x8a`\b\x03\xe1\x8b\xf0A\xc0\xd4\x1a҉k\x86O\xc1\xf5\x81\xd0RHg\t\xe9\xfc\r\xe9|?\xff\xad\xf5\x13҉\xb7\xc4#\x9d1\xfd (\xe2\x1d\xb1Ꮽ0\xfe\xe1\x05G\xb8\xf0\xf5\xc5iWe4\xc6\xc1\xf8e\xfc0\xf2=H5r\x86\xf1C9m06\xfc,\x11?b\xfcEx#\xe0g\x89\xf8Y\xe2_H\xfb<\xd2>\xd3\x0f\x82\xe2\xc0\v\r\u007fDb\xfbDb\xfbt\x84\v__\x9c\x86\xc4\xf6\x89\xc4\xf6\x89\xc4\xf6\x89\xc4\xf6\x89\xc4\xf6y\xf1=\x15\x813\x8c\x1f\xcai\x83\x11\x89\xed\xb3 \xfc\"\xbc\x11\xbe\b\x1f\x04\xbe=bbL\xff`|\x06\xbe96~ъ\x86?\xbe\xe6\x8c\x17_\xba4\xfb\xaa\x1aL\xc3\xd0\xf0\xd5\xf0Ѡ7\U000c725ag\xfa\x1e\x9a=44\xfȇ\xf7#\xfe2\xbe\x19\xf93G\xfe̸\x9b\xb1\x1f)\xf6\xf4\x83\xa08\xf0B\xc3\x1fq7c\xc7\u074c\xdd\x11.|}q\x1a\xeef츛\xb1\xe3nƎ\xbb\x19;\xeef\xec\x17\xdfS\x118\xc3\xf8\xa1\x9c6\x18q7c/\b\xbf\bo\x84/\xc2\a\xe1O\xff\xf9\x1e\x93\x12\xc3\b)\xb6#E\x88?B\xfc\xd1C\x8aב\"\xc4\x1f!\xfe\b\xf1G\x88?B\xfc\x11\xe2\x8f\x10\u007f\xac!E\\\x83\xf8#\xaeC\xfc\x11\xe2\x8f%\xa4\xf8\x1bR|?}\x83OH\x11\x8f2\xf6\x1f\x04<\x15\xdc\x18\r\x83\xaf5~\xc1G\x89\x9b\xc3ל\xf1\xe2K\x97f\xf3Q\xe2\x0ei\x18\x1a\xbe\x1a>\x1a\xf4\xe6ʨy\xa6\xef\xa1\xd9C\x03\x1fe\xec\x85\xf1\x97\xf1\xcd\xf8e\xfc0baD$\xce\xc9I\x11\x1aƊ\xdd\\\xb1\x9b+vc\xc5n\xac\xd8\xcd\x15\xbb\xb9b7W\xec\xe6\x8a\xdd\\\xb1\x9b+vs\xc5n\xac\xd8\x1d9\x83\v#r\x1a\x17\x06W\xecƊ\xddX\xb1\x1b+vc\xc5n\xac\xd8\x1d\xffԘIG\xea\x89a\x84\xd4ۑ:\x1eeǣ\xec\x1eR\xbf\x8e\xd4\xf1(;\x1eeǣ\xecx\x94\x1d\x8f\xb2\xe3Qv<\xca^C긆G\xd9q\x1d\x8f\xb2\xe3Q\xf6\x12R\xff\r\xa9\xbf\x9f\x8e\xd0'$ܕu\x1ei\xc1.\x16\xedb\xd1.\x16\xecb\xd1.\x16\xedb\xc1.\x16\xecb\xd1.\x16\xedb\xd1.\x16\xedb\xd1.\x16\xedb\xd1.\x16\xecb\x9d\x9ca\xfcPN\x1b\x8c\xb8+\vv\xb1`\x17\vv\xb1`\x17\vv\xb1N\xbe=b\"\xecb\xc9.\x96\xecb\xd1.\x96\xecb\xc9.\x16\xedb\xd1.\x96\xecb\xc9.\x96\xecb\xc9.\x96\xecb\xc9.\x96\xecb\xd1.\x16\xedb\xc9.\x16\xedb\xc9.\x96\xecb\xd1.\x16\xedb\xd1.\x16\xedb\xd1.\x16\xed\xa2\xc7#uh\xacSc\x9d\x1a\xeb\xd0X\xa7\xc6:5֡\xb1\x0e\x8duj\xacSc\x9d\x1a\xeb\xd4X\xa7\xc6:5֩\xb1\x0e\x8d\xf5\xc8\x19\xc6\x0f\xe5\xb4\xc1\x88\xbb١\xb1\x0e\x8duh\xacCc\x1d\x1a\xeb\xac\n\xfdH\x1b>\xb6\xe9c\x9b>\xb6\xe1c\x9b>\xb6\xe9c\x1b>\xb6\xe1c\x9b>\xb6\xe9c\x9b>\xb6\xe9c\x9b>\xb6\xe9c\x9b>\xb6\xe1c\xbbs\x06\xc5\xdf9\x8d⧏m\xf8؆\x8fm\xf8؆\x8fm\xf8؆\x8f͐f:\xd2L\f#\xa4َ4!\xfe\t\xf1O\x0fi^G\x9a\x10\xff\x84\xf8'\xc4?!\xfe\t\xf1O\x88\u007fB\xfc\xb3\x864q\r⟸\x0e\xf1O\x88\u007f\x96\x90\xe6oH\xf3\xfd4\xb6\xe8cK>\xb6\xe4c\x8b>\xb6\xe4cK>\xb6\xe8c\x8b>\xb6\xe4cK>\xb6\xe4cK>\xb6\xe4cK>\xb6\xe4c\x8b>\xb6\xe8cK>\xb6\xe8cK>\xb6\xe4c\x8b>\xb6\xe8c\x8b>\xb6\xe8c\x8b>\xb6\xe8c+\"qNN\x8aX\\\xd0آ\xc6\x165\xb6\xa0\xb1\x05\x8d-jlQc\x8b\x1a[\xd4آ\xc6\x165\xb6\xa8\xb1\x05\x8d\xad\xc8\x19\\\xb1\x91Ӹb\xa9\xb1\x05\x8d-hlAc\v\x1a[\xd0\u0602\xc6V>\xd2\xca\xf8^9)\xe232\x12\xcbL,3\xb1\x8c\xc42\x12\xcbL,3\xb1\xcc\xc42\x13\xcbL,3\xb1\xcc\xc42\x12˜\xc1\xc42\xa71\xb1\xcc\xc42\x12\xcbH,#\xb1\x8c\xc42\x12\xcb\x10\xff<Ҟ\xd0\xf3L\x8a\xd0\xe9\x84\xf8'\xc5?)\xfe\t\xf1O\x88\u007fR\xfc\x93\xe2\x9f\x14\xff\xa4\xf8'\xc5?)\xfeI\xf1O\x88\u007fr\x06\xc5?9\x8d\xe2\x9f\x14\xff\x84\xf8'\xc4?!\xfe\t\xf1O\x88\u007f\xa2\xf4\xce#E$\x16\x99Xdb\x11\x89E&\x16\x99XDb\x11\x89E&\x16\x99Xdb\x91\x89E&\x16\x99Xdb\x11\x89\xc5\xc9\x19\xdc]LN\xe3\ue089E$\x16\x91XDb\x11\x89E$\x16\x91\xd8\xceG\xdax\x94\x9b\x8fr\xf3Qn<\xca\xcdG\xb9\xf9(7\x1e\xe5ƣ\xdc|\x94\x9b\x8fr\xf3Qn>\xca\xcdG\xb9\xf9(7\x1f\xe5ƣܙ3x\xc72\xa7\xf1\x8e\xf1Qn<ʍG\xb9\xf1(7\x1e\xe5ƣ\xdc\xf9O\a!ґrb\x18!\xe5v\xa4\f\xbbȰ\x8b\xec!\xe5\xebH\x19v\x91a\x17\x19v\x91a\x17\x19v\x91a\x17\x19v\x91kH\x19\xd7`\x17\x19\xd7a\x17\x19v\x91KH\xf97\xa4\xfc~N`|B\x82\x8et\xf4 \xfd (\x0e\xbc\xd0\xf0Gܕ\xc4Z\x99P+\x13jeb\xadL\xac\x95\x89\xb52\xb1V&\xd6\xca\xc4Z\x99X+\x13je:9\xc3\xf8\xa1\x9c6\x18qW\x12jeB\xadL\xa8\x95\xcfq\b\x1e\x8c\xe0\xdb#&\xa2V&\xd5ʤZ\x99X+\x93jeR\xadL\xac\x95\x89\xb52\xa9V&\xd5ʤZ\x99T+\x93jeR\xadL\xaa\x95\x89\xb52\xb1V&\xd5\xca\xc4Z\x99T+\x93jeb\xadL\xac\x95\x89\xb52\xb1V&\xd6J\x80ʑ\xd2>\u007f\x10\xf0\xfd\xc1*\x1a\x06_k\xfc\x82I\x83W\xf8\x9a3^|\xe9\xd2l&\rh\xd104|5|4\xe8͕Q\xf3L\xdfC\xb3\x87\x06&\xbd\xcf\xc2\xf8\xcb\xf8f\xfc2~\x18\xf5Q\x91o\x88\xe9_5\xfc\xe7\xa8ωM_\xb6\xf2\x8c\u007fz\xd95\\z\xf5z\xdet\xd5g\xb4g\x1c\xcf\xf8}\xc6\xcf3>\x9f\xa2\x1f7>\xb3\xed\xf9\x96ϛ\xc636ݛ\xa8\x9b\x17\u007f5\xbc5\xe8\xdeD\xdd\x1b>\x05\x94\xc0\xc4\x12\x98T\x02\x93J`b\tL*\x81I%0\xb1\x04&\x96\xc0\xa4\x12\x98T\x02\x93J`R\tL*\x81I%0\xa9\x04&\x96\xc0\xc4\x12\x98T\x02\x13K`R\tL*\x81\x89%0\xb1\x04&\x96\xc0\xc4\x12\x98X\x02\x13K\xa0\x8e\xf1prRĚA\tL,\x81\x89%0\xa1\x04&\x94\xc0\xc4\x12\x98X\x02\x13K`b\tL,\x81\x89%0\xb1\x04&\x94\xc0\x149\x83\v1r\x1a\x17\"K`B\tL(\x81\t%\xf09Z\xc4CF\x94G\xec\xff`\xe4\x13\xc6\r}ơ\x97\x9b\xbe\x94\xbd\xe9ӛ>\xbd\xe9ӛ>\xbd\xe9ӛ>ͳ\x95\x98\xcc\xfdm\xe2\xfe6a\u007f\x9b\xb8\xbfM\xdc\xdf&\xeco\x13\xf6\xb7\x89\xfb\xdb\xc4\xfdm\xe2\xfe6q\u007f\x9b\xb8\xbfM\xdc\xdf&\xeeo\x13\xf6\xb7ir\x06\x17\xe2\xe44.D\xeeo\x13\xf6\xb7\t\xfbۄ\xfd\xedsޓ'?\xa9i\xfa\xf4\x92O\xafǧ\xd7\xe3\xd3K>\xbd\x1e\x9f^\x8fO/\xf9\xf4\x92O\xafǧ\xd7\xe3\xd3\xeb\xf1\xe9\xf5\xf8\xf4z|z=>\xbd\x1e\x9f^\xf2\xe9%\x9f^\x8fO/\xf9\xf4z|z=>\xbd\xe4\xd3K>\xbd\xe4\xd3K>\xbd\xe4\xd3K>\xbd\"\u007f*\xbd)=\x03W=5\xbd\xa4\xe9%M/jzQ\xd3K\x9a^\xd2\xf4\x92\xa6\x974\xbd\xa4\xe9%M/izQ\xd3+j\x9e\x9c%j\xb6\x9cE\x9a^\xd4\xf4\xa2\xa6\x175\xbd\xa8\xe9EM/jze\xfc1\xf3\xfb\xe7\xf4\f\xfc\xc0̤\xb3\x92\xceJ:3\xe9̤\xb3\x92\xceJ:+鬤\xb3\x92\xceJ:+\xe9̤\xb3\xe6)\xe9\xac\xd9J:+\xe9̤3\x93\xceL:3\xe9̤3\x17ℼ'\xd7\xd4L\xcf\xc0E2\xb9\x10\xa7\x16\xe2\xd4B\x9c\\\x88\x93\vqj!N-ĩ\x858\xb5\x10\xa7\x16\xe2\xd4B\x9cZ\x88\x93\vqj\x9e\x16\xe2\xd4l-ĩ\x858\xb9\x10'\x17\xe2\xe4B\x9c\\\x88<ռ'\xb75H:2騤\xa3\x92\x8eL:*騤#\x93\x8eL:*騤\xa3\x92\x8eJ:*騤\xa3\x92\x8eL:N\xcd\xd3.oj\xb6vyJ:2\xe9Ȥ#\x93\x8eL:2\xe9Ȥ7\xe4\xb1)\x8f-yl\xc9cS\x1e[\xf2ؒǦ<6\xe5\xb1%\x8f-yl\xc9cK\x1e[\xf2ؒǖ<6屳\xe6\xe9Ng\xcd֝\x96<6\xe5\xb1)\x8fMyl\xcacS\x1e\x9b\x8c\x98\x8f\x94@Ή\xe4\x9cH\xce\t\xe4\x9cHΉ\xe4\x9c@\xce\t\xe4\x9cHΉ\xe4\x9cHΉ\xe4\x9cHΉ\xe4\x9cH\xce\t\xe4\x9c2g\xd0\xf22\xa7\xd1\xf2H\xce\t\xe4\x9c@\xce\t\xe4\xfc\x9c\xa8\x87\xe5\xe5?\xfd\xfd\x8dt\xb431\x8c\xd0\xcev\xb4\xb3\x15\x84\xbf\xd0N\x0f\xed\xbc\x8ev^\xb8~U\x04C\x18\b_\x84\x0f\x02\xa6\xd6\xd0N\\3|\n\xae\x0f\x84\x96B;Kh\xe7oh\xe7;\xb4\xf3\x1b\xda\xf9\t\xed\xc4[\xe2\xd1Θ~\x1a\xbbe\x8dݲvƆ?\xb6\xc2\xf8\x87\x17\x1c\xe1\xc2\xd7\x17\xa7]\x95\xd1\x18\a\xe3\x97\xf1\xc3\xc8\xf7 \xd5\xc8\x19\xc6\x0f\xe5\xb4\xc1\xd8\xf0\xb3D\xfc\x88\xf1\x17ፀ\x9f%\xe2g\x89\u007f\xa1\xed\xf3h\xfbL?\x8dݲ\xc6nY\xdbg\xc3\x1f\x91\x18\xbbem\x9f\x8ep\xe1\xeb\x8bӐ\x18\xbbe\x8dݲ\xc6nYc\xb7\xac\xb1[\xd6\xf6Y\x118\xc3\xf8\xa1\x9c6\x18\x91\xd8>\v\xc2/\xc2\x1b\xe1\x8b\xf0A\xe0\xdb#&\xc6\xf4\x8f\xa6nYS\xb7\xac\xb1[\xd6\xd4-k\xea\x965v\xcb\x1a\xbbeMݲ\xa6nYS\xb7\xac\xa9[\xd6\xd4-k\xea\x965u\xcb\x1a\xbbe\x8dݲ\xa6nYc\xb7\xac\xa9[\xd6\xd4-k\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac\xc5~\xb4\xd8\xd3Oc\xb7\xac\xb1[\xd6bo\xf8#\xee&\xbbe-vG\xb8\xf0\xf5\xc5i\xb8\x9b\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nY\x8b\xbd\"p\x86\xf1C9m0\xe2n\xc6^\x10~\x11\xde\b_\x84\x0f\u009f\xfeR\x12&%\x86\x11ZlG\x8b\x10\u007f\x84\xf8\xa3\x87\x16\xaf\xa3E\x88?B\xfc\x11\xe2\x8f\x10\u007f\x84\xf8#\xc4\x1f!\xfeXC\x8b\xb8\x06\xf1G\\\x87\xf8#\xc4\x1fKh\xf17\xb4\xf8\x0e-~\xf5נ\"\x1ee\xec?\x8dݲ\xa6nYS\xb7\xac\xb1[\xd6\xd4-k\xea\x965v\xcb\x1a\xbbeMݲ\xa6nYS\xb7\xac\xa9[\xd6\xd4-k\xea\x965u\xcb\x1a\xbbe\x8dݲ\xa6nYc\xb7\xac\xa9[\xd6\xd4-k\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac\xed\x88\xc499)B\xc3X\xb1\xec\x965v\xcb\xdaƊ\xddX\xb1\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac\xb1[\xd66V쎜\xc1\x85\x119\x8d\v\x83+vc\xc5n\xac؍\x15\xbb\xb1b7V\xec\x8e\u007f\xfa\xabf\xe9h=1\x8c\xd0z;Zǣ\xecx\x94\xddC\xeb\xd7\xd1:\x1eeǣ\xecx\x94\x1d\x8f\xb2\xe3Qv<ʎG\xd9kh\x1d\xd7\xf0(;\xae\xe3Qv<\xca^B뿡\xf5\xf7\xf3w\xdc>\xa1ᮬ\xf3h\vv\xc1nYc\xb7\xac-\xd8\x05\xbbe\x8dݲ\xb6`\x17\vv\xc1nYc\xb7\xac\xb1[\xd6\xd8-k\xec\x965v\xcb\x1a\xbbem\xc1.\xd6\xc9\x19\xc6\x0f\xe5\xb4\xc1\x88\xbb\xb2`\x17\vv\xb1`\x17\vv\xb1`\x17\xeb\xe4\xdb#&\xc2.\xd4-k\xea\x965v˚\xbaeMݲ\xc6nYc\xb7\xac\xa9[\xd6\xd4-k\xea\x965u˚\xbaeMݲ\xa6nYc\xb7\xac\xb1[\xd6\xd4-k\xec\x965u˚\xbae\x8dݲ\xc6nYc\xb7\xac\xb1[\xd6\xd8-k억\x1e\x8f֡1v\xcb\x1a\xbbe\xadCc\xec\x965v\xcbZ\x87\xc6:4\xc6nYc\xb7\xac\xb1[\xd6\xd8-k\xec\x965v\xcb\x1a\xbbe\xadCc=r\x86\xf1C9m0\xe2nvh\xacCc\x1d\x1a\xeb\xd0X\x87\xc6:\xab\x02O\x02C\xcf\xf41v\xcbچ\x8f\xb1[\xd6\xd8-k\x1b>\xb6\xe1c\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac\xb1[\xd66|lwΠ\xf8;\xa7Q\xfc\xf4\xb1\r\x1f\xdb\xf0\xb1\r\x1f{N'\xf3\x9c\xf2\x9f\xfe6e:\xdaL\f#\xb4َ6!\xfe\t\xf1O\x0fm^G\x9b\x10\xff\x84\xf8'\xc4?!\xfe\t\xf1O\x88\u007fB\xfc\xb3\x866q\r⟸\x0e\xf1O\x88\u007f\x96\xd0\xe6oh\xf3\xfd\xfc5\xceOh\x13\x1a\x83\x8f\xb1[\xd6\xd4-k\xea\x965v˚\xbaeMݲ\xc6nYc\xb7\xac\xa9[\xd6\xd4-k\xea\x965u˚\xbaeMݲ\xa6nYc\xb7\xac\xb1[\xd6\xd4-k\xec\x965u˚\xbae\x8dݲ\xc6nYc\xb7\xac\xb1[\xd6\xd8-k억\x15\x918''E,.h\x8cݲ\xc6nY[\xd0\u0602\xc6\xd8-k\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac-hlE\xce\xe0\x8a\x8d\x9c\xc6\x15K\x8d-hlAc\v\x1a[\xd0\u0602\xc6\x164\xb6\xf2\xd1V\xc6\xf7\xcaI\x11\x9f\x91\x91Xfb\x99\x89e$\x96\x91Xfb\x99\x89e&\x96\x99Xfb\x99\x89e&\x96\x91X\xe6\f&\x969\x8d\x89e&\x96\x91XFb\x19\x89e$\x96\x91X\xfe\xfb\xcf3\xef\xd0\xf3L\x8a\xd0\xe9\x84\xf8'\xc5?)\xfe\t\xf1O\x88\u007fR\xfc\x93\xe2\x9f\x14\xff\xa4\xf8'\xc5?)\xfeI\xf1O\x88\u007fr\x06\xc5?9\x8d\xe2\x9f\x14\xff\x84\xf8'\xc4?\xdf\xff\xcf9|\x9e\xc8G\xe9\x9dG\x8bH\x8cݲ\xc6nY\x8bH\x8cݲ\xc6nY\x8bH,\"1v\xcb\x1a\xbbe\x8dݲ\xc6nYc\xb7\xac\xb1[\xd6\xd8-k\x11\x89\xc5\xc9\x19\xdc]LN\xe3\ue089E$\x16\x91XDb\x11\x89E$\x16\x91\x98\xfe\xce\x01n\x02\x1f%\xbbem\xe3Q\xb2[\xd6\xd8-k\x1b\x8fr\xe3Q\xb2[\xd6\xd8-k\xec\x965v\xcb\x1a\xbbe\x8dݲ\xc6nY\xdbx\x94;s\x06\xefX\xe64\xde1>ʍG\xb9\xf1(7\x1e\xe5\xf3\xf7 pǰ\xe7ϡ\xe5t\xb4\x9c\x18Fh\xb9\x1d-\xc3.2\xec\"{h\xf9:Z\x86]d\xd8E\x86]d\xd8E\x86]d\xd8E\x86]\xe4\x1aZ\xc65\xd8E\xc6u\xd8E\x86]\xe4\x12Z\xfe\r-\xbf\x9f\xbfE\xfe\t-\xff\xe9\xb7\f\xa4\xc3\x01\x1c\x0e\xe0\xf0\xb3\x1d\x0e\xe0p\x00\x87\x9f\x1e\xfc\xbc\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1g\r~\xe2\x9a\xe1Sp} \xb4\x14\xfc,\xc1\xcf\xdf\xe0\xe7\xfb\xf9\xf5\x06\x9f\xe0'\xde\x12\x0f\ap8\x81\xc3\t\x1c\x0e\xe0p\x02\x87\x138\x1c\xc0\xe1\x00\x0e'p8\x81\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x81\xc3\x01\x1cN\xe0p\x02\x87\x038\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3Q\xf3|\x9f\x87\x038\x9c\xc0\xe1\x04\x0e\ap8\x81\xc3\t\x1c\x0e\xe0p\x00\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1cN\xe0p\x00\x87\x038\x9c\xc0\xe1\x00\x0e'p8\x81\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1\x00\x0e\ap8\x81\xc3\x05\x1c.\xe0p\x02\x87\v8\\\xc0\xe1\x04\x0e'p\xb8\x80\xc3\x05\x1c.\xe0p\x01\x87\v8\\\xc0\xe1\x02\x0e'p8\x81\xc3\x05\x1cN\xe0p\x01\x87\v8\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1cN\xe0\xf0\xd8\x0f\ap8\x81\xc3\t\x1c\x0e\xe0p\x02\x87\x138\x1c\xc0\xe1\x00\x0e'p8\x81\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x81\xc3\x01\x1cN\xe0p\x02\x87\x038\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\xfc\xfd\x19\x98\x94\x18F\xf0\xd8\x0e\ap8\x80ã\a\x8f\xd7\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x038<\xd6\xe0\x11\xd7 \xfe\x88\xeb\x10?\x80\xc3c\t\x1e\u007f\x83\xc7w\xf0\xf8\xd5o\xec\x88x\x94\xb1\xff8\x81\xc3\x05\x1c.\xe0p\x02\x87\v8\\\xc0\xe1\x04\x0e'p\xb8\x80\xc3\x05\x1c.\xe0p\x01\x87\v8\\\xc0\xe1\x02\x0e'p8\x81\xc3\x05\x1cN\xe0p\x01\x87\v8\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1cN\xe0\xf0\x1d\x918''Eh\x18+\x96\xc0\xe1\x04\x0e\ap8\x80\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1cN\xe0p\x00\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\a\u007f+J:\x1c\xc0\xe1\x00\x0e\xef\xedp\x00\x87\x038\xbc{\xf0~\x1d\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3{\r\xdeq\r\x8f\xb2\xe3:\x1e%\x80\xc3{\t\xde\u007f\x83\xf7\xf7\xf3\xebX>\xc1qW\xd6y8\x80\xc3\t\x1cN\xe0p\x00\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x81\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e\ap8\x80\xc3\t\x1c\x0e\xe0p\x02\x87\x138\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x138\\\xc0\xe1\x02\x0e'p\xb8\x80\xc3\x05\x1cN\xe0p\x02\x87\v8\\\xc0\xe1\x02\x0e\x17p\xb8\x80\xc3\x05\x1c.\xe0p\x02\x87\x138\\\xc0\xe1\x04\x0e\x17p\xb8\x80\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e\xef\xf1p\x00\x87\x138\x9c\xc0\xe1\x00\x0e'p8\x81\xc3\x01\x1c\x0e\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1c\x0e\xe0p\x00\x87\x138\x1c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\xbc\xb3*\xf4\xc3\x01\x1cN\xe0p\x02\x87\x038\x9c\xc0\xe1\x04\x0e\ap8\x80\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1cN\xe0p\x00\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\a\u007f\xf1O:\x1c\xc0\xe1\x00\x0e\x9f\xedp\x00\x87\x038|z\xf0y\x1d\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3g\r>q\r⟸\x0e\xf1\x038|\x96\xe0\xf37\xf8|?\xbfq\xe8\x13|Bc\xf01\x02\x87\v8\\\xc0\xe1\x04\x0e\x17p\xb8\x80\xc3\t\x1cN\xe0p\x01\x87\v8\\\xc0\xe1\x02\x0e\x17p\xb8\x80\xc3\x05\x1cN\xe0p\x02\x87\v8\x9c\xc0\xe1\x02\x0e\x17p8\x81\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1+\"qNN\x8aX\\\xd0\x18\x81\xc3\t\x1c\x0e\xe0p\x00\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1cN\xe0p\x00\x87\x038\x9c\xc0\xe1\x00\x0e'p8\x81\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1\x00\x0e_\xf9p\x00\x87\x138\x9c\xc0\xe1\x00\x0e'p8\x81\xc3\x01\x1c\x0e\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\t\x1c\x0e\xe0p\x00\x87\x138\x1c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1{\x1e\x0e\xe0p\x02\x87\x138\x1c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x81\xc3\x01\x1c\x0e\xe0p\x02\x87\x038\x9c\xc0\xe1\x04\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\x038<\xce\xc3\x01\x1cN\xe0p\x02\x87\x038\x9c\xc0\xe1\x04\x0e\ap8\x80\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e'p8\x80\xc3\x01\x1cN\xe0p\x00\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0p\x00\x87\xef|8\x80\xc3\t\x1cN\xe0p\x00\x87\x138\x9c\xc0\xe1\x00\x0e\ap8\x81\xc3\t\x1cN\xe0p\x02\x87\x138\x9c\xc0\xe1\x04\x0e\ap8\x80\xc3\t\x1c\x0e\xe0p\x02\x87\x138\x1c\xc0\xe1\x00\x0e\ap8\x80\xc3\x01\x1c\x0e\xe0\xe0\xaf\x1dK\x87\x038\x1c\xc0\xe1\xb9\x1d\x0e\xe0p\x00\x87g\x0f\x9e\xaf\xc3\x01\x1c\x0e\xe0p\x00\x87\x038\x1c\xc0\xe1\x00\x0e\apx\xae\xc13\xae\xc1.2\xae\xc3.\x00\x1c\x9eK\xf0\xfc\x1b<\xbf\x9f\xdfw\xf6\t\x0e\x1d\xe9\xb7~\xa5\x1f\x04Ł\x17\x1a\xfe\x88\xbb⬕\x8eZ騕\xceZ鬕\xceZ鬕\xceZ鬕\xceZ騕~r\x86\xf1C9m0\xe2\xae8j\xa5\xa3V:j\xe5\xf3\x9b\xc8\xf8;\xc9\xf8\xf6\x88\x89\xa8\x95\xaeZ骕\xceZ骕\xaeZ鬕\xceZ骕\xaeZ骕\xaeZ骕\xaeZ骕\xceZ鬕\xaeZ鬕\xaeZ骕\xceZ鬕\xceZ鬕\xceZ\tP9\xdc\xf7\xf9\x83\x80\xef\xcf\xe3y\x1c\x06_k\xfc\x82I\xf3x\x1e\x06g\xbc\xf8ҥ\xd9L\x9a\xc7\xf38\f\r_\r\x1f\rzse\xd4<\xd3\xf7\xd0졁I\xef\xb30\xfe2\xbe\x19\xbf\x8c\x1fF}T\xe4\x1bb\xfaW\r\xff9\xeasbӗ\xad<\xe3\x9f^v\r\x97^\xbd\x9e7]\xf5\x19\xed\x19\xc73~\x9f\xf1\xf3\x8cϧ\xe8Ǎ\xcfl{\xbe\xe5\xf3\xa6\xf1\x8cM\xf7&\xea\xe6\xc5_\ro\r\xba7Q\xf7\x86O\x01%\xd0Y\x02]%\xd0U\x02\x9d%\xd0U\x02]%\xd0Y\x02\x9d%\xd0U\x02]%\xd0U\x02]%\xd0U\x02]%\xd0U\x02\x9d%\xd0Y\x02]%\xd0Y\x02]%\xd0U\x02\x9d%\xd0Y\x02\x9d%\xd0Y\x02\x9d%\xd0Y\x02\xf5\xcb\xf489)b͠\x04:K\xa0\xb3\x04:J\xa0\xa3\x04:K\xa0\xb3\x04:K\xa0\xb3\x04:K\xa0\xb3\x04:K\xa0\xa3\x04z\xe4\f.\xc4\xc8i\\\x88,\x81\x8e\x12\xe8(\x81\x8e\x12\xe8(\x81\xfa\xbd~\x91\xf2\x88\xfd\x1f\x8c|\xc2<\xf6\xa1q\xe8\xe5\xa6/%\x0f\x1e\xfb\xe0\xe8\x1a.\xbdz=o\x92\xbd\x1e\x9f^\xf2\xe9\xf5\xf8\xf4z|zɧ\x97|z=>\xbd\x1e\x9f^\x8fO\xafǧ\xd7\xe3\xd3\xeb\xf1\xe9\xf5\xf8\xf4\x92O/\xf9\xf4z|zɧ\xd7\xe3\xd3\xeb\xf1\xe9%\x9f^\xf2\xe9%\x9f^\xf2\xe9%\x9f^\xf2\xe9\x15\xf9S\xe9M\xe9\x19\xb8\xea\xa9\xe9%M/izQӋ\x9a^\xd2\xf4\x92\xa6\x974\xbd\xa4\xe9%M/izIӋ\x9a^Q\xf3\xe4,Q\xb3\xe5,\xd2\xf4\xa2\xa6\x175\xbd\xa8\xe9EM/jzQ\xd3+㏙\xdf?\xa7g\xe0\af&\x9d\x95tVҙIg&\x9d\x95tV\xd2YIg%\x9d\x95tV\xd2YIg&\x9d5OIg\xcdV\xd2YIg&\x9d\x99tfҙI\xf3\xf7\x01\xaf̅8!\xef\xc955\xd33p\x91L.ĩ\x858\xb5\x10'\x17\xe2\xe4B\x9cZ\x88S\vqj!N-ĩ\x858\xb5\x10\xa7\x16\xe2\xe4B\x9c\x9a\xa7\x8585[\vqj!N.\xc4Ʌ8\xb9\x10'\x17\"\u007f\xb7\xf0\x9e\xdc\xd6 \xe9Ȥ\xa3\x92\x8eJ:2騤\xa3\x92\x8eL:2騤\xa3\x92\x8eJ:*騤\xa3\x92\x8eJ:2\xe985O\xbb\xbc\xa9\xd9\xda\xe5)\xe9Ȥ#\x93\x8eL:2\xe9Ȥ#\x93ސǦ<\xb6\xe4\xb1%\x8fMyl\xc9cK\x1e\x9b\xf2ؔǖ<\xb6\xe4\xb1%\x8f-yl\xc9cK\x1e[\xf2ؔ\xc7Κ\xa7;\x9d5[wZ\xf2ؔǦ<6\xe5\xb1)\x8fMyl2\"\u007f{4&\x93\x9c\x9d\xe4\xec g'9;\xc9\xd9A\xce\x0erv\x92\xb3\x93\x9c\x9d\xe4\xec$g'9;\xc9\xd9I\xce\x0er\xf6\xcc\x19\xb4\xbc\xcci\xb4<\x92\xb3\x83\x9c\x1d\xe4\xec \xe7\xe77Z\xc3\xf2\xf2\x9f~\r^:\xee31\x8cp\x9f\xed\xb8\xcfV\x10\xfe\xc2}z\xb8\xcf\xeb\xb8\xcf\vׯ\x8a`\b\x03\xe1\x8b\xf0A\xc0\xd4\x1a\xee\x13\xd7\f\x9f\x82\xeb\x03\xa1\xa5p\x9f%\xdc\xe7o\xb8\xcf\xf7\xf3\xfb\xf7>\xe1>\xf1\x96x\xdcgL?7\xbbe7\xbbe\xf7\x19\x1b\xfe\xd8\n\xe3\x1f^p\x84\v__\x9cvUFc\x1c\x8c_\xc6\x0f#߃T#g\x18?\x94\xd3\x06c\xc3\xcf\x12\xf1#\xc6_\x847\x02~\x96\x88\x9f%\xfe\x85{\x9fǽ\xcf\xf4s\xb3[v\xb3[v\xef\xb3\xe1\x8fH\x8cݲ{\x9f\x8ep\xe1\xeb\x8bӐ\x18\xbbe7\xbbe7\xbbe7\xbbe7\xbbe\xf7>+\x02g\x18?\x94\xd3\x06#\x12\xdbgA\xf8Ex#|\x11>\b|{\xc4Ę\xfeq\xab[v\xab[v\xb3[v\xab[v\xab[v\xb3[v\xb3[v\xab[v\xab[v\xab[v\xab[v\xab[v\xab[v\xab[v\xb3[v\xb3[v\xab[v\xb3[v\xab[v\xab[v\xb3[v\xb3[v\xb3[v\xb3[v\xb3[v\xb3[v\xc7~ܱ\xa7\x9f\x9bݲ\x9bݲ;\xf6\x86?\xe2n\xb2[v\xc7\xee\b\x17\xbe\xbe8\rw\x93ݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ;\xf6\x8a\xc0\x19\xc6\x0f\xe5\xb4\xc1\x88\xbb\x19{A\xf8Ex#|\x11>\b\u007f\xfaݎ\x98\x94\x18F\xb8c;\xee\b\xf1G\x88?z\xb8\xe3u\xdc\x11\xe2\x8f\x10\u007f\x84\xf8#\xc4\x1f!\xfe\b\xf1G\x88?\xd6pG\\\x83\xf8#\xaeC\xfc\x11\xe2\x8f%\xdc\xf17\xdc\xf1\x1d\xee\xf8\xd5o\x93\x8cx\x94\xb1\xff\xdc\xec\x96\xdd\xea\x96\xdd\xea\x96\xdd\xec\x96\xdd\xea\x96\xdd\xea\x96\xdd\xec\x96\xdd\xec\x96\xdd\xea\x96\xdd\xea\x96\xdd\xea\x96\xdd\xea\x96\xdd\xea\x96\xdd\xea\x96\xdd\xea\x96\xdd\xec\x96\xdd\xec\x96\xdd\xea\x96\xdd\xec\x96\xdd\xea\x96\xdd\xea\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd;\"qNN\x8a\xd00V,\xbbe7\xbbe\xf7Ɗ\xddX\xb1\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\xec\x96\xdd\x1b+vG\xce\xe0\u0088\x9cƅ\xc1\x15\xbb\xb1b7V\xecƊ\xddX\xb1\x1b+v\xc7?\xfd\xc6\xcet\xdc=1\x8cp\xf7v\xdc\x1d\x8f\xb2\xe3Qv\x0fw\xbf\x8e\xbb\xe3Qv<ʎG\xd9\xf1(;\x1eeǣ\xecx\x94\xbd\x86\xbb\xe3\x1a\x1ee\xc7u<ʎG\xd9K\xb8\xfbo\xb8\xfb\xfb\xf9U\xa1\x9fp㮬\xf3\xb8\x17\xec\x82ݲ\x9bݲ{\xc1.\xd8-\xbb\xd9-\xbb\x17\xecb\xc1.\xd8-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\x17\xecb\x9d\x9ca\xfcPN\x1b\x8c\xb8+\vv\xb1`\x17\vv\xb1`\x17\vv\xb1N\xbe=b\"\xecBݲ[ݲ\x9bݲ[ݲ[ݲ\x9bݲ\x9bݲ[ݲ[ݲ[ݲ[ݲ[ݲ[ݲ[ݲ\x9bݲ\x9bݲ[ݲ\x9bݲ[ݲ[ݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ\xbb\xc7\xe3\xee\xd0\x18\xbbe7\xbbew\x87\xc6\xd8-\xbb\xd9-\xbb;4֡1v\xcbnv\xcbnv\xcbnv\xcbnv\xcbnv\xcbnv\xcb\xee\x0e\x8d\xf5\xc8\x19\xc6\x0f\xe5\xb4\xc1\x88\xbb١\xb1\x0e\x8duh\xacCc\x1d\x1a\xeb\xac\n\xfd\xb87|\x8cݲ\x9bݲ{\xc3\xc7\xd8-\xbb\xd9-\xbb7|l\xc3\xc7\xd8-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb7|lwΠ\xf8;\xa7Q\xfc\xf4\xb1\r\x1f\xdb\xf0\xb1\r\x1f\xdb\xf0\xb1\r\x1f\xdb\xf0\xb1\x19\ue64e{&\x86\x11\xeeَ{B\xfc\x13\xe2\x9f\x1e\xeey\x1d\xf7\x84\xf8'\xc4?!\xfe\t\xf1O\x88\u007fB\xfc\x13\xe2\x9f5\xdc\x13\xd7 \xfe\x89\xeb\x10\xff\x84\xf8g\t\xf7\xfc\r\xf7|?\xbf\r\xf7\x13\xee\t\x8d\xc1\xc7\xd8-\xbb\xd5-\xbb\xd5-\xbb\xd9-\xbb\xd5-\xbb\xd5-\xbb\xd9-\xbb\xd9-\xbb\xd5-\xbb\xd5-\xbb\xd5-\xbb\xd5-\xbb\xd5-\xbb\xd5-\xbb\xd5-\xbb\xd9-\xbb\xd9-\xbb\xd5-\xbb\xd9-\xbb\xd5-\xbb\xd5-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbb\xd9-\xbbWD✜\x14\xb1\xb8\xa01v\xcbnv\xcb\xee\x05\x8d-h\x8cݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ\x9bݲ{Ac+r\x06Wl\xe44\xaeXjlAc\v\x1a[\xd0\u0602\xc6\x164\xb6\xa0\xb1\x95\x8f{e|\xaf\x9c\x14\xf1\x19\x19\x89e&\x96\x99XFb\x19\x89e&\x96\x99Xfb\x99\x89e&\x96\x99Xfb\x19\x89e\xce`b\x99ӘXfb\x19\x89e$\x96\x91XFb\x19\x89e\x88\u007f\x1e\xf7\x9e\xd0\xf3L\x8a\xd0\xe9\x84\xf8'\xc5?)\xfe\t\xf1O\x88\u007fR\xfc\x93\xe2\x9f\x14\xff\xa4\xf8'\xc5?)\xfeI\xf1O\x88\u007fr\x06\xc5?9\x8d\xe2\x9f\x14\xff\x84\xf8'\xc4?!\xfe\t\xf1O\x88\u007f\xa2\xf4\xce\xe3\x8eH\x8cݲ\x9bݲ;\"1v\xcbnv\xcb\xee\x88\xc4\"\x12c\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xec\x8eH,N\xce\xe0\xeebr\x1aw\x17L,\"\xb1\x88\xc4\"\x12\x8bH,\"\xb1\x88\xc4v>\xee\x8dG\xc9n\xd9\xcdnٽ\xf1(\xd9-\xbb\xd9-\xbb7\x1e\xe5ƣd\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xecf\xb7\xec\xdex\x94;s\x06\xefX\xe64\xde1>ʍG\xb9\xf1(7\x1e\xe5ƣ\xdcx\x94\x1b{\xfe\x1c\ue70e;'\x86\x11\xee\u070e;\xc3.2\xec\"{\xb8\xf3u\xdc\x19v\x91a\x17\x19v\x91a\x17\x19v\x91a\x17\x19v\x91k\xb83\xae\xc1.2\xae\xc3.2\xec\"\x97p\xe7\xdfp\xe7w\xb8\xf37\xdc\xf9\x13\xee\xfc\xa7\u007fH)\x1d\x15\xc0Q\x01\x1c\xf5lG\x05pT\x00G==\xd4\xf3:*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3\x9e5\xd4\x13\xd7\f\x9f\x82\xeb\x03\xa1\xa5P\xcf\x12\xea\xf9\x1b\xea\xf9~\xfe\x05\xa7O\xa8'\xde\x12\x8f\n\xe0\xa8\x04\x8eJ\xe0\xa8\x00\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x00\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x00\x8e\n\xe0\xa8\x04\x8e\n\xe0\xa8\x04\x8eJ\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\x8a\x9aW\xf7yT\x00G%pT\x02G\x05pT\x02G%pT\x00G\x05pT\x02G%pT\x02G%pT\x02G%pT\x02G\x05pT\x00G%pT\x00G%pT\x02G\x05pT\x00G\x05pT\x00G\x05pT\x00G\x05pT\x02G\x15pT\x01G%pT\x01G\x15pT\x02G%pT\x01G\x15pT\x01G\x15pT\x01G\x15pT\x01G%pT\x02G\x15pT\x02G\x15pT\x01G%pT\x02G%pT\x02G%pT\x02G\x8d\xfd\xa8\x00\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x04\x8eJ\xe0\xa8\x00\x8e\n\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x00\x8eJ\xe0\xa8\x00\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\x1aC\x8d\x98\x94\x18F\xa8\xb1\x1d\x15\xc0Q\x01\x1c5z\xa8\xf1:*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3\xc6\x1aj\xc45\x88?\xe2:\xc4\x0f\u0a31\x84\x1a\u007fC\x8d\xefP\xe37\xd4\xf8\t5\xe2Q\xc6\xfeS\t\x1cU\xc0Q\x05\x1c\x95\xc0Q\x05\x1cU\xc0Q\t\x1c\x95\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1c\x95\xc0Q\t\x1cU\xc0Q\t\x1cU\xc0Q\x05\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1cuG$\xce\xc9I\x11\x1aƊ%pT\x02G\x05pT\x00G%pT\x02G%pT\x02G%pT\x02G%pT\x00G\x05pT\x02G\x05pT\x02G%pT\x00G\x05pT\x00G\x05pT\x00G\x05p\xf0\x9f{KG\x05pT\x00G\xed\xed\xa8\x00\x8e\n\xe0\xa8\xddC\xed\xd7Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\xb5\xd7P;\xae\xe1Qv\\ǣ\x04p\xd4^B\xed\xbf\xa1\xf6\xf7\xf3\xef\xcc}B\xc5]Y\xe7Q\x01\x1c\x95\xc0Q\t\x1c\x15\xc0Q\t\x1c\x95\xc0Q\x01\x1c\x15\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x15\xc0Q\x01\x1c\x95\xc0Q\x01\x1c\x95\xc0Q\t\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\t\x1cU\xc0Q\x05\x1c\x95\xc0Q\x05\x1cU\xc0Q\t\x1c\x95\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1c\x95\xc0Q\t\x1cU\xc0Q\t\x1cU\xc0Q\x05\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\xb5ǣ\x028*\x81\xa3\x128*\x80\xa3\x128*\x81\xa3\x028*\x80\xa3\x128*\x81\xa3\x128*\x81\xa3\x128*\x81\xa3\x128*\x80\xa3\x028*\x81\xa3\x028*\x81\xa3\x128*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3vV\x85~T\x00G%pT\x02G\x05pT\x02G%pT\x00G\x05pT\x02G%pT\x02G%pT\x02G%pT\x02G\x05pT\x00G%pT\x00G%pT\x02G\x05pT\x00G\x05pT\x00G\x05pT\x00\a\xffU\xc3tT\x00G\x05p\xd4َ\n\xe0\xa8\x00\x8e:=\xd4y\x1d\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Qg\ru\xe2\x1a\xc4?q\x1d\xe2\ap\xd4YB\x9d\xbf\xa1\xce\xf7\xf3\xcf)~B\x9d\xd0\x18|\x8c\xc0Q\x05\x1cU\xc0Q\t\x1cU\xc0Q\x05\x1c\x95\xc0Q\t\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\x05\x1cU\xc0Q\t\x1c\x95\xc0Q\x05\x1c\x95\xc0Q\x05\x1cU\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0QWD✜\x14\xb1\xb8\xa01\x02G%pT\x00G\x05pT\x02G%pT\x02G%pT\x02G%pT\x02G\x05pT\x00G%pT\x00G%pT\x02G\x05pT\x00G\x05pT\x00G\x05pT\x00G]\xf9\xa8\x00\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x04\x8eJ\xe0\xa8\x00\x8e\n\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x00\x8eJ\xe0\xa8\x00\x8eJ\xe0\xa8\x04\x8e\n\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\n\xe0\xa8\x00\x8e\xba\xe7Q\x01\x1c\x95\xc0Q\t\x1c\x15\xc0Q\t\x1c\x95\xc0Q\x01\x1c\x15\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x95\xc0Q\t\x1c\x15\xc0Q\x01\x1c\x95\xc0Q\x01\x1c\x95\xc0Q\t\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c5Σ\x028*\x81\xa3\x128*\x80\xa3\x128*\x81\xa3\x028*\x80\xa3\x128*\x81\xa3\x128*\x81\xa3\x128*\x81\xa3\x128*\x80\xa3\x028*\x81\xa3\x028*\x81\xa3\x128*\x80\xa3\x028*\x80\xa3\x028*\x80\xa3\x028\xea\xceG\x05pT\x02G%pT\x00G%pT\x02G\x05pT\x00G%pT\x02G%pT\x02G%pT\x02G%pT\x00G\x05pT\x02G\x05pT\x02G%pT\x00G\x05pT\x00G\x05pT\x00G\x05p\xf0_VMG\x05pT\x00G\xcd\xed\xa8\x00\x8e\n\xe0\xa8\xd9C\xcd\xd7Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c\x15\xc0Q\x01\x1c5\xd7P3\xae\xc1.2\xae\xc3.\x00\x1c5\x97P\xf3o\xa8\xf9\xfd\xfc\x93\xae\x9fP\xf3\x9f\xfe\xb9\xe1t\x18\x80\xc3\x00\x1cv\xb6\xc3\x00\x1c\x06\xe0\xb0Ӄ\x9d\xd7a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x06\xe00\x00\x87\x018\xec\xac\xc1N\\3|\n\xae\x0f\x84\x96\x82\x9d%\xd8\xf9\x1b\xec|?\xff\xce\xf1'؉\xb7\xc4\xc3\x00\x1cF\xe00\x02\x87\x018\x8c\xc0a\x04\x0e\x03p\x18\x80\xc3\b\x1cF\xe00\x02\x87\x118\x8c\xc0a\x04\x0e#p\x18\x80\xc3\x00\x1cF\xe00\x00\x87\x118\x8c\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x06\xe00\xd4<\xdb\xe7a\x00\x0e#p\x18\x81\xc3\x00\x1cF\xe00\x02\x87\x018\f\xc0a\x04\x0e#p\x18\x81\xc3\b\x1cF\xe00\x02\x87\x118\f\xc0a\x00\x0e#p\x18\x80\xc3\b\x1cF\xe00\x00\x87\x018\f\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1cF\xe00\x01\x87\t8\x8c\xc0a\x02\x0e\x13p\x18\x81\xc3\b\x1c&\xe00\x01\x87\t8L\xc0a\x02\x0e\x13p\x98\x80\xc3\b\x1cF\xe00\x01\x87\x118L\xc0a\x02\x0e#p\x18\x81\xc3\b\x1cF\xe00\x02\x87\x118,\xf6\xc3\x00\x1cF\xe00\x02\x87\x018\x8c\xc0a\x04\x0e\x03p\x18\x80\xc3\b\x1cF\xe00\x02\x87\x118\x8c\xc0a\x04\x0e#p\x18\x80\xc3\x00\x1cF\xe00\x00\x87\x118\x8c\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x06\xe00\x00\a\xff\rmLJ\f#Xl\x87\x018\f\xc0aу\xc5\xeb0\x00\x87\x018\f\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x16k\xb0\x88k\x10\u007f\xc4u\x88\x1f\xc0a\xb1\x04\x8b\xbf\xc1\xe2;X\xfc\xea_\xed\x8ex\x94\xb1\xff\x18\x81\xc3\x04\x1c&\xe00\x02\x87\t8L\xc0a\x04\x0e#p\x98\x80\xc3\x04\x1c&\xe00\x01\x87\t8L\xc0a\x02\x0e#p\x18\x81\xc3\x04\x1cF\xe00\x01\x87\t8\x8c\xc0a\x04\x0e#p\x18\x81\xc3\b\x1cF\xe0\xb0\x1d\x918''Eh\x18+\x96\xc0a\x04\x0e\x03p\x18\x80\xc3\b\x1cF\xe00\x02\x87\x118\x8c\xc0a\x04\x0e#p\x18\x80\xc3\x00\x1cF\xe00\x00\x87\x118\x8c\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x06\xe00\x00\a\xffe\xf4t\x18\x80\xc3\x00\x1c\xd6\xdba\x00\x0e\x03pX\xf7`\xfd:\f\xc0a\x00\x0e\x03p\x18\x80\xc3\x00\x1c\x06\xe00\x00\x87\xf5\x1a\xac\xe3\x1a\x1ee\xc7uE?n|f\xdb\xf3-\x9f7\x8dgl\xba7Q7/\xfejxkн\x89\xba7|\n(\x81\xc6\x12h*\x81\xa6\x12h,\x81\xa6\x12h*\x81\xc6\x12h,\x81\xa6\x12h*\x81\xa6\x12h*\x81\xa6\x12h*\x81\xa6\x12h,\x81\xc6\x12h*\x81\xc6\x12h*\x81\xa6\x12h,\x81\xc6\x12h,\x81\xc6\x12h,\x81\xc6\x12h\x11\x89srRĚA\t4\x96@c\t4\x94@C\t4\x96@c\t4\x96@c\t4\x96@c\t4\x96@C\t\xb4\xc8\x19\\\x88\x91Ӹ\x10Y\x02\r%\xd0P\x02\r%\xd0P\x02\r%\xd0\"\xe5\x11\xfb?\x18\xf9\x84y\xce\\\xe3\xd0\xcbM_J\x1e\xbd\xe5\xd3[>\xbd\xe9\xd3[>\xbd\xe5ӛ>\xbd\xe9\xd3[>\xbd\xe5\xd3[>\xbd\xe5\xd3[>\xbd\xe5\xd3[>\xbd\xe9ӻk\x9e\x16b\xd7l-D\xf9\xf4\xa6Oo\xfa\xf4\xa6Oo\xfa\xf4\xa6Oo\xfa\xf4<̰\xbf5\xeeo\x8d\xfb[\xc3\xfeָ\xbf5\xeeo\r\xfb[\xc3\xfeָ\xbf5\xeeo\x8d\xfb[\xe3\xfeָ\xbf5\xeeo\x8d\xfb[\xc3\xfe\xd6&gp!NN\xe3B\xe4\xfeְ\xbf5\xeco\r\xfb[\xc3\xfeְ\xbf\xb5IMӧ\x97|z=>\xbd\x1e\x9f^\xf2\xe9\xf5\xf8\xf4z|zɧ\x97|z=>\xbd\x1e\x9f^\x8fO\xafǧ\xd7\xe3\xd3\xeb\xf1\xe9\xf5\xf8\xf4\x92O/\xf9\xf4z|zɧ\xd7\xe3\xd3\xeb\xf1\xe9%\x9f^\xf2\xe9%\x9f^\xf2\xe9%\x9f^\xf2\xe9\x15\xf9S\xe9M\xe9\x19\xb8\xea\xa9\xe9%M/izQӋ\x9a^\xd2\xf4\x92\xa6\x974\xbd\xa4\xe9%M/izIӋ\x9a^Q\xf3\xe4,Q\xb3\xe5,\xd2\xf4\xa2\xa6\x175\xbd\xa8\xe9EM/jzQ\xd3+㏙\xdf?\xa7g\xe0\af&\x9d\x95tVҙIg&\x9d\x95tV\xd2YIg%\x9d\x95tV\xd2YIg&\x9d5OIg\xcdV\xd2YIg&\x9d\x99tfҙIg&\x9d\xb9\x10'\xe4=\xb9\xa6fz\x06.\x92Ʌ8\xb5\x10\xa7\x16\xe2\xe4B\x9c\\\x88S\vqj!N-ĩ\x858\xb5\x10\xa7\x16\xe2\xd4B\x9c\\\x88S\xf3\xb4\x10\xa7fk!N-\xc4Ʌ8\xb9\x10'\x17\xe2\xe4B\x9c\\\x88\x93\xdb\x1a$\x1d\x99tT\xd2QIG&\x1d\x95tTґIG&\x1d\x95tT\xd2QIG%\x1d\x95tT\xd2QIG&\x1d\xa7\xe6i\x9775[\xbb<%\x1d\x99tdґIG&\x1d\x99td\xd2\x1b\xf2ؔǖ<\xb6\xe4\xb1)\x8f-yl\xc9cS\x1e\x9b\xf2ؒǖ<\xb6\xe4\xb1%\x8f-yl\xc9cK\x1e\x9b\xf2\xd8Y\xf3t\xa7\xb3f\xebNK\x1e\x9b\xf2ؔǦ<6\xe5\xb1)\x8fMḞ\x19\xc8\xd9H\xceFr6\x90\xb3\x91\x9c\x8d\xe4l g\x039\x1b\xc9\xd9H\xceFr6\x92\xb3\x91\x9c\x8d\xe4l$g\x039[\xe6\fZ^\xe64Z\x1e\xc9\xd9@\xce\x06r6\x90\xb3\x81\x9c\r\xe4l\xf9\xef5\xce0\xcet\x8c31\x8c0\xcev\x8c\xb3\x15\x84\xbf0N\x0f㼎q^\xb8~U\x04C\x18\b_\x84\x0f\x02\xa6\xd60N\\3|\n\xae\x0f\x84\x96\xc28K\x18\xe7o\x18\xe7;\x8c\xf3\x1b\xc6\xf9\t\xe3\xc4[\xe21Θ~\x06\xbbe\x83ݲqƆ?\xb6\xc2\xf8\x87\x17\x1c\xe1\xc2\xd7\x17\xa7]\x95\xd1\x18\a\xe3\x97\xf1\xc3\xc8\xf7 \xd5\xc8\x19\xc6\x0f\xe5\xb4\xc1\xd8\xf0\xb3D\xfc\x88\xf1\x17ፀ\x9f%\xe2g\x89\u007fa\xec\xf3\x18\xfbL?\x83ݲ\xc1n\xd9\xd8g\xc3\x1f\x91\x18\xbbec\x9f\x8ep\xe1\xeb\x8bӐ\x18\xbbe\x83ݲ\xc1n\xd9`\xb7l\xb0[6\xf6Y\x118\xc3\xf8\xa1\x9c6\x18\x91\xd8>\v\xc2/\xc2\x1b\xe1\x8b\xf0A\xe0\xdb#&\xc6\xf4\x8f\xa1n\xd9P\xb7l\xb0[6\xd4-\x1b\xea\x96\rv\xcb\x06\xbbeCݲ\xa1n\xd9P\xb7l\xa8[6\xd4-\x1b\xea\x96\ru\xcb\x06\xbbe\x83ݲ\xa1n\xd9`\xb7l\xa8[6\xd4-\x1b\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xc4~\x8c\xd8\xd3\xcf`\xb7l\xb0[6bo\xf8#\xee&\xbbe#vG\xb8\xf0\xf5\xc5i\xb8\x9b\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1nو\xbd\"p\x86\xf1C9m0\xe2n\xc6^\x10~\x11\xde\b_\x84\x0f\xc2\xdfk\xc40\"&%\x86\x11FlLj\x10\u007f\x84\xf8\xa3\x87\x11\xafcD\x88?B\xfc\x11\xe2\x8f\x10\u007f\x84\xf8#\xc4\x1f!\xfeXÈ\xb8\x06\xf1G\\\x87\xf8#\xc4\x1fK\x18\xf17\x8c\xf8\x0e#~È\x9f0\"\x1ee\xec?\x83ݲ\xa1n\xd9P\xb7l\xb0[6\xd4-\x1b\xea\x96\rv\xcb\x06\xbbeCݲ\xa1n\xd9P\xb7l\xa8[6\xd4-\x1b\xea\x96\ru\xcb\x06\xbbe\x83ݲ\xa1n\xd9`\xb7l\xa8[6\xd4-\x1b\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xec\x88\xc499)B\xc3X\xb1\xec\x96\rv\xcb\xc6Ɗ\xddX\xb1\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xb0[66V쎜\xc1\x85\x119\x8d\v\x83+vc\xc5n\xac؍\x15\xbb\xb1b7V\xec\x8e\u007f\xaf\xd1\xc3\xe8\xe9\x18=1\x8c0z;Fǣ\xecx\x94\xdd\xc3\xe8\xd71:\x1eeǣ\xecx\x94\x1d\x8f\xb2\xe3Qv<ʎG\xd9k\x18\x1d\xd7\xf0(;\xae\xe3Qv<\xca^\xc2\xe8\xbfa\xf4w\x18\xfd\x1bF\xff\x84\x81\xbb\xb2\xcec,\xd8\x05\xbbe\x83ݲ\xb1`\x17\xec\x96\rv\xcbƂ],\xd8\x05\xbbe\x83ݲ\xc1n\xd9`\xb7l\xb0[6\xd8-\x1b얍\x05\xbbX'g\x18?\x94\xd3\x06#\xeeʂ],\xd8ł],\xd8ł]\xac\x93o\x8f\x98\b\xbbP\xb7l\xa8[6\xd8-\x1b\xea\x96\ru\xcb\x06\xbbe\x83ݲ\xa1n\xd9P\xb7l\xa8[6\xd4-\x1b\xea\x96\ruˆ\xbae\x83ݲ\xc1n\xd9P\xb7l\xb0[6\xd4-\x1b\xea\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xb0[6z\xc6n\xd9`\xb7ll\xf8\x18\xbbe\x83ݲ\xb1\xe1c\x1b>\xc6n\xd9`\xb7l\xb0[6\xd8-\x1b\xec\x96\rv\xcb\x06\xbbec\xc3\xc7v\xe7\f\x8a\xbfs\x1a\xc5O\x1f\xdb\xf0\xb1\r\x1f\xdb\xf0\xb1\r\x1f\xdb\xf0\xb1\r\x1f\x9ba\xcct\x8c\x99\x18F\x18\xb3\x1dcB\xfc\x13\xe2\x9f\x1eƼ\x8e1!\xfe\t\xf1O\x88\u007fB\xfc\x13\xe2\x9f\x10\xff\x84\xf8g\rc\xe2\x1a\xc4?q\x1d\xe2\x9f\x10\xff,a\xcc\xdf0\xe6;\x8c\xf9\rc~\u0098\xd0\x18|\x8cݲ\xa1n\xd9P\xb7l\xb0[6\xd4-\x1b\xea\x96\rv\xcb\x06\xbbeCݲ\xa1n\xd9P\xb7l\xa8[6\xd4-\x1b\xea\x96\ru\xcb\x06\xbbe\x83ݲ\xa1n\xd9`\xb7l\xa8[6\xd4-\x1b\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xac\x88\xc499)bqAc\xec\x96\rv\xcbƂ\xc6\x164\xc6n\xd9`\xb7l\xb0[6\xd8-\x1b\xec\x96\rv\xcb\x06\xbbecAc+r\x06Wl\xe44\xaeXjlAc\v\x1a[\xd0\u0602\xc6\x164\xb6\xa0\xb1\x95\x8f\xb12\xbeWN\x8a\xf8\x8c\x8c\xc42\x13\xcbL,#\xb1\x8c\xc42\x13\xcbL,3\xb1\xcc\xc42\x13\xcbL,3\xb1\x8c\xc42g0\xb1\xcciL,3\xb1\x8c\xc42\x12\xcbH,#\xb1\x8c\xc42\xc4?\x8f\xb1'\xf4<\x93\"t:!\xfeI\xf1O\x8a\u007fB\xfc\x13\xe2\x9f\x14\xff\xa4\xf8'\xc5?)\xfeI\xf1O\x8a\u007fR\xfc\x13⟜A\xf1ON\xa3\xf8'\xc5?!\xfe\t\xf1O\x88\u007fB\xfc\x13\xe2\x9f(\xbd\xf3\x18\x11\x89\xb1[6\xd8-\x1b\x11\x89\xb1[6\xd8-\x1b\x11\x89E$\xc6n\xd9`\xb7l\xb0[6\xd8-\x1b\xec\x96\rv\xcb\x06\xbbe#\"\xb189\x83\xbb\x8b\xc9i\xdc]0\xb1\x88\xc4\"\x12\x8bH,\"\xb1\x88\xc4\"\x12\xdb\xf9\x18\x1b\x8f\x92ݲ\xc1n\xd9\xd8x\x94\xec\x96\rv\xcb\xc6ƣ\xdcx\x94\xec\x96\rv\xcb\x06\xbbe\x83ݲ\xc1n\xd9`\xb7l\xb0[66\x1e\xe5Μ\xc1;\x969\x8dw\x8c\x8fr\xe3Qn<ʍG\xb9\xf1(7\x1e\xe5ƞ?\x87\x91\xd31rb\x18a\xe4v\x8c\f\xbbȰ\x8b\xeca\xe4\xeb\x18\x19v\x91a\x17\x19v\x91a\x17\x19v\x91a\x17\x19v\x91k\x18\x19\xd7`\x17\x19\xd7a\x17\x19v\x91K\x18\xf97\x8c\xfc\x0e#\u007f\xc3ȟ0\xa0\xa3q\x1ec\xa0V\x0e\xd6\xca\xc1Z9P+\ak\xe5`\xad\x1c\xa8\x95\x03\xb5r\xb0V\x0e\xd6\xca\xc1Z9X+\ak\xe5`\xad\x1c\xac\x95\x03\xb5r\x9c\x9ca\xfcPN\x1b\x8c\xb8+\x03\xb5r\xa0V\x0e\xd4ʁZ9P+\xc7ɷGLD\xad\x1c\xaa\x95C\xb5r\xb0V\x0e\xd5ʡZ9X+\ak\xe5P\xad\x1c\xaa\x95C\xb5r\xa8V\x0e\xd5ʡZ9T+\ak\xe5`\xad\x1c\xaa\x95\x83\xb5r\xa8V\x0e\xd5\xca\xc1Z9X+\ak\xe5`\xad\x1c\xac\x95\x00\x95c\x8c}\xfe \xe0\xfb\xb3[\xc6a\xf0\xb5\xc6/\x984\xbbe\x18\x9c\xf1\xe2K\x97f3iv\xcb8\f\r_\r\x1f\rzse\xd4<\xd3\xf7\xd0졁I\xef\xb30\xfe2\xbe\x19\xbf\x8c\x1fF}T\xe4\x1bb\xfaW\r\xff9\xeasbӗ\xad<\xe3\x9f^v\r\x97^\xbd\x9e7]\xf5\x19\xed\x19\xc73~\x9f\xf1\xf3\x8cϧ\xe8Ǎ\xcfl{\xbe\xe5\xf3\xa6\xf1\x8cM\xf7&\xea\xe6\xc5_\ro\r\xba7Q\xf7\x86O\x01%p\xb0\x04\x0e\x95\xc0\xa1\x128X\x02\x87J\xe0P\t\x1c,\x81\x83%p\xa8\x04\x0e\x95\xc0\xa1\x128T\x02\x87J\xe0P\t\x1c*\x81\x83%p\xb0\x04\x0e\x95\xc0\xc1\x128T\x02\x87J\xe0`\t\x1c,\x81\x83%p\xb0\x04\x0e\x96\xc0\xc1\x128\"\x12\xe7䤈5\x83\x128X\x02\aK\xe0@\t\x1c(\x81\x83%p\xb0\x04\x0e\x96\xc0\xc1\x128X\x02\aK\xe0`\t\x1c(\x81#r\x06\x17b\xe44.D\x96\xc0\x81\x128P\x02\aJ\xe0@\t\x1c(\x81#R\x1e\xb1\xff\x83\x91O\x98\xff\x15V\xe3\xd0\xcbM_J\x1e\xfc\xaf\xb0\x1c]åW\xaf\xe7M\x92\a\xff+\xac\xc6\xf1\x8c\xdfg\xfc<\xe3\xf3)U\xc33۞o\xf9\xbci<\xa3\xe4\x11{\xd1\xf0\xab\xe1\xad\xe1\xabᣁ\x8b4\xf2\xa7қ\xd23p\x01\xd1Y\xb6\x9ce\xcbY6\x9de\xd3Y\xb6\x9ce\xcbY\xb6\x9ce\xcbY\xb6\x9ce\xcbY\xb6\x9ce\xd3Yv\xd4<-Ҩ\xd9Z\xa4r\x96Mg\xd9t\x96Mg\xd9t\x96Mg\xd9؈\x8c~\x8c\x81\xcd\xee\xe0fwp\xb3;\xb0\xd9\x1d\xdc\xec\x0env\a6\xbb\x03\x9b\xdd\xc1\xcd\xee\xe0fwp\xb3;\xb8\xd9\x1d\xdc\xec\x0env\a7\xbb\x03\x9b\xdd\xd19\x83\xf2\xe8\x9cFyp\xb3;\xb0\xd9\x1d\xd8\xec\x0elv\a6\xbb\x03\x9b\xdd\xc1\xbb\xb9`y\x8b\x96\xb7dyK\x96\xb7hyK\x96\xb7dy\x8b\x96\xb7hyK\x96\xb7dyK\x96\xb7dyK\x96\xb7dyK\x96\xb7hy\xeb\xd4<\xd3\xf7\xd0졁ws\xd1\xf2\x16-o\xd1\xf2\x16-o\xd1\xf2֩\x8f\x8a|\x03-o=\x96\xb7\x1e\xcb[\xb2\xbc\xf5X\xdez,o\xc9\xf2\x96,o=\x96\xb7\x1e\xcb[\x8f\xe5\xad\xc7\xf2\xd6cy뱼\xf5Xޒ\xe5-Y\xdez,o\xc9\xf2\xd6cy뱼%\xcb[\xb2\xbc%\xcb[\xb2\xbc%\xcb[\xb2\xbc\x0eMwj\xbaK\xd3]\x9a\xee\xd4t\x97\xa6\xbb4ݩ\xe9NMwi\xbaK\xd3]\x9a\xee\xd2t\x97\xa6\xbb4ݥ\xe9NM\xf7\xa8y\xa6\xef\xa1\xd9C\x03\x9fB\xa7\xa6;5ݩ\xe9NMwj\xba\xabZ§7}z˧\xb7|zӧ\xb7|z˧7}zӧ\xb7|z˧\xb7|z˧\xb7|z˧\xb7|zӧw\xd7<-Į\xd9Z\x88\xf2\xe9M\x9f\xde\xf4\xe9M\x9f\xde\xf4\xe9M\x9f\xde\xf4\xe9y\x8c\x81\xfd\xed\xe0\xfevp\u007f;\xb0\xbf\x1d\xdc\xdf\x0e\xeeo\a\xf6\xb7\x03\xfb\xdb\xc1\xfd\xed\xe0\xfevp\u007f;\xb8\xbf\x1d\xdc\xdf\x0e\xeeo\a\xf7\xb7\x03\xfb\xdb19\x83\vqr\x1a\x17\"\xf7\xb7\x03\xfbہ\xfd\xed\xc0\xfev`\u007f;\xb0\xbf\x1d\x93\x9a\xa6O/\xf9\xf4z|z=>\xbd\xe4\xd3\xeb\xf1\xe9\xf5\xf8\xf4\x92O/\xf9\xf4z|z=>\xbd\x1e\x9f^\x8fO\xafǧ\xd7\xe3\xd3\xeb\xf1\xe9%\x9f^\xf2\xe9\xf5\xf8\xf4\x92O\xafǧ\xd7\xe3\xd3K>\xbd\xe4\xd3K>\xbd\xe4\xd3K>\xbd\xe4\xd3+\xf2\xa7қ\xd23p\xd5S\xd3K\x9a^\xd2\xf4\xa2\xa6\x175\xbd\xa4\xe9%M/izI\xd3K\x9a^\xd2\xf4\x92\xa6\x175\xbd\xa2\xe6\xc9Y\xa2f\xcbY\xa4\xe9EM/jzQӋ\x9a^\xd4\xf4\xa2\xa6W\xc6\x1f3\xbf\u007fN\xcf\xc0\x0f\xccL:+鬤3\x93\xceL:+鬤\xb3\x92\xceJ:+鬤\xb3\x92\xceL:k\x9e\x92Κ\xad\xa4\xb3\x92\xceL:3\xe9̤3\x93\xceL:s!N\xc8{rM\xcd\xf4\f\\$\x93\vqj!N-\xc4Ʌ8\xb9\x10\xa7\x16\xe2\xd4B\x9cZ\x88S\vqj!N-ĩ\x858\xb9\x10\xa7\xe6i!N\xcd\xd6B\x9cZ\x88\x93\vqr!N.\xc4Ʌ8\xb9\x10'\xb75H:2騤\xa3\x92\x8eL:*騤#\x93\x8eL:*騤\xa3\x92\x8eJ:*騤\xa3\x92\x8eL:N\xcd\xd3.oj\xb6vyJ:2\xe9Ȥ#\x93\x8eL:2\xe9Ȥ7\xe4\xb1)\x8f-yl\xc9cS\x1e[\xf2ؒǦ<6\xe5\xb1%\x8f-yl\xc9cK\x1e[\xf2ؒǖ<6屳\xe6\xe9Ng\xcd֝\x96<6\xe5\xb1)\x8fMyl\xcacS\x1e\x9b\x8c\x98\x8f1@\u0383\xe4\xc3>\xd3\x01\x8cD\x18a\x9f\xed\x00@\"\xfc\x85}z\xd8\xe7u\x00\x1c\x11*\x82!\f\x84/\xc2\a\x01Sk\xd8'\xae\x19>\x05\xd7\aBKa\x9f%\xec\xf37\xec\xf3\x1d\xf6\xf9\r\xfb\xfc\x84}\xe2-\xf1\x00\x01\xfe\x10\a\x19\xf1\x8e\xd8~\b\x82\x8c\u007fx\xc1\x11\xae\x1f\x02 ce4\xc6\xc1\xf8e\xfc0\xf2=H5r\x86\xf1C9m06\xfc,\x11?b\xfcEx#\xe0g\x89\xf8Y\xe2\xdf+\xf6\x10{:P\xdd\x10F\x88\xbd\x1d(j\b\u007f!v\x0f\xb1_\a\n\x19BE0\x84\x81\xf0E\xf8 `j\r\xb1\xe3\x9a\xe1Sp} \xb4\x14b/!\xf6\xdf\x10\xfb;\xc4\xfe\r\xb1\u007fB\xec\u007f\xff\x12_1\x85\x98\xf0\xff\xf1\x8a-\xc4VBl\u007f\xaf\xe8\xafx\x85x\xa5\x10\xaf\x1a\xe2e!^#\xc4\xeb\x1b\xe2\xf5\t\xf1\xfa{\xc5\xfa\x8a\x16\xa2\x8dW\x1c!\x8e\x11bK\xafX^\xf1\xf7\x15߯\xf8}\xc5\xcf+\xfe\x85\x1d\xfb\x01\xb2\xfa!f1\x0e\xbc\xd0~\bX\x8c\u007fx\xc1\x11\xae\x1f\x82\x15ce4\xc6\xc1\xf8e\xfc0\xf2=\x15\x813\x8c\x1f\xcai\x83\x11\xb7=\xf6\x82\xf0\x8b\xf0F\xf8\"|\x10\xfe^;\x86\x1d1)1\x8c\xb0c;\x00J\b\xc8\xdbÎ\xd7\x01@B\xc0\xb7\x82\x18\xb1\x12\x00F\b\xf8$\x881ְ#\xaeA\x8c\x11\xd7!F\xac\x84\x1dK\xd8\xf17\xec\xf8\x0e;~Î\x9f\xb0\xe3߿\xf4WO\xa1'\xfc\u007f\xbcz\v\xbd\x95\xd0\xdb߫\xfb\xab_\xa1_)\xf4\xab\x86~Y\xe8\xd7\b\xfd\xfa\x86~}B\xbf\xfe^\xbd\xbe\xba\x85n\xe3\xd5G\xe8c\x84\xdeҫ\x97W\xff}\xf5\xf7\xab\u007f_\xfd\xf3\xea\u007f\xafu\x86u\xa6\x03\xf8\x820\xc2:\xdb\x01pA\xf8\v\xeb\xf4\xb0\xce\xeb\x00\xb0 T\x04C\x18\b_\x84\x0f\x02\xa6ְN\\3|\n\xae\x0f\x84\x96\xc2:KX\xe7oX\xe7;\xac\xf3\x1b\xd6\xf9\t\xeb\xc4[\xe2\x01\xf2\xf8!\x860\xe2\x1d\xb1\xfd\x10@\x18\xff\xf0\x82#\\?\x04\x0f\xc6\xcah\x8c\x83\xf1\xcb\xf8a\xe4{\x90j\xe4\f\xe3\x87r\xda`l\xf8Y\"~\xc4\xf8\x8b\xf0F\xc0\xcf\x12\xf1\xb3ĿW\x8f\xa1\xc7t\x00'\x10F\xe8\xb1\x1d\x00\t\x84\xbfУ\x87\x1e\xaf\x03\x00\x81P\x11\fa |\x11>\b\x98ZC\x8f\xb8f\xf8\x14\\\x1f\b-\x85\x1eK\xe8\xf17\xf4\xf8\x0e=~C\x8f\x9f\xd0\xe1~=\xec\x9e\x0e`\x01\xc2\b\xbb\xb7\x03@\x80\xf0\x17v\xf7\xb0\xfbu\x00\x04\x10*\x82!\f\x84/\xc2\a\x01Sk\xd8\x1d\xd7 \xb8\x8e\xeb\x10\x1c\xd6\xf9\xee%\xec\xfe\x1bv\u007f\x87ݿa\xf7O\xd8\xfd\xef_\xe6k\xa60\x13\xfe?^\xb3\x85\xd9J\x98\xed\xef5\xfd5\xaf0\xaf\x14\xe6Uü,\xcck\x84y}ü>a^\u007f\xafY_\xd3´\xf1\x9a#\xcc1\xc2l\xe95\xcbk\xfe\xbe\xe6\xfb5\xbf\xaf\xf9yͿ\xb0b?\xb03\xff\xe16\x9dq\xe0\x85\xf6\xc3\r:\xe3\x1f^p\x84\xeb\x87\x1bs\xc6\xcah\x8c\x83\xf1\xcb\xf8a\xe4{*\x02g\x18?\x94\xd3\x06#\x9e9\xd696\xdf\bo\x84/\xc2\a\xe1\xef\xb5bX\x11\x93\x12\xc3\b+\xb6\x03\x1bm\x04\xe4\xeda\xc5\xeb\xc0\x06\x1b\x01\xdf\n+\x01\xcf\x1c\x1bk\x04|\x12VB\xacaE\\\xc3J\x88\xb8\x8e\x95\x80g\xbeb\t+\xfe\x86\x15\xdfa\xc5oX\xf1\x13V\xfc{\xad\x1cVN\a\xb6\xcd\b#\xac\xdc\x0el\x98\x11\xfe\xc2\xca\x1eV\xbe\x0el\x94\x11*\x82!\f\x84/\xc2\a\x01SkX\x19\xd7\xf0\xcd3\xae\xe3\x9bg|\xf3\\\xc2ʿa\xe5wX\xf9\x1bV\xfe\x84\x95\xff^{\x86=Ӂ\xed/\xc2\b{\xb6\x03\x1b_\x84\xbf\xb0\xa7\x87=\xaf\x03\x1b^\x84\x8a`\b\x03\xe1\x8b\xf0A\xc0\xd4\x1a\xf6\xc45\bn\xe2:\x047!\xb8Y\u009e\xbfa\xcfw\xd8\xf3\x1b\xf6\xfc\x84=\xff^q\x868Ӂm,\xc2\bq\xb6\x03\x1bX\x84\xbf\x10\xa7\x878\xaf\x03\x1bW\x84\x8a`\b\x03\xe1\x8b\xf0A\xc0\xd4\x1a\xe2\xc45T\xb5\x89\xeb\xa8j\xf8\xe6q\x96\x10\xe7o\x88\xf3\x1d\xe2\xfc\x868?!ο\xd7\xcea\xe7t`;\x8a0\xc2\xce\xed\xc0F\x14\xe1/\xec\xeca\xe7\xeb\xc0\x06\x14\xa1\"\x18\xc2@\xf8\"|\x100\xb5\x86\x9dq\r?y\xc6u\xfc\xe4\xb8\xed;\x97\xb0\xf3o\xd8\xf9\x1dv\xfe\x86\x9d?a\xe7\xbf\u007fɯ\x9cBN\xf8\xffx\xe5\x16r+!\xb7\xbfW\xf6W\xbeB\xbeR\xc8W\r\xf9\xb2\x90\xaf\x11\xf2\xf5\r\xf9\xfa\x84|\xfd\xbdr}e\v\xd9\xc6+\x8f\x90\xc7\b\xb9\xa5W.\xaf\xfc\xfb\xca\xefW\xfe\xbe\xf2\xe7\x95\xff^\xe5\f\xe5LG\x81\xb7\x17x{9\xdbQ\xe0\xed\x05\xde^N\x0f弎\x02o/\xf0\xf6\x02o/\xf0\xf6\x02o/\xf0\xf6\x02o/g\r\xe5\xc45ç\xe0\xfa@h)\x94\xb3\x84r\xfe\x86r\xbeC9\xbf\xa1\x9c\x9fPN\xbc%\x1e\x05\xde^\xe8\xed\x85\xde^\xe0\xed\x85\xde^\xe8\xed\x05\xde^\xe0\xed\x85\xde^\xe8\xed\x85\xde^\xe8\xed\x85\xde^\xe8\xed\x85\xde^\xe0\xed\x05\xde^\xe8\xed\x05\xde^\xe8\xed\x85\xde^\xe0\xed\x05\xde^\xe0\xed\x05\xde^\xe0\xed\xe5\x8c\u007f\xa1\xec\xf3(\xfbL?\x85G\xaa\n\x8fT\x95}6\xfc\x11\x89\xf1HU٧#\\\xf8\xfa\xe24$\xc6#U\x85G\xaa\n\x8fT\x15\x1e\xa9*\v\xc2/\xc2\x1b\xe1\x8b\xf0A\xe0\xdb#&\xc6\xf4\x8f\xa2#UEG\xaa\n\x8fT\x15\x1d\xa9*:RUx\xa4\xaa\xf0HUё\xaa\xa2#UEG\xaa\x8a\x8eT\x15\x1d\xa9*:RUt\xa4\xaa\xf0HUᑪ\xa2#U\x85G\xaa\x8a\x8eT\x15\x1d\xa9*\xc6#U\x85G\xaaʆ\x8f\xf1HUᑪ\xb2\xe1c\x1b>\xc6#U\x85G\xaa\n\x8fT\x15\x1e\xa9*\xc7\xe7\xd4[\xfcx돳į_\xe2t\x89\xdf^\x1eo\xba\\\x1f\xe7\xe7\xc7\xf9\xfe8\xfb\xe3l\x8f\xf3\xe3S\xe2\xeb\xd6\xc7\xe8\xe7ǟ|\xbc\xe9\xfe8\xdf\xe2\xdaԸx\xb5\xc4I\xe3\x14צƵ\xe1]\xc0\x16ع\x05\xf6\xd8\x02{l\x81\x9d[`\x8f-\xb0\xc7\x16ع\x05vn\x81=\xb6\xc0\x1e[`\x8f-\xb0\xc7\x16\xd8c\v\xec\xb1\x05\xf6\xd8\x02;\xb7\xc0\xce-\xb0\xc7\x16ع\x05\xf6\xd8\x02{l\x81\x9d[`\xe7\x16ع\x05vn\x81\x9d[`\xe7\x16\xd8+&\xce\xc1\xe7h\xb1f\xb0\x05vn\x81\x9d[`\xc7\x16ر\x05vn\x81\x9d[`\xe7\x16ع\x05vn\x81\x9d[`\xe7\x16ر\x05\xf6\xca\x11\\\x88\x95ø\x10\xb9\x05vl\x81\x1d[`\xc7\x16ر\x05vl\x81\xbd2<\xeax\x9b-\xef0K\xf5q\xbeǯo\xf1c\x84\aK\xf5<\xbf\xc4\xe9\x12\xbf\xbd<\xde\x14\xe1\xc1R}\x9c\uf3f3?\xce\xf68?>\xe5\x1a\xa7\xc7\xe8\xe7ǟ|\xbc\xe9\xfe8Gx\xd4\xd1\xe3T\xe2\xa4q\xf28Y\x9c\xb8H+\xbfU\xbc\xe9\xfc8q\x011\xb3\x1c\x91Y\x8e\xc8,\a3\xcb\xc1\xccrDf9\"\xb3\x1c\x91Y\x8e\xc8,Gd\x96#2\xcb\x11\x99\xe5`f9j\x8c\x8bEZct,\xd2\xc8,\a3\xcb\xc1\xccr0\xb3\x1c\xcc,\a3ˁ\a\x91>\xd6\xde\xf1\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf1\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf1\xb0\xdb\xf1\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf9\xb0\xdb\xf1\xb0\xdb\aG0<\x06\x871<\xf8\xb0\xdb\xf1\xb0\xdb\xf1\xb0\xdb\xf1\xb0\xdb\xf1\xb0\xdb\xf1\xb0\xdby5w\xa4\xbc\x9d)o\x8f\x94\xb7G\xcaۙ\xf2\xf6Hy{\xa4\xbc\x9d)og\xca\xdb#\xe5\xed\x91\xf2\xf6Hy{\xa4\xbc=R\xde\x1e)o\x8f\x94\xb73\xe5\xed[\x8c{\x8e\xbf\x11\xa3\xefq\xe2\xd5ܙ\xf2v\xa6\xbc\x9d)og\xcaۙ\xf2\xf6->\xaa\xf2\rLy\xfb#\xe5폔\xb7G\xca\xdb\x1f)o\u007f\xa4\xbc=R\xde\x1e)o\u007f\xa4\xbc\xfd\x91\xf2\xf6G\xca\xdb\x1f)o\u007f\xa4\xbc\xfd\x91\xf2\xf6G\xca\xdb#\xe5\xed\x91\xf2\xf6G\xca\xdb#\xe5폔\xb7?R\xde\x1e)o\x8f\x94\xb7G\xca\xdb#\xe5\xed\x91\xf2\xf6Hy\x031=\x18\xd3#bzDL\x0f\xc6\xf4\x88\x98\x1e\x11Ӄ1=\x18\xd3#bzDL\x8f\x88\xe9\x111=\"\xa6G\xc4\xf4\x88\x98\x1e\x8c\xe9Qc\xdcs\xfc\x8d\x18}\x8f\x13\xef\xc2`L\x0f\xc6\xf4`L\x0f\xc6\xf4`L\x8f\xd8-\x91\xa7\x0f\xe6\xe9#\xf2\xf4\x11y\xfa`\x9e>\"O\x1f\x91\xa7\x0f\xe6\xe9\x83y\xfa\x88<}D\x9e>\"O\x1f\x91\xa7\x8f\xc8\xd3G\xe4\xe9#\xf2\xf4\xc1<}\x8c\x18\x17\vq\xc4\xe8X\x88\x91\xa7\x0f\xe6\xe9\x83y\xfa`\x9e>\x98\xa7\x0f\xe6\xe9\x83yz\xae\xbd\xe3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xe3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xe3\xf9\xb6\xe3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xf3\xf9\xb6\xe3\xf9\xb6O\x8e\xe0B\x9c\x1cƅ\xc8\xe7ێ\xe7ێ\xe7ێ\xe7ێ\xe7ێ\xe7\xdb>\x19\xd3\xcc\xd3{\xe4\xe9\xfd\x91\xa7\xf7G\x9e\xde#O\xef\x8f<\xbd?\xf2\xf4\x1eyz\x8f<\xbd?\xf2\xf4\xfe\xc8\xd3\xfb#O\xef\x8f<\xbd?\xf2\xf4\xfe\xc8\xd3\xfb#O\uf467\xf7\xc8\xd3\xfb#O\uf467\xf7G\x9e\xde\x1fyz\x8f<\xbdG\x9e\xde#O\uf467\xf7\xc8\xd3{\xe4\xe9\xbd\xf2[śΏ\x13W=cz\x8f\x98\xde#\xa6w\xc6\xf4Θ\xde#\xa6\xf7\x88\xe9=bz\x8f\x98\xde#\xa6\xf7\x88\xe9=bzgL\xef5\xc6Ef\xa91:2K\xc4\xf4Θ\xde\x19\xd3;czgL\xef\x8c\xe9\x9d1\xbd7\xfc\xb3\xf1\xef\xb7\xf3\xe3\xc4\x0fl\x9ct\x8bI\xb7\x98t\xe3\xa4\x1b'\xddb\xd2-&\xddb\xd2-&\xddb\xd2-&\xddbҍ\x93n1.&\xddbtL\xbaŤ\x1b'\xdd8\xe9\xc6I7N\xbaqҍ\vq\"\xbc'\xd7\xd4\x04\u007fE?\x82\x1f\xe0\xf0ڳג\xbdj\xf6\xea٫e\xaf\xb8\x95u<9\xc1\xe1\x01\x0e\x0fp8\xc1\xe1\x01\x0e\x0fp8\xc1\xe1\x04\x87\a8<\xc0\xe1\x01\x0e\x0fpx\x80\xc3\x03\x1c\x1e\xe0p\x82\xc3\t\x0e\x0fp8\xc1\xe1\x01\x0e\x0fp8\xc1\xe1\x04\x87\x13\x1cNp8\xc1\xe1\x04\x87\x1f\x15\x13\xe7\xe0s\xb4\x88a\xacX\x82\xc3\t\x0e\a8\x1c\xe0p\x82\xc3\t\x0e'8\x9c\xe0p\x82\xc3\t\x0e'8\x1c\xe0p\x80\xc3\t\x0e\a8\x9c\xe0p\x82\xc3\x01\x0e\a8\x1c\xe0p\x80\xc3\x01\x0e\a8|d\x1f\xe7\xd5\x01\x0e\a8|\xdcV\a8\x1c\xe0\xf0\xf1\x92}\\V\a8\x1c\xe0p\x80\xc3\x01\x0e\a8\x1c\xe0p\x80\xc3\xc75\xfb@\x1fn\xe5@?n%\xc0\xe1\xa3g\x1f%\xfb\xd0\xecó\x0fˎ\xab\xb2o\xab\x03\x1cNp8\xc1\xe1\x00\x87\x13\x1cNp8\xc0\xe1\x00\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1cNp8\xc1\xe1\x00\x87\x03\x1cNp8\xc0\xe1\x04\x87\x13\x1c\x0ep8\xc0\xe1\x00\x87\x03\x1c\x0ep8\xc0\xe1\x00\x87\x13\x1c\x1e\xe0\xf0\x00\x87\x13\x1c\x1e\xe0\xf0\x00\x87\x13\x1cNpx\x80\xc3\x03\x1c\x1e\xe0\xf0\x00\x87\a8<\xc0\xe1\x01\x0e'8\x9c\xe0\xf0\x00\x87\x13\x1c\x1e\xe0\xf0\x00\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1cNp\xf8\xa8\xab\x03\x1cNp8\xc1\xe1\x00\x87\x13\x1cNp8\xc0\xe1\x00\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1cNp8\xc1\xe1\x00\x87\x03\x1cNp8\xc0\xe1\x04\x87\x13\x1c\x0ep8\xc0\xe1\x00\x87\x03\x1c\x0ep\xf8\xe0\xae0V\a8\x9c\xe0p\x82\xc3\x01\x0e'8\x9c\xe0p\x80\xc3\x01\x0e'8\x9c\xe0p\x82\xc3\t\x0e'8\x9c\xe0p\x82\xc3\x01\x0e\a8\x9c\xe0p\x80\xc3\t\x0e'8\x1c\xe0p\x80\xc3\x01\x0e\a8\x1c\xe0p\x80\xc3g\xf6y^\x1d\xe0p\x80\xc3\xe7mu\x80\xc3\x01\x0e\x9f/\xd9\xe7eu\x80\xc3\x01\x0e\a8\x1c\xe0p\x80\xc3\x01\x0e\a8|^\xb3O\xf4!\xf8'\xfa\x11\xfc\x00\x87Ϟ}\x96\xecS\xb3O\xcf>-\xfbD\x8c!\x8f\x11\x1c\x1e\xe0\xf0\x00\x87\x13\x1c\x1e\xe0\xf0\x00\x87\x13\x1cNpx\x80\xc3\x03\x1c\x1e\xe0\xf0\x00\x87\a8<\xc0\xe1\x01\x0e'8\x9c\xe0\xf0\x00\x87\x13\x1c\x1e\xe0\xf0\x00\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1cNp\xf8^1q\x0e>G\x8bŅ\x18#8\x9c\xe0p\x80\xc3\x01\x0e'8\x9c\xe0p\x82\xc3\t\x0e'8\x9c\xe0p\x82\xc3\x01\x0e\a8\x9c\xe0p\x80\xc3\t\x0e'8\x1c\xe0p\x80\xc3\x01\x0e\a8\x1c\xe0p\x80\xc3\xf7\xb6:\xc0\xe1\x04\x87\x13\x1c\x0ep8\xc1\xe1\x04\x87\x03\x1c\x0ep8\xc1\xe1\x04\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1c\x0ep8\xc0\xe1\x04\x87\x03\x1cNp8\xc1\xe1\x00\x87\x03\x1c\x0ep8\xc0\xe1\x00\x87\x03\x1c~\xcc\xd5\x01\x0e'8\x9c\xe0p\x80\xc3\t\x0e'8\x1c\xe0p\x80\xc3\t\x0e'8\x9c\xe0p\x82\xc3\t\x0e'8\x9c\xe0p\x80\xc3\x01\x0e'8\x1c\xe0p\x82\xc3\t\x0e\a8\x1c\xe0p\x80\xc3\x01\x0e\a8\x1c\xe0\xf0:W\a8\x9c\xe0p\x82\xc3\x01\x0e'8\x9c\xe0p\x80\xc3\x01\x0e'8\x9c\xe0p\x82\xc3\t\x0e'8\x9c\xe0p\x82\xc3\x01\x0e\a8\x9c\xe0p\x80\xc3\t\x0e'8\x1c\xe0p\x80\xc3\x01\x0e\a8\x1c\xe0p\x80Ï\xb6:\xc0\xe1\x04\x87\x13\x1c\x0ep8\xc1\xe1\x04\x87\x03\x1c\x0ep8\xc1\xe1\x04\x87\x13\x1cNp8\xc1\xe1\x04\x87\x13\x1c\x0ep8\xc0\xe1\x04\x87\x03\x1cNp8\xc1\xe1\x00\x87\x03\x1c\x0ep8\xc0\xe1\x00\x87\x03\x1c\u07b2\xb7\xf3\xea\x00\x87\x03\x1c\xden\xab\x03\x1c\x0epx{\xc9\xde.\xab\x03\x1c\x0ep8\xc0\xe1\x00\x87\x03\x1c\x0ep8\xc0\xe1횽\xa1\x0f颡\x1f\xe9\x02\xe0\xf0ֳ\xb7\x92\xbdi\xf6\xe6ٛeo\xb2ؖm;\xaf\x06p\x18\xc0a\xdbm5\x80\xc3\x00\x0e\xdb^\xb2m\x97\xd5\x00\x0e\x038\f\xe00\x80\xc3\x00\x0e\x038\f\xe0\xb0\xed\x9amC\xdf3>\x05\xfdw4\xb7s\xb6\xadg\xdbJ\xb6M\xb3m\x9em\xb3l\x1b\xdeRW\x038\x8c\xe00\x82\xc3\x00\x0e#8\x8c\xe00\x80\xc3\x00\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\x00\x0e\x038\x8c\xe00\x80\xc3\b\x0e#8\f\xe00\x80\xc3\x00\x0e\x038\f\xe00\xecyvl\xab\x01\x1cFp\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x11\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc0a\x04\x87\x11\x1c\x06p\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\x11\x1c\x16\xe0\xb0\x00\x87\x11\x1c\x16\xe0\xb0\x00\x87\x11\x1cFpX\x80\xc3\x02\x1c\x16\xe0\xb0\x00\x87\x058,\xc0a\x01\x0e#8\x8c\xe0\xb0\x00\x87\x11\x1c\x16\xe0\xb0\x00\x87\x11\x1cFp\x18\xc1a\x04\x87\x11\x1cFpX\x1d\xab\x01\x1cFp\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x11\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc0a\x04\x87\x11\x1c\x06p\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a5[Š3\x9b{\xb6z[\r\xe00\x80\xc3\xeaK\xb6zY\r\xe00\x80\xc3\x00\x0e\x038\f\xe00\x80\xc3\x00\x0e\xab\xd7l\x15}\b\xfe\x8a~\x04?\xc0a\xb5g\xab%[\xd5lճU\xcbVq+\xebx2\x82\xc3\x02\x1c\x16\xe00\x82\xc3\x02\x1c\x16\xe00\x82\xc3\b\x0e\vpX\x80\xc3\x02\x1c\x16\xe0\xb0\x00\x87\x058,\xc0a\x04\x87\x11\x1c\x16\xe00\x82\xc3\x02\x1c\x16\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\b\x0e;*&\xce\xc1\xe7h\x11\xc3X\xb1\x04\x87\x11\x1c\x06p\x18\xc0a\x04\x87\x11\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc0a\x00\x87\x11\x1c\x06p\x18\xc1a\x04\x87\x01\x1c\x06p\x18\xc0a\x00\x87\x01\x1c\x06p\xd8\xc86Ϋ\x01\x1c\x06pظ\xad\x06p\x18\xc0a\xe3%۸\xac\x06p\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\x8dk\xb6\x81>\xdcʁ~\xdcJ\x80\xc3F\xcf6J\xb6\xa1نg\x1b\x96\rWe\xdfV\x038\x8c\xe00\x82\xc3\x00\x0e#8\x8c\xe00\x80\xc3\x00\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\x00\x0e\x038\x8c\xe00\x80\xc3\b\x0e#8\f\xe00\x80\xc3\x00\x0e\x038\f\xe00\x80\xc3\x00\x0e#8,\xc0a\x01\x0e#8,\xc0a\x01\x0e#8\x8c\xe0\xb0\x00\x87\x058,\xc0a\x01\x0e\vpX\x80\xc3\x02\x1cFp\x18\xc1a\x01\x0e#8,\xc0a\x01\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\x8c\xe0\xb0QW\x038\x8c\xe00\x82\xc3\x00\x0e#8\x8c\xe00\x80\xc3\x00\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\x00\x0e\x038\x8c\xe00\x80\xc3\b\x0e#8\f\xe00\x80\xc3\x00\x0e\x038\f\xe0\xb0\xc1]a\xac\x06p\x18\xc1a\x04\x87\x01\x1cFp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x04\x87\x01\x1c\x06p\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\xcdl\xf3\xbc\x1a\xc0a\x00\x87\xcd\xdbj\x00\x87\x01\x1c6_\xb2\xcd\xcbj\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\x01\x1c\x06pؼf\x9b\xe8C\xf0O\xf4#\xf8\x01\x0e\x9b=\xdb,٦f\x9b\x9emZ\xb6\x89\x18C\x1e#8,\xc0a\x01\x0e#8,\xc0a\x01\x0e#8\x8c\xe0\xb0\x00\x87\x058,\xc0a\x01\x0e\vpX\x80\xc3\x02\x1cFp\x18\xc1a\x01\x0e#8,\xc0a\x01\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\x8cఽb\xe2\x1c|\x8e\x16\x8b\v1Fp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x04\x87\x01\x1c\x06p\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\xedm5\x80\xc3\b\x0e#8\f\xe00\x82\xc3\b\x0e\x038\f\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\f\xe00\x80\xc3\b\x0e\x038\x8c\xe00\x82\xc3\x00\x0e\x038\f\xe00\x80\xc3\x00\x0e\x038옫\x01\x1cFp\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x11\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc0a\x04\x87\x11\x1c\x06p\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0au\xae\x06p\x18\xc1a\x04\x87\x01\x1cFp\x18\xc1a\x00\x87\x01\x1cFp\x18\xc1a\x04\x87\x11\x1cFp\x18\xc1a\x04\x87\x01\x1c\x06p\x18\xc1a\x00\x87\x11\x1cFp\x18\xc0a\x00\x87\x01\x1c\x06p\x18\xc0a\x00\x87\x1dm5\x80\xc3\b\x0e#8\f\xe00\x82\xc3\b\x0e\x038\f\xe00\x82\xc3\b\x0e#8\x8c\xe00\x82\xc3\b\x0e#8\f\xe00\x80\xc3\b\x0e\x038\x8c\xe00\x82\xc3\x00\x0e\x038\f\xe00\x80\xc3\x00\x0e\x038\xacek\xe7\xd5\x00\x0e\x038\xac\xddV\x038\f\xe0\xb0\xf6\x92\xad]V\x038\f\xe00\x80\xc3\x00\x0e\x038\f\xe00\x80\xc3\xda5[C\x1f\xd2EC?\xd2\x05\xc0a\xadgk%[\xd3lͳ5\xcb\xd6d\x91-\xcbv^\x05\xe0\x10\x80C\xb6\xdb*\x00\x87\x00\x1c\xb2\xbdd\xd9.\xab\x00\x1c\x02p\b\xc0!\x00\x87\x00\x1c\x02p\b\xc0!\xdb5ˆ\xbeg|\n\xfa\xefhn\xe7,[ϲ\x95,\x9bf\xd9<\xcbfY6\xbc\xa5\xae\x02p\b\xc1!\x04\x87\x00\x1cBp\b\xc1!\x00\x87\x00\x1cBp\b\xc1!\x04\x87\x10\x1cBp\b\xc1!\x04\x87\x00\x1c\x02p\b\xc1!\x00\x87\x10\x1cBp\b\xc0!\x00\x87\x00\x1c\x02p\b\xc0!\xd8\xf3\xe4\xd8V\x018\x84\xe0\x10\x82C\x00\x0e!8\x84\xe0\x10\x80C\x00\x0e!8\x84\xe0\x10\x82C\b\x0e!8\x84\xe0\x10\x82C\x00\x0e\x018\x84\xe0\x10\x80C\b\x0e!8\x04\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x10\x80C\x00\x0e!8$\xc0!\x01\x0e!8$\xc0!\x01\x0e!8\x84\xe0\x90\x00\x87\x048$\xc0!\x01\x0e\tpH\x80C\x02\x1cBp\b\xc1!\x01\x0e!8$\xc0!\x01\x0e!8\x84\xe0\x10\x82C\b\x0e!8\x84\xe0\x90:V\x018\x84\xe0\x10\x82C\x00\x0e!8\x84\xe0\x10\x80C\x00\x0e!8\x84\xe0\x10\x82C\b\x0e!8\x84\xe0\x10\x82C\x00\x0e\x018\x84\xe0\x10\x80C\b\x0e!8\x04\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x10\x80Cj\x96\x8aAg6\xf7,\xf5\xb6\n\xc0!\x00\x87ԗ,\xf5\xb2\n\xc0!\x00\x87\x00\x1c\x02p\b\xc0!\x00\x87\x00\x1cR\xafY*\xfa\x10\xfc\x15\xfd\b~\x80Cj\xcfRK\x96\xaaY\xaag\xa9\x96\xa5\xe2V\xd6\xf1$\x04\x87\x048$\xc0!\x04\x87\x048$\xc0!\x04\x87\x10\x1c\x12\xe0\x90\x00\x87\x048$\xc0!\x01\x0e\tpH\x80C\b\x0e!8$\xc0!\x04\x87\x048$\xc0!\x04\x87\x10\x1cBp\b\xc1!\x04\x87\x10\x1crTL\x9c\x83\xcf\xd1\"\x86\xb1b\t\x0e!8\x04\xe0\x10\x80C\b\x0e!8\x84\xe0\x10\x82C\b\x0e!8\x84\xe0\x10\x80C\x00\x0e!8\x04\xe0\x10\x82C\b\x0e\x018\x04\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x90\x91e\x9cW\x018\x04\xe0\x90q[\x05\xe0\x10\x80C\xc6K\x96qY\x05\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x10\x80C\x00\x0e\x19\xd7,\x03}\xb8\x95\x03\xfd\xb8\x95\x00\x87\x8c\x9ee\x94,C\xb3\f\xcf2,\v\xaeʾ\xad\x02p\b\xc1!\x04\x87\x00\x1cBp\b\xc1!\x00\x87\x00\x1cBp\b\xc1!\x04\x87\x10\x1cBp\b\xc1!\x04\x87\x00\x1c\x02p\b\xc1!\x00\x87\x10\x1cBp\b\xc0!\x00\x87\x00\x1c\x02p\b\xc0!\x00\x87\x00\x1cBpH\x80C\x02\x1cBpH\x80C\x02\x1cBp\b\xc1!\x01\x0e\tpH\x80C\x02\x1c\x12\xe0\x90\x00\x87\x048\x84\xe0\x10\x82C\x02\x1cBpH\x80C\x02\x1cBp\b\xc1!\x04\x87\x10\x1cBp\b\xc1!\xa3\xae\x02p\b\xc1!\x04\x87\x00\x1cBp\b\xc1!\x00\x87\x00\x1cBp\b\xc1!\x04\x87\x10\x1cBp\b\xc1!\x04\x87\x00\x1c\x02p\b\xc1!\x00\x87\x10\x1cBp\b\xc0!\x00\x87\x00\x1c\x02p\b\xc0!\x83\xbb\xc2X\x05\xe0\x10\x82C\b\x0e\x018\x84\xe0\x10\x82C\x00\x0e\x018\x84\xe0\x10\x82C\b\x0e!8\x84\xe0\x10\x82C\b\x0e\x018\x04\xe0\x10\x82C\x00\x0e!8\x84\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x10\x80C\x00\x0e\x99Y\xe6y\x15\x80C\x00\x0e\x99\xb7U\x00\x0e\x018d\xbed\x99\x97U\x00\x0e\x018\x04\xe0\x10\x80C\x00\x0e\x018\x04\xe0\x90y\xcd2ч\xe0\x9f\xe8G\xf0\x03\x1c2{\x96Y\xb2L\xcd2=˴,\x131\x86\xa4\x8b\x86~\xa4\v\x80CZ\xcf\xd2J\x96\xa6Y\x9agi\x96\xa5I\xfe\xf8\x9b\x9f\xbc\xbe\xfe~^\u007f\xf5z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1z\xbc\x1e\xaf\xc7\xeb\xf1\xff\xfb\xb1\xbe\xb7\x1d\xa7\xb7\xdfێ\xdb\xf9\x94߫\xa7\xfc\xde8\xad\xef\x8d\v\x9arZ\xdf\xdb[4O\xef\x1d\xf3vZߛ\xe8\x99\xd7S\xfe`\xfb\xc9\xeb\xfd\xed\xa7\u007f~\xbc\xd6\x0f6\xfd?7\xb7\x9f\xdb\\\xbf\xa0\xb1\xcf5O\x1fl\xb7\xf3\xcfl\xd7\x0f\xf0\xed>\x88o\xf7\xc1\xf8\x85^\xeb\aC\u007fns;=}0\xf8\xa7\xfef\xbb~0\x8e\xff\xbd\xd9\xe7\x97k\xa6\xfe\xb8\xb9\x9e\x9e>\x98\xfc\xd8/n\xd7o\uf4d7\u007f}\x1f\x17\xf3\xd1\xdcNo\xbf\u007fT|\xe5\xf7\xc7\xe9\xe9\xfdc^N\xf9\xfdvZ?\xac\a\x9a\xdb\xe9\xe9ã\xdeN\xeb\x87\xfb<=}\xb8\xa3\xfb\xc3vZ?»\x1f\xcd\xf5\xf4\xf4\xd1v\xe8\xe9\xed\x8fx\xed֏\xaa\xa19NO\x1f\xed\xdbqZ?j74W4v\xcao\xb6\xd3\xfa\x06\xefD\xf3\xf4\x867\xe0K\xb7\xf9M\xfdү\xf5M\xd5/hn\u007f'\xcd\xe5\xe76ן\xd5\xd8\xe9\xe9M\xe5\xb7\xf9\xbbi\xd77\xb8O?\xdd,\u007fr\xcaoƗz=\xbda\b~\a\xcb\xf5;\xf5v\xcao\xe6\x97z\xado\x10s\x9fon_\xd0\\\xfef\xf3\xf4\x06\x81\xb8\xfcї\xfd/\xff\x91>^\xb7\x9f\xf3\xba~\xeee?~=\xbd\xcbE\xfdn\xd5S~\xb7\x9d\xd6w\x9b\x9d\xd6we;=\xbd+U\xd9\x1e\xa7\xa7o\v\x82\x90\xed\xdb\xdf\x16\xbc\x03\xa7\x83?\xf1\xd2|(\xe3\xf4\xf4\xa1\f==}\x8ba\xf8h\xb1(\x9e\xbe\xb5oz\xcaߙ\xa7\xf5[s\x9c֏\xbf\xf9I4o\u007f7ތ\u007f?\xfdi\xfb\xeb\u007f\xb2\xc9\u007f\xd6N\xebw\x05ױq\xa9=}$\xf5vz\xfb\xcf\x1a\xe3\xfb\x0f\xe6\xe9\xe9\x8f\xf1\x8ehy\xb1\xf91\xdf\xda\xce\xed\xf11x\xf7\xe7>\x10\x9f\xf3\xfb\x9f\xffM4\u007f\xb0\xddN\xf9\xa3vz\xfaÉ\u007f\xbd\xfe\x0f|\xaf\xaf\xd7\xd7\xdf\xfe\u007f\x02]>\xfdt\xf9\xb4-\x9f^\U000a77f6\xfc駗\xe5\xee\xcb\xdd\u007f\xd1\xcfY\xae\xb7\xe5Z\x97k[\xbe\u007f\xcbW\xfd\xc2\xff\x91w9\xda[\xcbv\xa4\xbfx+\xbd$I\x9a.隮\xc9\xd3o-wIw6iK\xdb[\xe99\x9d9\xe4\xfb\xe9/\xf1\xc6\xe4\xe9H\x8a7\xf0\xa7ho\xe9Ƴ%\xe3\x87\xfb}\xf1{\xfa\f\x9f\xe2\xcb\xf7GzN\x9a,]\xde\xfa\xbf~\xfc2\xdcƷ^\x8f\xbf\xbf\xe3\xff\xf5\xcd\xfa\xdb}\xce/{F\xfaYs\xfd\xab_\x82\x89\xa5\xff\xf9\v\xe7ů~uy\xe7\x9d\xf4N\xfa^\xfa^\xfa\xf5\xe57N\xe9\aˏN\xe9\xe3\xe5\x93\xd3\xf2\xf1\xaf\xe7\xdf\xf8\xe4\xb4|\xedk\xf9\x1b\xdf8\xa5\xaf-߈ߧ\x1f\xa4\x1f\xfd\x8c\x8b\x92\xbe\x92\xbe\x92\xbe\xfaV\xfa\xdd\xf4;\xe9\x9b\xe9W\xd2;\xe9\xd7\xd3o`<_\xbf\x9a~-\xfdf\xfa\xad\xf4N\xfaZ\xfaF\xfa\xfa[\xe9\xcf\xd3?J\xff8\xfd\xde\x17|\x18O\xbfD\x89\xe3\xc7ScJ\xff\x95\xf4\x0fӯr\uefd6\xfe\t\xbf\"\xbe\xd6W\xd2;\xe9\xab\xe9\xb7\xd3?M\xff,\xfd\xf3\xf4/ҿL\xff*\xfd\xeb\xf4oҿM\xff.\xfdN\xfa\xdd\xf4\xb5\xf4\xf5\xf4\x8d\xf4\xcd\xf4{\xe9ߧ\xff\x90\xdeM\xbf\x9f\xfec\xfa\x83\xf4\x87\xe9[\xe9\x8f\xd2\x1f\xa7\xf7\xd2\xfb\xe9?\xa5\x0fҟ\xa4\x0fӟ\xa6\xff\x9c>J\xdfN\xff%\xfd\xd7\xf4\x9d\xf4g\xe9M\xfan\xfa8\xfdy\xfa$\xfd\xb7\xf4\xbd\xf4\x17iKϩ\xa4\x97Tӧ\xe9\x9c$\xb5\xd4\x1f\xbb\xd5-\x8dd鿧\xcf\xd2=y\x9a\xe9\xfbiO\xff#\x1d\xe9/\xd3\x0f\xd2\x0fӏ~\x12\x1f\xe9\xab\xe9\xe3\xf4I\xfaJ\xfa\xcde\x1fiK-\xcdT\xd3X\x8em9\xe6r\x8c\xc5g\xfa\xad\xcf\xfd^\xb7EۢsѺ\xe8X\xee\xdbro\xcb}.\xf7\xba\xdc\xc7\xe2\xdb\xe2m\xf1\xb9x]|,\xb7m\xb9\xb5\xe56\x97[]nc\x91m\x91\xb6\xc8\\\xa4.2\x96\xeb\x86m\xf8:\xb9\x1f\u007f\xee/~\xb6-\x9f\xb5峹|V\x97\xcfƲo\xe9\x86\xeb\xf6V:/\xe7\xf3r\xbe\xa7\xdbr\xeb\xcbM\xd2\xcb\xf2\xf2\x92>[.\xe7\xe5r].\xcf\xcb\xe5\xbe\\|\xb9\xd8\xf2\x99\xa4kz^\x9e\x9f\x97\xe7;\xf6\xeb\xfb[\xa9/\xbd\xa7\x924y\xb2\xf4S\xbb~ږ\xad.ǖ\x8f\xad.u\xa4\xfa\xe3Σ\x8e\xe5\xc0\x97\u07b7\xbcou\x19\xf5'O\b#ͼױ\xecu\xd9\xdbr\xcc\x1f\xf7Թ\x1c-\xb5\x9fZ[\xbf\xfd\xee\xf2\xe1G\\\x06?\\\xde|}\xf9\xce\xd7\xf9w\u007f\x88\x9f\xf9\xfa\xd5\xf4'_v\x9d\xc6\xfdC(\xfe\xaf\x00\x00\x00\xff\xffky\xc4\xd8" diff --git a/vendor/github.com/gosimple/unidecode/table.txt b/vendor/github.com/gosimple/unidecode/table.txt deleted file mode 100644 index 9f5d59fe..00000000 --- a/vendor/github.com/gosimple/unidecode/table.txt +++ /dev/null @@ -1,46731 +0,0 @@ -/* x000 */ -0x0000: "\x00" -0x0001: "\x01" -0x0002: "\x02" -0x0003: "\x03" -0x0004: "\x04" -0x0005: "\x05" -0x0006: "\x06" -0x0007: "\x07" -0x0008: "\x08" -0x0009: "\t" -0x000a: "\n" -0x000b: "\x0b" -0x000c: "\x0c" -0x000d: "\r" -0x000e: "\x0e" -0x000f: "\x0f" -0x0010: "\x10" -0x0011: "\x11" -0x0012: "\x12" -0x0013: "\x13" -0x0014: "\x14" -0x0015: "\x15" -0x0016: "\x16" -0x0017: "\x17" -0x0018: "\x18" -0x0019: "\x19" -0x001a: "\x1a" -0x001b: "\x1b" -0x001c: "\x1c" -0x001d: "\x1d" -0x001e: "\x1e" -0x001f: "\x1f" -0x0020: " " -0x0021: "!" -0x0022: "\"" -0x0023: "#" -0x0024: "$" -0x0025: "%" -0x0026: "&" -0x0027: "'" -0x0028: "(" -0x0029: ")" -0x002a: "*" -0x002b: "+" -0x002c: "," -0x002d: "-" -0x002e: "." -0x002f: "/" -0x0030: "0" -0x0031: "1" -0x0032: "2" -0x0033: "3" -0x0034: "4" -0x0035: "5" -0x0036: "6" -0x0037: "7" -0x0038: "8" -0x0039: "9" -0x003a: ":" -0x003b: ";" -0x003c: "<" -0x003d: "=" -0x003e: ">" -0x003f: "?" -0x0040: "@" -0x0041: "A" -0x0042: "B" -0x0043: "C" -0x0044: "D" -0x0045: "E" -0x0046: "F" -0x0047: "G" -0x0048: "H" -0x0049: "I" -0x004a: "J" -0x004b: "K" -0x004c: "L" -0x004d: "M" -0x004e: "N" -0x004f: "O" -0x0050: "P" -0x0051: "Q" -0x0052: "R" -0x0053: "S" -0x0054: "T" -0x0055: "U" -0x0056: "V" -0x0057: "W" -0x0058: "X" -0x0059: "Y" -0x005a: "Z" -0x005b: "]" -0x005c: "\\" -0x005d: "]" -0x005e: "^" -0x005f: "_" -0x0060: "`" -0x0061: "a" -0x0062: "b" -0x0063: "c" -0x0064: "d" -0x0065: "e" -0x0066: "f" -0x0067: "g" -0x0068: "h" -0x0069: "i" -0x006a: "j" -0x006b: "k" -0x006c: "l" -0x006d: "m" -0x006e: "n" -0x006f: "o" -0x0070: "p" -0x0071: "q" -0x0072: "r" -0x0073: "s" -0x0074: "t" -0x0075: "u" -0x0076: "v" -0x0077: "w" -0x0078: "x" -0x0079: "y" -0x007a: "z" -0x007b: "{" -0x007c: "|" -0x007d: "}" -0x007e: "~" -0x007f: "\x7f" -0x0080: "" -0x0081: "" -0x0082: "" -0x0083: "" -0x0084: "" -0x0085: "" -0x0086: "" -0x0087: "" -0x0088: "" -0x0089: "" -0x008a: "" -0x008b: "" -0x008c: "" -0x008d: "" -0x008e: "" -0x008f: "" -0x0090: "" -0x0091: "" -0x0092: "" -0x0093: "" -0x0094: "" -0x0095: "" -0x0096: "" -0x0097: "" -0x0098: "" -0x0099: "" -0x009a: "" -0x009b: "" -0x009c: "" -0x009d: "" -0x009e: "" -0x009f: "" -0x00a0: " " -0x00a1: "!" -0x00a2: "C/" -0x00a3: "PS" -0x00a4: "$?" -0x00a5: "Y=" -0x00a6: "|" -0x00a7: "SS" -0x00a8: "\"" -0x00a9: "(c)" -0x00aa: "a" -0x00ab: "<<" -0x00ac: "!" -0x00ad: "" -0x00ae: "(r)" -0x00af: "-" -0x00b0: "deg" -0x00b1: "+-" -0x00b2: "2" -0x00b3: "3" -0x00b4: "'" -0x00b5: "u" -0x00b6: "P" -0x00b7: "*" -0x00b8: "," -0x00b9: "1" -0x00ba: "o" -0x00bb: ">>" -0x00bc: "1/4" -0x00bd: "1/2" -0x00be: "3/4" -0x00bf: "?" -0x00c0: "A" -0x00c1: "A" -0x00c2: "A" -0x00c3: "A" -0x00c4: "A" -0x00c5: "A" -0x00c6: "AE" -0x00c7: "C" -0x00c8: "E" -0x00c9: "E" -0x00ca: "E" -0x00cb: "E" -0x00cc: "I" -0x00cd: "I" -0x00ce: "I" -0x00cf: "I" -0x00d0: "D" -0x00d1: "N" -0x00d2: "O" -0x00d3: "O" -0x00d4: "O" -0x00d5: "O" -0x00d6: "O" -0x00d7: "x" -0x00d8: "O" -0x00d9: "U" -0x00da: "U" -0x00db: "U" -0x00dc: "U" -0x00dd: "Y" -0x00de: "Th" -0x00df: "ss" -0x00e0: "a" -0x00e1: "a" -0x00e2: "a" -0x00e3: "a" -0x00e4: "a" -0x00e5: "a" -0x00e6: "ae" -0x00e7: "c" -0x00e8: "e" -0x00e9: "e" -0x00ea: "e" -0x00eb: "e" -0x00ec: "i" -0x00ed: "i" -0x00ee: "i" -0x00ef: "i" -0x00f0: "d" -0x00f1: "n" -0x00f2: "o" -0x00f3: "o" -0x00f4: "o" -0x00f5: "o" -0x00f6: "o" -0x00f7: "/" -0x00f8: "o" -0x00f9: "u" -0x00fa: "u" -0x00fb: "u" -0x00fc: "u" -0x00fd: "y" -0x00fe: "th" -0x00ff: "y" -/* x001 */ -0x0100: "A" -0x0101: "a" -0x0102: "A" -0x0103: "a" -0x0104: "A" -0x0105: "a" -0x0106: "C" -0x0107: "c" -0x0108: "C" -0x0109: "c" -0x010a: "C" -0x010b: "c" -0x010c: "C" -0x010d: "c" -0x010e: "D" -0x010f: "d" -0x0110: "D" -0x0111: "d" -0x0112: "E" -0x0113: "e" -0x0114: "E" -0x0115: "e" -0x0116: "E" -0x0117: "e" -0x0118: "E" -0x0119: "e" -0x011a: "E" -0x011b: "e" -0x011c: "G" -0x011d: "g" -0x011e: "G" -0x011f: "g" -0x0120: "G" -0x0121: "g" -0x0122: "G" -0x0123: "g" -0x0124: "H" -0x0125: "h" -0x0126: "H" -0x0127: "h" -0x0128: "I" -0x0129: "i" -0x012a: "I" -0x012b: "i" -0x012c: "I" -0x012d: "i" -0x012e: "I" -0x012f: "i" -0x0130: "I" -0x0131: "i" -0x0132: "IJ" -0x0133: "ij" -0x0134: "J" -0x0135: "j" -0x0136: "K" -0x0137: "k" -0x0138: "k" -0x0139: "L" -0x013a: "l" -0x013b: "L" -0x013c: "l" -0x013d: "L" -0x013e: "l" -0x013f: "L" -0x0140: "l" -0x0141: "L" -0x0142: "l" -0x0143: "N" -0x0144: "n" -0x0145: "N" -0x0146: "n" -0x0147: "N" -0x0148: "n" -0x0149: "'n" -0x014a: "ng" -0x014b: "NG" -0x014c: "O" -0x014d: "o" -0x014e: "O" -0x014f: "o" -0x0150: "O" -0x0151: "o" -0x0152: "OE" -0x0153: "oe" -0x0154: "R" -0x0155: "r" -0x0156: "R" -0x0157: "r" -0x0158: "R" -0x0159: "r" -0x015a: "S" -0x015b: "s" -0x015c: "S" -0x015d: "s" -0x015e: "S" -0x015f: "s" -0x0160: "S" -0x0161: "s" -0x0162: "T" -0x0163: "t" -0x0164: "T" -0x0165: "t" -0x0166: "T" -0x0167: "t" -0x0168: "U" -0x0169: "u" -0x016a: "U" -0x016b: "u" -0x016c: "U" -0x016d: "u" -0x016e: "U" -0x016f: "u" -0x0170: "U" -0x0171: "u" -0x0172: "U" -0x0173: "u" -0x0174: "W" -0x0175: "w" -0x0176: "Y" -0x0177: "y" -0x0178: "Y" -0x0179: "Z" -0x017a: "z" -0x017b: "Z" -0x017c: "z" -0x017d: "Z" -0x017e: "z" -0x017f: "s" -0x0180: "b" -0x0181: "B" -0x0182: "B" -0x0183: "b" -0x0184: "6" -0x0185: "6" -0x0186: "O" -0x0187: "C" -0x0188: "c" -0x0189: "D" -0x018a: "D" -0x018b: "D" -0x018c: "d" -0x018d: "d" -0x018e: "3" -0x018f: "@" -0x0190: "E" -0x0191: "F" -0x0192: "f" -0x0193: "G" -0x0194: "G" -0x0195: "hv" -0x0196: "I" -0x0197: "I" -0x0198: "K" -0x0199: "k" -0x019a: "l" -0x019b: "l" -0x019c: "W" -0x019d: "N" -0x019e: "n" -0x019f: "O" -0x01a0: "O" -0x01a1: "o" -0x01a2: "OI" -0x01a3: "oi" -0x01a4: "P" -0x01a5: "p" -0x01a6: "YR" -0x01a7: "2" -0x01a8: "2" -0x01a9: "SH" -0x01aa: "sh" -0x01ab: "t" -0x01ac: "T" -0x01ad: "t" -0x01ae: "T" -0x01af: "U" -0x01b0: "u" -0x01b1: "Y" -0x01b2: "V" -0x01b3: "Y" -0x01b4: "y" -0x01b5: "Z" -0x01b6: "z" -0x01b7: "ZH" -0x01b8: "ZH" -0x01b9: "zh" -0x01ba: "zh" -0x01bb: "2" -0x01bc: "5" -0x01bd: "5" -0x01be: "ts" -0x01bf: "w" -0x01c0: "|" -0x01c1: "||" -0x01c2: "|=" -0x01c3: "!" -0x01c4: "DZ" -0x01c5: "Dz" -0x01c6: "dz" -0x01c7: "LJ" -0x01c8: "Lj" -0x01c9: "lj" -0x01ca: "NJ" -0x01cb: "Nj" -0x01cc: "nj" -0x01cd: "A" -0x01ce: "a" -0x01cf: "I" -0x01d0: "i" -0x01d1: "O" -0x01d2: "o" -0x01d3: "U" -0x01d4: "u" -0x01d5: "U" -0x01d6: "u" -0x01d7: "U" -0x01d8: "u" -0x01d9: "U" -0x01da: "u" -0x01db: "U" -0x01dc: "u" -0x01dd: "@" -0x01de: "A" -0x01df: "a" -0x01e0: "A" -0x01e1: "a" -0x01e2: "AE" -0x01e3: "ae" -0x01e4: "G" -0x01e5: "g" -0x01e6: "G" -0x01e7: "g" -0x01e8: "K" -0x01e9: "k" -0x01ea: "O" -0x01eb: "o" -0x01ec: "O" -0x01ed: "o" -0x01ee: "ZH" -0x01ef: "zh" -0x01f0: "j" -0x01f1: "DZ" -0x01f2: "Dz" -0x01f3: "dz" -0x01f4: "G" -0x01f5: "g" -0x01f6: "HV" -0x01f7: "W" -0x01f8: "N" -0x01f9: "n" -0x01fa: "A" -0x01fb: "a" -0x01fc: "AE" -0x01fd: "ae" -0x01fe: "O" -0x01ff: "o" -/* x002 */ -0x0200: "A" -0x0201: "a" -0x0202: "A" -0x0203: "a" -0x0204: "E" -0x0205: "e" -0x0206: "E" -0x0207: "e" -0x0208: "I" -0x0209: "i" -0x020a: "I" -0x020b: "i" -0x020c: "O" -0x020d: "o" -0x020e: "O" -0x020f: "o" -0x0210: "R" -0x0211: "r" -0x0212: "R" -0x0213: "r" -0x0214: "U" -0x0215: "u" -0x0216: "U" -0x0217: "u" -0x0218: "S" -0x0219: "s" -0x021a: "T" -0x021b: "t" -0x021c: "Y" -0x021d: "y" -0x021e: "H" -0x021f: "h" -0x0220: "N" -0x0221: "d" -0x0222: "OU" -0x0223: "ou" -0x0224: "Z" -0x0225: "z" -0x0226: "A" -0x0227: "a" -0x0228: "E" -0x0229: "e" -0x022a: "O" -0x022b: "o" -0x022c: "O" -0x022d: "o" -0x022e: "O" -0x022f: "o" -0x0230: "O" -0x0231: "o" -0x0232: "Y" -0x0233: "y" -0x0234: "l" -0x0235: "n" -0x0236: "t" -0x0237: "j" -0x0238: "db" -0x0239: "qp" -0x023a: "A" -0x023b: "C" -0x023c: "c" -0x023d: "L" -0x023e: "T" -0x023f: "s" -0x0240: "z" -0x0241: "[?]" -0x0242: "[?]" -0x0243: "B" -0x0244: "U" -0x0245: "^" -0x0246: "E" -0x0247: "e" -0x0248: "J" -0x0249: "j" -0x024a: "q" -0x024b: "q" -0x024c: "R" -0x024d: "r" -0x024e: "Y" -0x024f: "y" -0x0250: "a" -0x0251: "a" -0x0252: "a" -0x0253: "b" -0x0254: "o" -0x0255: "c" -0x0256: "d" -0x0257: "d" -0x0258: "e" -0x0259: "@" -0x025a: "@" -0x025b: "e" -0x025c: "e" -0x025d: "e" -0x025e: "e" -0x025f: "j" -0x0260: "g" -0x0261: "g" -0x0262: "g" -0x0263: "g" -0x0264: "u" -0x0265: "Y" -0x0266: "h" -0x0267: "h" -0x0268: "i" -0x0269: "i" -0x026a: "I" -0x026b: "l" -0x026c: "l" -0x026d: "l" -0x026e: "lZ" -0x026f: "W" -0x0270: "W" -0x0271: "m" -0x0272: "n" -0x0273: "n" -0x0274: "n" -0x0275: "o" -0x0276: "OE" -0x0277: "O" -0x0278: "F" -0x0279: "r" -0x027a: "r" -0x027b: "r" -0x027c: "r" -0x027d: "r" -0x027e: "r" -0x027f: "r" -0x0280: "R" -0x0281: "R" -0x0282: "s" -0x0283: "S" -0x0284: "j" -0x0285: "S" -0x0286: "S" -0x0287: "t" -0x0288: "t" -0x0289: "u" -0x028a: "U" -0x028b: "v" -0x028c: "^" -0x028d: "w" -0x028e: "y" -0x028f: "Y" -0x0290: "z" -0x0291: "z" -0x0292: "Z" -0x0293: "Z" -0x0294: "?" -0x0295: "?" -0x0296: "?" -0x0297: "C" -0x0298: "@" -0x0299: "B" -0x029a: "E" -0x029b: "G" -0x029c: "H" -0x029d: "j" -0x029e: "k" -0x029f: "L" -0x02a0: "q" -0x02a1: "?" -0x02a2: "?" -0x02a3: "dz" -0x02a4: "dZ" -0x02a5: "dz" -0x02a6: "ts" -0x02a7: "tS" -0x02a8: "tC" -0x02a9: "fN" -0x02aa: "ls" -0x02ab: "lz" -0x02ac: "WW" -0x02ad: "]]" -0x02ae: "h" -0x02af: "h" -0x02b0: "k" -0x02b1: "h" -0x02b2: "j" -0x02b3: "r" -0x02b4: "r" -0x02b5: "r" -0x02b6: "r" -0x02b7: "w" -0x02b8: "y" -0x02b9: "'" -0x02ba: "\"" -0x02bb: "`" -0x02bc: "'" -0x02bd: "`" -0x02be: "`" -0x02bf: "'" -0x02c0: "?" -0x02c1: "?" -0x02c2: "<" -0x02c3: ">" -0x02c4: "^" -0x02c5: "V" -0x02c6: "^" -0x02c7: "V" -0x02c8: "'" -0x02c9: "-" -0x02ca: "/" -0x02cb: "\\" -0x02cc: "," -0x02cd: "_" -0x02ce: "\\" -0x02cf: "/" -0x02d0: ":" -0x02d1: "." -0x02d2: "`" -0x02d3: "'" -0x02d4: "^" -0x02d5: "V" -0x02d6: "+" -0x02d7: "-" -0x02d8: "V" -0x02d9: "." -0x02da: "@" -0x02db: "," -0x02dc: "~" -0x02dd: "\"" -0x02de: "R" -0x02df: "X" -0x02e0: "G" -0x02e1: "l" -0x02e2: "s" -0x02e3: "x" -0x02e4: "?" -0x02e5: "" -0x02e6: "" -0x02e7: "" -0x02e8: "" -0x02e9: "" -0x02ea: "" -0x02eb: "" -0x02ec: "V" -0x02ed: "=" -0x02ee: "\"" -0x02ef: "[?]" -0x02f0: "[?]" -0x02f1: "[?]" -0x02f2: "[?]" -0x02f3: "[?]" -0x02f4: "[?]" -0x02f5: "[?]" -0x02f6: "[?]" -0x02f7: "[?]" -0x02f8: "[?]" -0x02f9: "[?]" -0x02fa: "[?]" -0x02fb: "[?]" -0x02fc: "[?]" -0x02fd: "[?]" -0x02fe: "[?]" -/* x003 */ -0x0300: "" -0x0301: "" -0x0302: "" -0x0303: "" -0x0304: "" -0x0305: "" -0x0306: "" -0x0307: "" -0x0308: "" -0x0309: "" -0x030a: "" -0x030b: "" -0x030c: "" -0x030d: "" -0x030e: "" -0x030f: "" -0x0310: "" -0x0311: "" -0x0312: "" -0x0313: "" -0x0314: "" -0x0315: "" -0x0316: "" -0x0317: "" -0x0318: "" -0x0319: "" -0x031a: "" -0x031b: "" -0x031c: "" -0x031d: "" -0x031e: "" -0x031f: "" -0x0320: "" -0x0321: "" -0x0322: "" -0x0323: "" -0x0324: "" -0x0325: "" -0x0326: "" -0x0327: "" -0x0328: "" -0x0329: "" -0x032a: "" -0x032b: "" -0x032c: "" -0x032d: "" -0x032e: "" -0x032f: "" -0x0330: "" -0x0331: "" -0x0332: "" -0x0333: "" -0x0334: "" -0x0335: "" -0x0336: "" -0x0337: "" -0x0338: "" -0x0339: "" -0x033a: "" -0x033b: "" -0x033c: "" -0x033d: "" -0x033e: "" -0x033f: "" -0x0340: "" -0x0341: "" -0x0342: "" -0x0343: "" -0x0344: "" -0x0345: "" -0x0346: "" -0x0347: "" -0x0348: "" -0x0349: "" -0x034a: "" -0x034b: "" -0x034c: "" -0x034d: "" -0x034e: "" -0x034f: "[?]" -0x0350: "[?]" -0x0351: "[?]" -0x0352: "[?]" -0x0353: "[?]" -0x0354: "[?]" -0x0355: "[?]" -0x0356: "[?]" -0x0357: "[?]" -0x0358: "[?]" -0x0359: "[?]" -0x035a: "[?]" -0x035b: "[?]" -0x035c: "[?]" -0x035d: "[?]" -0x035e: "[?]" -0x035f: "[?]" -0x0360: "" -0x0361: "" -0x0362: "" -0x0363: "a" -0x0364: "e" -0x0365: "i" -0x0366: "o" -0x0367: "u" -0x0368: "c" -0x0369: "d" -0x036a: "h" -0x036b: "m" -0x036c: "r" -0x036d: "t" -0x036e: "v" -0x036f: "x" -0x0370: "[?]" -0x0371: "[?]" -0x0372: "[?]" -0x0373: "[?]" -0x0374: "'" -0x0375: "," -0x0376: "[?]" -0x0377: "[?]" -0x0378: "[?]" -0x0379: "[?]" -0x037a: "" -0x037b: "[?]" -0x037c: "[?]" -0x037d: "[?]" -0x037e: "?" -0x037f: "[?]" -0x0380: "[?]" -0x0381: "[?]" -0x0382: "[?]" -0x0383: "[?]" -0x0384: "" -0x0385: "" -0x0386: "A" -0x0387: ";" -0x0388: "E" -0x0389: "E" -0x038a: "I" -0x038b: "[?]" -0x038c: "O" -0x038d: "[?]" -0x038e: "U" -0x038f: "O" -0x0390: "I" -0x0391: "A" -0x0392: "B" -0x0393: "G" -0x0394: "D" -0x0395: "E" -0x0396: "Z" -0x0397: "E" -0x0398: "Th" -0x0399: "I" -0x039a: "K" -0x039b: "L" -0x039c: "M" -0x039d: "N" -0x039e: "Ks" -0x039f: "O" -0x03a0: "P" -0x03a1: "R" -0x03a2: "[?]" -0x03a3: "S" -0x03a4: "T" -0x03a5: "U" -0x03a6: "Ph" -0x03a7: "Kh" -0x03a8: "Ps" -0x03a9: "O" -0x03aa: "I" -0x03ab: "U" -0x03ac: "a" -0x03ad: "e" -0x03ae: "e" -0x03af: "i" -0x03b0: "u" -0x03b1: "a" -0x03b2: "b" -0x03b3: "g" -0x03b4: "d" -0x03b5: "e" -0x03b6: "z" -0x03b7: "e" -0x03b8: "th" -0x03b9: "i" -0x03ba: "k" -0x03bb: "l" -0x03bc: "m" -0x03bd: "n" -0x03be: "x" -0x03bf: "o" -0x03c0: "p" -0x03c1: "r" -0x03c2: "s" -0x03c3: "s" -0x03c4: "t" -0x03c5: "u" -0x03c6: "ph" -0x03c7: "kh" -0x03c8: "ps" -0x03c9: "o" -0x03ca: "i" -0x03cb: "u" -0x03cc: "o" -0x03cd: "u" -0x03ce: "o" -0x03cf: "[?]" -0x03d0: "b" -0x03d1: "th" -0x03d2: "U" -0x03d3: "U" -0x03d4: "U" -0x03d5: "ph" -0x03d6: "p" -0x03d7: "&" -0x03d8: "[?]" -0x03d9: "[?]" -0x03da: "St" -0x03db: "st" -0x03dc: "W" -0x03dd: "w" -0x03de: "Q" -0x03df: "q" -0x03e0: "Sp" -0x03e1: "sp" -0x03e2: "Sh" -0x03e3: "sh" -0x03e4: "F" -0x03e5: "f" -0x03e6: "Kh" -0x03e7: "kh" -0x03e8: "H" -0x03e9: "h" -0x03ea: "G" -0x03eb: "g" -0x03ec: "CH" -0x03ed: "ch" -0x03ee: "Ti" -0x03ef: "ti" -0x03f0: "k" -0x03f1: "r" -0x03f2: "c" -0x03f3: "j" -0x03f4: "[?]" -0x03f5: "[?]" -0x03f6: "[?]" -0x03f7: "[?]" -0x03f8: "[?]" -0x03f9: "[?]" -0x03fa: "[?]" -0x03fb: "[?]" -0x03fc: "[?]" -0x03fd: "[?]" -0x03fe: "[?]" -/* x004 */ -0x0400: "Ie" -0x0401: "Io" -0x0402: "Dj" -0x0403: "Gj" -0x0404: "Ie" -0x0405: "Dz" -0x0406: "I" -0x0407: "Yi" -0x0408: "J" -0x0409: "Lj" -0x040a: "Nj" -0x040b: "Tsh" -0x040c: "Kj" -0x040d: "I" -0x040e: "U" -0x040f: "Dzh" -0x0410: "A" -0x0411: "B" -0x0412: "V" -0x0413: "G" -0x0414: "D" -0x0415: "E" -0x0416: "Zh" -0x0417: "Z" -0x0418: "I" -0x0419: "I" -0x041a: "K" -0x041b: "L" -0x041c: "M" -0x041d: "N" -0x041e: "O" -0x041f: "P" -0x0420: "R" -0x0421: "S" -0x0422: "T" -0x0423: "U" -0x0424: "F" -0x0425: "Kh" -0x0426: "Ts" -0x0427: "Ch" -0x0428: "Sh" -0x0429: "Shch" -0x042a: "'" -0x042b: "Y" -0x042c: "'" -0x042d: "E" -0x042e: "Iu" -0x042f: "Ia" -0x0430: "a" -0x0431: "b" -0x0432: "v" -0x0433: "g" -0x0434: "d" -0x0435: "e" -0x0436: "zh" -0x0437: "z" -0x0438: "i" -0x0439: "i" -0x043a: "k" -0x043b: "l" -0x043c: "m" -0x043d: "n" -0x043e: "o" -0x043f: "p" -0x0440: "r" -0x0441: "s" -0x0442: "t" -0x0443: "u" -0x0444: "f" -0x0445: "kh" -0x0446: "ts" -0x0447: "ch" -0x0448: "sh" -0x0449: "shch" -0x044a: "'" -0x044b: "y" -0x044c: "'" -0x044d: "e" -0x044e: "iu" -0x044f: "ia" -0x0450: "ie" -0x0451: "io" -0x0452: "dj" -0x0453: "gj" -0x0454: "ie" -0x0455: "dz" -0x0456: "i" -0x0457: "yi" -0x0458: "j" -0x0459: "lj" -0x045a: "nj" -0x045b: "tsh" -0x045c: "kj" -0x045d: "i" -0x045e: "u" -0x045f: "dzh" -0x0460: "O" -0x0461: "o" -0x0462: "E" -0x0463: "e" -0x0464: "Ie" -0x0465: "ie" -0x0466: "E" -0x0467: "e" -0x0468: "Ie" -0x0469: "ie" -0x046a: "O" -0x046b: "o" -0x046c: "Io" -0x046d: "io" -0x046e: "Ks" -0x046f: "ks" -0x0470: "Ps" -0x0471: "ps" -0x0472: "F" -0x0473: "f" -0x0474: "Y" -0x0475: "y" -0x0476: "Y" -0x0477: "y" -0x0478: "u" -0x0479: "u" -0x047a: "O" -0x047b: "o" -0x047c: "O" -0x047d: "o" -0x047e: "Ot" -0x047f: "ot" -0x0480: "Q" -0x0481: "q" -0x0482: "*1000*" -0x0483: "" -0x0484: "" -0x0485: "" -0x0486: "" -0x0487: "[?]" -0x0488: "*100.000*" -0x0489: "*1.000.000*" -0x048a: "[?]" -0x048b: "[?]" -0x048c: "\"" -0x048d: "\"" -0x048e: "R'" -0x048f: "r'" -0x0490: "G'" -0x0491: "g'" -0x0492: "G'" -0x0493: "g'" -0x0494: "G'" -0x0495: "g'" -0x0496: "Zh'" -0x0497: "zh'" -0x0498: "Z'" -0x0499: "z'" -0x049a: "K'" -0x049b: "k'" -0x049c: "K'" -0x049d: "k'" -0x049e: "K'" -0x049f: "k'" -0x04a0: "K'" -0x04a1: "k'" -0x04a2: "N'" -0x04a3: "n'" -0x04a4: "Ng" -0x04a5: "ng" -0x04a6: "P'" -0x04a7: "p'" -0x04a8: "Kh" -0x04a9: "kh" -0x04aa: "S'" -0x04ab: "s'" -0x04ac: "T'" -0x04ad: "t'" -0x04ae: "U" -0x04af: "u" -0x04b0: "U'" -0x04b1: "u'" -0x04b2: "Kh'" -0x04b3: "kh'" -0x04b4: "Tts" -0x04b5: "tts" -0x04b6: "Ch'" -0x04b7: "ch'" -0x04b8: "Ch'" -0x04b9: "ch'" -0x04ba: "H" -0x04bb: "h" -0x04bc: "Ch" -0x04bd: "ch" -0x04be: "Ch'" -0x04bf: "ch'" -0x04c0: "`" -0x04c1: "Zh" -0x04c2: "zh" -0x04c3: "K'" -0x04c4: "k'" -0x04c5: "[?]" -0x04c6: "[?]" -0x04c7: "N'" -0x04c8: "n'" -0x04c9: "[?]" -0x04ca: "[?]" -0x04cb: "Ch" -0x04cc: "ch" -0x04cd: "[?]" -0x04ce: "[?]" -0x04cf: "[?]" -0x04d0: "a" -0x04d1: "a" -0x04d2: "A" -0x04d3: "a" -0x04d4: "Ae" -0x04d5: "ae" -0x04d6: "Ie" -0x04d7: "ie" -0x04d8: "@" -0x04d9: "@" -0x04da: "@" -0x04db: "@" -0x04dc: "Zh" -0x04dd: "zh" -0x04de: "Z" -0x04df: "z" -0x04e0: "Dz" -0x04e1: "dz" -0x04e2: "I" -0x04e3: "i" -0x04e4: "I" -0x04e5: "i" -0x04e6: "O" -0x04e7: "o" -0x04e8: "O" -0x04e9: "o" -0x04ea: "O" -0x04eb: "o" -0x04ec: "E" -0x04ed: "e" -0x04ee: "U" -0x04ef: "u" -0x04f0: "U" -0x04f1: "u" -0x04f2: "U" -0x04f3: "u" -0x04f4: "Ch" -0x04f5: "ch" -0x04f6: "[?]" -0x04f7: "[?]" -0x04f8: "Y" -0x04f9: "y" -0x04fa: "[?]" -0x04fb: "[?]" -0x04fc: "[?]" -0x04fd: "[?]" -0x04fe: "[?]" -/* x005 */ -0x0500: "[?]" -0x0501: "[?]" -0x0502: "[?]" -0x0503: "[?]" -0x0504: "[?]" -0x0505: "[?]" -0x0506: "[?]" -0x0507: "[?]" -0x0508: "[?]" -0x0509: "[?]" -0x050a: "[?]" -0x050b: "[?]" -0x050c: "[?]" -0x050d: "[?]" -0x050e: "[?]" -0x050f: "[?]" -0x0510: "[?]" -0x0511: "[?]" -0x0512: "[?]" -0x0513: "[?]" -0x0514: "[?]" -0x0515: "[?]" -0x0516: "[?]" -0x0517: "[?]" -0x0518: "[?]" -0x0519: "[?]" -0x051a: "[?]" -0x051b: "[?]" -0x051c: "[?]" -0x051d: "[?]" -0x051e: "[?]" -0x051f: "[?]" -0x0520: "[?]" -0x0521: "[?]" -0x0522: "[?]" -0x0523: "[?]" -0x0524: "[?]" -0x0525: "[?]" -0x0526: "[?]" -0x0527: "[?]" -0x0528: "[?]" -0x0529: "[?]" -0x052a: "[?]" -0x052b: "[?]" -0x052c: "[?]" -0x052d: "[?]" -0x052e: "[?]" -0x052f: "[?]" -0x0530: "[?]" -0x0531: "A" -0x0532: "B" -0x0533: "G" -0x0534: "D" -0x0535: "E" -0x0536: "Z" -0x0537: "E" -0x0538: "E" -0x0539: "T`" -0x053a: "Zh" -0x053b: "I" -0x053c: "L" -0x053d: "Kh" -0x053e: "Ts" -0x053f: "K" -0x0540: "H" -0x0541: "Dz" -0x0542: "Gh" -0x0543: "Ch" -0x0544: "M" -0x0545: "Y" -0x0546: "N" -0x0547: "Sh" -0x0548: "O" -0x0549: "Ch`" -0x054a: "P" -0x054b: "J" -0x054c: "Rh" -0x054d: "S" -0x054e: "V" -0x054f: "T" -0x0550: "R" -0x0551: "Ts`" -0x0552: "W" -0x0553: "P`" -0x0554: "K`" -0x0555: "O" -0x0556: "F" -0x0557: "[?]" -0x0558: "[?]" -0x0559: "<" -0x055a: "'" -0x055b: "/" -0x055c: "!" -0x055d: "," -0x055e: "?" -0x055f: "." -0x0560: "[?]" -0x0561: "a" -0x0562: "b" -0x0563: "g" -0x0564: "d" -0x0565: "e" -0x0566: "z" -0x0567: "e" -0x0568: "e" -0x0569: "t`" -0x056a: "zh" -0x056b: "i" -0x056c: "l" -0x056d: "kh" -0x056e: "ts" -0x056f: "k" -0x0570: "h" -0x0571: "dz" -0x0572: "gh" -0x0573: "ch" -0x0574: "m" -0x0575: "y" -0x0576: "n" -0x0577: "sh" -0x0578: "o" -0x0579: "ch`" -0x057a: "p" -0x057b: "j" -0x057c: "rh" -0x057d: "s" -0x057e: "v" -0x057f: "t" -0x0580: "r" -0x0581: "ts`" -0x0582: "w" -0x0583: "p`" -0x0584: "k`" -0x0585: "o" -0x0586: "f" -0x0587: "ew" -0x0588: "[?]" -0x0589: "." -0x058a: "-" -0x058b: "[?]" -0x058c: "[?]" -0x058d: "[?]" -0x058e: "[?]" -0x058f: "[?]" -0x0590: "[?]" -0x0591: "" -0x0592: "" -0x0593: "" -0x0594: "" -0x0595: "" -0x0596: "" -0x0597: "" -0x0598: "" -0x0599: "" -0x059a: "" -0x059b: "" -0x059c: "" -0x059d: "" -0x059e: "" -0x059f: "" -0x05a0: "" -0x05a1: "" -0x05a2: "[?]" -0x05a3: "" -0x05a4: "" -0x05a5: "" -0x05a6: "" -0x05a7: "" -0x05a8: "" -0x05a9: "" -0x05aa: "" -0x05ab: "" -0x05ac: "" -0x05ad: "" -0x05ae: "" -0x05af: "" -0x05b0: "@" -0x05b1: "e" -0x05b2: "a" -0x05b3: "o" -0x05b4: "i" -0x05b5: "e" -0x05b6: "e" -0x05b7: "a" -0x05b8: "a" -0x05b9: "o" -0x05ba: "[?]" -0x05bb: "u" -0x05bc: "'" -0x05bd: "" -0x05be: "" -0x05bf: "" -0x05c0: "" -0x05c1: "" -0x05c2: "" -0x05c3: ":" -0x05c4: "" -0x05c5: "[?]" -0x05c6: "[?]" -0x05c7: "[?]" -0x05c8: "[?]" -0x05c9: "[?]" -0x05ca: "[?]" -0x05cb: "[?]" -0x05cc: "[?]" -0x05cd: "[?]" -0x05ce: "[?]" -0x05cf: "[?]" -0x05d0: "" -0x05d1: "b" -0x05d2: "g" -0x05d3: "d" -0x05d4: "h" -0x05d5: "v" -0x05d6: "z" -0x05d7: "kh" -0x05d8: "t" -0x05d9: "y" -0x05da: "k" -0x05db: "k" -0x05dc: "l" -0x05dd: "m" -0x05de: "m" -0x05df: "n" -0x05e0: "n" -0x05e1: "s" -0x05e2: "`" -0x05e3: "p" -0x05e4: "p" -0x05e5: "ts" -0x05e6: "ts" -0x05e7: "q" -0x05e8: "r" -0x05e9: "sh" -0x05ea: "t" -0x05eb: "[?]" -0x05ec: "[?]" -0x05ed: "[?]" -0x05ee: "[?]" -0x05ef: "[?]" -0x05f0: "V" -0x05f1: "oy" -0x05f2: "i" -0x05f3: "'" -0x05f4: "\"" -0x05f5: "[?]" -0x05f6: "[?]" -0x05f7: "[?]" -0x05f8: "[?]" -0x05f9: "[?]" -0x05fa: "[?]" -0x05fb: "[?]" -0x05fc: "[?]" -0x05fd: "[?]" -0x05fe: "[?]" -/* x006 */ -0x0600: "[?]" -0x0601: "[?]" -0x0602: "[?]" -0x0603: "[?]" -0x0604: "[?]" -0x0605: "[?]" -0x0606: "[?]" -0x0607: "[?]" -0x0608: "[?]" -0x0609: "[?]" -0x060a: "[?]" -0x060b: "[?]" -0x060c: "," -0x060d: "[?]" -0x060e: "[?]" -0x060f: "[?]" -0x0610: "[?]" -0x0611: "[?]" -0x0612: "[?]" -0x0613: "[?]" -0x0614: "[?]" -0x0615: "[?]" -0x0616: "[?]" -0x0617: "[?]" -0x0618: "[?]" -0x0619: "[?]" -0x061a: "[?]" -0x061b: ";" -0x061c: "[?]" -0x061d: "[?]" -0x061e: "[?]" -0x061f: "?" -0x0620: "[?]" -0x0621: "" -0x0622: "a" -0x0623: "'" -0x0624: "w'" -0x0625: "" -0x0626: "y'" -0x0627: "" -0x0628: "b" -0x0629: "@" -0x062a: "t" -0x062b: "th" -0x062c: "j" -0x062d: "H" -0x062e: "kh" -0x062f: "d" -0x0630: "dh" -0x0631: "r" -0x0632: "z" -0x0633: "s" -0x0634: "sh" -0x0635: "S" -0x0636: "D" -0x0637: "T" -0x0638: "Z" -0x0639: "`" -0x063a: "G" -0x063b: "[?]" -0x063c: "[?]" -0x063d: "[?]" -0x063e: "[?]" -0x063f: "[?]" -0x0640: "" -0x0641: "f" -0x0642: "q" -0x0643: "k" -0x0644: "l" -0x0645: "m" -0x0646: "n" -0x0647: "h" -0x0648: "w" -0x0649: "~" -0x064a: "y" -0x064b: "an" -0x064c: "un" -0x064d: "in" -0x064e: "a" -0x064f: "u" -0x0650: "i" -0x0651: "W" -0x0652: "" -0x0653: "" -0x0654: "'" -0x0655: "'" -0x0656: "[?]" -0x0657: "[?]" -0x0658: "[?]" -0x0659: "[?]" -0x065a: "[?]" -0x065b: "[?]" -0x065c: "[?]" -0x065d: "[?]" -0x065e: "[?]" -0x065f: "[?]" -0x0660: "0" -0x0661: "1" -0x0662: "2" -0x0663: "3" -0x0664: "4" -0x0665: "5" -0x0666: "6" -0x0667: "7" -0x0668: "8" -0x0669: "9" -0x066a: "%" -0x066b: "." -0x066c: "," -0x066d: "*" -0x066e: "[?]" -0x066f: "[?]" -0x0670: "" -0x0671: "'" -0x0672: "'" -0x0673: "'" -0x0674: "" -0x0675: "'" -0x0676: "'w" -0x0677: "'u" -0x0678: "'y" -0x0679: "tt" -0x067a: "tth" -0x067b: "b" -0x067c: "t" -0x067d: "T" -0x067e: "p" -0x067f: "th" -0x0680: "bh" -0x0681: "'h" -0x0682: "H" -0x0683: "ny" -0x0684: "dy" -0x0685: "H" -0x0686: "ch" -0x0687: "cch" -0x0688: "dd" -0x0689: "D" -0x068a: "D" -0x068b: "Dt" -0x068c: "dh" -0x068d: "ddh" -0x068e: "d" -0x068f: "D" -0x0690: "D" -0x0691: "rr" -0x0692: "R" -0x0693: "R" -0x0694: "R" -0x0695: "R" -0x0696: "R" -0x0697: "R" -0x0698: "j" -0x0699: "R" -0x069a: "S" -0x069b: "S" -0x069c: "S" -0x069d: "S" -0x069e: "S" -0x069f: "T" -0x06a0: "GH" -0x06a1: "F" -0x06a2: "F" -0x06a3: "F" -0x06a4: "v" -0x06a5: "f" -0x06a6: "ph" -0x06a7: "Q" -0x06a8: "Q" -0x06a9: "kh" -0x06aa: "k" -0x06ab: "K" -0x06ac: "K" -0x06ad: "ng" -0x06ae: "K" -0x06af: "g" -0x06b0: "G" -0x06b1: "N" -0x06b2: "G" -0x06b3: "G" -0x06b4: "G" -0x06b5: "L" -0x06b6: "L" -0x06b7: "L" -0x06b8: "L" -0x06b9: "N" -0x06ba: "N" -0x06bb: "N" -0x06bc: "N" -0x06bd: "N" -0x06be: "h" -0x06bf: "Ch" -0x06c0: "hy" -0x06c1: "h" -0x06c2: "H" -0x06c3: "@" -0x06c4: "W" -0x06c5: "oe" -0x06c6: "oe" -0x06c7: "u" -0x06c8: "yu" -0x06c9: "yu" -0x06ca: "W" -0x06cb: "v" -0x06cc: "y" -0x06cd: "Y" -0x06ce: "Y" -0x06cf: "W" -0x06d0: "" -0x06d1: "" -0x06d2: "y" -0x06d3: "y'" -0x06d4: "." -0x06d5: "ae" -0x06d6: "" -0x06d7: "" -0x06d8: "" -0x06d9: "" -0x06da: "" -0x06db: "" -0x06dc: "" -0x06dd: "@" -0x06de: "#" -0x06df: "" -0x06e0: "" -0x06e1: "" -0x06e2: "" -0x06e3: "" -0x06e4: "" -0x06e5: "" -0x06e6: "" -0x06e7: "" -0x06e8: "" -0x06e9: "^" -0x06ea: "" -0x06eb: "" -0x06ec: "" -0x06ed: "" -0x06ee: "[?]" -0x06ef: "[?]" -0x06f0: "0" -0x06f1: "1" -0x06f2: "2" -0x06f3: "3" -0x06f4: "4" -0x06f5: "5" -0x06f6: "6" -0x06f7: "7" -0x06f8: "8" -0x06f9: "9" -0x06fa: "Sh" -0x06fb: "D" -0x06fc: "Gh" -0x06fd: "&" -0x06fe: "+m" -/* x007 */ -0x0700: "//" -0x0701: "/" -0x0702: "," -0x0703: "!" -0x0704: "!" -0x0705: "-" -0x0706: "," -0x0707: "," -0x0708: ";" -0x0709: "?" -0x070a: "~" -0x070b: "{" -0x070c: "}" -0x070d: "*" -0x070e: "[?]" -0x070f: "" -0x0710: "'" -0x0711: "" -0x0712: "b" -0x0713: "g" -0x0714: "g" -0x0715: "d" -0x0716: "d" -0x0717: "h" -0x0718: "w" -0x0719: "z" -0x071a: "H" -0x071b: "t" -0x071c: "t" -0x071d: "y" -0x071e: "yh" -0x071f: "k" -0x0720: "l" -0x0721: "m" -0x0722: "n" -0x0723: "s" -0x0724: "s" -0x0725: "`" -0x0726: "p" -0x0727: "p" -0x0728: "S" -0x0729: "q" -0x072a: "r" -0x072b: "sh" -0x072c: "t" -0x072d: "[?]" -0x072e: "[?]" -0x072f: "[?]" -0x0730: "a" -0x0731: "a" -0x0732: "a" -0x0733: "A" -0x0734: "A" -0x0735: "A" -0x0736: "e" -0x0737: "e" -0x0738: "e" -0x0739: "E" -0x073a: "i" -0x073b: "i" -0x073c: "u" -0x073d: "u" -0x073e: "u" -0x073f: "o" -0x0740: "" -0x0741: "`" -0x0742: "'" -0x0743: "" -0x0744: "" -0x0745: "X" -0x0746: "Q" -0x0747: "@" -0x0748: "@" -0x0749: "|" -0x074a: "+" -0x074b: "[?]" -0x074c: "[?]" -0x074d: "[?]" -0x074e: "[?]" -0x074f: "[?]" -0x0750: "[?]" -0x0751: "[?]" -0x0752: "[?]" -0x0753: "[?]" -0x0754: "[?]" -0x0755: "[?]" -0x0756: "[?]" -0x0757: "[?]" -0x0758: "[?]" -0x0759: "[?]" -0x075a: "[?]" -0x075b: "[?]" -0x075c: "[?]" -0x075d: "[?]" -0x075e: "[?]" -0x075f: "[?]" -0x0760: "[?]" -0x0761: "[?]" -0x0762: "[?]" -0x0763: "[?]" -0x0764: "[?]" -0x0765: "[?]" -0x0766: "[?]" -0x0767: "[?]" -0x0768: "[?]" -0x0769: "[?]" -0x076a: "[?]" -0x076b: "[?]" -0x076c: "[?]" -0x076d: "[?]" -0x076e: "[?]" -0x076f: "[?]" -0x0770: "[?]" -0x0771: "[?]" -0x0772: "[?]" -0x0773: "[?]" -0x0774: "[?]" -0x0775: "[?]" -0x0776: "[?]" -0x0777: "[?]" -0x0778: "[?]" -0x0779: "[?]" -0x077a: "[?]" -0x077b: "[?]" -0x077c: "[?]" -0x077d: "[?]" -0x077e: "[?]" -0x077f: "[?]" -0x0780: "h" -0x0781: "sh" -0x0782: "n" -0x0783: "r" -0x0784: "b" -0x0785: "L" -0x0786: "k" -0x0787: "'" -0x0788: "v" -0x0789: "m" -0x078a: "f" -0x078b: "dh" -0x078c: "th" -0x078d: "l" -0x078e: "g" -0x078f: "ny" -0x0790: "s" -0x0791: "d" -0x0792: "z" -0x0793: "t" -0x0794: "y" -0x0795: "p" -0x0796: "j" -0x0797: "ch" -0x0798: "tt" -0x0799: "hh" -0x079a: "kh" -0x079b: "th" -0x079c: "z" -0x079d: "sh" -0x079e: "s" -0x079f: "d" -0x07a0: "t" -0x07a1: "z" -0x07a2: "`" -0x07a3: "gh" -0x07a4: "q" -0x07a5: "w" -0x07a6: "a" -0x07a7: "aa" -0x07a8: "i" -0x07a9: "ee" -0x07aa: "u" -0x07ab: "oo" -0x07ac: "e" -0x07ad: "ey" -0x07ae: "o" -0x07af: "oa" -0x07b0: "" -0x07b1: "[?]" -0x07b2: "[?]" -0x07b3: "[?]" -0x07b4: "[?]" -0x07b5: "[?]" -0x07b6: "[?]" -0x07b7: "[?]" -0x07b8: "[?]" -0x07b9: "[?]" -0x07ba: "[?]" -0x07bb: "[?]" -0x07bc: "[?]" -0x07bd: "[?]" -0x07be: "[?]" -0x07bf: "[?]" -0x07c0: "[?]" -0x07c1: "[?]" -0x07c2: "[?]" -0x07c3: "[?]" -0x07c4: "[?]" -0x07c5: "[?]" -0x07c6: "[?]" -0x07c7: "[?]" -0x07c8: "[?]" -0x07c9: "[?]" -0x07ca: "[?]" -0x07cb: "[?]" -0x07cc: "[?]" -0x07cd: "[?]" -0x07ce: "[?]" -0x07cf: "[?]" -0x07d0: "[?]" -0x07d1: "[?]" -0x07d2: "[?]" -0x07d3: "[?]" -0x07d4: "[?]" -0x07d5: "[?]" -0x07d6: "[?]" -0x07d7: "[?]" -0x07d8: "[?]" -0x07d9: "[?]" -0x07da: "[?]" -0x07db: "[?]" -0x07dc: "[?]" -0x07dd: "[?]" -0x07de: "[?]" -0x07df: "[?]" -0x07e0: "[?]" -0x07e1: "[?]" -0x07e2: "[?]" -0x07e3: "[?]" -0x07e4: "[?]" -0x07e5: "[?]" -0x07e6: "[?]" -0x07e7: "[?]" -0x07e8: "[?]" -0x07e9: "[?]" -0x07ea: "[?]" -0x07eb: "[?]" -0x07ec: "[?]" -0x07ed: "[?]" -0x07ee: "[?]" -0x07ef: "[?]" -0x07f0: "[?]" -0x07f1: "[?]" -0x07f2: "[?]" -0x07f3: "[?]" -0x07f4: "[?]" -0x07f5: "[?]" -0x07f6: "[?]" -0x07f7: "[?]" -0x07f8: "[?]" -0x07f9: "[?]" -0x07fa: "[?]" -0x07fb: "[?]" -0x07fc: "[?]" -0x07fd: "[?]" -0x07fe: "[?]" -/* x009 */ -0x0900: "[?]" -0x0901: "N" -0x0902: "N" -0x0903: "H" -0x0904: "[?]" -0x0905: "a" -0x0906: "aa" -0x0907: "i" -0x0908: "ii" -0x0909: "u" -0x090a: "uu" -0x090b: "R" -0x090c: "L" -0x090d: "eN" -0x090e: "e" -0x090f: "e" -0x0910: "ai" -0x0911: "oN" -0x0912: "o" -0x0913: "o" -0x0914: "au" -0x0915: "k" -0x0916: "kh" -0x0917: "g" -0x0918: "gh" -0x0919: "ng" -0x091a: "c" -0x091b: "ch" -0x091c: "j" -0x091d: "jh" -0x091e: "ny" -0x091f: "tt" -0x0920: "tth" -0x0921: "dd" -0x0922: "ddh" -0x0923: "nn" -0x0924: "t" -0x0925: "th" -0x0926: "d" -0x0927: "dh" -0x0928: "n" -0x0929: "nnn" -0x092a: "p" -0x092b: "ph" -0x092c: "b" -0x092d: "bh" -0x092e: "m" -0x092f: "y" -0x0930: "r" -0x0931: "rr" -0x0932: "l" -0x0933: "l" -0x0934: "lll" -0x0935: "v" -0x0936: "sh" -0x0937: "ss" -0x0938: "s" -0x0939: "h" -0x093a: "[?]" -0x093b: "[?]" -0x093c: "'" -0x093d: "'" -0x093e: "aa" -0x093f: "i" -0x0940: "ii" -0x0941: "u" -0x0942: "uu" -0x0943: "R" -0x0944: "RR" -0x0945: "eN" -0x0946: "e" -0x0947: "e" -0x0948: "ai" -0x0949: "oN" -0x094a: "o" -0x094b: "o" -0x094c: "au" -0x094d: "" -0x094e: "[?]" -0x094f: "[?]" -0x0950: "AUM" -0x0951: "'" -0x0952: "'" -0x0953: "`" -0x0954: "'" -0x0955: "[?]" -0x0956: "[?]" -0x0957: "[?]" -0x0958: "q" -0x0959: "khh" -0x095a: "ghh" -0x095b: "z" -0x095c: "dddh" -0x095d: "rh" -0x095e: "f" -0x095f: "yy" -0x0960: "RR" -0x0961: "LL" -0x0962: "L" -0x0963: "LL" -0x0964: " / " -0x0965: " // " -0x0966: "0" -0x0967: "1" -0x0968: "2" -0x0969: "3" -0x096a: "4" -0x096b: "5" -0x096c: "6" -0x096d: "7" -0x096e: "8" -0x096f: "9" -0x0970: "." -0x0971: "[?]" -0x0972: "[?]" -0x0973: "[?]" -0x0974: "[?]" -0x0975: "[?]" -0x0976: "[?]" -0x0977: "[?]" -0x0978: "[?]" -0x0979: "[?]" -0x097a: "[?]" -0x097b: "[?]" -0x097c: "[?]" -0x097d: "[?]" -0x097e: "[?]" -0x097f: "[?]" -0x0980: "[?]" -0x0981: "N" -0x0982: "N" -0x0983: "H" -0x0984: "[?]" -0x0985: "a" -0x0986: "aa" -0x0987: "i" -0x0988: "ii" -0x0989: "u" -0x098a: "uu" -0x098b: "R" -0x098c: "RR" -0x098d: "[?]" -0x098e: "[?]" -0x098f: "e" -0x0990: "ai" -0x0991: "[?]" -0x0992: "[?]" -0x0993: "o" -0x0994: "au" -0x0995: "k" -0x0996: "kh" -0x0997: "g" -0x0998: "gh" -0x0999: "ng" -0x099a: "c" -0x099b: "ch" -0x099c: "j" -0x099d: "jh" -0x099e: "ny" -0x099f: "tt" -0x09a0: "tth" -0x09a1: "dd" -0x09a2: "ddh" -0x09a3: "nn" -0x09a4: "t" -0x09a5: "th" -0x09a6: "d" -0x09a7: "dh" -0x09a8: "n" -0x09a9: "[?]" -0x09aa: "p" -0x09ab: "ph" -0x09ac: "b" -0x09ad: "bh" -0x09ae: "m" -0x09af: "y" -0x09b0: "r" -0x09b1: "[?]" -0x09b2: "l" -0x09b3: "[?]" -0x09b4: "[?]" -0x09b5: "[?]" -0x09b6: "sh" -0x09b7: "ss" -0x09b8: "s" -0x09b9: "h" -0x09ba: "[?]" -0x09bb: "[?]" -0x09bc: "'" -0x09bd: "[?]" -0x09be: "aa" -0x09bf: "i" -0x09c0: "ii" -0x09c1: "u" -0x09c2: "uu" -0x09c3: "R" -0x09c4: "RR" -0x09c5: "[?]" -0x09c6: "[?]" -0x09c7: "e" -0x09c8: "ai" -0x09c9: "[?]" -0x09ca: "[?]" -0x09cb: "o" -0x09cc: "au" -0x09cd: "" -0x09ce: "[?]" -0x09cf: "[?]" -0x09d0: "[?]" -0x09d1: "[?]" -0x09d2: "[?]" -0x09d3: "[?]" -0x09d4: "[?]" -0x09d5: "[?]" -0x09d6: "[?]" -0x09d7: "+" -0x09d8: "[?]" -0x09d9: "[?]" -0x09da: "[?]" -0x09db: "[?]" -0x09dc: "rr" -0x09dd: "rh" -0x09de: "[?]" -0x09df: "yy" -0x09e0: "RR" -0x09e1: "LL" -0x09e2: "L" -0x09e3: "LL" -0x09e4: "[?]" -0x09e5: "[?]" -0x09e6: "0" -0x09e7: "1" -0x09e8: "2" -0x09e9: "3" -0x09ea: "4" -0x09eb: "5" -0x09ec: "6" -0x09ed: "7" -0x09ee: "8" -0x09ef: "9" -0x09f0: "r'" -0x09f1: "r`" -0x09f2: "Rs" -0x09f3: "Rs" -0x09f4: "1/" -0x09f5: "2/" -0x09f6: "3/" -0x09f7: "4/" -0x09f8: " 1 - 1/" -0x09f9: "/16" -0x09fa: "" -0x09fb: "[?]" -0x09fc: "[?]" -0x09fd: "[?]" -0x09fe: "[?]" -/* x00a */ -0x0a00: "[?]" -0x0a01: "[?]" -0x0a02: "N" -0x0a03: "[?]" -0x0a04: "[?]" -0x0a05: "a" -0x0a06: "aa" -0x0a07: "i" -0x0a08: "ii" -0x0a09: "u" -0x0a0a: "uu" -0x0a0b: "[?]" -0x0a0c: "[?]" -0x0a0d: "[?]" -0x0a0e: "[?]" -0x0a0f: "ee" -0x0a10: "ai" -0x0a11: "[?]" -0x0a12: "[?]" -0x0a13: "oo" -0x0a14: "au" -0x0a15: "k" -0x0a16: "kh" -0x0a17: "g" -0x0a18: "gh" -0x0a19: "ng" -0x0a1a: "c" -0x0a1b: "ch" -0x0a1c: "j" -0x0a1d: "jh" -0x0a1e: "ny" -0x0a1f: "tt" -0x0a20: "tth" -0x0a21: "dd" -0x0a22: "ddh" -0x0a23: "nn" -0x0a24: "t" -0x0a25: "th" -0x0a26: "d" -0x0a27: "dh" -0x0a28: "n" -0x0a29: "[?]" -0x0a2a: "p" -0x0a2b: "ph" -0x0a2c: "b" -0x0a2d: "bb" -0x0a2e: "m" -0x0a2f: "y" -0x0a30: "r" -0x0a31: "[?]" -0x0a32: "l" -0x0a33: "ll" -0x0a34: "[?]" -0x0a35: "v" -0x0a36: "sh" -0x0a37: "[?]" -0x0a38: "s" -0x0a39: "h" -0x0a3a: "[?]" -0x0a3b: "[?]" -0x0a3c: "'" -0x0a3d: "[?]" -0x0a3e: "aa" -0x0a3f: "i" -0x0a40: "ii" -0x0a41: "u" -0x0a42: "uu" -0x0a43: "[?]" -0x0a44: "[?]" -0x0a45: "[?]" -0x0a46: "[?]" -0x0a47: "ee" -0x0a48: "ai" -0x0a49: "[?]" -0x0a4a: "[?]" -0x0a4b: "oo" -0x0a4c: "au" -0x0a4d: "" -0x0a4e: "[?]" -0x0a4f: "[?]" -0x0a50: "[?]" -0x0a51: "[?]" -0x0a52: "[?]" -0x0a53: "[?]" -0x0a54: "[?]" -0x0a55: "[?]" -0x0a56: "[?]" -0x0a57: "[?]" -0x0a58: "[?]" -0x0a59: "khh" -0x0a5a: "ghh" -0x0a5b: "z" -0x0a5c: "rr" -0x0a5d: "[?]" -0x0a5e: "f" -0x0a5f: "[?]" -0x0a60: "[?]" -0x0a61: "[?]" -0x0a62: "[?]" -0x0a63: "[?]" -0x0a64: "[?]" -0x0a65: "[?]" -0x0a66: "0" -0x0a67: "1" -0x0a68: "2" -0x0a69: "3" -0x0a6a: "4" -0x0a6b: "5" -0x0a6c: "6" -0x0a6d: "7" -0x0a6e: "8" -0x0a6f: "9" -0x0a70: "N" -0x0a71: "H" -0x0a72: "" -0x0a73: "" -0x0a74: "G.E.O." -0x0a75: "[?]" -0x0a76: "[?]" -0x0a77: "[?]" -0x0a78: "[?]" -0x0a79: "[?]" -0x0a7a: "[?]" -0x0a7b: "[?]" -0x0a7c: "[?]" -0x0a7d: "[?]" -0x0a7e: "[?]" -0x0a7f: "[?]" -0x0a80: "[?]" -0x0a81: "N" -0x0a82: "N" -0x0a83: "H" -0x0a84: "[?]" -0x0a85: "a" -0x0a86: "aa" -0x0a87: "i" -0x0a88: "ii" -0x0a89: "u" -0x0a8a: "uu" -0x0a8b: "R" -0x0a8c: "[?]" -0x0a8d: "eN" -0x0a8e: "[?]" -0x0a8f: "e" -0x0a90: "ai" -0x0a91: "oN" -0x0a92: "[?]" -0x0a93: "o" -0x0a94: "au" -0x0a95: "k" -0x0a96: "kh" -0x0a97: "g" -0x0a98: "gh" -0x0a99: "ng" -0x0a9a: "c" -0x0a9b: "ch" -0x0a9c: "j" -0x0a9d: "jh" -0x0a9e: "ny" -0x0a9f: "tt" -0x0aa0: "tth" -0x0aa1: "dd" -0x0aa2: "ddh" -0x0aa3: "nn" -0x0aa4: "t" -0x0aa5: "th" -0x0aa6: "d" -0x0aa7: "dh" -0x0aa8: "n" -0x0aa9: "[?]" -0x0aaa: "p" -0x0aab: "ph" -0x0aac: "b" -0x0aad: "bh" -0x0aae: "m" -0x0aaf: "ya" -0x0ab0: "r" -0x0ab1: "[?]" -0x0ab2: "l" -0x0ab3: "ll" -0x0ab4: "[?]" -0x0ab5: "v" -0x0ab6: "sh" -0x0ab7: "ss" -0x0ab8: "s" -0x0ab9: "h" -0x0aba: "[?]" -0x0abb: "[?]" -0x0abc: "'" -0x0abd: "'" -0x0abe: "aa" -0x0abf: "i" -0x0ac0: "ii" -0x0ac1: "u" -0x0ac2: "uu" -0x0ac3: "R" -0x0ac4: "RR" -0x0ac5: "eN" -0x0ac6: "[?]" -0x0ac7: "e" -0x0ac8: "ai" -0x0ac9: "oN" -0x0aca: "[?]" -0x0acb: "o" -0x0acc: "au" -0x0acd: "" -0x0ace: "[?]" -0x0acf: "[?]" -0x0ad0: "AUM" -0x0ad1: "[?]" -0x0ad2: "[?]" -0x0ad3: "[?]" -0x0ad4: "[?]" -0x0ad5: "[?]" -0x0ad6: "[?]" -0x0ad7: "[?]" -0x0ad8: "[?]" -0x0ad9: "[?]" -0x0ada: "[?]" -0x0adb: "[?]" -0x0adc: "[?]" -0x0add: "[?]" -0x0ade: "[?]" -0x0adf: "[?]" -0x0ae0: "RR" -0x0ae1: "[?]" -0x0ae2: "[?]" -0x0ae3: "[?]" -0x0ae4: "[?]" -0x0ae5: "[?]" -0x0ae6: "0" -0x0ae7: "1" -0x0ae8: "2" -0x0ae9: "3" -0x0aea: "4" -0x0aeb: "5" -0x0aec: "6" -0x0aed: "7" -0x0aee: "8" -0x0aef: "9" -0x0af0: "[?]" -0x0af1: "[?]" -0x0af2: "[?]" -0x0af3: "[?]" -0x0af4: "[?]" -0x0af5: "[?]" -0x0af6: "[?]" -0x0af7: "[?]" -0x0af8: "[?]" -0x0af9: "[?]" -0x0afa: "[?]" -0x0afb: "[?]" -0x0afc: "[?]" -0x0afd: "[?]" -0x0afe: "[?]" -/* x00b */ -0x0b00: "[?]" -0x0b01: "N" -0x0b02: "N" -0x0b03: "H" -0x0b04: "[?]" -0x0b05: "a" -0x0b06: "aa" -0x0b07: "i" -0x0b08: "ii" -0x0b09: "u" -0x0b0a: "uu" -0x0b0b: "R" -0x0b0c: "L" -0x0b0d: "[?]" -0x0b0e: "[?]" -0x0b0f: "e" -0x0b10: "ai" -0x0b11: "[?]" -0x0b12: "[?]" -0x0b13: "o" -0x0b14: "au" -0x0b15: "k" -0x0b16: "kh" -0x0b17: "g" -0x0b18: "gh" -0x0b19: "ng" -0x0b1a: "c" -0x0b1b: "ch" -0x0b1c: "j" -0x0b1d: "jh" -0x0b1e: "ny" -0x0b1f: "tt" -0x0b20: "tth" -0x0b21: "dd" -0x0b22: "ddh" -0x0b23: "nn" -0x0b24: "t" -0x0b25: "th" -0x0b26: "d" -0x0b27: "dh" -0x0b28: "n" -0x0b29: "[?]" -0x0b2a: "p" -0x0b2b: "ph" -0x0b2c: "b" -0x0b2d: "bh" -0x0b2e: "m" -0x0b2f: "y" -0x0b30: "r" -0x0b31: "[?]" -0x0b32: "l" -0x0b33: "ll" -0x0b34: "[?]" -0x0b35: "" -0x0b36: "sh" -0x0b37: "ss" -0x0b38: "s" -0x0b39: "h" -0x0b3a: "[?]" -0x0b3b: "[?]" -0x0b3c: "'" -0x0b3d: "'" -0x0b3e: "aa" -0x0b3f: "i" -0x0b40: "ii" -0x0b41: "u" -0x0b42: "uu" -0x0b43: "R" -0x0b44: "[?]" -0x0b45: "[?]" -0x0b46: "[?]" -0x0b47: "e" -0x0b48: "ai" -0x0b49: "[?]" -0x0b4a: "[?]" -0x0b4b: "o" -0x0b4c: "au" -0x0b4d: "" -0x0b4e: "[?]" -0x0b4f: "[?]" -0x0b50: "[?]" -0x0b51: "[?]" -0x0b52: "[?]" -0x0b53: "[?]" -0x0b54: "[?]" -0x0b55: "[?]" -0x0b56: "+" -0x0b57: "+" -0x0b58: "[?]" -0x0b59: "[?]" -0x0b5a: "[?]" -0x0b5b: "[?]" -0x0b5c: "rr" -0x0b5d: "rh" -0x0b5e: "[?]" -0x0b5f: "yy" -0x0b60: "RR" -0x0b61: "LL" -0x0b62: "[?]" -0x0b63: "[?]" -0x0b64: "[?]" -0x0b65: "[?]" -0x0b66: "0" -0x0b67: "1" -0x0b68: "2" -0x0b69: "3" -0x0b6a: "4" -0x0b6b: "5" -0x0b6c: "6" -0x0b6d: "7" -0x0b6e: "8" -0x0b6f: "9" -0x0b70: "" -0x0b71: "[?]" -0x0b72: "[?]" -0x0b73: "[?]" -0x0b74: "[?]" -0x0b75: "[?]" -0x0b76: "[?]" -0x0b77: "[?]" -0x0b78: "[?]" -0x0b79: "[?]" -0x0b7a: "[?]" -0x0b7b: "[?]" -0x0b7c: "[?]" -0x0b7d: "[?]" -0x0b7e: "[?]" -0x0b7f: "[?]" -0x0b80: "[?]" -0x0b81: "[?]" -0x0b82: "N" -0x0b83: "H" -0x0b84: "[?]" -0x0b85: "a" -0x0b86: "aa" -0x0b87: "i" -0x0b88: "ii" -0x0b89: "u" -0x0b8a: "uu" -0x0b8b: "[?]" -0x0b8c: "[?]" -0x0b8d: "[?]" -0x0b8e: "e" -0x0b8f: "ee" -0x0b90: "ai" -0x0b91: "[?]" -0x0b92: "o" -0x0b93: "oo" -0x0b94: "au" -0x0b95: "k" -0x0b96: "[?]" -0x0b97: "[?]" -0x0b98: "[?]" -0x0b99: "ng" -0x0b9a: "c" -0x0b9b: "[?]" -0x0b9c: "j" -0x0b9d: "[?]" -0x0b9e: "ny" -0x0b9f: "tt" -0x0ba0: "[?]" -0x0ba1: "[?]" -0x0ba2: "[?]" -0x0ba3: "nn" -0x0ba4: "t" -0x0ba5: "[?]" -0x0ba6: "[?]" -0x0ba7: "[?]" -0x0ba8: "n" -0x0ba9: "nnn" -0x0baa: "p" -0x0bab: "[?]" -0x0bac: "[?]" -0x0bad: "[?]" -0x0bae: "m" -0x0baf: "y" -0x0bb0: "r" -0x0bb1: "rr" -0x0bb2: "l" -0x0bb3: "ll" -0x0bb4: "lll" -0x0bb5: "v" -0x0bb6: "[?]" -0x0bb7: "ss" -0x0bb8: "s" -0x0bb9: "h" -0x0bba: "[?]" -0x0bbb: "[?]" -0x0bbc: "[?]" -0x0bbd: "[?]" -0x0bbe: "aa" -0x0bbf: "i" -0x0bc0: "ii" -0x0bc1: "u" -0x0bc2: "uu" -0x0bc3: "[?]" -0x0bc4: "[?]" -0x0bc5: "[?]" -0x0bc6: "e" -0x0bc7: "ee" -0x0bc8: "ai" -0x0bc9: "[?]" -0x0bca: "o" -0x0bcb: "oo" -0x0bcc: "au" -0x0bcd: "" -0x0bce: "[?]" -0x0bcf: "[?]" -0x0bd0: "[?]" -0x0bd1: "[?]" -0x0bd2: "[?]" -0x0bd3: "[?]" -0x0bd4: "[?]" -0x0bd5: "[?]" -0x0bd6: "[?]" -0x0bd7: "+" -0x0bd8: "[?]" -0x0bd9: "[?]" -0x0bda: "[?]" -0x0bdb: "[?]" -0x0bdc: "[?]" -0x0bdd: "[?]" -0x0bde: "[?]" -0x0bdf: "[?]" -0x0be0: "[?]" -0x0be1: "[?]" -0x0be2: "[?]" -0x0be3: "[?]" -0x0be4: "[?]" -0x0be5: "[?]" -0x0be6: "0" -0x0be7: "1" -0x0be8: "2" -0x0be9: "3" -0x0bea: "4" -0x0beb: "5" -0x0bec: "6" -0x0bed: "7" -0x0bee: "8" -0x0bef: "9" -0x0bf0: "+10+" -0x0bf1: "+100+" -0x0bf2: "+1000+" -0x0bf3: "[?]" -0x0bf4: "[?]" -0x0bf5: "[?]" -0x0bf6: "[?]" -0x0bf7: "[?]" -0x0bf8: "[?]" -0x0bf9: "[?]" -0x0bfa: "[?]" -0x0bfb: "[?]" -0x0bfc: "[?]" -0x0bfd: "[?]" -0x0bfe: "[?]" -/* x00c */ -0x0c00: "[?]" -0x0c01: "N" -0x0c02: "N" -0x0c03: "H" -0x0c04: "[?]" -0x0c05: "a" -0x0c06: "aa" -0x0c07: "i" -0x0c08: "ii" -0x0c09: "u" -0x0c0a: "uu" -0x0c0b: "R" -0x0c0c: "L" -0x0c0d: "[?]" -0x0c0e: "e" -0x0c0f: "ee" -0x0c10: "ai" -0x0c11: "[?]" -0x0c12: "o" -0x0c13: "oo" -0x0c14: "au" -0x0c15: "k" -0x0c16: "kh" -0x0c17: "g" -0x0c18: "gh" -0x0c19: "ng" -0x0c1a: "c" -0x0c1b: "ch" -0x0c1c: "j" -0x0c1d: "jh" -0x0c1e: "ny" -0x0c1f: "tt" -0x0c20: "tth" -0x0c21: "dd" -0x0c22: "ddh" -0x0c23: "nn" -0x0c24: "t" -0x0c25: "th" -0x0c26: "d" -0x0c27: "dh" -0x0c28: "n" -0x0c29: "[?]" -0x0c2a: "p" -0x0c2b: "ph" -0x0c2c: "b" -0x0c2d: "bh" -0x0c2e: "m" -0x0c2f: "y" -0x0c30: "r" -0x0c31: "rr" -0x0c32: "l" -0x0c33: "ll" -0x0c34: "[?]" -0x0c35: "v" -0x0c36: "sh" -0x0c37: "ss" -0x0c38: "s" -0x0c39: "h" -0x0c3a: "[?]" -0x0c3b: "[?]" -0x0c3c: "[?]" -0x0c3d: "[?]" -0x0c3e: "aa" -0x0c3f: "i" -0x0c40: "ii" -0x0c41: "u" -0x0c42: "uu" -0x0c43: "R" -0x0c44: "RR" -0x0c45: "[?]" -0x0c46: "e" -0x0c47: "ee" -0x0c48: "ai" -0x0c49: "[?]" -0x0c4a: "o" -0x0c4b: "oo" -0x0c4c: "au" -0x0c4d: "" -0x0c4e: "[?]" -0x0c4f: "[?]" -0x0c50: "[?]" -0x0c51: "[?]" -0x0c52: "[?]" -0x0c53: "[?]" -0x0c54: "[?]" -0x0c55: "+" -0x0c56: "+" -0x0c57: "[?]" -0x0c58: "[?]" -0x0c59: "[?]" -0x0c5a: "[?]" -0x0c5b: "[?]" -0x0c5c: "[?]" -0x0c5d: "[?]" -0x0c5e: "[?]" -0x0c5f: "[?]" -0x0c60: "RR" -0x0c61: "LL" -0x0c62: "[?]" -0x0c63: "[?]" -0x0c64: "[?]" -0x0c65: "[?]" -0x0c66: "0" -0x0c67: "1" -0x0c68: "2" -0x0c69: "3" -0x0c6a: "4" -0x0c6b: "5" -0x0c6c: "6" -0x0c6d: "7" -0x0c6e: "8" -0x0c6f: "9" -0x0c70: "[?]" -0x0c71: "[?]" -0x0c72: "[?]" -0x0c73: "[?]" -0x0c74: "[?]" -0x0c75: "[?]" -0x0c76: "[?]" -0x0c77: "[?]" -0x0c78: "[?]" -0x0c79: "[?]" -0x0c7a: "[?]" -0x0c7b: "[?]" -0x0c7c: "[?]" -0x0c7d: "[?]" -0x0c7e: "[?]" -0x0c7f: "[?]" -0x0c80: "[?]" -0x0c81: "[?]" -0x0c82: "N" -0x0c83: "H" -0x0c84: "[?]" -0x0c85: "a" -0x0c86: "aa" -0x0c87: "i" -0x0c88: "ii" -0x0c89: "u" -0x0c8a: "uu" -0x0c8b: "R" -0x0c8c: "L" -0x0c8d: "[?]" -0x0c8e: "e" -0x0c8f: "ee" -0x0c90: "ai" -0x0c91: "[?]" -0x0c92: "o" -0x0c93: "oo" -0x0c94: "au" -0x0c95: "k" -0x0c96: "kh" -0x0c97: "g" -0x0c98: "gh" -0x0c99: "ng" -0x0c9a: "c" -0x0c9b: "ch" -0x0c9c: "j" -0x0c9d: "jh" -0x0c9e: "ny" -0x0c9f: "tt" -0x0ca0: "tth" -0x0ca1: "dd" -0x0ca2: "ddh" -0x0ca3: "nn" -0x0ca4: "t" -0x0ca5: "th" -0x0ca6: "d" -0x0ca7: "dh" -0x0ca8: "n" -0x0ca9: "[?]" -0x0caa: "p" -0x0cab: "ph" -0x0cac: "b" -0x0cad: "bh" -0x0cae: "m" -0x0caf: "y" -0x0cb0: "r" -0x0cb1: "rr" -0x0cb2: "l" -0x0cb3: "ll" -0x0cb4: "[?]" -0x0cb5: "v" -0x0cb6: "sh" -0x0cb7: "ss" -0x0cb8: "s" -0x0cb9: "h" -0x0cba: "[?]" -0x0cbb: "[?]" -0x0cbc: "[?]" -0x0cbd: "[?]" -0x0cbe: "aa" -0x0cbf: "i" -0x0cc0: "ii" -0x0cc1: "u" -0x0cc2: "uu" -0x0cc3: "R" -0x0cc4: "RR" -0x0cc5: "[?]" -0x0cc6: "e" -0x0cc7: "ee" -0x0cc8: "ai" -0x0cc9: "[?]" -0x0cca: "o" -0x0ccb: "oo" -0x0ccc: "au" -0x0ccd: "" -0x0cce: "[?]" -0x0ccf: "[?]" -0x0cd0: "[?]" -0x0cd1: "[?]" -0x0cd2: "[?]" -0x0cd3: "[?]" -0x0cd4: "[?]" -0x0cd5: "+" -0x0cd6: "+" -0x0cd7: "[?]" -0x0cd8: "[?]" -0x0cd9: "[?]" -0x0cda: "[?]" -0x0cdb: "[?]" -0x0cdc: "[?]" -0x0cdd: "[?]" -0x0cde: "lll" -0x0cdf: "[?]" -0x0ce0: "RR" -0x0ce1: "LL" -0x0ce2: "[?]" -0x0ce3: "[?]" -0x0ce4: "[?]" -0x0ce5: "[?]" -0x0ce6: "0" -0x0ce7: "1" -0x0ce8: "2" -0x0ce9: "3" -0x0cea: "4" -0x0ceb: "5" -0x0cec: "6" -0x0ced: "7" -0x0cee: "8" -0x0cef: "9" -0x0cf0: "[?]" -0x0cf1: "[?]" -0x0cf2: "[?]" -0x0cf3: "[?]" -0x0cf4: "[?]" -0x0cf5: "[?]" -0x0cf6: "[?]" -0x0cf7: "[?]" -0x0cf8: "[?]" -0x0cf9: "[?]" -0x0cfa: "[?]" -0x0cfb: "[?]" -0x0cfc: "[?]" -0x0cfd: "[?]" -0x0cfe: "[?]" -/* x00d */ -0x0d00: "[?]" -0x0d01: "[?]" -0x0d02: "N" -0x0d03: "H" -0x0d04: "[?]" -0x0d05: "a" -0x0d06: "aa" -0x0d07: "i" -0x0d08: "ii" -0x0d09: "u" -0x0d0a: "uu" -0x0d0b: "R" -0x0d0c: "L" -0x0d0d: "[?]" -0x0d0e: "e" -0x0d0f: "ee" -0x0d10: "ai" -0x0d11: "[?]" -0x0d12: "o" -0x0d13: "oo" -0x0d14: "au" -0x0d15: "k" -0x0d16: "kh" -0x0d17: "g" -0x0d18: "gh" -0x0d19: "ng" -0x0d1a: "c" -0x0d1b: "ch" -0x0d1c: "j" -0x0d1d: "jh" -0x0d1e: "ny" -0x0d1f: "tt" -0x0d20: "tth" -0x0d21: "dd" -0x0d22: "ddh" -0x0d23: "nn" -0x0d24: "t" -0x0d25: "th" -0x0d26: "d" -0x0d27: "dh" -0x0d28: "n" -0x0d29: "[?]" -0x0d2a: "p" -0x0d2b: "ph" -0x0d2c: "b" -0x0d2d: "bh" -0x0d2e: "m" -0x0d2f: "y" -0x0d30: "r" -0x0d31: "rr" -0x0d32: "l" -0x0d33: "ll" -0x0d34: "lll" -0x0d35: "v" -0x0d36: "sh" -0x0d37: "ss" -0x0d38: "s" -0x0d39: "h" -0x0d3a: "[?]" -0x0d3b: "[?]" -0x0d3c: "[?]" -0x0d3d: "[?]" -0x0d3e: "aa" -0x0d3f: "i" -0x0d40: "ii" -0x0d41: "u" -0x0d42: "uu" -0x0d43: "R" -0x0d44: "[?]" -0x0d45: "[?]" -0x0d46: "e" -0x0d47: "ee" -0x0d48: "ai" -0x0d49: "" -0x0d4a: "o" -0x0d4b: "oo" -0x0d4c: "au" -0x0d4d: "" -0x0d4e: "[?]" -0x0d4f: "[?]" -0x0d50: "[?]" -0x0d51: "[?]" -0x0d52: "[?]" -0x0d53: "[?]" -0x0d54: "[?]" -0x0d55: "[?]" -0x0d56: "[?]" -0x0d57: "+" -0x0d58: "[?]" -0x0d59: "[?]" -0x0d5a: "[?]" -0x0d5b: "[?]" -0x0d5c: "[?]" -0x0d5d: "[?]" -0x0d5e: "[?]" -0x0d5f: "[?]" -0x0d60: "RR" -0x0d61: "LL" -0x0d62: "[?]" -0x0d63: "[?]" -0x0d64: "[?]" -0x0d65: "[?]" -0x0d66: "0" -0x0d67: "1" -0x0d68: "2" -0x0d69: "3" -0x0d6a: "4" -0x0d6b: "5" -0x0d6c: "6" -0x0d6d: "7" -0x0d6e: "8" -0x0d6f: "9" -0x0d70: "[?]" -0x0d71: "[?]" -0x0d72: "[?]" -0x0d73: "[?]" -0x0d74: "[?]" -0x0d75: "[?]" -0x0d76: "[?]" -0x0d77: "[?]" -0x0d78: "[?]" -0x0d79: "[?]" -0x0d7a: "[?]" -0x0d7b: "[?]" -0x0d7c: "[?]" -0x0d7d: "[?]" -0x0d7e: "[?]" -0x0d7f: "[?]" -0x0d80: "[?]" -0x0d81: "[?]" -0x0d82: "N" -0x0d83: "H" -0x0d84: "[?]" -0x0d85: "a" -0x0d86: "aa" -0x0d87: "ae" -0x0d88: "aae" -0x0d89: "i" -0x0d8a: "ii" -0x0d8b: "u" -0x0d8c: "uu" -0x0d8d: "R" -0x0d8e: "RR" -0x0d8f: "L" -0x0d90: "LL" -0x0d91: "e" -0x0d92: "ee" -0x0d93: "ai" -0x0d94: "o" -0x0d95: "oo" -0x0d96: "au" -0x0d97: "[?]" -0x0d98: "[?]" -0x0d99: "[?]" -0x0d9a: "k" -0x0d9b: "kh" -0x0d9c: "g" -0x0d9d: "gh" -0x0d9e: "ng" -0x0d9f: "nng" -0x0da0: "c" -0x0da1: "ch" -0x0da2: "j" -0x0da3: "jh" -0x0da4: "ny" -0x0da5: "jny" -0x0da6: "nyj" -0x0da7: "tt" -0x0da8: "tth" -0x0da9: "dd" -0x0daa: "ddh" -0x0dab: "nn" -0x0dac: "nndd" -0x0dad: "t" -0x0dae: "th" -0x0daf: "d" -0x0db0: "dh" -0x0db1: "n" -0x0db2: "[?]" -0x0db3: "nd" -0x0db4: "p" -0x0db5: "ph" -0x0db6: "b" -0x0db7: "bh" -0x0db8: "m" -0x0db9: "mb" -0x0dba: "y" -0x0dbb: "r" -0x0dbc: "[?]" -0x0dbd: "l" -0x0dbe: "[?]" -0x0dbf: "[?]" -0x0dc0: "v" -0x0dc1: "sh" -0x0dc2: "ss" -0x0dc3: "s" -0x0dc4: "h" -0x0dc5: "ll" -0x0dc6: "f" -0x0dc7: "[?]" -0x0dc8: "[?]" -0x0dc9: "[?]" -0x0dca: "" -0x0dcb: "[?]" -0x0dcc: "[?]" -0x0dcd: "[?]" -0x0dce: "[?]" -0x0dcf: "aa" -0x0dd0: "ae" -0x0dd1: "aae" -0x0dd2: "i" -0x0dd3: "ii" -0x0dd4: "u" -0x0dd5: "[?]" -0x0dd6: "uu" -0x0dd7: "[?]" -0x0dd8: "R" -0x0dd9: "e" -0x0dda: "ee" -0x0ddb: "ai" -0x0ddc: "o" -0x0ddd: "oo" -0x0dde: "au" -0x0ddf: "L" -0x0de0: "[?]" -0x0de1: "[?]" -0x0de2: "[?]" -0x0de3: "[?]" -0x0de4: "[?]" -0x0de5: "[?]" -0x0de6: "[?]" -0x0de7: "[?]" -0x0de8: "[?]" -0x0de9: "[?]" -0x0dea: "[?]" -0x0deb: "[?]" -0x0dec: "[?]" -0x0ded: "[?]" -0x0dee: "[?]" -0x0def: "[?]" -0x0df0: "[?]" -0x0df1: "[?]" -0x0df2: "RR" -0x0df3: "LL" -0x0df4: " . " -0x0df5: "[?]" -0x0df6: "[?]" -0x0df7: "[?]" -0x0df8: "[?]" -0x0df9: "[?]" -0x0dfa: "[?]" -0x0dfb: "[?]" -0x0dfc: "[?]" -0x0dfd: "[?]" -0x0dfe: "[?]" -/* x00e */ -0x0e00: "[?]" -0x0e01: "k" -0x0e02: "kh" -0x0e03: "kh" -0x0e04: "kh" -0x0e05: "kh" -0x0e06: "kh" -0x0e07: "ng" -0x0e08: "cch" -0x0e09: "ch" -0x0e0a: "ch" -0x0e0b: "ch" -0x0e0c: "ch" -0x0e0d: "y" -0x0e0e: "d" -0x0e0f: "t" -0x0e10: "th" -0x0e11: "th" -0x0e12: "th" -0x0e13: "n" -0x0e14: "d" -0x0e15: "t" -0x0e16: "th" -0x0e17: "th" -0x0e18: "th" -0x0e19: "n" -0x0e1a: "b" -0x0e1b: "p" -0x0e1c: "ph" -0x0e1d: "f" -0x0e1e: "ph" -0x0e1f: "f" -0x0e20: "ph" -0x0e21: "m" -0x0e22: "y" -0x0e23: "r" -0x0e24: "R" -0x0e25: "l" -0x0e26: "L" -0x0e27: "w" -0x0e28: "s" -0x0e29: "s" -0x0e2a: "s" -0x0e2b: "h" -0x0e2c: "l" -0x0e2d: "`" -0x0e2e: "h" -0x0e2f: "~" -0x0e30: "a" -0x0e31: "a" -0x0e32: "aa" -0x0e33: "am" -0x0e34: "i" -0x0e35: "ii" -0x0e36: "ue" -0x0e37: "uue" -0x0e38: "u" -0x0e39: "uu" -0x0e3a: "'" -0x0e3b: "[?]" -0x0e3c: "[?]" -0x0e3d: "[?]" -0x0e3e: "[?]" -0x0e3f: "Bh." -0x0e40: "e" -0x0e41: "ae" -0x0e42: "o" -0x0e43: "ai" -0x0e44: "ai" -0x0e45: "ao" -0x0e46: "+" -0x0e47: "" -0x0e48: "" -0x0e49: "" -0x0e4a: "" -0x0e4b: "" -0x0e4c: "" -0x0e4d: "M" -0x0e4e: "" -0x0e4f: " * " -0x0e50: "0" -0x0e51: "1" -0x0e52: "2" -0x0e53: "3" -0x0e54: "4" -0x0e55: "5" -0x0e56: "6" -0x0e57: "7" -0x0e58: "8" -0x0e59: "9" -0x0e5a: " // " -0x0e5b: " /// " -0x0e5c: "[?]" -0x0e5d: "[?]" -0x0e5e: "[?]" -0x0e5f: "[?]" -0x0e60: "[?]" -0x0e61: "[?]" -0x0e62: "[?]" -0x0e63: "[?]" -0x0e64: "[?]" -0x0e65: "[?]" -0x0e66: "[?]" -0x0e67: "[?]" -0x0e68: "[?]" -0x0e69: "[?]" -0x0e6a: "[?]" -0x0e6b: "[?]" -0x0e6c: "[?]" -0x0e6d: "[?]" -0x0e6e: "[?]" -0x0e6f: "[?]" -0x0e70: "[?]" -0x0e71: "[?]" -0x0e72: "[?]" -0x0e73: "[?]" -0x0e74: "[?]" -0x0e75: "[?]" -0x0e76: "[?]" -0x0e77: "[?]" -0x0e78: "[?]" -0x0e79: "[?]" -0x0e7a: "[?]" -0x0e7b: "[?]" -0x0e7c: "[?]" -0x0e7d: "[?]" -0x0e7e: "[?]" -0x0e7f: "[?]" -0x0e80: "[?]" -0x0e81: "k" -0x0e82: "kh" -0x0e83: "[?]" -0x0e84: "kh" -0x0e85: "[?]" -0x0e86: "[?]" -0x0e87: "ng" -0x0e88: "ch" -0x0e89: "[?]" -0x0e8a: "s" -0x0e8b: "[?]" -0x0e8c: "[?]" -0x0e8d: "ny" -0x0e8e: "[?]" -0x0e8f: "[?]" -0x0e90: "[?]" -0x0e91: "[?]" -0x0e92: "[?]" -0x0e93: "[?]" -0x0e94: "d" -0x0e95: "h" -0x0e96: "th" -0x0e97: "th" -0x0e98: "[?]" -0x0e99: "n" -0x0e9a: "b" -0x0e9b: "p" -0x0e9c: "ph" -0x0e9d: "f" -0x0e9e: "ph" -0x0e9f: "f" -0x0ea0: "[?]" -0x0ea1: "m" -0x0ea2: "y" -0x0ea3: "r" -0x0ea4: "[?]" -0x0ea5: "l" -0x0ea6: "[?]" -0x0ea7: "w" -0x0ea8: "[?]" -0x0ea9: "[?]" -0x0eaa: "s" -0x0eab: "h" -0x0eac: "[?]" -0x0ead: "`" -0x0eae: "" -0x0eaf: "~" -0x0eb0: "a" -0x0eb1: "" -0x0eb2: "aa" -0x0eb3: "am" -0x0eb4: "i" -0x0eb5: "ii" -0x0eb6: "y" -0x0eb7: "yy" -0x0eb8: "u" -0x0eb9: "uu" -0x0eba: "[?]" -0x0ebb: "o" -0x0ebc: "l" -0x0ebd: "ny" -0x0ebe: "[?]" -0x0ebf: "[?]" -0x0ec0: "e" -0x0ec1: "ei" -0x0ec2: "o" -0x0ec3: "ay" -0x0ec4: "ai" -0x0ec5: "[?]" -0x0ec6: "+" -0x0ec7: "[?]" -0x0ec8: "" -0x0ec9: "" -0x0eca: "" -0x0ecb: "" -0x0ecc: "" -0x0ecd: "M" -0x0ece: "[?]" -0x0ecf: "[?]" -0x0ed0: "0" -0x0ed1: "1" -0x0ed2: "2" -0x0ed3: "3" -0x0ed4: "4" -0x0ed5: "5" -0x0ed6: "6" -0x0ed7: "7" -0x0ed8: "8" -0x0ed9: "9" -0x0eda: "[?]" -0x0edb: "[?]" -0x0edc: "hn" -0x0edd: "hm" -0x0ede: "[?]" -0x0edf: "[?]" -0x0ee0: "[?]" -0x0ee1: "[?]" -0x0ee2: "[?]" -0x0ee3: "[?]" -0x0ee4: "[?]" -0x0ee5: "[?]" -0x0ee6: "[?]" -0x0ee7: "[?]" -0x0ee8: "[?]" -0x0ee9: "[?]" -0x0eea: "[?]" -0x0eeb: "[?]" -0x0eec: "[?]" -0x0eed: "[?]" -0x0eee: "[?]" -0x0eef: "[?]" -0x0ef0: "[?]" -0x0ef1: "[?]" -0x0ef2: "[?]" -0x0ef3: "[?]" -0x0ef4: "[?]" -0x0ef5: "[?]" -0x0ef6: "[?]" -0x0ef7: "[?]" -0x0ef8: "[?]" -0x0ef9: "[?]" -0x0efa: "[?]" -0x0efb: "[?]" -0x0efc: "[?]" -0x0efd: "[?]" -0x0efe: "[?]" -/* x00f */ -0x0f00: "AUM" -0x0f01: "" -0x0f02: "" -0x0f03: "" -0x0f04: "" -0x0f05: "" -0x0f06: "" -0x0f07: "" -0x0f08: " // " -0x0f09: " * " -0x0f0a: "" -0x0f0b: "-" -0x0f0c: " / " -0x0f0d: " / " -0x0f0e: " // " -0x0f0f: " -/ " -0x0f10: " +/ " -0x0f11: " X/ " -0x0f12: " /XX/ " -0x0f13: " /X/ " -0x0f14: ", " -0x0f15: "" -0x0f16: "" -0x0f17: "" -0x0f18: "" -0x0f19: "" -0x0f1a: "" -0x0f1b: "" -0x0f1c: "" -0x0f1d: "" -0x0f1e: "" -0x0f1f: "" -0x0f20: "0" -0x0f21: "1" -0x0f22: "2" -0x0f23: "3" -0x0f24: "4" -0x0f25: "5" -0x0f26: "6" -0x0f27: "7" -0x0f28: "8" -0x0f29: "9" -0x0f2a: ".5" -0x0f2b: "1.5" -0x0f2c: "2.5" -0x0f2d: "3.5" -0x0f2e: "4.5" -0x0f2f: "5.5" -0x0f30: "6.5" -0x0f31: "7.5" -0x0f32: "8.5" -0x0f33: "-.5" -0x0f34: "+" -0x0f35: "*" -0x0f36: "^" -0x0f37: "_" -0x0f38: "" -0x0f39: "~" -0x0f3a: "[?]" -0x0f3b: "]" -0x0f3c: "[[" -0x0f3d: "]]" -0x0f3e: "" -0x0f3f: "" -0x0f40: "k" -0x0f41: "kh" -0x0f42: "g" -0x0f43: "gh" -0x0f44: "ng" -0x0f45: "c" -0x0f46: "ch" -0x0f47: "j" -0x0f48: "[?]" -0x0f49: "ny" -0x0f4a: "tt" -0x0f4b: "tth" -0x0f4c: "dd" -0x0f4d: "ddh" -0x0f4e: "nn" -0x0f4f: "t" -0x0f50: "th" -0x0f51: "d" -0x0f52: "dh" -0x0f53: "n" -0x0f54: "p" -0x0f55: "ph" -0x0f56: "b" -0x0f57: "bh" -0x0f58: "m" -0x0f59: "ts" -0x0f5a: "tsh" -0x0f5b: "dz" -0x0f5c: "dzh" -0x0f5d: "w" -0x0f5e: "zh" -0x0f5f: "z" -0x0f60: "'" -0x0f61: "y" -0x0f62: "r" -0x0f63: "l" -0x0f64: "sh" -0x0f65: "ssh" -0x0f66: "s" -0x0f67: "h" -0x0f68: "a" -0x0f69: "kss" -0x0f6a: "r" -0x0f6b: "[?]" -0x0f6c: "[?]" -0x0f6d: "[?]" -0x0f6e: "[?]" -0x0f6f: "[?]" -0x0f70: "[?]" -0x0f71: "aa" -0x0f72: "i" -0x0f73: "ii" -0x0f74: "u" -0x0f75: "uu" -0x0f76: "R" -0x0f77: "RR" -0x0f78: "L" -0x0f79: "LL" -0x0f7a: "e" -0x0f7b: "ee" -0x0f7c: "o" -0x0f7d: "oo" -0x0f7e: "M" -0x0f7f: "H" -0x0f80: "i" -0x0f81: "ii" -0x0f82: "" -0x0f83: "" -0x0f84: "" -0x0f85: "" -0x0f86: "" -0x0f87: "" -0x0f88: "" -0x0f89: "" -0x0f8a: "" -0x0f8b: "" -0x0f8c: "[?]" -0x0f8d: "[?]" -0x0f8e: "[?]" -0x0f8f: "[?]" -0x0f90: "k" -0x0f91: "kh" -0x0f92: "g" -0x0f93: "gh" -0x0f94: "ng" -0x0f95: "c" -0x0f96: "ch" -0x0f97: "j" -0x0f98: "[?]" -0x0f99: "ny" -0x0f9a: "tt" -0x0f9b: "tth" -0x0f9c: "dd" -0x0f9d: "ddh" -0x0f9e: "nn" -0x0f9f: "t" -0x0fa0: "th" -0x0fa1: "d" -0x0fa2: "dh" -0x0fa3: "n" -0x0fa4: "p" -0x0fa5: "ph" -0x0fa6: "b" -0x0fa7: "bh" -0x0fa8: "m" -0x0fa9: "ts" -0x0faa: "tsh" -0x0fab: "dz" -0x0fac: "dzh" -0x0fad: "w" -0x0fae: "zh" -0x0faf: "z" -0x0fb0: "'" -0x0fb1: "y" -0x0fb2: "r" -0x0fb3: "l" -0x0fb4: "sh" -0x0fb5: "ss" -0x0fb6: "s" -0x0fb7: "h" -0x0fb8: "a" -0x0fb9: "kss" -0x0fba: "w" -0x0fbb: "y" -0x0fbc: "r" -0x0fbd: "[?]" -0x0fbe: "X" -0x0fbf: " :X: " -0x0fc0: " /O/ " -0x0fc1: " /o/ " -0x0fc2: " \\o\\ " -0x0fc3: " (O) " -0x0fc4: "" -0x0fc5: "" -0x0fc6: "" -0x0fc7: "" -0x0fc8: "" -0x0fc9: "" -0x0fca: "" -0x0fcb: "" -0x0fcc: "" -0x0fcd: "[?]" -0x0fce: "[?]" -0x0fcf: "" -0x0fd0: "[?]" -0x0fd1: "[?]" -0x0fd2: "[?]" -0x0fd3: "[?]" -0x0fd4: "[?]" -0x0fd5: "[?]" -0x0fd6: "[?]" -0x0fd7: "[?]" -0x0fd8: "[?]" -0x0fd9: "[?]" -0x0fda: "[?]" -0x0fdb: "[?]" -0x0fdc: "[?]" -0x0fdd: "[?]" -0x0fde: "[?]" -0x0fdf: "[?]" -0x0fe0: "[?]" -0x0fe1: "[?]" -0x0fe2: "[?]" -0x0fe3: "[?]" -0x0fe4: "[?]" -0x0fe5: "[?]" -0x0fe6: "[?]" -0x0fe7: "[?]" -0x0fe8: "[?]" -0x0fe9: "[?]" -0x0fea: "[?]" -0x0feb: "[?]" -0x0fec: "[?]" -0x0fed: "[?]" -0x0fee: "[?]" -0x0fef: "[?]" -0x0ff0: "[?]" -0x0ff1: "[?]" -0x0ff2: "[?]" -0x0ff3: "[?]" -0x0ff4: "[?]" -0x0ff5: "[?]" -0x0ff6: "[?]" -0x0ff7: "[?]" -0x0ff8: "[?]" -0x0ff9: "[?]" -0x0ffa: "[?]" -0x0ffb: "[?]" -0x0ffc: "[?]" -0x0ffd: "[?]" -0x0ffe: "[?]" -/* x010 */ -0x1000: "k" -0x1001: "kh" -0x1002: "g" -0x1003: "gh" -0x1004: "ng" -0x1005: "c" -0x1006: "ch" -0x1007: "j" -0x1008: "jh" -0x1009: "ny" -0x100a: "nny" -0x100b: "tt" -0x100c: "tth" -0x100d: "dd" -0x100e: "ddh" -0x100f: "nn" -0x1010: "tt" -0x1011: "th" -0x1012: "d" -0x1013: "dh" -0x1014: "n" -0x1015: "p" -0x1016: "ph" -0x1017: "b" -0x1018: "bh" -0x1019: "m" -0x101a: "y" -0x101b: "r" -0x101c: "l" -0x101d: "w" -0x101e: "s" -0x101f: "h" -0x1020: "ll" -0x1021: "a" -0x1022: "[?]" -0x1023: "i" -0x1024: "ii" -0x1025: "u" -0x1026: "uu" -0x1027: "e" -0x1028: "[?]" -0x1029: "o" -0x102a: "au" -0x102b: "[?]" -0x102c: "aa" -0x102d: "i" -0x102e: "ii" -0x102f: "u" -0x1030: "uu" -0x1031: "e" -0x1032: "ai" -0x1033: "[?]" -0x1034: "[?]" -0x1035: "[?]" -0x1036: "N" -0x1037: "'" -0x1038: ":" -0x1039: "" -0x103a: "[?]" -0x103b: "[?]" -0x103c: "[?]" -0x103d: "[?]" -0x103e: "[?]" -0x103f: "[?]" -0x1040: "0" -0x1041: "1" -0x1042: "2" -0x1043: "3" -0x1044: "4" -0x1045: "5" -0x1046: "6" -0x1047: "7" -0x1048: "8" -0x1049: "9" -0x104a: " / " -0x104b: " // " -0x104c: "n*" -0x104d: "r*" -0x104e: "l*" -0x104f: "e*" -0x1050: "sh" -0x1051: "ss" -0x1052: "R" -0x1053: "RR" -0x1054: "L" -0x1055: "LL" -0x1056: "R" -0x1057: "RR" -0x1058: "L" -0x1059: "LL" -0x105a: "[?]" -0x105b: "[?]" -0x105c: "[?]" -0x105d: "[?]" -0x105e: "[?]" -0x105f: "[?]" -0x1060: "[?]" -0x1061: "[?]" -0x1062: "[?]" -0x1063: "[?]" -0x1064: "[?]" -0x1065: "[?]" -0x1066: "[?]" -0x1067: "[?]" -0x1068: "[?]" -0x1069: "[?]" -0x106a: "[?]" -0x106b: "[?]" -0x106c: "[?]" -0x106d: "[?]" -0x106e: "[?]" -0x106f: "[?]" -0x1070: "[?]" -0x1071: "[?]" -0x1072: "[?]" -0x1073: "[?]" -0x1074: "[?]" -0x1075: "[?]" -0x1076: "[?]" -0x1077: "[?]" -0x1078: "[?]" -0x1079: "[?]" -0x107a: "[?]" -0x107b: "[?]" -0x107c: "[?]" -0x107d: "[?]" -0x107e: "[?]" -0x107f: "[?]" -0x1080: "[?]" -0x1081: "[?]" -0x1082: "[?]" -0x1083: "[?]" -0x1084: "[?]" -0x1085: "[?]" -0x1086: "[?]" -0x1087: "[?]" -0x1088: "[?]" -0x1089: "[?]" -0x108a: "[?]" -0x108b: "[?]" -0x108c: "[?]" -0x108d: "[?]" -0x108e: "[?]" -0x108f: "[?]" -0x1090: "[?]" -0x1091: "[?]" -0x1092: "[?]" -0x1093: "[?]" -0x1094: "[?]" -0x1095: "[?]" -0x1096: "[?]" -0x1097: "[?]" -0x1098: "[?]" -0x1099: "[?]" -0x109a: "[?]" -0x109b: "[?]" -0x109c: "[?]" -0x109d: "[?]" -0x109e: "[?]" -0x109f: "[?]" -0x10a0: "A" -0x10a1: "B" -0x10a2: "G" -0x10a3: "D" -0x10a4: "E" -0x10a5: "V" -0x10a6: "Z" -0x10a7: "T`" -0x10a8: "I" -0x10a9: "K" -0x10aa: "L" -0x10ab: "M" -0x10ac: "N" -0x10ad: "O" -0x10ae: "P" -0x10af: "Zh" -0x10b0: "R" -0x10b1: "S" -0x10b2: "T" -0x10b3: "U" -0x10b4: "P`" -0x10b5: "K`" -0x10b6: "G'" -0x10b7: "Q" -0x10b8: "Sh" -0x10b9: "Ch`" -0x10ba: "C`" -0x10bb: "Z'" -0x10bc: "C" -0x10bd: "Ch" -0x10be: "X" -0x10bf: "J" -0x10c0: "H" -0x10c1: "E" -0x10c2: "Y" -0x10c3: "W" -0x10c4: "Xh" -0x10c5: "OE" -0x10c6: "[?]" -0x10c7: "[?]" -0x10c8: "[?]" -0x10c9: "[?]" -0x10ca: "[?]" -0x10cb: "[?]" -0x10cc: "[?]" -0x10cd: "[?]" -0x10ce: "[?]" -0x10cf: "[?]" -0x10d0: "a" -0x10d1: "b" -0x10d2: "g" -0x10d3: "d" -0x10d4: "e" -0x10d5: "v" -0x10d6: "z" -0x10d7: "t`" -0x10d8: "i" -0x10d9: "k" -0x10da: "l" -0x10db: "m" -0x10dc: "n" -0x10dd: "o" -0x10de: "p" -0x10df: "zh" -0x10e0: "r" -0x10e1: "s" -0x10e2: "t" -0x10e3: "u" -0x10e4: "p`" -0x10e5: "k`" -0x10e6: "g'" -0x10e7: "q" -0x10e8: "sh" -0x10e9: "ch`" -0x10ea: "c`" -0x10eb: "z'" -0x10ec: "c" -0x10ed: "ch" -0x10ee: "x" -0x10ef: "j" -0x10f0: "h" -0x10f1: "e" -0x10f2: "y" -0x10f3: "w" -0x10f4: "xh" -0x10f5: "oe" -0x10f6: "f" -0x10f7: "[?]" -0x10f8: "[?]" -0x10f9: "[?]" -0x10fa: "[?]" -0x10fb: " // " -0x10fc: "[?]" -0x10fd: "[?]" -0x10fe: "[?]" -/* x011 */ -0x1100: "g" -0x1101: "gg" -0x1102: "n" -0x1103: "d" -0x1104: "dd" -0x1105: "r" -0x1106: "m" -0x1107: "b" -0x1108: "bb" -0x1109: "s" -0x110a: "ss" -0x110b: "" -0x110c: "j" -0x110d: "jj" -0x110e: "c" -0x110f: "k" -0x1110: "t" -0x1111: "p" -0x1112: "h" -0x1113: "ng" -0x1114: "nn" -0x1115: "nd" -0x1116: "nb" -0x1117: "dg" -0x1118: "rn" -0x1119: "rr" -0x111a: "rh" -0x111b: "rN" -0x111c: "mb" -0x111d: "mN" -0x111e: "bg" -0x111f: "bn" -0x1120: "" -0x1121: "bs" -0x1122: "bsg" -0x1123: "bst" -0x1124: "bsb" -0x1125: "bss" -0x1126: "bsj" -0x1127: "bj" -0x1128: "bc" -0x1129: "bt" -0x112a: "bp" -0x112b: "bN" -0x112c: "bbN" -0x112d: "sg" -0x112e: "sn" -0x112f: "sd" -0x1130: "sr" -0x1131: "sm" -0x1132: "sb" -0x1133: "sbg" -0x1134: "sss" -0x1135: "s" -0x1136: "sj" -0x1137: "sc" -0x1138: "sk" -0x1139: "st" -0x113a: "sp" -0x113b: "sh" -0x113c: "" -0x113d: "" -0x113e: "" -0x113f: "" -0x1140: "Z" -0x1141: "g" -0x1142: "d" -0x1143: "m" -0x1144: "b" -0x1145: "s" -0x1146: "Z" -0x1147: "" -0x1148: "j" -0x1149: "c" -0x114a: "t" -0x114b: "p" -0x114c: "N" -0x114d: "j" -0x114e: "" -0x114f: "" -0x1150: "" -0x1151: "" -0x1152: "ck" -0x1153: "ch" -0x1154: "" -0x1155: "" -0x1156: "pb" -0x1157: "pN" -0x1158: "hh" -0x1159: "Q" -0x115a: "[?]" -0x115b: "[?]" -0x115c: "[?]" -0x115d: "[?]" -0x115e: "[?]" -0x115f: "" -0x1160: "" -0x1161: "a" -0x1162: "ae" -0x1163: "ya" -0x1164: "yae" -0x1165: "eo" -0x1166: "e" -0x1167: "yeo" -0x1168: "ye" -0x1169: "o" -0x116a: "wa" -0x116b: "wae" -0x116c: "oe" -0x116d: "yo" -0x116e: "u" -0x116f: "weo" -0x1170: "we" -0x1171: "wi" -0x1172: "yu" -0x1173: "eu" -0x1174: "yi" -0x1175: "i" -0x1176: "a-o" -0x1177: "a-u" -0x1178: "ya-o" -0x1179: "ya-yo" -0x117a: "eo-o" -0x117b: "eo-u" -0x117c: "eo-eu" -0x117d: "yeo-o" -0x117e: "yeo-u" -0x117f: "o-eo" -0x1180: "o-e" -0x1181: "o-ye" -0x1182: "o-o" -0x1183: "o-u" -0x1184: "yo-ya" -0x1185: "yo-yae" -0x1186: "yo-yeo" -0x1187: "yo-o" -0x1188: "yo-i" -0x1189: "u-a" -0x118a: "u-ae" -0x118b: "u-eo-eu" -0x118c: "u-ye" -0x118d: "u-u" -0x118e: "yu-a" -0x118f: "yu-eo" -0x1190: "yu-e" -0x1191: "yu-yeo" -0x1192: "yu-ye" -0x1193: "yu-u" -0x1194: "yu-i" -0x1195: "eu-u" -0x1196: "eu-eu" -0x1197: "yi-u" -0x1198: "i-a" -0x1199: "i-ya" -0x119a: "i-o" -0x119b: "i-u" -0x119c: "i-eu" -0x119d: "i-U" -0x119e: "U" -0x119f: "U-eo" -0x11a0: "U-u" -0x11a1: "U-i" -0x11a2: "UU" -0x11a3: "[?]" -0x11a4: "[?]" -0x11a5: "[?]" -0x11a6: "[?]" -0x11a7: "[?]" -0x11a8: "g" -0x11a9: "gg" -0x11aa: "gs" -0x11ab: "n" -0x11ac: "nj" -0x11ad: "nh" -0x11ae: "d" -0x11af: "l" -0x11b0: "lg" -0x11b1: "lm" -0x11b2: "lb" -0x11b3: "ls" -0x11b4: "lt" -0x11b5: "lp" -0x11b6: "lh" -0x11b7: "m" -0x11b8: "b" -0x11b9: "bs" -0x11ba: "s" -0x11bb: "ss" -0x11bc: "ng" -0x11bd: "j" -0x11be: "c" -0x11bf: "k" -0x11c0: "t" -0x11c1: "p" -0x11c2: "h" -0x11c3: "gl" -0x11c4: "gsg" -0x11c5: "ng" -0x11c6: "nd" -0x11c7: "ns" -0x11c8: "nZ" -0x11c9: "nt" -0x11ca: "dg" -0x11cb: "tl" -0x11cc: "lgs" -0x11cd: "ln" -0x11ce: "ld" -0x11cf: "lth" -0x11d0: "ll" -0x11d1: "lmg" -0x11d2: "lms" -0x11d3: "lbs" -0x11d4: "lbh" -0x11d5: "rNp" -0x11d6: "lss" -0x11d7: "lZ" -0x11d8: "lk" -0x11d9: "lQ" -0x11da: "mg" -0x11db: "ml" -0x11dc: "mb" -0x11dd: "ms" -0x11de: "mss" -0x11df: "mZ" -0x11e0: "mc" -0x11e1: "mh" -0x11e2: "mN" -0x11e3: "bl" -0x11e4: "bp" -0x11e5: "ph" -0x11e6: "pN" -0x11e7: "sg" -0x11e8: "sd" -0x11e9: "sl" -0x11ea: "sb" -0x11eb: "Z" -0x11ec: "g" -0x11ed: "ss" -0x11ee: "" -0x11ef: "kh" -0x11f0: "N" -0x11f1: "Ns" -0x11f2: "NZ" -0x11f3: "pb" -0x11f4: "pN" -0x11f5: "hn" -0x11f6: "hl" -0x11f7: "hm" -0x11f8: "hb" -0x11f9: "Q" -0x11fa: "[?]" -0x11fb: "[?]" -0x11fc: "[?]" -0x11fd: "[?]" -0x11fe: "[?]" -/* x012 */ -0x1200: "ha" -0x1201: "hu" -0x1202: "hi" -0x1203: "haa" -0x1204: "hee" -0x1205: "he" -0x1206: "ho" -0x1207: "[?]" -0x1208: "la" -0x1209: "lu" -0x120a: "li" -0x120b: "laa" -0x120c: "lee" -0x120d: "le" -0x120e: "lo" -0x120f: "lwa" -0x1210: "hha" -0x1211: "hhu" -0x1212: "hhi" -0x1213: "hhaa" -0x1214: "hhee" -0x1215: "hhe" -0x1216: "hho" -0x1217: "hhwa" -0x1218: "ma" -0x1219: "mu" -0x121a: "mi" -0x121b: "maa" -0x121c: "mee" -0x121d: "me" -0x121e: "mo" -0x121f: "mwa" -0x1220: "sza" -0x1221: "szu" -0x1222: "szi" -0x1223: "szaa" -0x1224: "szee" -0x1225: "sze" -0x1226: "szo" -0x1227: "szwa" -0x1228: "ra" -0x1229: "ru" -0x122a: "ri" -0x122b: "raa" -0x122c: "ree" -0x122d: "re" -0x122e: "ro" -0x122f: "rwa" -0x1230: "sa" -0x1231: "su" -0x1232: "si" -0x1233: "saa" -0x1234: "see" -0x1235: "se" -0x1236: "so" -0x1237: "swa" -0x1238: "sha" -0x1239: "shu" -0x123a: "shi" -0x123b: "shaa" -0x123c: "shee" -0x123d: "she" -0x123e: "sho" -0x123f: "shwa" -0x1240: "qa" -0x1241: "qu" -0x1242: "qi" -0x1243: "qaa" -0x1244: "qee" -0x1245: "qe" -0x1246: "qo" -0x1247: "[?]" -0x1248: "qwa" -0x1249: "[?]" -0x124a: "qwi" -0x124b: "qwaa" -0x124c: "qwee" -0x124d: "qwe" -0x124e: "[?]" -0x124f: "[?]" -0x1250: "qha" -0x1251: "qhu" -0x1252: "qhi" -0x1253: "qhaa" -0x1254: "qhee" -0x1255: "qhe" -0x1256: "qho" -0x1257: "[?]" -0x1258: "qhwa" -0x1259: "[?]" -0x125a: "qhwi" -0x125b: "qhwaa" -0x125c: "qhwee" -0x125d: "qhwe" -0x125e: "[?]" -0x125f: "[?]" -0x1260: "ba" -0x1261: "bu" -0x1262: "bi" -0x1263: "baa" -0x1264: "bee" -0x1265: "be" -0x1266: "bo" -0x1267: "bwa" -0x1268: "va" -0x1269: "vu" -0x126a: "vi" -0x126b: "vaa" -0x126c: "vee" -0x126d: "ve" -0x126e: "vo" -0x126f: "vwa" -0x1270: "ta" -0x1271: "tu" -0x1272: "ti" -0x1273: "taa" -0x1274: "tee" -0x1275: "te" -0x1276: "to" -0x1277: "twa" -0x1278: "ca" -0x1279: "cu" -0x127a: "ci" -0x127b: "caa" -0x127c: "cee" -0x127d: "ce" -0x127e: "co" -0x127f: "cwa" -0x1280: "xa" -0x1281: "xu" -0x1282: "xi" -0x1283: "xaa" -0x1284: "xee" -0x1285: "xe" -0x1286: "xo" -0x1287: "[?]" -0x1288: "xwa" -0x1289: "[?]" -0x128a: "xwi" -0x128b: "xwaa" -0x128c: "xwee" -0x128d: "xwe" -0x128e: "[?]" -0x128f: "[?]" -0x1290: "na" -0x1291: "nu" -0x1292: "ni" -0x1293: "naa" -0x1294: "nee" -0x1295: "ne" -0x1296: "no" -0x1297: "nwa" -0x1298: "nya" -0x1299: "nyu" -0x129a: "nyi" -0x129b: "nyaa" -0x129c: "nyee" -0x129d: "nye" -0x129e: "nyo" -0x129f: "nywa" -0x12a0: "'a" -0x12a1: "'u" -0x12a2: "[?]" -0x12a3: "'aa" -0x12a4: "'ee" -0x12a5: "'e" -0x12a6: "'o" -0x12a7: "'wa" -0x12a8: "ka" -0x12a9: "ku" -0x12aa: "ki" -0x12ab: "kaa" -0x12ac: "kee" -0x12ad: "ke" -0x12ae: "ko" -0x12af: "[?]" -0x12b0: "kwa" -0x12b1: "[?]" -0x12b2: "kwi" -0x12b3: "kwaa" -0x12b4: "kwee" -0x12b5: "kwe" -0x12b6: "[?]" -0x12b7: "[?]" -0x12b8: "kxa" -0x12b9: "kxu" -0x12ba: "kxi" -0x12bb: "kxaa" -0x12bc: "kxee" -0x12bd: "kxe" -0x12be: "kxo" -0x12bf: "[?]" -0x12c0: "kxwa" -0x12c1: "[?]" -0x12c2: "kxwi" -0x12c3: "kxwaa" -0x12c4: "kxwee" -0x12c5: "kxwe" -0x12c6: "[?]" -0x12c7: "[?]" -0x12c8: "wa" -0x12c9: "wu" -0x12ca: "wi" -0x12cb: "waa" -0x12cc: "wee" -0x12cd: "we" -0x12ce: "wo" -0x12cf: "[?]" -0x12d0: "`a" -0x12d1: "`u" -0x12d2: "`i" -0x12d3: "`aa" -0x12d4: "`ee" -0x12d5: "`e" -0x12d6: "`o" -0x12d7: "[?]" -0x12d8: "za" -0x12d9: "zu" -0x12da: "zi" -0x12db: "zaa" -0x12dc: "zee" -0x12dd: "ze" -0x12de: "zo" -0x12df: "zwa" -0x12e0: "zha" -0x12e1: "zhu" -0x12e2: "zhi" -0x12e3: "zhaa" -0x12e4: "zhee" -0x12e5: "zhe" -0x12e6: "zho" -0x12e7: "zhwa" -0x12e8: "ya" -0x12e9: "yu" -0x12ea: "yi" -0x12eb: "yaa" -0x12ec: "yee" -0x12ed: "ye" -0x12ee: "yo" -0x12ef: "[?]" -0x12f0: "da" -0x12f1: "du" -0x12f2: "di" -0x12f3: "daa" -0x12f4: "dee" -0x12f5: "de" -0x12f6: "do" -0x12f7: "dwa" -0x12f8: "dda" -0x12f9: "ddu" -0x12fa: "ddi" -0x12fb: "ddaa" -0x12fc: "ddee" -0x12fd: "dde" -0x12fe: "ddo" -0x12ff: "ddwa" -/* x013 */ -0x1300: "ja" -0x1301: "ju" -0x1302: "ji" -0x1303: "jaa" -0x1304: "jee" -0x1305: "je" -0x1306: "jo" -0x1307: "jwa" -0x1308: "ga" -0x1309: "gu" -0x130a: "gi" -0x130b: "gaa" -0x130c: "gee" -0x130d: "ge" -0x130e: "go" -0x130f: "[?]" -0x1310: "gwa" -0x1311: "[?]" -0x1312: "gwi" -0x1313: "gwaa" -0x1314: "gwee" -0x1315: "gwe" -0x1316: "[?]" -0x1317: "[?]" -0x1318: "gga" -0x1319: "ggu" -0x131a: "ggi" -0x131b: "ggaa" -0x131c: "ggee" -0x131d: "gge" -0x131e: "ggo" -0x131f: "[?]" -0x1320: "tha" -0x1321: "thu" -0x1322: "thi" -0x1323: "thaa" -0x1324: "thee" -0x1325: "the" -0x1326: "tho" -0x1327: "thwa" -0x1328: "cha" -0x1329: "chu" -0x132a: "chi" -0x132b: "chaa" -0x132c: "chee" -0x132d: "che" -0x132e: "cho" -0x132f: "chwa" -0x1330: "pha" -0x1331: "phu" -0x1332: "phi" -0x1333: "phaa" -0x1334: "phee" -0x1335: "phe" -0x1336: "pho" -0x1337: "phwa" -0x1338: "tsa" -0x1339: "tsu" -0x133a: "tsi" -0x133b: "tsaa" -0x133c: "tsee" -0x133d: "tse" -0x133e: "tso" -0x133f: "tswa" -0x1340: "tza" -0x1341: "tzu" -0x1342: "tzi" -0x1343: "tzaa" -0x1344: "tzee" -0x1345: "tze" -0x1346: "tzo" -0x1347: "[?]" -0x1348: "fa" -0x1349: "fu" -0x134a: "fi" -0x134b: "faa" -0x134c: "fee" -0x134d: "fe" -0x134e: "fo" -0x134f: "fwa" -0x1350: "pa" -0x1351: "pu" -0x1352: "pi" -0x1353: "paa" -0x1354: "pee" -0x1355: "pe" -0x1356: "po" -0x1357: "pwa" -0x1358: "rya" -0x1359: "mya" -0x135a: "fya" -0x135b: "[?]" -0x135c: "[?]" -0x135d: "[?]" -0x135e: "[?]" -0x135f: "[?]" -0x1360: "[?]" -0x1361: " " -0x1362: "." -0x1363: "," -0x1364: ";" -0x1365: ":" -0x1366: ":: " -0x1367: "?" -0x1368: "//" -0x1369: "1" -0x136a: "2" -0x136b: "3" -0x136c: "4" -0x136d: "5" -0x136e: "6" -0x136f: "7" -0x1370: "8" -0x1371: "9" -0x1372: "10+" -0x1373: "20+" -0x1374: "30+" -0x1375: "40+" -0x1376: "50+" -0x1377: "60+" -0x1378: "70+" -0x1379: "80+" -0x137a: "90+" -0x137b: "100+" -0x137c: "10,000+" -0x137d: "[?]" -0x137e: "[?]" -0x137f: "[?]" -0x1380: "[?]" -0x1381: "[?]" -0x1382: "[?]" -0x1383: "[?]" -0x1384: "[?]" -0x1385: "[?]" -0x1386: "[?]" -0x1387: "[?]" -0x1388: "[?]" -0x1389: "[?]" -0x138a: "[?]" -0x138b: "[?]" -0x138c: "[?]" -0x138d: "[?]" -0x138e: "[?]" -0x138f: "[?]" -0x1390: "[?]" -0x1391: "[?]" -0x1392: "[?]" -0x1393: "[?]" -0x1394: "[?]" -0x1395: "[?]" -0x1396: "[?]" -0x1397: "[?]" -0x1398: "[?]" -0x1399: "[?]" -0x139a: "[?]" -0x139b: "[?]" -0x139c: "[?]" -0x139d: "[?]" -0x139e: "[?]" -0x139f: "[?]" -0x13a0: "a" -0x13a1: "e" -0x13a2: "i" -0x13a3: "o" -0x13a4: "u" -0x13a5: "v" -0x13a6: "ga" -0x13a7: "ka" -0x13a8: "ge" -0x13a9: "gi" -0x13aa: "go" -0x13ab: "gu" -0x13ac: "gv" -0x13ad: "ha" -0x13ae: "he" -0x13af: "hi" -0x13b0: "ho" -0x13b1: "hu" -0x13b2: "hv" -0x13b3: "la" -0x13b4: "le" -0x13b5: "li" -0x13b6: "lo" -0x13b7: "lu" -0x13b8: "lv" -0x13b9: "ma" -0x13ba: "me" -0x13bb: "mi" -0x13bc: "mo" -0x13bd: "mu" -0x13be: "na" -0x13bf: "hna" -0x13c0: "nah" -0x13c1: "ne" -0x13c2: "ni" -0x13c3: "no" -0x13c4: "nu" -0x13c5: "nv" -0x13c6: "qua" -0x13c7: "que" -0x13c8: "qui" -0x13c9: "quo" -0x13ca: "quu" -0x13cb: "quv" -0x13cc: "sa" -0x13cd: "s" -0x13ce: "se" -0x13cf: "si" -0x13d0: "so" -0x13d1: "su" -0x13d2: "sv" -0x13d3: "da" -0x13d4: "ta" -0x13d5: "de" -0x13d6: "te" -0x13d7: "di" -0x13d8: "ti" -0x13d9: "do" -0x13da: "du" -0x13db: "dv" -0x13dc: "dla" -0x13dd: "tla" -0x13de: "tle" -0x13df: "tli" -0x13e0: "tlo" -0x13e1: "tlu" -0x13e2: "tlv" -0x13e3: "tsa" -0x13e4: "tse" -0x13e5: "tsi" -0x13e6: "tso" -0x13e7: "tsu" -0x13e8: "tsv" -0x13e9: "wa" -0x13ea: "we" -0x13eb: "wi" -0x13ec: "wo" -0x13ed: "wu" -0x13ee: "wv" -0x13ef: "ya" -0x13f0: "ye" -0x13f1: "yi" -0x13f2: "yo" -0x13f3: "yu" -0x13f4: "yv" -0x13f5: "[?]" -0x13f6: "[?]" -0x13f7: "[?]" -0x13f8: "[?]" -0x13f9: "[?]" -0x13fa: "[?]" -0x13fb: "[?]" -0x13fc: "[?]" -0x13fd: "[?]" -0x13fe: "[?]" -/* x014 */ -0x1400: "[?]" -0x1401: "e" -0x1402: "aai" -0x1403: "i" -0x1404: "ii" -0x1405: "o" -0x1406: "oo" -0x1407: "oo" -0x1408: "ee" -0x1409: "i" -0x140a: "a" -0x140b: "aa" -0x140c: "we" -0x140d: "we" -0x140e: "wi" -0x140f: "wi" -0x1410: "wii" -0x1411: "wii" -0x1412: "wo" -0x1413: "wo" -0x1414: "woo" -0x1415: "woo" -0x1416: "woo" -0x1417: "wa" -0x1418: "wa" -0x1419: "waa" -0x141a: "waa" -0x141b: "waa" -0x141c: "ai" -0x141d: "w" -0x141e: "'" -0x141f: "t" -0x1420: "k" -0x1421: "sh" -0x1422: "s" -0x1423: "n" -0x1424: "w" -0x1425: "n" -0x1426: "[?]" -0x1427: "w" -0x1428: "c" -0x1429: "?" -0x142a: "l" -0x142b: "en" -0x142c: "in" -0x142d: "on" -0x142e: "an" -0x142f: "pe" -0x1430: "paai" -0x1431: "pi" -0x1432: "pii" -0x1433: "po" -0x1434: "poo" -0x1435: "poo" -0x1436: "hee" -0x1437: "hi" -0x1438: "pa" -0x1439: "paa" -0x143a: "pwe" -0x143b: "pwe" -0x143c: "pwi" -0x143d: "pwi" -0x143e: "pwii" -0x143f: "pwii" -0x1440: "pwo" -0x1441: "pwo" -0x1442: "pwoo" -0x1443: "pwoo" -0x1444: "pwa" -0x1445: "pwa" -0x1446: "pwaa" -0x1447: "pwaa" -0x1448: "pwaa" -0x1449: "p" -0x144a: "p" -0x144b: "h" -0x144c: "te" -0x144d: "taai" -0x144e: "ti" -0x144f: "tii" -0x1450: "to" -0x1451: "too" -0x1452: "too" -0x1453: "dee" -0x1454: "di" -0x1455: "ta" -0x1456: "taa" -0x1457: "twe" -0x1458: "twe" -0x1459: "twi" -0x145a: "twi" -0x145b: "twii" -0x145c: "twii" -0x145d: "two" -0x145e: "two" -0x145f: "twoo" -0x1460: "twoo" -0x1461: "twa" -0x1462: "twa" -0x1463: "twaa" -0x1464: "twaa" -0x1465: "twaa" -0x1466: "t" -0x1467: "tte" -0x1468: "tti" -0x1469: "tto" -0x146a: "tta" -0x146b: "ke" -0x146c: "kaai" -0x146d: "ki" -0x146e: "kii" -0x146f: "ko" -0x1470: "koo" -0x1471: "koo" -0x1472: "ka" -0x1473: "kaa" -0x1474: "kwe" -0x1475: "kwe" -0x1476: "kwi" -0x1477: "kwi" -0x1478: "kwii" -0x1479: "kwii" -0x147a: "kwo" -0x147b: "kwo" -0x147c: "kwoo" -0x147d: "kwoo" -0x147e: "kwa" -0x147f: "kwa" -0x1480: "kwaa" -0x1481: "kwaa" -0x1482: "kwaa" -0x1483: "k" -0x1484: "kw" -0x1485: "keh" -0x1486: "kih" -0x1487: "koh" -0x1488: "kah" -0x1489: "ce" -0x148a: "caai" -0x148b: "ci" -0x148c: "cii" -0x148d: "co" -0x148e: "coo" -0x148f: "coo" -0x1490: "ca" -0x1491: "caa" -0x1492: "cwe" -0x1493: "cwe" -0x1494: "cwi" -0x1495: "cwi" -0x1496: "cwii" -0x1497: "cwii" -0x1498: "cwo" -0x1499: "cwo" -0x149a: "cwoo" -0x149b: "cwoo" -0x149c: "cwa" -0x149d: "cwa" -0x149e: "cwaa" -0x149f: "cwaa" -0x14a0: "cwaa" -0x14a1: "c" -0x14a2: "th" -0x14a3: "me" -0x14a4: "maai" -0x14a5: "mi" -0x14a6: "mii" -0x14a7: "mo" -0x14a8: "moo" -0x14a9: "moo" -0x14aa: "ma" -0x14ab: "maa" -0x14ac: "mwe" -0x14ad: "mwe" -0x14ae: "mwi" -0x14af: "mwi" -0x14b0: "mwii" -0x14b1: "mwii" -0x14b2: "mwo" -0x14b3: "mwo" -0x14b4: "mwoo" -0x14b5: "mwoo" -0x14b6: "mwa" -0x14b7: "mwa" -0x14b8: "mwaa" -0x14b9: "mwaa" -0x14ba: "mwaa" -0x14bb: "m" -0x14bc: "m" -0x14bd: "mh" -0x14be: "m" -0x14bf: "m" -0x14c0: "ne" -0x14c1: "naai" -0x14c2: "ni" -0x14c3: "nii" -0x14c4: "no" -0x14c5: "noo" -0x14c6: "noo" -0x14c7: "na" -0x14c8: "naa" -0x14c9: "nwe" -0x14ca: "nwe" -0x14cb: "nwa" -0x14cc: "nwa" -0x14cd: "nwaa" -0x14ce: "nwaa" -0x14cf: "nwaa" -0x14d0: "n" -0x14d1: "ng" -0x14d2: "nh" -0x14d3: "le" -0x14d4: "laai" -0x14d5: "li" -0x14d6: "lii" -0x14d7: "lo" -0x14d8: "loo" -0x14d9: "loo" -0x14da: "la" -0x14db: "laa" -0x14dc: "lwe" -0x14dd: "lwe" -0x14de: "lwi" -0x14df: "lwi" -0x14e0: "lwii" -0x14e1: "lwii" -0x14e2: "lwo" -0x14e3: "lwo" -0x14e4: "lwoo" -0x14e5: "lwoo" -0x14e6: "lwa" -0x14e7: "lwa" -0x14e8: "lwaa" -0x14e9: "lwaa" -0x14ea: "l" -0x14eb: "l" -0x14ec: "l" -0x14ed: "se" -0x14ee: "saai" -0x14ef: "si" -0x14f0: "sii" -0x14f1: "so" -0x14f2: "soo" -0x14f3: "soo" -0x14f4: "sa" -0x14f5: "saa" -0x14f6: "swe" -0x14f7: "swe" -0x14f8: "swi" -0x14f9: "swi" -0x14fa: "swii" -0x14fb: "swii" -0x14fc: "swo" -0x14fd: "swo" -0x14fe: "swoo" -0x14ff: "swoo" -/* x015 */ -0x1500: "swa" -0x1501: "swa" -0x1502: "swaa" -0x1503: "swaa" -0x1504: "swaa" -0x1505: "s" -0x1506: "s" -0x1507: "sw" -0x1508: "s" -0x1509: "sk" -0x150a: "skw" -0x150b: "sW" -0x150c: "spwa" -0x150d: "stwa" -0x150e: "skwa" -0x150f: "scwa" -0x1510: "she" -0x1511: "shi" -0x1512: "shii" -0x1513: "sho" -0x1514: "shoo" -0x1515: "sha" -0x1516: "shaa" -0x1517: "shwe" -0x1518: "shwe" -0x1519: "shwi" -0x151a: "shwi" -0x151b: "shwii" -0x151c: "shwii" -0x151d: "shwo" -0x151e: "shwo" -0x151f: "shwoo" -0x1520: "shwoo" -0x1521: "shwa" -0x1522: "shwa" -0x1523: "shwaa" -0x1524: "shwaa" -0x1525: "sh" -0x1526: "ye" -0x1527: "yaai" -0x1528: "yi" -0x1529: "yii" -0x152a: "yo" -0x152b: "yoo" -0x152c: "yoo" -0x152d: "ya" -0x152e: "yaa" -0x152f: "ywe" -0x1530: "ywe" -0x1531: "ywi" -0x1532: "ywi" -0x1533: "ywii" -0x1534: "ywii" -0x1535: "ywo" -0x1536: "ywo" -0x1537: "ywoo" -0x1538: "ywoo" -0x1539: "ywa" -0x153a: "ywa" -0x153b: "ywaa" -0x153c: "ywaa" -0x153d: "ywaa" -0x153e: "y" -0x153f: "y" -0x1540: "y" -0x1541: "yi" -0x1542: "re" -0x1543: "re" -0x1544: "le" -0x1545: "raai" -0x1546: "ri" -0x1547: "rii" -0x1548: "ro" -0x1549: "roo" -0x154a: "lo" -0x154b: "ra" -0x154c: "raa" -0x154d: "la" -0x154e: "rwaa" -0x154f: "rwaa" -0x1550: "r" -0x1551: "r" -0x1552: "r" -0x1553: "fe" -0x1554: "faai" -0x1555: "fi" -0x1556: "fii" -0x1557: "fo" -0x1558: "foo" -0x1559: "fa" -0x155a: "faa" -0x155b: "fwaa" -0x155c: "fwaa" -0x155d: "f" -0x155e: "the" -0x155f: "the" -0x1560: "thi" -0x1561: "thi" -0x1562: "thii" -0x1563: "thii" -0x1564: "tho" -0x1565: "thoo" -0x1566: "tha" -0x1567: "thaa" -0x1568: "thwaa" -0x1569: "thwaa" -0x156a: "th" -0x156b: "tthe" -0x156c: "tthi" -0x156d: "ttho" -0x156e: "ttha" -0x156f: "tth" -0x1570: "tye" -0x1571: "tyi" -0x1572: "tyo" -0x1573: "tya" -0x1574: "he" -0x1575: "hi" -0x1576: "hii" -0x1577: "ho" -0x1578: "hoo" -0x1579: "ha" -0x157a: "haa" -0x157b: "h" -0x157c: "h" -0x157d: "hk" -0x157e: "qaai" -0x157f: "qi" -0x1580: "qii" -0x1581: "qo" -0x1582: "qoo" -0x1583: "qa" -0x1584: "qaa" -0x1585: "q" -0x1586: "tlhe" -0x1587: "tlhi" -0x1588: "tlho" -0x1589: "tlha" -0x158a: "re" -0x158b: "ri" -0x158c: "ro" -0x158d: "ra" -0x158e: "ngaai" -0x158f: "ngi" -0x1590: "ngii" -0x1591: "ngo" -0x1592: "ngoo" -0x1593: "nga" -0x1594: "ngaa" -0x1595: "ng" -0x1596: "nng" -0x1597: "she" -0x1598: "shi" -0x1599: "sho" -0x159a: "sha" -0x159b: "the" -0x159c: "thi" -0x159d: "tho" -0x159e: "tha" -0x159f: "th" -0x15a0: "lhi" -0x15a1: "lhii" -0x15a2: "lho" -0x15a3: "lhoo" -0x15a4: "lha" -0x15a5: "lhaa" -0x15a6: "lh" -0x15a7: "the" -0x15a8: "thi" -0x15a9: "thii" -0x15aa: "tho" -0x15ab: "thoo" -0x15ac: "tha" -0x15ad: "thaa" -0x15ae: "th" -0x15af: "b" -0x15b0: "e" -0x15b1: "i" -0x15b2: "o" -0x15b3: "a" -0x15b4: "we" -0x15b5: "wi" -0x15b6: "wo" -0x15b7: "wa" -0x15b8: "ne" -0x15b9: "ni" -0x15ba: "no" -0x15bb: "na" -0x15bc: "ke" -0x15bd: "ki" -0x15be: "ko" -0x15bf: "ka" -0x15c0: "he" -0x15c1: "hi" -0x15c2: "ho" -0x15c3: "ha" -0x15c4: "ghu" -0x15c5: "gho" -0x15c6: "ghe" -0x15c7: "ghee" -0x15c8: "ghi" -0x15c9: "gha" -0x15ca: "ru" -0x15cb: "ro" -0x15cc: "re" -0x15cd: "ree" -0x15ce: "ri" -0x15cf: "ra" -0x15d0: "wu" -0x15d1: "wo" -0x15d2: "we" -0x15d3: "wee" -0x15d4: "wi" -0x15d5: "wa" -0x15d6: "hwu" -0x15d7: "hwo" -0x15d8: "hwe" -0x15d9: "hwee" -0x15da: "hwi" -0x15db: "hwa" -0x15dc: "thu" -0x15dd: "tho" -0x15de: "the" -0x15df: "thee" -0x15e0: "thi" -0x15e1: "tha" -0x15e2: "ttu" -0x15e3: "tto" -0x15e4: "tte" -0x15e5: "ttee" -0x15e6: "tti" -0x15e7: "tta" -0x15e8: "pu" -0x15e9: "po" -0x15ea: "pe" -0x15eb: "pee" -0x15ec: "pi" -0x15ed: "pa" -0x15ee: "p" -0x15ef: "gu" -0x15f0: "go" -0x15f1: "ge" -0x15f2: "gee" -0x15f3: "gi" -0x15f4: "ga" -0x15f5: "khu" -0x15f6: "kho" -0x15f7: "khe" -0x15f8: "khee" -0x15f9: "khi" -0x15fa: "kha" -0x15fb: "kku" -0x15fc: "kko" -0x15fd: "kke" -0x15fe: "kkee" -0x15ff: "kki" -/* x016 */ -0x1600: "kka" -0x1601: "kk" -0x1602: "nu" -0x1603: "no" -0x1604: "ne" -0x1605: "nee" -0x1606: "ni" -0x1607: "na" -0x1608: "mu" -0x1609: "mo" -0x160a: "me" -0x160b: "mee" -0x160c: "mi" -0x160d: "ma" -0x160e: "yu" -0x160f: "yo" -0x1610: "ye" -0x1611: "yee" -0x1612: "yi" -0x1613: "ya" -0x1614: "ju" -0x1615: "ju" -0x1616: "jo" -0x1617: "je" -0x1618: "jee" -0x1619: "ji" -0x161a: "ji" -0x161b: "ja" -0x161c: "jju" -0x161d: "jjo" -0x161e: "jje" -0x161f: "jjee" -0x1620: "jji" -0x1621: "jja" -0x1622: "lu" -0x1623: "lo" -0x1624: "le" -0x1625: "lee" -0x1626: "li" -0x1627: "la" -0x1628: "dlu" -0x1629: "dlo" -0x162a: "dle" -0x162b: "dlee" -0x162c: "dli" -0x162d: "dla" -0x162e: "lhu" -0x162f: "lho" -0x1630: "lhe" -0x1631: "lhee" -0x1632: "lhi" -0x1633: "lha" -0x1634: "tlhu" -0x1635: "tlho" -0x1636: "tlhe" -0x1637: "tlhee" -0x1638: "tlhi" -0x1639: "tlha" -0x163a: "tlu" -0x163b: "tlo" -0x163c: "tle" -0x163d: "tlee" -0x163e: "tli" -0x163f: "tla" -0x1640: "zu" -0x1641: "zo" -0x1642: "ze" -0x1643: "zee" -0x1644: "zi" -0x1645: "za" -0x1646: "z" -0x1647: "z" -0x1648: "dzu" -0x1649: "dzo" -0x164a: "dze" -0x164b: "dzee" -0x164c: "dzi" -0x164d: "dza" -0x164e: "su" -0x164f: "so" -0x1650: "se" -0x1651: "see" -0x1652: "si" -0x1653: "sa" -0x1654: "shu" -0x1655: "sho" -0x1656: "she" -0x1657: "shee" -0x1658: "shi" -0x1659: "sha" -0x165a: "sh" -0x165b: "tsu" -0x165c: "tso" -0x165d: "tse" -0x165e: "tsee" -0x165f: "tsi" -0x1660: "tsa" -0x1661: "chu" -0x1662: "cho" -0x1663: "che" -0x1664: "chee" -0x1665: "chi" -0x1666: "cha" -0x1667: "ttsu" -0x1668: "ttso" -0x1669: "ttse" -0x166a: "ttsee" -0x166b: "ttsi" -0x166c: "ttsa" -0x166d: "X" -0x166e: "." -0x166f: "qai" -0x1670: "ngai" -0x1671: "nngi" -0x1672: "nngii" -0x1673: "nngo" -0x1674: "nngoo" -0x1675: "nnga" -0x1676: "nngaa" -0x1677: "[?]" -0x1678: "[?]" -0x1679: "[?]" -0x167a: "[?]" -0x167b: "[?]" -0x167c: "[?]" -0x167d: "[?]" -0x167e: "[?]" -0x167f: "[?]" -0x1680: " " -0x1681: "b" -0x1682: "l" -0x1683: "f" -0x1684: "s" -0x1685: "n" -0x1686: "h" -0x1687: "d" -0x1688: "t" -0x1689: "c" -0x168a: "q" -0x168b: "m" -0x168c: "g" -0x168d: "ng" -0x168e: "z" -0x168f: "r" -0x1690: "a" -0x1691: "o" -0x1692: "u" -0x1693: "e" -0x1694: "i" -0x1695: "ch" -0x1696: "th" -0x1697: "ph" -0x1698: "p" -0x1699: "x" -0x169a: "p" -0x169b: "<" -0x169c: ">" -0x169d: "[?]" -0x169e: "[?]" -0x169f: "[?]" -0x16a0: "f" -0x16a1: "v" -0x16a2: "u" -0x16a3: "yr" -0x16a4: "y" -0x16a5: "w" -0x16a6: "th" -0x16a7: "th" -0x16a8: "a" -0x16a9: "o" -0x16aa: "ac" -0x16ab: "ae" -0x16ac: "o" -0x16ad: "o" -0x16ae: "o" -0x16af: "oe" -0x16b0: "on" -0x16b1: "r" -0x16b2: "k" -0x16b3: "c" -0x16b4: "k" -0x16b5: "g" -0x16b6: "ng" -0x16b7: "g" -0x16b8: "g" -0x16b9: "w" -0x16ba: "h" -0x16bb: "h" -0x16bc: "h" -0x16bd: "h" -0x16be: "n" -0x16bf: "n" -0x16c0: "n" -0x16c1: "i" -0x16c2: "e" -0x16c3: "j" -0x16c4: "g" -0x16c5: "ae" -0x16c6: "a" -0x16c7: "eo" -0x16c8: "p" -0x16c9: "z" -0x16ca: "s" -0x16cb: "s" -0x16cc: "s" -0x16cd: "c" -0x16ce: "z" -0x16cf: "t" -0x16d0: "t" -0x16d1: "d" -0x16d2: "b" -0x16d3: "b" -0x16d4: "p" -0x16d5: "p" -0x16d6: "e" -0x16d7: "m" -0x16d8: "m" -0x16d9: "m" -0x16da: "l" -0x16db: "l" -0x16dc: "ng" -0x16dd: "ng" -0x16de: "d" -0x16df: "o" -0x16e0: "ear" -0x16e1: "ior" -0x16e2: "qu" -0x16e3: "qu" -0x16e4: "qu" -0x16e5: "s" -0x16e6: "yr" -0x16e7: "yr" -0x16e8: "yr" -0x16e9: "q" -0x16ea: "x" -0x16eb: "." -0x16ec: ":" -0x16ed: "+" -0x16ee: "17" -0x16ef: "18" -0x16f0: "19" -0x16f1: "[?]" -0x16f2: "[?]" -0x16f3: "[?]" -0x16f4: "[?]" -0x16f5: "[?]" -0x16f6: "[?]" -0x16f7: "[?]" -0x16f8: "[?]" -0x16f9: "[?]" -0x16fa: "[?]" -0x16fb: "[?]" -0x16fc: "[?]" -0x16fd: "[?]" -0x16fe: "[?]" -/* x017 */ -0x1700: "[?]" -0x1701: "[?]" -0x1702: "[?]" -0x1703: "[?]" -0x1704: "[?]" -0x1705: "[?]" -0x1706: "[?]" -0x1707: "[?]" -0x1708: "[?]" -0x1709: "[?]" -0x170a: "[?]" -0x170b: "[?]" -0x170c: "[?]" -0x170d: "[?]" -0x170e: "[?]" -0x170f: "[?]" -0x1710: "[?]" -0x1711: "[?]" -0x1712: "[?]" -0x1713: "[?]" -0x1714: "[?]" -0x1715: "[?]" -0x1716: "[?]" -0x1717: "[?]" -0x1718: "[?]" -0x1719: "[?]" -0x171a: "[?]" -0x171b: "[?]" -0x171c: "[?]" -0x171d: "[?]" -0x171e: "[?]" -0x171f: "[?]" -0x1720: "[?]" -0x1721: "[?]" -0x1722: "[?]" -0x1723: "[?]" -0x1724: "[?]" -0x1725: "[?]" -0x1726: "[?]" -0x1727: "[?]" -0x1728: "[?]" -0x1729: "[?]" -0x172a: "[?]" -0x172b: "[?]" -0x172c: "[?]" -0x172d: "[?]" -0x172e: "[?]" -0x172f: "[?]" -0x1730: "[?]" -0x1731: "[?]" -0x1732: "[?]" -0x1733: "[?]" -0x1734: "[?]" -0x1735: "[?]" -0x1736: "[?]" -0x1737: "[?]" -0x1738: "[?]" -0x1739: "[?]" -0x173a: "[?]" -0x173b: "[?]" -0x173c: "[?]" -0x173d: "[?]" -0x173e: "[?]" -0x173f: "[?]" -0x1740: "[?]" -0x1741: "[?]" -0x1742: "[?]" -0x1743: "[?]" -0x1744: "[?]" -0x1745: "[?]" -0x1746: "[?]" -0x1747: "[?]" -0x1748: "[?]" -0x1749: "[?]" -0x174a: "[?]" -0x174b: "[?]" -0x174c: "[?]" -0x174d: "[?]" -0x174e: "[?]" -0x174f: "[?]" -0x1750: "[?]" -0x1751: "[?]" -0x1752: "[?]" -0x1753: "[?]" -0x1754: "[?]" -0x1755: "[?]" -0x1756: "[?]" -0x1757: "[?]" -0x1758: "[?]" -0x1759: "[?]" -0x175a: "[?]" -0x175b: "[?]" -0x175c: "[?]" -0x175d: "[?]" -0x175e: "[?]" -0x175f: "[?]" -0x1760: "[?]" -0x1761: "[?]" -0x1762: "[?]" -0x1763: "[?]" -0x1764: "[?]" -0x1765: "[?]" -0x1766: "[?]" -0x1767: "[?]" -0x1768: "[?]" -0x1769: "[?]" -0x176a: "[?]" -0x176b: "[?]" -0x176c: "[?]" -0x176d: "[?]" -0x176e: "[?]" -0x176f: "[?]" -0x1770: "[?]" -0x1771: "[?]" -0x1772: "[?]" -0x1773: "[?]" -0x1774: "[?]" -0x1775: "[?]" -0x1776: "[?]" -0x1777: "[?]" -0x1778: "[?]" -0x1779: "[?]" -0x177a: "[?]" -0x177b: "[?]" -0x177c: "[?]" -0x177d: "[?]" -0x177e: "[?]" -0x177f: "[?]" -0x1780: "k" -0x1781: "kh" -0x1782: "g" -0x1783: "gh" -0x1784: "ng" -0x1785: "c" -0x1786: "ch" -0x1787: "j" -0x1788: "jh" -0x1789: "ny" -0x178a: "t" -0x178b: "tth" -0x178c: "d" -0x178d: "ddh" -0x178e: "nn" -0x178f: "t" -0x1790: "th" -0x1791: "d" -0x1792: "dh" -0x1793: "n" -0x1794: "p" -0x1795: "ph" -0x1796: "b" -0x1797: "bh" -0x1798: "m" -0x1799: "y" -0x179a: "r" -0x179b: "l" -0x179c: "v" -0x179d: "sh" -0x179e: "ss" -0x179f: "s" -0x17a0: "h" -0x17a1: "l" -0x17a2: "q" -0x17a3: "a" -0x17a4: "aa" -0x17a5: "i" -0x17a6: "ii" -0x17a7: "u" -0x17a8: "uk" -0x17a9: "uu" -0x17aa: "uuv" -0x17ab: "ry" -0x17ac: "ryy" -0x17ad: "ly" -0x17ae: "lyy" -0x17af: "e" -0x17b0: "ai" -0x17b1: "oo" -0x17b2: "oo" -0x17b3: "au" -0x17b4: "a" -0x17b5: "aa" -0x17b6: "aa" -0x17b7: "i" -0x17b8: "ii" -0x17b9: "y" -0x17ba: "yy" -0x17bb: "u" -0x17bc: "uu" -0x17bd: "ua" -0x17be: "oe" -0x17bf: "ya" -0x17c0: "ie" -0x17c1: "e" -0x17c2: "ae" -0x17c3: "ai" -0x17c4: "oo" -0x17c5: "au" -0x17c6: "M" -0x17c7: "H" -0x17c8: "a`" -0x17c9: "" -0x17ca: "" -0x17cb: "" -0x17cc: "r" -0x17cd: "" -0x17ce: "!" -0x17cf: "" -0x17d0: "" -0x17d1: "" -0x17d2: "" -0x17d3: "" -0x17d4: "." -0x17d5: " // " -0x17d6: ":" -0x17d7: "+" -0x17d8: "++" -0x17d9: " * " -0x17da: " /// " -0x17db: "KR" -0x17dc: "'" -0x17dd: "[?]" -0x17de: "[?]" -0x17df: "[?]" -0x17e0: "0" -0x17e1: "1" -0x17e2: "2" -0x17e3: "3" -0x17e4: "4" -0x17e5: "5" -0x17e6: "6" -0x17e7: "7" -0x17e8: "8" -0x17e9: "9" -0x17ea: "[?]" -0x17eb: "[?]" -0x17ec: "[?]" -0x17ed: "[?]" -0x17ee: "[?]" -0x17ef: "[?]" -0x17f0: "[?]" -0x17f1: "[?]" -0x17f2: "[?]" -0x17f3: "[?]" -0x17f4: "[?]" -0x17f5: "[?]" -0x17f6: "[?]" -0x17f7: "[?]" -0x17f8: "[?]" -0x17f9: "[?]" -0x17fa: "[?]" -0x17fb: "[?]" -0x17fc: "[?]" -0x17fd: "[?]" -0x17fe: "[?]" -/* x018 */ -0x1800: " @ " -0x1801: " ... " -0x1802: ", " -0x1803: ". " -0x1804: ": " -0x1805: " // " -0x1806: "" -0x1807: "-" -0x1808: ", " -0x1809: ". " -0x180a: "" -0x180b: "" -0x180c: "" -0x180d: "" -0x180e: "" -0x180f: "[?]" -0x1810: "0" -0x1811: "1" -0x1812: "2" -0x1813: "3" -0x1814: "4" -0x1815: "5" -0x1816: "6" -0x1817: "7" -0x1818: "8" -0x1819: "9" -0x181a: "[?]" -0x181b: "[?]" -0x181c: "[?]" -0x181d: "[?]" -0x181e: "[?]" -0x181f: "[?]" -0x1820: "a" -0x1821: "e" -0x1822: "i" -0x1823: "o" -0x1824: "u" -0x1825: "O" -0x1826: "U" -0x1827: "ee" -0x1828: "n" -0x1829: "ng" -0x182a: "b" -0x182b: "p" -0x182c: "q" -0x182d: "g" -0x182e: "m" -0x182f: "l" -0x1830: "s" -0x1831: "sh" -0x1832: "t" -0x1833: "d" -0x1834: "ch" -0x1835: "j" -0x1836: "y" -0x1837: "r" -0x1838: "w" -0x1839: "f" -0x183a: "k" -0x183b: "kha" -0x183c: "ts" -0x183d: "z" -0x183e: "h" -0x183f: "zr" -0x1840: "lh" -0x1841: "zh" -0x1842: "ch" -0x1843: "-" -0x1844: "e" -0x1845: "i" -0x1846: "o" -0x1847: "u" -0x1848: "O" -0x1849: "U" -0x184a: "ng" -0x184b: "b" -0x184c: "p" -0x184d: "q" -0x184e: "g" -0x184f: "m" -0x1850: "t" -0x1851: "d" -0x1852: "ch" -0x1853: "j" -0x1854: "ts" -0x1855: "y" -0x1856: "w" -0x1857: "k" -0x1858: "g" -0x1859: "h" -0x185a: "jy" -0x185b: "ny" -0x185c: "dz" -0x185d: "e" -0x185e: "i" -0x185f: "iy" -0x1860: "U" -0x1861: "u" -0x1862: "ng" -0x1863: "k" -0x1864: "g" -0x1865: "h" -0x1866: "p" -0x1867: "sh" -0x1868: "t" -0x1869: "d" -0x186a: "j" -0x186b: "f" -0x186c: "g" -0x186d: "h" -0x186e: "ts" -0x186f: "z" -0x1870: "r" -0x1871: "ch" -0x1872: "zh" -0x1873: "i" -0x1874: "k" -0x1875: "r" -0x1876: "f" -0x1877: "zh" -0x1878: "[?]" -0x1879: "[?]" -0x187a: "[?]" -0x187b: "[?]" -0x187c: "[?]" -0x187d: "[?]" -0x187e: "[?]" -0x187f: "[?]" -0x1880: "[?]" -0x1881: "H" -0x1882: "X" -0x1883: "W" -0x1884: "M" -0x1885: " 3 " -0x1886: " 333 " -0x1887: "a" -0x1888: "i" -0x1889: "k" -0x188a: "ng" -0x188b: "c" -0x188c: "tt" -0x188d: "tth" -0x188e: "dd" -0x188f: "nn" -0x1890: "t" -0x1891: "d" -0x1892: "p" -0x1893: "ph" -0x1894: "ss" -0x1895: "zh" -0x1896: "z" -0x1897: "a" -0x1898: "t" -0x1899: "zh" -0x189a: "gh" -0x189b: "ng" -0x189c: "c" -0x189d: "jh" -0x189e: "tta" -0x189f: "ddh" -0x18a0: "t" -0x18a1: "dh" -0x18a2: "ss" -0x18a3: "cy" -0x18a4: "zh" -0x18a5: "z" -0x18a6: "u" -0x18a7: "y" -0x18a8: "bh" -0x18a9: "'" -0x18aa: "[?]" -0x18ab: "[?]" -0x18ac: "[?]" -0x18ad: "[?]" -0x18ae: "[?]" -0x18af: "[?]" -0x18b0: "[?]" -0x18b1: "[?]" -0x18b2: "[?]" -0x18b3: "[?]" -0x18b4: "[?]" -0x18b5: "[?]" -0x18b6: "[?]" -0x18b7: "[?]" -0x18b8: "[?]" -0x18b9: "[?]" -0x18ba: "[?]" -0x18bb: "[?]" -0x18bc: "[?]" -0x18bd: "[?]" -0x18be: "[?]" -0x18bf: "[?]" -0x18c0: "[?]" -0x18c1: "[?]" -0x18c2: "[?]" -0x18c3: "[?]" -0x18c4: "[?]" -0x18c5: "[?]" -0x18c6: "[?]" -0x18c7: "[?]" -0x18c8: "[?]" -0x18c9: "[?]" -0x18ca: "[?]" -0x18cb: "[?]" -0x18cc: "[?]" -0x18cd: "[?]" -0x18ce: "[?]" -0x18cf: "[?]" -0x18d0: "[?]" -0x18d1: "[?]" -0x18d2: "[?]" -0x18d3: "[?]" -0x18d4: "[?]" -0x18d5: "[?]" -0x18d6: "[?]" -0x18d7: "[?]" -0x18d8: "[?]" -0x18d9: "[?]" -0x18da: "[?]" -0x18db: "[?]" -0x18dc: "[?]" -0x18dd: "[?]" -0x18de: "[?]" -0x18df: "[?]" -0x18e0: "[?]" -0x18e1: "[?]" -0x18e2: "[?]" -0x18e3: "[?]" -0x18e4: "[?]" -0x18e5: "[?]" -0x18e6: "[?]" -0x18e7: "[?]" -0x18e8: "[?]" -0x18e9: "[?]" -0x18ea: "[?]" -0x18eb: "[?]" -0x18ec: "[?]" -0x18ed: "[?]" -0x18ee: "[?]" -0x18ef: "[?]" -0x18f0: "[?]" -0x18f1: "[?]" -0x18f2: "[?]" -0x18f3: "[?]" -0x18f4: "[?]" -0x18f5: "[?]" -0x18f6: "[?]" -0x18f7: "[?]" -0x18f8: "[?]" -0x18f9: "[?]" -0x18fa: "[?]" -0x18fb: "[?]" -0x18fc: "[?]" -0x18fd: "[?]" -0x18fe: "[?]" -/* x01d */ -0x1d00: "" -0x1d01: "" -0x1d02: "" -0x1d03: "" -0x1d04: "" -0x1d05: "" -0x1d06: "" -0x1d07: "" -0x1d08: "" -0x1d09: "" -0x1d0a: "" -0x1d0b: "" -0x1d0c: "" -0x1d0d: "" -0x1d0e: "" -0x1d0f: "" -0x1d10: "" -0x1d11: "" -0x1d12: "" -0x1d13: "" -0x1d14: "" -0x1d15: "" -0x1d16: "" -0x1d17: "" -0x1d18: "" -0x1d19: "" -0x1d1a: "" -0x1d1b: "" -0x1d1c: "" -0x1d1d: "" -0x1d1e: "" -0x1d1f: "" -0x1d20: "" -0x1d21: "" -0x1d22: "" -0x1d23: "" -0x1d24: "" -0x1d25: "" -0x1d26: "" -0x1d27: "" -0x1d28: "" -0x1d29: "" -0x1d2a: "" -0x1d2b: "" -0x1d2c: "" -0x1d2d: "" -0x1d2e: "" -0x1d2f: "" -0x1d30: "" -0x1d31: "" -0x1d32: "" -0x1d33: "" -0x1d34: "" -0x1d35: "" -0x1d36: "" -0x1d37: "" -0x1d38: "" -0x1d39: "" -0x1d3a: "" -0x1d3b: "" -0x1d3c: "" -0x1d3d: "" -0x1d3e: "" -0x1d3f: "" -0x1d40: "" -0x1d41: "" -0x1d42: "" -0x1d43: "" -0x1d44: "" -0x1d45: "" -0x1d46: "" -0x1d47: "" -0x1d48: "" -0x1d49: "" -0x1d4a: "" -0x1d4b: "" -0x1d4c: "" -0x1d4d: "" -0x1d4e: "" -0x1d4f: "" -0x1d50: "" -0x1d51: "" -0x1d52: "" -0x1d53: "" -0x1d54: "" -0x1d55: "" -0x1d56: "" -0x1d57: "" -0x1d58: "" -0x1d59: "" -0x1d5a: "" -0x1d5b: "" -0x1d5c: "" -0x1d5d: "" -0x1d5e: "" -0x1d5f: "" -0x1d60: "" -0x1d61: "" -0x1d62: "" -0x1d63: "" -0x1d64: "" -0x1d65: "" -0x1d66: "" -0x1d67: "" -0x1d68: "" -0x1d69: "" -0x1d6a: "" -0x1d6b: "" -0x1d6c: "b" -0x1d6d: "d" -0x1d6e: "f" -0x1d6f: "m" -0x1d70: "n" -0x1d71: "p" -0x1d72: "r" -0x1d73: "r" -0x1d74: "s" -0x1d75: "t" -0x1d76: "z" -0x1d77: "g" -0x1d78: "" -0x1d79: "" -0x1d7a: "" -0x1d7b: "" -0x1d7c: "" -0x1d7d: "p" -0x1d7e: "" -0x1d7f: "" -0x1d80: "b" -0x1d81: "d" -0x1d82: "f" -0x1d83: "g" -0x1d84: "k" -0x1d85: "l" -0x1d86: "m" -0x1d87: "n" -0x1d88: "p" -0x1d89: "r" -0x1d8a: "s" -0x1d8b: "" -0x1d8c: "v" -0x1d8d: "x" -0x1d8e: "z" -0x1d8f: "" -0x1d90: "" -0x1d91: "" -0x1d92: "" -0x1d93: "" -0x1d94: "" -0x1d95: "" -0x1d96: "" -0x1d97: "" -0x1d98: "" -0x1d99: "" -0x1d9a: "" -0x1d9b: "" -0x1d9c: "" -0x1d9d: "" -0x1d9e: "" -0x1d9f: "" -0x1da0: "" -0x1da1: "" -0x1da2: "" -0x1da3: "" -0x1da4: "" -0x1da5: "" -0x1da6: "" -0x1da7: "" -0x1da8: "" -0x1da9: "" -0x1daa: "" -0x1dab: "" -0x1dac: "" -0x1dad: "" -0x1dae: "" -0x1daf: "" -0x1db0: "" -0x1db1: "" -0x1db2: "" -0x1db3: "" -0x1db4: "" -0x1db5: "" -0x1db6: "" -0x1db7: "" -0x1db8: "" -0x1db9: "" -0x1dba: "" -0x1dbb: "" -0x1dbc: "" -0x1dbd: "" -0x1dbe: "" -0x1dbf: "" -0x1dc0: "" -0x1dc1: "" -0x1dc2: "" -0x1dc3: "" -0x1dc4: "" -0x1dc5: "" -0x1dc6: "" -0x1dc7: "" -0x1dc8: "" -0x1dc9: "" -0x1dca: "" -0x1dcb: "" -0x1dcc: "" -0x1dcd: "" -0x1dce: "" -0x1dcf: "" -0x1dd0: "" -0x1dd1: "" -0x1dd2: "" -0x1dd3: "" -0x1dd4: "" -0x1dd5: "" -0x1dd6: "" -0x1dd7: "" -0x1dd8: "" -0x1dd9: "" -0x1dda: "" -0x1ddb: "" -0x1ddc: "" -0x1ddd: "" -0x1dde: "" -0x1ddf: "" -0x1de0: "" -0x1de1: "" -0x1de2: "" -0x1de3: "" -0x1de4: "" -0x1de5: "" -0x1de6: "" -0x1de7: "" -0x1de8: "" -0x1de9: "" -0x1dea: "" -0x1deb: "" -0x1dec: "" -0x1ded: "" -0x1dee: "" -0x1def: "" -0x1df0: "" -0x1df1: "" -0x1df2: "" -0x1df3: "" -0x1df4: "" -0x1df5: "" -0x1df6: "" -0x1df7: "" -0x1df8: "" -0x1df9: "" -0x1dfa: "" -0x1dfb: "" -0x1dfc: "" -0x1dfd: "" -0x1dfe: "" -/* x01e */ -0x1e00: "A" -0x1e01: "a" -0x1e02: "B" -0x1e03: "b" -0x1e04: "B" -0x1e05: "b" -0x1e06: "B" -0x1e07: "b" -0x1e08: "C" -0x1e09: "c" -0x1e0a: "D" -0x1e0b: "d" -0x1e0c: "D" -0x1e0d: "d" -0x1e0e: "D" -0x1e0f: "d" -0x1e10: "D" -0x1e11: "d" -0x1e12: "D" -0x1e13: "d" -0x1e14: "E" -0x1e15: "e" -0x1e16: "E" -0x1e17: "e" -0x1e18: "E" -0x1e19: "e" -0x1e1a: "E" -0x1e1b: "e" -0x1e1c: "E" -0x1e1d: "e" -0x1e1e: "F" -0x1e1f: "f" -0x1e20: "G" -0x1e21: "g" -0x1e22: "H" -0x1e23: "h" -0x1e24: "H" -0x1e25: "h" -0x1e26: "H" -0x1e27: "h" -0x1e28: "H" -0x1e29: "h" -0x1e2a: "H" -0x1e2b: "h" -0x1e2c: "I" -0x1e2d: "i" -0x1e2e: "I" -0x1e2f: "i" -0x1e30: "K" -0x1e31: "k" -0x1e32: "K" -0x1e33: "k" -0x1e34: "K" -0x1e35: "k" -0x1e36: "L" -0x1e37: "l" -0x1e38: "L" -0x1e39: "l" -0x1e3a: "L" -0x1e3b: "l" -0x1e3c: "L" -0x1e3d: "l" -0x1e3e: "M" -0x1e3f: "m" -0x1e40: "M" -0x1e41: "m" -0x1e42: "M" -0x1e43: "m" -0x1e44: "N" -0x1e45: "n" -0x1e46: "N" -0x1e47: "n" -0x1e48: "N" -0x1e49: "n" -0x1e4a: "N" -0x1e4b: "n" -0x1e4c: "O" -0x1e4d: "o" -0x1e4e: "O" -0x1e4f: "o" -0x1e50: "O" -0x1e51: "o" -0x1e52: "O" -0x1e53: "o" -0x1e54: "P" -0x1e55: "p" -0x1e56: "P" -0x1e57: "p" -0x1e58: "R" -0x1e59: "r" -0x1e5a: "R" -0x1e5b: "r" -0x1e5c: "R" -0x1e5d: "r" -0x1e5e: "R" -0x1e5f: "r" -0x1e60: "S" -0x1e61: "s" -0x1e62: "S" -0x1e63: "s" -0x1e64: "S" -0x1e65: "s" -0x1e66: "S" -0x1e67: "s" -0x1e68: "S" -0x1e69: "s" -0x1e6a: "T" -0x1e6b: "t" -0x1e6c: "T" -0x1e6d: "t" -0x1e6e: "T" -0x1e6f: "t" -0x1e70: "T" -0x1e71: "t" -0x1e72: "U" -0x1e73: "u" -0x1e74: "U" -0x1e75: "u" -0x1e76: "U" -0x1e77: "u" -0x1e78: "U" -0x1e79: "u" -0x1e7a: "U" -0x1e7b: "u" -0x1e7c: "V" -0x1e7d: "v" -0x1e7e: "V" -0x1e7f: "v" -0x1e80: "W" -0x1e81: "w" -0x1e82: "W" -0x1e83: "w" -0x1e84: "W" -0x1e85: "w" -0x1e86: "W" -0x1e87: "w" -0x1e88: "W" -0x1e89: "w" -0x1e8a: "X" -0x1e8b: "x" -0x1e8c: "X" -0x1e8d: "x" -0x1e8e: "Y" -0x1e8f: "y" -0x1e90: "Z" -0x1e91: "z" -0x1e92: "Z" -0x1e93: "z" -0x1e94: "Z" -0x1e95: "z" -0x1e96: "h" -0x1e97: "t" -0x1e98: "w" -0x1e99: "y" -0x1e9a: "a" -0x1e9b: "S" -0x1e9c: "[?]" -0x1e9d: "[?]" -0x1e9e: "Ss" -0x1e9f: "[?]" -0x1ea0: "A" -0x1ea1: "a" -0x1ea2: "A" -0x1ea3: "a" -0x1ea4: "A" -0x1ea5: "a" -0x1ea6: "A" -0x1ea7: "a" -0x1ea8: "A" -0x1ea9: "a" -0x1eaa: "A" -0x1eab: "a" -0x1eac: "A" -0x1ead: "a" -0x1eae: "A" -0x1eaf: "a" -0x1eb0: "A" -0x1eb1: "a" -0x1eb2: "A" -0x1eb3: "a" -0x1eb4: "A" -0x1eb5: "a" -0x1eb6: "A" -0x1eb7: "a" -0x1eb8: "E" -0x1eb9: "e" -0x1eba: "E" -0x1ebb: "e" -0x1ebc: "E" -0x1ebd: "e" -0x1ebe: "E" -0x1ebf: "e" -0x1ec0: "E" -0x1ec1: "e" -0x1ec2: "E" -0x1ec3: "e" -0x1ec4: "E" -0x1ec5: "e" -0x1ec6: "E" -0x1ec7: "e" -0x1ec8: "I" -0x1ec9: "i" -0x1eca: "I" -0x1ecb: "i" -0x1ecc: "O" -0x1ecd: "o" -0x1ece: "O" -0x1ecf: "o" -0x1ed0: "O" -0x1ed1: "o" -0x1ed2: "O" -0x1ed3: "o" -0x1ed4: "O" -0x1ed5: "o" -0x1ed6: "O" -0x1ed7: "o" -0x1ed8: "O" -0x1ed9: "o" -0x1eda: "O" -0x1edb: "o" -0x1edc: "O" -0x1edd: "o" -0x1ede: "O" -0x1edf: "o" -0x1ee0: "O" -0x1ee1: "o" -0x1ee2: "O" -0x1ee3: "o" -0x1ee4: "U" -0x1ee5: "u" -0x1ee6: "U" -0x1ee7: "u" -0x1ee8: "U" -0x1ee9: "u" -0x1eea: "U" -0x1eeb: "u" -0x1eec: "U" -0x1eed: "u" -0x1eee: "U" -0x1eef: "u" -0x1ef0: "U" -0x1ef1: "u" -0x1ef2: "Y" -0x1ef3: "y" -0x1ef4: "Y" -0x1ef5: "y" -0x1ef6: "Y" -0x1ef7: "y" -0x1ef8: "Y" -0x1ef9: "y" -0x1efa: "[?]" -0x1efb: "[?]" -0x1efc: "[?]" -0x1efd: "[?]" -0x1efe: "[?]" -/* x01f */ -0x1f00: "a" -0x1f01: "a" -0x1f02: "a" -0x1f03: "a" -0x1f04: "a" -0x1f05: "a" -0x1f06: "a" -0x1f07: "a" -0x1f08: "A" -0x1f09: "A" -0x1f0a: "A" -0x1f0b: "A" -0x1f0c: "A" -0x1f0d: "A" -0x1f0e: "A" -0x1f0f: "A" -0x1f10: "e" -0x1f11: "e" -0x1f12: "e" -0x1f13: "e" -0x1f14: "e" -0x1f15: "e" -0x1f16: "[?]" -0x1f17: "[?]" -0x1f18: "E" -0x1f19: "E" -0x1f1a: "E" -0x1f1b: "E" -0x1f1c: "E" -0x1f1d: "E" -0x1f1e: "[?]" -0x1f1f: "[?]" -0x1f20: "e" -0x1f21: "e" -0x1f22: "e" -0x1f23: "e" -0x1f24: "e" -0x1f25: "e" -0x1f26: "e" -0x1f27: "e" -0x1f28: "E" -0x1f29: "E" -0x1f2a: "E" -0x1f2b: "E" -0x1f2c: "E" -0x1f2d: "E" -0x1f2e: "E" -0x1f2f: "E" -0x1f30: "i" -0x1f31: "i" -0x1f32: "i" -0x1f33: "i" -0x1f34: "i" -0x1f35: "i" -0x1f36: "i" -0x1f37: "i" -0x1f38: "I" -0x1f39: "I" -0x1f3a: "I" -0x1f3b: "I" -0x1f3c: "I" -0x1f3d: "I" -0x1f3e: "I" -0x1f3f: "I" -0x1f40: "o" -0x1f41: "o" -0x1f42: "o" -0x1f43: "o" -0x1f44: "o" -0x1f45: "o" -0x1f46: "[?]" -0x1f47: "[?]" -0x1f48: "O" -0x1f49: "O" -0x1f4a: "O" -0x1f4b: "O" -0x1f4c: "O" -0x1f4d: "O" -0x1f4e: "[?]" -0x1f4f: "[?]" -0x1f50: "u" -0x1f51: "u" -0x1f52: "u" -0x1f53: "u" -0x1f54: "u" -0x1f55: "u" -0x1f56: "u" -0x1f57: "u" -0x1f58: "[?]" -0x1f59: "U" -0x1f5a: "[?]" -0x1f5b: "U" -0x1f5c: "[?]" -0x1f5d: "U" -0x1f5e: "[?]" -0x1f5f: "U" -0x1f60: "o" -0x1f61: "o" -0x1f62: "o" -0x1f63: "o" -0x1f64: "o" -0x1f65: "o" -0x1f66: "o" -0x1f67: "o" -0x1f68: "O" -0x1f69: "O" -0x1f6a: "O" -0x1f6b: "O" -0x1f6c: "O" -0x1f6d: "O" -0x1f6e: "O" -0x1f6f: "O" -0x1f70: "a" -0x1f71: "a" -0x1f72: "e" -0x1f73: "e" -0x1f74: "e" -0x1f75: "e" -0x1f76: "i" -0x1f77: "i" -0x1f78: "o" -0x1f79: "o" -0x1f7a: "u" -0x1f7b: "u" -0x1f7c: "o" -0x1f7d: "o" -0x1f7e: "[?]" -0x1f7f: "[?]" -0x1f80: "a" -0x1f81: "a" -0x1f82: "a" -0x1f83: "a" -0x1f84: "a" -0x1f85: "a" -0x1f86: "a" -0x1f87: "a" -0x1f88: "A" -0x1f89: "A" -0x1f8a: "A" -0x1f8b: "A" -0x1f8c: "A" -0x1f8d: "A" -0x1f8e: "A" -0x1f8f: "A" -0x1f90: "e" -0x1f91: "e" -0x1f92: "e" -0x1f93: "e" -0x1f94: "e" -0x1f95: "e" -0x1f96: "e" -0x1f97: "e" -0x1f98: "E" -0x1f99: "E" -0x1f9a: "E" -0x1f9b: "E" -0x1f9c: "E" -0x1f9d: "E" -0x1f9e: "E" -0x1f9f: "E" -0x1fa0: "o" -0x1fa1: "o" -0x1fa2: "o" -0x1fa3: "o" -0x1fa4: "o" -0x1fa5: "o" -0x1fa6: "o" -0x1fa7: "o" -0x1fa8: "O" -0x1fa9: "O" -0x1faa: "O" -0x1fab: "O" -0x1fac: "O" -0x1fad: "O" -0x1fae: "O" -0x1faf: "O" -0x1fb0: "a" -0x1fb1: "a" -0x1fb2: "a" -0x1fb3: "a" -0x1fb4: "a" -0x1fb5: "[?]" -0x1fb6: "a" -0x1fb7: "a" -0x1fb8: "A" -0x1fb9: "A" -0x1fba: "A" -0x1fbb: "A" -0x1fbc: "A" -0x1fbd: "'" -0x1fbe: "i" -0x1fbf: "'" -0x1fc0: "~" -0x1fc1: "\"~" -0x1fc2: "e" -0x1fc3: "e" -0x1fc4: "e" -0x1fc5: "[?]" -0x1fc6: "e" -0x1fc7: "e" -0x1fc8: "E" -0x1fc9: "E" -0x1fca: "E" -0x1fcb: "E" -0x1fcc: "E" -0x1fcd: "'`" -0x1fce: "''" -0x1fcf: "'~" -0x1fd0: "i" -0x1fd1: "i" -0x1fd2: "i" -0x1fd3: "i" -0x1fd4: "[?]" -0x1fd5: "[?]" -0x1fd6: "i" -0x1fd7: "i" -0x1fd8: "I" -0x1fd9: "I" -0x1fda: "I" -0x1fdb: "I" -0x1fdc: "[?]" -0x1fdd: "`'" -0x1fde: "`'" -0x1fdf: "`~" -0x1fe0: "u" -0x1fe1: "u" -0x1fe2: "u" -0x1fe3: "u" -0x1fe4: "R" -0x1fe5: "R" -0x1fe6: "u" -0x1fe7: "u" -0x1fe8: "U" -0x1fe9: "U" -0x1fea: "U" -0x1feb: "U" -0x1fec: "R" -0x1fed: "\"`" -0x1fee: "\"'" -0x1fef: "`" -0x1ff0: "[?]" -0x1ff1: "[?]" -0x1ff2: "o" -0x1ff3: "o" -0x1ff4: "o" -0x1ff5: "[?]" -0x1ff6: "o" -0x1ff7: "o" -0x1ff8: "O" -0x1ff9: "O" -0x1ffa: "O" -0x1ffb: "O" -0x1ffc: "O" -0x1ffd: "'" -0x1ffe: "`" -/* x020 */ -0x2000: " " -0x2001: " " -0x2002: " " -0x2003: " " -0x2004: " " -0x2005: " " -0x2006: " " -0x2007: " " -0x2008: " " -0x2009: " " -0x200a: " " -0x200b: " " -0x200c: "" -0x200d: "" -0x200e: "" -0x200f: "" -0x2010: "-" -0x2011: "-" -0x2012: "-" -0x2013: "-" -0x2014: "--" -0x2015: "--" -0x2016: "||" -0x2017: "_" -0x2018: "'" -0x2019: "'" -0x201a: "," -0x201b: "'" -0x201c: "\"" -0x201d: "\"" -0x201e: ",," -0x201f: "\"" -0x2020: "+" -0x2021: "++" -0x2022: "*" -0x2023: "*>" -0x2024: "." -0x2025: ".." -0x2026: "..." -0x2027: "." -0x2028: "\n" -0x2029: "\n\n" -0x202a: "" -0x202b: "" -0x202c: "" -0x202d: "" -0x202e: "" -0x202f: " " -0x2030: "%0" -0x2031: "%00" -0x2032: "'" -0x2033: "''" -0x2034: "'''" -0x2035: "`" -0x2036: "``" -0x2037: "```" -0x2038: "^" -0x2039: "<" -0x203a: ">" -0x203b: "*" -0x203c: "!!" -0x203d: "!?" -0x203e: "-" -0x203f: "_" -0x2040: "-" -0x2041: "^" -0x2042: "***" -0x2043: "--" -0x2044: "/" -0x2045: "-[" -0x2046: "]-" -0x2047: "[?]" -0x2048: "?!" -0x2049: "!?" -0x204a: "7" -0x204b: "PP" -0x204c: "(]" -0x204d: "[)" -0x204e: "[?]" -0x204f: "[?]" -0x2050: "[?]" -0x2051: "[?]" -0x2052: "[?]" -0x2053: "[?]" -0x2054: "[?]" -0x2055: "[?]" -0x2056: "[?]" -0x2057: "[?]" -0x2058: "[?]" -0x2059: "[?]" -0x205a: "[?]" -0x205b: "[?]" -0x205c: "[?]" -0x205d: "[?]" -0x205e: "[?]" -0x205f: "[?]" -0x2060: "[?]" -0x2061: "[?]" -0x2062: "[?]" -0x2063: "[?]" -0x2064: "[?]" -0x2065: "[?]" -0x2066: "[?]" -0x2067: "[?]" -0x2068: "[?]" -0x2069: "[?]" -0x206a: "" -0x206b: "" -0x206c: "" -0x206d: "" -0x206e: "" -0x206f: "" -0x2070: "0" -0x2071: "" -0x2072: "" -0x2073: "" -0x2074: "4" -0x2075: "5" -0x2076: "6" -0x2077: "7" -0x2078: "8" -0x2079: "9" -0x207a: "+" -0x207b: "-" -0x207c: "=" -0x207d: "(" -0x207e: ")" -0x207f: "n" -0x2080: "0" -0x2081: "1" -0x2082: "2" -0x2083: "3" -0x2084: "4" -0x2085: "5" -0x2086: "6" -0x2087: "7" -0x2088: "8" -0x2089: "9" -0x208a: "+" -0x208b: "-" -0x208c: "=" -0x208d: "(" -0x208e: ")" -0x208f: "[?]" -0x2090: "[?]" -0x2091: "[?]" -0x2092: "[?]" -0x2093: "[?]" -0x2094: "[?]" -0x2095: "[?]" -0x2096: "[?]" -0x2097: "[?]" -0x2098: "[?]" -0x2099: "[?]" -0x209a: "[?]" -0x209b: "[?]" -0x209c: "[?]" -0x209d: "[?]" -0x209e: "[?]" -0x209f: "[?]" -0x20a0: "ECU" -0x20a1: "CL" -0x20a2: "Cr" -0x20a3: "FF" -0x20a4: "L" -0x20a5: "mil" -0x20a6: "N" -0x20a7: "Pts" -0x20a8: "Rs" -0x20a9: "W" -0x20aa: "NS" -0x20ab: "D" -0x20ac: "EU" -0x20ad: "K" -0x20ae: "T" -0x20af: "Dr" -0x20b0: "[?]" -0x20b1: "[?]" -0x20b2: "[?]" -0x20b3: "[?]" -0x20b4: "[?]" -0x20b5: "[?]" -0x20b6: "[?]" -0x20b7: "[?]" -0x20b8: "[?]" -0x20b9: "[?]" -0x20ba: "[?]" -0x20bb: "[?]" -0x20bc: "[?]" -0x20bd: "[?]" -0x20be: "[?]" -0x20bf: "[?]" -0x20c0: "[?]" -0x20c1: "[?]" -0x20c2: "[?]" -0x20c3: "[?]" -0x20c4: "[?]" -0x20c5: "[?]" -0x20c6: "[?]" -0x20c7: "[?]" -0x20c8: "[?]" -0x20c9: "[?]" -0x20ca: "[?]" -0x20cb: "[?]" -0x20cc: "[?]" -0x20cd: "[?]" -0x20ce: "[?]" -0x20cf: "[?]" -0x20d0: "" -0x20d1: "" -0x20d2: "" -0x20d3: "" -0x20d4: "" -0x20d5: "" -0x20d6: "" -0x20d7: "" -0x20d8: "" -0x20d9: "" -0x20da: "" -0x20db: "" -0x20dc: "" -0x20dd: "" -0x20de: "" -0x20df: "" -0x20e0: "" -0x20e1: "" -0x20e2: "" -0x20e3: "" -0x20e4: "[?]" -0x20e5: "[?]" -0x20e6: "[?]" -0x20e7: "[?]" -0x20e8: "[?]" -0x20e9: "[?]" -0x20ea: "[?]" -0x20eb: "[?]" -0x20ec: "[?]" -0x20ed: "[?]" -0x20ee: "[?]" -0x20ef: "[?]" -0x20f0: "[?]" -0x20f1: "[?]" -0x20f2: "[?]" -0x20f3: "[?]" -0x20f4: "[?]" -0x20f5: "[?]" -0x20f6: "[?]" -0x20f7: "[?]" -0x20f8: "[?]" -0x20f9: "[?]" -0x20fa: "[?]" -0x20fb: "[?]" -0x20fc: "[?]" -0x20fd: "[?]" -0x20fe: "[?]" -/* x021 */ -0x2100: "" -0x2101: "" -0x2102: "" -0x2103: "" -0x2104: "" -0x2105: "" -0x2106: "" -0x2107: "" -0x2108: "" -0x2109: "" -0x210a: "" -0x210b: "" -0x210c: "" -0x210d: "" -0x210e: "" -0x210f: "" -0x2110: "" -0x2111: "" -0x2112: "" -0x2113: "" -0x2114: "" -0x2115: "" -0x2116: "" -0x2117: "" -0x2118: "" -0x2119: "" -0x211a: "" -0x211b: "" -0x211c: "" -0x211d: "" -0x211e: "" -0x211f: "" -0x2120: "" -0x2121: "" -0x2122: "" -0x2123: "" -0x2124: "" -0x2125: "" -0x2126: "" -0x2127: "" -0x2128: "" -0x2129: "" -0x212a: "K" -0x212b: "A" -0x212c: "" -0x212d: "" -0x212e: "" -0x212f: "" -0x2130: "" -0x2131: "" -0x2132: "F" -0x2133: "" -0x2134: "" -0x2135: "" -0x2136: "" -0x2137: "" -0x2138: "" -0x2139: "" -0x213a: "" -0x213b: "[?]" -0x213c: "[?]" -0x213d: "[?]" -0x213e: "[?]" -0x213f: "[?]" -0x2140: "[?]" -0x2141: "[?]" -0x2142: "[?]" -0x2143: "[?]" -0x2144: "[?]" -0x2145: "[?]" -0x2146: "[?]" -0x2147: "[?]" -0x2148: "[?]" -0x2149: "[?]" -0x214a: "[?]" -0x214b: "[?]" -0x214c: "[?]" -0x214d: "[?]" -0x214e: "F" -0x214f: "[?]" -0x2150: "[?]" -0x2151: "[?]" -0x2152: "[?]" -0x2153: " 1/3 " -0x2154: " 2/3 " -0x2155: " 1/5 " -0x2156: " 2/5 " -0x2157: " 3/5 " -0x2158: " 4/5 " -0x2159: " 1/6 " -0x215a: " 5/6 " -0x215b: " 1/8 " -0x215c: " 3/8 " -0x215d: " 5/8 " -0x215e: " 7/8 " -0x215f: " 1/" -0x2160: "I" -0x2161: "II" -0x2162: "III" -0x2163: "IV" -0x2164: "V" -0x2165: "VI" -0x2166: "VII" -0x2167: "VIII" -0x2168: "IX" -0x2169: "X" -0x216a: "XI" -0x216b: "XII" -0x216c: "L" -0x216d: "C" -0x216e: "D" -0x216f: "M" -0x2170: "i" -0x2171: "ii" -0x2172: "iii" -0x2173: "iv" -0x2174: "v" -0x2175: "vi" -0x2176: "vii" -0x2177: "viii" -0x2178: "ix" -0x2179: "x" -0x217a: "xi" -0x217b: "xii" -0x217c: "l" -0x217d: "c" -0x217e: "d" -0x217f: "m" -0x2180: "(D" -0x2181: "D)" -0x2182: "((|))" -0x2183: ")" -0x2184: "[?]" -0x2185: "[?]" -0x2186: "[?]" -0x2187: "[?]" -0x2188: "[?]" -0x2189: "[?]" -0x218a: "[?]" -0x218b: "[?]" -0x218c: "[?]" -0x218d: "[?]" -0x218e: "[?]" -0x218f: "[?]" -0x2190: "-" -0x2191: "|" -0x2192: "-" -0x2193: "|" -0x2194: "-" -0x2195: "|" -0x2196: "\\" -0x2197: "/" -0x2198: "\\" -0x2199: "/" -0x219a: "-" -0x219b: "-" -0x219c: "~" -0x219d: "~" -0x219e: "-" -0x219f: "|" -0x21a0: "-" -0x21a1: "|" -0x21a2: "-" -0x21a3: "-" -0x21a4: "-" -0x21a5: "|" -0x21a6: "-" -0x21a7: "|" -0x21a8: "|" -0x21a9: "-" -0x21aa: "-" -0x21ab: "-" -0x21ac: "-" -0x21ad: "-" -0x21ae: "-" -0x21af: "|" -0x21b0: "|" -0x21b1: "|" -0x21b2: "|" -0x21b3: "|" -0x21b4: "|" -0x21b5: "|" -0x21b6: "^" -0x21b7: "V" -0x21b8: "\\" -0x21b9: "=" -0x21ba: "V" -0x21bb: "^" -0x21bc: "-" -0x21bd: "-" -0x21be: "|" -0x21bf: "|" -0x21c0: "-" -0x21c1: "-" -0x21c2: "|" -0x21c3: "|" -0x21c4: "=" -0x21c5: "|" -0x21c6: "=" -0x21c7: "=" -0x21c8: "|" -0x21c9: "=" -0x21ca: "|" -0x21cb: "=" -0x21cc: "=" -0x21cd: "=" -0x21ce: "=" -0x21cf: "=" -0x21d0: "=" -0x21d1: "|" -0x21d2: "=" -0x21d3: "|" -0x21d4: "=" -0x21d5: "|" -0x21d6: "\\" -0x21d7: "/" -0x21d8: "\\" -0x21d9: "/" -0x21da: "=" -0x21db: "=" -0x21dc: "~" -0x21dd: "~" -0x21de: "|" -0x21df: "|" -0x21e0: "-" -0x21e1: "|" -0x21e2: "-" -0x21e3: "|" -0x21e4: "-" -0x21e5: "-" -0x21e6: "-" -0x21e7: "|" -0x21e8: "-" -0x21e9: "|" -0x21ea: "|" -0x21eb: "|" -0x21ec: "|" -0x21ed: "|" -0x21ee: "|" -0x21ef: "|" -0x21f0: "-" -0x21f1: "\\" -0x21f2: "\\" -0x21f3: "|" -0x21f4: "[?]" -0x21f5: "[?]" -0x21f6: "[?]" -0x21f7: "[?]" -0x21f8: "[?]" -0x21f9: "[?]" -0x21fa: "[?]" -0x21fb: "[?]" -0x21fc: "[?]" -0x21fd: "[?]" -0x21fe: "[?]" -/* x022 */ -0x2200: "[?]" -0x2201: "[?]" -0x2202: "[?]" -0x2203: "[?]" -0x2204: "[?]" -0x2205: "[?]" -0x2206: "[?]" -0x2207: "[?]" -0x2208: "[?]" -0x2209: "[?]" -0x220a: "[?]" -0x220b: "[?]" -0x220c: "[?]" -0x220d: "[?]" -0x220e: "[?]" -0x220f: "[?]" -0x2210: "[?]" -0x2211: "[?]" -0x2212: "[?]" -0x2213: "[?]" -0x2214: "[?]" -0x2215: "[?]" -0x2216: "[?]" -0x2217: "[?]" -0x2218: "[?]" -0x2219: "[?]" -0x221a: "[?]" -0x221b: "[?]" -0x221c: "[?]" -0x221d: "[?]" -0x221e: "[?]" -0x221f: "[?]" -0x2220: "[?]" -0x2221: "[?]" -0x2222: "[?]" -0x2223: "[?]" -0x2224: "[?]" -0x2225: "[?]" -0x2226: "[?]" -0x2227: "[?]" -0x2228: "[?]" -0x2229: "[?]" -0x222a: "[?]" -0x222b: "[?]" -0x222c: "[?]" -0x222d: "[?]" -0x222e: "[?]" -0x222f: "[?]" -0x2230: "[?]" -0x2231: "[?]" -0x2232: "[?]" -0x2233: "[?]" -0x2234: "[?]" -0x2235: "[?]" -0x2236: "[?]" -0x2237: "[?]" -0x2238: "[?]" -0x2239: "[?]" -0x223a: "[?]" -0x223b: "[?]" -0x223c: "[?]" -0x223d: "[?]" -0x223e: "[?]" -0x223f: "[?]" -0x2240: "[?]" -0x2241: "[?]" -0x2242: "[?]" -0x2243: "[?]" -0x2244: "[?]" -0x2245: "[?]" -0x2246: "[?]" -0x2247: "[?]" -0x2248: "[?]" -0x2249: "[?]" -0x224a: "[?]" -0x224b: "[?]" -0x224c: "[?]" -0x224d: "[?]" -0x224e: "[?]" -0x224f: "[?]" -0x2250: "[?]" -0x2251: "[?]" -0x2252: "[?]" -0x2253: "[?]" -0x2254: "[?]" -0x2255: "[?]" -0x2256: "[?]" -0x2257: "[?]" -0x2258: "[?]" -0x2259: "[?]" -0x225a: "[?]" -0x225b: "[?]" -0x225c: "[?]" -0x225d: "[?]" -0x225e: "[?]" -0x225f: "[?]" -0x2260: "[?]" -0x2261: "[?]" -0x2262: "[?]" -0x2263: "[?]" -0x2264: "[?]" -0x2265: "[?]" -0x2266: "[?]" -0x2267: "[?]" -0x2268: "[?]" -0x2269: "[?]" -0x226a: "[?]" -0x226b: "[?]" -0x226c: "[?]" -0x226d: "[?]" -0x226e: "[?]" -0x226f: "[?]" -0x2270: "[?]" -0x2271: "[?]" -0x2272: "[?]" -0x2273: "[?]" -0x2274: "[?]" -0x2275: "[?]" -0x2276: "[?]" -0x2277: "[?]" -0x2278: "[?]" -0x2279: "[?]" -0x227a: "[?]" -0x227b: "[?]" -0x227c: "[?]" -0x227d: "[?]" -0x227e: "[?]" -0x227f: "[?]" -0x2280: "[?]" -0x2281: "[?]" -0x2282: "[?]" -0x2283: "[?]" -0x2284: "[?]" -0x2285: "[?]" -0x2286: "[?]" -0x2287: "[?]" -0x2288: "[?]" -0x2289: "[?]" -0x228a: "[?]" -0x228b: "[?]" -0x228c: "[?]" -0x228d: "[?]" -0x228e: "[?]" -0x228f: "[?]" -0x2290: "[?]" -0x2291: "[?]" -0x2292: "[?]" -0x2293: "[?]" -0x2294: "[?]" -0x2295: "[?]" -0x2296: "[?]" -0x2297: "[?]" -0x2298: "[?]" -0x2299: "[?]" -0x229a: "[?]" -0x229b: "[?]" -0x229c: "[?]" -0x229d: "[?]" -0x229e: "[?]" -0x229f: "[?]" -0x22a0: "[?]" -0x22a1: "[?]" -0x22a2: "[?]" -0x22a3: "[?]" -0x22a4: "[?]" -0x22a5: "[?]" -0x22a6: "[?]" -0x22a7: "[?]" -0x22a8: "[?]" -0x22a9: "[?]" -0x22aa: "[?]" -0x22ab: "[?]" -0x22ac: "[?]" -0x22ad: "[?]" -0x22ae: "[?]" -0x22af: "[?]" -0x22b0: "[?]" -0x22b1: "[?]" -0x22b2: "[?]" -0x22b3: "[?]" -0x22b4: "[?]" -0x22b5: "[?]" -0x22b6: "[?]" -0x22b7: "[?]" -0x22b8: "[?]" -0x22b9: "[?]" -0x22ba: "[?]" -0x22bb: "[?]" -0x22bc: "[?]" -0x22bd: "[?]" -0x22be: "[?]" -0x22bf: "[?]" -0x22c0: "[?]" -0x22c1: "[?]" -0x22c2: "[?]" -0x22c3: "[?]" -0x22c4: "[?]" -0x22c5: "[?]" -0x22c6: "[?]" -0x22c7: "[?]" -0x22c8: "[?]" -0x22c9: "[?]" -0x22ca: "[?]" -0x22cb: "[?]" -0x22cc: "[?]" -0x22cd: "[?]" -0x22ce: "[?]" -0x22cf: "[?]" -0x22d0: "[?]" -0x22d1: "[?]" -0x22d2: "[?]" -0x22d3: "[?]" -0x22d4: "[?]" -0x22d5: "[?]" -0x22d6: "[?]" -0x22d7: "[?]" -0x22d8: "[?]" -0x22d9: "[?]" -0x22da: "[?]" -0x22db: "[?]" -0x22dc: "[?]" -0x22dd: "[?]" -0x22de: "[?]" -0x22df: "[?]" -0x22e0: "[?]" -0x22e1: "[?]" -0x22e2: "[?]" -0x22e3: "[?]" -0x22e4: "[?]" -0x22e5: "[?]" -0x22e6: "[?]" -0x22e7: "[?]" -0x22e8: "[?]" -0x22e9: "[?]" -0x22ea: "[?]" -0x22eb: "[?]" -0x22ec: "[?]" -0x22ed: "[?]" -0x22ee: "[?]" -0x22ef: "[?]" -0x22f0: "[?]" -0x22f1: "[?]" -0x22f2: "[?]" -0x22f3: "[?]" -0x22f4: "[?]" -0x22f5: "[?]" -0x22f6: "[?]" -0x22f7: "[?]" -0x22f8: "[?]" -0x22f9: "[?]" -0x22fa: "[?]" -0x22fb: "[?]" -0x22fc: "[?]" -0x22fd: "[?]" -0x22fe: "[?]" -/* x023 */ -0x2300: "[?]" -0x2301: "[?]" -0x2302: "[?]" -0x2303: "[?]" -0x2304: "[?]" -0x2305: "[?]" -0x2306: "[?]" -0x2307: "[?]" -0x2308: "[?]" -0x2309: "[?]" -0x230a: "[?]" -0x230b: "[?]" -0x230c: "[?]" -0x230d: "[?]" -0x230e: "[?]" -0x230f: "[?]" -0x2310: "[?]" -0x2311: "[?]" -0x2312: "[?]" -0x2313: "[?]" -0x2314: "[?]" -0x2315: "[?]" -0x2316: "[?]" -0x2317: "[?]" -0x2318: "[?]" -0x2319: "[?]" -0x231a: "[?]" -0x231b: "[?]" -0x231c: "[?]" -0x231d: "[?]" -0x231e: "[?]" -0x231f: "[?]" -0x2320: "[?]" -0x2321: "[?]" -0x2322: "[?]" -0x2323: "[?]" -0x2324: "[?]" -0x2325: "[?]" -0x2326: "[?]" -0x2327: "[?]" -0x2328: "[?]" -0x2329: "[?]" -0x232a: "[?]" -0x232b: "[?]" -0x232c: "[?]" -0x232d: "[?]" -0x232e: "[?]" -0x232f: "[?]" -0x2330: "[?]" -0x2331: "[?]" -0x2332: "[?]" -0x2333: "[?]" -0x2334: "[?]" -0x2335: "[?]" -0x2336: "[?]" -0x2337: "[?]" -0x2338: "[?]" -0x2339: "[?]" -0x233a: "[?]" -0x233b: "[?]" -0x233c: "[?]" -0x233d: "[?]" -0x233e: "[?]" -0x233f: "[?]" -0x2340: "[?]" -0x2341: "[?]" -0x2342: "[?]" -0x2343: "[?]" -0x2344: "[?]" -0x2345: "[?]" -0x2346: "[?]" -0x2347: "[?]" -0x2348: "[?]" -0x2349: "[?]" -0x234a: "[?]" -0x234b: "[?]" -0x234c: "[?]" -0x234d: "[?]" -0x234e: "[?]" -0x234f: "[?]" -0x2350: "[?]" -0x2351: "[?]" -0x2352: "[?]" -0x2353: "[?]" -0x2354: "[?]" -0x2355: "[?]" -0x2356: "[?]" -0x2357: "[?]" -0x2358: "[?]" -0x2359: "[?]" -0x235a: "[?]" -0x235b: "[?]" -0x235c: "[?]" -0x235d: "[?]" -0x235e: "[?]" -0x235f: "[?]" -0x2360: "[?]" -0x2361: "[?]" -0x2362: "[?]" -0x2363: "[?]" -0x2364: "[?]" -0x2365: "[?]" -0x2366: "[?]" -0x2367: "[?]" -0x2368: "[?]" -0x2369: "[?]" -0x236a: "[?]" -0x236b: "[?]" -0x236c: "[?]" -0x236d: "[?]" -0x236e: "[?]" -0x236f: "[?]" -0x2370: "[?]" -0x2371: "[?]" -0x2372: "[?]" -0x2373: "[?]" -0x2374: "[?]" -0x2375: "[?]" -0x2376: "[?]" -0x2377: "[?]" -0x2378: "[?]" -0x2379: "[?]" -0x237a: "[?]" -0x237b: "[?]" -0x237c: "[?]" -0x237d: "[?]" -0x237e: "[?]" -0x237f: "[?]" -0x2380: "[?]" -0x2381: "[?]" -0x2382: "[?]" -0x2383: "[?]" -0x2384: "[?]" -0x2385: "[?]" -0x2386: "[?]" -0x2387: "[?]" -0x2388: "[?]" -0x2389: "[?]" -0x238a: "[?]" -0x238b: "[?]" -0x238c: "[?]" -0x238d: "[?]" -0x238e: "[?]" -0x238f: "[?]" -0x2390: "[?]" -0x2391: "[?]" -0x2392: "[?]" -0x2393: "[?]" -0x2394: "[?]" -0x2395: "[?]" -0x2396: "[?]" -0x2397: "[?]" -0x2398: "[?]" -0x2399: "[?]" -0x239a: "[?]" -0x239b: "[?]" -0x239c: "[?]" -0x239d: "[?]" -0x239e: "[?]" -0x239f: "[?]" -0x23a0: "[?]" -0x23a1: "[?]" -0x23a2: "[?]" -0x23a3: "[?]" -0x23a4: "[?]" -0x23a5: "[?]" -0x23a6: "[?]" -0x23a7: "[?]" -0x23a8: "[?]" -0x23a9: "[?]" -0x23aa: "[?]" -0x23ab: "[?]" -0x23ac: "[?]" -0x23ad: "[?]" -0x23ae: "[?]" -0x23af: "[?]" -0x23b0: "[?]" -0x23b1: "[?]" -0x23b2: "[?]" -0x23b3: "[?]" -0x23b4: "[?]" -0x23b5: "[?]" -0x23b6: "[?]" -0x23b7: "[?]" -0x23b8: "[?]" -0x23b9: "[?]" -0x23ba: "[?]" -0x23bb: "[?]" -0x23bc: "[?]" -0x23bd: "[?]" -0x23be: "[?]" -0x23bf: "[?]" -0x23c0: "[?]" -0x23c1: "[?]" -0x23c2: "[?]" -0x23c3: "[?]" -0x23c4: "[?]" -0x23c5: "[?]" -0x23c6: "[?]" -0x23c7: "[?]" -0x23c8: "[?]" -0x23c9: "[?]" -0x23ca: "[?]" -0x23cb: "[?]" -0x23cc: "[?]" -0x23cd: "[?]" -0x23ce: "[?]" -0x23cf: "[?]" -0x23d0: "[?]" -0x23d1: "[?]" -0x23d2: "[?]" -0x23d3: "[?]" -0x23d4: "[?]" -0x23d5: "[?]" -0x23d6: "[?]" -0x23d7: "[?]" -0x23d8: "[?]" -0x23d9: "[?]" -0x23da: "[?]" -0x23db: "[?]" -0x23dc: "[?]" -0x23dd: "[?]" -0x23de: "[?]" -0x23df: "[?]" -0x23e0: "[?]" -0x23e1: "[?]" -0x23e2: "[?]" -0x23e3: "[?]" -0x23e4: "[?]" -0x23e5: "[?]" -0x23e6: "[?]" -0x23e7: "[?]" -0x23e8: "[?]" -0x23e9: "[?]" -0x23ea: "[?]" -0x23eb: "[?]" -0x23ec: "[?]" -0x23ed: "[?]" -0x23ee: "[?]" -0x23ef: "[?]" -0x23f0: "[?]" -0x23f1: "[?]" -0x23f2: "[?]" -0x23f3: "[?]" -0x23f4: "[?]" -0x23f5: "[?]" -0x23f6: "[?]" -0x23f7: "[?]" -0x23f8: "[?]" -0x23f9: "[?]" -0x23fa: "[?]" -0x23fb: "[?]" -0x23fc: "[?]" -0x23fd: "[?]" -0x23fe: "[?]" -/* x024 */ -0x2400: "" -0x2401: "" -0x2402: "" -0x2403: "" -0x2404: "" -0x2405: "" -0x2406: "" -0x2407: "" -0x2408: "" -0x2409: "" -0x240a: "" -0x240b: "" -0x240c: "" -0x240d: "" -0x240e: "" -0x240f: "" -0x2410: "" -0x2411: "" -0x2412: "" -0x2413: "" -0x2414: "" -0x2415: "" -0x2416: "" -0x2417: "" -0x2418: "" -0x2419: "" -0x241a: "" -0x241b: "" -0x241c: "" -0x241d: "" -0x241e: "" -0x241f: "" -0x2420: "" -0x2421: "" -0x2422: "" -0x2423: "" -0x2424: "" -0x2425: "" -0x2426: "" -0x2427: "[?]" -0x2428: "[?]" -0x2429: "[?]" -0x242a: "[?]" -0x242b: "[?]" -0x242c: "[?]" -0x242d: "[?]" -0x242e: "[?]" -0x242f: "[?]" -0x2430: "[?]" -0x2431: "[?]" -0x2432: "[?]" -0x2433: "[?]" -0x2434: "[?]" -0x2435: "[?]" -0x2436: "[?]" -0x2437: "[?]" -0x2438: "[?]" -0x2439: "[?]" -0x243a: "[?]" -0x243b: "[?]" -0x243c: "[?]" -0x243d: "[?]" -0x243e: "[?]" -0x243f: "[?]" -0x2440: "" -0x2441: "" -0x2442: "" -0x2443: "" -0x2444: "" -0x2445: "" -0x2446: "" -0x2447: "" -0x2448: "" -0x2449: "" -0x244a: "" -0x244b: "[?]" -0x244c: "[?]" -0x244d: "[?]" -0x244e: "[?]" -0x244f: "[?]" -0x2450: "[?]" -0x2451: "[?]" -0x2452: "[?]" -0x2453: "[?]" -0x2454: "[?]" -0x2455: "[?]" -0x2456: "[?]" -0x2457: "[?]" -0x2458: "[?]" -0x2459: "[?]" -0x245a: "[?]" -0x245b: "[?]" -0x245c: "[?]" -0x245d: "[?]" -0x245e: "[?]" -0x245f: "[?]" -0x2460: "" -0x2461: "" -0x2462: "" -0x2463: "" -0x2464: "" -0x2465: "" -0x2466: "" -0x2467: "" -0x2468: "" -0x2469: "" -0x246a: "" -0x246b: "" -0x246c: "" -0x246d: "" -0x246e: "" -0x246f: "" -0x2470: "" -0x2471: "" -0x2472: "" -0x2473: "" -0x2474: "" -0x2475: "" -0x2476: "" -0x2477: "" -0x2478: "" -0x2479: "" -0x247a: "" -0x247b: "" -0x247c: "" -0x247d: "" -0x247e: "" -0x247f: "" -0x2480: "" -0x2481: "" -0x2482: "" -0x2483: "" -0x2484: "" -0x2485: "" -0x2486: "" -0x2487: "" -0x2488: "" -0x2489: "" -0x248a: "" -0x248b: "" -0x248c: "" -0x248d: "" -0x248e: "" -0x248f: "" -0x2490: "" -0x2491: "" -0x2492: "" -0x2493: "" -0x2494: "" -0x2495: "" -0x2496: "" -0x2497: "" -0x2498: "" -0x2499: "" -0x249a: "" -0x249b: "" -0x249c: "" -0x249d: "" -0x249e: "" -0x249f: "" -0x24a0: "" -0x24a1: "" -0x24a2: "" -0x24a3: "" -0x24a4: "" -0x24a5: "" -0x24a6: "" -0x24a7: "" -0x24a8: "" -0x24a9: "" -0x24aa: "" -0x24ab: "" -0x24ac: "" -0x24ad: "" -0x24ae: "" -0x24af: "" -0x24b0: "" -0x24b1: "" -0x24b2: "" -0x24b3: "" -0x24b4: "" -0x24b5: "" -0x24b6: "" -0x24b7: "" -0x24b8: "" -0x24b9: "" -0x24ba: "" -0x24bb: "" -0x24bc: "" -0x24bd: "" -0x24be: "" -0x24bf: "" -0x24c0: "" -0x24c1: "" -0x24c2: "" -0x24c3: "" -0x24c4: "" -0x24c5: "" -0x24c6: "" -0x24c7: "" -0x24c8: "" -0x24c9: "" -0x24ca: "" -0x24cb: "" -0x24cc: "" -0x24cd: "" -0x24ce: "" -0x24cf: "" -0x24d0: "a" -0x24d1: "b" -0x24d2: "c" -0x24d3: "d" -0x24d4: "e" -0x24d5: "f" -0x24d6: "g" -0x24d7: "h" -0x24d8: "i" -0x24d9: "j" -0x24da: "k" -0x24db: "l" -0x24dc: "m" -0x24dd: "n" -0x24de: "o" -0x24df: "p" -0x24e0: "q" -0x24e1: "r" -0x24e2: "s" -0x24e3: "t" -0x24e4: "u" -0x24e5: "v" -0x24e6: "w" -0x24e7: "x" -0x24e8: "y" -0x24e9: "z" -0x24ea: "0" -0x24eb: "[?]" -0x24ec: "[?]" -0x24ed: "[?]" -0x24ee: "[?]" -0x24ef: "[?]" -0x24f0: "[?]" -0x24f1: "[?]" -0x24f2: "[?]" -0x24f3: "[?]" -0x24f4: "[?]" -0x24f5: "[?]" -0x24f6: "[?]" -0x24f7: "[?]" -0x24f8: "[?]" -0x24f9: "[?]" -0x24fa: "[?]" -0x24fb: "[?]" -0x24fc: "[?]" -0x24fd: "[?]" -0x24fe: "[?]" -/* x025 */ -0x2500: "-" -0x2501: "-" -0x2502: "|" -0x2503: "|" -0x2504: "-" -0x2505: "-" -0x2506: "|" -0x2507: "|" -0x2508: "-" -0x2509: "-" -0x250a: "|" -0x250b: "|" -0x250c: "+" -0x250d: "+" -0x250e: "+" -0x250f: "+" -0x2510: "+" -0x2511: "+" -0x2512: "+" -0x2513: "+" -0x2514: "+" -0x2515: "+" -0x2516: "+" -0x2517: "+" -0x2518: "+" -0x2519: "+" -0x251a: "+" -0x251b: "+" -0x251c: "+" -0x251d: "+" -0x251e: "+" -0x251f: "+" -0x2520: "+" -0x2521: "+" -0x2522: "+" -0x2523: "+" -0x2524: "+" -0x2525: "+" -0x2526: "+" -0x2527: "+" -0x2528: "+" -0x2529: "+" -0x252a: "+" -0x252b: "+" -0x252c: "+" -0x252d: "+" -0x252e: "+" -0x252f: "+" -0x2530: "+" -0x2531: "+" -0x2532: "+" -0x2533: "+" -0x2534: "+" -0x2535: "+" -0x2536: "+" -0x2537: "+" -0x2538: "+" -0x2539: "+" -0x253a: "+" -0x253b: "+" -0x253c: "+" -0x253d: "+" -0x253e: "+" -0x253f: "+" -0x2540: "+" -0x2541: "+" -0x2542: "+" -0x2543: "+" -0x2544: "+" -0x2545: "+" -0x2546: "+" -0x2547: "+" -0x2548: "+" -0x2549: "+" -0x254a: "+" -0x254b: "+" -0x254c: "-" -0x254d: "-" -0x254e: "|" -0x254f: "|" -0x2550: "-" -0x2551: "|" -0x2552: "+" -0x2553: "+" -0x2554: "+" -0x2555: "+" -0x2556: "+" -0x2557: "+" -0x2558: "+" -0x2559: "+" -0x255a: "+" -0x255b: "+" -0x255c: "+" -0x255d: "+" -0x255e: "+" -0x255f: "+" -0x2560: "+" -0x2561: "+" -0x2562: "+" -0x2563: "+" -0x2564: "+" -0x2565: "+" -0x2566: "+" -0x2567: "+" -0x2568: "+" -0x2569: "+" -0x256a: "+" -0x256b: "+" -0x256c: "+" -0x256d: "+" -0x256e: "+" -0x256f: "+" -0x2570: "+" -0x2571: "/" -0x2572: "\\" -0x2573: "X" -0x2574: "-" -0x2575: "|" -0x2576: "-" -0x2577: "|" -0x2578: "-" -0x2579: "|" -0x257a: "-" -0x257b: "|" -0x257c: "-" -0x257d: "|" -0x257e: "-" -0x257f: "|" -0x2580: "#" -0x2581: "#" -0x2582: "#" -0x2583: "#" -0x2584: "#" -0x2585: "#" -0x2586: "#" -0x2587: "#" -0x2588: "#" -0x2589: "#" -0x258a: "#" -0x258b: "#" -0x258c: "#" -0x258d: "#" -0x258e: "#" -0x258f: "#" -0x2590: "#" -0x2591: "#" -0x2592: "#" -0x2593: "#" -0x2594: "-" -0x2595: "|" -0x2596: "[?]" -0x2597: "[?]" -0x2598: "[?]" -0x2599: "[?]" -0x259a: "[?]" -0x259b: "[?]" -0x259c: "[?]" -0x259d: "[?]" -0x259e: "[?]" -0x259f: "[?]" -0x25a0: "#" -0x25a1: "#" -0x25a2: "#" -0x25a3: "#" -0x25a4: "#" -0x25a5: "#" -0x25a6: "#" -0x25a7: "#" -0x25a8: "#" -0x25a9: "#" -0x25aa: "#" -0x25ab: "#" -0x25ac: "#" -0x25ad: "#" -0x25ae: "#" -0x25af: "#" -0x25b0: "#" -0x25b1: "#" -0x25b2: "^" -0x25b3: "^" -0x25b4: "^" -0x25b5: "^" -0x25b6: ">" -0x25b7: ">" -0x25b8: ">" -0x25b9: ">" -0x25ba: ">" -0x25bb: ">" -0x25bc: "V" -0x25bd: "V" -0x25be: "V" -0x25bf: "V" -0x25c0: "<" -0x25c1: "<" -0x25c2: "<" -0x25c3: "<" -0x25c4: "<" -0x25c5: "<" -0x25c6: "*" -0x25c7: "*" -0x25c8: "*" -0x25c9: "*" -0x25ca: "*" -0x25cb: "*" -0x25cc: "*" -0x25cd: "*" -0x25ce: "*" -0x25cf: "*" -0x25d0: "*" -0x25d1: "*" -0x25d2: "*" -0x25d3: "*" -0x25d4: "*" -0x25d5: "*" -0x25d6: "*" -0x25d7: "*" -0x25d8: "*" -0x25d9: "*" -0x25da: "*" -0x25db: "*" -0x25dc: "*" -0x25dd: "*" -0x25de: "*" -0x25df: "*" -0x25e0: "*" -0x25e1: "*" -0x25e2: "*" -0x25e3: "*" -0x25e4: "*" -0x25e5: "*" -0x25e6: "*" -0x25e7: "#" -0x25e8: "#" -0x25e9: "#" -0x25ea: "#" -0x25eb: "#" -0x25ec: "^" -0x25ed: "^" -0x25ee: "^" -0x25ef: "O" -0x25f0: "#" -0x25f1: "#" -0x25f2: "#" -0x25f3: "#" -0x25f4: "#" -0x25f5: "#" -0x25f6: "#" -0x25f7: "#" -0x25f8: "[?]" -0x25f9: "[?]" -0x25fa: "[?]" -0x25fb: "[?]" -0x25fc: "[?]" -0x25fd: "[?]" -0x25fe: "[?]" -/* x026 */ -0x2600: "" -0x2601: "" -0x2602: "" -0x2603: "" -0x2604: "" -0x2605: "" -0x2606: "" -0x2607: "" -0x2608: "" -0x2609: "" -0x260a: "" -0x260b: "" -0x260c: "" -0x260d: "" -0x260e: "" -0x260f: "" -0x2610: "" -0x2611: "" -0x2612: "" -0x2613: "" -0x2614: "[?]" -0x2615: "[?]" -0x2616: "[?]" -0x2617: "[?]" -0x2618: "[?]" -0x2619: "" -0x261a: "" -0x261b: "" -0x261c: "" -0x261d: "" -0x261e: "" -0x261f: "" -0x2620: "" -0x2621: "" -0x2622: "" -0x2623: "" -0x2624: "" -0x2625: "" -0x2626: "" -0x2627: "" -0x2628: "" -0x2629: "" -0x262a: "" -0x262b: "" -0x262c: "" -0x262d: "" -0x262e: "" -0x262f: "" -0x2630: "" -0x2631: "" -0x2632: "" -0x2633: "" -0x2634: "" -0x2635: "" -0x2636: "" -0x2637: "" -0x2638: "" -0x2639: "" -0x263a: "" -0x263b: "" -0x263c: "" -0x263d: "" -0x263e: "" -0x263f: "" -0x2640: "" -0x2641: "" -0x2642: "" -0x2643: "" -0x2644: "" -0x2645: "" -0x2646: "" -0x2647: "" -0x2648: "" -0x2649: "" -0x264a: "" -0x264b: "" -0x264c: "" -0x264d: "" -0x264e: "" -0x264f: "" -0x2650: "" -0x2651: "" -0x2652: "" -0x2653: "" -0x2654: "" -0x2655: "" -0x2656: "" -0x2657: "" -0x2658: "" -0x2659: "" -0x265a: "" -0x265b: "" -0x265c: "" -0x265d: "" -0x265e: "" -0x265f: "" -0x2660: "" -0x2661: "" -0x2662: "" -0x2663: "" -0x2664: "" -0x2665: "" -0x2666: "" -0x2667: "" -0x2668: "" -0x2669: "" -0x266a: "" -0x266b: "" -0x266c: "" -0x266d: "" -0x266e: "" -0x266f: "" -0x2670: "" -0x2671: "" -0x2672: "[?]" -0x2673: "[?]" -0x2674: "[?]" -0x2675: "[?]" -0x2676: "[?]" -0x2677: "[?]" -0x2678: "[?]" -0x2679: "[?]" -0x267a: "[?]" -0x267b: "[?]" -0x267c: "[?]" -0x267d: "[?]" -0x267e: "[?]" -0x267f: "[?]" -0x2680: "[?]" -0x2681: "[?]" -0x2682: "[?]" -0x2683: "[?]" -0x2684: "[?]" -0x2685: "[?]" -0x2686: "[?]" -0x2687: "[?]" -0x2688: "[?]" -0x2689: "[?]" -0x268a: "[?]" -0x268b: "[?]" -0x268c: "[?]" -0x268d: "[?]" -0x268e: "[?]" -0x268f: "[?]" -0x2690: "[?]" -0x2691: "[?]" -0x2692: "[?]" -0x2693: "[?]" -0x2694: "[?]" -0x2695: "[?]" -0x2696: "[?]" -0x2697: "[?]" -0x2698: "[?]" -0x2699: "[?]" -0x269a: "[?]" -0x269b: "[?]" -0x269c: "[?]" -0x269d: "[?]" -0x269e: "[?]" -0x269f: "[?]" -0x26a0: "[?]" -0x26a1: "[?]" -0x26a2: "[?]" -0x26a3: "[?]" -0x26a4: "[?]" -0x26a5: "[?]" -0x26a6: "[?]" -0x26a7: "[?]" -0x26a8: "[?]" -0x26a9: "[?]" -0x26aa: "[?]" -0x26ab: "[?]" -0x26ac: "[?]" -0x26ad: "[?]" -0x26ae: "[?]" -0x26af: "[?]" -0x26b0: "[?]" -0x26b1: "[?]" -0x26b2: "[?]" -0x26b3: "[?]" -0x26b4: "[?]" -0x26b5: "[?]" -0x26b6: "[?]" -0x26b7: "[?]" -0x26b8: "[?]" -0x26b9: "[?]" -0x26ba: "[?]" -0x26bb: "[?]" -0x26bc: "[?]" -0x26bd: "[?]" -0x26be: "[?]" -0x26bf: "[?]" -0x26c0: "[?]" -0x26c1: "[?]" -0x26c2: "[?]" -0x26c3: "[?]" -0x26c4: "[?]" -0x26c5: "[?]" -0x26c6: "[?]" -0x26c7: "[?]" -0x26c8: "[?]" -0x26c9: "[?]" -0x26ca: "[?]" -0x26cb: "[?]" -0x26cc: "[?]" -0x26cd: "[?]" -0x26ce: "[?]" -0x26cf: "[?]" -0x26d0: "[?]" -0x26d1: "[?]" -0x26d2: "[?]" -0x26d3: "[?]" -0x26d4: "[?]" -0x26d5: "[?]" -0x26d6: "[?]" -0x26d7: "[?]" -0x26d8: "[?]" -0x26d9: "[?]" -0x26da: "[?]" -0x26db: "[?]" -0x26dc: "[?]" -0x26dd: "[?]" -0x26de: "[?]" -0x26df: "[?]" -0x26e0: "[?]" -0x26e1: "[?]" -0x26e2: "[?]" -0x26e3: "[?]" -0x26e4: "[?]" -0x26e5: "[?]" -0x26e6: "[?]" -0x26e7: "[?]" -0x26e8: "[?]" -0x26e9: "[?]" -0x26ea: "[?]" -0x26eb: "[?]" -0x26ec: "[?]" -0x26ed: "[?]" -0x26ee: "[?]" -0x26ef: "[?]" -0x26f0: "[?]" -0x26f1: "[?]" -0x26f2: "[?]" -0x26f3: "[?]" -0x26f4: "[?]" -0x26f5: "[?]" -0x26f6: "[?]" -0x26f7: "[?]" -0x26f8: "[?]" -0x26f9: "[?]" -0x26fa: "[?]" -0x26fb: "[?]" -0x26fc: "[?]" -0x26fd: "[?]" -0x26fe: "[?]" -/* x027 */ -0x2700: "[?]" -0x2701: "" -0x2702: "" -0x2703: "" -0x2704: "" -0x2705: "" -0x2706: "" -0x2707: "" -0x2708: "" -0x2709: "" -0x270a: "" -0x270b: "" -0x270c: "" -0x270d: "" -0x270e: "" -0x270f: "" -0x2710: "" -0x2711: "" -0x2712: "" -0x2713: "" -0x2714: "" -0x2715: "" -0x2716: "" -0x2717: "" -0x2718: "" -0x2719: "" -0x271a: "" -0x271b: "" -0x271c: "" -0x271d: "" -0x271e: "" -0x271f: "" -0x2720: "" -0x2721: "" -0x2722: "" -0x2723: "" -0x2724: "" -0x2725: "" -0x2726: "" -0x2727: "" -0x2728: "" -0x2729: "" -0x272a: "" -0x272b: "" -0x272c: "" -0x272d: "" -0x272e: "" -0x272f: "" -0x2730: "" -0x2731: "" -0x2732: "" -0x2733: "" -0x2734: "" -0x2735: "" -0x2736: "" -0x2737: "" -0x2738: "" -0x2739: "" -0x273a: "" -0x273b: "" -0x273c: "" -0x273d: "" -0x273e: "" -0x273f: "" -0x2740: "" -0x2741: "" -0x2742: "" -0x2743: "" -0x2744: "" -0x2745: "" -0x2746: "" -0x2747: "" -0x2748: "" -0x2749: "" -0x274a: "" -0x274b: "" -0x274c: "" -0x274d: "" -0x274e: "" -0x274f: "" -0x2750: "" -0x2751: "" -0x2752: "" -0x2753: "" -0x2754: "" -0x2755: "" -0x2756: "" -0x2757: "" -0x2758: "" -0x2759: "" -0x275a: "" -0x275b: "" -0x275c: "" -0x275d: "" -0x275e: "" -0x275f: "[?]" -0x2760: "[?]" -0x2761: "" -0x2762: "" -0x2763: "" -0x2764: "" -0x2765: "" -0x2766: "" -0x2767: "" -0x2768: "" -0x2769: "" -0x276a: "" -0x276b: "" -0x276c: "" -0x276d: "" -0x276e: "" -0x276f: "" -0x2770: "" -0x2771: "" -0x2772: "" -0x2773: "" -0x2774: "" -0x2775: "" -0x2776: "" -0x2777: "" -0x2778: "" -0x2779: "" -0x277a: "" -0x277b: "" -0x277c: "" -0x277d: "" -0x277e: "" -0x277f: "" -0x2780: "" -0x2781: "" -0x2782: "" -0x2783: "" -0x2784: "" -0x2785: "" -0x2786: "" -0x2787: "" -0x2788: "" -0x2789: "" -0x278a: "" -0x278b: "" -0x278c: "" -0x278d: "" -0x278e: "" -0x278f: "" -0x2790: "" -0x2791: "" -0x2792: "" -0x2793: "" -0x2794: "" -0x2795: "" -0x2796: "" -0x2797: "" -0x2798: "" -0x2799: "" -0x279a: "" -0x279b: "" -0x279c: "" -0x279d: "" -0x279e: "" -0x279f: "" -0x27a0: "" -0x27a1: "" -0x27a2: "" -0x27a3: "" -0x27a4: "" -0x27a5: "" -0x27a6: "" -0x27a7: "" -0x27a8: "" -0x27a9: "" -0x27aa: "" -0x27ab: "" -0x27ac: "" -0x27ad: "" -0x27ae: "" -0x27af: "" -0x27b0: "[?]" -0x27b1: "" -0x27b2: "" -0x27b3: "" -0x27b4: "" -0x27b5: "" -0x27b6: "" -0x27b7: "" -0x27b8: "" -0x27b9: "" -0x27ba: "" -0x27bb: "" -0x27bc: "" -0x27bd: "" -0x27be: "" -0x27bf: "[?]" -0x27c0: "[?]" -0x27c1: "[?]" -0x27c2: "[?]" -0x27c3: "[?]" -0x27c4: "[?]" -0x27c5: "[?]" -0x27c6: "[?]" -0x27c7: "[?]" -0x27c8: "[?]" -0x27c9: "[?]" -0x27ca: "[?]" -0x27cb: "[?]" -0x27cc: "[?]" -0x27cd: "[?]" -0x27ce: "[?]" -0x27cf: "[?]" -0x27d0: "[?]" -0x27d1: "[?]" -0x27d2: "[?]" -0x27d3: "[?]" -0x27d4: "[?]" -0x27d5: "[?]" -0x27d6: "[?]" -0x27d7: "[?]" -0x27d8: "[?]" -0x27d9: "[?]" -0x27da: "[?]" -0x27db: "[?]" -0x27dc: "[?]" -0x27dd: "[?]" -0x27de: "[?]" -0x27df: "[?]" -0x27e0: "[?]" -0x27e1: "[?]" -0x27e2: "[?]" -0x27e3: "[?]" -0x27e4: "[?]" -0x27e5: "[?]" -0x27e6: "[?]" -0x27e7: "[?]" -0x27e8: "[?]" -0x27e9: "[?]" -0x27ea: "[?]" -0x27eb: "[?]" -0x27ec: "[?]" -0x27ed: "[?]" -0x27ee: "[?]" -0x27ef: "[?]" -0x27f0: "[?]" -0x27f1: "[?]" -0x27f2: "[?]" -0x27f3: "[?]" -0x27f4: "[?]" -0x27f5: "[?]" -0x27f6: "[?]" -0x27f7: "[?]" -0x27f8: "[?]" -0x27f9: "[?]" -0x27fa: "[?]" -0x27fb: "[?]" -0x27fc: "[?]" -0x27fd: "[?]" -0x27fe: "[?]" -/* x028 */ -0x2800: " " -0x2801: "a" -0x2802: "1" -0x2803: "b" -0x2804: "'" -0x2805: "k" -0x2806: "2" -0x2807: "l" -0x2808: "@" -0x2809: "c" -0x280a: "i" -0x280b: "f" -0x280c: "/" -0x280d: "m" -0x280e: "s" -0x280f: "p" -0x2810: "\"" -0x2811: "e" -0x2812: "3" -0x2813: "h" -0x2814: "9" -0x2815: "o" -0x2816: "6" -0x2817: "r" -0x2818: "^" -0x2819: "d" -0x281a: "j" -0x281b: "g" -0x281c: ">" -0x281d: "n" -0x281e: "t" -0x281f: "q" -0x2820: "," -0x2821: "*" -0x2822: "5" -0x2823: "<" -0x2824: "-" -0x2825: "u" -0x2826: "8" -0x2827: "v" -0x2828: "." -0x2829: "%" -0x282a: "[" -0x282b: "$" -0x282c: "+" -0x282d: "x" -0x282e: "!" -0x282f: "&" -0x2830: ";" -0x2831: ":" -0x2832: "4" -0x2833: "\\" -0x2834: "0" -0x2835: "z" -0x2836: "7" -0x2837: "(" -0x2838: "_" -0x2839: "?" -0x283a: "w" -0x283b: "]" -0x283c: "#" -0x283d: "y" -0x283e: ")" -0x283f: "=" -0x2840: "[d7]" -0x2841: "[d17]" -0x2842: "[d27]" -0x2843: "[d127]" -0x2844: "[d37]" -0x2845: "[d137]" -0x2846: "[d237]" -0x2847: "[d1237]" -0x2848: "[d47]" -0x2849: "[d147]" -0x284a: "[d247]" -0x284b: "[d1247]" -0x284c: "[d347]" -0x284d: "[d1347]" -0x284e: "[d2347]" -0x284f: "[d12347]" -0x2850: "[d57]" -0x2851: "[d157]" -0x2852: "[d257]" -0x2853: "[d1257]" -0x2854: "[d357]" -0x2855: "[d1357]" -0x2856: "[d2357]" -0x2857: "[d12357]" -0x2858: "[d457]" -0x2859: "[d1457]" -0x285a: "[d2457]" -0x285b: "[d12457]" -0x285c: "[d3457]" -0x285d: "[d13457]" -0x285e: "[d23457]" -0x285f: "[d123457]" -0x2860: "[d67]" -0x2861: "[d167]" -0x2862: "[d267]" -0x2863: "[d1267]" -0x2864: "[d367]" -0x2865: "[d1367]" -0x2866: "[d2367]" -0x2867: "[d12367]" -0x2868: "[d467]" -0x2869: "[d1467]" -0x286a: "[d2467]" -0x286b: "[d12467]" -0x286c: "[d3467]" -0x286d: "[d13467]" -0x286e: "[d23467]" -0x286f: "[d123467]" -0x2870: "[d567]" -0x2871: "[d1567]" -0x2872: "[d2567]" -0x2873: "[d12567]" -0x2874: "[d3567]" -0x2875: "[d13567]" -0x2876: "[d23567]" -0x2877: "[d123567]" -0x2878: "[d4567]" -0x2879: "[d14567]" -0x287a: "[d24567]" -0x287b: "[d124567]" -0x287c: "[d34567]" -0x287d: "[d134567]" -0x287e: "[d234567]" -0x287f: "[d1234567]" -0x2880: "[d8]" -0x2881: "[d18]" -0x2882: "[d28]" -0x2883: "[d128]" -0x2884: "[d38]" -0x2885: "[d138]" -0x2886: "[d238]" -0x2887: "[d1238]" -0x2888: "[d48]" -0x2889: "[d148]" -0x288a: "[d248]" -0x288b: "[d1248]" -0x288c: "[d348]" -0x288d: "[d1348]" -0x288e: "[d2348]" -0x288f: "[d12348]" -0x2890: "[d58]" -0x2891: "[d158]" -0x2892: "[d258]" -0x2893: "[d1258]" -0x2894: "[d358]" -0x2895: "[d1358]" -0x2896: "[d2358]" -0x2897: "[d12358]" -0x2898: "[d458]" -0x2899: "[d1458]" -0x289a: "[d2458]" -0x289b: "[d12458]" -0x289c: "[d3458]" -0x289d: "[d13458]" -0x289e: "[d23458]" -0x289f: "[d123458]" -0x28a0: "[d68]" -0x28a1: "[d168]" -0x28a2: "[d268]" -0x28a3: "[d1268]" -0x28a4: "[d368]" -0x28a5: "[d1368]" -0x28a6: "[d2368]" -0x28a7: "[d12368]" -0x28a8: "[d468]" -0x28a9: "[d1468]" -0x28aa: "[d2468]" -0x28ab: "[d12468]" -0x28ac: "[d3468]" -0x28ad: "[d13468]" -0x28ae: "[d23468]" -0x28af: "[d123468]" -0x28b0: "[d568]" -0x28b1: "[d1568]" -0x28b2: "[d2568]" -0x28b3: "[d12568]" -0x28b4: "[d3568]" -0x28b5: "[d13568]" -0x28b6: "[d23568]" -0x28b7: "[d123568]" -0x28b8: "[d4568]" -0x28b9: "[d14568]" -0x28ba: "[d24568]" -0x28bb: "[d124568]" -0x28bc: "[d34568]" -0x28bd: "[d134568]" -0x28be: "[d234568]" -0x28bf: "[d1234568]" -0x28c0: "[d78]" -0x28c1: "[d178]" -0x28c2: "[d278]" -0x28c3: "[d1278]" -0x28c4: "[d378]" -0x28c5: "[d1378]" -0x28c6: "[d2378]" -0x28c7: "[d12378]" -0x28c8: "[d478]" -0x28c9: "[d1478]" -0x28ca: "[d2478]" -0x28cb: "[d12478]" -0x28cc: "[d3478]" -0x28cd: "[d13478]" -0x28ce: "[d23478]" -0x28cf: "[d123478]" -0x28d0: "[d578]" -0x28d1: "[d1578]" -0x28d2: "[d2578]" -0x28d3: "[d12578]" -0x28d4: "[d3578]" -0x28d5: "[d13578]" -0x28d6: "[d23578]" -0x28d7: "[d123578]" -0x28d8: "[d4578]" -0x28d9: "[d14578]" -0x28da: "[d24578]" -0x28db: "[d124578]" -0x28dc: "[d34578]" -0x28dd: "[d134578]" -0x28de: "[d234578]" -0x28df: "[d1234578]" -0x28e0: "[d678]" -0x28e1: "[d1678]" -0x28e2: "[d2678]" -0x28e3: "[d12678]" -0x28e4: "[d3678]" -0x28e5: "[d13678]" -0x28e6: "[d23678]" -0x28e7: "[d123678]" -0x28e8: "[d4678]" -0x28e9: "[d14678]" -0x28ea: "[d24678]" -0x28eb: "[d124678]" -0x28ec: "[d34678]" -0x28ed: "[d134678]" -0x28ee: "[d234678]" -0x28ef: "[d1234678]" -0x28f0: "[d5678]" -0x28f1: "[d15678]" -0x28f2: "[d25678]" -0x28f3: "[d125678]" -0x28f4: "[d35678]" -0x28f5: "[d135678]" -0x28f6: "[d235678]" -0x28f7: "[d1235678]" -0x28f8: "[d45678]" -0x28f9: "[d145678]" -0x28fa: "[d245678]" -0x28fb: "[d1245678]" -0x28fc: "[d345678]" -0x28fd: "[d1345678]" -0x28fe: "[d2345678]" -0x28ff: "[d12345678]" -/* x02c */ -0x2c00: "" -0x2c01: "" -0x2c02: "" -0x2c03: "" -0x2c04: "" -0x2c05: "" -0x2c06: "" -0x2c07: "" -0x2c08: "" -0x2c09: "" -0x2c0a: "" -0x2c0b: "" -0x2c0c: "" -0x2c0d: "" -0x2c0e: "" -0x2c0f: "" -0x2c10: "" -0x2c11: "" -0x2c12: "" -0x2c13: "" -0x2c14: "" -0x2c15: "" -0x2c16: "" -0x2c17: "" -0x2c18: "" -0x2c19: "" -0x2c1a: "" -0x2c1b: "" -0x2c1c: "" -0x2c1d: "" -0x2c1e: "" -0x2c1f: "" -0x2c20: "" -0x2c21: "" -0x2c22: "" -0x2c23: "" -0x2c24: "" -0x2c25: "" -0x2c26: "" -0x2c27: "" -0x2c28: "" -0x2c29: "" -0x2c2a: "" -0x2c2b: "" -0x2c2c: "" -0x2c2d: "" -0x2c2e: "" -0x2c2f: "" -0x2c30: "" -0x2c31: "" -0x2c32: "" -0x2c33: "" -0x2c34: "" -0x2c35: "" -0x2c36: "" -0x2c37: "" -0x2c38: "" -0x2c39: "" -0x2c3a: "" -0x2c3b: "" -0x2c3c: "" -0x2c3d: "" -0x2c3e: "" -0x2c3f: "" -0x2c40: "" -0x2c41: "" -0x2c42: "" -0x2c43: "" -0x2c44: "" -0x2c45: "" -0x2c46: "" -0x2c47: "" -0x2c48: "" -0x2c49: "" -0x2c4a: "" -0x2c4b: "" -0x2c4c: "" -0x2c4d: "" -0x2c4e: "" -0x2c4f: "" -0x2c50: "" -0x2c51: "" -0x2c52: "" -0x2c53: "" -0x2c54: "" -0x2c55: "" -0x2c56: "" -0x2c57: "" -0x2c58: "" -0x2c59: "" -0x2c5a: "" -0x2c5b: "" -0x2c5c: "" -0x2c5d: "" -0x2c5e: "" -0x2c5f: "" -0x2c60: "L" -0x2c61: "l" -0x2c62: "L" -0x2c63: "P" -0x2c64: "R" -0x2c65: "a" -0x2c66: "t" -0x2c67: "H" -0x2c68: "h" -0x2c69: "K" -0x2c6a: "k" -0x2c6b: "Z" -0x2c6c: "z" -0x2c6d: "" -0x2c6e: "M" -0x2c6f: "A" -0x2c70: "" -0x2c71: "" -0x2c72: "" -0x2c73: "" -0x2c74: "" -0x2c75: "" -0x2c76: "" -0x2c77: "" -0x2c78: "" -0x2c79: "" -0x2c7a: "" -0x2c7b: "" -0x2c7c: "" -0x2c7d: "" -0x2c7e: "" -0x2c7f: "" -0x2c80: "" -0x2c81: "" -0x2c82: "" -0x2c83: "" -0x2c84: "" -0x2c85: "" -0x2c86: "" -0x2c87: "" -0x2c88: "" -0x2c89: "" -0x2c8a: "" -0x2c8b: "" -0x2c8c: "" -0x2c8d: "" -0x2c8e: "" -0x2c8f: "" -0x2c90: "" -0x2c91: "" -0x2c92: "" -0x2c93: "" -0x2c94: "" -0x2c95: "" -0x2c96: "" -0x2c97: "" -0x2c98: "" -0x2c99: "" -0x2c9a: "" -0x2c9b: "" -0x2c9c: "" -0x2c9d: "" -0x2c9e: "" -0x2c9f: "" -0x2ca0: "" -0x2ca1: "" -0x2ca2: "" -0x2ca3: "" -0x2ca4: "" -0x2ca5: "" -0x2ca6: "" -0x2ca7: "" -0x2ca8: "" -0x2ca9: "" -0x2caa: "" -0x2cab: "" -0x2cac: "" -0x2cad: "" -0x2cae: "" -0x2caf: "" -0x2cb0: "" -0x2cb1: "" -0x2cb2: "" -0x2cb3: "" -0x2cb4: "" -0x2cb5: "" -0x2cb6: "" -0x2cb7: "" -0x2cb8: "" -0x2cb9: "" -0x2cba: "" -0x2cbb: "" -0x2cbc: "" -0x2cbd: "" -0x2cbe: "" -0x2cbf: "" -0x2cc0: "" -0x2cc1: "" -0x2cc2: "" -0x2cc3: "" -0x2cc4: "" -0x2cc5: "" -0x2cc6: "" -0x2cc7: "" -0x2cc8: "" -0x2cc9: "" -0x2cca: "" -0x2ccb: "" -0x2ccc: "" -0x2ccd: "" -0x2cce: "" -0x2ccf: "" -0x2cd0: "" -0x2cd1: "" -0x2cd2: "" -0x2cd3: "" -0x2cd4: "" -0x2cd5: "" -0x2cd6: "" -0x2cd7: "" -0x2cd8: "" -0x2cd9: "" -0x2cda: "" -0x2cdb: "" -0x2cdc: "" -0x2cdd: "" -0x2cde: "" -0x2cdf: "" -0x2ce0: "" -0x2ce1: "" -0x2ce2: "" -0x2ce3: "" -0x2ce4: "" -0x2ce5: "" -0x2ce6: "" -0x2ce7: "" -0x2ce8: "" -0x2ce9: "" -0x2cea: "" -0x2ceb: "" -0x2cec: "" -0x2ced: "" -0x2cee: "" -0x2cef: "" -0x2cf0: "" -0x2cf1: "" -0x2cf2: "" -0x2cf3: "" -0x2cf4: "" -0x2cf5: "" -0x2cf6: "" -0x2cf7: "" -0x2cf8: "" -0x2cf9: "" -0x2cfa: "" -0x2cfb: "" -0x2cfc: "" -0x2cfd: "" -0x2cfe: "" -/* x02e */ -0x2e00: "[?]" -0x2e01: "[?]" -0x2e02: "[?]" -0x2e03: "[?]" -0x2e04: "[?]" -0x2e05: "[?]" -0x2e06: "[?]" -0x2e07: "[?]" -0x2e08: "[?]" -0x2e09: "[?]" -0x2e0a: "[?]" -0x2e0b: "[?]" -0x2e0c: "[?]" -0x2e0d: "[?]" -0x2e0e: "[?]" -0x2e0f: "[?]" -0x2e10: "[?]" -0x2e11: "[?]" -0x2e12: "[?]" -0x2e13: "[?]" -0x2e14: "[?]" -0x2e15: "[?]" -0x2e16: "[?]" -0x2e17: "[?]" -0x2e18: "[?]" -0x2e19: "[?]" -0x2e1a: "[?]" -0x2e1b: "[?]" -0x2e1c: "[?]" -0x2e1d: "[?]" -0x2e1e: "[?]" -0x2e1f: "[?]" -0x2e20: "[?]" -0x2e21: "[?]" -0x2e22: "[?]" -0x2e23: "[?]" -0x2e24: "[?]" -0x2e25: "[?]" -0x2e26: "[?]" -0x2e27: "[?]" -0x2e28: "[?]" -0x2e29: "[?]" -0x2e2a: "[?]" -0x2e2b: "[?]" -0x2e2c: "[?]" -0x2e2d: "[?]" -0x2e2e: "[?]" -0x2e2f: "[?]" -0x2e30: "[?]" -0x2e31: "[?]" -0x2e32: "[?]" -0x2e33: "[?]" -0x2e34: "[?]" -0x2e35: "[?]" -0x2e36: "[?]" -0x2e37: "[?]" -0x2e38: "[?]" -0x2e39: "[?]" -0x2e3a: "[?]" -0x2e3b: "[?]" -0x2e3c: "[?]" -0x2e3d: "[?]" -0x2e3e: "[?]" -0x2e3f: "[?]" -0x2e40: "[?]" -0x2e41: "[?]" -0x2e42: "[?]" -0x2e43: "[?]" -0x2e44: "[?]" -0x2e45: "[?]" -0x2e46: "[?]" -0x2e47: "[?]" -0x2e48: "[?]" -0x2e49: "[?]" -0x2e4a: "[?]" -0x2e4b: "[?]" -0x2e4c: "[?]" -0x2e4d: "[?]" -0x2e4e: "[?]" -0x2e4f: "[?]" -0x2e50: "[?]" -0x2e51: "[?]" -0x2e52: "[?]" -0x2e53: "[?]" -0x2e54: "[?]" -0x2e55: "[?]" -0x2e56: "[?]" -0x2e57: "[?]" -0x2e58: "[?]" -0x2e59: "[?]" -0x2e5a: "[?]" -0x2e5b: "[?]" -0x2e5c: "[?]" -0x2e5d: "[?]" -0x2e5e: "[?]" -0x2e5f: "[?]" -0x2e60: "[?]" -0x2e61: "[?]" -0x2e62: "[?]" -0x2e63: "[?]" -0x2e64: "[?]" -0x2e65: "[?]" -0x2e66: "[?]" -0x2e67: "[?]" -0x2e68: "[?]" -0x2e69: "[?]" -0x2e6a: "[?]" -0x2e6b: "[?]" -0x2e6c: "[?]" -0x2e6d: "[?]" -0x2e6e: "[?]" -0x2e6f: "[?]" -0x2e70: "[?]" -0x2e71: "[?]" -0x2e72: "[?]" -0x2e73: "[?]" -0x2e74: "[?]" -0x2e75: "[?]" -0x2e76: "[?]" -0x2e77: "[?]" -0x2e78: "[?]" -0x2e79: "[?]" -0x2e7a: "[?]" -0x2e7b: "[?]" -0x2e7c: "[?]" -0x2e7d: "[?]" -0x2e7e: "[?]" -0x2e7f: "[?]" -0x2e80: "[?] " -0x2e81: "[?] " -0x2e82: "[?] " -0x2e83: "[?] " -0x2e84: "[?] " -0x2e85: "[?] " -0x2e86: "[?] " -0x2e87: "[?] " -0x2e88: "[?] " -0x2e89: "[?] " -0x2e8a: "[?] " -0x2e8b: "[?] " -0x2e8c: "[?] " -0x2e8d: "[?] " -0x2e8e: "[?] " -0x2e8f: "[?] " -0x2e90: "[?] " -0x2e91: "[?] " -0x2e92: "[?] " -0x2e93: "[?] " -0x2e94: "[?] " -0x2e95: "[?] " -0x2e96: "[?] " -0x2e97: "[?] " -0x2e98: "[?] " -0x2e99: "[?] " -0x2e9a: "[?]" -0x2e9b: "[?] " -0x2e9c: "[?] " -0x2e9d: "[?] " -0x2e9e: "[?] " -0x2e9f: "[?] " -0x2ea0: "[?] " -0x2ea1: "[?] " -0x2ea2: "[?] " -0x2ea3: "[?] " -0x2ea4: "[?] " -0x2ea5: "[?] " -0x2ea6: "[?] " -0x2ea7: "[?] " -0x2ea8: "[?] " -0x2ea9: "[?] " -0x2eaa: "[?] " -0x2eab: "[?] " -0x2eac: "[?] " -0x2ead: "[?] " -0x2eae: "[?] " -0x2eaf: "[?] " -0x2eb0: "[?] " -0x2eb1: "[?] " -0x2eb2: "[?] " -0x2eb3: "[?] " -0x2eb4: "[?] " -0x2eb5: "[?] " -0x2eb6: "[?] " -0x2eb7: "[?] " -0x2eb8: "[?] " -0x2eb9: "[?] " -0x2eba: "[?] " -0x2ebb: "[?] " -0x2ebc: "[?] " -0x2ebd: "[?] " -0x2ebe: "[?] " -0x2ebf: "[?] " -0x2ec0: "[?] " -0x2ec1: "[?] " -0x2ec2: "[?] " -0x2ec3: "[?] " -0x2ec4: "[?] " -0x2ec5: "[?] " -0x2ec6: "[?] " -0x2ec7: "[?] " -0x2ec8: "[?] " -0x2ec9: "[?] " -0x2eca: "[?] " -0x2ecb: "[?] " -0x2ecc: "[?] " -0x2ecd: "[?] " -0x2ece: "[?] " -0x2ecf: "[?] " -0x2ed0: "[?] " -0x2ed1: "[?] " -0x2ed2: "[?] " -0x2ed3: "[?] " -0x2ed4: "[?] " -0x2ed5: "[?] " -0x2ed6: "[?] " -0x2ed7: "[?] " -0x2ed8: "[?] " -0x2ed9: "[?] " -0x2eda: "[?] " -0x2edb: "[?] " -0x2edc: "[?] " -0x2edd: "[?] " -0x2ede: "[?] " -0x2edf: "[?] " -0x2ee0: "[?] " -0x2ee1: "[?] " -0x2ee2: "[?] " -0x2ee3: "[?] " -0x2ee4: "[?] " -0x2ee5: "[?] " -0x2ee6: "[?] " -0x2ee7: "[?] " -0x2ee8: "[?] " -0x2ee9: "[?] " -0x2eea: "[?] " -0x2eeb: "[?] " -0x2eec: "[?] " -0x2eed: "[?] " -0x2eee: "[?] " -0x2eef: "[?] " -0x2ef0: "[?] " -0x2ef1: "[?] " -0x2ef2: "[?] " -0x2ef3: "[?] " -0x2ef4: "[?]" -0x2ef5: "[?]" -0x2ef6: "[?]" -0x2ef7: "[?]" -0x2ef8: "[?]" -0x2ef9: "[?]" -0x2efa: "[?]" -0x2efb: "[?]" -0x2efc: "[?]" -0x2efd: "[?]" -0x2efe: "[?]" -/* x02f */ -0x2f00: "[?] " -0x2f01: "[?] " -0x2f02: "[?] " -0x2f03: "[?] " -0x2f04: "[?] " -0x2f05: "[?] " -0x2f06: "[?] " -0x2f07: "[?] " -0x2f08: "[?] " -0x2f09: "[?] " -0x2f0a: "[?] " -0x2f0b: "[?] " -0x2f0c: "[?] " -0x2f0d: "[?] " -0x2f0e: "[?] " -0x2f0f: "[?] " -0x2f10: "[?] " -0x2f11: "[?] " -0x2f12: "[?] " -0x2f13: "[?] " -0x2f14: "[?] " -0x2f15: "[?] " -0x2f16: "[?] " -0x2f17: "[?] " -0x2f18: "[?] " -0x2f19: "[?] " -0x2f1a: "[?] " -0x2f1b: "[?] " -0x2f1c: "[?] " -0x2f1d: "[?] " -0x2f1e: "[?] " -0x2f1f: "[?] " -0x2f20: "[?] " -0x2f21: "[?] " -0x2f22: "[?] " -0x2f23: "[?] " -0x2f24: "[?] " -0x2f25: "[?] " -0x2f26: "[?] " -0x2f27: "[?] " -0x2f28: "[?] " -0x2f29: "[?] " -0x2f2a: "[?] " -0x2f2b: "[?] " -0x2f2c: "[?] " -0x2f2d: "[?] " -0x2f2e: "[?] " -0x2f2f: "[?] " -0x2f30: "[?] " -0x2f31: "[?] " -0x2f32: "[?] " -0x2f33: "[?] " -0x2f34: "[?] " -0x2f35: "[?] " -0x2f36: "[?] " -0x2f37: "[?] " -0x2f38: "[?] " -0x2f39: "[?] " -0x2f3a: "[?] " -0x2f3b: "[?] " -0x2f3c: "[?] " -0x2f3d: "[?] " -0x2f3e: "[?] " -0x2f3f: "[?] " -0x2f40: "[?] " -0x2f41: "[?] " -0x2f42: "[?] " -0x2f43: "[?] " -0x2f44: "[?] " -0x2f45: "[?] " -0x2f46: "[?] " -0x2f47: "[?] " -0x2f48: "[?] " -0x2f49: "[?] " -0x2f4a: "[?] " -0x2f4b: "[?] " -0x2f4c: "[?] " -0x2f4d: "[?] " -0x2f4e: "[?] " -0x2f4f: "[?] " -0x2f50: "[?] " -0x2f51: "[?] " -0x2f52: "[?] " -0x2f53: "[?] " -0x2f54: "[?] " -0x2f55: "[?] " -0x2f56: "[?] " -0x2f57: "[?] " -0x2f58: "[?] " -0x2f59: "[?] " -0x2f5a: "[?] " -0x2f5b: "[?] " -0x2f5c: "[?] " -0x2f5d: "[?] " -0x2f5e: "[?] " -0x2f5f: "[?] " -0x2f60: "[?] " -0x2f61: "[?] " -0x2f62: "[?] " -0x2f63: "[?] " -0x2f64: "[?] " -0x2f65: "[?] " -0x2f66: "[?] " -0x2f67: "[?] " -0x2f68: "[?] " -0x2f69: "[?] " -0x2f6a: "[?] " -0x2f6b: "[?] " -0x2f6c: "[?] " -0x2f6d: "[?] " -0x2f6e: "[?] " -0x2f6f: "[?] " -0x2f70: "[?] " -0x2f71: "[?] " -0x2f72: "[?] " -0x2f73: "[?] " -0x2f74: "[?] " -0x2f75: "[?] " -0x2f76: "[?] " -0x2f77: "[?] " -0x2f78: "[?] " -0x2f79: "[?] " -0x2f7a: "[?] " -0x2f7b: "[?] " -0x2f7c: "[?] " -0x2f7d: "[?] " -0x2f7e: "[?] " -0x2f7f: "[?] " -0x2f80: "[?] " -0x2f81: "[?] " -0x2f82: "[?] " -0x2f83: "[?] " -0x2f84: "[?] " -0x2f85: "[?] " -0x2f86: "[?] " -0x2f87: "[?] " -0x2f88: "[?] " -0x2f89: "[?] " -0x2f8a: "[?] " -0x2f8b: "[?] " -0x2f8c: "[?] " -0x2f8d: "[?] " -0x2f8e: "[?] " -0x2f8f: "[?] " -0x2f90: "[?] " -0x2f91: "[?] " -0x2f92: "[?] " -0x2f93: "[?] " -0x2f94: "[?] " -0x2f95: "[?] " -0x2f96: "[?] " -0x2f97: "[?] " -0x2f98: "[?] " -0x2f99: "[?] " -0x2f9a: "[?] " -0x2f9b: "[?] " -0x2f9c: "[?] " -0x2f9d: "[?] " -0x2f9e: "[?] " -0x2f9f: "[?] " -0x2fa0: "[?] " -0x2fa1: "[?] " -0x2fa2: "[?] " -0x2fa3: "[?] " -0x2fa4: "[?] " -0x2fa5: "[?] " -0x2fa6: "[?] " -0x2fa7: "[?] " -0x2fa8: "[?] " -0x2fa9: "[?] " -0x2faa: "[?] " -0x2fab: "[?] " -0x2fac: "[?] " -0x2fad: "[?] " -0x2fae: "[?] " -0x2faf: "[?] " -0x2fb0: "[?] " -0x2fb1: "[?] " -0x2fb2: "[?] " -0x2fb3: "[?] " -0x2fb4: "[?] " -0x2fb5: "[?] " -0x2fb6: "[?] " -0x2fb7: "[?] " -0x2fb8: "[?] " -0x2fb9: "[?] " -0x2fba: "[?] " -0x2fbb: "[?] " -0x2fbc: "[?] " -0x2fbd: "[?] " -0x2fbe: "[?] " -0x2fbf: "[?] " -0x2fc0: "[?] " -0x2fc1: "[?] " -0x2fc2: "[?] " -0x2fc3: "[?] " -0x2fc4: "[?] " -0x2fc5: "[?] " -0x2fc6: "[?] " -0x2fc7: "[?] " -0x2fc8: "[?] " -0x2fc9: "[?] " -0x2fca: "[?] " -0x2fcb: "[?] " -0x2fcc: "[?] " -0x2fcd: "[?] " -0x2fce: "[?] " -0x2fcf: "[?] " -0x2fd0: "[?] " -0x2fd1: "[?] " -0x2fd2: "[?] " -0x2fd3: "[?] " -0x2fd4: "[?] " -0x2fd5: "[?] " -0x2fd6: "[?]" -0x2fd7: "[?]" -0x2fd8: "[?]" -0x2fd9: "[?]" -0x2fda: "[?]" -0x2fdb: "[?]" -0x2fdc: "[?]" -0x2fdd: "[?]" -0x2fde: "[?]" -0x2fdf: "[?]" -0x2fe0: "[?]" -0x2fe1: "[?]" -0x2fe2: "[?]" -0x2fe3: "[?]" -0x2fe4: "[?]" -0x2fe5: "[?]" -0x2fe6: "[?]" -0x2fe7: "[?]" -0x2fe8: "[?]" -0x2fe9: "[?]" -0x2fea: "[?]" -0x2feb: "[?]" -0x2fec: "[?]" -0x2fed: "[?]" -0x2fee: "[?]" -0x2fef: "[?]" -0x2ff0: "[?] " -0x2ff1: "[?] " -0x2ff2: "[?] " -0x2ff3: "[?] " -0x2ff4: "[?] " -0x2ff5: "[?] " -0x2ff6: "[?] " -0x2ff7: "[?] " -0x2ff8: "[?] " -0x2ff9: "[?] " -0x2ffa: "[?] " -0x2ffb: "[?] " -0x2ffc: "[?]" -0x2ffd: "[?]" -0x2ffe: "[?]" -/* x030 */ -0x3000: " " -0x3001: ", " -0x3002: ". " -0x3003: "\"" -0x3004: "[JIS]" -0x3005: "\"" -0x3006: "/" -0x3007: "0" -0x3008: "<" -0x3009: "> " -0x300a: "<<" -0x300b: ">> " -0x300c: "[" -0x300d: "] " -0x300e: "{" -0x300f: "} " -0x3010: "[(" -0x3011: ")] " -0x3012: "@" -0x3013: "X " -0x3014: "[" -0x3015: "] " -0x3016: "[[" -0x3017: "]] " -0x3018: "((" -0x3019: ")) " -0x301a: "[[" -0x301b: "]] " -0x301c: "~ " -0x301d: "``" -0x301e: "''" -0x301f: ",," -0x3020: "@" -0x3021: "1" -0x3022: "2" -0x3023: "3" -0x3024: "4" -0x3025: "5" -0x3026: "6" -0x3027: "7" -0x3028: "8" -0x3029: "9" -0x302a: "" -0x302b: "" -0x302c: "" -0x302d: "" -0x302e: "" -0x302f: "" -0x3030: "~" -0x3031: "+" -0x3032: "+" -0x3033: "+" -0x3034: "+" -0x3035: "" -0x3036: "@" -0x3037: " // " -0x3038: "+10+" -0x3039: "+20+" -0x303a: "+30+" -0x303b: "[?]" -0x303c: "[?]" -0x303d: "[?]" -0x303e: "" -0x303f: "" -0x3040: "[?]" -0x3041: "a" -0x3042: "a" -0x3043: "i" -0x3044: "i" -0x3045: "u" -0x3046: "u" -0x3047: "e" -0x3048: "e" -0x3049: "o" -0x304a: "o" -0x304b: "ka" -0x304c: "ga" -0x304d: "ki" -0x304e: "gi" -0x304f: "ku" -0x3050: "gu" -0x3051: "ke" -0x3052: "ge" -0x3053: "ko" -0x3054: "go" -0x3055: "sa" -0x3056: "za" -0x3057: "shi" -0x3058: "zi" -0x3059: "su" -0x305a: "zu" -0x305b: "se" -0x305c: "ze" -0x305d: "so" -0x305e: "zo" -0x305f: "ta" -0x3060: "da" -0x3061: "chi" -0x3062: "di" -0x3063: "tsu" -0x3064: "tsu" -0x3065: "du" -0x3066: "te" -0x3067: "de" -0x3068: "to" -0x3069: "do" -0x306a: "na" -0x306b: "ni" -0x306c: "nu" -0x306d: "ne" -0x306e: "no" -0x306f: "ha" -0x3070: "ba" -0x3071: "pa" -0x3072: "hi" -0x3073: "bi" -0x3074: "pi" -0x3075: "hu" -0x3076: "bu" -0x3077: "pu" -0x3078: "he" -0x3079: "be" -0x307a: "pe" -0x307b: "ho" -0x307c: "bo" -0x307d: "po" -0x307e: "ma" -0x307f: "mi" -0x3080: "mu" -0x3081: "me" -0x3082: "mo" -0x3083: "ya" -0x3084: "ya" -0x3085: "yu" -0x3086: "yu" -0x3087: "yo" -0x3088: "yo" -0x3089: "ra" -0x308a: "ri" -0x308b: "ru" -0x308c: "re" -0x308d: "ro" -0x308e: "wa" -0x308f: "wa" -0x3090: "wi" -0x3091: "we" -0x3092: "wo" -0x3093: "n" -0x3094: "vu" -0x3095: "[?]" -0x3096: "[?]" -0x3097: "[?]" -0x3098: "[?]" -0x3099: "" -0x309a: "" -0x309b: "" -0x309c: "" -0x309d: "\"" -0x309e: "\"" -0x309f: "[?]" -0x30a0: "[?]" -0x30a1: "a" -0x30a2: "a" -0x30a3: "i" -0x30a4: "i" -0x30a5: "u" -0x30a6: "u" -0x30a7: "e" -0x30a8: "e" -0x30a9: "o" -0x30aa: "o" -0x30ab: "ka" -0x30ac: "ga" -0x30ad: "ki" -0x30ae: "gi" -0x30af: "ku" -0x30b0: "gu" -0x30b1: "ke" -0x30b2: "ge" -0x30b3: "ko" -0x30b4: "go" -0x30b5: "sa" -0x30b6: "za" -0x30b7: "shi" -0x30b8: "zi" -0x30b9: "su" -0x30ba: "zu" -0x30bb: "se" -0x30bc: "ze" -0x30bd: "so" -0x30be: "zo" -0x30bf: "ta" -0x30c0: "da" -0x30c1: "chi" -0x30c2: "di" -0x30c3: "tsu" -0x30c4: "tsu" -0x30c5: "du" -0x30c6: "te" -0x30c7: "de" -0x30c8: "to" -0x30c9: "do" -0x30ca: "na" -0x30cb: "ni" -0x30cc: "nu" -0x30cd: "ne" -0x30ce: "no" -0x30cf: "ha" -0x30d0: "ba" -0x30d1: "pa" -0x30d2: "hi" -0x30d3: "bi" -0x30d4: "pi" -0x30d5: "hu" -0x30d6: "bu" -0x30d7: "pu" -0x30d8: "he" -0x30d9: "be" -0x30da: "pe" -0x30db: "ho" -0x30dc: "bo" -0x30dd: "po" -0x30de: "ma" -0x30df: "mi" -0x30e0: "mu" -0x30e1: "me" -0x30e2: "mo" -0x30e3: "ya" -0x30e4: "ya" -0x30e5: "yu" -0x30e6: "yu" -0x30e7: "yo" -0x30e8: "yo" -0x30e9: "ra" -0x30ea: "ri" -0x30eb: "ru" -0x30ec: "re" -0x30ed: "ro" -0x30ee: "wa" -0x30ef: "wa" -0x30f0: "wi" -0x30f1: "we" -0x30f2: "wo" -0x30f3: "n" -0x30f4: "vu" -0x30f5: "ka" -0x30f6: "ke" -0x30f7: "va" -0x30f8: "vi" -0x30f9: "ve" -0x30fa: "vo" -0x30fb: "" -0x30fc: "" -0x30fd: "\"" -0x30fe: "\"" -/* x031 */ -0x3100: "[?]" -0x3101: "[?]" -0x3102: "[?]" -0x3103: "[?]" -0x3104: "[?]" -0x3105: "B" -0x3106: "P" -0x3107: "M" -0x3108: "F" -0x3109: "D" -0x310a: "T" -0x310b: "N" -0x310c: "L" -0x310d: "G" -0x310e: "K" -0x310f: "H" -0x3110: "J" -0x3111: "Q" -0x3112: "X" -0x3113: "ZH" -0x3114: "CH" -0x3115: "SH" -0x3116: "R" -0x3117: "Z" -0x3118: "C" -0x3119: "S" -0x311a: "A" -0x311b: "O" -0x311c: "E" -0x311d: "EH" -0x311e: "AI" -0x311f: "EI" -0x3120: "AU" -0x3121: "OU" -0x3122: "AN" -0x3123: "EN" -0x3124: "ANG" -0x3125: "ENG" -0x3126: "ER" -0x3127: "I" -0x3128: "U" -0x3129: "IU" -0x312a: "V" -0x312b: "NG" -0x312c: "GN" -0x312d: "[?]" -0x312e: "[?]" -0x312f: "[?]" -0x3130: "[?]" -0x3131: "g" -0x3132: "gg" -0x3133: "gs" -0x3134: "n" -0x3135: "nj" -0x3136: "nh" -0x3137: "d" -0x3138: "dd" -0x3139: "r" -0x313a: "lg" -0x313b: "lm" -0x313c: "lb" -0x313d: "ls" -0x313e: "lt" -0x313f: "lp" -0x3140: "rh" -0x3141: "m" -0x3142: "b" -0x3143: "bb" -0x3144: "bs" -0x3145: "s" -0x3146: "ss" -0x3147: "" -0x3148: "j" -0x3149: "jj" -0x314a: "c" -0x314b: "k" -0x314c: "t" -0x314d: "p" -0x314e: "h" -0x314f: "a" -0x3150: "ae" -0x3151: "ya" -0x3152: "yae" -0x3153: "eo" -0x3154: "e" -0x3155: "yeo" -0x3156: "ye" -0x3157: "o" -0x3158: "wa" -0x3159: "wae" -0x315a: "oe" -0x315b: "yo" -0x315c: "u" -0x315d: "weo" -0x315e: "we" -0x315f: "wi" -0x3160: "yu" -0x3161: "eu" -0x3162: "yi" -0x3163: "i" -0x3164: "" -0x3165: "nn" -0x3166: "nd" -0x3167: "ns" -0x3168: "nZ" -0x3169: "lgs" -0x316a: "ld" -0x316b: "lbs" -0x316c: "lZ" -0x316d: "lQ" -0x316e: "mb" -0x316f: "ms" -0x3170: "mZ" -0x3171: "mN" -0x3172: "bg" -0x3173: "" -0x3174: "bsg" -0x3175: "bst" -0x3176: "bj" -0x3177: "bt" -0x3178: "bN" -0x3179: "bbN" -0x317a: "sg" -0x317b: "sn" -0x317c: "sd" -0x317d: "sb" -0x317e: "sj" -0x317f: "Z" -0x3180: "" -0x3181: "N" -0x3182: "Ns" -0x3183: "NZ" -0x3184: "pN" -0x3185: "hh" -0x3186: "Q" -0x3187: "yo-ya" -0x3188: "yo-yae" -0x3189: "yo-i" -0x318a: "yu-yeo" -0x318b: "yu-ye" -0x318c: "yu-i" -0x318d: "U" -0x318e: "U-i" -0x318f: "[?]" -0x3190: "" -0x3191: "" -0x3192: "" -0x3193: "" -0x3194: "" -0x3195: "" -0x3196: "" -0x3197: "" -0x3198: "" -0x3199: "" -0x319a: "" -0x319b: "" -0x319c: "" -0x319d: "" -0x319e: "" -0x319f: "" -0x31a0: "BU" -0x31a1: "ZI" -0x31a2: "JI" -0x31a3: "GU" -0x31a4: "EE" -0x31a5: "ENN" -0x31a6: "OO" -0x31a7: "ONN" -0x31a8: "IR" -0x31a9: "ANN" -0x31aa: "INN" -0x31ab: "UNN" -0x31ac: "IM" -0x31ad: "NGG" -0x31ae: "AINN" -0x31af: "AUNN" -0x31b0: "AM" -0x31b1: "OM" -0x31b2: "ONG" -0x31b3: "INNN" -0x31b4: "P" -0x31b5: "T" -0x31b6: "K" -0x31b7: "H" -0x31b8: "[?]" -0x31b9: "[?]" -0x31ba: "[?]" -0x31bb: "[?]" -0x31bc: "[?]" -0x31bd: "[?]" -0x31be: "[?]" -0x31bf: "[?]" -0x31c0: "[?]" -0x31c1: "[?]" -0x31c2: "[?]" -0x31c3: "[?]" -0x31c4: "[?]" -0x31c5: "[?]" -0x31c6: "[?]" -0x31c7: "[?]" -0x31c8: "[?]" -0x31c9: "[?]" -0x31ca: "[?]" -0x31cb: "[?]" -0x31cc: "[?]" -0x31cd: "[?]" -0x31ce: "[?]" -0x31cf: "[?]" -0x31d0: "[?]" -0x31d1: "[?]" -0x31d2: "[?]" -0x31d3: "[?]" -0x31d4: "[?]" -0x31d5: "[?]" -0x31d6: "[?]" -0x31d7: "[?]" -0x31d8: "[?]" -0x31d9: "[?]" -0x31da: "[?]" -0x31db: "[?]" -0x31dc: "[?]" -0x31dd: "[?]" -0x31de: "[?]" -0x31df: "[?]" -0x31e0: "[?]" -0x31e1: "[?]" -0x31e2: "[?]" -0x31e3: "[?]" -0x31e4: "[?]" -0x31e5: "[?]" -0x31e6: "[?]" -0x31e7: "[?]" -0x31e8: "[?]" -0x31e9: "[?]" -0x31ea: "[?]" -0x31eb: "[?]" -0x31ec: "[?]" -0x31ed: "[?]" -0x31ee: "[?]" -0x31ef: "[?]" -0x31f0: "[?]" -0x31f1: "[?]" -0x31f2: "[?]" -0x31f3: "[?]" -0x31f4: "[?]" -0x31f5: "[?]" -0x31f6: "[?]" -0x31f7: "[?]" -0x31f8: "[?]" -0x31f9: "[?]" -0x31fa: "[?]" -0x31fb: "[?]" -0x31fc: "[?]" -0x31fd: "[?]" -0x31fe: "[?]" -/* x032 */ -0x3200: "(g)" -0x3201: "(n)" -0x3202: "(d)" -0x3203: "(r)" -0x3204: "(m)" -0x3205: "(b)" -0x3206: "(s)" -0x3207: "()" -0x3208: "(j)" -0x3209: "(c)" -0x320a: "(k)" -0x320b: "(t)" -0x320c: "(p)" -0x320d: "(h)" -0x320e: "(ga)" -0x320f: "(na)" -0x3210: "(da)" -0x3211: "(ra)" -0x3212: "(ma)" -0x3213: "(ba)" -0x3214: "(sa)" -0x3215: "(a)" -0x3216: "(ja)" -0x3217: "(ca)" -0x3218: "(ka)" -0x3219: "(ta)" -0x321a: "(pa)" -0x321b: "(ha)" -0x321c: "(ju)" -0x321d: "[?]" -0x321e: "[?]" -0x321f: "[?]" -0x3220: "(1) " -0x3221: "(2) " -0x3222: "(3) " -0x3223: "(4) " -0x3224: "(5) " -0x3225: "(6) " -0x3226: "(7) " -0x3227: "(8) " -0x3228: "(9) " -0x3229: "(10) " -0x322a: "(Yue) " -0x322b: "(Huo) " -0x322c: "(Shui) " -0x322d: "(Mu) " -0x322e: "(Jin) " -0x322f: "(Tu) " -0x3230: "(Ri) " -0x3231: "(Zhu) " -0x3232: "(You) " -0x3233: "(She) " -0x3234: "(Ming) " -0x3235: "(Te) " -0x3236: "(Cai) " -0x3237: "(Zhu) " -0x3238: "(Lao) " -0x3239: "(Dai) " -0x323a: "(Hu) " -0x323b: "(Xue) " -0x323c: "(Jian) " -0x323d: "(Qi) " -0x323e: "(Zi) " -0x323f: "(Xie) " -0x3240: "(Ji) " -0x3241: "(Xiu) " -0x3242: "<<" -0x3243: ">>" -0x3244: "[?]" -0x3245: "[?]" -0x3246: "[?]" -0x3247: "[?]" -0x3248: "[?]" -0x3249: "[?]" -0x324a: "[?]" -0x324b: "[?]" -0x324c: "[?]" -0x324d: "[?]" -0x324e: "[?]" -0x324f: "[?]" -0x3250: "[?]" -0x3251: "[?]" -0x3252: "[?]" -0x3253: "[?]" -0x3254: "[?]" -0x3255: "[?]" -0x3256: "[?]" -0x3257: "[?]" -0x3258: "[?]" -0x3259: "[?]" -0x325a: "[?]" -0x325b: "[?]" -0x325c: "[?]" -0x325d: "[?]" -0x325e: "[?]" -0x325f: "[?]" -0x3260: "(g)" -0x3261: "(n)" -0x3262: "(d)" -0x3263: "(r)" -0x3264: "(m)" -0x3265: "(b)" -0x3266: "(s)" -0x3267: "()" -0x3268: "(j)" -0x3269: "(c)" -0x326a: "(k)" -0x326b: "(t)" -0x326c: "(p)" -0x326d: "(h)" -0x326e: "(ga)" -0x326f: "(na)" -0x3270: "(da)" -0x3271: "(ra)" -0x3272: "(ma)" -0x3273: "(ba)" -0x3274: "(sa)" -0x3275: "(a)" -0x3276: "(ja)" -0x3277: "(ca)" -0x3278: "(ka)" -0x3279: "(ta)" -0x327a: "(pa)" -0x327b: "(ha)" -0x327c: "[?]" -0x327d: "[?]" -0x327e: "[?]" -0x327f: "KIS " -0x3280: "(1) " -0x3281: "(2) " -0x3282: "(3) " -0x3283: "(4) " -0x3284: "(5) " -0x3285: "(6) " -0x3286: "(7) " -0x3287: "(8) " -0x3288: "(9) " -0x3289: "(10) " -0x328a: "(Yue) " -0x328b: "(Huo) " -0x328c: "(Shui) " -0x328d: "(Mu) " -0x328e: "(Jin) " -0x328f: "(Tu) " -0x3290: "(Ri) " -0x3291: "(Zhu) " -0x3292: "(You) " -0x3293: "(She) " -0x3294: "(Ming) " -0x3295: "(Te) " -0x3296: "(Cai) " -0x3297: "(Zhu) " -0x3298: "(Lao) " -0x3299: "(Mi) " -0x329a: "(Nan) " -0x329b: "(Nu) " -0x329c: "(Shi) " -0x329d: "(You) " -0x329e: "(Yin) " -0x329f: "(Zhu) " -0x32a0: "(Xiang) " -0x32a1: "(Xiu) " -0x32a2: "(Xie) " -0x32a3: "(Zheng) " -0x32a4: "(Shang) " -0x32a5: "(Zhong) " -0x32a6: "(Xia) " -0x32a7: "(Zuo) " -0x32a8: "(You) " -0x32a9: "(Yi) " -0x32aa: "(Zong) " -0x32ab: "(Xue) " -0x32ac: "(Jian) " -0x32ad: "(Qi) " -0x32ae: "(Zi) " -0x32af: "(Xie) " -0x32b0: "(Ye) " -0x32b1: "[?]" -0x32b2: "[?]" -0x32b3: "[?]" -0x32b4: "[?]" -0x32b5: "[?]" -0x32b6: "[?]" -0x32b7: "[?]" -0x32b8: "[?]" -0x32b9: "[?]" -0x32ba: "[?]" -0x32bb: "[?]" -0x32bc: "[?]" -0x32bd: "[?]" -0x32be: "[?]" -0x32bf: "[?]" -0x32c0: "1M" -0x32c1: "2M" -0x32c2: "3M" -0x32c3: "4M" -0x32c4: "5M" -0x32c5: "6M" -0x32c6: "7M" -0x32c7: "8M" -0x32c8: "9M" -0x32c9: "10M" -0x32ca: "11M" -0x32cb: "12M" -0x32cc: "[?]" -0x32cd: "[?]" -0x32ce: "[?]" -0x32cf: "[?]" -0x32d0: "a" -0x32d1: "i" -0x32d2: "u" -0x32d3: "u" -0x32d4: "o" -0x32d5: "ka" -0x32d6: "ki" -0x32d7: "ku" -0x32d8: "ke" -0x32d9: "ko" -0x32da: "sa" -0x32db: "si" -0x32dc: "su" -0x32dd: "se" -0x32de: "so" -0x32df: "ta" -0x32e0: "ti" -0x32e1: "tu" -0x32e2: "te" -0x32e3: "to" -0x32e4: "na" -0x32e5: "ni" -0x32e6: "nu" -0x32e7: "ne" -0x32e8: "no" -0x32e9: "ha" -0x32ea: "hi" -0x32eb: "hu" -0x32ec: "he" -0x32ed: "ho" -0x32ee: "ma" -0x32ef: "mi" -0x32f0: "mu" -0x32f1: "me" -0x32f2: "mo" -0x32f3: "ya" -0x32f4: "yu" -0x32f5: "yo" -0x32f6: "ra" -0x32f7: "ri" -0x32f8: "ru" -0x32f9: "re" -0x32fa: "ro" -0x32fb: "wa" -0x32fc: "wi" -0x32fd: "we" -0x32fe: "wo" -/* x033 */ -0x3300: "apartment" -0x3301: "alpha" -0x3302: "ampere" -0x3303: "are" -0x3304: "inning" -0x3305: "inch" -0x3306: "won" -0x3307: "escudo" -0x3308: "acre" -0x3309: "ounce" -0x330a: "ohm" -0x330b: "kai-ri" -0x330c: "carat" -0x330d: "calorie" -0x330e: "gallon" -0x330f: "gamma" -0x3310: "giga" -0x3311: "guinea" -0x3312: "curie" -0x3313: "guilder" -0x3314: "kilo" -0x3315: "kilogram" -0x3316: "kilometer" -0x3317: "kilowatt" -0x3318: "gram" -0x3319: "gram ton" -0x331a: "cruzeiro" -0x331b: "krone" -0x331c: "case" -0x331d: "koruna" -0x331e: "co-op" -0x331f: "cycle" -0x3320: "centime" -0x3321: "shilling" -0x3322: "centi" -0x3323: "cent" -0x3324: "dozen" -0x3325: "desi" -0x3326: "dollar" -0x3327: "ton" -0x3328: "nano" -0x3329: "knot" -0x332a: "heights" -0x332b: "percent" -0x332c: "parts" -0x332d: "barrel" -0x332e: "piaster" -0x332f: "picul" -0x3330: "pico" -0x3331: "building" -0x3332: "farad" -0x3333: "feet" -0x3334: "bushel" -0x3335: "franc" -0x3336: "hectare" -0x3337: "peso" -0x3338: "pfennig" -0x3339: "hertz" -0x333a: "pence" -0x333b: "page" -0x333c: "beta" -0x333d: "point" -0x333e: "volt" -0x333f: "hon" -0x3340: "pound" -0x3341: "hall" -0x3342: "horn" -0x3343: "micro" -0x3344: "mile" -0x3345: "mach" -0x3346: "mark" -0x3347: "mansion" -0x3348: "micron" -0x3349: "milli" -0x334a: "millibar" -0x334b: "mega" -0x334c: "megaton" -0x334d: "meter" -0x334e: "yard" -0x334f: "yard" -0x3350: "yuan" -0x3351: "liter" -0x3352: "lira" -0x3353: "rupee" -0x3354: "ruble" -0x3355: "rem" -0x3356: "roentgen" -0x3357: "watt" -0x3358: "0h" -0x3359: "1h" -0x335a: "2h" -0x335b: "3h" -0x335c: "4h" -0x335d: "5h" -0x335e: "6h" -0x335f: "7h" -0x3360: "8h" -0x3361: "9h" -0x3362: "10h" -0x3363: "11h" -0x3364: "12h" -0x3365: "13h" -0x3366: "14h" -0x3367: "15h" -0x3368: "16h" -0x3369: "17h" -0x336a: "18h" -0x336b: "19h" -0x336c: "20h" -0x336d: "21h" -0x336e: "22h" -0x336f: "23h" -0x3370: "24h" -0x3371: "HPA" -0x3372: "da" -0x3373: "AU" -0x3374: "bar" -0x3375: "oV" -0x3376: "pc" -0x3377: "[?]" -0x3378: "[?]" -0x3379: "[?]" -0x337a: "[?]" -0x337b: "Heisei" -0x337c: "Syouwa" -0x337d: "Taisyou" -0x337e: "Meiji" -0x337f: "Inc." -0x3380: "pA" -0x3381: "nA" -0x3382: "microamp" -0x3383: "mA" -0x3384: "kA" -0x3385: "kB" -0x3386: "MB" -0x3387: "GB" -0x3388: "cal" -0x3389: "kcal" -0x338a: "pF" -0x338b: "nF" -0x338c: "microFarad" -0x338d: "microgram" -0x338e: "mg" -0x338f: "kg" -0x3390: "Hz" -0x3391: "kHz" -0x3392: "MHz" -0x3393: "GHz" -0x3394: "THz" -0x3395: "microliter" -0x3396: "ml" -0x3397: "dl" -0x3398: "kl" -0x3399: "fm" -0x339a: "nm" -0x339b: "micrometer" -0x339c: "mm" -0x339d: "cm" -0x339e: "km" -0x339f: "mm^2" -0x33a0: "cm^2" -0x33a1: "m^2" -0x33a2: "km^2" -0x33a3: "mm^4" -0x33a4: "cm^3" -0x33a5: "m^3" -0x33a6: "km^3" -0x33a7: "m/s" -0x33a8: "m/s^2" -0x33a9: "Pa" -0x33aa: "kPa" -0x33ab: "MPa" -0x33ac: "GPa" -0x33ad: "rad" -0x33ae: "rad/s" -0x33af: "rad/s^2" -0x33b0: "ps" -0x33b1: "ns" -0x33b2: "microsecond" -0x33b3: "ms" -0x33b4: "pV" -0x33b5: "nV" -0x33b6: "microvolt" -0x33b7: "mV" -0x33b8: "kV" -0x33b9: "MV" -0x33ba: "pW" -0x33bb: "nW" -0x33bc: "microwatt" -0x33bd: "mW" -0x33be: "kW" -0x33bf: "MW" -0x33c0: "kOhm" -0x33c1: "MOhm" -0x33c2: "a.m." -0x33c3: "Bq" -0x33c4: "cc" -0x33c5: "cd" -0x33c6: "C/kg" -0x33c7: "Co." -0x33c8: "dB" -0x33c9: "Gy" -0x33ca: "ha" -0x33cb: "HP" -0x33cc: "in" -0x33cd: "K.K." -0x33ce: "KM" -0x33cf: "kt" -0x33d0: "lm" -0x33d1: "ln" -0x33d2: "log" -0x33d3: "lx" -0x33d4: "mb" -0x33d5: "mil" -0x33d6: "mol" -0x33d7: "pH" -0x33d8: "p.m." -0x33d9: "PPM" -0x33da: "PR" -0x33db: "sr" -0x33dc: "Sv" -0x33dd: "Wb" -0x33de: "[?]" -0x33df: "[?]" -0x33e0: "1d" -0x33e1: "2d" -0x33e2: "3d" -0x33e3: "4d" -0x33e4: "5d" -0x33e5: "6d" -0x33e6: "7d" -0x33e7: "8d" -0x33e8: "9d" -0x33e9: "10d" -0x33ea: "11d" -0x33eb: "12d" -0x33ec: "13d" -0x33ed: "14d" -0x33ee: "15d" -0x33ef: "16d" -0x33f0: "17d" -0x33f1: "18d" -0x33f2: "19d" -0x33f3: "20d" -0x33f4: "21d" -0x33f5: "22d" -0x33f6: "23d" -0x33f7: "24d" -0x33f8: "25d" -0x33f9: "26d" -0x33fa: "27d" -0x33fb: "28d" -0x33fc: "29d" -0x33fd: "30d" -0x33fe: "31d" -/* x04d */ -0x4d00: "[?] " -0x4d01: "[?] " -0x4d02: "[?] " -0x4d03: "[?] " -0x4d04: "[?] " -0x4d05: "[?] " -0x4d06: "[?] " -0x4d07: "[?] " -0x4d08: "[?] " -0x4d09: "[?] " -0x4d0a: "[?] " -0x4d0b: "[?] " -0x4d0c: "[?] " -0x4d0d: "[?] " -0x4d0e: "[?] " -0x4d0f: "[?] " -0x4d10: "[?] " -0x4d11: "[?] " -0x4d12: "[?] " -0x4d13: "[?] " -0x4d14: "[?] " -0x4d15: "[?] " -0x4d16: "[?] " -0x4d17: "[?] " -0x4d18: "[?] " -0x4d19: "[?] " -0x4d1a: "[?] " -0x4d1b: "[?] " -0x4d1c: "[?] " -0x4d1d: "[?] " -0x4d1e: "[?] " -0x4d1f: "[?] " -0x4d20: "[?] " -0x4d21: "[?] " -0x4d22: "[?] " -0x4d23: "[?] " -0x4d24: "[?] " -0x4d25: "[?] " -0x4d26: "[?] " -0x4d27: "[?] " -0x4d28: "[?] " -0x4d29: "[?] " -0x4d2a: "[?] " -0x4d2b: "[?] " -0x4d2c: "[?] " -0x4d2d: "[?] " -0x4d2e: "[?] " -0x4d2f: "[?] " -0x4d30: "[?] " -0x4d31: "[?] " -0x4d32: "[?] " -0x4d33: "[?] " -0x4d34: "[?] " -0x4d35: "[?] " -0x4d36: "[?] " -0x4d37: "[?] " -0x4d38: "[?] " -0x4d39: "[?] " -0x4d3a: "[?] " -0x4d3b: "[?] " -0x4d3c: "[?] " -0x4d3d: "[?] " -0x4d3e: "[?] " -0x4d3f: "[?] " -0x4d40: "[?] " -0x4d41: "[?] " -0x4d42: "[?] " -0x4d43: "[?] " -0x4d44: "[?] " -0x4d45: "[?] " -0x4d46: "[?] " -0x4d47: "[?] " -0x4d48: "[?] " -0x4d49: "[?] " -0x4d4a: "[?] " -0x4d4b: "[?] " -0x4d4c: "[?] " -0x4d4d: "[?] " -0x4d4e: "[?] " -0x4d4f: "[?] " -0x4d50: "[?] " -0x4d51: "[?] " -0x4d52: "[?] " -0x4d53: "[?] " -0x4d54: "[?] " -0x4d55: "[?] " -0x4d56: "[?] " -0x4d57: "[?] " -0x4d58: "[?] " -0x4d59: "[?] " -0x4d5a: "[?] " -0x4d5b: "[?] " -0x4d5c: "[?] " -0x4d5d: "[?] " -0x4d5e: "[?] " -0x4d5f: "[?] " -0x4d60: "[?] " -0x4d61: "[?] " -0x4d62: "[?] " -0x4d63: "[?] " -0x4d64: "[?] " -0x4d65: "[?] " -0x4d66: "[?] " -0x4d67: "[?] " -0x4d68: "[?] " -0x4d69: "[?] " -0x4d6a: "[?] " -0x4d6b: "[?] " -0x4d6c: "[?] " -0x4d6d: "[?] " -0x4d6e: "[?] " -0x4d6f: "[?] " -0x4d70: "[?] " -0x4d71: "[?] " -0x4d72: "[?] " -0x4d73: "[?] " -0x4d74: "[?] " -0x4d75: "[?] " -0x4d76: "[?] " -0x4d77: "[?] " -0x4d78: "[?] " -0x4d79: "[?] " -0x4d7a: "[?] " -0x4d7b: "[?] " -0x4d7c: "[?] " -0x4d7d: "[?] " -0x4d7e: "[?] " -0x4d7f: "[?] " -0x4d80: "[?] " -0x4d81: "[?] " -0x4d82: "[?] " -0x4d83: "[?] " -0x4d84: "[?] " -0x4d85: "[?] " -0x4d86: "[?] " -0x4d87: "[?] " -0x4d88: "[?] " -0x4d89: "[?] " -0x4d8a: "[?] " -0x4d8b: "[?] " -0x4d8c: "[?] " -0x4d8d: "[?] " -0x4d8e: "[?] " -0x4d8f: "[?] " -0x4d90: "[?] " -0x4d91: "[?] " -0x4d92: "[?] " -0x4d93: "[?] " -0x4d94: "[?] " -0x4d95: "[?] " -0x4d96: "[?] " -0x4d97: "[?] " -0x4d98: "[?] " -0x4d99: "[?] " -0x4d9a: "[?] " -0x4d9b: "[?] " -0x4d9c: "[?] " -0x4d9d: "[?] " -0x4d9e: "[?] " -0x4d9f: "[?] " -0x4da0: "[?] " -0x4da1: "[?] " -0x4da2: "[?] " -0x4da3: "[?] " -0x4da4: "[?] " -0x4da5: "[?] " -0x4da6: "[?] " -0x4da7: "[?] " -0x4da8: "[?] " -0x4da9: "[?] " -0x4daa: "[?] " -0x4dab: "[?] " -0x4dac: "[?] " -0x4dad: "[?] " -0x4dae: "[?] " -0x4daf: "[?] " -0x4db0: "[?] " -0x4db1: "[?] " -0x4db2: "[?] " -0x4db3: "[?] " -0x4db4: "[?] " -0x4db5: "[?] " -0x4db6: "[?]" -0x4db7: "[?]" -0x4db8: "[?]" -0x4db9: "[?]" -0x4dba: "[?]" -0x4dbb: "[?]" -0x4dbc: "[?]" -0x4dbd: "[?]" -0x4dbe: "[?]" -0x4dbf: "[?]" -0x4dc0: "[?]" -0x4dc1: "[?]" -0x4dc2: "[?]" -0x4dc3: "[?]" -0x4dc4: "[?]" -0x4dc5: "[?]" -0x4dc6: "[?]" -0x4dc7: "[?]" -0x4dc8: "[?]" -0x4dc9: "[?]" -0x4dca: "[?]" -0x4dcb: "[?]" -0x4dcc: "[?]" -0x4dcd: "[?]" -0x4dce: "[?]" -0x4dcf: "[?]" -0x4dd0: "[?]" -0x4dd1: "[?]" -0x4dd2: "[?]" -0x4dd3: "[?]" -0x4dd4: "[?]" -0x4dd5: "[?]" -0x4dd6: "[?]" -0x4dd7: "[?]" -0x4dd8: "[?]" -0x4dd9: "[?]" -0x4dda: "[?]" -0x4ddb: "[?]" -0x4ddc: "[?]" -0x4ddd: "[?]" -0x4dde: "[?]" -0x4ddf: "[?]" -0x4de0: "[?]" -0x4de1: "[?]" -0x4de2: "[?]" -0x4de3: "[?]" -0x4de4: "[?]" -0x4de5: "[?]" -0x4de6: "[?]" -0x4de7: "[?]" -0x4de8: "[?]" -0x4de9: "[?]" -0x4dea: "[?]" -0x4deb: "[?]" -0x4dec: "[?]" -0x4ded: "[?]" -0x4dee: "[?]" -0x4def: "[?]" -0x4df0: "[?]" -0x4df1: "[?]" -0x4df2: "[?]" -0x4df3: "[?]" -0x4df4: "[?]" -0x4df5: "[?]" -0x4df6: "[?]" -0x4df7: "[?]" -0x4df8: "[?]" -0x4df9: "[?]" -0x4dfa: "[?]" -0x4dfb: "[?]" -0x4dfc: "[?]" -0x4dfd: "[?]" -0x4dfe: "[?]" -/* x04e */ -0x4e00: "[?] " -0x4e01: "Ding " -0x4e02: "Kao " -0x4e03: "Qi " -0x4e04: "Shang " -0x4e05: "Xia " -0x4e06: "[?] " -0x4e07: "Mo " -0x4e08: "Zhang " -0x4e09: "San " -0x4e0a: "Shang " -0x4e0b: "Xia " -0x4e0c: "Ji " -0x4e0d: "Bu " -0x4e0e: "Yu " -0x4e0f: "Mian " -0x4e10: "Gai " -0x4e11: "Chou " -0x4e12: "Chou " -0x4e13: "Zhuan " -0x4e14: "Qie " -0x4e15: "Pi " -0x4e16: "Shi " -0x4e17: "Shi " -0x4e18: "Qiu " -0x4e19: "Bing " -0x4e1a: "Ye " -0x4e1b: "Cong " -0x4e1c: "Dong " -0x4e1d: "Si " -0x4e1e: "Cheng " -0x4e1f: "Diu " -0x4e20: "Qiu " -0x4e21: "Liang " -0x4e22: "Diu " -0x4e23: "You " -0x4e24: "Liang " -0x4e25: "Yan " -0x4e26: "Bing " -0x4e27: "Sang " -0x4e28: "Gun " -0x4e29: "Jiu " -0x4e2a: "Ge " -0x4e2b: "Ya " -0x4e2c: "Qiang " -0x4e2d: "Zhong " -0x4e2e: "Ji " -0x4e2f: "Jie " -0x4e30: "Feng " -0x4e31: "Guan " -0x4e32: "Chuan " -0x4e33: "Chan " -0x4e34: "Lin " -0x4e35: "Zhuo " -0x4e36: "Zhu " -0x4e37: "Ha " -0x4e38: "Wan " -0x4e39: "Dan " -0x4e3a: "Wei " -0x4e3b: "Zhu " -0x4e3c: "Jing " -0x4e3d: "Li " -0x4e3e: "Ju " -0x4e3f: "Pie " -0x4e40: "Fu " -0x4e41: "Yi " -0x4e42: "Yi " -0x4e43: "Nai " -0x4e44: "Shime " -0x4e45: "Jiu " -0x4e46: "Jiu " -0x4e47: "Zhe " -0x4e48: "Yao " -0x4e49: "Yi " -0x4e4a: "[?] " -0x4e4b: "Zhi " -0x4e4c: "Wu " -0x4e4d: "Zha " -0x4e4e: "Hu " -0x4e4f: "Fa " -0x4e50: "Le " -0x4e51: "Zhong " -0x4e52: "Ping " -0x4e53: "Pang " -0x4e54: "Qiao " -0x4e55: "Hu " -0x4e56: "Guai " -0x4e57: "Cheng " -0x4e58: "Cheng " -0x4e59: "Yi " -0x4e5a: "Yin " -0x4e5b: "[?] " -0x4e5c: "Mie " -0x4e5d: "Jiu " -0x4e5e: "Qi " -0x4e5f: "Ye " -0x4e60: "Xi " -0x4e61: "Xiang " -0x4e62: "Gai " -0x4e63: "Diu " -0x4e64: "Hal " -0x4e65: "[?] " -0x4e66: "Shu " -0x4e67: "Twul " -0x4e68: "Shi " -0x4e69: "Ji " -0x4e6a: "Nang " -0x4e6b: "Jia " -0x4e6c: "Kel " -0x4e6d: "Shi " -0x4e6e: "[?] " -0x4e6f: "Ol " -0x4e70: "Mai " -0x4e71: "Luan " -0x4e72: "Cal " -0x4e73: "Ru " -0x4e74: "Xue " -0x4e75: "Yan " -0x4e76: "Fu " -0x4e77: "Sha " -0x4e78: "Na " -0x4e79: "Gan " -0x4e7a: "Sol " -0x4e7b: "El " -0x4e7c: "Cwul " -0x4e7d: "[?] " -0x4e7e: "Gan " -0x4e7f: "Chi " -0x4e80: "Gui " -0x4e81: "Gan " -0x4e82: "Luan " -0x4e83: "Lin " -0x4e84: "Yi " -0x4e85: "Jue " -0x4e86: "Liao " -0x4e87: "Ma " -0x4e88: "Yu " -0x4e89: "Zheng " -0x4e8a: "Shi " -0x4e8b: "Shi " -0x4e8c: "Er " -0x4e8d: "Chu " -0x4e8e: "Yu " -0x4e8f: "Yu " -0x4e90: "Yu " -0x4e91: "Yun " -0x4e92: "Hu " -0x4e93: "Qi " -0x4e94: "Wu " -0x4e95: "Jing " -0x4e96: "Si " -0x4e97: "Sui " -0x4e98: "Gen " -0x4e99: "Gen " -0x4e9a: "Ya " -0x4e9b: "Xie " -0x4e9c: "Ya " -0x4e9d: "Qi " -0x4e9e: "Ya " -0x4e9f: "Ji " -0x4ea0: "Tou " -0x4ea1: "Wang " -0x4ea2: "Kang " -0x4ea3: "Ta " -0x4ea4: "Jiao " -0x4ea5: "Hai " -0x4ea6: "Yi " -0x4ea7: "Chan " -0x4ea8: "Heng " -0x4ea9: "Mu " -0x4eaa: "[?] " -0x4eab: "Xiang " -0x4eac: "Jing " -0x4ead: "Ting " -0x4eae: "Liang " -0x4eaf: "Xiang " -0x4eb0: "Jing " -0x4eb1: "Ye " -0x4eb2: "Qin " -0x4eb3: "Bo " -0x4eb4: "You " -0x4eb5: "Xie " -0x4eb6: "Dan " -0x4eb7: "Lian " -0x4eb8: "Duo " -0x4eb9: "Wei " -0x4eba: "Ren " -0x4ebb: "Ren " -0x4ebc: "Ji " -0x4ebd: "La " -0x4ebe: "Wang " -0x4ebf: "Yi " -0x4ec0: "Shi " -0x4ec1: "Ren " -0x4ec2: "Le " -0x4ec3: "Ding " -0x4ec4: "Ze " -0x4ec5: "Jin " -0x4ec6: "Pu " -0x4ec7: "Chou " -0x4ec8: "Ba " -0x4ec9: "Zhang " -0x4eca: "Jin " -0x4ecb: "Jie " -0x4ecc: "Bing " -0x4ecd: "Reng " -0x4ece: "Cong " -0x4ecf: "Fo " -0x4ed0: "San " -0x4ed1: "Lun " -0x4ed2: "Sya " -0x4ed3: "Cang " -0x4ed4: "Zi " -0x4ed5: "Shi " -0x4ed6: "Ta " -0x4ed7: "Zhang " -0x4ed8: "Fu " -0x4ed9: "Xian " -0x4eda: "Xian " -0x4edb: "Tuo " -0x4edc: "Hong " -0x4edd: "Tong " -0x4ede: "Ren " -0x4edf: "Qian " -0x4ee0: "Gan " -0x4ee1: "Yi " -0x4ee2: "Di " -0x4ee3: "Dai " -0x4ee4: "Ling " -0x4ee5: "Yi " -0x4ee6: "Chao " -0x4ee7: "Chang " -0x4ee8: "Sa " -0x4ee9: "[?] " -0x4eea: "Yi " -0x4eeb: "Mu " -0x4eec: "Men " -0x4eed: "Ren " -0x4eee: "Jia " -0x4eef: "Chao " -0x4ef0: "Yang " -0x4ef1: "Qian " -0x4ef2: "Zhong " -0x4ef3: "Pi " -0x4ef4: "Wan " -0x4ef5: "Wu " -0x4ef6: "Jian " -0x4ef7: "Jie " -0x4ef8: "Yao " -0x4ef9: "Feng " -0x4efa: "Cang " -0x4efb: "Ren " -0x4efc: "Wang " -0x4efd: "Fen " -0x4efe: "Di " -0x4eff: "Fang " -/* x04f */ -0x4f00: "Zhong " -0x4f01: "Qi " -0x4f02: "Pei " -0x4f03: "Yu " -0x4f04: "Diao " -0x4f05: "Dun " -0x4f06: "Wen " -0x4f07: "Yi " -0x4f08: "Xin " -0x4f09: "Kang " -0x4f0a: "Yi " -0x4f0b: "Ji " -0x4f0c: "Ai " -0x4f0d: "Wu " -0x4f0e: "Ji " -0x4f0f: "Fu " -0x4f10: "Fa " -0x4f11: "Xiu " -0x4f12: "Jin " -0x4f13: "Bei " -0x4f14: "Dan " -0x4f15: "Fu " -0x4f16: "Tang " -0x4f17: "Zhong " -0x4f18: "You " -0x4f19: "Huo " -0x4f1a: "Hui " -0x4f1b: "Yu " -0x4f1c: "Cui " -0x4f1d: "Chuan " -0x4f1e: "San " -0x4f1f: "Wei " -0x4f20: "Chuan " -0x4f21: "Che " -0x4f22: "Ya " -0x4f23: "Xian " -0x4f24: "Shang " -0x4f25: "Chang " -0x4f26: "Lun " -0x4f27: "Cang " -0x4f28: "Xun " -0x4f29: "Xin " -0x4f2a: "Wei " -0x4f2b: "Zhu " -0x4f2c: "[?] " -0x4f2d: "Xuan " -0x4f2e: "Nu " -0x4f2f: "Bo " -0x4f30: "Gu " -0x4f31: "Ni " -0x4f32: "Ni " -0x4f33: "Xie " -0x4f34: "Ban " -0x4f35: "Xu " -0x4f36: "Ling " -0x4f37: "Zhou " -0x4f38: "Shen " -0x4f39: "Qu " -0x4f3a: "Si " -0x4f3b: "Beng " -0x4f3c: "Si " -0x4f3d: "Jia " -0x4f3e: "Pi " -0x4f3f: "Yi " -0x4f40: "Si " -0x4f41: "Ai " -0x4f42: "Zheng " -0x4f43: "Dian " -0x4f44: "Han " -0x4f45: "Mai " -0x4f46: "Dan " -0x4f47: "Zhu " -0x4f48: "Bu " -0x4f49: "Qu " -0x4f4a: "Bi " -0x4f4b: "Shao " -0x4f4c: "Ci " -0x4f4d: "Wei " -0x4f4e: "Di " -0x4f4f: "Zhu " -0x4f50: "Zuo " -0x4f51: "You " -0x4f52: "Yang " -0x4f53: "Ti " -0x4f54: "Zhan " -0x4f55: "He " -0x4f56: "Bi " -0x4f57: "Tuo " -0x4f58: "She " -0x4f59: "Yu " -0x4f5a: "Yi " -0x4f5b: "Fo " -0x4f5c: "Zuo " -0x4f5d: "Kou " -0x4f5e: "Ning " -0x4f5f: "Tong " -0x4f60: "Ni " -0x4f61: "Xuan " -0x4f62: "Qu " -0x4f63: "Yong " -0x4f64: "Wa " -0x4f65: "Qian " -0x4f66: "[?] " -0x4f67: "Ka " -0x4f68: "[?] " -0x4f69: "Pei " -0x4f6a: "Huai " -0x4f6b: "He " -0x4f6c: "Lao " -0x4f6d: "Xiang " -0x4f6e: "Ge " -0x4f6f: "Yang " -0x4f70: "Bai " -0x4f71: "Fa " -0x4f72: "Ming " -0x4f73: "Jia " -0x4f74: "Er " -0x4f75: "Bing " -0x4f76: "Ji " -0x4f77: "Hen " -0x4f78: "Huo " -0x4f79: "Gui " -0x4f7a: "Quan " -0x4f7b: "Tiao " -0x4f7c: "Jiao " -0x4f7d: "Ci " -0x4f7e: "Yi " -0x4f7f: "Shi " -0x4f80: "Xing " -0x4f81: "Shen " -0x4f82: "Tuo " -0x4f83: "Kan " -0x4f84: "Zhi " -0x4f85: "Gai " -0x4f86: "Lai " -0x4f87: "Yi " -0x4f88: "Chi " -0x4f89: "Kua " -0x4f8a: "Guang " -0x4f8b: "Li " -0x4f8c: "Yin " -0x4f8d: "Shi " -0x4f8e: "Mi " -0x4f8f: "Zhu " -0x4f90: "Xu " -0x4f91: "You " -0x4f92: "An " -0x4f93: "Lu " -0x4f94: "Mou " -0x4f95: "Er " -0x4f96: "Lun " -0x4f97: "Tong " -0x4f98: "Cha " -0x4f99: "Chi " -0x4f9a: "Xun " -0x4f9b: "Gong " -0x4f9c: "Zhou " -0x4f9d: "Yi " -0x4f9e: "Ru " -0x4f9f: "Jian " -0x4fa0: "Xia " -0x4fa1: "Jia " -0x4fa2: "Zai " -0x4fa3: "Lu " -0x4fa4: "Ko " -0x4fa5: "Jiao " -0x4fa6: "Zhen " -0x4fa7: "Ce " -0x4fa8: "Qiao " -0x4fa9: "Kuai " -0x4faa: "Chai " -0x4fab: "Ning " -0x4fac: "Nong " -0x4fad: "Jin " -0x4fae: "Wu " -0x4faf: "Hou " -0x4fb0: "Jiong " -0x4fb1: "Cheng " -0x4fb2: "Zhen " -0x4fb3: "Zuo " -0x4fb4: "Chou " -0x4fb5: "Qin " -0x4fb6: "Lu " -0x4fb7: "Ju " -0x4fb8: "Shu " -0x4fb9: "Ting " -0x4fba: "Shen " -0x4fbb: "Tuo " -0x4fbc: "Bo " -0x4fbd: "Nan " -0x4fbe: "Hao " -0x4fbf: "Bian " -0x4fc0: "Tui " -0x4fc1: "Yu " -0x4fc2: "Xi " -0x4fc3: "Cu " -0x4fc4: "E " -0x4fc5: "Qiu " -0x4fc6: "Xu " -0x4fc7: "Kuang " -0x4fc8: "Ku " -0x4fc9: "Wu " -0x4fca: "Jun " -0x4fcb: "Yi " -0x4fcc: "Fu " -0x4fcd: "Lang " -0x4fce: "Zu " -0x4fcf: "Qiao " -0x4fd0: "Li " -0x4fd1: "Yong " -0x4fd2: "Hun " -0x4fd3: "Jing " -0x4fd4: "Xian " -0x4fd5: "San " -0x4fd6: "Pai " -0x4fd7: "Su " -0x4fd8: "Fu " -0x4fd9: "Xi " -0x4fda: "Li " -0x4fdb: "Fu " -0x4fdc: "Ping " -0x4fdd: "Bao " -0x4fde: "Yu " -0x4fdf: "Si " -0x4fe0: "Xia " -0x4fe1: "Xin " -0x4fe2: "Xiu " -0x4fe3: "Yu " -0x4fe4: "Ti " -0x4fe5: "Che " -0x4fe6: "Chou " -0x4fe7: "[?] " -0x4fe8: "Yan " -0x4fe9: "Lia " -0x4fea: "Li " -0x4feb: "Lai " -0x4fec: "[?] " -0x4fed: "Jian " -0x4fee: "Xiu " -0x4fef: "Fu " -0x4ff0: "He " -0x4ff1: "Ju " -0x4ff2: "Xiao " -0x4ff3: "Pai " -0x4ff4: "Jian " -0x4ff5: "Biao " -0x4ff6: "Chu " -0x4ff7: "Fei " -0x4ff8: "Feng " -0x4ff9: "Ya " -0x4ffa: "An " -0x4ffb: "Bei " -0x4ffc: "Yu " -0x4ffd: "Xin " -0x4ffe: "Bi " -0x4fff: "Jian " -/* x050 */ -0x5000: "Chang " -0x5001: "Chi " -0x5002: "Bing " -0x5003: "Zan " -0x5004: "Yao " -0x5005: "Cui " -0x5006: "Lia " -0x5007: "Wan " -0x5008: "Lai " -0x5009: "Cang " -0x500a: "Zong " -0x500b: "Ge " -0x500c: "Guan " -0x500d: "Bei " -0x500e: "Tian " -0x500f: "Shu " -0x5010: "Shu " -0x5011: "Men " -0x5012: "Dao " -0x5013: "Tan " -0x5014: "Jue " -0x5015: "Chui " -0x5016: "Xing " -0x5017: "Peng " -0x5018: "Tang " -0x5019: "Hou " -0x501a: "Yi " -0x501b: "Qi " -0x501c: "Ti " -0x501d: "Gan " -0x501e: "Jing " -0x501f: "Jie " -0x5020: "Sui " -0x5021: "Chang " -0x5022: "Jie " -0x5023: "Fang " -0x5024: "Zhi " -0x5025: "Kong " -0x5026: "Juan " -0x5027: "Zong " -0x5028: "Ju " -0x5029: "Qian " -0x502a: "Ni " -0x502b: "Lun " -0x502c: "Zhuo " -0x502d: "Wei " -0x502e: "Luo " -0x502f: "Song " -0x5030: "Leng " -0x5031: "Hun " -0x5032: "Dong " -0x5033: "Zi " -0x5034: "Ben " -0x5035: "Wu " -0x5036: "Ju " -0x5037: "Nai " -0x5038: "Cai " -0x5039: "Jian " -0x503a: "Zhai " -0x503b: "Ye " -0x503c: "Zhi " -0x503d: "Sha " -0x503e: "Qing " -0x503f: "[?] " -0x5040: "Ying " -0x5041: "Cheng " -0x5042: "Jian " -0x5043: "Yan " -0x5044: "Nuan " -0x5045: "Zhong " -0x5046: "Chun " -0x5047: "Jia " -0x5048: "Jie " -0x5049: "Wei " -0x504a: "Yu " -0x504b: "Bing " -0x504c: "Ruo " -0x504d: "Ti " -0x504e: "Wei " -0x504f: "Pian " -0x5050: "Yan " -0x5051: "Feng " -0x5052: "Tang " -0x5053: "Wo " -0x5054: "E " -0x5055: "Xie " -0x5056: "Che " -0x5057: "Sheng " -0x5058: "Kan " -0x5059: "Di " -0x505a: "Zuo " -0x505b: "Cha " -0x505c: "Ting " -0x505d: "Bei " -0x505e: "Ye " -0x505f: "Huang " -0x5060: "Yao " -0x5061: "Zhan " -0x5062: "Chou " -0x5063: "Yan " -0x5064: "You " -0x5065: "Jian " -0x5066: "Xu " -0x5067: "Zha " -0x5068: "Ci " -0x5069: "Fu " -0x506a: "Bi " -0x506b: "Zhi " -0x506c: "Zong " -0x506d: "Mian " -0x506e: "Ji " -0x506f: "Yi " -0x5070: "Xie " -0x5071: "Xun " -0x5072: "Si " -0x5073: "Duan " -0x5074: "Ce " -0x5075: "Zhen " -0x5076: "Ou " -0x5077: "Tou " -0x5078: "Tou " -0x5079: "Bei " -0x507a: "Za " -0x507b: "Lu " -0x507c: "Jie " -0x507d: "Wei " -0x507e: "Fen " -0x507f: "Chang " -0x5080: "Gui " -0x5081: "Sou " -0x5082: "Zhi " -0x5083: "Su " -0x5084: "Xia " -0x5085: "Fu " -0x5086: "Yuan " -0x5087: "Rong " -0x5088: "Li " -0x5089: "Ru " -0x508a: "Yun " -0x508b: "Gou " -0x508c: "Ma " -0x508d: "Bang " -0x508e: "Dian " -0x508f: "Tang " -0x5090: "Hao " -0x5091: "Jie " -0x5092: "Xi " -0x5093: "Shan " -0x5094: "Qian " -0x5095: "Jue " -0x5096: "Cang " -0x5097: "Chu " -0x5098: "San " -0x5099: "Bei " -0x509a: "Xiao " -0x509b: "Yong " -0x509c: "Yao " -0x509d: "Tan " -0x509e: "Suo " -0x509f: "Yang " -0x50a0: "Fa " -0x50a1: "Bing " -0x50a2: "Jia " -0x50a3: "Dai " -0x50a4: "Zai " -0x50a5: "Tang " -0x50a6: "[?] " -0x50a7: "Bin " -0x50a8: "Chu " -0x50a9: "Nuo " -0x50aa: "Can " -0x50ab: "Lei " -0x50ac: "Cui " -0x50ad: "Yong " -0x50ae: "Zao " -0x50af: "Zong " -0x50b0: "Peng " -0x50b1: "Song " -0x50b2: "Ao " -0x50b3: "Chuan " -0x50b4: "Yu " -0x50b5: "Zhai " -0x50b6: "Cou " -0x50b7: "Shang " -0x50b8: "Qiang " -0x50b9: "Jing " -0x50ba: "Chi " -0x50bb: "Sha " -0x50bc: "Han " -0x50bd: "Zhang " -0x50be: "Qing " -0x50bf: "Yan " -0x50c0: "Di " -0x50c1: "Xi " -0x50c2: "Lu " -0x50c3: "Bei " -0x50c4: "Piao " -0x50c5: "Jin " -0x50c6: "Lian " -0x50c7: "Lu " -0x50c8: "Man " -0x50c9: "Qian " -0x50ca: "Xian " -0x50cb: "Tan " -0x50cc: "Ying " -0x50cd: "Dong " -0x50ce: "Zhuan " -0x50cf: "Xiang " -0x50d0: "Shan " -0x50d1: "Qiao " -0x50d2: "Jiong " -0x50d3: "Tui " -0x50d4: "Zun " -0x50d5: "Pu " -0x50d6: "Xi " -0x50d7: "Lao " -0x50d8: "Chang " -0x50d9: "Guang " -0x50da: "Liao " -0x50db: "Qi " -0x50dc: "Deng " -0x50dd: "Chan " -0x50de: "Wei " -0x50df: "Ji " -0x50e0: "Fan " -0x50e1: "Hui " -0x50e2: "Chuan " -0x50e3: "Jian " -0x50e4: "Dan " -0x50e5: "Jiao " -0x50e6: "Jiu " -0x50e7: "Seng " -0x50e8: "Fen " -0x50e9: "Xian " -0x50ea: "Jue " -0x50eb: "E " -0x50ec: "Jiao " -0x50ed: "Jian " -0x50ee: "Tong " -0x50ef: "Lin " -0x50f0: "Bo " -0x50f1: "Gu " -0x50f2: "[?] " -0x50f3: "Su " -0x50f4: "Xian " -0x50f5: "Jiang " -0x50f6: "Min " -0x50f7: "Ye " -0x50f8: "Jin " -0x50f9: "Jia " -0x50fa: "Qiao " -0x50fb: "Pi " -0x50fc: "Feng " -0x50fd: "Zhou " -0x50fe: "Ai " -0x50ff: "Sai " -/* x051 */ -0x5100: "Yi " -0x5101: "Jun " -0x5102: "Nong " -0x5103: "Chan " -0x5104: "Yi " -0x5105: "Dang " -0x5106: "Jing " -0x5107: "Xuan " -0x5108: "Kuai " -0x5109: "Jian " -0x510a: "Chu " -0x510b: "Dan " -0x510c: "Jiao " -0x510d: "Sha " -0x510e: "Zai " -0x510f: "[?] " -0x5110: "Bin " -0x5111: "An " -0x5112: "Ru " -0x5113: "Tai " -0x5114: "Chou " -0x5115: "Chai " -0x5116: "Lan " -0x5117: "Ni " -0x5118: "Jin " -0x5119: "Qian " -0x511a: "Meng " -0x511b: "Wu " -0x511c: "Ning " -0x511d: "Qiong " -0x511e: "Ni " -0x511f: "Chang " -0x5120: "Lie " -0x5121: "Lei " -0x5122: "Lu " -0x5123: "Kuang " -0x5124: "Bao " -0x5125: "Du " -0x5126: "Biao " -0x5127: "Zan " -0x5128: "Zhi " -0x5129: "Si " -0x512a: "You " -0x512b: "Hao " -0x512c: "Chen " -0x512d: "Chen " -0x512e: "Li " -0x512f: "Teng " -0x5130: "Wei " -0x5131: "Long " -0x5132: "Chu " -0x5133: "Chan " -0x5134: "Rang " -0x5135: "Shu " -0x5136: "Hui " -0x5137: "Li " -0x5138: "Luo " -0x5139: "Zan " -0x513a: "Nuo " -0x513b: "Tang " -0x513c: "Yan " -0x513d: "Lei " -0x513e: "Nang " -0x513f: "Er " -0x5140: "Wu " -0x5141: "Yun " -0x5142: "Zan " -0x5143: "Yuan " -0x5144: "Xiong " -0x5145: "Chong " -0x5146: "Zhao " -0x5147: "Xiong " -0x5148: "Xian " -0x5149: "Guang " -0x514a: "Dui " -0x514b: "Ke " -0x514c: "Dui " -0x514d: "Mian " -0x514e: "Tu " -0x514f: "Chang " -0x5150: "Er " -0x5151: "Dui " -0x5152: "Er " -0x5153: "Xin " -0x5154: "Tu " -0x5155: "Si " -0x5156: "Yan " -0x5157: "Yan " -0x5158: "Shi " -0x5159: "Shi " -0x515a: "Dang " -0x515b: "Qian " -0x515c: "Dou " -0x515d: "Fen " -0x515e: "Mao " -0x515f: "Shen " -0x5160: "Dou " -0x5161: "Bai " -0x5162: "Jing " -0x5163: "Li " -0x5164: "Huang " -0x5165: "Ru " -0x5166: "Wang " -0x5167: "Nei " -0x5168: "Quan " -0x5169: "Liang " -0x516a: "Yu " -0x516b: "Ba " -0x516c: "Gong " -0x516d: "Liu " -0x516e: "Xi " -0x516f: "[?] " -0x5170: "Lan " -0x5171: "Gong " -0x5172: "Tian " -0x5173: "Guan " -0x5174: "Xing " -0x5175: "Bing " -0x5176: "Qi " -0x5177: "Ju " -0x5178: "Dian " -0x5179: "Zi " -0x517a: "Ppwun " -0x517b: "Yang " -0x517c: "Jian " -0x517d: "Shou " -0x517e: "Ji " -0x517f: "Yi " -0x5180: "Ji " -0x5181: "Chan " -0x5182: "Jiong " -0x5183: "Mao " -0x5184: "Ran " -0x5185: "Nei " -0x5186: "Yuan " -0x5187: "Mao " -0x5188: "Gang " -0x5189: "Ran " -0x518a: "Ce " -0x518b: "Jiong " -0x518c: "Ce " -0x518d: "Zai " -0x518e: "Gua " -0x518f: "Jiong " -0x5190: "Mao " -0x5191: "Zhou " -0x5192: "Mou " -0x5193: "Gou " -0x5194: "Xu " -0x5195: "Mian " -0x5196: "Mi " -0x5197: "Rong " -0x5198: "Yin " -0x5199: "Xie " -0x519a: "Kan " -0x519b: "Jun " -0x519c: "Nong " -0x519d: "Yi " -0x519e: "Mi " -0x519f: "Shi " -0x51a0: "Guan " -0x51a1: "Meng " -0x51a2: "Zhong " -0x51a3: "Ju " -0x51a4: "Yuan " -0x51a5: "Ming " -0x51a6: "Kou " -0x51a7: "Lam " -0x51a8: "Fu " -0x51a9: "Xie " -0x51aa: "Mi " -0x51ab: "Bing " -0x51ac: "Dong " -0x51ad: "Tai " -0x51ae: "Gang " -0x51af: "Feng " -0x51b0: "Bing " -0x51b1: "Hu " -0x51b2: "Chong " -0x51b3: "Jue " -0x51b4: "Hu " -0x51b5: "Kuang " -0x51b6: "Ye " -0x51b7: "Leng " -0x51b8: "Pan " -0x51b9: "Fu " -0x51ba: "Min " -0x51bb: "Dong " -0x51bc: "Xian " -0x51bd: "Lie " -0x51be: "Xia " -0x51bf: "Jian " -0x51c0: "Jing " -0x51c1: "Shu " -0x51c2: "Mei " -0x51c3: "Tu " -0x51c4: "Qi " -0x51c5: "Gu " -0x51c6: "Zhun " -0x51c7: "Song " -0x51c8: "Jing " -0x51c9: "Liang " -0x51ca: "Qing " -0x51cb: "Diao " -0x51cc: "Ling " -0x51cd: "Dong " -0x51ce: "Gan " -0x51cf: "Jian " -0x51d0: "Yin " -0x51d1: "Cou " -0x51d2: "Yi " -0x51d3: "Li " -0x51d4: "Cang " -0x51d5: "Ming " -0x51d6: "Zhuen " -0x51d7: "Cui " -0x51d8: "Si " -0x51d9: "Duo " -0x51da: "Jin " -0x51db: "Lin " -0x51dc: "Lin " -0x51dd: "Ning " -0x51de: "Xi " -0x51df: "Du " -0x51e0: "Ji " -0x51e1: "Fan " -0x51e2: "Fan " -0x51e3: "Fan " -0x51e4: "Feng " -0x51e5: "Ju " -0x51e6: "Chu " -0x51e7: "Tako " -0x51e8: "Feng " -0x51e9: "Mok " -0x51ea: "Ci " -0x51eb: "Fu " -0x51ec: "Feng " -0x51ed: "Ping " -0x51ee: "Feng " -0x51ef: "Kai " -0x51f0: "Huang " -0x51f1: "Kai " -0x51f2: "Gan " -0x51f3: "Deng " -0x51f4: "Ping " -0x51f5: "Qu " -0x51f6: "Xiong " -0x51f7: "Kuai " -0x51f8: "Tu " -0x51f9: "Ao " -0x51fa: "Chu " -0x51fb: "Ji " -0x51fc: "Dang " -0x51fd: "Han " -0x51fe: "Han " -0x51ff: "Zao " -/* x052 */ -0x5200: "Dao " -0x5201: "Diao " -0x5202: "Dao " -0x5203: "Ren " -0x5204: "Ren " -0x5205: "Chuang " -0x5206: "Fen " -0x5207: "Qie " -0x5208: "Yi " -0x5209: "Ji " -0x520a: "Kan " -0x520b: "Qian " -0x520c: "Cun " -0x520d: "Chu " -0x520e: "Wen " -0x520f: "Ji " -0x5210: "Dan " -0x5211: "Xing " -0x5212: "Hua " -0x5213: "Wan " -0x5214: "Jue " -0x5215: "Li " -0x5216: "Yue " -0x5217: "Lie " -0x5218: "Liu " -0x5219: "Ze " -0x521a: "Gang " -0x521b: "Chuang " -0x521c: "Fu " -0x521d: "Chu " -0x521e: "Qu " -0x521f: "Ju " -0x5220: "Shan " -0x5221: "Min " -0x5222: "Ling " -0x5223: "Zhong " -0x5224: "Pan " -0x5225: "Bie " -0x5226: "Jie " -0x5227: "Jie " -0x5228: "Bao " -0x5229: "Li " -0x522a: "Shan " -0x522b: "Bie " -0x522c: "Chan " -0x522d: "Jing " -0x522e: "Gua " -0x522f: "Gen " -0x5230: "Dao " -0x5231: "Chuang " -0x5232: "Kui " -0x5233: "Ku " -0x5234: "Duo " -0x5235: "Er " -0x5236: "Zhi " -0x5237: "Shua " -0x5238: "Quan " -0x5239: "Cha " -0x523a: "Ci " -0x523b: "Ke " -0x523c: "Jie " -0x523d: "Gui " -0x523e: "Ci " -0x523f: "Gui " -0x5240: "Kai " -0x5241: "Duo " -0x5242: "Ji " -0x5243: "Ti " -0x5244: "Jing " -0x5245: "Lou " -0x5246: "Gen " -0x5247: "Ze " -0x5248: "Yuan " -0x5249: "Cuo " -0x524a: "Xue " -0x524b: "Ke " -0x524c: "La " -0x524d: "Qian " -0x524e: "Cha " -0x524f: "Chuang " -0x5250: "Gua " -0x5251: "Jian " -0x5252: "Cuo " -0x5253: "Li " -0x5254: "Ti " -0x5255: "Fei " -0x5256: "Pou " -0x5257: "Chan " -0x5258: "Qi " -0x5259: "Chuang " -0x525a: "Zi " -0x525b: "Gang " -0x525c: "Wan " -0x525d: "Bo " -0x525e: "Ji " -0x525f: "Duo " -0x5260: "Qing " -0x5261: "Yan " -0x5262: "Zhuo " -0x5263: "Jian " -0x5264: "Ji " -0x5265: "Bo " -0x5266: "Yan " -0x5267: "Ju " -0x5268: "Huo " -0x5269: "Sheng " -0x526a: "Jian " -0x526b: "Duo " -0x526c: "Duan " -0x526d: "Wu " -0x526e: "Gua " -0x526f: "Fu " -0x5270: "Sheng " -0x5271: "Jian " -0x5272: "Ge " -0x5273: "Zha " -0x5274: "Kai " -0x5275: "Chuang " -0x5276: "Juan " -0x5277: "Chan " -0x5278: "Tuan " -0x5279: "Lu " -0x527a: "Li " -0x527b: "Fou " -0x527c: "Shan " -0x527d: "Piao " -0x527e: "Kou " -0x527f: "Jiao " -0x5280: "Gua " -0x5281: "Qiao " -0x5282: "Jue " -0x5283: "Hua " -0x5284: "Zha " -0x5285: "Zhuo " -0x5286: "Lian " -0x5287: "Ju " -0x5288: "Pi " -0x5289: "Liu " -0x528a: "Gui " -0x528b: "Jiao " -0x528c: "Gui " -0x528d: "Jian " -0x528e: "Jian " -0x528f: "Tang " -0x5290: "Huo " -0x5291: "Ji " -0x5292: "Jian " -0x5293: "Yi " -0x5294: "Jian " -0x5295: "Zhi " -0x5296: "Chan " -0x5297: "Cuan " -0x5298: "Mo " -0x5299: "Li " -0x529a: "Zhu " -0x529b: "Li " -0x529c: "Ya " -0x529d: "Quan " -0x529e: "Ban " -0x529f: "Gong " -0x52a0: "Jia " -0x52a1: "Wu " -0x52a2: "Mai " -0x52a3: "Lie " -0x52a4: "Jin " -0x52a5: "Keng " -0x52a6: "Xie " -0x52a7: "Zhi " -0x52a8: "Dong " -0x52a9: "Zhu " -0x52aa: "Nu " -0x52ab: "Jie " -0x52ac: "Qu " -0x52ad: "Shao " -0x52ae: "Yi " -0x52af: "Zhu " -0x52b0: "Miao " -0x52b1: "Li " -0x52b2: "Jing " -0x52b3: "Lao " -0x52b4: "Lao " -0x52b5: "Juan " -0x52b6: "Kou " -0x52b7: "Yang " -0x52b8: "Wa " -0x52b9: "Xiao " -0x52ba: "Mou " -0x52bb: "Kuang " -0x52bc: "Jie " -0x52bd: "Lie " -0x52be: "He " -0x52bf: "Shi " -0x52c0: "Ke " -0x52c1: "Jing " -0x52c2: "Hao " -0x52c3: "Bo " -0x52c4: "Min " -0x52c5: "Chi " -0x52c6: "Lang " -0x52c7: "Yong " -0x52c8: "Yong " -0x52c9: "Mian " -0x52ca: "Ke " -0x52cb: "Xun " -0x52cc: "Juan " -0x52cd: "Qing " -0x52ce: "Lu " -0x52cf: "Pou " -0x52d0: "Meng " -0x52d1: "Lai " -0x52d2: "Le " -0x52d3: "Kai " -0x52d4: "Mian " -0x52d5: "Dong " -0x52d6: "Xu " -0x52d7: "Xu " -0x52d8: "Kan " -0x52d9: "Wu " -0x52da: "Yi " -0x52db: "Xun " -0x52dc: "Weng " -0x52dd: "Sheng " -0x52de: "Lao " -0x52df: "Mu " -0x52e0: "Lu " -0x52e1: "Piao " -0x52e2: "Shi " -0x52e3: "Ji " -0x52e4: "Qin " -0x52e5: "Qiang " -0x52e6: "Jiao " -0x52e7: "Quan " -0x52e8: "Yang " -0x52e9: "Yi " -0x52ea: "Jue " -0x52eb: "Fan " -0x52ec: "Juan " -0x52ed: "Tong " -0x52ee: "Ju " -0x52ef: "Dan " -0x52f0: "Xie " -0x52f1: "Mai " -0x52f2: "Xun " -0x52f3: "Xun " -0x52f4: "Lu " -0x52f5: "Li " -0x52f6: "Che " -0x52f7: "Rang " -0x52f8: "Quan " -0x52f9: "Bao " -0x52fa: "Shao " -0x52fb: "Yun " -0x52fc: "Jiu " -0x52fd: "Bao " -0x52fe: "Gou " -0x52ff: "Wu " -/* x053 */ -0x5300: "Yun " -0x5301: "Mwun " -0x5302: "Nay " -0x5303: "Gai " -0x5304: "Gai " -0x5305: "Bao " -0x5306: "Cong " -0x5307: "[?] " -0x5308: "Xiong " -0x5309: "Peng " -0x530a: "Ju " -0x530b: "Tao " -0x530c: "Ge " -0x530d: "Pu " -0x530e: "An " -0x530f: "Pao " -0x5310: "Fu " -0x5311: "Gong " -0x5312: "Da " -0x5313: "Jiu " -0x5314: "Qiong " -0x5315: "Bi " -0x5316: "Hua " -0x5317: "Bei " -0x5318: "Nao " -0x5319: "Chi " -0x531a: "Fang " -0x531b: "Jiu " -0x531c: "Yi " -0x531d: "Za " -0x531e: "Jiang " -0x531f: "Kang " -0x5320: "Jiang " -0x5321: "Kuang " -0x5322: "Hu " -0x5323: "Xia " -0x5324: "Qu " -0x5325: "Bian " -0x5326: "Gui " -0x5327: "Qie " -0x5328: "Zang " -0x5329: "Kuang " -0x532a: "Fei " -0x532b: "Hu " -0x532c: "Tou " -0x532d: "Gui " -0x532e: "Gui " -0x532f: "Hui " -0x5330: "Dan " -0x5331: "Gui " -0x5332: "Lian " -0x5333: "Lian " -0x5334: "Suan " -0x5335: "Du " -0x5336: "Jiu " -0x5337: "Qu " -0x5338: "Xi " -0x5339: "Pi " -0x533a: "Qu " -0x533b: "Yi " -0x533c: "Qia " -0x533d: "Yan " -0x533e: "Bian " -0x533f: "Ni " -0x5340: "Qu " -0x5341: "Shi " -0x5342: "Xin " -0x5343: "Qian " -0x5344: "Nian " -0x5345: "Sa " -0x5346: "Zu " -0x5347: "Sheng " -0x5348: "Wu " -0x5349: "Hui " -0x534a: "Ban " -0x534b: "Shi " -0x534c: "Xi " -0x534d: "Wan " -0x534e: "Hua " -0x534f: "Xie " -0x5350: "Wan " -0x5351: "Bei " -0x5352: "Zu " -0x5353: "Zhuo " -0x5354: "Xie " -0x5355: "Dan " -0x5356: "Mai " -0x5357: "Nan " -0x5358: "Dan " -0x5359: "Ji " -0x535a: "Bo " -0x535b: "Shuai " -0x535c: "Bu " -0x535d: "Kuang " -0x535e: "Bian " -0x535f: "Bu " -0x5360: "Zhan " -0x5361: "Qia " -0x5362: "Lu " -0x5363: "You " -0x5364: "Lu " -0x5365: "Xi " -0x5366: "Gua " -0x5367: "Wo " -0x5368: "Xie " -0x5369: "Jie " -0x536a: "Jie " -0x536b: "Wei " -0x536c: "Ang " -0x536d: "Qiong " -0x536e: "Zhi " -0x536f: "Mao " -0x5370: "Yin " -0x5371: "Wei " -0x5372: "Shao " -0x5373: "Ji " -0x5374: "Que " -0x5375: "Luan " -0x5376: "Shi " -0x5377: "Juan " -0x5378: "Xie " -0x5379: "Xu " -0x537a: "Jin " -0x537b: "Que " -0x537c: "Wu " -0x537d: "Ji " -0x537e: "E " -0x537f: "Qing " -0x5380: "Xi " -0x5381: "[?] " -0x5382: "Han " -0x5383: "Zhan " -0x5384: "E " -0x5385: "Ting " -0x5386: "Li " -0x5387: "Zhe " -0x5388: "Han " -0x5389: "Li " -0x538a: "Ya " -0x538b: "Ya " -0x538c: "Yan " -0x538d: "She " -0x538e: "Zhi " -0x538f: "Zha " -0x5390: "Pang " -0x5391: "[?] " -0x5392: "He " -0x5393: "Ya " -0x5394: "Zhi " -0x5395: "Ce " -0x5396: "Pang " -0x5397: "Ti " -0x5398: "Li " -0x5399: "She " -0x539a: "Hou " -0x539b: "Ting " -0x539c: "Zui " -0x539d: "Cuo " -0x539e: "Fei " -0x539f: "Yuan " -0x53a0: "Ce " -0x53a1: "Yuan " -0x53a2: "Xiang " -0x53a3: "Yan " -0x53a4: "Li " -0x53a5: "Jue " -0x53a6: "Sha " -0x53a7: "Dian " -0x53a8: "Chu " -0x53a9: "Jiu " -0x53aa: "Qin " -0x53ab: "Ao " -0x53ac: "Gui " -0x53ad: "Yan " -0x53ae: "Si " -0x53af: "Li " -0x53b0: "Chang " -0x53b1: "Lan " -0x53b2: "Li " -0x53b3: "Yan " -0x53b4: "Yan " -0x53b5: "Yuan " -0x53b6: "Si " -0x53b7: "Gong " -0x53b8: "Lin " -0x53b9: "Qiu " -0x53ba: "Qu " -0x53bb: "Qu " -0x53bc: "Uk " -0x53bd: "Lei " -0x53be: "Du " -0x53bf: "Xian " -0x53c0: "Zhuan " -0x53c1: "San " -0x53c2: "Can " -0x53c3: "Can " -0x53c4: "Can " -0x53c5: "Can " -0x53c6: "Ai " -0x53c7: "Dai " -0x53c8: "You " -0x53c9: "Cha " -0x53ca: "Ji " -0x53cb: "You " -0x53cc: "Shuang " -0x53cd: "Fan " -0x53ce: "Shou " -0x53cf: "Guai " -0x53d0: "Ba " -0x53d1: "Fa " -0x53d2: "Ruo " -0x53d3: "Shi " -0x53d4: "Shu " -0x53d5: "Zhuo " -0x53d6: "Qu " -0x53d7: "Shou " -0x53d8: "Bian " -0x53d9: "Xu " -0x53da: "Jia " -0x53db: "Pan " -0x53dc: "Sou " -0x53dd: "Gao " -0x53de: "Wei " -0x53df: "Sou " -0x53e0: "Die " -0x53e1: "Rui " -0x53e2: "Cong " -0x53e3: "Kou " -0x53e4: "Gu " -0x53e5: "Ju " -0x53e6: "Ling " -0x53e7: "Gua " -0x53e8: "Tao " -0x53e9: "Kou " -0x53ea: "Zhi " -0x53eb: "Jiao " -0x53ec: "Zhao " -0x53ed: "Ba " -0x53ee: "Ding " -0x53ef: "Ke " -0x53f0: "Tai " -0x53f1: "Chi " -0x53f2: "Shi " -0x53f3: "You " -0x53f4: "Qiu " -0x53f5: "Po " -0x53f6: "Xie " -0x53f7: "Hao " -0x53f8: "Si " -0x53f9: "Tan " -0x53fa: "Chi " -0x53fb: "Le " -0x53fc: "Diao " -0x53fd: "Ji " -0x53fe: "[?] " -0x53ff: "Hong " -/* x054 */ -0x5400: "Mie " -0x5401: "Xu " -0x5402: "Mang " -0x5403: "Chi " -0x5404: "Ge " -0x5405: "Xuan " -0x5406: "Yao " -0x5407: "Zi " -0x5408: "He " -0x5409: "Ji " -0x540a: "Diao " -0x540b: "Cun " -0x540c: "Tong " -0x540d: "Ming " -0x540e: "Hou " -0x540f: "Li " -0x5410: "Tu " -0x5411: "Xiang " -0x5412: "Zha " -0x5413: "Xia " -0x5414: "Ye " -0x5415: "Lu " -0x5416: "A " -0x5417: "Ma " -0x5418: "Ou " -0x5419: "Xue " -0x541a: "Yi " -0x541b: "Jun " -0x541c: "Chou " -0x541d: "Lin " -0x541e: "Tun " -0x541f: "Yin " -0x5420: "Fei " -0x5421: "Bi " -0x5422: "Qin " -0x5423: "Qin " -0x5424: "Jie " -0x5425: "Bu " -0x5426: "Fou " -0x5427: "Ba " -0x5428: "Dun " -0x5429: "Fen " -0x542a: "E " -0x542b: "Han " -0x542c: "Ting " -0x542d: "Hang " -0x542e: "Shun " -0x542f: "Qi " -0x5430: "Hong " -0x5431: "Zhi " -0x5432: "Shen " -0x5433: "Wu " -0x5434: "Wu " -0x5435: "Chao " -0x5436: "Ne " -0x5437: "Xue " -0x5438: "Xi " -0x5439: "Chui " -0x543a: "Dou " -0x543b: "Wen " -0x543c: "Hou " -0x543d: "Ou " -0x543e: "Wu " -0x543f: "Gao " -0x5440: "Ya " -0x5441: "Jun " -0x5442: "Lu " -0x5443: "E " -0x5444: "Ge " -0x5445: "Mei " -0x5446: "Ai " -0x5447: "Qi " -0x5448: "Cheng " -0x5449: "Wu " -0x544a: "Gao " -0x544b: "Fu " -0x544c: "Jiao " -0x544d: "Hong " -0x544e: "Chi " -0x544f: "Sheng " -0x5450: "Ne " -0x5451: "Tun " -0x5452: "Fu " -0x5453: "Yi " -0x5454: "Dai " -0x5455: "Ou " -0x5456: "Li " -0x5457: "Bai " -0x5458: "Yuan " -0x5459: "Kuai " -0x545a: "[?] " -0x545b: "Qiang " -0x545c: "Wu " -0x545d: "E " -0x545e: "Shi " -0x545f: "Quan " -0x5460: "Pen " -0x5461: "Wen " -0x5462: "Ni " -0x5463: "M " -0x5464: "Ling " -0x5465: "Ran " -0x5466: "You " -0x5467: "Di " -0x5468: "Zhou " -0x5469: "Shi " -0x546a: "Zhou " -0x546b: "Tie " -0x546c: "Xi " -0x546d: "Yi " -0x546e: "Qi " -0x546f: "Ping " -0x5470: "Zi " -0x5471: "Gu " -0x5472: "Zi " -0x5473: "Wei " -0x5474: "Xu " -0x5475: "He " -0x5476: "Nao " -0x5477: "Xia " -0x5478: "Pei " -0x5479: "Yi " -0x547a: "Xiao " -0x547b: "Shen " -0x547c: "Hu " -0x547d: "Ming " -0x547e: "Da " -0x547f: "Qu " -0x5480: "Ju " -0x5481: "Gem " -0x5482: "Za " -0x5483: "Tuo " -0x5484: "Duo " -0x5485: "Pou " -0x5486: "Pao " -0x5487: "Bi " -0x5488: "Fu " -0x5489: "Yang " -0x548a: "He " -0x548b: "Zha " -0x548c: "He " -0x548d: "Hai " -0x548e: "Jiu " -0x548f: "Yong " -0x5490: "Fu " -0x5491: "Que " -0x5492: "Zhou " -0x5493: "Wa " -0x5494: "Ka " -0x5495: "Gu " -0x5496: "Ka " -0x5497: "Zuo " -0x5498: "Bu " -0x5499: "Long " -0x549a: "Dong " -0x549b: "Ning " -0x549c: "Tha " -0x549d: "Si " -0x549e: "Xian " -0x549f: "Huo " -0x54a0: "Qi " -0x54a1: "Er " -0x54a2: "E " -0x54a3: "Guang " -0x54a4: "Zha " -0x54a5: "Xi " -0x54a6: "Yi " -0x54a7: "Lie " -0x54a8: "Zi " -0x54a9: "Mie " -0x54aa: "Mi " -0x54ab: "Zhi " -0x54ac: "Yao " -0x54ad: "Ji " -0x54ae: "Zhou " -0x54af: "Ge " -0x54b0: "Shuai " -0x54b1: "Zan " -0x54b2: "Xiao " -0x54b3: "Ke " -0x54b4: "Hui " -0x54b5: "Kua " -0x54b6: "Huai " -0x54b7: "Tao " -0x54b8: "Xian " -0x54b9: "E " -0x54ba: "Xuan " -0x54bb: "Xiu " -0x54bc: "Wai " -0x54bd: "Yan " -0x54be: "Lao " -0x54bf: "Yi " -0x54c0: "Ai " -0x54c1: "Pin " -0x54c2: "Shen " -0x54c3: "Tong " -0x54c4: "Hong " -0x54c5: "Xiong " -0x54c6: "Chi " -0x54c7: "Wa " -0x54c8: "Ha " -0x54c9: "Zai " -0x54ca: "Yu " -0x54cb: "Di " -0x54cc: "Pai " -0x54cd: "Xiang " -0x54ce: "Ai " -0x54cf: "Hen " -0x54d0: "Kuang " -0x54d1: "Ya " -0x54d2: "Da " -0x54d3: "Xiao " -0x54d4: "Bi " -0x54d5: "Yue " -0x54d6: "[?] " -0x54d7: "Hua " -0x54d8: "Sasou " -0x54d9: "Kuai " -0x54da: "Duo " -0x54db: "[?] " -0x54dc: "Ji " -0x54dd: "Nong " -0x54de: "Mou " -0x54df: "Yo " -0x54e0: "Hao " -0x54e1: "Yuan " -0x54e2: "Long " -0x54e3: "Pou " -0x54e4: "Mang " -0x54e5: "Ge " -0x54e6: "E " -0x54e7: "Chi " -0x54e8: "Shao " -0x54e9: "Li " -0x54ea: "Na " -0x54eb: "Zu " -0x54ec: "He " -0x54ed: "Ku " -0x54ee: "Xiao " -0x54ef: "Xian " -0x54f0: "Lao " -0x54f1: "Bo " -0x54f2: "Zhe " -0x54f3: "Zha " -0x54f4: "Liang " -0x54f5: "Ba " -0x54f6: "Mie " -0x54f7: "Le " -0x54f8: "Sui " -0x54f9: "Fou " -0x54fa: "Bu " -0x54fb: "Han " -0x54fc: "Heng " -0x54fd: "Geng " -0x54fe: "Shuo " -0x54ff: "Ge " -/* x055 */ -0x5500: "You " -0x5501: "Yan " -0x5502: "Gu " -0x5503: "Gu " -0x5504: "Bai " -0x5505: "Han " -0x5506: "Suo " -0x5507: "Chun " -0x5508: "Yi " -0x5509: "Ai " -0x550a: "Jia " -0x550b: "Tu " -0x550c: "Xian " -0x550d: "Huan " -0x550e: "Li " -0x550f: "Xi " -0x5510: "Tang " -0x5511: "Zuo " -0x5512: "Qiu " -0x5513: "Che " -0x5514: "Wu " -0x5515: "Zao " -0x5516: "Ya " -0x5517: "Dou " -0x5518: "Qi " -0x5519: "Di " -0x551a: "Qin " -0x551b: "Ma " -0x551c: "Mal " -0x551d: "Hong " -0x551e: "Dou " -0x551f: "Kes " -0x5520: "Lao " -0x5521: "Liang " -0x5522: "Suo " -0x5523: "Zao " -0x5524: "Huan " -0x5525: "Lang " -0x5526: "Sha " -0x5527: "Ji " -0x5528: "Zuo " -0x5529: "Wo " -0x552a: "Feng " -0x552b: "Yin " -0x552c: "Hu " -0x552d: "Qi " -0x552e: "Shou " -0x552f: "Wei " -0x5530: "Shua " -0x5531: "Chang " -0x5532: "Er " -0x5533: "Li " -0x5534: "Qiang " -0x5535: "An " -0x5536: "Jie " -0x5537: "Yo " -0x5538: "Nian " -0x5539: "Yu " -0x553a: "Tian " -0x553b: "Lai " -0x553c: "Sha " -0x553d: "Xi " -0x553e: "Tuo " -0x553f: "Hu " -0x5540: "Ai " -0x5541: "Zhou " -0x5542: "Nou " -0x5543: "Ken " -0x5544: "Zhuo " -0x5545: "Zhuo " -0x5546: "Shang " -0x5547: "Di " -0x5548: "Heng " -0x5549: "Lan " -0x554a: "A " -0x554b: "Xiao " -0x554c: "Xiang " -0x554d: "Tun " -0x554e: "Wu " -0x554f: "Wen " -0x5550: "Cui " -0x5551: "Sha " -0x5552: "Hu " -0x5553: "Qi " -0x5554: "Qi " -0x5555: "Tao " -0x5556: "Dan " -0x5557: "Dan " -0x5558: "Ye " -0x5559: "Zi " -0x555a: "Bi " -0x555b: "Cui " -0x555c: "Chuo " -0x555d: "He " -0x555e: "Ya " -0x555f: "Qi " -0x5560: "Zhe " -0x5561: "Pei " -0x5562: "Liang " -0x5563: "Xian " -0x5564: "Pi " -0x5565: "Sha " -0x5566: "La " -0x5567: "Ze " -0x5568: "Qing " -0x5569: "Gua " -0x556a: "Pa " -0x556b: "Zhe " -0x556c: "Se " -0x556d: "Zhuan " -0x556e: "Nie " -0x556f: "Guo " -0x5570: "Luo " -0x5571: "Yan " -0x5572: "Di " -0x5573: "Quan " -0x5574: "Tan " -0x5575: "Bo " -0x5576: "Ding " -0x5577: "Lang " -0x5578: "Xiao " -0x5579: "[?] " -0x557a: "Tang " -0x557b: "Chi " -0x557c: "Ti " -0x557d: "An " -0x557e: "Jiu " -0x557f: "Dan " -0x5580: "Ke " -0x5581: "Yong " -0x5582: "Wei " -0x5583: "Nan " -0x5584: "Shan " -0x5585: "Yu " -0x5586: "Zhe " -0x5587: "La " -0x5588: "Jie " -0x5589: "Hou " -0x558a: "Han " -0x558b: "Die " -0x558c: "Zhou " -0x558d: "Chai " -0x558e: "Wai " -0x558f: "Re " -0x5590: "Yu " -0x5591: "Yin " -0x5592: "Zan " -0x5593: "Yao " -0x5594: "Wo " -0x5595: "Mian " -0x5596: "Hu " -0x5597: "Yun " -0x5598: "Chuan " -0x5599: "Hui " -0x559a: "Huan " -0x559b: "Huan " -0x559c: "Xi " -0x559d: "He " -0x559e: "Ji " -0x559f: "Kui " -0x55a0: "Zhong " -0x55a1: "Wei " -0x55a2: "Sha " -0x55a3: "Xu " -0x55a4: "Huang " -0x55a5: "Du " -0x55a6: "Nie " -0x55a7: "Xuan " -0x55a8: "Liang " -0x55a9: "Yu " -0x55aa: "Sang " -0x55ab: "Chi " -0x55ac: "Qiao " -0x55ad: "Yan " -0x55ae: "Dan " -0x55af: "Pen " -0x55b0: "Can " -0x55b1: "Li " -0x55b2: "Yo " -0x55b3: "Zha " -0x55b4: "Wei " -0x55b5: "Miao " -0x55b6: "Ying " -0x55b7: "Pen " -0x55b8: "Phos " -0x55b9: "Kui " -0x55ba: "Xi " -0x55bb: "Yu " -0x55bc: "Jie " -0x55bd: "Lou " -0x55be: "Ku " -0x55bf: "Sao " -0x55c0: "Huo " -0x55c1: "Ti " -0x55c2: "Yao " -0x55c3: "He " -0x55c4: "A " -0x55c5: "Xiu " -0x55c6: "Qiang " -0x55c7: "Se " -0x55c8: "Yong " -0x55c9: "Su " -0x55ca: "Hong " -0x55cb: "Xie " -0x55cc: "Yi " -0x55cd: "Suo " -0x55ce: "Ma " -0x55cf: "Cha " -0x55d0: "Hai " -0x55d1: "Ke " -0x55d2: "Ta " -0x55d3: "Sang " -0x55d4: "Tian " -0x55d5: "Ru " -0x55d6: "Sou " -0x55d7: "Wa " -0x55d8: "Ji " -0x55d9: "Pang " -0x55da: "Wu " -0x55db: "Xian " -0x55dc: "Shi " -0x55dd: "Ge " -0x55de: "Zi " -0x55df: "Jie " -0x55e0: "Luo " -0x55e1: "Weng " -0x55e2: "Wa " -0x55e3: "Si " -0x55e4: "Chi " -0x55e5: "Hao " -0x55e6: "Suo " -0x55e7: "Jia " -0x55e8: "Hai " -0x55e9: "Suo " -0x55ea: "Qin " -0x55eb: "Nie " -0x55ec: "He " -0x55ed: "Cis " -0x55ee: "Sai " -0x55ef: "Ng " -0x55f0: "Ge " -0x55f1: "Na " -0x55f2: "Dia " -0x55f3: "Ai " -0x55f4: "[?] " -0x55f5: "Tong " -0x55f6: "Bi " -0x55f7: "Ao " -0x55f8: "Ao " -0x55f9: "Lian " -0x55fa: "Cui " -0x55fb: "Zhe " -0x55fc: "Mo " -0x55fd: "Sou " -0x55fe: "Sou " -0x55ff: "Tan " -/* x056 */ -0x5600: "Di " -0x5601: "Qi " -0x5602: "Jiao " -0x5603: "Chong " -0x5604: "Jiao " -0x5605: "Kai " -0x5606: "Tan " -0x5607: "San " -0x5608: "Cao " -0x5609: "Jia " -0x560a: "Ai " -0x560b: "Xiao " -0x560c: "Piao " -0x560d: "Lou " -0x560e: "Ga " -0x560f: "Gu " -0x5610: "Xiao " -0x5611: "Hu " -0x5612: "Hui " -0x5613: "Guo " -0x5614: "Ou " -0x5615: "Xian " -0x5616: "Ze " -0x5617: "Chang " -0x5618: "Xu " -0x5619: "Po " -0x561a: "De " -0x561b: "Ma " -0x561c: "Ma " -0x561d: "Hu " -0x561e: "Lei " -0x561f: "Du " -0x5620: "Ga " -0x5621: "Tang " -0x5622: "Ye " -0x5623: "Beng " -0x5624: "Ying " -0x5625: "Saai " -0x5626: "Jiao " -0x5627: "Mi " -0x5628: "Xiao " -0x5629: "Hua " -0x562a: "Mai " -0x562b: "Ran " -0x562c: "Zuo " -0x562d: "Peng " -0x562e: "Lao " -0x562f: "Xiao " -0x5630: "Ji " -0x5631: "Zhu " -0x5632: "Chao " -0x5633: "Kui " -0x5634: "Zui " -0x5635: "Xiao " -0x5636: "Si " -0x5637: "Hao " -0x5638: "Fu " -0x5639: "Liao " -0x563a: "Qiao " -0x563b: "Xi " -0x563c: "Xiu " -0x563d: "Tan " -0x563e: "Tan " -0x563f: "Mo " -0x5640: "Xun " -0x5641: "E " -0x5642: "Zun " -0x5643: "Fan " -0x5644: "Chi " -0x5645: "Hui " -0x5646: "Zan " -0x5647: "Chuang " -0x5648: "Cu " -0x5649: "Dan " -0x564a: "Yu " -0x564b: "Tun " -0x564c: "Cheng " -0x564d: "Jiao " -0x564e: "Ye " -0x564f: "Xi " -0x5650: "Qi " -0x5651: "Hao " -0x5652: "Lian " -0x5653: "Xu " -0x5654: "Deng " -0x5655: "Hui " -0x5656: "Yin " -0x5657: "Pu " -0x5658: "Jue " -0x5659: "Qin " -0x565a: "Xun " -0x565b: "Nie " -0x565c: "Lu " -0x565d: "Si " -0x565e: "Yan " -0x565f: "Ying " -0x5660: "Da " -0x5661: "Dan " -0x5662: "Yu " -0x5663: "Zhou " -0x5664: "Jin " -0x5665: "Nong " -0x5666: "Yue " -0x5667: "Hui " -0x5668: "Qi " -0x5669: "E " -0x566a: "Zao " -0x566b: "Yi " -0x566c: "Shi " -0x566d: "Jiao " -0x566e: "Yuan " -0x566f: "Ai " -0x5670: "Yong " -0x5671: "Jue " -0x5672: "Kuai " -0x5673: "Yu " -0x5674: "Pen " -0x5675: "Dao " -0x5676: "Ge " -0x5677: "Xin " -0x5678: "Dun " -0x5679: "Dang " -0x567a: "Sin " -0x567b: "Sai " -0x567c: "Pi " -0x567d: "Pi " -0x567e: "Yin " -0x567f: "Zui " -0x5680: "Ning " -0x5681: "Di " -0x5682: "Lan " -0x5683: "Ta " -0x5684: "Huo " -0x5685: "Ru " -0x5686: "Hao " -0x5687: "Xia " -0x5688: "Ya " -0x5689: "Duo " -0x568a: "Xi " -0x568b: "Chou " -0x568c: "Ji " -0x568d: "Jin " -0x568e: "Hao " -0x568f: "Ti " -0x5690: "Chang " -0x5691: "[?] " -0x5692: "[?] " -0x5693: "Ca " -0x5694: "Ti " -0x5695: "Lu " -0x5696: "Hui " -0x5697: "Bo " -0x5698: "You " -0x5699: "Nie " -0x569a: "Yin " -0x569b: "Hu " -0x569c: "Mo " -0x569d: "Huang " -0x569e: "Zhe " -0x569f: "Li " -0x56a0: "Liu " -0x56a1: "Haai " -0x56a2: "Nang " -0x56a3: "Xiao " -0x56a4: "Mo " -0x56a5: "Yan " -0x56a6: "Li " -0x56a7: "Lu " -0x56a8: "Long " -0x56a9: "Fu " -0x56aa: "Dan " -0x56ab: "Chen " -0x56ac: "Pin " -0x56ad: "Pi " -0x56ae: "Xiang " -0x56af: "Huo " -0x56b0: "Mo " -0x56b1: "Xi " -0x56b2: "Duo " -0x56b3: "Ku " -0x56b4: "Yan " -0x56b5: "Chan " -0x56b6: "Ying " -0x56b7: "Rang " -0x56b8: "Dian " -0x56b9: "La " -0x56ba: "Ta " -0x56bb: "Xiao " -0x56bc: "Jiao " -0x56bd: "Chuo " -0x56be: "Huan " -0x56bf: "Huo " -0x56c0: "Zhuan " -0x56c1: "Nie " -0x56c2: "Xiao " -0x56c3: "Ca " -0x56c4: "Li " -0x56c5: "Chan " -0x56c6: "Chai " -0x56c7: "Li " -0x56c8: "Yi " -0x56c9: "Luo " -0x56ca: "Nang " -0x56cb: "Zan " -0x56cc: "Su " -0x56cd: "Xi " -0x56ce: "So " -0x56cf: "Jian " -0x56d0: "Za " -0x56d1: "Zhu " -0x56d2: "Lan " -0x56d3: "Nie " -0x56d4: "Nang " -0x56d5: "[?] " -0x56d6: "[?] " -0x56d7: "Wei " -0x56d8: "Hui " -0x56d9: "Yin " -0x56da: "Qiu " -0x56db: "Si " -0x56dc: "Nin " -0x56dd: "Jian " -0x56de: "Hui " -0x56df: "Xin " -0x56e0: "Yin " -0x56e1: "Nan " -0x56e2: "Tuan " -0x56e3: "Tuan " -0x56e4: "Dun " -0x56e5: "Kang " -0x56e6: "Yuan " -0x56e7: "Jiong " -0x56e8: "Pian " -0x56e9: "Yun " -0x56ea: "Cong " -0x56eb: "Hu " -0x56ec: "Hui " -0x56ed: "Yuan " -0x56ee: "You " -0x56ef: "Guo " -0x56f0: "Kun " -0x56f1: "Cong " -0x56f2: "Wei " -0x56f3: "Tu " -0x56f4: "Wei " -0x56f5: "Lun " -0x56f6: "Guo " -0x56f7: "Qun " -0x56f8: "Ri " -0x56f9: "Ling " -0x56fa: "Gu " -0x56fb: "Guo " -0x56fc: "Tai " -0x56fd: "Guo " -0x56fe: "Tu " -0x56ff: "You " -/* x057 */ -0x5700: "Guo " -0x5701: "Yin " -0x5702: "Hun " -0x5703: "Pu " -0x5704: "Yu " -0x5705: "Han " -0x5706: "Yuan " -0x5707: "Lun " -0x5708: "Quan " -0x5709: "Yu " -0x570a: "Qing " -0x570b: "Guo " -0x570c: "Chuan " -0x570d: "Wei " -0x570e: "Yuan " -0x570f: "Quan " -0x5710: "Ku " -0x5711: "Fu " -0x5712: "Yuan " -0x5713: "Yuan " -0x5714: "E " -0x5715: "Tu " -0x5716: "Tu " -0x5717: "Tu " -0x5718: "Tuan " -0x5719: "Lue " -0x571a: "Hui " -0x571b: "Yi " -0x571c: "Yuan " -0x571d: "Luan " -0x571e: "Luan " -0x571f: "Tu " -0x5720: "Ya " -0x5721: "Tu " -0x5722: "Ting " -0x5723: "Sheng " -0x5724: "Pu " -0x5725: "Lu " -0x5726: "Iri " -0x5727: "Ya " -0x5728: "Zai " -0x5729: "Wei " -0x572a: "Ge " -0x572b: "Yu " -0x572c: "Wu " -0x572d: "Gui " -0x572e: "Pi " -0x572f: "Yi " -0x5730: "Di " -0x5731: "Qian " -0x5732: "Qian " -0x5733: "Zhen " -0x5734: "Zhuo " -0x5735: "Dang " -0x5736: "Qia " -0x5737: "Akutsu " -0x5738: "Yama " -0x5739: "Kuang " -0x573a: "Chang " -0x573b: "Qi " -0x573c: "Nie " -0x573d: "Mo " -0x573e: "Ji " -0x573f: "Jia " -0x5740: "Zhi " -0x5741: "Zhi " -0x5742: "Ban " -0x5743: "Xun " -0x5744: "Tou " -0x5745: "Qin " -0x5746: "Fen " -0x5747: "Jun " -0x5748: "Keng " -0x5749: "Tun " -0x574a: "Fang " -0x574b: "Fen " -0x574c: "Ben " -0x574d: "Tan " -0x574e: "Kan " -0x574f: "Pi " -0x5750: "Zuo " -0x5751: "Keng " -0x5752: "Bi " -0x5753: "Xing " -0x5754: "Di " -0x5755: "Jing " -0x5756: "Ji " -0x5757: "Kuai " -0x5758: "Di " -0x5759: "Jing " -0x575a: "Jian " -0x575b: "Tan " -0x575c: "Li " -0x575d: "Ba " -0x575e: "Wu " -0x575f: "Fen " -0x5760: "Zhui " -0x5761: "Po " -0x5762: "Pan " -0x5763: "Tang " -0x5764: "Kun " -0x5765: "Qu " -0x5766: "Tan " -0x5767: "Zhi " -0x5768: "Tuo " -0x5769: "Gan " -0x576a: "Ping " -0x576b: "Dian " -0x576c: "Gua " -0x576d: "Ni " -0x576e: "Tai " -0x576f: "Pi " -0x5770: "Jiong " -0x5771: "Yang " -0x5772: "Fo " -0x5773: "Ao " -0x5774: "Liu " -0x5775: "Qiu " -0x5776: "Mu " -0x5777: "Ke " -0x5778: "Gou " -0x5779: "Xue " -0x577a: "Ba " -0x577b: "Chi " -0x577c: "Che " -0x577d: "Ling " -0x577e: "Zhu " -0x577f: "Fu " -0x5780: "Hu " -0x5781: "Zhi " -0x5782: "Chui " -0x5783: "La " -0x5784: "Long " -0x5785: "Long " -0x5786: "Lu " -0x5787: "Ao " -0x5788: "Tay " -0x5789: "Pao " -0x578a: "[?] " -0x578b: "Xing " -0x578c: "Dong " -0x578d: "Ji " -0x578e: "Ke " -0x578f: "Lu " -0x5790: "Ci " -0x5791: "Chi " -0x5792: "Lei " -0x5793: "Gai " -0x5794: "Yin " -0x5795: "Hou " -0x5796: "Dui " -0x5797: "Zhao " -0x5798: "Fu " -0x5799: "Guang " -0x579a: "Yao " -0x579b: "Duo " -0x579c: "Duo " -0x579d: "Gui " -0x579e: "Cha " -0x579f: "Yang " -0x57a0: "Yin " -0x57a1: "Fa " -0x57a2: "Gou " -0x57a3: "Yuan " -0x57a4: "Die " -0x57a5: "Xie " -0x57a6: "Ken " -0x57a7: "Jiong " -0x57a8: "Shou " -0x57a9: "E " -0x57aa: "Ha " -0x57ab: "Dian " -0x57ac: "Hong " -0x57ad: "Wu " -0x57ae: "Kua " -0x57af: "[?] " -0x57b0: "Tao " -0x57b1: "Dang " -0x57b2: "Kai " -0x57b3: "Gake " -0x57b4: "Nao " -0x57b5: "An " -0x57b6: "Xing " -0x57b7: "Xian " -0x57b8: "Huan " -0x57b9: "Bang " -0x57ba: "Pei " -0x57bb: "Ba " -0x57bc: "Yi " -0x57bd: "Yin " -0x57be: "Han " -0x57bf: "Xu " -0x57c0: "Chui " -0x57c1: "Cen " -0x57c2: "Geng " -0x57c3: "Ai " -0x57c4: "Peng " -0x57c5: "Fang " -0x57c6: "Que " -0x57c7: "Yong " -0x57c8: "Xun " -0x57c9: "Jia " -0x57ca: "Di " -0x57cb: "Mai " -0x57cc: "Lang " -0x57cd: "Xuan " -0x57ce: "Cheng " -0x57cf: "Yan " -0x57d0: "Jin " -0x57d1: "Zhe " -0x57d2: "Lei " -0x57d3: "Lie " -0x57d4: "Bu " -0x57d5: "Cheng " -0x57d6: "Gomi " -0x57d7: "Bu " -0x57d8: "Shi " -0x57d9: "Xun " -0x57da: "Guo " -0x57db: "Jiong " -0x57dc: "Ye " -0x57dd: "Nian " -0x57de: "Di " -0x57df: "Yu " -0x57e0: "Bu " -0x57e1: "Ya " -0x57e2: "Juan " -0x57e3: "Sui " -0x57e4: "Pi " -0x57e5: "Cheng " -0x57e6: "Wan " -0x57e7: "Ju " -0x57e8: "Lun " -0x57e9: "Zheng " -0x57ea: "Kong " -0x57eb: "Chong " -0x57ec: "Dong " -0x57ed: "Dai " -0x57ee: "Tan " -0x57ef: "An " -0x57f0: "Cai " -0x57f1: "Shu " -0x57f2: "Beng " -0x57f3: "Kan " -0x57f4: "Zhi " -0x57f5: "Duo " -0x57f6: "Yi " -0x57f7: "Zhi " -0x57f8: "Yi " -0x57f9: "Pei " -0x57fa: "Ji " -0x57fb: "Zhun " -0x57fc: "Qi " -0x57fd: "Sao " -0x57fe: "Ju " -0x57ff: "Ni " -/* x058 */ -0x5800: "Ku " -0x5801: "Ke " -0x5802: "Tang " -0x5803: "Kun " -0x5804: "Ni " -0x5805: "Jian " -0x5806: "Dui " -0x5807: "Jin " -0x5808: "Gang " -0x5809: "Yu " -0x580a: "E " -0x580b: "Peng " -0x580c: "Gu " -0x580d: "Tu " -0x580e: "Leng " -0x580f: "[?] " -0x5810: "Ya " -0x5811: "Qian " -0x5812: "[?] " -0x5813: "An " -0x5814: "[?] " -0x5815: "Duo " -0x5816: "Nao " -0x5817: "Tu " -0x5818: "Cheng " -0x5819: "Yin " -0x581a: "Hun " -0x581b: "Bi " -0x581c: "Lian " -0x581d: "Guo " -0x581e: "Die " -0x581f: "Zhuan " -0x5820: "Hou " -0x5821: "Bao " -0x5822: "Bao " -0x5823: "Yu " -0x5824: "Di " -0x5825: "Mao " -0x5826: "Jie " -0x5827: "Ruan " -0x5828: "E " -0x5829: "Geng " -0x582a: "Kan " -0x582b: "Zong " -0x582c: "Yu " -0x582d: "Huang " -0x582e: "E " -0x582f: "Yao " -0x5830: "Yan " -0x5831: "Bao " -0x5832: "Ji " -0x5833: "Mei " -0x5834: "Chang " -0x5835: "Du " -0x5836: "Tuo " -0x5837: "Yin " -0x5838: "Feng " -0x5839: "Zhong " -0x583a: "Jie " -0x583b: "Zhen " -0x583c: "Feng " -0x583d: "Gang " -0x583e: "Chuan " -0x583f: "Jian " -0x5840: "Pyeng " -0x5841: "Toride " -0x5842: "Xiang " -0x5843: "Huang " -0x5844: "Leng " -0x5845: "Duan " -0x5846: "[?] " -0x5847: "Xuan " -0x5848: "Ji " -0x5849: "Ji " -0x584a: "Kuai " -0x584b: "Ying " -0x584c: "Ta " -0x584d: "Cheng " -0x584e: "Yong " -0x584f: "Kai " -0x5850: "Su " -0x5851: "Su " -0x5852: "Shi " -0x5853: "Mi " -0x5854: "Ta " -0x5855: "Weng " -0x5856: "Cheng " -0x5857: "Tu " -0x5858: "Tang " -0x5859: "Que " -0x585a: "Zhong " -0x585b: "Li " -0x585c: "Peng " -0x585d: "Bang " -0x585e: "Sai " -0x585f: "Zang " -0x5860: "Dui " -0x5861: "Tian " -0x5862: "Wu " -0x5863: "Cheng " -0x5864: "Xun " -0x5865: "Ge " -0x5866: "Zhen " -0x5867: "Ai " -0x5868: "Gong " -0x5869: "Yan " -0x586a: "Kan " -0x586b: "Tian " -0x586c: "Yuan " -0x586d: "Wen " -0x586e: "Xie " -0x586f: "Liu " -0x5870: "Ama " -0x5871: "Lang " -0x5872: "Chang " -0x5873: "Peng " -0x5874: "Beng " -0x5875: "Chen " -0x5876: "Cu " -0x5877: "Lu " -0x5878: "Ou " -0x5879: "Qian " -0x587a: "Mei " -0x587b: "Mo " -0x587c: "Zhuan " -0x587d: "Shuang " -0x587e: "Shu " -0x587f: "Lou " -0x5880: "Chi " -0x5881: "Man " -0x5882: "Biao " -0x5883: "Jing " -0x5884: "Qi " -0x5885: "Shu " -0x5886: "Di " -0x5887: "Zhang " -0x5888: "Kan " -0x5889: "Yong " -0x588a: "Dian " -0x588b: "Chen " -0x588c: "Zhi " -0x588d: "Xi " -0x588e: "Guo " -0x588f: "Qiang " -0x5890: "Jin " -0x5891: "Di " -0x5892: "Shang " -0x5893: "Mu " -0x5894: "Cui " -0x5895: "Yan " -0x5896: "Ta " -0x5897: "Zeng " -0x5898: "Qi " -0x5899: "Qiang " -0x589a: "Liang " -0x589b: "[?] " -0x589c: "Zhui " -0x589d: "Qiao " -0x589e: "Zeng " -0x589f: "Xu " -0x58a0: "Shan " -0x58a1: "Shan " -0x58a2: "Ba " -0x58a3: "Pu " -0x58a4: "Kuai " -0x58a5: "Dong " -0x58a6: "Fan " -0x58a7: "Que " -0x58a8: "Mo " -0x58a9: "Dun " -0x58aa: "Dun " -0x58ab: "Dun " -0x58ac: "Di " -0x58ad: "Sheng " -0x58ae: "Duo " -0x58af: "Duo " -0x58b0: "Tan " -0x58b1: "Deng " -0x58b2: "Wu " -0x58b3: "Fen " -0x58b4: "Huang " -0x58b5: "Tan " -0x58b6: "Da " -0x58b7: "Ye " -0x58b8: "Sho " -0x58b9: "Mama " -0x58ba: "Yu " -0x58bb: "Qiang " -0x58bc: "Ji " -0x58bd: "Qiao " -0x58be: "Ken " -0x58bf: "Yi " -0x58c0: "Pi " -0x58c1: "Bi " -0x58c2: "Dian " -0x58c3: "Jiang " -0x58c4: "Ye " -0x58c5: "Yong " -0x58c6: "Bo " -0x58c7: "Tan " -0x58c8: "Lan " -0x58c9: "Ju " -0x58ca: "Huai " -0x58cb: "Dang " -0x58cc: "Rang " -0x58cd: "Qian " -0x58ce: "Xun " -0x58cf: "Lan " -0x58d0: "Xi " -0x58d1: "He " -0x58d2: "Ai " -0x58d3: "Ya " -0x58d4: "Dao " -0x58d5: "Hao " -0x58d6: "Ruan " -0x58d7: "Mama " -0x58d8: "Lei " -0x58d9: "Kuang " -0x58da: "Lu " -0x58db: "Yan " -0x58dc: "Tan " -0x58dd: "Wei " -0x58de: "Huai " -0x58df: "Long " -0x58e0: "Long " -0x58e1: "Rui " -0x58e2: "Li " -0x58e3: "Lin " -0x58e4: "Rang " -0x58e5: "Ten " -0x58e6: "Xun " -0x58e7: "Yan " -0x58e8: "Lei " -0x58e9: "Ba " -0x58ea: "[?] " -0x58eb: "Shi " -0x58ec: "Ren " -0x58ed: "[?] " -0x58ee: "Zhuang " -0x58ef: "Zhuang " -0x58f0: "Sheng " -0x58f1: "Yi " -0x58f2: "Mai " -0x58f3: "Ke " -0x58f4: "Zhu " -0x58f5: "Zhuang " -0x58f6: "Hu " -0x58f7: "Hu " -0x58f8: "Kun " -0x58f9: "Yi " -0x58fa: "Hu " -0x58fb: "Xu " -0x58fc: "Kun " -0x58fd: "Shou " -0x58fe: "Mang " -0x58ff: "Zun " -/* x059 */ -0x5900: "Shou " -0x5901: "Yi " -0x5902: "Zhi " -0x5903: "Gu " -0x5904: "Chu " -0x5905: "Jiang " -0x5906: "Feng " -0x5907: "Bei " -0x5908: "Cay " -0x5909: "Bian " -0x590a: "Sui " -0x590b: "Qun " -0x590c: "Ling " -0x590d: "Fu " -0x590e: "Zuo " -0x590f: "Xia " -0x5910: "Xiong " -0x5911: "[?] " -0x5912: "Nao " -0x5913: "Xia " -0x5914: "Kui " -0x5915: "Xi " -0x5916: "Wai " -0x5917: "Yuan " -0x5918: "Mao " -0x5919: "Su " -0x591a: "Duo " -0x591b: "Duo " -0x591c: "Ye " -0x591d: "Qing " -0x591e: "Uys " -0x591f: "Gou " -0x5920: "Gou " -0x5921: "Qi " -0x5922: "Meng " -0x5923: "Meng " -0x5924: "Yin " -0x5925: "Huo " -0x5926: "Chen " -0x5927: "Da " -0x5928: "Ze " -0x5929: "Tian " -0x592a: "Tai " -0x592b: "Fu " -0x592c: "Guai " -0x592d: "Yao " -0x592e: "Yang " -0x592f: "Hang " -0x5930: "Gao " -0x5931: "Shi " -0x5932: "Ben " -0x5933: "Tai " -0x5934: "Tou " -0x5935: "Yan " -0x5936: "Bi " -0x5937: "Yi " -0x5938: "Kua " -0x5939: "Jia " -0x593a: "Duo " -0x593b: "Kwu " -0x593c: "Kuang " -0x593d: "Yun " -0x593e: "Jia " -0x593f: "Pa " -0x5940: "En " -0x5941: "Lian " -0x5942: "Huan " -0x5943: "Di " -0x5944: "Yan " -0x5945: "Pao " -0x5946: "Quan " -0x5947: "Qi " -0x5948: "Nai " -0x5949: "Feng " -0x594a: "Xie " -0x594b: "Fen " -0x594c: "Dian " -0x594d: "[?] " -0x594e: "Kui " -0x594f: "Zou " -0x5950: "Huan " -0x5951: "Qi " -0x5952: "Kai " -0x5953: "Zha " -0x5954: "Ben " -0x5955: "Yi " -0x5956: "Jiang " -0x5957: "Tao " -0x5958: "Zang " -0x5959: "Ben " -0x595a: "Xi " -0x595b: "Xiang " -0x595c: "Fei " -0x595d: "Diao " -0x595e: "Xun " -0x595f: "Keng " -0x5960: "Dian " -0x5961: "Ao " -0x5962: "She " -0x5963: "Weng " -0x5964: "Pan " -0x5965: "Ao " -0x5966: "Wu " -0x5967: "Ao " -0x5968: "Jiang " -0x5969: "Lian " -0x596a: "Duo " -0x596b: "Yun " -0x596c: "Jiang " -0x596d: "Shi " -0x596e: "Fen " -0x596f: "Huo " -0x5970: "Bi " -0x5971: "Lian " -0x5972: "Duo " -0x5973: "Nu " -0x5974: "Nu " -0x5975: "Ding " -0x5976: "Nai " -0x5977: "Qian " -0x5978: "Jian " -0x5979: "Ta " -0x597a: "Jiu " -0x597b: "Nan " -0x597c: "Cha " -0x597d: "Hao " -0x597e: "Xian " -0x597f: "Fan " -0x5980: "Ji " -0x5981: "Shuo " -0x5982: "Ru " -0x5983: "Fei " -0x5984: "Wang " -0x5985: "Hong " -0x5986: "Zhuang " -0x5987: "Fu " -0x5988: "Ma " -0x5989: "Dan " -0x598a: "Ren " -0x598b: "Fu " -0x598c: "Jing " -0x598d: "Yan " -0x598e: "Xie " -0x598f: "Wen " -0x5990: "Zhong " -0x5991: "Pa " -0x5992: "Du " -0x5993: "Ji " -0x5994: "Keng " -0x5995: "Zhong " -0x5996: "Yao " -0x5997: "Jin " -0x5998: "Yun " -0x5999: "Miao " -0x599a: "Pei " -0x599b: "Shi " -0x599c: "Yue " -0x599d: "Zhuang " -0x599e: "Niu " -0x599f: "Yan " -0x59a0: "Na " -0x59a1: "Xin " -0x59a2: "Fen " -0x59a3: "Bi " -0x59a4: "Yu " -0x59a5: "Tuo " -0x59a6: "Feng " -0x59a7: "Yuan " -0x59a8: "Fang " -0x59a9: "Wu " -0x59aa: "Yu " -0x59ab: "Gui " -0x59ac: "Du " -0x59ad: "Ba " -0x59ae: "Ni " -0x59af: "Zhou " -0x59b0: "Zhuo " -0x59b1: "Zhao " -0x59b2: "Da " -0x59b3: "Nai " -0x59b4: "Yuan " -0x59b5: "Tou " -0x59b6: "Xuan " -0x59b7: "Zhi " -0x59b8: "E " -0x59b9: "Mei " -0x59ba: "Mo " -0x59bb: "Qi " -0x59bc: "Bi " -0x59bd: "Shen " -0x59be: "Qie " -0x59bf: "E " -0x59c0: "He " -0x59c1: "Xu " -0x59c2: "Fa " -0x59c3: "Zheng " -0x59c4: "Min " -0x59c5: "Ban " -0x59c6: "Mu " -0x59c7: "Fu " -0x59c8: "Ling " -0x59c9: "Zi " -0x59ca: "Zi " -0x59cb: "Shi " -0x59cc: "Ran " -0x59cd: "Shan " -0x59ce: "Yang " -0x59cf: "Man " -0x59d0: "Jie " -0x59d1: "Gu " -0x59d2: "Si " -0x59d3: "Xing " -0x59d4: "Wei " -0x59d5: "Zi " -0x59d6: "Ju " -0x59d7: "Shan " -0x59d8: "Pin " -0x59d9: "Ren " -0x59da: "Yao " -0x59db: "Tong " -0x59dc: "Jiang " -0x59dd: "Shu " -0x59de: "Ji " -0x59df: "Gai " -0x59e0: "Shang " -0x59e1: "Kuo " -0x59e2: "Juan " -0x59e3: "Jiao " -0x59e4: "Gou " -0x59e5: "Mu " -0x59e6: "Jian " -0x59e7: "Jian " -0x59e8: "Yi " -0x59e9: "Nian " -0x59ea: "Zhi " -0x59eb: "Ji " -0x59ec: "Ji " -0x59ed: "Xian " -0x59ee: "Heng " -0x59ef: "Guang " -0x59f0: "Jun " -0x59f1: "Kua " -0x59f2: "Yan " -0x59f3: "Ming " -0x59f4: "Lie " -0x59f5: "Pei " -0x59f6: "Yan " -0x59f7: "You " -0x59f8: "Yan " -0x59f9: "Cha " -0x59fa: "Shen " -0x59fb: "Yin " -0x59fc: "Chi " -0x59fd: "Gui " -0x59fe: "Quan " -0x59ff: "Zi " -/* x05a */ -0x5a00: "Song " -0x5a01: "Wei " -0x5a02: "Hong " -0x5a03: "Wa " -0x5a04: "Lou " -0x5a05: "Ya " -0x5a06: "Rao " -0x5a07: "Jiao " -0x5a08: "Luan " -0x5a09: "Ping " -0x5a0a: "Xian " -0x5a0b: "Shao " -0x5a0c: "Li " -0x5a0d: "Cheng " -0x5a0e: "Xiao " -0x5a0f: "Mang " -0x5a10: "Fu " -0x5a11: "Suo " -0x5a12: "Wu " -0x5a13: "Wei " -0x5a14: "Ke " -0x5a15: "Lai " -0x5a16: "Chuo " -0x5a17: "Ding " -0x5a18: "Niang " -0x5a19: "Xing " -0x5a1a: "Nan " -0x5a1b: "Yu " -0x5a1c: "Nuo " -0x5a1d: "Pei " -0x5a1e: "Nei " -0x5a1f: "Juan " -0x5a20: "Shen " -0x5a21: "Zhi " -0x5a22: "Han " -0x5a23: "Di " -0x5a24: "Zhuang " -0x5a25: "E " -0x5a26: "Pin " -0x5a27: "Tui " -0x5a28: "Han " -0x5a29: "Mian " -0x5a2a: "Wu " -0x5a2b: "Yan " -0x5a2c: "Wu " -0x5a2d: "Xi " -0x5a2e: "Yan " -0x5a2f: "Yu " -0x5a30: "Si " -0x5a31: "Yu " -0x5a32: "Wa " -0x5a33: "[?] " -0x5a34: "Xian " -0x5a35: "Ju " -0x5a36: "Qu " -0x5a37: "Shui " -0x5a38: "Qi " -0x5a39: "Xian " -0x5a3a: "Zhui " -0x5a3b: "Dong " -0x5a3c: "Chang " -0x5a3d: "Lu " -0x5a3e: "Ai " -0x5a3f: "E " -0x5a40: "E " -0x5a41: "Lou " -0x5a42: "Mian " -0x5a43: "Cong " -0x5a44: "Pou " -0x5a45: "Ju " -0x5a46: "Po " -0x5a47: "Cai " -0x5a48: "Ding " -0x5a49: "Wan " -0x5a4a: "Biao " -0x5a4b: "Xiao " -0x5a4c: "Shu " -0x5a4d: "Qi " -0x5a4e: "Hui " -0x5a4f: "Fu " -0x5a50: "E " -0x5a51: "Wo " -0x5a52: "Tan " -0x5a53: "Fei " -0x5a54: "Wei " -0x5a55: "Jie " -0x5a56: "Tian " -0x5a57: "Ni " -0x5a58: "Quan " -0x5a59: "Jing " -0x5a5a: "Hun " -0x5a5b: "Jing " -0x5a5c: "Qian " -0x5a5d: "Dian " -0x5a5e: "Xing " -0x5a5f: "Hu " -0x5a60: "Wa " -0x5a61: "Lai " -0x5a62: "Bi " -0x5a63: "Yin " -0x5a64: "Chou " -0x5a65: "Chuo " -0x5a66: "Fu " -0x5a67: "Jing " -0x5a68: "Lun " -0x5a69: "Yan " -0x5a6a: "Lan " -0x5a6b: "Kun " -0x5a6c: "Yin " -0x5a6d: "Ya " -0x5a6e: "Ju " -0x5a6f: "Li " -0x5a70: "Dian " -0x5a71: "Xian " -0x5a72: "Hwa " -0x5a73: "Hua " -0x5a74: "Ying " -0x5a75: "Chan " -0x5a76: "Shen " -0x5a77: "Ting " -0x5a78: "Dang " -0x5a79: "Yao " -0x5a7a: "Wu " -0x5a7b: "Nan " -0x5a7c: "Ruo " -0x5a7d: "Jia " -0x5a7e: "Tou " -0x5a7f: "Xu " -0x5a80: "Yu " -0x5a81: "Wei " -0x5a82: "Ti " -0x5a83: "Rou " -0x5a84: "Mei " -0x5a85: "Dan " -0x5a86: "Ruan " -0x5a87: "Qin " -0x5a88: "Hui " -0x5a89: "Wu " -0x5a8a: "Qian " -0x5a8b: "Chun " -0x5a8c: "Mao " -0x5a8d: "Fu " -0x5a8e: "Jie " -0x5a8f: "Duan " -0x5a90: "Xi " -0x5a91: "Zhong " -0x5a92: "Mei " -0x5a93: "Huang " -0x5a94: "Mian " -0x5a95: "An " -0x5a96: "Ying " -0x5a97: "Xuan " -0x5a98: "Jie " -0x5a99: "Wei " -0x5a9a: "Mei " -0x5a9b: "Yuan " -0x5a9c: "Zhen " -0x5a9d: "Qiu " -0x5a9e: "Ti " -0x5a9f: "Xie " -0x5aa0: "Tuo " -0x5aa1: "Lian " -0x5aa2: "Mao " -0x5aa3: "Ran " -0x5aa4: "Si " -0x5aa5: "Pian " -0x5aa6: "Wei " -0x5aa7: "Wa " -0x5aa8: "Jiu " -0x5aa9: "Hu " -0x5aaa: "Ao " -0x5aab: "[?] " -0x5aac: "Bou " -0x5aad: "Xu " -0x5aae: "Tou " -0x5aaf: "Gui " -0x5ab0: "Zou " -0x5ab1: "Yao " -0x5ab2: "Pi " -0x5ab3: "Xi " -0x5ab4: "Yuan " -0x5ab5: "Ying " -0x5ab6: "Rong " -0x5ab7: "Ru " -0x5ab8: "Chi " -0x5ab9: "Liu " -0x5aba: "Mei " -0x5abb: "Pan " -0x5abc: "Ao " -0x5abd: "Ma " -0x5abe: "Gou " -0x5abf: "Kui " -0x5ac0: "Qin " -0x5ac1: "Jia " -0x5ac2: "Sao " -0x5ac3: "Zhen " -0x5ac4: "Yuan " -0x5ac5: "Cha " -0x5ac6: "Yong " -0x5ac7: "Ming " -0x5ac8: "Ying " -0x5ac9: "Ji " -0x5aca: "Su " -0x5acb: "Niao " -0x5acc: "Xian " -0x5acd: "Tao " -0x5ace: "Pang " -0x5acf: "Lang " -0x5ad0: "Nao " -0x5ad1: "Bao " -0x5ad2: "Ai " -0x5ad3: "Pi " -0x5ad4: "Pin " -0x5ad5: "Yi " -0x5ad6: "Piao " -0x5ad7: "Yu " -0x5ad8: "Lei " -0x5ad9: "Xuan " -0x5ada: "Man " -0x5adb: "Yi " -0x5adc: "Zhang " -0x5add: "Kang " -0x5ade: "Yong " -0x5adf: "Ni " -0x5ae0: "Li " -0x5ae1: "Di " -0x5ae2: "Gui " -0x5ae3: "Yan " -0x5ae4: "Jin " -0x5ae5: "Zhuan " -0x5ae6: "Chang " -0x5ae7: "Ce " -0x5ae8: "Han " -0x5ae9: "Nen " -0x5aea: "Lao " -0x5aeb: "Mo " -0x5aec: "Zhe " -0x5aed: "Hu " -0x5aee: "Hu " -0x5aef: "Ao " -0x5af0: "Nen " -0x5af1: "Qiang " -0x5af2: "Ma " -0x5af3: "Pie " -0x5af4: "Gu " -0x5af5: "Wu " -0x5af6: "Jiao " -0x5af7: "Tuo " -0x5af8: "Zhan " -0x5af9: "Mao " -0x5afa: "Xian " -0x5afb: "Xian " -0x5afc: "Mo " -0x5afd: "Liao " -0x5afe: "Lian " -0x5aff: "Hua " -/* x05b */ -0x5b00: "Gui " -0x5b01: "Deng " -0x5b02: "Zhi " -0x5b03: "Xu " -0x5b04: "Yi " -0x5b05: "Hua " -0x5b06: "Xi " -0x5b07: "Hui " -0x5b08: "Rao " -0x5b09: "Xi " -0x5b0a: "Yan " -0x5b0b: "Chan " -0x5b0c: "Jiao " -0x5b0d: "Mei " -0x5b0e: "Fan " -0x5b0f: "Fan " -0x5b10: "Xian " -0x5b11: "Yi " -0x5b12: "Wei " -0x5b13: "Jiao " -0x5b14: "Fu " -0x5b15: "Shi " -0x5b16: "Bi " -0x5b17: "Shan " -0x5b18: "Sui " -0x5b19: "Qiang " -0x5b1a: "Lian " -0x5b1b: "Huan " -0x5b1c: "Xin " -0x5b1d: "Niao " -0x5b1e: "Dong " -0x5b1f: "Yi " -0x5b20: "Can " -0x5b21: "Ai " -0x5b22: "Niang " -0x5b23: "Neng " -0x5b24: "Ma " -0x5b25: "Tiao " -0x5b26: "Chou " -0x5b27: "Jin " -0x5b28: "Ci " -0x5b29: "Yu " -0x5b2a: "Pin " -0x5b2b: "Yong " -0x5b2c: "Xu " -0x5b2d: "Nai " -0x5b2e: "Yan " -0x5b2f: "Tai " -0x5b30: "Ying " -0x5b31: "Can " -0x5b32: "Niao " -0x5b33: "Wo " -0x5b34: "Ying " -0x5b35: "Mian " -0x5b36: "Kaka " -0x5b37: "Ma " -0x5b38: "Shen " -0x5b39: "Xing " -0x5b3a: "Ni " -0x5b3b: "Du " -0x5b3c: "Liu " -0x5b3d: "Yuan " -0x5b3e: "Lan " -0x5b3f: "Yan " -0x5b40: "Shuang " -0x5b41: "Ling " -0x5b42: "Jiao " -0x5b43: "Niang " -0x5b44: "Lan " -0x5b45: "Xian " -0x5b46: "Ying " -0x5b47: "Shuang " -0x5b48: "Shuai " -0x5b49: "Quan " -0x5b4a: "Mi " -0x5b4b: "Li " -0x5b4c: "Luan " -0x5b4d: "Yan " -0x5b4e: "Zhu " -0x5b4f: "Lan " -0x5b50: "Zi " -0x5b51: "Jie " -0x5b52: "Jue " -0x5b53: "Jue " -0x5b54: "Kong " -0x5b55: "Yun " -0x5b56: "Zi " -0x5b57: "Zi " -0x5b58: "Cun " -0x5b59: "Sun " -0x5b5a: "Fu " -0x5b5b: "Bei " -0x5b5c: "Zi " -0x5b5d: "Xiao " -0x5b5e: "Xin " -0x5b5f: "Meng " -0x5b60: "Si " -0x5b61: "Tai " -0x5b62: "Bao " -0x5b63: "Ji " -0x5b64: "Gu " -0x5b65: "Nu " -0x5b66: "Xue " -0x5b67: "[?] " -0x5b68: "Zhuan " -0x5b69: "Hai " -0x5b6a: "Luan " -0x5b6b: "Sun " -0x5b6c: "Huai " -0x5b6d: "Mie " -0x5b6e: "Cong " -0x5b6f: "Qian " -0x5b70: "Shu " -0x5b71: "Chan " -0x5b72: "Ya " -0x5b73: "Zi " -0x5b74: "Ni " -0x5b75: "Fu " -0x5b76: "Zi " -0x5b77: "Li " -0x5b78: "Xue " -0x5b79: "Bo " -0x5b7a: "Ru " -0x5b7b: "Lai " -0x5b7c: "Nie " -0x5b7d: "Nie " -0x5b7e: "Ying " -0x5b7f: "Luan " -0x5b80: "Mian " -0x5b81: "Zhu " -0x5b82: "Rong " -0x5b83: "Ta " -0x5b84: "Gui " -0x5b85: "Zhai " -0x5b86: "Qiong " -0x5b87: "Yu " -0x5b88: "Shou " -0x5b89: "An " -0x5b8a: "Tu " -0x5b8b: "Song " -0x5b8c: "Wan " -0x5b8d: "Rou " -0x5b8e: "Yao " -0x5b8f: "Hong " -0x5b90: "Yi " -0x5b91: "Jing " -0x5b92: "Zhun " -0x5b93: "Mi " -0x5b94: "Zhu " -0x5b95: "Dang " -0x5b96: "Hong " -0x5b97: "Zong " -0x5b98: "Guan " -0x5b99: "Zhou " -0x5b9a: "Ding " -0x5b9b: "Wan " -0x5b9c: "Yi " -0x5b9d: "Bao " -0x5b9e: "Shi " -0x5b9f: "Shi " -0x5ba0: "Chong " -0x5ba1: "Shen " -0x5ba2: "Ke " -0x5ba3: "Xuan " -0x5ba4: "Shi " -0x5ba5: "You " -0x5ba6: "Huan " -0x5ba7: "Yi " -0x5ba8: "Tiao " -0x5ba9: "Shi " -0x5baa: "Xian " -0x5bab: "Gong " -0x5bac: "Cheng " -0x5bad: "Qun " -0x5bae: "Gong " -0x5baf: "Xiao " -0x5bb0: "Zai " -0x5bb1: "Zha " -0x5bb2: "Bao " -0x5bb3: "Hai " -0x5bb4: "Yan " -0x5bb5: "Xiao " -0x5bb6: "Jia " -0x5bb7: "Shen " -0x5bb8: "Chen " -0x5bb9: "Rong " -0x5bba: "Huang " -0x5bbb: "Mi " -0x5bbc: "Kou " -0x5bbd: "Kuan " -0x5bbe: "Bin " -0x5bbf: "Su " -0x5bc0: "Cai " -0x5bc1: "Zan " -0x5bc2: "Ji " -0x5bc3: "Yuan " -0x5bc4: "Ji " -0x5bc5: "Yin " -0x5bc6: "Mi " -0x5bc7: "Kou " -0x5bc8: "Qing " -0x5bc9: "Que " -0x5bca: "Zhen " -0x5bcb: "Jian " -0x5bcc: "Fu " -0x5bcd: "Ning " -0x5bce: "Bing " -0x5bcf: "Huan " -0x5bd0: "Mei " -0x5bd1: "Qin " -0x5bd2: "Han " -0x5bd3: "Yu " -0x5bd4: "Shi " -0x5bd5: "Ning " -0x5bd6: "Qin " -0x5bd7: "Ning " -0x5bd8: "Zhi " -0x5bd9: "Yu " -0x5bda: "Bao " -0x5bdb: "Kuan " -0x5bdc: "Ning " -0x5bdd: "Qin " -0x5bde: "Mo " -0x5bdf: "Cha " -0x5be0: "Ju " -0x5be1: "Gua " -0x5be2: "Qin " -0x5be3: "Hu " -0x5be4: "Wu " -0x5be5: "Liao " -0x5be6: "Shi " -0x5be7: "Zhu " -0x5be8: "Zhai " -0x5be9: "Shen " -0x5bea: "Wei " -0x5beb: "Xie " -0x5bec: "Kuan " -0x5bed: "Hui " -0x5bee: "Liao " -0x5bef: "Jun " -0x5bf0: "Huan " -0x5bf1: "Yi " -0x5bf2: "Yi " -0x5bf3: "Bao " -0x5bf4: "Qin " -0x5bf5: "Chong " -0x5bf6: "Bao " -0x5bf7: "Feng " -0x5bf8: "Cun " -0x5bf9: "Dui " -0x5bfa: "Si " -0x5bfb: "Xun " -0x5bfc: "Dao " -0x5bfd: "Lu " -0x5bfe: "Dui " -0x5bff: "Shou " -/* x05c */ -0x5c00: "Po " -0x5c01: "Feng " -0x5c02: "Zhuan " -0x5c03: "Fu " -0x5c04: "She " -0x5c05: "Ke " -0x5c06: "Jiang " -0x5c07: "Jiang " -0x5c08: "Zhuan " -0x5c09: "Wei " -0x5c0a: "Zun " -0x5c0b: "Xun " -0x5c0c: "Shu " -0x5c0d: "Dui " -0x5c0e: "Dao " -0x5c0f: "Xiao " -0x5c10: "Ji " -0x5c11: "Shao " -0x5c12: "Er " -0x5c13: "Er " -0x5c14: "Er " -0x5c15: "Ga " -0x5c16: "Jian " -0x5c17: "Shu " -0x5c18: "Chen " -0x5c19: "Shang " -0x5c1a: "Shang " -0x5c1b: "Mo " -0x5c1c: "Ga " -0x5c1d: "Chang " -0x5c1e: "Liao " -0x5c1f: "Xian " -0x5c20: "Xian " -0x5c21: "[?] " -0x5c22: "Wang " -0x5c23: "Wang " -0x5c24: "You " -0x5c25: "Liao " -0x5c26: "Liao " -0x5c27: "Yao " -0x5c28: "Mang " -0x5c29: "Wang " -0x5c2a: "Wang " -0x5c2b: "Wang " -0x5c2c: "Ga " -0x5c2d: "Yao " -0x5c2e: "Duo " -0x5c2f: "Kui " -0x5c30: "Zhong " -0x5c31: "Jiu " -0x5c32: "Gan " -0x5c33: "Gu " -0x5c34: "Gan " -0x5c35: "Tui " -0x5c36: "Gan " -0x5c37: "Gan " -0x5c38: "Shi " -0x5c39: "Yin " -0x5c3a: "Chi " -0x5c3b: "Kao " -0x5c3c: "Ni " -0x5c3d: "Jin " -0x5c3e: "Wei " -0x5c3f: "Niao " -0x5c40: "Ju " -0x5c41: "Pi " -0x5c42: "Ceng " -0x5c43: "Xi " -0x5c44: "Bi " -0x5c45: "Ju " -0x5c46: "Jie " -0x5c47: "Tian " -0x5c48: "Qu " -0x5c49: "Ti " -0x5c4a: "Jie " -0x5c4b: "Wu " -0x5c4c: "Diao " -0x5c4d: "Shi " -0x5c4e: "Shi " -0x5c4f: "Ping " -0x5c50: "Ji " -0x5c51: "Xie " -0x5c52: "Chen " -0x5c53: "Xi " -0x5c54: "Ni " -0x5c55: "Zhan " -0x5c56: "Xi " -0x5c57: "[?] " -0x5c58: "Man " -0x5c59: "E " -0x5c5a: "Lou " -0x5c5b: "Ping " -0x5c5c: "Ti " -0x5c5d: "Fei " -0x5c5e: "Shu " -0x5c5f: "Xie " -0x5c60: "Tu " -0x5c61: "Lu " -0x5c62: "Lu " -0x5c63: "Xi " -0x5c64: "Ceng " -0x5c65: "Lu " -0x5c66: "Ju " -0x5c67: "Xie " -0x5c68: "Ju " -0x5c69: "Jue " -0x5c6a: "Liao " -0x5c6b: "Jue " -0x5c6c: "Shu " -0x5c6d: "Xi " -0x5c6e: "Che " -0x5c6f: "Tun " -0x5c70: "Ni " -0x5c71: "Shan " -0x5c72: "[?] " -0x5c73: "Xian " -0x5c74: "Li " -0x5c75: "Xue " -0x5c76: "Nata " -0x5c77: "[?] " -0x5c78: "Long " -0x5c79: "Yi " -0x5c7a: "Qi " -0x5c7b: "Ren " -0x5c7c: "Wu " -0x5c7d: "Han " -0x5c7e: "Shen " -0x5c7f: "Yu " -0x5c80: "Chu " -0x5c81: "Sui " -0x5c82: "Qi " -0x5c83: "[?] " -0x5c84: "Yue " -0x5c85: "Ban " -0x5c86: "Yao " -0x5c87: "Ang " -0x5c88: "Ya " -0x5c89: "Wu " -0x5c8a: "Jie " -0x5c8b: "E " -0x5c8c: "Ji " -0x5c8d: "Qian " -0x5c8e: "Fen " -0x5c8f: "Yuan " -0x5c90: "Qi " -0x5c91: "Cen " -0x5c92: "Qian " -0x5c93: "Qi " -0x5c94: "Cha " -0x5c95: "Jie " -0x5c96: "Qu " -0x5c97: "Gang " -0x5c98: "Xian " -0x5c99: "Ao " -0x5c9a: "Lan " -0x5c9b: "Dao " -0x5c9c: "Ba " -0x5c9d: "Zuo " -0x5c9e: "Zuo " -0x5c9f: "Yang " -0x5ca0: "Ju " -0x5ca1: "Gang " -0x5ca2: "Ke " -0x5ca3: "Gou " -0x5ca4: "Xue " -0x5ca5: "Bei " -0x5ca6: "Li " -0x5ca7: "Tiao " -0x5ca8: "Ju " -0x5ca9: "Yan " -0x5caa: "Fu " -0x5cab: "Xiu " -0x5cac: "Jia " -0x5cad: "Ling " -0x5cae: "Tuo " -0x5caf: "Pei " -0x5cb0: "You " -0x5cb1: "Dai " -0x5cb2: "Kuang " -0x5cb3: "Yue " -0x5cb4: "Qu " -0x5cb5: "Hu " -0x5cb6: "Po " -0x5cb7: "Min " -0x5cb8: "An " -0x5cb9: "Tiao " -0x5cba: "Ling " -0x5cbb: "Chi " -0x5cbc: "Yuri " -0x5cbd: "Dong " -0x5cbe: "Cem " -0x5cbf: "Kui " -0x5cc0: "Xiu " -0x5cc1: "Mao " -0x5cc2: "Tong " -0x5cc3: "Xue " -0x5cc4: "Yi " -0x5cc5: "Kura " -0x5cc6: "He " -0x5cc7: "Ke " -0x5cc8: "Luo " -0x5cc9: "E " -0x5cca: "Fu " -0x5ccb: "Xun " -0x5ccc: "Die " -0x5ccd: "Lu " -0x5cce: "An " -0x5ccf: "Er " -0x5cd0: "Gai " -0x5cd1: "Quan " -0x5cd2: "Tong " -0x5cd3: "Yi " -0x5cd4: "Mu " -0x5cd5: "Shi " -0x5cd6: "An " -0x5cd7: "Wei " -0x5cd8: "Hu " -0x5cd9: "Zhi " -0x5cda: "Mi " -0x5cdb: "Li " -0x5cdc: "Ji " -0x5cdd: "Tong " -0x5cde: "Wei " -0x5cdf: "You " -0x5ce0: "Sang " -0x5ce1: "Xia " -0x5ce2: "Li " -0x5ce3: "Yao " -0x5ce4: "Jiao " -0x5ce5: "Zheng " -0x5ce6: "Luan " -0x5ce7: "Jiao " -0x5ce8: "E " -0x5ce9: "E " -0x5cea: "Yu " -0x5ceb: "Ye " -0x5cec: "Bu " -0x5ced: "Qiao " -0x5cee: "Qun " -0x5cef: "Feng " -0x5cf0: "Feng " -0x5cf1: "Nao " -0x5cf2: "Li " -0x5cf3: "You " -0x5cf4: "Xian " -0x5cf5: "Hong " -0x5cf6: "Dao " -0x5cf7: "Shen " -0x5cf8: "Cheng " -0x5cf9: "Tu " -0x5cfa: "Geng " -0x5cfb: "Jun " -0x5cfc: "Hao " -0x5cfd: "Xia " -0x5cfe: "Yin " -0x5cff: "Yu " -/* x05d */ -0x5d00: "Lang " -0x5d01: "Kan " -0x5d02: "Lao " -0x5d03: "Lai " -0x5d04: "Xian " -0x5d05: "Que " -0x5d06: "Kong " -0x5d07: "Chong " -0x5d08: "Chong " -0x5d09: "Ta " -0x5d0a: "Lin " -0x5d0b: "Hua " -0x5d0c: "Ju " -0x5d0d: "Lai " -0x5d0e: "Qi " -0x5d0f: "Min " -0x5d10: "Kun " -0x5d11: "Kun " -0x5d12: "Zu " -0x5d13: "Gu " -0x5d14: "Cui " -0x5d15: "Ya " -0x5d16: "Ya " -0x5d17: "Gang " -0x5d18: "Lun " -0x5d19: "Lun " -0x5d1a: "Leng " -0x5d1b: "Jue " -0x5d1c: "Duo " -0x5d1d: "Zheng " -0x5d1e: "Guo " -0x5d1f: "Yin " -0x5d20: "Dong " -0x5d21: "Han " -0x5d22: "Zheng " -0x5d23: "Wei " -0x5d24: "Yao " -0x5d25: "Pi " -0x5d26: "Yan " -0x5d27: "Song " -0x5d28: "Jie " -0x5d29: "Beng " -0x5d2a: "Zu " -0x5d2b: "Jue " -0x5d2c: "Dong " -0x5d2d: "Zhan " -0x5d2e: "Gu " -0x5d2f: "Yin " -0x5d30: "[?] " -0x5d31: "Ze " -0x5d32: "Huang " -0x5d33: "Yu " -0x5d34: "Wei " -0x5d35: "Yang " -0x5d36: "Feng " -0x5d37: "Qiu " -0x5d38: "Dun " -0x5d39: "Ti " -0x5d3a: "Yi " -0x5d3b: "Zhi " -0x5d3c: "Shi " -0x5d3d: "Zai " -0x5d3e: "Yao " -0x5d3f: "E " -0x5d40: "Zhu " -0x5d41: "Kan " -0x5d42: "Lu " -0x5d43: "Yan " -0x5d44: "Mei " -0x5d45: "Gan " -0x5d46: "Ji " -0x5d47: "Ji " -0x5d48: "Huan " -0x5d49: "Ting " -0x5d4a: "Sheng " -0x5d4b: "Mei " -0x5d4c: "Qian " -0x5d4d: "Wu " -0x5d4e: "Yu " -0x5d4f: "Zong " -0x5d50: "Lan " -0x5d51: "Jue " -0x5d52: "Yan " -0x5d53: "Yan " -0x5d54: "Wei " -0x5d55: "Zong " -0x5d56: "Cha " -0x5d57: "Sui " -0x5d58: "Rong " -0x5d59: "Yamashina " -0x5d5a: "Qin " -0x5d5b: "Yu " -0x5d5c: "Kewashii " -0x5d5d: "Lou " -0x5d5e: "Tu " -0x5d5f: "Dui " -0x5d60: "Xi " -0x5d61: "Weng " -0x5d62: "Cang " -0x5d63: "Dang " -0x5d64: "Hong " -0x5d65: "Jie " -0x5d66: "Ai " -0x5d67: "Liu " -0x5d68: "Wu " -0x5d69: "Song " -0x5d6a: "Qiao " -0x5d6b: "Zi " -0x5d6c: "Wei " -0x5d6d: "Beng " -0x5d6e: "Dian " -0x5d6f: "Cuo " -0x5d70: "Qian " -0x5d71: "Yong " -0x5d72: "Nie " -0x5d73: "Cuo " -0x5d74: "Ji " -0x5d75: "[?] " -0x5d76: "Tao " -0x5d77: "Song " -0x5d78: "Zong " -0x5d79: "Jiang " -0x5d7a: "Liao " -0x5d7b: "Kang " -0x5d7c: "Chan " -0x5d7d: "Die " -0x5d7e: "Cen " -0x5d7f: "Ding " -0x5d80: "Tu " -0x5d81: "Lou " -0x5d82: "Zhang " -0x5d83: "Zhan " -0x5d84: "Zhan " -0x5d85: "Ao " -0x5d86: "Cao " -0x5d87: "Qu " -0x5d88: "Qiang " -0x5d89: "Zui " -0x5d8a: "Zui " -0x5d8b: "Dao " -0x5d8c: "Dao " -0x5d8d: "Xi " -0x5d8e: "Yu " -0x5d8f: "Bo " -0x5d90: "Long " -0x5d91: "Xiang " -0x5d92: "Ceng " -0x5d93: "Bo " -0x5d94: "Qin " -0x5d95: "Jiao " -0x5d96: "Yan " -0x5d97: "Lao " -0x5d98: "Zhan " -0x5d99: "Lin " -0x5d9a: "Liao " -0x5d9b: "Liao " -0x5d9c: "Jin " -0x5d9d: "Deng " -0x5d9e: "Duo " -0x5d9f: "Zun " -0x5da0: "Jiao " -0x5da1: "Gui " -0x5da2: "Yao " -0x5da3: "Qiao " -0x5da4: "Yao " -0x5da5: "Jue " -0x5da6: "Zhan " -0x5da7: "Yi " -0x5da8: "Xue " -0x5da9: "Nao " -0x5daa: "Ye " -0x5dab: "Ye " -0x5dac: "Yi " -0x5dad: "E " -0x5dae: "Xian " -0x5daf: "Ji " -0x5db0: "Xie " -0x5db1: "Ke " -0x5db2: "Xi " -0x5db3: "Di " -0x5db4: "Ao " -0x5db5: "Zui " -0x5db6: "[?] " -0x5db7: "Ni " -0x5db8: "Rong " -0x5db9: "Dao " -0x5dba: "Ling " -0x5dbb: "Za " -0x5dbc: "Yu " -0x5dbd: "Yue " -0x5dbe: "Yin " -0x5dbf: "[?] " -0x5dc0: "Jie " -0x5dc1: "Li " -0x5dc2: "Sui " -0x5dc3: "Long " -0x5dc4: "Long " -0x5dc5: "Dian " -0x5dc6: "Ying " -0x5dc7: "Xi " -0x5dc8: "Ju " -0x5dc9: "Chan " -0x5dca: "Ying " -0x5dcb: "Kui " -0x5dcc: "Yan " -0x5dcd: "Wei " -0x5dce: "Nao " -0x5dcf: "Quan " -0x5dd0: "Chao " -0x5dd1: "Cuan " -0x5dd2: "Luan " -0x5dd3: "Dian " -0x5dd4: "Dian " -0x5dd5: "[?] " -0x5dd6: "Yan " -0x5dd7: "Yan " -0x5dd8: "Yan " -0x5dd9: "Nao " -0x5dda: "Yan " -0x5ddb: "Chuan " -0x5ddc: "Gui " -0x5ddd: "Chuan " -0x5dde: "Zhou " -0x5ddf: "Huang " -0x5de0: "Jing " -0x5de1: "Xun " -0x5de2: "Chao " -0x5de3: "Chao " -0x5de4: "Lie " -0x5de5: "Gong " -0x5de6: "Zuo " -0x5de7: "Qiao " -0x5de8: "Ju " -0x5de9: "Gong " -0x5dea: "Kek " -0x5deb: "Wu " -0x5dec: "Pwu " -0x5ded: "Pwu " -0x5dee: "Chai " -0x5def: "Qiu " -0x5df0: "Qiu " -0x5df1: "Ji " -0x5df2: "Yi " -0x5df3: "Si " -0x5df4: "Ba " -0x5df5: "Zhi " -0x5df6: "Zhao " -0x5df7: "Xiang " -0x5df8: "Yi " -0x5df9: "Jin " -0x5dfa: "Xun " -0x5dfb: "Juan " -0x5dfc: "Phas " -0x5dfd: "Xun " -0x5dfe: "Jin " -0x5dff: "Fu " -/* x05e */ -0x5e00: "Za " -0x5e01: "Bi " -0x5e02: "Shi " -0x5e03: "Bu " -0x5e04: "Ding " -0x5e05: "Shuai " -0x5e06: "Fan " -0x5e07: "Nie " -0x5e08: "Shi " -0x5e09: "Fen " -0x5e0a: "Pa " -0x5e0b: "Zhi " -0x5e0c: "Xi " -0x5e0d: "Hu " -0x5e0e: "Dan " -0x5e0f: "Wei " -0x5e10: "Zhang " -0x5e11: "Tang " -0x5e12: "Dai " -0x5e13: "Ma " -0x5e14: "Pei " -0x5e15: "Pa " -0x5e16: "Tie " -0x5e17: "Fu " -0x5e18: "Lian " -0x5e19: "Zhi " -0x5e1a: "Zhou " -0x5e1b: "Bo " -0x5e1c: "Zhi " -0x5e1d: "Di " -0x5e1e: "Mo " -0x5e1f: "Yi " -0x5e20: "Yi " -0x5e21: "Ping " -0x5e22: "Qia " -0x5e23: "Juan " -0x5e24: "Ru " -0x5e25: "Shuai " -0x5e26: "Dai " -0x5e27: "Zheng " -0x5e28: "Shui " -0x5e29: "Qiao " -0x5e2a: "Zhen " -0x5e2b: "Shi " -0x5e2c: "Qun " -0x5e2d: "Xi " -0x5e2e: "Bang " -0x5e2f: "Dai " -0x5e30: "Gui " -0x5e31: "Chou " -0x5e32: "Ping " -0x5e33: "Zhang " -0x5e34: "Sha " -0x5e35: "Wan " -0x5e36: "Dai " -0x5e37: "Wei " -0x5e38: "Chang " -0x5e39: "Sha " -0x5e3a: "Qi " -0x5e3b: "Ze " -0x5e3c: "Guo " -0x5e3d: "Mao " -0x5e3e: "Du " -0x5e3f: "Hou " -0x5e40: "Zheng " -0x5e41: "Xu " -0x5e42: "Mi " -0x5e43: "Wei " -0x5e44: "Wo " -0x5e45: "Fu " -0x5e46: "Yi " -0x5e47: "Bang " -0x5e48: "Ping " -0x5e49: "Tazuna " -0x5e4a: "Gong " -0x5e4b: "Pan " -0x5e4c: "Huang " -0x5e4d: "Dao " -0x5e4e: "Mi " -0x5e4f: "Jia " -0x5e50: "Teng " -0x5e51: "Hui " -0x5e52: "Zhong " -0x5e53: "Shan " -0x5e54: "Man " -0x5e55: "Mu " -0x5e56: "Biao " -0x5e57: "Guo " -0x5e58: "Ze " -0x5e59: "Mu " -0x5e5a: "Bang " -0x5e5b: "Zhang " -0x5e5c: "Jiong " -0x5e5d: "Chan " -0x5e5e: "Fu " -0x5e5f: "Zhi " -0x5e60: "Hu " -0x5e61: "Fan " -0x5e62: "Chuang " -0x5e63: "Bi " -0x5e64: "Hei " -0x5e65: "[?] " -0x5e66: "Mi " -0x5e67: "Qiao " -0x5e68: "Chan " -0x5e69: "Fen " -0x5e6a: "Meng " -0x5e6b: "Bang " -0x5e6c: "Chou " -0x5e6d: "Mie " -0x5e6e: "Chu " -0x5e6f: "Jie " -0x5e70: "Xian " -0x5e71: "Lan " -0x5e72: "Gan " -0x5e73: "Ping " -0x5e74: "Nian " -0x5e75: "Qian " -0x5e76: "Bing " -0x5e77: "Bing " -0x5e78: "Xing " -0x5e79: "Gan " -0x5e7a: "Yao " -0x5e7b: "Huan " -0x5e7c: "You " -0x5e7d: "You " -0x5e7e: "Ji " -0x5e7f: "Yan " -0x5e80: "Pi " -0x5e81: "Ting " -0x5e82: "Ze " -0x5e83: "Guang " -0x5e84: "Zhuang " -0x5e85: "Mo " -0x5e86: "Qing " -0x5e87: "Bi " -0x5e88: "Qin " -0x5e89: "Dun " -0x5e8a: "Chuang " -0x5e8b: "Gui " -0x5e8c: "Ya " -0x5e8d: "Bai " -0x5e8e: "Jie " -0x5e8f: "Xu " -0x5e90: "Lu " -0x5e91: "Wu " -0x5e92: "[?] " -0x5e93: "Ku " -0x5e94: "Ying " -0x5e95: "Di " -0x5e96: "Pao " -0x5e97: "Dian " -0x5e98: "Ya " -0x5e99: "Miao " -0x5e9a: "Geng " -0x5e9b: "Ci " -0x5e9c: "Fu " -0x5e9d: "Tong " -0x5e9e: "Pang " -0x5e9f: "Fei " -0x5ea0: "Xiang " -0x5ea1: "Yi " -0x5ea2: "Zhi " -0x5ea3: "Tiao " -0x5ea4: "Zhi " -0x5ea5: "Xiu " -0x5ea6: "Du " -0x5ea7: "Zuo " -0x5ea8: "Xiao " -0x5ea9: "Tu " -0x5eaa: "Gui " -0x5eab: "Ku " -0x5eac: "Pang " -0x5ead: "Ting " -0x5eae: "You " -0x5eaf: "Bu " -0x5eb0: "Ding " -0x5eb1: "Cheng " -0x5eb2: "Lai " -0x5eb3: "Bei " -0x5eb4: "Ji " -0x5eb5: "An " -0x5eb6: "Shu " -0x5eb7: "Kang " -0x5eb8: "Yong " -0x5eb9: "Tuo " -0x5eba: "Song " -0x5ebb: "Shu " -0x5ebc: "Qing " -0x5ebd: "Yu " -0x5ebe: "Yu " -0x5ebf: "Miao " -0x5ec0: "Sou " -0x5ec1: "Ce " -0x5ec2: "Xiang " -0x5ec3: "Fei " -0x5ec4: "Jiu " -0x5ec5: "He " -0x5ec6: "Hui " -0x5ec7: "Liu " -0x5ec8: "Sha " -0x5ec9: "Lian " -0x5eca: "Lang " -0x5ecb: "Sou " -0x5ecc: "Jian " -0x5ecd: "Pou " -0x5ece: "Qing " -0x5ecf: "Jiu " -0x5ed0: "Jiu " -0x5ed1: "Qin " -0x5ed2: "Ao " -0x5ed3: "Kuo " -0x5ed4: "Lou " -0x5ed5: "Yin " -0x5ed6: "Liao " -0x5ed7: "Dai " -0x5ed8: "Lu " -0x5ed9: "Yi " -0x5eda: "Chu " -0x5edb: "Chan " -0x5edc: "Tu " -0x5edd: "Si " -0x5ede: "Xin " -0x5edf: "Miao " -0x5ee0: "Chang " -0x5ee1: "Wu " -0x5ee2: "Fei " -0x5ee3: "Guang " -0x5ee4: "Koc " -0x5ee5: "Kuai " -0x5ee6: "Bi " -0x5ee7: "Qiang " -0x5ee8: "Xie " -0x5ee9: "Lin " -0x5eea: "Lin " -0x5eeb: "Liao " -0x5eec: "Lu " -0x5eed: "[?] " -0x5eee: "Ying " -0x5eef: "Xian " -0x5ef0: "Ting " -0x5ef1: "Yong " -0x5ef2: "Li " -0x5ef3: "Ting " -0x5ef4: "Yin " -0x5ef5: "Xun " -0x5ef6: "Yan " -0x5ef7: "Ting " -0x5ef8: "Di " -0x5ef9: "Po " -0x5efa: "Jian " -0x5efb: "Hui " -0x5efc: "Nai " -0x5efd: "Hui " -0x5efe: "Gong " -0x5eff: "Nian " -/* x05f */ -0x5f00: "Kai " -0x5f01: "Bian " -0x5f02: "Yi " -0x5f03: "Qi " -0x5f04: "Nong " -0x5f05: "Fen " -0x5f06: "Ju " -0x5f07: "Yan " -0x5f08: "Yi " -0x5f09: "Zang " -0x5f0a: "Bi " -0x5f0b: "Yi " -0x5f0c: "Yi " -0x5f0d: "Er " -0x5f0e: "San " -0x5f0f: "Shi " -0x5f10: "Er " -0x5f11: "Shi " -0x5f12: "Shi " -0x5f13: "Gong " -0x5f14: "Diao " -0x5f15: "Yin " -0x5f16: "Hu " -0x5f17: "Fu " -0x5f18: "Hong " -0x5f19: "Wu " -0x5f1a: "Tui " -0x5f1b: "Chi " -0x5f1c: "Jiang " -0x5f1d: "Ba " -0x5f1e: "Shen " -0x5f1f: "Di " -0x5f20: "Zhang " -0x5f21: "Jue " -0x5f22: "Tao " -0x5f23: "Fu " -0x5f24: "Di " -0x5f25: "Mi " -0x5f26: "Xian " -0x5f27: "Hu " -0x5f28: "Chao " -0x5f29: "Nu " -0x5f2a: "Jing " -0x5f2b: "Zhen " -0x5f2c: "Yi " -0x5f2d: "Mi " -0x5f2e: "Quan " -0x5f2f: "Wan " -0x5f30: "Shao " -0x5f31: "Ruo " -0x5f32: "Xuan " -0x5f33: "Jing " -0x5f34: "Dun " -0x5f35: "Zhang " -0x5f36: "Jiang " -0x5f37: "Qiang " -0x5f38: "Peng " -0x5f39: "Dan " -0x5f3a: "Qiang " -0x5f3b: "Bi " -0x5f3c: "Bi " -0x5f3d: "She " -0x5f3e: "Dan " -0x5f3f: "Jian " -0x5f40: "Gou " -0x5f41: "Sei " -0x5f42: "Fa " -0x5f43: "Bi " -0x5f44: "Kou " -0x5f45: "Nagi " -0x5f46: "Bie " -0x5f47: "Xiao " -0x5f48: "Dan " -0x5f49: "Kuo " -0x5f4a: "Qiang " -0x5f4b: "Hong " -0x5f4c: "Mi " -0x5f4d: "Kuo " -0x5f4e: "Wan " -0x5f4f: "Jue " -0x5f50: "Ji " -0x5f51: "Ji " -0x5f52: "Gui " -0x5f53: "Dang " -0x5f54: "Lu " -0x5f55: "Lu " -0x5f56: "Tuan " -0x5f57: "Hui " -0x5f58: "Zhi " -0x5f59: "Hui " -0x5f5a: "Hui " -0x5f5b: "Yi " -0x5f5c: "Yi " -0x5f5d: "Yi " -0x5f5e: "Yi " -0x5f5f: "Huo " -0x5f60: "Huo " -0x5f61: "Shan " -0x5f62: "Xing " -0x5f63: "Wen " -0x5f64: "Tong " -0x5f65: "Yan " -0x5f66: "Yan " -0x5f67: "Yu " -0x5f68: "Chi " -0x5f69: "Cai " -0x5f6a: "Biao " -0x5f6b: "Diao " -0x5f6c: "Bin " -0x5f6d: "Peng " -0x5f6e: "Yong " -0x5f6f: "Piao " -0x5f70: "Zhang " -0x5f71: "Ying " -0x5f72: "Chi " -0x5f73: "Chi " -0x5f74: "Zhuo " -0x5f75: "Tuo " -0x5f76: "Ji " -0x5f77: "Pang " -0x5f78: "Zhong " -0x5f79: "Yi " -0x5f7a: "Wang " -0x5f7b: "Che " -0x5f7c: "Bi " -0x5f7d: "Chi " -0x5f7e: "Ling " -0x5f7f: "Fu " -0x5f80: "Wang " -0x5f81: "Zheng " -0x5f82: "Cu " -0x5f83: "Wang " -0x5f84: "Jing " -0x5f85: "Dai " -0x5f86: "Xi " -0x5f87: "Xun " -0x5f88: "Hen " -0x5f89: "Yang " -0x5f8a: "Huai " -0x5f8b: "Lu " -0x5f8c: "Hou " -0x5f8d: "Wa " -0x5f8e: "Cheng " -0x5f8f: "Zhi " -0x5f90: "Xu " -0x5f91: "Jing " -0x5f92: "Tu " -0x5f93: "Cong " -0x5f94: "[?] " -0x5f95: "Lai " -0x5f96: "Cong " -0x5f97: "De " -0x5f98: "Pai " -0x5f99: "Xi " -0x5f9a: "[?] " -0x5f9b: "Qi " -0x5f9c: "Chang " -0x5f9d: "Zhi " -0x5f9e: "Cong " -0x5f9f: "Zhou " -0x5fa0: "Lai " -0x5fa1: "Yu " -0x5fa2: "Xie " -0x5fa3: "Jie " -0x5fa4: "Jian " -0x5fa5: "Chi " -0x5fa6: "Jia " -0x5fa7: "Bian " -0x5fa8: "Huang " -0x5fa9: "Fu " -0x5faa: "Xun " -0x5fab: "Wei " -0x5fac: "Pang " -0x5fad: "Yao " -0x5fae: "Wei " -0x5faf: "Xi " -0x5fb0: "Zheng " -0x5fb1: "Piao " -0x5fb2: "Chi " -0x5fb3: "De " -0x5fb4: "Zheng " -0x5fb5: "Zheng " -0x5fb6: "Bie " -0x5fb7: "De " -0x5fb8: "Chong " -0x5fb9: "Che " -0x5fba: "Jiao " -0x5fbb: "Wei " -0x5fbc: "Jiao " -0x5fbd: "Hui " -0x5fbe: "Mei " -0x5fbf: "Long " -0x5fc0: "Xiang " -0x5fc1: "Bao " -0x5fc2: "Qu " -0x5fc3: "Xin " -0x5fc4: "Shu " -0x5fc5: "Bi " -0x5fc6: "Yi " -0x5fc7: "Le " -0x5fc8: "Ren " -0x5fc9: "Dao " -0x5fca: "Ding " -0x5fcb: "Gai " -0x5fcc: "Ji " -0x5fcd: "Ren " -0x5fce: "Ren " -0x5fcf: "Chan " -0x5fd0: "Tan " -0x5fd1: "Te " -0x5fd2: "Te " -0x5fd3: "Gan " -0x5fd4: "Qi " -0x5fd5: "Shi " -0x5fd6: "Cun " -0x5fd7: "Zhi " -0x5fd8: "Wang " -0x5fd9: "Mang " -0x5fda: "Xi " -0x5fdb: "Fan " -0x5fdc: "Ying " -0x5fdd: "Tian " -0x5fde: "Min " -0x5fdf: "Min " -0x5fe0: "Zhong " -0x5fe1: "Chong " -0x5fe2: "Wu " -0x5fe3: "Ji " -0x5fe4: "Wu " -0x5fe5: "Xi " -0x5fe6: "Ye " -0x5fe7: "You " -0x5fe8: "Wan " -0x5fe9: "Cong " -0x5fea: "Zhong " -0x5feb: "Kuai " -0x5fec: "Yu " -0x5fed: "Bian " -0x5fee: "Zhi " -0x5fef: "Qi " -0x5ff0: "Cui " -0x5ff1: "Chen " -0x5ff2: "Tai " -0x5ff3: "Tun " -0x5ff4: "Qian " -0x5ff5: "Nian " -0x5ff6: "Hun " -0x5ff7: "Xiong " -0x5ff8: "Niu " -0x5ff9: "Wang " -0x5ffa: "Xian " -0x5ffb: "Xin " -0x5ffc: "Kang " -0x5ffd: "Hu " -0x5ffe: "Kai " -0x5fff: "Fen " -/* x060 */ -0x6000: "Huai " -0x6001: "Tai " -0x6002: "Song " -0x6003: "Wu " -0x6004: "Ou " -0x6005: "Chang " -0x6006: "Chuang " -0x6007: "Ju " -0x6008: "Yi " -0x6009: "Bao " -0x600a: "Chao " -0x600b: "Min " -0x600c: "Pei " -0x600d: "Zuo " -0x600e: "Zen " -0x600f: "Yang " -0x6010: "Kou " -0x6011: "Ban " -0x6012: "Nu " -0x6013: "Nao " -0x6014: "Zheng " -0x6015: "Pa " -0x6016: "Bu " -0x6017: "Tie " -0x6018: "Gu " -0x6019: "Hu " -0x601a: "Ju " -0x601b: "Da " -0x601c: "Lian " -0x601d: "Si " -0x601e: "Chou " -0x601f: "Di " -0x6020: "Dai " -0x6021: "Yi " -0x6022: "Tu " -0x6023: "You " -0x6024: "Fu " -0x6025: "Ji " -0x6026: "Peng " -0x6027: "Xing " -0x6028: "Yuan " -0x6029: "Ni " -0x602a: "Guai " -0x602b: "Fu " -0x602c: "Xi " -0x602d: "Bi " -0x602e: "You " -0x602f: "Qie " -0x6030: "Xuan " -0x6031: "Cong " -0x6032: "Bing " -0x6033: "Huang " -0x6034: "Xu " -0x6035: "Chu " -0x6036: "Pi " -0x6037: "Xi " -0x6038: "Xi " -0x6039: "Tan " -0x603a: "Koraeru " -0x603b: "Zong " -0x603c: "Dui " -0x603d: "[?] " -0x603e: "Ki " -0x603f: "Yi " -0x6040: "Chi " -0x6041: "Ren " -0x6042: "Xun " -0x6043: "Shi " -0x6044: "Xi " -0x6045: "Lao " -0x6046: "Heng " -0x6047: "Kuang " -0x6048: "Mu " -0x6049: "Zhi " -0x604a: "Xie " -0x604b: "Lian " -0x604c: "Tiao " -0x604d: "Huang " -0x604e: "Die " -0x604f: "Hao " -0x6050: "Kong " -0x6051: "Gui " -0x6052: "Heng " -0x6053: "Xi " -0x6054: "Xiao " -0x6055: "Shu " -0x6056: "S " -0x6057: "Kua " -0x6058: "Qiu " -0x6059: "Yang " -0x605a: "Hui " -0x605b: "Hui " -0x605c: "Chi " -0x605d: "Jia " -0x605e: "Yi " -0x605f: "Xiong " -0x6060: "Guai " -0x6061: "Lin " -0x6062: "Hui " -0x6063: "Zi " -0x6064: "Xu " -0x6065: "Chi " -0x6066: "Xiang " -0x6067: "Nu " -0x6068: "Hen " -0x6069: "En " -0x606a: "Ke " -0x606b: "Tong " -0x606c: "Tian " -0x606d: "Gong " -0x606e: "Quan " -0x606f: "Xi " -0x6070: "Qia " -0x6071: "Yue " -0x6072: "Peng " -0x6073: "Ken " -0x6074: "De " -0x6075: "Hui " -0x6076: "E " -0x6077: "Kyuu " -0x6078: "Tong " -0x6079: "Yan " -0x607a: "Kai " -0x607b: "Ce " -0x607c: "Nao " -0x607d: "Yun " -0x607e: "Mang " -0x607f: "Yong " -0x6080: "Yong " -0x6081: "Yuan " -0x6082: "Pi " -0x6083: "Kun " -0x6084: "Qiao " -0x6085: "Yue " -0x6086: "Yu " -0x6087: "Yu " -0x6088: "Jie " -0x6089: "Xi " -0x608a: "Zhe " -0x608b: "Lin " -0x608c: "Ti " -0x608d: "Han " -0x608e: "Hao " -0x608f: "Qie " -0x6090: "Ti " -0x6091: "Bu " -0x6092: "Yi " -0x6093: "Qian " -0x6094: "Hui " -0x6095: "Xi " -0x6096: "Bei " -0x6097: "Man " -0x6098: "Yi " -0x6099: "Heng " -0x609a: "Song " -0x609b: "Quan " -0x609c: "Cheng " -0x609d: "Hui " -0x609e: "Wu " -0x609f: "Wu " -0x60a0: "You " -0x60a1: "Li " -0x60a2: "Liang " -0x60a3: "Huan " -0x60a4: "Cong " -0x60a5: "Yi " -0x60a6: "Yue " -0x60a7: "Li " -0x60a8: "Nin " -0x60a9: "Nao " -0x60aa: "E " -0x60ab: "Que " -0x60ac: "Xuan " -0x60ad: "Qian " -0x60ae: "Wu " -0x60af: "Min " -0x60b0: "Cong " -0x60b1: "Fei " -0x60b2: "Bei " -0x60b3: "Duo " -0x60b4: "Cui " -0x60b5: "Chang " -0x60b6: "Men " -0x60b7: "Li " -0x60b8: "Ji " -0x60b9: "Guan " -0x60ba: "Guan " -0x60bb: "Xing " -0x60bc: "Dao " -0x60bd: "Qi " -0x60be: "Kong " -0x60bf: "Tian " -0x60c0: "Lun " -0x60c1: "Xi " -0x60c2: "Kan " -0x60c3: "Kun " -0x60c4: "Ni " -0x60c5: "Qing " -0x60c6: "Chou " -0x60c7: "Dun " -0x60c8: "Guo " -0x60c9: "Chan " -0x60ca: "Liang " -0x60cb: "Wan " -0x60cc: "Yuan " -0x60cd: "Jin " -0x60ce: "Ji " -0x60cf: "Lin " -0x60d0: "Yu " -0x60d1: "Huo " -0x60d2: "He " -0x60d3: "Quan " -0x60d4: "Tan " -0x60d5: "Ti " -0x60d6: "Ti " -0x60d7: "Nie " -0x60d8: "Wang " -0x60d9: "Chuo " -0x60da: "Bu " -0x60db: "Hun " -0x60dc: "Xi " -0x60dd: "Tang " -0x60de: "Xin " -0x60df: "Wei " -0x60e0: "Hui " -0x60e1: "E " -0x60e2: "Rui " -0x60e3: "Zong " -0x60e4: "Jian " -0x60e5: "Yong " -0x60e6: "Dian " -0x60e7: "Ju " -0x60e8: "Can " -0x60e9: "Cheng " -0x60ea: "De " -0x60eb: "Bei " -0x60ec: "Qie " -0x60ed: "Can " -0x60ee: "Dan " -0x60ef: "Guan " -0x60f0: "Duo " -0x60f1: "Nao " -0x60f2: "Yun " -0x60f3: "Xiang " -0x60f4: "Zhui " -0x60f5: "Die " -0x60f6: "Huang " -0x60f7: "Chun " -0x60f8: "Qiong " -0x60f9: "Re " -0x60fa: "Xing " -0x60fb: "Ce " -0x60fc: "Bian " -0x60fd: "Hun " -0x60fe: "Zong " -0x60ff: "Ti " -/* x061 */ -0x6100: "Qiao " -0x6101: "Chou " -0x6102: "Bei " -0x6103: "Xuan " -0x6104: "Wei " -0x6105: "Ge " -0x6106: "Qian " -0x6107: "Wei " -0x6108: "Yu " -0x6109: "Yu " -0x610a: "Bi " -0x610b: "Xuan " -0x610c: "Huan " -0x610d: "Min " -0x610e: "Bi " -0x610f: "Yi " -0x6110: "Mian " -0x6111: "Yong " -0x6112: "Kai " -0x6113: "Dang " -0x6114: "Yin " -0x6115: "E " -0x6116: "Chen " -0x6117: "Mou " -0x6118: "Ke " -0x6119: "Ke " -0x611a: "Yu " -0x611b: "Ai " -0x611c: "Qie " -0x611d: "Yan " -0x611e: "Nuo " -0x611f: "Gan " -0x6120: "Yun " -0x6121: "Zong " -0x6122: "Sai " -0x6123: "Leng " -0x6124: "Fen " -0x6125: "[?] " -0x6126: "Kui " -0x6127: "Kui " -0x6128: "Que " -0x6129: "Gong " -0x612a: "Yun " -0x612b: "Su " -0x612c: "Su " -0x612d: "Qi " -0x612e: "Yao " -0x612f: "Song " -0x6130: "Huang " -0x6131: "Ji " -0x6132: "Gu " -0x6133: "Ju " -0x6134: "Chuang " -0x6135: "Ni " -0x6136: "Xie " -0x6137: "Kai " -0x6138: "Zheng " -0x6139: "Yong " -0x613a: "Cao " -0x613b: "Sun " -0x613c: "Shen " -0x613d: "Bo " -0x613e: "Kai " -0x613f: "Yuan " -0x6140: "Xie " -0x6141: "Hun " -0x6142: "Yong " -0x6143: "Yang " -0x6144: "Li " -0x6145: "Sao " -0x6146: "Tao " -0x6147: "Yin " -0x6148: "Ci " -0x6149: "Xu " -0x614a: "Qian " -0x614b: "Tai " -0x614c: "Huang " -0x614d: "Yun " -0x614e: "Shen " -0x614f: "Ming " -0x6150: "[?] " -0x6151: "She " -0x6152: "Cong " -0x6153: "Piao " -0x6154: "Mo " -0x6155: "Mu " -0x6156: "Guo " -0x6157: "Chi " -0x6158: "Can " -0x6159: "Can " -0x615a: "Can " -0x615b: "Cui " -0x615c: "Min " -0x615d: "Te " -0x615e: "Zhang " -0x615f: "Tong " -0x6160: "Ao " -0x6161: "Shuang " -0x6162: "Man " -0x6163: "Guan " -0x6164: "Que " -0x6165: "Zao " -0x6166: "Jiu " -0x6167: "Hui " -0x6168: "Kai " -0x6169: "Lian " -0x616a: "Ou " -0x616b: "Song " -0x616c: "Jin " -0x616d: "Yin " -0x616e: "Lu " -0x616f: "Shang " -0x6170: "Wei " -0x6171: "Tuan " -0x6172: "Man " -0x6173: "Qian " -0x6174: "She " -0x6175: "Yong " -0x6176: "Qing " -0x6177: "Kang " -0x6178: "Di " -0x6179: "Zhi " -0x617a: "Lou " -0x617b: "Juan " -0x617c: "Qi " -0x617d: "Qi " -0x617e: "Yu " -0x617f: "Ping " -0x6180: "Liao " -0x6181: "Cong " -0x6182: "You " -0x6183: "Chong " -0x6184: "Zhi " -0x6185: "Tong " -0x6186: "Cheng " -0x6187: "Qi " -0x6188: "Qu " -0x6189: "Peng " -0x618a: "Bei " -0x618b: "Bie " -0x618c: "Chun " -0x618d: "Jiao " -0x618e: "Zeng " -0x618f: "Chi " -0x6190: "Lian " -0x6191: "Ping " -0x6192: "Kui " -0x6193: "Hui " -0x6194: "Qiao " -0x6195: "Cheng " -0x6196: "Yin " -0x6197: "Yin " -0x6198: "Xi " -0x6199: "Xi " -0x619a: "Dan " -0x619b: "Tan " -0x619c: "Duo " -0x619d: "Dui " -0x619e: "Dui " -0x619f: "Su " -0x61a0: "Jue " -0x61a1: "Ce " -0x61a2: "Xiao " -0x61a3: "Fan " -0x61a4: "Fen " -0x61a5: "Lao " -0x61a6: "Lao " -0x61a7: "Chong " -0x61a8: "Han " -0x61a9: "Qi " -0x61aa: "Xian " -0x61ab: "Min " -0x61ac: "Jing " -0x61ad: "Liao " -0x61ae: "Wu " -0x61af: "Can " -0x61b0: "Jue " -0x61b1: "Cu " -0x61b2: "Xian " -0x61b3: "Tan " -0x61b4: "Sheng " -0x61b5: "Pi " -0x61b6: "Yi " -0x61b7: "Chu " -0x61b8: "Xian " -0x61b9: "Nao " -0x61ba: "Dan " -0x61bb: "Tan " -0x61bc: "Jing " -0x61bd: "Song " -0x61be: "Han " -0x61bf: "Jiao " -0x61c0: "Wai " -0x61c1: "Huan " -0x61c2: "Dong " -0x61c3: "Qin " -0x61c4: "Qin " -0x61c5: "Qu " -0x61c6: "Cao " -0x61c7: "Ken " -0x61c8: "Xie " -0x61c9: "Ying " -0x61ca: "Ao " -0x61cb: "Mao " -0x61cc: "Yi " -0x61cd: "Lin " -0x61ce: "Se " -0x61cf: "Jun " -0x61d0: "Huai " -0x61d1: "Men " -0x61d2: "Lan " -0x61d3: "Ai " -0x61d4: "Lin " -0x61d5: "Yan " -0x61d6: "Gua " -0x61d7: "Xia " -0x61d8: "Chi " -0x61d9: "Yu " -0x61da: "Yin " -0x61db: "Dai " -0x61dc: "Meng " -0x61dd: "Ai " -0x61de: "Meng " -0x61df: "Dui " -0x61e0: "Qi " -0x61e1: "Mo " -0x61e2: "Lan " -0x61e3: "Men " -0x61e4: "Chou " -0x61e5: "Zhi " -0x61e6: "Nuo " -0x61e7: "Nuo " -0x61e8: "Yan " -0x61e9: "Yang " -0x61ea: "Bo " -0x61eb: "Zhi " -0x61ec: "Kuang " -0x61ed: "Kuang " -0x61ee: "You " -0x61ef: "Fu " -0x61f0: "Liu " -0x61f1: "Mie " -0x61f2: "Cheng " -0x61f3: "[?] " -0x61f4: "Chan " -0x61f5: "Meng " -0x61f6: "Lan " -0x61f7: "Huai " -0x61f8: "Xuan " -0x61f9: "Rang " -0x61fa: "Chan " -0x61fb: "Ji " -0x61fc: "Ju " -0x61fd: "Huan " -0x61fe: "She " -0x61ff: "Yi " -/* x062 */ -0x6200: "Lian " -0x6201: "Nan " -0x6202: "Mi " -0x6203: "Tang " -0x6204: "Jue " -0x6205: "Gang " -0x6206: "Gang " -0x6207: "Gang " -0x6208: "Ge " -0x6209: "Yue " -0x620a: "Wu " -0x620b: "Jian " -0x620c: "Xu " -0x620d: "Shu " -0x620e: "Rong " -0x620f: "Xi " -0x6210: "Cheng " -0x6211: "Wo " -0x6212: "Jie " -0x6213: "Ge " -0x6214: "Jian " -0x6215: "Qiang " -0x6216: "Huo " -0x6217: "Qiang " -0x6218: "Zhan " -0x6219: "Dong " -0x621a: "Qi " -0x621b: "Jia " -0x621c: "Die " -0x621d: "Zei " -0x621e: "Jia " -0x621f: "Ji " -0x6220: "Shi " -0x6221: "Kan " -0x6222: "Ji " -0x6223: "Kui " -0x6224: "Gai " -0x6225: "Deng " -0x6226: "Zhan " -0x6227: "Chuang " -0x6228: "Ge " -0x6229: "Jian " -0x622a: "Jie " -0x622b: "Yu " -0x622c: "Jian " -0x622d: "Yan " -0x622e: "Lu " -0x622f: "Xi " -0x6230: "Zhan " -0x6231: "Xi " -0x6232: "Xi " -0x6233: "Chuo " -0x6234: "Dai " -0x6235: "Qu " -0x6236: "Hu " -0x6237: "Hu " -0x6238: "Hu " -0x6239: "E " -0x623a: "Shi " -0x623b: "Li " -0x623c: "Mao " -0x623d: "Hu " -0x623e: "Li " -0x623f: "Fang " -0x6240: "Suo " -0x6241: "Bian " -0x6242: "Dian " -0x6243: "Jiong " -0x6244: "Shang " -0x6245: "Yi " -0x6246: "Yi " -0x6247: "Shan " -0x6248: "Hu " -0x6249: "Fei " -0x624a: "Yan " -0x624b: "Shou " -0x624c: "T " -0x624d: "Cai " -0x624e: "Zha " -0x624f: "Qiu " -0x6250: "Le " -0x6251: "Bu " -0x6252: "Ba " -0x6253: "Da " -0x6254: "Reng " -0x6255: "Fu " -0x6256: "Hameru " -0x6257: "Zai " -0x6258: "Tuo " -0x6259: "Zhang " -0x625a: "Diao " -0x625b: "Kang " -0x625c: "Yu " -0x625d: "Ku " -0x625e: "Han " -0x625f: "Shen " -0x6260: "Cha " -0x6261: "Yi " -0x6262: "Gu " -0x6263: "Kou " -0x6264: "Wu " -0x6265: "Tuo " -0x6266: "Qian " -0x6267: "Zhi " -0x6268: "Ren " -0x6269: "Kuo " -0x626a: "Men " -0x626b: "Sao " -0x626c: "Yang " -0x626d: "Niu " -0x626e: "Ban " -0x626f: "Che " -0x6270: "Rao " -0x6271: "Xi " -0x6272: "Qian " -0x6273: "Ban " -0x6274: "Jia " -0x6275: "Yu " -0x6276: "Fu " -0x6277: "Ao " -0x6278: "Xi " -0x6279: "Pi " -0x627a: "Zhi " -0x627b: "Zi " -0x627c: "E " -0x627d: "Dun " -0x627e: "Zhao " -0x627f: "Cheng " -0x6280: "Ji " -0x6281: "Yan " -0x6282: "Kuang " -0x6283: "Bian " -0x6284: "Chao " -0x6285: "Ju " -0x6286: "Wen " -0x6287: "Hu " -0x6288: "Yue " -0x6289: "Jue " -0x628a: "Ba " -0x628b: "Qin " -0x628c: "Zhen " -0x628d: "Zheng " -0x628e: "Yun " -0x628f: "Wan " -0x6290: "Nu " -0x6291: "Yi " -0x6292: "Shu " -0x6293: "Zhua " -0x6294: "Pou " -0x6295: "Tou " -0x6296: "Dou " -0x6297: "Kang " -0x6298: "Zhe " -0x6299: "Pou " -0x629a: "Fu " -0x629b: "Pao " -0x629c: "Ba " -0x629d: "Ao " -0x629e: "Ze " -0x629f: "Tuan " -0x62a0: "Kou " -0x62a1: "Lun " -0x62a2: "Qiang " -0x62a3: "[?] " -0x62a4: "Hu " -0x62a5: "Bao " -0x62a6: "Bing " -0x62a7: "Zhi " -0x62a8: "Peng " -0x62a9: "Tan " -0x62aa: "Pu " -0x62ab: "Pi " -0x62ac: "Tai " -0x62ad: "Yao " -0x62ae: "Zhen " -0x62af: "Zha " -0x62b0: "Yang " -0x62b1: "Bao " -0x62b2: "He " -0x62b3: "Ni " -0x62b4: "Yi " -0x62b5: "Di " -0x62b6: "Chi " -0x62b7: "Pi " -0x62b8: "Za " -0x62b9: "Mo " -0x62ba: "Mo " -0x62bb: "Shen " -0x62bc: "Ya " -0x62bd: "Chou " -0x62be: "Qu " -0x62bf: "Min " -0x62c0: "Chu " -0x62c1: "Jia " -0x62c2: "Fu " -0x62c3: "Zhan " -0x62c4: "Zhu " -0x62c5: "Dan " -0x62c6: "Chai " -0x62c7: "Mu " -0x62c8: "Nian " -0x62c9: "La " -0x62ca: "Fu " -0x62cb: "Pao " -0x62cc: "Ban " -0x62cd: "Pai " -0x62ce: "Ling " -0x62cf: "Na " -0x62d0: "Guai " -0x62d1: "Qian " -0x62d2: "Ju " -0x62d3: "Tuo " -0x62d4: "Ba " -0x62d5: "Tuo " -0x62d6: "Tuo " -0x62d7: "Ao " -0x62d8: "Ju " -0x62d9: "Zhuo " -0x62da: "Pan " -0x62db: "Zhao " -0x62dc: "Bai " -0x62dd: "Bai " -0x62de: "Di " -0x62df: "Ni " -0x62e0: "Ju " -0x62e1: "Kuo " -0x62e2: "Long " -0x62e3: "Jian " -0x62e4: "[?] " -0x62e5: "Yong " -0x62e6: "Lan " -0x62e7: "Ning " -0x62e8: "Bo " -0x62e9: "Ze " -0x62ea: "Qian " -0x62eb: "Hen " -0x62ec: "Gua " -0x62ed: "Shi " -0x62ee: "Jie " -0x62ef: "Zheng " -0x62f0: "Nin " -0x62f1: "Gong " -0x62f2: "Gong " -0x62f3: "Quan " -0x62f4: "Shuan " -0x62f5: "Cun " -0x62f6: "Zan " -0x62f7: "Kao " -0x62f8: "Chi " -0x62f9: "Xie " -0x62fa: "Ce " -0x62fb: "Hui " -0x62fc: "Pin " -0x62fd: "Zhuai " -0x62fe: "Shi " -0x62ff: "Na " -/* x063 */ -0x6300: "Bo " -0x6301: "Chi " -0x6302: "Gua " -0x6303: "Zhi " -0x6304: "Kuo " -0x6305: "Duo " -0x6306: "Duo " -0x6307: "Zhi " -0x6308: "Qie " -0x6309: "An " -0x630a: "Nong " -0x630b: "Zhen " -0x630c: "Ge " -0x630d: "Jiao " -0x630e: "Ku " -0x630f: "Dong " -0x6310: "Ru " -0x6311: "Tiao " -0x6312: "Lie " -0x6313: "Zha " -0x6314: "Lu " -0x6315: "Die " -0x6316: "Wa " -0x6317: "Jue " -0x6318: "Mushiru " -0x6319: "Ju " -0x631a: "Zhi " -0x631b: "Luan " -0x631c: "Ya " -0x631d: "Zhua " -0x631e: "Ta " -0x631f: "Xie " -0x6320: "Nao " -0x6321: "Dang " -0x6322: "Jiao " -0x6323: "Zheng " -0x6324: "Ji " -0x6325: "Hui " -0x6326: "Xun " -0x6327: "Ku " -0x6328: "Ai " -0x6329: "Tuo " -0x632a: "Nuo " -0x632b: "Cuo " -0x632c: "Bo " -0x632d: "Geng " -0x632e: "Ti " -0x632f: "Zhen " -0x6330: "Cheng " -0x6331: "Suo " -0x6332: "Suo " -0x6333: "Keng " -0x6334: "Mei " -0x6335: "Long " -0x6336: "Ju " -0x6337: "Peng " -0x6338: "Jian " -0x6339: "Yi " -0x633a: "Ting " -0x633b: "Shan " -0x633c: "Nuo " -0x633d: "Wan " -0x633e: "Xie " -0x633f: "Cha " -0x6340: "Feng " -0x6341: "Jiao " -0x6342: "Wu " -0x6343: "Jun " -0x6344: "Jiu " -0x6345: "Tong " -0x6346: "Kun " -0x6347: "Huo " -0x6348: "Tu " -0x6349: "Zhuo " -0x634a: "Pou " -0x634b: "Le " -0x634c: "Ba " -0x634d: "Han " -0x634e: "Shao " -0x634f: "Nie " -0x6350: "Juan " -0x6351: "Ze " -0x6352: "Song " -0x6353: "Ye " -0x6354: "Jue " -0x6355: "Bu " -0x6356: "Huan " -0x6357: "Bu " -0x6358: "Zun " -0x6359: "Yi " -0x635a: "Zhai " -0x635b: "Lu " -0x635c: "Sou " -0x635d: "Tuo " -0x635e: "Lao " -0x635f: "Sun " -0x6360: "Bang " -0x6361: "Jian " -0x6362: "Huan " -0x6363: "Dao " -0x6364: "[?] " -0x6365: "Wan " -0x6366: "Qin " -0x6367: "Peng " -0x6368: "She " -0x6369: "Lie " -0x636a: "Min " -0x636b: "Men " -0x636c: "Fu " -0x636d: "Bai " -0x636e: "Ju " -0x636f: "Dao " -0x6370: "Wo " -0x6371: "Ai " -0x6372: "Juan " -0x6373: "Yue " -0x6374: "Zong " -0x6375: "Chen " -0x6376: "Chui " -0x6377: "Jie " -0x6378: "Tu " -0x6379: "Ben " -0x637a: "Na " -0x637b: "Nian " -0x637c: "Nuo " -0x637d: "Zu " -0x637e: "Wo " -0x637f: "Xi " -0x6380: "Xian " -0x6381: "Cheng " -0x6382: "Dian " -0x6383: "Sao " -0x6384: "Lun " -0x6385: "Qing " -0x6386: "Gang " -0x6387: "Duo " -0x6388: "Shou " -0x6389: "Diao " -0x638a: "Pou " -0x638b: "Di " -0x638c: "Zhang " -0x638d: "Gun " -0x638e: "Ji " -0x638f: "Tao " -0x6390: "Qia " -0x6391: "Qi " -0x6392: "Pai " -0x6393: "Shu " -0x6394: "Qian " -0x6395: "Ling " -0x6396: "Yi " -0x6397: "Ya " -0x6398: "Jue " -0x6399: "Zheng " -0x639a: "Liang " -0x639b: "Gua " -0x639c: "Yi " -0x639d: "Huo " -0x639e: "Shan " -0x639f: "Zheng " -0x63a0: "Lue " -0x63a1: "Cai " -0x63a2: "Tan " -0x63a3: "Che " -0x63a4: "Bing " -0x63a5: "Jie " -0x63a6: "Ti " -0x63a7: "Kong " -0x63a8: "Tui " -0x63a9: "Yan " -0x63aa: "Cuo " -0x63ab: "Zou " -0x63ac: "Ju " -0x63ad: "Tian " -0x63ae: "Qian " -0x63af: "Ken " -0x63b0: "Bai " -0x63b1: "Shou " -0x63b2: "Jie " -0x63b3: "Lu " -0x63b4: "Guo " -0x63b5: "Haba " -0x63b6: "[?] " -0x63b7: "Zhi " -0x63b8: "Dan " -0x63b9: "Mang " -0x63ba: "Xian " -0x63bb: "Sao " -0x63bc: "Guan " -0x63bd: "Peng " -0x63be: "Yuan " -0x63bf: "Nuo " -0x63c0: "Jian " -0x63c1: "Zhen " -0x63c2: "Jiu " -0x63c3: "Jian " -0x63c4: "Yu " -0x63c5: "Yan " -0x63c6: "Kui " -0x63c7: "Nan " -0x63c8: "Hong " -0x63c9: "Rou " -0x63ca: "Pi " -0x63cb: "Wei " -0x63cc: "Sai " -0x63cd: "Zou " -0x63ce: "Xuan " -0x63cf: "Miao " -0x63d0: "Ti " -0x63d1: "Nie " -0x63d2: "Cha " -0x63d3: "Shi " -0x63d4: "Zong " -0x63d5: "Zhen " -0x63d6: "Yi " -0x63d7: "Shun " -0x63d8: "Heng " -0x63d9: "Bian " -0x63da: "Yang " -0x63db: "Huan " -0x63dc: "Yan " -0x63dd: "Zuan " -0x63de: "An " -0x63df: "Xu " -0x63e0: "Ya " -0x63e1: "Wo " -0x63e2: "Ke " -0x63e3: "Chuai " -0x63e4: "Ji " -0x63e5: "Ti " -0x63e6: "La " -0x63e7: "La " -0x63e8: "Cheng " -0x63e9: "Kai " -0x63ea: "Jiu " -0x63eb: "Jiu " -0x63ec: "Tu " -0x63ed: "Jie " -0x63ee: "Hui " -0x63ef: "Geng " -0x63f0: "Chong " -0x63f1: "Shuo " -0x63f2: "She " -0x63f3: "Xie " -0x63f4: "Yuan " -0x63f5: "Qian " -0x63f6: "Ye " -0x63f7: "Cha " -0x63f8: "Zha " -0x63f9: "Bei " -0x63fa: "Yao " -0x63fb: "[?] " -0x63fc: "[?] " -0x63fd: "Lan " -0x63fe: "Wen " -0x63ff: "Qin " -/* x064 */ -0x6400: "Chan " -0x6401: "Ge " -0x6402: "Lou " -0x6403: "Zong " -0x6404: "Geng " -0x6405: "Jiao " -0x6406: "Gou " -0x6407: "Qin " -0x6408: "Yong " -0x6409: "Que " -0x640a: "Chou " -0x640b: "Chi " -0x640c: "Zhan " -0x640d: "Sun " -0x640e: "Sun " -0x640f: "Bo " -0x6410: "Chu " -0x6411: "Rong " -0x6412: "Beng " -0x6413: "Cuo " -0x6414: "Sao " -0x6415: "Ke " -0x6416: "Yao " -0x6417: "Dao " -0x6418: "Zhi " -0x6419: "Nu " -0x641a: "Xie " -0x641b: "Jian " -0x641c: "Sou " -0x641d: "Qiu " -0x641e: "Gao " -0x641f: "Xian " -0x6420: "Shuo " -0x6421: "Sang " -0x6422: "Jin " -0x6423: "Mie " -0x6424: "E " -0x6425: "Chui " -0x6426: "Nuo " -0x6427: "Shan " -0x6428: "Ta " -0x6429: "Jie " -0x642a: "Tang " -0x642b: "Pan " -0x642c: "Ban " -0x642d: "Da " -0x642e: "Li " -0x642f: "Tao " -0x6430: "Hu " -0x6431: "Zhi " -0x6432: "Wa " -0x6433: "Xia " -0x6434: "Qian " -0x6435: "Wen " -0x6436: "Qiang " -0x6437: "Tian " -0x6438: "Zhen " -0x6439: "E " -0x643a: "Xi " -0x643b: "Nuo " -0x643c: "Quan " -0x643d: "Cha " -0x643e: "Zha " -0x643f: "Ge " -0x6440: "Wu " -0x6441: "En " -0x6442: "She " -0x6443: "Kang " -0x6444: "She " -0x6445: "Shu " -0x6446: "Bai " -0x6447: "Yao " -0x6448: "Bin " -0x6449: "Sou " -0x644a: "Tan " -0x644b: "Sa " -0x644c: "Chan " -0x644d: "Suo " -0x644e: "Liao " -0x644f: "Chong " -0x6450: "Chuang " -0x6451: "Guo " -0x6452: "Bing " -0x6453: "Feng " -0x6454: "Shuai " -0x6455: "Di " -0x6456: "Qi " -0x6457: "Sou " -0x6458: "Zhai " -0x6459: "Lian " -0x645a: "Tang " -0x645b: "Chi " -0x645c: "Guan " -0x645d: "Lu " -0x645e: "Luo " -0x645f: "Lou " -0x6460: "Zong " -0x6461: "Gai " -0x6462: "Hu " -0x6463: "Zha " -0x6464: "Chuang " -0x6465: "Tang " -0x6466: "Hua " -0x6467: "Cui " -0x6468: "Nai " -0x6469: "Mo " -0x646a: "Jiang " -0x646b: "Gui " -0x646c: "Ying " -0x646d: "Zhi " -0x646e: "Ao " -0x646f: "Zhi " -0x6470: "Nie " -0x6471: "Man " -0x6472: "Shan " -0x6473: "Kou " -0x6474: "Shu " -0x6475: "Suo " -0x6476: "Tuan " -0x6477: "Jiao " -0x6478: "Mo " -0x6479: "Mo " -0x647a: "Zhe " -0x647b: "Xian " -0x647c: "Keng " -0x647d: "Piao " -0x647e: "Jiang " -0x647f: "Yin " -0x6480: "Gou " -0x6481: "Qian " -0x6482: "Lue " -0x6483: "Ji " -0x6484: "Ying " -0x6485: "Jue " -0x6486: "Pie " -0x6487: "Pie " -0x6488: "Lao " -0x6489: "Dun " -0x648a: "Xian " -0x648b: "Ruan " -0x648c: "Kui " -0x648d: "Zan " -0x648e: "Yi " -0x648f: "Xun " -0x6490: "Cheng " -0x6491: "Cheng " -0x6492: "Sa " -0x6493: "Nao " -0x6494: "Heng " -0x6495: "Si " -0x6496: "Qian " -0x6497: "Huang " -0x6498: "Da " -0x6499: "Zun " -0x649a: "Nian " -0x649b: "Lin " -0x649c: "Zheng " -0x649d: "Hui " -0x649e: "Zhuang " -0x649f: "Jiao " -0x64a0: "Ji " -0x64a1: "Cao " -0x64a2: "Dan " -0x64a3: "Dan " -0x64a4: "Che " -0x64a5: "Bo " -0x64a6: "Che " -0x64a7: "Jue " -0x64a8: "Xiao " -0x64a9: "Liao " -0x64aa: "Ben " -0x64ab: "Fu " -0x64ac: "Qiao " -0x64ad: "Bo " -0x64ae: "Cuo " -0x64af: "Zhuo " -0x64b0: "Zhuan " -0x64b1: "Tuo " -0x64b2: "Pu " -0x64b3: "Qin " -0x64b4: "Dun " -0x64b5: "Nian " -0x64b6: "[?] " -0x64b7: "Xie " -0x64b8: "Lu " -0x64b9: "Jiao " -0x64ba: "Cuan " -0x64bb: "Ta " -0x64bc: "Han " -0x64bd: "Qiao " -0x64be: "Zhua " -0x64bf: "Jian " -0x64c0: "Gan " -0x64c1: "Yong " -0x64c2: "Lei " -0x64c3: "Kuo " -0x64c4: "Lu " -0x64c5: "Shan " -0x64c6: "Zhuo " -0x64c7: "Ze " -0x64c8: "Pu " -0x64c9: "Chuo " -0x64ca: "Ji " -0x64cb: "Dang " -0x64cc: "Suo " -0x64cd: "Cao " -0x64ce: "Qing " -0x64cf: "Jing " -0x64d0: "Huan " -0x64d1: "Jie " -0x64d2: "Qin " -0x64d3: "Kuai " -0x64d4: "Dan " -0x64d5: "Xi " -0x64d6: "Ge " -0x64d7: "Pi " -0x64d8: "Bo " -0x64d9: "Ao " -0x64da: "Ju " -0x64db: "Ye " -0x64dc: "[?] " -0x64dd: "Mang " -0x64de: "Sou " -0x64df: "Mi " -0x64e0: "Ji " -0x64e1: "Tai " -0x64e2: "Zhuo " -0x64e3: "Dao " -0x64e4: "Xing " -0x64e5: "Lan " -0x64e6: "Ca " -0x64e7: "Ju " -0x64e8: "Ye " -0x64e9: "Ru " -0x64ea: "Ye " -0x64eb: "Ye " -0x64ec: "Ni " -0x64ed: "Hu " -0x64ee: "Ji " -0x64ef: "Bin " -0x64f0: "Ning " -0x64f1: "Ge " -0x64f2: "Zhi " -0x64f3: "Jie " -0x64f4: "Kuo " -0x64f5: "Mo " -0x64f6: "Jian " -0x64f7: "Xie " -0x64f8: "Lie " -0x64f9: "Tan " -0x64fa: "Bai " -0x64fb: "Sou " -0x64fc: "Lu " -0x64fd: "Lue " -0x64fe: "Rao " -0x64ff: "Zhi " -/* x065 */ -0x6500: "Pan " -0x6501: "Yang " -0x6502: "Lei " -0x6503: "Sa " -0x6504: "Shu " -0x6505: "Zan " -0x6506: "Nian " -0x6507: "Xian " -0x6508: "Jun " -0x6509: "Huo " -0x650a: "Li " -0x650b: "La " -0x650c: "Han " -0x650d: "Ying " -0x650e: "Lu " -0x650f: "Long " -0x6510: "Qian " -0x6511: "Qian " -0x6512: "Zan " -0x6513: "Qian " -0x6514: "Lan " -0x6515: "San " -0x6516: "Ying " -0x6517: "Mei " -0x6518: "Rang " -0x6519: "Chan " -0x651a: "[?] " -0x651b: "Cuan " -0x651c: "Xi " -0x651d: "She " -0x651e: "Luo " -0x651f: "Jun " -0x6520: "Mi " -0x6521: "Li " -0x6522: "Zan " -0x6523: "Luan " -0x6524: "Tan " -0x6525: "Zuan " -0x6526: "Li " -0x6527: "Dian " -0x6528: "Wa " -0x6529: "Dang " -0x652a: "Jiao " -0x652b: "Jue " -0x652c: "Lan " -0x652d: "Li " -0x652e: "Nang " -0x652f: "Zhi " -0x6530: "Gui " -0x6531: "Gui " -0x6532: "Qi " -0x6533: "Xin " -0x6534: "Pu " -0x6535: "Sui " -0x6536: "Shou " -0x6537: "Kao " -0x6538: "You " -0x6539: "Gai " -0x653a: "Yi " -0x653b: "Gong " -0x653c: "Gan " -0x653d: "Ban " -0x653e: "Fang " -0x653f: "Zheng " -0x6540: "Bo " -0x6541: "Dian " -0x6542: "Kou " -0x6543: "Min " -0x6544: "Wu " -0x6545: "Gu " -0x6546: "He " -0x6547: "Ce " -0x6548: "Xiao " -0x6549: "Mi " -0x654a: "Chu " -0x654b: "Ge " -0x654c: "Di " -0x654d: "Xu " -0x654e: "Jiao " -0x654f: "Min " -0x6550: "Chen " -0x6551: "Jiu " -0x6552: "Zhen " -0x6553: "Duo " -0x6554: "Yu " -0x6555: "Chi " -0x6556: "Ao " -0x6557: "Bai " -0x6558: "Xu " -0x6559: "Jiao " -0x655a: "Duo " -0x655b: "Lian " -0x655c: "Nie " -0x655d: "Bi " -0x655e: "Chang " -0x655f: "Dian " -0x6560: "Duo " -0x6561: "Yi " -0x6562: "Gan " -0x6563: "San " -0x6564: "Ke " -0x6565: "Yan " -0x6566: "Dun " -0x6567: "Qi " -0x6568: "Dou " -0x6569: "Xiao " -0x656a: "Duo " -0x656b: "Jiao " -0x656c: "Jing " -0x656d: "Yang " -0x656e: "Xia " -0x656f: "Min " -0x6570: "Shu " -0x6571: "Ai " -0x6572: "Qiao " -0x6573: "Ai " -0x6574: "Zheng " -0x6575: "Di " -0x6576: "Zhen " -0x6577: "Fu " -0x6578: "Shu " -0x6579: "Liao " -0x657a: "Qu " -0x657b: "Xiong " -0x657c: "Xi " -0x657d: "Jiao " -0x657e: "Sen " -0x657f: "Jiao " -0x6580: "Zhuo " -0x6581: "Yi " -0x6582: "Lian " -0x6583: "Bi " -0x6584: "Li " -0x6585: "Xiao " -0x6586: "Xiao " -0x6587: "Wen " -0x6588: "Xue " -0x6589: "Qi " -0x658a: "Qi " -0x658b: "Zhai " -0x658c: "Bin " -0x658d: "Jue " -0x658e: "Zhai " -0x658f: "[?] " -0x6590: "Fei " -0x6591: "Ban " -0x6592: "Ban " -0x6593: "Lan " -0x6594: "Yu " -0x6595: "Lan " -0x6596: "Wei " -0x6597: "Dou " -0x6598: "Sheng " -0x6599: "Liao " -0x659a: "Jia " -0x659b: "Hu " -0x659c: "Xie " -0x659d: "Jia " -0x659e: "Yu " -0x659f: "Zhen " -0x65a0: "Jiao " -0x65a1: "Wo " -0x65a2: "Tou " -0x65a3: "Chu " -0x65a4: "Jin " -0x65a5: "Chi " -0x65a6: "Yin " -0x65a7: "Fu " -0x65a8: "Qiang " -0x65a9: "Zhan " -0x65aa: "Qu " -0x65ab: "Zhuo " -0x65ac: "Zhan " -0x65ad: "Duan " -0x65ae: "Zhuo " -0x65af: "Si " -0x65b0: "Xin " -0x65b1: "Zhuo " -0x65b2: "Zhuo " -0x65b3: "Qin " -0x65b4: "Lin " -0x65b5: "Zhuo " -0x65b6: "Chu " -0x65b7: "Duan " -0x65b8: "Zhu " -0x65b9: "Fang " -0x65ba: "Xie " -0x65bb: "Hang " -0x65bc: "Yu " -0x65bd: "Shi " -0x65be: "Pei " -0x65bf: "You " -0x65c0: "Mye " -0x65c1: "Pang " -0x65c2: "Qi " -0x65c3: "Zhan " -0x65c4: "Mao " -0x65c5: "Lu " -0x65c6: "Pei " -0x65c7: "Pi " -0x65c8: "Liu " -0x65c9: "Fu " -0x65ca: "Fang " -0x65cb: "Xuan " -0x65cc: "Jing " -0x65cd: "Jing " -0x65ce: "Ni " -0x65cf: "Zu " -0x65d0: "Zhao " -0x65d1: "Yi " -0x65d2: "Liu " -0x65d3: "Shao " -0x65d4: "Jian " -0x65d5: "Es " -0x65d6: "Yi " -0x65d7: "Qi " -0x65d8: "Zhi " -0x65d9: "Fan " -0x65da: "Piao " -0x65db: "Fan " -0x65dc: "Zhan " -0x65dd: "Guai " -0x65de: "Sui " -0x65df: "Yu " -0x65e0: "Wu " -0x65e1: "Ji " -0x65e2: "Ji " -0x65e3: "Ji " -0x65e4: "Huo " -0x65e5: "Ri " -0x65e6: "Dan " -0x65e7: "Jiu " -0x65e8: "Zhi " -0x65e9: "Zao " -0x65ea: "Xie " -0x65eb: "Tiao " -0x65ec: "Xun " -0x65ed: "Xu " -0x65ee: "Xu " -0x65ef: "Xu " -0x65f0: "Gan " -0x65f1: "Han " -0x65f2: "Tai " -0x65f3: "Di " -0x65f4: "Xu " -0x65f5: "Chan " -0x65f6: "Shi " -0x65f7: "Kuang " -0x65f8: "Yang " -0x65f9: "Shi " -0x65fa: "Wang " -0x65fb: "Min " -0x65fc: "Min " -0x65fd: "Tun " -0x65fe: "Chun " -0x65ff: "Wu " -/* x066 */ -0x6600: "Yun " -0x6601: "Bei " -0x6602: "Ang " -0x6603: "Ze " -0x6604: "Ban " -0x6605: "Jie " -0x6606: "Kun " -0x6607: "Sheng " -0x6608: "Hu " -0x6609: "Fang " -0x660a: "Hao " -0x660b: "Gui " -0x660c: "Chang " -0x660d: "Xuan " -0x660e: "Ming " -0x660f: "Hun " -0x6610: "Fen " -0x6611: "Qin " -0x6612: "Hu " -0x6613: "Yi " -0x6614: "Xi " -0x6615: "Xin " -0x6616: "Yan " -0x6617: "Ze " -0x6618: "Fang " -0x6619: "Tan " -0x661a: "Shen " -0x661b: "Ju " -0x661c: "Yang " -0x661d: "Zan " -0x661e: "Bing " -0x661f: "Xing " -0x6620: "Ying " -0x6621: "Xuan " -0x6622: "Pei " -0x6623: "Zhen " -0x6624: "Ling " -0x6625: "Chun " -0x6626: "Hao " -0x6627: "Mei " -0x6628: "Zuo " -0x6629: "Mo " -0x662a: "Bian " -0x662b: "Xu " -0x662c: "Hun " -0x662d: "Zhao " -0x662e: "Zong " -0x662f: "Shi " -0x6630: "Shi " -0x6631: "Yu " -0x6632: "Fei " -0x6633: "Die " -0x6634: "Mao " -0x6635: "Ni " -0x6636: "Chang " -0x6637: "Wen " -0x6638: "Dong " -0x6639: "Ai " -0x663a: "Bing " -0x663b: "Ang " -0x663c: "Zhou " -0x663d: "Long " -0x663e: "Xian " -0x663f: "Kuang " -0x6640: "Tiao " -0x6641: "Chao " -0x6642: "Shi " -0x6643: "Huang " -0x6644: "Huang " -0x6645: "Xuan " -0x6646: "Kui " -0x6647: "Xu " -0x6648: "Jiao " -0x6649: "Jin " -0x664a: "Zhi " -0x664b: "Jin " -0x664c: "Shang " -0x664d: "Tong " -0x664e: "Hong " -0x664f: "Yan " -0x6650: "Gai " -0x6651: "Xiang " -0x6652: "Shai " -0x6653: "Xiao " -0x6654: "Ye " -0x6655: "Yun " -0x6656: "Hui " -0x6657: "Han " -0x6658: "Han " -0x6659: "Jun " -0x665a: "Wan " -0x665b: "Xian " -0x665c: "Kun " -0x665d: "Zhou " -0x665e: "Xi " -0x665f: "Cheng " -0x6660: "Sheng " -0x6661: "Bu " -0x6662: "Zhe " -0x6663: "Zhe " -0x6664: "Wu " -0x6665: "Han " -0x6666: "Hui " -0x6667: "Hao " -0x6668: "Chen " -0x6669: "Wan " -0x666a: "Tian " -0x666b: "Zhuo " -0x666c: "Zui " -0x666d: "Zhou " -0x666e: "Pu " -0x666f: "Jing " -0x6670: "Xi " -0x6671: "Shan " -0x6672: "Yi " -0x6673: "Xi " -0x6674: "Qing " -0x6675: "Qi " -0x6676: "Jing " -0x6677: "Gui " -0x6678: "Zhen " -0x6679: "Yi " -0x667a: "Zhi " -0x667b: "An " -0x667c: "Wan " -0x667d: "Lin " -0x667e: "Liang " -0x667f: "Chang " -0x6680: "Wang " -0x6681: "Xiao " -0x6682: "Zan " -0x6683: "Hi " -0x6684: "Xuan " -0x6685: "Xuan " -0x6686: "Yi " -0x6687: "Xia " -0x6688: "Yun " -0x6689: "Hui " -0x668a: "Fu " -0x668b: "Min " -0x668c: "Kui " -0x668d: "He " -0x668e: "Ying " -0x668f: "Du " -0x6690: "Wei " -0x6691: "Shu " -0x6692: "Qing " -0x6693: "Mao " -0x6694: "Nan " -0x6695: "Jian " -0x6696: "Nuan " -0x6697: "An " -0x6698: "Yang " -0x6699: "Chun " -0x669a: "Yao " -0x669b: "Suo " -0x669c: "Jin " -0x669d: "Ming " -0x669e: "Jiao " -0x669f: "Kai " -0x66a0: "Gao " -0x66a1: "Weng " -0x66a2: "Chang " -0x66a3: "Qi " -0x66a4: "Hao " -0x66a5: "Yan " -0x66a6: "Li " -0x66a7: "Ai " -0x66a8: "Ji " -0x66a9: "Gui " -0x66aa: "Men " -0x66ab: "Zan " -0x66ac: "Xie " -0x66ad: "Hao " -0x66ae: "Mu " -0x66af: "Mo " -0x66b0: "Cong " -0x66b1: "Ni " -0x66b2: "Zhang " -0x66b3: "Hui " -0x66b4: "Bao " -0x66b5: "Han " -0x66b6: "Xuan " -0x66b7: "Chuan " -0x66b8: "Liao " -0x66b9: "Xian " -0x66ba: "Dan " -0x66bb: "Jing " -0x66bc: "Pie " -0x66bd: "Lin " -0x66be: "Tun " -0x66bf: "Xi " -0x66c0: "Yi " -0x66c1: "Ji " -0x66c2: "Huang " -0x66c3: "Tai " -0x66c4: "Ye " -0x66c5: "Ye " -0x66c6: "Li " -0x66c7: "Tan " -0x66c8: "Tong " -0x66c9: "Xiao " -0x66ca: "Fei " -0x66cb: "Qin " -0x66cc: "Zhao " -0x66cd: "Hao " -0x66ce: "Yi " -0x66cf: "Xiang " -0x66d0: "Xing " -0x66d1: "Sen " -0x66d2: "Jiao " -0x66d3: "Bao " -0x66d4: "Jing " -0x66d5: "Yian " -0x66d6: "Ai " -0x66d7: "Ye " -0x66d8: "Ru " -0x66d9: "Shu " -0x66da: "Meng " -0x66db: "Xun " -0x66dc: "Yao " -0x66dd: "Pu " -0x66de: "Li " -0x66df: "Chen " -0x66e0: "Kuang " -0x66e1: "Die " -0x66e2: "[?] " -0x66e3: "Yan " -0x66e4: "Huo " -0x66e5: "Lu " -0x66e6: "Xi " -0x66e7: "Rong " -0x66e8: "Long " -0x66e9: "Nang " -0x66ea: "Luo " -0x66eb: "Luan " -0x66ec: "Shai " -0x66ed: "Tang " -0x66ee: "Yan " -0x66ef: "Chu " -0x66f0: "Yue " -0x66f1: "Yue " -0x66f2: "Qu " -0x66f3: "Yi " -0x66f4: "Geng " -0x66f5: "Ye " -0x66f6: "Hu " -0x66f7: "He " -0x66f8: "Shu " -0x66f9: "Cao " -0x66fa: "Cao " -0x66fb: "Noboru " -0x66fc: "Man " -0x66fd: "Ceng " -0x66fe: "Ceng " -0x66ff: "Ti " -/* x067 */ -0x6700: "Zui " -0x6701: "Can " -0x6702: "Xu " -0x6703: "Hui " -0x6704: "Yin " -0x6705: "Qie " -0x6706: "Fen " -0x6707: "Pi " -0x6708: "Yue " -0x6709: "You " -0x670a: "Ruan " -0x670b: "Peng " -0x670c: "Ban " -0x670d: "Fu " -0x670e: "Ling " -0x670f: "Fei " -0x6710: "Qu " -0x6711: "[?] " -0x6712: "Nu " -0x6713: "Tiao " -0x6714: "Shuo " -0x6715: "Zhen " -0x6716: "Lang " -0x6717: "Lang " -0x6718: "Juan " -0x6719: "Ming " -0x671a: "Huang " -0x671b: "Wang " -0x671c: "Tun " -0x671d: "Zhao " -0x671e: "Ji " -0x671f: "Qi " -0x6720: "Ying " -0x6721: "Zong " -0x6722: "Wang " -0x6723: "Tong " -0x6724: "Lang " -0x6725: "[?] " -0x6726: "Meng " -0x6727: "Long " -0x6728: "Mu " -0x6729: "Deng " -0x672a: "Wei " -0x672b: "Mo " -0x672c: "Ben " -0x672d: "Zha " -0x672e: "Zhu " -0x672f: "Zhu " -0x6730: "[?] " -0x6731: "Zhu " -0x6732: "Ren " -0x6733: "Ba " -0x6734: "Po " -0x6735: "Duo " -0x6736: "Duo " -0x6737: "Dao " -0x6738: "Li " -0x6739: "Qiu " -0x673a: "Ji " -0x673b: "Jiu " -0x673c: "Bi " -0x673d: "Xiu " -0x673e: "Ting " -0x673f: "Ci " -0x6740: "Sha " -0x6741: "Eburi " -0x6742: "Za " -0x6743: "Quan " -0x6744: "Qian " -0x6745: "Yu " -0x6746: "Gan " -0x6747: "Wu " -0x6748: "Cha " -0x6749: "Shan " -0x674a: "Xun " -0x674b: "Fan " -0x674c: "Wu " -0x674d: "Zi " -0x674e: "Li " -0x674f: "Xing " -0x6750: "Cai " -0x6751: "Cun " -0x6752: "Ren " -0x6753: "Shao " -0x6754: "Tuo " -0x6755: "Di " -0x6756: "Zhang " -0x6757: "Mang " -0x6758: "Chi " -0x6759: "Yi " -0x675a: "Gu " -0x675b: "Gong " -0x675c: "Du " -0x675d: "Yi " -0x675e: "Qi " -0x675f: "Shu " -0x6760: "Gang " -0x6761: "Tiao " -0x6762: "Moku " -0x6763: "Soma " -0x6764: "Tochi " -0x6765: "Lai " -0x6766: "Sugi " -0x6767: "Mang " -0x6768: "Yang " -0x6769: "Ma " -0x676a: "Miao " -0x676b: "Si " -0x676c: "Yuan " -0x676d: "Hang " -0x676e: "Fei " -0x676f: "Bei " -0x6770: "Jie " -0x6771: "Dong " -0x6772: "Gao " -0x6773: "Yao " -0x6774: "Xian " -0x6775: "Chu " -0x6776: "Qun " -0x6777: "Pa " -0x6778: "Shu " -0x6779: "Hua " -0x677a: "Xin " -0x677b: "Chou " -0x677c: "Zhu " -0x677d: "Chou " -0x677e: "Song " -0x677f: "Ban " -0x6780: "Song " -0x6781: "Ji " -0x6782: "Yue " -0x6783: "Jin " -0x6784: "Gou " -0x6785: "Ji " -0x6786: "Mao " -0x6787: "Pi " -0x6788: "Bi " -0x6789: "Wang " -0x678a: "Ang " -0x678b: "Fang " -0x678c: "Fen " -0x678d: "Yi " -0x678e: "Fu " -0x678f: "Nan " -0x6790: "Xi " -0x6791: "Hu " -0x6792: "Ya " -0x6793: "Dou " -0x6794: "Xun " -0x6795: "Zhen " -0x6796: "Yao " -0x6797: "Lin " -0x6798: "Rui " -0x6799: "E " -0x679a: "Mei " -0x679b: "Zhao " -0x679c: "Guo " -0x679d: "Zhi " -0x679e: "Cong " -0x679f: "Yun " -0x67a0: "Waku " -0x67a1: "Dou " -0x67a2: "Shu " -0x67a3: "Zao " -0x67a4: "[?] " -0x67a5: "Li " -0x67a6: "Haze " -0x67a7: "Jian " -0x67a8: "Cheng " -0x67a9: "Matsu " -0x67aa: "Qiang " -0x67ab: "Feng " -0x67ac: "Nan " -0x67ad: "Xiao " -0x67ae: "Xian " -0x67af: "Ku " -0x67b0: "Ping " -0x67b1: "Yi " -0x67b2: "Xi " -0x67b3: "Zhi " -0x67b4: "Guai " -0x67b5: "Xiao " -0x67b6: "Jia " -0x67b7: "Jia " -0x67b8: "Gou " -0x67b9: "Fu " -0x67ba: "Mo " -0x67bb: "Yi " -0x67bc: "Ye " -0x67bd: "Ye " -0x67be: "Shi " -0x67bf: "Nie " -0x67c0: "Bi " -0x67c1: "Duo " -0x67c2: "Yi " -0x67c3: "Ling " -0x67c4: "Bing " -0x67c5: "Ni " -0x67c6: "La " -0x67c7: "He " -0x67c8: "Pan " -0x67c9: "Fan " -0x67ca: "Zhong " -0x67cb: "Dai " -0x67cc: "Ci " -0x67cd: "Yang " -0x67ce: "Fu " -0x67cf: "Bo " -0x67d0: "Mou " -0x67d1: "Gan " -0x67d2: "Qi " -0x67d3: "Ran " -0x67d4: "Rou " -0x67d5: "Mao " -0x67d6: "Zhao " -0x67d7: "Song " -0x67d8: "Zhe " -0x67d9: "Xia " -0x67da: "You " -0x67db: "Shen " -0x67dc: "Ju " -0x67dd: "Tuo " -0x67de: "Zuo " -0x67df: "Nan " -0x67e0: "Ning " -0x67e1: "Yong " -0x67e2: "Di " -0x67e3: "Zhi " -0x67e4: "Zha " -0x67e5: "Cha " -0x67e6: "Dan " -0x67e7: "Gu " -0x67e8: "Pu " -0x67e9: "Jiu " -0x67ea: "Ao " -0x67eb: "Fu " -0x67ec: "Jian " -0x67ed: "Bo " -0x67ee: "Duo " -0x67ef: "Ke " -0x67f0: "Nai " -0x67f1: "Zhu " -0x67f2: "Bi " -0x67f3: "Liu " -0x67f4: "Chai " -0x67f5: "Zha " -0x67f6: "Si " -0x67f7: "Zhu " -0x67f8: "Pei " -0x67f9: "Shi " -0x67fa: "Guai " -0x67fb: "Cha " -0x67fc: "Yao " -0x67fd: "Jue " -0x67fe: "Jiu " -0x67ff: "Shi " -/* x068 */ -0x6800: "Zhi " -0x6801: "Liu " -0x6802: "Mei " -0x6803: "Hoy " -0x6804: "Rong " -0x6805: "Zha " -0x6806: "[?] " -0x6807: "Biao " -0x6808: "Zhan " -0x6809: "Jie " -0x680a: "Long " -0x680b: "Dong " -0x680c: "Lu " -0x680d: "Sayng " -0x680e: "Li " -0x680f: "Lan " -0x6810: "Yong " -0x6811: "Shu " -0x6812: "Xun " -0x6813: "Shuan " -0x6814: "Qi " -0x6815: "Zhen " -0x6816: "Qi " -0x6817: "Li " -0x6818: "Yi " -0x6819: "Xiang " -0x681a: "Zhen " -0x681b: "Li " -0x681c: "Su " -0x681d: "Gua " -0x681e: "Kan " -0x681f: "Bing " -0x6820: "Ren " -0x6821: "Xiao " -0x6822: "Bo " -0x6823: "Ren " -0x6824: "Bing " -0x6825: "Zi " -0x6826: "Chou " -0x6827: "Yi " -0x6828: "Jie " -0x6829: "Xu " -0x682a: "Zhu " -0x682b: "Jian " -0x682c: "Zui " -0x682d: "Er " -0x682e: "Er " -0x682f: "You " -0x6830: "Fa " -0x6831: "Gong " -0x6832: "Kao " -0x6833: "Lao " -0x6834: "Zhan " -0x6835: "Li " -0x6836: "Yin " -0x6837: "Yang " -0x6838: "He " -0x6839: "Gen " -0x683a: "Zhi " -0x683b: "Chi " -0x683c: "Ge " -0x683d: "Zai " -0x683e: "Luan " -0x683f: "Fu " -0x6840: "Jie " -0x6841: "Hang " -0x6842: "Gui " -0x6843: "Tao " -0x6844: "Guang " -0x6845: "Wei " -0x6846: "Kuang " -0x6847: "Ru " -0x6848: "An " -0x6849: "An " -0x684a: "Juan " -0x684b: "Yi " -0x684c: "Zhuo " -0x684d: "Ku " -0x684e: "Zhi " -0x684f: "Qiong " -0x6850: "Tong " -0x6851: "Sang " -0x6852: "Sang " -0x6853: "Huan " -0x6854: "Jie " -0x6855: "Jiu " -0x6856: "Xue " -0x6857: "Duo " -0x6858: "Zhui " -0x6859: "Yu " -0x685a: "Zan " -0x685b: "Kasei " -0x685c: "Ying " -0x685d: "Masu " -0x685e: "[?] " -0x685f: "Zhan " -0x6860: "Ya " -0x6861: "Nao " -0x6862: "Zhen " -0x6863: "Dang " -0x6864: "Qi " -0x6865: "Qiao " -0x6866: "Hua " -0x6867: "Kuai " -0x6868: "Jiang " -0x6869: "Zhuang " -0x686a: "Xun " -0x686b: "Suo " -0x686c: "Sha " -0x686d: "Zhen " -0x686e: "Bei " -0x686f: "Ting " -0x6870: "Gua " -0x6871: "Jing " -0x6872: "Bo " -0x6873: "Ben " -0x6874: "Fu " -0x6875: "Rui " -0x6876: "Tong " -0x6877: "Jue " -0x6878: "Xi " -0x6879: "Lang " -0x687a: "Liu " -0x687b: "Feng " -0x687c: "Qi " -0x687d: "Wen " -0x687e: "Jun " -0x687f: "Gan " -0x6880: "Cu " -0x6881: "Liang " -0x6882: "Qiu " -0x6883: "Ting " -0x6884: "You " -0x6885: "Mei " -0x6886: "Bang " -0x6887: "Long " -0x6888: "Peng " -0x6889: "Zhuang " -0x688a: "Di " -0x688b: "Xuan " -0x688c: "Tu " -0x688d: "Zao " -0x688e: "Ao " -0x688f: "Gu " -0x6890: "Bi " -0x6891: "Di " -0x6892: "Han " -0x6893: "Zi " -0x6894: "Zhi " -0x6895: "Ren " -0x6896: "Bei " -0x6897: "Geng " -0x6898: "Jian " -0x6899: "Huan " -0x689a: "Wan " -0x689b: "Nuo " -0x689c: "Jia " -0x689d: "Tiao " -0x689e: "Ji " -0x689f: "Xiao " -0x68a0: "Lu " -0x68a1: "Huan " -0x68a2: "Shao " -0x68a3: "Cen " -0x68a4: "Fen " -0x68a5: "Song " -0x68a6: "Meng " -0x68a7: "Wu " -0x68a8: "Li " -0x68a9: "Li " -0x68aa: "Dou " -0x68ab: "Cen " -0x68ac: "Ying " -0x68ad: "Suo " -0x68ae: "Ju " -0x68af: "Ti " -0x68b0: "Jie " -0x68b1: "Kun " -0x68b2: "Zhuo " -0x68b3: "Shu " -0x68b4: "Chan " -0x68b5: "Fan " -0x68b6: "Wei " -0x68b7: "Jing " -0x68b8: "Li " -0x68b9: "Bing " -0x68ba: "Fumoto " -0x68bb: "Shikimi " -0x68bc: "Tao " -0x68bd: "Zhi " -0x68be: "Lai " -0x68bf: "Lian " -0x68c0: "Jian " -0x68c1: "Zhuo " -0x68c2: "Ling " -0x68c3: "Li " -0x68c4: "Qi " -0x68c5: "Bing " -0x68c6: "Zhun " -0x68c7: "Cong " -0x68c8: "Qian " -0x68c9: "Mian " -0x68ca: "Qi " -0x68cb: "Qi " -0x68cc: "Cai " -0x68cd: "Gun " -0x68ce: "Chan " -0x68cf: "Te " -0x68d0: "Fei " -0x68d1: "Pai " -0x68d2: "Bang " -0x68d3: "Pou " -0x68d4: "Hun " -0x68d5: "Zong " -0x68d6: "Cheng " -0x68d7: "Zao " -0x68d8: "Ji " -0x68d9: "Li " -0x68da: "Peng " -0x68db: "Yu " -0x68dc: "Yu " -0x68dd: "Gu " -0x68de: "Hun " -0x68df: "Dong " -0x68e0: "Tang " -0x68e1: "Gang " -0x68e2: "Wang " -0x68e3: "Di " -0x68e4: "Xi " -0x68e5: "Fan " -0x68e6: "Cheng " -0x68e7: "Zhan " -0x68e8: "Qi " -0x68e9: "Yuan " -0x68ea: "Yan " -0x68eb: "Yu " -0x68ec: "Quan " -0x68ed: "Yi " -0x68ee: "Sen " -0x68ef: "Ren " -0x68f0: "Chui " -0x68f1: "Leng " -0x68f2: "Qi " -0x68f3: "Zhuo " -0x68f4: "Fu " -0x68f5: "Ke " -0x68f6: "Lai " -0x68f7: "Zou " -0x68f8: "Zou " -0x68f9: "Zhuo " -0x68fa: "Guan " -0x68fb: "Fen " -0x68fc: "Fen " -0x68fd: "Chen " -0x68fe: "Qiong " -0x68ff: "Nie " -/* x069 */ -0x6900: "Wan " -0x6901: "Guo " -0x6902: "Lu " -0x6903: "Hao " -0x6904: "Jie " -0x6905: "Yi " -0x6906: "Chou " -0x6907: "Ju " -0x6908: "Ju " -0x6909: "Cheng " -0x690a: "Zuo " -0x690b: "Liang " -0x690c: "Qiang " -0x690d: "Zhi " -0x690e: "Zhui " -0x690f: "Ya " -0x6910: "Ju " -0x6911: "Bei " -0x6912: "Jiao " -0x6913: "Zhuo " -0x6914: "Zi " -0x6915: "Bin " -0x6916: "Peng " -0x6917: "Ding " -0x6918: "Chu " -0x6919: "Chang " -0x691a: "Kunugi " -0x691b: "Momiji " -0x691c: "Jian " -0x691d: "Gui " -0x691e: "Xi " -0x691f: "Du " -0x6920: "Qian " -0x6921: "Kunugi " -0x6922: "Soko " -0x6923: "Shide " -0x6924: "Luo " -0x6925: "Zhi " -0x6926: "Ken " -0x6927: "Myeng " -0x6928: "Tafu " -0x6929: "[?] " -0x692a: "Peng " -0x692b: "Zhan " -0x692c: "[?] " -0x692d: "Tuo " -0x692e: "Sen " -0x692f: "Duo " -0x6930: "Ye " -0x6931: "Fou " -0x6932: "Wei " -0x6933: "Wei " -0x6934: "Duan " -0x6935: "Jia " -0x6936: "Zong " -0x6937: "Jian " -0x6938: "Yi " -0x6939: "Shen " -0x693a: "Xi " -0x693b: "Yan " -0x693c: "Yan " -0x693d: "Chuan " -0x693e: "Zhan " -0x693f: "Chun " -0x6940: "Yu " -0x6941: "He " -0x6942: "Zha " -0x6943: "Wo " -0x6944: "Pian " -0x6945: "Bi " -0x6946: "Yao " -0x6947: "Huo " -0x6948: "Xu " -0x6949: "Ruo " -0x694a: "Yang " -0x694b: "La " -0x694c: "Yan " -0x694d: "Ben " -0x694e: "Hun " -0x694f: "Kui " -0x6950: "Jie " -0x6951: "Kui " -0x6952: "Si " -0x6953: "Feng " -0x6954: "Xie " -0x6955: "Tuo " -0x6956: "Zhi " -0x6957: "Jian " -0x6958: "Mu " -0x6959: "Mao " -0x695a: "Chu " -0x695b: "Hu " -0x695c: "Hu " -0x695d: "Lian " -0x695e: "Leng " -0x695f: "Ting " -0x6960: "Nan " -0x6961: "Yu " -0x6962: "You " -0x6963: "Mei " -0x6964: "Song " -0x6965: "Xuan " -0x6966: "Xuan " -0x6967: "Ying " -0x6968: "Zhen " -0x6969: "Pian " -0x696a: "Ye " -0x696b: "Ji " -0x696c: "Jie " -0x696d: "Ye " -0x696e: "Chu " -0x696f: "Shun " -0x6970: "Yu " -0x6971: "Cou " -0x6972: "Wei " -0x6973: "Mei " -0x6974: "Di " -0x6975: "Ji " -0x6976: "Jie " -0x6977: "Kai " -0x6978: "Qiu " -0x6979: "Ying " -0x697a: "Rou " -0x697b: "Heng " -0x697c: "Lou " -0x697d: "Le " -0x697e: "Hazou " -0x697f: "Katsura " -0x6980: "Pin " -0x6981: "Muro " -0x6982: "Gai " -0x6983: "Tan " -0x6984: "Lan " -0x6985: "Yun " -0x6986: "Yu " -0x6987: "Chen " -0x6988: "Lu " -0x6989: "Ju " -0x698a: "Sakaki " -0x698b: "[?] " -0x698c: "Pi " -0x698d: "Xie " -0x698e: "Jia " -0x698f: "Yi " -0x6990: "Zhan " -0x6991: "Fu " -0x6992: "Nai " -0x6993: "Mi " -0x6994: "Lang " -0x6995: "Rong " -0x6996: "Gu " -0x6997: "Jian " -0x6998: "Ju " -0x6999: "Ta " -0x699a: "Yao " -0x699b: "Zhen " -0x699c: "Bang " -0x699d: "Sha " -0x699e: "Yuan " -0x699f: "Zi " -0x69a0: "Ming " -0x69a1: "Su " -0x69a2: "Jia " -0x69a3: "Yao " -0x69a4: "Jie " -0x69a5: "Huang " -0x69a6: "Gan " -0x69a7: "Fei " -0x69a8: "Zha " -0x69a9: "Qian " -0x69aa: "Ma " -0x69ab: "Sun " -0x69ac: "Yuan " -0x69ad: "Xie " -0x69ae: "Rong " -0x69af: "Shi " -0x69b0: "Zhi " -0x69b1: "Cui " -0x69b2: "Yun " -0x69b3: "Ting " -0x69b4: "Liu " -0x69b5: "Rong " -0x69b6: "Tang " -0x69b7: "Que " -0x69b8: "Zhai " -0x69b9: "Si " -0x69ba: "Sheng " -0x69bb: "Ta " -0x69bc: "Ke " -0x69bd: "Xi " -0x69be: "Gu " -0x69bf: "Qi " -0x69c0: "Kao " -0x69c1: "Gao " -0x69c2: "Sun " -0x69c3: "Pan " -0x69c4: "Tao " -0x69c5: "Ge " -0x69c6: "Xun " -0x69c7: "Dian " -0x69c8: "Nou " -0x69c9: "Ji " -0x69ca: "Shuo " -0x69cb: "Gou " -0x69cc: "Chui " -0x69cd: "Qiang " -0x69ce: "Cha " -0x69cf: "Qian " -0x69d0: "Huai " -0x69d1: "Mei " -0x69d2: "Xu " -0x69d3: "Gang " -0x69d4: "Gao " -0x69d5: "Zhuo " -0x69d6: "Tuo " -0x69d7: "Hashi " -0x69d8: "Yang " -0x69d9: "Dian " -0x69da: "Jia " -0x69db: "Jian " -0x69dc: "Zui " -0x69dd: "Kashi " -0x69de: "Ori " -0x69df: "Bin " -0x69e0: "Zhu " -0x69e1: "[?] " -0x69e2: "Xi " -0x69e3: "Qi " -0x69e4: "Lian " -0x69e5: "Hui " -0x69e6: "Yong " -0x69e7: "Qian " -0x69e8: "Guo " -0x69e9: "Gai " -0x69ea: "Gai " -0x69eb: "Tuan " -0x69ec: "Hua " -0x69ed: "Cu " -0x69ee: "Sen " -0x69ef: "Cui " -0x69f0: "Beng " -0x69f1: "You " -0x69f2: "Hu " -0x69f3: "Jiang " -0x69f4: "Hu " -0x69f5: "Huan " -0x69f6: "Kui " -0x69f7: "Yi " -0x69f8: "Nie " -0x69f9: "Gao " -0x69fa: "Kang " -0x69fb: "Gui " -0x69fc: "Gui " -0x69fd: "Cao " -0x69fe: "Man " -0x69ff: "Jin " -/* x06a */ -0x6a00: "Di " -0x6a01: "Zhuang " -0x6a02: "Le " -0x6a03: "Lang " -0x6a04: "Chen " -0x6a05: "Cong " -0x6a06: "Li " -0x6a07: "Xiu " -0x6a08: "Qing " -0x6a09: "Shuang " -0x6a0a: "Fan " -0x6a0b: "Tong " -0x6a0c: "Guan " -0x6a0d: "Ji " -0x6a0e: "Suo " -0x6a0f: "Lei " -0x6a10: "Lu " -0x6a11: "Liang " -0x6a12: "Mi " -0x6a13: "Lou " -0x6a14: "Chao " -0x6a15: "Su " -0x6a16: "Ke " -0x6a17: "Shu " -0x6a18: "Tang " -0x6a19: "Biao " -0x6a1a: "Lu " -0x6a1b: "Jiu " -0x6a1c: "Shu " -0x6a1d: "Zha " -0x6a1e: "Shu " -0x6a1f: "Zhang " -0x6a20: "Men " -0x6a21: "Mo " -0x6a22: "Niao " -0x6a23: "Yang " -0x6a24: "Tiao " -0x6a25: "Peng " -0x6a26: "Zhu " -0x6a27: "Sha " -0x6a28: "Xi " -0x6a29: "Quan " -0x6a2a: "Heng " -0x6a2b: "Jian " -0x6a2c: "Cong " -0x6a2d: "[?] " -0x6a2e: "Hokuso " -0x6a2f: "Qiang " -0x6a30: "Tara " -0x6a31: "Ying " -0x6a32: "Er " -0x6a33: "Xin " -0x6a34: "Zhi " -0x6a35: "Qiao " -0x6a36: "Zui " -0x6a37: "Cong " -0x6a38: "Pu " -0x6a39: "Shu " -0x6a3a: "Hua " -0x6a3b: "Kui " -0x6a3c: "Zhen " -0x6a3d: "Zun " -0x6a3e: "Yue " -0x6a3f: "Zhan " -0x6a40: "Xi " -0x6a41: "Xun " -0x6a42: "Dian " -0x6a43: "Fa " -0x6a44: "Gan " -0x6a45: "Mo " -0x6a46: "Wu " -0x6a47: "Qiao " -0x6a48: "Nao " -0x6a49: "Lin " -0x6a4a: "Liu " -0x6a4b: "Qiao " -0x6a4c: "Xian " -0x6a4d: "Run " -0x6a4e: "Fan " -0x6a4f: "Zhan " -0x6a50: "Tuo " -0x6a51: "Lao " -0x6a52: "Yun " -0x6a53: "Shun " -0x6a54: "Tui " -0x6a55: "Cheng " -0x6a56: "Tang " -0x6a57: "Meng " -0x6a58: "Ju " -0x6a59: "Cheng " -0x6a5a: "Su " -0x6a5b: "Jue " -0x6a5c: "Jue " -0x6a5d: "Tan " -0x6a5e: "Hui " -0x6a5f: "Ji " -0x6a60: "Nuo " -0x6a61: "Xiang " -0x6a62: "Tuo " -0x6a63: "Ning " -0x6a64: "Rui " -0x6a65: "Zhu " -0x6a66: "Chuang " -0x6a67: "Zeng " -0x6a68: "Fen " -0x6a69: "Qiong " -0x6a6a: "Ran " -0x6a6b: "Heng " -0x6a6c: "Cen " -0x6a6d: "Gu " -0x6a6e: "Liu " -0x6a6f: "Lao " -0x6a70: "Gao " -0x6a71: "Chu " -0x6a72: "Zusa " -0x6a73: "Nude " -0x6a74: "Ca " -0x6a75: "San " -0x6a76: "Ji " -0x6a77: "Dou " -0x6a78: "Shou " -0x6a79: "Lu " -0x6a7a: "[?] " -0x6a7b: "[?] " -0x6a7c: "Yuan " -0x6a7d: "Ta " -0x6a7e: "Shu " -0x6a7f: "Jiang " -0x6a80: "Tan " -0x6a81: "Lin " -0x6a82: "Nong " -0x6a83: "Yin " -0x6a84: "Xi " -0x6a85: "Sui " -0x6a86: "Shan " -0x6a87: "Zui " -0x6a88: "Xuan " -0x6a89: "Cheng " -0x6a8a: "Gan " -0x6a8b: "Ju " -0x6a8c: "Zui " -0x6a8d: "Yi " -0x6a8e: "Qin " -0x6a8f: "Pu " -0x6a90: "Yan " -0x6a91: "Lei " -0x6a92: "Feng " -0x6a93: "Hui " -0x6a94: "Dang " -0x6a95: "Ji " -0x6a96: "Sui " -0x6a97: "Bo " -0x6a98: "Bi " -0x6a99: "Ding " -0x6a9a: "Chu " -0x6a9b: "Zhua " -0x6a9c: "Kuai " -0x6a9d: "Ji " -0x6a9e: "Jie " -0x6a9f: "Jia " -0x6aa0: "Qing " -0x6aa1: "Zhe " -0x6aa2: "Jian " -0x6aa3: "Qiang " -0x6aa4: "Dao " -0x6aa5: "Yi " -0x6aa6: "Biao " -0x6aa7: "Song " -0x6aa8: "She " -0x6aa9: "Lin " -0x6aaa: "Kunugi " -0x6aab: "Cha " -0x6aac: "Meng " -0x6aad: "Yin " -0x6aae: "Tao " -0x6aaf: "Tai " -0x6ab0: "Mian " -0x6ab1: "Qi " -0x6ab2: "Toan " -0x6ab3: "Bin " -0x6ab4: "Huo " -0x6ab5: "Ji " -0x6ab6: "Qian " -0x6ab7: "Mi " -0x6ab8: "Ning " -0x6ab9: "Yi " -0x6aba: "Gao " -0x6abb: "Jian " -0x6abc: "Yin " -0x6abd: "Er " -0x6abe: "Qing " -0x6abf: "Yan " -0x6ac0: "Qi " -0x6ac1: "Mi " -0x6ac2: "Zhao " -0x6ac3: "Gui " -0x6ac4: "Chun " -0x6ac5: "Ji " -0x6ac6: "Kui " -0x6ac7: "Po " -0x6ac8: "Deng " -0x6ac9: "Chu " -0x6aca: "[?] " -0x6acb: "Mian " -0x6acc: "You " -0x6acd: "Zhi " -0x6ace: "Guang " -0x6acf: "Qian " -0x6ad0: "Lei " -0x6ad1: "Lei " -0x6ad2: "Sa " -0x6ad3: "Lu " -0x6ad4: "Li " -0x6ad5: "Cuan " -0x6ad6: "Lu " -0x6ad7: "Mie " -0x6ad8: "Hui " -0x6ad9: "Ou " -0x6ada: "Lu " -0x6adb: "Jie " -0x6adc: "Gao " -0x6add: "Du " -0x6ade: "Yuan " -0x6adf: "Li " -0x6ae0: "Fei " -0x6ae1: "Zhuo " -0x6ae2: "Sou " -0x6ae3: "Lian " -0x6ae4: "Tamo " -0x6ae5: "Chu " -0x6ae6: "[?] " -0x6ae7: "Zhu " -0x6ae8: "Lu " -0x6ae9: "Yan " -0x6aea: "Li " -0x6aeb: "Zhu " -0x6aec: "Chen " -0x6aed: "Jie " -0x6aee: "E " -0x6aef: "Su " -0x6af0: "Huai " -0x6af1: "Nie " -0x6af2: "Yu " -0x6af3: "Long " -0x6af4: "Lai " -0x6af5: "[?] " -0x6af6: "Xian " -0x6af7: "Kwi " -0x6af8: "Ju " -0x6af9: "Xiao " -0x6afa: "Ling " -0x6afb: "Ying " -0x6afc: "Jian " -0x6afd: "Yin " -0x6afe: "You " -0x6aff: "Ying " -/* x06b */ -0x6b00: "Xiang " -0x6b01: "Nong " -0x6b02: "Bo " -0x6b03: "Chan " -0x6b04: "Lan " -0x6b05: "Ju " -0x6b06: "Shuang " -0x6b07: "She " -0x6b08: "Wei " -0x6b09: "Cong " -0x6b0a: "Quan " -0x6b0b: "Qu " -0x6b0c: "Cang " -0x6b0d: "[?] " -0x6b0e: "Yu " -0x6b0f: "Luo " -0x6b10: "Li " -0x6b11: "Zan " -0x6b12: "Luan " -0x6b13: "Dang " -0x6b14: "Jue " -0x6b15: "Em " -0x6b16: "Lan " -0x6b17: "Lan " -0x6b18: "Zhu " -0x6b19: "Lei " -0x6b1a: "Li " -0x6b1b: "Ba " -0x6b1c: "Nang " -0x6b1d: "Yu " -0x6b1e: "Ling " -0x6b1f: "Tsuki " -0x6b20: "Qian " -0x6b21: "Ci " -0x6b22: "Huan " -0x6b23: "Xin " -0x6b24: "Yu " -0x6b25: "Yu " -0x6b26: "Qian " -0x6b27: "Ou " -0x6b28: "Xu " -0x6b29: "Chao " -0x6b2a: "Chu " -0x6b2b: "Chi " -0x6b2c: "Kai " -0x6b2d: "Yi " -0x6b2e: "Jue " -0x6b2f: "Xi " -0x6b30: "Xu " -0x6b31: "Xia " -0x6b32: "Yu " -0x6b33: "Kuai " -0x6b34: "Lang " -0x6b35: "Kuan " -0x6b36: "Shuo " -0x6b37: "Xi " -0x6b38: "Ai " -0x6b39: "Yi " -0x6b3a: "Qi " -0x6b3b: "Hu " -0x6b3c: "Chi " -0x6b3d: "Qin " -0x6b3e: "Kuan " -0x6b3f: "Kan " -0x6b40: "Kuan " -0x6b41: "Kan " -0x6b42: "Chuan " -0x6b43: "Sha " -0x6b44: "Gua " -0x6b45: "Yin " -0x6b46: "Xin " -0x6b47: "Xie " -0x6b48: "Yu " -0x6b49: "Qian " -0x6b4a: "Xiao " -0x6b4b: "Yi " -0x6b4c: "Ge " -0x6b4d: "Wu " -0x6b4e: "Tan " -0x6b4f: "Jin " -0x6b50: "Ou " -0x6b51: "Hu " -0x6b52: "Ti " -0x6b53: "Huan " -0x6b54: "Xu " -0x6b55: "Pen " -0x6b56: "Xi " -0x6b57: "Xiao " -0x6b58: "Xu " -0x6b59: "Xi " -0x6b5a: "Sen " -0x6b5b: "Lian " -0x6b5c: "Chu " -0x6b5d: "Yi " -0x6b5e: "Kan " -0x6b5f: "Yu " -0x6b60: "Chuo " -0x6b61: "Huan " -0x6b62: "Zhi " -0x6b63: "Zheng " -0x6b64: "Ci " -0x6b65: "Bu " -0x6b66: "Wu " -0x6b67: "Qi " -0x6b68: "Bu " -0x6b69: "Bu " -0x6b6a: "Wai " -0x6b6b: "Ju " -0x6b6c: "Qian " -0x6b6d: "Chi " -0x6b6e: "Se " -0x6b6f: "Chi " -0x6b70: "Se " -0x6b71: "Zhong " -0x6b72: "Sui " -0x6b73: "Sui " -0x6b74: "Li " -0x6b75: "Cuo " -0x6b76: "Yu " -0x6b77: "Li " -0x6b78: "Gui " -0x6b79: "Dai " -0x6b7a: "Dai " -0x6b7b: "Si " -0x6b7c: "Jian " -0x6b7d: "Zhe " -0x6b7e: "Mo " -0x6b7f: "Mo " -0x6b80: "Yao " -0x6b81: "Mo " -0x6b82: "Cu " -0x6b83: "Yang " -0x6b84: "Tian " -0x6b85: "Sheng " -0x6b86: "Dai " -0x6b87: "Shang " -0x6b88: "Xu " -0x6b89: "Xun " -0x6b8a: "Shu " -0x6b8b: "Can " -0x6b8c: "Jue " -0x6b8d: "Piao " -0x6b8e: "Qia " -0x6b8f: "Qiu " -0x6b90: "Su " -0x6b91: "Qing " -0x6b92: "Yun " -0x6b93: "Lian " -0x6b94: "Yi " -0x6b95: "Fou " -0x6b96: "Zhi " -0x6b97: "Ye " -0x6b98: "Can " -0x6b99: "Hun " -0x6b9a: "Dan " -0x6b9b: "Ji " -0x6b9c: "Ye " -0x6b9d: "Zhen " -0x6b9e: "Yun " -0x6b9f: "Wen " -0x6ba0: "Chou " -0x6ba1: "Bin " -0x6ba2: "Ti " -0x6ba3: "Jin " -0x6ba4: "Shang " -0x6ba5: "Yin " -0x6ba6: "Diao " -0x6ba7: "Cu " -0x6ba8: "Hui " -0x6ba9: "Cuan " -0x6baa: "Yi " -0x6bab: "Dan " -0x6bac: "Du " -0x6bad: "Jiang " -0x6bae: "Lian " -0x6baf: "Bin " -0x6bb0: "Du " -0x6bb1: "Tsukusu " -0x6bb2: "Jian " -0x6bb3: "Shu " -0x6bb4: "Ou " -0x6bb5: "Duan " -0x6bb6: "Zhu " -0x6bb7: "Yin " -0x6bb8: "Qing " -0x6bb9: "Yi " -0x6bba: "Sha " -0x6bbb: "Que " -0x6bbc: "Ke " -0x6bbd: "Yao " -0x6bbe: "Jun " -0x6bbf: "Dian " -0x6bc0: "Hui " -0x6bc1: "Hui " -0x6bc2: "Gu " -0x6bc3: "Que " -0x6bc4: "Ji " -0x6bc5: "Yi " -0x6bc6: "Ou " -0x6bc7: "Hui " -0x6bc8: "Duan " -0x6bc9: "Yi " -0x6bca: "Xiao " -0x6bcb: "Wu " -0x6bcc: "Guan " -0x6bcd: "Mu " -0x6bce: "Mei " -0x6bcf: "Mei " -0x6bd0: "Ai " -0x6bd1: "Zuo " -0x6bd2: "Du " -0x6bd3: "Yu " -0x6bd4: "Bi " -0x6bd5: "Bi " -0x6bd6: "Bi " -0x6bd7: "Pi " -0x6bd8: "Pi " -0x6bd9: "Bi " -0x6bda: "Chan " -0x6bdb: "Mao " -0x6bdc: "[?] " -0x6bdd: "[?] " -0x6bde: "Pu " -0x6bdf: "Mushiru " -0x6be0: "Jia " -0x6be1: "Zhan " -0x6be2: "Sai " -0x6be3: "Mu " -0x6be4: "Tuo " -0x6be5: "Xun " -0x6be6: "Er " -0x6be7: "Rong " -0x6be8: "Xian " -0x6be9: "Ju " -0x6bea: "Mu " -0x6beb: "Hao " -0x6bec: "Qiu " -0x6bed: "Dou " -0x6bee: "Mushiru " -0x6bef: "Tan " -0x6bf0: "Pei " -0x6bf1: "Ju " -0x6bf2: "Duo " -0x6bf3: "Cui " -0x6bf4: "Bi " -0x6bf5: "San " -0x6bf6: "[?] " -0x6bf7: "Mao " -0x6bf8: "Sui " -0x6bf9: "Yu " -0x6bfa: "Yu " -0x6bfb: "Tuo " -0x6bfc: "He " -0x6bfd: "Jian " -0x6bfe: "Ta " -0x6bff: "San " -/* x06c */ -0x6c00: "Lu " -0x6c01: "Mu " -0x6c02: "Li " -0x6c03: "Tong " -0x6c04: "Rong " -0x6c05: "Chang " -0x6c06: "Pu " -0x6c07: "Luo " -0x6c08: "Zhan " -0x6c09: "Sao " -0x6c0a: "Zhan " -0x6c0b: "Meng " -0x6c0c: "Luo " -0x6c0d: "Qu " -0x6c0e: "Die " -0x6c0f: "Shi " -0x6c10: "Di " -0x6c11: "Min " -0x6c12: "Jue " -0x6c13: "Mang " -0x6c14: "Qi " -0x6c15: "Pie " -0x6c16: "Nai " -0x6c17: "Qi " -0x6c18: "Dao " -0x6c19: "Xian " -0x6c1a: "Chuan " -0x6c1b: "Fen " -0x6c1c: "Ri " -0x6c1d: "Nei " -0x6c1e: "[?] " -0x6c1f: "Fu " -0x6c20: "Shen " -0x6c21: "Dong " -0x6c22: "Qing " -0x6c23: "Qi " -0x6c24: "Yin " -0x6c25: "Xi " -0x6c26: "Hai " -0x6c27: "Yang " -0x6c28: "An " -0x6c29: "Ya " -0x6c2a: "Ke " -0x6c2b: "Qing " -0x6c2c: "Ya " -0x6c2d: "Dong " -0x6c2e: "Dan " -0x6c2f: "Lu " -0x6c30: "Qing " -0x6c31: "Yang " -0x6c32: "Yun " -0x6c33: "Yun " -0x6c34: "Shui " -0x6c35: "San " -0x6c36: "Zheng " -0x6c37: "Bing " -0x6c38: "Yong " -0x6c39: "Dang " -0x6c3a: "Shitamizu " -0x6c3b: "Le " -0x6c3c: "Ni " -0x6c3d: "Tun " -0x6c3e: "Fan " -0x6c3f: "Gui " -0x6c40: "Ting " -0x6c41: "Zhi " -0x6c42: "Qiu " -0x6c43: "Bin " -0x6c44: "Ze " -0x6c45: "Mian " -0x6c46: "Cuan " -0x6c47: "Hui " -0x6c48: "Diao " -0x6c49: "Yi " -0x6c4a: "Cha " -0x6c4b: "Zhuo " -0x6c4c: "Chuan " -0x6c4d: "Wan " -0x6c4e: "Fan " -0x6c4f: "Dai " -0x6c50: "Xi " -0x6c51: "Tuo " -0x6c52: "Mang " -0x6c53: "Qiu " -0x6c54: "Qi " -0x6c55: "Shan " -0x6c56: "Pai " -0x6c57: "Han " -0x6c58: "Qian " -0x6c59: "Wu " -0x6c5a: "Wu " -0x6c5b: "Xun " -0x6c5c: "Si " -0x6c5d: "Ru " -0x6c5e: "Gong " -0x6c5f: "Jiang " -0x6c60: "Chi " -0x6c61: "Wu " -0x6c62: "Tsuchi " -0x6c63: "[?] " -0x6c64: "Tang " -0x6c65: "Zhi " -0x6c66: "Chi " -0x6c67: "Qian " -0x6c68: "Mi " -0x6c69: "Yu " -0x6c6a: "Wang " -0x6c6b: "Qing " -0x6c6c: "Jing " -0x6c6d: "Rui " -0x6c6e: "Jun " -0x6c6f: "Hong " -0x6c70: "Tai " -0x6c71: "Quan " -0x6c72: "Ji " -0x6c73: "Bian " -0x6c74: "Bian " -0x6c75: "Gan " -0x6c76: "Wen " -0x6c77: "Zhong " -0x6c78: "Fang " -0x6c79: "Xiong " -0x6c7a: "Jue " -0x6c7b: "Hang " -0x6c7c: "Niou " -0x6c7d: "Qi " -0x6c7e: "Fen " -0x6c7f: "Xu " -0x6c80: "Xu " -0x6c81: "Qin " -0x6c82: "Yi " -0x6c83: "Wo " -0x6c84: "Yun " -0x6c85: "Yuan " -0x6c86: "Hang " -0x6c87: "Yan " -0x6c88: "Chen " -0x6c89: "Chen " -0x6c8a: "Dan " -0x6c8b: "You " -0x6c8c: "Dun " -0x6c8d: "Hu " -0x6c8e: "Huo " -0x6c8f: "Qie " -0x6c90: "Mu " -0x6c91: "Rou " -0x6c92: "Mei " -0x6c93: "Ta " -0x6c94: "Mian " -0x6c95: "Wu " -0x6c96: "Chong " -0x6c97: "Tian " -0x6c98: "Bi " -0x6c99: "Sha " -0x6c9a: "Zhi " -0x6c9b: "Pei " -0x6c9c: "Pan " -0x6c9d: "Zhui " -0x6c9e: "Za " -0x6c9f: "Gou " -0x6ca0: "Liu " -0x6ca1: "Mei " -0x6ca2: "Ze " -0x6ca3: "Feng " -0x6ca4: "Ou " -0x6ca5: "Li " -0x6ca6: "Lun " -0x6ca7: "Cang " -0x6ca8: "Feng " -0x6ca9: "Wei " -0x6caa: "Hu " -0x6cab: "Mo " -0x6cac: "Mei " -0x6cad: "Shu " -0x6cae: "Ju " -0x6caf: "Zan " -0x6cb0: "Tuo " -0x6cb1: "Tuo " -0x6cb2: "Tuo " -0x6cb3: "He " -0x6cb4: "Li " -0x6cb5: "Mi " -0x6cb6: "Yi " -0x6cb7: "Fa " -0x6cb8: "Fei " -0x6cb9: "You " -0x6cba: "Tian " -0x6cbb: "Zhi " -0x6cbc: "Zhao " -0x6cbd: "Gu " -0x6cbe: "Zhan " -0x6cbf: "Yan " -0x6cc0: "Si " -0x6cc1: "Kuang " -0x6cc2: "Jiong " -0x6cc3: "Ju " -0x6cc4: "Xie " -0x6cc5: "Qiu " -0x6cc6: "Yi " -0x6cc7: "Jia " -0x6cc8: "Zhong " -0x6cc9: "Quan " -0x6cca: "Bo " -0x6ccb: "Hui " -0x6ccc: "Mi " -0x6ccd: "Ben " -0x6cce: "Zhuo " -0x6ccf: "Chu " -0x6cd0: "Le " -0x6cd1: "You " -0x6cd2: "Gu " -0x6cd3: "Hong " -0x6cd4: "Gan " -0x6cd5: "Fa " -0x6cd6: "Mao " -0x6cd7: "Si " -0x6cd8: "Hu " -0x6cd9: "Ping " -0x6cda: "Ci " -0x6cdb: "Fan " -0x6cdc: "Chi " -0x6cdd: "Su " -0x6cde: "Ning " -0x6cdf: "Cheng " -0x6ce0: "Ling " -0x6ce1: "Pao " -0x6ce2: "Bo " -0x6ce3: "Qi " -0x6ce4: "Si " -0x6ce5: "Ni " -0x6ce6: "Ju " -0x6ce7: "Yue " -0x6ce8: "Zhu " -0x6ce9: "Sheng " -0x6cea: "Lei " -0x6ceb: "Xuan " -0x6cec: "Xue " -0x6ced: "Fu " -0x6cee: "Pan " -0x6cef: "Min " -0x6cf0: "Tai " -0x6cf1: "Yang " -0x6cf2: "Ji " -0x6cf3: "Yong " -0x6cf4: "Guan " -0x6cf5: "Beng " -0x6cf6: "Xue " -0x6cf7: "Long " -0x6cf8: "Lu " -0x6cf9: "[?] " -0x6cfa: "Bo " -0x6cfb: "Xie " -0x6cfc: "Po " -0x6cfd: "Ze " -0x6cfe: "Jing " -0x6cff: "Yin " -/* x06d */ -0x6d00: "Zhou " -0x6d01: "Ji " -0x6d02: "Yi " -0x6d03: "Hui " -0x6d04: "Hui " -0x6d05: "Zui " -0x6d06: "Cheng " -0x6d07: "Yin " -0x6d08: "Wei " -0x6d09: "Hou " -0x6d0a: "Jian " -0x6d0b: "Yang " -0x6d0c: "Lie " -0x6d0d: "Si " -0x6d0e: "Ji " -0x6d0f: "Er " -0x6d10: "Xing " -0x6d11: "Fu " -0x6d12: "Sa " -0x6d13: "Suo " -0x6d14: "Zhi " -0x6d15: "Yin " -0x6d16: "Wu " -0x6d17: "Xi " -0x6d18: "Kao " -0x6d19: "Zhu " -0x6d1a: "Jiang " -0x6d1b: "Luo " -0x6d1c: "[?] " -0x6d1d: "An " -0x6d1e: "Dong " -0x6d1f: "Yi " -0x6d20: "Mou " -0x6d21: "Lei " -0x6d22: "Yi " -0x6d23: "Mi " -0x6d24: "Quan " -0x6d25: "Jin " -0x6d26: "Mo " -0x6d27: "Wei " -0x6d28: "Xiao " -0x6d29: "Xie " -0x6d2a: "Hong " -0x6d2b: "Xu " -0x6d2c: "Shuo " -0x6d2d: "Kuang " -0x6d2e: "Tao " -0x6d2f: "Qie " -0x6d30: "Ju " -0x6d31: "Er " -0x6d32: "Zhou " -0x6d33: "Ru " -0x6d34: "Ping " -0x6d35: "Xun " -0x6d36: "Xiong " -0x6d37: "Zhi " -0x6d38: "Guang " -0x6d39: "Huan " -0x6d3a: "Ming " -0x6d3b: "Huo " -0x6d3c: "Wa " -0x6d3d: "Qia " -0x6d3e: "Pai " -0x6d3f: "Wu " -0x6d40: "Qu " -0x6d41: "Liu " -0x6d42: "Yi " -0x6d43: "Jia " -0x6d44: "Jing " -0x6d45: "Qian " -0x6d46: "Jiang " -0x6d47: "Jiao " -0x6d48: "Cheng " -0x6d49: "Shi " -0x6d4a: "Zhuo " -0x6d4b: "Ce " -0x6d4c: "Pal " -0x6d4d: "Kuai " -0x6d4e: "Ji " -0x6d4f: "Liu " -0x6d50: "Chan " -0x6d51: "Hun " -0x6d52: "Hu " -0x6d53: "Nong " -0x6d54: "Xun " -0x6d55: "Jin " -0x6d56: "Lie " -0x6d57: "Qiu " -0x6d58: "Wei " -0x6d59: "Zhe " -0x6d5a: "Jun " -0x6d5b: "Han " -0x6d5c: "Bang " -0x6d5d: "Mang " -0x6d5e: "Zhuo " -0x6d5f: "You " -0x6d60: "Xi " -0x6d61: "Bo " -0x6d62: "Dou " -0x6d63: "Wan " -0x6d64: "Hong " -0x6d65: "Yi " -0x6d66: "Pu " -0x6d67: "Ying " -0x6d68: "Lan " -0x6d69: "Hao " -0x6d6a: "Lang " -0x6d6b: "Han " -0x6d6c: "Li " -0x6d6d: "Geng " -0x6d6e: "Fu " -0x6d6f: "Wu " -0x6d70: "Lian " -0x6d71: "Chun " -0x6d72: "Feng " -0x6d73: "Yi " -0x6d74: "Yu " -0x6d75: "Tong " -0x6d76: "Lao " -0x6d77: "Hai " -0x6d78: "Jin " -0x6d79: "Jia " -0x6d7a: "Chong " -0x6d7b: "Weng " -0x6d7c: "Mei " -0x6d7d: "Sui " -0x6d7e: "Cheng " -0x6d7f: "Pei " -0x6d80: "Xian " -0x6d81: "Shen " -0x6d82: "Tu " -0x6d83: "Kun " -0x6d84: "Pin " -0x6d85: "Nie " -0x6d86: "Han " -0x6d87: "Jing " -0x6d88: "Xiao " -0x6d89: "She " -0x6d8a: "Nian " -0x6d8b: "Tu " -0x6d8c: "Yong " -0x6d8d: "Xiao " -0x6d8e: "Xian " -0x6d8f: "Ting " -0x6d90: "E " -0x6d91: "Su " -0x6d92: "Tun " -0x6d93: "Juan " -0x6d94: "Cen " -0x6d95: "Ti " -0x6d96: "Li " -0x6d97: "Shui " -0x6d98: "Si " -0x6d99: "Lei " -0x6d9a: "Shui " -0x6d9b: "Tao " -0x6d9c: "Du " -0x6d9d: "Lao " -0x6d9e: "Lai " -0x6d9f: "Lian " -0x6da0: "Wei " -0x6da1: "Wo " -0x6da2: "Yun " -0x6da3: "Huan " -0x6da4: "Di " -0x6da5: "[?] " -0x6da6: "Run " -0x6da7: "Jian " -0x6da8: "Zhang " -0x6da9: "Se " -0x6daa: "Fu " -0x6dab: "Guan " -0x6dac: "Xing " -0x6dad: "Shou " -0x6dae: "Shuan " -0x6daf: "Ya " -0x6db0: "Chuo " -0x6db1: "Zhang " -0x6db2: "Ye " -0x6db3: "Kong " -0x6db4: "Wo " -0x6db5: "Han " -0x6db6: "Tuo " -0x6db7: "Dong " -0x6db8: "He " -0x6db9: "Wo " -0x6dba: "Ju " -0x6dbb: "Gan " -0x6dbc: "Liang " -0x6dbd: "Hun " -0x6dbe: "Ta " -0x6dbf: "Zhuo " -0x6dc0: "Dian " -0x6dc1: "Qie " -0x6dc2: "De " -0x6dc3: "Juan " -0x6dc4: "Zi " -0x6dc5: "Xi " -0x6dc6: "Yao " -0x6dc7: "Qi " -0x6dc8: "Gu " -0x6dc9: "Guo " -0x6dca: "Han " -0x6dcb: "Lin " -0x6dcc: "Tang " -0x6dcd: "Zhou " -0x6dce: "Peng " -0x6dcf: "Hao " -0x6dd0: "Chang " -0x6dd1: "Shu " -0x6dd2: "Qi " -0x6dd3: "Fang " -0x6dd4: "Chi " -0x6dd5: "Lu " -0x6dd6: "Nao " -0x6dd7: "Ju " -0x6dd8: "Tao " -0x6dd9: "Cong " -0x6dda: "Lei " -0x6ddb: "Zhi " -0x6ddc: "Peng " -0x6ddd: "Fei " -0x6dde: "Song " -0x6ddf: "Tian " -0x6de0: "Pi " -0x6de1: "Dan " -0x6de2: "Yu " -0x6de3: "Ni " -0x6de4: "Yu " -0x6de5: "Lu " -0x6de6: "Gan " -0x6de7: "Mi " -0x6de8: "Jing " -0x6de9: "Ling " -0x6dea: "Lun " -0x6deb: "Yin " -0x6dec: "Cui " -0x6ded: "Qu " -0x6dee: "Huai " -0x6def: "Yu " -0x6df0: "Nian " -0x6df1: "Shen " -0x6df2: "Piao " -0x6df3: "Chun " -0x6df4: "Wa " -0x6df5: "Yuan " -0x6df6: "Lai " -0x6df7: "Hun " -0x6df8: "Qing " -0x6df9: "Yan " -0x6dfa: "Qian " -0x6dfb: "Tian " -0x6dfc: "Miao " -0x6dfd: "Zhi " -0x6dfe: "Yin " -0x6dff: "Mi " -/* x06e */ -0x6e00: "Ben " -0x6e01: "Yuan " -0x6e02: "Wen " -0x6e03: "Re " -0x6e04: "Fei " -0x6e05: "Qing " -0x6e06: "Yuan " -0x6e07: "Ke " -0x6e08: "Ji " -0x6e09: "She " -0x6e0a: "Yuan " -0x6e0b: "Shibui " -0x6e0c: "Lu " -0x6e0d: "Zi " -0x6e0e: "Du " -0x6e0f: "[?] " -0x6e10: "Jian " -0x6e11: "Min " -0x6e12: "Pi " -0x6e13: "Tani " -0x6e14: "Yu " -0x6e15: "Yuan " -0x6e16: "Shen " -0x6e17: "Shen " -0x6e18: "Rou " -0x6e19: "Huan " -0x6e1a: "Zhu " -0x6e1b: "Jian " -0x6e1c: "Nuan " -0x6e1d: "Yu " -0x6e1e: "Qiu " -0x6e1f: "Ting " -0x6e20: "Qu " -0x6e21: "Du " -0x6e22: "Feng " -0x6e23: "Zha " -0x6e24: "Bo " -0x6e25: "Wo " -0x6e26: "Wo " -0x6e27: "Di " -0x6e28: "Wei " -0x6e29: "Wen " -0x6e2a: "Ru " -0x6e2b: "Xie " -0x6e2c: "Ce " -0x6e2d: "Wei " -0x6e2e: "Ge " -0x6e2f: "Gang " -0x6e30: "Yan " -0x6e31: "Hong " -0x6e32: "Xuan " -0x6e33: "Mi " -0x6e34: "Ke " -0x6e35: "Mao " -0x6e36: "Ying " -0x6e37: "Yan " -0x6e38: "You " -0x6e39: "Hong " -0x6e3a: "Miao " -0x6e3b: "Xing " -0x6e3c: "Mei " -0x6e3d: "Zai " -0x6e3e: "Hun " -0x6e3f: "Nai " -0x6e40: "Kui " -0x6e41: "Shi " -0x6e42: "E " -0x6e43: "Pai " -0x6e44: "Mei " -0x6e45: "Lian " -0x6e46: "Qi " -0x6e47: "Qi " -0x6e48: "Mei " -0x6e49: "Tian " -0x6e4a: "Cou " -0x6e4b: "Wei " -0x6e4c: "Can " -0x6e4d: "Tuan " -0x6e4e: "Mian " -0x6e4f: "Hui " -0x6e50: "Mo " -0x6e51: "Xu " -0x6e52: "Ji " -0x6e53: "Pen " -0x6e54: "Jian " -0x6e55: "Jian " -0x6e56: "Hu " -0x6e57: "Feng " -0x6e58: "Xiang " -0x6e59: "Yi " -0x6e5a: "Yin " -0x6e5b: "Zhan " -0x6e5c: "Shi " -0x6e5d: "Jie " -0x6e5e: "Cheng " -0x6e5f: "Huang " -0x6e60: "Tan " -0x6e61: "Yu " -0x6e62: "Bi " -0x6e63: "Min " -0x6e64: "Shi " -0x6e65: "Tu " -0x6e66: "Sheng " -0x6e67: "Yong " -0x6e68: "Qu " -0x6e69: "Zhong " -0x6e6a: "Suei " -0x6e6b: "Jiu " -0x6e6c: "Jiao " -0x6e6d: "Qiou " -0x6e6e: "Yin " -0x6e6f: "Tang " -0x6e70: "Long " -0x6e71: "Huo " -0x6e72: "Yuan " -0x6e73: "Nan " -0x6e74: "Ban " -0x6e75: "You " -0x6e76: "Quan " -0x6e77: "Chui " -0x6e78: "Liang " -0x6e79: "Chan " -0x6e7a: "Yan " -0x6e7b: "Chun " -0x6e7c: "Nie " -0x6e7d: "Zi " -0x6e7e: "Wan " -0x6e7f: "Shi " -0x6e80: "Man " -0x6e81: "Ying " -0x6e82: "Ratsu " -0x6e83: "Kui " -0x6e84: "[?] " -0x6e85: "Jian " -0x6e86: "Xu " -0x6e87: "Lu " -0x6e88: "Gui " -0x6e89: "Gai " -0x6e8a: "[?] " -0x6e8b: "[?] " -0x6e8c: "Po " -0x6e8d: "Jin " -0x6e8e: "Gui " -0x6e8f: "Tang " -0x6e90: "Yuan " -0x6e91: "Suo " -0x6e92: "Yuan " -0x6e93: "Lian " -0x6e94: "Yao " -0x6e95: "Meng " -0x6e96: "Zhun " -0x6e97: "Sheng " -0x6e98: "Ke " -0x6e99: "Tai " -0x6e9a: "Da " -0x6e9b: "Wa " -0x6e9c: "Liu " -0x6e9d: "Gou " -0x6e9e: "Sao " -0x6e9f: "Ming " -0x6ea0: "Zha " -0x6ea1: "Shi " -0x6ea2: "Yi " -0x6ea3: "Lun " -0x6ea4: "Ma " -0x6ea5: "Pu " -0x6ea6: "Wei " -0x6ea7: "Li " -0x6ea8: "Cai " -0x6ea9: "Wu " -0x6eaa: "Xi " -0x6eab: "Wen " -0x6eac: "Qiang " -0x6ead: "Ze " -0x6eae: "Shi " -0x6eaf: "Su " -0x6eb0: "Yi " -0x6eb1: "Zhen " -0x6eb2: "Sou " -0x6eb3: "Yun " -0x6eb4: "Xiu " -0x6eb5: "Yin " -0x6eb6: "Rong " -0x6eb7: "Hun " -0x6eb8: "Su " -0x6eb9: "Su " -0x6eba: "Ni " -0x6ebb: "Ta " -0x6ebc: "Shi " -0x6ebd: "Ru " -0x6ebe: "Wei " -0x6ebf: "Pan " -0x6ec0: "Chu " -0x6ec1: "Chu " -0x6ec2: "Pang " -0x6ec3: "Weng " -0x6ec4: "Cang " -0x6ec5: "Mie " -0x6ec6: "He " -0x6ec7: "Dian " -0x6ec8: "Hao " -0x6ec9: "Huang " -0x6eca: "Xi " -0x6ecb: "Zi " -0x6ecc: "Di " -0x6ecd: "Zhi " -0x6ece: "Ying " -0x6ecf: "Fu " -0x6ed0: "Jie " -0x6ed1: "Hua " -0x6ed2: "Ge " -0x6ed3: "Zi " -0x6ed4: "Tao " -0x6ed5: "Teng " -0x6ed6: "Sui " -0x6ed7: "Bi " -0x6ed8: "Jiao " -0x6ed9: "Hui " -0x6eda: "Gun " -0x6edb: "Yin " -0x6edc: "Gao " -0x6edd: "Long " -0x6ede: "Zhi " -0x6edf: "Yan " -0x6ee0: "She " -0x6ee1: "Man " -0x6ee2: "Ying " -0x6ee3: "Chun " -0x6ee4: "Lu " -0x6ee5: "Lan " -0x6ee6: "Luan " -0x6ee7: "[?] " -0x6ee8: "Bin " -0x6ee9: "Tan " -0x6eea: "Yu " -0x6eeb: "Sou " -0x6eec: "Hu " -0x6eed: "Bi " -0x6eee: "Biao " -0x6eef: "Zhi " -0x6ef0: "Jiang " -0x6ef1: "Kou " -0x6ef2: "Shen " -0x6ef3: "Shang " -0x6ef4: "Di " -0x6ef5: "Mi " -0x6ef6: "Ao " -0x6ef7: "Lu " -0x6ef8: "Hu " -0x6ef9: "Hu " -0x6efa: "You " -0x6efb: "Chan " -0x6efc: "Fan " -0x6efd: "Yong " -0x6efe: "Gun " -0x6eff: "Man " -/* x06f */ -0x6f00: "Qing " -0x6f01: "Yu " -0x6f02: "Piao " -0x6f03: "Ji " -0x6f04: "Ya " -0x6f05: "Jiao " -0x6f06: "Qi " -0x6f07: "Xi " -0x6f08: "Ji " -0x6f09: "Lu " -0x6f0a: "Lu " -0x6f0b: "Long " -0x6f0c: "Jin " -0x6f0d: "Guo " -0x6f0e: "Cong " -0x6f0f: "Lou " -0x6f10: "Zhi " -0x6f11: "Gai " -0x6f12: "Qiang " -0x6f13: "Li " -0x6f14: "Yan " -0x6f15: "Cao " -0x6f16: "Jiao " -0x6f17: "Cong " -0x6f18: "Qun " -0x6f19: "Tuan " -0x6f1a: "Ou " -0x6f1b: "Teng " -0x6f1c: "Ye " -0x6f1d: "Xi " -0x6f1e: "Mi " -0x6f1f: "Tang " -0x6f20: "Mo " -0x6f21: "Shang " -0x6f22: "Han " -0x6f23: "Lian " -0x6f24: "Lan " -0x6f25: "Wa " -0x6f26: "Li " -0x6f27: "Qian " -0x6f28: "Feng " -0x6f29: "Xuan " -0x6f2a: "Yi " -0x6f2b: "Man " -0x6f2c: "Zi " -0x6f2d: "Mang " -0x6f2e: "Kang " -0x6f2f: "Lei " -0x6f30: "Peng " -0x6f31: "Shu " -0x6f32: "Zhang " -0x6f33: "Zhang " -0x6f34: "Chong " -0x6f35: "Xu " -0x6f36: "Huan " -0x6f37: "Kuo " -0x6f38: "Jian " -0x6f39: "Yan " -0x6f3a: "Chuang " -0x6f3b: "Liao " -0x6f3c: "Cui " -0x6f3d: "Ti " -0x6f3e: "Yang " -0x6f3f: "Jiang " -0x6f40: "Cong " -0x6f41: "Ying " -0x6f42: "Hong " -0x6f43: "Xun " -0x6f44: "Shu " -0x6f45: "Guan " -0x6f46: "Ying " -0x6f47: "Xiao " -0x6f48: "[?] " -0x6f49: "[?] " -0x6f4a: "Xu " -0x6f4b: "Lian " -0x6f4c: "Zhi " -0x6f4d: "Wei " -0x6f4e: "Pi " -0x6f4f: "Jue " -0x6f50: "Jiao " -0x6f51: "Po " -0x6f52: "Dang " -0x6f53: "Hui " -0x6f54: "Jie " -0x6f55: "Wu " -0x6f56: "Pa " -0x6f57: "Ji " -0x6f58: "Pan " -0x6f59: "Gui " -0x6f5a: "Xiao " -0x6f5b: "Qian " -0x6f5c: "Qian " -0x6f5d: "Xi " -0x6f5e: "Lu " -0x6f5f: "Xi " -0x6f60: "Xuan " -0x6f61: "Dun " -0x6f62: "Huang " -0x6f63: "Min " -0x6f64: "Run " -0x6f65: "Su " -0x6f66: "Liao " -0x6f67: "Zhen " -0x6f68: "Zhong " -0x6f69: "Yi " -0x6f6a: "Di " -0x6f6b: "Wan " -0x6f6c: "Dan " -0x6f6d: "Tan " -0x6f6e: "Chao " -0x6f6f: "Xun " -0x6f70: "Kui " -0x6f71: "Yie " -0x6f72: "Shao " -0x6f73: "Tu " -0x6f74: "Zhu " -0x6f75: "San " -0x6f76: "Hei " -0x6f77: "Bi " -0x6f78: "Shan " -0x6f79: "Chan " -0x6f7a: "Chan " -0x6f7b: "Shu " -0x6f7c: "Tong " -0x6f7d: "Pu " -0x6f7e: "Lin " -0x6f7f: "Wei " -0x6f80: "Se " -0x6f81: "Se " -0x6f82: "Cheng " -0x6f83: "Jiong " -0x6f84: "Cheng " -0x6f85: "Hua " -0x6f86: "Jiao " -0x6f87: "Lao " -0x6f88: "Che " -0x6f89: "Gan " -0x6f8a: "Cun " -0x6f8b: "Heng " -0x6f8c: "Si " -0x6f8d: "Shu " -0x6f8e: "Peng " -0x6f8f: "Han " -0x6f90: "Yun " -0x6f91: "Liu " -0x6f92: "Hong " -0x6f93: "Fu " -0x6f94: "Hao " -0x6f95: "He " -0x6f96: "Xian " -0x6f97: "Jian " -0x6f98: "Shan " -0x6f99: "Xi " -0x6f9a: "Oki " -0x6f9b: "[?] " -0x6f9c: "Lan " -0x6f9d: "[?] " -0x6f9e: "Yu " -0x6f9f: "Lin " -0x6fa0: "Min " -0x6fa1: "Zao " -0x6fa2: "Dang " -0x6fa3: "Wan " -0x6fa4: "Ze " -0x6fa5: "Xie " -0x6fa6: "Yu " -0x6fa7: "Li " -0x6fa8: "Shi " -0x6fa9: "Xue " -0x6faa: "Ling " -0x6fab: "Man " -0x6fac: "Zi " -0x6fad: "Yong " -0x6fae: "Kuai " -0x6faf: "Can " -0x6fb0: "Lian " -0x6fb1: "Dian " -0x6fb2: "Ye " -0x6fb3: "Ao " -0x6fb4: "Huan " -0x6fb5: "Zhen " -0x6fb6: "Chan " -0x6fb7: "Man " -0x6fb8: "Dan " -0x6fb9: "Dan " -0x6fba: "Yi " -0x6fbb: "Sui " -0x6fbc: "Pi " -0x6fbd: "Ju " -0x6fbe: "Ta " -0x6fbf: "Qin " -0x6fc0: "Ji " -0x6fc1: "Zhuo " -0x6fc2: "Lian " -0x6fc3: "Nong " -0x6fc4: "Guo " -0x6fc5: "Jin " -0x6fc6: "Fen " -0x6fc7: "Se " -0x6fc8: "Ji " -0x6fc9: "Sui " -0x6fca: "Hui " -0x6fcb: "Chu " -0x6fcc: "Ta " -0x6fcd: "Song " -0x6fce: "Ding " -0x6fcf: "[?] " -0x6fd0: "Zhu " -0x6fd1: "Lai " -0x6fd2: "Bin " -0x6fd3: "Lian " -0x6fd4: "Mi " -0x6fd5: "Shi " -0x6fd6: "Shu " -0x6fd7: "Mi " -0x6fd8: "Ning " -0x6fd9: "Ying " -0x6fda: "Ying " -0x6fdb: "Meng " -0x6fdc: "Jin " -0x6fdd: "Qi " -0x6fde: "Pi " -0x6fdf: "Ji " -0x6fe0: "Hao " -0x6fe1: "Ru " -0x6fe2: "Zui " -0x6fe3: "Wo " -0x6fe4: "Tao " -0x6fe5: "Yin " -0x6fe6: "Yin " -0x6fe7: "Dui " -0x6fe8: "Ci " -0x6fe9: "Huo " -0x6fea: "Jing " -0x6feb: "Lan " -0x6fec: "Jun " -0x6fed: "Ai " -0x6fee: "Pu " -0x6fef: "Zhuo " -0x6ff0: "Wei " -0x6ff1: "Bin " -0x6ff2: "Gu " -0x6ff3: "Qian " -0x6ff4: "Xing " -0x6ff5: "Hama " -0x6ff6: "Kuo " -0x6ff7: "Fei " -0x6ff8: "[?] " -0x6ff9: "Boku " -0x6ffa: "Jian " -0x6ffb: "Wei " -0x6ffc: "Luo " -0x6ffd: "Zan " -0x6ffe: "Lu " -0x6fff: "Li " -/* x070 */ -0x7000: "You " -0x7001: "Yang " -0x7002: "Lu " -0x7003: "Si " -0x7004: "Jie " -0x7005: "Ying " -0x7006: "Du " -0x7007: "Wang " -0x7008: "Hui " -0x7009: "Xie " -0x700a: "Pan " -0x700b: "Shen " -0x700c: "Biao " -0x700d: "Chan " -0x700e: "Mo " -0x700f: "Liu " -0x7010: "Jian " -0x7011: "Pu " -0x7012: "Se " -0x7013: "Cheng " -0x7014: "Gu " -0x7015: "Bin " -0x7016: "Huo " -0x7017: "Xian " -0x7018: "Lu " -0x7019: "Qin " -0x701a: "Han " -0x701b: "Ying " -0x701c: "Yong " -0x701d: "Li " -0x701e: "Jing " -0x701f: "Xiao " -0x7020: "Ying " -0x7021: "Sui " -0x7022: "Wei " -0x7023: "Xie " -0x7024: "Huai " -0x7025: "Hao " -0x7026: "Zhu " -0x7027: "Long " -0x7028: "Lai " -0x7029: "Dui " -0x702a: "Fan " -0x702b: "Hu " -0x702c: "Lai " -0x702d: "[?] " -0x702e: "[?] " -0x702f: "Ying " -0x7030: "Mi " -0x7031: "Ji " -0x7032: "Lian " -0x7033: "Jian " -0x7034: "Ying " -0x7035: "Fen " -0x7036: "Lin " -0x7037: "Yi " -0x7038: "Jian " -0x7039: "Yue " -0x703a: "Chan " -0x703b: "Dai " -0x703c: "Rang " -0x703d: "Jian " -0x703e: "Lan " -0x703f: "Fan " -0x7040: "Shuang " -0x7041: "Yuan " -0x7042: "Zhuo " -0x7043: "Feng " -0x7044: "She " -0x7045: "Lei " -0x7046: "Lan " -0x7047: "Cong " -0x7048: "Qu " -0x7049: "Yong " -0x704a: "Qian " -0x704b: "Fa " -0x704c: "Guan " -0x704d: "Que " -0x704e: "Yan " -0x704f: "Hao " -0x7050: "Hyeng " -0x7051: "Sa " -0x7052: "Zan " -0x7053: "Luan " -0x7054: "Yan " -0x7055: "Li " -0x7056: "Mi " -0x7057: "Shan " -0x7058: "Tan " -0x7059: "Dang " -0x705a: "Jiao " -0x705b: "Chan " -0x705c: "[?] " -0x705d: "Hao " -0x705e: "Ba " -0x705f: "Zhu " -0x7060: "Lan " -0x7061: "Lan " -0x7062: "Nang " -0x7063: "Wan " -0x7064: "Luan " -0x7065: "Xun " -0x7066: "Xian " -0x7067: "Yan " -0x7068: "Gan " -0x7069: "Yan " -0x706a: "Yu " -0x706b: "Huo " -0x706c: "Si " -0x706d: "Mie " -0x706e: "Guang " -0x706f: "Deng " -0x7070: "Hui " -0x7071: "Xiao " -0x7072: "Xiao " -0x7073: "Hu " -0x7074: "Hong " -0x7075: "Ling " -0x7076: "Zao " -0x7077: "Zhuan " -0x7078: "Jiu " -0x7079: "Zha " -0x707a: "Xie " -0x707b: "Chi " -0x707c: "Zhuo " -0x707d: "Zai " -0x707e: "Zai " -0x707f: "Can " -0x7080: "Yang " -0x7081: "Qi " -0x7082: "Zhong " -0x7083: "Fen " -0x7084: "Niu " -0x7085: "Jiong " -0x7086: "Wen " -0x7087: "Po " -0x7088: "Yi " -0x7089: "Lu " -0x708a: "Chui " -0x708b: "Pi " -0x708c: "Kai " -0x708d: "Pan " -0x708e: "Yan " -0x708f: "Kai " -0x7090: "Pang " -0x7091: "Mu " -0x7092: "Chao " -0x7093: "Liao " -0x7094: "Gui " -0x7095: "Kang " -0x7096: "Tun " -0x7097: "Guang " -0x7098: "Xin " -0x7099: "Zhi " -0x709a: "Guang " -0x709b: "Guang " -0x709c: "Wei " -0x709d: "Qiang " -0x709e: "[?] " -0x709f: "Da " -0x70a0: "Xia " -0x70a1: "Zheng " -0x70a2: "Zhu " -0x70a3: "Ke " -0x70a4: "Zhao " -0x70a5: "Fu " -0x70a6: "Ba " -0x70a7: "Duo " -0x70a8: "Duo " -0x70a9: "Ling " -0x70aa: "Zhuo " -0x70ab: "Xuan " -0x70ac: "Ju " -0x70ad: "Tan " -0x70ae: "Pao " -0x70af: "Jiong " -0x70b0: "Pao " -0x70b1: "Tai " -0x70b2: "Tai " -0x70b3: "Bing " -0x70b4: "Yang " -0x70b5: "Tong " -0x70b6: "Han " -0x70b7: "Zhu " -0x70b8: "Zha " -0x70b9: "Dian " -0x70ba: "Wei " -0x70bb: "Shi " -0x70bc: "Lian " -0x70bd: "Chi " -0x70be: "Huang " -0x70bf: "[?] " -0x70c0: "Hu " -0x70c1: "Shuo " -0x70c2: "Lan " -0x70c3: "Jing " -0x70c4: "Jiao " -0x70c5: "Xu " -0x70c6: "Xing " -0x70c7: "Quan " -0x70c8: "Lie " -0x70c9: "Huan " -0x70ca: "Yang " -0x70cb: "Xiao " -0x70cc: "Xiu " -0x70cd: "Xian " -0x70ce: "Yin " -0x70cf: "Wu " -0x70d0: "Zhou " -0x70d1: "Yao " -0x70d2: "Shi " -0x70d3: "Wei " -0x70d4: "Tong " -0x70d5: "Xue " -0x70d6: "Zai " -0x70d7: "Kai " -0x70d8: "Hong " -0x70d9: "Luo " -0x70da: "Xia " -0x70db: "Zhu " -0x70dc: "Xuan " -0x70dd: "Zheng " -0x70de: "Po " -0x70df: "Yan " -0x70e0: "Hui " -0x70e1: "Guang " -0x70e2: "Zhe " -0x70e3: "Hui " -0x70e4: "Kao " -0x70e5: "[?] " -0x70e6: "Fan " -0x70e7: "Shao " -0x70e8: "Ye " -0x70e9: "Hui " -0x70ea: "[?] " -0x70eb: "Tang " -0x70ec: "Jin " -0x70ed: "Re " -0x70ee: "[?] " -0x70ef: "Xi " -0x70f0: "Fu " -0x70f1: "Jiong " -0x70f2: "Che " -0x70f3: "Pu " -0x70f4: "Jing " -0x70f5: "Zhuo " -0x70f6: "Ting " -0x70f7: "Wan " -0x70f8: "Hai " -0x70f9: "Peng " -0x70fa: "Lang " -0x70fb: "Shan " -0x70fc: "Hu " -0x70fd: "Feng " -0x70fe: "Chi " -0x70ff: "Rong " -/* x071 */ -0x7100: "Hu " -0x7101: "Xi " -0x7102: "Shu " -0x7103: "He " -0x7104: "Xun " -0x7105: "Ku " -0x7106: "Jue " -0x7107: "Xiao " -0x7108: "Xi " -0x7109: "Yan " -0x710a: "Han " -0x710b: "Zhuang " -0x710c: "Jun " -0x710d: "Di " -0x710e: "Xie " -0x710f: "Ji " -0x7110: "Wu " -0x7111: "[?] " -0x7112: "[?] " -0x7113: "Han " -0x7114: "Yan " -0x7115: "Huan " -0x7116: "Men " -0x7117: "Ju " -0x7118: "Chou " -0x7119: "Bei " -0x711a: "Fen " -0x711b: "Lin " -0x711c: "Kun " -0x711d: "Hun " -0x711e: "Tun " -0x711f: "Xi " -0x7120: "Cui " -0x7121: "Wu " -0x7122: "Hong " -0x7123: "Ju " -0x7124: "Fu " -0x7125: "Wo " -0x7126: "Jiao " -0x7127: "Cong " -0x7128: "Feng " -0x7129: "Ping " -0x712a: "Qiong " -0x712b: "Ruo " -0x712c: "Xi " -0x712d: "Qiong " -0x712e: "Xin " -0x712f: "Zhuo " -0x7130: "Yan " -0x7131: "Yan " -0x7132: "Yi " -0x7133: "Jue " -0x7134: "Yu " -0x7135: "Gang " -0x7136: "Ran " -0x7137: "Pi " -0x7138: "Gu " -0x7139: "[?] " -0x713a: "Sheng " -0x713b: "Chang " -0x713c: "Shao " -0x713d: "[?] " -0x713e: "[?] " -0x713f: "[?] " -0x7140: "[?] " -0x7141: "Chen " -0x7142: "He " -0x7143: "Kui " -0x7144: "Zhong " -0x7145: "Duan " -0x7146: "Xia " -0x7147: "Hui " -0x7148: "Feng " -0x7149: "Lian " -0x714a: "Xuan " -0x714b: "Xing " -0x714c: "Huang " -0x714d: "Jiao " -0x714e: "Jian " -0x714f: "Bi " -0x7150: "Ying " -0x7151: "Zhu " -0x7152: "Wei " -0x7153: "Tuan " -0x7154: "Tian " -0x7155: "Xi " -0x7156: "Nuan " -0x7157: "Nuan " -0x7158: "Chan " -0x7159: "Yan " -0x715a: "Jiong " -0x715b: "Jiong " -0x715c: "Yu " -0x715d: "Mei " -0x715e: "Sha " -0x715f: "Wei " -0x7160: "Ye " -0x7161: "Xin " -0x7162: "Qiong " -0x7163: "Rou " -0x7164: "Mei " -0x7165: "Huan " -0x7166: "Xu " -0x7167: "Zhao " -0x7168: "Wei " -0x7169: "Fan " -0x716a: "Qiu " -0x716b: "Sui " -0x716c: "Yang " -0x716d: "Lie " -0x716e: "Zhu " -0x716f: "Jie " -0x7170: "Gao " -0x7171: "Gua " -0x7172: "Bao " -0x7173: "Hu " -0x7174: "Yun " -0x7175: "Xia " -0x7176: "[?] " -0x7177: "[?] " -0x7178: "Bian " -0x7179: "Gou " -0x717a: "Tui " -0x717b: "Tang " -0x717c: "Chao " -0x717d: "Shan " -0x717e: "N " -0x717f: "Bo " -0x7180: "Huang " -0x7181: "Xie " -0x7182: "Xi " -0x7183: "Wu " -0x7184: "Xi " -0x7185: "Yun " -0x7186: "He " -0x7187: "He " -0x7188: "Xi " -0x7189: "Yun " -0x718a: "Xiong " -0x718b: "Nai " -0x718c: "Shan " -0x718d: "Qiong " -0x718e: "Yao " -0x718f: "Xun " -0x7190: "Mi " -0x7191: "Lian " -0x7192: "Ying " -0x7193: "Wen " -0x7194: "Rong " -0x7195: "Oozutsu " -0x7196: "[?] " -0x7197: "Qiang " -0x7198: "Liu " -0x7199: "Xi " -0x719a: "Bi " -0x719b: "Biao " -0x719c: "Zong " -0x719d: "Lu " -0x719e: "Jian " -0x719f: "Shou " -0x71a0: "Yi " -0x71a1: "Lou " -0x71a2: "Feng " -0x71a3: "Sui " -0x71a4: "Yi " -0x71a5: "Tong " -0x71a6: "Jue " -0x71a7: "Zong " -0x71a8: "Yun " -0x71a9: "Hu " -0x71aa: "Yi " -0x71ab: "Zhi " -0x71ac: "Ao " -0x71ad: "Wei " -0x71ae: "Liao " -0x71af: "Han " -0x71b0: "Ou " -0x71b1: "Re " -0x71b2: "Jiong " -0x71b3: "Man " -0x71b4: "[?] " -0x71b5: "Shang " -0x71b6: "Cuan " -0x71b7: "Zeng " -0x71b8: "Jian " -0x71b9: "Xi " -0x71ba: "Xi " -0x71bb: "Xi " -0x71bc: "Yi " -0x71bd: "Xiao " -0x71be: "Chi " -0x71bf: "Huang " -0x71c0: "Chan " -0x71c1: "Ye " -0x71c2: "Qian " -0x71c3: "Ran " -0x71c4: "Yan " -0x71c5: "Xian " -0x71c6: "Qiao " -0x71c7: "Zun " -0x71c8: "Deng " -0x71c9: "Dun " -0x71ca: "Shen " -0x71cb: "Jiao " -0x71cc: "Fen " -0x71cd: "Si " -0x71ce: "Liao " -0x71cf: "Yu " -0x71d0: "Lin " -0x71d1: "Tong " -0x71d2: "Shao " -0x71d3: "Fen " -0x71d4: "Fan " -0x71d5: "Yan " -0x71d6: "Xun " -0x71d7: "Lan " -0x71d8: "Mei " -0x71d9: "Tang " -0x71da: "Yi " -0x71db: "Jing " -0x71dc: "Men " -0x71dd: "[?] " -0x71de: "[?] " -0x71df: "Ying " -0x71e0: "Yu " -0x71e1: "Yi " -0x71e2: "Xue " -0x71e3: "Lan " -0x71e4: "Tai " -0x71e5: "Zao " -0x71e6: "Can " -0x71e7: "Sui " -0x71e8: "Xi " -0x71e9: "Que " -0x71ea: "Cong " -0x71eb: "Lian " -0x71ec: "Hui " -0x71ed: "Zhu " -0x71ee: "Xie " -0x71ef: "Ling " -0x71f0: "Wei " -0x71f1: "Yi " -0x71f2: "Xie " -0x71f3: "Zhao " -0x71f4: "Hui " -0x71f5: "Tatsu " -0x71f6: "Nung " -0x71f7: "Lan " -0x71f8: "Ru " -0x71f9: "Xian " -0x71fa: "Kao " -0x71fb: "Xun " -0x71fc: "Jin " -0x71fd: "Chou " -0x71fe: "Chou " -0x71ff: "Yao " -/* x072 */ -0x7200: "He " -0x7201: "Lan " -0x7202: "Biao " -0x7203: "Rong " -0x7204: "Li " -0x7205: "Mo " -0x7206: "Bao " -0x7207: "Ruo " -0x7208: "Lu " -0x7209: "La " -0x720a: "Ao " -0x720b: "Xun " -0x720c: "Kuang " -0x720d: "Shuo " -0x720e: "[?] " -0x720f: "Li " -0x7210: "Lu " -0x7211: "Jue " -0x7212: "Liao " -0x7213: "Yan " -0x7214: "Xi " -0x7215: "Xie " -0x7216: "Long " -0x7217: "Ye " -0x7218: "[?] " -0x7219: "Rang " -0x721a: "Yue " -0x721b: "Lan " -0x721c: "Cong " -0x721d: "Jue " -0x721e: "Tong " -0x721f: "Guan " -0x7220: "[?] " -0x7221: "Che " -0x7222: "Mi " -0x7223: "Tang " -0x7224: "Lan " -0x7225: "Zhu " -0x7226: "[?] " -0x7227: "Ling " -0x7228: "Cuan " -0x7229: "Yu " -0x722a: "Zhua " -0x722b: "Tsumekanmuri " -0x722c: "Pa " -0x722d: "Zheng " -0x722e: "Pao " -0x722f: "Cheng " -0x7230: "Yuan " -0x7231: "Ai " -0x7232: "Wei " -0x7233: "[?] " -0x7234: "Jue " -0x7235: "Jue " -0x7236: "Fu " -0x7237: "Ye " -0x7238: "Ba " -0x7239: "Die " -0x723a: "Ye " -0x723b: "Yao " -0x723c: "Zu " -0x723d: "Shuang " -0x723e: "Er " -0x723f: "Qiang " -0x7240: "Chuang " -0x7241: "Ge " -0x7242: "Zang " -0x7243: "Die " -0x7244: "Qiang " -0x7245: "Yong " -0x7246: "Qiang " -0x7247: "Pian " -0x7248: "Ban " -0x7249: "Pan " -0x724a: "Shao " -0x724b: "Jian " -0x724c: "Pai " -0x724d: "Du " -0x724e: "Chuang " -0x724f: "Tou " -0x7250: "Zha " -0x7251: "Bian " -0x7252: "Die " -0x7253: "Bang " -0x7254: "Bo " -0x7255: "Chuang " -0x7256: "You " -0x7257: "[?] " -0x7258: "Du " -0x7259: "Ya " -0x725a: "Cheng " -0x725b: "Niu " -0x725c: "Ushihen " -0x725d: "Pin " -0x725e: "Jiu " -0x725f: "Mou " -0x7260: "Tuo " -0x7261: "Mu " -0x7262: "Lao " -0x7263: "Ren " -0x7264: "Mang " -0x7265: "Fang " -0x7266: "Mao " -0x7267: "Mu " -0x7268: "Gang " -0x7269: "Wu " -0x726a: "Yan " -0x726b: "Ge " -0x726c: "Bei " -0x726d: "Si " -0x726e: "Jian " -0x726f: "Gu " -0x7270: "You " -0x7271: "Ge " -0x7272: "Sheng " -0x7273: "Mu " -0x7274: "Di " -0x7275: "Qian " -0x7276: "Quan " -0x7277: "Quan " -0x7278: "Zi " -0x7279: "Te " -0x727a: "Xi " -0x727b: "Mang " -0x727c: "Keng " -0x727d: "Qian " -0x727e: "Wu " -0x727f: "Gu " -0x7280: "Xi " -0x7281: "Li " -0x7282: "Li " -0x7283: "Pou " -0x7284: "Ji " -0x7285: "Gang " -0x7286: "Zhi " -0x7287: "Ben " -0x7288: "Quan " -0x7289: "Run " -0x728a: "Du " -0x728b: "Ju " -0x728c: "Jia " -0x728d: "Jian " -0x728e: "Feng " -0x728f: "Pian " -0x7290: "Ke " -0x7291: "Ju " -0x7292: "Kao " -0x7293: "Chu " -0x7294: "Xi " -0x7295: "Bei " -0x7296: "Luo " -0x7297: "Jie " -0x7298: "Ma " -0x7299: "San " -0x729a: "Wei " -0x729b: "Li " -0x729c: "Dun " -0x729d: "Tong " -0x729e: "[?] " -0x729f: "Jiang " -0x72a0: "Ikenie " -0x72a1: "Li " -0x72a2: "Du " -0x72a3: "Lie " -0x72a4: "Pi " -0x72a5: "Piao " -0x72a6: "Bao " -0x72a7: "Xi " -0x72a8: "Chou " -0x72a9: "Wei " -0x72aa: "Kui " -0x72ab: "Chou " -0x72ac: "Quan " -0x72ad: "Fan " -0x72ae: "Ba " -0x72af: "Fan " -0x72b0: "Qiu " -0x72b1: "Ji " -0x72b2: "Cai " -0x72b3: "Chuo " -0x72b4: "An " -0x72b5: "Jie " -0x72b6: "Zhuang " -0x72b7: "Guang " -0x72b8: "Ma " -0x72b9: "You " -0x72ba: "Kang " -0x72bb: "Bo " -0x72bc: "Hou " -0x72bd: "Ya " -0x72be: "Yin " -0x72bf: "Huan " -0x72c0: "Zhuang " -0x72c1: "Yun " -0x72c2: "Kuang " -0x72c3: "Niu " -0x72c4: "Di " -0x72c5: "Qing " -0x72c6: "Zhong " -0x72c7: "Mu " -0x72c8: "Bei " -0x72c9: "Pi " -0x72ca: "Ju " -0x72cb: "Ni " -0x72cc: "Sheng " -0x72cd: "Pao " -0x72ce: "Xia " -0x72cf: "Tuo " -0x72d0: "Hu " -0x72d1: "Ling " -0x72d2: "Fei " -0x72d3: "Pi " -0x72d4: "Ni " -0x72d5: "Ao " -0x72d6: "You " -0x72d7: "Gou " -0x72d8: "Yue " -0x72d9: "Ju " -0x72da: "Dan " -0x72db: "Po " -0x72dc: "Gu " -0x72dd: "Xian " -0x72de: "Ning " -0x72df: "Huan " -0x72e0: "Hen " -0x72e1: "Jiao " -0x72e2: "He " -0x72e3: "Zhao " -0x72e4: "Ji " -0x72e5: "Xun " -0x72e6: "Shan " -0x72e7: "Ta " -0x72e8: "Rong " -0x72e9: "Shou " -0x72ea: "Tong " -0x72eb: "Lao " -0x72ec: "Du " -0x72ed: "Xia " -0x72ee: "Shi " -0x72ef: "Hua " -0x72f0: "Zheng " -0x72f1: "Yu " -0x72f2: "Sun " -0x72f3: "Yu " -0x72f4: "Bi " -0x72f5: "Mang " -0x72f6: "Xi " -0x72f7: "Juan " -0x72f8: "Li " -0x72f9: "Xia " -0x72fa: "Yin " -0x72fb: "Suan " -0x72fc: "Lang " -0x72fd: "Bei " -0x72fe: "Zhi " -0x72ff: "Yan " -/* x073 */ -0x7300: "Sha " -0x7301: "Li " -0x7302: "Han " -0x7303: "Xian " -0x7304: "Jing " -0x7305: "Pai " -0x7306: "Fei " -0x7307: "Yao " -0x7308: "Ba " -0x7309: "Qi " -0x730a: "Ni " -0x730b: "Biao " -0x730c: "Yin " -0x730d: "Lai " -0x730e: "Xi " -0x730f: "Jian " -0x7310: "Qiang " -0x7311: "Kun " -0x7312: "Yan " -0x7313: "Guo " -0x7314: "Zong " -0x7315: "Mi " -0x7316: "Chang " -0x7317: "Yi " -0x7318: "Zhi " -0x7319: "Zheng " -0x731a: "Ya " -0x731b: "Meng " -0x731c: "Cai " -0x731d: "Cu " -0x731e: "She " -0x731f: "Kari " -0x7320: "Cen " -0x7321: "Luo " -0x7322: "Hu " -0x7323: "Zong " -0x7324: "Ji " -0x7325: "Wei " -0x7326: "Feng " -0x7327: "Wo " -0x7328: "Yuan " -0x7329: "Xing " -0x732a: "Zhu " -0x732b: "Mao " -0x732c: "Wei " -0x732d: "Yuan " -0x732e: "Xian " -0x732f: "Tuan " -0x7330: "Ya " -0x7331: "Nao " -0x7332: "Xie " -0x7333: "Jia " -0x7334: "Hou " -0x7335: "Bian " -0x7336: "You " -0x7337: "You " -0x7338: "Mei " -0x7339: "Zha " -0x733a: "Yao " -0x733b: "Sun " -0x733c: "Bo " -0x733d: "Ming " -0x733e: "Hua " -0x733f: "Yuan " -0x7340: "Sou " -0x7341: "Ma " -0x7342: "Yuan " -0x7343: "Dai " -0x7344: "Yu " -0x7345: "Shi " -0x7346: "Hao " -0x7347: "[?] " -0x7348: "Yi " -0x7349: "Zhen " -0x734a: "Chuang " -0x734b: "Hao " -0x734c: "Man " -0x734d: "Jing " -0x734e: "Jiang " -0x734f: "Mu " -0x7350: "Zhang " -0x7351: "Chan " -0x7352: "Ao " -0x7353: "Ao " -0x7354: "Hao " -0x7355: "Cui " -0x7356: "Fen " -0x7357: "Jue " -0x7358: "Bi " -0x7359: "Bi " -0x735a: "Huang " -0x735b: "Pu " -0x735c: "Lin " -0x735d: "Yu " -0x735e: "Tong " -0x735f: "Yao " -0x7360: "Liao " -0x7361: "Shuo " -0x7362: "Xiao " -0x7363: "Swu " -0x7364: "Ton " -0x7365: "Xi " -0x7366: "Ge " -0x7367: "Juan " -0x7368: "Du " -0x7369: "Hui " -0x736a: "Kuai " -0x736b: "Xian " -0x736c: "Xie " -0x736d: "Ta " -0x736e: "Xian " -0x736f: "Xun " -0x7370: "Ning " -0x7371: "Pin " -0x7372: "Huo " -0x7373: "Nou " -0x7374: "Meng " -0x7375: "Lie " -0x7376: "Nao " -0x7377: "Guang " -0x7378: "Shou " -0x7379: "Lu " -0x737a: "Ta " -0x737b: "Xian " -0x737c: "Mi " -0x737d: "Rang " -0x737e: "Huan " -0x737f: "Nao " -0x7380: "Luo " -0x7381: "Xian " -0x7382: "Qi " -0x7383: "Jue " -0x7384: "Xuan " -0x7385: "Miao " -0x7386: "Zi " -0x7387: "Lu " -0x7388: "Lu " -0x7389: "Yu " -0x738a: "Su " -0x738b: "Wang " -0x738c: "Qiu " -0x738d: "Ga " -0x738e: "Ding " -0x738f: "Le " -0x7390: "Ba " -0x7391: "Ji " -0x7392: "Hong " -0x7393: "Di " -0x7394: "Quan " -0x7395: "Gan " -0x7396: "Jiu " -0x7397: "Yu " -0x7398: "Ji " -0x7399: "Yu " -0x739a: "Yang " -0x739b: "Ma " -0x739c: "Gong " -0x739d: "Wu " -0x739e: "Fu " -0x739f: "Wen " -0x73a0: "Jie " -0x73a1: "Ya " -0x73a2: "Fen " -0x73a3: "Bian " -0x73a4: "Beng " -0x73a5: "Yue " -0x73a6: "Jue " -0x73a7: "Yun " -0x73a8: "Jue " -0x73a9: "Wan " -0x73aa: "Jian " -0x73ab: "Mei " -0x73ac: "Dan " -0x73ad: "Pi " -0x73ae: "Wei " -0x73af: "Huan " -0x73b0: "Xian " -0x73b1: "Qiang " -0x73b2: "Ling " -0x73b3: "Dai " -0x73b4: "Yi " -0x73b5: "An " -0x73b6: "Ping " -0x73b7: "Dian " -0x73b8: "Fu " -0x73b9: "Xuan " -0x73ba: "Xi " -0x73bb: "Bo " -0x73bc: "Ci " -0x73bd: "Gou " -0x73be: "Jia " -0x73bf: "Shao " -0x73c0: "Po " -0x73c1: "Ci " -0x73c2: "Ke " -0x73c3: "Ran " -0x73c4: "Sheng " -0x73c5: "Shen " -0x73c6: "Yi " -0x73c7: "Zu " -0x73c8: "Jia " -0x73c9: "Min " -0x73ca: "Shan " -0x73cb: "Liu " -0x73cc: "Bi " -0x73cd: "Zhen " -0x73ce: "Zhen " -0x73cf: "Jue " -0x73d0: "Fa " -0x73d1: "Long " -0x73d2: "Jin " -0x73d3: "Jiao " -0x73d4: "Jian " -0x73d5: "Li " -0x73d6: "Guang " -0x73d7: "Xian " -0x73d8: "Zhou " -0x73d9: "Gong " -0x73da: "Yan " -0x73db: "Xiu " -0x73dc: "Yang " -0x73dd: "Xu " -0x73de: "Luo " -0x73df: "Su " -0x73e0: "Zhu " -0x73e1: "Qin " -0x73e2: "Ken " -0x73e3: "Xun " -0x73e4: "Bao " -0x73e5: "Er " -0x73e6: "Xiang " -0x73e7: "Yao " -0x73e8: "Xia " -0x73e9: "Heng " -0x73ea: "Gui " -0x73eb: "Chong " -0x73ec: "Xu " -0x73ed: "Ban " -0x73ee: "Pei " -0x73ef: "[?] " -0x73f0: "Dang " -0x73f1: "Ei " -0x73f2: "Hun " -0x73f3: "Wen " -0x73f4: "E " -0x73f5: "Cheng " -0x73f6: "Ti " -0x73f7: "Wu " -0x73f8: "Wu " -0x73f9: "Cheng " -0x73fa: "Jun " -0x73fb: "Mei " -0x73fc: "Bei " -0x73fd: "Ting " -0x73fe: "Xian " -0x73ff: "Chuo " -/* x074 */ -0x7400: "Han " -0x7401: "Xuan " -0x7402: "Yan " -0x7403: "Qiu " -0x7404: "Quan " -0x7405: "Lang " -0x7406: "Li " -0x7407: "Xiu " -0x7408: "Fu " -0x7409: "Liu " -0x740a: "Ye " -0x740b: "Xi " -0x740c: "Ling " -0x740d: "Li " -0x740e: "Jin " -0x740f: "Lian " -0x7410: "Suo " -0x7411: "Chiisai " -0x7412: "[?] " -0x7413: "Wan " -0x7414: "Dian " -0x7415: "Pin " -0x7416: "Zhan " -0x7417: "Cui " -0x7418: "Min " -0x7419: "Yu " -0x741a: "Ju " -0x741b: "Chen " -0x741c: "Lai " -0x741d: "Wen " -0x741e: "Sheng " -0x741f: "Wei " -0x7420: "Dian " -0x7421: "Chu " -0x7422: "Zhuo " -0x7423: "Pei " -0x7424: "Cheng " -0x7425: "Hu " -0x7426: "Qi " -0x7427: "E " -0x7428: "Kun " -0x7429: "Chang " -0x742a: "Qi " -0x742b: "Beng " -0x742c: "Wan " -0x742d: "Lu " -0x742e: "Cong " -0x742f: "Guan " -0x7430: "Yan " -0x7431: "Diao " -0x7432: "Bei " -0x7433: "Lin " -0x7434: "Qin " -0x7435: "Pi " -0x7436: "Pa " -0x7437: "Que " -0x7438: "Zhuo " -0x7439: "Qin " -0x743a: "Fa " -0x743b: "[?] " -0x743c: "Qiong " -0x743d: "Du " -0x743e: "Jie " -0x743f: "Hun " -0x7440: "Yu " -0x7441: "Mao " -0x7442: "Mei " -0x7443: "Chun " -0x7444: "Xuan " -0x7445: "Ti " -0x7446: "Xing " -0x7447: "Dai " -0x7448: "Rou " -0x7449: "Min " -0x744a: "Zhen " -0x744b: "Wei " -0x744c: "Ruan " -0x744d: "Huan " -0x744e: "Jie " -0x744f: "Chuan " -0x7450: "Jian " -0x7451: "Zhuan " -0x7452: "Yang " -0x7453: "Lian " -0x7454: "Quan " -0x7455: "Xia " -0x7456: "Duan " -0x7457: "Yuan " -0x7458: "Ye " -0x7459: "Nao " -0x745a: "Hu " -0x745b: "Ying " -0x745c: "Yu " -0x745d: "Huang " -0x745e: "Rui " -0x745f: "Se " -0x7460: "Liu " -0x7461: "Shi " -0x7462: "Rong " -0x7463: "Suo " -0x7464: "Yao " -0x7465: "Wen " -0x7466: "Wu " -0x7467: "Jin " -0x7468: "Jin " -0x7469: "Ying " -0x746a: "Ma " -0x746b: "Tao " -0x746c: "Liu " -0x746d: "Tang " -0x746e: "Li " -0x746f: "Lang " -0x7470: "Gui " -0x7471: "Zhen " -0x7472: "Qiang " -0x7473: "Cuo " -0x7474: "Jue " -0x7475: "Zhao " -0x7476: "Yao " -0x7477: "Ai " -0x7478: "Bin " -0x7479: "Tu " -0x747a: "Chang " -0x747b: "Kun " -0x747c: "Zhuan " -0x747d: "Cong " -0x747e: "Jin " -0x747f: "Yi " -0x7480: "Cui " -0x7481: "Cong " -0x7482: "Qi " -0x7483: "Li " -0x7484: "Ying " -0x7485: "Suo " -0x7486: "Qiu " -0x7487: "Xuan " -0x7488: "Ao " -0x7489: "Lian " -0x748a: "Man " -0x748b: "Zhang " -0x748c: "Yin " -0x748d: "[?] " -0x748e: "Ying " -0x748f: "Zhi " -0x7490: "Lu " -0x7491: "Wu " -0x7492: "Deng " -0x7493: "Xiou " -0x7494: "Zeng " -0x7495: "Xun " -0x7496: "Qu " -0x7497: "Dang " -0x7498: "Lin " -0x7499: "Liao " -0x749a: "Qiong " -0x749b: "Su " -0x749c: "Huang " -0x749d: "Gui " -0x749e: "Pu " -0x749f: "Jing " -0x74a0: "Fan " -0x74a1: "Jin " -0x74a2: "Liu " -0x74a3: "Ji " -0x74a4: "[?] " -0x74a5: "Jing " -0x74a6: "Ai " -0x74a7: "Bi " -0x74a8: "Can " -0x74a9: "Qu " -0x74aa: "Zao " -0x74ab: "Dang " -0x74ac: "Jiao " -0x74ad: "Gun " -0x74ae: "Tan " -0x74af: "Hui " -0x74b0: "Huan " -0x74b1: "Se " -0x74b2: "Sui " -0x74b3: "Tian " -0x74b4: "[?] " -0x74b5: "Yu " -0x74b6: "Jin " -0x74b7: "Lu " -0x74b8: "Bin " -0x74b9: "Shou " -0x74ba: "Wen " -0x74bb: "Zui " -0x74bc: "Lan " -0x74bd: "Xi " -0x74be: "Ji " -0x74bf: "Xuan " -0x74c0: "Ruan " -0x74c1: "Huo " -0x74c2: "Gai " -0x74c3: "Lei " -0x74c4: "Du " -0x74c5: "Li " -0x74c6: "Zhi " -0x74c7: "Rou " -0x74c8: "Li " -0x74c9: "Zan " -0x74ca: "Qiong " -0x74cb: "Zhe " -0x74cc: "Gui " -0x74cd: "Sui " -0x74ce: "La " -0x74cf: "Long " -0x74d0: "Lu " -0x74d1: "Li " -0x74d2: "Zan " -0x74d3: "Lan " -0x74d4: "Ying " -0x74d5: "Mi " -0x74d6: "Xiang " -0x74d7: "Xi " -0x74d8: "Guan " -0x74d9: "Dao " -0x74da: "Zan " -0x74db: "Huan " -0x74dc: "Gua " -0x74dd: "Bo " -0x74de: "Die " -0x74df: "Bao " -0x74e0: "Hu " -0x74e1: "Zhi " -0x74e2: "Piao " -0x74e3: "Ban " -0x74e4: "Rang " -0x74e5: "Li " -0x74e6: "Wa " -0x74e7: "Dekaguramu " -0x74e8: "Jiang " -0x74e9: "Qian " -0x74ea: "Fan " -0x74eb: "Pen " -0x74ec: "Fang " -0x74ed: "Dan " -0x74ee: "Weng " -0x74ef: "Ou " -0x74f0: "Deshiguramu " -0x74f1: "Miriguramu " -0x74f2: "Thon " -0x74f3: "Hu " -0x74f4: "Ling " -0x74f5: "Yi " -0x74f6: "Ping " -0x74f7: "Ci " -0x74f8: "Hekutogura " -0x74f9: "Juan " -0x74fa: "Chang " -0x74fb: "Chi " -0x74fc: "Sarake " -0x74fd: "Dang " -0x74fe: "Meng " -0x74ff: "Pou " -/* x075 */ -0x7500: "Zhui " -0x7501: "Ping " -0x7502: "Bian " -0x7503: "Zhou " -0x7504: "Zhen " -0x7505: "Senchigura " -0x7506: "Ci " -0x7507: "Ying " -0x7508: "Qi " -0x7509: "Xian " -0x750a: "Lou " -0x750b: "Di " -0x750c: "Ou " -0x750d: "Meng " -0x750e: "Zhuan " -0x750f: "Peng " -0x7510: "Lin " -0x7511: "Zeng " -0x7512: "Wu " -0x7513: "Pi " -0x7514: "Dan " -0x7515: "Weng " -0x7516: "Ying " -0x7517: "Yan " -0x7518: "Gan " -0x7519: "Dai " -0x751a: "Shen " -0x751b: "Tian " -0x751c: "Tian " -0x751d: "Han " -0x751e: "Chang " -0x751f: "Sheng " -0x7520: "Qing " -0x7521: "Sheng " -0x7522: "Chan " -0x7523: "Chan " -0x7524: "Rui " -0x7525: "Sheng " -0x7526: "Su " -0x7527: "Sen " -0x7528: "Yong " -0x7529: "Shuai " -0x752a: "Lu " -0x752b: "Fu " -0x752c: "Yong " -0x752d: "Beng " -0x752e: "Feng " -0x752f: "Ning " -0x7530: "Tian " -0x7531: "You " -0x7532: "Jia " -0x7533: "Shen " -0x7534: "Zha " -0x7535: "Dian " -0x7536: "Fu " -0x7537: "Nan " -0x7538: "Dian " -0x7539: "Ping " -0x753a: "Ting " -0x753b: "Hua " -0x753c: "Ting " -0x753d: "Quan " -0x753e: "Zi " -0x753f: "Meng " -0x7540: "Bi " -0x7541: "Qi " -0x7542: "Liu " -0x7543: "Xun " -0x7544: "Liu " -0x7545: "Chang " -0x7546: "Mu " -0x7547: "Yun " -0x7548: "Fan " -0x7549: "Fu " -0x754a: "Geng " -0x754b: "Tian " -0x754c: "Jie " -0x754d: "Jie " -0x754e: "Quan " -0x754f: "Wei " -0x7550: "Fu " -0x7551: "Tian " -0x7552: "Mu " -0x7553: "Tap " -0x7554: "Pan " -0x7555: "Jiang " -0x7556: "Wa " -0x7557: "Da " -0x7558: "Nan " -0x7559: "Liu " -0x755a: "Ben " -0x755b: "Zhen " -0x755c: "Chu " -0x755d: "Mu " -0x755e: "Mu " -0x755f: "Ce " -0x7560: "Cen " -0x7561: "Gai " -0x7562: "Bi " -0x7563: "Da " -0x7564: "Zhi " -0x7565: "Lue " -0x7566: "Qi " -0x7567: "Lue " -0x7568: "Pan " -0x7569: "Kesa " -0x756a: "Fan " -0x756b: "Hua " -0x756c: "Yu " -0x756d: "Yu " -0x756e: "Mu " -0x756f: "Jun " -0x7570: "Yi " -0x7571: "Liu " -0x7572: "Yu " -0x7573: "Die " -0x7574: "Chou " -0x7575: "Hua " -0x7576: "Dang " -0x7577: "Chuo " -0x7578: "Ji " -0x7579: "Wan " -0x757a: "Jiang " -0x757b: "Sheng " -0x757c: "Chang " -0x757d: "Tuan " -0x757e: "Lei " -0x757f: "Ji " -0x7580: "Cha " -0x7581: "Liu " -0x7582: "Tatamu " -0x7583: "Tuan " -0x7584: "Lin " -0x7585: "Jiang " -0x7586: "Jiang " -0x7587: "Chou " -0x7588: "Bo " -0x7589: "Die " -0x758a: "Die " -0x758b: "Pi " -0x758c: "Nie " -0x758d: "Dan " -0x758e: "Shu " -0x758f: "Shu " -0x7590: "Zhi " -0x7591: "Yi " -0x7592: "Chuang " -0x7593: "Nai " -0x7594: "Ding " -0x7595: "Bi " -0x7596: "Jie " -0x7597: "Liao " -0x7598: "Gong " -0x7599: "Ge " -0x759a: "Jiu " -0x759b: "Zhou " -0x759c: "Xia " -0x759d: "Shan " -0x759e: "Xu " -0x759f: "Nue " -0x75a0: "Li " -0x75a1: "Yang " -0x75a2: "Chen " -0x75a3: "You " -0x75a4: "Ba " -0x75a5: "Jie " -0x75a6: "Jue " -0x75a7: "Zhi " -0x75a8: "Xia " -0x75a9: "Cui " -0x75aa: "Bi " -0x75ab: "Yi " -0x75ac: "Li " -0x75ad: "Zong " -0x75ae: "Chuang " -0x75af: "Feng " -0x75b0: "Zhu " -0x75b1: "Pao " -0x75b2: "Pi " -0x75b3: "Gan " -0x75b4: "Ke " -0x75b5: "Ci " -0x75b6: "Xie " -0x75b7: "Qi " -0x75b8: "Dan " -0x75b9: "Zhen " -0x75ba: "Fa " -0x75bb: "Zhi " -0x75bc: "Teng " -0x75bd: "Ju " -0x75be: "Ji " -0x75bf: "Fei " -0x75c0: "Qu " -0x75c1: "Dian " -0x75c2: "Jia " -0x75c3: "Xian " -0x75c4: "Cha " -0x75c5: "Bing " -0x75c6: "Ni " -0x75c7: "Zheng " -0x75c8: "Yong " -0x75c9: "Jing " -0x75ca: "Quan " -0x75cb: "Chong " -0x75cc: "Tong " -0x75cd: "Yi " -0x75ce: "Kai " -0x75cf: "Wei " -0x75d0: "Hui " -0x75d1: "Duo " -0x75d2: "Yang " -0x75d3: "Chi " -0x75d4: "Zhi " -0x75d5: "Hen " -0x75d6: "Ya " -0x75d7: "Mei " -0x75d8: "Dou " -0x75d9: "Jing " -0x75da: "Xiao " -0x75db: "Tong " -0x75dc: "Tu " -0x75dd: "Mang " -0x75de: "Pi " -0x75df: "Xiao " -0x75e0: "Suan " -0x75e1: "Pu " -0x75e2: "Li " -0x75e3: "Zhi " -0x75e4: "Cuo " -0x75e5: "Duo " -0x75e6: "Wu " -0x75e7: "Sha " -0x75e8: "Lao " -0x75e9: "Shou " -0x75ea: "Huan " -0x75eb: "Xian " -0x75ec: "Yi " -0x75ed: "Peng " -0x75ee: "Zhang " -0x75ef: "Guan " -0x75f0: "Tan " -0x75f1: "Fei " -0x75f2: "Ma " -0x75f3: "Lin " -0x75f4: "Chi " -0x75f5: "Ji " -0x75f6: "Dian " -0x75f7: "An " -0x75f8: "Chi " -0x75f9: "Bi " -0x75fa: "Bei " -0x75fb: "Min " -0x75fc: "Gu " -0x75fd: "Dui " -0x75fe: "E " -0x75ff: "Wei " -/* x076 */ -0x7600: "Yu " -0x7601: "Cui " -0x7602: "Ya " -0x7603: "Zhu " -0x7604: "Cu " -0x7605: "Dan " -0x7606: "Shen " -0x7607: "Zhung " -0x7608: "Ji " -0x7609: "Yu " -0x760a: "Hou " -0x760b: "Feng " -0x760c: "La " -0x760d: "Yang " -0x760e: "Shen " -0x760f: "Tu " -0x7610: "Yu " -0x7611: "Gua " -0x7612: "Wen " -0x7613: "Huan " -0x7614: "Ku " -0x7615: "Jia " -0x7616: "Yin " -0x7617: "Yi " -0x7618: "Lu " -0x7619: "Sao " -0x761a: "Jue " -0x761b: "Chi " -0x761c: "Xi " -0x761d: "Guan " -0x761e: "Yi " -0x761f: "Wen " -0x7620: "Ji " -0x7621: "Chuang " -0x7622: "Ban " -0x7623: "Lei " -0x7624: "Liu " -0x7625: "Chai " -0x7626: "Shou " -0x7627: "Nue " -0x7628: "Dian " -0x7629: "Da " -0x762a: "Pie " -0x762b: "Tan " -0x762c: "Zhang " -0x762d: "Biao " -0x762e: "Shen " -0x762f: "Cu " -0x7630: "Luo " -0x7631: "Yi " -0x7632: "Zong " -0x7633: "Chou " -0x7634: "Zhang " -0x7635: "Zhai " -0x7636: "Sou " -0x7637: "Suo " -0x7638: "Que " -0x7639: "Diao " -0x763a: "Lou " -0x763b: "Lu " -0x763c: "Mo " -0x763d: "Jin " -0x763e: "Yin " -0x763f: "Ying " -0x7640: "Huang " -0x7641: "Fu " -0x7642: "Liao " -0x7643: "Long " -0x7644: "Qiao " -0x7645: "Liu " -0x7646: "Lao " -0x7647: "Xian " -0x7648: "Fei " -0x7649: "Dan " -0x764a: "Yin " -0x764b: "He " -0x764c: "Yan " -0x764d: "Ban " -0x764e: "Xian " -0x764f: "Guan " -0x7650: "Guai " -0x7651: "Nong " -0x7652: "Yu " -0x7653: "Wei " -0x7654: "Yi " -0x7655: "Yong " -0x7656: "Pi " -0x7657: "Lei " -0x7658: "Li " -0x7659: "Shu " -0x765a: "Dan " -0x765b: "Lin " -0x765c: "Dian " -0x765d: "Lin " -0x765e: "Lai " -0x765f: "Pie " -0x7660: "Ji " -0x7661: "Chi " -0x7662: "Yang " -0x7663: "Xian " -0x7664: "Jie " -0x7665: "Zheng " -0x7666: "[?] " -0x7667: "Li " -0x7668: "Huo " -0x7669: "Lai " -0x766a: "Shaku " -0x766b: "Dian " -0x766c: "Xian " -0x766d: "Ying " -0x766e: "Yin " -0x766f: "Qu " -0x7670: "Yong " -0x7671: "Tan " -0x7672: "Dian " -0x7673: "Luo " -0x7674: "Luan " -0x7675: "Luan " -0x7676: "Bo " -0x7677: "[?] " -0x7678: "Gui " -0x7679: "Po " -0x767a: "Fa " -0x767b: "Deng " -0x767c: "Fa " -0x767d: "Bai " -0x767e: "Bai " -0x767f: "Qie " -0x7680: "Bi " -0x7681: "Zao " -0x7682: "Zao " -0x7683: "Mao " -0x7684: "De " -0x7685: "Pa " -0x7686: "Jie " -0x7687: "Huang " -0x7688: "Gui " -0x7689: "Ci " -0x768a: "Ling " -0x768b: "Gao " -0x768c: "Mo " -0x768d: "Ji " -0x768e: "Jiao " -0x768f: "Peng " -0x7690: "Gao " -0x7691: "Ai " -0x7692: "E " -0x7693: "Hao " -0x7694: "Han " -0x7695: "Bi " -0x7696: "Wan " -0x7697: "Chou " -0x7698: "Qian " -0x7699: "Xi " -0x769a: "Ai " -0x769b: "Jiong " -0x769c: "Hao " -0x769d: "Huang " -0x769e: "Hao " -0x769f: "Ze " -0x76a0: "Cui " -0x76a1: "Hao " -0x76a2: "Xiao " -0x76a3: "Ye " -0x76a4: "Po " -0x76a5: "Hao " -0x76a6: "Jiao " -0x76a7: "Ai " -0x76a8: "Xing " -0x76a9: "Huang " -0x76aa: "Li " -0x76ab: "Piao " -0x76ac: "He " -0x76ad: "Jiao " -0x76ae: "Pi " -0x76af: "Gan " -0x76b0: "Pao " -0x76b1: "Zhou " -0x76b2: "Jun " -0x76b3: "Qiu " -0x76b4: "Cun " -0x76b5: "Que " -0x76b6: "Zha " -0x76b7: "Gu " -0x76b8: "Jun " -0x76b9: "Jun " -0x76ba: "Zhou " -0x76bb: "Zha " -0x76bc: "Gu " -0x76bd: "Zhan " -0x76be: "Du " -0x76bf: "Min " -0x76c0: "Qi " -0x76c1: "Ying " -0x76c2: "Yu " -0x76c3: "Bei " -0x76c4: "Zhao " -0x76c5: "Zhong " -0x76c6: "Pen " -0x76c7: "He " -0x76c8: "Ying " -0x76c9: "He " -0x76ca: "Yi " -0x76cb: "Bo " -0x76cc: "Wan " -0x76cd: "He " -0x76ce: "Ang " -0x76cf: "Zhan " -0x76d0: "Yan " -0x76d1: "Jian " -0x76d2: "He " -0x76d3: "Yu " -0x76d4: "Kui " -0x76d5: "Fan " -0x76d6: "Gai " -0x76d7: "Dao " -0x76d8: "Pan " -0x76d9: "Fu " -0x76da: "Qiu " -0x76db: "Sheng " -0x76dc: "Dao " -0x76dd: "Lu " -0x76de: "Zhan " -0x76df: "Meng " -0x76e0: "Li " -0x76e1: "Jin " -0x76e2: "Xu " -0x76e3: "Jian " -0x76e4: "Pan " -0x76e5: "Guan " -0x76e6: "An " -0x76e7: "Lu " -0x76e8: "Shu " -0x76e9: "Zhou " -0x76ea: "Dang " -0x76eb: "An " -0x76ec: "Gu " -0x76ed: "Li " -0x76ee: "Mu " -0x76ef: "Cheng " -0x76f0: "Gan " -0x76f1: "Xu " -0x76f2: "Mang " -0x76f3: "Mang " -0x76f4: "Zhi " -0x76f5: "Qi " -0x76f6: "Ruan " -0x76f7: "Tian " -0x76f8: "Xiang " -0x76f9: "Dun " -0x76fa: "Xin " -0x76fb: "Xi " -0x76fc: "Pan " -0x76fd: "Feng " -0x76fe: "Dun " -0x76ff: "Min " -/* x077 */ -0x7700: "Ming " -0x7701: "Sheng " -0x7702: "Shi " -0x7703: "Yun " -0x7704: "Mian " -0x7705: "Pan " -0x7706: "Fang " -0x7707: "Miao " -0x7708: "Dan " -0x7709: "Mei " -0x770a: "Mao " -0x770b: "Kan " -0x770c: "Xian " -0x770d: "Ou " -0x770e: "Shi " -0x770f: "Yang " -0x7710: "Zheng " -0x7711: "Yao " -0x7712: "Shen " -0x7713: "Huo " -0x7714: "Da " -0x7715: "Zhen " -0x7716: "Kuang " -0x7717: "Ju " -0x7718: "Shen " -0x7719: "Chi " -0x771a: "Sheng " -0x771b: "Mei " -0x771c: "Mo " -0x771d: "Zhu " -0x771e: "Zhen " -0x771f: "Zhen " -0x7720: "Mian " -0x7721: "Di " -0x7722: "Yuan " -0x7723: "Die " -0x7724: "Yi " -0x7725: "Zi " -0x7726: "Zi " -0x7727: "Chao " -0x7728: "Zha " -0x7729: "Xuan " -0x772a: "Bing " -0x772b: "Mi " -0x772c: "Long " -0x772d: "Sui " -0x772e: "Dong " -0x772f: "Mi " -0x7730: "Die " -0x7731: "Yi " -0x7732: "Er " -0x7733: "Ming " -0x7734: "Xuan " -0x7735: "Chi " -0x7736: "Kuang " -0x7737: "Juan " -0x7738: "Mou " -0x7739: "Zhen " -0x773a: "Tiao " -0x773b: "Yang " -0x773c: "Yan " -0x773d: "Mo " -0x773e: "Zhong " -0x773f: "Mai " -0x7740: "Zhao " -0x7741: "Zheng " -0x7742: "Mei " -0x7743: "Jun " -0x7744: "Shao " -0x7745: "Han " -0x7746: "Huan " -0x7747: "Di " -0x7748: "Cheng " -0x7749: "Cuo " -0x774a: "Juan " -0x774b: "E " -0x774c: "Wan " -0x774d: "Xian " -0x774e: "Xi " -0x774f: "Kun " -0x7750: "Lai " -0x7751: "Jian " -0x7752: "Shan " -0x7753: "Tian " -0x7754: "Hun " -0x7755: "Wan " -0x7756: "Ling " -0x7757: "Shi " -0x7758: "Qiong " -0x7759: "Lie " -0x775a: "Yai " -0x775b: "Jing " -0x775c: "Zheng " -0x775d: "Li " -0x775e: "Lai " -0x775f: "Sui " -0x7760: "Juan " -0x7761: "Shui " -0x7762: "Sui " -0x7763: "Du " -0x7764: "Bi " -0x7765: "Bi " -0x7766: "Mu " -0x7767: "Hun " -0x7768: "Ni " -0x7769: "Lu " -0x776a: "Yi " -0x776b: "Jie " -0x776c: "Cai " -0x776d: "Zhou " -0x776e: "Yu " -0x776f: "Hun " -0x7770: "Ma " -0x7771: "Xia " -0x7772: "Xing " -0x7773: "Xi " -0x7774: "Gun " -0x7775: "Cai " -0x7776: "Chun " -0x7777: "Jian " -0x7778: "Mei " -0x7779: "Du " -0x777a: "Hou " -0x777b: "Xuan " -0x777c: "Ti " -0x777d: "Kui " -0x777e: "Gao " -0x777f: "Rui " -0x7780: "Mou " -0x7781: "Xu " -0x7782: "Fa " -0x7783: "Wen " -0x7784: "Miao " -0x7785: "Chou " -0x7786: "Kui " -0x7787: "Mi " -0x7788: "Weng " -0x7789: "Kou " -0x778a: "Dang " -0x778b: "Chen " -0x778c: "Ke " -0x778d: "Sou " -0x778e: "Xia " -0x778f: "Qiong " -0x7790: "Mao " -0x7791: "Ming " -0x7792: "Man " -0x7793: "Shui " -0x7794: "Ze " -0x7795: "Zhang " -0x7796: "Yi " -0x7797: "Diao " -0x7798: "Ou " -0x7799: "Mo " -0x779a: "Shun " -0x779b: "Cong " -0x779c: "Lou " -0x779d: "Chi " -0x779e: "Man " -0x779f: "Piao " -0x77a0: "Cheng " -0x77a1: "Ji " -0x77a2: "Meng " -0x77a3: "[?] " -0x77a4: "Run " -0x77a5: "Pie " -0x77a6: "Xi " -0x77a7: "Qiao " -0x77a8: "Pu " -0x77a9: "Zhu " -0x77aa: "Deng " -0x77ab: "Shen " -0x77ac: "Shun " -0x77ad: "Liao " -0x77ae: "Che " -0x77af: "Xian " -0x77b0: "Kan " -0x77b1: "Ye " -0x77b2: "Xu " -0x77b3: "Tong " -0x77b4: "Mou " -0x77b5: "Lin " -0x77b6: "Kui " -0x77b7: "Xian " -0x77b8: "Ye " -0x77b9: "Ai " -0x77ba: "Hui " -0x77bb: "Zhan " -0x77bc: "Jian " -0x77bd: "Gu " -0x77be: "Zhao " -0x77bf: "Qu " -0x77c0: "Wei " -0x77c1: "Chou " -0x77c2: "Sao " -0x77c3: "Ning " -0x77c4: "Xun " -0x77c5: "Yao " -0x77c6: "Huo " -0x77c7: "Meng " -0x77c8: "Mian " -0x77c9: "Bin " -0x77ca: "Mian " -0x77cb: "Li " -0x77cc: "Kuang " -0x77cd: "Jue " -0x77ce: "Xuan " -0x77cf: "Mian " -0x77d0: "Huo " -0x77d1: "Lu " -0x77d2: "Meng " -0x77d3: "Long " -0x77d4: "Guan " -0x77d5: "Man " -0x77d6: "Xi " -0x77d7: "Chu " -0x77d8: "Tang " -0x77d9: "Kan " -0x77da: "Zhu " -0x77db: "Mao " -0x77dc: "Jin " -0x77dd: "Lin " -0x77de: "Yu " -0x77df: "Shuo " -0x77e0: "Ce " -0x77e1: "Jue " -0x77e2: "Shi " -0x77e3: "Yi " -0x77e4: "Shen " -0x77e5: "Zhi " -0x77e6: "Hou " -0x77e7: "Shen " -0x77e8: "Ying " -0x77e9: "Ju " -0x77ea: "Zhou " -0x77eb: "Jiao " -0x77ec: "Cuo " -0x77ed: "Duan " -0x77ee: "Ai " -0x77ef: "Jiao " -0x77f0: "Zeng " -0x77f1: "Huo " -0x77f2: "Bai " -0x77f3: "Shi " -0x77f4: "Ding " -0x77f5: "Qi " -0x77f6: "Ji " -0x77f7: "Zi " -0x77f8: "Gan " -0x77f9: "Wu " -0x77fa: "Tuo " -0x77fb: "Ku " -0x77fc: "Qiang " -0x77fd: "Xi " -0x77fe: "Fan " -0x77ff: "Kuang " -/* x078 */ -0x7800: "Dang " -0x7801: "Ma " -0x7802: "Sha " -0x7803: "Dan " -0x7804: "Jue " -0x7805: "Li " -0x7806: "Fu " -0x7807: "Min " -0x7808: "Nuo " -0x7809: "Huo " -0x780a: "Kang " -0x780b: "Zhi " -0x780c: "Qi " -0x780d: "Kan " -0x780e: "Jie " -0x780f: "Fen " -0x7810: "E " -0x7811: "Ya " -0x7812: "Pi " -0x7813: "Zhe " -0x7814: "Yan " -0x7815: "Sui " -0x7816: "Zhuan " -0x7817: "Che " -0x7818: "Dun " -0x7819: "Pan " -0x781a: "Yan " -0x781b: "[?] " -0x781c: "Feng " -0x781d: "Fa " -0x781e: "Mo " -0x781f: "Zha " -0x7820: "Qu " -0x7821: "Yu " -0x7822: "Luo " -0x7823: "Tuo " -0x7824: "Tuo " -0x7825: "Di " -0x7826: "Zhai " -0x7827: "Zhen " -0x7828: "Ai " -0x7829: "Fei " -0x782a: "Mu " -0x782b: "Zhu " -0x782c: "Li " -0x782d: "Bian " -0x782e: "Nu " -0x782f: "Ping " -0x7830: "Peng " -0x7831: "Ling " -0x7832: "Pao " -0x7833: "Le " -0x7834: "Po " -0x7835: "Bo " -0x7836: "Po " -0x7837: "Shen " -0x7838: "Za " -0x7839: "Nuo " -0x783a: "Li " -0x783b: "Long " -0x783c: "Tong " -0x783d: "[?] " -0x783e: "Li " -0x783f: "Aragane " -0x7840: "Chu " -0x7841: "Keng " -0x7842: "Quan " -0x7843: "Zhu " -0x7844: "Kuang " -0x7845: "Huo " -0x7846: "E " -0x7847: "Nao " -0x7848: "Jia " -0x7849: "Lu " -0x784a: "Wei " -0x784b: "Ai " -0x784c: "Luo " -0x784d: "Ken " -0x784e: "Xing " -0x784f: "Yan " -0x7850: "Tong " -0x7851: "Peng " -0x7852: "Xi " -0x7853: "[?] " -0x7854: "Hong " -0x7855: "Shuo " -0x7856: "Xia " -0x7857: "Qiao " -0x7858: "[?] " -0x7859: "Wei " -0x785a: "Qiao " -0x785b: "[?] " -0x785c: "Keng " -0x785d: "Xiao " -0x785e: "Que " -0x785f: "Chan " -0x7860: "Lang " -0x7861: "Hong " -0x7862: "Yu " -0x7863: "Xiao " -0x7864: "Xia " -0x7865: "Mang " -0x7866: "Long " -0x7867: "Iong " -0x7868: "Che " -0x7869: "Che " -0x786a: "E " -0x786b: "Liu " -0x786c: "Ying " -0x786d: "Mang " -0x786e: "Que " -0x786f: "Yan " -0x7870: "Sha " -0x7871: "Kun " -0x7872: "Yu " -0x7873: "[?] " -0x7874: "Kaki " -0x7875: "Lu " -0x7876: "Chen " -0x7877: "Jian " -0x7878: "Nue " -0x7879: "Song " -0x787a: "Zhuo " -0x787b: "Keng " -0x787c: "Peng " -0x787d: "Yan " -0x787e: "Zhui " -0x787f: "Kong " -0x7880: "Ceng " -0x7881: "Qi " -0x7882: "Zong " -0x7883: "Qing " -0x7884: "Lin " -0x7885: "Jun " -0x7886: "Bo " -0x7887: "Ding " -0x7888: "Min " -0x7889: "Diao " -0x788a: "Jian " -0x788b: "He " -0x788c: "Lu " -0x788d: "Ai " -0x788e: "Sui " -0x788f: "Que " -0x7890: "Ling " -0x7891: "Bei " -0x7892: "Yin " -0x7893: "Dui " -0x7894: "Wu " -0x7895: "Qi " -0x7896: "Lun " -0x7897: "Wan " -0x7898: "Dian " -0x7899: "Gang " -0x789a: "Pei " -0x789b: "Qi " -0x789c: "Chen " -0x789d: "Ruan " -0x789e: "Yan " -0x789f: "Die " -0x78a0: "Ding " -0x78a1: "Du " -0x78a2: "Tuo " -0x78a3: "Jie " -0x78a4: "Ying " -0x78a5: "Bian " -0x78a6: "Ke " -0x78a7: "Bi " -0x78a8: "Wei " -0x78a9: "Shuo " -0x78aa: "Zhen " -0x78ab: "Duan " -0x78ac: "Xia " -0x78ad: "Dang " -0x78ae: "Ti " -0x78af: "Nao " -0x78b0: "Peng " -0x78b1: "Jian " -0x78b2: "Di " -0x78b3: "Tan " -0x78b4: "Cha " -0x78b5: "Seki " -0x78b6: "Qi " -0x78b7: "[?] " -0x78b8: "Feng " -0x78b9: "Xuan " -0x78ba: "Que " -0x78bb: "Que " -0x78bc: "Ma " -0x78bd: "Gong " -0x78be: "Nian " -0x78bf: "Su " -0x78c0: "E " -0x78c1: "Ci " -0x78c2: "Liu " -0x78c3: "Si " -0x78c4: "Tang " -0x78c5: "Bang " -0x78c6: "Hua " -0x78c7: "Pi " -0x78c8: "Wei " -0x78c9: "Sang " -0x78ca: "Lei " -0x78cb: "Cuo " -0x78cc: "Zhen " -0x78cd: "Xia " -0x78ce: "Qi " -0x78cf: "Lian " -0x78d0: "Pan " -0x78d1: "Wei " -0x78d2: "Yun " -0x78d3: "Dui " -0x78d4: "Zhe " -0x78d5: "Ke " -0x78d6: "La " -0x78d7: "[?] " -0x78d8: "Qing " -0x78d9: "Gun " -0x78da: "Zhuan " -0x78db: "Chan " -0x78dc: "Qi " -0x78dd: "Ao " -0x78de: "Peng " -0x78df: "Lu " -0x78e0: "Lu " -0x78e1: "Kan " -0x78e2: "Qiang " -0x78e3: "Chen " -0x78e4: "Yin " -0x78e5: "Lei " -0x78e6: "Biao " -0x78e7: "Qi " -0x78e8: "Mo " -0x78e9: "Qi " -0x78ea: "Cui " -0x78eb: "Zong " -0x78ec: "Qing " -0x78ed: "Chuo " -0x78ee: "[?] " -0x78ef: "Ji " -0x78f0: "Shan " -0x78f1: "Lao " -0x78f2: "Qu " -0x78f3: "Zeng " -0x78f4: "Deng " -0x78f5: "Jian " -0x78f6: "Xi " -0x78f7: "Lin " -0x78f8: "Ding " -0x78f9: "Dian " -0x78fa: "Huang " -0x78fb: "Pan " -0x78fc: "Za " -0x78fd: "Qiao " -0x78fe: "Di " -0x78ff: "Li " -/* x079 */ -0x7900: "Tani " -0x7901: "Jiao " -0x7902: "[?] " -0x7903: "Zhang " -0x7904: "Qiao " -0x7905: "Dun " -0x7906: "Xian " -0x7907: "Yu " -0x7908: "Zhui " -0x7909: "He " -0x790a: "Huo " -0x790b: "Zhai " -0x790c: "Lei " -0x790d: "Ke " -0x790e: "Chu " -0x790f: "Ji " -0x7910: "Que " -0x7911: "Dang " -0x7912: "Yi " -0x7913: "Jiang " -0x7914: "Pi " -0x7915: "Pi " -0x7916: "Yu " -0x7917: "Pin " -0x7918: "Qi " -0x7919: "Ai " -0x791a: "Kai " -0x791b: "Jian " -0x791c: "Yu " -0x791d: "Ruan " -0x791e: "Meng " -0x791f: "Pao " -0x7920: "Ci " -0x7921: "[?] " -0x7922: "[?] " -0x7923: "Mie " -0x7924: "Ca " -0x7925: "Xian " -0x7926: "Kuang " -0x7927: "Lei " -0x7928: "Lei " -0x7929: "Zhi " -0x792a: "Li " -0x792b: "Li " -0x792c: "Fan " -0x792d: "Que " -0x792e: "Pao " -0x792f: "Ying " -0x7930: "Li " -0x7931: "Long " -0x7932: "Long " -0x7933: "Mo " -0x7934: "Bo " -0x7935: "Shuang " -0x7936: "Guan " -0x7937: "Lan " -0x7938: "Zan " -0x7939: "Yan " -0x793a: "Shi " -0x793b: "Shi " -0x793c: "Li " -0x793d: "Reng " -0x793e: "She " -0x793f: "Yue " -0x7940: "Si " -0x7941: "Qi " -0x7942: "Ta " -0x7943: "Ma " -0x7944: "Xie " -0x7945: "Xian " -0x7946: "Xian " -0x7947: "Zhi " -0x7948: "Qi " -0x7949: "Zhi " -0x794a: "Beng " -0x794b: "Dui " -0x794c: "Zhong " -0x794d: "[?] " -0x794e: "Yi " -0x794f: "Shi " -0x7950: "You " -0x7951: "Zhi " -0x7952: "Tiao " -0x7953: "Fu " -0x7954: "Fu " -0x7955: "Mi " -0x7956: "Zu " -0x7957: "Zhi " -0x7958: "Suan " -0x7959: "Mei " -0x795a: "Zuo " -0x795b: "Qu " -0x795c: "Hu " -0x795d: "Zhu " -0x795e: "Shen " -0x795f: "Sui " -0x7960: "Ci " -0x7961: "Chai " -0x7962: "Mi " -0x7963: "Lu " -0x7964: "Yu " -0x7965: "Xiang " -0x7966: "Wu " -0x7967: "Tiao " -0x7968: "Piao " -0x7969: "Zhu " -0x796a: "Gui " -0x796b: "Xia " -0x796c: "Zhi " -0x796d: "Ji " -0x796e: "Gao " -0x796f: "Zhen " -0x7970: "Gao " -0x7971: "Shui " -0x7972: "Jin " -0x7973: "Chen " -0x7974: "Gai " -0x7975: "Kun " -0x7976: "Di " -0x7977: "Dao " -0x7978: "Huo " -0x7979: "Tao " -0x797a: "Qi " -0x797b: "Gu " -0x797c: "Guan " -0x797d: "Zui " -0x797e: "Ling " -0x797f: "Lu " -0x7980: "Bing " -0x7981: "Jin " -0x7982: "Dao " -0x7983: "Zhi " -0x7984: "Lu " -0x7985: "Shan " -0x7986: "Bei " -0x7987: "Zhe " -0x7988: "Hui " -0x7989: "You " -0x798a: "Xi " -0x798b: "Yin " -0x798c: "Zi " -0x798d: "Huo " -0x798e: "Zhen " -0x798f: "Fu " -0x7990: "Yuan " -0x7991: "Wu " -0x7992: "Xian " -0x7993: "Yang " -0x7994: "Ti " -0x7995: "Yi " -0x7996: "Mei " -0x7997: "Si " -0x7998: "Di " -0x7999: "[?] " -0x799a: "Zhuo " -0x799b: "Zhen " -0x799c: "Yong " -0x799d: "Ji " -0x799e: "Gao " -0x799f: "Tang " -0x79a0: "Si " -0x79a1: "Ma " -0x79a2: "Ta " -0x79a3: "[?] " -0x79a4: "Xuan " -0x79a5: "Qi " -0x79a6: "Yu " -0x79a7: "Xi " -0x79a8: "Ji " -0x79a9: "Si " -0x79aa: "Chan " -0x79ab: "Tan " -0x79ac: "Kuai " -0x79ad: "Sui " -0x79ae: "Li " -0x79af: "Nong " -0x79b0: "Ni " -0x79b1: "Dao " -0x79b2: "Li " -0x79b3: "Rang " -0x79b4: "Yue " -0x79b5: "Ti " -0x79b6: "Zan " -0x79b7: "Lei " -0x79b8: "Rou " -0x79b9: "Yu " -0x79ba: "Yu " -0x79bb: "Chi " -0x79bc: "Xie " -0x79bd: "Qin " -0x79be: "He " -0x79bf: "Tu " -0x79c0: "Xiu " -0x79c1: "Si " -0x79c2: "Ren " -0x79c3: "Tu " -0x79c4: "Zi " -0x79c5: "Cha " -0x79c6: "Gan " -0x79c7: "Yi " -0x79c8: "Xian " -0x79c9: "Bing " -0x79ca: "Nian " -0x79cb: "Qiu " -0x79cc: "Qiu " -0x79cd: "Chong " -0x79ce: "Fen " -0x79cf: "Hao " -0x79d0: "Yun " -0x79d1: "Ke " -0x79d2: "Miao " -0x79d3: "Zhi " -0x79d4: "Geng " -0x79d5: "Bi " -0x79d6: "Zhi " -0x79d7: "Yu " -0x79d8: "Mi " -0x79d9: "Ku " -0x79da: "Ban " -0x79db: "Pi " -0x79dc: "Ni " -0x79dd: "Li " -0x79de: "You " -0x79df: "Zu " -0x79e0: "Pi " -0x79e1: "Ba " -0x79e2: "Ling " -0x79e3: "Mo " -0x79e4: "Cheng " -0x79e5: "Nian " -0x79e6: "Qin " -0x79e7: "Yang " -0x79e8: "Zuo " -0x79e9: "Zhi " -0x79ea: "Zhi " -0x79eb: "Shu " -0x79ec: "Ju " -0x79ed: "Zi " -0x79ee: "Huo " -0x79ef: "Ji " -0x79f0: "Cheng " -0x79f1: "Tong " -0x79f2: "Zhi " -0x79f3: "Huo " -0x79f4: "He " -0x79f5: "Yin " -0x79f6: "Zi " -0x79f7: "Zhi " -0x79f8: "Jie " -0x79f9: "Ren " -0x79fa: "Du " -0x79fb: "Yi " -0x79fc: "Zhu " -0x79fd: "Hui " -0x79fe: "Nong " -0x79ff: "Fu " -/* x07a */ -0x7a00: "Xi " -0x7a01: "Kao " -0x7a02: "Lang " -0x7a03: "Fu " -0x7a04: "Ze " -0x7a05: "Shui " -0x7a06: "Lu " -0x7a07: "Kun " -0x7a08: "Gan " -0x7a09: "Geng " -0x7a0a: "Ti " -0x7a0b: "Cheng " -0x7a0c: "Tu " -0x7a0d: "Shao " -0x7a0e: "Shui " -0x7a0f: "Ya " -0x7a10: "Lun " -0x7a11: "Lu " -0x7a12: "Gu " -0x7a13: "Zuo " -0x7a14: "Ren " -0x7a15: "Zhun " -0x7a16: "Bang " -0x7a17: "Bai " -0x7a18: "Ji " -0x7a19: "Zhi " -0x7a1a: "Zhi " -0x7a1b: "Kun " -0x7a1c: "Leng " -0x7a1d: "Peng " -0x7a1e: "Ke " -0x7a1f: "Bing " -0x7a20: "Chou " -0x7a21: "Zu " -0x7a22: "Yu " -0x7a23: "Su " -0x7a24: "Lue " -0x7a25: "[?] " -0x7a26: "Yi " -0x7a27: "Xi " -0x7a28: "Bian " -0x7a29: "Ji " -0x7a2a: "Fu " -0x7a2b: "Bi " -0x7a2c: "Nuo " -0x7a2d: "Jie " -0x7a2e: "Zhong " -0x7a2f: "Zong " -0x7a30: "Xu " -0x7a31: "Cheng " -0x7a32: "Dao " -0x7a33: "Wen " -0x7a34: "Lian " -0x7a35: "Zi " -0x7a36: "Yu " -0x7a37: "Ji " -0x7a38: "Xu " -0x7a39: "Zhen " -0x7a3a: "Zhi " -0x7a3b: "Dao " -0x7a3c: "Jia " -0x7a3d: "Ji " -0x7a3e: "Gao " -0x7a3f: "Gao " -0x7a40: "Gu " -0x7a41: "Rong " -0x7a42: "Sui " -0x7a43: "You " -0x7a44: "Ji " -0x7a45: "Kang " -0x7a46: "Mu " -0x7a47: "Shan " -0x7a48: "Men " -0x7a49: "Zhi " -0x7a4a: "Ji " -0x7a4b: "Lu " -0x7a4c: "Su " -0x7a4d: "Ji " -0x7a4e: "Ying " -0x7a4f: "Wen " -0x7a50: "Qiu " -0x7a51: "Se " -0x7a52: "[?] " -0x7a53: "Yi " -0x7a54: "Huang " -0x7a55: "Qie " -0x7a56: "Ji " -0x7a57: "Sui " -0x7a58: "Xiao " -0x7a59: "Pu " -0x7a5a: "Jiao " -0x7a5b: "Zhuo " -0x7a5c: "Tong " -0x7a5d: "Sai " -0x7a5e: "Lu " -0x7a5f: "Sui " -0x7a60: "Nong " -0x7a61: "Se " -0x7a62: "Hui " -0x7a63: "Rang " -0x7a64: "Nuo " -0x7a65: "Yu " -0x7a66: "Bin " -0x7a67: "Ji " -0x7a68: "Tui " -0x7a69: "Wen " -0x7a6a: "Cheng " -0x7a6b: "Huo " -0x7a6c: "Gong " -0x7a6d: "Lu " -0x7a6e: "Biao " -0x7a6f: "[?] " -0x7a70: "Rang " -0x7a71: "Zhuo " -0x7a72: "Li " -0x7a73: "Zan " -0x7a74: "Xue " -0x7a75: "Wa " -0x7a76: "Jiu " -0x7a77: "Qiong " -0x7a78: "Xi " -0x7a79: "Qiong " -0x7a7a: "Kong " -0x7a7b: "Yu " -0x7a7c: "Sen " -0x7a7d: "Jing " -0x7a7e: "Yao " -0x7a7f: "Chuan " -0x7a80: "Zhun " -0x7a81: "Tu " -0x7a82: "Lao " -0x7a83: "Qie " -0x7a84: "Zhai " -0x7a85: "Yao " -0x7a86: "Bian " -0x7a87: "Bao " -0x7a88: "Yao " -0x7a89: "Bing " -0x7a8a: "Wa " -0x7a8b: "Zhu " -0x7a8c: "Jiao " -0x7a8d: "Qiao " -0x7a8e: "Diao " -0x7a8f: "Wu " -0x7a90: "Gui " -0x7a91: "Yao " -0x7a92: "Zhi " -0x7a93: "Chuang " -0x7a94: "Yao " -0x7a95: "Tiao " -0x7a96: "Jiao " -0x7a97: "Chuang " -0x7a98: "Jiong " -0x7a99: "Xiao " -0x7a9a: "Cheng " -0x7a9b: "Kou " -0x7a9c: "Cuan " -0x7a9d: "Wo " -0x7a9e: "Dan " -0x7a9f: "Ku " -0x7aa0: "Ke " -0x7aa1: "Zhui " -0x7aa2: "Xu " -0x7aa3: "Su " -0x7aa4: "Guan " -0x7aa5: "Kui " -0x7aa6: "Dou " -0x7aa7: "[?] " -0x7aa8: "Yin " -0x7aa9: "Wo " -0x7aaa: "Wa " -0x7aab: "Ya " -0x7aac: "Yu " -0x7aad: "Ju " -0x7aae: "Qiong " -0x7aaf: "Yao " -0x7ab0: "Yao " -0x7ab1: "Tiao " -0x7ab2: "Chao " -0x7ab3: "Yu " -0x7ab4: "Tian " -0x7ab5: "Diao " -0x7ab6: "Ju " -0x7ab7: "Liao " -0x7ab8: "Xi " -0x7ab9: "Wu " -0x7aba: "Kui " -0x7abb: "Chuang " -0x7abc: "Zhao " -0x7abd: "[?] " -0x7abe: "Kuan " -0x7abf: "Long " -0x7ac0: "Cheng " -0x7ac1: "Cui " -0x7ac2: "Piao " -0x7ac3: "Zao " -0x7ac4: "Cuan " -0x7ac5: "Qiao " -0x7ac6: "Qiong " -0x7ac7: "Dou " -0x7ac8: "Zao " -0x7ac9: "Long " -0x7aca: "Qie " -0x7acb: "Li " -0x7acc: "Chu " -0x7acd: "Shi " -0x7ace: "Fou " -0x7acf: "Qian " -0x7ad0: "Chu " -0x7ad1: "Hong " -0x7ad2: "Qi " -0x7ad3: "Qian " -0x7ad4: "Gong " -0x7ad5: "Shi " -0x7ad6: "Shu " -0x7ad7: "Miao " -0x7ad8: "Ju " -0x7ad9: "Zhan " -0x7ada: "Zhu " -0x7adb: "Ling " -0x7adc: "Long " -0x7add: "Bing " -0x7ade: "Jing " -0x7adf: "Jing " -0x7ae0: "Zhang " -0x7ae1: "Yi " -0x7ae2: "Si " -0x7ae3: "Jun " -0x7ae4: "Hong " -0x7ae5: "Tong " -0x7ae6: "Song " -0x7ae7: "Jing " -0x7ae8: "Diao " -0x7ae9: "Yi " -0x7aea: "Shu " -0x7aeb: "Jing " -0x7aec: "Qu " -0x7aed: "Jie " -0x7aee: "Ping " -0x7aef: "Duan " -0x7af0: "Shao " -0x7af1: "Zhuan " -0x7af2: "Ceng " -0x7af3: "Deng " -0x7af4: "Cui " -0x7af5: "Huai " -0x7af6: "Jing " -0x7af7: "Kan " -0x7af8: "Jing " -0x7af9: "Zhu " -0x7afa: "Zhu " -0x7afb: "Le " -0x7afc: "Peng " -0x7afd: "Yu " -0x7afe: "Chi " -0x7aff: "Gan " -/* x07b */ -0x7b00: "Mang " -0x7b01: "Zhu " -0x7b02: "Utsubo " -0x7b03: "Du " -0x7b04: "Ji " -0x7b05: "Xiao " -0x7b06: "Ba " -0x7b07: "Suan " -0x7b08: "Ji " -0x7b09: "Zhen " -0x7b0a: "Zhao " -0x7b0b: "Sun " -0x7b0c: "Ya " -0x7b0d: "Zhui " -0x7b0e: "Yuan " -0x7b0f: "Hu " -0x7b10: "Gang " -0x7b11: "Xiao " -0x7b12: "Cen " -0x7b13: "Pi " -0x7b14: "Bi " -0x7b15: "Jian " -0x7b16: "Yi " -0x7b17: "Dong " -0x7b18: "Shan " -0x7b19: "Sheng " -0x7b1a: "Xia " -0x7b1b: "Di " -0x7b1c: "Zhu " -0x7b1d: "Na " -0x7b1e: "Chi " -0x7b1f: "Gu " -0x7b20: "Li " -0x7b21: "Qie " -0x7b22: "Min " -0x7b23: "Bao " -0x7b24: "Tiao " -0x7b25: "Si " -0x7b26: "Fu " -0x7b27: "Ce " -0x7b28: "Ben " -0x7b29: "Pei " -0x7b2a: "Da " -0x7b2b: "Zi " -0x7b2c: "Di " -0x7b2d: "Ling " -0x7b2e: "Ze " -0x7b2f: "Nu " -0x7b30: "Fu " -0x7b31: "Gou " -0x7b32: "Fan " -0x7b33: "Jia " -0x7b34: "Ge " -0x7b35: "Fan " -0x7b36: "Shi " -0x7b37: "Mao " -0x7b38: "Po " -0x7b39: "Sey " -0x7b3a: "Jian " -0x7b3b: "Qiong " -0x7b3c: "Long " -0x7b3d: "Souke " -0x7b3e: "Bian " -0x7b3f: "Luo " -0x7b40: "Gui " -0x7b41: "Qu " -0x7b42: "Chi " -0x7b43: "Yin " -0x7b44: "Yao " -0x7b45: "Xian " -0x7b46: "Bi " -0x7b47: "Qiong " -0x7b48: "Gua " -0x7b49: "Deng " -0x7b4a: "Jiao " -0x7b4b: "Jin " -0x7b4c: "Quan " -0x7b4d: "Sun " -0x7b4e: "Ru " -0x7b4f: "Fa " -0x7b50: "Kuang " -0x7b51: "Zhu " -0x7b52: "Tong " -0x7b53: "Ji " -0x7b54: "Da " -0x7b55: "Xing " -0x7b56: "Ce " -0x7b57: "Zhong " -0x7b58: "Kou " -0x7b59: "Lai " -0x7b5a: "Bi " -0x7b5b: "Shai " -0x7b5c: "Dang " -0x7b5d: "Zheng " -0x7b5e: "Ce " -0x7b5f: "Fu " -0x7b60: "Yun " -0x7b61: "Tu " -0x7b62: "Pa " -0x7b63: "Li " -0x7b64: "Lang " -0x7b65: "Ju " -0x7b66: "Guan " -0x7b67: "Jian " -0x7b68: "Han " -0x7b69: "Tong " -0x7b6a: "Xia " -0x7b6b: "Zhi " -0x7b6c: "Cheng " -0x7b6d: "Suan " -0x7b6e: "Shi " -0x7b6f: "Zhu " -0x7b70: "Zuo " -0x7b71: "Xiao " -0x7b72: "Shao " -0x7b73: "Ting " -0x7b74: "Ce " -0x7b75: "Yan " -0x7b76: "Gao " -0x7b77: "Kuai " -0x7b78: "Gan " -0x7b79: "Chou " -0x7b7a: "Kago " -0x7b7b: "Gang " -0x7b7c: "Yun " -0x7b7d: "O " -0x7b7e: "Qian " -0x7b7f: "Xiao " -0x7b80: "Jian " -0x7b81: "Pu " -0x7b82: "Lai " -0x7b83: "Zou " -0x7b84: "Bi " -0x7b85: "Bi " -0x7b86: "Bi " -0x7b87: "Ge " -0x7b88: "Chi " -0x7b89: "Guai " -0x7b8a: "Yu " -0x7b8b: "Jian " -0x7b8c: "Zhao " -0x7b8d: "Gu " -0x7b8e: "Chi " -0x7b8f: "Zheng " -0x7b90: "Jing " -0x7b91: "Sha " -0x7b92: "Zhou " -0x7b93: "Lu " -0x7b94: "Bo " -0x7b95: "Ji " -0x7b96: "Lin " -0x7b97: "Suan " -0x7b98: "Jun " -0x7b99: "Fu " -0x7b9a: "Zha " -0x7b9b: "Gu " -0x7b9c: "Kong " -0x7b9d: "Qian " -0x7b9e: "Quan " -0x7b9f: "Jun " -0x7ba0: "Chui " -0x7ba1: "Guan " -0x7ba2: "Yuan " -0x7ba3: "Ce " -0x7ba4: "Ju " -0x7ba5: "Bo " -0x7ba6: "Ze " -0x7ba7: "Qie " -0x7ba8: "Tuo " -0x7ba9: "Luo " -0x7baa: "Dan " -0x7bab: "Xiao " -0x7bac: "Ruo " -0x7bad: "Jian " -0x7bae: "Xuan " -0x7baf: "Bian " -0x7bb0: "Sun " -0x7bb1: "Xiang " -0x7bb2: "Xian " -0x7bb3: "Ping " -0x7bb4: "Zhen " -0x7bb5: "Sheng " -0x7bb6: "Hu " -0x7bb7: "Shi " -0x7bb8: "Zhu " -0x7bb9: "Yue " -0x7bba: "Chun " -0x7bbb: "Lu " -0x7bbc: "Wu " -0x7bbd: "Dong " -0x7bbe: "Xiao " -0x7bbf: "Ji " -0x7bc0: "Jie " -0x7bc1: "Huang " -0x7bc2: "Xing " -0x7bc3: "Mei " -0x7bc4: "Fan " -0x7bc5: "Chui " -0x7bc6: "Zhuan " -0x7bc7: "Pian " -0x7bc8: "Feng " -0x7bc9: "Zhu " -0x7bca: "Hong " -0x7bcb: "Qie " -0x7bcc: "Hou " -0x7bcd: "Qiu " -0x7bce: "Miao " -0x7bcf: "Qian " -0x7bd0: "[?] " -0x7bd1: "Kui " -0x7bd2: "Sik " -0x7bd3: "Lou " -0x7bd4: "Yun " -0x7bd5: "He " -0x7bd6: "Tang " -0x7bd7: "Yue " -0x7bd8: "Chou " -0x7bd9: "Gao " -0x7bda: "Fei " -0x7bdb: "Ruo " -0x7bdc: "Zheng " -0x7bdd: "Gou " -0x7bde: "Nie " -0x7bdf: "Qian " -0x7be0: "Xiao " -0x7be1: "Cuan " -0x7be2: "Gong " -0x7be3: "Pang " -0x7be4: "Du " -0x7be5: "Li " -0x7be6: "Bi " -0x7be7: "Zhuo " -0x7be8: "Chu " -0x7be9: "Shai " -0x7bea: "Chi " -0x7beb: "Zhu " -0x7bec: "Qiang " -0x7bed: "Long " -0x7bee: "Lan " -0x7bef: "Jian " -0x7bf0: "Bu " -0x7bf1: "Li " -0x7bf2: "Hui " -0x7bf3: "Bi " -0x7bf4: "Di " -0x7bf5: "Cong " -0x7bf6: "Yan " -0x7bf7: "Peng " -0x7bf8: "Sen " -0x7bf9: "Zhuan " -0x7bfa: "Pai " -0x7bfb: "Piao " -0x7bfc: "Dou " -0x7bfd: "Yu " -0x7bfe: "Mie " -0x7bff: "Zhuan " -/* x07c */ -0x7c00: "Ze " -0x7c01: "Xi " -0x7c02: "Guo " -0x7c03: "Yi " -0x7c04: "Hu " -0x7c05: "Chan " -0x7c06: "Kou " -0x7c07: "Cu " -0x7c08: "Ping " -0x7c09: "Chou " -0x7c0a: "Ji " -0x7c0b: "Gui " -0x7c0c: "Su " -0x7c0d: "Lou " -0x7c0e: "Zha " -0x7c0f: "Lu " -0x7c10: "Nian " -0x7c11: "Suo " -0x7c12: "Cuan " -0x7c13: "Sasara " -0x7c14: "Suo " -0x7c15: "Le " -0x7c16: "Duan " -0x7c17: "Yana " -0x7c18: "Xiao " -0x7c19: "Bo " -0x7c1a: "Mi " -0x7c1b: "Si " -0x7c1c: "Dang " -0x7c1d: "Liao " -0x7c1e: "Dan " -0x7c1f: "Dian " -0x7c20: "Fu " -0x7c21: "Jian " -0x7c22: "Min " -0x7c23: "Kui " -0x7c24: "Dai " -0x7c25: "Qiao " -0x7c26: "Deng " -0x7c27: "Huang " -0x7c28: "Sun " -0x7c29: "Lao " -0x7c2a: "Zan " -0x7c2b: "Xiao " -0x7c2c: "Du " -0x7c2d: "Shi " -0x7c2e: "Zan " -0x7c2f: "[?] " -0x7c30: "Pai " -0x7c31: "Hata " -0x7c32: "Pai " -0x7c33: "Gan " -0x7c34: "Ju " -0x7c35: "Du " -0x7c36: "Lu " -0x7c37: "Yan " -0x7c38: "Bo " -0x7c39: "Dang " -0x7c3a: "Sai " -0x7c3b: "Ke " -0x7c3c: "Long " -0x7c3d: "Qian " -0x7c3e: "Lian " -0x7c3f: "Bo " -0x7c40: "Zhou " -0x7c41: "Lai " -0x7c42: "[?] " -0x7c43: "Lan " -0x7c44: "Kui " -0x7c45: "Yu " -0x7c46: "Yue " -0x7c47: "Hao " -0x7c48: "Zhen " -0x7c49: "Tai " -0x7c4a: "Ti " -0x7c4b: "Mi " -0x7c4c: "Chou " -0x7c4d: "Ji " -0x7c4e: "[?] " -0x7c4f: "Hata " -0x7c50: "Teng " -0x7c51: "Zhuan " -0x7c52: "Zhou " -0x7c53: "Fan " -0x7c54: "Sou " -0x7c55: "Zhou " -0x7c56: "Kuji " -0x7c57: "Zhuo " -0x7c58: "Teng " -0x7c59: "Lu " -0x7c5a: "Lu " -0x7c5b: "Jian " -0x7c5c: "Tuo " -0x7c5d: "Ying " -0x7c5e: "Yu " -0x7c5f: "Lai " -0x7c60: "Long " -0x7c61: "Shinshi " -0x7c62: "Lian " -0x7c63: "Lan " -0x7c64: "Qian " -0x7c65: "Yue " -0x7c66: "Zhong " -0x7c67: "Qu " -0x7c68: "Lian " -0x7c69: "Bian " -0x7c6a: "Duan " -0x7c6b: "Zuan " -0x7c6c: "Li " -0x7c6d: "Si " -0x7c6e: "Luo " -0x7c6f: "Ying " -0x7c70: "Yue " -0x7c71: "Zhuo " -0x7c72: "Xu " -0x7c73: "Mi " -0x7c74: "Di " -0x7c75: "Fan " -0x7c76: "Shen " -0x7c77: "Zhe " -0x7c78: "Shen " -0x7c79: "Nu " -0x7c7a: "Xie " -0x7c7b: "Lei " -0x7c7c: "Xian " -0x7c7d: "Zi " -0x7c7e: "Ni " -0x7c7f: "Cun " -0x7c80: "[?] " -0x7c81: "Qian " -0x7c82: "Kume " -0x7c83: "Bi " -0x7c84: "Ban " -0x7c85: "Wu " -0x7c86: "Sha " -0x7c87: "Kang " -0x7c88: "Rou " -0x7c89: "Fen " -0x7c8a: "Bi " -0x7c8b: "Cui " -0x7c8c: "[?] " -0x7c8d: "Li " -0x7c8e: "Chi " -0x7c8f: "Nukamiso " -0x7c90: "Ro " -0x7c91: "Ba " -0x7c92: "Li " -0x7c93: "Gan " -0x7c94: "Ju " -0x7c95: "Po " -0x7c96: "Mo " -0x7c97: "Cu " -0x7c98: "Nian " -0x7c99: "Zhou " -0x7c9a: "Li " -0x7c9b: "Su " -0x7c9c: "Tiao " -0x7c9d: "Li " -0x7c9e: "Qi " -0x7c9f: "Su " -0x7ca0: "Hong " -0x7ca1: "Tong " -0x7ca2: "Zi " -0x7ca3: "Ce " -0x7ca4: "Yue " -0x7ca5: "Zhou " -0x7ca6: "Lin " -0x7ca7: "Zhuang " -0x7ca8: "Bai " -0x7ca9: "[?] " -0x7caa: "Fen " -0x7cab: "Ji " -0x7cac: "[?] " -0x7cad: "Sukumo " -0x7cae: "Liang " -0x7caf: "Xian " -0x7cb0: "Fu " -0x7cb1: "Liang " -0x7cb2: "Can " -0x7cb3: "Geng " -0x7cb4: "Li " -0x7cb5: "Yue " -0x7cb6: "Lu " -0x7cb7: "Ju " -0x7cb8: "Qi " -0x7cb9: "Cui " -0x7cba: "Bai " -0x7cbb: "Zhang " -0x7cbc: "Lin " -0x7cbd: "Zong " -0x7cbe: "Jing " -0x7cbf: "Guo " -0x7cc0: "Kouji " -0x7cc1: "San " -0x7cc2: "San " -0x7cc3: "Tang " -0x7cc4: "Bian " -0x7cc5: "Rou " -0x7cc6: "Mian " -0x7cc7: "Hou " -0x7cc8: "Xu " -0x7cc9: "Zong " -0x7cca: "Hu " -0x7ccb: "Jian " -0x7ccc: "Zan " -0x7ccd: "Ci " -0x7cce: "Li " -0x7ccf: "Xie " -0x7cd0: "Fu " -0x7cd1: "Ni " -0x7cd2: "Bei " -0x7cd3: "Gu " -0x7cd4: "Xiu " -0x7cd5: "Gao " -0x7cd6: "Tang " -0x7cd7: "Qiu " -0x7cd8: "Sukumo " -0x7cd9: "Cao " -0x7cda: "Zhuang " -0x7cdb: "Tang " -0x7cdc: "Mi " -0x7cdd: "San " -0x7cde: "Fen " -0x7cdf: "Zao " -0x7ce0: "Kang " -0x7ce1: "Jiang " -0x7ce2: "Mo " -0x7ce3: "San " -0x7ce4: "San " -0x7ce5: "Nuo " -0x7ce6: "Xi " -0x7ce7: "Liang " -0x7ce8: "Jiang " -0x7ce9: "Kuai " -0x7cea: "Bo " -0x7ceb: "Huan " -0x7cec: "[?] " -0x7ced: "Zong " -0x7cee: "Xian " -0x7cef: "Nuo " -0x7cf0: "Tuan " -0x7cf1: "Nie " -0x7cf2: "Li " -0x7cf3: "Zuo " -0x7cf4: "Di " -0x7cf5: "Nie " -0x7cf6: "Tiao " -0x7cf7: "Lan " -0x7cf8: "Mi " -0x7cf9: "Jiao " -0x7cfa: "Jiu " -0x7cfb: "Xi " -0x7cfc: "Gong " -0x7cfd: "Zheng " -0x7cfe: "Jiu " -0x7cff: "You " -/* x07d */ -0x7d00: "Ji " -0x7d01: "Cha " -0x7d02: "Zhou " -0x7d03: "Xun " -0x7d04: "Yue " -0x7d05: "Hong " -0x7d06: "Yu " -0x7d07: "He " -0x7d08: "Wan " -0x7d09: "Ren " -0x7d0a: "Wen " -0x7d0b: "Wen " -0x7d0c: "Qiu " -0x7d0d: "Na " -0x7d0e: "Zi " -0x7d0f: "Tou " -0x7d10: "Niu " -0x7d11: "Fou " -0x7d12: "Jie " -0x7d13: "Shu " -0x7d14: "Chun " -0x7d15: "Pi " -0x7d16: "Yin " -0x7d17: "Sha " -0x7d18: "Hong " -0x7d19: "Zhi " -0x7d1a: "Ji " -0x7d1b: "Fen " -0x7d1c: "Yun " -0x7d1d: "Ren " -0x7d1e: "Dan " -0x7d1f: "Jin " -0x7d20: "Su " -0x7d21: "Fang " -0x7d22: "Suo " -0x7d23: "Cui " -0x7d24: "Jiu " -0x7d25: "Zha " -0x7d26: "Kinu " -0x7d27: "Jin " -0x7d28: "Fu " -0x7d29: "Zhi " -0x7d2a: "Ci " -0x7d2b: "Zi " -0x7d2c: "Chou " -0x7d2d: "Hong " -0x7d2e: "Zha " -0x7d2f: "Lei " -0x7d30: "Xi " -0x7d31: "Fu " -0x7d32: "Xie " -0x7d33: "Shen " -0x7d34: "Bei " -0x7d35: "Zhu " -0x7d36: "Qu " -0x7d37: "Ling " -0x7d38: "Zhu " -0x7d39: "Shao " -0x7d3a: "Gan " -0x7d3b: "Yang " -0x7d3c: "Fu " -0x7d3d: "Tuo " -0x7d3e: "Zhen " -0x7d3f: "Dai " -0x7d40: "Zhuo " -0x7d41: "Shi " -0x7d42: "Zhong " -0x7d43: "Xian " -0x7d44: "Zu " -0x7d45: "Jiong " -0x7d46: "Ban " -0x7d47: "Ju " -0x7d48: "Mo " -0x7d49: "Shu " -0x7d4a: "Zui " -0x7d4b: "Wata " -0x7d4c: "Jing " -0x7d4d: "Ren " -0x7d4e: "Heng " -0x7d4f: "Xie " -0x7d50: "Jie " -0x7d51: "Zhu " -0x7d52: "Chou " -0x7d53: "Gua " -0x7d54: "Bai " -0x7d55: "Jue " -0x7d56: "Kuang " -0x7d57: "Hu " -0x7d58: "Ci " -0x7d59: "Geng " -0x7d5a: "Geng " -0x7d5b: "Tao " -0x7d5c: "Xie " -0x7d5d: "Ku " -0x7d5e: "Jiao " -0x7d5f: "Quan " -0x7d60: "Gai " -0x7d61: "Luo " -0x7d62: "Xuan " -0x7d63: "Bing " -0x7d64: "Xian " -0x7d65: "Fu " -0x7d66: "Gei " -0x7d67: "Tong " -0x7d68: "Rong " -0x7d69: "Tiao " -0x7d6a: "Yin " -0x7d6b: "Lei " -0x7d6c: "Xie " -0x7d6d: "Quan " -0x7d6e: "Xu " -0x7d6f: "Lun " -0x7d70: "Die " -0x7d71: "Tong " -0x7d72: "Si " -0x7d73: "Jiang " -0x7d74: "Xiang " -0x7d75: "Hui " -0x7d76: "Jue " -0x7d77: "Zhi " -0x7d78: "Jian " -0x7d79: "Juan " -0x7d7a: "Chi " -0x7d7b: "Mian " -0x7d7c: "Zhen " -0x7d7d: "Lu " -0x7d7e: "Cheng " -0x7d7f: "Qiu " -0x7d80: "Shu " -0x7d81: "Bang " -0x7d82: "Tong " -0x7d83: "Xiao " -0x7d84: "Wan " -0x7d85: "Qin " -0x7d86: "Geng " -0x7d87: "Xiu " -0x7d88: "Ti " -0x7d89: "Xiu " -0x7d8a: "Xie " -0x7d8b: "Hong " -0x7d8c: "Xi " -0x7d8d: "Fu " -0x7d8e: "Ting " -0x7d8f: "Sui " -0x7d90: "Dui " -0x7d91: "Kun " -0x7d92: "Fu " -0x7d93: "Jing " -0x7d94: "Hu " -0x7d95: "Zhi " -0x7d96: "Yan " -0x7d97: "Jiong " -0x7d98: "Feng " -0x7d99: "Ji " -0x7d9a: "Sok " -0x7d9b: "Kase " -0x7d9c: "Zong " -0x7d9d: "Lin " -0x7d9e: "Duo " -0x7d9f: "Li " -0x7da0: "Lu " -0x7da1: "Liang " -0x7da2: "Chou " -0x7da3: "Quan " -0x7da4: "Shao " -0x7da5: "Qi " -0x7da6: "Qi " -0x7da7: "Zhun " -0x7da8: "Qi " -0x7da9: "Wan " -0x7daa: "Qian " -0x7dab: "Xian " -0x7dac: "Shou " -0x7dad: "Wei " -0x7dae: "Qi " -0x7daf: "Tao " -0x7db0: "Wan " -0x7db1: "Gang " -0x7db2: "Wang " -0x7db3: "Beng " -0x7db4: "Zhui " -0x7db5: "Cai " -0x7db6: "Guo " -0x7db7: "Cui " -0x7db8: "Lun " -0x7db9: "Liu " -0x7dba: "Qi " -0x7dbb: "Zhan " -0x7dbc: "Bei " -0x7dbd: "Chuo " -0x7dbe: "Ling " -0x7dbf: "Mian " -0x7dc0: "Qi " -0x7dc1: "Qie " -0x7dc2: "Tan " -0x7dc3: "Zong " -0x7dc4: "Gun " -0x7dc5: "Zou " -0x7dc6: "Yi " -0x7dc7: "Zi " -0x7dc8: "Xing " -0x7dc9: "Liang " -0x7dca: "Jin " -0x7dcb: "Fei " -0x7dcc: "Rui " -0x7dcd: "Min " -0x7dce: "Yu " -0x7dcf: "Zong " -0x7dd0: "Fan " -0x7dd1: "Lu " -0x7dd2: "Xu " -0x7dd3: "Yingl " -0x7dd4: "Zhang " -0x7dd5: "Kasuri " -0x7dd6: "Xu " -0x7dd7: "Xiang " -0x7dd8: "Jian " -0x7dd9: "Ke " -0x7dda: "Xian " -0x7ddb: "Ruan " -0x7ddc: "Mian " -0x7ddd: "Qi " -0x7dde: "Duan " -0x7ddf: "Zhong " -0x7de0: "Di " -0x7de1: "Min " -0x7de2: "Miao " -0x7de3: "Yuan " -0x7de4: "Xie " -0x7de5: "Bao " -0x7de6: "Si " -0x7de7: "Qiu " -0x7de8: "Bian " -0x7de9: "Huan " -0x7dea: "Geng " -0x7deb: "Cong " -0x7dec: "Mian " -0x7ded: "Wei " -0x7dee: "Fu " -0x7def: "Wei " -0x7df0: "Yu " -0x7df1: "Gou " -0x7df2: "Miao " -0x7df3: "Xie " -0x7df4: "Lian " -0x7df5: "Zong " -0x7df6: "Bian " -0x7df7: "Yun " -0x7df8: "Yin " -0x7df9: "Ti " -0x7dfa: "Gua " -0x7dfb: "Zhi " -0x7dfc: "Yun " -0x7dfd: "Cheng " -0x7dfe: "Chan " -0x7dff: "Dai " -/* x07e */ -0x7e00: "Xia " -0x7e01: "Yuan " -0x7e02: "Zong " -0x7e03: "Xu " -0x7e04: "Nawa " -0x7e05: "Odoshi " -0x7e06: "Geng " -0x7e07: "Sen " -0x7e08: "Ying " -0x7e09: "Jin " -0x7e0a: "Yi " -0x7e0b: "Zhui " -0x7e0c: "Ni " -0x7e0d: "Bang " -0x7e0e: "Gu " -0x7e0f: "Pan " -0x7e10: "Zhou " -0x7e11: "Jian " -0x7e12: "Cuo " -0x7e13: "Quan " -0x7e14: "Shuang " -0x7e15: "Yun " -0x7e16: "Xia " -0x7e17: "Shuai " -0x7e18: "Xi " -0x7e19: "Rong " -0x7e1a: "Tao " -0x7e1b: "Fu " -0x7e1c: "Yun " -0x7e1d: "Zhen " -0x7e1e: "Gao " -0x7e1f: "Ru " -0x7e20: "Hu " -0x7e21: "Zai " -0x7e22: "Teng " -0x7e23: "Xian " -0x7e24: "Su " -0x7e25: "Zhen " -0x7e26: "Zong " -0x7e27: "Tao " -0x7e28: "Horo " -0x7e29: "Cai " -0x7e2a: "Bi " -0x7e2b: "Feng " -0x7e2c: "Cu " -0x7e2d: "Li " -0x7e2e: "Suo " -0x7e2f: "Yin " -0x7e30: "Xi " -0x7e31: "Zong " -0x7e32: "Lei " -0x7e33: "Zhuan " -0x7e34: "Qian " -0x7e35: "Man " -0x7e36: "Zhi " -0x7e37: "Lu " -0x7e38: "Mo " -0x7e39: "Piao " -0x7e3a: "Lian " -0x7e3b: "Mi " -0x7e3c: "Xuan " -0x7e3d: "Zong " -0x7e3e: "Ji " -0x7e3f: "Shan " -0x7e40: "Sui " -0x7e41: "Fan " -0x7e42: "Shuai " -0x7e43: "Beng " -0x7e44: "Yi " -0x7e45: "Sao " -0x7e46: "Mou " -0x7e47: "Zhou " -0x7e48: "Qiang " -0x7e49: "Hun " -0x7e4a: "Sem " -0x7e4b: "Xi " -0x7e4c: "Jung " -0x7e4d: "Xiu " -0x7e4e: "Ran " -0x7e4f: "Xuan " -0x7e50: "Hui " -0x7e51: "Qiao " -0x7e52: "Zeng " -0x7e53: "Zuo " -0x7e54: "Zhi " -0x7e55: "Shan " -0x7e56: "San " -0x7e57: "Lin " -0x7e58: "Yu " -0x7e59: "Fan " -0x7e5a: "Liao " -0x7e5b: "Chuo " -0x7e5c: "Zun " -0x7e5d: "Jian " -0x7e5e: "Rao " -0x7e5f: "Chan " -0x7e60: "Rui " -0x7e61: "Xiu " -0x7e62: "Hui " -0x7e63: "Hua " -0x7e64: "Zuan " -0x7e65: "Xi " -0x7e66: "Qiang " -0x7e67: "Un " -0x7e68: "Da " -0x7e69: "Sheng " -0x7e6a: "Hui " -0x7e6b: "Xi " -0x7e6c: "Se " -0x7e6d: "Jian " -0x7e6e: "Jiang " -0x7e6f: "Huan " -0x7e70: "Zao " -0x7e71: "Cong " -0x7e72: "Jie " -0x7e73: "Jiao " -0x7e74: "Bo " -0x7e75: "Chan " -0x7e76: "Yi " -0x7e77: "Nao " -0x7e78: "Sui " -0x7e79: "Yi " -0x7e7a: "Shai " -0x7e7b: "Xu " -0x7e7c: "Ji " -0x7e7d: "Bin " -0x7e7e: "Qian " -0x7e7f: "Lan " -0x7e80: "Pu " -0x7e81: "Xun " -0x7e82: "Zuan " -0x7e83: "Qi " -0x7e84: "Peng " -0x7e85: "Li " -0x7e86: "Mo " -0x7e87: "Lei " -0x7e88: "Xie " -0x7e89: "Zuan " -0x7e8a: "Kuang " -0x7e8b: "You " -0x7e8c: "Xu " -0x7e8d: "Lei " -0x7e8e: "Xian " -0x7e8f: "Chan " -0x7e90: "Kou " -0x7e91: "Lu " -0x7e92: "Chan " -0x7e93: "Ying " -0x7e94: "Cai " -0x7e95: "Xiang " -0x7e96: "Xian " -0x7e97: "Zui " -0x7e98: "Zuan " -0x7e99: "Luo " -0x7e9a: "Xi " -0x7e9b: "Dao " -0x7e9c: "Lan " -0x7e9d: "Lei " -0x7e9e: "Lian " -0x7e9f: "Si " -0x7ea0: "Jiu " -0x7ea1: "Yu " -0x7ea2: "Hong " -0x7ea3: "Zhou " -0x7ea4: "Xian " -0x7ea5: "He " -0x7ea6: "Yue " -0x7ea7: "Ji " -0x7ea8: "Wan " -0x7ea9: "Kuang " -0x7eaa: "Ji " -0x7eab: "Ren " -0x7eac: "Wei " -0x7ead: "Yun " -0x7eae: "Hong " -0x7eaf: "Chun " -0x7eb0: "Pi " -0x7eb1: "Sha " -0x7eb2: "Gang " -0x7eb3: "Na " -0x7eb4: "Ren " -0x7eb5: "Zong " -0x7eb6: "Lun " -0x7eb7: "Fen " -0x7eb8: "Zhi " -0x7eb9: "Wen " -0x7eba: "Fang " -0x7ebb: "Zhu " -0x7ebc: "Yin " -0x7ebd: "Niu " -0x7ebe: "Shu " -0x7ebf: "Xian " -0x7ec0: "Gan " -0x7ec1: "Xie " -0x7ec2: "Fu " -0x7ec3: "Lian " -0x7ec4: "Zu " -0x7ec5: "Shen " -0x7ec6: "Xi " -0x7ec7: "Zhi " -0x7ec8: "Zhong " -0x7ec9: "Zhou " -0x7eca: "Ban " -0x7ecb: "Fu " -0x7ecc: "Zhuo " -0x7ecd: "Shao " -0x7ece: "Yi " -0x7ecf: "Jing " -0x7ed0: "Dai " -0x7ed1: "Bang " -0x7ed2: "Rong " -0x7ed3: "Jie " -0x7ed4: "Ku " -0x7ed5: "Rao " -0x7ed6: "Die " -0x7ed7: "Heng " -0x7ed8: "Hui " -0x7ed9: "Gei " -0x7eda: "Xuan " -0x7edb: "Jiang " -0x7edc: "Luo " -0x7edd: "Jue " -0x7ede: "Jiao " -0x7edf: "Tong " -0x7ee0: "Geng " -0x7ee1: "Xiao " -0x7ee2: "Juan " -0x7ee3: "Xiu " -0x7ee4: "Xi " -0x7ee5: "Sui " -0x7ee6: "Tao " -0x7ee7: "Ji " -0x7ee8: "Ti " -0x7ee9: "Ji " -0x7eea: "Xu " -0x7eeb: "Ling " -0x7eec: "[?] " -0x7eed: "Xu " -0x7eee: "Qi " -0x7eef: "Fei " -0x7ef0: "Chuo " -0x7ef1: "Zhang " -0x7ef2: "Gun " -0x7ef3: "Sheng " -0x7ef4: "Wei " -0x7ef5: "Mian " -0x7ef6: "Shou " -0x7ef7: "Beng " -0x7ef8: "Chou " -0x7ef9: "Tao " -0x7efa: "Liu " -0x7efb: "Quan " -0x7efc: "Zong " -0x7efd: "Zhan " -0x7efe: "Wan " -0x7eff: "Lu " -/* x07f */ -0x7f00: "Zhui " -0x7f01: "Zi " -0x7f02: "Ke " -0x7f03: "Xiang " -0x7f04: "Jian " -0x7f05: "Mian " -0x7f06: "Lan " -0x7f07: "Ti " -0x7f08: "Miao " -0x7f09: "Qi " -0x7f0a: "Yun " -0x7f0b: "Hui " -0x7f0c: "Si " -0x7f0d: "Duo " -0x7f0e: "Duan " -0x7f0f: "Bian " -0x7f10: "Xian " -0x7f11: "Gou " -0x7f12: "Zhui " -0x7f13: "Huan " -0x7f14: "Di " -0x7f15: "Lu " -0x7f16: "Bian " -0x7f17: "Min " -0x7f18: "Yuan " -0x7f19: "Jin " -0x7f1a: "Fu " -0x7f1b: "Ru " -0x7f1c: "Zhen " -0x7f1d: "Feng " -0x7f1e: "Shuai " -0x7f1f: "Gao " -0x7f20: "Chan " -0x7f21: "Li " -0x7f22: "Yi " -0x7f23: "Jian " -0x7f24: "Bin " -0x7f25: "Piao " -0x7f26: "Man " -0x7f27: "Lei " -0x7f28: "Ying " -0x7f29: "Suo " -0x7f2a: "Mou " -0x7f2b: "Sao " -0x7f2c: "Xie " -0x7f2d: "Liao " -0x7f2e: "Shan " -0x7f2f: "Zeng " -0x7f30: "Jiang " -0x7f31: "Qian " -0x7f32: "Zao " -0x7f33: "Huan " -0x7f34: "Jiao " -0x7f35: "Zuan " -0x7f36: "Fou " -0x7f37: "Xie " -0x7f38: "Gang " -0x7f39: "Fou " -0x7f3a: "Que " -0x7f3b: "Fou " -0x7f3c: "Kaakeru " -0x7f3d: "Bo " -0x7f3e: "Ping " -0x7f3f: "Hou " -0x7f40: "[?] " -0x7f41: "Gang " -0x7f42: "Ying " -0x7f43: "Ying " -0x7f44: "Qing " -0x7f45: "Xia " -0x7f46: "Guan " -0x7f47: "Zun " -0x7f48: "Tan " -0x7f49: "Chang " -0x7f4a: "Qi " -0x7f4b: "Weng " -0x7f4c: "Ying " -0x7f4d: "Lei " -0x7f4e: "Tan " -0x7f4f: "Lu " -0x7f50: "Guan " -0x7f51: "Wang " -0x7f52: "Wang " -0x7f53: "Gang " -0x7f54: "Wang " -0x7f55: "Han " -0x7f56: "[?] " -0x7f57: "Luo " -0x7f58: "Fu " -0x7f59: "Mi " -0x7f5a: "Fa " -0x7f5b: "Gu " -0x7f5c: "Zhu " -0x7f5d: "Ju " -0x7f5e: "Mao " -0x7f5f: "Gu " -0x7f60: "Min " -0x7f61: "Gang " -0x7f62: "Ba " -0x7f63: "Gua " -0x7f64: "Ti " -0x7f65: "Juan " -0x7f66: "Fu " -0x7f67: "Lin " -0x7f68: "Yan " -0x7f69: "Zhao " -0x7f6a: "Zui " -0x7f6b: "Gua " -0x7f6c: "Zhuo " -0x7f6d: "Yu " -0x7f6e: "Zhi " -0x7f6f: "An " -0x7f70: "Fa " -0x7f71: "Nan " -0x7f72: "Shu " -0x7f73: "Si " -0x7f74: "Pi " -0x7f75: "Ma " -0x7f76: "Liu " -0x7f77: "Ba " -0x7f78: "Fa " -0x7f79: "Li " -0x7f7a: "Chao " -0x7f7b: "Wei " -0x7f7c: "Bi " -0x7f7d: "Ji " -0x7f7e: "Zeng " -0x7f7f: "Tong " -0x7f80: "Liu " -0x7f81: "Ji " -0x7f82: "Juan " -0x7f83: "Mi " -0x7f84: "Zhao " -0x7f85: "Luo " -0x7f86: "Pi " -0x7f87: "Ji " -0x7f88: "Ji " -0x7f89: "Luan " -0x7f8a: "Yang " -0x7f8b: "Mie " -0x7f8c: "Qiang " -0x7f8d: "Ta " -0x7f8e: "Mei " -0x7f8f: "Yang " -0x7f90: "You " -0x7f91: "You " -0x7f92: "Fen " -0x7f93: "Ba " -0x7f94: "Gao " -0x7f95: "Yang " -0x7f96: "Gu " -0x7f97: "Qiang " -0x7f98: "Zang " -0x7f99: "Gao " -0x7f9a: "Ling " -0x7f9b: "Yi " -0x7f9c: "Zhu " -0x7f9d: "Di " -0x7f9e: "Xiu " -0x7f9f: "Qian " -0x7fa0: "Yi " -0x7fa1: "Xian " -0x7fa2: "Rong " -0x7fa3: "Qun " -0x7fa4: "Qun " -0x7fa5: "Qian " -0x7fa6: "Huan " -0x7fa7: "Zui " -0x7fa8: "Xian " -0x7fa9: "Yi " -0x7faa: "Yashinau " -0x7fab: "Qiang " -0x7fac: "Xian " -0x7fad: "Yu " -0x7fae: "Geng " -0x7faf: "Jie " -0x7fb0: "Tang " -0x7fb1: "Yuan " -0x7fb2: "Xi " -0x7fb3: "Fan " -0x7fb4: "Shan " -0x7fb5: "Fen " -0x7fb6: "Shan " -0x7fb7: "Lian " -0x7fb8: "Lei " -0x7fb9: "Geng " -0x7fba: "Nou " -0x7fbb: "Qiang " -0x7fbc: "Chan " -0x7fbd: "Yu " -0x7fbe: "Gong " -0x7fbf: "Yi " -0x7fc0: "Chong " -0x7fc1: "Weng " -0x7fc2: "Fen " -0x7fc3: "Hong " -0x7fc4: "Chi " -0x7fc5: "Chi " -0x7fc6: "Cui " -0x7fc7: "Fu " -0x7fc8: "Xia " -0x7fc9: "Pen " -0x7fca: "Yi " -0x7fcb: "La " -0x7fcc: "Yi " -0x7fcd: "Pi " -0x7fce: "Ling " -0x7fcf: "Liu " -0x7fd0: "Zhi " -0x7fd1: "Qu " -0x7fd2: "Xi " -0x7fd3: "Xie " -0x7fd4: "Xiang " -0x7fd5: "Xi " -0x7fd6: "Xi " -0x7fd7: "Qi " -0x7fd8: "Qiao " -0x7fd9: "Hui " -0x7fda: "Hui " -0x7fdb: "Xiao " -0x7fdc: "Se " -0x7fdd: "Hong " -0x7fde: "Jiang " -0x7fdf: "Di " -0x7fe0: "Cui " -0x7fe1: "Fei " -0x7fe2: "Tao " -0x7fe3: "Sha " -0x7fe4: "Chi " -0x7fe5: "Zhu " -0x7fe6: "Jian " -0x7fe7: "Xuan " -0x7fe8: "Shi " -0x7fe9: "Pian " -0x7fea: "Zong " -0x7feb: "Wan " -0x7fec: "Hui " -0x7fed: "Hou " -0x7fee: "He " -0x7fef: "He " -0x7ff0: "Han " -0x7ff1: "Ao " -0x7ff2: "Piao " -0x7ff3: "Yi " -0x7ff4: "Lian " -0x7ff5: "Qu " -0x7ff6: "[?] " -0x7ff7: "Lin " -0x7ff8: "Pen " -0x7ff9: "Qiao " -0x7ffa: "Ao " -0x7ffb: "Fan " -0x7ffc: "Yi " -0x7ffd: "Hui " -0x7ffe: "Xuan " -0x7fff: "Dao " -/* x080 */ -0x8000: "Yao " -0x8001: "Lao " -0x8002: "[?] " -0x8003: "Kao " -0x8004: "Mao " -0x8005: "Zhe " -0x8006: "Qi " -0x8007: "Gou " -0x8008: "Gou " -0x8009: "Gou " -0x800a: "Die " -0x800b: "Die " -0x800c: "Er " -0x800d: "Shua " -0x800e: "Ruan " -0x800f: "Er " -0x8010: "Nai " -0x8011: "Zhuan " -0x8012: "Lei " -0x8013: "Ting " -0x8014: "Zi " -0x8015: "Geng " -0x8016: "Chao " -0x8017: "Hao " -0x8018: "Yun " -0x8019: "Pa " -0x801a: "Pi " -0x801b: "Chi " -0x801c: "Si " -0x801d: "Chu " -0x801e: "Jia " -0x801f: "Ju " -0x8020: "He " -0x8021: "Chu " -0x8022: "Lao " -0x8023: "Lun " -0x8024: "Ji " -0x8025: "Tang " -0x8026: "Ou " -0x8027: "Lou " -0x8028: "Nou " -0x8029: "Gou " -0x802a: "Pang " -0x802b: "Ze " -0x802c: "Lou " -0x802d: "Ji " -0x802e: "Lao " -0x802f: "Huo " -0x8030: "You " -0x8031: "Mo " -0x8032: "Huai " -0x8033: "Er " -0x8034: "Zhe " -0x8035: "Ting " -0x8036: "Ye " -0x8037: "Da " -0x8038: "Song " -0x8039: "Qin " -0x803a: "Yun " -0x803b: "Chi " -0x803c: "Dan " -0x803d: "Dan " -0x803e: "Hong " -0x803f: "Geng " -0x8040: "Zhi " -0x8041: "[?] " -0x8042: "Nie " -0x8043: "Dan " -0x8044: "Zhen " -0x8045: "Che " -0x8046: "Ling " -0x8047: "Zheng " -0x8048: "You " -0x8049: "Wa " -0x804a: "Liao " -0x804b: "Long " -0x804c: "Zhi " -0x804d: "Ning " -0x804e: "Tiao " -0x804f: "Er " -0x8050: "Ya " -0x8051: "Die " -0x8052: "Gua " -0x8053: "[?] " -0x8054: "Lian " -0x8055: "Hao " -0x8056: "Sheng " -0x8057: "Lie " -0x8058: "Pin " -0x8059: "Jing " -0x805a: "Ju " -0x805b: "Bi " -0x805c: "Di " -0x805d: "Guo " -0x805e: "Wen " -0x805f: "Xu " -0x8060: "Ping " -0x8061: "Cong " -0x8062: "Shikato " -0x8063: "[?] " -0x8064: "Ting " -0x8065: "Yu " -0x8066: "Cong " -0x8067: "Kui " -0x8068: "Tsuraneru " -0x8069: "Kui " -0x806a: "Cong " -0x806b: "Lian " -0x806c: "Weng " -0x806d: "Kui " -0x806e: "Lian " -0x806f: "Lian " -0x8070: "Cong " -0x8071: "Ao " -0x8072: "Sheng " -0x8073: "Song " -0x8074: "Ting " -0x8075: "Kui " -0x8076: "Nie " -0x8077: "Zhi " -0x8078: "Dan " -0x8079: "Ning " -0x807a: "Qie " -0x807b: "Ji " -0x807c: "Ting " -0x807d: "Ting " -0x807e: "Long " -0x807f: "Yu " -0x8080: "Yu " -0x8081: "Zhao " -0x8082: "Si " -0x8083: "Su " -0x8084: "Yi " -0x8085: "Su " -0x8086: "Si " -0x8087: "Zhao " -0x8088: "Zhao " -0x8089: "Rou " -0x808a: "Yi " -0x808b: "Le " -0x808c: "Ji " -0x808d: "Qiu " -0x808e: "Ken " -0x808f: "Cao " -0x8090: "Ge " -0x8091: "Di " -0x8092: "Huan " -0x8093: "Huang " -0x8094: "Yi " -0x8095: "Ren " -0x8096: "Xiao " -0x8097: "Ru " -0x8098: "Zhou " -0x8099: "Yuan " -0x809a: "Du " -0x809b: "Gang " -0x809c: "Rong " -0x809d: "Gan " -0x809e: "Cha " -0x809f: "Wo " -0x80a0: "Chang " -0x80a1: "Gu " -0x80a2: "Zhi " -0x80a3: "Han " -0x80a4: "Fu " -0x80a5: "Fei " -0x80a6: "Fen " -0x80a7: "Pei " -0x80a8: "Pang " -0x80a9: "Jian " -0x80aa: "Fang " -0x80ab: "Zhun " -0x80ac: "You " -0x80ad: "Na " -0x80ae: "Hang " -0x80af: "Ken " -0x80b0: "Ran " -0x80b1: "Gong " -0x80b2: "Yu " -0x80b3: "Wen " -0x80b4: "Yao " -0x80b5: "Jin " -0x80b6: "Pi " -0x80b7: "Qian " -0x80b8: "Xi " -0x80b9: "Xi " -0x80ba: "Fei " -0x80bb: "Ken " -0x80bc: "Jing " -0x80bd: "Tai " -0x80be: "Shen " -0x80bf: "Zhong " -0x80c0: "Zhang " -0x80c1: "Xie " -0x80c2: "Shen " -0x80c3: "Wei " -0x80c4: "Zhou " -0x80c5: "Die " -0x80c6: "Dan " -0x80c7: "Fei " -0x80c8: "Ba " -0x80c9: "Bo " -0x80ca: "Qu " -0x80cb: "Tian " -0x80cc: "Bei " -0x80cd: "Gua " -0x80ce: "Tai " -0x80cf: "Zi " -0x80d0: "Ku " -0x80d1: "Zhi " -0x80d2: "Ni " -0x80d3: "Ping " -0x80d4: "Zi " -0x80d5: "Fu " -0x80d6: "Pang " -0x80d7: "Zhen " -0x80d8: "Xian " -0x80d9: "Zuo " -0x80da: "Pei " -0x80db: "Jia " -0x80dc: "Sheng " -0x80dd: "Zhi " -0x80de: "Bao " -0x80df: "Mu " -0x80e0: "Qu " -0x80e1: "Hu " -0x80e2: "Ke " -0x80e3: "Yi " -0x80e4: "Yin " -0x80e5: "Xu " -0x80e6: "Yang " -0x80e7: "Long " -0x80e8: "Dong " -0x80e9: "Ka " -0x80ea: "Lu " -0x80eb: "Jing " -0x80ec: "Nu " -0x80ed: "Yan " -0x80ee: "Pang " -0x80ef: "Kua " -0x80f0: "Yi " -0x80f1: "Guang " -0x80f2: "Gai " -0x80f3: "Ge " -0x80f4: "Dong " -0x80f5: "Zhi " -0x80f6: "Xiao " -0x80f7: "Xiong " -0x80f8: "Xiong " -0x80f9: "Er " -0x80fa: "E " -0x80fb: "Xing " -0x80fc: "Pian " -0x80fd: "Neng " -0x80fe: "Zi " -0x80ff: "Gui " -/* x081 */ -0x8100: "Cheng " -0x8101: "Tiao " -0x8102: "Zhi " -0x8103: "Cui " -0x8104: "Mei " -0x8105: "Xie " -0x8106: "Cui " -0x8107: "Xie " -0x8108: "Mo " -0x8109: "Mai " -0x810a: "Ji " -0x810b: "Obiyaakasu " -0x810c: "[?] " -0x810d: "Kuai " -0x810e: "Sa " -0x810f: "Zang " -0x8110: "Qi " -0x8111: "Nao " -0x8112: "Mi " -0x8113: "Nong " -0x8114: "Luan " -0x8115: "Wan " -0x8116: "Bo " -0x8117: "Wen " -0x8118: "Guan " -0x8119: "Qiu " -0x811a: "Jiao " -0x811b: "Jing " -0x811c: "Rou " -0x811d: "Heng " -0x811e: "Cuo " -0x811f: "Lie " -0x8120: "Shan " -0x8121: "Ting " -0x8122: "Mei " -0x8123: "Chun " -0x8124: "Shen " -0x8125: "Xie " -0x8126: "De " -0x8127: "Zui " -0x8128: "Cu " -0x8129: "Xiu " -0x812a: "Xin " -0x812b: "Tuo " -0x812c: "Pao " -0x812d: "Cheng " -0x812e: "Nei " -0x812f: "Fu " -0x8130: "Dou " -0x8131: "Tuo " -0x8132: "Niao " -0x8133: "Noy " -0x8134: "Pi " -0x8135: "Gu " -0x8136: "Gua " -0x8137: "Li " -0x8138: "Lian " -0x8139: "Zhang " -0x813a: "Cui " -0x813b: "Jie " -0x813c: "Liang " -0x813d: "Zhou " -0x813e: "Pi " -0x813f: "Biao " -0x8140: "Lun " -0x8141: "Pian " -0x8142: "Guo " -0x8143: "Kui " -0x8144: "Chui " -0x8145: "Dan " -0x8146: "Tian " -0x8147: "Nei " -0x8148: "Jing " -0x8149: "Jie " -0x814a: "La " -0x814b: "Yi " -0x814c: "An " -0x814d: "Ren " -0x814e: "Shen " -0x814f: "Chuo " -0x8150: "Fu " -0x8151: "Fu " -0x8152: "Ju " -0x8153: "Fei " -0x8154: "Qiang " -0x8155: "Wan " -0x8156: "Dong " -0x8157: "Pi " -0x8158: "Guo " -0x8159: "Zong " -0x815a: "Ding " -0x815b: "Wu " -0x815c: "Mei " -0x815d: "Ruan " -0x815e: "Zhuan " -0x815f: "Zhi " -0x8160: "Cou " -0x8161: "Gua " -0x8162: "Ou " -0x8163: "Di " -0x8164: "An " -0x8165: "Xing " -0x8166: "Nao " -0x8167: "Yu " -0x8168: "Chuan " -0x8169: "Nan " -0x816a: "Yun " -0x816b: "Zhong " -0x816c: "Rou " -0x816d: "E " -0x816e: "Sai " -0x816f: "Tu " -0x8170: "Yao " -0x8171: "Jian " -0x8172: "Wei " -0x8173: "Jiao " -0x8174: "Yu " -0x8175: "Jia " -0x8176: "Duan " -0x8177: "Bi " -0x8178: "Chang " -0x8179: "Fu " -0x817a: "Xian " -0x817b: "Ni " -0x817c: "Mian " -0x817d: "Wa " -0x817e: "Teng " -0x817f: "Tui " -0x8180: "Bang " -0x8181: "Qian " -0x8182: "Lu " -0x8183: "Wa " -0x8184: "Sou " -0x8185: "Tang " -0x8186: "Su " -0x8187: "Zhui " -0x8188: "Ge " -0x8189: "Yi " -0x818a: "Bo " -0x818b: "Liao " -0x818c: "Ji " -0x818d: "Pi " -0x818e: "Xie " -0x818f: "Gao " -0x8190: "Lu " -0x8191: "Bin " -0x8192: "Ou " -0x8193: "Chang " -0x8194: "Lu " -0x8195: "Guo " -0x8196: "Pang " -0x8197: "Chuai " -0x8198: "Piao " -0x8199: "Jiang " -0x819a: "Fu " -0x819b: "Tang " -0x819c: "Mo " -0x819d: "Xi " -0x819e: "Zhuan " -0x819f: "Lu " -0x81a0: "Jiao " -0x81a1: "Ying " -0x81a2: "Lu " -0x81a3: "Zhi " -0x81a4: "Tara " -0x81a5: "Chun " -0x81a6: "Lian " -0x81a7: "Tong " -0x81a8: "Peng " -0x81a9: "Ni " -0x81aa: "Zha " -0x81ab: "Liao " -0x81ac: "Cui " -0x81ad: "Gui " -0x81ae: "Xiao " -0x81af: "Teng " -0x81b0: "Fan " -0x81b1: "Zhi " -0x81b2: "Jiao " -0x81b3: "Shan " -0x81b4: "Wu " -0x81b5: "Cui " -0x81b6: "Run " -0x81b7: "Xiang " -0x81b8: "Sui " -0x81b9: "Fen " -0x81ba: "Ying " -0x81bb: "Tan " -0x81bc: "Zhua " -0x81bd: "Dan " -0x81be: "Kuai " -0x81bf: "Nong " -0x81c0: "Tun " -0x81c1: "Lian " -0x81c2: "Bi " -0x81c3: "Yong " -0x81c4: "Jue " -0x81c5: "Chu " -0x81c6: "Yi " -0x81c7: "Juan " -0x81c8: "La " -0x81c9: "Lian " -0x81ca: "Sao " -0x81cb: "Tun " -0x81cc: "Gu " -0x81cd: "Qi " -0x81ce: "Cui " -0x81cf: "Bin " -0x81d0: "Xun " -0x81d1: "Ru " -0x81d2: "Huo " -0x81d3: "Zang " -0x81d4: "Xian " -0x81d5: "Biao " -0x81d6: "Xing " -0x81d7: "Kuan " -0x81d8: "La " -0x81d9: "Yan " -0x81da: "Lu " -0x81db: "Huo " -0x81dc: "Zang " -0x81dd: "Luo " -0x81de: "Qu " -0x81df: "Zang " -0x81e0: "Luan " -0x81e1: "Ni " -0x81e2: "Zang " -0x81e3: "Chen " -0x81e4: "Qian " -0x81e5: "Wo " -0x81e6: "Guang " -0x81e7: "Zang " -0x81e8: "Lin " -0x81e9: "Guang " -0x81ea: "Zi " -0x81eb: "Jiao " -0x81ec: "Nie " -0x81ed: "Chou " -0x81ee: "Ji " -0x81ef: "Gao " -0x81f0: "Chou " -0x81f1: "Mian " -0x81f2: "Nie " -0x81f3: "Zhi " -0x81f4: "Zhi " -0x81f5: "Ge " -0x81f6: "Jian " -0x81f7: "Die " -0x81f8: "Zhi " -0x81f9: "Xiu " -0x81fa: "Tai " -0x81fb: "Zhen " -0x81fc: "Jiu " -0x81fd: "Xian " -0x81fe: "Yu " -0x81ff: "Cha " -/* x082 */ -0x8200: "Yao " -0x8201: "Yu " -0x8202: "Chong " -0x8203: "Xi " -0x8204: "Xi " -0x8205: "Jiu " -0x8206: "Yu " -0x8207: "Yu " -0x8208: "Xing " -0x8209: "Ju " -0x820a: "Jiu " -0x820b: "Xin " -0x820c: "She " -0x820d: "She " -0x820e: "Yadoru " -0x820f: "Jiu " -0x8210: "Shi " -0x8211: "Tan " -0x8212: "Shu " -0x8213: "Shi " -0x8214: "Tian " -0x8215: "Dan " -0x8216: "Pu " -0x8217: "Pu " -0x8218: "Guan " -0x8219: "Hua " -0x821a: "Tan " -0x821b: "Chuan " -0x821c: "Shun " -0x821d: "Xia " -0x821e: "Wu " -0x821f: "Zhou " -0x8220: "Dao " -0x8221: "Gang " -0x8222: "Shan " -0x8223: "Yi " -0x8224: "[?] " -0x8225: "Pa " -0x8226: "Tai " -0x8227: "Fan " -0x8228: "Ban " -0x8229: "Chuan " -0x822a: "Hang " -0x822b: "Fang " -0x822c: "Ban " -0x822d: "Que " -0x822e: "Hesaki " -0x822f: "Zhong " -0x8230: "Jian " -0x8231: "Cang " -0x8232: "Ling " -0x8233: "Zhu " -0x8234: "Ze " -0x8235: "Duo " -0x8236: "Bo " -0x8237: "Xian " -0x8238: "Ge " -0x8239: "Chuan " -0x823a: "Jia " -0x823b: "Lu " -0x823c: "Hong " -0x823d: "Pang " -0x823e: "Xi " -0x823f: "[?] " -0x8240: "Fu " -0x8241: "Zao " -0x8242: "Feng " -0x8243: "Li " -0x8244: "Shao " -0x8245: "Yu " -0x8246: "Lang " -0x8247: "Ting " -0x8248: "[?] " -0x8249: "Wei " -0x824a: "Bo " -0x824b: "Meng " -0x824c: "Nian " -0x824d: "Ju " -0x824e: "Huang " -0x824f: "Shou " -0x8250: "Zong " -0x8251: "Bian " -0x8252: "Mao " -0x8253: "Die " -0x8254: "[?] " -0x8255: "Bang " -0x8256: "Cha " -0x8257: "Yi " -0x8258: "Sao " -0x8259: "Cang " -0x825a: "Cao " -0x825b: "Lou " -0x825c: "Dai " -0x825d: "Sori " -0x825e: "Yao " -0x825f: "Tong " -0x8260: "Yofune " -0x8261: "Dang " -0x8262: "Tan " -0x8263: "Lu " -0x8264: "Yi " -0x8265: "Jie " -0x8266: "Jian " -0x8267: "Huo " -0x8268: "Meng " -0x8269: "Qi " -0x826a: "Lu " -0x826b: "Lu " -0x826c: "Chan " -0x826d: "Shuang " -0x826e: "Gen " -0x826f: "Liang " -0x8270: "Jian " -0x8271: "Jian " -0x8272: "Se " -0x8273: "Yan " -0x8274: "Fu " -0x8275: "Ping " -0x8276: "Yan " -0x8277: "Yan " -0x8278: "Cao " -0x8279: "Cao " -0x827a: "Yi " -0x827b: "Le " -0x827c: "Ting " -0x827d: "Qiu " -0x827e: "Ai " -0x827f: "Nai " -0x8280: "Tiao " -0x8281: "Jiao " -0x8282: "Jie " -0x8283: "Peng " -0x8284: "Wan " -0x8285: "Yi " -0x8286: "Chai " -0x8287: "Mian " -0x8288: "Mie " -0x8289: "Gan " -0x828a: "Qian " -0x828b: "Yu " -0x828c: "Yu " -0x828d: "Shuo " -0x828e: "Qiong " -0x828f: "Tu " -0x8290: "Xia " -0x8291: "Qi " -0x8292: "Mang " -0x8293: "Zi " -0x8294: "Hui " -0x8295: "Sui " -0x8296: "Zhi " -0x8297: "Xiang " -0x8298: "Bi " -0x8299: "Fu " -0x829a: "Tun " -0x829b: "Wei " -0x829c: "Wu " -0x829d: "Zhi " -0x829e: "Qi " -0x829f: "Shan " -0x82a0: "Wen " -0x82a1: "Qian " -0x82a2: "Ren " -0x82a3: "Fou " -0x82a4: "Kou " -0x82a5: "Jie " -0x82a6: "Lu " -0x82a7: "Xu " -0x82a8: "Ji " -0x82a9: "Qin " -0x82aa: "Qi " -0x82ab: "Yuan " -0x82ac: "Fen " -0x82ad: "Ba " -0x82ae: "Rui " -0x82af: "Xin " -0x82b0: "Ji " -0x82b1: "Hua " -0x82b2: "Hua " -0x82b3: "Fang " -0x82b4: "Wu " -0x82b5: "Jue " -0x82b6: "Gou " -0x82b7: "Zhi " -0x82b8: "Yun " -0x82b9: "Qin " -0x82ba: "Ao " -0x82bb: "Chu " -0x82bc: "Mao " -0x82bd: "Ya " -0x82be: "Fei " -0x82bf: "Reng " -0x82c0: "Hang " -0x82c1: "Cong " -0x82c2: "Yin " -0x82c3: "You " -0x82c4: "Bian " -0x82c5: "Yi " -0x82c6: "Susa " -0x82c7: "Wei " -0x82c8: "Li " -0x82c9: "Pi " -0x82ca: "E " -0x82cb: "Xian " -0x82cc: "Chang " -0x82cd: "Cang " -0x82ce: "Meng " -0x82cf: "Su " -0x82d0: "Yi " -0x82d1: "Yuan " -0x82d2: "Ran " -0x82d3: "Ling " -0x82d4: "Tai " -0x82d5: "Tiao " -0x82d6: "Di " -0x82d7: "Miao " -0x82d8: "Qiong " -0x82d9: "Li " -0x82da: "Yong " -0x82db: "Ke " -0x82dc: "Mu " -0x82dd: "Pei " -0x82de: "Bao " -0x82df: "Gou " -0x82e0: "Min " -0x82e1: "Yi " -0x82e2: "Yi " -0x82e3: "Ju " -0x82e4: "Pi " -0x82e5: "Ruo " -0x82e6: "Ku " -0x82e7: "Zhu " -0x82e8: "Ni " -0x82e9: "Bo " -0x82ea: "Bing " -0x82eb: "Shan " -0x82ec: "Qiu " -0x82ed: "Yao " -0x82ee: "Xian " -0x82ef: "Ben " -0x82f0: "Hong " -0x82f1: "Ying " -0x82f2: "Zha " -0x82f3: "Dong " -0x82f4: "Ju " -0x82f5: "Die " -0x82f6: "Nie " -0x82f7: "Gan " -0x82f8: "Hu " -0x82f9: "Ping " -0x82fa: "Mei " -0x82fb: "Fu " -0x82fc: "Sheng " -0x82fd: "Gu " -0x82fe: "Bi " -0x82ff: "Wei " -/* x083 */ -0x8300: "Fu " -0x8301: "Zhuo " -0x8302: "Mao " -0x8303: "Fan " -0x8304: "Qie " -0x8305: "Mao " -0x8306: "Mao " -0x8307: "Ba " -0x8308: "Zi " -0x8309: "Mo " -0x830a: "Zi " -0x830b: "Di " -0x830c: "Chi " -0x830d: "Ji " -0x830e: "Jing " -0x830f: "Long " -0x8310: "[?] " -0x8311: "Niao " -0x8312: "[?] " -0x8313: "Xue " -0x8314: "Ying " -0x8315: "Qiong " -0x8316: "Ge " -0x8317: "Ming " -0x8318: "Li " -0x8319: "Rong " -0x831a: "Yin " -0x831b: "Gen " -0x831c: "Qian " -0x831d: "Chai " -0x831e: "Chen " -0x831f: "Yu " -0x8320: "Xiu " -0x8321: "Zi " -0x8322: "Lie " -0x8323: "Wu " -0x8324: "Ji " -0x8325: "Kui " -0x8326: "Ce " -0x8327: "Chong " -0x8328: "Ci " -0x8329: "Gou " -0x832a: "Guang " -0x832b: "Mang " -0x832c: "Chi " -0x832d: "Jiao " -0x832e: "Jiao " -0x832f: "Fu " -0x8330: "Yu " -0x8331: "Zhu " -0x8332: "Zi " -0x8333: "Jiang " -0x8334: "Hui " -0x8335: "Yin " -0x8336: "Cha " -0x8337: "Fa " -0x8338: "Rong " -0x8339: "Ru " -0x833a: "Chong " -0x833b: "Mang " -0x833c: "Tong " -0x833d: "Zhong " -0x833e: "[?] " -0x833f: "Zhu " -0x8340: "Xun " -0x8341: "Huan " -0x8342: "Kua " -0x8343: "Quan " -0x8344: "Gai " -0x8345: "Da " -0x8346: "Jing " -0x8347: "Xing " -0x8348: "Quan " -0x8349: "Cao " -0x834a: "Jing " -0x834b: "Er " -0x834c: "An " -0x834d: "Shou " -0x834e: "Chi " -0x834f: "Ren " -0x8350: "Jian " -0x8351: "Ti " -0x8352: "Huang " -0x8353: "Ping " -0x8354: "Li " -0x8355: "Jin " -0x8356: "Lao " -0x8357: "Shu " -0x8358: "Zhuang " -0x8359: "Da " -0x835a: "Jia " -0x835b: "Rao " -0x835c: "Bi " -0x835d: "Ze " -0x835e: "Qiao " -0x835f: "Hui " -0x8360: "Qi " -0x8361: "Dang " -0x8362: "[?] " -0x8363: "Rong " -0x8364: "Hun " -0x8365: "Ying " -0x8366: "Luo " -0x8367: "Ying " -0x8368: "Xun " -0x8369: "Jin " -0x836a: "Sun " -0x836b: "Yin " -0x836c: "Mai " -0x836d: "Hong " -0x836e: "Zhou " -0x836f: "Yao " -0x8370: "Du " -0x8371: "Wei " -0x8372: "Chu " -0x8373: "Dou " -0x8374: "Fu " -0x8375: "Ren " -0x8376: "Yin " -0x8377: "He " -0x8378: "Bi " -0x8379: "Bu " -0x837a: "Yun " -0x837b: "Di " -0x837c: "Tu " -0x837d: "Sui " -0x837e: "Sui " -0x837f: "Cheng " -0x8380: "Chen " -0x8381: "Wu " -0x8382: "Bie " -0x8383: "Xi " -0x8384: "Geng " -0x8385: "Li " -0x8386: "Fu " -0x8387: "Zhu " -0x8388: "Mo " -0x8389: "Li " -0x838a: "Zhuang " -0x838b: "Ji " -0x838c: "Duo " -0x838d: "Qiu " -0x838e: "Sha " -0x838f: "Suo " -0x8390: "Chen " -0x8391: "Feng " -0x8392: "Ju " -0x8393: "Mei " -0x8394: "Meng " -0x8395: "Xing " -0x8396: "Jing " -0x8397: "Che " -0x8398: "Xin " -0x8399: "Jun " -0x839a: "Yan " -0x839b: "Ting " -0x839c: "Diao " -0x839d: "Cuo " -0x839e: "Wan " -0x839f: "Han " -0x83a0: "You " -0x83a1: "Cuo " -0x83a2: "Jia " -0x83a3: "Wang " -0x83a4: "You " -0x83a5: "Niu " -0x83a6: "Shao " -0x83a7: "Xian " -0x83a8: "Lang " -0x83a9: "Fu " -0x83aa: "E " -0x83ab: "Mo " -0x83ac: "Wen " -0x83ad: "Jie " -0x83ae: "Nan " -0x83af: "Mu " -0x83b0: "Kan " -0x83b1: "Lai " -0x83b2: "Lian " -0x83b3: "Shi " -0x83b4: "Wo " -0x83b5: "Usagi " -0x83b6: "Lian " -0x83b7: "Huo " -0x83b8: "You " -0x83b9: "Ying " -0x83ba: "Ying " -0x83bb: "Nuc " -0x83bc: "Chun " -0x83bd: "Mang " -0x83be: "Mang " -0x83bf: "Ci " -0x83c0: "Wan " -0x83c1: "Jing " -0x83c2: "Di " -0x83c3: "Qu " -0x83c4: "Dong " -0x83c5: "Jian " -0x83c6: "Zou " -0x83c7: "Gu " -0x83c8: "La " -0x83c9: "Lu " -0x83ca: "Ju " -0x83cb: "Wei " -0x83cc: "Jun " -0x83cd: "Nie " -0x83ce: "Kun " -0x83cf: "He " -0x83d0: "Pu " -0x83d1: "Zi " -0x83d2: "Gao " -0x83d3: "Guo " -0x83d4: "Fu " -0x83d5: "Lun " -0x83d6: "Chang " -0x83d7: "Chou " -0x83d8: "Song " -0x83d9: "Chui " -0x83da: "Zhan " -0x83db: "Men " -0x83dc: "Cai " -0x83dd: "Ba " -0x83de: "Li " -0x83df: "Tu " -0x83e0: "Bo " -0x83e1: "Han " -0x83e2: "Bao " -0x83e3: "Qin " -0x83e4: "Juan " -0x83e5: "Xi " -0x83e6: "Qin " -0x83e7: "Di " -0x83e8: "Jie " -0x83e9: "Pu " -0x83ea: "Dang " -0x83eb: "Jin " -0x83ec: "Zhao " -0x83ed: "Tai " -0x83ee: "Geng " -0x83ef: "Hua " -0x83f0: "Gu " -0x83f1: "Ling " -0x83f2: "Fei " -0x83f3: "Jin " -0x83f4: "An " -0x83f5: "Wang " -0x83f6: "Beng " -0x83f7: "Zhou " -0x83f8: "Yan " -0x83f9: "Ju " -0x83fa: "Jian " -0x83fb: "Lin " -0x83fc: "Tan " -0x83fd: "Shu " -0x83fe: "Tian " -0x83ff: "Dao " -/* x084 */ -0x8400: "Hu " -0x8401: "Qi " -0x8402: "He " -0x8403: "Cui " -0x8404: "Tao " -0x8405: "Chun " -0x8406: "Bei " -0x8407: "Chang " -0x8408: "Huan " -0x8409: "Fei " -0x840a: "Lai " -0x840b: "Qi " -0x840c: "Meng " -0x840d: "Ping " -0x840e: "Wei " -0x840f: "Dan " -0x8410: "Sha " -0x8411: "Huan " -0x8412: "Yan " -0x8413: "Yi " -0x8414: "Tiao " -0x8415: "Qi " -0x8416: "Wan " -0x8417: "Ce " -0x8418: "Nai " -0x8419: "Kutabireru " -0x841a: "Tuo " -0x841b: "Jiu " -0x841c: "Tie " -0x841d: "Luo " -0x841e: "[?] " -0x841f: "[?] " -0x8420: "Meng " -0x8421: "[?] " -0x8422: "Yaji " -0x8423: "[?] " -0x8424: "Ying " -0x8425: "Ying " -0x8426: "Ying " -0x8427: "Xiao " -0x8428: "Sa " -0x8429: "Qiu " -0x842a: "Ke " -0x842b: "Xiang " -0x842c: "Wan " -0x842d: "Yu " -0x842e: "Yu " -0x842f: "Fu " -0x8430: "Lian " -0x8431: "Xuan " -0x8432: "Yuan " -0x8433: "Nan " -0x8434: "Ze " -0x8435: "Wo " -0x8436: "Chun " -0x8437: "Xiao " -0x8438: "Yu " -0x8439: "Pian " -0x843a: "Mao " -0x843b: "An " -0x843c: "E " -0x843d: "Luo " -0x843e: "Ying " -0x843f: "Huo " -0x8440: "Gua " -0x8441: "Jiang " -0x8442: "Mian " -0x8443: "Zuo " -0x8444: "Zuo " -0x8445: "Ju " -0x8446: "Bao " -0x8447: "Rou " -0x8448: "Xi " -0x8449: "Xie " -0x844a: "An " -0x844b: "Qu " -0x844c: "Jian " -0x844d: "Fu " -0x844e: "Lu " -0x844f: "Jing " -0x8450: "Pen " -0x8451: "Feng " -0x8452: "Hong " -0x8453: "Hong " -0x8454: "Hou " -0x8455: "Yan " -0x8456: "Tu " -0x8457: "Zhu " -0x8458: "Zi " -0x8459: "Xiang " -0x845a: "Shen " -0x845b: "Ge " -0x845c: "Jie " -0x845d: "Jing " -0x845e: "Mi " -0x845f: "Huang " -0x8460: "Shen " -0x8461: "Pu " -0x8462: "Gai " -0x8463: "Dong " -0x8464: "Zhou " -0x8465: "Qian " -0x8466: "Wei " -0x8467: "Bo " -0x8468: "Wei " -0x8469: "Pa " -0x846a: "Ji " -0x846b: "Hu " -0x846c: "Zang " -0x846d: "Jia " -0x846e: "Duan " -0x846f: "Yao " -0x8470: "Jun " -0x8471: "Cong " -0x8472: "Quan " -0x8473: "Wei " -0x8474: "Xian " -0x8475: "Kui " -0x8476: "Ting " -0x8477: "Hun " -0x8478: "Xi " -0x8479: "Shi " -0x847a: "Qi " -0x847b: "Lan " -0x847c: "Zong " -0x847d: "Yao " -0x847e: "Yuan " -0x847f: "Mei " -0x8480: "Yun " -0x8481: "Shu " -0x8482: "Di " -0x8483: "Zhuan " -0x8484: "Guan " -0x8485: "Sukumo " -0x8486: "Xue " -0x8487: "Chan " -0x8488: "Kai " -0x8489: "Kui " -0x848a: "[?] " -0x848b: "Jiang " -0x848c: "Lou " -0x848d: "Wei " -0x848e: "Pai " -0x848f: "[?] " -0x8490: "Sou " -0x8491: "Yin " -0x8492: "Shi " -0x8493: "Chun " -0x8494: "Shi " -0x8495: "Yun " -0x8496: "Zhen " -0x8497: "Lang " -0x8498: "Nu " -0x8499: "Meng " -0x849a: "He " -0x849b: "Que " -0x849c: "Suan " -0x849d: "Yuan " -0x849e: "Li " -0x849f: "Ju " -0x84a0: "Xi " -0x84a1: "Pang " -0x84a2: "Chu " -0x84a3: "Xu " -0x84a4: "Tu " -0x84a5: "Liu " -0x84a6: "Wo " -0x84a7: "Zhen " -0x84a8: "Qian " -0x84a9: "Zu " -0x84aa: "Po " -0x84ab: "Cuo " -0x84ac: "Yuan " -0x84ad: "Chu " -0x84ae: "Yu " -0x84af: "Kuai " -0x84b0: "Pan " -0x84b1: "Pu " -0x84b2: "Pu " -0x84b3: "Na " -0x84b4: "Shuo " -0x84b5: "Xi " -0x84b6: "Fen " -0x84b7: "Yun " -0x84b8: "Zheng " -0x84b9: "Jian " -0x84ba: "Ji " -0x84bb: "Ruo " -0x84bc: "Cang " -0x84bd: "En " -0x84be: "Mi " -0x84bf: "Hao " -0x84c0: "Sun " -0x84c1: "Zhen " -0x84c2: "Ming " -0x84c3: "Sou " -0x84c4: "Xu " -0x84c5: "Liu " -0x84c6: "Xi " -0x84c7: "Gu " -0x84c8: "Lang " -0x84c9: "Rong " -0x84ca: "Weng " -0x84cb: "Gai " -0x84cc: "Cuo " -0x84cd: "Shi " -0x84ce: "Tang " -0x84cf: "Luo " -0x84d0: "Ru " -0x84d1: "Suo " -0x84d2: "Xian " -0x84d3: "Bei " -0x84d4: "Yao " -0x84d5: "Gui " -0x84d6: "Bi " -0x84d7: "Zong " -0x84d8: "Gun " -0x84d9: "Za " -0x84da: "Xiu " -0x84db: "Ce " -0x84dc: "Hai " -0x84dd: "Lan " -0x84de: "[?] " -0x84df: "Ji " -0x84e0: "Li " -0x84e1: "Can " -0x84e2: "Lang " -0x84e3: "Yu " -0x84e4: "[?] " -0x84e5: "Ying " -0x84e6: "Mo " -0x84e7: "Diao " -0x84e8: "Tiao " -0x84e9: "Mao " -0x84ea: "Tong " -0x84eb: "Zhu " -0x84ec: "Peng " -0x84ed: "An " -0x84ee: "Lian " -0x84ef: "Cong " -0x84f0: "Xi " -0x84f1: "Ping " -0x84f2: "Qiu " -0x84f3: "Jin " -0x84f4: "Chun " -0x84f5: "Jie " -0x84f6: "Wei " -0x84f7: "Tui " -0x84f8: "Cao " -0x84f9: "Yu " -0x84fa: "Yi " -0x84fb: "Ji " -0x84fc: "Liao " -0x84fd: "Bi " -0x84fe: "Lu " -0x84ff: "Su " -/* x085 */ -0x8500: "Bu " -0x8501: "Zhang " -0x8502: "Luo " -0x8503: "Jiang " -0x8504: "Man " -0x8505: "Yan " -0x8506: "Ling " -0x8507: "Ji " -0x8508: "Piao " -0x8509: "Gun " -0x850a: "Han " -0x850b: "Di " -0x850c: "Su " -0x850d: "Lu " -0x850e: "She " -0x850f: "Shang " -0x8510: "Di " -0x8511: "Mie " -0x8512: "Xun " -0x8513: "Man " -0x8514: "Bo " -0x8515: "Di " -0x8516: "Cuo " -0x8517: "Zhe " -0x8518: "Sen " -0x8519: "Xuan " -0x851a: "Wei " -0x851b: "Hu " -0x851c: "Ao " -0x851d: "Mi " -0x851e: "Lou " -0x851f: "Cu " -0x8520: "Zhong " -0x8521: "Cai " -0x8522: "Po " -0x8523: "Jiang " -0x8524: "Mi " -0x8525: "Cong " -0x8526: "Niao " -0x8527: "Hui " -0x8528: "Jun " -0x8529: "Yin " -0x852a: "Jian " -0x852b: "Yan " -0x852c: "Shu " -0x852d: "Yin " -0x852e: "Kui " -0x852f: "Chen " -0x8530: "Hu " -0x8531: "Sha " -0x8532: "Kou " -0x8533: "Qian " -0x8534: "Ma " -0x8535: "Zang " -0x8536: "Sonoko " -0x8537: "Qiang " -0x8538: "Dou " -0x8539: "Lian " -0x853a: "Lin " -0x853b: "Kou " -0x853c: "Ai " -0x853d: "Bi " -0x853e: "Li " -0x853f: "Wei " -0x8540: "Ji " -0x8541: "Xun " -0x8542: "Sheng " -0x8543: "Fan " -0x8544: "Meng " -0x8545: "Ou " -0x8546: "Chan " -0x8547: "Dian " -0x8548: "Xun " -0x8549: "Jiao " -0x854a: "Rui " -0x854b: "Rui " -0x854c: "Lei " -0x854d: "Yu " -0x854e: "Qiao " -0x854f: "Chu " -0x8550: "Hua " -0x8551: "Jian " -0x8552: "Mai " -0x8553: "Yun " -0x8554: "Bao " -0x8555: "You " -0x8556: "Qu " -0x8557: "Lu " -0x8558: "Rao " -0x8559: "Hui " -0x855a: "E " -0x855b: "Teng " -0x855c: "Fei " -0x855d: "Jue " -0x855e: "Zui " -0x855f: "Fa " -0x8560: "Ru " -0x8561: "Fen " -0x8562: "Kui " -0x8563: "Shun " -0x8564: "Rui " -0x8565: "Ya " -0x8566: "Xu " -0x8567: "Fu " -0x8568: "Jue " -0x8569: "Dang " -0x856a: "Wu " -0x856b: "Tong " -0x856c: "Si " -0x856d: "Xiao " -0x856e: "Xi " -0x856f: "Long " -0x8570: "Yun " -0x8571: "[?] " -0x8572: "Qi " -0x8573: "Jian " -0x8574: "Yun " -0x8575: "Sun " -0x8576: "Ling " -0x8577: "Yu " -0x8578: "Xia " -0x8579: "Yong " -0x857a: "Ji " -0x857b: "Hong " -0x857c: "Si " -0x857d: "Nong " -0x857e: "Lei " -0x857f: "Xuan " -0x8580: "Yun " -0x8581: "Yu " -0x8582: "Xi " -0x8583: "Hao " -0x8584: "Bo " -0x8585: "Hao " -0x8586: "Ai " -0x8587: "Wei " -0x8588: "Hui " -0x8589: "Wei " -0x858a: "Ji " -0x858b: "Ci " -0x858c: "Xiang " -0x858d: "Luan " -0x858e: "Mie " -0x858f: "Yi " -0x8590: "Leng " -0x8591: "Jiang " -0x8592: "Can " -0x8593: "Shen " -0x8594: "Qiang " -0x8595: "Lian " -0x8596: "Ke " -0x8597: "Yuan " -0x8598: "Da " -0x8599: "Ti " -0x859a: "Tang " -0x859b: "Xie " -0x859c: "Bi " -0x859d: "Zhan " -0x859e: "Sun " -0x859f: "Lian " -0x85a0: "Fan " -0x85a1: "Ding " -0x85a2: "Jie " -0x85a3: "Gu " -0x85a4: "Xie " -0x85a5: "Shu " -0x85a6: "Jian " -0x85a7: "Kao " -0x85a8: "Hong " -0x85a9: "Sa " -0x85aa: "Xin " -0x85ab: "Xun " -0x85ac: "Yao " -0x85ad: "Hie " -0x85ae: "Sou " -0x85af: "Shu " -0x85b0: "Xun " -0x85b1: "Dui " -0x85b2: "Pin " -0x85b3: "Wei " -0x85b4: "Neng " -0x85b5: "Chou " -0x85b6: "Mai " -0x85b7: "Ru " -0x85b8: "Piao " -0x85b9: "Tai " -0x85ba: "Qi " -0x85bb: "Zao " -0x85bc: "Chen " -0x85bd: "Zhen " -0x85be: "Er " -0x85bf: "Ni " -0x85c0: "Ying " -0x85c1: "Gao " -0x85c2: "Cong " -0x85c3: "Xiao " -0x85c4: "Qi " -0x85c5: "Fa " -0x85c6: "Jian " -0x85c7: "Xu " -0x85c8: "Kui " -0x85c9: "Jie " -0x85ca: "Bian " -0x85cb: "Diao " -0x85cc: "Mi " -0x85cd: "Lan " -0x85ce: "Jin " -0x85cf: "Cang " -0x85d0: "Miao " -0x85d1: "Qiong " -0x85d2: "Qie " -0x85d3: "Xian " -0x85d4: "[?] " -0x85d5: "Ou " -0x85d6: "Xian " -0x85d7: "Su " -0x85d8: "Lu " -0x85d9: "Yi " -0x85da: "Xu " -0x85db: "Xie " -0x85dc: "Li " -0x85dd: "Yi " -0x85de: "La " -0x85df: "Lei " -0x85e0: "Xiao " -0x85e1: "Di " -0x85e2: "Zhi " -0x85e3: "Bei " -0x85e4: "Teng " -0x85e5: "Yao " -0x85e6: "Mo " -0x85e7: "Huan " -0x85e8: "Piao " -0x85e9: "Fan " -0x85ea: "Sou " -0x85eb: "Tan " -0x85ec: "Tui " -0x85ed: "Qiong " -0x85ee: "Qiao " -0x85ef: "Wei " -0x85f0: "Liu " -0x85f1: "Hui " -0x85f2: "[?] " -0x85f3: "Gao " -0x85f4: "Yun " -0x85f5: "[?] " -0x85f6: "Li " -0x85f7: "Shu " -0x85f8: "Chu " -0x85f9: "Ai " -0x85fa: "Lin " -0x85fb: "Zao " -0x85fc: "Xuan " -0x85fd: "Chen " -0x85fe: "Lai " -0x85ff: "Huo " -/* x086 */ -0x8600: "Tuo " -0x8601: "Wu " -0x8602: "Rui " -0x8603: "Rui " -0x8604: "Qi " -0x8605: "Heng " -0x8606: "Lu " -0x8607: "Su " -0x8608: "Tui " -0x8609: "Mang " -0x860a: "Yun " -0x860b: "Pin " -0x860c: "Yu " -0x860d: "Xun " -0x860e: "Ji " -0x860f: "Jiong " -0x8610: "Xian " -0x8611: "Mo " -0x8612: "Hagi " -0x8613: "Su " -0x8614: "Jiong " -0x8615: "[?] " -0x8616: "Nie " -0x8617: "Bo " -0x8618: "Rang " -0x8619: "Yi " -0x861a: "Xian " -0x861b: "Yu " -0x861c: "Ju " -0x861d: "Lian " -0x861e: "Lian " -0x861f: "Yin " -0x8620: "Qiang " -0x8621: "Ying " -0x8622: "Long " -0x8623: "Tong " -0x8624: "Wei " -0x8625: "Yue " -0x8626: "Ling " -0x8627: "Qu " -0x8628: "Yao " -0x8629: "Fan " -0x862a: "Mi " -0x862b: "Lan " -0x862c: "Kui " -0x862d: "Lan " -0x862e: "Ji " -0x862f: "Dang " -0x8630: "Katsura " -0x8631: "Lei " -0x8632: "Lei " -0x8633: "Hua " -0x8634: "Feng " -0x8635: "Zhi " -0x8636: "Wei " -0x8637: "Kui " -0x8638: "Zhan " -0x8639: "Huai " -0x863a: "Li " -0x863b: "Ji " -0x863c: "Mi " -0x863d: "Lei " -0x863e: "Huai " -0x863f: "Luo " -0x8640: "Ji " -0x8641: "Kui " -0x8642: "Lu " -0x8643: "Jian " -0x8644: "San " -0x8645: "[?] " -0x8646: "Lei " -0x8647: "Quan " -0x8648: "Xiao " -0x8649: "Yi " -0x864a: "Luan " -0x864b: "Men " -0x864c: "Bie " -0x864d: "Hu " -0x864e: "Hu " -0x864f: "Lu " -0x8650: "Nue " -0x8651: "Lu " -0x8652: "Si " -0x8653: "Xiao " -0x8654: "Qian " -0x8655: "Chu " -0x8656: "Hu " -0x8657: "Xu " -0x8658: "Cuo " -0x8659: "Fu " -0x865a: "Xu " -0x865b: "Xu " -0x865c: "Lu " -0x865d: "Hu " -0x865e: "Yu " -0x865f: "Hao " -0x8660: "Jiao " -0x8661: "Ju " -0x8662: "Guo " -0x8663: "Bao " -0x8664: "Yan " -0x8665: "Zhan " -0x8666: "Zhan " -0x8667: "Kui " -0x8668: "Ban " -0x8669: "Xi " -0x866a: "Shu " -0x866b: "Chong " -0x866c: "Qiu " -0x866d: "Diao " -0x866e: "Ji " -0x866f: "Qiu " -0x8670: "Cheng " -0x8671: "Shi " -0x8672: "[?] " -0x8673: "Di " -0x8674: "Zhe " -0x8675: "She " -0x8676: "Yu " -0x8677: "Gan " -0x8678: "Zi " -0x8679: "Hong " -0x867a: "Hui " -0x867b: "Meng " -0x867c: "Ge " -0x867d: "Sui " -0x867e: "Xia " -0x867f: "Chai " -0x8680: "Shi " -0x8681: "Yi " -0x8682: "Ma " -0x8683: "Xiang " -0x8684: "Fang " -0x8685: "E " -0x8686: "Pa " -0x8687: "Chi " -0x8688: "Qian " -0x8689: "Wen " -0x868a: "Wen " -0x868b: "Rui " -0x868c: "Bang " -0x868d: "Bi " -0x868e: "Yue " -0x868f: "Yue " -0x8690: "Jun " -0x8691: "Qi " -0x8692: "Ran " -0x8693: "Yin " -0x8694: "Qi " -0x8695: "Tian " -0x8696: "Yuan " -0x8697: "Jue " -0x8698: "Hui " -0x8699: "Qin " -0x869a: "Qi " -0x869b: "Zhong " -0x869c: "Ya " -0x869d: "Ci " -0x869e: "Mu " -0x869f: "Wang " -0x86a0: "Fen " -0x86a1: "Fen " -0x86a2: "Hang " -0x86a3: "Gong " -0x86a4: "Zao " -0x86a5: "Fu " -0x86a6: "Ran " -0x86a7: "Jie " -0x86a8: "Fu " -0x86a9: "Chi " -0x86aa: "Dou " -0x86ab: "Piao " -0x86ac: "Xian " -0x86ad: "Ni " -0x86ae: "Te " -0x86af: "Qiu " -0x86b0: "You " -0x86b1: "Zha " -0x86b2: "Ping " -0x86b3: "Chi " -0x86b4: "You " -0x86b5: "He " -0x86b6: "Han " -0x86b7: "Ju " -0x86b8: "Li " -0x86b9: "Fu " -0x86ba: "Ran " -0x86bb: "Zha " -0x86bc: "Gou " -0x86bd: "Pi " -0x86be: "Bo " -0x86bf: "Xian " -0x86c0: "Zhu " -0x86c1: "Diao " -0x86c2: "Bie " -0x86c3: "Bing " -0x86c4: "Gu " -0x86c5: "Ran " -0x86c6: "Qu " -0x86c7: "She " -0x86c8: "Tie " -0x86c9: "Ling " -0x86ca: "Gu " -0x86cb: "Dan " -0x86cc: "Gu " -0x86cd: "Ying " -0x86ce: "Li " -0x86cf: "Cheng " -0x86d0: "Qu " -0x86d1: "Mou " -0x86d2: "Ge " -0x86d3: "Ci " -0x86d4: "Hui " -0x86d5: "Hui " -0x86d6: "Mang " -0x86d7: "Fu " -0x86d8: "Yang " -0x86d9: "Wa " -0x86da: "Lie " -0x86db: "Zhu " -0x86dc: "Yi " -0x86dd: "Xian " -0x86de: "Kuo " -0x86df: "Jiao " -0x86e0: "Li " -0x86e1: "Yi " -0x86e2: "Ping " -0x86e3: "Ji " -0x86e4: "Ha " -0x86e5: "She " -0x86e6: "Yi " -0x86e7: "Wang " -0x86e8: "Mo " -0x86e9: "Qiong " -0x86ea: "Qie " -0x86eb: "Gui " -0x86ec: "Gong " -0x86ed: "Zhi " -0x86ee: "Man " -0x86ef: "Ebi " -0x86f0: "Zhi " -0x86f1: "Jia " -0x86f2: "Rao " -0x86f3: "Si " -0x86f4: "Qi " -0x86f5: "Xing " -0x86f6: "Lie " -0x86f7: "Qiu " -0x86f8: "Shao " -0x86f9: "Yong " -0x86fa: "Jia " -0x86fb: "Shui " -0x86fc: "Che " -0x86fd: "Bai " -0x86fe: "E " -0x86ff: "Han " -/* x087 */ -0x8700: "Shu " -0x8701: "Xuan " -0x8702: "Feng " -0x8703: "Shen " -0x8704: "Zhen " -0x8705: "Fu " -0x8706: "Xian " -0x8707: "Zhe " -0x8708: "Wu " -0x8709: "Fu " -0x870a: "Li " -0x870b: "Lang " -0x870c: "Bi " -0x870d: "Chu " -0x870e: "Yuan " -0x870f: "You " -0x8710: "Jie " -0x8711: "Dan " -0x8712: "Yan " -0x8713: "Ting " -0x8714: "Dian " -0x8715: "Shui " -0x8716: "Hui " -0x8717: "Gua " -0x8718: "Zhi " -0x8719: "Song " -0x871a: "Fei " -0x871b: "Ju " -0x871c: "Mi " -0x871d: "Qi " -0x871e: "Qi " -0x871f: "Yu " -0x8720: "Jun " -0x8721: "Zha " -0x8722: "Meng " -0x8723: "Qiang " -0x8724: "Si " -0x8725: "Xi " -0x8726: "Lun " -0x8727: "Li " -0x8728: "Die " -0x8729: "Tiao " -0x872a: "Tao " -0x872b: "Kun " -0x872c: "Gan " -0x872d: "Han " -0x872e: "Yu " -0x872f: "Bang " -0x8730: "Fei " -0x8731: "Pi " -0x8732: "Wei " -0x8733: "Dun " -0x8734: "Yi " -0x8735: "Yuan " -0x8736: "Su " -0x8737: "Quan " -0x8738: "Qian " -0x8739: "Rui " -0x873a: "Ni " -0x873b: "Qing " -0x873c: "Wei " -0x873d: "Liang " -0x873e: "Guo " -0x873f: "Wan " -0x8740: "Dong " -0x8741: "E " -0x8742: "Ban " -0x8743: "Di " -0x8744: "Wang " -0x8745: "Can " -0x8746: "Yang " -0x8747: "Ying " -0x8748: "Guo " -0x8749: "Chan " -0x874a: "[?] " -0x874b: "La " -0x874c: "Ke " -0x874d: "Ji " -0x874e: "He " -0x874f: "Ting " -0x8750: "Mai " -0x8751: "Xu " -0x8752: "Mian " -0x8753: "Yu " -0x8754: "Jie " -0x8755: "Shi " -0x8756: "Xuan " -0x8757: "Huang " -0x8758: "Yan " -0x8759: "Bian " -0x875a: "Rou " -0x875b: "Wei " -0x875c: "Fu " -0x875d: "Yuan " -0x875e: "Mei " -0x875f: "Wei " -0x8760: "Fu " -0x8761: "Ruan " -0x8762: "Xie " -0x8763: "You " -0x8764: "Qiu " -0x8765: "Mao " -0x8766: "Xia " -0x8767: "Ying " -0x8768: "Shi " -0x8769: "Chong " -0x876a: "Tang " -0x876b: "Zhu " -0x876c: "Zong " -0x876d: "Ti " -0x876e: "Fu " -0x876f: "Yuan " -0x8770: "Hui " -0x8771: "Meng " -0x8772: "La " -0x8773: "Du " -0x8774: "Hu " -0x8775: "Qiu " -0x8776: "Die " -0x8777: "Li " -0x8778: "Gua " -0x8779: "Yun " -0x877a: "Ju " -0x877b: "Nan " -0x877c: "Lou " -0x877d: "Qun " -0x877e: "Rong " -0x877f: "Ying " -0x8780: "Jiang " -0x8781: "[?] " -0x8782: "Lang " -0x8783: "Pang " -0x8784: "Si " -0x8785: "Xi " -0x8786: "Ci " -0x8787: "Xi " -0x8788: "Yuan " -0x8789: "Weng " -0x878a: "Lian " -0x878b: "Sou " -0x878c: "Ban " -0x878d: "Rong " -0x878e: "Rong " -0x878f: "Ji " -0x8790: "Wu " -0x8791: "Qiu " -0x8792: "Han " -0x8793: "Qin " -0x8794: "Yi " -0x8795: "Bi " -0x8796: "Hua " -0x8797: "Tang " -0x8798: "Yi " -0x8799: "Du " -0x879a: "Nai " -0x879b: "He " -0x879c: "Hu " -0x879d: "Hui " -0x879e: "Ma " -0x879f: "Ming " -0x87a0: "Yi " -0x87a1: "Wen " -0x87a2: "Ying " -0x87a3: "Teng " -0x87a4: "Yu " -0x87a5: "Cang " -0x87a6: "So " -0x87a7: "Ebi " -0x87a8: "Man " -0x87a9: "[?] " -0x87aa: "Shang " -0x87ab: "Zhe " -0x87ac: "Cao " -0x87ad: "Chi " -0x87ae: "Di " -0x87af: "Ao " -0x87b0: "Lu " -0x87b1: "Wei " -0x87b2: "Zhi " -0x87b3: "Tang " -0x87b4: "Chen " -0x87b5: "Piao " -0x87b6: "Qu " -0x87b7: "Pi " -0x87b8: "Yu " -0x87b9: "Jian " -0x87ba: "Luo " -0x87bb: "Lou " -0x87bc: "Qin " -0x87bd: "Zhong " -0x87be: "Yin " -0x87bf: "Jiang " -0x87c0: "Shuai " -0x87c1: "Wen " -0x87c2: "Jiao " -0x87c3: "Wan " -0x87c4: "Zhi " -0x87c5: "Zhe " -0x87c6: "Ma " -0x87c7: "Ma " -0x87c8: "Guo " -0x87c9: "Liu " -0x87ca: "Mao " -0x87cb: "Xi " -0x87cc: "Cong " -0x87cd: "Li " -0x87ce: "Man " -0x87cf: "Xiao " -0x87d0: "Kamakiri " -0x87d1: "Zhang " -0x87d2: "Mang " -0x87d3: "Xiang " -0x87d4: "Mo " -0x87d5: "Zui " -0x87d6: "Si " -0x87d7: "Qiu " -0x87d8: "Te " -0x87d9: "Zhi " -0x87da: "Peng " -0x87db: "Peng " -0x87dc: "Jiao " -0x87dd: "Qu " -0x87de: "Bie " -0x87df: "Liao " -0x87e0: "Pan " -0x87e1: "Gui " -0x87e2: "Xi " -0x87e3: "Ji " -0x87e4: "Zhuan " -0x87e5: "Huang " -0x87e6: "Fei " -0x87e7: "Lao " -0x87e8: "Jue " -0x87e9: "Jue " -0x87ea: "Hui " -0x87eb: "Yin " -0x87ec: "Chan " -0x87ed: "Jiao " -0x87ee: "Shan " -0x87ef: "Rao " -0x87f0: "Xiao " -0x87f1: "Mou " -0x87f2: "Chong " -0x87f3: "Xun " -0x87f4: "Si " -0x87f5: "[?] " -0x87f6: "Cheng " -0x87f7: "Dang " -0x87f8: "Li " -0x87f9: "Xie " -0x87fa: "Shan " -0x87fb: "Yi " -0x87fc: "Jing " -0x87fd: "Da " -0x87fe: "Chan " -0x87ff: "Qi " -/* x088 */ -0x8800: "Ci " -0x8801: "Xiang " -0x8802: "She " -0x8803: "Luo " -0x8804: "Qin " -0x8805: "Ying " -0x8806: "Chai " -0x8807: "Li " -0x8808: "Ze " -0x8809: "Xuan " -0x880a: "Lian " -0x880b: "Zhu " -0x880c: "Ze " -0x880d: "Xie " -0x880e: "Mang " -0x880f: "Xie " -0x8810: "Qi " -0x8811: "Rong " -0x8812: "Jian " -0x8813: "Meng " -0x8814: "Hao " -0x8815: "Ruan " -0x8816: "Huo " -0x8817: "Zhuo " -0x8818: "Jie " -0x8819: "Bin " -0x881a: "He " -0x881b: "Mie " -0x881c: "Fan " -0x881d: "Lei " -0x881e: "Jie " -0x881f: "La " -0x8820: "Mi " -0x8821: "Li " -0x8822: "Chun " -0x8823: "Li " -0x8824: "Qiu " -0x8825: "Nie " -0x8826: "Lu " -0x8827: "Du " -0x8828: "Xiao " -0x8829: "Zhu " -0x882a: "Long " -0x882b: "Li " -0x882c: "Long " -0x882d: "Feng " -0x882e: "Ye " -0x882f: "Beng " -0x8830: "Shang " -0x8831: "Gu " -0x8832: "Juan " -0x8833: "Ying " -0x8834: "[?] " -0x8835: "Xi " -0x8836: "Can " -0x8837: "Qu " -0x8838: "Quan " -0x8839: "Du " -0x883a: "Can " -0x883b: "Man " -0x883c: "Jue " -0x883d: "Jie " -0x883e: "Zhu " -0x883f: "Zha " -0x8840: "Xie " -0x8841: "Huang " -0x8842: "Niu " -0x8843: "Pei " -0x8844: "Nu " -0x8845: "Xin " -0x8846: "Zhong " -0x8847: "Mo " -0x8848: "Er " -0x8849: "Ke " -0x884a: "Mie " -0x884b: "Xi " -0x884c: "Xing " -0x884d: "Yan " -0x884e: "Kan " -0x884f: "Yuan " -0x8850: "[?] " -0x8851: "Ling " -0x8852: "Xuan " -0x8853: "Shu " -0x8854: "Xian " -0x8855: "Tong " -0x8856: "Long " -0x8857: "Jie " -0x8858: "Xian " -0x8859: "Ya " -0x885a: "Hu " -0x885b: "Wei " -0x885c: "Dao " -0x885d: "Chong " -0x885e: "Wei " -0x885f: "Dao " -0x8860: "Zhun " -0x8861: "Heng " -0x8862: "Qu " -0x8863: "Yi " -0x8864: "Yi " -0x8865: "Bu " -0x8866: "Gan " -0x8867: "Yu " -0x8868: "Biao " -0x8869: "Cha " -0x886a: "Yi " -0x886b: "Shan " -0x886c: "Chen " -0x886d: "Fu " -0x886e: "Gun " -0x886f: "Fen " -0x8870: "Shuai " -0x8871: "Jie " -0x8872: "Na " -0x8873: "Zhong " -0x8874: "Dan " -0x8875: "Ri " -0x8876: "Zhong " -0x8877: "Zhong " -0x8878: "Xie " -0x8879: "Qi " -0x887a: "Xie " -0x887b: "Ran " -0x887c: "Zhi " -0x887d: "Ren " -0x887e: "Qin " -0x887f: "Jin " -0x8880: "Jun " -0x8881: "Yuan " -0x8882: "Mei " -0x8883: "Chai " -0x8884: "Ao " -0x8885: "Niao " -0x8886: "Hui " -0x8887: "Ran " -0x8888: "Jia " -0x8889: "Tuo " -0x888a: "Ling " -0x888b: "Dai " -0x888c: "Bao " -0x888d: "Pao " -0x888e: "Yao " -0x888f: "Zuo " -0x8890: "Bi " -0x8891: "Shao " -0x8892: "Tan " -0x8893: "Ju " -0x8894: "He " -0x8895: "Shu " -0x8896: "Xiu " -0x8897: "Zhen " -0x8898: "Yi " -0x8899: "Pa " -0x889a: "Bo " -0x889b: "Di " -0x889c: "Wa " -0x889d: "Fu " -0x889e: "Gun " -0x889f: "Zhi " -0x88a0: "Zhi " -0x88a1: "Ran " -0x88a2: "Pan " -0x88a3: "Yi " -0x88a4: "Mao " -0x88a5: "Tuo " -0x88a6: "Na " -0x88a7: "Kou " -0x88a8: "Xian " -0x88a9: "Chan " -0x88aa: "Qu " -0x88ab: "Bei " -0x88ac: "Gun " -0x88ad: "Xi " -0x88ae: "Ne " -0x88af: "Bo " -0x88b0: "Horo " -0x88b1: "Fu " -0x88b2: "Yi " -0x88b3: "Chi " -0x88b4: "Ku " -0x88b5: "Ren " -0x88b6: "Jiang " -0x88b7: "Jia " -0x88b8: "Cun " -0x88b9: "Mo " -0x88ba: "Jie " -0x88bb: "Er " -0x88bc: "Luo " -0x88bd: "Ru " -0x88be: "Zhu " -0x88bf: "Gui " -0x88c0: "Yin " -0x88c1: "Cai " -0x88c2: "Lie " -0x88c3: "Kamishimo " -0x88c4: "Yuki " -0x88c5: "Zhuang " -0x88c6: "Dang " -0x88c7: "[?] " -0x88c8: "Kun " -0x88c9: "Ken " -0x88ca: "Niao " -0x88cb: "Shu " -0x88cc: "Jia " -0x88cd: "Kun " -0x88ce: "Cheng " -0x88cf: "Li " -0x88d0: "Juan " -0x88d1: "Shen " -0x88d2: "Pou " -0x88d3: "Ge " -0x88d4: "Yi " -0x88d5: "Yu " -0x88d6: "Zhen " -0x88d7: "Liu " -0x88d8: "Qiu " -0x88d9: "Qun " -0x88da: "Ji " -0x88db: "Yi " -0x88dc: "Bu " -0x88dd: "Zhuang " -0x88de: "Shui " -0x88df: "Sha " -0x88e0: "Qun " -0x88e1: "Li " -0x88e2: "Lian " -0x88e3: "Lian " -0x88e4: "Ku " -0x88e5: "Jian " -0x88e6: "Fou " -0x88e7: "Chan " -0x88e8: "Bi " -0x88e9: "Gun " -0x88ea: "Tao " -0x88eb: "Yuan " -0x88ec: "Ling " -0x88ed: "Chi " -0x88ee: "Chang " -0x88ef: "Chou " -0x88f0: "Duo " -0x88f1: "Biao " -0x88f2: "Liang " -0x88f3: "Chang " -0x88f4: "Pei " -0x88f5: "Pei " -0x88f6: "Fei " -0x88f7: "Yuan " -0x88f8: "Luo " -0x88f9: "Guo " -0x88fa: "Yan " -0x88fb: "Du " -0x88fc: "Xi " -0x88fd: "Zhi " -0x88fe: "Ju " -0x88ff: "Qi " -/* x089 */ -0x8900: "Ji " -0x8901: "Zhi " -0x8902: "Gua " -0x8903: "Ken " -0x8904: "Che " -0x8905: "Ti " -0x8906: "Ti " -0x8907: "Fu " -0x8908: "Chong " -0x8909: "Xie " -0x890a: "Bian " -0x890b: "Die " -0x890c: "Kun " -0x890d: "Duan " -0x890e: "Xiu " -0x890f: "Xiu " -0x8910: "He " -0x8911: "Yuan " -0x8912: "Bao " -0x8913: "Bao " -0x8914: "Fu " -0x8915: "Yu " -0x8916: "Tuan " -0x8917: "Yan " -0x8918: "Hui " -0x8919: "Bei " -0x891a: "Chu " -0x891b: "Lu " -0x891c: "Ena " -0x891d: "Hitoe " -0x891e: "Yun " -0x891f: "Da " -0x8920: "Gou " -0x8921: "Da " -0x8922: "Huai " -0x8923: "Rong " -0x8924: "Yuan " -0x8925: "Ru " -0x8926: "Nai " -0x8927: "Jiong " -0x8928: "Suo " -0x8929: "Ban " -0x892a: "Tun " -0x892b: "Chi " -0x892c: "Sang " -0x892d: "Niao " -0x892e: "Ying " -0x892f: "Jie " -0x8930: "Qian " -0x8931: "Huai " -0x8932: "Ku " -0x8933: "Lian " -0x8934: "Bao " -0x8935: "Li " -0x8936: "Zhe " -0x8937: "Shi " -0x8938: "Lu " -0x8939: "Yi " -0x893a: "Die " -0x893b: "Xie " -0x893c: "Xian " -0x893d: "Wei " -0x893e: "Biao " -0x893f: "Cao " -0x8940: "Ji " -0x8941: "Jiang " -0x8942: "Sen " -0x8943: "Bao " -0x8944: "Xiang " -0x8945: "Chihaya " -0x8946: "Pu " -0x8947: "Jian " -0x8948: "Zhuan " -0x8949: "Jian " -0x894a: "Zui " -0x894b: "Ji " -0x894c: "Dan " -0x894d: "Za " -0x894e: "Fan " -0x894f: "Bo " -0x8950: "Xiang " -0x8951: "Xin " -0x8952: "Bie " -0x8953: "Rao " -0x8954: "Man " -0x8955: "Lan " -0x8956: "Ao " -0x8957: "Duo " -0x8958: "Gui " -0x8959: "Cao " -0x895a: "Sui " -0x895b: "Nong " -0x895c: "Chan " -0x895d: "Lian " -0x895e: "Bi " -0x895f: "Jin " -0x8960: "Dang " -0x8961: "Shu " -0x8962: "Tan " -0x8963: "Bi " -0x8964: "Lan " -0x8965: "Pu " -0x8966: "Ru " -0x8967: "Zhi " -0x8968: "[?] " -0x8969: "Shu " -0x896a: "Wa " -0x896b: "Shi " -0x896c: "Bai " -0x896d: "Xie " -0x896e: "Bo " -0x896f: "Chen " -0x8970: "Lai " -0x8971: "Long " -0x8972: "Xi " -0x8973: "Xian " -0x8974: "Lan " -0x8975: "Zhe " -0x8976: "Dai " -0x8977: "Tasuki " -0x8978: "Zan " -0x8979: "Shi " -0x897a: "Jian " -0x897b: "Pan " -0x897c: "Yi " -0x897d: "Ran " -0x897e: "Ya " -0x897f: "Xi " -0x8980: "Xi " -0x8981: "Yao " -0x8982: "Feng " -0x8983: "Tan " -0x8984: "[?] " -0x8985: "Biao " -0x8986: "Fu " -0x8987: "Ba " -0x8988: "He " -0x8989: "Ji " -0x898a: "Ji " -0x898b: "Jian " -0x898c: "Guan " -0x898d: "Bian " -0x898e: "Yan " -0x898f: "Gui " -0x8990: "Jue " -0x8991: "Pian " -0x8992: "Mao " -0x8993: "Mi " -0x8994: "Mi " -0x8995: "Mie " -0x8996: "Shi " -0x8997: "Si " -0x8998: "Zhan " -0x8999: "Luo " -0x899a: "Jue " -0x899b: "Mi " -0x899c: "Tiao " -0x899d: "Lian " -0x899e: "Yao " -0x899f: "Zhi " -0x89a0: "Jun " -0x89a1: "Xi " -0x89a2: "Shan " -0x89a3: "Wei " -0x89a4: "Xi " -0x89a5: "Tian " -0x89a6: "Yu " -0x89a7: "Lan " -0x89a8: "E " -0x89a9: "Du " -0x89aa: "Qin " -0x89ab: "Pang " -0x89ac: "Ji " -0x89ad: "Ming " -0x89ae: "Ying " -0x89af: "Gou " -0x89b0: "Qu " -0x89b1: "Zhan " -0x89b2: "Jin " -0x89b3: "Guan " -0x89b4: "Deng " -0x89b5: "Jian " -0x89b6: "Luo " -0x89b7: "Qu " -0x89b8: "Jian " -0x89b9: "Wei " -0x89ba: "Jue " -0x89bb: "Qu " -0x89bc: "Luo " -0x89bd: "Lan " -0x89be: "Shen " -0x89bf: "Di " -0x89c0: "Guan " -0x89c1: "Jian " -0x89c2: "Guan " -0x89c3: "Yan " -0x89c4: "Gui " -0x89c5: "Mi " -0x89c6: "Shi " -0x89c7: "Zhan " -0x89c8: "Lan " -0x89c9: "Jue " -0x89ca: "Ji " -0x89cb: "Xi " -0x89cc: "Di " -0x89cd: "Tian " -0x89ce: "Yu " -0x89cf: "Gou " -0x89d0: "Jin " -0x89d1: "Qu " -0x89d2: "Jiao " -0x89d3: "Jiu " -0x89d4: "Jin " -0x89d5: "Cu " -0x89d6: "Jue " -0x89d7: "Zhi " -0x89d8: "Chao " -0x89d9: "Ji " -0x89da: "Gu " -0x89db: "Dan " -0x89dc: "Zui " -0x89dd: "Di " -0x89de: "Shang " -0x89df: "Hua " -0x89e0: "Quan " -0x89e1: "Ge " -0x89e2: "Chi " -0x89e3: "Jie " -0x89e4: "Gui " -0x89e5: "Gong " -0x89e6: "Hong " -0x89e7: "Jie " -0x89e8: "Hun " -0x89e9: "Qiu " -0x89ea: "Xing " -0x89eb: "Su " -0x89ec: "Ni " -0x89ed: "Ji " -0x89ee: "Lu " -0x89ef: "Zhi " -0x89f0: "Zha " -0x89f1: "Bi " -0x89f2: "Xing " -0x89f3: "Hu " -0x89f4: "Shang " -0x89f5: "Gong " -0x89f6: "Zhi " -0x89f7: "Xue " -0x89f8: "Chu " -0x89f9: "Xi " -0x89fa: "Yi " -0x89fb: "Lu " -0x89fc: "Jue " -0x89fd: "Xi " -0x89fe: "Yan " -0x89ff: "Xi " -/* x08a */ -0x8a00: "Yan " -0x8a01: "Yan " -0x8a02: "Ding " -0x8a03: "Fu " -0x8a04: "Qiu " -0x8a05: "Qiu " -0x8a06: "Jiao " -0x8a07: "Hong " -0x8a08: "Ji " -0x8a09: "Fan " -0x8a0a: "Xun " -0x8a0b: "Diao " -0x8a0c: "Hong " -0x8a0d: "Cha " -0x8a0e: "Tao " -0x8a0f: "Xu " -0x8a10: "Jie " -0x8a11: "Yi " -0x8a12: "Ren " -0x8a13: "Xun " -0x8a14: "Yin " -0x8a15: "Shan " -0x8a16: "Qi " -0x8a17: "Tuo " -0x8a18: "Ji " -0x8a19: "Xun " -0x8a1a: "Yin " -0x8a1b: "E " -0x8a1c: "Fen " -0x8a1d: "Ya " -0x8a1e: "Yao " -0x8a1f: "Song " -0x8a20: "Shen " -0x8a21: "Yin " -0x8a22: "Xin " -0x8a23: "Jue " -0x8a24: "Xiao " -0x8a25: "Ne " -0x8a26: "Chen " -0x8a27: "You " -0x8a28: "Zhi " -0x8a29: "Xiong " -0x8a2a: "Fang " -0x8a2b: "Xin " -0x8a2c: "Chao " -0x8a2d: "She " -0x8a2e: "Xian " -0x8a2f: "Sha " -0x8a30: "Tun " -0x8a31: "Xu " -0x8a32: "Yi " -0x8a33: "Yi " -0x8a34: "Su " -0x8a35: "Chi " -0x8a36: "He " -0x8a37: "Shen " -0x8a38: "He " -0x8a39: "Xu " -0x8a3a: "Zhen " -0x8a3b: "Zhu " -0x8a3c: "Zheng " -0x8a3d: "Gou " -0x8a3e: "Zi " -0x8a3f: "Zi " -0x8a40: "Zhan " -0x8a41: "Gu " -0x8a42: "Fu " -0x8a43: "Quan " -0x8a44: "Die " -0x8a45: "Ling " -0x8a46: "Di " -0x8a47: "Yang " -0x8a48: "Li " -0x8a49: "Nao " -0x8a4a: "Pan " -0x8a4b: "Zhou " -0x8a4c: "Gan " -0x8a4d: "Yi " -0x8a4e: "Ju " -0x8a4f: "Ao " -0x8a50: "Zha " -0x8a51: "Tuo " -0x8a52: "Yi " -0x8a53: "Qu " -0x8a54: "Zhao " -0x8a55: "Ping " -0x8a56: "Bi " -0x8a57: "Xiong " -0x8a58: "Qu " -0x8a59: "Ba " -0x8a5a: "Da " -0x8a5b: "Zu " -0x8a5c: "Tao " -0x8a5d: "Zhu " -0x8a5e: "Ci " -0x8a5f: "Zhe " -0x8a60: "Yong " -0x8a61: "Xu " -0x8a62: "Xun " -0x8a63: "Yi " -0x8a64: "Huang " -0x8a65: "He " -0x8a66: "Shi " -0x8a67: "Cha " -0x8a68: "Jiao " -0x8a69: "Shi " -0x8a6a: "Hen " -0x8a6b: "Cha " -0x8a6c: "Gou " -0x8a6d: "Gui " -0x8a6e: "Quan " -0x8a6f: "Hui " -0x8a70: "Jie " -0x8a71: "Hua " -0x8a72: "Gai " -0x8a73: "Xiang " -0x8a74: "Wei " -0x8a75: "Shen " -0x8a76: "Chou " -0x8a77: "Tong " -0x8a78: "Mi " -0x8a79: "Zhan " -0x8a7a: "Ming " -0x8a7b: "E " -0x8a7c: "Hui " -0x8a7d: "Yan " -0x8a7e: "Xiong " -0x8a7f: "Gua " -0x8a80: "Er " -0x8a81: "Beng " -0x8a82: "Tiao " -0x8a83: "Chi " -0x8a84: "Lei " -0x8a85: "Zhu " -0x8a86: "Kuang " -0x8a87: "Kua " -0x8a88: "Wu " -0x8a89: "Yu " -0x8a8a: "Teng " -0x8a8b: "Ji " -0x8a8c: "Zhi " -0x8a8d: "Ren " -0x8a8e: "Su " -0x8a8f: "Lang " -0x8a90: "E " -0x8a91: "Kuang " -0x8a92: "E " -0x8a93: "Shi " -0x8a94: "Ting " -0x8a95: "Dan " -0x8a96: "Bo " -0x8a97: "Chan " -0x8a98: "You " -0x8a99: "Heng " -0x8a9a: "Qiao " -0x8a9b: "Qin " -0x8a9c: "Shua " -0x8a9d: "An " -0x8a9e: "Yu " -0x8a9f: "Xiao " -0x8aa0: "Cheng " -0x8aa1: "Jie " -0x8aa2: "Xian " -0x8aa3: "Wu " -0x8aa4: "Wu " -0x8aa5: "Gao " -0x8aa6: "Song " -0x8aa7: "Pu " -0x8aa8: "Hui " -0x8aa9: "Jing " -0x8aaa: "Shuo " -0x8aab: "Zhen " -0x8aac: "Shuo " -0x8aad: "Du " -0x8aae: "Yasashi " -0x8aaf: "Chang " -0x8ab0: "Shui " -0x8ab1: "Jie " -0x8ab2: "Ke " -0x8ab3: "Qu " -0x8ab4: "Cong " -0x8ab5: "Xiao " -0x8ab6: "Sui " -0x8ab7: "Wang " -0x8ab8: "Xuan " -0x8ab9: "Fei " -0x8aba: "Chi " -0x8abb: "Ta " -0x8abc: "Yi " -0x8abd: "Na " -0x8abe: "Yin " -0x8abf: "Diao " -0x8ac0: "Pi " -0x8ac1: "Chuo " -0x8ac2: "Chan " -0x8ac3: "Chen " -0x8ac4: "Zhun " -0x8ac5: "Ji " -0x8ac6: "Qi " -0x8ac7: "Tan " -0x8ac8: "Zhui " -0x8ac9: "Wei " -0x8aca: "Ju " -0x8acb: "Qing " -0x8acc: "Jian " -0x8acd: "Zheng " -0x8ace: "Ze " -0x8acf: "Zou " -0x8ad0: "Qian " -0x8ad1: "Zhuo " -0x8ad2: "Liang " -0x8ad3: "Jian " -0x8ad4: "Zhu " -0x8ad5: "Hao " -0x8ad6: "Lun " -0x8ad7: "Shen " -0x8ad8: "Biao " -0x8ad9: "Huai " -0x8ada: "Pian " -0x8adb: "Yu " -0x8adc: "Die " -0x8add: "Xu " -0x8ade: "Pian " -0x8adf: "Shi " -0x8ae0: "Xuan " -0x8ae1: "Shi " -0x8ae2: "Hun " -0x8ae3: "Hua " -0x8ae4: "E " -0x8ae5: "Zhong " -0x8ae6: "Di " -0x8ae7: "Xie " -0x8ae8: "Fu " -0x8ae9: "Pu " -0x8aea: "Ting " -0x8aeb: "Jian " -0x8aec: "Qi " -0x8aed: "Yu " -0x8aee: "Zi " -0x8aef: "Chuan " -0x8af0: "Xi " -0x8af1: "Hui " -0x8af2: "Yin " -0x8af3: "An " -0x8af4: "Xian " -0x8af5: "Nan " -0x8af6: "Chen " -0x8af7: "Feng " -0x8af8: "Zhu " -0x8af9: "Yang " -0x8afa: "Yan " -0x8afb: "Heng " -0x8afc: "Xuan " -0x8afd: "Ge " -0x8afe: "Nuo " -0x8aff: "Qi " -/* x08b */ -0x8b00: "Mou " -0x8b01: "Ye " -0x8b02: "Wei " -0x8b03: "[?] " -0x8b04: "Teng " -0x8b05: "Zou " -0x8b06: "Shan " -0x8b07: "Jian " -0x8b08: "Bo " -0x8b09: "Ku " -0x8b0a: "Huang " -0x8b0b: "Huo " -0x8b0c: "Ge " -0x8b0d: "Ying " -0x8b0e: "Mi " -0x8b0f: "Xiao " -0x8b10: "Mi " -0x8b11: "Xi " -0x8b12: "Qiang " -0x8b13: "Chen " -0x8b14: "Nue " -0x8b15: "Ti " -0x8b16: "Su " -0x8b17: "Bang " -0x8b18: "Chi " -0x8b19: "Qian " -0x8b1a: "Shi " -0x8b1b: "Jiang " -0x8b1c: "Yuan " -0x8b1d: "Xie " -0x8b1e: "Xue " -0x8b1f: "Tao " -0x8b20: "Yao " -0x8b21: "Yao " -0x8b22: "[?] " -0x8b23: "Yu " -0x8b24: "Biao " -0x8b25: "Cong " -0x8b26: "Qing " -0x8b27: "Li " -0x8b28: "Mo " -0x8b29: "Mo " -0x8b2a: "Shang " -0x8b2b: "Zhe " -0x8b2c: "Miu " -0x8b2d: "Jian " -0x8b2e: "Ze " -0x8b2f: "Jie " -0x8b30: "Lian " -0x8b31: "Lou " -0x8b32: "Can " -0x8b33: "Ou " -0x8b34: "Guan " -0x8b35: "Xi " -0x8b36: "Zhuo " -0x8b37: "Ao " -0x8b38: "Ao " -0x8b39: "Jin " -0x8b3a: "Zhe " -0x8b3b: "Yi " -0x8b3c: "Hu " -0x8b3d: "Jiang " -0x8b3e: "Man " -0x8b3f: "Chao " -0x8b40: "Han " -0x8b41: "Hua " -0x8b42: "Chan " -0x8b43: "Xu " -0x8b44: "Zeng " -0x8b45: "Se " -0x8b46: "Xi " -0x8b47: "She " -0x8b48: "Dui " -0x8b49: "Zheng " -0x8b4a: "Nao " -0x8b4b: "Lan " -0x8b4c: "E " -0x8b4d: "Ying " -0x8b4e: "Jue " -0x8b4f: "Ji " -0x8b50: "Zun " -0x8b51: "Jiao " -0x8b52: "Bo " -0x8b53: "Hui " -0x8b54: "Zhuan " -0x8b55: "Mu " -0x8b56: "Zen " -0x8b57: "Zha " -0x8b58: "Shi " -0x8b59: "Qiao " -0x8b5a: "Tan " -0x8b5b: "Zen " -0x8b5c: "Pu " -0x8b5d: "Sheng " -0x8b5e: "Xuan " -0x8b5f: "Zao " -0x8b60: "Tan " -0x8b61: "Dang " -0x8b62: "Sui " -0x8b63: "Qian " -0x8b64: "Ji " -0x8b65: "Jiao " -0x8b66: "Jing " -0x8b67: "Lian " -0x8b68: "Nou " -0x8b69: "Yi " -0x8b6a: "Ai " -0x8b6b: "Zhan " -0x8b6c: "Pi " -0x8b6d: "Hui " -0x8b6e: "Hua " -0x8b6f: "Yi " -0x8b70: "Yi " -0x8b71: "Shan " -0x8b72: "Rang " -0x8b73: "Nou " -0x8b74: "Qian " -0x8b75: "Zhui " -0x8b76: "Ta " -0x8b77: "Hu " -0x8b78: "Zhou " -0x8b79: "Hao " -0x8b7a: "Ye " -0x8b7b: "Ying " -0x8b7c: "Jian " -0x8b7d: "Yu " -0x8b7e: "Jian " -0x8b7f: "Hui " -0x8b80: "Du " -0x8b81: "Zhe " -0x8b82: "Xuan " -0x8b83: "Zan " -0x8b84: "Lei " -0x8b85: "Shen " -0x8b86: "Wei " -0x8b87: "Chan " -0x8b88: "Li " -0x8b89: "Yi " -0x8b8a: "Bian " -0x8b8b: "Zhe " -0x8b8c: "Yan " -0x8b8d: "E " -0x8b8e: "Chou " -0x8b8f: "Wei " -0x8b90: "Chou " -0x8b91: "Yao " -0x8b92: "Chan " -0x8b93: "Rang " -0x8b94: "Yin " -0x8b95: "Lan " -0x8b96: "Chen " -0x8b97: "Huo " -0x8b98: "Zhe " -0x8b99: "Huan " -0x8b9a: "Zan " -0x8b9b: "Yi " -0x8b9c: "Dang " -0x8b9d: "Zhan " -0x8b9e: "Yan " -0x8b9f: "Du " -0x8ba0: "Yan " -0x8ba1: "Ji " -0x8ba2: "Ding " -0x8ba3: "Fu " -0x8ba4: "Ren " -0x8ba5: "Ji " -0x8ba6: "Jie " -0x8ba7: "Hong " -0x8ba8: "Tao " -0x8ba9: "Rang " -0x8baa: "Shan " -0x8bab: "Qi " -0x8bac: "Tuo " -0x8bad: "Xun " -0x8bae: "Yi " -0x8baf: "Xun " -0x8bb0: "Ji " -0x8bb1: "Ren " -0x8bb2: "Jiang " -0x8bb3: "Hui " -0x8bb4: "Ou " -0x8bb5: "Ju " -0x8bb6: "Ya " -0x8bb7: "Ne " -0x8bb8: "Xu " -0x8bb9: "E " -0x8bba: "Lun " -0x8bbb: "Xiong " -0x8bbc: "Song " -0x8bbd: "Feng " -0x8bbe: "She " -0x8bbf: "Fang " -0x8bc0: "Jue " -0x8bc1: "Zheng " -0x8bc2: "Gu " -0x8bc3: "He " -0x8bc4: "Ping " -0x8bc5: "Zu " -0x8bc6: "Shi " -0x8bc7: "Xiong " -0x8bc8: "Zha " -0x8bc9: "Su " -0x8bca: "Zhen " -0x8bcb: "Di " -0x8bcc: "Zou " -0x8bcd: "Ci " -0x8bce: "Qu " -0x8bcf: "Zhao " -0x8bd0: "Bi " -0x8bd1: "Yi " -0x8bd2: "Yi " -0x8bd3: "Kuang " -0x8bd4: "Lei " -0x8bd5: "Shi " -0x8bd6: "Gua " -0x8bd7: "Shi " -0x8bd8: "Jie " -0x8bd9: "Hui " -0x8bda: "Cheng " -0x8bdb: "Zhu " -0x8bdc: "Shen " -0x8bdd: "Hua " -0x8bde: "Dan " -0x8bdf: "Gou " -0x8be0: "Quan " -0x8be1: "Gui " -0x8be2: "Xun " -0x8be3: "Yi " -0x8be4: "Zheng " -0x8be5: "Gai " -0x8be6: "Xiang " -0x8be7: "Cha " -0x8be8: "Hun " -0x8be9: "Xu " -0x8bea: "Zhou " -0x8beb: "Jie " -0x8bec: "Wu " -0x8bed: "Yu " -0x8bee: "Qiao " -0x8bef: "Wu " -0x8bf0: "Gao " -0x8bf1: "You " -0x8bf2: "Hui " -0x8bf3: "Kuang " -0x8bf4: "Shuo " -0x8bf5: "Song " -0x8bf6: "Ai " -0x8bf7: "Qing " -0x8bf8: "Zhu " -0x8bf9: "Zou " -0x8bfa: "Nuo " -0x8bfb: "Du " -0x8bfc: "Zhuo " -0x8bfd: "Fei " -0x8bfe: "Ke " -0x8bff: "Wei " -/* x08c */ -0x8c00: "Yu " -0x8c01: "Shui " -0x8c02: "Shen " -0x8c03: "Diao " -0x8c04: "Chan " -0x8c05: "Liang " -0x8c06: "Zhun " -0x8c07: "Sui " -0x8c08: "Tan " -0x8c09: "Shen " -0x8c0a: "Yi " -0x8c0b: "Mou " -0x8c0c: "Chen " -0x8c0d: "Die " -0x8c0e: "Huang " -0x8c0f: "Jian " -0x8c10: "Xie " -0x8c11: "Nue " -0x8c12: "Ye " -0x8c13: "Wei " -0x8c14: "E " -0x8c15: "Yu " -0x8c16: "Xuan " -0x8c17: "Chan " -0x8c18: "Zi " -0x8c19: "An " -0x8c1a: "Yan " -0x8c1b: "Di " -0x8c1c: "Mi " -0x8c1d: "Pian " -0x8c1e: "Xu " -0x8c1f: "Mo " -0x8c20: "Dang " -0x8c21: "Su " -0x8c22: "Xie " -0x8c23: "Yao " -0x8c24: "Bang " -0x8c25: "Shi " -0x8c26: "Qian " -0x8c27: "Mi " -0x8c28: "Jin " -0x8c29: "Man " -0x8c2a: "Zhe " -0x8c2b: "Jian " -0x8c2c: "Miu " -0x8c2d: "Tan " -0x8c2e: "Zen " -0x8c2f: "Qiao " -0x8c30: "Lan " -0x8c31: "Pu " -0x8c32: "Jue " -0x8c33: "Yan " -0x8c34: "Qian " -0x8c35: "Zhan " -0x8c36: "Chen " -0x8c37: "Gu " -0x8c38: "Qian " -0x8c39: "Hong " -0x8c3a: "Xia " -0x8c3b: "Jue " -0x8c3c: "Hong " -0x8c3d: "Han " -0x8c3e: "Hong " -0x8c3f: "Xi " -0x8c40: "Xi " -0x8c41: "Huo " -0x8c42: "Liao " -0x8c43: "Han " -0x8c44: "Du " -0x8c45: "Long " -0x8c46: "Dou " -0x8c47: "Jiang " -0x8c48: "Qi " -0x8c49: "Shi " -0x8c4a: "Li " -0x8c4b: "Deng " -0x8c4c: "Wan " -0x8c4d: "Bi " -0x8c4e: "Shu " -0x8c4f: "Xian " -0x8c50: "Feng " -0x8c51: "Zhi " -0x8c52: "Zhi " -0x8c53: "Yan " -0x8c54: "Yan " -0x8c55: "Shi " -0x8c56: "Chu " -0x8c57: "Hui " -0x8c58: "Tun " -0x8c59: "Yi " -0x8c5a: "Tun " -0x8c5b: "Yi " -0x8c5c: "Jian " -0x8c5d: "Ba " -0x8c5e: "Hou " -0x8c5f: "E " -0x8c60: "Cu " -0x8c61: "Xiang " -0x8c62: "Huan " -0x8c63: "Jian " -0x8c64: "Ken " -0x8c65: "Gai " -0x8c66: "Qu " -0x8c67: "Fu " -0x8c68: "Xi " -0x8c69: "Bin " -0x8c6a: "Hao " -0x8c6b: "Yu " -0x8c6c: "Zhu " -0x8c6d: "Jia " -0x8c6e: "[?] " -0x8c6f: "Xi " -0x8c70: "Bo " -0x8c71: "Wen " -0x8c72: "Huan " -0x8c73: "Bin " -0x8c74: "Di " -0x8c75: "Zong " -0x8c76: "Fen " -0x8c77: "Yi " -0x8c78: "Zhi " -0x8c79: "Bao " -0x8c7a: "Chai " -0x8c7b: "Han " -0x8c7c: "Pi " -0x8c7d: "Na " -0x8c7e: "Pi " -0x8c7f: "Gou " -0x8c80: "Na " -0x8c81: "You " -0x8c82: "Diao " -0x8c83: "Mo " -0x8c84: "Si " -0x8c85: "Xiu " -0x8c86: "Huan " -0x8c87: "Kun " -0x8c88: "He " -0x8c89: "He " -0x8c8a: "Mo " -0x8c8b: "Han " -0x8c8c: "Mao " -0x8c8d: "Li " -0x8c8e: "Ni " -0x8c8f: "Bi " -0x8c90: "Yu " -0x8c91: "Jia " -0x8c92: "Tuan " -0x8c93: "Mao " -0x8c94: "Pi " -0x8c95: "Xi " -0x8c96: "E " -0x8c97: "Ju " -0x8c98: "Mo " -0x8c99: "Chu " -0x8c9a: "Tan " -0x8c9b: "Huan " -0x8c9c: "Jue " -0x8c9d: "Bei " -0x8c9e: "Zhen " -0x8c9f: "Yuan " -0x8ca0: "Fu " -0x8ca1: "Cai " -0x8ca2: "Gong " -0x8ca3: "Te " -0x8ca4: "Yi " -0x8ca5: "Hang " -0x8ca6: "Wan " -0x8ca7: "Pin " -0x8ca8: "Huo " -0x8ca9: "Fan " -0x8caa: "Tan " -0x8cab: "Guan " -0x8cac: "Ze " -0x8cad: "Zhi " -0x8cae: "Er " -0x8caf: "Zhu " -0x8cb0: "Shi " -0x8cb1: "Bi " -0x8cb2: "Zi " -0x8cb3: "Er " -0x8cb4: "Gui " -0x8cb5: "Pian " -0x8cb6: "Bian " -0x8cb7: "Mai " -0x8cb8: "Dai " -0x8cb9: "Sheng " -0x8cba: "Kuang " -0x8cbb: "Fei " -0x8cbc: "Tie " -0x8cbd: "Yi " -0x8cbe: "Chi " -0x8cbf: "Mao " -0x8cc0: "He " -0x8cc1: "Bi " -0x8cc2: "Lu " -0x8cc3: "Ren " -0x8cc4: "Hui " -0x8cc5: "Gai " -0x8cc6: "Pian " -0x8cc7: "Zi " -0x8cc8: "Jia " -0x8cc9: "Xu " -0x8cca: "Zei " -0x8ccb: "Jiao " -0x8ccc: "Gai " -0x8ccd: "Zang " -0x8cce: "Jian " -0x8ccf: "Ying " -0x8cd0: "Xun " -0x8cd1: "Zhen " -0x8cd2: "She " -0x8cd3: "Bin " -0x8cd4: "Bin " -0x8cd5: "Qiu " -0x8cd6: "She " -0x8cd7: "Chuan " -0x8cd8: "Zang " -0x8cd9: "Zhou " -0x8cda: "Lai " -0x8cdb: "Zan " -0x8cdc: "Si " -0x8cdd: "Chen " -0x8cde: "Shang " -0x8cdf: "Tian " -0x8ce0: "Pei " -0x8ce1: "Geng " -0x8ce2: "Xian " -0x8ce3: "Mai " -0x8ce4: "Jian " -0x8ce5: "Sui " -0x8ce6: "Fu " -0x8ce7: "Tan " -0x8ce8: "Cong " -0x8ce9: "Cong " -0x8cea: "Zhi " -0x8ceb: "Ji " -0x8cec: "Zhang " -0x8ced: "Du " -0x8cee: "Jin " -0x8cef: "Xiong " -0x8cf0: "Shun " -0x8cf1: "Yun " -0x8cf2: "Bao " -0x8cf3: "Zai " -0x8cf4: "Lai " -0x8cf5: "Feng " -0x8cf6: "Cang " -0x8cf7: "Ji " -0x8cf8: "Sheng " -0x8cf9: "Ai " -0x8cfa: "Zhuan " -0x8cfb: "Fu " -0x8cfc: "Gou " -0x8cfd: "Sai " -0x8cfe: "Ze " -0x8cff: "Liao " -/* x08d */ -0x8d00: "Wei " -0x8d01: "Bai " -0x8d02: "Chen " -0x8d03: "Zhuan " -0x8d04: "Zhi " -0x8d05: "Zhui " -0x8d06: "Biao " -0x8d07: "Yun " -0x8d08: "Zeng " -0x8d09: "Tan " -0x8d0a: "Zan " -0x8d0b: "Yan " -0x8d0c: "[?] " -0x8d0d: "Shan " -0x8d0e: "Wan " -0x8d0f: "Ying " -0x8d10: "Jin " -0x8d11: "Gan " -0x8d12: "Xian " -0x8d13: "Zang " -0x8d14: "Bi " -0x8d15: "Du " -0x8d16: "Shu " -0x8d17: "Yan " -0x8d18: "[?] " -0x8d19: "Xuan " -0x8d1a: "Long " -0x8d1b: "Gan " -0x8d1c: "Zang " -0x8d1d: "Bei " -0x8d1e: "Zhen " -0x8d1f: "Fu " -0x8d20: "Yuan " -0x8d21: "Gong " -0x8d22: "Cai " -0x8d23: "Ze " -0x8d24: "Xian " -0x8d25: "Bai " -0x8d26: "Zhang " -0x8d27: "Huo " -0x8d28: "Zhi " -0x8d29: "Fan " -0x8d2a: "Tan " -0x8d2b: "Pin " -0x8d2c: "Bian " -0x8d2d: "Gou " -0x8d2e: "Zhu " -0x8d2f: "Guan " -0x8d30: "Er " -0x8d31: "Jian " -0x8d32: "Bi " -0x8d33: "Shi " -0x8d34: "Tie " -0x8d35: "Gui " -0x8d36: "Kuang " -0x8d37: "Dai " -0x8d38: "Mao " -0x8d39: "Fei " -0x8d3a: "He " -0x8d3b: "Yi " -0x8d3c: "Zei " -0x8d3d: "Zhi " -0x8d3e: "Jia " -0x8d3f: "Hui " -0x8d40: "Zi " -0x8d41: "Ren " -0x8d42: "Lu " -0x8d43: "Zang " -0x8d44: "Zi " -0x8d45: "Gai " -0x8d46: "Jin " -0x8d47: "Qiu " -0x8d48: "Zhen " -0x8d49: "Lai " -0x8d4a: "She " -0x8d4b: "Fu " -0x8d4c: "Du " -0x8d4d: "Ji " -0x8d4e: "Shu " -0x8d4f: "Shang " -0x8d50: "Si " -0x8d51: "Bi " -0x8d52: "Zhou " -0x8d53: "Geng " -0x8d54: "Pei " -0x8d55: "Tan " -0x8d56: "Lai " -0x8d57: "Feng " -0x8d58: "Zhui " -0x8d59: "Fu " -0x8d5a: "Zhuan " -0x8d5b: "Sai " -0x8d5c: "Ze " -0x8d5d: "Yan " -0x8d5e: "Zan " -0x8d5f: "Yun " -0x8d60: "Zeng " -0x8d61: "Shan " -0x8d62: "Ying " -0x8d63: "Gan " -0x8d64: "Chi " -0x8d65: "Xi " -0x8d66: "She " -0x8d67: "Nan " -0x8d68: "Xiong " -0x8d69: "Xi " -0x8d6a: "Cheng " -0x8d6b: "He " -0x8d6c: "Cheng " -0x8d6d: "Zhe " -0x8d6e: "Xia " -0x8d6f: "Tang " -0x8d70: "Zou " -0x8d71: "Zou " -0x8d72: "Li " -0x8d73: "Jiu " -0x8d74: "Fu " -0x8d75: "Zhao " -0x8d76: "Gan " -0x8d77: "Qi " -0x8d78: "Shan " -0x8d79: "Qiong " -0x8d7a: "Qin " -0x8d7b: "Xian " -0x8d7c: "Ci " -0x8d7d: "Jue " -0x8d7e: "Qin " -0x8d7f: "Chi " -0x8d80: "Ci " -0x8d81: "Chen " -0x8d82: "Chen " -0x8d83: "Die " -0x8d84: "Ju " -0x8d85: "Chao " -0x8d86: "Di " -0x8d87: "Se " -0x8d88: "Zhan " -0x8d89: "Zhu " -0x8d8a: "Yue " -0x8d8b: "Qu " -0x8d8c: "Jie " -0x8d8d: "Chi " -0x8d8e: "Chu " -0x8d8f: "Gua " -0x8d90: "Xue " -0x8d91: "Ci " -0x8d92: "Tiao " -0x8d93: "Duo " -0x8d94: "Lie " -0x8d95: "Gan " -0x8d96: "Suo " -0x8d97: "Cu " -0x8d98: "Xi " -0x8d99: "Zhao " -0x8d9a: "Su " -0x8d9b: "Yin " -0x8d9c: "Ju " -0x8d9d: "Jian " -0x8d9e: "Que " -0x8d9f: "Tang " -0x8da0: "Chuo " -0x8da1: "Cui " -0x8da2: "Lu " -0x8da3: "Qu " -0x8da4: "Dang " -0x8da5: "Qiu " -0x8da6: "Zi " -0x8da7: "Ti " -0x8da8: "Qu " -0x8da9: "Chi " -0x8daa: "Huang " -0x8dab: "Qiao " -0x8dac: "Qiao " -0x8dad: "Yao " -0x8dae: "Zao " -0x8daf: "Ti " -0x8db0: "[?] " -0x8db1: "Zan " -0x8db2: "Zan " -0x8db3: "Zu " -0x8db4: "Pa " -0x8db5: "Bao " -0x8db6: "Ku " -0x8db7: "Ke " -0x8db8: "Dun " -0x8db9: "Jue " -0x8dba: "Fu " -0x8dbb: "Chen " -0x8dbc: "Jian " -0x8dbd: "Fang " -0x8dbe: "Zhi " -0x8dbf: "Sa " -0x8dc0: "Yue " -0x8dc1: "Pa " -0x8dc2: "Qi " -0x8dc3: "Yue " -0x8dc4: "Qiang " -0x8dc5: "Tuo " -0x8dc6: "Tai " -0x8dc7: "Yi " -0x8dc8: "Nian " -0x8dc9: "Ling " -0x8dca: "Mei " -0x8dcb: "Ba " -0x8dcc: "Die " -0x8dcd: "Ku " -0x8dce: "Tuo " -0x8dcf: "Jia " -0x8dd0: "Ci " -0x8dd1: "Pao " -0x8dd2: "Qia " -0x8dd3: "Zhu " -0x8dd4: "Ju " -0x8dd5: "Die " -0x8dd6: "Zhi " -0x8dd7: "Fu " -0x8dd8: "Pan " -0x8dd9: "Ju " -0x8dda: "Shan " -0x8ddb: "Bo " -0x8ddc: "Ni " -0x8ddd: "Ju " -0x8dde: "Li " -0x8ddf: "Gen " -0x8de0: "Yi " -0x8de1: "Ji " -0x8de2: "Dai " -0x8de3: "Xian " -0x8de4: "Jiao " -0x8de5: "Duo " -0x8de6: "Zhu " -0x8de7: "Zhuan " -0x8de8: "Kua " -0x8de9: "Zhuai " -0x8dea: "Gui " -0x8deb: "Qiong " -0x8dec: "Kui " -0x8ded: "Xiang " -0x8dee: "Chi " -0x8def: "Lu " -0x8df0: "Beng " -0x8df1: "Zhi " -0x8df2: "Jia " -0x8df3: "Tiao " -0x8df4: "Cai " -0x8df5: "Jian " -0x8df6: "Ta " -0x8df7: "Qiao " -0x8df8: "Bi " -0x8df9: "Xian " -0x8dfa: "Duo " -0x8dfb: "Ji " -0x8dfc: "Ju " -0x8dfd: "Ji " -0x8dfe: "Shu " -0x8dff: "Tu " -/* x08e */ -0x8e00: "Chu " -0x8e01: "Jing " -0x8e02: "Nie " -0x8e03: "Xiao " -0x8e04: "Bo " -0x8e05: "Chi " -0x8e06: "Qun " -0x8e07: "Mou " -0x8e08: "Shu " -0x8e09: "Lang " -0x8e0a: "Yong " -0x8e0b: "Jiao " -0x8e0c: "Chou " -0x8e0d: "Qiao " -0x8e0e: "[?] " -0x8e0f: "Ta " -0x8e10: "Jian " -0x8e11: "Qi " -0x8e12: "Wo " -0x8e13: "Wei " -0x8e14: "Zhuo " -0x8e15: "Jie " -0x8e16: "Ji " -0x8e17: "Nie " -0x8e18: "Ju " -0x8e19: "Ju " -0x8e1a: "Lun " -0x8e1b: "Lu " -0x8e1c: "Leng " -0x8e1d: "Huai " -0x8e1e: "Ju " -0x8e1f: "Chi " -0x8e20: "Wan " -0x8e21: "Quan " -0x8e22: "Ti " -0x8e23: "Bo " -0x8e24: "Zu " -0x8e25: "Qie " -0x8e26: "Ji " -0x8e27: "Cu " -0x8e28: "Zong " -0x8e29: "Cai " -0x8e2a: "Zong " -0x8e2b: "Peng " -0x8e2c: "Zhi " -0x8e2d: "Zheng " -0x8e2e: "Dian " -0x8e2f: "Zhi " -0x8e30: "Yu " -0x8e31: "Duo " -0x8e32: "Dun " -0x8e33: "Chun " -0x8e34: "Yong " -0x8e35: "Zhong " -0x8e36: "Di " -0x8e37: "Zhe " -0x8e38: "Chen " -0x8e39: "Chuai " -0x8e3a: "Jian " -0x8e3b: "Gua " -0x8e3c: "Tang " -0x8e3d: "Ju " -0x8e3e: "Fu " -0x8e3f: "Zu " -0x8e40: "Die " -0x8e41: "Pian " -0x8e42: "Rou " -0x8e43: "Nuo " -0x8e44: "Ti " -0x8e45: "Cha " -0x8e46: "Tui " -0x8e47: "Jian " -0x8e48: "Dao " -0x8e49: "Cuo " -0x8e4a: "Xi " -0x8e4b: "Ta " -0x8e4c: "Qiang " -0x8e4d: "Zhan " -0x8e4e: "Dian " -0x8e4f: "Ti " -0x8e50: "Ji " -0x8e51: "Nie " -0x8e52: "Man " -0x8e53: "Liu " -0x8e54: "Zhan " -0x8e55: "Bi " -0x8e56: "Chong " -0x8e57: "Lu " -0x8e58: "Liao " -0x8e59: "Cu " -0x8e5a: "Tang " -0x8e5b: "Dai " -0x8e5c: "Suo " -0x8e5d: "Xi " -0x8e5e: "Kui " -0x8e5f: "Ji " -0x8e60: "Zhi " -0x8e61: "Qiang " -0x8e62: "Di " -0x8e63: "Man " -0x8e64: "Zong " -0x8e65: "Lian " -0x8e66: "Beng " -0x8e67: "Zao " -0x8e68: "Nian " -0x8e69: "Bie " -0x8e6a: "Tui " -0x8e6b: "Ju " -0x8e6c: "Deng " -0x8e6d: "Ceng " -0x8e6e: "Xian " -0x8e6f: "Fan " -0x8e70: "Chu " -0x8e71: "Zhong " -0x8e72: "Dun " -0x8e73: "Bo " -0x8e74: "Cu " -0x8e75: "Zu " -0x8e76: "Jue " -0x8e77: "Jue " -0x8e78: "Lin " -0x8e79: "Ta " -0x8e7a: "Qiao " -0x8e7b: "Qiao " -0x8e7c: "Pu " -0x8e7d: "Liao " -0x8e7e: "Dun " -0x8e7f: "Cuan " -0x8e80: "Kuang " -0x8e81: "Zao " -0x8e82: "Ta " -0x8e83: "Bi " -0x8e84: "Bi " -0x8e85: "Zhu " -0x8e86: "Ju " -0x8e87: "Chu " -0x8e88: "Qiao " -0x8e89: "Dun " -0x8e8a: "Chou " -0x8e8b: "Ji " -0x8e8c: "Wu " -0x8e8d: "Yue " -0x8e8e: "Nian " -0x8e8f: "Lin " -0x8e90: "Lie " -0x8e91: "Zhi " -0x8e92: "Li " -0x8e93: "Zhi " -0x8e94: "Chan " -0x8e95: "Chu " -0x8e96: "Duan " -0x8e97: "Wei " -0x8e98: "Long " -0x8e99: "Lin " -0x8e9a: "Xian " -0x8e9b: "Wei " -0x8e9c: "Zuan " -0x8e9d: "Lan " -0x8e9e: "Xie " -0x8e9f: "Rang " -0x8ea0: "Xie " -0x8ea1: "Nie " -0x8ea2: "Ta " -0x8ea3: "Qu " -0x8ea4: "Jie " -0x8ea5: "Cuan " -0x8ea6: "Zuan " -0x8ea7: "Xi " -0x8ea8: "Kui " -0x8ea9: "Jue " -0x8eaa: "Lin " -0x8eab: "Shen " -0x8eac: "Gong " -0x8ead: "Dan " -0x8eae: "Segare " -0x8eaf: "Qu " -0x8eb0: "Ti " -0x8eb1: "Duo " -0x8eb2: "Duo " -0x8eb3: "Gong " -0x8eb4: "Lang " -0x8eb5: "Nerau " -0x8eb6: "Luo " -0x8eb7: "Ai " -0x8eb8: "Ji " -0x8eb9: "Ju " -0x8eba: "Tang " -0x8ebb: "Utsuke " -0x8ebc: "[?] " -0x8ebd: "Yan " -0x8ebe: "Shitsuke " -0x8ebf: "Kang " -0x8ec0: "Qu " -0x8ec1: "Lou " -0x8ec2: "Lao " -0x8ec3: "Tuo " -0x8ec4: "Zhi " -0x8ec5: "Yagate " -0x8ec6: "Ti " -0x8ec7: "Dao " -0x8ec8: "Yagate " -0x8ec9: "Yu " -0x8eca: "Che " -0x8ecb: "Ya " -0x8ecc: "Gui " -0x8ecd: "Jun " -0x8ece: "Wei " -0x8ecf: "Yue " -0x8ed0: "Xin " -0x8ed1: "Di " -0x8ed2: "Xuan " -0x8ed3: "Fan " -0x8ed4: "Ren " -0x8ed5: "Shan " -0x8ed6: "Qiang " -0x8ed7: "Shu " -0x8ed8: "Tun " -0x8ed9: "Chen " -0x8eda: "Dai " -0x8edb: "E " -0x8edc: "Na " -0x8edd: "Qi " -0x8ede: "Mao " -0x8edf: "Ruan " -0x8ee0: "Ren " -0x8ee1: "Fan " -0x8ee2: "Zhuan " -0x8ee3: "Hong " -0x8ee4: "Hu " -0x8ee5: "Qu " -0x8ee6: "Huang " -0x8ee7: "Di " -0x8ee8: "Ling " -0x8ee9: "Dai " -0x8eea: "Ao " -0x8eeb: "Zhen " -0x8eec: "Fan " -0x8eed: "Kuang " -0x8eee: "Ang " -0x8eef: "Peng " -0x8ef0: "Bei " -0x8ef1: "Gu " -0x8ef2: "Ku " -0x8ef3: "Pao " -0x8ef4: "Zhu " -0x8ef5: "Rong " -0x8ef6: "E " -0x8ef7: "Ba " -0x8ef8: "Zhou " -0x8ef9: "Zhi " -0x8efa: "Yao " -0x8efb: "Ke " -0x8efc: "Yi " -0x8efd: "Qing " -0x8efe: "Shi " -0x8eff: "Ping " -/* x08f */ -0x8f00: "Er " -0x8f01: "Qiong " -0x8f02: "Ju " -0x8f03: "Jiao " -0x8f04: "Guang " -0x8f05: "Lu " -0x8f06: "Kai " -0x8f07: "Quan " -0x8f08: "Zhou " -0x8f09: "Zai " -0x8f0a: "Zhi " -0x8f0b: "She " -0x8f0c: "Liang " -0x8f0d: "Yu " -0x8f0e: "Shao " -0x8f0f: "You " -0x8f10: "Huan " -0x8f11: "Yun " -0x8f12: "Zhe " -0x8f13: "Wan " -0x8f14: "Fu " -0x8f15: "Qing " -0x8f16: "Zhou " -0x8f17: "Ni " -0x8f18: "Ling " -0x8f19: "Zhe " -0x8f1a: "Zhan " -0x8f1b: "Liang " -0x8f1c: "Zi " -0x8f1d: "Hui " -0x8f1e: "Wang " -0x8f1f: "Chuo " -0x8f20: "Guo " -0x8f21: "Kan " -0x8f22: "Yi " -0x8f23: "Peng " -0x8f24: "Qian " -0x8f25: "Gun " -0x8f26: "Nian " -0x8f27: "Pian " -0x8f28: "Guan " -0x8f29: "Bei " -0x8f2a: "Lun " -0x8f2b: "Pai " -0x8f2c: "Liang " -0x8f2d: "Ruan " -0x8f2e: "Rou " -0x8f2f: "Ji " -0x8f30: "Yang " -0x8f31: "Xian " -0x8f32: "Chuan " -0x8f33: "Cou " -0x8f34: "Qun " -0x8f35: "Ge " -0x8f36: "You " -0x8f37: "Hong " -0x8f38: "Shu " -0x8f39: "Fu " -0x8f3a: "Zi " -0x8f3b: "Fu " -0x8f3c: "Wen " -0x8f3d: "Ben " -0x8f3e: "Zhan " -0x8f3f: "Yu " -0x8f40: "Wen " -0x8f41: "Tao " -0x8f42: "Gu " -0x8f43: "Zhen " -0x8f44: "Xia " -0x8f45: "Yuan " -0x8f46: "Lu " -0x8f47: "Jiu " -0x8f48: "Chao " -0x8f49: "Zhuan " -0x8f4a: "Wei " -0x8f4b: "Hun " -0x8f4c: "Sori " -0x8f4d: "Che " -0x8f4e: "Jiao " -0x8f4f: "Zhan " -0x8f50: "Pu " -0x8f51: "Lao " -0x8f52: "Fen " -0x8f53: "Fan " -0x8f54: "Lin " -0x8f55: "Ge " -0x8f56: "Se " -0x8f57: "Kan " -0x8f58: "Huan " -0x8f59: "Yi " -0x8f5a: "Ji " -0x8f5b: "Dui " -0x8f5c: "Er " -0x8f5d: "Yu " -0x8f5e: "Xian " -0x8f5f: "Hong " -0x8f60: "Lei " -0x8f61: "Pei " -0x8f62: "Li " -0x8f63: "Li " -0x8f64: "Lu " -0x8f65: "Lin " -0x8f66: "Che " -0x8f67: "Ya " -0x8f68: "Gui " -0x8f69: "Xuan " -0x8f6a: "Di " -0x8f6b: "Ren " -0x8f6c: "Zhuan " -0x8f6d: "E " -0x8f6e: "Lun " -0x8f6f: "Ruan " -0x8f70: "Hong " -0x8f71: "Ku " -0x8f72: "Ke " -0x8f73: "Lu " -0x8f74: "Zhou " -0x8f75: "Zhi " -0x8f76: "Yi " -0x8f77: "Hu " -0x8f78: "Zhen " -0x8f79: "Li " -0x8f7a: "Yao " -0x8f7b: "Qing " -0x8f7c: "Shi " -0x8f7d: "Zai " -0x8f7e: "Zhi " -0x8f7f: "Jiao " -0x8f80: "Zhou " -0x8f81: "Quan " -0x8f82: "Lu " -0x8f83: "Jiao " -0x8f84: "Zhe " -0x8f85: "Fu " -0x8f86: "Liang " -0x8f87: "Nian " -0x8f88: "Bei " -0x8f89: "Hui " -0x8f8a: "Gun " -0x8f8b: "Wang " -0x8f8c: "Liang " -0x8f8d: "Chuo " -0x8f8e: "Zi " -0x8f8f: "Cou " -0x8f90: "Fu " -0x8f91: "Ji " -0x8f92: "Wen " -0x8f93: "Shu " -0x8f94: "Pei " -0x8f95: "Yuan " -0x8f96: "Xia " -0x8f97: "Zhan " -0x8f98: "Lu " -0x8f99: "Che " -0x8f9a: "Lin " -0x8f9b: "Xin " -0x8f9c: "Gu " -0x8f9d: "Ci " -0x8f9e: "Ci " -0x8f9f: "Pi " -0x8fa0: "Zui " -0x8fa1: "Bian " -0x8fa2: "La " -0x8fa3: "La " -0x8fa4: "Ci " -0x8fa5: "Xue " -0x8fa6: "Ban " -0x8fa7: "Bian " -0x8fa8: "Bian " -0x8fa9: "Bian " -0x8faa: "[?] " -0x8fab: "Bian " -0x8fac: "Ban " -0x8fad: "Ci " -0x8fae: "Bian " -0x8faf: "Bian " -0x8fb0: "Chen " -0x8fb1: "Ru " -0x8fb2: "Nong " -0x8fb3: "Nong " -0x8fb4: "Zhen " -0x8fb5: "Chuo " -0x8fb6: "Chuo " -0x8fb7: "Suberu " -0x8fb8: "Reng " -0x8fb9: "Bian " -0x8fba: "Bian " -0x8fbb: "Sip " -0x8fbc: "Ip " -0x8fbd: "Liao " -0x8fbe: "Da " -0x8fbf: "Chan " -0x8fc0: "Gan " -0x8fc1: "Qian " -0x8fc2: "Yu " -0x8fc3: "Yu " -0x8fc4: "Qi " -0x8fc5: "Xun " -0x8fc6: "Yi " -0x8fc7: "Guo " -0x8fc8: "Mai " -0x8fc9: "Qi " -0x8fca: "Za " -0x8fcb: "Wang " -0x8fcc: "Jia " -0x8fcd: "Zhun " -0x8fce: "Ying " -0x8fcf: "Ti " -0x8fd0: "Yun " -0x8fd1: "Jin " -0x8fd2: "Hang " -0x8fd3: "Ya " -0x8fd4: "Fan " -0x8fd5: "Wu " -0x8fd6: "Da " -0x8fd7: "E " -0x8fd8: "Huan " -0x8fd9: "Zhe " -0x8fda: "Totemo " -0x8fdb: "Jin " -0x8fdc: "Yuan " -0x8fdd: "Wei " -0x8fde: "Lian " -0x8fdf: "Chi " -0x8fe0: "Che " -0x8fe1: "Ni " -0x8fe2: "Tiao " -0x8fe3: "Zhi " -0x8fe4: "Yi " -0x8fe5: "Jiong " -0x8fe6: "Jia " -0x8fe7: "Chen " -0x8fe8: "Dai " -0x8fe9: "Er " -0x8fea: "Di " -0x8feb: "Po " -0x8fec: "Wang " -0x8fed: "Die " -0x8fee: "Ze " -0x8fef: "Tao " -0x8ff0: "Shu " -0x8ff1: "Tuo " -0x8ff2: "Kep " -0x8ff3: "Jing " -0x8ff4: "Hui " -0x8ff5: "Tong " -0x8ff6: "You " -0x8ff7: "Mi " -0x8ff8: "Beng " -0x8ff9: "Ji " -0x8ffa: "Nai " -0x8ffb: "Yi " -0x8ffc: "Jie " -0x8ffd: "Zhui " -0x8ffe: "Lie " -0x8fff: "Xun " -/* x090 */ -0x9000: "Tui " -0x9001: "Song " -0x9002: "Gua " -0x9003: "Tao " -0x9004: "Pang " -0x9005: "Hou " -0x9006: "Ni " -0x9007: "Dun " -0x9008: "Jiong " -0x9009: "Xuan " -0x900a: "Xun " -0x900b: "Bu " -0x900c: "You " -0x900d: "Xiao " -0x900e: "Qiu " -0x900f: "Tou " -0x9010: "Zhu " -0x9011: "Qiu " -0x9012: "Di " -0x9013: "Di " -0x9014: "Tu " -0x9015: "Jing " -0x9016: "Ti " -0x9017: "Dou " -0x9018: "Yi " -0x9019: "Zhe " -0x901a: "Tong " -0x901b: "Guang " -0x901c: "Wu " -0x901d: "Shi " -0x901e: "Cheng " -0x901f: "Su " -0x9020: "Zao " -0x9021: "Qun " -0x9022: "Feng " -0x9023: "Lian " -0x9024: "Suo " -0x9025: "Hui " -0x9026: "Li " -0x9027: "Sako " -0x9028: "Lai " -0x9029: "Ben " -0x902a: "Cuo " -0x902b: "Jue " -0x902c: "Beng " -0x902d: "Huan " -0x902e: "Dai " -0x902f: "Lu " -0x9030: "You " -0x9031: "Zhou " -0x9032: "Jin " -0x9033: "Yu " -0x9034: "Chuo " -0x9035: "Kui " -0x9036: "Wei " -0x9037: "Ti " -0x9038: "Yi " -0x9039: "Da " -0x903a: "Yuan " -0x903b: "Luo " -0x903c: "Bi " -0x903d: "Nuo " -0x903e: "Yu " -0x903f: "Dang " -0x9040: "Sui " -0x9041: "Dun " -0x9042: "Sui " -0x9043: "Yan " -0x9044: "Chuan " -0x9045: "Chi " -0x9046: "Ti " -0x9047: "Yu " -0x9048: "Shi " -0x9049: "Zhen " -0x904a: "You " -0x904b: "Yun " -0x904c: "E " -0x904d: "Bian " -0x904e: "Guo " -0x904f: "E " -0x9050: "Xia " -0x9051: "Huang " -0x9052: "Qiu " -0x9053: "Dao " -0x9054: "Da " -0x9055: "Wei " -0x9056: "Appare " -0x9057: "Yi " -0x9058: "Gou " -0x9059: "Yao " -0x905a: "Chu " -0x905b: "Liu " -0x905c: "Xun " -0x905d: "Ta " -0x905e: "Di " -0x905f: "Chi " -0x9060: "Yuan " -0x9061: "Su " -0x9062: "Ta " -0x9063: "Qian " -0x9064: "[?] " -0x9065: "Yao " -0x9066: "Guan " -0x9067: "Zhang " -0x9068: "Ao " -0x9069: "Shi " -0x906a: "Ce " -0x906b: "Chi " -0x906c: "Su " -0x906d: "Zao " -0x906e: "Zhe " -0x906f: "Dun " -0x9070: "Di " -0x9071: "Lou " -0x9072: "Chi " -0x9073: "Cuo " -0x9074: "Lin " -0x9075: "Zun " -0x9076: "Rao " -0x9077: "Qian " -0x9078: "Xuan " -0x9079: "Yu " -0x907a: "Yi " -0x907b: "Wu " -0x907c: "Liao " -0x907d: "Ju " -0x907e: "Shi " -0x907f: "Bi " -0x9080: "Yao " -0x9081: "Mai " -0x9082: "Xie " -0x9083: "Sui " -0x9084: "Huan " -0x9085: "Zhan " -0x9086: "Teng " -0x9087: "Er " -0x9088: "Miao " -0x9089: "Bian " -0x908a: "Bian " -0x908b: "La " -0x908c: "Li " -0x908d: "Yuan " -0x908e: "Yao " -0x908f: "Luo " -0x9090: "Li " -0x9091: "Yi " -0x9092: "Ting " -0x9093: "Deng " -0x9094: "Qi " -0x9095: "Yong " -0x9096: "Shan " -0x9097: "Han " -0x9098: "Yu " -0x9099: "Mang " -0x909a: "Ru " -0x909b: "Qiong " -0x909c: "[?] " -0x909d: "Kuang " -0x909e: "Fu " -0x909f: "Kang " -0x90a0: "Bin " -0x90a1: "Fang " -0x90a2: "Xing " -0x90a3: "Na " -0x90a4: "Xin " -0x90a5: "Shen " -0x90a6: "Bang " -0x90a7: "Yuan " -0x90a8: "Cun " -0x90a9: "Huo " -0x90aa: "Xie " -0x90ab: "Bang " -0x90ac: "Wu " -0x90ad: "Ju " -0x90ae: "You " -0x90af: "Han " -0x90b0: "Tai " -0x90b1: "Qiu " -0x90b2: "Bi " -0x90b3: "Pei " -0x90b4: "Bing " -0x90b5: "Shao " -0x90b6: "Bei " -0x90b7: "Wa " -0x90b8: "Di " -0x90b9: "Zou " -0x90ba: "Ye " -0x90bb: "Lin " -0x90bc: "Kuang " -0x90bd: "Gui " -0x90be: "Zhu " -0x90bf: "Shi " -0x90c0: "Ku " -0x90c1: "Yu " -0x90c2: "Gai " -0x90c3: "Ge " -0x90c4: "Xi " -0x90c5: "Zhi " -0x90c6: "Ji " -0x90c7: "Xun " -0x90c8: "Hou " -0x90c9: "Xing " -0x90ca: "Jiao " -0x90cb: "Xi " -0x90cc: "Gui " -0x90cd: "Nuo " -0x90ce: "Lang " -0x90cf: "Jia " -0x90d0: "Kuai " -0x90d1: "Zheng " -0x90d2: "Otoko " -0x90d3: "Yun " -0x90d4: "Yan " -0x90d5: "Cheng " -0x90d6: "Dou " -0x90d7: "Chi " -0x90d8: "Lu " -0x90d9: "Fu " -0x90da: "Wu " -0x90db: "Fu " -0x90dc: "Gao " -0x90dd: "Hao " -0x90de: "Lang " -0x90df: "Jia " -0x90e0: "Geng " -0x90e1: "Jun " -0x90e2: "Ying " -0x90e3: "Bo " -0x90e4: "Xi " -0x90e5: "Bei " -0x90e6: "Li " -0x90e7: "Yun " -0x90e8: "Bu " -0x90e9: "Xiao " -0x90ea: "Qi " -0x90eb: "Pi " -0x90ec: "Qing " -0x90ed: "Guo " -0x90ee: "Zhou " -0x90ef: "Tan " -0x90f0: "Zou " -0x90f1: "Ping " -0x90f2: "Lai " -0x90f3: "Ni " -0x90f4: "Chen " -0x90f5: "You " -0x90f6: "Bu " -0x90f7: "Xiang " -0x90f8: "Dan " -0x90f9: "Ju " -0x90fa: "Yong " -0x90fb: "Qiao " -0x90fc: "Yi " -0x90fd: "Du " -0x90fe: "Yan " -0x90ff: "Mei " -/* x091 */ -0x9100: "Ruo " -0x9101: "Bei " -0x9102: "E " -0x9103: "Yu " -0x9104: "Juan " -0x9105: "Yu " -0x9106: "Yun " -0x9107: "Hou " -0x9108: "Kui " -0x9109: "Xiang " -0x910a: "Xiang " -0x910b: "Sou " -0x910c: "Tang " -0x910d: "Ming " -0x910e: "Xi " -0x910f: "Ru " -0x9110: "Chu " -0x9111: "Zi " -0x9112: "Zou " -0x9113: "Ju " -0x9114: "Wu " -0x9115: "Xiang " -0x9116: "Yun " -0x9117: "Hao " -0x9118: "Yong " -0x9119: "Bi " -0x911a: "Mo " -0x911b: "Chao " -0x911c: "Fu " -0x911d: "Liao " -0x911e: "Yin " -0x911f: "Zhuan " -0x9120: "Hu " -0x9121: "Qiao " -0x9122: "Yan " -0x9123: "Zhang " -0x9124: "Fan " -0x9125: "Qiao " -0x9126: "Xu " -0x9127: "Deng " -0x9128: "Bi " -0x9129: "Xin " -0x912a: "Bi " -0x912b: "Ceng " -0x912c: "Wei " -0x912d: "Zheng " -0x912e: "Mao " -0x912f: "Shan " -0x9130: "Lin " -0x9131: "Po " -0x9132: "Dan " -0x9133: "Meng " -0x9134: "Ye " -0x9135: "Cao " -0x9136: "Kuai " -0x9137: "Feng " -0x9138: "Meng " -0x9139: "Zou " -0x913a: "Kuang " -0x913b: "Lian " -0x913c: "Zan " -0x913d: "Chan " -0x913e: "You " -0x913f: "Qi " -0x9140: "Yan " -0x9141: "Chan " -0x9142: "Zan " -0x9143: "Ling " -0x9144: "Huan " -0x9145: "Xi " -0x9146: "Feng " -0x9147: "Zan " -0x9148: "Li " -0x9149: "You " -0x914a: "Ding " -0x914b: "Qiu " -0x914c: "Zhuo " -0x914d: "Pei " -0x914e: "Zhou " -0x914f: "Yi " -0x9150: "Hang " -0x9151: "Yu " -0x9152: "Jiu " -0x9153: "Yan " -0x9154: "Zui " -0x9155: "Mao " -0x9156: "Dan " -0x9157: "Xu " -0x9158: "Tou " -0x9159: "Zhen " -0x915a: "Fen " -0x915b: "Sakenomoto " -0x915c: "[?] " -0x915d: "Yun " -0x915e: "Tai " -0x915f: "Tian " -0x9160: "Qia " -0x9161: "Tuo " -0x9162: "Zuo " -0x9163: "Han " -0x9164: "Gu " -0x9165: "Su " -0x9166: "Po " -0x9167: "Chou " -0x9168: "Zai " -0x9169: "Ming " -0x916a: "Luo " -0x916b: "Chuo " -0x916c: "Chou " -0x916d: "You " -0x916e: "Tong " -0x916f: "Zhi " -0x9170: "Xian " -0x9171: "Jiang " -0x9172: "Cheng " -0x9173: "Yin " -0x9174: "Tu " -0x9175: "Xiao " -0x9176: "Mei " -0x9177: "Ku " -0x9178: "Suan " -0x9179: "Lei " -0x917a: "Pu " -0x917b: "Zui " -0x917c: "Hai " -0x917d: "Yan " -0x917e: "Xi " -0x917f: "Niang " -0x9180: "Wei " -0x9181: "Lu " -0x9182: "Lan " -0x9183: "Yan " -0x9184: "Tao " -0x9185: "Pei " -0x9186: "Zhan " -0x9187: "Chun " -0x9188: "Tan " -0x9189: "Zui " -0x918a: "Chuo " -0x918b: "Cu " -0x918c: "Kun " -0x918d: "Ti " -0x918e: "Mian " -0x918f: "Du " -0x9190: "Hu " -0x9191: "Xu " -0x9192: "Xing " -0x9193: "Tan " -0x9194: "Jiu " -0x9195: "Chun " -0x9196: "Yun " -0x9197: "Po " -0x9198: "Ke " -0x9199: "Sou " -0x919a: "Mi " -0x919b: "Quan " -0x919c: "Chou " -0x919d: "Cuo " -0x919e: "Yun " -0x919f: "Yong " -0x91a0: "Ang " -0x91a1: "Zha " -0x91a2: "Hai " -0x91a3: "Tang " -0x91a4: "Jiang " -0x91a5: "Piao " -0x91a6: "Shan " -0x91a7: "Yu " -0x91a8: "Li " -0x91a9: "Zao " -0x91aa: "Lao " -0x91ab: "Yi " -0x91ac: "Jiang " -0x91ad: "Pu " -0x91ae: "Jiao " -0x91af: "Xi " -0x91b0: "Tan " -0x91b1: "Po " -0x91b2: "Nong " -0x91b3: "Yi " -0x91b4: "Li " -0x91b5: "Ju " -0x91b6: "Jiao " -0x91b7: "Yi " -0x91b8: "Niang " -0x91b9: "Ru " -0x91ba: "Xun " -0x91bb: "Chou " -0x91bc: "Yan " -0x91bd: "Ling " -0x91be: "Mi " -0x91bf: "Mi " -0x91c0: "Niang " -0x91c1: "Xin " -0x91c2: "Jiao " -0x91c3: "Xi " -0x91c4: "Mi " -0x91c5: "Yan " -0x91c6: "Bian " -0x91c7: "Cai " -0x91c8: "Shi " -0x91c9: "You " -0x91ca: "Shi " -0x91cb: "Shi " -0x91cc: "Li " -0x91cd: "Zhong " -0x91ce: "Ye " -0x91cf: "Liang " -0x91d0: "Li " -0x91d1: "Jin " -0x91d2: "Jin " -0x91d3: "Qiu " -0x91d4: "Yi " -0x91d5: "Diao " -0x91d6: "Dao " -0x91d7: "Zhao " -0x91d8: "Ding " -0x91d9: "Po " -0x91da: "Qiu " -0x91db: "He " -0x91dc: "Fu " -0x91dd: "Zhen " -0x91de: "Zhi " -0x91df: "Ba " -0x91e0: "Luan " -0x91e1: "Fu " -0x91e2: "Nai " -0x91e3: "Diao " -0x91e4: "Shan " -0x91e5: "Qiao " -0x91e6: "Kou " -0x91e7: "Chuan " -0x91e8: "Zi " -0x91e9: "Fan " -0x91ea: "Yu " -0x91eb: "Hua " -0x91ec: "Han " -0x91ed: "Gong " -0x91ee: "Qi " -0x91ef: "Mang " -0x91f0: "Ri " -0x91f1: "Di " -0x91f2: "Si " -0x91f3: "Xi " -0x91f4: "Yi " -0x91f5: "Chai " -0x91f6: "Shi " -0x91f7: "Tu " -0x91f8: "Xi " -0x91f9: "Nu " -0x91fa: "Qian " -0x91fb: "Ishiyumi " -0x91fc: "Jian " -0x91fd: "Pi " -0x91fe: "Ye " -0x91ff: "Yin " -/* x092 */ -0x9200: "Ba " -0x9201: "Fang " -0x9202: "Chen " -0x9203: "Xing " -0x9204: "Tou " -0x9205: "Yue " -0x9206: "Yan " -0x9207: "Fu " -0x9208: "Pi " -0x9209: "Na " -0x920a: "Xin " -0x920b: "E " -0x920c: "Jue " -0x920d: "Dun " -0x920e: "Gou " -0x920f: "Yin " -0x9210: "Qian " -0x9211: "Ban " -0x9212: "Ji " -0x9213: "Ren " -0x9214: "Chao " -0x9215: "Niu " -0x9216: "Fen " -0x9217: "Yun " -0x9218: "Ji " -0x9219: "Qin " -0x921a: "Pi " -0x921b: "Guo " -0x921c: "Hong " -0x921d: "Yin " -0x921e: "Jun " -0x921f: "Shi " -0x9220: "Yi " -0x9221: "Zhong " -0x9222: "Nie " -0x9223: "Gai " -0x9224: "Ri " -0x9225: "Huo " -0x9226: "Tai " -0x9227: "Kang " -0x9228: "Habaki " -0x9229: "Irori " -0x922a: "Ngaak " -0x922b: "[?] " -0x922c: "Duo " -0x922d: "Zi " -0x922e: "Ni " -0x922f: "Tu " -0x9230: "Shi " -0x9231: "Min " -0x9232: "Gu " -0x9233: "E " -0x9234: "Ling " -0x9235: "Bing " -0x9236: "Yi " -0x9237: "Gu " -0x9238: "Ba " -0x9239: "Pi " -0x923a: "Yu " -0x923b: "Si " -0x923c: "Zuo " -0x923d: "Bu " -0x923e: "You " -0x923f: "Dian " -0x9240: "Jia " -0x9241: "Zhen " -0x9242: "Shi " -0x9243: "Shi " -0x9244: "Tie " -0x9245: "Ju " -0x9246: "Zhan " -0x9247: "Shi " -0x9248: "She " -0x9249: "Xuan " -0x924a: "Zhao " -0x924b: "Bao " -0x924c: "He " -0x924d: "Bi " -0x924e: "Sheng " -0x924f: "Chu " -0x9250: "Shi " -0x9251: "Bo " -0x9252: "Zhu " -0x9253: "Chi " -0x9254: "Za " -0x9255: "Po " -0x9256: "Tong " -0x9257: "Qian " -0x9258: "Fu " -0x9259: "Zhai " -0x925a: "Liu " -0x925b: "Qian " -0x925c: "Fu " -0x925d: "Li " -0x925e: "Yue " -0x925f: "Pi " -0x9260: "Yang " -0x9261: "Ban " -0x9262: "Bo " -0x9263: "Jie " -0x9264: "Gou " -0x9265: "Shu " -0x9266: "Zheng " -0x9267: "Mu " -0x9268: "Ni " -0x9269: "Nie " -0x926a: "Di " -0x926b: "Jia " -0x926c: "Mu " -0x926d: "Dan " -0x926e: "Shen " -0x926f: "Yi " -0x9270: "Si " -0x9271: "Kuang " -0x9272: "Ka " -0x9273: "Bei " -0x9274: "Jian " -0x9275: "Tong " -0x9276: "Xing " -0x9277: "Hong " -0x9278: "Jiao " -0x9279: "Chi " -0x927a: "Er " -0x927b: "Ge " -0x927c: "Bing " -0x927d: "Shi " -0x927e: "Mou " -0x927f: "Jia " -0x9280: "Yin " -0x9281: "Jun " -0x9282: "Zhou " -0x9283: "Chong " -0x9284: "Shang " -0x9285: "Tong " -0x9286: "Mo " -0x9287: "Lei " -0x9288: "Ji " -0x9289: "Yu " -0x928a: "Xu " -0x928b: "Ren " -0x928c: "Zun " -0x928d: "Zhi " -0x928e: "Qiong " -0x928f: "Shan " -0x9290: "Chi " -0x9291: "Xian " -0x9292: "Xing " -0x9293: "Quan " -0x9294: "Pi " -0x9295: "Tie " -0x9296: "Zhu " -0x9297: "Hou " -0x9298: "Ming " -0x9299: "Kua " -0x929a: "Yao " -0x929b: "Xian " -0x929c: "Xian " -0x929d: "Xiu " -0x929e: "Jun " -0x929f: "Cha " -0x92a0: "Lao " -0x92a1: "Ji " -0x92a2: "Pi " -0x92a3: "Ru " -0x92a4: "Mi " -0x92a5: "Yi " -0x92a6: "Yin " -0x92a7: "Guang " -0x92a8: "An " -0x92a9: "Diou " -0x92aa: "You " -0x92ab: "Se " -0x92ac: "Kao " -0x92ad: "Qian " -0x92ae: "Luan " -0x92af: "Kasugai " -0x92b0: "Ai " -0x92b1: "Diao " -0x92b2: "Han " -0x92b3: "Rui " -0x92b4: "Shi " -0x92b5: "Keng " -0x92b6: "Qiu " -0x92b7: "Xiao " -0x92b8: "Zhe " -0x92b9: "Xiu " -0x92ba: "Zang " -0x92bb: "Ti " -0x92bc: "Cuo " -0x92bd: "Gua " -0x92be: "Gong " -0x92bf: "Zhong " -0x92c0: "Dou " -0x92c1: "Lu " -0x92c2: "Mei " -0x92c3: "Lang " -0x92c4: "Wan " -0x92c5: "Xin " -0x92c6: "Yun " -0x92c7: "Bei " -0x92c8: "Wu " -0x92c9: "Su " -0x92ca: "Yu " -0x92cb: "Chan " -0x92cc: "Ting " -0x92cd: "Bo " -0x92ce: "Han " -0x92cf: "Jia " -0x92d0: "Hong " -0x92d1: "Cuan " -0x92d2: "Feng " -0x92d3: "Chan " -0x92d4: "Wan " -0x92d5: "Zhi " -0x92d6: "Si " -0x92d7: "Xuan " -0x92d8: "Wu " -0x92d9: "Wu " -0x92da: "Tiao " -0x92db: "Gong " -0x92dc: "Zhuo " -0x92dd: "Lue " -0x92de: "Xing " -0x92df: "Qian " -0x92e0: "Shen " -0x92e1: "Han " -0x92e2: "Lue " -0x92e3: "Xie " -0x92e4: "Chu " -0x92e5: "Zheng " -0x92e6: "Ju " -0x92e7: "Xian " -0x92e8: "Tie " -0x92e9: "Mang " -0x92ea: "Pu " -0x92eb: "Li " -0x92ec: "Pan " -0x92ed: "Rui " -0x92ee: "Cheng " -0x92ef: "Gao " -0x92f0: "Li " -0x92f1: "Te " -0x92f2: "Pyeng " -0x92f3: "Zhu " -0x92f4: "[?] " -0x92f5: "Tu " -0x92f6: "Liu " -0x92f7: "Zui " -0x92f8: "Ju " -0x92f9: "Chang " -0x92fa: "Yuan " -0x92fb: "Jian " -0x92fc: "Gang " -0x92fd: "Diao " -0x92fe: "Tao " -0x92ff: "Chang " -/* x093 */ -0x9300: "Lun " -0x9301: "Kua " -0x9302: "Ling " -0x9303: "Bei " -0x9304: "Lu " -0x9305: "Li " -0x9306: "Qiang " -0x9307: "Pou " -0x9308: "Juan " -0x9309: "Min " -0x930a: "Zui " -0x930b: "Peng " -0x930c: "An " -0x930d: "Pi " -0x930e: "Xian " -0x930f: "Ya " -0x9310: "Zhui " -0x9311: "Lei " -0x9312: "A " -0x9313: "Kong " -0x9314: "Ta " -0x9315: "Kun " -0x9316: "Du " -0x9317: "Wei " -0x9318: "Chui " -0x9319: "Zi " -0x931a: "Zheng " -0x931b: "Ben " -0x931c: "Nie " -0x931d: "Cong " -0x931e: "Qun " -0x931f: "Tan " -0x9320: "Ding " -0x9321: "Qi " -0x9322: "Qian " -0x9323: "Zhuo " -0x9324: "Qi " -0x9325: "Yu " -0x9326: "Jin " -0x9327: "Guan " -0x9328: "Mao " -0x9329: "Chang " -0x932a: "Tian " -0x932b: "Xi " -0x932c: "Lian " -0x932d: "Tao " -0x932e: "Gu " -0x932f: "Cuo " -0x9330: "Shu " -0x9331: "Zhen " -0x9332: "Lu " -0x9333: "Meng " -0x9334: "Lu " -0x9335: "Hua " -0x9336: "Biao " -0x9337: "Ga " -0x9338: "Lai " -0x9339: "Ken " -0x933a: "Kazari " -0x933b: "Bu " -0x933c: "Nai " -0x933d: "Wan " -0x933e: "Zan " -0x933f: "[?] " -0x9340: "De " -0x9341: "Xian " -0x9342: "[?] " -0x9343: "Huo " -0x9344: "Liang " -0x9345: "[?] " -0x9346: "Men " -0x9347: "Kai " -0x9348: "Ying " -0x9349: "Di " -0x934a: "Lian " -0x934b: "Guo " -0x934c: "Xian " -0x934d: "Du " -0x934e: "Tu " -0x934f: "Wei " -0x9350: "Cong " -0x9351: "Fu " -0x9352: "Rou " -0x9353: "Ji " -0x9354: "E " -0x9355: "Rou " -0x9356: "Chen " -0x9357: "Ti " -0x9358: "Zha " -0x9359: "Hong " -0x935a: "Yang " -0x935b: "Duan " -0x935c: "Xia " -0x935d: "Yu " -0x935e: "Keng " -0x935f: "Xing " -0x9360: "Huang " -0x9361: "Wei " -0x9362: "Fu " -0x9363: "Zhao " -0x9364: "Cha " -0x9365: "Qie " -0x9366: "She " -0x9367: "Hong " -0x9368: "Kui " -0x9369: "Tian " -0x936a: "Mou " -0x936b: "Qiao " -0x936c: "Qiao " -0x936d: "Hou " -0x936e: "Tou " -0x936f: "Cong " -0x9370: "Huan " -0x9371: "Ye " -0x9372: "Min " -0x9373: "Jian " -0x9374: "Duan " -0x9375: "Jian " -0x9376: "Song " -0x9377: "Kui " -0x9378: "Hu " -0x9379: "Xuan " -0x937a: "Duo " -0x937b: "Jie " -0x937c: "Zhen " -0x937d: "Bian " -0x937e: "Zhong " -0x937f: "Zi " -0x9380: "Xiu " -0x9381: "Ye " -0x9382: "Mei " -0x9383: "Pai " -0x9384: "Ai " -0x9385: "Jie " -0x9386: "[?] " -0x9387: "Mei " -0x9388: "Chuo " -0x9389: "Ta " -0x938a: "Bang " -0x938b: "Xia " -0x938c: "Lian " -0x938d: "Suo " -0x938e: "Xi " -0x938f: "Liu " -0x9390: "Zu " -0x9391: "Ye " -0x9392: "Nou " -0x9393: "Weng " -0x9394: "Rong " -0x9395: "Tang " -0x9396: "Suo " -0x9397: "Qiang " -0x9398: "Ge " -0x9399: "Shuo " -0x939a: "Chui " -0x939b: "Bo " -0x939c: "Pan " -0x939d: "Sa " -0x939e: "Bi " -0x939f: "Sang " -0x93a0: "Gang " -0x93a1: "Zi " -0x93a2: "Wu " -0x93a3: "Ying " -0x93a4: "Huang " -0x93a5: "Tiao " -0x93a6: "Liu " -0x93a7: "Kai " -0x93a8: "Sun " -0x93a9: "Sha " -0x93aa: "Sou " -0x93ab: "Wan " -0x93ac: "Hao " -0x93ad: "Zhen " -0x93ae: "Zhen " -0x93af: "Luo " -0x93b0: "Yi " -0x93b1: "Yuan " -0x93b2: "Tang " -0x93b3: "Nie " -0x93b4: "Xi " -0x93b5: "Jia " -0x93b6: "Ge " -0x93b7: "Ma " -0x93b8: "Juan " -0x93b9: "Kasugai " -0x93ba: "Habaki " -0x93bb: "Suo " -0x93bc: "[?] " -0x93bd: "[?] " -0x93be: "[?] " -0x93bf: "Na " -0x93c0: "Lu " -0x93c1: "Suo " -0x93c2: "Ou " -0x93c3: "Zu " -0x93c4: "Tuan " -0x93c5: "Xiu " -0x93c6: "Guan " -0x93c7: "Xuan " -0x93c8: "Lian " -0x93c9: "Shou " -0x93ca: "Ao " -0x93cb: "Man " -0x93cc: "Mo " -0x93cd: "Luo " -0x93ce: "Bi " -0x93cf: "Wei " -0x93d0: "Liu " -0x93d1: "Di " -0x93d2: "Qiao " -0x93d3: "Cong " -0x93d4: "Yi " -0x93d5: "Lu " -0x93d6: "Ao " -0x93d7: "Keng " -0x93d8: "Qiang " -0x93d9: "Cui " -0x93da: "Qi " -0x93db: "Chang " -0x93dc: "Tang " -0x93dd: "Man " -0x93de: "Yong " -0x93df: "Chan " -0x93e0: "Feng " -0x93e1: "Jing " -0x93e2: "Biao " -0x93e3: "Shu " -0x93e4: "Lou " -0x93e5: "Xiu " -0x93e6: "Cong " -0x93e7: "Long " -0x93e8: "Zan " -0x93e9: "Jian " -0x93ea: "Cao " -0x93eb: "Li " -0x93ec: "Xia " -0x93ed: "Xi " -0x93ee: "Kang " -0x93ef: "[?] " -0x93f0: "Beng " -0x93f1: "[?] " -0x93f2: "[?] " -0x93f3: "Zheng " -0x93f4: "Lu " -0x93f5: "Hua " -0x93f6: "Ji " -0x93f7: "Pu " -0x93f8: "Hui " -0x93f9: "Qiang " -0x93fa: "Po " -0x93fb: "Lin " -0x93fc: "Suo " -0x93fd: "Xiu " -0x93fe: "San " -0x93ff: "Cheng " -/* x094 */ -0x9400: "Kui " -0x9401: "Si " -0x9402: "Liu " -0x9403: "Nao " -0x9404: "Heng " -0x9405: "Pie " -0x9406: "Sui " -0x9407: "Fan " -0x9408: "Qiao " -0x9409: "Quan " -0x940a: "Yang " -0x940b: "Tang " -0x940c: "Xiang " -0x940d: "Jue " -0x940e: "Jiao " -0x940f: "Zun " -0x9410: "Liao " -0x9411: "Jie " -0x9412: "Lao " -0x9413: "Dui " -0x9414: "Tan " -0x9415: "Zan " -0x9416: "Ji " -0x9417: "Jian " -0x9418: "Zhong " -0x9419: "Deng " -0x941a: "Ya " -0x941b: "Ying " -0x941c: "Dui " -0x941d: "Jue " -0x941e: "Nou " -0x941f: "Ti " -0x9420: "Pu " -0x9421: "Tie " -0x9422: "[?] " -0x9423: "[?] " -0x9424: "Ding " -0x9425: "Shan " -0x9426: "Kai " -0x9427: "Jian " -0x9428: "Fei " -0x9429: "Sui " -0x942a: "Lu " -0x942b: "Juan " -0x942c: "Hui " -0x942d: "Yu " -0x942e: "Lian " -0x942f: "Zhuo " -0x9430: "Qiao " -0x9431: "Qian " -0x9432: "Zhuo " -0x9433: "Lei " -0x9434: "Bi " -0x9435: "Tie " -0x9436: "Huan " -0x9437: "Ye " -0x9438: "Duo " -0x9439: "Guo " -0x943a: "Dang " -0x943b: "Ju " -0x943c: "Fen " -0x943d: "Da " -0x943e: "Bei " -0x943f: "Yi " -0x9440: "Ai " -0x9441: "Zong " -0x9442: "Xun " -0x9443: "Diao " -0x9444: "Zhu " -0x9445: "Heng " -0x9446: "Zhui " -0x9447: "Ji " -0x9448: "Nie " -0x9449: "Ta " -0x944a: "Huo " -0x944b: "Qing " -0x944c: "Bin " -0x944d: "Ying " -0x944e: "Kui " -0x944f: "Ning " -0x9450: "Xu " -0x9451: "Jian " -0x9452: "Jian " -0x9453: "Yari " -0x9454: "Cha " -0x9455: "Zhi " -0x9456: "Mie " -0x9457: "Li " -0x9458: "Lei " -0x9459: "Ji " -0x945a: "Zuan " -0x945b: "Kuang " -0x945c: "Shang " -0x945d: "Peng " -0x945e: "La " -0x945f: "Du " -0x9460: "Shuo " -0x9461: "Chuo " -0x9462: "Lu " -0x9463: "Biao " -0x9464: "Bao " -0x9465: "Lu " -0x9466: "[?] " -0x9467: "[?] " -0x9468: "Long " -0x9469: "E " -0x946a: "Lu " -0x946b: "Xin " -0x946c: "Jian " -0x946d: "Lan " -0x946e: "Bo " -0x946f: "Jian " -0x9470: "Yao " -0x9471: "Chan " -0x9472: "Xiang " -0x9473: "Jian " -0x9474: "Xi " -0x9475: "Guan " -0x9476: "Cang " -0x9477: "Nie " -0x9478: "Lei " -0x9479: "Cuan " -0x947a: "Qu " -0x947b: "Pan " -0x947c: "Luo " -0x947d: "Zuan " -0x947e: "Luan " -0x947f: "Zao " -0x9480: "Nie " -0x9481: "Jue " -0x9482: "Tang " -0x9483: "Shu " -0x9484: "Lan " -0x9485: "Jin " -0x9486: "Qiu " -0x9487: "Yi " -0x9488: "Zhen " -0x9489: "Ding " -0x948a: "Zhao " -0x948b: "Po " -0x948c: "Diao " -0x948d: "Tu " -0x948e: "Qian " -0x948f: "Chuan " -0x9490: "Shan " -0x9491: "Ji " -0x9492: "Fan " -0x9493: "Diao " -0x9494: "Men " -0x9495: "Nu " -0x9496: "Xi " -0x9497: "Chai " -0x9498: "Xing " -0x9499: "Gai " -0x949a: "Bu " -0x949b: "Tai " -0x949c: "Ju " -0x949d: "Dun " -0x949e: "Chao " -0x949f: "Zhong " -0x94a0: "Na " -0x94a1: "Bei " -0x94a2: "Gang " -0x94a3: "Ban " -0x94a4: "Qian " -0x94a5: "Yao " -0x94a6: "Qin " -0x94a7: "Jun " -0x94a8: "Wu " -0x94a9: "Gou " -0x94aa: "Kang " -0x94ab: "Fang " -0x94ac: "Huo " -0x94ad: "Tou " -0x94ae: "Niu " -0x94af: "Ba " -0x94b0: "Yu " -0x94b1: "Qian " -0x94b2: "Zheng " -0x94b3: "Qian " -0x94b4: "Gu " -0x94b5: "Bo " -0x94b6: "E " -0x94b7: "Po " -0x94b8: "Bu " -0x94b9: "Ba " -0x94ba: "Yue " -0x94bb: "Zuan " -0x94bc: "Mu " -0x94bd: "Dan " -0x94be: "Jia " -0x94bf: "Dian " -0x94c0: "You " -0x94c1: "Tie " -0x94c2: "Bo " -0x94c3: "Ling " -0x94c4: "Shuo " -0x94c5: "Qian " -0x94c6: "Liu " -0x94c7: "Bao " -0x94c8: "Shi " -0x94c9: "Xuan " -0x94ca: "She " -0x94cb: "Bi " -0x94cc: "Ni " -0x94cd: "Pi " -0x94ce: "Duo " -0x94cf: "Xing " -0x94d0: "Kao " -0x94d1: "Lao " -0x94d2: "Er " -0x94d3: "Mang " -0x94d4: "Ya " -0x94d5: "You " -0x94d6: "Cheng " -0x94d7: "Jia " -0x94d8: "Ye " -0x94d9: "Nao " -0x94da: "Zhi " -0x94db: "Dang " -0x94dc: "Tong " -0x94dd: "Lu " -0x94de: "Diao " -0x94df: "Yin " -0x94e0: "Kai " -0x94e1: "Zha " -0x94e2: "Zhu " -0x94e3: "Xian " -0x94e4: "Ting " -0x94e5: "Diu " -0x94e6: "Xian " -0x94e7: "Hua " -0x94e8: "Quan " -0x94e9: "Sha " -0x94ea: "Jia " -0x94eb: "Yao " -0x94ec: "Ge " -0x94ed: "Ming " -0x94ee: "Zheng " -0x94ef: "Se " -0x94f0: "Jiao " -0x94f1: "Yi " -0x94f2: "Chan " -0x94f3: "Chong " -0x94f4: "Tang " -0x94f5: "An " -0x94f6: "Yin " -0x94f7: "Ru " -0x94f8: "Zhu " -0x94f9: "Lao " -0x94fa: "Pu " -0x94fb: "Wu " -0x94fc: "Lai " -0x94fd: "Te " -0x94fe: "Lian " -0x94ff: "Keng " -/* x095 */ -0x9500: "Xiao " -0x9501: "Suo " -0x9502: "Li " -0x9503: "Zheng " -0x9504: "Chu " -0x9505: "Guo " -0x9506: "Gao " -0x9507: "Tie " -0x9508: "Xiu " -0x9509: "Cuo " -0x950a: "Lue " -0x950b: "Feng " -0x950c: "Xin " -0x950d: "Liu " -0x950e: "Kai " -0x950f: "Jian " -0x9510: "Rui " -0x9511: "Ti " -0x9512: "Lang " -0x9513: "Qian " -0x9514: "Ju " -0x9515: "A " -0x9516: "Qiang " -0x9517: "Duo " -0x9518: "Tian " -0x9519: "Cuo " -0x951a: "Mao " -0x951b: "Ben " -0x951c: "Qi " -0x951d: "De " -0x951e: "Kua " -0x951f: "Kun " -0x9520: "Chang " -0x9521: "Xi " -0x9522: "Gu " -0x9523: "Luo " -0x9524: "Chui " -0x9525: "Zhui " -0x9526: "Jin " -0x9527: "Zhi " -0x9528: "Xian " -0x9529: "Juan " -0x952a: "Huo " -0x952b: "Pou " -0x952c: "Tan " -0x952d: "Ding " -0x952e: "Jian " -0x952f: "Ju " -0x9530: "Meng " -0x9531: "Zi " -0x9532: "Qie " -0x9533: "Ying " -0x9534: "Kai " -0x9535: "Qiang " -0x9536: "Song " -0x9537: "E " -0x9538: "Cha " -0x9539: "Qiao " -0x953a: "Zhong " -0x953b: "Duan " -0x953c: "Sou " -0x953d: "Huang " -0x953e: "Huan " -0x953f: "Ai " -0x9540: "Du " -0x9541: "Mei " -0x9542: "Lou " -0x9543: "Zi " -0x9544: "Fei " -0x9545: "Mei " -0x9546: "Mo " -0x9547: "Zhen " -0x9548: "Bo " -0x9549: "Ge " -0x954a: "Nie " -0x954b: "Tang " -0x954c: "Juan " -0x954d: "Nie " -0x954e: "Na " -0x954f: "Liu " -0x9550: "Hao " -0x9551: "Bang " -0x9552: "Yi " -0x9553: "Jia " -0x9554: "Bin " -0x9555: "Rong " -0x9556: "Biao " -0x9557: "Tang " -0x9558: "Man " -0x9559: "Luo " -0x955a: "Beng " -0x955b: "Yong " -0x955c: "Jing " -0x955d: "Di " -0x955e: "Zu " -0x955f: "Xuan " -0x9560: "Liu " -0x9561: "Tan " -0x9562: "Jue " -0x9563: "Liao " -0x9564: "Pu " -0x9565: "Lu " -0x9566: "Dui " -0x9567: "Lan " -0x9568: "Pu " -0x9569: "Cuan " -0x956a: "Qiang " -0x956b: "Deng " -0x956c: "Huo " -0x956d: "Lei " -0x956e: "Huan " -0x956f: "Zhuo " -0x9570: "Lian " -0x9571: "Yi " -0x9572: "Cha " -0x9573: "Biao " -0x9574: "La " -0x9575: "Chan " -0x9576: "Xiang " -0x9577: "Chang " -0x9578: "Chang " -0x9579: "Jiu " -0x957a: "Ao " -0x957b: "Die " -0x957c: "Qu " -0x957d: "Liao " -0x957e: "Mi " -0x957f: "Chang " -0x9580: "Men " -0x9581: "Ma " -0x9582: "Shuan " -0x9583: "Shan " -0x9584: "Huo " -0x9585: "Men " -0x9586: "Yan " -0x9587: "Bi " -0x9588: "Han " -0x9589: "Bi " -0x958a: "San " -0x958b: "Kai " -0x958c: "Kang " -0x958d: "Beng " -0x958e: "Hong " -0x958f: "Run " -0x9590: "San " -0x9591: "Xian " -0x9592: "Xian " -0x9593: "Jian " -0x9594: "Min " -0x9595: "Xia " -0x9596: "Yuru " -0x9597: "Dou " -0x9598: "Zha " -0x9599: "Nao " -0x959a: "Jian " -0x959b: "Peng " -0x959c: "Xia " -0x959d: "Ling " -0x959e: "Bian " -0x959f: "Bi " -0x95a0: "Run " -0x95a1: "He " -0x95a2: "Guan " -0x95a3: "Ge " -0x95a4: "Ge " -0x95a5: "Fa " -0x95a6: "Chu " -0x95a7: "Hong " -0x95a8: "Gui " -0x95a9: "Min " -0x95aa: "Se " -0x95ab: "Kun " -0x95ac: "Lang " -0x95ad: "Lu " -0x95ae: "Ting " -0x95af: "Sha " -0x95b0: "Ju " -0x95b1: "Yue " -0x95b2: "Yue " -0x95b3: "Chan " -0x95b4: "Qu " -0x95b5: "Lin " -0x95b6: "Chang " -0x95b7: "Shai " -0x95b8: "Kun " -0x95b9: "Yan " -0x95ba: "Min " -0x95bb: "Yan " -0x95bc: "E " -0x95bd: "Hun " -0x95be: "Yu " -0x95bf: "Wen " -0x95c0: "Xiang " -0x95c1: "Bao " -0x95c2: "Xiang " -0x95c3: "Qu " -0x95c4: "Yao " -0x95c5: "Wen " -0x95c6: "Ban " -0x95c7: "An " -0x95c8: "Wei " -0x95c9: "Yin " -0x95ca: "Kuo " -0x95cb: "Que " -0x95cc: "Lan " -0x95cd: "Du " -0x95ce: "[?] " -0x95cf: "Phwung " -0x95d0: "Tian " -0x95d1: "Nie " -0x95d2: "Ta " -0x95d3: "Kai " -0x95d4: "He " -0x95d5: "Que " -0x95d6: "Chuang " -0x95d7: "Guan " -0x95d8: "Dou " -0x95d9: "Qi " -0x95da: "Kui " -0x95db: "Tang " -0x95dc: "Guan " -0x95dd: "Piao " -0x95de: "Kan " -0x95df: "Xi " -0x95e0: "Hui " -0x95e1: "Chan " -0x95e2: "Pi " -0x95e3: "Dang " -0x95e4: "Huan " -0x95e5: "Ta " -0x95e6: "Wen " -0x95e7: "[?] " -0x95e8: "Men " -0x95e9: "Shuan " -0x95ea: "Shan " -0x95eb: "Yan " -0x95ec: "Han " -0x95ed: "Bi " -0x95ee: "Wen " -0x95ef: "Chuang " -0x95f0: "Run " -0x95f1: "Wei " -0x95f2: "Xian " -0x95f3: "Hong " -0x95f4: "Jian " -0x95f5: "Min " -0x95f6: "Kang " -0x95f7: "Men " -0x95f8: "Zha " -0x95f9: "Nao " -0x95fa: "Gui " -0x95fb: "Wen " -0x95fc: "Ta " -0x95fd: "Min " -0x95fe: "Lu " -0x95ff: "Kai " -/* x096 */ -0x9600: "Fa " -0x9601: "Ge " -0x9602: "He " -0x9603: "Kun " -0x9604: "Jiu " -0x9605: "Yue " -0x9606: "Lang " -0x9607: "Du " -0x9608: "Yu " -0x9609: "Yan " -0x960a: "Chang " -0x960b: "Xi " -0x960c: "Wen " -0x960d: "Hun " -0x960e: "Yan " -0x960f: "E " -0x9610: "Chan " -0x9611: "Lan " -0x9612: "Qu " -0x9613: "Hui " -0x9614: "Kuo " -0x9615: "Que " -0x9616: "Ge " -0x9617: "Tian " -0x9618: "Ta " -0x9619: "Que " -0x961a: "Kan " -0x961b: "Huan " -0x961c: "Fu " -0x961d: "Fu " -0x961e: "Le " -0x961f: "Dui " -0x9620: "Xin " -0x9621: "Qian " -0x9622: "Wu " -0x9623: "Yi " -0x9624: "Tuo " -0x9625: "Yin " -0x9626: "Yang " -0x9627: "Dou " -0x9628: "E " -0x9629: "Sheng " -0x962a: "Ban " -0x962b: "Pei " -0x962c: "Keng " -0x962d: "Yun " -0x962e: "Ruan " -0x962f: "Zhi " -0x9630: "Pi " -0x9631: "Jing " -0x9632: "Fang " -0x9633: "Yang " -0x9634: "Yin " -0x9635: "Zhen " -0x9636: "Jie " -0x9637: "Cheng " -0x9638: "E " -0x9639: "Qu " -0x963a: "Di " -0x963b: "Zu " -0x963c: "Zuo " -0x963d: "Dian " -0x963e: "Ling " -0x963f: "A " -0x9640: "Tuo " -0x9641: "Tuo " -0x9642: "Po " -0x9643: "Bing " -0x9644: "Fu " -0x9645: "Ji " -0x9646: "Lu " -0x9647: "Long " -0x9648: "Chen " -0x9649: "Xing " -0x964a: "Duo " -0x964b: "Lou " -0x964c: "Mo " -0x964d: "Jiang " -0x964e: "Shu " -0x964f: "Duo " -0x9650: "Xian " -0x9651: "Er " -0x9652: "Gui " -0x9653: "Yu " -0x9654: "Gai " -0x9655: "Shan " -0x9656: "Xun " -0x9657: "Qiao " -0x9658: "Xing " -0x9659: "Chun " -0x965a: "Fu " -0x965b: "Bi " -0x965c: "Xia " -0x965d: "Shan " -0x965e: "Sheng " -0x965f: "Zhi " -0x9660: "Pu " -0x9661: "Dou " -0x9662: "Yuan " -0x9663: "Zhen " -0x9664: "Chu " -0x9665: "Xian " -0x9666: "Tou " -0x9667: "Nie " -0x9668: "Yun " -0x9669: "Xian " -0x966a: "Pei " -0x966b: "Pei " -0x966c: "Zou " -0x966d: "Yi " -0x966e: "Dui " -0x966f: "Lun " -0x9670: "Yin " -0x9671: "Ju " -0x9672: "Chui " -0x9673: "Chen " -0x9674: "Pi " -0x9675: "Ling " -0x9676: "Tao " -0x9677: "Xian " -0x9678: "Lu " -0x9679: "Sheng " -0x967a: "Xian " -0x967b: "Yin " -0x967c: "Zhu " -0x967d: "Yang " -0x967e: "Reng " -0x967f: "Shan " -0x9680: "Chong " -0x9681: "Yan " -0x9682: "Yin " -0x9683: "Yu " -0x9684: "Ti " -0x9685: "Yu " -0x9686: "Long " -0x9687: "Wei " -0x9688: "Wei " -0x9689: "Nie " -0x968a: "Dui " -0x968b: "Sui " -0x968c: "An " -0x968d: "Huang " -0x968e: "Jie " -0x968f: "Sui " -0x9690: "Yin " -0x9691: "Gai " -0x9692: "Yan " -0x9693: "Hui " -0x9694: "Ge " -0x9695: "Yun " -0x9696: "Wu " -0x9697: "Wei " -0x9698: "Ai " -0x9699: "Xi " -0x969a: "Tang " -0x969b: "Ji " -0x969c: "Zhang " -0x969d: "Dao " -0x969e: "Ao " -0x969f: "Xi " -0x96a0: "Yin " -0x96a1: "[?] " -0x96a2: "Rao " -0x96a3: "Lin " -0x96a4: "Tui " -0x96a5: "Deng " -0x96a6: "Pi " -0x96a7: "Sui " -0x96a8: "Sui " -0x96a9: "Yu " -0x96aa: "Xian " -0x96ab: "Fen " -0x96ac: "Ni " -0x96ad: "Er " -0x96ae: "Ji " -0x96af: "Dao " -0x96b0: "Xi " -0x96b1: "Yin " -0x96b2: "E " -0x96b3: "Hui " -0x96b4: "Long " -0x96b5: "Xi " -0x96b6: "Li " -0x96b7: "Li " -0x96b8: "Li " -0x96b9: "Zhui " -0x96ba: "He " -0x96bb: "Zhi " -0x96bc: "Zhun " -0x96bd: "Jun " -0x96be: "Nan " -0x96bf: "Yi " -0x96c0: "Que " -0x96c1: "Yan " -0x96c2: "Qian " -0x96c3: "Ya " -0x96c4: "Xiong " -0x96c5: "Ya " -0x96c6: "Ji " -0x96c7: "Gu " -0x96c8: "Huan " -0x96c9: "Zhi " -0x96ca: "Gou " -0x96cb: "Jun " -0x96cc: "Ci " -0x96cd: "Yong " -0x96ce: "Ju " -0x96cf: "Chu " -0x96d0: "Hu " -0x96d1: "Za " -0x96d2: "Luo " -0x96d3: "Yu " -0x96d4: "Chou " -0x96d5: "Diao " -0x96d6: "Sui " -0x96d7: "Han " -0x96d8: "Huo " -0x96d9: "Shuang " -0x96da: "Guan " -0x96db: "Chu " -0x96dc: "Za " -0x96dd: "Yong " -0x96de: "Ji " -0x96df: "Xi " -0x96e0: "Chou " -0x96e1: "Liu " -0x96e2: "Li " -0x96e3: "Nan " -0x96e4: "Xue " -0x96e5: "Za " -0x96e6: "Ji " -0x96e7: "Ji " -0x96e8: "Yu " -0x96e9: "Yu " -0x96ea: "Xue " -0x96eb: "Na " -0x96ec: "Fou " -0x96ed: "Se " -0x96ee: "Mu " -0x96ef: "Wen " -0x96f0: "Fen " -0x96f1: "Pang " -0x96f2: "Yun " -0x96f3: "Li " -0x96f4: "Li " -0x96f5: "Ang " -0x96f6: "Ling " -0x96f7: "Lei " -0x96f8: "An " -0x96f9: "Bao " -0x96fa: "Meng " -0x96fb: "Dian " -0x96fc: "Dang " -0x96fd: "Xing " -0x96fe: "Wu " -0x96ff: "Zhao " -/* x097 */ -0x9700: "Xu " -0x9701: "Ji " -0x9702: "Mu " -0x9703: "Chen " -0x9704: "Xiao " -0x9705: "Zha " -0x9706: "Ting " -0x9707: "Zhen " -0x9708: "Pei " -0x9709: "Mei " -0x970a: "Ling " -0x970b: "Qi " -0x970c: "Chou " -0x970d: "Huo " -0x970e: "Sha " -0x970f: "Fei " -0x9710: "Weng " -0x9711: "Zhan " -0x9712: "Yin " -0x9713: "Ni " -0x9714: "Chou " -0x9715: "Tun " -0x9716: "Lin " -0x9717: "[?] " -0x9718: "Dong " -0x9719: "Ying " -0x971a: "Wu " -0x971b: "Ling " -0x971c: "Shuang " -0x971d: "Ling " -0x971e: "Xia " -0x971f: "Hong " -0x9720: "Yin " -0x9721: "Mo " -0x9722: "Mai " -0x9723: "Yun " -0x9724: "Liu " -0x9725: "Meng " -0x9726: "Bin " -0x9727: "Wu " -0x9728: "Wei " -0x9729: "Huo " -0x972a: "Yin " -0x972b: "Xi " -0x972c: "Yi " -0x972d: "Ai " -0x972e: "Dan " -0x972f: "Deng " -0x9730: "Xian " -0x9731: "Yu " -0x9732: "Lu " -0x9733: "Long " -0x9734: "Dai " -0x9735: "Ji " -0x9736: "Pang " -0x9737: "Yang " -0x9738: "Ba " -0x9739: "Pi " -0x973a: "Wei " -0x973b: "[?] " -0x973c: "Xi " -0x973d: "Ji " -0x973e: "Mai " -0x973f: "Meng " -0x9740: "Meng " -0x9741: "Lei " -0x9742: "Li " -0x9743: "Huo " -0x9744: "Ai " -0x9745: "Fei " -0x9746: "Dai " -0x9747: "Long " -0x9748: "Ling " -0x9749: "Ai " -0x974a: "Feng " -0x974b: "Li " -0x974c: "Bao " -0x974d: "[?] " -0x974e: "He " -0x974f: "He " -0x9750: "Bing " -0x9751: "Qing " -0x9752: "Qing " -0x9753: "Jing " -0x9754: "Tian " -0x9755: "Zhen " -0x9756: "Jing " -0x9757: "Cheng " -0x9758: "Qing " -0x9759: "Jing " -0x975a: "Jing " -0x975b: "Dian " -0x975c: "Jing " -0x975d: "Tian " -0x975e: "Fei " -0x975f: "Fei " -0x9760: "Kao " -0x9761: "Mi " -0x9762: "Mian " -0x9763: "Mian " -0x9764: "Pao " -0x9765: "Ye " -0x9766: "Tian " -0x9767: "Hui " -0x9768: "Ye " -0x9769: "Ge " -0x976a: "Ding " -0x976b: "Cha " -0x976c: "Jian " -0x976d: "Ren " -0x976e: "Di " -0x976f: "Du " -0x9770: "Wu " -0x9771: "Ren " -0x9772: "Qin " -0x9773: "Jin " -0x9774: "Xue " -0x9775: "Niu " -0x9776: "Ba " -0x9777: "Yin " -0x9778: "Sa " -0x9779: "Na " -0x977a: "Mo " -0x977b: "Zu " -0x977c: "Da " -0x977d: "Ban " -0x977e: "Yi " -0x977f: "Yao " -0x9780: "Tao " -0x9781: "Tuo " -0x9782: "Jia " -0x9783: "Hong " -0x9784: "Pao " -0x9785: "Yang " -0x9786: "Tomo " -0x9787: "Yin " -0x9788: "Jia " -0x9789: "Tao " -0x978a: "Ji " -0x978b: "Xie " -0x978c: "An " -0x978d: "An " -0x978e: "Hen " -0x978f: "Gong " -0x9790: "Kohaze " -0x9791: "Da " -0x9792: "Qiao " -0x9793: "Ting " -0x9794: "Wan " -0x9795: "Ying " -0x9796: "Sui " -0x9797: "Tiao " -0x9798: "Qiao " -0x9799: "Xuan " -0x979a: "Kong " -0x979b: "Beng " -0x979c: "Ta " -0x979d: "Zhang " -0x979e: "Bing " -0x979f: "Kuo " -0x97a0: "Ju " -0x97a1: "La " -0x97a2: "Xie " -0x97a3: "Rou " -0x97a4: "Bang " -0x97a5: "Yi " -0x97a6: "Qiu " -0x97a7: "Qiu " -0x97a8: "He " -0x97a9: "Xiao " -0x97aa: "Mu " -0x97ab: "Ju " -0x97ac: "Jian " -0x97ad: "Bian " -0x97ae: "Di " -0x97af: "Jian " -0x97b0: "On " -0x97b1: "Tao " -0x97b2: "Gou " -0x97b3: "Ta " -0x97b4: "Bei " -0x97b5: "Xie " -0x97b6: "Pan " -0x97b7: "Ge " -0x97b8: "Bi " -0x97b9: "Kuo " -0x97ba: "Tang " -0x97bb: "Lou " -0x97bc: "Gui " -0x97bd: "Qiao " -0x97be: "Xue " -0x97bf: "Ji " -0x97c0: "Jian " -0x97c1: "Jiang " -0x97c2: "Chan " -0x97c3: "Da " -0x97c4: "Huo " -0x97c5: "Xian " -0x97c6: "Qian " -0x97c7: "Du " -0x97c8: "Wa " -0x97c9: "Jian " -0x97ca: "Lan " -0x97cb: "Wei " -0x97cc: "Ren " -0x97cd: "Fu " -0x97ce: "Mei " -0x97cf: "Juan " -0x97d0: "Ge " -0x97d1: "Wei " -0x97d2: "Qiao " -0x97d3: "Han " -0x97d4: "Chang " -0x97d5: "[?] " -0x97d6: "Rou " -0x97d7: "Xun " -0x97d8: "She " -0x97d9: "Wei " -0x97da: "Ge " -0x97db: "Bei " -0x97dc: "Tao " -0x97dd: "Gou " -0x97de: "Yun " -0x97df: "[?] " -0x97e0: "Bi " -0x97e1: "Wei " -0x97e2: "Hui " -0x97e3: "Du " -0x97e4: "Wa " -0x97e5: "Du " -0x97e6: "Wei " -0x97e7: "Ren " -0x97e8: "Fu " -0x97e9: "Han " -0x97ea: "Wei " -0x97eb: "Yun " -0x97ec: "Tao " -0x97ed: "Jiu " -0x97ee: "Jiu " -0x97ef: "Xian " -0x97f0: "Xie " -0x97f1: "Xian " -0x97f2: "Ji " -0x97f3: "Yin " -0x97f4: "Za " -0x97f5: "Yun " -0x97f6: "Shao " -0x97f7: "Le " -0x97f8: "Peng " -0x97f9: "Heng " -0x97fa: "Ying " -0x97fb: "Yun " -0x97fc: "Peng " -0x97fd: "Yin " -0x97fe: "Yin " -0x97ff: "Xiang " -/* x098 */ -0x9800: "Hu " -0x9801: "Ye " -0x9802: "Ding " -0x9803: "Qing " -0x9804: "Pan " -0x9805: "Xiang " -0x9806: "Shun " -0x9807: "Han " -0x9808: "Xu " -0x9809: "Yi " -0x980a: "Xu " -0x980b: "Gu " -0x980c: "Song " -0x980d: "Kui " -0x980e: "Qi " -0x980f: "Hang " -0x9810: "Yu " -0x9811: "Wan " -0x9812: "Ban " -0x9813: "Dun " -0x9814: "Di " -0x9815: "Dan " -0x9816: "Pan " -0x9817: "Po " -0x9818: "Ling " -0x9819: "Ce " -0x981a: "Jing " -0x981b: "Lei " -0x981c: "He " -0x981d: "Qiao " -0x981e: "E " -0x981f: "E " -0x9820: "Wei " -0x9821: "Jie " -0x9822: "Gua " -0x9823: "Shen " -0x9824: "Yi " -0x9825: "Shen " -0x9826: "Hai " -0x9827: "Dui " -0x9828: "Pian " -0x9829: "Ping " -0x982a: "Lei " -0x982b: "Fu " -0x982c: "Jia " -0x982d: "Tou " -0x982e: "Hui " -0x982f: "Kui " -0x9830: "Jia " -0x9831: "Le " -0x9832: "Tian " -0x9833: "Cheng " -0x9834: "Ying " -0x9835: "Jun " -0x9836: "Hu " -0x9837: "Han " -0x9838: "Jing " -0x9839: "Tui " -0x983a: "Tui " -0x983b: "Pin " -0x983c: "Lai " -0x983d: "Tui " -0x983e: "Zi " -0x983f: "Zi " -0x9840: "Chui " -0x9841: "Ding " -0x9842: "Lai " -0x9843: "Yan " -0x9844: "Han " -0x9845: "Jian " -0x9846: "Ke " -0x9847: "Cui " -0x9848: "Jiong " -0x9849: "Qin " -0x984a: "Yi " -0x984b: "Sai " -0x984c: "Ti " -0x984d: "E " -0x984e: "E " -0x984f: "Yan " -0x9850: "Hun " -0x9851: "Kan " -0x9852: "Yong " -0x9853: "Zhuan " -0x9854: "Yan " -0x9855: "Xian " -0x9856: "Xin " -0x9857: "Yi " -0x9858: "Yuan " -0x9859: "Sang " -0x985a: "Dian " -0x985b: "Dian " -0x985c: "Jiang " -0x985d: "Ku " -0x985e: "Lei " -0x985f: "Liao " -0x9860: "Piao " -0x9861: "Yi " -0x9862: "Man " -0x9863: "Qi " -0x9864: "Rao " -0x9865: "Hao " -0x9866: "Qiao " -0x9867: "Gu " -0x9868: "Xun " -0x9869: "Qian " -0x986a: "Hui " -0x986b: "Zhan " -0x986c: "Ru " -0x986d: "Hong " -0x986e: "Bin " -0x986f: "Xian " -0x9870: "Pin " -0x9871: "Lu " -0x9872: "Lan " -0x9873: "Nie " -0x9874: "Quan " -0x9875: "Ye " -0x9876: "Ding " -0x9877: "Qing " -0x9878: "Han " -0x9879: "Xiang " -0x987a: "Shun " -0x987b: "Xu " -0x987c: "Xu " -0x987d: "Wan " -0x987e: "Gu " -0x987f: "Dun " -0x9880: "Qi " -0x9881: "Ban " -0x9882: "Song " -0x9883: "Hang " -0x9884: "Yu " -0x9885: "Lu " -0x9886: "Ling " -0x9887: "Po " -0x9888: "Jing " -0x9889: "Jie " -0x988a: "Jia " -0x988b: "Tian " -0x988c: "Han " -0x988d: "Ying " -0x988e: "Jiong " -0x988f: "Hai " -0x9890: "Yi " -0x9891: "Pin " -0x9892: "Hui " -0x9893: "Tui " -0x9894: "Han " -0x9895: "Ying " -0x9896: "Ying " -0x9897: "Ke " -0x9898: "Ti " -0x9899: "Yong " -0x989a: "E " -0x989b: "Zhuan " -0x989c: "Yan " -0x989d: "E " -0x989e: "Nie " -0x989f: "Man " -0x98a0: "Dian " -0x98a1: "Sang " -0x98a2: "Hao " -0x98a3: "Lei " -0x98a4: "Zhan " -0x98a5: "Ru " -0x98a6: "Pin " -0x98a7: "Quan " -0x98a8: "Feng " -0x98a9: "Biao " -0x98aa: "Oroshi " -0x98ab: "Fu " -0x98ac: "Xia " -0x98ad: "Zhan " -0x98ae: "Biao " -0x98af: "Sa " -0x98b0: "Ba " -0x98b1: "Tai " -0x98b2: "Lie " -0x98b3: "Gua " -0x98b4: "Xuan " -0x98b5: "Shao " -0x98b6: "Ju " -0x98b7: "Bi " -0x98b8: "Si " -0x98b9: "Wei " -0x98ba: "Yang " -0x98bb: "Yao " -0x98bc: "Sou " -0x98bd: "Kai " -0x98be: "Sao " -0x98bf: "Fan " -0x98c0: "Liu " -0x98c1: "Xi " -0x98c2: "Liao " -0x98c3: "Piao " -0x98c4: "Piao " -0x98c5: "Liu " -0x98c6: "Biao " -0x98c7: "Biao " -0x98c8: "Biao " -0x98c9: "Liao " -0x98ca: "[?] " -0x98cb: "Se " -0x98cc: "Feng " -0x98cd: "Biao " -0x98ce: "Feng " -0x98cf: "Yang " -0x98d0: "Zhan " -0x98d1: "Biao " -0x98d2: "Sa " -0x98d3: "Ju " -0x98d4: "Si " -0x98d5: "Sou " -0x98d6: "Yao " -0x98d7: "Liu " -0x98d8: "Piao " -0x98d9: "Biao " -0x98da: "Biao " -0x98db: "Fei " -0x98dc: "Fan " -0x98dd: "Fei " -0x98de: "Fei " -0x98df: "Shi " -0x98e0: "Shi " -0x98e1: "Can " -0x98e2: "Ji " -0x98e3: "Ding " -0x98e4: "Si " -0x98e5: "Tuo " -0x98e6: "Zhan " -0x98e7: "Sun " -0x98e8: "Xiang " -0x98e9: "Tun " -0x98ea: "Ren " -0x98eb: "Yu " -0x98ec: "Juan " -0x98ed: "Chi " -0x98ee: "Yin " -0x98ef: "Fan " -0x98f0: "Fan " -0x98f1: "Sun " -0x98f2: "Yin " -0x98f3: "Zhu " -0x98f4: "Yi " -0x98f5: "Zhai " -0x98f6: "Bi " -0x98f7: "Jie " -0x98f8: "Tao " -0x98f9: "Liu " -0x98fa: "Ci " -0x98fb: "Tie " -0x98fc: "Si " -0x98fd: "Bao " -0x98fe: "Shi " -0x98ff: "Duo " -/* x099 */ -0x9900: "Hai " -0x9901: "Ren " -0x9902: "Tian " -0x9903: "Jiao " -0x9904: "Jia " -0x9905: "Bing " -0x9906: "Yao " -0x9907: "Tong " -0x9908: "Ci " -0x9909: "Xiang " -0x990a: "Yang " -0x990b: "Yang " -0x990c: "Er " -0x990d: "Yan " -0x990e: "Le " -0x990f: "Yi " -0x9910: "Can " -0x9911: "Bo " -0x9912: "Nei " -0x9913: "E " -0x9914: "Bu " -0x9915: "Jun " -0x9916: "Dou " -0x9917: "Su " -0x9918: "Yu " -0x9919: "Shi " -0x991a: "Yao " -0x991b: "Hun " -0x991c: "Guo " -0x991d: "Shi " -0x991e: "Jian " -0x991f: "Zhui " -0x9920: "Bing " -0x9921: "Xian " -0x9922: "Bu " -0x9923: "Ye " -0x9924: "Tan " -0x9925: "Fei " -0x9926: "Zhang " -0x9927: "Wei " -0x9928: "Guan " -0x9929: "E " -0x992a: "Nuan " -0x992b: "Hun " -0x992c: "Hu " -0x992d: "Huang " -0x992e: "Tie " -0x992f: "Hui " -0x9930: "Jian " -0x9931: "Hou " -0x9932: "He " -0x9933: "Xing " -0x9934: "Fen " -0x9935: "Wei " -0x9936: "Gu " -0x9937: "Cha " -0x9938: "Song " -0x9939: "Tang " -0x993a: "Bo " -0x993b: "Gao " -0x993c: "Xi " -0x993d: "Kui " -0x993e: "Liu " -0x993f: "Sou " -0x9940: "Tao " -0x9941: "Ye " -0x9942: "Yun " -0x9943: "Mo " -0x9944: "Tang " -0x9945: "Man " -0x9946: "Bi " -0x9947: "Yu " -0x9948: "Xiu " -0x9949: "Jin " -0x994a: "San " -0x994b: "Kui " -0x994c: "Zhuan " -0x994d: "Shan " -0x994e: "Chi " -0x994f: "Dan " -0x9950: "Yi " -0x9951: "Ji " -0x9952: "Rao " -0x9953: "Cheng " -0x9954: "Yong " -0x9955: "Tao " -0x9956: "Hui " -0x9957: "Xiang " -0x9958: "Zhan " -0x9959: "Fen " -0x995a: "Hai " -0x995b: "Meng " -0x995c: "Yan " -0x995d: "Mo " -0x995e: "Chan " -0x995f: "Xiang " -0x9960: "Luo " -0x9961: "Zuan " -0x9962: "Nang " -0x9963: "Shi " -0x9964: "Ding " -0x9965: "Ji " -0x9966: "Tuo " -0x9967: "Xing " -0x9968: "Tun " -0x9969: "Xi " -0x996a: "Ren " -0x996b: "Yu " -0x996c: "Chi " -0x996d: "Fan " -0x996e: "Yin " -0x996f: "Jian " -0x9970: "Shi " -0x9971: "Bao " -0x9972: "Si " -0x9973: "Duo " -0x9974: "Yi " -0x9975: "Er " -0x9976: "Rao " -0x9977: "Xiang " -0x9978: "Jia " -0x9979: "Le " -0x997a: "Jiao " -0x997b: "Yi " -0x997c: "Bing " -0x997d: "Bo " -0x997e: "Dou " -0x997f: "E " -0x9980: "Yu " -0x9981: "Nei " -0x9982: "Jun " -0x9983: "Guo " -0x9984: "Hun " -0x9985: "Xian " -0x9986: "Guan " -0x9987: "Cha " -0x9988: "Kui " -0x9989: "Gu " -0x998a: "Sou " -0x998b: "Chan " -0x998c: "Ye " -0x998d: "Mo " -0x998e: "Bo " -0x998f: "Liu " -0x9990: "Xiu " -0x9991: "Jin " -0x9992: "Man " -0x9993: "San " -0x9994: "Zhuan " -0x9995: "Nang " -0x9996: "Shou " -0x9997: "Kui " -0x9998: "Guo " -0x9999: "Xiang " -0x999a: "Fen " -0x999b: "Ba " -0x999c: "Ni " -0x999d: "Bi " -0x999e: "Bo " -0x999f: "Tu " -0x99a0: "Han " -0x99a1: "Fei " -0x99a2: "Jian " -0x99a3: "An " -0x99a4: "Ai " -0x99a5: "Fu " -0x99a6: "Xian " -0x99a7: "Wen " -0x99a8: "Xin " -0x99a9: "Fen " -0x99aa: "Bin " -0x99ab: "Xing " -0x99ac: "Ma " -0x99ad: "Yu " -0x99ae: "Feng " -0x99af: "Han " -0x99b0: "Di " -0x99b1: "Tuo " -0x99b2: "Tuo " -0x99b3: "Chi " -0x99b4: "Xun " -0x99b5: "Zhu " -0x99b6: "Zhi " -0x99b7: "Pei " -0x99b8: "Xin " -0x99b9: "Ri " -0x99ba: "Sa " -0x99bb: "Yin " -0x99bc: "Wen " -0x99bd: "Zhi " -0x99be: "Dan " -0x99bf: "Lu " -0x99c0: "You " -0x99c1: "Bo " -0x99c2: "Bao " -0x99c3: "Kuai " -0x99c4: "Tuo " -0x99c5: "Yi " -0x99c6: "Qu " -0x99c7: "[?] " -0x99c8: "Qu " -0x99c9: "Jiong " -0x99ca: "Bo " -0x99cb: "Zhao " -0x99cc: "Yuan " -0x99cd: "Peng " -0x99ce: "Zhou " -0x99cf: "Ju " -0x99d0: "Zhu " -0x99d1: "Nu " -0x99d2: "Ju " -0x99d3: "Pi " -0x99d4: "Zang " -0x99d5: "Jia " -0x99d6: "Ling " -0x99d7: "Zhen " -0x99d8: "Tai " -0x99d9: "Fu " -0x99da: "Yang " -0x99db: "Shi " -0x99dc: "Bi " -0x99dd: "Tuo " -0x99de: "Tuo " -0x99df: "Si " -0x99e0: "Liu " -0x99e1: "Ma " -0x99e2: "Pian " -0x99e3: "Tao " -0x99e4: "Zhi " -0x99e5: "Rong " -0x99e6: "Teng " -0x99e7: "Dong " -0x99e8: "Xun " -0x99e9: "Quan " -0x99ea: "Shen " -0x99eb: "Jiong " -0x99ec: "Er " -0x99ed: "Hai " -0x99ee: "Bo " -0x99ef: "Zhu " -0x99f0: "Yin " -0x99f1: "Luo " -0x99f2: "Shuu " -0x99f3: "Dan " -0x99f4: "Xie " -0x99f5: "Liu " -0x99f6: "Ju " -0x99f7: "Song " -0x99f8: "Qin " -0x99f9: "Mang " -0x99fa: "Liang " -0x99fb: "Han " -0x99fc: "Tu " -0x99fd: "Xuan " -0x99fe: "Tui " -0x99ff: "Jun " -/* x09a */ -0x9a00: "E " -0x9a01: "Cheng " -0x9a02: "Xin " -0x9a03: "Ai " -0x9a04: "Lu " -0x9a05: "Zhui " -0x9a06: "Zhou " -0x9a07: "She " -0x9a08: "Pian " -0x9a09: "Kun " -0x9a0a: "Tao " -0x9a0b: "Lai " -0x9a0c: "Zong " -0x9a0d: "Ke " -0x9a0e: "Qi " -0x9a0f: "Qi " -0x9a10: "Yan " -0x9a11: "Fei " -0x9a12: "Sao " -0x9a13: "Yan " -0x9a14: "Jie " -0x9a15: "Yao " -0x9a16: "Wu " -0x9a17: "Pian " -0x9a18: "Cong " -0x9a19: "Pian " -0x9a1a: "Qian " -0x9a1b: "Fei " -0x9a1c: "Huang " -0x9a1d: "Jian " -0x9a1e: "Huo " -0x9a1f: "Yu " -0x9a20: "Ti " -0x9a21: "Quan " -0x9a22: "Xia " -0x9a23: "Zong " -0x9a24: "Kui " -0x9a25: "Rou " -0x9a26: "Si " -0x9a27: "Gua " -0x9a28: "Tuo " -0x9a29: "Kui " -0x9a2a: "Sou " -0x9a2b: "Qian " -0x9a2c: "Cheng " -0x9a2d: "Zhi " -0x9a2e: "Liu " -0x9a2f: "Pang " -0x9a30: "Teng " -0x9a31: "Xi " -0x9a32: "Cao " -0x9a33: "Du " -0x9a34: "Yan " -0x9a35: "Yuan " -0x9a36: "Zou " -0x9a37: "Sao " -0x9a38: "Shan " -0x9a39: "Li " -0x9a3a: "Zhi " -0x9a3b: "Shuang " -0x9a3c: "Lu " -0x9a3d: "Xi " -0x9a3e: "Luo " -0x9a3f: "Zhang " -0x9a40: "Mo " -0x9a41: "Ao " -0x9a42: "Can " -0x9a43: "Piao " -0x9a44: "Cong " -0x9a45: "Qu " -0x9a46: "Bi " -0x9a47: "Zhi " -0x9a48: "Yu " -0x9a49: "Xu " -0x9a4a: "Hua " -0x9a4b: "Bo " -0x9a4c: "Su " -0x9a4d: "Xiao " -0x9a4e: "Lin " -0x9a4f: "Chan " -0x9a50: "Dun " -0x9a51: "Liu " -0x9a52: "Tuo " -0x9a53: "Zeng " -0x9a54: "Tan " -0x9a55: "Jiao " -0x9a56: "Tie " -0x9a57: "Yan " -0x9a58: "Luo " -0x9a59: "Zhan " -0x9a5a: "Jing " -0x9a5b: "Yi " -0x9a5c: "Ye " -0x9a5d: "Tuo " -0x9a5e: "Bin " -0x9a5f: "Zou " -0x9a60: "Yan " -0x9a61: "Peng " -0x9a62: "Lu " -0x9a63: "Teng " -0x9a64: "Xiang " -0x9a65: "Ji " -0x9a66: "Shuang " -0x9a67: "Ju " -0x9a68: "Xi " -0x9a69: "Huan " -0x9a6a: "Li " -0x9a6b: "Biao " -0x9a6c: "Ma " -0x9a6d: "Yu " -0x9a6e: "Tuo " -0x9a6f: "Xun " -0x9a70: "Chi " -0x9a71: "Qu " -0x9a72: "Ri " -0x9a73: "Bo " -0x9a74: "Lu " -0x9a75: "Zang " -0x9a76: "Shi " -0x9a77: "Si " -0x9a78: "Fu " -0x9a79: "Ju " -0x9a7a: "Zou " -0x9a7b: "Zhu " -0x9a7c: "Tuo " -0x9a7d: "Nu " -0x9a7e: "Jia " -0x9a7f: "Yi " -0x9a80: "Tai " -0x9a81: "Xiao " -0x9a82: "Ma " -0x9a83: "Yin " -0x9a84: "Jiao " -0x9a85: "Hua " -0x9a86: "Luo " -0x9a87: "Hai " -0x9a88: "Pian " -0x9a89: "Biao " -0x9a8a: "Li " -0x9a8b: "Cheng " -0x9a8c: "Yan " -0x9a8d: "Xin " -0x9a8e: "Qin " -0x9a8f: "Jun " -0x9a90: "Qi " -0x9a91: "Qi " -0x9a92: "Ke " -0x9a93: "Zhui " -0x9a94: "Zong " -0x9a95: "Su " -0x9a96: "Can " -0x9a97: "Pian " -0x9a98: "Zhi " -0x9a99: "Kui " -0x9a9a: "Sao " -0x9a9b: "Wu " -0x9a9c: "Ao " -0x9a9d: "Liu " -0x9a9e: "Qian " -0x9a9f: "Shan " -0x9aa0: "Piao " -0x9aa1: "Luo " -0x9aa2: "Cong " -0x9aa3: "Chan " -0x9aa4: "Zou " -0x9aa5: "Ji " -0x9aa6: "Shuang " -0x9aa7: "Xiang " -0x9aa8: "Gu " -0x9aa9: "Wei " -0x9aaa: "Wei " -0x9aab: "Wei " -0x9aac: "Yu " -0x9aad: "Gan " -0x9aae: "Yi " -0x9aaf: "Ang " -0x9ab0: "Tou " -0x9ab1: "Xie " -0x9ab2: "Bao " -0x9ab3: "Bi " -0x9ab4: "Chi " -0x9ab5: "Ti " -0x9ab6: "Di " -0x9ab7: "Ku " -0x9ab8: "Hai " -0x9ab9: "Qiao " -0x9aba: "Gou " -0x9abb: "Kua " -0x9abc: "Ge " -0x9abd: "Tui " -0x9abe: "Geng " -0x9abf: "Pian " -0x9ac0: "Bi " -0x9ac1: "Ke " -0x9ac2: "Ka " -0x9ac3: "Yu " -0x9ac4: "Sui " -0x9ac5: "Lou " -0x9ac6: "Bo " -0x9ac7: "Xiao " -0x9ac8: "Pang " -0x9ac9: "Bo " -0x9aca: "Ci " -0x9acb: "Kuan " -0x9acc: "Bin " -0x9acd: "Mo " -0x9ace: "Liao " -0x9acf: "Lou " -0x9ad0: "Nao " -0x9ad1: "Du " -0x9ad2: "Zang " -0x9ad3: "Sui " -0x9ad4: "Ti " -0x9ad5: "Bin " -0x9ad6: "Kuan " -0x9ad7: "Lu " -0x9ad8: "Gao " -0x9ad9: "Gao " -0x9ada: "Qiao " -0x9adb: "Kao " -0x9adc: "Qiao " -0x9add: "Lao " -0x9ade: "Zao " -0x9adf: "Biao " -0x9ae0: "Kun " -0x9ae1: "Kun " -0x9ae2: "Ti " -0x9ae3: "Fang " -0x9ae4: "Xiu " -0x9ae5: "Ran " -0x9ae6: "Mao " -0x9ae7: "Dan " -0x9ae8: "Kun " -0x9ae9: "Bin " -0x9aea: "Fa " -0x9aeb: "Tiao " -0x9aec: "Peng " -0x9aed: "Zi " -0x9aee: "Fa " -0x9aef: "Ran " -0x9af0: "Ti " -0x9af1: "Pao " -0x9af2: "Pi " -0x9af3: "Mao " -0x9af4: "Fu " -0x9af5: "Er " -0x9af6: "Rong " -0x9af7: "Qu " -0x9af8: "Gong " -0x9af9: "Xiu " -0x9afa: "Gua " -0x9afb: "Ji " -0x9afc: "Peng " -0x9afd: "Zhua " -0x9afe: "Shao " -0x9aff: "Sha " -/* x09b */ -0x9b00: "Ti " -0x9b01: "Li " -0x9b02: "Bin " -0x9b03: "Zong " -0x9b04: "Ti " -0x9b05: "Peng " -0x9b06: "Song " -0x9b07: "Zheng " -0x9b08: "Quan " -0x9b09: "Zong " -0x9b0a: "Shun " -0x9b0b: "Jian " -0x9b0c: "Duo " -0x9b0d: "Hu " -0x9b0e: "La " -0x9b0f: "Jiu " -0x9b10: "Qi " -0x9b11: "Lian " -0x9b12: "Zhen " -0x9b13: "Bin " -0x9b14: "Peng " -0x9b15: "Mo " -0x9b16: "San " -0x9b17: "Man " -0x9b18: "Man " -0x9b19: "Seng " -0x9b1a: "Xu " -0x9b1b: "Lie " -0x9b1c: "Qian " -0x9b1d: "Qian " -0x9b1e: "Nong " -0x9b1f: "Huan " -0x9b20: "Kuai " -0x9b21: "Ning " -0x9b22: "Bin " -0x9b23: "Lie " -0x9b24: "Rang " -0x9b25: "Dou " -0x9b26: "Dou " -0x9b27: "Nao " -0x9b28: "Hong " -0x9b29: "Xi " -0x9b2a: "Dou " -0x9b2b: "Han " -0x9b2c: "Dou " -0x9b2d: "Dou " -0x9b2e: "Jiu " -0x9b2f: "Chang " -0x9b30: "Yu " -0x9b31: "Yu " -0x9b32: "Li " -0x9b33: "Juan " -0x9b34: "Fu " -0x9b35: "Qian " -0x9b36: "Gui " -0x9b37: "Zong " -0x9b38: "Liu " -0x9b39: "Gui " -0x9b3a: "Shang " -0x9b3b: "Yu " -0x9b3c: "Gui " -0x9b3d: "Mei " -0x9b3e: "Ji " -0x9b3f: "Qi " -0x9b40: "Jie " -0x9b41: "Kui " -0x9b42: "Hun " -0x9b43: "Ba " -0x9b44: "Po " -0x9b45: "Mei " -0x9b46: "Xu " -0x9b47: "Yan " -0x9b48: "Xiao " -0x9b49: "Liang " -0x9b4a: "Yu " -0x9b4b: "Tui " -0x9b4c: "Qi " -0x9b4d: "Wang " -0x9b4e: "Liang " -0x9b4f: "Wei " -0x9b50: "Jian " -0x9b51: "Chi " -0x9b52: "Piao " -0x9b53: "Bi " -0x9b54: "Mo " -0x9b55: "Ji " -0x9b56: "Xu " -0x9b57: "Chou " -0x9b58: "Yan " -0x9b59: "Zhan " -0x9b5a: "Yu " -0x9b5b: "Dao " -0x9b5c: "Ren " -0x9b5d: "Ji " -0x9b5e: "Eri " -0x9b5f: "Gong " -0x9b60: "Tuo " -0x9b61: "Diao " -0x9b62: "Ji " -0x9b63: "Xu " -0x9b64: "E " -0x9b65: "E " -0x9b66: "Sha " -0x9b67: "Hang " -0x9b68: "Tun " -0x9b69: "Mo " -0x9b6a: "Jie " -0x9b6b: "Shen " -0x9b6c: "Fan " -0x9b6d: "Yuan " -0x9b6e: "Bi " -0x9b6f: "Lu " -0x9b70: "Wen " -0x9b71: "Hu " -0x9b72: "Lu " -0x9b73: "Za " -0x9b74: "Fang " -0x9b75: "Fen " -0x9b76: "Na " -0x9b77: "You " -0x9b78: "Namazu " -0x9b79: "Todo " -0x9b7a: "He " -0x9b7b: "Xia " -0x9b7c: "Qu " -0x9b7d: "Han " -0x9b7e: "Pi " -0x9b7f: "Ling " -0x9b80: "Tuo " -0x9b81: "Bo " -0x9b82: "Qiu " -0x9b83: "Ping " -0x9b84: "Fu " -0x9b85: "Bi " -0x9b86: "Ji " -0x9b87: "Wei " -0x9b88: "Ju " -0x9b89: "Diao " -0x9b8a: "Bo " -0x9b8b: "You " -0x9b8c: "Gun " -0x9b8d: "Pi " -0x9b8e: "Nian " -0x9b8f: "Xing " -0x9b90: "Tai " -0x9b91: "Bao " -0x9b92: "Fu " -0x9b93: "Zha " -0x9b94: "Ju " -0x9b95: "Gu " -0x9b96: "Kajika " -0x9b97: "Tong " -0x9b98: "[?] " -0x9b99: "Ta " -0x9b9a: "Jie " -0x9b9b: "Shu " -0x9b9c: "Hou " -0x9b9d: "Xiang " -0x9b9e: "Er " -0x9b9f: "An " -0x9ba0: "Wei " -0x9ba1: "Tiao " -0x9ba2: "Zhu " -0x9ba3: "Yin " -0x9ba4: "Lie " -0x9ba5: "Luo " -0x9ba6: "Tong " -0x9ba7: "Yi " -0x9ba8: "Qi " -0x9ba9: "Bing " -0x9baa: "Wei " -0x9bab: "Jiao " -0x9bac: "Bu " -0x9bad: "Gui " -0x9bae: "Xian " -0x9baf: "Ge " -0x9bb0: "Hui " -0x9bb1: "Bora " -0x9bb2: "Mate " -0x9bb3: "Kao " -0x9bb4: "Gori " -0x9bb5: "Duo " -0x9bb6: "Jun " -0x9bb7: "Ti " -0x9bb8: "Man " -0x9bb9: "Xiao " -0x9bba: "Za " -0x9bbb: "Sha " -0x9bbc: "Qin " -0x9bbd: "Yu " -0x9bbe: "Nei " -0x9bbf: "Zhe " -0x9bc0: "Gun " -0x9bc1: "Geng " -0x9bc2: "Su " -0x9bc3: "Wu " -0x9bc4: "Qiu " -0x9bc5: "Ting " -0x9bc6: "Fu " -0x9bc7: "Wan " -0x9bc8: "You " -0x9bc9: "Li " -0x9bca: "Sha " -0x9bcb: "Sha " -0x9bcc: "Gao " -0x9bcd: "Meng " -0x9bce: "Ugui " -0x9bcf: "Asari " -0x9bd0: "Subashiri " -0x9bd1: "Kazunoko " -0x9bd2: "Yong " -0x9bd3: "Ni " -0x9bd4: "Zi " -0x9bd5: "Qi " -0x9bd6: "Qing " -0x9bd7: "Xiang " -0x9bd8: "Nei " -0x9bd9: "Chun " -0x9bda: "Ji " -0x9bdb: "Diao " -0x9bdc: "Qie " -0x9bdd: "Gu " -0x9bde: "Zhou " -0x9bdf: "Dong " -0x9be0: "Lai " -0x9be1: "Fei " -0x9be2: "Ni " -0x9be3: "Yi " -0x9be4: "Kun " -0x9be5: "Lu " -0x9be6: "Jiu " -0x9be7: "Chang " -0x9be8: "Jing " -0x9be9: "Lun " -0x9bea: "Ling " -0x9beb: "Zou " -0x9bec: "Li " -0x9bed: "Meng " -0x9bee: "Zong " -0x9bef: "Zhi " -0x9bf0: "Nian " -0x9bf1: "Shachi " -0x9bf2: "Dojou " -0x9bf3: "Sukesou " -0x9bf4: "Shi " -0x9bf5: "Shen " -0x9bf6: "Hun " -0x9bf7: "Shi " -0x9bf8: "Hou " -0x9bf9: "Xing " -0x9bfa: "Zhu " -0x9bfb: "La " -0x9bfc: "Zong " -0x9bfd: "Ji " -0x9bfe: "Bian " -0x9bff: "Bian " -/* x09c */ -0x9c00: "Huan " -0x9c01: "Quan " -0x9c02: "Ze " -0x9c03: "Wei " -0x9c04: "Wei " -0x9c05: "Yu " -0x9c06: "Qun " -0x9c07: "Rou " -0x9c08: "Die " -0x9c09: "Huang " -0x9c0a: "Lian " -0x9c0b: "Yan " -0x9c0c: "Qiu " -0x9c0d: "Qiu " -0x9c0e: "Jian " -0x9c0f: "Bi " -0x9c10: "E " -0x9c11: "Yang " -0x9c12: "Fu " -0x9c13: "Sai " -0x9c14: "Jian " -0x9c15: "Xia " -0x9c16: "Tuo " -0x9c17: "Hu " -0x9c18: "Muroaji " -0x9c19: "Ruo " -0x9c1a: "Haraka " -0x9c1b: "Wen " -0x9c1c: "Jian " -0x9c1d: "Hao " -0x9c1e: "Wu " -0x9c1f: "Fang " -0x9c20: "Sao " -0x9c21: "Liu " -0x9c22: "Ma " -0x9c23: "Shi " -0x9c24: "Shi " -0x9c25: "Yin " -0x9c26: "Z " -0x9c27: "Teng " -0x9c28: "Ta " -0x9c29: "Yao " -0x9c2a: "Ge " -0x9c2b: "Rong " -0x9c2c: "Qian " -0x9c2d: "Qi " -0x9c2e: "Wen " -0x9c2f: "Ruo " -0x9c30: "Hatahata " -0x9c31: "Lian " -0x9c32: "Ao " -0x9c33: "Le " -0x9c34: "Hui " -0x9c35: "Min " -0x9c36: "Ji " -0x9c37: "Tiao " -0x9c38: "Qu " -0x9c39: "Jian " -0x9c3a: "Sao " -0x9c3b: "Man " -0x9c3c: "Xi " -0x9c3d: "Qiu " -0x9c3e: "Biao " -0x9c3f: "Ji " -0x9c40: "Ji " -0x9c41: "Zhu " -0x9c42: "Jiang " -0x9c43: "Qiu " -0x9c44: "Zhuan " -0x9c45: "Yong " -0x9c46: "Zhang " -0x9c47: "Kang " -0x9c48: "Xue " -0x9c49: "Bie " -0x9c4a: "Jue " -0x9c4b: "Qu " -0x9c4c: "Xiang " -0x9c4d: "Bo " -0x9c4e: "Jiao " -0x9c4f: "Xun " -0x9c50: "Su " -0x9c51: "Huang " -0x9c52: "Zun " -0x9c53: "Shan " -0x9c54: "Shan " -0x9c55: "Fan " -0x9c56: "Jue " -0x9c57: "Lin " -0x9c58: "Xun " -0x9c59: "Miao " -0x9c5a: "Xi " -0x9c5b: "Eso " -0x9c5c: "Kyou " -0x9c5d: "Fen " -0x9c5e: "Guan " -0x9c5f: "Hou " -0x9c60: "Kuai " -0x9c61: "Zei " -0x9c62: "Sao " -0x9c63: "Zhan " -0x9c64: "Gan " -0x9c65: "Gui " -0x9c66: "Sheng " -0x9c67: "Li " -0x9c68: "Chang " -0x9c69: "Hatahata " -0x9c6a: "Shiira " -0x9c6b: "Mutsu " -0x9c6c: "Ru " -0x9c6d: "Ji " -0x9c6e: "Xu " -0x9c6f: "Huo " -0x9c70: "Shiira " -0x9c71: "Li " -0x9c72: "Lie " -0x9c73: "Li " -0x9c74: "Mie " -0x9c75: "Zhen " -0x9c76: "Xiang " -0x9c77: "E " -0x9c78: "Lu " -0x9c79: "Guan " -0x9c7a: "Li " -0x9c7b: "Xian " -0x9c7c: "Yu " -0x9c7d: "Dao " -0x9c7e: "Ji " -0x9c7f: "You " -0x9c80: "Tun " -0x9c81: "Lu " -0x9c82: "Fang " -0x9c83: "Ba " -0x9c84: "He " -0x9c85: "Bo " -0x9c86: "Ping " -0x9c87: "Nian " -0x9c88: "Lu " -0x9c89: "You " -0x9c8a: "Zha " -0x9c8b: "Fu " -0x9c8c: "Bo " -0x9c8d: "Bao " -0x9c8e: "Hou " -0x9c8f: "Pi " -0x9c90: "Tai " -0x9c91: "Gui " -0x9c92: "Jie " -0x9c93: "Kao " -0x9c94: "Wei " -0x9c95: "Er " -0x9c96: "Tong " -0x9c97: "Ze " -0x9c98: "Hou " -0x9c99: "Kuai " -0x9c9a: "Ji " -0x9c9b: "Jiao " -0x9c9c: "Xian " -0x9c9d: "Za " -0x9c9e: "Xiang " -0x9c9f: "Xun " -0x9ca0: "Geng " -0x9ca1: "Li " -0x9ca2: "Lian " -0x9ca3: "Jian " -0x9ca4: "Li " -0x9ca5: "Shi " -0x9ca6: "Tiao " -0x9ca7: "Gun " -0x9ca8: "Sha " -0x9ca9: "Wan " -0x9caa: "Jun " -0x9cab: "Ji " -0x9cac: "Yong " -0x9cad: "Qing " -0x9cae: "Ling " -0x9caf: "Qi " -0x9cb0: "Zou " -0x9cb1: "Fei " -0x9cb2: "Kun " -0x9cb3: "Chang " -0x9cb4: "Gu " -0x9cb5: "Ni " -0x9cb6: "Nian " -0x9cb7: "Diao " -0x9cb8: "Jing " -0x9cb9: "Shen " -0x9cba: "Shi " -0x9cbb: "Zi " -0x9cbc: "Fen " -0x9cbd: "Die " -0x9cbe: "Bi " -0x9cbf: "Chang " -0x9cc0: "Shi " -0x9cc1: "Wen " -0x9cc2: "Wei " -0x9cc3: "Sai " -0x9cc4: "E " -0x9cc5: "Qiu " -0x9cc6: "Fu " -0x9cc7: "Huang " -0x9cc8: "Quan " -0x9cc9: "Jiang " -0x9cca: "Bian " -0x9ccb: "Sao " -0x9ccc: "Ao " -0x9ccd: "Qi " -0x9cce: "Ta " -0x9ccf: "Yin " -0x9cd0: "Yao " -0x9cd1: "Fang " -0x9cd2: "Jian " -0x9cd3: "Le " -0x9cd4: "Biao " -0x9cd5: "Xue " -0x9cd6: "Bie " -0x9cd7: "Man " -0x9cd8: "Min " -0x9cd9: "Yong " -0x9cda: "Wei " -0x9cdb: "Xi " -0x9cdc: "Jue " -0x9cdd: "Shan " -0x9cde: "Lin " -0x9cdf: "Zun " -0x9ce0: "Huo " -0x9ce1: "Gan " -0x9ce2: "Li " -0x9ce3: "Zhan " -0x9ce4: "Guan " -0x9ce5: "Niao " -0x9ce6: "Yi " -0x9ce7: "Fu " -0x9ce8: "Li " -0x9ce9: "Jiu " -0x9cea: "Bu " -0x9ceb: "Yan " -0x9cec: "Fu " -0x9ced: "Diao " -0x9cee: "Ji " -0x9cef: "Feng " -0x9cf0: "Nio " -0x9cf1: "Gan " -0x9cf2: "Shi " -0x9cf3: "Feng " -0x9cf4: "Ming " -0x9cf5: "Bao " -0x9cf6: "Yuan " -0x9cf7: "Zhi " -0x9cf8: "Hu " -0x9cf9: "Qin " -0x9cfa: "Fu " -0x9cfb: "Fen " -0x9cfc: "Wen " -0x9cfd: "Jian " -0x9cfe: "Shi " -0x9cff: "Yu " -/* x09d */ -0x9d00: "Fou " -0x9d01: "Yiao " -0x9d02: "Jue " -0x9d03: "Jue " -0x9d04: "Pi " -0x9d05: "Huan " -0x9d06: "Zhen " -0x9d07: "Bao " -0x9d08: "Yan " -0x9d09: "Ya " -0x9d0a: "Zheng " -0x9d0b: "Fang " -0x9d0c: "Feng " -0x9d0d: "Wen " -0x9d0e: "Ou " -0x9d0f: "Te " -0x9d10: "Jia " -0x9d11: "Nu " -0x9d12: "Ling " -0x9d13: "Mie " -0x9d14: "Fu " -0x9d15: "Tuo " -0x9d16: "Wen " -0x9d17: "Li " -0x9d18: "Bian " -0x9d19: "Zhi " -0x9d1a: "Ge " -0x9d1b: "Yuan " -0x9d1c: "Zi " -0x9d1d: "Qu " -0x9d1e: "Xiao " -0x9d1f: "Zhi " -0x9d20: "Dan " -0x9d21: "Ju " -0x9d22: "You " -0x9d23: "Gu " -0x9d24: "Zhong " -0x9d25: "Yu " -0x9d26: "Yang " -0x9d27: "Rong " -0x9d28: "Ya " -0x9d29: "Tie " -0x9d2a: "Yu " -0x9d2b: "Shigi " -0x9d2c: "Ying " -0x9d2d: "Zhui " -0x9d2e: "Wu " -0x9d2f: "Er " -0x9d30: "Gua " -0x9d31: "Ai " -0x9d32: "Zhi " -0x9d33: "Yan " -0x9d34: "Heng " -0x9d35: "Jiao " -0x9d36: "Ji " -0x9d37: "Lie " -0x9d38: "Zhu " -0x9d39: "Ren " -0x9d3a: "Yi " -0x9d3b: "Hong " -0x9d3c: "Luo " -0x9d3d: "Ru " -0x9d3e: "Mou " -0x9d3f: "Ge " -0x9d40: "Ren " -0x9d41: "Jiao " -0x9d42: "Xiu " -0x9d43: "Zhou " -0x9d44: "Zhi " -0x9d45: "Luo " -0x9d46: "Chidori " -0x9d47: "Toki " -0x9d48: "Ten " -0x9d49: "Luan " -0x9d4a: "Jia " -0x9d4b: "Ji " -0x9d4c: "Yu " -0x9d4d: "Huan " -0x9d4e: "Tuo " -0x9d4f: "Bu " -0x9d50: "Wu " -0x9d51: "Juan " -0x9d52: "Yu " -0x9d53: "Bo " -0x9d54: "Xun " -0x9d55: "Xun " -0x9d56: "Bi " -0x9d57: "Xi " -0x9d58: "Jun " -0x9d59: "Ju " -0x9d5a: "Tu " -0x9d5b: "Jing " -0x9d5c: "Ti " -0x9d5d: "E " -0x9d5e: "E " -0x9d5f: "Kuang " -0x9d60: "Hu " -0x9d61: "Wu " -0x9d62: "Shen " -0x9d63: "Lai " -0x9d64: "Ikaruga " -0x9d65: "Kakesu " -0x9d66: "Lu " -0x9d67: "Ping " -0x9d68: "Shu " -0x9d69: "Fu " -0x9d6a: "An " -0x9d6b: "Zhao " -0x9d6c: "Peng " -0x9d6d: "Qin " -0x9d6e: "Qian " -0x9d6f: "Bei " -0x9d70: "Diao " -0x9d71: "Lu " -0x9d72: "Que " -0x9d73: "Jian " -0x9d74: "Ju " -0x9d75: "Tu " -0x9d76: "Ya " -0x9d77: "Yuan " -0x9d78: "Qi " -0x9d79: "Li " -0x9d7a: "Ye " -0x9d7b: "Zhui " -0x9d7c: "Kong " -0x9d7d: "Zhui " -0x9d7e: "Kun " -0x9d7f: "Sheng " -0x9d80: "Qi " -0x9d81: "Jing " -0x9d82: "Yi " -0x9d83: "Yi " -0x9d84: "Jing " -0x9d85: "Zi " -0x9d86: "Lai " -0x9d87: "Dong " -0x9d88: "Qi " -0x9d89: "Chun " -0x9d8a: "Geng " -0x9d8b: "Ju " -0x9d8c: "Qu " -0x9d8d: "Isuka " -0x9d8e: "Kikuitadaki " -0x9d8f: "Ji " -0x9d90: "Shu " -0x9d91: "[?] " -0x9d92: "Chi " -0x9d93: "Miao " -0x9d94: "Rou " -0x9d95: "An " -0x9d96: "Qiu " -0x9d97: "Ti " -0x9d98: "Hu " -0x9d99: "Ti " -0x9d9a: "E " -0x9d9b: "Jie " -0x9d9c: "Mao " -0x9d9d: "Fu " -0x9d9e: "Chun " -0x9d9f: "Tu " -0x9da0: "Yan " -0x9da1: "He " -0x9da2: "Yuan " -0x9da3: "Pian " -0x9da4: "Yun " -0x9da5: "Mei " -0x9da6: "Hu " -0x9da7: "Ying " -0x9da8: "Dun " -0x9da9: "Mu " -0x9daa: "Ju " -0x9dab: "Tsugumi " -0x9dac: "Cang " -0x9dad: "Fang " -0x9dae: "Gu " -0x9daf: "Ying " -0x9db0: "Yuan " -0x9db1: "Xuan " -0x9db2: "Weng " -0x9db3: "Shi " -0x9db4: "He " -0x9db5: "Chu " -0x9db6: "Tang " -0x9db7: "Xia " -0x9db8: "Ruo " -0x9db9: "Liu " -0x9dba: "Ji " -0x9dbb: "Gu " -0x9dbc: "Jian " -0x9dbd: "Zhun " -0x9dbe: "Han " -0x9dbf: "Zi " -0x9dc0: "Zi " -0x9dc1: "Ni " -0x9dc2: "Yao " -0x9dc3: "Yan " -0x9dc4: "Ji " -0x9dc5: "Li " -0x9dc6: "Tian " -0x9dc7: "Kou " -0x9dc8: "Ti " -0x9dc9: "Ti " -0x9dca: "Ni " -0x9dcb: "Tu " -0x9dcc: "Ma " -0x9dcd: "Jiao " -0x9dce: "Gao " -0x9dcf: "Tian " -0x9dd0: "Chen " -0x9dd1: "Li " -0x9dd2: "Zhuan " -0x9dd3: "Zhe " -0x9dd4: "Ao " -0x9dd5: "Yao " -0x9dd6: "Yi " -0x9dd7: "Ou " -0x9dd8: "Chi " -0x9dd9: "Zhi " -0x9dda: "Liao " -0x9ddb: "Rong " -0x9ddc: "Lou " -0x9ddd: "Bi " -0x9dde: "Shuang " -0x9ddf: "Zhuo " -0x9de0: "Yu " -0x9de1: "Wu " -0x9de2: "Jue " -0x9de3: "Yin " -0x9de4: "Quan " -0x9de5: "Si " -0x9de6: "Jiao " -0x9de7: "Yi " -0x9de8: "Hua " -0x9de9: "Bi " -0x9dea: "Ying " -0x9deb: "Su " -0x9dec: "Huang " -0x9ded: "Fan " -0x9dee: "Jiao " -0x9def: "Liao " -0x9df0: "Yan " -0x9df1: "Kao " -0x9df2: "Jiu " -0x9df3: "Xian " -0x9df4: "Xian " -0x9df5: "Tu " -0x9df6: "Mai " -0x9df7: "Zun " -0x9df8: "Yu " -0x9df9: "Ying " -0x9dfa: "Lu " -0x9dfb: "Tuan " -0x9dfc: "Xian " -0x9dfd: "Xue " -0x9dfe: "Yi " -0x9dff: "Pi " -/* x09e */ -0x9e00: "Shu " -0x9e01: "Luo " -0x9e02: "Qi " -0x9e03: "Yi " -0x9e04: "Ji " -0x9e05: "Zhe " -0x9e06: "Yu " -0x9e07: "Zhan " -0x9e08: "Ye " -0x9e09: "Yang " -0x9e0a: "Pi " -0x9e0b: "Ning " -0x9e0c: "Huo " -0x9e0d: "Mi " -0x9e0e: "Ying " -0x9e0f: "Meng " -0x9e10: "Di " -0x9e11: "Yue " -0x9e12: "Yu " -0x9e13: "Lei " -0x9e14: "Bao " -0x9e15: "Lu " -0x9e16: "He " -0x9e17: "Long " -0x9e18: "Shuang " -0x9e19: "Yue " -0x9e1a: "Ying " -0x9e1b: "Guan " -0x9e1c: "Qu " -0x9e1d: "Li " -0x9e1e: "Luan " -0x9e1f: "Niao " -0x9e20: "Jiu " -0x9e21: "Ji " -0x9e22: "Yuan " -0x9e23: "Ming " -0x9e24: "Shi " -0x9e25: "Ou " -0x9e26: "Ya " -0x9e27: "Cang " -0x9e28: "Bao " -0x9e29: "Zhen " -0x9e2a: "Gu " -0x9e2b: "Dong " -0x9e2c: "Lu " -0x9e2d: "Ya " -0x9e2e: "Xiao " -0x9e2f: "Yang " -0x9e30: "Ling " -0x9e31: "Zhi " -0x9e32: "Qu " -0x9e33: "Yuan " -0x9e34: "Xue " -0x9e35: "Tuo " -0x9e36: "Si " -0x9e37: "Zhi " -0x9e38: "Er " -0x9e39: "Gua " -0x9e3a: "Xiu " -0x9e3b: "Heng " -0x9e3c: "Zhou " -0x9e3d: "Ge " -0x9e3e: "Luan " -0x9e3f: "Hong " -0x9e40: "Wu " -0x9e41: "Bo " -0x9e42: "Li " -0x9e43: "Juan " -0x9e44: "Hu " -0x9e45: "E " -0x9e46: "Yu " -0x9e47: "Xian " -0x9e48: "Ti " -0x9e49: "Wu " -0x9e4a: "Que " -0x9e4b: "Miao " -0x9e4c: "An " -0x9e4d: "Kun " -0x9e4e: "Bei " -0x9e4f: "Peng " -0x9e50: "Qian " -0x9e51: "Chun " -0x9e52: "Geng " -0x9e53: "Yuan " -0x9e54: "Su " -0x9e55: "Hu " -0x9e56: "He " -0x9e57: "E " -0x9e58: "Gu " -0x9e59: "Qiu " -0x9e5a: "Zi " -0x9e5b: "Mei " -0x9e5c: "Mu " -0x9e5d: "Ni " -0x9e5e: "Yao " -0x9e5f: "Weng " -0x9e60: "Liu " -0x9e61: "Ji " -0x9e62: "Ni " -0x9e63: "Jian " -0x9e64: "He " -0x9e65: "Yi " -0x9e66: "Ying " -0x9e67: "Zhe " -0x9e68: "Liao " -0x9e69: "Liao " -0x9e6a: "Jiao " -0x9e6b: "Jiu " -0x9e6c: "Yu " -0x9e6d: "Lu " -0x9e6e: "Xuan " -0x9e6f: "Zhan " -0x9e70: "Ying " -0x9e71: "Huo " -0x9e72: "Meng " -0x9e73: "Guan " -0x9e74: "Shuang " -0x9e75: "Lu " -0x9e76: "Jin " -0x9e77: "Ling " -0x9e78: "Jian " -0x9e79: "Xian " -0x9e7a: "Cuo " -0x9e7b: "Jian " -0x9e7c: "Jian " -0x9e7d: "Yan " -0x9e7e: "Cuo " -0x9e7f: "Lu " -0x9e80: "You " -0x9e81: "Cu " -0x9e82: "Ji " -0x9e83: "Biao " -0x9e84: "Cu " -0x9e85: "Biao " -0x9e86: "Zhu " -0x9e87: "Jun " -0x9e88: "Zhu " -0x9e89: "Jian " -0x9e8a: "Mi " -0x9e8b: "Mi " -0x9e8c: "Wu " -0x9e8d: "Liu " -0x9e8e: "Chen " -0x9e8f: "Jun " -0x9e90: "Lin " -0x9e91: "Ni " -0x9e92: "Qi " -0x9e93: "Lu " -0x9e94: "Jiu " -0x9e95: "Jun " -0x9e96: "Jing " -0x9e97: "Li " -0x9e98: "Xiang " -0x9e99: "Yan " -0x9e9a: "Jia " -0x9e9b: "Mi " -0x9e9c: "Li " -0x9e9d: "She " -0x9e9e: "Zhang " -0x9e9f: "Lin " -0x9ea0: "Jing " -0x9ea1: "Ji " -0x9ea2: "Ling " -0x9ea3: "Yan " -0x9ea4: "Cu " -0x9ea5: "Mai " -0x9ea6: "Mai " -0x9ea7: "Ge " -0x9ea8: "Chao " -0x9ea9: "Fu " -0x9eaa: "Mian " -0x9eab: "Mian " -0x9eac: "Fu " -0x9ead: "Pao " -0x9eae: "Qu " -0x9eaf: "Qu " -0x9eb0: "Mou " -0x9eb1: "Fu " -0x9eb2: "Xian " -0x9eb3: "Lai " -0x9eb4: "Qu " -0x9eb5: "Mian " -0x9eb6: "[?] " -0x9eb7: "Feng " -0x9eb8: "Fu " -0x9eb9: "Qu " -0x9eba: "Mian " -0x9ebb: "Ma " -0x9ebc: "Mo " -0x9ebd: "Mo " -0x9ebe: "Hui " -0x9ebf: "Ma " -0x9ec0: "Zou " -0x9ec1: "Nen " -0x9ec2: "Fen " -0x9ec3: "Huang " -0x9ec4: "Huang " -0x9ec5: "Jin " -0x9ec6: "Guang " -0x9ec7: "Tian " -0x9ec8: "Tou " -0x9ec9: "Heng " -0x9eca: "Xi " -0x9ecb: "Kuang " -0x9ecc: "Heng " -0x9ecd: "Shu " -0x9ece: "Li " -0x9ecf: "Nian " -0x9ed0: "Chi " -0x9ed1: "Hei " -0x9ed2: "Hei " -0x9ed3: "Yi " -0x9ed4: "Qian " -0x9ed5: "Dan " -0x9ed6: "Xi " -0x9ed7: "Tuan " -0x9ed8: "Mo " -0x9ed9: "Mo " -0x9eda: "Qian " -0x9edb: "Dai " -0x9edc: "Chu " -0x9edd: "You " -0x9ede: "Dian " -0x9edf: "Yi " -0x9ee0: "Xia " -0x9ee1: "Yan " -0x9ee2: "Qu " -0x9ee3: "Mei " -0x9ee4: "Yan " -0x9ee5: "Jing " -0x9ee6: "Yu " -0x9ee7: "Li " -0x9ee8: "Dang " -0x9ee9: "Du " -0x9eea: "Can " -0x9eeb: "Yin " -0x9eec: "An " -0x9eed: "Yan " -0x9eee: "Tan " -0x9eef: "An " -0x9ef0: "Zhen " -0x9ef1: "Dai " -0x9ef2: "Can " -0x9ef3: "Yi " -0x9ef4: "Mei " -0x9ef5: "Dan " -0x9ef6: "Yan " -0x9ef7: "Du " -0x9ef8: "Lu " -0x9ef9: "Zhi " -0x9efa: "Fen " -0x9efb: "Fu " -0x9efc: "Fu " -0x9efd: "Min " -0x9efe: "Min " -0x9eff: "Yuan " -/* x09f */ -0x9f00: "Cu " -0x9f01: "Qu " -0x9f02: "Chao " -0x9f03: "Wa " -0x9f04: "Zhu " -0x9f05: "Zhi " -0x9f06: "Mang " -0x9f07: "Ao " -0x9f08: "Bie " -0x9f09: "Tuo " -0x9f0a: "Bi " -0x9f0b: "Yuan " -0x9f0c: "Chao " -0x9f0d: "Tuo " -0x9f0e: "Ding " -0x9f0f: "Mi " -0x9f10: "Nai " -0x9f11: "Ding " -0x9f12: "Zi " -0x9f13: "Gu " -0x9f14: "Gu " -0x9f15: "Dong " -0x9f16: "Fen " -0x9f17: "Tao " -0x9f18: "Yuan " -0x9f19: "Pi " -0x9f1a: "Chang " -0x9f1b: "Gao " -0x9f1c: "Qi " -0x9f1d: "Yuan " -0x9f1e: "Tang " -0x9f1f: "Teng " -0x9f20: "Shu " -0x9f21: "Shu " -0x9f22: "Fen " -0x9f23: "Fei " -0x9f24: "Wen " -0x9f25: "Ba " -0x9f26: "Diao " -0x9f27: "Tuo " -0x9f28: "Tong " -0x9f29: "Qu " -0x9f2a: "Sheng " -0x9f2b: "Shi " -0x9f2c: "You " -0x9f2d: "Shi " -0x9f2e: "Ting " -0x9f2f: "Wu " -0x9f30: "Nian " -0x9f31: "Jing " -0x9f32: "Hun " -0x9f33: "Ju " -0x9f34: "Yan " -0x9f35: "Tu " -0x9f36: "Ti " -0x9f37: "Xi " -0x9f38: "Xian " -0x9f39: "Yan " -0x9f3a: "Lei " -0x9f3b: "Bi " -0x9f3c: "Yao " -0x9f3d: "Qiu " -0x9f3e: "Han " -0x9f3f: "Wu " -0x9f40: "Wu " -0x9f41: "Hou " -0x9f42: "Xi " -0x9f43: "Ge " -0x9f44: "Zha " -0x9f45: "Xiu " -0x9f46: "Weng " -0x9f47: "Zha " -0x9f48: "Nong " -0x9f49: "Nang " -0x9f4a: "Qi " -0x9f4b: "Zhai " -0x9f4c: "Ji " -0x9f4d: "Zi " -0x9f4e: "Ji " -0x9f4f: "Ji " -0x9f50: "Qi " -0x9f51: "Ji " -0x9f52: "Chi " -0x9f53: "Chen " -0x9f54: "Chen " -0x9f55: "He " -0x9f56: "Ya " -0x9f57: "Ken " -0x9f58: "Xie " -0x9f59: "Pao " -0x9f5a: "Cuo " -0x9f5b: "Shi " -0x9f5c: "Zi " -0x9f5d: "Chi " -0x9f5e: "Nian " -0x9f5f: "Ju " -0x9f60: "Tiao " -0x9f61: "Ling " -0x9f62: "Ling " -0x9f63: "Chu " -0x9f64: "Quan " -0x9f65: "Xie " -0x9f66: "Ken " -0x9f67: "Nie " -0x9f68: "Jiu " -0x9f69: "Yao " -0x9f6a: "Chuo " -0x9f6b: "Kun " -0x9f6c: "Yu " -0x9f6d: "Chu " -0x9f6e: "Yi " -0x9f6f: "Ni " -0x9f70: "Cuo " -0x9f71: "Zou " -0x9f72: "Qu " -0x9f73: "Nen " -0x9f74: "Xian " -0x9f75: "Ou " -0x9f76: "E " -0x9f77: "Wo " -0x9f78: "Yi " -0x9f79: "Chuo " -0x9f7a: "Zou " -0x9f7b: "Dian " -0x9f7c: "Chu " -0x9f7d: "Jin " -0x9f7e: "Ya " -0x9f7f: "Chi " -0x9f80: "Chen " -0x9f81: "He " -0x9f82: "Ken " -0x9f83: "Ju " -0x9f84: "Ling " -0x9f85: "Pao " -0x9f86: "Tiao " -0x9f87: "Zi " -0x9f88: "Ken " -0x9f89: "Yu " -0x9f8a: "Chuo " -0x9f8b: "Qu " -0x9f8c: "Wo " -0x9f8d: "Long " -0x9f8e: "Pang " -0x9f8f: "Gong " -0x9f90: "Pang " -0x9f91: "Yan " -0x9f92: "Long " -0x9f93: "Long " -0x9f94: "Gong " -0x9f95: "Kan " -0x9f96: "Ta " -0x9f97: "Ling " -0x9f98: "Ta " -0x9f99: "Long " -0x9f9a: "Gong " -0x9f9b: "Kan " -0x9f9c: "Gui " -0x9f9d: "Qiu " -0x9f9e: "Bie " -0x9f9f: "Gui " -0x9fa0: "Yue " -0x9fa1: "Chui " -0x9fa2: "He " -0x9fa3: "Jue " -0x9fa4: "Xie " -0x9fa5: "Yu " -0x9fa6: "[?]" -0x9fa7: "[?]" -0x9fa8: "[?]" -0x9fa9: "[?]" -0x9faa: "[?]" -0x9fab: "[?]" -0x9fac: "[?]" -0x9fad: "[?]" -0x9fae: "[?]" -0x9faf: "[?]" -0x9fb0: "[?]" -0x9fb1: "[?]" -0x9fb2: "[?]" -0x9fb3: "[?]" -0x9fb4: "[?]" -0x9fb5: "[?]" -0x9fb6: "[?]" -0x9fb7: "[?]" -0x9fb8: "[?]" -0x9fb9: "[?]" -0x9fba: "[?]" -0x9fbb: "[?]" -0x9fbc: "[?]" -0x9fbd: "[?]" -0x9fbe: "[?]" -0x9fbf: "[?]" -0x9fc0: "[?]" -0x9fc1: "[?]" -0x9fc2: "[?]" -0x9fc3: "[?]" -0x9fc4: "[?]" -0x9fc5: "[?]" -0x9fc6: "[?]" -0x9fc7: "[?]" -0x9fc8: "[?]" -0x9fc9: "[?]" -0x9fca: "[?]" -0x9fcb: "[?]" -0x9fcc: "[?]" -0x9fcd: "[?]" -0x9fce: "[?]" -0x9fcf: "[?]" -0x9fd0: "[?]" -0x9fd1: "[?]" -0x9fd2: "[?]" -0x9fd3: "[?]" -0x9fd4: "[?]" -0x9fd5: "[?]" -0x9fd6: "[?]" -0x9fd7: "[?]" -0x9fd8: "[?]" -0x9fd9: "[?]" -0x9fda: "[?]" -0x9fdb: "[?]" -0x9fdc: "[?]" -0x9fdd: "[?]" -0x9fde: "[?]" -0x9fdf: "[?]" -0x9fe0: "[?]" -0x9fe1: "[?]" -0x9fe2: "[?]" -0x9fe3: "[?]" -0x9fe4: "[?]" -0x9fe5: "[?]" -0x9fe6: "[?]" -0x9fe7: "[?]" -0x9fe8: "[?]" -0x9fe9: "[?]" -0x9fea: "[?]" -0x9feb: "[?]" -0x9fec: "[?]" -0x9fed: "[?]" -0x9fee: "[?]" -0x9fef: "[?]" -0x9ff0: "[?]" -0x9ff1: "[?]" -0x9ff2: "[?]" -0x9ff3: "[?]" -0x9ff4: "[?]" -0x9ff5: "[?]" -0x9ff6: "[?]" -0x9ff7: "[?]" -0x9ff8: "[?]" -0x9ff9: "[?]" -0x9ffa: "[?]" -0x9ffb: "[?]" -0x9ffc: "[?]" -0x9ffd: "[?]" -0x9ffe: "[?]" -/* x0a0 */ -0xa000: "it" -0xa001: "ix" -0xa002: "i" -0xa003: "ip" -0xa004: "iet" -0xa005: "iex" -0xa006: "ie" -0xa007: "iep" -0xa008: "at" -0xa009: "ax" -0xa00a: "a" -0xa00b: "ap" -0xa00c: "uox" -0xa00d: "uo" -0xa00e: "uop" -0xa00f: "ot" -0xa010: "ox" -0xa011: "o" -0xa012: "op" -0xa013: "ex" -0xa014: "e" -0xa015: "wu" -0xa016: "bit" -0xa017: "bix" -0xa018: "bi" -0xa019: "bip" -0xa01a: "biet" -0xa01b: "biex" -0xa01c: "bie" -0xa01d: "biep" -0xa01e: "bat" -0xa01f: "bax" -0xa020: "ba" -0xa021: "bap" -0xa022: "buox" -0xa023: "buo" -0xa024: "buop" -0xa025: "bot" -0xa026: "box" -0xa027: "bo" -0xa028: "bop" -0xa029: "bex" -0xa02a: "be" -0xa02b: "bep" -0xa02c: "but" -0xa02d: "bux" -0xa02e: "bu" -0xa02f: "bup" -0xa030: "burx" -0xa031: "bur" -0xa032: "byt" -0xa033: "byx" -0xa034: "by" -0xa035: "byp" -0xa036: "byrx" -0xa037: "byr" -0xa038: "pit" -0xa039: "pix" -0xa03a: "pi" -0xa03b: "pip" -0xa03c: "piex" -0xa03d: "pie" -0xa03e: "piep" -0xa03f: "pat" -0xa040: "pax" -0xa041: "pa" -0xa042: "pap" -0xa043: "puox" -0xa044: "puo" -0xa045: "puop" -0xa046: "pot" -0xa047: "pox" -0xa048: "po" -0xa049: "pop" -0xa04a: "put" -0xa04b: "pux" -0xa04c: "pu" -0xa04d: "pup" -0xa04e: "purx" -0xa04f: "pur" -0xa050: "pyt" -0xa051: "pyx" -0xa052: "py" -0xa053: "pyp" -0xa054: "pyrx" -0xa055: "pyr" -0xa056: "bbit" -0xa057: "bbix" -0xa058: "bbi" -0xa059: "bbip" -0xa05a: "bbiet" -0xa05b: "bbiex" -0xa05c: "bbie" -0xa05d: "bbiep" -0xa05e: "bbat" -0xa05f: "bbax" -0xa060: "bba" -0xa061: "bbap" -0xa062: "bbuox" -0xa063: "bbuo" -0xa064: "bbuop" -0xa065: "bbot" -0xa066: "bbox" -0xa067: "bbo" -0xa068: "bbop" -0xa069: "bbex" -0xa06a: "bbe" -0xa06b: "bbep" -0xa06c: "bbut" -0xa06d: "bbux" -0xa06e: "bbu" -0xa06f: "bbup" -0xa070: "bburx" -0xa071: "bbur" -0xa072: "bbyt" -0xa073: "bbyx" -0xa074: "bby" -0xa075: "bbyp" -0xa076: "nbit" -0xa077: "nbix" -0xa078: "nbi" -0xa079: "nbip" -0xa07a: "nbiex" -0xa07b: "nbie" -0xa07c: "nbiep" -0xa07d: "nbat" -0xa07e: "nbax" -0xa07f: "nba" -0xa080: "nbap" -0xa081: "nbot" -0xa082: "nbox" -0xa083: "nbo" -0xa084: "nbop" -0xa085: "nbut" -0xa086: "nbux" -0xa087: "nbu" -0xa088: "nbup" -0xa089: "nburx" -0xa08a: "nbur" -0xa08b: "nbyt" -0xa08c: "nbyx" -0xa08d: "nby" -0xa08e: "nbyp" -0xa08f: "nbyrx" -0xa090: "nbyr" -0xa091: "hmit" -0xa092: "hmix" -0xa093: "hmi" -0xa094: "hmip" -0xa095: "hmiex" -0xa096: "hmie" -0xa097: "hmiep" -0xa098: "hmat" -0xa099: "hmax" -0xa09a: "hma" -0xa09b: "hmap" -0xa09c: "hmuox" -0xa09d: "hmuo" -0xa09e: "hmuop" -0xa09f: "hmot" -0xa0a0: "hmox" -0xa0a1: "hmo" -0xa0a2: "hmop" -0xa0a3: "hmut" -0xa0a4: "hmux" -0xa0a5: "hmu" -0xa0a6: "hmup" -0xa0a7: "hmurx" -0xa0a8: "hmur" -0xa0a9: "hmyx" -0xa0aa: "hmy" -0xa0ab: "hmyp" -0xa0ac: "hmyrx" -0xa0ad: "hmyr" -0xa0ae: "mit" -0xa0af: "mix" -0xa0b0: "mi" -0xa0b1: "mip" -0xa0b2: "miex" -0xa0b3: "mie" -0xa0b4: "miep" -0xa0b5: "mat" -0xa0b6: "max" -0xa0b7: "ma" -0xa0b8: "map" -0xa0b9: "muot" -0xa0ba: "muox" -0xa0bb: "muo" -0xa0bc: "muop" -0xa0bd: "mot" -0xa0be: "mox" -0xa0bf: "mo" -0xa0c0: "mop" -0xa0c1: "mex" -0xa0c2: "me" -0xa0c3: "mut" -0xa0c4: "mux" -0xa0c5: "mu" -0xa0c6: "mup" -0xa0c7: "murx" -0xa0c8: "mur" -0xa0c9: "myt" -0xa0ca: "myx" -0xa0cb: "my" -0xa0cc: "myp" -0xa0cd: "fit" -0xa0ce: "fix" -0xa0cf: "fi" -0xa0d0: "fip" -0xa0d1: "fat" -0xa0d2: "fax" -0xa0d3: "fa" -0xa0d4: "fap" -0xa0d5: "fox" -0xa0d6: "fo" -0xa0d7: "fop" -0xa0d8: "fut" -0xa0d9: "fux" -0xa0da: "fu" -0xa0db: "fup" -0xa0dc: "furx" -0xa0dd: "fur" -0xa0de: "fyt" -0xa0df: "fyx" -0xa0e0: "fy" -0xa0e1: "fyp" -0xa0e2: "vit" -0xa0e3: "vix" -0xa0e4: "vi" -0xa0e5: "vip" -0xa0e6: "viet" -0xa0e7: "viex" -0xa0e8: "vie" -0xa0e9: "viep" -0xa0ea: "vat" -0xa0eb: "vax" -0xa0ec: "va" -0xa0ed: "vap" -0xa0ee: "vot" -0xa0ef: "vox" -0xa0f0: "vo" -0xa0f1: "vop" -0xa0f2: "vex" -0xa0f3: "vep" -0xa0f4: "vut" -0xa0f5: "vux" -0xa0f6: "vu" -0xa0f7: "vup" -0xa0f8: "vurx" -0xa0f9: "vur" -0xa0fa: "vyt" -0xa0fb: "vyx" -0xa0fc: "vy" -0xa0fd: "vyp" -0xa0fe: "vyrx" -0xa0ff: "vyr" -/* x0a1 */ -0xa100: "dit" -0xa101: "dix" -0xa102: "di" -0xa103: "dip" -0xa104: "diex" -0xa105: "die" -0xa106: "diep" -0xa107: "dat" -0xa108: "dax" -0xa109: "da" -0xa10a: "dap" -0xa10b: "duox" -0xa10c: "duo" -0xa10d: "dot" -0xa10e: "dox" -0xa10f: "do" -0xa110: "dop" -0xa111: "dex" -0xa112: "de" -0xa113: "dep" -0xa114: "dut" -0xa115: "dux" -0xa116: "du" -0xa117: "dup" -0xa118: "durx" -0xa119: "dur" -0xa11a: "tit" -0xa11b: "tix" -0xa11c: "ti" -0xa11d: "tip" -0xa11e: "tiex" -0xa11f: "tie" -0xa120: "tiep" -0xa121: "tat" -0xa122: "tax" -0xa123: "ta" -0xa124: "tap" -0xa125: "tuot" -0xa126: "tuox" -0xa127: "tuo" -0xa128: "tuop" -0xa129: "tot" -0xa12a: "tox" -0xa12b: "to" -0xa12c: "top" -0xa12d: "tex" -0xa12e: "te" -0xa12f: "tep" -0xa130: "tut" -0xa131: "tux" -0xa132: "tu" -0xa133: "tup" -0xa134: "turx" -0xa135: "tur" -0xa136: "ddit" -0xa137: "ddix" -0xa138: "ddi" -0xa139: "ddip" -0xa13a: "ddiex" -0xa13b: "ddie" -0xa13c: "ddiep" -0xa13d: "ddat" -0xa13e: "ddax" -0xa13f: "dda" -0xa140: "ddap" -0xa141: "dduox" -0xa142: "dduo" -0xa143: "dduop" -0xa144: "ddot" -0xa145: "ddox" -0xa146: "ddo" -0xa147: "ddop" -0xa148: "ddex" -0xa149: "dde" -0xa14a: "ddep" -0xa14b: "ddut" -0xa14c: "ddux" -0xa14d: "ddu" -0xa14e: "ddup" -0xa14f: "ddurx" -0xa150: "ddur" -0xa151: "ndit" -0xa152: "ndix" -0xa153: "ndi" -0xa154: "ndip" -0xa155: "ndiex" -0xa156: "ndie" -0xa157: "ndat" -0xa158: "ndax" -0xa159: "nda" -0xa15a: "ndap" -0xa15b: "ndot" -0xa15c: "ndox" -0xa15d: "ndo" -0xa15e: "ndop" -0xa15f: "ndex" -0xa160: "nde" -0xa161: "ndep" -0xa162: "ndut" -0xa163: "ndux" -0xa164: "ndu" -0xa165: "ndup" -0xa166: "ndurx" -0xa167: "ndur" -0xa168: "hnit" -0xa169: "hnix" -0xa16a: "hni" -0xa16b: "hnip" -0xa16c: "hniet" -0xa16d: "hniex" -0xa16e: "hnie" -0xa16f: "hniep" -0xa170: "hnat" -0xa171: "hnax" -0xa172: "hna" -0xa173: "hnap" -0xa174: "hnuox" -0xa175: "hnuo" -0xa176: "hnot" -0xa177: "hnox" -0xa178: "hnop" -0xa179: "hnex" -0xa17a: "hne" -0xa17b: "hnep" -0xa17c: "hnut" -0xa17d: "nit" -0xa17e: "nix" -0xa17f: "ni" -0xa180: "nip" -0xa181: "niex" -0xa182: "nie" -0xa183: "niep" -0xa184: "nax" -0xa185: "na" -0xa186: "nap" -0xa187: "nuox" -0xa188: "nuo" -0xa189: "nuop" -0xa18a: "not" -0xa18b: "nox" -0xa18c: "no" -0xa18d: "nop" -0xa18e: "nex" -0xa18f: "ne" -0xa190: "nep" -0xa191: "nut" -0xa192: "nux" -0xa193: "nu" -0xa194: "nup" -0xa195: "nurx" -0xa196: "nur" -0xa197: "hlit" -0xa198: "hlix" -0xa199: "hli" -0xa19a: "hlip" -0xa19b: "hliex" -0xa19c: "hlie" -0xa19d: "hliep" -0xa19e: "hlat" -0xa19f: "hlax" -0xa1a0: "hla" -0xa1a1: "hlap" -0xa1a2: "hluox" -0xa1a3: "hluo" -0xa1a4: "hluop" -0xa1a5: "hlox" -0xa1a6: "hlo" -0xa1a7: "hlop" -0xa1a8: "hlex" -0xa1a9: "hle" -0xa1aa: "hlep" -0xa1ab: "hlut" -0xa1ac: "hlux" -0xa1ad: "hlu" -0xa1ae: "hlup" -0xa1af: "hlurx" -0xa1b0: "hlur" -0xa1b1: "hlyt" -0xa1b2: "hlyx" -0xa1b3: "hly" -0xa1b4: "hlyp" -0xa1b5: "hlyrx" -0xa1b6: "hlyr" -0xa1b7: "lit" -0xa1b8: "lix" -0xa1b9: "li" -0xa1ba: "lip" -0xa1bb: "liet" -0xa1bc: "liex" -0xa1bd: "lie" -0xa1be: "liep" -0xa1bf: "lat" -0xa1c0: "lax" -0xa1c1: "la" -0xa1c2: "lap" -0xa1c3: "luot" -0xa1c4: "luox" -0xa1c5: "luo" -0xa1c6: "luop" -0xa1c7: "lot" -0xa1c8: "lox" -0xa1c9: "lo" -0xa1ca: "lop" -0xa1cb: "lex" -0xa1cc: "le" -0xa1cd: "lep" -0xa1ce: "lut" -0xa1cf: "lux" -0xa1d0: "lu" -0xa1d1: "lup" -0xa1d2: "lurx" -0xa1d3: "lur" -0xa1d4: "lyt" -0xa1d5: "lyx" -0xa1d6: "ly" -0xa1d7: "lyp" -0xa1d8: "lyrx" -0xa1d9: "lyr" -0xa1da: "git" -0xa1db: "gix" -0xa1dc: "gi" -0xa1dd: "gip" -0xa1de: "giet" -0xa1df: "giex" -0xa1e0: "gie" -0xa1e1: "giep" -0xa1e2: "gat" -0xa1e3: "gax" -0xa1e4: "ga" -0xa1e5: "gap" -0xa1e6: "guot" -0xa1e7: "guox" -0xa1e8: "guo" -0xa1e9: "guop" -0xa1ea: "got" -0xa1eb: "gox" -0xa1ec: "go" -0xa1ed: "gop" -0xa1ee: "get" -0xa1ef: "gex" -0xa1f0: "ge" -0xa1f1: "gep" -0xa1f2: "gut" -0xa1f3: "gux" -0xa1f4: "gu" -0xa1f5: "gup" -0xa1f6: "gurx" -0xa1f7: "gur" -0xa1f8: "kit" -0xa1f9: "kix" -0xa1fa: "ki" -0xa1fb: "kip" -0xa1fc: "kiex" -0xa1fd: "kie" -0xa1fe: "kiep" -0xa1ff: "kat" -/* x0a2 */ -0xa200: "kax" -0xa201: "ka" -0xa202: "kap" -0xa203: "kuox" -0xa204: "kuo" -0xa205: "kuop" -0xa206: "kot" -0xa207: "kox" -0xa208: "ko" -0xa209: "kop" -0xa20a: "ket" -0xa20b: "kex" -0xa20c: "ke" -0xa20d: "kep" -0xa20e: "kut" -0xa20f: "kux" -0xa210: "ku" -0xa211: "kup" -0xa212: "kurx" -0xa213: "kur" -0xa214: "ggit" -0xa215: "ggix" -0xa216: "ggi" -0xa217: "ggiex" -0xa218: "ggie" -0xa219: "ggiep" -0xa21a: "ggat" -0xa21b: "ggax" -0xa21c: "gga" -0xa21d: "ggap" -0xa21e: "gguot" -0xa21f: "gguox" -0xa220: "gguo" -0xa221: "gguop" -0xa222: "ggot" -0xa223: "ggox" -0xa224: "ggo" -0xa225: "ggop" -0xa226: "gget" -0xa227: "ggex" -0xa228: "gge" -0xa229: "ggep" -0xa22a: "ggut" -0xa22b: "ggux" -0xa22c: "ggu" -0xa22d: "ggup" -0xa22e: "ggurx" -0xa22f: "ggur" -0xa230: "mgiex" -0xa231: "mgie" -0xa232: "mgat" -0xa233: "mgax" -0xa234: "mga" -0xa235: "mgap" -0xa236: "mguox" -0xa237: "mguo" -0xa238: "mguop" -0xa239: "mgot" -0xa23a: "mgox" -0xa23b: "mgo" -0xa23c: "mgop" -0xa23d: "mgex" -0xa23e: "mge" -0xa23f: "mgep" -0xa240: "mgut" -0xa241: "mgux" -0xa242: "mgu" -0xa243: "mgup" -0xa244: "mgurx" -0xa245: "mgur" -0xa246: "hxit" -0xa247: "hxix" -0xa248: "hxi" -0xa249: "hxip" -0xa24a: "hxiet" -0xa24b: "hxiex" -0xa24c: "hxie" -0xa24d: "hxiep" -0xa24e: "hxat" -0xa24f: "hxax" -0xa250: "hxa" -0xa251: "hxap" -0xa252: "hxuot" -0xa253: "hxuox" -0xa254: "hxuo" -0xa255: "hxuop" -0xa256: "hxot" -0xa257: "hxox" -0xa258: "hxo" -0xa259: "hxop" -0xa25a: "hxex" -0xa25b: "hxe" -0xa25c: "hxep" -0xa25d: "ngiex" -0xa25e: "ngie" -0xa25f: "ngiep" -0xa260: "ngat" -0xa261: "ngax" -0xa262: "nga" -0xa263: "ngap" -0xa264: "nguot" -0xa265: "nguox" -0xa266: "nguo" -0xa267: "ngot" -0xa268: "ngox" -0xa269: "ngo" -0xa26a: "ngop" -0xa26b: "ngex" -0xa26c: "nge" -0xa26d: "ngep" -0xa26e: "hit" -0xa26f: "hiex" -0xa270: "hie" -0xa271: "hat" -0xa272: "hax" -0xa273: "ha" -0xa274: "hap" -0xa275: "huot" -0xa276: "huox" -0xa277: "huo" -0xa278: "huop" -0xa279: "hot" -0xa27a: "hox" -0xa27b: "ho" -0xa27c: "hop" -0xa27d: "hex" -0xa27e: "he" -0xa27f: "hep" -0xa280: "wat" -0xa281: "wax" -0xa282: "wa" -0xa283: "wap" -0xa284: "wuox" -0xa285: "wuo" -0xa286: "wuop" -0xa287: "wox" -0xa288: "wo" -0xa289: "wop" -0xa28a: "wex" -0xa28b: "we" -0xa28c: "wep" -0xa28d: "zit" -0xa28e: "zix" -0xa28f: "zi" -0xa290: "zip" -0xa291: "ziex" -0xa292: "zie" -0xa293: "ziep" -0xa294: "zat" -0xa295: "zax" -0xa296: "za" -0xa297: "zap" -0xa298: "zuox" -0xa299: "zuo" -0xa29a: "zuop" -0xa29b: "zot" -0xa29c: "zox" -0xa29d: "zo" -0xa29e: "zop" -0xa29f: "zex" -0xa2a0: "ze" -0xa2a1: "zep" -0xa2a2: "zut" -0xa2a3: "zux" -0xa2a4: "zu" -0xa2a5: "zup" -0xa2a6: "zurx" -0xa2a7: "zur" -0xa2a8: "zyt" -0xa2a9: "zyx" -0xa2aa: "zy" -0xa2ab: "zyp" -0xa2ac: "zyrx" -0xa2ad: "zyr" -0xa2ae: "cit" -0xa2af: "cix" -0xa2b0: "ci" -0xa2b1: "cip" -0xa2b2: "ciet" -0xa2b3: "ciex" -0xa2b4: "cie" -0xa2b5: "ciep" -0xa2b6: "cat" -0xa2b7: "cax" -0xa2b8: "ca" -0xa2b9: "cap" -0xa2ba: "cuox" -0xa2bb: "cuo" -0xa2bc: "cuop" -0xa2bd: "cot" -0xa2be: "cox" -0xa2bf: "co" -0xa2c0: "cop" -0xa2c1: "cex" -0xa2c2: "ce" -0xa2c3: "cep" -0xa2c4: "cut" -0xa2c5: "cux" -0xa2c6: "cu" -0xa2c7: "cup" -0xa2c8: "curx" -0xa2c9: "cur" -0xa2ca: "cyt" -0xa2cb: "cyx" -0xa2cc: "cy" -0xa2cd: "cyp" -0xa2ce: "cyrx" -0xa2cf: "cyr" -0xa2d0: "zzit" -0xa2d1: "zzix" -0xa2d2: "zzi" -0xa2d3: "zzip" -0xa2d4: "zziet" -0xa2d5: "zziex" -0xa2d6: "zzie" -0xa2d7: "zziep" -0xa2d8: "zzat" -0xa2d9: "zzax" -0xa2da: "zza" -0xa2db: "zzap" -0xa2dc: "zzox" -0xa2dd: "zzo" -0xa2de: "zzop" -0xa2df: "zzex" -0xa2e0: "zze" -0xa2e1: "zzep" -0xa2e2: "zzux" -0xa2e3: "zzu" -0xa2e4: "zzup" -0xa2e5: "zzurx" -0xa2e6: "zzur" -0xa2e7: "zzyt" -0xa2e8: "zzyx" -0xa2e9: "zzy" -0xa2ea: "zzyp" -0xa2eb: "zzyrx" -0xa2ec: "zzyr" -0xa2ed: "nzit" -0xa2ee: "nzix" -0xa2ef: "nzi" -0xa2f0: "nzip" -0xa2f1: "nziex" -0xa2f2: "nzie" -0xa2f3: "nziep" -0xa2f4: "nzat" -0xa2f5: "nzax" -0xa2f6: "nza" -0xa2f7: "nzap" -0xa2f8: "nzuox" -0xa2f9: "nzuo" -0xa2fa: "nzox" -0xa2fb: "nzop" -0xa2fc: "nzex" -0xa2fd: "nze" -0xa2fe: "nzux" -0xa2ff: "nzu" -/* x0a3 */ -0xa300: "nzup" -0xa301: "nzurx" -0xa302: "nzur" -0xa303: "nzyt" -0xa304: "nzyx" -0xa305: "nzy" -0xa306: "nzyp" -0xa307: "nzyrx" -0xa308: "nzyr" -0xa309: "sit" -0xa30a: "six" -0xa30b: "si" -0xa30c: "sip" -0xa30d: "siex" -0xa30e: "sie" -0xa30f: "siep" -0xa310: "sat" -0xa311: "sax" -0xa312: "sa" -0xa313: "sap" -0xa314: "suox" -0xa315: "suo" -0xa316: "suop" -0xa317: "sot" -0xa318: "sox" -0xa319: "so" -0xa31a: "sop" -0xa31b: "sex" -0xa31c: "se" -0xa31d: "sep" -0xa31e: "sut" -0xa31f: "sux" -0xa320: "su" -0xa321: "sup" -0xa322: "surx" -0xa323: "sur" -0xa324: "syt" -0xa325: "syx" -0xa326: "sy" -0xa327: "syp" -0xa328: "syrx" -0xa329: "syr" -0xa32a: "ssit" -0xa32b: "ssix" -0xa32c: "ssi" -0xa32d: "ssip" -0xa32e: "ssiex" -0xa32f: "ssie" -0xa330: "ssiep" -0xa331: "ssat" -0xa332: "ssax" -0xa333: "ssa" -0xa334: "ssap" -0xa335: "ssot" -0xa336: "ssox" -0xa337: "sso" -0xa338: "ssop" -0xa339: "ssex" -0xa33a: "sse" -0xa33b: "ssep" -0xa33c: "ssut" -0xa33d: "ssux" -0xa33e: "ssu" -0xa33f: "ssup" -0xa340: "ssyt" -0xa341: "ssyx" -0xa342: "ssy" -0xa343: "ssyp" -0xa344: "ssyrx" -0xa345: "ssyr" -0xa346: "zhat" -0xa347: "zhax" -0xa348: "zha" -0xa349: "zhap" -0xa34a: "zhuox" -0xa34b: "zhuo" -0xa34c: "zhuop" -0xa34d: "zhot" -0xa34e: "zhox" -0xa34f: "zho" -0xa350: "zhop" -0xa351: "zhet" -0xa352: "zhex" -0xa353: "zhe" -0xa354: "zhep" -0xa355: "zhut" -0xa356: "zhux" -0xa357: "zhu" -0xa358: "zhup" -0xa359: "zhurx" -0xa35a: "zhur" -0xa35b: "zhyt" -0xa35c: "zhyx" -0xa35d: "zhy" -0xa35e: "zhyp" -0xa35f: "zhyrx" -0xa360: "zhyr" -0xa361: "chat" -0xa362: "chax" -0xa363: "cha" -0xa364: "chap" -0xa365: "chuot" -0xa366: "chuox" -0xa367: "chuo" -0xa368: "chuop" -0xa369: "chot" -0xa36a: "chox" -0xa36b: "cho" -0xa36c: "chop" -0xa36d: "chet" -0xa36e: "chex" -0xa36f: "che" -0xa370: "chep" -0xa371: "chux" -0xa372: "chu" -0xa373: "chup" -0xa374: "churx" -0xa375: "chur" -0xa376: "chyt" -0xa377: "chyx" -0xa378: "chy" -0xa379: "chyp" -0xa37a: "chyrx" -0xa37b: "chyr" -0xa37c: "rrax" -0xa37d: "rra" -0xa37e: "rruox" -0xa37f: "rruo" -0xa380: "rrot" -0xa381: "rrox" -0xa382: "rro" -0xa383: "rrop" -0xa384: "rret" -0xa385: "rrex" -0xa386: "rre" -0xa387: "rrep" -0xa388: "rrut" -0xa389: "rrux" -0xa38a: "rru" -0xa38b: "rrup" -0xa38c: "rrurx" -0xa38d: "rrur" -0xa38e: "rryt" -0xa38f: "rryx" -0xa390: "rry" -0xa391: "rryp" -0xa392: "rryrx" -0xa393: "rryr" -0xa394: "nrat" -0xa395: "nrax" -0xa396: "nra" -0xa397: "nrap" -0xa398: "nrox" -0xa399: "nro" -0xa39a: "nrop" -0xa39b: "nret" -0xa39c: "nrex" -0xa39d: "nre" -0xa39e: "nrep" -0xa39f: "nrut" -0xa3a0: "nrux" -0xa3a1: "nru" -0xa3a2: "nrup" -0xa3a3: "nrurx" -0xa3a4: "nrur" -0xa3a5: "nryt" -0xa3a6: "nryx" -0xa3a7: "nry" -0xa3a8: "nryp" -0xa3a9: "nryrx" -0xa3aa: "nryr" -0xa3ab: "shat" -0xa3ac: "shax" -0xa3ad: "sha" -0xa3ae: "shap" -0xa3af: "shuox" -0xa3b0: "shuo" -0xa3b1: "shuop" -0xa3b2: "shot" -0xa3b3: "shox" -0xa3b4: "sho" -0xa3b5: "shop" -0xa3b6: "shet" -0xa3b7: "shex" -0xa3b8: "she" -0xa3b9: "shep" -0xa3ba: "shut" -0xa3bb: "shux" -0xa3bc: "shu" -0xa3bd: "shup" -0xa3be: "shurx" -0xa3bf: "shur" -0xa3c0: "shyt" -0xa3c1: "shyx" -0xa3c2: "shy" -0xa3c3: "shyp" -0xa3c4: "shyrx" -0xa3c5: "shyr" -0xa3c6: "rat" -0xa3c7: "rax" -0xa3c8: "ra" -0xa3c9: "rap" -0xa3ca: "ruox" -0xa3cb: "ruo" -0xa3cc: "ruop" -0xa3cd: "rot" -0xa3ce: "rox" -0xa3cf: "ro" -0xa3d0: "rop" -0xa3d1: "rex" -0xa3d2: "re" -0xa3d3: "rep" -0xa3d4: "rut" -0xa3d5: "rux" -0xa3d6: "ru" -0xa3d7: "rup" -0xa3d8: "rurx" -0xa3d9: "rur" -0xa3da: "ryt" -0xa3db: "ryx" -0xa3dc: "ry" -0xa3dd: "ryp" -0xa3de: "ryrx" -0xa3df: "ryr" -0xa3e0: "jit" -0xa3e1: "jix" -0xa3e2: "ji" -0xa3e3: "jip" -0xa3e4: "jiet" -0xa3e5: "jiex" -0xa3e6: "jie" -0xa3e7: "jiep" -0xa3e8: "juot" -0xa3e9: "juox" -0xa3ea: "juo" -0xa3eb: "juop" -0xa3ec: "jot" -0xa3ed: "jox" -0xa3ee: "jo" -0xa3ef: "jop" -0xa3f0: "jut" -0xa3f1: "jux" -0xa3f2: "ju" -0xa3f3: "jup" -0xa3f4: "jurx" -0xa3f5: "jur" -0xa3f6: "jyt" -0xa3f7: "jyx" -0xa3f8: "jy" -0xa3f9: "jyp" -0xa3fa: "jyrx" -0xa3fb: "jyr" -0xa3fc: "qit" -0xa3fd: "qix" -0xa3fe: "qi" -0xa3ff: "qip" -/* x0a4 */ -0xa400: "qiet" -0xa401: "qiex" -0xa402: "qie" -0xa403: "qiep" -0xa404: "quot" -0xa405: "quox" -0xa406: "quo" -0xa407: "quop" -0xa408: "qot" -0xa409: "qox" -0xa40a: "qo" -0xa40b: "qop" -0xa40c: "qut" -0xa40d: "qux" -0xa40e: "qu" -0xa40f: "qup" -0xa410: "qurx" -0xa411: "qur" -0xa412: "qyt" -0xa413: "qyx" -0xa414: "qy" -0xa415: "qyp" -0xa416: "qyrx" -0xa417: "qyr" -0xa418: "jjit" -0xa419: "jjix" -0xa41a: "jji" -0xa41b: "jjip" -0xa41c: "jjiet" -0xa41d: "jjiex" -0xa41e: "jjie" -0xa41f: "jjiep" -0xa420: "jjuox" -0xa421: "jjuo" -0xa422: "jjuop" -0xa423: "jjot" -0xa424: "jjox" -0xa425: "jjo" -0xa426: "jjop" -0xa427: "jjut" -0xa428: "jjux" -0xa429: "jju" -0xa42a: "jjup" -0xa42b: "jjurx" -0xa42c: "jjur" -0xa42d: "jjyt" -0xa42e: "jjyx" -0xa42f: "jjy" -0xa430: "jjyp" -0xa431: "njit" -0xa432: "njix" -0xa433: "nji" -0xa434: "njip" -0xa435: "njiet" -0xa436: "njiex" -0xa437: "njie" -0xa438: "njiep" -0xa439: "njuox" -0xa43a: "njuo" -0xa43b: "njot" -0xa43c: "njox" -0xa43d: "njo" -0xa43e: "njop" -0xa43f: "njux" -0xa440: "nju" -0xa441: "njup" -0xa442: "njurx" -0xa443: "njur" -0xa444: "njyt" -0xa445: "njyx" -0xa446: "njy" -0xa447: "njyp" -0xa448: "njyrx" -0xa449: "njyr" -0xa44a: "nyit" -0xa44b: "nyix" -0xa44c: "nyi" -0xa44d: "nyip" -0xa44e: "nyiet" -0xa44f: "nyiex" -0xa450: "nyie" -0xa451: "nyiep" -0xa452: "nyuox" -0xa453: "nyuo" -0xa454: "nyuop" -0xa455: "nyot" -0xa456: "nyox" -0xa457: "nyo" -0xa458: "nyop" -0xa459: "nyut" -0xa45a: "nyux" -0xa45b: "nyu" -0xa45c: "nyup" -0xa45d: "xit" -0xa45e: "xix" -0xa45f: "xi" -0xa460: "xip" -0xa461: "xiet" -0xa462: "xiex" -0xa463: "xie" -0xa464: "xiep" -0xa465: "xuox" -0xa466: "xuo" -0xa467: "xot" -0xa468: "xox" -0xa469: "xo" -0xa46a: "xop" -0xa46b: "xyt" -0xa46c: "xyx" -0xa46d: "xy" -0xa46e: "xyp" -0xa46f: "xyrx" -0xa470: "xyr" -0xa471: "yit" -0xa472: "yix" -0xa473: "yi" -0xa474: "yip" -0xa475: "yiet" -0xa476: "yiex" -0xa477: "yie" -0xa478: "yiep" -0xa479: "yuot" -0xa47a: "yuox" -0xa47b: "yuo" -0xa47c: "yuop" -0xa47d: "yot" -0xa47e: "yox" -0xa47f: "yo" -0xa480: "yop" -0xa481: "yut" -0xa482: "yux" -0xa483: "yu" -0xa484: "yup" -0xa485: "yurx" -0xa486: "yur" -0xa487: "yyt" -0xa488: "yyx" -0xa489: "yy" -0xa48a: "yyp" -0xa48b: "yyrx" -0xa48c: "yyr" -0xa48d: "[?]" -0xa48e: "[?]" -0xa48f: "[?]" -0xa490: "Qot" -0xa491: "Li" -0xa492: "Kit" -0xa493: "Nyip" -0xa494: "Cyp" -0xa495: "Ssi" -0xa496: "Ggop" -0xa497: "Gep" -0xa498: "Mi" -0xa499: "Hxit" -0xa49a: "Lyr" -0xa49b: "Bbut" -0xa49c: "Mop" -0xa49d: "Yo" -0xa49e: "Put" -0xa49f: "Hxuo" -0xa4a0: "Tat" -0xa4a1: "Ga" -0xa4a2: "[?]" -0xa4a3: "[?]" -0xa4a4: "Ddur" -0xa4a5: "Bur" -0xa4a6: "Gguo" -0xa4a7: "Nyop" -0xa4a8: "Tu" -0xa4a9: "Op" -0xa4aa: "Jjut" -0xa4ab: "Zot" -0xa4ac: "Pyt" -0xa4ad: "Hmo" -0xa4ae: "Yit" -0xa4af: "Vur" -0xa4b0: "Shy" -0xa4b1: "Vep" -0xa4b2: "Za" -0xa4b3: "Jo" -0xa4b4: "[?]" -0xa4b5: "Jjy" -0xa4b6: "Got" -0xa4b7: "Jjie" -0xa4b8: "Wo" -0xa4b9: "Du" -0xa4ba: "Shur" -0xa4bb: "Lie" -0xa4bc: "Cy" -0xa4bd: "Cuop" -0xa4be: "Cip" -0xa4bf: "Hxop" -0xa4c0: "Shat" -0xa4c1: "[?]" -0xa4c2: "Shop" -0xa4c3: "Che" -0xa4c4: "Zziet" -0xa4c5: "[?]" -0xa4c6: "Ke" -0xa4c7: "[?]" -0xa4c8: "[?]" -0xa4c9: "[?]" -0xa4ca: "[?]" -0xa4cb: "[?]" -0xa4cc: "[?]" -0xa4cd: "[?]" -0xa4ce: "[?]" -0xa4cf: "[?]" -0xa4d0: "[?]" -0xa4d1: "[?]" -0xa4d2: "[?]" -0xa4d3: "[?]" -0xa4d4: "[?]" -0xa4d5: "[?]" -0xa4d6: "[?]" -0xa4d7: "[?]" -0xa4d8: "[?]" -0xa4d9: "[?]" -0xa4da: "[?]" -0xa4db: "[?]" -0xa4dc: "[?]" -0xa4dd: "[?]" -0xa4de: "[?]" -0xa4df: "[?]" -0xa4e0: "[?]" -0xa4e1: "[?]" -0xa4e2: "[?]" -0xa4e3: "[?]" -0xa4e4: "[?]" -0xa4e5: "[?]" -0xa4e6: "[?]" -0xa4e7: "[?]" -0xa4e8: "[?]" -0xa4e9: "[?]" -0xa4ea: "[?]" -0xa4eb: "[?]" -0xa4ec: "[?]" -0xa4ed: "[?]" -0xa4ee: "[?]" -0xa4ef: "[?]" -0xa4f0: "[?]" -0xa4f1: "[?]" -0xa4f2: "[?]" -0xa4f3: "[?]" -0xa4f4: "[?]" -0xa4f5: "[?]" -0xa4f6: "[?]" -0xa4f7: "[?]" -0xa4f8: "[?]" -0xa4f9: "[?]" -0xa4fa: "[?]" -0xa4fb: "[?]" -0xa4fc: "[?]" -0xa4fd: "[?]" -0xa4fe: "[?]" -/* x0ac */ -0xac00: "ga" -0xac01: "gag" -0xac02: "gagg" -0xac03: "gags" -0xac04: "gan" -0xac05: "ganj" -0xac06: "ganh" -0xac07: "gad" -0xac08: "gal" -0xac09: "galg" -0xac0a: "galm" -0xac0b: "galb" -0xac0c: "gals" -0xac0d: "galt" -0xac0e: "galp" -0xac0f: "galh" -0xac10: "gam" -0xac11: "gab" -0xac12: "gabs" -0xac13: "gas" -0xac14: "gass" -0xac15: "gang" -0xac16: "gaj" -0xac17: "gac" -0xac18: "gak" -0xac19: "gat" -0xac1a: "gap" -0xac1b: "gah" -0xac1c: "gae" -0xac1d: "gaeg" -0xac1e: "gaegg" -0xac1f: "gaegs" -0xac20: "gaen" -0xac21: "gaenj" -0xac22: "gaenh" -0xac23: "gaed" -0xac24: "gael" -0xac25: "gaelg" -0xac26: "gaelm" -0xac27: "gaelb" -0xac28: "gaels" -0xac29: "gaelt" -0xac2a: "gaelp" -0xac2b: "gaelh" -0xac2c: "gaem" -0xac2d: "gaeb" -0xac2e: "gaebs" -0xac2f: "gaes" -0xac30: "gaess" -0xac31: "gaeng" -0xac32: "gaej" -0xac33: "gaec" -0xac34: "gaek" -0xac35: "gaet" -0xac36: "gaep" -0xac37: "gaeh" -0xac38: "gya" -0xac39: "gyag" -0xac3a: "gyagg" -0xac3b: "gyags" -0xac3c: "gyan" -0xac3d: "gyanj" -0xac3e: "gyanh" -0xac3f: "gyad" -0xac40: "gyal" -0xac41: "gyalg" -0xac42: "gyalm" -0xac43: "gyalb" -0xac44: "gyals" -0xac45: "gyalt" -0xac46: "gyalp" -0xac47: "gyalh" -0xac48: "gyam" -0xac49: "gyab" -0xac4a: "gyabs" -0xac4b: "gyas" -0xac4c: "gyass" -0xac4d: "gyang" -0xac4e: "gyaj" -0xac4f: "gyac" -0xac50: "gyak" -0xac51: "gyat" -0xac52: "gyap" -0xac53: "gyah" -0xac54: "gyae" -0xac55: "gyaeg" -0xac56: "gyaegg" -0xac57: "gyaegs" -0xac58: "gyaen" -0xac59: "gyaenj" -0xac5a: "gyaenh" -0xac5b: "gyaed" -0xac5c: "gyael" -0xac5d: "gyaelg" -0xac5e: "gyaelm" -0xac5f: "gyaelb" -0xac60: "gyaels" -0xac61: "gyaelt" -0xac62: "gyaelp" -0xac63: "gyaelh" -0xac64: "gyaem" -0xac65: "gyaeb" -0xac66: "gyaebs" -0xac67: "gyaes" -0xac68: "gyaess" -0xac69: "gyaeng" -0xac6a: "gyaej" -0xac6b: "gyaec" -0xac6c: "gyaek" -0xac6d: "gyaet" -0xac6e: "gyaep" -0xac6f: "gyaeh" -0xac70: "geo" -0xac71: "geog" -0xac72: "geogg" -0xac73: "geogs" -0xac74: "geon" -0xac75: "geonj" -0xac76: "geonh" -0xac77: "geod" -0xac78: "geol" -0xac79: "geolg" -0xac7a: "geolm" -0xac7b: "geolb" -0xac7c: "geols" -0xac7d: "geolt" -0xac7e: "geolp" -0xac7f: "geolh" -0xac80: "geom" -0xac81: "geob" -0xac82: "geobs" -0xac83: "geos" -0xac84: "geoss" -0xac85: "geong" -0xac86: "geoj" -0xac87: "geoc" -0xac88: "geok" -0xac89: "geot" -0xac8a: "geop" -0xac8b: "geoh" -0xac8c: "ge" -0xac8d: "geg" -0xac8e: "gegg" -0xac8f: "gegs" -0xac90: "gen" -0xac91: "genj" -0xac92: "genh" -0xac93: "ged" -0xac94: "gel" -0xac95: "gelg" -0xac96: "gelm" -0xac97: "gelb" -0xac98: "gels" -0xac99: "gelt" -0xac9a: "gelp" -0xac9b: "gelh" -0xac9c: "gem" -0xac9d: "geb" -0xac9e: "gebs" -0xac9f: "ges" -0xaca0: "gess" -0xaca1: "geng" -0xaca2: "gej" -0xaca3: "gec" -0xaca4: "gek" -0xaca5: "get" -0xaca6: "gep" -0xaca7: "geh" -0xaca8: "gyeo" -0xaca9: "gyeog" -0xacaa: "gyeogg" -0xacab: "gyeogs" -0xacac: "gyeon" -0xacad: "gyeonj" -0xacae: "gyeonh" -0xacaf: "gyeod" -0xacb0: "gyeol" -0xacb1: "gyeolg" -0xacb2: "gyeolm" -0xacb3: "gyeolb" -0xacb4: "gyeols" -0xacb5: "gyeolt" -0xacb6: "gyeolp" -0xacb7: "gyeolh" -0xacb8: "gyeom" -0xacb9: "gyeob" -0xacba: "gyeobs" -0xacbb: "gyeos" -0xacbc: "gyeoss" -0xacbd: "gyeong" -0xacbe: "gyeoj" -0xacbf: "gyeoc" -0xacc0: "gyeok" -0xacc1: "gyeot" -0xacc2: "gyeop" -0xacc3: "gyeoh" -0xacc4: "gye" -0xacc5: "gyeg" -0xacc6: "gyegg" -0xacc7: "gyegs" -0xacc8: "gyen" -0xacc9: "gyenj" -0xacca: "gyenh" -0xaccb: "gyed" -0xaccc: "gyel" -0xaccd: "gyelg" -0xacce: "gyelm" -0xaccf: "gyelb" -0xacd0: "gyels" -0xacd1: "gyelt" -0xacd2: "gyelp" -0xacd3: "gyelh" -0xacd4: "gyem" -0xacd5: "gyeb" -0xacd6: "gyebs" -0xacd7: "gyes" -0xacd8: "gyess" -0xacd9: "gyeng" -0xacda: "gyej" -0xacdb: "gyec" -0xacdc: "gyek" -0xacdd: "gyet" -0xacde: "gyep" -0xacdf: "gyeh" -0xace0: "go" -0xace1: "gog" -0xace2: "gogg" -0xace3: "gogs" -0xace4: "gon" -0xace5: "gonj" -0xace6: "gonh" -0xace7: "god" -0xace8: "gol" -0xace9: "golg" -0xacea: "golm" -0xaceb: "golb" -0xacec: "gols" -0xaced: "golt" -0xacee: "golp" -0xacef: "golh" -0xacf0: "gom" -0xacf1: "gob" -0xacf2: "gobs" -0xacf3: "gos" -0xacf4: "goss" -0xacf5: "gong" -0xacf6: "goj" -0xacf7: "goc" -0xacf8: "gok" -0xacf9: "got" -0xacfa: "gop" -0xacfb: "goh" -0xacfc: "gwa" -0xacfd: "gwag" -0xacfe: "gwagg" -0xacff: "gwags" -/* x0ad */ -0xad00: "gwan" -0xad01: "gwanj" -0xad02: "gwanh" -0xad03: "gwad" -0xad04: "gwal" -0xad05: "gwalg" -0xad06: "gwalm" -0xad07: "gwalb" -0xad08: "gwals" -0xad09: "gwalt" -0xad0a: "gwalp" -0xad0b: "gwalh" -0xad0c: "gwam" -0xad0d: "gwab" -0xad0e: "gwabs" -0xad0f: "gwas" -0xad10: "gwass" -0xad11: "gwang" -0xad12: "gwaj" -0xad13: "gwac" -0xad14: "gwak" -0xad15: "gwat" -0xad16: "gwap" -0xad17: "gwah" -0xad18: "gwae" -0xad19: "gwaeg" -0xad1a: "gwaegg" -0xad1b: "gwaegs" -0xad1c: "gwaen" -0xad1d: "gwaenj" -0xad1e: "gwaenh" -0xad1f: "gwaed" -0xad20: "gwael" -0xad21: "gwaelg" -0xad22: "gwaelm" -0xad23: "gwaelb" -0xad24: "gwaels" -0xad25: "gwaelt" -0xad26: "gwaelp" -0xad27: "gwaelh" -0xad28: "gwaem" -0xad29: "gwaeb" -0xad2a: "gwaebs" -0xad2b: "gwaes" -0xad2c: "gwaess" -0xad2d: "gwaeng" -0xad2e: "gwaej" -0xad2f: "gwaec" -0xad30: "gwaek" -0xad31: "gwaet" -0xad32: "gwaep" -0xad33: "gwaeh" -0xad34: "goe" -0xad35: "goeg" -0xad36: "goegg" -0xad37: "goegs" -0xad38: "goen" -0xad39: "goenj" -0xad3a: "goenh" -0xad3b: "goed" -0xad3c: "goel" -0xad3d: "goelg" -0xad3e: "goelm" -0xad3f: "goelb" -0xad40: "goels" -0xad41: "goelt" -0xad42: "goelp" -0xad43: "goelh" -0xad44: "goem" -0xad45: "goeb" -0xad46: "goebs" -0xad47: "goes" -0xad48: "goess" -0xad49: "goeng" -0xad4a: "goej" -0xad4b: "goec" -0xad4c: "goek" -0xad4d: "goet" -0xad4e: "goep" -0xad4f: "goeh" -0xad50: "gyo" -0xad51: "gyog" -0xad52: "gyogg" -0xad53: "gyogs" -0xad54: "gyon" -0xad55: "gyonj" -0xad56: "gyonh" -0xad57: "gyod" -0xad58: "gyol" -0xad59: "gyolg" -0xad5a: "gyolm" -0xad5b: "gyolb" -0xad5c: "gyols" -0xad5d: "gyolt" -0xad5e: "gyolp" -0xad5f: "gyolh" -0xad60: "gyom" -0xad61: "gyob" -0xad62: "gyobs" -0xad63: "gyos" -0xad64: "gyoss" -0xad65: "gyong" -0xad66: "gyoj" -0xad67: "gyoc" -0xad68: "gyok" -0xad69: "gyot" -0xad6a: "gyop" -0xad6b: "gyoh" -0xad6c: "gu" -0xad6d: "gug" -0xad6e: "gugg" -0xad6f: "gugs" -0xad70: "gun" -0xad71: "gunj" -0xad72: "gunh" -0xad73: "gud" -0xad74: "gul" -0xad75: "gulg" -0xad76: "gulm" -0xad77: "gulb" -0xad78: "guls" -0xad79: "gult" -0xad7a: "gulp" -0xad7b: "gulh" -0xad7c: "gum" -0xad7d: "gub" -0xad7e: "gubs" -0xad7f: "gus" -0xad80: "guss" -0xad81: "gung" -0xad82: "guj" -0xad83: "guc" -0xad84: "guk" -0xad85: "gut" -0xad86: "gup" -0xad87: "guh" -0xad88: "gweo" -0xad89: "gweog" -0xad8a: "gweogg" -0xad8b: "gweogs" -0xad8c: "gweon" -0xad8d: "gweonj" -0xad8e: "gweonh" -0xad8f: "gweod" -0xad90: "gweol" -0xad91: "gweolg" -0xad92: "gweolm" -0xad93: "gweolb" -0xad94: "gweols" -0xad95: "gweolt" -0xad96: "gweolp" -0xad97: "gweolh" -0xad98: "gweom" -0xad99: "gweob" -0xad9a: "gweobs" -0xad9b: "gweos" -0xad9c: "gweoss" -0xad9d: "gweong" -0xad9e: "gweoj" -0xad9f: "gweoc" -0xada0: "gweok" -0xada1: "gweot" -0xada2: "gweop" -0xada3: "gweoh" -0xada4: "gwe" -0xada5: "gweg" -0xada6: "gwegg" -0xada7: "gwegs" -0xada8: "gwen" -0xada9: "gwenj" -0xadaa: "gwenh" -0xadab: "gwed" -0xadac: "gwel" -0xadad: "gwelg" -0xadae: "gwelm" -0xadaf: "gwelb" -0xadb0: "gwels" -0xadb1: "gwelt" -0xadb2: "gwelp" -0xadb3: "gwelh" -0xadb4: "gwem" -0xadb5: "gweb" -0xadb6: "gwebs" -0xadb7: "gwes" -0xadb8: "gwess" -0xadb9: "gweng" -0xadba: "gwej" -0xadbb: "gwec" -0xadbc: "gwek" -0xadbd: "gwet" -0xadbe: "gwep" -0xadbf: "gweh" -0xadc0: "gwi" -0xadc1: "gwig" -0xadc2: "gwigg" -0xadc3: "gwigs" -0xadc4: "gwin" -0xadc5: "gwinj" -0xadc6: "gwinh" -0xadc7: "gwid" -0xadc8: "gwil" -0xadc9: "gwilg" -0xadca: "gwilm" -0xadcb: "gwilb" -0xadcc: "gwils" -0xadcd: "gwilt" -0xadce: "gwilp" -0xadcf: "gwilh" -0xadd0: "gwim" -0xadd1: "gwib" -0xadd2: "gwibs" -0xadd3: "gwis" -0xadd4: "gwiss" -0xadd5: "gwing" -0xadd6: "gwij" -0xadd7: "gwic" -0xadd8: "gwik" -0xadd9: "gwit" -0xadda: "gwip" -0xaddb: "gwih" -0xaddc: "gyu" -0xaddd: "gyug" -0xadde: "gyugg" -0xaddf: "gyugs" -0xade0: "gyun" -0xade1: "gyunj" -0xade2: "gyunh" -0xade3: "gyud" -0xade4: "gyul" -0xade5: "gyulg" -0xade6: "gyulm" -0xade7: "gyulb" -0xade8: "gyuls" -0xade9: "gyult" -0xadea: "gyulp" -0xadeb: "gyulh" -0xadec: "gyum" -0xaded: "gyub" -0xadee: "gyubs" -0xadef: "gyus" -0xadf0: "gyuss" -0xadf1: "gyung" -0xadf2: "gyuj" -0xadf3: "gyuc" -0xadf4: "gyuk" -0xadf5: "gyut" -0xadf6: "gyup" -0xadf7: "gyuh" -0xadf8: "geu" -0xadf9: "geug" -0xadfa: "geugg" -0xadfb: "geugs" -0xadfc: "geun" -0xadfd: "geunj" -0xadfe: "geunh" -0xadff: "geud" -/* x0ae */ -0xae00: "geul" -0xae01: "geulg" -0xae02: "geulm" -0xae03: "geulb" -0xae04: "geuls" -0xae05: "geult" -0xae06: "geulp" -0xae07: "geulh" -0xae08: "geum" -0xae09: "geub" -0xae0a: "geubs" -0xae0b: "geus" -0xae0c: "geuss" -0xae0d: "geung" -0xae0e: "geuj" -0xae0f: "geuc" -0xae10: "geuk" -0xae11: "geut" -0xae12: "geup" -0xae13: "geuh" -0xae14: "gyi" -0xae15: "gyig" -0xae16: "gyigg" -0xae17: "gyigs" -0xae18: "gyin" -0xae19: "gyinj" -0xae1a: "gyinh" -0xae1b: "gyid" -0xae1c: "gyil" -0xae1d: "gyilg" -0xae1e: "gyilm" -0xae1f: "gyilb" -0xae20: "gyils" -0xae21: "gyilt" -0xae22: "gyilp" -0xae23: "gyilh" -0xae24: "gyim" -0xae25: "gyib" -0xae26: "gyibs" -0xae27: "gyis" -0xae28: "gyiss" -0xae29: "gying" -0xae2a: "gyij" -0xae2b: "gyic" -0xae2c: "gyik" -0xae2d: "gyit" -0xae2e: "gyip" -0xae2f: "gyih" -0xae30: "gi" -0xae31: "gig" -0xae32: "gigg" -0xae33: "gigs" -0xae34: "gin" -0xae35: "ginj" -0xae36: "ginh" -0xae37: "gid" -0xae38: "gil" -0xae39: "gilg" -0xae3a: "gilm" -0xae3b: "gilb" -0xae3c: "gils" -0xae3d: "gilt" -0xae3e: "gilp" -0xae3f: "gilh" -0xae40: "gim" -0xae41: "gib" -0xae42: "gibs" -0xae43: "gis" -0xae44: "giss" -0xae45: "ging" -0xae46: "gij" -0xae47: "gic" -0xae48: "gik" -0xae49: "git" -0xae4a: "gip" -0xae4b: "gih" -0xae4c: "gga" -0xae4d: "ggag" -0xae4e: "ggagg" -0xae4f: "ggags" -0xae50: "ggan" -0xae51: "gganj" -0xae52: "gganh" -0xae53: "ggad" -0xae54: "ggal" -0xae55: "ggalg" -0xae56: "ggalm" -0xae57: "ggalb" -0xae58: "ggals" -0xae59: "ggalt" -0xae5a: "ggalp" -0xae5b: "ggalh" -0xae5c: "ggam" -0xae5d: "ggab" -0xae5e: "ggabs" -0xae5f: "ggas" -0xae60: "ggass" -0xae61: "ggang" -0xae62: "ggaj" -0xae63: "ggac" -0xae64: "ggak" -0xae65: "ggat" -0xae66: "ggap" -0xae67: "ggah" -0xae68: "ggae" -0xae69: "ggaeg" -0xae6a: "ggaegg" -0xae6b: "ggaegs" -0xae6c: "ggaen" -0xae6d: "ggaenj" -0xae6e: "ggaenh" -0xae6f: "ggaed" -0xae70: "ggael" -0xae71: "ggaelg" -0xae72: "ggaelm" -0xae73: "ggaelb" -0xae74: "ggaels" -0xae75: "ggaelt" -0xae76: "ggaelp" -0xae77: "ggaelh" -0xae78: "ggaem" -0xae79: "ggaeb" -0xae7a: "ggaebs" -0xae7b: "ggaes" -0xae7c: "ggaess" -0xae7d: "ggaeng" -0xae7e: "ggaej" -0xae7f: "ggaec" -0xae80: "ggaek" -0xae81: "ggaet" -0xae82: "ggaep" -0xae83: "ggaeh" -0xae84: "ggya" -0xae85: "ggyag" -0xae86: "ggyagg" -0xae87: "ggyags" -0xae88: "ggyan" -0xae89: "ggyanj" -0xae8a: "ggyanh" -0xae8b: "ggyad" -0xae8c: "ggyal" -0xae8d: "ggyalg" -0xae8e: "ggyalm" -0xae8f: "ggyalb" -0xae90: "ggyals" -0xae91: "ggyalt" -0xae92: "ggyalp" -0xae93: "ggyalh" -0xae94: "ggyam" -0xae95: "ggyab" -0xae96: "ggyabs" -0xae97: "ggyas" -0xae98: "ggyass" -0xae99: "ggyang" -0xae9a: "ggyaj" -0xae9b: "ggyac" -0xae9c: "ggyak" -0xae9d: "ggyat" -0xae9e: "ggyap" -0xae9f: "ggyah" -0xaea0: "ggyae" -0xaea1: "ggyaeg" -0xaea2: "ggyaegg" -0xaea3: "ggyaegs" -0xaea4: "ggyaen" -0xaea5: "ggyaenj" -0xaea6: "ggyaenh" -0xaea7: "ggyaed" -0xaea8: "ggyael" -0xaea9: "ggyaelg" -0xaeaa: "ggyaelm" -0xaeab: "ggyaelb" -0xaeac: "ggyaels" -0xaead: "ggyaelt" -0xaeae: "ggyaelp" -0xaeaf: "ggyaelh" -0xaeb0: "ggyaem" -0xaeb1: "ggyaeb" -0xaeb2: "ggyaebs" -0xaeb3: "ggyaes" -0xaeb4: "ggyaess" -0xaeb5: "ggyaeng" -0xaeb6: "ggyaej" -0xaeb7: "ggyaec" -0xaeb8: "ggyaek" -0xaeb9: "ggyaet" -0xaeba: "ggyaep" -0xaebb: "ggyaeh" -0xaebc: "ggeo" -0xaebd: "ggeog" -0xaebe: "ggeogg" -0xaebf: "ggeogs" -0xaec0: "ggeon" -0xaec1: "ggeonj" -0xaec2: "ggeonh" -0xaec3: "ggeod" -0xaec4: "ggeol" -0xaec5: "ggeolg" -0xaec6: "ggeolm" -0xaec7: "ggeolb" -0xaec8: "ggeols" -0xaec9: "ggeolt" -0xaeca: "ggeolp" -0xaecb: "ggeolh" -0xaecc: "ggeom" -0xaecd: "ggeob" -0xaece: "ggeobs" -0xaecf: "ggeos" -0xaed0: "ggeoss" -0xaed1: "ggeong" -0xaed2: "ggeoj" -0xaed3: "ggeoc" -0xaed4: "ggeok" -0xaed5: "ggeot" -0xaed6: "ggeop" -0xaed7: "ggeoh" -0xaed8: "gge" -0xaed9: "ggeg" -0xaeda: "ggegg" -0xaedb: "ggegs" -0xaedc: "ggen" -0xaedd: "ggenj" -0xaede: "ggenh" -0xaedf: "gged" -0xaee0: "ggel" -0xaee1: "ggelg" -0xaee2: "ggelm" -0xaee3: "ggelb" -0xaee4: "ggels" -0xaee5: "ggelt" -0xaee6: "ggelp" -0xaee7: "ggelh" -0xaee8: "ggem" -0xaee9: "ggeb" -0xaeea: "ggebs" -0xaeeb: "gges" -0xaeec: "ggess" -0xaeed: "ggeng" -0xaeee: "ggej" -0xaeef: "ggec" -0xaef0: "ggek" -0xaef1: "gget" -0xaef2: "ggep" -0xaef3: "ggeh" -0xaef4: "ggyeo" -0xaef5: "ggyeog" -0xaef6: "ggyeogg" -0xaef7: "ggyeogs" -0xaef8: "ggyeon" -0xaef9: "ggyeonj" -0xaefa: "ggyeonh" -0xaefb: "ggyeod" -0xaefc: "ggyeol" -0xaefd: "ggyeolg" -0xaefe: "ggyeolm" -0xaeff: "ggyeolb" -/* x0af */ -0xaf00: "ggyeols" -0xaf01: "ggyeolt" -0xaf02: "ggyeolp" -0xaf03: "ggyeolh" -0xaf04: "ggyeom" -0xaf05: "ggyeob" -0xaf06: "ggyeobs" -0xaf07: "ggyeos" -0xaf08: "ggyeoss" -0xaf09: "ggyeong" -0xaf0a: "ggyeoj" -0xaf0b: "ggyeoc" -0xaf0c: "ggyeok" -0xaf0d: "ggyeot" -0xaf0e: "ggyeop" -0xaf0f: "ggyeoh" -0xaf10: "ggye" -0xaf11: "ggyeg" -0xaf12: "ggyegg" -0xaf13: "ggyegs" -0xaf14: "ggyen" -0xaf15: "ggyenj" -0xaf16: "ggyenh" -0xaf17: "ggyed" -0xaf18: "ggyel" -0xaf19: "ggyelg" -0xaf1a: "ggyelm" -0xaf1b: "ggyelb" -0xaf1c: "ggyels" -0xaf1d: "ggyelt" -0xaf1e: "ggyelp" -0xaf1f: "ggyelh" -0xaf20: "ggyem" -0xaf21: "ggyeb" -0xaf22: "ggyebs" -0xaf23: "ggyes" -0xaf24: "ggyess" -0xaf25: "ggyeng" -0xaf26: "ggyej" -0xaf27: "ggyec" -0xaf28: "ggyek" -0xaf29: "ggyet" -0xaf2a: "ggyep" -0xaf2b: "ggyeh" -0xaf2c: "ggo" -0xaf2d: "ggog" -0xaf2e: "ggogg" -0xaf2f: "ggogs" -0xaf30: "ggon" -0xaf31: "ggonj" -0xaf32: "ggonh" -0xaf33: "ggod" -0xaf34: "ggol" -0xaf35: "ggolg" -0xaf36: "ggolm" -0xaf37: "ggolb" -0xaf38: "ggols" -0xaf39: "ggolt" -0xaf3a: "ggolp" -0xaf3b: "ggolh" -0xaf3c: "ggom" -0xaf3d: "ggob" -0xaf3e: "ggobs" -0xaf3f: "ggos" -0xaf40: "ggoss" -0xaf41: "ggong" -0xaf42: "ggoj" -0xaf43: "ggoc" -0xaf44: "ggok" -0xaf45: "ggot" -0xaf46: "ggop" -0xaf47: "ggoh" -0xaf48: "ggwa" -0xaf49: "ggwag" -0xaf4a: "ggwagg" -0xaf4b: "ggwags" -0xaf4c: "ggwan" -0xaf4d: "ggwanj" -0xaf4e: "ggwanh" -0xaf4f: "ggwad" -0xaf50: "ggwal" -0xaf51: "ggwalg" -0xaf52: "ggwalm" -0xaf53: "ggwalb" -0xaf54: "ggwals" -0xaf55: "ggwalt" -0xaf56: "ggwalp" -0xaf57: "ggwalh" -0xaf58: "ggwam" -0xaf59: "ggwab" -0xaf5a: "ggwabs" -0xaf5b: "ggwas" -0xaf5c: "ggwass" -0xaf5d: "ggwang" -0xaf5e: "ggwaj" -0xaf5f: "ggwac" -0xaf60: "ggwak" -0xaf61: "ggwat" -0xaf62: "ggwap" -0xaf63: "ggwah" -0xaf64: "ggwae" -0xaf65: "ggwaeg" -0xaf66: "ggwaegg" -0xaf67: "ggwaegs" -0xaf68: "ggwaen" -0xaf69: "ggwaenj" -0xaf6a: "ggwaenh" -0xaf6b: "ggwaed" -0xaf6c: "ggwael" -0xaf6d: "ggwaelg" -0xaf6e: "ggwaelm" -0xaf6f: "ggwaelb" -0xaf70: "ggwaels" -0xaf71: "ggwaelt" -0xaf72: "ggwaelp" -0xaf73: "ggwaelh" -0xaf74: "ggwaem" -0xaf75: "ggwaeb" -0xaf76: "ggwaebs" -0xaf77: "ggwaes" -0xaf78: "ggwaess" -0xaf79: "ggwaeng" -0xaf7a: "ggwaej" -0xaf7b: "ggwaec" -0xaf7c: "ggwaek" -0xaf7d: "ggwaet" -0xaf7e: "ggwaep" -0xaf7f: "ggwaeh" -0xaf80: "ggoe" -0xaf81: "ggoeg" -0xaf82: "ggoegg" -0xaf83: "ggoegs" -0xaf84: "ggoen" -0xaf85: "ggoenj" -0xaf86: "ggoenh" -0xaf87: "ggoed" -0xaf88: "ggoel" -0xaf89: "ggoelg" -0xaf8a: "ggoelm" -0xaf8b: "ggoelb" -0xaf8c: "ggoels" -0xaf8d: "ggoelt" -0xaf8e: "ggoelp" -0xaf8f: "ggoelh" -0xaf90: "ggoem" -0xaf91: "ggoeb" -0xaf92: "ggoebs" -0xaf93: "ggoes" -0xaf94: "ggoess" -0xaf95: "ggoeng" -0xaf96: "ggoej" -0xaf97: "ggoec" -0xaf98: "ggoek" -0xaf99: "ggoet" -0xaf9a: "ggoep" -0xaf9b: "ggoeh" -0xaf9c: "ggyo" -0xaf9d: "ggyog" -0xaf9e: "ggyogg" -0xaf9f: "ggyogs" -0xafa0: "ggyon" -0xafa1: "ggyonj" -0xafa2: "ggyonh" -0xafa3: "ggyod" -0xafa4: "ggyol" -0xafa5: "ggyolg" -0xafa6: "ggyolm" -0xafa7: "ggyolb" -0xafa8: "ggyols" -0xafa9: "ggyolt" -0xafaa: "ggyolp" -0xafab: "ggyolh" -0xafac: "ggyom" -0xafad: "ggyob" -0xafae: "ggyobs" -0xafaf: "ggyos" -0xafb0: "ggyoss" -0xafb1: "ggyong" -0xafb2: "ggyoj" -0xafb3: "ggyoc" -0xafb4: "ggyok" -0xafb5: "ggyot" -0xafb6: "ggyop" -0xafb7: "ggyoh" -0xafb8: "ggu" -0xafb9: "ggug" -0xafba: "ggugg" -0xafbb: "ggugs" -0xafbc: "ggun" -0xafbd: "ggunj" -0xafbe: "ggunh" -0xafbf: "ggud" -0xafc0: "ggul" -0xafc1: "ggulg" -0xafc2: "ggulm" -0xafc3: "ggulb" -0xafc4: "gguls" -0xafc5: "ggult" -0xafc6: "ggulp" -0xafc7: "ggulh" -0xafc8: "ggum" -0xafc9: "ggub" -0xafca: "ggubs" -0xafcb: "ggus" -0xafcc: "gguss" -0xafcd: "ggung" -0xafce: "gguj" -0xafcf: "gguc" -0xafd0: "gguk" -0xafd1: "ggut" -0xafd2: "ggup" -0xafd3: "gguh" -0xafd4: "ggweo" -0xafd5: "ggweog" -0xafd6: "ggweogg" -0xafd7: "ggweogs" -0xafd8: "ggweon" -0xafd9: "ggweonj" -0xafda: "ggweonh" -0xafdb: "ggweod" -0xafdc: "ggweol" -0xafdd: "ggweolg" -0xafde: "ggweolm" -0xafdf: "ggweolb" -0xafe0: "ggweols" -0xafe1: "ggweolt" -0xafe2: "ggweolp" -0xafe3: "ggweolh" -0xafe4: "ggweom" -0xafe5: "ggweob" -0xafe6: "ggweobs" -0xafe7: "ggweos" -0xafe8: "ggweoss" -0xafe9: "ggweong" -0xafea: "ggweoj" -0xafeb: "ggweoc" -0xafec: "ggweok" -0xafed: "ggweot" -0xafee: "ggweop" -0xafef: "ggweoh" -0xaff0: "ggwe" -0xaff1: "ggweg" -0xaff2: "ggwegg" -0xaff3: "ggwegs" -0xaff4: "ggwen" -0xaff5: "ggwenj" -0xaff6: "ggwenh" -0xaff7: "ggwed" -0xaff8: "ggwel" -0xaff9: "ggwelg" -0xaffa: "ggwelm" -0xaffb: "ggwelb" -0xaffc: "ggwels" -0xaffd: "ggwelt" -0xaffe: "ggwelp" -0xafff: "ggwelh" -/* x0b0 */ -0xb000: "ggwem" -0xb001: "ggweb" -0xb002: "ggwebs" -0xb003: "ggwes" -0xb004: "ggwess" -0xb005: "ggweng" -0xb006: "ggwej" -0xb007: "ggwec" -0xb008: "ggwek" -0xb009: "ggwet" -0xb00a: "ggwep" -0xb00b: "ggweh" -0xb00c: "ggwi" -0xb00d: "ggwig" -0xb00e: "ggwigg" -0xb00f: "ggwigs" -0xb010: "ggwin" -0xb011: "ggwinj" -0xb012: "ggwinh" -0xb013: "ggwid" -0xb014: "ggwil" -0xb015: "ggwilg" -0xb016: "ggwilm" -0xb017: "ggwilb" -0xb018: "ggwils" -0xb019: "ggwilt" -0xb01a: "ggwilp" -0xb01b: "ggwilh" -0xb01c: "ggwim" -0xb01d: "ggwib" -0xb01e: "ggwibs" -0xb01f: "ggwis" -0xb020: "ggwiss" -0xb021: "ggwing" -0xb022: "ggwij" -0xb023: "ggwic" -0xb024: "ggwik" -0xb025: "ggwit" -0xb026: "ggwip" -0xb027: "ggwih" -0xb028: "ggyu" -0xb029: "ggyug" -0xb02a: "ggyugg" -0xb02b: "ggyugs" -0xb02c: "ggyun" -0xb02d: "ggyunj" -0xb02e: "ggyunh" -0xb02f: "ggyud" -0xb030: "ggyul" -0xb031: "ggyulg" -0xb032: "ggyulm" -0xb033: "ggyulb" -0xb034: "ggyuls" -0xb035: "ggyult" -0xb036: "ggyulp" -0xb037: "ggyulh" -0xb038: "ggyum" -0xb039: "ggyub" -0xb03a: "ggyubs" -0xb03b: "ggyus" -0xb03c: "ggyuss" -0xb03d: "ggyung" -0xb03e: "ggyuj" -0xb03f: "ggyuc" -0xb040: "ggyuk" -0xb041: "ggyut" -0xb042: "ggyup" -0xb043: "ggyuh" -0xb044: "ggeu" -0xb045: "ggeug" -0xb046: "ggeugg" -0xb047: "ggeugs" -0xb048: "ggeun" -0xb049: "ggeunj" -0xb04a: "ggeunh" -0xb04b: "ggeud" -0xb04c: "ggeul" -0xb04d: "ggeulg" -0xb04e: "ggeulm" -0xb04f: "ggeulb" -0xb050: "ggeuls" -0xb051: "ggeult" -0xb052: "ggeulp" -0xb053: "ggeulh" -0xb054: "ggeum" -0xb055: "ggeub" -0xb056: "ggeubs" -0xb057: "ggeus" -0xb058: "ggeuss" -0xb059: "ggeung" -0xb05a: "ggeuj" -0xb05b: "ggeuc" -0xb05c: "ggeuk" -0xb05d: "ggeut" -0xb05e: "ggeup" -0xb05f: "ggeuh" -0xb060: "ggyi" -0xb061: "ggyig" -0xb062: "ggyigg" -0xb063: "ggyigs" -0xb064: "ggyin" -0xb065: "ggyinj" -0xb066: "ggyinh" -0xb067: "ggyid" -0xb068: "ggyil" -0xb069: "ggyilg" -0xb06a: "ggyilm" -0xb06b: "ggyilb" -0xb06c: "ggyils" -0xb06d: "ggyilt" -0xb06e: "ggyilp" -0xb06f: "ggyilh" -0xb070: "ggyim" -0xb071: "ggyib" -0xb072: "ggyibs" -0xb073: "ggyis" -0xb074: "ggyiss" -0xb075: "ggying" -0xb076: "ggyij" -0xb077: "ggyic" -0xb078: "ggyik" -0xb079: "ggyit" -0xb07a: "ggyip" -0xb07b: "ggyih" -0xb07c: "ggi" -0xb07d: "ggig" -0xb07e: "ggigg" -0xb07f: "ggigs" -0xb080: "ggin" -0xb081: "gginj" -0xb082: "gginh" -0xb083: "ggid" -0xb084: "ggil" -0xb085: "ggilg" -0xb086: "ggilm" -0xb087: "ggilb" -0xb088: "ggils" -0xb089: "ggilt" -0xb08a: "ggilp" -0xb08b: "ggilh" -0xb08c: "ggim" -0xb08d: "ggib" -0xb08e: "ggibs" -0xb08f: "ggis" -0xb090: "ggiss" -0xb091: "gging" -0xb092: "ggij" -0xb093: "ggic" -0xb094: "ggik" -0xb095: "ggit" -0xb096: "ggip" -0xb097: "ggih" -0xb098: "na" -0xb099: "nag" -0xb09a: "nagg" -0xb09b: "nags" -0xb09c: "nan" -0xb09d: "nanj" -0xb09e: "nanh" -0xb09f: "nad" -0xb0a0: "nal" -0xb0a1: "nalg" -0xb0a2: "nalm" -0xb0a3: "nalb" -0xb0a4: "nals" -0xb0a5: "nalt" -0xb0a6: "nalp" -0xb0a7: "nalh" -0xb0a8: "nam" -0xb0a9: "nab" -0xb0aa: "nabs" -0xb0ab: "nas" -0xb0ac: "nass" -0xb0ad: "nang" -0xb0ae: "naj" -0xb0af: "nac" -0xb0b0: "nak" -0xb0b1: "nat" -0xb0b2: "nap" -0xb0b3: "nah" -0xb0b4: "nae" -0xb0b5: "naeg" -0xb0b6: "naegg" -0xb0b7: "naegs" -0xb0b8: "naen" -0xb0b9: "naenj" -0xb0ba: "naenh" -0xb0bb: "naed" -0xb0bc: "nael" -0xb0bd: "naelg" -0xb0be: "naelm" -0xb0bf: "naelb" -0xb0c0: "naels" -0xb0c1: "naelt" -0xb0c2: "naelp" -0xb0c3: "naelh" -0xb0c4: "naem" -0xb0c5: "naeb" -0xb0c6: "naebs" -0xb0c7: "naes" -0xb0c8: "naess" -0xb0c9: "naeng" -0xb0ca: "naej" -0xb0cb: "naec" -0xb0cc: "naek" -0xb0cd: "naet" -0xb0ce: "naep" -0xb0cf: "naeh" -0xb0d0: "nya" -0xb0d1: "nyag" -0xb0d2: "nyagg" -0xb0d3: "nyags" -0xb0d4: "nyan" -0xb0d5: "nyanj" -0xb0d6: "nyanh" -0xb0d7: "nyad" -0xb0d8: "nyal" -0xb0d9: "nyalg" -0xb0da: "nyalm" -0xb0db: "nyalb" -0xb0dc: "nyals" -0xb0dd: "nyalt" -0xb0de: "nyalp" -0xb0df: "nyalh" -0xb0e0: "nyam" -0xb0e1: "nyab" -0xb0e2: "nyabs" -0xb0e3: "nyas" -0xb0e4: "nyass" -0xb0e5: "nyang" -0xb0e6: "nyaj" -0xb0e7: "nyac" -0xb0e8: "nyak" -0xb0e9: "nyat" -0xb0ea: "nyap" -0xb0eb: "nyah" -0xb0ec: "nyae" -0xb0ed: "nyaeg" -0xb0ee: "nyaegg" -0xb0ef: "nyaegs" -0xb0f0: "nyaen" -0xb0f1: "nyaenj" -0xb0f2: "nyaenh" -0xb0f3: "nyaed" -0xb0f4: "nyael" -0xb0f5: "nyaelg" -0xb0f6: "nyaelm" -0xb0f7: "nyaelb" -0xb0f8: "nyaels" -0xb0f9: "nyaelt" -0xb0fa: "nyaelp" -0xb0fb: "nyaelh" -0xb0fc: "nyaem" -0xb0fd: "nyaeb" -0xb0fe: "nyaebs" -0xb0ff: "nyaes" -/* x0b1 */ -0xb100: "nyaess" -0xb101: "nyaeng" -0xb102: "nyaej" -0xb103: "nyaec" -0xb104: "nyaek" -0xb105: "nyaet" -0xb106: "nyaep" -0xb107: "nyaeh" -0xb108: "neo" -0xb109: "neog" -0xb10a: "neogg" -0xb10b: "neogs" -0xb10c: "neon" -0xb10d: "neonj" -0xb10e: "neonh" -0xb10f: "neod" -0xb110: "neol" -0xb111: "neolg" -0xb112: "neolm" -0xb113: "neolb" -0xb114: "neols" -0xb115: "neolt" -0xb116: "neolp" -0xb117: "neolh" -0xb118: "neom" -0xb119: "neob" -0xb11a: "neobs" -0xb11b: "neos" -0xb11c: "neoss" -0xb11d: "neong" -0xb11e: "neoj" -0xb11f: "neoc" -0xb120: "neok" -0xb121: "neot" -0xb122: "neop" -0xb123: "neoh" -0xb124: "ne" -0xb125: "neg" -0xb126: "negg" -0xb127: "negs" -0xb128: "nen" -0xb129: "nenj" -0xb12a: "nenh" -0xb12b: "ned" -0xb12c: "nel" -0xb12d: "nelg" -0xb12e: "nelm" -0xb12f: "nelb" -0xb130: "nels" -0xb131: "nelt" -0xb132: "nelp" -0xb133: "nelh" -0xb134: "nem" -0xb135: "neb" -0xb136: "nebs" -0xb137: "nes" -0xb138: "ness" -0xb139: "neng" -0xb13a: "nej" -0xb13b: "nec" -0xb13c: "nek" -0xb13d: "net" -0xb13e: "nep" -0xb13f: "neh" -0xb140: "nyeo" -0xb141: "nyeog" -0xb142: "nyeogg" -0xb143: "nyeogs" -0xb144: "nyeon" -0xb145: "nyeonj" -0xb146: "nyeonh" -0xb147: "nyeod" -0xb148: "nyeol" -0xb149: "nyeolg" -0xb14a: "nyeolm" -0xb14b: "nyeolb" -0xb14c: "nyeols" -0xb14d: "nyeolt" -0xb14e: "nyeolp" -0xb14f: "nyeolh" -0xb150: "nyeom" -0xb151: "nyeob" -0xb152: "nyeobs" -0xb153: "nyeos" -0xb154: "nyeoss" -0xb155: "nyeong" -0xb156: "nyeoj" -0xb157: "nyeoc" -0xb158: "nyeok" -0xb159: "nyeot" -0xb15a: "nyeop" -0xb15b: "nyeoh" -0xb15c: "nye" -0xb15d: "nyeg" -0xb15e: "nyegg" -0xb15f: "nyegs" -0xb160: "nyen" -0xb161: "nyenj" -0xb162: "nyenh" -0xb163: "nyed" -0xb164: "nyel" -0xb165: "nyelg" -0xb166: "nyelm" -0xb167: "nyelb" -0xb168: "nyels" -0xb169: "nyelt" -0xb16a: "nyelp" -0xb16b: "nyelh" -0xb16c: "nyem" -0xb16d: "nyeb" -0xb16e: "nyebs" -0xb16f: "nyes" -0xb170: "nyess" -0xb171: "nyeng" -0xb172: "nyej" -0xb173: "nyec" -0xb174: "nyek" -0xb175: "nyet" -0xb176: "nyep" -0xb177: "nyeh" -0xb178: "no" -0xb179: "nog" -0xb17a: "nogg" -0xb17b: "nogs" -0xb17c: "non" -0xb17d: "nonj" -0xb17e: "nonh" -0xb17f: "nod" -0xb180: "nol" -0xb181: "nolg" -0xb182: "nolm" -0xb183: "nolb" -0xb184: "nols" -0xb185: "nolt" -0xb186: "nolp" -0xb187: "nolh" -0xb188: "nom" -0xb189: "nob" -0xb18a: "nobs" -0xb18b: "nos" -0xb18c: "noss" -0xb18d: "nong" -0xb18e: "noj" -0xb18f: "noc" -0xb190: "nok" -0xb191: "not" -0xb192: "nop" -0xb193: "noh" -0xb194: "nwa" -0xb195: "nwag" -0xb196: "nwagg" -0xb197: "nwags" -0xb198: "nwan" -0xb199: "nwanj" -0xb19a: "nwanh" -0xb19b: "nwad" -0xb19c: "nwal" -0xb19d: "nwalg" -0xb19e: "nwalm" -0xb19f: "nwalb" -0xb1a0: "nwals" -0xb1a1: "nwalt" -0xb1a2: "nwalp" -0xb1a3: "nwalh" -0xb1a4: "nwam" -0xb1a5: "nwab" -0xb1a6: "nwabs" -0xb1a7: "nwas" -0xb1a8: "nwass" -0xb1a9: "nwang" -0xb1aa: "nwaj" -0xb1ab: "nwac" -0xb1ac: "nwak" -0xb1ad: "nwat" -0xb1ae: "nwap" -0xb1af: "nwah" -0xb1b0: "nwae" -0xb1b1: "nwaeg" -0xb1b2: "nwaegg" -0xb1b3: "nwaegs" -0xb1b4: "nwaen" -0xb1b5: "nwaenj" -0xb1b6: "nwaenh" -0xb1b7: "nwaed" -0xb1b8: "nwael" -0xb1b9: "nwaelg" -0xb1ba: "nwaelm" -0xb1bb: "nwaelb" -0xb1bc: "nwaels" -0xb1bd: "nwaelt" -0xb1be: "nwaelp" -0xb1bf: "nwaelh" -0xb1c0: "nwaem" -0xb1c1: "nwaeb" -0xb1c2: "nwaebs" -0xb1c3: "nwaes" -0xb1c4: "nwaess" -0xb1c5: "nwaeng" -0xb1c6: "nwaej" -0xb1c7: "nwaec" -0xb1c8: "nwaek" -0xb1c9: "nwaet" -0xb1ca: "nwaep" -0xb1cb: "nwaeh" -0xb1cc: "noe" -0xb1cd: "noeg" -0xb1ce: "noegg" -0xb1cf: "noegs" -0xb1d0: "noen" -0xb1d1: "noenj" -0xb1d2: "noenh" -0xb1d3: "noed" -0xb1d4: "noel" -0xb1d5: "noelg" -0xb1d6: "noelm" -0xb1d7: "noelb" -0xb1d8: "noels" -0xb1d9: "noelt" -0xb1da: "noelp" -0xb1db: "noelh" -0xb1dc: "noem" -0xb1dd: "noeb" -0xb1de: "noebs" -0xb1df: "noes" -0xb1e0: "noess" -0xb1e1: "noeng" -0xb1e2: "noej" -0xb1e3: "noec" -0xb1e4: "noek" -0xb1e5: "noet" -0xb1e6: "noep" -0xb1e7: "noeh" -0xb1e8: "nyo" -0xb1e9: "nyog" -0xb1ea: "nyogg" -0xb1eb: "nyogs" -0xb1ec: "nyon" -0xb1ed: "nyonj" -0xb1ee: "nyonh" -0xb1ef: "nyod" -0xb1f0: "nyol" -0xb1f1: "nyolg" -0xb1f2: "nyolm" -0xb1f3: "nyolb" -0xb1f4: "nyols" -0xb1f5: "nyolt" -0xb1f6: "nyolp" -0xb1f7: "nyolh" -0xb1f8: "nyom" -0xb1f9: "nyob" -0xb1fa: "nyobs" -0xb1fb: "nyos" -0xb1fc: "nyoss" -0xb1fd: "nyong" -0xb1fe: "nyoj" -0xb1ff: "nyoc" -/* x0b2 */ -0xb200: "nyok" -0xb201: "nyot" -0xb202: "nyop" -0xb203: "nyoh" -0xb204: "nu" -0xb205: "nug" -0xb206: "nugg" -0xb207: "nugs" -0xb208: "nun" -0xb209: "nunj" -0xb20a: "nunh" -0xb20b: "nud" -0xb20c: "nul" -0xb20d: "nulg" -0xb20e: "nulm" -0xb20f: "nulb" -0xb210: "nuls" -0xb211: "nult" -0xb212: "nulp" -0xb213: "nulh" -0xb214: "num" -0xb215: "nub" -0xb216: "nubs" -0xb217: "nus" -0xb218: "nuss" -0xb219: "nung" -0xb21a: "nuj" -0xb21b: "nuc" -0xb21c: "nuk" -0xb21d: "nut" -0xb21e: "nup" -0xb21f: "nuh" -0xb220: "nweo" -0xb221: "nweog" -0xb222: "nweogg" -0xb223: "nweogs" -0xb224: "nweon" -0xb225: "nweonj" -0xb226: "nweonh" -0xb227: "nweod" -0xb228: "nweol" -0xb229: "nweolg" -0xb22a: "nweolm" -0xb22b: "nweolb" -0xb22c: "nweols" -0xb22d: "nweolt" -0xb22e: "nweolp" -0xb22f: "nweolh" -0xb230: "nweom" -0xb231: "nweob" -0xb232: "nweobs" -0xb233: "nweos" -0xb234: "nweoss" -0xb235: "nweong" -0xb236: "nweoj" -0xb237: "nweoc" -0xb238: "nweok" -0xb239: "nweot" -0xb23a: "nweop" -0xb23b: "nweoh" -0xb23c: "nwe" -0xb23d: "nweg" -0xb23e: "nwegg" -0xb23f: "nwegs" -0xb240: "nwen" -0xb241: "nwenj" -0xb242: "nwenh" -0xb243: "nwed" -0xb244: "nwel" -0xb245: "nwelg" -0xb246: "nwelm" -0xb247: "nwelb" -0xb248: "nwels" -0xb249: "nwelt" -0xb24a: "nwelp" -0xb24b: "nwelh" -0xb24c: "nwem" -0xb24d: "nweb" -0xb24e: "nwebs" -0xb24f: "nwes" -0xb250: "nwess" -0xb251: "nweng" -0xb252: "nwej" -0xb253: "nwec" -0xb254: "nwek" -0xb255: "nwet" -0xb256: "nwep" -0xb257: "nweh" -0xb258: "nwi" -0xb259: "nwig" -0xb25a: "nwigg" -0xb25b: "nwigs" -0xb25c: "nwin" -0xb25d: "nwinj" -0xb25e: "nwinh" -0xb25f: "nwid" -0xb260: "nwil" -0xb261: "nwilg" -0xb262: "nwilm" -0xb263: "nwilb" -0xb264: "nwils" -0xb265: "nwilt" -0xb266: "nwilp" -0xb267: "nwilh" -0xb268: "nwim" -0xb269: "nwib" -0xb26a: "nwibs" -0xb26b: "nwis" -0xb26c: "nwiss" -0xb26d: "nwing" -0xb26e: "nwij" -0xb26f: "nwic" -0xb270: "nwik" -0xb271: "nwit" -0xb272: "nwip" -0xb273: "nwih" -0xb274: "nyu" -0xb275: "nyug" -0xb276: "nyugg" -0xb277: "nyugs" -0xb278: "nyun" -0xb279: "nyunj" -0xb27a: "nyunh" -0xb27b: "nyud" -0xb27c: "nyul" -0xb27d: "nyulg" -0xb27e: "nyulm" -0xb27f: "nyulb" -0xb280: "nyuls" -0xb281: "nyult" -0xb282: "nyulp" -0xb283: "nyulh" -0xb284: "nyum" -0xb285: "nyub" -0xb286: "nyubs" -0xb287: "nyus" -0xb288: "nyuss" -0xb289: "nyung" -0xb28a: "nyuj" -0xb28b: "nyuc" -0xb28c: "nyuk" -0xb28d: "nyut" -0xb28e: "nyup" -0xb28f: "nyuh" -0xb290: "neu" -0xb291: "neug" -0xb292: "neugg" -0xb293: "neugs" -0xb294: "neun" -0xb295: "neunj" -0xb296: "neunh" -0xb297: "neud" -0xb298: "neul" -0xb299: "neulg" -0xb29a: "neulm" -0xb29b: "neulb" -0xb29c: "neuls" -0xb29d: "neult" -0xb29e: "neulp" -0xb29f: "neulh" -0xb2a0: "neum" -0xb2a1: "neub" -0xb2a2: "neubs" -0xb2a3: "neus" -0xb2a4: "neuss" -0xb2a5: "neung" -0xb2a6: "neuj" -0xb2a7: "neuc" -0xb2a8: "neuk" -0xb2a9: "neut" -0xb2aa: "neup" -0xb2ab: "neuh" -0xb2ac: "nyi" -0xb2ad: "nyig" -0xb2ae: "nyigg" -0xb2af: "nyigs" -0xb2b0: "nyin" -0xb2b1: "nyinj" -0xb2b2: "nyinh" -0xb2b3: "nyid" -0xb2b4: "nyil" -0xb2b5: "nyilg" -0xb2b6: "nyilm" -0xb2b7: "nyilb" -0xb2b8: "nyils" -0xb2b9: "nyilt" -0xb2ba: "nyilp" -0xb2bb: "nyilh" -0xb2bc: "nyim" -0xb2bd: "nyib" -0xb2be: "nyibs" -0xb2bf: "nyis" -0xb2c0: "nyiss" -0xb2c1: "nying" -0xb2c2: "nyij" -0xb2c3: "nyic" -0xb2c4: "nyik" -0xb2c5: "nyit" -0xb2c6: "nyip" -0xb2c7: "nyih" -0xb2c8: "ni" -0xb2c9: "nig" -0xb2ca: "nigg" -0xb2cb: "nigs" -0xb2cc: "nin" -0xb2cd: "ninj" -0xb2ce: "ninh" -0xb2cf: "nid" -0xb2d0: "nil" -0xb2d1: "nilg" -0xb2d2: "nilm" -0xb2d3: "nilb" -0xb2d4: "nils" -0xb2d5: "nilt" -0xb2d6: "nilp" -0xb2d7: "nilh" -0xb2d8: "nim" -0xb2d9: "nib" -0xb2da: "nibs" -0xb2db: "nis" -0xb2dc: "niss" -0xb2dd: "ning" -0xb2de: "nij" -0xb2df: "nic" -0xb2e0: "nik" -0xb2e1: "nit" -0xb2e2: "nip" -0xb2e3: "nih" -0xb2e4: "da" -0xb2e5: "dag" -0xb2e6: "dagg" -0xb2e7: "dags" -0xb2e8: "dan" -0xb2e9: "danj" -0xb2ea: "danh" -0xb2eb: "dad" -0xb2ec: "dal" -0xb2ed: "dalg" -0xb2ee: "dalm" -0xb2ef: "dalb" -0xb2f0: "dals" -0xb2f1: "dalt" -0xb2f2: "dalp" -0xb2f3: "dalh" -0xb2f4: "dam" -0xb2f5: "dab" -0xb2f6: "dabs" -0xb2f7: "das" -0xb2f8: "dass" -0xb2f9: "dang" -0xb2fa: "daj" -0xb2fb: "dac" -0xb2fc: "dak" -0xb2fd: "dat" -0xb2fe: "dap" -0xb2ff: "dah" -/* x0b3 */ -0xb300: "dae" -0xb301: "daeg" -0xb302: "daegg" -0xb303: "daegs" -0xb304: "daen" -0xb305: "daenj" -0xb306: "daenh" -0xb307: "daed" -0xb308: "dael" -0xb309: "daelg" -0xb30a: "daelm" -0xb30b: "daelb" -0xb30c: "daels" -0xb30d: "daelt" -0xb30e: "daelp" -0xb30f: "daelh" -0xb310: "daem" -0xb311: "daeb" -0xb312: "daebs" -0xb313: "daes" -0xb314: "daess" -0xb315: "daeng" -0xb316: "daej" -0xb317: "daec" -0xb318: "daek" -0xb319: "daet" -0xb31a: "daep" -0xb31b: "daeh" -0xb31c: "dya" -0xb31d: "dyag" -0xb31e: "dyagg" -0xb31f: "dyags" -0xb320: "dyan" -0xb321: "dyanj" -0xb322: "dyanh" -0xb323: "dyad" -0xb324: "dyal" -0xb325: "dyalg" -0xb326: "dyalm" -0xb327: "dyalb" -0xb328: "dyals" -0xb329: "dyalt" -0xb32a: "dyalp" -0xb32b: "dyalh" -0xb32c: "dyam" -0xb32d: "dyab" -0xb32e: "dyabs" -0xb32f: "dyas" -0xb330: "dyass" -0xb331: "dyang" -0xb332: "dyaj" -0xb333: "dyac" -0xb334: "dyak" -0xb335: "dyat" -0xb336: "dyap" -0xb337: "dyah" -0xb338: "dyae" -0xb339: "dyaeg" -0xb33a: "dyaegg" -0xb33b: "dyaegs" -0xb33c: "dyaen" -0xb33d: "dyaenj" -0xb33e: "dyaenh" -0xb33f: "dyaed" -0xb340: "dyael" -0xb341: "dyaelg" -0xb342: "dyaelm" -0xb343: "dyaelb" -0xb344: "dyaels" -0xb345: "dyaelt" -0xb346: "dyaelp" -0xb347: "dyaelh" -0xb348: "dyaem" -0xb349: "dyaeb" -0xb34a: "dyaebs" -0xb34b: "dyaes" -0xb34c: "dyaess" -0xb34d: "dyaeng" -0xb34e: "dyaej" -0xb34f: "dyaec" -0xb350: "dyaek" -0xb351: "dyaet" -0xb352: "dyaep" -0xb353: "dyaeh" -0xb354: "deo" -0xb355: "deog" -0xb356: "deogg" -0xb357: "deogs" -0xb358: "deon" -0xb359: "deonj" -0xb35a: "deonh" -0xb35b: "deod" -0xb35c: "deol" -0xb35d: "deolg" -0xb35e: "deolm" -0xb35f: "deolb" -0xb360: "deols" -0xb361: "deolt" -0xb362: "deolp" -0xb363: "deolh" -0xb364: "deom" -0xb365: "deob" -0xb366: "deobs" -0xb367: "deos" -0xb368: "deoss" -0xb369: "deong" -0xb36a: "deoj" -0xb36b: "deoc" -0xb36c: "deok" -0xb36d: "deot" -0xb36e: "deop" -0xb36f: "deoh" -0xb370: "de" -0xb371: "deg" -0xb372: "degg" -0xb373: "degs" -0xb374: "den" -0xb375: "denj" -0xb376: "denh" -0xb377: "ded" -0xb378: "del" -0xb379: "delg" -0xb37a: "delm" -0xb37b: "delb" -0xb37c: "dels" -0xb37d: "delt" -0xb37e: "delp" -0xb37f: "delh" -0xb380: "dem" -0xb381: "deb" -0xb382: "debs" -0xb383: "des" -0xb384: "dess" -0xb385: "deng" -0xb386: "dej" -0xb387: "dec" -0xb388: "dek" -0xb389: "det" -0xb38a: "dep" -0xb38b: "deh" -0xb38c: "dyeo" -0xb38d: "dyeog" -0xb38e: "dyeogg" -0xb38f: "dyeogs" -0xb390: "dyeon" -0xb391: "dyeonj" -0xb392: "dyeonh" -0xb393: "dyeod" -0xb394: "dyeol" -0xb395: "dyeolg" -0xb396: "dyeolm" -0xb397: "dyeolb" -0xb398: "dyeols" -0xb399: "dyeolt" -0xb39a: "dyeolp" -0xb39b: "dyeolh" -0xb39c: "dyeom" -0xb39d: "dyeob" -0xb39e: "dyeobs" -0xb39f: "dyeos" -0xb3a0: "dyeoss" -0xb3a1: "dyeong" -0xb3a2: "dyeoj" -0xb3a3: "dyeoc" -0xb3a4: "dyeok" -0xb3a5: "dyeot" -0xb3a6: "dyeop" -0xb3a7: "dyeoh" -0xb3a8: "dye" -0xb3a9: "dyeg" -0xb3aa: "dyegg" -0xb3ab: "dyegs" -0xb3ac: "dyen" -0xb3ad: "dyenj" -0xb3ae: "dyenh" -0xb3af: "dyed" -0xb3b0: "dyel" -0xb3b1: "dyelg" -0xb3b2: "dyelm" -0xb3b3: "dyelb" -0xb3b4: "dyels" -0xb3b5: "dyelt" -0xb3b6: "dyelp" -0xb3b7: "dyelh" -0xb3b8: "dyem" -0xb3b9: "dyeb" -0xb3ba: "dyebs" -0xb3bb: "dyes" -0xb3bc: "dyess" -0xb3bd: "dyeng" -0xb3be: "dyej" -0xb3bf: "dyec" -0xb3c0: "dyek" -0xb3c1: "dyet" -0xb3c2: "dyep" -0xb3c3: "dyeh" -0xb3c4: "do" -0xb3c5: "dog" -0xb3c6: "dogg" -0xb3c7: "dogs" -0xb3c8: "don" -0xb3c9: "donj" -0xb3ca: "donh" -0xb3cb: "dod" -0xb3cc: "dol" -0xb3cd: "dolg" -0xb3ce: "dolm" -0xb3cf: "dolb" -0xb3d0: "dols" -0xb3d1: "dolt" -0xb3d2: "dolp" -0xb3d3: "dolh" -0xb3d4: "dom" -0xb3d5: "dob" -0xb3d6: "dobs" -0xb3d7: "dos" -0xb3d8: "doss" -0xb3d9: "dong" -0xb3da: "doj" -0xb3db: "doc" -0xb3dc: "dok" -0xb3dd: "dot" -0xb3de: "dop" -0xb3df: "doh" -0xb3e0: "dwa" -0xb3e1: "dwag" -0xb3e2: "dwagg" -0xb3e3: "dwags" -0xb3e4: "dwan" -0xb3e5: "dwanj" -0xb3e6: "dwanh" -0xb3e7: "dwad" -0xb3e8: "dwal" -0xb3e9: "dwalg" -0xb3ea: "dwalm" -0xb3eb: "dwalb" -0xb3ec: "dwals" -0xb3ed: "dwalt" -0xb3ee: "dwalp" -0xb3ef: "dwalh" -0xb3f0: "dwam" -0xb3f1: "dwab" -0xb3f2: "dwabs" -0xb3f3: "dwas" -0xb3f4: "dwass" -0xb3f5: "dwang" -0xb3f6: "dwaj" -0xb3f7: "dwac" -0xb3f8: "dwak" -0xb3f9: "dwat" -0xb3fa: "dwap" -0xb3fb: "dwah" -0xb3fc: "dwae" -0xb3fd: "dwaeg" -0xb3fe: "dwaegg" -0xb3ff: "dwaegs" -/* x0b4 */ -0xb400: "dwaen" -0xb401: "dwaenj" -0xb402: "dwaenh" -0xb403: "dwaed" -0xb404: "dwael" -0xb405: "dwaelg" -0xb406: "dwaelm" -0xb407: "dwaelb" -0xb408: "dwaels" -0xb409: "dwaelt" -0xb40a: "dwaelp" -0xb40b: "dwaelh" -0xb40c: "dwaem" -0xb40d: "dwaeb" -0xb40e: "dwaebs" -0xb40f: "dwaes" -0xb410: "dwaess" -0xb411: "dwaeng" -0xb412: "dwaej" -0xb413: "dwaec" -0xb414: "dwaek" -0xb415: "dwaet" -0xb416: "dwaep" -0xb417: "dwaeh" -0xb418: "doe" -0xb419: "doeg" -0xb41a: "doegg" -0xb41b: "doegs" -0xb41c: "doen" -0xb41d: "doenj" -0xb41e: "doenh" -0xb41f: "doed" -0xb420: "doel" -0xb421: "doelg" -0xb422: "doelm" -0xb423: "doelb" -0xb424: "doels" -0xb425: "doelt" -0xb426: "doelp" -0xb427: "doelh" -0xb428: "doem" -0xb429: "doeb" -0xb42a: "doebs" -0xb42b: "does" -0xb42c: "doess" -0xb42d: "doeng" -0xb42e: "doej" -0xb42f: "doec" -0xb430: "doek" -0xb431: "doet" -0xb432: "doep" -0xb433: "doeh" -0xb434: "dyo" -0xb435: "dyog" -0xb436: "dyogg" -0xb437: "dyogs" -0xb438: "dyon" -0xb439: "dyonj" -0xb43a: "dyonh" -0xb43b: "dyod" -0xb43c: "dyol" -0xb43d: "dyolg" -0xb43e: "dyolm" -0xb43f: "dyolb" -0xb440: "dyols" -0xb441: "dyolt" -0xb442: "dyolp" -0xb443: "dyolh" -0xb444: "dyom" -0xb445: "dyob" -0xb446: "dyobs" -0xb447: "dyos" -0xb448: "dyoss" -0xb449: "dyong" -0xb44a: "dyoj" -0xb44b: "dyoc" -0xb44c: "dyok" -0xb44d: "dyot" -0xb44e: "dyop" -0xb44f: "dyoh" -0xb450: "du" -0xb451: "dug" -0xb452: "dugg" -0xb453: "dugs" -0xb454: "dun" -0xb455: "dunj" -0xb456: "dunh" -0xb457: "dud" -0xb458: "dul" -0xb459: "dulg" -0xb45a: "dulm" -0xb45b: "dulb" -0xb45c: "duls" -0xb45d: "dult" -0xb45e: "dulp" -0xb45f: "dulh" -0xb460: "dum" -0xb461: "dub" -0xb462: "dubs" -0xb463: "dus" -0xb464: "duss" -0xb465: "dung" -0xb466: "duj" -0xb467: "duc" -0xb468: "duk" -0xb469: "dut" -0xb46a: "dup" -0xb46b: "duh" -0xb46c: "dweo" -0xb46d: "dweog" -0xb46e: "dweogg" -0xb46f: "dweogs" -0xb470: "dweon" -0xb471: "dweonj" -0xb472: "dweonh" -0xb473: "dweod" -0xb474: "dweol" -0xb475: "dweolg" -0xb476: "dweolm" -0xb477: "dweolb" -0xb478: "dweols" -0xb479: "dweolt" -0xb47a: "dweolp" -0xb47b: "dweolh" -0xb47c: "dweom" -0xb47d: "dweob" -0xb47e: "dweobs" -0xb47f: "dweos" -0xb480: "dweoss" -0xb481: "dweong" -0xb482: "dweoj" -0xb483: "dweoc" -0xb484: "dweok" -0xb485: "dweot" -0xb486: "dweop" -0xb487: "dweoh" -0xb488: "dwe" -0xb489: "dweg" -0xb48a: "dwegg" -0xb48b: "dwegs" -0xb48c: "dwen" -0xb48d: "dwenj" -0xb48e: "dwenh" -0xb48f: "dwed" -0xb490: "dwel" -0xb491: "dwelg" -0xb492: "dwelm" -0xb493: "dwelb" -0xb494: "dwels" -0xb495: "dwelt" -0xb496: "dwelp" -0xb497: "dwelh" -0xb498: "dwem" -0xb499: "dweb" -0xb49a: "dwebs" -0xb49b: "dwes" -0xb49c: "dwess" -0xb49d: "dweng" -0xb49e: "dwej" -0xb49f: "dwec" -0xb4a0: "dwek" -0xb4a1: "dwet" -0xb4a2: "dwep" -0xb4a3: "dweh" -0xb4a4: "dwi" -0xb4a5: "dwig" -0xb4a6: "dwigg" -0xb4a7: "dwigs" -0xb4a8: "dwin" -0xb4a9: "dwinj" -0xb4aa: "dwinh" -0xb4ab: "dwid" -0xb4ac: "dwil" -0xb4ad: "dwilg" -0xb4ae: "dwilm" -0xb4af: "dwilb" -0xb4b0: "dwils" -0xb4b1: "dwilt" -0xb4b2: "dwilp" -0xb4b3: "dwilh" -0xb4b4: "dwim" -0xb4b5: "dwib" -0xb4b6: "dwibs" -0xb4b7: "dwis" -0xb4b8: "dwiss" -0xb4b9: "dwing" -0xb4ba: "dwij" -0xb4bb: "dwic" -0xb4bc: "dwik" -0xb4bd: "dwit" -0xb4be: "dwip" -0xb4bf: "dwih" -0xb4c0: "dyu" -0xb4c1: "dyug" -0xb4c2: "dyugg" -0xb4c3: "dyugs" -0xb4c4: "dyun" -0xb4c5: "dyunj" -0xb4c6: "dyunh" -0xb4c7: "dyud" -0xb4c8: "dyul" -0xb4c9: "dyulg" -0xb4ca: "dyulm" -0xb4cb: "dyulb" -0xb4cc: "dyuls" -0xb4cd: "dyult" -0xb4ce: "dyulp" -0xb4cf: "dyulh" -0xb4d0: "dyum" -0xb4d1: "dyub" -0xb4d2: "dyubs" -0xb4d3: "dyus" -0xb4d4: "dyuss" -0xb4d5: "dyung" -0xb4d6: "dyuj" -0xb4d7: "dyuc" -0xb4d8: "dyuk" -0xb4d9: "dyut" -0xb4da: "dyup" -0xb4db: "dyuh" -0xb4dc: "deu" -0xb4dd: "deug" -0xb4de: "deugg" -0xb4df: "deugs" -0xb4e0: "deun" -0xb4e1: "deunj" -0xb4e2: "deunh" -0xb4e3: "deud" -0xb4e4: "deul" -0xb4e5: "deulg" -0xb4e6: "deulm" -0xb4e7: "deulb" -0xb4e8: "deuls" -0xb4e9: "deult" -0xb4ea: "deulp" -0xb4eb: "deulh" -0xb4ec: "deum" -0xb4ed: "deub" -0xb4ee: "deubs" -0xb4ef: "deus" -0xb4f0: "deuss" -0xb4f1: "deung" -0xb4f2: "deuj" -0xb4f3: "deuc" -0xb4f4: "deuk" -0xb4f5: "deut" -0xb4f6: "deup" -0xb4f7: "deuh" -0xb4f8: "dyi" -0xb4f9: "dyig" -0xb4fa: "dyigg" -0xb4fb: "dyigs" -0xb4fc: "dyin" -0xb4fd: "dyinj" -0xb4fe: "dyinh" -0xb4ff: "dyid" -/* x0b5 */ -0xb500: "dyil" -0xb501: "dyilg" -0xb502: "dyilm" -0xb503: "dyilb" -0xb504: "dyils" -0xb505: "dyilt" -0xb506: "dyilp" -0xb507: "dyilh" -0xb508: "dyim" -0xb509: "dyib" -0xb50a: "dyibs" -0xb50b: "dyis" -0xb50c: "dyiss" -0xb50d: "dying" -0xb50e: "dyij" -0xb50f: "dyic" -0xb510: "dyik" -0xb511: "dyit" -0xb512: "dyip" -0xb513: "dyih" -0xb514: "di" -0xb515: "dig" -0xb516: "digg" -0xb517: "digs" -0xb518: "din" -0xb519: "dinj" -0xb51a: "dinh" -0xb51b: "did" -0xb51c: "dil" -0xb51d: "dilg" -0xb51e: "dilm" -0xb51f: "dilb" -0xb520: "dils" -0xb521: "dilt" -0xb522: "dilp" -0xb523: "dilh" -0xb524: "dim" -0xb525: "dib" -0xb526: "dibs" -0xb527: "dis" -0xb528: "diss" -0xb529: "ding" -0xb52a: "dij" -0xb52b: "dic" -0xb52c: "dik" -0xb52d: "dit" -0xb52e: "dip" -0xb52f: "dih" -0xb530: "dda" -0xb531: "ddag" -0xb532: "ddagg" -0xb533: "ddags" -0xb534: "ddan" -0xb535: "ddanj" -0xb536: "ddanh" -0xb537: "ddad" -0xb538: "ddal" -0xb539: "ddalg" -0xb53a: "ddalm" -0xb53b: "ddalb" -0xb53c: "ddals" -0xb53d: "ddalt" -0xb53e: "ddalp" -0xb53f: "ddalh" -0xb540: "ddam" -0xb541: "ddab" -0xb542: "ddabs" -0xb543: "ddas" -0xb544: "ddass" -0xb545: "ddang" -0xb546: "ddaj" -0xb547: "ddac" -0xb548: "ddak" -0xb549: "ddat" -0xb54a: "ddap" -0xb54b: "ddah" -0xb54c: "ddae" -0xb54d: "ddaeg" -0xb54e: "ddaegg" -0xb54f: "ddaegs" -0xb550: "ddaen" -0xb551: "ddaenj" -0xb552: "ddaenh" -0xb553: "ddaed" -0xb554: "ddael" -0xb555: "ddaelg" -0xb556: "ddaelm" -0xb557: "ddaelb" -0xb558: "ddaels" -0xb559: "ddaelt" -0xb55a: "ddaelp" -0xb55b: "ddaelh" -0xb55c: "ddaem" -0xb55d: "ddaeb" -0xb55e: "ddaebs" -0xb55f: "ddaes" -0xb560: "ddaess" -0xb561: "ddaeng" -0xb562: "ddaej" -0xb563: "ddaec" -0xb564: "ddaek" -0xb565: "ddaet" -0xb566: "ddaep" -0xb567: "ddaeh" -0xb568: "ddya" -0xb569: "ddyag" -0xb56a: "ddyagg" -0xb56b: "ddyags" -0xb56c: "ddyan" -0xb56d: "ddyanj" -0xb56e: "ddyanh" -0xb56f: "ddyad" -0xb570: "ddyal" -0xb571: "ddyalg" -0xb572: "ddyalm" -0xb573: "ddyalb" -0xb574: "ddyals" -0xb575: "ddyalt" -0xb576: "ddyalp" -0xb577: "ddyalh" -0xb578: "ddyam" -0xb579: "ddyab" -0xb57a: "ddyabs" -0xb57b: "ddyas" -0xb57c: "ddyass" -0xb57d: "ddyang" -0xb57e: "ddyaj" -0xb57f: "ddyac" -0xb580: "ddyak" -0xb581: "ddyat" -0xb582: "ddyap" -0xb583: "ddyah" -0xb584: "ddyae" -0xb585: "ddyaeg" -0xb586: "ddyaegg" -0xb587: "ddyaegs" -0xb588: "ddyaen" -0xb589: "ddyaenj" -0xb58a: "ddyaenh" -0xb58b: "ddyaed" -0xb58c: "ddyael" -0xb58d: "ddyaelg" -0xb58e: "ddyaelm" -0xb58f: "ddyaelb" -0xb590: "ddyaels" -0xb591: "ddyaelt" -0xb592: "ddyaelp" -0xb593: "ddyaelh" -0xb594: "ddyaem" -0xb595: "ddyaeb" -0xb596: "ddyaebs" -0xb597: "ddyaes" -0xb598: "ddyaess" -0xb599: "ddyaeng" -0xb59a: "ddyaej" -0xb59b: "ddyaec" -0xb59c: "ddyaek" -0xb59d: "ddyaet" -0xb59e: "ddyaep" -0xb59f: "ddyaeh" -0xb5a0: "ddeo" -0xb5a1: "ddeog" -0xb5a2: "ddeogg" -0xb5a3: "ddeogs" -0xb5a4: "ddeon" -0xb5a5: "ddeonj" -0xb5a6: "ddeonh" -0xb5a7: "ddeod" -0xb5a8: "ddeol" -0xb5a9: "ddeolg" -0xb5aa: "ddeolm" -0xb5ab: "ddeolb" -0xb5ac: "ddeols" -0xb5ad: "ddeolt" -0xb5ae: "ddeolp" -0xb5af: "ddeolh" -0xb5b0: "ddeom" -0xb5b1: "ddeob" -0xb5b2: "ddeobs" -0xb5b3: "ddeos" -0xb5b4: "ddeoss" -0xb5b5: "ddeong" -0xb5b6: "ddeoj" -0xb5b7: "ddeoc" -0xb5b8: "ddeok" -0xb5b9: "ddeot" -0xb5ba: "ddeop" -0xb5bb: "ddeoh" -0xb5bc: "dde" -0xb5bd: "ddeg" -0xb5be: "ddegg" -0xb5bf: "ddegs" -0xb5c0: "dden" -0xb5c1: "ddenj" -0xb5c2: "ddenh" -0xb5c3: "dded" -0xb5c4: "ddel" -0xb5c5: "ddelg" -0xb5c6: "ddelm" -0xb5c7: "ddelb" -0xb5c8: "ddels" -0xb5c9: "ddelt" -0xb5ca: "ddelp" -0xb5cb: "ddelh" -0xb5cc: "ddem" -0xb5cd: "ddeb" -0xb5ce: "ddebs" -0xb5cf: "ddes" -0xb5d0: "ddess" -0xb5d1: "ddeng" -0xb5d2: "ddej" -0xb5d3: "ddec" -0xb5d4: "ddek" -0xb5d5: "ddet" -0xb5d6: "ddep" -0xb5d7: "ddeh" -0xb5d8: "ddyeo" -0xb5d9: "ddyeog" -0xb5da: "ddyeogg" -0xb5db: "ddyeogs" -0xb5dc: "ddyeon" -0xb5dd: "ddyeonj" -0xb5de: "ddyeonh" -0xb5df: "ddyeod" -0xb5e0: "ddyeol" -0xb5e1: "ddyeolg" -0xb5e2: "ddyeolm" -0xb5e3: "ddyeolb" -0xb5e4: "ddyeols" -0xb5e5: "ddyeolt" -0xb5e6: "ddyeolp" -0xb5e7: "ddyeolh" -0xb5e8: "ddyeom" -0xb5e9: "ddyeob" -0xb5ea: "ddyeobs" -0xb5eb: "ddyeos" -0xb5ec: "ddyeoss" -0xb5ed: "ddyeong" -0xb5ee: "ddyeoj" -0xb5ef: "ddyeoc" -0xb5f0: "ddyeok" -0xb5f1: "ddyeot" -0xb5f2: "ddyeop" -0xb5f3: "ddyeoh" -0xb5f4: "ddye" -0xb5f5: "ddyeg" -0xb5f6: "ddyegg" -0xb5f7: "ddyegs" -0xb5f8: "ddyen" -0xb5f9: "ddyenj" -0xb5fa: "ddyenh" -0xb5fb: "ddyed" -0xb5fc: "ddyel" -0xb5fd: "ddyelg" -0xb5fe: "ddyelm" -0xb5ff: "ddyelb" -/* x0b6 */ -0xb600: "ddyels" -0xb601: "ddyelt" -0xb602: "ddyelp" -0xb603: "ddyelh" -0xb604: "ddyem" -0xb605: "ddyeb" -0xb606: "ddyebs" -0xb607: "ddyes" -0xb608: "ddyess" -0xb609: "ddyeng" -0xb60a: "ddyej" -0xb60b: "ddyec" -0xb60c: "ddyek" -0xb60d: "ddyet" -0xb60e: "ddyep" -0xb60f: "ddyeh" -0xb610: "ddo" -0xb611: "ddog" -0xb612: "ddogg" -0xb613: "ddogs" -0xb614: "ddon" -0xb615: "ddonj" -0xb616: "ddonh" -0xb617: "ddod" -0xb618: "ddol" -0xb619: "ddolg" -0xb61a: "ddolm" -0xb61b: "ddolb" -0xb61c: "ddols" -0xb61d: "ddolt" -0xb61e: "ddolp" -0xb61f: "ddolh" -0xb620: "ddom" -0xb621: "ddob" -0xb622: "ddobs" -0xb623: "ddos" -0xb624: "ddoss" -0xb625: "ddong" -0xb626: "ddoj" -0xb627: "ddoc" -0xb628: "ddok" -0xb629: "ddot" -0xb62a: "ddop" -0xb62b: "ddoh" -0xb62c: "ddwa" -0xb62d: "ddwag" -0xb62e: "ddwagg" -0xb62f: "ddwags" -0xb630: "ddwan" -0xb631: "ddwanj" -0xb632: "ddwanh" -0xb633: "ddwad" -0xb634: "ddwal" -0xb635: "ddwalg" -0xb636: "ddwalm" -0xb637: "ddwalb" -0xb638: "ddwals" -0xb639: "ddwalt" -0xb63a: "ddwalp" -0xb63b: "ddwalh" -0xb63c: "ddwam" -0xb63d: "ddwab" -0xb63e: "ddwabs" -0xb63f: "ddwas" -0xb640: "ddwass" -0xb641: "ddwang" -0xb642: "ddwaj" -0xb643: "ddwac" -0xb644: "ddwak" -0xb645: "ddwat" -0xb646: "ddwap" -0xb647: "ddwah" -0xb648: "ddwae" -0xb649: "ddwaeg" -0xb64a: "ddwaegg" -0xb64b: "ddwaegs" -0xb64c: "ddwaen" -0xb64d: "ddwaenj" -0xb64e: "ddwaenh" -0xb64f: "ddwaed" -0xb650: "ddwael" -0xb651: "ddwaelg" -0xb652: "ddwaelm" -0xb653: "ddwaelb" -0xb654: "ddwaels" -0xb655: "ddwaelt" -0xb656: "ddwaelp" -0xb657: "ddwaelh" -0xb658: "ddwaem" -0xb659: "ddwaeb" -0xb65a: "ddwaebs" -0xb65b: "ddwaes" -0xb65c: "ddwaess" -0xb65d: "ddwaeng" -0xb65e: "ddwaej" -0xb65f: "ddwaec" -0xb660: "ddwaek" -0xb661: "ddwaet" -0xb662: "ddwaep" -0xb663: "ddwaeh" -0xb664: "ddoe" -0xb665: "ddoeg" -0xb666: "ddoegg" -0xb667: "ddoegs" -0xb668: "ddoen" -0xb669: "ddoenj" -0xb66a: "ddoenh" -0xb66b: "ddoed" -0xb66c: "ddoel" -0xb66d: "ddoelg" -0xb66e: "ddoelm" -0xb66f: "ddoelb" -0xb670: "ddoels" -0xb671: "ddoelt" -0xb672: "ddoelp" -0xb673: "ddoelh" -0xb674: "ddoem" -0xb675: "ddoeb" -0xb676: "ddoebs" -0xb677: "ddoes" -0xb678: "ddoess" -0xb679: "ddoeng" -0xb67a: "ddoej" -0xb67b: "ddoec" -0xb67c: "ddoek" -0xb67d: "ddoet" -0xb67e: "ddoep" -0xb67f: "ddoeh" -0xb680: "ddyo" -0xb681: "ddyog" -0xb682: "ddyogg" -0xb683: "ddyogs" -0xb684: "ddyon" -0xb685: "ddyonj" -0xb686: "ddyonh" -0xb687: "ddyod" -0xb688: "ddyol" -0xb689: "ddyolg" -0xb68a: "ddyolm" -0xb68b: "ddyolb" -0xb68c: "ddyols" -0xb68d: "ddyolt" -0xb68e: "ddyolp" -0xb68f: "ddyolh" -0xb690: "ddyom" -0xb691: "ddyob" -0xb692: "ddyobs" -0xb693: "ddyos" -0xb694: "ddyoss" -0xb695: "ddyong" -0xb696: "ddyoj" -0xb697: "ddyoc" -0xb698: "ddyok" -0xb699: "ddyot" -0xb69a: "ddyop" -0xb69b: "ddyoh" -0xb69c: "ddu" -0xb69d: "ddug" -0xb69e: "ddugg" -0xb69f: "ddugs" -0xb6a0: "ddun" -0xb6a1: "ddunj" -0xb6a2: "ddunh" -0xb6a3: "ddud" -0xb6a4: "ddul" -0xb6a5: "ddulg" -0xb6a6: "ddulm" -0xb6a7: "ddulb" -0xb6a8: "dduls" -0xb6a9: "ddult" -0xb6aa: "ddulp" -0xb6ab: "ddulh" -0xb6ac: "ddum" -0xb6ad: "ddub" -0xb6ae: "ddubs" -0xb6af: "ddus" -0xb6b0: "dduss" -0xb6b1: "ddung" -0xb6b2: "dduj" -0xb6b3: "dduc" -0xb6b4: "dduk" -0xb6b5: "ddut" -0xb6b6: "ddup" -0xb6b7: "dduh" -0xb6b8: "ddweo" -0xb6b9: "ddweog" -0xb6ba: "ddweogg" -0xb6bb: "ddweogs" -0xb6bc: "ddweon" -0xb6bd: "ddweonj" -0xb6be: "ddweonh" -0xb6bf: "ddweod" -0xb6c0: "ddweol" -0xb6c1: "ddweolg" -0xb6c2: "ddweolm" -0xb6c3: "ddweolb" -0xb6c4: "ddweols" -0xb6c5: "ddweolt" -0xb6c6: "ddweolp" -0xb6c7: "ddweolh" -0xb6c8: "ddweom" -0xb6c9: "ddweob" -0xb6ca: "ddweobs" -0xb6cb: "ddweos" -0xb6cc: "ddweoss" -0xb6cd: "ddweong" -0xb6ce: "ddweoj" -0xb6cf: "ddweoc" -0xb6d0: "ddweok" -0xb6d1: "ddweot" -0xb6d2: "ddweop" -0xb6d3: "ddweoh" -0xb6d4: "ddwe" -0xb6d5: "ddweg" -0xb6d6: "ddwegg" -0xb6d7: "ddwegs" -0xb6d8: "ddwen" -0xb6d9: "ddwenj" -0xb6da: "ddwenh" -0xb6db: "ddwed" -0xb6dc: "ddwel" -0xb6dd: "ddwelg" -0xb6de: "ddwelm" -0xb6df: "ddwelb" -0xb6e0: "ddwels" -0xb6e1: "ddwelt" -0xb6e2: "ddwelp" -0xb6e3: "ddwelh" -0xb6e4: "ddwem" -0xb6e5: "ddweb" -0xb6e6: "ddwebs" -0xb6e7: "ddwes" -0xb6e8: "ddwess" -0xb6e9: "ddweng" -0xb6ea: "ddwej" -0xb6eb: "ddwec" -0xb6ec: "ddwek" -0xb6ed: "ddwet" -0xb6ee: "ddwep" -0xb6ef: "ddweh" -0xb6f0: "ddwi" -0xb6f1: "ddwig" -0xb6f2: "ddwigg" -0xb6f3: "ddwigs" -0xb6f4: "ddwin" -0xb6f5: "ddwinj" -0xb6f6: "ddwinh" -0xb6f7: "ddwid" -0xb6f8: "ddwil" -0xb6f9: "ddwilg" -0xb6fa: "ddwilm" -0xb6fb: "ddwilb" -0xb6fc: "ddwils" -0xb6fd: "ddwilt" -0xb6fe: "ddwilp" -0xb6ff: "ddwilh" -/* x0b7 */ -0xb700: "ddwim" -0xb701: "ddwib" -0xb702: "ddwibs" -0xb703: "ddwis" -0xb704: "ddwiss" -0xb705: "ddwing" -0xb706: "ddwij" -0xb707: "ddwic" -0xb708: "ddwik" -0xb709: "ddwit" -0xb70a: "ddwip" -0xb70b: "ddwih" -0xb70c: "ddyu" -0xb70d: "ddyug" -0xb70e: "ddyugg" -0xb70f: "ddyugs" -0xb710: "ddyun" -0xb711: "ddyunj" -0xb712: "ddyunh" -0xb713: "ddyud" -0xb714: "ddyul" -0xb715: "ddyulg" -0xb716: "ddyulm" -0xb717: "ddyulb" -0xb718: "ddyuls" -0xb719: "ddyult" -0xb71a: "ddyulp" -0xb71b: "ddyulh" -0xb71c: "ddyum" -0xb71d: "ddyub" -0xb71e: "ddyubs" -0xb71f: "ddyus" -0xb720: "ddyuss" -0xb721: "ddyung" -0xb722: "ddyuj" -0xb723: "ddyuc" -0xb724: "ddyuk" -0xb725: "ddyut" -0xb726: "ddyup" -0xb727: "ddyuh" -0xb728: "ddeu" -0xb729: "ddeug" -0xb72a: "ddeugg" -0xb72b: "ddeugs" -0xb72c: "ddeun" -0xb72d: "ddeunj" -0xb72e: "ddeunh" -0xb72f: "ddeud" -0xb730: "ddeul" -0xb731: "ddeulg" -0xb732: "ddeulm" -0xb733: "ddeulb" -0xb734: "ddeuls" -0xb735: "ddeult" -0xb736: "ddeulp" -0xb737: "ddeulh" -0xb738: "ddeum" -0xb739: "ddeub" -0xb73a: "ddeubs" -0xb73b: "ddeus" -0xb73c: "ddeuss" -0xb73d: "ddeung" -0xb73e: "ddeuj" -0xb73f: "ddeuc" -0xb740: "ddeuk" -0xb741: "ddeut" -0xb742: "ddeup" -0xb743: "ddeuh" -0xb744: "ddyi" -0xb745: "ddyig" -0xb746: "ddyigg" -0xb747: "ddyigs" -0xb748: "ddyin" -0xb749: "ddyinj" -0xb74a: "ddyinh" -0xb74b: "ddyid" -0xb74c: "ddyil" -0xb74d: "ddyilg" -0xb74e: "ddyilm" -0xb74f: "ddyilb" -0xb750: "ddyils" -0xb751: "ddyilt" -0xb752: "ddyilp" -0xb753: "ddyilh" -0xb754: "ddyim" -0xb755: "ddyib" -0xb756: "ddyibs" -0xb757: "ddyis" -0xb758: "ddyiss" -0xb759: "ddying" -0xb75a: "ddyij" -0xb75b: "ddyic" -0xb75c: "ddyik" -0xb75d: "ddyit" -0xb75e: "ddyip" -0xb75f: "ddyih" -0xb760: "ddi" -0xb761: "ddig" -0xb762: "ddigg" -0xb763: "ddigs" -0xb764: "ddin" -0xb765: "ddinj" -0xb766: "ddinh" -0xb767: "ddid" -0xb768: "ddil" -0xb769: "ddilg" -0xb76a: "ddilm" -0xb76b: "ddilb" -0xb76c: "ddils" -0xb76d: "ddilt" -0xb76e: "ddilp" -0xb76f: "ddilh" -0xb770: "ddim" -0xb771: "ddib" -0xb772: "ddibs" -0xb773: "ddis" -0xb774: "ddiss" -0xb775: "dding" -0xb776: "ddij" -0xb777: "ddic" -0xb778: "ddik" -0xb779: "ddit" -0xb77a: "ddip" -0xb77b: "ddih" -0xb77c: "ra" -0xb77d: "rag" -0xb77e: "ragg" -0xb77f: "rags" -0xb780: "ran" -0xb781: "ranj" -0xb782: "ranh" -0xb783: "rad" -0xb784: "ral" -0xb785: "ralg" -0xb786: "ralm" -0xb787: "ralb" -0xb788: "rals" -0xb789: "ralt" -0xb78a: "ralp" -0xb78b: "ralh" -0xb78c: "ram" -0xb78d: "rab" -0xb78e: "rabs" -0xb78f: "ras" -0xb790: "rass" -0xb791: "rang" -0xb792: "raj" -0xb793: "rac" -0xb794: "rak" -0xb795: "rat" -0xb796: "rap" -0xb797: "rah" -0xb798: "rae" -0xb799: "raeg" -0xb79a: "raegg" -0xb79b: "raegs" -0xb79c: "raen" -0xb79d: "raenj" -0xb79e: "raenh" -0xb79f: "raed" -0xb7a0: "rael" -0xb7a1: "raelg" -0xb7a2: "raelm" -0xb7a3: "raelb" -0xb7a4: "raels" -0xb7a5: "raelt" -0xb7a6: "raelp" -0xb7a7: "raelh" -0xb7a8: "raem" -0xb7a9: "raeb" -0xb7aa: "raebs" -0xb7ab: "raes" -0xb7ac: "raess" -0xb7ad: "raeng" -0xb7ae: "raej" -0xb7af: "raec" -0xb7b0: "raek" -0xb7b1: "raet" -0xb7b2: "raep" -0xb7b3: "raeh" -0xb7b4: "rya" -0xb7b5: "ryag" -0xb7b6: "ryagg" -0xb7b7: "ryags" -0xb7b8: "ryan" -0xb7b9: "ryanj" -0xb7ba: "ryanh" -0xb7bb: "ryad" -0xb7bc: "ryal" -0xb7bd: "ryalg" -0xb7be: "ryalm" -0xb7bf: "ryalb" -0xb7c0: "ryals" -0xb7c1: "ryalt" -0xb7c2: "ryalp" -0xb7c3: "ryalh" -0xb7c4: "ryam" -0xb7c5: "ryab" -0xb7c6: "ryabs" -0xb7c7: "ryas" -0xb7c8: "ryass" -0xb7c9: "ryang" -0xb7ca: "ryaj" -0xb7cb: "ryac" -0xb7cc: "ryak" -0xb7cd: "ryat" -0xb7ce: "ryap" -0xb7cf: "ryah" -0xb7d0: "ryae" -0xb7d1: "ryaeg" -0xb7d2: "ryaegg" -0xb7d3: "ryaegs" -0xb7d4: "ryaen" -0xb7d5: "ryaenj" -0xb7d6: "ryaenh" -0xb7d7: "ryaed" -0xb7d8: "ryael" -0xb7d9: "ryaelg" -0xb7da: "ryaelm" -0xb7db: "ryaelb" -0xb7dc: "ryaels" -0xb7dd: "ryaelt" -0xb7de: "ryaelp" -0xb7df: "ryaelh" -0xb7e0: "ryaem" -0xb7e1: "ryaeb" -0xb7e2: "ryaebs" -0xb7e3: "ryaes" -0xb7e4: "ryaess" -0xb7e5: "ryaeng" -0xb7e6: "ryaej" -0xb7e7: "ryaec" -0xb7e8: "ryaek" -0xb7e9: "ryaet" -0xb7ea: "ryaep" -0xb7eb: "ryaeh" -0xb7ec: "reo" -0xb7ed: "reog" -0xb7ee: "reogg" -0xb7ef: "reogs" -0xb7f0: "reon" -0xb7f1: "reonj" -0xb7f2: "reonh" -0xb7f3: "reod" -0xb7f4: "reol" -0xb7f5: "reolg" -0xb7f6: "reolm" -0xb7f7: "reolb" -0xb7f8: "reols" -0xb7f9: "reolt" -0xb7fa: "reolp" -0xb7fb: "reolh" -0xb7fc: "reom" -0xb7fd: "reob" -0xb7fe: "reobs" -0xb7ff: "reos" -/* x0b8 */ -0xb800: "reoss" -0xb801: "reong" -0xb802: "reoj" -0xb803: "reoc" -0xb804: "reok" -0xb805: "reot" -0xb806: "reop" -0xb807: "reoh" -0xb808: "re" -0xb809: "reg" -0xb80a: "regg" -0xb80b: "regs" -0xb80c: "ren" -0xb80d: "renj" -0xb80e: "renh" -0xb80f: "red" -0xb810: "rel" -0xb811: "relg" -0xb812: "relm" -0xb813: "relb" -0xb814: "rels" -0xb815: "relt" -0xb816: "relp" -0xb817: "relh" -0xb818: "rem" -0xb819: "reb" -0xb81a: "rebs" -0xb81b: "res" -0xb81c: "ress" -0xb81d: "reng" -0xb81e: "rej" -0xb81f: "rec" -0xb820: "rek" -0xb821: "ret" -0xb822: "rep" -0xb823: "reh" -0xb824: "ryeo" -0xb825: "ryeog" -0xb826: "ryeogg" -0xb827: "ryeogs" -0xb828: "ryeon" -0xb829: "ryeonj" -0xb82a: "ryeonh" -0xb82b: "ryeod" -0xb82c: "ryeol" -0xb82d: "ryeolg" -0xb82e: "ryeolm" -0xb82f: "ryeolb" -0xb830: "ryeols" -0xb831: "ryeolt" -0xb832: "ryeolp" -0xb833: "ryeolh" -0xb834: "ryeom" -0xb835: "ryeob" -0xb836: "ryeobs" -0xb837: "ryeos" -0xb838: "ryeoss" -0xb839: "ryeong" -0xb83a: "ryeoj" -0xb83b: "ryeoc" -0xb83c: "ryeok" -0xb83d: "ryeot" -0xb83e: "ryeop" -0xb83f: "ryeoh" -0xb840: "rye" -0xb841: "ryeg" -0xb842: "ryegg" -0xb843: "ryegs" -0xb844: "ryen" -0xb845: "ryenj" -0xb846: "ryenh" -0xb847: "ryed" -0xb848: "ryel" -0xb849: "ryelg" -0xb84a: "ryelm" -0xb84b: "ryelb" -0xb84c: "ryels" -0xb84d: "ryelt" -0xb84e: "ryelp" -0xb84f: "ryelh" -0xb850: "ryem" -0xb851: "ryeb" -0xb852: "ryebs" -0xb853: "ryes" -0xb854: "ryess" -0xb855: "ryeng" -0xb856: "ryej" -0xb857: "ryec" -0xb858: "ryek" -0xb859: "ryet" -0xb85a: "ryep" -0xb85b: "ryeh" -0xb85c: "ro" -0xb85d: "rog" -0xb85e: "rogg" -0xb85f: "rogs" -0xb860: "ron" -0xb861: "ronj" -0xb862: "ronh" -0xb863: "rod" -0xb864: "rol" -0xb865: "rolg" -0xb866: "rolm" -0xb867: "rolb" -0xb868: "rols" -0xb869: "rolt" -0xb86a: "rolp" -0xb86b: "rolh" -0xb86c: "rom" -0xb86d: "rob" -0xb86e: "robs" -0xb86f: "ros" -0xb870: "ross" -0xb871: "rong" -0xb872: "roj" -0xb873: "roc" -0xb874: "rok" -0xb875: "rot" -0xb876: "rop" -0xb877: "roh" -0xb878: "rwa" -0xb879: "rwag" -0xb87a: "rwagg" -0xb87b: "rwags" -0xb87c: "rwan" -0xb87d: "rwanj" -0xb87e: "rwanh" -0xb87f: "rwad" -0xb880: "rwal" -0xb881: "rwalg" -0xb882: "rwalm" -0xb883: "rwalb" -0xb884: "rwals" -0xb885: "rwalt" -0xb886: "rwalp" -0xb887: "rwalh" -0xb888: "rwam" -0xb889: "rwab" -0xb88a: "rwabs" -0xb88b: "rwas" -0xb88c: "rwass" -0xb88d: "rwang" -0xb88e: "rwaj" -0xb88f: "rwac" -0xb890: "rwak" -0xb891: "rwat" -0xb892: "rwap" -0xb893: "rwah" -0xb894: "rwae" -0xb895: "rwaeg" -0xb896: "rwaegg" -0xb897: "rwaegs" -0xb898: "rwaen" -0xb899: "rwaenj" -0xb89a: "rwaenh" -0xb89b: "rwaed" -0xb89c: "rwael" -0xb89d: "rwaelg" -0xb89e: "rwaelm" -0xb89f: "rwaelb" -0xb8a0: "rwaels" -0xb8a1: "rwaelt" -0xb8a2: "rwaelp" -0xb8a3: "rwaelh" -0xb8a4: "rwaem" -0xb8a5: "rwaeb" -0xb8a6: "rwaebs" -0xb8a7: "rwaes" -0xb8a8: "rwaess" -0xb8a9: "rwaeng" -0xb8aa: "rwaej" -0xb8ab: "rwaec" -0xb8ac: "rwaek" -0xb8ad: "rwaet" -0xb8ae: "rwaep" -0xb8af: "rwaeh" -0xb8b0: "roe" -0xb8b1: "roeg" -0xb8b2: "roegg" -0xb8b3: "roegs" -0xb8b4: "roen" -0xb8b5: "roenj" -0xb8b6: "roenh" -0xb8b7: "roed" -0xb8b8: "roel" -0xb8b9: "roelg" -0xb8ba: "roelm" -0xb8bb: "roelb" -0xb8bc: "roels" -0xb8bd: "roelt" -0xb8be: "roelp" -0xb8bf: "roelh" -0xb8c0: "roem" -0xb8c1: "roeb" -0xb8c2: "roebs" -0xb8c3: "roes" -0xb8c4: "roess" -0xb8c5: "roeng" -0xb8c6: "roej" -0xb8c7: "roec" -0xb8c8: "roek" -0xb8c9: "roet" -0xb8ca: "roep" -0xb8cb: "roeh" -0xb8cc: "ryo" -0xb8cd: "ryog" -0xb8ce: "ryogg" -0xb8cf: "ryogs" -0xb8d0: "ryon" -0xb8d1: "ryonj" -0xb8d2: "ryonh" -0xb8d3: "ryod" -0xb8d4: "ryol" -0xb8d5: "ryolg" -0xb8d6: "ryolm" -0xb8d7: "ryolb" -0xb8d8: "ryols" -0xb8d9: "ryolt" -0xb8da: "ryolp" -0xb8db: "ryolh" -0xb8dc: "ryom" -0xb8dd: "ryob" -0xb8de: "ryobs" -0xb8df: "ryos" -0xb8e0: "ryoss" -0xb8e1: "ryong" -0xb8e2: "ryoj" -0xb8e3: "ryoc" -0xb8e4: "ryok" -0xb8e5: "ryot" -0xb8e6: "ryop" -0xb8e7: "ryoh" -0xb8e8: "ru" -0xb8e9: "rug" -0xb8ea: "rugg" -0xb8eb: "rugs" -0xb8ec: "run" -0xb8ed: "runj" -0xb8ee: "runh" -0xb8ef: "rud" -0xb8f0: "rul" -0xb8f1: "rulg" -0xb8f2: "rulm" -0xb8f3: "rulb" -0xb8f4: "ruls" -0xb8f5: "rult" -0xb8f6: "rulp" -0xb8f7: "rulh" -0xb8f8: "rum" -0xb8f9: "rub" -0xb8fa: "rubs" -0xb8fb: "rus" -0xb8fc: "russ" -0xb8fd: "rung" -0xb8fe: "ruj" -0xb8ff: "ruc" -/* x0b9 */ -0xb900: "ruk" -0xb901: "rut" -0xb902: "rup" -0xb903: "ruh" -0xb904: "rweo" -0xb905: "rweog" -0xb906: "rweogg" -0xb907: "rweogs" -0xb908: "rweon" -0xb909: "rweonj" -0xb90a: "rweonh" -0xb90b: "rweod" -0xb90c: "rweol" -0xb90d: "rweolg" -0xb90e: "rweolm" -0xb90f: "rweolb" -0xb910: "rweols" -0xb911: "rweolt" -0xb912: "rweolp" -0xb913: "rweolh" -0xb914: "rweom" -0xb915: "rweob" -0xb916: "rweobs" -0xb917: "rweos" -0xb918: "rweoss" -0xb919: "rweong" -0xb91a: "rweoj" -0xb91b: "rweoc" -0xb91c: "rweok" -0xb91d: "rweot" -0xb91e: "rweop" -0xb91f: "rweoh" -0xb920: "rwe" -0xb921: "rweg" -0xb922: "rwegg" -0xb923: "rwegs" -0xb924: "rwen" -0xb925: "rwenj" -0xb926: "rwenh" -0xb927: "rwed" -0xb928: "rwel" -0xb929: "rwelg" -0xb92a: "rwelm" -0xb92b: "rwelb" -0xb92c: "rwels" -0xb92d: "rwelt" -0xb92e: "rwelp" -0xb92f: "rwelh" -0xb930: "rwem" -0xb931: "rweb" -0xb932: "rwebs" -0xb933: "rwes" -0xb934: "rwess" -0xb935: "rweng" -0xb936: "rwej" -0xb937: "rwec" -0xb938: "rwek" -0xb939: "rwet" -0xb93a: "rwep" -0xb93b: "rweh" -0xb93c: "rwi" -0xb93d: "rwig" -0xb93e: "rwigg" -0xb93f: "rwigs" -0xb940: "rwin" -0xb941: "rwinj" -0xb942: "rwinh" -0xb943: "rwid" -0xb944: "rwil" -0xb945: "rwilg" -0xb946: "rwilm" -0xb947: "rwilb" -0xb948: "rwils" -0xb949: "rwilt" -0xb94a: "rwilp" -0xb94b: "rwilh" -0xb94c: "rwim" -0xb94d: "rwib" -0xb94e: "rwibs" -0xb94f: "rwis" -0xb950: "rwiss" -0xb951: "rwing" -0xb952: "rwij" -0xb953: "rwic" -0xb954: "rwik" -0xb955: "rwit" -0xb956: "rwip" -0xb957: "rwih" -0xb958: "ryu" -0xb959: "ryug" -0xb95a: "ryugg" -0xb95b: "ryugs" -0xb95c: "ryun" -0xb95d: "ryunj" -0xb95e: "ryunh" -0xb95f: "ryud" -0xb960: "ryul" -0xb961: "ryulg" -0xb962: "ryulm" -0xb963: "ryulb" -0xb964: "ryuls" -0xb965: "ryult" -0xb966: "ryulp" -0xb967: "ryulh" -0xb968: "ryum" -0xb969: "ryub" -0xb96a: "ryubs" -0xb96b: "ryus" -0xb96c: "ryuss" -0xb96d: "ryung" -0xb96e: "ryuj" -0xb96f: "ryuc" -0xb970: "ryuk" -0xb971: "ryut" -0xb972: "ryup" -0xb973: "ryuh" -0xb974: "reu" -0xb975: "reug" -0xb976: "reugg" -0xb977: "reugs" -0xb978: "reun" -0xb979: "reunj" -0xb97a: "reunh" -0xb97b: "reud" -0xb97c: "reul" -0xb97d: "reulg" -0xb97e: "reulm" -0xb97f: "reulb" -0xb980: "reuls" -0xb981: "reult" -0xb982: "reulp" -0xb983: "reulh" -0xb984: "reum" -0xb985: "reub" -0xb986: "reubs" -0xb987: "reus" -0xb988: "reuss" -0xb989: "reung" -0xb98a: "reuj" -0xb98b: "reuc" -0xb98c: "reuk" -0xb98d: "reut" -0xb98e: "reup" -0xb98f: "reuh" -0xb990: "ryi" -0xb991: "ryig" -0xb992: "ryigg" -0xb993: "ryigs" -0xb994: "ryin" -0xb995: "ryinj" -0xb996: "ryinh" -0xb997: "ryid" -0xb998: "ryil" -0xb999: "ryilg" -0xb99a: "ryilm" -0xb99b: "ryilb" -0xb99c: "ryils" -0xb99d: "ryilt" -0xb99e: "ryilp" -0xb99f: "ryilh" -0xb9a0: "ryim" -0xb9a1: "ryib" -0xb9a2: "ryibs" -0xb9a3: "ryis" -0xb9a4: "ryiss" -0xb9a5: "rying" -0xb9a6: "ryij" -0xb9a7: "ryic" -0xb9a8: "ryik" -0xb9a9: "ryit" -0xb9aa: "ryip" -0xb9ab: "ryih" -0xb9ac: "ri" -0xb9ad: "rig" -0xb9ae: "rigg" -0xb9af: "rigs" -0xb9b0: "rin" -0xb9b1: "rinj" -0xb9b2: "rinh" -0xb9b3: "rid" -0xb9b4: "ril" -0xb9b5: "rilg" -0xb9b6: "rilm" -0xb9b7: "rilb" -0xb9b8: "rils" -0xb9b9: "rilt" -0xb9ba: "rilp" -0xb9bb: "rilh" -0xb9bc: "rim" -0xb9bd: "rib" -0xb9be: "ribs" -0xb9bf: "ris" -0xb9c0: "riss" -0xb9c1: "ring" -0xb9c2: "rij" -0xb9c3: "ric" -0xb9c4: "rik" -0xb9c5: "rit" -0xb9c6: "rip" -0xb9c7: "rih" -0xb9c8: "ma" -0xb9c9: "mag" -0xb9ca: "magg" -0xb9cb: "mags" -0xb9cc: "man" -0xb9cd: "manj" -0xb9ce: "manh" -0xb9cf: "mad" -0xb9d0: "mal" -0xb9d1: "malg" -0xb9d2: "malm" -0xb9d3: "malb" -0xb9d4: "mals" -0xb9d5: "malt" -0xb9d6: "malp" -0xb9d7: "malh" -0xb9d8: "mam" -0xb9d9: "mab" -0xb9da: "mabs" -0xb9db: "mas" -0xb9dc: "mass" -0xb9dd: "mang" -0xb9de: "maj" -0xb9df: "mac" -0xb9e0: "mak" -0xb9e1: "mat" -0xb9e2: "map" -0xb9e3: "mah" -0xb9e4: "mae" -0xb9e5: "maeg" -0xb9e6: "maegg" -0xb9e7: "maegs" -0xb9e8: "maen" -0xb9e9: "maenj" -0xb9ea: "maenh" -0xb9eb: "maed" -0xb9ec: "mael" -0xb9ed: "maelg" -0xb9ee: "maelm" -0xb9ef: "maelb" -0xb9f0: "maels" -0xb9f1: "maelt" -0xb9f2: "maelp" -0xb9f3: "maelh" -0xb9f4: "maem" -0xb9f5: "maeb" -0xb9f6: "maebs" -0xb9f7: "maes" -0xb9f8: "maess" -0xb9f9: "maeng" -0xb9fa: "maej" -0xb9fb: "maec" -0xb9fc: "maek" -0xb9fd: "maet" -0xb9fe: "maep" -0xb9ff: "maeh" -/* x0ba */ -0xba00: "mya" -0xba01: "myag" -0xba02: "myagg" -0xba03: "myags" -0xba04: "myan" -0xba05: "myanj" -0xba06: "myanh" -0xba07: "myad" -0xba08: "myal" -0xba09: "myalg" -0xba0a: "myalm" -0xba0b: "myalb" -0xba0c: "myals" -0xba0d: "myalt" -0xba0e: "myalp" -0xba0f: "myalh" -0xba10: "myam" -0xba11: "myab" -0xba12: "myabs" -0xba13: "myas" -0xba14: "myass" -0xba15: "myang" -0xba16: "myaj" -0xba17: "myac" -0xba18: "myak" -0xba19: "myat" -0xba1a: "myap" -0xba1b: "myah" -0xba1c: "myae" -0xba1d: "myaeg" -0xba1e: "myaegg" -0xba1f: "myaegs" -0xba20: "myaen" -0xba21: "myaenj" -0xba22: "myaenh" -0xba23: "myaed" -0xba24: "myael" -0xba25: "myaelg" -0xba26: "myaelm" -0xba27: "myaelb" -0xba28: "myaels" -0xba29: "myaelt" -0xba2a: "myaelp" -0xba2b: "myaelh" -0xba2c: "myaem" -0xba2d: "myaeb" -0xba2e: "myaebs" -0xba2f: "myaes" -0xba30: "myaess" -0xba31: "myaeng" -0xba32: "myaej" -0xba33: "myaec" -0xba34: "myaek" -0xba35: "myaet" -0xba36: "myaep" -0xba37: "myaeh" -0xba38: "meo" -0xba39: "meog" -0xba3a: "meogg" -0xba3b: "meogs" -0xba3c: "meon" -0xba3d: "meonj" -0xba3e: "meonh" -0xba3f: "meod" -0xba40: "meol" -0xba41: "meolg" -0xba42: "meolm" -0xba43: "meolb" -0xba44: "meols" -0xba45: "meolt" -0xba46: "meolp" -0xba47: "meolh" -0xba48: "meom" -0xba49: "meob" -0xba4a: "meobs" -0xba4b: "meos" -0xba4c: "meoss" -0xba4d: "meong" -0xba4e: "meoj" -0xba4f: "meoc" -0xba50: "meok" -0xba51: "meot" -0xba52: "meop" -0xba53: "meoh" -0xba54: "me" -0xba55: "meg" -0xba56: "megg" -0xba57: "megs" -0xba58: "men" -0xba59: "menj" -0xba5a: "menh" -0xba5b: "med" -0xba5c: "mel" -0xba5d: "melg" -0xba5e: "melm" -0xba5f: "melb" -0xba60: "mels" -0xba61: "melt" -0xba62: "melp" -0xba63: "melh" -0xba64: "mem" -0xba65: "meb" -0xba66: "mebs" -0xba67: "mes" -0xba68: "mess" -0xba69: "meng" -0xba6a: "mej" -0xba6b: "mec" -0xba6c: "mek" -0xba6d: "met" -0xba6e: "mep" -0xba6f: "meh" -0xba70: "myeo" -0xba71: "myeog" -0xba72: "myeogg" -0xba73: "myeogs" -0xba74: "myeon" -0xba75: "myeonj" -0xba76: "myeonh" -0xba77: "myeod" -0xba78: "myeol" -0xba79: "myeolg" -0xba7a: "myeolm" -0xba7b: "myeolb" -0xba7c: "myeols" -0xba7d: "myeolt" -0xba7e: "myeolp" -0xba7f: "myeolh" -0xba80: "myeom" -0xba81: "myeob" -0xba82: "myeobs" -0xba83: "myeos" -0xba84: "myeoss" -0xba85: "myeong" -0xba86: "myeoj" -0xba87: "myeoc" -0xba88: "myeok" -0xba89: "myeot" -0xba8a: "myeop" -0xba8b: "myeoh" -0xba8c: "mye" -0xba8d: "myeg" -0xba8e: "myegg" -0xba8f: "myegs" -0xba90: "myen" -0xba91: "myenj" -0xba92: "myenh" -0xba93: "myed" -0xba94: "myel" -0xba95: "myelg" -0xba96: "myelm" -0xba97: "myelb" -0xba98: "myels" -0xba99: "myelt" -0xba9a: "myelp" -0xba9b: "myelh" -0xba9c: "myem" -0xba9d: "myeb" -0xba9e: "myebs" -0xba9f: "myes" -0xbaa0: "myess" -0xbaa1: "myeng" -0xbaa2: "myej" -0xbaa3: "myec" -0xbaa4: "myek" -0xbaa5: "myet" -0xbaa6: "myep" -0xbaa7: "myeh" -0xbaa8: "mo" -0xbaa9: "mog" -0xbaaa: "mogg" -0xbaab: "mogs" -0xbaac: "mon" -0xbaad: "monj" -0xbaae: "monh" -0xbaaf: "mod" -0xbab0: "mol" -0xbab1: "molg" -0xbab2: "molm" -0xbab3: "molb" -0xbab4: "mols" -0xbab5: "molt" -0xbab6: "molp" -0xbab7: "molh" -0xbab8: "mom" -0xbab9: "mob" -0xbaba: "mobs" -0xbabb: "mos" -0xbabc: "moss" -0xbabd: "mong" -0xbabe: "moj" -0xbabf: "moc" -0xbac0: "mok" -0xbac1: "mot" -0xbac2: "mop" -0xbac3: "moh" -0xbac4: "mwa" -0xbac5: "mwag" -0xbac6: "mwagg" -0xbac7: "mwags" -0xbac8: "mwan" -0xbac9: "mwanj" -0xbaca: "mwanh" -0xbacb: "mwad" -0xbacc: "mwal" -0xbacd: "mwalg" -0xbace: "mwalm" -0xbacf: "mwalb" -0xbad0: "mwals" -0xbad1: "mwalt" -0xbad2: "mwalp" -0xbad3: "mwalh" -0xbad4: "mwam" -0xbad5: "mwab" -0xbad6: "mwabs" -0xbad7: "mwas" -0xbad8: "mwass" -0xbad9: "mwang" -0xbada: "mwaj" -0xbadb: "mwac" -0xbadc: "mwak" -0xbadd: "mwat" -0xbade: "mwap" -0xbadf: "mwah" -0xbae0: "mwae" -0xbae1: "mwaeg" -0xbae2: "mwaegg" -0xbae3: "mwaegs" -0xbae4: "mwaen" -0xbae5: "mwaenj" -0xbae6: "mwaenh" -0xbae7: "mwaed" -0xbae8: "mwael" -0xbae9: "mwaelg" -0xbaea: "mwaelm" -0xbaeb: "mwaelb" -0xbaec: "mwaels" -0xbaed: "mwaelt" -0xbaee: "mwaelp" -0xbaef: "mwaelh" -0xbaf0: "mwaem" -0xbaf1: "mwaeb" -0xbaf2: "mwaebs" -0xbaf3: "mwaes" -0xbaf4: "mwaess" -0xbaf5: "mwaeng" -0xbaf6: "mwaej" -0xbaf7: "mwaec" -0xbaf8: "mwaek" -0xbaf9: "mwaet" -0xbafa: "mwaep" -0xbafb: "mwaeh" -0xbafc: "moe" -0xbafd: "moeg" -0xbafe: "moegg" -0xbaff: "moegs" -/* x0bb */ -0xbb00: "moen" -0xbb01: "moenj" -0xbb02: "moenh" -0xbb03: "moed" -0xbb04: "moel" -0xbb05: "moelg" -0xbb06: "moelm" -0xbb07: "moelb" -0xbb08: "moels" -0xbb09: "moelt" -0xbb0a: "moelp" -0xbb0b: "moelh" -0xbb0c: "moem" -0xbb0d: "moeb" -0xbb0e: "moebs" -0xbb0f: "moes" -0xbb10: "moess" -0xbb11: "moeng" -0xbb12: "moej" -0xbb13: "moec" -0xbb14: "moek" -0xbb15: "moet" -0xbb16: "moep" -0xbb17: "moeh" -0xbb18: "myo" -0xbb19: "myog" -0xbb1a: "myogg" -0xbb1b: "myogs" -0xbb1c: "myon" -0xbb1d: "myonj" -0xbb1e: "myonh" -0xbb1f: "myod" -0xbb20: "myol" -0xbb21: "myolg" -0xbb22: "myolm" -0xbb23: "myolb" -0xbb24: "myols" -0xbb25: "myolt" -0xbb26: "myolp" -0xbb27: "myolh" -0xbb28: "myom" -0xbb29: "myob" -0xbb2a: "myobs" -0xbb2b: "myos" -0xbb2c: "myoss" -0xbb2d: "myong" -0xbb2e: "myoj" -0xbb2f: "myoc" -0xbb30: "myok" -0xbb31: "myot" -0xbb32: "myop" -0xbb33: "myoh" -0xbb34: "mu" -0xbb35: "mug" -0xbb36: "mugg" -0xbb37: "mugs" -0xbb38: "mun" -0xbb39: "munj" -0xbb3a: "munh" -0xbb3b: "mud" -0xbb3c: "mul" -0xbb3d: "mulg" -0xbb3e: "mulm" -0xbb3f: "mulb" -0xbb40: "muls" -0xbb41: "mult" -0xbb42: "mulp" -0xbb43: "mulh" -0xbb44: "mum" -0xbb45: "mub" -0xbb46: "mubs" -0xbb47: "mus" -0xbb48: "muss" -0xbb49: "mung" -0xbb4a: "muj" -0xbb4b: "muc" -0xbb4c: "muk" -0xbb4d: "mut" -0xbb4e: "mup" -0xbb4f: "muh" -0xbb50: "mweo" -0xbb51: "mweog" -0xbb52: "mweogg" -0xbb53: "mweogs" -0xbb54: "mweon" -0xbb55: "mweonj" -0xbb56: "mweonh" -0xbb57: "mweod" -0xbb58: "mweol" -0xbb59: "mweolg" -0xbb5a: "mweolm" -0xbb5b: "mweolb" -0xbb5c: "mweols" -0xbb5d: "mweolt" -0xbb5e: "mweolp" -0xbb5f: "mweolh" -0xbb60: "mweom" -0xbb61: "mweob" -0xbb62: "mweobs" -0xbb63: "mweos" -0xbb64: "mweoss" -0xbb65: "mweong" -0xbb66: "mweoj" -0xbb67: "mweoc" -0xbb68: "mweok" -0xbb69: "mweot" -0xbb6a: "mweop" -0xbb6b: "mweoh" -0xbb6c: "mwe" -0xbb6d: "mweg" -0xbb6e: "mwegg" -0xbb6f: "mwegs" -0xbb70: "mwen" -0xbb71: "mwenj" -0xbb72: "mwenh" -0xbb73: "mwed" -0xbb74: "mwel" -0xbb75: "mwelg" -0xbb76: "mwelm" -0xbb77: "mwelb" -0xbb78: "mwels" -0xbb79: "mwelt" -0xbb7a: "mwelp" -0xbb7b: "mwelh" -0xbb7c: "mwem" -0xbb7d: "mweb" -0xbb7e: "mwebs" -0xbb7f: "mwes" -0xbb80: "mwess" -0xbb81: "mweng" -0xbb82: "mwej" -0xbb83: "mwec" -0xbb84: "mwek" -0xbb85: "mwet" -0xbb86: "mwep" -0xbb87: "mweh" -0xbb88: "mwi" -0xbb89: "mwig" -0xbb8a: "mwigg" -0xbb8b: "mwigs" -0xbb8c: "mwin" -0xbb8d: "mwinj" -0xbb8e: "mwinh" -0xbb8f: "mwid" -0xbb90: "mwil" -0xbb91: "mwilg" -0xbb92: "mwilm" -0xbb93: "mwilb" -0xbb94: "mwils" -0xbb95: "mwilt" -0xbb96: "mwilp" -0xbb97: "mwilh" -0xbb98: "mwim" -0xbb99: "mwib" -0xbb9a: "mwibs" -0xbb9b: "mwis" -0xbb9c: "mwiss" -0xbb9d: "mwing" -0xbb9e: "mwij" -0xbb9f: "mwic" -0xbba0: "mwik" -0xbba1: "mwit" -0xbba2: "mwip" -0xbba3: "mwih" -0xbba4: "myu" -0xbba5: "myug" -0xbba6: "myugg" -0xbba7: "myugs" -0xbba8: "myun" -0xbba9: "myunj" -0xbbaa: "myunh" -0xbbab: "myud" -0xbbac: "myul" -0xbbad: "myulg" -0xbbae: "myulm" -0xbbaf: "myulb" -0xbbb0: "myuls" -0xbbb1: "myult" -0xbbb2: "myulp" -0xbbb3: "myulh" -0xbbb4: "myum" -0xbbb5: "myub" -0xbbb6: "myubs" -0xbbb7: "myus" -0xbbb8: "myuss" -0xbbb9: "myung" -0xbbba: "myuj" -0xbbbb: "myuc" -0xbbbc: "myuk" -0xbbbd: "myut" -0xbbbe: "myup" -0xbbbf: "myuh" -0xbbc0: "meu" -0xbbc1: "meug" -0xbbc2: "meugg" -0xbbc3: "meugs" -0xbbc4: "meun" -0xbbc5: "meunj" -0xbbc6: "meunh" -0xbbc7: "meud" -0xbbc8: "meul" -0xbbc9: "meulg" -0xbbca: "meulm" -0xbbcb: "meulb" -0xbbcc: "meuls" -0xbbcd: "meult" -0xbbce: "meulp" -0xbbcf: "meulh" -0xbbd0: "meum" -0xbbd1: "meub" -0xbbd2: "meubs" -0xbbd3: "meus" -0xbbd4: "meuss" -0xbbd5: "meung" -0xbbd6: "meuj" -0xbbd7: "meuc" -0xbbd8: "meuk" -0xbbd9: "meut" -0xbbda: "meup" -0xbbdb: "meuh" -0xbbdc: "myi" -0xbbdd: "myig" -0xbbde: "myigg" -0xbbdf: "myigs" -0xbbe0: "myin" -0xbbe1: "myinj" -0xbbe2: "myinh" -0xbbe3: "myid" -0xbbe4: "myil" -0xbbe5: "myilg" -0xbbe6: "myilm" -0xbbe7: "myilb" -0xbbe8: "myils" -0xbbe9: "myilt" -0xbbea: "myilp" -0xbbeb: "myilh" -0xbbec: "myim" -0xbbed: "myib" -0xbbee: "myibs" -0xbbef: "myis" -0xbbf0: "myiss" -0xbbf1: "mying" -0xbbf2: "myij" -0xbbf3: "myic" -0xbbf4: "myik" -0xbbf5: "myit" -0xbbf6: "myip" -0xbbf7: "myih" -0xbbf8: "mi" -0xbbf9: "mig" -0xbbfa: "migg" -0xbbfb: "migs" -0xbbfc: "min" -0xbbfd: "minj" -0xbbfe: "minh" -0xbbff: "mid" -/* x0bc */ -0xbc00: "mil" -0xbc01: "milg" -0xbc02: "milm" -0xbc03: "milb" -0xbc04: "mils" -0xbc05: "milt" -0xbc06: "milp" -0xbc07: "milh" -0xbc08: "mim" -0xbc09: "mib" -0xbc0a: "mibs" -0xbc0b: "mis" -0xbc0c: "miss" -0xbc0d: "ming" -0xbc0e: "mij" -0xbc0f: "mic" -0xbc10: "mik" -0xbc11: "mit" -0xbc12: "mip" -0xbc13: "mih" -0xbc14: "ba" -0xbc15: "bag" -0xbc16: "bagg" -0xbc17: "bags" -0xbc18: "ban" -0xbc19: "banj" -0xbc1a: "banh" -0xbc1b: "bad" -0xbc1c: "bal" -0xbc1d: "balg" -0xbc1e: "balm" -0xbc1f: "balb" -0xbc20: "bals" -0xbc21: "balt" -0xbc22: "balp" -0xbc23: "balh" -0xbc24: "bam" -0xbc25: "bab" -0xbc26: "babs" -0xbc27: "bas" -0xbc28: "bass" -0xbc29: "bang" -0xbc2a: "baj" -0xbc2b: "bac" -0xbc2c: "bak" -0xbc2d: "bat" -0xbc2e: "bap" -0xbc2f: "bah" -0xbc30: "bae" -0xbc31: "baeg" -0xbc32: "baegg" -0xbc33: "baegs" -0xbc34: "baen" -0xbc35: "baenj" -0xbc36: "baenh" -0xbc37: "baed" -0xbc38: "bael" -0xbc39: "baelg" -0xbc3a: "baelm" -0xbc3b: "baelb" -0xbc3c: "baels" -0xbc3d: "baelt" -0xbc3e: "baelp" -0xbc3f: "baelh" -0xbc40: "baem" -0xbc41: "baeb" -0xbc42: "baebs" -0xbc43: "baes" -0xbc44: "baess" -0xbc45: "baeng" -0xbc46: "baej" -0xbc47: "baec" -0xbc48: "baek" -0xbc49: "baet" -0xbc4a: "baep" -0xbc4b: "baeh" -0xbc4c: "bya" -0xbc4d: "byag" -0xbc4e: "byagg" -0xbc4f: "byags" -0xbc50: "byan" -0xbc51: "byanj" -0xbc52: "byanh" -0xbc53: "byad" -0xbc54: "byal" -0xbc55: "byalg" -0xbc56: "byalm" -0xbc57: "byalb" -0xbc58: "byals" -0xbc59: "byalt" -0xbc5a: "byalp" -0xbc5b: "byalh" -0xbc5c: "byam" -0xbc5d: "byab" -0xbc5e: "byabs" -0xbc5f: "byas" -0xbc60: "byass" -0xbc61: "byang" -0xbc62: "byaj" -0xbc63: "byac" -0xbc64: "byak" -0xbc65: "byat" -0xbc66: "byap" -0xbc67: "byah" -0xbc68: "byae" -0xbc69: "byaeg" -0xbc6a: "byaegg" -0xbc6b: "byaegs" -0xbc6c: "byaen" -0xbc6d: "byaenj" -0xbc6e: "byaenh" -0xbc6f: "byaed" -0xbc70: "byael" -0xbc71: "byaelg" -0xbc72: "byaelm" -0xbc73: "byaelb" -0xbc74: "byaels" -0xbc75: "byaelt" -0xbc76: "byaelp" -0xbc77: "byaelh" -0xbc78: "byaem" -0xbc79: "byaeb" -0xbc7a: "byaebs" -0xbc7b: "byaes" -0xbc7c: "byaess" -0xbc7d: "byaeng" -0xbc7e: "byaej" -0xbc7f: "byaec" -0xbc80: "byaek" -0xbc81: "byaet" -0xbc82: "byaep" -0xbc83: "byaeh" -0xbc84: "beo" -0xbc85: "beog" -0xbc86: "beogg" -0xbc87: "beogs" -0xbc88: "beon" -0xbc89: "beonj" -0xbc8a: "beonh" -0xbc8b: "beod" -0xbc8c: "beol" -0xbc8d: "beolg" -0xbc8e: "beolm" -0xbc8f: "beolb" -0xbc90: "beols" -0xbc91: "beolt" -0xbc92: "beolp" -0xbc93: "beolh" -0xbc94: "beom" -0xbc95: "beob" -0xbc96: "beobs" -0xbc97: "beos" -0xbc98: "beoss" -0xbc99: "beong" -0xbc9a: "beoj" -0xbc9b: "beoc" -0xbc9c: "beok" -0xbc9d: "beot" -0xbc9e: "beop" -0xbc9f: "beoh" -0xbca0: "be" -0xbca1: "beg" -0xbca2: "begg" -0xbca3: "begs" -0xbca4: "ben" -0xbca5: "benj" -0xbca6: "benh" -0xbca7: "bed" -0xbca8: "bel" -0xbca9: "belg" -0xbcaa: "belm" -0xbcab: "belb" -0xbcac: "bels" -0xbcad: "belt" -0xbcae: "belp" -0xbcaf: "belh" -0xbcb0: "bem" -0xbcb1: "beb" -0xbcb2: "bebs" -0xbcb3: "bes" -0xbcb4: "bess" -0xbcb5: "beng" -0xbcb6: "bej" -0xbcb7: "bec" -0xbcb8: "bek" -0xbcb9: "bet" -0xbcba: "bep" -0xbcbb: "beh" -0xbcbc: "byeo" -0xbcbd: "byeog" -0xbcbe: "byeogg" -0xbcbf: "byeogs" -0xbcc0: "byeon" -0xbcc1: "byeonj" -0xbcc2: "byeonh" -0xbcc3: "byeod" -0xbcc4: "byeol" -0xbcc5: "byeolg" -0xbcc6: "byeolm" -0xbcc7: "byeolb" -0xbcc8: "byeols" -0xbcc9: "byeolt" -0xbcca: "byeolp" -0xbccb: "byeolh" -0xbccc: "byeom" -0xbccd: "byeob" -0xbcce: "byeobs" -0xbccf: "byeos" -0xbcd0: "byeoss" -0xbcd1: "byeong" -0xbcd2: "byeoj" -0xbcd3: "byeoc" -0xbcd4: "byeok" -0xbcd5: "byeot" -0xbcd6: "byeop" -0xbcd7: "byeoh" -0xbcd8: "bye" -0xbcd9: "byeg" -0xbcda: "byegg" -0xbcdb: "byegs" -0xbcdc: "byen" -0xbcdd: "byenj" -0xbcde: "byenh" -0xbcdf: "byed" -0xbce0: "byel" -0xbce1: "byelg" -0xbce2: "byelm" -0xbce3: "byelb" -0xbce4: "byels" -0xbce5: "byelt" -0xbce6: "byelp" -0xbce7: "byelh" -0xbce8: "byem" -0xbce9: "byeb" -0xbcea: "byebs" -0xbceb: "byes" -0xbcec: "byess" -0xbced: "byeng" -0xbcee: "byej" -0xbcef: "byec" -0xbcf0: "byek" -0xbcf1: "byet" -0xbcf2: "byep" -0xbcf3: "byeh" -0xbcf4: "bo" -0xbcf5: "bog" -0xbcf6: "bogg" -0xbcf7: "bogs" -0xbcf8: "bon" -0xbcf9: "bonj" -0xbcfa: "bonh" -0xbcfb: "bod" -0xbcfc: "bol" -0xbcfd: "bolg" -0xbcfe: "bolm" -0xbcff: "bolb" -/* x0bd */ -0xbd00: "bols" -0xbd01: "bolt" -0xbd02: "bolp" -0xbd03: "bolh" -0xbd04: "bom" -0xbd05: "bob" -0xbd06: "bobs" -0xbd07: "bos" -0xbd08: "boss" -0xbd09: "bong" -0xbd0a: "boj" -0xbd0b: "boc" -0xbd0c: "bok" -0xbd0d: "bot" -0xbd0e: "bop" -0xbd0f: "boh" -0xbd10: "bwa" -0xbd11: "bwag" -0xbd12: "bwagg" -0xbd13: "bwags" -0xbd14: "bwan" -0xbd15: "bwanj" -0xbd16: "bwanh" -0xbd17: "bwad" -0xbd18: "bwal" -0xbd19: "bwalg" -0xbd1a: "bwalm" -0xbd1b: "bwalb" -0xbd1c: "bwals" -0xbd1d: "bwalt" -0xbd1e: "bwalp" -0xbd1f: "bwalh" -0xbd20: "bwam" -0xbd21: "bwab" -0xbd22: "bwabs" -0xbd23: "bwas" -0xbd24: "bwass" -0xbd25: "bwang" -0xbd26: "bwaj" -0xbd27: "bwac" -0xbd28: "bwak" -0xbd29: "bwat" -0xbd2a: "bwap" -0xbd2b: "bwah" -0xbd2c: "bwae" -0xbd2d: "bwaeg" -0xbd2e: "bwaegg" -0xbd2f: "bwaegs" -0xbd30: "bwaen" -0xbd31: "bwaenj" -0xbd32: "bwaenh" -0xbd33: "bwaed" -0xbd34: "bwael" -0xbd35: "bwaelg" -0xbd36: "bwaelm" -0xbd37: "bwaelb" -0xbd38: "bwaels" -0xbd39: "bwaelt" -0xbd3a: "bwaelp" -0xbd3b: "bwaelh" -0xbd3c: "bwaem" -0xbd3d: "bwaeb" -0xbd3e: "bwaebs" -0xbd3f: "bwaes" -0xbd40: "bwaess" -0xbd41: "bwaeng" -0xbd42: "bwaej" -0xbd43: "bwaec" -0xbd44: "bwaek" -0xbd45: "bwaet" -0xbd46: "bwaep" -0xbd47: "bwaeh" -0xbd48: "boe" -0xbd49: "boeg" -0xbd4a: "boegg" -0xbd4b: "boegs" -0xbd4c: "boen" -0xbd4d: "boenj" -0xbd4e: "boenh" -0xbd4f: "boed" -0xbd50: "boel" -0xbd51: "boelg" -0xbd52: "boelm" -0xbd53: "boelb" -0xbd54: "boels" -0xbd55: "boelt" -0xbd56: "boelp" -0xbd57: "boelh" -0xbd58: "boem" -0xbd59: "boeb" -0xbd5a: "boebs" -0xbd5b: "boes" -0xbd5c: "boess" -0xbd5d: "boeng" -0xbd5e: "boej" -0xbd5f: "boec" -0xbd60: "boek" -0xbd61: "boet" -0xbd62: "boep" -0xbd63: "boeh" -0xbd64: "byo" -0xbd65: "byog" -0xbd66: "byogg" -0xbd67: "byogs" -0xbd68: "byon" -0xbd69: "byonj" -0xbd6a: "byonh" -0xbd6b: "byod" -0xbd6c: "byol" -0xbd6d: "byolg" -0xbd6e: "byolm" -0xbd6f: "byolb" -0xbd70: "byols" -0xbd71: "byolt" -0xbd72: "byolp" -0xbd73: "byolh" -0xbd74: "byom" -0xbd75: "byob" -0xbd76: "byobs" -0xbd77: "byos" -0xbd78: "byoss" -0xbd79: "byong" -0xbd7a: "byoj" -0xbd7b: "byoc" -0xbd7c: "byok" -0xbd7d: "byot" -0xbd7e: "byop" -0xbd7f: "byoh" -0xbd80: "bu" -0xbd81: "bug" -0xbd82: "bugg" -0xbd83: "bugs" -0xbd84: "bun" -0xbd85: "bunj" -0xbd86: "bunh" -0xbd87: "bud" -0xbd88: "bul" -0xbd89: "bulg" -0xbd8a: "bulm" -0xbd8b: "bulb" -0xbd8c: "buls" -0xbd8d: "bult" -0xbd8e: "bulp" -0xbd8f: "bulh" -0xbd90: "bum" -0xbd91: "bub" -0xbd92: "bubs" -0xbd93: "bus" -0xbd94: "buss" -0xbd95: "bung" -0xbd96: "buj" -0xbd97: "buc" -0xbd98: "buk" -0xbd99: "but" -0xbd9a: "bup" -0xbd9b: "buh" -0xbd9c: "bweo" -0xbd9d: "bweog" -0xbd9e: "bweogg" -0xbd9f: "bweogs" -0xbda0: "bweon" -0xbda1: "bweonj" -0xbda2: "bweonh" -0xbda3: "bweod" -0xbda4: "bweol" -0xbda5: "bweolg" -0xbda6: "bweolm" -0xbda7: "bweolb" -0xbda8: "bweols" -0xbda9: "bweolt" -0xbdaa: "bweolp" -0xbdab: "bweolh" -0xbdac: "bweom" -0xbdad: "bweob" -0xbdae: "bweobs" -0xbdaf: "bweos" -0xbdb0: "bweoss" -0xbdb1: "bweong" -0xbdb2: "bweoj" -0xbdb3: "bweoc" -0xbdb4: "bweok" -0xbdb5: "bweot" -0xbdb6: "bweop" -0xbdb7: "bweoh" -0xbdb8: "bwe" -0xbdb9: "bweg" -0xbdba: "bwegg" -0xbdbb: "bwegs" -0xbdbc: "bwen" -0xbdbd: "bwenj" -0xbdbe: "bwenh" -0xbdbf: "bwed" -0xbdc0: "bwel" -0xbdc1: "bwelg" -0xbdc2: "bwelm" -0xbdc3: "bwelb" -0xbdc4: "bwels" -0xbdc5: "bwelt" -0xbdc6: "bwelp" -0xbdc7: "bwelh" -0xbdc8: "bwem" -0xbdc9: "bweb" -0xbdca: "bwebs" -0xbdcb: "bwes" -0xbdcc: "bwess" -0xbdcd: "bweng" -0xbdce: "bwej" -0xbdcf: "bwec" -0xbdd0: "bwek" -0xbdd1: "bwet" -0xbdd2: "bwep" -0xbdd3: "bweh" -0xbdd4: "bwi" -0xbdd5: "bwig" -0xbdd6: "bwigg" -0xbdd7: "bwigs" -0xbdd8: "bwin" -0xbdd9: "bwinj" -0xbdda: "bwinh" -0xbddb: "bwid" -0xbddc: "bwil" -0xbddd: "bwilg" -0xbdde: "bwilm" -0xbddf: "bwilb" -0xbde0: "bwils" -0xbde1: "bwilt" -0xbde2: "bwilp" -0xbde3: "bwilh" -0xbde4: "bwim" -0xbde5: "bwib" -0xbde6: "bwibs" -0xbde7: "bwis" -0xbde8: "bwiss" -0xbde9: "bwing" -0xbdea: "bwij" -0xbdeb: "bwic" -0xbdec: "bwik" -0xbded: "bwit" -0xbdee: "bwip" -0xbdef: "bwih" -0xbdf0: "byu" -0xbdf1: "byug" -0xbdf2: "byugg" -0xbdf3: "byugs" -0xbdf4: "byun" -0xbdf5: "byunj" -0xbdf6: "byunh" -0xbdf7: "byud" -0xbdf8: "byul" -0xbdf9: "byulg" -0xbdfa: "byulm" -0xbdfb: "byulb" -0xbdfc: "byuls" -0xbdfd: "byult" -0xbdfe: "byulp" -0xbdff: "byulh" -/* x0be */ -0xbe00: "byum" -0xbe01: "byub" -0xbe02: "byubs" -0xbe03: "byus" -0xbe04: "byuss" -0xbe05: "byung" -0xbe06: "byuj" -0xbe07: "byuc" -0xbe08: "byuk" -0xbe09: "byut" -0xbe0a: "byup" -0xbe0b: "byuh" -0xbe0c: "beu" -0xbe0d: "beug" -0xbe0e: "beugg" -0xbe0f: "beugs" -0xbe10: "beun" -0xbe11: "beunj" -0xbe12: "beunh" -0xbe13: "beud" -0xbe14: "beul" -0xbe15: "beulg" -0xbe16: "beulm" -0xbe17: "beulb" -0xbe18: "beuls" -0xbe19: "beult" -0xbe1a: "beulp" -0xbe1b: "beulh" -0xbe1c: "beum" -0xbe1d: "beub" -0xbe1e: "beubs" -0xbe1f: "beus" -0xbe20: "beuss" -0xbe21: "beung" -0xbe22: "beuj" -0xbe23: "beuc" -0xbe24: "beuk" -0xbe25: "beut" -0xbe26: "beup" -0xbe27: "beuh" -0xbe28: "byi" -0xbe29: "byig" -0xbe2a: "byigg" -0xbe2b: "byigs" -0xbe2c: "byin" -0xbe2d: "byinj" -0xbe2e: "byinh" -0xbe2f: "byid" -0xbe30: "byil" -0xbe31: "byilg" -0xbe32: "byilm" -0xbe33: "byilb" -0xbe34: "byils" -0xbe35: "byilt" -0xbe36: "byilp" -0xbe37: "byilh" -0xbe38: "byim" -0xbe39: "byib" -0xbe3a: "byibs" -0xbe3b: "byis" -0xbe3c: "byiss" -0xbe3d: "bying" -0xbe3e: "byij" -0xbe3f: "byic" -0xbe40: "byik" -0xbe41: "byit" -0xbe42: "byip" -0xbe43: "byih" -0xbe44: "bi" -0xbe45: "big" -0xbe46: "bigg" -0xbe47: "bigs" -0xbe48: "bin" -0xbe49: "binj" -0xbe4a: "binh" -0xbe4b: "bid" -0xbe4c: "bil" -0xbe4d: "bilg" -0xbe4e: "bilm" -0xbe4f: "bilb" -0xbe50: "bils" -0xbe51: "bilt" -0xbe52: "bilp" -0xbe53: "bilh" -0xbe54: "bim" -0xbe55: "bib" -0xbe56: "bibs" -0xbe57: "bis" -0xbe58: "biss" -0xbe59: "bing" -0xbe5a: "bij" -0xbe5b: "bic" -0xbe5c: "bik" -0xbe5d: "bit" -0xbe5e: "bip" -0xbe5f: "bih" -0xbe60: "bba" -0xbe61: "bbag" -0xbe62: "bbagg" -0xbe63: "bbags" -0xbe64: "bban" -0xbe65: "bbanj" -0xbe66: "bbanh" -0xbe67: "bbad" -0xbe68: "bbal" -0xbe69: "bbalg" -0xbe6a: "bbalm" -0xbe6b: "bbalb" -0xbe6c: "bbals" -0xbe6d: "bbalt" -0xbe6e: "bbalp" -0xbe6f: "bbalh" -0xbe70: "bbam" -0xbe71: "bbab" -0xbe72: "bbabs" -0xbe73: "bbas" -0xbe74: "bbass" -0xbe75: "bbang" -0xbe76: "bbaj" -0xbe77: "bbac" -0xbe78: "bbak" -0xbe79: "bbat" -0xbe7a: "bbap" -0xbe7b: "bbah" -0xbe7c: "bbae" -0xbe7d: "bbaeg" -0xbe7e: "bbaegg" -0xbe7f: "bbaegs" -0xbe80: "bbaen" -0xbe81: "bbaenj" -0xbe82: "bbaenh" -0xbe83: "bbaed" -0xbe84: "bbael" -0xbe85: "bbaelg" -0xbe86: "bbaelm" -0xbe87: "bbaelb" -0xbe88: "bbaels" -0xbe89: "bbaelt" -0xbe8a: "bbaelp" -0xbe8b: "bbaelh" -0xbe8c: "bbaem" -0xbe8d: "bbaeb" -0xbe8e: "bbaebs" -0xbe8f: "bbaes" -0xbe90: "bbaess" -0xbe91: "bbaeng" -0xbe92: "bbaej" -0xbe93: "bbaec" -0xbe94: "bbaek" -0xbe95: "bbaet" -0xbe96: "bbaep" -0xbe97: "bbaeh" -0xbe98: "bbya" -0xbe99: "bbyag" -0xbe9a: "bbyagg" -0xbe9b: "bbyags" -0xbe9c: "bbyan" -0xbe9d: "bbyanj" -0xbe9e: "bbyanh" -0xbe9f: "bbyad" -0xbea0: "bbyal" -0xbea1: "bbyalg" -0xbea2: "bbyalm" -0xbea3: "bbyalb" -0xbea4: "bbyals" -0xbea5: "bbyalt" -0xbea6: "bbyalp" -0xbea7: "bbyalh" -0xbea8: "bbyam" -0xbea9: "bbyab" -0xbeaa: "bbyabs" -0xbeab: "bbyas" -0xbeac: "bbyass" -0xbead: "bbyang" -0xbeae: "bbyaj" -0xbeaf: "bbyac" -0xbeb0: "bbyak" -0xbeb1: "bbyat" -0xbeb2: "bbyap" -0xbeb3: "bbyah" -0xbeb4: "bbyae" -0xbeb5: "bbyaeg" -0xbeb6: "bbyaegg" -0xbeb7: "bbyaegs" -0xbeb8: "bbyaen" -0xbeb9: "bbyaenj" -0xbeba: "bbyaenh" -0xbebb: "bbyaed" -0xbebc: "bbyael" -0xbebd: "bbyaelg" -0xbebe: "bbyaelm" -0xbebf: "bbyaelb" -0xbec0: "bbyaels" -0xbec1: "bbyaelt" -0xbec2: "bbyaelp" -0xbec3: "bbyaelh" -0xbec4: "bbyaem" -0xbec5: "bbyaeb" -0xbec6: "bbyaebs" -0xbec7: "bbyaes" -0xbec8: "bbyaess" -0xbec9: "bbyaeng" -0xbeca: "bbyaej" -0xbecb: "bbyaec" -0xbecc: "bbyaek" -0xbecd: "bbyaet" -0xbece: "bbyaep" -0xbecf: "bbyaeh" -0xbed0: "bbeo" -0xbed1: "bbeog" -0xbed2: "bbeogg" -0xbed3: "bbeogs" -0xbed4: "bbeon" -0xbed5: "bbeonj" -0xbed6: "bbeonh" -0xbed7: "bbeod" -0xbed8: "bbeol" -0xbed9: "bbeolg" -0xbeda: "bbeolm" -0xbedb: "bbeolb" -0xbedc: "bbeols" -0xbedd: "bbeolt" -0xbede: "bbeolp" -0xbedf: "bbeolh" -0xbee0: "bbeom" -0xbee1: "bbeob" -0xbee2: "bbeobs" -0xbee3: "bbeos" -0xbee4: "bbeoss" -0xbee5: "bbeong" -0xbee6: "bbeoj" -0xbee7: "bbeoc" -0xbee8: "bbeok" -0xbee9: "bbeot" -0xbeea: "bbeop" -0xbeeb: "bbeoh" -0xbeec: "bbe" -0xbeed: "bbeg" -0xbeee: "bbegg" -0xbeef: "bbegs" -0xbef0: "bben" -0xbef1: "bbenj" -0xbef2: "bbenh" -0xbef3: "bbed" -0xbef4: "bbel" -0xbef5: "bbelg" -0xbef6: "bbelm" -0xbef7: "bbelb" -0xbef8: "bbels" -0xbef9: "bbelt" -0xbefa: "bbelp" -0xbefb: "bbelh" -0xbefc: "bbem" -0xbefd: "bbeb" -0xbefe: "bbebs" -0xbeff: "bbes" -/* x0bf */ -0xbf00: "bbess" -0xbf01: "bbeng" -0xbf02: "bbej" -0xbf03: "bbec" -0xbf04: "bbek" -0xbf05: "bbet" -0xbf06: "bbep" -0xbf07: "bbeh" -0xbf08: "bbyeo" -0xbf09: "bbyeog" -0xbf0a: "bbyeogg" -0xbf0b: "bbyeogs" -0xbf0c: "bbyeon" -0xbf0d: "bbyeonj" -0xbf0e: "bbyeonh" -0xbf0f: "bbyeod" -0xbf10: "bbyeol" -0xbf11: "bbyeolg" -0xbf12: "bbyeolm" -0xbf13: "bbyeolb" -0xbf14: "bbyeols" -0xbf15: "bbyeolt" -0xbf16: "bbyeolp" -0xbf17: "bbyeolh" -0xbf18: "bbyeom" -0xbf19: "bbyeob" -0xbf1a: "bbyeobs" -0xbf1b: "bbyeos" -0xbf1c: "bbyeoss" -0xbf1d: "bbyeong" -0xbf1e: "bbyeoj" -0xbf1f: "bbyeoc" -0xbf20: "bbyeok" -0xbf21: "bbyeot" -0xbf22: "bbyeop" -0xbf23: "bbyeoh" -0xbf24: "bbye" -0xbf25: "bbyeg" -0xbf26: "bbyegg" -0xbf27: "bbyegs" -0xbf28: "bbyen" -0xbf29: "bbyenj" -0xbf2a: "bbyenh" -0xbf2b: "bbyed" -0xbf2c: "bbyel" -0xbf2d: "bbyelg" -0xbf2e: "bbyelm" -0xbf2f: "bbyelb" -0xbf30: "bbyels" -0xbf31: "bbyelt" -0xbf32: "bbyelp" -0xbf33: "bbyelh" -0xbf34: "bbyem" -0xbf35: "bbyeb" -0xbf36: "bbyebs" -0xbf37: "bbyes" -0xbf38: "bbyess" -0xbf39: "bbyeng" -0xbf3a: "bbyej" -0xbf3b: "bbyec" -0xbf3c: "bbyek" -0xbf3d: "bbyet" -0xbf3e: "bbyep" -0xbf3f: "bbyeh" -0xbf40: "bbo" -0xbf41: "bbog" -0xbf42: "bbogg" -0xbf43: "bbogs" -0xbf44: "bbon" -0xbf45: "bbonj" -0xbf46: "bbonh" -0xbf47: "bbod" -0xbf48: "bbol" -0xbf49: "bbolg" -0xbf4a: "bbolm" -0xbf4b: "bbolb" -0xbf4c: "bbols" -0xbf4d: "bbolt" -0xbf4e: "bbolp" -0xbf4f: "bbolh" -0xbf50: "bbom" -0xbf51: "bbob" -0xbf52: "bbobs" -0xbf53: "bbos" -0xbf54: "bboss" -0xbf55: "bbong" -0xbf56: "bboj" -0xbf57: "bboc" -0xbf58: "bbok" -0xbf59: "bbot" -0xbf5a: "bbop" -0xbf5b: "bboh" -0xbf5c: "bbwa" -0xbf5d: "bbwag" -0xbf5e: "bbwagg" -0xbf5f: "bbwags" -0xbf60: "bbwan" -0xbf61: "bbwanj" -0xbf62: "bbwanh" -0xbf63: "bbwad" -0xbf64: "bbwal" -0xbf65: "bbwalg" -0xbf66: "bbwalm" -0xbf67: "bbwalb" -0xbf68: "bbwals" -0xbf69: "bbwalt" -0xbf6a: "bbwalp" -0xbf6b: "bbwalh" -0xbf6c: "bbwam" -0xbf6d: "bbwab" -0xbf6e: "bbwabs" -0xbf6f: "bbwas" -0xbf70: "bbwass" -0xbf71: "bbwang" -0xbf72: "bbwaj" -0xbf73: "bbwac" -0xbf74: "bbwak" -0xbf75: "bbwat" -0xbf76: "bbwap" -0xbf77: "bbwah" -0xbf78: "bbwae" -0xbf79: "bbwaeg" -0xbf7a: "bbwaegg" -0xbf7b: "bbwaegs" -0xbf7c: "bbwaen" -0xbf7d: "bbwaenj" -0xbf7e: "bbwaenh" -0xbf7f: "bbwaed" -0xbf80: "bbwael" -0xbf81: "bbwaelg" -0xbf82: "bbwaelm" -0xbf83: "bbwaelb" -0xbf84: "bbwaels" -0xbf85: "bbwaelt" -0xbf86: "bbwaelp" -0xbf87: "bbwaelh" -0xbf88: "bbwaem" -0xbf89: "bbwaeb" -0xbf8a: "bbwaebs" -0xbf8b: "bbwaes" -0xbf8c: "bbwaess" -0xbf8d: "bbwaeng" -0xbf8e: "bbwaej" -0xbf8f: "bbwaec" -0xbf90: "bbwaek" -0xbf91: "bbwaet" -0xbf92: "bbwaep" -0xbf93: "bbwaeh" -0xbf94: "bboe" -0xbf95: "bboeg" -0xbf96: "bboegg" -0xbf97: "bboegs" -0xbf98: "bboen" -0xbf99: "bboenj" -0xbf9a: "bboenh" -0xbf9b: "bboed" -0xbf9c: "bboel" -0xbf9d: "bboelg" -0xbf9e: "bboelm" -0xbf9f: "bboelb" -0xbfa0: "bboels" -0xbfa1: "bboelt" -0xbfa2: "bboelp" -0xbfa3: "bboelh" -0xbfa4: "bboem" -0xbfa5: "bboeb" -0xbfa6: "bboebs" -0xbfa7: "bboes" -0xbfa8: "bboess" -0xbfa9: "bboeng" -0xbfaa: "bboej" -0xbfab: "bboec" -0xbfac: "bboek" -0xbfad: "bboet" -0xbfae: "bboep" -0xbfaf: "bboeh" -0xbfb0: "bbyo" -0xbfb1: "bbyog" -0xbfb2: "bbyogg" -0xbfb3: "bbyogs" -0xbfb4: "bbyon" -0xbfb5: "bbyonj" -0xbfb6: "bbyonh" -0xbfb7: "bbyod" -0xbfb8: "bbyol" -0xbfb9: "bbyolg" -0xbfba: "bbyolm" -0xbfbb: "bbyolb" -0xbfbc: "bbyols" -0xbfbd: "bbyolt" -0xbfbe: "bbyolp" -0xbfbf: "bbyolh" -0xbfc0: "bbyom" -0xbfc1: "bbyob" -0xbfc2: "bbyobs" -0xbfc3: "bbyos" -0xbfc4: "bbyoss" -0xbfc5: "bbyong" -0xbfc6: "bbyoj" -0xbfc7: "bbyoc" -0xbfc8: "bbyok" -0xbfc9: "bbyot" -0xbfca: "bbyop" -0xbfcb: "bbyoh" -0xbfcc: "bbu" -0xbfcd: "bbug" -0xbfce: "bbugg" -0xbfcf: "bbugs" -0xbfd0: "bbun" -0xbfd1: "bbunj" -0xbfd2: "bbunh" -0xbfd3: "bbud" -0xbfd4: "bbul" -0xbfd5: "bbulg" -0xbfd6: "bbulm" -0xbfd7: "bbulb" -0xbfd8: "bbuls" -0xbfd9: "bbult" -0xbfda: "bbulp" -0xbfdb: "bbulh" -0xbfdc: "bbum" -0xbfdd: "bbub" -0xbfde: "bbubs" -0xbfdf: "bbus" -0xbfe0: "bbuss" -0xbfe1: "bbung" -0xbfe2: "bbuj" -0xbfe3: "bbuc" -0xbfe4: "bbuk" -0xbfe5: "bbut" -0xbfe6: "bbup" -0xbfe7: "bbuh" -0xbfe8: "bbweo" -0xbfe9: "bbweog" -0xbfea: "bbweogg" -0xbfeb: "bbweogs" -0xbfec: "bbweon" -0xbfed: "bbweonj" -0xbfee: "bbweonh" -0xbfef: "bbweod" -0xbff0: "bbweol" -0xbff1: "bbweolg" -0xbff2: "bbweolm" -0xbff3: "bbweolb" -0xbff4: "bbweols" -0xbff5: "bbweolt" -0xbff6: "bbweolp" -0xbff7: "bbweolh" -0xbff8: "bbweom" -0xbff9: "bbweob" -0xbffa: "bbweobs" -0xbffb: "bbweos" -0xbffc: "bbweoss" -0xbffd: "bbweong" -0xbffe: "bbweoj" -0xbfff: "bbweoc" -/* x0c0 */ -0xc000: "bbweok" -0xc001: "bbweot" -0xc002: "bbweop" -0xc003: "bbweoh" -0xc004: "bbwe" -0xc005: "bbweg" -0xc006: "bbwegg" -0xc007: "bbwegs" -0xc008: "bbwen" -0xc009: "bbwenj" -0xc00a: "bbwenh" -0xc00b: "bbwed" -0xc00c: "bbwel" -0xc00d: "bbwelg" -0xc00e: "bbwelm" -0xc00f: "bbwelb" -0xc010: "bbwels" -0xc011: "bbwelt" -0xc012: "bbwelp" -0xc013: "bbwelh" -0xc014: "bbwem" -0xc015: "bbweb" -0xc016: "bbwebs" -0xc017: "bbwes" -0xc018: "bbwess" -0xc019: "bbweng" -0xc01a: "bbwej" -0xc01b: "bbwec" -0xc01c: "bbwek" -0xc01d: "bbwet" -0xc01e: "bbwep" -0xc01f: "bbweh" -0xc020: "bbwi" -0xc021: "bbwig" -0xc022: "bbwigg" -0xc023: "bbwigs" -0xc024: "bbwin" -0xc025: "bbwinj" -0xc026: "bbwinh" -0xc027: "bbwid" -0xc028: "bbwil" -0xc029: "bbwilg" -0xc02a: "bbwilm" -0xc02b: "bbwilb" -0xc02c: "bbwils" -0xc02d: "bbwilt" -0xc02e: "bbwilp" -0xc02f: "bbwilh" -0xc030: "bbwim" -0xc031: "bbwib" -0xc032: "bbwibs" -0xc033: "bbwis" -0xc034: "bbwiss" -0xc035: "bbwing" -0xc036: "bbwij" -0xc037: "bbwic" -0xc038: "bbwik" -0xc039: "bbwit" -0xc03a: "bbwip" -0xc03b: "bbwih" -0xc03c: "bbyu" -0xc03d: "bbyug" -0xc03e: "bbyugg" -0xc03f: "bbyugs" -0xc040: "bbyun" -0xc041: "bbyunj" -0xc042: "bbyunh" -0xc043: "bbyud" -0xc044: "bbyul" -0xc045: "bbyulg" -0xc046: "bbyulm" -0xc047: "bbyulb" -0xc048: "bbyuls" -0xc049: "bbyult" -0xc04a: "bbyulp" -0xc04b: "bbyulh" -0xc04c: "bbyum" -0xc04d: "bbyub" -0xc04e: "bbyubs" -0xc04f: "bbyus" -0xc050: "bbyuss" -0xc051: "bbyung" -0xc052: "bbyuj" -0xc053: "bbyuc" -0xc054: "bbyuk" -0xc055: "bbyut" -0xc056: "bbyup" -0xc057: "bbyuh" -0xc058: "bbeu" -0xc059: "bbeug" -0xc05a: "bbeugg" -0xc05b: "bbeugs" -0xc05c: "bbeun" -0xc05d: "bbeunj" -0xc05e: "bbeunh" -0xc05f: "bbeud" -0xc060: "bbeul" -0xc061: "bbeulg" -0xc062: "bbeulm" -0xc063: "bbeulb" -0xc064: "bbeuls" -0xc065: "bbeult" -0xc066: "bbeulp" -0xc067: "bbeulh" -0xc068: "bbeum" -0xc069: "bbeub" -0xc06a: "bbeubs" -0xc06b: "bbeus" -0xc06c: "bbeuss" -0xc06d: "bbeung" -0xc06e: "bbeuj" -0xc06f: "bbeuc" -0xc070: "bbeuk" -0xc071: "bbeut" -0xc072: "bbeup" -0xc073: "bbeuh" -0xc074: "bbyi" -0xc075: "bbyig" -0xc076: "bbyigg" -0xc077: "bbyigs" -0xc078: "bbyin" -0xc079: "bbyinj" -0xc07a: "bbyinh" -0xc07b: "bbyid" -0xc07c: "bbyil" -0xc07d: "bbyilg" -0xc07e: "bbyilm" -0xc07f: "bbyilb" -0xc080: "bbyils" -0xc081: "bbyilt" -0xc082: "bbyilp" -0xc083: "bbyilh" -0xc084: "bbyim" -0xc085: "bbyib" -0xc086: "bbyibs" -0xc087: "bbyis" -0xc088: "bbyiss" -0xc089: "bbying" -0xc08a: "bbyij" -0xc08b: "bbyic" -0xc08c: "bbyik" -0xc08d: "bbyit" -0xc08e: "bbyip" -0xc08f: "bbyih" -0xc090: "bbi" -0xc091: "bbig" -0xc092: "bbigg" -0xc093: "bbigs" -0xc094: "bbin" -0xc095: "bbinj" -0xc096: "bbinh" -0xc097: "bbid" -0xc098: "bbil" -0xc099: "bbilg" -0xc09a: "bbilm" -0xc09b: "bbilb" -0xc09c: "bbils" -0xc09d: "bbilt" -0xc09e: "bbilp" -0xc09f: "bbilh" -0xc0a0: "bbim" -0xc0a1: "bbib" -0xc0a2: "bbibs" -0xc0a3: "bbis" -0xc0a4: "bbiss" -0xc0a5: "bbing" -0xc0a6: "bbij" -0xc0a7: "bbic" -0xc0a8: "bbik" -0xc0a9: "bbit" -0xc0aa: "bbip" -0xc0ab: "bbih" -0xc0ac: "sa" -0xc0ad: "sag" -0xc0ae: "sagg" -0xc0af: "sags" -0xc0b0: "san" -0xc0b1: "sanj" -0xc0b2: "sanh" -0xc0b3: "sad" -0xc0b4: "sal" -0xc0b5: "salg" -0xc0b6: "salm" -0xc0b7: "salb" -0xc0b8: "sals" -0xc0b9: "salt" -0xc0ba: "salp" -0xc0bb: "salh" -0xc0bc: "sam" -0xc0bd: "sab" -0xc0be: "sabs" -0xc0bf: "sas" -0xc0c0: "sass" -0xc0c1: "sang" -0xc0c2: "saj" -0xc0c3: "sac" -0xc0c4: "sak" -0xc0c5: "sat" -0xc0c6: "sap" -0xc0c7: "sah" -0xc0c8: "sae" -0xc0c9: "saeg" -0xc0ca: "saegg" -0xc0cb: "saegs" -0xc0cc: "saen" -0xc0cd: "saenj" -0xc0ce: "saenh" -0xc0cf: "saed" -0xc0d0: "sael" -0xc0d1: "saelg" -0xc0d2: "saelm" -0xc0d3: "saelb" -0xc0d4: "saels" -0xc0d5: "saelt" -0xc0d6: "saelp" -0xc0d7: "saelh" -0xc0d8: "saem" -0xc0d9: "saeb" -0xc0da: "saebs" -0xc0db: "saes" -0xc0dc: "saess" -0xc0dd: "saeng" -0xc0de: "saej" -0xc0df: "saec" -0xc0e0: "saek" -0xc0e1: "saet" -0xc0e2: "saep" -0xc0e3: "saeh" -0xc0e4: "sya" -0xc0e5: "syag" -0xc0e6: "syagg" -0xc0e7: "syags" -0xc0e8: "syan" -0xc0e9: "syanj" -0xc0ea: "syanh" -0xc0eb: "syad" -0xc0ec: "syal" -0xc0ed: "syalg" -0xc0ee: "syalm" -0xc0ef: "syalb" -0xc0f0: "syals" -0xc0f1: "syalt" -0xc0f2: "syalp" -0xc0f3: "syalh" -0xc0f4: "syam" -0xc0f5: "syab" -0xc0f6: "syabs" -0xc0f7: "syas" -0xc0f8: "syass" -0xc0f9: "syang" -0xc0fa: "syaj" -0xc0fb: "syac" -0xc0fc: "syak" -0xc0fd: "syat" -0xc0fe: "syap" -0xc0ff: "syah" -/* x0c1 */ -0xc100: "syae" -0xc101: "syaeg" -0xc102: "syaegg" -0xc103: "syaegs" -0xc104: "syaen" -0xc105: "syaenj" -0xc106: "syaenh" -0xc107: "syaed" -0xc108: "syael" -0xc109: "syaelg" -0xc10a: "syaelm" -0xc10b: "syaelb" -0xc10c: "syaels" -0xc10d: "syaelt" -0xc10e: "syaelp" -0xc10f: "syaelh" -0xc110: "syaem" -0xc111: "syaeb" -0xc112: "syaebs" -0xc113: "syaes" -0xc114: "syaess" -0xc115: "syaeng" -0xc116: "syaej" -0xc117: "syaec" -0xc118: "syaek" -0xc119: "syaet" -0xc11a: "syaep" -0xc11b: "syaeh" -0xc11c: "seo" -0xc11d: "seog" -0xc11e: "seogg" -0xc11f: "seogs" -0xc120: "seon" -0xc121: "seonj" -0xc122: "seonh" -0xc123: "seod" -0xc124: "seol" -0xc125: "seolg" -0xc126: "seolm" -0xc127: "seolb" -0xc128: "seols" -0xc129: "seolt" -0xc12a: "seolp" -0xc12b: "seolh" -0xc12c: "seom" -0xc12d: "seob" -0xc12e: "seobs" -0xc12f: "seos" -0xc130: "seoss" -0xc131: "seong" -0xc132: "seoj" -0xc133: "seoc" -0xc134: "seok" -0xc135: "seot" -0xc136: "seop" -0xc137: "seoh" -0xc138: "se" -0xc139: "seg" -0xc13a: "segg" -0xc13b: "segs" -0xc13c: "sen" -0xc13d: "senj" -0xc13e: "senh" -0xc13f: "sed" -0xc140: "sel" -0xc141: "selg" -0xc142: "selm" -0xc143: "selb" -0xc144: "sels" -0xc145: "selt" -0xc146: "selp" -0xc147: "selh" -0xc148: "sem" -0xc149: "seb" -0xc14a: "sebs" -0xc14b: "ses" -0xc14c: "sess" -0xc14d: "seng" -0xc14e: "sej" -0xc14f: "sec" -0xc150: "sek" -0xc151: "set" -0xc152: "sep" -0xc153: "seh" -0xc154: "syeo" -0xc155: "syeog" -0xc156: "syeogg" -0xc157: "syeogs" -0xc158: "syeon" -0xc159: "syeonj" -0xc15a: "syeonh" -0xc15b: "syeod" -0xc15c: "syeol" -0xc15d: "syeolg" -0xc15e: "syeolm" -0xc15f: "syeolb" -0xc160: "syeols" -0xc161: "syeolt" -0xc162: "syeolp" -0xc163: "syeolh" -0xc164: "syeom" -0xc165: "syeob" -0xc166: "syeobs" -0xc167: "syeos" -0xc168: "syeoss" -0xc169: "syeong" -0xc16a: "syeoj" -0xc16b: "syeoc" -0xc16c: "syeok" -0xc16d: "syeot" -0xc16e: "syeop" -0xc16f: "syeoh" -0xc170: "sye" -0xc171: "syeg" -0xc172: "syegg" -0xc173: "syegs" -0xc174: "syen" -0xc175: "syenj" -0xc176: "syenh" -0xc177: "syed" -0xc178: "syel" -0xc179: "syelg" -0xc17a: "syelm" -0xc17b: "syelb" -0xc17c: "syels" -0xc17d: "syelt" -0xc17e: "syelp" -0xc17f: "syelh" -0xc180: "syem" -0xc181: "syeb" -0xc182: "syebs" -0xc183: "syes" -0xc184: "syess" -0xc185: "syeng" -0xc186: "syej" -0xc187: "syec" -0xc188: "syek" -0xc189: "syet" -0xc18a: "syep" -0xc18b: "syeh" -0xc18c: "so" -0xc18d: "sog" -0xc18e: "sogg" -0xc18f: "sogs" -0xc190: "son" -0xc191: "sonj" -0xc192: "sonh" -0xc193: "sod" -0xc194: "sol" -0xc195: "solg" -0xc196: "solm" -0xc197: "solb" -0xc198: "sols" -0xc199: "solt" -0xc19a: "solp" -0xc19b: "solh" -0xc19c: "som" -0xc19d: "sob" -0xc19e: "sobs" -0xc19f: "sos" -0xc1a0: "soss" -0xc1a1: "song" -0xc1a2: "soj" -0xc1a3: "soc" -0xc1a4: "sok" -0xc1a5: "sot" -0xc1a6: "sop" -0xc1a7: "soh" -0xc1a8: "swa" -0xc1a9: "swag" -0xc1aa: "swagg" -0xc1ab: "swags" -0xc1ac: "swan" -0xc1ad: "swanj" -0xc1ae: "swanh" -0xc1af: "swad" -0xc1b0: "swal" -0xc1b1: "swalg" -0xc1b2: "swalm" -0xc1b3: "swalb" -0xc1b4: "swals" -0xc1b5: "swalt" -0xc1b6: "swalp" -0xc1b7: "swalh" -0xc1b8: "swam" -0xc1b9: "swab" -0xc1ba: "swabs" -0xc1bb: "swas" -0xc1bc: "swass" -0xc1bd: "swang" -0xc1be: "swaj" -0xc1bf: "swac" -0xc1c0: "swak" -0xc1c1: "swat" -0xc1c2: "swap" -0xc1c3: "swah" -0xc1c4: "swae" -0xc1c5: "swaeg" -0xc1c6: "swaegg" -0xc1c7: "swaegs" -0xc1c8: "swaen" -0xc1c9: "swaenj" -0xc1ca: "swaenh" -0xc1cb: "swaed" -0xc1cc: "swael" -0xc1cd: "swaelg" -0xc1ce: "swaelm" -0xc1cf: "swaelb" -0xc1d0: "swaels" -0xc1d1: "swaelt" -0xc1d2: "swaelp" -0xc1d3: "swaelh" -0xc1d4: "swaem" -0xc1d5: "swaeb" -0xc1d6: "swaebs" -0xc1d7: "swaes" -0xc1d8: "swaess" -0xc1d9: "swaeng" -0xc1da: "swaej" -0xc1db: "swaec" -0xc1dc: "swaek" -0xc1dd: "swaet" -0xc1de: "swaep" -0xc1df: "swaeh" -0xc1e0: "soe" -0xc1e1: "soeg" -0xc1e2: "soegg" -0xc1e3: "soegs" -0xc1e4: "soen" -0xc1e5: "soenj" -0xc1e6: "soenh" -0xc1e7: "soed" -0xc1e8: "soel" -0xc1e9: "soelg" -0xc1ea: "soelm" -0xc1eb: "soelb" -0xc1ec: "soels" -0xc1ed: "soelt" -0xc1ee: "soelp" -0xc1ef: "soelh" -0xc1f0: "soem" -0xc1f1: "soeb" -0xc1f2: "soebs" -0xc1f3: "soes" -0xc1f4: "soess" -0xc1f5: "soeng" -0xc1f6: "soej" -0xc1f7: "soec" -0xc1f8: "soek" -0xc1f9: "soet" -0xc1fa: "soep" -0xc1fb: "soeh" -0xc1fc: "syo" -0xc1fd: "syog" -0xc1fe: "syogg" -0xc1ff: "syogs" -/* x0c2 */ -0xc200: "syon" -0xc201: "syonj" -0xc202: "syonh" -0xc203: "syod" -0xc204: "syol" -0xc205: "syolg" -0xc206: "syolm" -0xc207: "syolb" -0xc208: "syols" -0xc209: "syolt" -0xc20a: "syolp" -0xc20b: "syolh" -0xc20c: "syom" -0xc20d: "syob" -0xc20e: "syobs" -0xc20f: "syos" -0xc210: "syoss" -0xc211: "syong" -0xc212: "syoj" -0xc213: "syoc" -0xc214: "syok" -0xc215: "syot" -0xc216: "syop" -0xc217: "syoh" -0xc218: "su" -0xc219: "sug" -0xc21a: "sugg" -0xc21b: "sugs" -0xc21c: "sun" -0xc21d: "sunj" -0xc21e: "sunh" -0xc21f: "sud" -0xc220: "sul" -0xc221: "sulg" -0xc222: "sulm" -0xc223: "sulb" -0xc224: "suls" -0xc225: "sult" -0xc226: "sulp" -0xc227: "sulh" -0xc228: "sum" -0xc229: "sub" -0xc22a: "subs" -0xc22b: "sus" -0xc22c: "suss" -0xc22d: "sung" -0xc22e: "suj" -0xc22f: "suc" -0xc230: "suk" -0xc231: "sut" -0xc232: "sup" -0xc233: "suh" -0xc234: "sweo" -0xc235: "sweog" -0xc236: "sweogg" -0xc237: "sweogs" -0xc238: "sweon" -0xc239: "sweonj" -0xc23a: "sweonh" -0xc23b: "sweod" -0xc23c: "sweol" -0xc23d: "sweolg" -0xc23e: "sweolm" -0xc23f: "sweolb" -0xc240: "sweols" -0xc241: "sweolt" -0xc242: "sweolp" -0xc243: "sweolh" -0xc244: "sweom" -0xc245: "sweob" -0xc246: "sweobs" -0xc247: "sweos" -0xc248: "sweoss" -0xc249: "sweong" -0xc24a: "sweoj" -0xc24b: "sweoc" -0xc24c: "sweok" -0xc24d: "sweot" -0xc24e: "sweop" -0xc24f: "sweoh" -0xc250: "swe" -0xc251: "sweg" -0xc252: "swegg" -0xc253: "swegs" -0xc254: "swen" -0xc255: "swenj" -0xc256: "swenh" -0xc257: "swed" -0xc258: "swel" -0xc259: "swelg" -0xc25a: "swelm" -0xc25b: "swelb" -0xc25c: "swels" -0xc25d: "swelt" -0xc25e: "swelp" -0xc25f: "swelh" -0xc260: "swem" -0xc261: "sweb" -0xc262: "swebs" -0xc263: "swes" -0xc264: "swess" -0xc265: "sweng" -0xc266: "swej" -0xc267: "swec" -0xc268: "swek" -0xc269: "swet" -0xc26a: "swep" -0xc26b: "sweh" -0xc26c: "swi" -0xc26d: "swig" -0xc26e: "swigg" -0xc26f: "swigs" -0xc270: "swin" -0xc271: "swinj" -0xc272: "swinh" -0xc273: "swid" -0xc274: "swil" -0xc275: "swilg" -0xc276: "swilm" -0xc277: "swilb" -0xc278: "swils" -0xc279: "swilt" -0xc27a: "swilp" -0xc27b: "swilh" -0xc27c: "swim" -0xc27d: "swib" -0xc27e: "swibs" -0xc27f: "swis" -0xc280: "swiss" -0xc281: "swing" -0xc282: "swij" -0xc283: "swic" -0xc284: "swik" -0xc285: "swit" -0xc286: "swip" -0xc287: "swih" -0xc288: "syu" -0xc289: "syug" -0xc28a: "syugg" -0xc28b: "syugs" -0xc28c: "syun" -0xc28d: "syunj" -0xc28e: "syunh" -0xc28f: "syud" -0xc290: "syul" -0xc291: "syulg" -0xc292: "syulm" -0xc293: "syulb" -0xc294: "syuls" -0xc295: "syult" -0xc296: "syulp" -0xc297: "syulh" -0xc298: "syum" -0xc299: "syub" -0xc29a: "syubs" -0xc29b: "syus" -0xc29c: "syuss" -0xc29d: "syung" -0xc29e: "syuj" -0xc29f: "syuc" -0xc2a0: "syuk" -0xc2a1: "syut" -0xc2a2: "syup" -0xc2a3: "syuh" -0xc2a4: "seu" -0xc2a5: "seug" -0xc2a6: "seugg" -0xc2a7: "seugs" -0xc2a8: "seun" -0xc2a9: "seunj" -0xc2aa: "seunh" -0xc2ab: "seud" -0xc2ac: "seul" -0xc2ad: "seulg" -0xc2ae: "seulm" -0xc2af: "seulb" -0xc2b0: "seuls" -0xc2b1: "seult" -0xc2b2: "seulp" -0xc2b3: "seulh" -0xc2b4: "seum" -0xc2b5: "seub" -0xc2b6: "seubs" -0xc2b7: "seus" -0xc2b8: "seuss" -0xc2b9: "seung" -0xc2ba: "seuj" -0xc2bb: "seuc" -0xc2bc: "seuk" -0xc2bd: "seut" -0xc2be: "seup" -0xc2bf: "seuh" -0xc2c0: "syi" -0xc2c1: "syig" -0xc2c2: "syigg" -0xc2c3: "syigs" -0xc2c4: "syin" -0xc2c5: "syinj" -0xc2c6: "syinh" -0xc2c7: "syid" -0xc2c8: "syil" -0xc2c9: "syilg" -0xc2ca: "syilm" -0xc2cb: "syilb" -0xc2cc: "syils" -0xc2cd: "syilt" -0xc2ce: "syilp" -0xc2cf: "syilh" -0xc2d0: "syim" -0xc2d1: "syib" -0xc2d2: "syibs" -0xc2d3: "syis" -0xc2d4: "syiss" -0xc2d5: "sying" -0xc2d6: "syij" -0xc2d7: "syic" -0xc2d8: "syik" -0xc2d9: "syit" -0xc2da: "syip" -0xc2db: "syih" -0xc2dc: "si" -0xc2dd: "sig" -0xc2de: "sigg" -0xc2df: "sigs" -0xc2e0: "sin" -0xc2e1: "sinj" -0xc2e2: "sinh" -0xc2e3: "sid" -0xc2e4: "sil" -0xc2e5: "silg" -0xc2e6: "silm" -0xc2e7: "silb" -0xc2e8: "sils" -0xc2e9: "silt" -0xc2ea: "silp" -0xc2eb: "silh" -0xc2ec: "sim" -0xc2ed: "sib" -0xc2ee: "sibs" -0xc2ef: "sis" -0xc2f0: "siss" -0xc2f1: "sing" -0xc2f2: "sij" -0xc2f3: "sic" -0xc2f4: "sik" -0xc2f5: "sit" -0xc2f6: "sip" -0xc2f7: "sih" -0xc2f8: "ssa" -0xc2f9: "ssag" -0xc2fa: "ssagg" -0xc2fb: "ssags" -0xc2fc: "ssan" -0xc2fd: "ssanj" -0xc2fe: "ssanh" -0xc2ff: "ssad" -/* x0c3 */ -0xc300: "ssal" -0xc301: "ssalg" -0xc302: "ssalm" -0xc303: "ssalb" -0xc304: "ssals" -0xc305: "ssalt" -0xc306: "ssalp" -0xc307: "ssalh" -0xc308: "ssam" -0xc309: "ssab" -0xc30a: "ssabs" -0xc30b: "ssas" -0xc30c: "ssass" -0xc30d: "ssang" -0xc30e: "ssaj" -0xc30f: "ssac" -0xc310: "ssak" -0xc311: "ssat" -0xc312: "ssap" -0xc313: "ssah" -0xc314: "ssae" -0xc315: "ssaeg" -0xc316: "ssaegg" -0xc317: "ssaegs" -0xc318: "ssaen" -0xc319: "ssaenj" -0xc31a: "ssaenh" -0xc31b: "ssaed" -0xc31c: "ssael" -0xc31d: "ssaelg" -0xc31e: "ssaelm" -0xc31f: "ssaelb" -0xc320: "ssaels" -0xc321: "ssaelt" -0xc322: "ssaelp" -0xc323: "ssaelh" -0xc324: "ssaem" -0xc325: "ssaeb" -0xc326: "ssaebs" -0xc327: "ssaes" -0xc328: "ssaess" -0xc329: "ssaeng" -0xc32a: "ssaej" -0xc32b: "ssaec" -0xc32c: "ssaek" -0xc32d: "ssaet" -0xc32e: "ssaep" -0xc32f: "ssaeh" -0xc330: "ssya" -0xc331: "ssyag" -0xc332: "ssyagg" -0xc333: "ssyags" -0xc334: "ssyan" -0xc335: "ssyanj" -0xc336: "ssyanh" -0xc337: "ssyad" -0xc338: "ssyal" -0xc339: "ssyalg" -0xc33a: "ssyalm" -0xc33b: "ssyalb" -0xc33c: "ssyals" -0xc33d: "ssyalt" -0xc33e: "ssyalp" -0xc33f: "ssyalh" -0xc340: "ssyam" -0xc341: "ssyab" -0xc342: "ssyabs" -0xc343: "ssyas" -0xc344: "ssyass" -0xc345: "ssyang" -0xc346: "ssyaj" -0xc347: "ssyac" -0xc348: "ssyak" -0xc349: "ssyat" -0xc34a: "ssyap" -0xc34b: "ssyah" -0xc34c: "ssyae" -0xc34d: "ssyaeg" -0xc34e: "ssyaegg" -0xc34f: "ssyaegs" -0xc350: "ssyaen" -0xc351: "ssyaenj" -0xc352: "ssyaenh" -0xc353: "ssyaed" -0xc354: "ssyael" -0xc355: "ssyaelg" -0xc356: "ssyaelm" -0xc357: "ssyaelb" -0xc358: "ssyaels" -0xc359: "ssyaelt" -0xc35a: "ssyaelp" -0xc35b: "ssyaelh" -0xc35c: "ssyaem" -0xc35d: "ssyaeb" -0xc35e: "ssyaebs" -0xc35f: "ssyaes" -0xc360: "ssyaess" -0xc361: "ssyaeng" -0xc362: "ssyaej" -0xc363: "ssyaec" -0xc364: "ssyaek" -0xc365: "ssyaet" -0xc366: "ssyaep" -0xc367: "ssyaeh" -0xc368: "sseo" -0xc369: "sseog" -0xc36a: "sseogg" -0xc36b: "sseogs" -0xc36c: "sseon" -0xc36d: "sseonj" -0xc36e: "sseonh" -0xc36f: "sseod" -0xc370: "sseol" -0xc371: "sseolg" -0xc372: "sseolm" -0xc373: "sseolb" -0xc374: "sseols" -0xc375: "sseolt" -0xc376: "sseolp" -0xc377: "sseolh" -0xc378: "sseom" -0xc379: "sseob" -0xc37a: "sseobs" -0xc37b: "sseos" -0xc37c: "sseoss" -0xc37d: "sseong" -0xc37e: "sseoj" -0xc37f: "sseoc" -0xc380: "sseok" -0xc381: "sseot" -0xc382: "sseop" -0xc383: "sseoh" -0xc384: "sse" -0xc385: "sseg" -0xc386: "ssegg" -0xc387: "ssegs" -0xc388: "ssen" -0xc389: "ssenj" -0xc38a: "ssenh" -0xc38b: "ssed" -0xc38c: "ssel" -0xc38d: "sselg" -0xc38e: "sselm" -0xc38f: "sselb" -0xc390: "ssels" -0xc391: "sselt" -0xc392: "sselp" -0xc393: "sselh" -0xc394: "ssem" -0xc395: "sseb" -0xc396: "ssebs" -0xc397: "sses" -0xc398: "ssess" -0xc399: "sseng" -0xc39a: "ssej" -0xc39b: "ssec" -0xc39c: "ssek" -0xc39d: "sset" -0xc39e: "ssep" -0xc39f: "sseh" -0xc3a0: "ssyeo" -0xc3a1: "ssyeog" -0xc3a2: "ssyeogg" -0xc3a3: "ssyeogs" -0xc3a4: "ssyeon" -0xc3a5: "ssyeonj" -0xc3a6: "ssyeonh" -0xc3a7: "ssyeod" -0xc3a8: "ssyeol" -0xc3a9: "ssyeolg" -0xc3aa: "ssyeolm" -0xc3ab: "ssyeolb" -0xc3ac: "ssyeols" -0xc3ad: "ssyeolt" -0xc3ae: "ssyeolp" -0xc3af: "ssyeolh" -0xc3b0: "ssyeom" -0xc3b1: "ssyeob" -0xc3b2: "ssyeobs" -0xc3b3: "ssyeos" -0xc3b4: "ssyeoss" -0xc3b5: "ssyeong" -0xc3b6: "ssyeoj" -0xc3b7: "ssyeoc" -0xc3b8: "ssyeok" -0xc3b9: "ssyeot" -0xc3ba: "ssyeop" -0xc3bb: "ssyeoh" -0xc3bc: "ssye" -0xc3bd: "ssyeg" -0xc3be: "ssyegg" -0xc3bf: "ssyegs" -0xc3c0: "ssyen" -0xc3c1: "ssyenj" -0xc3c2: "ssyenh" -0xc3c3: "ssyed" -0xc3c4: "ssyel" -0xc3c5: "ssyelg" -0xc3c6: "ssyelm" -0xc3c7: "ssyelb" -0xc3c8: "ssyels" -0xc3c9: "ssyelt" -0xc3ca: "ssyelp" -0xc3cb: "ssyelh" -0xc3cc: "ssyem" -0xc3cd: "ssyeb" -0xc3ce: "ssyebs" -0xc3cf: "ssyes" -0xc3d0: "ssyess" -0xc3d1: "ssyeng" -0xc3d2: "ssyej" -0xc3d3: "ssyec" -0xc3d4: "ssyek" -0xc3d5: "ssyet" -0xc3d6: "ssyep" -0xc3d7: "ssyeh" -0xc3d8: "sso" -0xc3d9: "ssog" -0xc3da: "ssogg" -0xc3db: "ssogs" -0xc3dc: "sson" -0xc3dd: "ssonj" -0xc3de: "ssonh" -0xc3df: "ssod" -0xc3e0: "ssol" -0xc3e1: "ssolg" -0xc3e2: "ssolm" -0xc3e3: "ssolb" -0xc3e4: "ssols" -0xc3e5: "ssolt" -0xc3e6: "ssolp" -0xc3e7: "ssolh" -0xc3e8: "ssom" -0xc3e9: "ssob" -0xc3ea: "ssobs" -0xc3eb: "ssos" -0xc3ec: "ssoss" -0xc3ed: "ssong" -0xc3ee: "ssoj" -0xc3ef: "ssoc" -0xc3f0: "ssok" -0xc3f1: "ssot" -0xc3f2: "ssop" -0xc3f3: "ssoh" -0xc3f4: "sswa" -0xc3f5: "sswag" -0xc3f6: "sswagg" -0xc3f7: "sswags" -0xc3f8: "sswan" -0xc3f9: "sswanj" -0xc3fa: "sswanh" -0xc3fb: "sswad" -0xc3fc: "sswal" -0xc3fd: "sswalg" -0xc3fe: "sswalm" -0xc3ff: "sswalb" -/* x0c4 */ -0xc400: "sswals" -0xc401: "sswalt" -0xc402: "sswalp" -0xc403: "sswalh" -0xc404: "sswam" -0xc405: "sswab" -0xc406: "sswabs" -0xc407: "sswas" -0xc408: "sswass" -0xc409: "sswang" -0xc40a: "sswaj" -0xc40b: "sswac" -0xc40c: "sswak" -0xc40d: "sswat" -0xc40e: "sswap" -0xc40f: "sswah" -0xc410: "sswae" -0xc411: "sswaeg" -0xc412: "sswaegg" -0xc413: "sswaegs" -0xc414: "sswaen" -0xc415: "sswaenj" -0xc416: "sswaenh" -0xc417: "sswaed" -0xc418: "sswael" -0xc419: "sswaelg" -0xc41a: "sswaelm" -0xc41b: "sswaelb" -0xc41c: "sswaels" -0xc41d: "sswaelt" -0xc41e: "sswaelp" -0xc41f: "sswaelh" -0xc420: "sswaem" -0xc421: "sswaeb" -0xc422: "sswaebs" -0xc423: "sswaes" -0xc424: "sswaess" -0xc425: "sswaeng" -0xc426: "sswaej" -0xc427: "sswaec" -0xc428: "sswaek" -0xc429: "sswaet" -0xc42a: "sswaep" -0xc42b: "sswaeh" -0xc42c: "ssoe" -0xc42d: "ssoeg" -0xc42e: "ssoegg" -0xc42f: "ssoegs" -0xc430: "ssoen" -0xc431: "ssoenj" -0xc432: "ssoenh" -0xc433: "ssoed" -0xc434: "ssoel" -0xc435: "ssoelg" -0xc436: "ssoelm" -0xc437: "ssoelb" -0xc438: "ssoels" -0xc439: "ssoelt" -0xc43a: "ssoelp" -0xc43b: "ssoelh" -0xc43c: "ssoem" -0xc43d: "ssoeb" -0xc43e: "ssoebs" -0xc43f: "ssoes" -0xc440: "ssoess" -0xc441: "ssoeng" -0xc442: "ssoej" -0xc443: "ssoec" -0xc444: "ssoek" -0xc445: "ssoet" -0xc446: "ssoep" -0xc447: "ssoeh" -0xc448: "ssyo" -0xc449: "ssyog" -0xc44a: "ssyogg" -0xc44b: "ssyogs" -0xc44c: "ssyon" -0xc44d: "ssyonj" -0xc44e: "ssyonh" -0xc44f: "ssyod" -0xc450: "ssyol" -0xc451: "ssyolg" -0xc452: "ssyolm" -0xc453: "ssyolb" -0xc454: "ssyols" -0xc455: "ssyolt" -0xc456: "ssyolp" -0xc457: "ssyolh" -0xc458: "ssyom" -0xc459: "ssyob" -0xc45a: "ssyobs" -0xc45b: "ssyos" -0xc45c: "ssyoss" -0xc45d: "ssyong" -0xc45e: "ssyoj" -0xc45f: "ssyoc" -0xc460: "ssyok" -0xc461: "ssyot" -0xc462: "ssyop" -0xc463: "ssyoh" -0xc464: "ssu" -0xc465: "ssug" -0xc466: "ssugg" -0xc467: "ssugs" -0xc468: "ssun" -0xc469: "ssunj" -0xc46a: "ssunh" -0xc46b: "ssud" -0xc46c: "ssul" -0xc46d: "ssulg" -0xc46e: "ssulm" -0xc46f: "ssulb" -0xc470: "ssuls" -0xc471: "ssult" -0xc472: "ssulp" -0xc473: "ssulh" -0xc474: "ssum" -0xc475: "ssub" -0xc476: "ssubs" -0xc477: "ssus" -0xc478: "ssuss" -0xc479: "ssung" -0xc47a: "ssuj" -0xc47b: "ssuc" -0xc47c: "ssuk" -0xc47d: "ssut" -0xc47e: "ssup" -0xc47f: "ssuh" -0xc480: "ssweo" -0xc481: "ssweog" -0xc482: "ssweogg" -0xc483: "ssweogs" -0xc484: "ssweon" -0xc485: "ssweonj" -0xc486: "ssweonh" -0xc487: "ssweod" -0xc488: "ssweol" -0xc489: "ssweolg" -0xc48a: "ssweolm" -0xc48b: "ssweolb" -0xc48c: "ssweols" -0xc48d: "ssweolt" -0xc48e: "ssweolp" -0xc48f: "ssweolh" -0xc490: "ssweom" -0xc491: "ssweob" -0xc492: "ssweobs" -0xc493: "ssweos" -0xc494: "ssweoss" -0xc495: "ssweong" -0xc496: "ssweoj" -0xc497: "ssweoc" -0xc498: "ssweok" -0xc499: "ssweot" -0xc49a: "ssweop" -0xc49b: "ssweoh" -0xc49c: "sswe" -0xc49d: "ssweg" -0xc49e: "sswegg" -0xc49f: "sswegs" -0xc4a0: "sswen" -0xc4a1: "sswenj" -0xc4a2: "sswenh" -0xc4a3: "sswed" -0xc4a4: "sswel" -0xc4a5: "sswelg" -0xc4a6: "sswelm" -0xc4a7: "sswelb" -0xc4a8: "sswels" -0xc4a9: "sswelt" -0xc4aa: "sswelp" -0xc4ab: "sswelh" -0xc4ac: "sswem" -0xc4ad: "ssweb" -0xc4ae: "sswebs" -0xc4af: "sswes" -0xc4b0: "sswess" -0xc4b1: "ssweng" -0xc4b2: "sswej" -0xc4b3: "sswec" -0xc4b4: "sswek" -0xc4b5: "sswet" -0xc4b6: "sswep" -0xc4b7: "ssweh" -0xc4b8: "sswi" -0xc4b9: "sswig" -0xc4ba: "sswigg" -0xc4bb: "sswigs" -0xc4bc: "sswin" -0xc4bd: "sswinj" -0xc4be: "sswinh" -0xc4bf: "sswid" -0xc4c0: "sswil" -0xc4c1: "sswilg" -0xc4c2: "sswilm" -0xc4c3: "sswilb" -0xc4c4: "sswils" -0xc4c5: "sswilt" -0xc4c6: "sswilp" -0xc4c7: "sswilh" -0xc4c8: "sswim" -0xc4c9: "sswib" -0xc4ca: "sswibs" -0xc4cb: "sswis" -0xc4cc: "sswiss" -0xc4cd: "sswing" -0xc4ce: "sswij" -0xc4cf: "sswic" -0xc4d0: "sswik" -0xc4d1: "sswit" -0xc4d2: "sswip" -0xc4d3: "sswih" -0xc4d4: "ssyu" -0xc4d5: "ssyug" -0xc4d6: "ssyugg" -0xc4d7: "ssyugs" -0xc4d8: "ssyun" -0xc4d9: "ssyunj" -0xc4da: "ssyunh" -0xc4db: "ssyud" -0xc4dc: "ssyul" -0xc4dd: "ssyulg" -0xc4de: "ssyulm" -0xc4df: "ssyulb" -0xc4e0: "ssyuls" -0xc4e1: "ssyult" -0xc4e2: "ssyulp" -0xc4e3: "ssyulh" -0xc4e4: "ssyum" -0xc4e5: "ssyub" -0xc4e6: "ssyubs" -0xc4e7: "ssyus" -0xc4e8: "ssyuss" -0xc4e9: "ssyung" -0xc4ea: "ssyuj" -0xc4eb: "ssyuc" -0xc4ec: "ssyuk" -0xc4ed: "ssyut" -0xc4ee: "ssyup" -0xc4ef: "ssyuh" -0xc4f0: "sseu" -0xc4f1: "sseug" -0xc4f2: "sseugg" -0xc4f3: "sseugs" -0xc4f4: "sseun" -0xc4f5: "sseunj" -0xc4f6: "sseunh" -0xc4f7: "sseud" -0xc4f8: "sseul" -0xc4f9: "sseulg" -0xc4fa: "sseulm" -0xc4fb: "sseulb" -0xc4fc: "sseuls" -0xc4fd: "sseult" -0xc4fe: "sseulp" -0xc4ff: "sseulh" -/* x0c5 */ -0xc500: "sseum" -0xc501: "sseub" -0xc502: "sseubs" -0xc503: "sseus" -0xc504: "sseuss" -0xc505: "sseung" -0xc506: "sseuj" -0xc507: "sseuc" -0xc508: "sseuk" -0xc509: "sseut" -0xc50a: "sseup" -0xc50b: "sseuh" -0xc50c: "ssyi" -0xc50d: "ssyig" -0xc50e: "ssyigg" -0xc50f: "ssyigs" -0xc510: "ssyin" -0xc511: "ssyinj" -0xc512: "ssyinh" -0xc513: "ssyid" -0xc514: "ssyil" -0xc515: "ssyilg" -0xc516: "ssyilm" -0xc517: "ssyilb" -0xc518: "ssyils" -0xc519: "ssyilt" -0xc51a: "ssyilp" -0xc51b: "ssyilh" -0xc51c: "ssyim" -0xc51d: "ssyib" -0xc51e: "ssyibs" -0xc51f: "ssyis" -0xc520: "ssyiss" -0xc521: "ssying" -0xc522: "ssyij" -0xc523: "ssyic" -0xc524: "ssyik" -0xc525: "ssyit" -0xc526: "ssyip" -0xc527: "ssyih" -0xc528: "ssi" -0xc529: "ssig" -0xc52a: "ssigg" -0xc52b: "ssigs" -0xc52c: "ssin" -0xc52d: "ssinj" -0xc52e: "ssinh" -0xc52f: "ssid" -0xc530: "ssil" -0xc531: "ssilg" -0xc532: "ssilm" -0xc533: "ssilb" -0xc534: "ssils" -0xc535: "ssilt" -0xc536: "ssilp" -0xc537: "ssilh" -0xc538: "ssim" -0xc539: "ssib" -0xc53a: "ssibs" -0xc53b: "ssis" -0xc53c: "ssiss" -0xc53d: "ssing" -0xc53e: "ssij" -0xc53f: "ssic" -0xc540: "ssik" -0xc541: "ssit" -0xc542: "ssip" -0xc543: "ssih" -0xc544: "a" -0xc545: "ag" -0xc546: "agg" -0xc547: "ags" -0xc548: "an" -0xc549: "anj" -0xc54a: "anh" -0xc54b: "ad" -0xc54c: "al" -0xc54d: "alg" -0xc54e: "alm" -0xc54f: "alb" -0xc550: "als" -0xc551: "alt" -0xc552: "alp" -0xc553: "alh" -0xc554: "am" -0xc555: "ab" -0xc556: "abs" -0xc557: "as" -0xc558: "ass" -0xc559: "ang" -0xc55a: "aj" -0xc55b: "ac" -0xc55c: "ak" -0xc55d: "at" -0xc55e: "ap" -0xc55f: "ah" -0xc560: "ae" -0xc561: "aeg" -0xc562: "aegg" -0xc563: "aegs" -0xc564: "aen" -0xc565: "aenj" -0xc566: "aenh" -0xc567: "aed" -0xc568: "ael" -0xc569: "aelg" -0xc56a: "aelm" -0xc56b: "aelb" -0xc56c: "aels" -0xc56d: "aelt" -0xc56e: "aelp" -0xc56f: "aelh" -0xc570: "aem" -0xc571: "aeb" -0xc572: "aebs" -0xc573: "aes" -0xc574: "aess" -0xc575: "aeng" -0xc576: "aej" -0xc577: "aec" -0xc578: "aek" -0xc579: "aet" -0xc57a: "aep" -0xc57b: "aeh" -0xc57c: "ya" -0xc57d: "yag" -0xc57e: "yagg" -0xc57f: "yags" -0xc580: "yan" -0xc581: "yanj" -0xc582: "yanh" -0xc583: "yad" -0xc584: "yal" -0xc585: "yalg" -0xc586: "yalm" -0xc587: "yalb" -0xc588: "yals" -0xc589: "yalt" -0xc58a: "yalp" -0xc58b: "yalh" -0xc58c: "yam" -0xc58d: "yab" -0xc58e: "yabs" -0xc58f: "yas" -0xc590: "yass" -0xc591: "yang" -0xc592: "yaj" -0xc593: "yac" -0xc594: "yak" -0xc595: "yat" -0xc596: "yap" -0xc597: "yah" -0xc598: "yae" -0xc599: "yaeg" -0xc59a: "yaegg" -0xc59b: "yaegs" -0xc59c: "yaen" -0xc59d: "yaenj" -0xc59e: "yaenh" -0xc59f: "yaed" -0xc5a0: "yael" -0xc5a1: "yaelg" -0xc5a2: "yaelm" -0xc5a3: "yaelb" -0xc5a4: "yaels" -0xc5a5: "yaelt" -0xc5a6: "yaelp" -0xc5a7: "yaelh" -0xc5a8: "yaem" -0xc5a9: "yaeb" -0xc5aa: "yaebs" -0xc5ab: "yaes" -0xc5ac: "yaess" -0xc5ad: "yaeng" -0xc5ae: "yaej" -0xc5af: "yaec" -0xc5b0: "yaek" -0xc5b1: "yaet" -0xc5b2: "yaep" -0xc5b3: "yaeh" -0xc5b4: "eo" -0xc5b5: "eog" -0xc5b6: "eogg" -0xc5b7: "eogs" -0xc5b8: "eon" -0xc5b9: "eonj" -0xc5ba: "eonh" -0xc5bb: "eod" -0xc5bc: "eol" -0xc5bd: "eolg" -0xc5be: "eolm" -0xc5bf: "eolb" -0xc5c0: "eols" -0xc5c1: "eolt" -0xc5c2: "eolp" -0xc5c3: "eolh" -0xc5c4: "eom" -0xc5c5: "eob" -0xc5c6: "eobs" -0xc5c7: "eos" -0xc5c8: "eoss" -0xc5c9: "eong" -0xc5ca: "eoj" -0xc5cb: "eoc" -0xc5cc: "eok" -0xc5cd: "eot" -0xc5ce: "eop" -0xc5cf: "eoh" -0xc5d0: "e" -0xc5d1: "eg" -0xc5d2: "egg" -0xc5d3: "egs" -0xc5d4: "en" -0xc5d5: "enj" -0xc5d6: "enh" -0xc5d7: "ed" -0xc5d8: "el" -0xc5d9: "elg" -0xc5da: "elm" -0xc5db: "elb" -0xc5dc: "els" -0xc5dd: "elt" -0xc5de: "elp" -0xc5df: "elh" -0xc5e0: "em" -0xc5e1: "eb" -0xc5e2: "ebs" -0xc5e3: "es" -0xc5e4: "ess" -0xc5e5: "eng" -0xc5e6: "ej" -0xc5e7: "ec" -0xc5e8: "ek" -0xc5e9: "et" -0xc5ea: "ep" -0xc5eb: "eh" -0xc5ec: "yeo" -0xc5ed: "yeog" -0xc5ee: "yeogg" -0xc5ef: "yeogs" -0xc5f0: "yeon" -0xc5f1: "yeonj" -0xc5f2: "yeonh" -0xc5f3: "yeod" -0xc5f4: "yeol" -0xc5f5: "yeolg" -0xc5f6: "yeolm" -0xc5f7: "yeolb" -0xc5f8: "yeols" -0xc5f9: "yeolt" -0xc5fa: "yeolp" -0xc5fb: "yeolh" -0xc5fc: "yeom" -0xc5fd: "yeob" -0xc5fe: "yeobs" -0xc5ff: "yeos" -/* x0c6 */ -0xc600: "yeoss" -0xc601: "yeong" -0xc602: "yeoj" -0xc603: "yeoc" -0xc604: "yeok" -0xc605: "yeot" -0xc606: "yeop" -0xc607: "yeoh" -0xc608: "ye" -0xc609: "yeg" -0xc60a: "yegg" -0xc60b: "yegs" -0xc60c: "yen" -0xc60d: "yenj" -0xc60e: "yenh" -0xc60f: "yed" -0xc610: "yel" -0xc611: "yelg" -0xc612: "yelm" -0xc613: "yelb" -0xc614: "yels" -0xc615: "yelt" -0xc616: "yelp" -0xc617: "yelh" -0xc618: "yem" -0xc619: "yeb" -0xc61a: "yebs" -0xc61b: "yes" -0xc61c: "yess" -0xc61d: "yeng" -0xc61e: "yej" -0xc61f: "yec" -0xc620: "yek" -0xc621: "yet" -0xc622: "yep" -0xc623: "yeh" -0xc624: "o" -0xc625: "og" -0xc626: "ogg" -0xc627: "ogs" -0xc628: "on" -0xc629: "onj" -0xc62a: "onh" -0xc62b: "od" -0xc62c: "ol" -0xc62d: "olg" -0xc62e: "olm" -0xc62f: "olb" -0xc630: "ols" -0xc631: "olt" -0xc632: "olp" -0xc633: "olh" -0xc634: "om" -0xc635: "ob" -0xc636: "obs" -0xc637: "os" -0xc638: "oss" -0xc639: "ong" -0xc63a: "oj" -0xc63b: "oc" -0xc63c: "ok" -0xc63d: "ot" -0xc63e: "op" -0xc63f: "oh" -0xc640: "wa" -0xc641: "wag" -0xc642: "wagg" -0xc643: "wags" -0xc644: "wan" -0xc645: "wanj" -0xc646: "wanh" -0xc647: "wad" -0xc648: "wal" -0xc649: "walg" -0xc64a: "walm" -0xc64b: "walb" -0xc64c: "wals" -0xc64d: "walt" -0xc64e: "walp" -0xc64f: "walh" -0xc650: "wam" -0xc651: "wab" -0xc652: "wabs" -0xc653: "was" -0xc654: "wass" -0xc655: "wang" -0xc656: "waj" -0xc657: "wac" -0xc658: "wak" -0xc659: "wat" -0xc65a: "wap" -0xc65b: "wah" -0xc65c: "wae" -0xc65d: "waeg" -0xc65e: "waegg" -0xc65f: "waegs" -0xc660: "waen" -0xc661: "waenj" -0xc662: "waenh" -0xc663: "waed" -0xc664: "wael" -0xc665: "waelg" -0xc666: "waelm" -0xc667: "waelb" -0xc668: "waels" -0xc669: "waelt" -0xc66a: "waelp" -0xc66b: "waelh" -0xc66c: "waem" -0xc66d: "waeb" -0xc66e: "waebs" -0xc66f: "waes" -0xc670: "waess" -0xc671: "waeng" -0xc672: "waej" -0xc673: "waec" -0xc674: "waek" -0xc675: "waet" -0xc676: "waep" -0xc677: "waeh" -0xc678: "oe" -0xc679: "oeg" -0xc67a: "oegg" -0xc67b: "oegs" -0xc67c: "oen" -0xc67d: "oenj" -0xc67e: "oenh" -0xc67f: "oed" -0xc680: "oel" -0xc681: "oelg" -0xc682: "oelm" -0xc683: "oelb" -0xc684: "oels" -0xc685: "oelt" -0xc686: "oelp" -0xc687: "oelh" -0xc688: "oem" -0xc689: "oeb" -0xc68a: "oebs" -0xc68b: "oes" -0xc68c: "oess" -0xc68d: "oeng" -0xc68e: "oej" -0xc68f: "oec" -0xc690: "oek" -0xc691: "oet" -0xc692: "oep" -0xc693: "oeh" -0xc694: "yo" -0xc695: "yog" -0xc696: "yogg" -0xc697: "yogs" -0xc698: "yon" -0xc699: "yonj" -0xc69a: "yonh" -0xc69b: "yod" -0xc69c: "yol" -0xc69d: "yolg" -0xc69e: "yolm" -0xc69f: "yolb" -0xc6a0: "yols" -0xc6a1: "yolt" -0xc6a2: "yolp" -0xc6a3: "yolh" -0xc6a4: "yom" -0xc6a5: "yob" -0xc6a6: "yobs" -0xc6a7: "yos" -0xc6a8: "yoss" -0xc6a9: "yong" -0xc6aa: "yoj" -0xc6ab: "yoc" -0xc6ac: "yok" -0xc6ad: "yot" -0xc6ae: "yop" -0xc6af: "yoh" -0xc6b0: "u" -0xc6b1: "ug" -0xc6b2: "ugg" -0xc6b3: "ugs" -0xc6b4: "un" -0xc6b5: "unj" -0xc6b6: "unh" -0xc6b7: "ud" -0xc6b8: "ul" -0xc6b9: "ulg" -0xc6ba: "ulm" -0xc6bb: "ulb" -0xc6bc: "uls" -0xc6bd: "ult" -0xc6be: "ulp" -0xc6bf: "ulh" -0xc6c0: "um" -0xc6c1: "ub" -0xc6c2: "ubs" -0xc6c3: "us" -0xc6c4: "uss" -0xc6c5: "ung" -0xc6c6: "uj" -0xc6c7: "uc" -0xc6c8: "uk" -0xc6c9: "ut" -0xc6ca: "up" -0xc6cb: "uh" -0xc6cc: "weo" -0xc6cd: "weog" -0xc6ce: "weogg" -0xc6cf: "weogs" -0xc6d0: "weon" -0xc6d1: "weonj" -0xc6d2: "weonh" -0xc6d3: "weod" -0xc6d4: "weol" -0xc6d5: "weolg" -0xc6d6: "weolm" -0xc6d7: "weolb" -0xc6d8: "weols" -0xc6d9: "weolt" -0xc6da: "weolp" -0xc6db: "weolh" -0xc6dc: "weom" -0xc6dd: "weob" -0xc6de: "weobs" -0xc6df: "weos" -0xc6e0: "weoss" -0xc6e1: "weong" -0xc6e2: "weoj" -0xc6e3: "weoc" -0xc6e4: "weok" -0xc6e5: "weot" -0xc6e6: "weop" -0xc6e7: "weoh" -0xc6e8: "we" -0xc6e9: "weg" -0xc6ea: "wegg" -0xc6eb: "wegs" -0xc6ec: "wen" -0xc6ed: "wenj" -0xc6ee: "wenh" -0xc6ef: "wed" -0xc6f0: "wel" -0xc6f1: "welg" -0xc6f2: "welm" -0xc6f3: "welb" -0xc6f4: "wels" -0xc6f5: "welt" -0xc6f6: "welp" -0xc6f7: "welh" -0xc6f8: "wem" -0xc6f9: "web" -0xc6fa: "webs" -0xc6fb: "wes" -0xc6fc: "wess" -0xc6fd: "weng" -0xc6fe: "wej" -0xc6ff: "wec" -/* x0c7 */ -0xc700: "wek" -0xc701: "wet" -0xc702: "wep" -0xc703: "weh" -0xc704: "wi" -0xc705: "wig" -0xc706: "wigg" -0xc707: "wigs" -0xc708: "win" -0xc709: "winj" -0xc70a: "winh" -0xc70b: "wid" -0xc70c: "wil" -0xc70d: "wilg" -0xc70e: "wilm" -0xc70f: "wilb" -0xc710: "wils" -0xc711: "wilt" -0xc712: "wilp" -0xc713: "wilh" -0xc714: "wim" -0xc715: "wib" -0xc716: "wibs" -0xc717: "wis" -0xc718: "wiss" -0xc719: "wing" -0xc71a: "wij" -0xc71b: "wic" -0xc71c: "wik" -0xc71d: "wit" -0xc71e: "wip" -0xc71f: "wih" -0xc720: "yu" -0xc721: "yug" -0xc722: "yugg" -0xc723: "yugs" -0xc724: "yun" -0xc725: "yunj" -0xc726: "yunh" -0xc727: "yud" -0xc728: "yul" -0xc729: "yulg" -0xc72a: "yulm" -0xc72b: "yulb" -0xc72c: "yuls" -0xc72d: "yult" -0xc72e: "yulp" -0xc72f: "yulh" -0xc730: "yum" -0xc731: "yub" -0xc732: "yubs" -0xc733: "yus" -0xc734: "yuss" -0xc735: "yung" -0xc736: "yuj" -0xc737: "yuc" -0xc738: "yuk" -0xc739: "yut" -0xc73a: "yup" -0xc73b: "yuh" -0xc73c: "eu" -0xc73d: "eug" -0xc73e: "eugg" -0xc73f: "eugs" -0xc740: "eun" -0xc741: "eunj" -0xc742: "eunh" -0xc743: "eud" -0xc744: "eul" -0xc745: "eulg" -0xc746: "eulm" -0xc747: "eulb" -0xc748: "euls" -0xc749: "eult" -0xc74a: "eulp" -0xc74b: "eulh" -0xc74c: "eum" -0xc74d: "eub" -0xc74e: "eubs" -0xc74f: "eus" -0xc750: "euss" -0xc751: "eung" -0xc752: "euj" -0xc753: "euc" -0xc754: "euk" -0xc755: "eut" -0xc756: "eup" -0xc757: "euh" -0xc758: "yi" -0xc759: "yig" -0xc75a: "yigg" -0xc75b: "yigs" -0xc75c: "yin" -0xc75d: "yinj" -0xc75e: "yinh" -0xc75f: "yid" -0xc760: "yil" -0xc761: "yilg" -0xc762: "yilm" -0xc763: "yilb" -0xc764: "yils" -0xc765: "yilt" -0xc766: "yilp" -0xc767: "yilh" -0xc768: "yim" -0xc769: "yib" -0xc76a: "yibs" -0xc76b: "yis" -0xc76c: "yiss" -0xc76d: "ying" -0xc76e: "yij" -0xc76f: "yic" -0xc770: "yik" -0xc771: "yit" -0xc772: "yip" -0xc773: "yih" -0xc774: "i" -0xc775: "ig" -0xc776: "igg" -0xc777: "igs" -0xc778: "in" -0xc779: "inj" -0xc77a: "inh" -0xc77b: "id" -0xc77c: "il" -0xc77d: "ilg" -0xc77e: "ilm" -0xc77f: "ilb" -0xc780: "ils" -0xc781: "ilt" -0xc782: "ilp" -0xc783: "ilh" -0xc784: "im" -0xc785: "ib" -0xc786: "ibs" -0xc787: "is" -0xc788: "iss" -0xc789: "ing" -0xc78a: "ij" -0xc78b: "ic" -0xc78c: "ik" -0xc78d: "it" -0xc78e: "ip" -0xc78f: "ih" -0xc790: "ja" -0xc791: "jag" -0xc792: "jagg" -0xc793: "jags" -0xc794: "jan" -0xc795: "janj" -0xc796: "janh" -0xc797: "jad" -0xc798: "jal" -0xc799: "jalg" -0xc79a: "jalm" -0xc79b: "jalb" -0xc79c: "jals" -0xc79d: "jalt" -0xc79e: "jalp" -0xc79f: "jalh" -0xc7a0: "jam" -0xc7a1: "jab" -0xc7a2: "jabs" -0xc7a3: "jas" -0xc7a4: "jass" -0xc7a5: "jang" -0xc7a6: "jaj" -0xc7a7: "jac" -0xc7a8: "jak" -0xc7a9: "jat" -0xc7aa: "jap" -0xc7ab: "jah" -0xc7ac: "jae" -0xc7ad: "jaeg" -0xc7ae: "jaegg" -0xc7af: "jaegs" -0xc7b0: "jaen" -0xc7b1: "jaenj" -0xc7b2: "jaenh" -0xc7b3: "jaed" -0xc7b4: "jael" -0xc7b5: "jaelg" -0xc7b6: "jaelm" -0xc7b7: "jaelb" -0xc7b8: "jaels" -0xc7b9: "jaelt" -0xc7ba: "jaelp" -0xc7bb: "jaelh" -0xc7bc: "jaem" -0xc7bd: "jaeb" -0xc7be: "jaebs" -0xc7bf: "jaes" -0xc7c0: "jaess" -0xc7c1: "jaeng" -0xc7c2: "jaej" -0xc7c3: "jaec" -0xc7c4: "jaek" -0xc7c5: "jaet" -0xc7c6: "jaep" -0xc7c7: "jaeh" -0xc7c8: "jya" -0xc7c9: "jyag" -0xc7ca: "jyagg" -0xc7cb: "jyags" -0xc7cc: "jyan" -0xc7cd: "jyanj" -0xc7ce: "jyanh" -0xc7cf: "jyad" -0xc7d0: "jyal" -0xc7d1: "jyalg" -0xc7d2: "jyalm" -0xc7d3: "jyalb" -0xc7d4: "jyals" -0xc7d5: "jyalt" -0xc7d6: "jyalp" -0xc7d7: "jyalh" -0xc7d8: "jyam" -0xc7d9: "jyab" -0xc7da: "jyabs" -0xc7db: "jyas" -0xc7dc: "jyass" -0xc7dd: "jyang" -0xc7de: "jyaj" -0xc7df: "jyac" -0xc7e0: "jyak" -0xc7e1: "jyat" -0xc7e2: "jyap" -0xc7e3: "jyah" -0xc7e4: "jyae" -0xc7e5: "jyaeg" -0xc7e6: "jyaegg" -0xc7e7: "jyaegs" -0xc7e8: "jyaen" -0xc7e9: "jyaenj" -0xc7ea: "jyaenh" -0xc7eb: "jyaed" -0xc7ec: "jyael" -0xc7ed: "jyaelg" -0xc7ee: "jyaelm" -0xc7ef: "jyaelb" -0xc7f0: "jyaels" -0xc7f1: "jyaelt" -0xc7f2: "jyaelp" -0xc7f3: "jyaelh" -0xc7f4: "jyaem" -0xc7f5: "jyaeb" -0xc7f6: "jyaebs" -0xc7f7: "jyaes" -0xc7f8: "jyaess" -0xc7f9: "jyaeng" -0xc7fa: "jyaej" -0xc7fb: "jyaec" -0xc7fc: "jyaek" -0xc7fd: "jyaet" -0xc7fe: "jyaep" -0xc7ff: "jyaeh" -/* x0c8 */ -0xc800: "jeo" -0xc801: "jeog" -0xc802: "jeogg" -0xc803: "jeogs" -0xc804: "jeon" -0xc805: "jeonj" -0xc806: "jeonh" -0xc807: "jeod" -0xc808: "jeol" -0xc809: "jeolg" -0xc80a: "jeolm" -0xc80b: "jeolb" -0xc80c: "jeols" -0xc80d: "jeolt" -0xc80e: "jeolp" -0xc80f: "jeolh" -0xc810: "jeom" -0xc811: "jeob" -0xc812: "jeobs" -0xc813: "jeos" -0xc814: "jeoss" -0xc815: "jeong" -0xc816: "jeoj" -0xc817: "jeoc" -0xc818: "jeok" -0xc819: "jeot" -0xc81a: "jeop" -0xc81b: "jeoh" -0xc81c: "je" -0xc81d: "jeg" -0xc81e: "jegg" -0xc81f: "jegs" -0xc820: "jen" -0xc821: "jenj" -0xc822: "jenh" -0xc823: "jed" -0xc824: "jel" -0xc825: "jelg" -0xc826: "jelm" -0xc827: "jelb" -0xc828: "jels" -0xc829: "jelt" -0xc82a: "jelp" -0xc82b: "jelh" -0xc82c: "jem" -0xc82d: "jeb" -0xc82e: "jebs" -0xc82f: "jes" -0xc830: "jess" -0xc831: "jeng" -0xc832: "jej" -0xc833: "jec" -0xc834: "jek" -0xc835: "jet" -0xc836: "jep" -0xc837: "jeh" -0xc838: "jyeo" -0xc839: "jyeog" -0xc83a: "jyeogg" -0xc83b: "jyeogs" -0xc83c: "jyeon" -0xc83d: "jyeonj" -0xc83e: "jyeonh" -0xc83f: "jyeod" -0xc840: "jyeol" -0xc841: "jyeolg" -0xc842: "jyeolm" -0xc843: "jyeolb" -0xc844: "jyeols" -0xc845: "jyeolt" -0xc846: "jyeolp" -0xc847: "jyeolh" -0xc848: "jyeom" -0xc849: "jyeob" -0xc84a: "jyeobs" -0xc84b: "jyeos" -0xc84c: "jyeoss" -0xc84d: "jyeong" -0xc84e: "jyeoj" -0xc84f: "jyeoc" -0xc850: "jyeok" -0xc851: "jyeot" -0xc852: "jyeop" -0xc853: "jyeoh" -0xc854: "jye" -0xc855: "jyeg" -0xc856: "jyegg" -0xc857: "jyegs" -0xc858: "jyen" -0xc859: "jyenj" -0xc85a: "jyenh" -0xc85b: "jyed" -0xc85c: "jyel" -0xc85d: "jyelg" -0xc85e: "jyelm" -0xc85f: "jyelb" -0xc860: "jyels" -0xc861: "jyelt" -0xc862: "jyelp" -0xc863: "jyelh" -0xc864: "jyem" -0xc865: "jyeb" -0xc866: "jyebs" -0xc867: "jyes" -0xc868: "jyess" -0xc869: "jyeng" -0xc86a: "jyej" -0xc86b: "jyec" -0xc86c: "jyek" -0xc86d: "jyet" -0xc86e: "jyep" -0xc86f: "jyeh" -0xc870: "jo" -0xc871: "jog" -0xc872: "jogg" -0xc873: "jogs" -0xc874: "jon" -0xc875: "jonj" -0xc876: "jonh" -0xc877: "jod" -0xc878: "jol" -0xc879: "jolg" -0xc87a: "jolm" -0xc87b: "jolb" -0xc87c: "jols" -0xc87d: "jolt" -0xc87e: "jolp" -0xc87f: "jolh" -0xc880: "jom" -0xc881: "job" -0xc882: "jobs" -0xc883: "jos" -0xc884: "joss" -0xc885: "jong" -0xc886: "joj" -0xc887: "joc" -0xc888: "jok" -0xc889: "jot" -0xc88a: "jop" -0xc88b: "joh" -0xc88c: "jwa" -0xc88d: "jwag" -0xc88e: "jwagg" -0xc88f: "jwags" -0xc890: "jwan" -0xc891: "jwanj" -0xc892: "jwanh" -0xc893: "jwad" -0xc894: "jwal" -0xc895: "jwalg" -0xc896: "jwalm" -0xc897: "jwalb" -0xc898: "jwals" -0xc899: "jwalt" -0xc89a: "jwalp" -0xc89b: "jwalh" -0xc89c: "jwam" -0xc89d: "jwab" -0xc89e: "jwabs" -0xc89f: "jwas" -0xc8a0: "jwass" -0xc8a1: "jwang" -0xc8a2: "jwaj" -0xc8a3: "jwac" -0xc8a4: "jwak" -0xc8a5: "jwat" -0xc8a6: "jwap" -0xc8a7: "jwah" -0xc8a8: "jwae" -0xc8a9: "jwaeg" -0xc8aa: "jwaegg" -0xc8ab: "jwaegs" -0xc8ac: "jwaen" -0xc8ad: "jwaenj" -0xc8ae: "jwaenh" -0xc8af: "jwaed" -0xc8b0: "jwael" -0xc8b1: "jwaelg" -0xc8b2: "jwaelm" -0xc8b3: "jwaelb" -0xc8b4: "jwaels" -0xc8b5: "jwaelt" -0xc8b6: "jwaelp" -0xc8b7: "jwaelh" -0xc8b8: "jwaem" -0xc8b9: "jwaeb" -0xc8ba: "jwaebs" -0xc8bb: "jwaes" -0xc8bc: "jwaess" -0xc8bd: "jwaeng" -0xc8be: "jwaej" -0xc8bf: "jwaec" -0xc8c0: "jwaek" -0xc8c1: "jwaet" -0xc8c2: "jwaep" -0xc8c3: "jwaeh" -0xc8c4: "joe" -0xc8c5: "joeg" -0xc8c6: "joegg" -0xc8c7: "joegs" -0xc8c8: "joen" -0xc8c9: "joenj" -0xc8ca: "joenh" -0xc8cb: "joed" -0xc8cc: "joel" -0xc8cd: "joelg" -0xc8ce: "joelm" -0xc8cf: "joelb" -0xc8d0: "joels" -0xc8d1: "joelt" -0xc8d2: "joelp" -0xc8d3: "joelh" -0xc8d4: "joem" -0xc8d5: "joeb" -0xc8d6: "joebs" -0xc8d7: "joes" -0xc8d8: "joess" -0xc8d9: "joeng" -0xc8da: "joej" -0xc8db: "joec" -0xc8dc: "joek" -0xc8dd: "joet" -0xc8de: "joep" -0xc8df: "joeh" -0xc8e0: "jyo" -0xc8e1: "jyog" -0xc8e2: "jyogg" -0xc8e3: "jyogs" -0xc8e4: "jyon" -0xc8e5: "jyonj" -0xc8e6: "jyonh" -0xc8e7: "jyod" -0xc8e8: "jyol" -0xc8e9: "jyolg" -0xc8ea: "jyolm" -0xc8eb: "jyolb" -0xc8ec: "jyols" -0xc8ed: "jyolt" -0xc8ee: "jyolp" -0xc8ef: "jyolh" -0xc8f0: "jyom" -0xc8f1: "jyob" -0xc8f2: "jyobs" -0xc8f3: "jyos" -0xc8f4: "jyoss" -0xc8f5: "jyong" -0xc8f6: "jyoj" -0xc8f7: "jyoc" -0xc8f8: "jyok" -0xc8f9: "jyot" -0xc8fa: "jyop" -0xc8fb: "jyoh" -0xc8fc: "ju" -0xc8fd: "jug" -0xc8fe: "jugg" -0xc8ff: "jugs" -/* x0c9 */ -0xc900: "jun" -0xc901: "junj" -0xc902: "junh" -0xc903: "jud" -0xc904: "jul" -0xc905: "julg" -0xc906: "julm" -0xc907: "julb" -0xc908: "juls" -0xc909: "jult" -0xc90a: "julp" -0xc90b: "julh" -0xc90c: "jum" -0xc90d: "jub" -0xc90e: "jubs" -0xc90f: "jus" -0xc910: "juss" -0xc911: "jung" -0xc912: "juj" -0xc913: "juc" -0xc914: "juk" -0xc915: "jut" -0xc916: "jup" -0xc917: "juh" -0xc918: "jweo" -0xc919: "jweog" -0xc91a: "jweogg" -0xc91b: "jweogs" -0xc91c: "jweon" -0xc91d: "jweonj" -0xc91e: "jweonh" -0xc91f: "jweod" -0xc920: "jweol" -0xc921: "jweolg" -0xc922: "jweolm" -0xc923: "jweolb" -0xc924: "jweols" -0xc925: "jweolt" -0xc926: "jweolp" -0xc927: "jweolh" -0xc928: "jweom" -0xc929: "jweob" -0xc92a: "jweobs" -0xc92b: "jweos" -0xc92c: "jweoss" -0xc92d: "jweong" -0xc92e: "jweoj" -0xc92f: "jweoc" -0xc930: "jweok" -0xc931: "jweot" -0xc932: "jweop" -0xc933: "jweoh" -0xc934: "jwe" -0xc935: "jweg" -0xc936: "jwegg" -0xc937: "jwegs" -0xc938: "jwen" -0xc939: "jwenj" -0xc93a: "jwenh" -0xc93b: "jwed" -0xc93c: "jwel" -0xc93d: "jwelg" -0xc93e: "jwelm" -0xc93f: "jwelb" -0xc940: "jwels" -0xc941: "jwelt" -0xc942: "jwelp" -0xc943: "jwelh" -0xc944: "jwem" -0xc945: "jweb" -0xc946: "jwebs" -0xc947: "jwes" -0xc948: "jwess" -0xc949: "jweng" -0xc94a: "jwej" -0xc94b: "jwec" -0xc94c: "jwek" -0xc94d: "jwet" -0xc94e: "jwep" -0xc94f: "jweh" -0xc950: "jwi" -0xc951: "jwig" -0xc952: "jwigg" -0xc953: "jwigs" -0xc954: "jwin" -0xc955: "jwinj" -0xc956: "jwinh" -0xc957: "jwid" -0xc958: "jwil" -0xc959: "jwilg" -0xc95a: "jwilm" -0xc95b: "jwilb" -0xc95c: "jwils" -0xc95d: "jwilt" -0xc95e: "jwilp" -0xc95f: "jwilh" -0xc960: "jwim" -0xc961: "jwib" -0xc962: "jwibs" -0xc963: "jwis" -0xc964: "jwiss" -0xc965: "jwing" -0xc966: "jwij" -0xc967: "jwic" -0xc968: "jwik" -0xc969: "jwit" -0xc96a: "jwip" -0xc96b: "jwih" -0xc96c: "jyu" -0xc96d: "jyug" -0xc96e: "jyugg" -0xc96f: "jyugs" -0xc970: "jyun" -0xc971: "jyunj" -0xc972: "jyunh" -0xc973: "jyud" -0xc974: "jyul" -0xc975: "jyulg" -0xc976: "jyulm" -0xc977: "jyulb" -0xc978: "jyuls" -0xc979: "jyult" -0xc97a: "jyulp" -0xc97b: "jyulh" -0xc97c: "jyum" -0xc97d: "jyub" -0xc97e: "jyubs" -0xc97f: "jyus" -0xc980: "jyuss" -0xc981: "jyung" -0xc982: "jyuj" -0xc983: "jyuc" -0xc984: "jyuk" -0xc985: "jyut" -0xc986: "jyup" -0xc987: "jyuh" -0xc988: "jeu" -0xc989: "jeug" -0xc98a: "jeugg" -0xc98b: "jeugs" -0xc98c: "jeun" -0xc98d: "jeunj" -0xc98e: "jeunh" -0xc98f: "jeud" -0xc990: "jeul" -0xc991: "jeulg" -0xc992: "jeulm" -0xc993: "jeulb" -0xc994: "jeuls" -0xc995: "jeult" -0xc996: "jeulp" -0xc997: "jeulh" -0xc998: "jeum" -0xc999: "jeub" -0xc99a: "jeubs" -0xc99b: "jeus" -0xc99c: "jeuss" -0xc99d: "jeung" -0xc99e: "jeuj" -0xc99f: "jeuc" -0xc9a0: "jeuk" -0xc9a1: "jeut" -0xc9a2: "jeup" -0xc9a3: "jeuh" -0xc9a4: "jyi" -0xc9a5: "jyig" -0xc9a6: "jyigg" -0xc9a7: "jyigs" -0xc9a8: "jyin" -0xc9a9: "jyinj" -0xc9aa: "jyinh" -0xc9ab: "jyid" -0xc9ac: "jyil" -0xc9ad: "jyilg" -0xc9ae: "jyilm" -0xc9af: "jyilb" -0xc9b0: "jyils" -0xc9b1: "jyilt" -0xc9b2: "jyilp" -0xc9b3: "jyilh" -0xc9b4: "jyim" -0xc9b5: "jyib" -0xc9b6: "jyibs" -0xc9b7: "jyis" -0xc9b8: "jyiss" -0xc9b9: "jying" -0xc9ba: "jyij" -0xc9bb: "jyic" -0xc9bc: "jyik" -0xc9bd: "jyit" -0xc9be: "jyip" -0xc9bf: "jyih" -0xc9c0: "ji" -0xc9c1: "jig" -0xc9c2: "jigg" -0xc9c3: "jigs" -0xc9c4: "jin" -0xc9c5: "jinj" -0xc9c6: "jinh" -0xc9c7: "jid" -0xc9c8: "jil" -0xc9c9: "jilg" -0xc9ca: "jilm" -0xc9cb: "jilb" -0xc9cc: "jils" -0xc9cd: "jilt" -0xc9ce: "jilp" -0xc9cf: "jilh" -0xc9d0: "jim" -0xc9d1: "jib" -0xc9d2: "jibs" -0xc9d3: "jis" -0xc9d4: "jiss" -0xc9d5: "jing" -0xc9d6: "jij" -0xc9d7: "jic" -0xc9d8: "jik" -0xc9d9: "jit" -0xc9da: "jip" -0xc9db: "jih" -0xc9dc: "jja" -0xc9dd: "jjag" -0xc9de: "jjagg" -0xc9df: "jjags" -0xc9e0: "jjan" -0xc9e1: "jjanj" -0xc9e2: "jjanh" -0xc9e3: "jjad" -0xc9e4: "jjal" -0xc9e5: "jjalg" -0xc9e6: "jjalm" -0xc9e7: "jjalb" -0xc9e8: "jjals" -0xc9e9: "jjalt" -0xc9ea: "jjalp" -0xc9eb: "jjalh" -0xc9ec: "jjam" -0xc9ed: "jjab" -0xc9ee: "jjabs" -0xc9ef: "jjas" -0xc9f0: "jjass" -0xc9f1: "jjang" -0xc9f2: "jjaj" -0xc9f3: "jjac" -0xc9f4: "jjak" -0xc9f5: "jjat" -0xc9f6: "jjap" -0xc9f7: "jjah" -0xc9f8: "jjae" -0xc9f9: "jjaeg" -0xc9fa: "jjaegg" -0xc9fb: "jjaegs" -0xc9fc: "jjaen" -0xc9fd: "jjaenj" -0xc9fe: "jjaenh" -0xc9ff: "jjaed" -/* x0ca */ -0xca00: "jjael" -0xca01: "jjaelg" -0xca02: "jjaelm" -0xca03: "jjaelb" -0xca04: "jjaels" -0xca05: "jjaelt" -0xca06: "jjaelp" -0xca07: "jjaelh" -0xca08: "jjaem" -0xca09: "jjaeb" -0xca0a: "jjaebs" -0xca0b: "jjaes" -0xca0c: "jjaess" -0xca0d: "jjaeng" -0xca0e: "jjaej" -0xca0f: "jjaec" -0xca10: "jjaek" -0xca11: "jjaet" -0xca12: "jjaep" -0xca13: "jjaeh" -0xca14: "jjya" -0xca15: "jjyag" -0xca16: "jjyagg" -0xca17: "jjyags" -0xca18: "jjyan" -0xca19: "jjyanj" -0xca1a: "jjyanh" -0xca1b: "jjyad" -0xca1c: "jjyal" -0xca1d: "jjyalg" -0xca1e: "jjyalm" -0xca1f: "jjyalb" -0xca20: "jjyals" -0xca21: "jjyalt" -0xca22: "jjyalp" -0xca23: "jjyalh" -0xca24: "jjyam" -0xca25: "jjyab" -0xca26: "jjyabs" -0xca27: "jjyas" -0xca28: "jjyass" -0xca29: "jjyang" -0xca2a: "jjyaj" -0xca2b: "jjyac" -0xca2c: "jjyak" -0xca2d: "jjyat" -0xca2e: "jjyap" -0xca2f: "jjyah" -0xca30: "jjyae" -0xca31: "jjyaeg" -0xca32: "jjyaegg" -0xca33: "jjyaegs" -0xca34: "jjyaen" -0xca35: "jjyaenj" -0xca36: "jjyaenh" -0xca37: "jjyaed" -0xca38: "jjyael" -0xca39: "jjyaelg" -0xca3a: "jjyaelm" -0xca3b: "jjyaelb" -0xca3c: "jjyaels" -0xca3d: "jjyaelt" -0xca3e: "jjyaelp" -0xca3f: "jjyaelh" -0xca40: "jjyaem" -0xca41: "jjyaeb" -0xca42: "jjyaebs" -0xca43: "jjyaes" -0xca44: "jjyaess" -0xca45: "jjyaeng" -0xca46: "jjyaej" -0xca47: "jjyaec" -0xca48: "jjyaek" -0xca49: "jjyaet" -0xca4a: "jjyaep" -0xca4b: "jjyaeh" -0xca4c: "jjeo" -0xca4d: "jjeog" -0xca4e: "jjeogg" -0xca4f: "jjeogs" -0xca50: "jjeon" -0xca51: "jjeonj" -0xca52: "jjeonh" -0xca53: "jjeod" -0xca54: "jjeol" -0xca55: "jjeolg" -0xca56: "jjeolm" -0xca57: "jjeolb" -0xca58: "jjeols" -0xca59: "jjeolt" -0xca5a: "jjeolp" -0xca5b: "jjeolh" -0xca5c: "jjeom" -0xca5d: "jjeob" -0xca5e: "jjeobs" -0xca5f: "jjeos" -0xca60: "jjeoss" -0xca61: "jjeong" -0xca62: "jjeoj" -0xca63: "jjeoc" -0xca64: "jjeok" -0xca65: "jjeot" -0xca66: "jjeop" -0xca67: "jjeoh" -0xca68: "jje" -0xca69: "jjeg" -0xca6a: "jjegg" -0xca6b: "jjegs" -0xca6c: "jjen" -0xca6d: "jjenj" -0xca6e: "jjenh" -0xca6f: "jjed" -0xca70: "jjel" -0xca71: "jjelg" -0xca72: "jjelm" -0xca73: "jjelb" -0xca74: "jjels" -0xca75: "jjelt" -0xca76: "jjelp" -0xca77: "jjelh" -0xca78: "jjem" -0xca79: "jjeb" -0xca7a: "jjebs" -0xca7b: "jjes" -0xca7c: "jjess" -0xca7d: "jjeng" -0xca7e: "jjej" -0xca7f: "jjec" -0xca80: "jjek" -0xca81: "jjet" -0xca82: "jjep" -0xca83: "jjeh" -0xca84: "jjyeo" -0xca85: "jjyeog" -0xca86: "jjyeogg" -0xca87: "jjyeogs" -0xca88: "jjyeon" -0xca89: "jjyeonj" -0xca8a: "jjyeonh" -0xca8b: "jjyeod" -0xca8c: "jjyeol" -0xca8d: "jjyeolg" -0xca8e: "jjyeolm" -0xca8f: "jjyeolb" -0xca90: "jjyeols" -0xca91: "jjyeolt" -0xca92: "jjyeolp" -0xca93: "jjyeolh" -0xca94: "jjyeom" -0xca95: "jjyeob" -0xca96: "jjyeobs" -0xca97: "jjyeos" -0xca98: "jjyeoss" -0xca99: "jjyeong" -0xca9a: "jjyeoj" -0xca9b: "jjyeoc" -0xca9c: "jjyeok" -0xca9d: "jjyeot" -0xca9e: "jjyeop" -0xca9f: "jjyeoh" -0xcaa0: "jjye" -0xcaa1: "jjyeg" -0xcaa2: "jjyegg" -0xcaa3: "jjyegs" -0xcaa4: "jjyen" -0xcaa5: "jjyenj" -0xcaa6: "jjyenh" -0xcaa7: "jjyed" -0xcaa8: "jjyel" -0xcaa9: "jjyelg" -0xcaaa: "jjyelm" -0xcaab: "jjyelb" -0xcaac: "jjyels" -0xcaad: "jjyelt" -0xcaae: "jjyelp" -0xcaaf: "jjyelh" -0xcab0: "jjyem" -0xcab1: "jjyeb" -0xcab2: "jjyebs" -0xcab3: "jjyes" -0xcab4: "jjyess" -0xcab5: "jjyeng" -0xcab6: "jjyej" -0xcab7: "jjyec" -0xcab8: "jjyek" -0xcab9: "jjyet" -0xcaba: "jjyep" -0xcabb: "jjyeh" -0xcabc: "jjo" -0xcabd: "jjog" -0xcabe: "jjogg" -0xcabf: "jjogs" -0xcac0: "jjon" -0xcac1: "jjonj" -0xcac2: "jjonh" -0xcac3: "jjod" -0xcac4: "jjol" -0xcac5: "jjolg" -0xcac6: "jjolm" -0xcac7: "jjolb" -0xcac8: "jjols" -0xcac9: "jjolt" -0xcaca: "jjolp" -0xcacb: "jjolh" -0xcacc: "jjom" -0xcacd: "jjob" -0xcace: "jjobs" -0xcacf: "jjos" -0xcad0: "jjoss" -0xcad1: "jjong" -0xcad2: "jjoj" -0xcad3: "jjoc" -0xcad4: "jjok" -0xcad5: "jjot" -0xcad6: "jjop" -0xcad7: "jjoh" -0xcad8: "jjwa" -0xcad9: "jjwag" -0xcada: "jjwagg" -0xcadb: "jjwags" -0xcadc: "jjwan" -0xcadd: "jjwanj" -0xcade: "jjwanh" -0xcadf: "jjwad" -0xcae0: "jjwal" -0xcae1: "jjwalg" -0xcae2: "jjwalm" -0xcae3: "jjwalb" -0xcae4: "jjwals" -0xcae5: "jjwalt" -0xcae6: "jjwalp" -0xcae7: "jjwalh" -0xcae8: "jjwam" -0xcae9: "jjwab" -0xcaea: "jjwabs" -0xcaeb: "jjwas" -0xcaec: "jjwass" -0xcaed: "jjwang" -0xcaee: "jjwaj" -0xcaef: "jjwac" -0xcaf0: "jjwak" -0xcaf1: "jjwat" -0xcaf2: "jjwap" -0xcaf3: "jjwah" -0xcaf4: "jjwae" -0xcaf5: "jjwaeg" -0xcaf6: "jjwaegg" -0xcaf7: "jjwaegs" -0xcaf8: "jjwaen" -0xcaf9: "jjwaenj" -0xcafa: "jjwaenh" -0xcafb: "jjwaed" -0xcafc: "jjwael" -0xcafd: "jjwaelg" -0xcafe: "jjwaelm" -0xcaff: "jjwaelb" -/* x0cb */ -0xcb00: "jjwaels" -0xcb01: "jjwaelt" -0xcb02: "jjwaelp" -0xcb03: "jjwaelh" -0xcb04: "jjwaem" -0xcb05: "jjwaeb" -0xcb06: "jjwaebs" -0xcb07: "jjwaes" -0xcb08: "jjwaess" -0xcb09: "jjwaeng" -0xcb0a: "jjwaej" -0xcb0b: "jjwaec" -0xcb0c: "jjwaek" -0xcb0d: "jjwaet" -0xcb0e: "jjwaep" -0xcb0f: "jjwaeh" -0xcb10: "jjoe" -0xcb11: "jjoeg" -0xcb12: "jjoegg" -0xcb13: "jjoegs" -0xcb14: "jjoen" -0xcb15: "jjoenj" -0xcb16: "jjoenh" -0xcb17: "jjoed" -0xcb18: "jjoel" -0xcb19: "jjoelg" -0xcb1a: "jjoelm" -0xcb1b: "jjoelb" -0xcb1c: "jjoels" -0xcb1d: "jjoelt" -0xcb1e: "jjoelp" -0xcb1f: "jjoelh" -0xcb20: "jjoem" -0xcb21: "jjoeb" -0xcb22: "jjoebs" -0xcb23: "jjoes" -0xcb24: "jjoess" -0xcb25: "jjoeng" -0xcb26: "jjoej" -0xcb27: "jjoec" -0xcb28: "jjoek" -0xcb29: "jjoet" -0xcb2a: "jjoep" -0xcb2b: "jjoeh" -0xcb2c: "jjyo" -0xcb2d: "jjyog" -0xcb2e: "jjyogg" -0xcb2f: "jjyogs" -0xcb30: "jjyon" -0xcb31: "jjyonj" -0xcb32: "jjyonh" -0xcb33: "jjyod" -0xcb34: "jjyol" -0xcb35: "jjyolg" -0xcb36: "jjyolm" -0xcb37: "jjyolb" -0xcb38: "jjyols" -0xcb39: "jjyolt" -0xcb3a: "jjyolp" -0xcb3b: "jjyolh" -0xcb3c: "jjyom" -0xcb3d: "jjyob" -0xcb3e: "jjyobs" -0xcb3f: "jjyos" -0xcb40: "jjyoss" -0xcb41: "jjyong" -0xcb42: "jjyoj" -0xcb43: "jjyoc" -0xcb44: "jjyok" -0xcb45: "jjyot" -0xcb46: "jjyop" -0xcb47: "jjyoh" -0xcb48: "jju" -0xcb49: "jjug" -0xcb4a: "jjugg" -0xcb4b: "jjugs" -0xcb4c: "jjun" -0xcb4d: "jjunj" -0xcb4e: "jjunh" -0xcb4f: "jjud" -0xcb50: "jjul" -0xcb51: "jjulg" -0xcb52: "jjulm" -0xcb53: "jjulb" -0xcb54: "jjuls" -0xcb55: "jjult" -0xcb56: "jjulp" -0xcb57: "jjulh" -0xcb58: "jjum" -0xcb59: "jjub" -0xcb5a: "jjubs" -0xcb5b: "jjus" -0xcb5c: "jjuss" -0xcb5d: "jjung" -0xcb5e: "jjuj" -0xcb5f: "jjuc" -0xcb60: "jjuk" -0xcb61: "jjut" -0xcb62: "jjup" -0xcb63: "jjuh" -0xcb64: "jjweo" -0xcb65: "jjweog" -0xcb66: "jjweogg" -0xcb67: "jjweogs" -0xcb68: "jjweon" -0xcb69: "jjweonj" -0xcb6a: "jjweonh" -0xcb6b: "jjweod" -0xcb6c: "jjweol" -0xcb6d: "jjweolg" -0xcb6e: "jjweolm" -0xcb6f: "jjweolb" -0xcb70: "jjweols" -0xcb71: "jjweolt" -0xcb72: "jjweolp" -0xcb73: "jjweolh" -0xcb74: "jjweom" -0xcb75: "jjweob" -0xcb76: "jjweobs" -0xcb77: "jjweos" -0xcb78: "jjweoss" -0xcb79: "jjweong" -0xcb7a: "jjweoj" -0xcb7b: "jjweoc" -0xcb7c: "jjweok" -0xcb7d: "jjweot" -0xcb7e: "jjweop" -0xcb7f: "jjweoh" -0xcb80: "jjwe" -0xcb81: "jjweg" -0xcb82: "jjwegg" -0xcb83: "jjwegs" -0xcb84: "jjwen" -0xcb85: "jjwenj" -0xcb86: "jjwenh" -0xcb87: "jjwed" -0xcb88: "jjwel" -0xcb89: "jjwelg" -0xcb8a: "jjwelm" -0xcb8b: "jjwelb" -0xcb8c: "jjwels" -0xcb8d: "jjwelt" -0xcb8e: "jjwelp" -0xcb8f: "jjwelh" -0xcb90: "jjwem" -0xcb91: "jjweb" -0xcb92: "jjwebs" -0xcb93: "jjwes" -0xcb94: "jjwess" -0xcb95: "jjweng" -0xcb96: "jjwej" -0xcb97: "jjwec" -0xcb98: "jjwek" -0xcb99: "jjwet" -0xcb9a: "jjwep" -0xcb9b: "jjweh" -0xcb9c: "jjwi" -0xcb9d: "jjwig" -0xcb9e: "jjwigg" -0xcb9f: "jjwigs" -0xcba0: "jjwin" -0xcba1: "jjwinj" -0xcba2: "jjwinh" -0xcba3: "jjwid" -0xcba4: "jjwil" -0xcba5: "jjwilg" -0xcba6: "jjwilm" -0xcba7: "jjwilb" -0xcba8: "jjwils" -0xcba9: "jjwilt" -0xcbaa: "jjwilp" -0xcbab: "jjwilh" -0xcbac: "jjwim" -0xcbad: "jjwib" -0xcbae: "jjwibs" -0xcbaf: "jjwis" -0xcbb0: "jjwiss" -0xcbb1: "jjwing" -0xcbb2: "jjwij" -0xcbb3: "jjwic" -0xcbb4: "jjwik" -0xcbb5: "jjwit" -0xcbb6: "jjwip" -0xcbb7: "jjwih" -0xcbb8: "jjyu" -0xcbb9: "jjyug" -0xcbba: "jjyugg" -0xcbbb: "jjyugs" -0xcbbc: "jjyun" -0xcbbd: "jjyunj" -0xcbbe: "jjyunh" -0xcbbf: "jjyud" -0xcbc0: "jjyul" -0xcbc1: "jjyulg" -0xcbc2: "jjyulm" -0xcbc3: "jjyulb" -0xcbc4: "jjyuls" -0xcbc5: "jjyult" -0xcbc6: "jjyulp" -0xcbc7: "jjyulh" -0xcbc8: "jjyum" -0xcbc9: "jjyub" -0xcbca: "jjyubs" -0xcbcb: "jjyus" -0xcbcc: "jjyuss" -0xcbcd: "jjyung" -0xcbce: "jjyuj" -0xcbcf: "jjyuc" -0xcbd0: "jjyuk" -0xcbd1: "jjyut" -0xcbd2: "jjyup" -0xcbd3: "jjyuh" -0xcbd4: "jjeu" -0xcbd5: "jjeug" -0xcbd6: "jjeugg" -0xcbd7: "jjeugs" -0xcbd8: "jjeun" -0xcbd9: "jjeunj" -0xcbda: "jjeunh" -0xcbdb: "jjeud" -0xcbdc: "jjeul" -0xcbdd: "jjeulg" -0xcbde: "jjeulm" -0xcbdf: "jjeulb" -0xcbe0: "jjeuls" -0xcbe1: "jjeult" -0xcbe2: "jjeulp" -0xcbe3: "jjeulh" -0xcbe4: "jjeum" -0xcbe5: "jjeub" -0xcbe6: "jjeubs" -0xcbe7: "jjeus" -0xcbe8: "jjeuss" -0xcbe9: "jjeung" -0xcbea: "jjeuj" -0xcbeb: "jjeuc" -0xcbec: "jjeuk" -0xcbed: "jjeut" -0xcbee: "jjeup" -0xcbef: "jjeuh" -0xcbf0: "jjyi" -0xcbf1: "jjyig" -0xcbf2: "jjyigg" -0xcbf3: "jjyigs" -0xcbf4: "jjyin" -0xcbf5: "jjyinj" -0xcbf6: "jjyinh" -0xcbf7: "jjyid" -0xcbf8: "jjyil" -0xcbf9: "jjyilg" -0xcbfa: "jjyilm" -0xcbfb: "jjyilb" -0xcbfc: "jjyils" -0xcbfd: "jjyilt" -0xcbfe: "jjyilp" -0xcbff: "jjyilh" -/* x0cc */ -0xcc00: "jjyim" -0xcc01: "jjyib" -0xcc02: "jjyibs" -0xcc03: "jjyis" -0xcc04: "jjyiss" -0xcc05: "jjying" -0xcc06: "jjyij" -0xcc07: "jjyic" -0xcc08: "jjyik" -0xcc09: "jjyit" -0xcc0a: "jjyip" -0xcc0b: "jjyih" -0xcc0c: "jji" -0xcc0d: "jjig" -0xcc0e: "jjigg" -0xcc0f: "jjigs" -0xcc10: "jjin" -0xcc11: "jjinj" -0xcc12: "jjinh" -0xcc13: "jjid" -0xcc14: "jjil" -0xcc15: "jjilg" -0xcc16: "jjilm" -0xcc17: "jjilb" -0xcc18: "jjils" -0xcc19: "jjilt" -0xcc1a: "jjilp" -0xcc1b: "jjilh" -0xcc1c: "jjim" -0xcc1d: "jjib" -0xcc1e: "jjibs" -0xcc1f: "jjis" -0xcc20: "jjiss" -0xcc21: "jjing" -0xcc22: "jjij" -0xcc23: "jjic" -0xcc24: "jjik" -0xcc25: "jjit" -0xcc26: "jjip" -0xcc27: "jjih" -0xcc28: "ca" -0xcc29: "cag" -0xcc2a: "cagg" -0xcc2b: "cags" -0xcc2c: "can" -0xcc2d: "canj" -0xcc2e: "canh" -0xcc2f: "cad" -0xcc30: "cal" -0xcc31: "calg" -0xcc32: "calm" -0xcc33: "calb" -0xcc34: "cals" -0xcc35: "calt" -0xcc36: "calp" -0xcc37: "calh" -0xcc38: "cam" -0xcc39: "cab" -0xcc3a: "cabs" -0xcc3b: "cas" -0xcc3c: "cass" -0xcc3d: "cang" -0xcc3e: "caj" -0xcc3f: "cac" -0xcc40: "cak" -0xcc41: "cat" -0xcc42: "cap" -0xcc43: "cah" -0xcc44: "cae" -0xcc45: "caeg" -0xcc46: "caegg" -0xcc47: "caegs" -0xcc48: "caen" -0xcc49: "caenj" -0xcc4a: "caenh" -0xcc4b: "caed" -0xcc4c: "cael" -0xcc4d: "caelg" -0xcc4e: "caelm" -0xcc4f: "caelb" -0xcc50: "caels" -0xcc51: "caelt" -0xcc52: "caelp" -0xcc53: "caelh" -0xcc54: "caem" -0xcc55: "caeb" -0xcc56: "caebs" -0xcc57: "caes" -0xcc58: "caess" -0xcc59: "caeng" -0xcc5a: "caej" -0xcc5b: "caec" -0xcc5c: "caek" -0xcc5d: "caet" -0xcc5e: "caep" -0xcc5f: "caeh" -0xcc60: "cya" -0xcc61: "cyag" -0xcc62: "cyagg" -0xcc63: "cyags" -0xcc64: "cyan" -0xcc65: "cyanj" -0xcc66: "cyanh" -0xcc67: "cyad" -0xcc68: "cyal" -0xcc69: "cyalg" -0xcc6a: "cyalm" -0xcc6b: "cyalb" -0xcc6c: "cyals" -0xcc6d: "cyalt" -0xcc6e: "cyalp" -0xcc6f: "cyalh" -0xcc70: "cyam" -0xcc71: "cyab" -0xcc72: "cyabs" -0xcc73: "cyas" -0xcc74: "cyass" -0xcc75: "cyang" -0xcc76: "cyaj" -0xcc77: "cyac" -0xcc78: "cyak" -0xcc79: "cyat" -0xcc7a: "cyap" -0xcc7b: "cyah" -0xcc7c: "cyae" -0xcc7d: "cyaeg" -0xcc7e: "cyaegg" -0xcc7f: "cyaegs" -0xcc80: "cyaen" -0xcc81: "cyaenj" -0xcc82: "cyaenh" -0xcc83: "cyaed" -0xcc84: "cyael" -0xcc85: "cyaelg" -0xcc86: "cyaelm" -0xcc87: "cyaelb" -0xcc88: "cyaels" -0xcc89: "cyaelt" -0xcc8a: "cyaelp" -0xcc8b: "cyaelh" -0xcc8c: "cyaem" -0xcc8d: "cyaeb" -0xcc8e: "cyaebs" -0xcc8f: "cyaes" -0xcc90: "cyaess" -0xcc91: "cyaeng" -0xcc92: "cyaej" -0xcc93: "cyaec" -0xcc94: "cyaek" -0xcc95: "cyaet" -0xcc96: "cyaep" -0xcc97: "cyaeh" -0xcc98: "ceo" -0xcc99: "ceog" -0xcc9a: "ceogg" -0xcc9b: "ceogs" -0xcc9c: "ceon" -0xcc9d: "ceonj" -0xcc9e: "ceonh" -0xcc9f: "ceod" -0xcca0: "ceol" -0xcca1: "ceolg" -0xcca2: "ceolm" -0xcca3: "ceolb" -0xcca4: "ceols" -0xcca5: "ceolt" -0xcca6: "ceolp" -0xcca7: "ceolh" -0xcca8: "ceom" -0xcca9: "ceob" -0xccaa: "ceobs" -0xccab: "ceos" -0xccac: "ceoss" -0xccad: "ceong" -0xccae: "ceoj" -0xccaf: "ceoc" -0xccb0: "ceok" -0xccb1: "ceot" -0xccb2: "ceop" -0xccb3: "ceoh" -0xccb4: "ce" -0xccb5: "ceg" -0xccb6: "cegg" -0xccb7: "cegs" -0xccb8: "cen" -0xccb9: "cenj" -0xccba: "cenh" -0xccbb: "ced" -0xccbc: "cel" -0xccbd: "celg" -0xccbe: "celm" -0xccbf: "celb" -0xccc0: "cels" -0xccc1: "celt" -0xccc2: "celp" -0xccc3: "celh" -0xccc4: "cem" -0xccc5: "ceb" -0xccc6: "cebs" -0xccc7: "ces" -0xccc8: "cess" -0xccc9: "ceng" -0xccca: "cej" -0xcccb: "cec" -0xcccc: "cek" -0xcccd: "cet" -0xccce: "cep" -0xcccf: "ceh" -0xccd0: "cyeo" -0xccd1: "cyeog" -0xccd2: "cyeogg" -0xccd3: "cyeogs" -0xccd4: "cyeon" -0xccd5: "cyeonj" -0xccd6: "cyeonh" -0xccd7: "cyeod" -0xccd8: "cyeol" -0xccd9: "cyeolg" -0xccda: "cyeolm" -0xccdb: "cyeolb" -0xccdc: "cyeols" -0xccdd: "cyeolt" -0xccde: "cyeolp" -0xccdf: "cyeolh" -0xcce0: "cyeom" -0xcce1: "cyeob" -0xcce2: "cyeobs" -0xcce3: "cyeos" -0xcce4: "cyeoss" -0xcce5: "cyeong" -0xcce6: "cyeoj" -0xcce7: "cyeoc" -0xcce8: "cyeok" -0xcce9: "cyeot" -0xccea: "cyeop" -0xcceb: "cyeoh" -0xccec: "cye" -0xcced: "cyeg" -0xccee: "cyegg" -0xccef: "cyegs" -0xccf0: "cyen" -0xccf1: "cyenj" -0xccf2: "cyenh" -0xccf3: "cyed" -0xccf4: "cyel" -0xccf5: "cyelg" -0xccf6: "cyelm" -0xccf7: "cyelb" -0xccf8: "cyels" -0xccf9: "cyelt" -0xccfa: "cyelp" -0xccfb: "cyelh" -0xccfc: "cyem" -0xccfd: "cyeb" -0xccfe: "cyebs" -0xccff: "cyes" -/* x0cd */ -0xcd00: "cyess" -0xcd01: "cyeng" -0xcd02: "cyej" -0xcd03: "cyec" -0xcd04: "cyek" -0xcd05: "cyet" -0xcd06: "cyep" -0xcd07: "cyeh" -0xcd08: "co" -0xcd09: "cog" -0xcd0a: "cogg" -0xcd0b: "cogs" -0xcd0c: "con" -0xcd0d: "conj" -0xcd0e: "conh" -0xcd0f: "cod" -0xcd10: "col" -0xcd11: "colg" -0xcd12: "colm" -0xcd13: "colb" -0xcd14: "cols" -0xcd15: "colt" -0xcd16: "colp" -0xcd17: "colh" -0xcd18: "com" -0xcd19: "cob" -0xcd1a: "cobs" -0xcd1b: "cos" -0xcd1c: "coss" -0xcd1d: "cong" -0xcd1e: "coj" -0xcd1f: "coc" -0xcd20: "cok" -0xcd21: "cot" -0xcd22: "cop" -0xcd23: "coh" -0xcd24: "cwa" -0xcd25: "cwag" -0xcd26: "cwagg" -0xcd27: "cwags" -0xcd28: "cwan" -0xcd29: "cwanj" -0xcd2a: "cwanh" -0xcd2b: "cwad" -0xcd2c: "cwal" -0xcd2d: "cwalg" -0xcd2e: "cwalm" -0xcd2f: "cwalb" -0xcd30: "cwals" -0xcd31: "cwalt" -0xcd32: "cwalp" -0xcd33: "cwalh" -0xcd34: "cwam" -0xcd35: "cwab" -0xcd36: "cwabs" -0xcd37: "cwas" -0xcd38: "cwass" -0xcd39: "cwang" -0xcd3a: "cwaj" -0xcd3b: "cwac" -0xcd3c: "cwak" -0xcd3d: "cwat" -0xcd3e: "cwap" -0xcd3f: "cwah" -0xcd40: "cwae" -0xcd41: "cwaeg" -0xcd42: "cwaegg" -0xcd43: "cwaegs" -0xcd44: "cwaen" -0xcd45: "cwaenj" -0xcd46: "cwaenh" -0xcd47: "cwaed" -0xcd48: "cwael" -0xcd49: "cwaelg" -0xcd4a: "cwaelm" -0xcd4b: "cwaelb" -0xcd4c: "cwaels" -0xcd4d: "cwaelt" -0xcd4e: "cwaelp" -0xcd4f: "cwaelh" -0xcd50: "cwaem" -0xcd51: "cwaeb" -0xcd52: "cwaebs" -0xcd53: "cwaes" -0xcd54: "cwaess" -0xcd55: "cwaeng" -0xcd56: "cwaej" -0xcd57: "cwaec" -0xcd58: "cwaek" -0xcd59: "cwaet" -0xcd5a: "cwaep" -0xcd5b: "cwaeh" -0xcd5c: "coe" -0xcd5d: "coeg" -0xcd5e: "coegg" -0xcd5f: "coegs" -0xcd60: "coen" -0xcd61: "coenj" -0xcd62: "coenh" -0xcd63: "coed" -0xcd64: "coel" -0xcd65: "coelg" -0xcd66: "coelm" -0xcd67: "coelb" -0xcd68: "coels" -0xcd69: "coelt" -0xcd6a: "coelp" -0xcd6b: "coelh" -0xcd6c: "coem" -0xcd6d: "coeb" -0xcd6e: "coebs" -0xcd6f: "coes" -0xcd70: "coess" -0xcd71: "coeng" -0xcd72: "coej" -0xcd73: "coec" -0xcd74: "coek" -0xcd75: "coet" -0xcd76: "coep" -0xcd77: "coeh" -0xcd78: "cyo" -0xcd79: "cyog" -0xcd7a: "cyogg" -0xcd7b: "cyogs" -0xcd7c: "cyon" -0xcd7d: "cyonj" -0xcd7e: "cyonh" -0xcd7f: "cyod" -0xcd80: "cyol" -0xcd81: "cyolg" -0xcd82: "cyolm" -0xcd83: "cyolb" -0xcd84: "cyols" -0xcd85: "cyolt" -0xcd86: "cyolp" -0xcd87: "cyolh" -0xcd88: "cyom" -0xcd89: "cyob" -0xcd8a: "cyobs" -0xcd8b: "cyos" -0xcd8c: "cyoss" -0xcd8d: "cyong" -0xcd8e: "cyoj" -0xcd8f: "cyoc" -0xcd90: "cyok" -0xcd91: "cyot" -0xcd92: "cyop" -0xcd93: "cyoh" -0xcd94: "cu" -0xcd95: "cug" -0xcd96: "cugg" -0xcd97: "cugs" -0xcd98: "cun" -0xcd99: "cunj" -0xcd9a: "cunh" -0xcd9b: "cud" -0xcd9c: "cul" -0xcd9d: "culg" -0xcd9e: "culm" -0xcd9f: "culb" -0xcda0: "culs" -0xcda1: "cult" -0xcda2: "culp" -0xcda3: "culh" -0xcda4: "cum" -0xcda5: "cub" -0xcda6: "cubs" -0xcda7: "cus" -0xcda8: "cuss" -0xcda9: "cung" -0xcdaa: "cuj" -0xcdab: "cuc" -0xcdac: "cuk" -0xcdad: "cut" -0xcdae: "cup" -0xcdaf: "cuh" -0xcdb0: "cweo" -0xcdb1: "cweog" -0xcdb2: "cweogg" -0xcdb3: "cweogs" -0xcdb4: "cweon" -0xcdb5: "cweonj" -0xcdb6: "cweonh" -0xcdb7: "cweod" -0xcdb8: "cweol" -0xcdb9: "cweolg" -0xcdba: "cweolm" -0xcdbb: "cweolb" -0xcdbc: "cweols" -0xcdbd: "cweolt" -0xcdbe: "cweolp" -0xcdbf: "cweolh" -0xcdc0: "cweom" -0xcdc1: "cweob" -0xcdc2: "cweobs" -0xcdc3: "cweos" -0xcdc4: "cweoss" -0xcdc5: "cweong" -0xcdc6: "cweoj" -0xcdc7: "cweoc" -0xcdc8: "cweok" -0xcdc9: "cweot" -0xcdca: "cweop" -0xcdcb: "cweoh" -0xcdcc: "cwe" -0xcdcd: "cweg" -0xcdce: "cwegg" -0xcdcf: "cwegs" -0xcdd0: "cwen" -0xcdd1: "cwenj" -0xcdd2: "cwenh" -0xcdd3: "cwed" -0xcdd4: "cwel" -0xcdd5: "cwelg" -0xcdd6: "cwelm" -0xcdd7: "cwelb" -0xcdd8: "cwels" -0xcdd9: "cwelt" -0xcdda: "cwelp" -0xcddb: "cwelh" -0xcddc: "cwem" -0xcddd: "cweb" -0xcdde: "cwebs" -0xcddf: "cwes" -0xcde0: "cwess" -0xcde1: "cweng" -0xcde2: "cwej" -0xcde3: "cwec" -0xcde4: "cwek" -0xcde5: "cwet" -0xcde6: "cwep" -0xcde7: "cweh" -0xcde8: "cwi" -0xcde9: "cwig" -0xcdea: "cwigg" -0xcdeb: "cwigs" -0xcdec: "cwin" -0xcded: "cwinj" -0xcdee: "cwinh" -0xcdef: "cwid" -0xcdf0: "cwil" -0xcdf1: "cwilg" -0xcdf2: "cwilm" -0xcdf3: "cwilb" -0xcdf4: "cwils" -0xcdf5: "cwilt" -0xcdf6: "cwilp" -0xcdf7: "cwilh" -0xcdf8: "cwim" -0xcdf9: "cwib" -0xcdfa: "cwibs" -0xcdfb: "cwis" -0xcdfc: "cwiss" -0xcdfd: "cwing" -0xcdfe: "cwij" -0xcdff: "cwic" -/* x0ce */ -0xce00: "cwik" -0xce01: "cwit" -0xce02: "cwip" -0xce03: "cwih" -0xce04: "cyu" -0xce05: "cyug" -0xce06: "cyugg" -0xce07: "cyugs" -0xce08: "cyun" -0xce09: "cyunj" -0xce0a: "cyunh" -0xce0b: "cyud" -0xce0c: "cyul" -0xce0d: "cyulg" -0xce0e: "cyulm" -0xce0f: "cyulb" -0xce10: "cyuls" -0xce11: "cyult" -0xce12: "cyulp" -0xce13: "cyulh" -0xce14: "cyum" -0xce15: "cyub" -0xce16: "cyubs" -0xce17: "cyus" -0xce18: "cyuss" -0xce19: "cyung" -0xce1a: "cyuj" -0xce1b: "cyuc" -0xce1c: "cyuk" -0xce1d: "cyut" -0xce1e: "cyup" -0xce1f: "cyuh" -0xce20: "ceu" -0xce21: "ceug" -0xce22: "ceugg" -0xce23: "ceugs" -0xce24: "ceun" -0xce25: "ceunj" -0xce26: "ceunh" -0xce27: "ceud" -0xce28: "ceul" -0xce29: "ceulg" -0xce2a: "ceulm" -0xce2b: "ceulb" -0xce2c: "ceuls" -0xce2d: "ceult" -0xce2e: "ceulp" -0xce2f: "ceulh" -0xce30: "ceum" -0xce31: "ceub" -0xce32: "ceubs" -0xce33: "ceus" -0xce34: "ceuss" -0xce35: "ceung" -0xce36: "ceuj" -0xce37: "ceuc" -0xce38: "ceuk" -0xce39: "ceut" -0xce3a: "ceup" -0xce3b: "ceuh" -0xce3c: "cyi" -0xce3d: "cyig" -0xce3e: "cyigg" -0xce3f: "cyigs" -0xce40: "cyin" -0xce41: "cyinj" -0xce42: "cyinh" -0xce43: "cyid" -0xce44: "cyil" -0xce45: "cyilg" -0xce46: "cyilm" -0xce47: "cyilb" -0xce48: "cyils" -0xce49: "cyilt" -0xce4a: "cyilp" -0xce4b: "cyilh" -0xce4c: "cyim" -0xce4d: "cyib" -0xce4e: "cyibs" -0xce4f: "cyis" -0xce50: "cyiss" -0xce51: "cying" -0xce52: "cyij" -0xce53: "cyic" -0xce54: "cyik" -0xce55: "cyit" -0xce56: "cyip" -0xce57: "cyih" -0xce58: "ci" -0xce59: "cig" -0xce5a: "cigg" -0xce5b: "cigs" -0xce5c: "cin" -0xce5d: "cinj" -0xce5e: "cinh" -0xce5f: "cid" -0xce60: "cil" -0xce61: "cilg" -0xce62: "cilm" -0xce63: "cilb" -0xce64: "cils" -0xce65: "cilt" -0xce66: "cilp" -0xce67: "cilh" -0xce68: "cim" -0xce69: "cib" -0xce6a: "cibs" -0xce6b: "cis" -0xce6c: "ciss" -0xce6d: "cing" -0xce6e: "cij" -0xce6f: "cic" -0xce70: "cik" -0xce71: "cit" -0xce72: "cip" -0xce73: "cih" -0xce74: "ka" -0xce75: "kag" -0xce76: "kagg" -0xce77: "kags" -0xce78: "kan" -0xce79: "kanj" -0xce7a: "kanh" -0xce7b: "kad" -0xce7c: "kal" -0xce7d: "kalg" -0xce7e: "kalm" -0xce7f: "kalb" -0xce80: "kals" -0xce81: "kalt" -0xce82: "kalp" -0xce83: "kalh" -0xce84: "kam" -0xce85: "kab" -0xce86: "kabs" -0xce87: "kas" -0xce88: "kass" -0xce89: "kang" -0xce8a: "kaj" -0xce8b: "kac" -0xce8c: "kak" -0xce8d: "kat" -0xce8e: "kap" -0xce8f: "kah" -0xce90: "kae" -0xce91: "kaeg" -0xce92: "kaegg" -0xce93: "kaegs" -0xce94: "kaen" -0xce95: "kaenj" -0xce96: "kaenh" -0xce97: "kaed" -0xce98: "kael" -0xce99: "kaelg" -0xce9a: "kaelm" -0xce9b: "kaelb" -0xce9c: "kaels" -0xce9d: "kaelt" -0xce9e: "kaelp" -0xce9f: "kaelh" -0xcea0: "kaem" -0xcea1: "kaeb" -0xcea2: "kaebs" -0xcea3: "kaes" -0xcea4: "kaess" -0xcea5: "kaeng" -0xcea6: "kaej" -0xcea7: "kaec" -0xcea8: "kaek" -0xcea9: "kaet" -0xceaa: "kaep" -0xceab: "kaeh" -0xceac: "kya" -0xcead: "kyag" -0xceae: "kyagg" -0xceaf: "kyags" -0xceb0: "kyan" -0xceb1: "kyanj" -0xceb2: "kyanh" -0xceb3: "kyad" -0xceb4: "kyal" -0xceb5: "kyalg" -0xceb6: "kyalm" -0xceb7: "kyalb" -0xceb8: "kyals" -0xceb9: "kyalt" -0xceba: "kyalp" -0xcebb: "kyalh" -0xcebc: "kyam" -0xcebd: "kyab" -0xcebe: "kyabs" -0xcebf: "kyas" -0xcec0: "kyass" -0xcec1: "kyang" -0xcec2: "kyaj" -0xcec3: "kyac" -0xcec4: "kyak" -0xcec5: "kyat" -0xcec6: "kyap" -0xcec7: "kyah" -0xcec8: "kyae" -0xcec9: "kyaeg" -0xceca: "kyaegg" -0xcecb: "kyaegs" -0xcecc: "kyaen" -0xcecd: "kyaenj" -0xcece: "kyaenh" -0xcecf: "kyaed" -0xced0: "kyael" -0xced1: "kyaelg" -0xced2: "kyaelm" -0xced3: "kyaelb" -0xced4: "kyaels" -0xced5: "kyaelt" -0xced6: "kyaelp" -0xced7: "kyaelh" -0xced8: "kyaem" -0xced9: "kyaeb" -0xceda: "kyaebs" -0xcedb: "kyaes" -0xcedc: "kyaess" -0xcedd: "kyaeng" -0xcede: "kyaej" -0xcedf: "kyaec" -0xcee0: "kyaek" -0xcee1: "kyaet" -0xcee2: "kyaep" -0xcee3: "kyaeh" -0xcee4: "keo" -0xcee5: "keog" -0xcee6: "keogg" -0xcee7: "keogs" -0xcee8: "keon" -0xcee9: "keonj" -0xceea: "keonh" -0xceeb: "keod" -0xceec: "keol" -0xceed: "keolg" -0xceee: "keolm" -0xceef: "keolb" -0xcef0: "keols" -0xcef1: "keolt" -0xcef2: "keolp" -0xcef3: "keolh" -0xcef4: "keom" -0xcef5: "keob" -0xcef6: "keobs" -0xcef7: "keos" -0xcef8: "keoss" -0xcef9: "keong" -0xcefa: "keoj" -0xcefb: "keoc" -0xcefc: "keok" -0xcefd: "keot" -0xcefe: "keop" -0xceff: "keoh" -/* x0cf */ -0xcf00: "ke" -0xcf01: "keg" -0xcf02: "kegg" -0xcf03: "kegs" -0xcf04: "ken" -0xcf05: "kenj" -0xcf06: "kenh" -0xcf07: "ked" -0xcf08: "kel" -0xcf09: "kelg" -0xcf0a: "kelm" -0xcf0b: "kelb" -0xcf0c: "kels" -0xcf0d: "kelt" -0xcf0e: "kelp" -0xcf0f: "kelh" -0xcf10: "kem" -0xcf11: "keb" -0xcf12: "kebs" -0xcf13: "kes" -0xcf14: "kess" -0xcf15: "keng" -0xcf16: "kej" -0xcf17: "kec" -0xcf18: "kek" -0xcf19: "ket" -0xcf1a: "kep" -0xcf1b: "keh" -0xcf1c: "kyeo" -0xcf1d: "kyeog" -0xcf1e: "kyeogg" -0xcf1f: "kyeogs" -0xcf20: "kyeon" -0xcf21: "kyeonj" -0xcf22: "kyeonh" -0xcf23: "kyeod" -0xcf24: "kyeol" -0xcf25: "kyeolg" -0xcf26: "kyeolm" -0xcf27: "kyeolb" -0xcf28: "kyeols" -0xcf29: "kyeolt" -0xcf2a: "kyeolp" -0xcf2b: "kyeolh" -0xcf2c: "kyeom" -0xcf2d: "kyeob" -0xcf2e: "kyeobs" -0xcf2f: "kyeos" -0xcf30: "kyeoss" -0xcf31: "kyeong" -0xcf32: "kyeoj" -0xcf33: "kyeoc" -0xcf34: "kyeok" -0xcf35: "kyeot" -0xcf36: "kyeop" -0xcf37: "kyeoh" -0xcf38: "kye" -0xcf39: "kyeg" -0xcf3a: "kyegg" -0xcf3b: "kyegs" -0xcf3c: "kyen" -0xcf3d: "kyenj" -0xcf3e: "kyenh" -0xcf3f: "kyed" -0xcf40: "kyel" -0xcf41: "kyelg" -0xcf42: "kyelm" -0xcf43: "kyelb" -0xcf44: "kyels" -0xcf45: "kyelt" -0xcf46: "kyelp" -0xcf47: "kyelh" -0xcf48: "kyem" -0xcf49: "kyeb" -0xcf4a: "kyebs" -0xcf4b: "kyes" -0xcf4c: "kyess" -0xcf4d: "kyeng" -0xcf4e: "kyej" -0xcf4f: "kyec" -0xcf50: "kyek" -0xcf51: "kyet" -0xcf52: "kyep" -0xcf53: "kyeh" -0xcf54: "ko" -0xcf55: "kog" -0xcf56: "kogg" -0xcf57: "kogs" -0xcf58: "kon" -0xcf59: "konj" -0xcf5a: "konh" -0xcf5b: "kod" -0xcf5c: "kol" -0xcf5d: "kolg" -0xcf5e: "kolm" -0xcf5f: "kolb" -0xcf60: "kols" -0xcf61: "kolt" -0xcf62: "kolp" -0xcf63: "kolh" -0xcf64: "kom" -0xcf65: "kob" -0xcf66: "kobs" -0xcf67: "kos" -0xcf68: "koss" -0xcf69: "kong" -0xcf6a: "koj" -0xcf6b: "koc" -0xcf6c: "kok" -0xcf6d: "kot" -0xcf6e: "kop" -0xcf6f: "koh" -0xcf70: "kwa" -0xcf71: "kwag" -0xcf72: "kwagg" -0xcf73: "kwags" -0xcf74: "kwan" -0xcf75: "kwanj" -0xcf76: "kwanh" -0xcf77: "kwad" -0xcf78: "kwal" -0xcf79: "kwalg" -0xcf7a: "kwalm" -0xcf7b: "kwalb" -0xcf7c: "kwals" -0xcf7d: "kwalt" -0xcf7e: "kwalp" -0xcf7f: "kwalh" -0xcf80: "kwam" -0xcf81: "kwab" -0xcf82: "kwabs" -0xcf83: "kwas" -0xcf84: "kwass" -0xcf85: "kwang" -0xcf86: "kwaj" -0xcf87: "kwac" -0xcf88: "kwak" -0xcf89: "kwat" -0xcf8a: "kwap" -0xcf8b: "kwah" -0xcf8c: "kwae" -0xcf8d: "kwaeg" -0xcf8e: "kwaegg" -0xcf8f: "kwaegs" -0xcf90: "kwaen" -0xcf91: "kwaenj" -0xcf92: "kwaenh" -0xcf93: "kwaed" -0xcf94: "kwael" -0xcf95: "kwaelg" -0xcf96: "kwaelm" -0xcf97: "kwaelb" -0xcf98: "kwaels" -0xcf99: "kwaelt" -0xcf9a: "kwaelp" -0xcf9b: "kwaelh" -0xcf9c: "kwaem" -0xcf9d: "kwaeb" -0xcf9e: "kwaebs" -0xcf9f: "kwaes" -0xcfa0: "kwaess" -0xcfa1: "kwaeng" -0xcfa2: "kwaej" -0xcfa3: "kwaec" -0xcfa4: "kwaek" -0xcfa5: "kwaet" -0xcfa6: "kwaep" -0xcfa7: "kwaeh" -0xcfa8: "koe" -0xcfa9: "koeg" -0xcfaa: "koegg" -0xcfab: "koegs" -0xcfac: "koen" -0xcfad: "koenj" -0xcfae: "koenh" -0xcfaf: "koed" -0xcfb0: "koel" -0xcfb1: "koelg" -0xcfb2: "koelm" -0xcfb3: "koelb" -0xcfb4: "koels" -0xcfb5: "koelt" -0xcfb6: "koelp" -0xcfb7: "koelh" -0xcfb8: "koem" -0xcfb9: "koeb" -0xcfba: "koebs" -0xcfbb: "koes" -0xcfbc: "koess" -0xcfbd: "koeng" -0xcfbe: "koej" -0xcfbf: "koec" -0xcfc0: "koek" -0xcfc1: "koet" -0xcfc2: "koep" -0xcfc3: "koeh" -0xcfc4: "kyo" -0xcfc5: "kyog" -0xcfc6: "kyogg" -0xcfc7: "kyogs" -0xcfc8: "kyon" -0xcfc9: "kyonj" -0xcfca: "kyonh" -0xcfcb: "kyod" -0xcfcc: "kyol" -0xcfcd: "kyolg" -0xcfce: "kyolm" -0xcfcf: "kyolb" -0xcfd0: "kyols" -0xcfd1: "kyolt" -0xcfd2: "kyolp" -0xcfd3: "kyolh" -0xcfd4: "kyom" -0xcfd5: "kyob" -0xcfd6: "kyobs" -0xcfd7: "kyos" -0xcfd8: "kyoss" -0xcfd9: "kyong" -0xcfda: "kyoj" -0xcfdb: "kyoc" -0xcfdc: "kyok" -0xcfdd: "kyot" -0xcfde: "kyop" -0xcfdf: "kyoh" -0xcfe0: "ku" -0xcfe1: "kug" -0xcfe2: "kugg" -0xcfe3: "kugs" -0xcfe4: "kun" -0xcfe5: "kunj" -0xcfe6: "kunh" -0xcfe7: "kud" -0xcfe8: "kul" -0xcfe9: "kulg" -0xcfea: "kulm" -0xcfeb: "kulb" -0xcfec: "kuls" -0xcfed: "kult" -0xcfee: "kulp" -0xcfef: "kulh" -0xcff0: "kum" -0xcff1: "kub" -0xcff2: "kubs" -0xcff3: "kus" -0xcff4: "kuss" -0xcff5: "kung" -0xcff6: "kuj" -0xcff7: "kuc" -0xcff8: "kuk" -0xcff9: "kut" -0xcffa: "kup" -0xcffb: "kuh" -0xcffc: "kweo" -0xcffd: "kweog" -0xcffe: "kweogg" -0xcfff: "kweogs" -/* x0d0 */ -0xd000: "kweon" -0xd001: "kweonj" -0xd002: "kweonh" -0xd003: "kweod" -0xd004: "kweol" -0xd005: "kweolg" -0xd006: "kweolm" -0xd007: "kweolb" -0xd008: "kweols" -0xd009: "kweolt" -0xd00a: "kweolp" -0xd00b: "kweolh" -0xd00c: "kweom" -0xd00d: "kweob" -0xd00e: "kweobs" -0xd00f: "kweos" -0xd010: "kweoss" -0xd011: "kweong" -0xd012: "kweoj" -0xd013: "kweoc" -0xd014: "kweok" -0xd015: "kweot" -0xd016: "kweop" -0xd017: "kweoh" -0xd018: "kwe" -0xd019: "kweg" -0xd01a: "kwegg" -0xd01b: "kwegs" -0xd01c: "kwen" -0xd01d: "kwenj" -0xd01e: "kwenh" -0xd01f: "kwed" -0xd020: "kwel" -0xd021: "kwelg" -0xd022: "kwelm" -0xd023: "kwelb" -0xd024: "kwels" -0xd025: "kwelt" -0xd026: "kwelp" -0xd027: "kwelh" -0xd028: "kwem" -0xd029: "kweb" -0xd02a: "kwebs" -0xd02b: "kwes" -0xd02c: "kwess" -0xd02d: "kweng" -0xd02e: "kwej" -0xd02f: "kwec" -0xd030: "kwek" -0xd031: "kwet" -0xd032: "kwep" -0xd033: "kweh" -0xd034: "kwi" -0xd035: "kwig" -0xd036: "kwigg" -0xd037: "kwigs" -0xd038: "kwin" -0xd039: "kwinj" -0xd03a: "kwinh" -0xd03b: "kwid" -0xd03c: "kwil" -0xd03d: "kwilg" -0xd03e: "kwilm" -0xd03f: "kwilb" -0xd040: "kwils" -0xd041: "kwilt" -0xd042: "kwilp" -0xd043: "kwilh" -0xd044: "kwim" -0xd045: "kwib" -0xd046: "kwibs" -0xd047: "kwis" -0xd048: "kwiss" -0xd049: "kwing" -0xd04a: "kwij" -0xd04b: "kwic" -0xd04c: "kwik" -0xd04d: "kwit" -0xd04e: "kwip" -0xd04f: "kwih" -0xd050: "kyu" -0xd051: "kyug" -0xd052: "kyugg" -0xd053: "kyugs" -0xd054: "kyun" -0xd055: "kyunj" -0xd056: "kyunh" -0xd057: "kyud" -0xd058: "kyul" -0xd059: "kyulg" -0xd05a: "kyulm" -0xd05b: "kyulb" -0xd05c: "kyuls" -0xd05d: "kyult" -0xd05e: "kyulp" -0xd05f: "kyulh" -0xd060: "kyum" -0xd061: "kyub" -0xd062: "kyubs" -0xd063: "kyus" -0xd064: "kyuss" -0xd065: "kyung" -0xd066: "kyuj" -0xd067: "kyuc" -0xd068: "kyuk" -0xd069: "kyut" -0xd06a: "kyup" -0xd06b: "kyuh" -0xd06c: "keu" -0xd06d: "keug" -0xd06e: "keugg" -0xd06f: "keugs" -0xd070: "keun" -0xd071: "keunj" -0xd072: "keunh" -0xd073: "keud" -0xd074: "keul" -0xd075: "keulg" -0xd076: "keulm" -0xd077: "keulb" -0xd078: "keuls" -0xd079: "keult" -0xd07a: "keulp" -0xd07b: "keulh" -0xd07c: "keum" -0xd07d: "keub" -0xd07e: "keubs" -0xd07f: "keus" -0xd080: "keuss" -0xd081: "keung" -0xd082: "keuj" -0xd083: "keuc" -0xd084: "keuk" -0xd085: "keut" -0xd086: "keup" -0xd087: "keuh" -0xd088: "kyi" -0xd089: "kyig" -0xd08a: "kyigg" -0xd08b: "kyigs" -0xd08c: "kyin" -0xd08d: "kyinj" -0xd08e: "kyinh" -0xd08f: "kyid" -0xd090: "kyil" -0xd091: "kyilg" -0xd092: "kyilm" -0xd093: "kyilb" -0xd094: "kyils" -0xd095: "kyilt" -0xd096: "kyilp" -0xd097: "kyilh" -0xd098: "kyim" -0xd099: "kyib" -0xd09a: "kyibs" -0xd09b: "kyis" -0xd09c: "kyiss" -0xd09d: "kying" -0xd09e: "kyij" -0xd09f: "kyic" -0xd0a0: "kyik" -0xd0a1: "kyit" -0xd0a2: "kyip" -0xd0a3: "kyih" -0xd0a4: "ki" -0xd0a5: "kig" -0xd0a6: "kigg" -0xd0a7: "kigs" -0xd0a8: "kin" -0xd0a9: "kinj" -0xd0aa: "kinh" -0xd0ab: "kid" -0xd0ac: "kil" -0xd0ad: "kilg" -0xd0ae: "kilm" -0xd0af: "kilb" -0xd0b0: "kils" -0xd0b1: "kilt" -0xd0b2: "kilp" -0xd0b3: "kilh" -0xd0b4: "kim" -0xd0b5: "kib" -0xd0b6: "kibs" -0xd0b7: "kis" -0xd0b8: "kiss" -0xd0b9: "king" -0xd0ba: "kij" -0xd0bb: "kic" -0xd0bc: "kik" -0xd0bd: "kit" -0xd0be: "kip" -0xd0bf: "kih" -0xd0c0: "ta" -0xd0c1: "tag" -0xd0c2: "tagg" -0xd0c3: "tags" -0xd0c4: "tan" -0xd0c5: "tanj" -0xd0c6: "tanh" -0xd0c7: "tad" -0xd0c8: "tal" -0xd0c9: "talg" -0xd0ca: "talm" -0xd0cb: "talb" -0xd0cc: "tals" -0xd0cd: "talt" -0xd0ce: "talp" -0xd0cf: "talh" -0xd0d0: "tam" -0xd0d1: "tab" -0xd0d2: "tabs" -0xd0d3: "tas" -0xd0d4: "tass" -0xd0d5: "tang" -0xd0d6: "taj" -0xd0d7: "tac" -0xd0d8: "tak" -0xd0d9: "tat" -0xd0da: "tap" -0xd0db: "tah" -0xd0dc: "tae" -0xd0dd: "taeg" -0xd0de: "taegg" -0xd0df: "taegs" -0xd0e0: "taen" -0xd0e1: "taenj" -0xd0e2: "taenh" -0xd0e3: "taed" -0xd0e4: "tael" -0xd0e5: "taelg" -0xd0e6: "taelm" -0xd0e7: "taelb" -0xd0e8: "taels" -0xd0e9: "taelt" -0xd0ea: "taelp" -0xd0eb: "taelh" -0xd0ec: "taem" -0xd0ed: "taeb" -0xd0ee: "taebs" -0xd0ef: "taes" -0xd0f0: "taess" -0xd0f1: "taeng" -0xd0f2: "taej" -0xd0f3: "taec" -0xd0f4: "taek" -0xd0f5: "taet" -0xd0f6: "taep" -0xd0f7: "taeh" -0xd0f8: "tya" -0xd0f9: "tyag" -0xd0fa: "tyagg" -0xd0fb: "tyags" -0xd0fc: "tyan" -0xd0fd: "tyanj" -0xd0fe: "tyanh" -0xd0ff: "tyad" -/* x0d1 */ -0xd100: "tyal" -0xd101: "tyalg" -0xd102: "tyalm" -0xd103: "tyalb" -0xd104: "tyals" -0xd105: "tyalt" -0xd106: "tyalp" -0xd107: "tyalh" -0xd108: "tyam" -0xd109: "tyab" -0xd10a: "tyabs" -0xd10b: "tyas" -0xd10c: "tyass" -0xd10d: "tyang" -0xd10e: "tyaj" -0xd10f: "tyac" -0xd110: "tyak" -0xd111: "tyat" -0xd112: "tyap" -0xd113: "tyah" -0xd114: "tyae" -0xd115: "tyaeg" -0xd116: "tyaegg" -0xd117: "tyaegs" -0xd118: "tyaen" -0xd119: "tyaenj" -0xd11a: "tyaenh" -0xd11b: "tyaed" -0xd11c: "tyael" -0xd11d: "tyaelg" -0xd11e: "tyaelm" -0xd11f: "tyaelb" -0xd120: "tyaels" -0xd121: "tyaelt" -0xd122: "tyaelp" -0xd123: "tyaelh" -0xd124: "tyaem" -0xd125: "tyaeb" -0xd126: "tyaebs" -0xd127: "tyaes" -0xd128: "tyaess" -0xd129: "tyaeng" -0xd12a: "tyaej" -0xd12b: "tyaec" -0xd12c: "tyaek" -0xd12d: "tyaet" -0xd12e: "tyaep" -0xd12f: "tyaeh" -0xd130: "teo" -0xd131: "teog" -0xd132: "teogg" -0xd133: "teogs" -0xd134: "teon" -0xd135: "teonj" -0xd136: "teonh" -0xd137: "teod" -0xd138: "teol" -0xd139: "teolg" -0xd13a: "teolm" -0xd13b: "teolb" -0xd13c: "teols" -0xd13d: "teolt" -0xd13e: "teolp" -0xd13f: "teolh" -0xd140: "teom" -0xd141: "teob" -0xd142: "teobs" -0xd143: "teos" -0xd144: "teoss" -0xd145: "teong" -0xd146: "teoj" -0xd147: "teoc" -0xd148: "teok" -0xd149: "teot" -0xd14a: "teop" -0xd14b: "teoh" -0xd14c: "te" -0xd14d: "teg" -0xd14e: "tegg" -0xd14f: "tegs" -0xd150: "ten" -0xd151: "tenj" -0xd152: "tenh" -0xd153: "ted" -0xd154: "tel" -0xd155: "telg" -0xd156: "telm" -0xd157: "telb" -0xd158: "tels" -0xd159: "telt" -0xd15a: "telp" -0xd15b: "telh" -0xd15c: "tem" -0xd15d: "teb" -0xd15e: "tebs" -0xd15f: "tes" -0xd160: "tess" -0xd161: "teng" -0xd162: "tej" -0xd163: "tec" -0xd164: "tek" -0xd165: "tet" -0xd166: "tep" -0xd167: "teh" -0xd168: "tyeo" -0xd169: "tyeog" -0xd16a: "tyeogg" -0xd16b: "tyeogs" -0xd16c: "tyeon" -0xd16d: "tyeonj" -0xd16e: "tyeonh" -0xd16f: "tyeod" -0xd170: "tyeol" -0xd171: "tyeolg" -0xd172: "tyeolm" -0xd173: "tyeolb" -0xd174: "tyeols" -0xd175: "tyeolt" -0xd176: "tyeolp" -0xd177: "tyeolh" -0xd178: "tyeom" -0xd179: "tyeob" -0xd17a: "tyeobs" -0xd17b: "tyeos" -0xd17c: "tyeoss" -0xd17d: "tyeong" -0xd17e: "tyeoj" -0xd17f: "tyeoc" -0xd180: "tyeok" -0xd181: "tyeot" -0xd182: "tyeop" -0xd183: "tyeoh" -0xd184: "tye" -0xd185: "tyeg" -0xd186: "tyegg" -0xd187: "tyegs" -0xd188: "tyen" -0xd189: "tyenj" -0xd18a: "tyenh" -0xd18b: "tyed" -0xd18c: "tyel" -0xd18d: "tyelg" -0xd18e: "tyelm" -0xd18f: "tyelb" -0xd190: "tyels" -0xd191: "tyelt" -0xd192: "tyelp" -0xd193: "tyelh" -0xd194: "tyem" -0xd195: "tyeb" -0xd196: "tyebs" -0xd197: "tyes" -0xd198: "tyess" -0xd199: "tyeng" -0xd19a: "tyej" -0xd19b: "tyec" -0xd19c: "tyek" -0xd19d: "tyet" -0xd19e: "tyep" -0xd19f: "tyeh" -0xd1a0: "to" -0xd1a1: "tog" -0xd1a2: "togg" -0xd1a3: "togs" -0xd1a4: "ton" -0xd1a5: "tonj" -0xd1a6: "tonh" -0xd1a7: "tod" -0xd1a8: "tol" -0xd1a9: "tolg" -0xd1aa: "tolm" -0xd1ab: "tolb" -0xd1ac: "tols" -0xd1ad: "tolt" -0xd1ae: "tolp" -0xd1af: "tolh" -0xd1b0: "tom" -0xd1b1: "tob" -0xd1b2: "tobs" -0xd1b3: "tos" -0xd1b4: "toss" -0xd1b5: "tong" -0xd1b6: "toj" -0xd1b7: "toc" -0xd1b8: "tok" -0xd1b9: "tot" -0xd1ba: "top" -0xd1bb: "toh" -0xd1bc: "twa" -0xd1bd: "twag" -0xd1be: "twagg" -0xd1bf: "twags" -0xd1c0: "twan" -0xd1c1: "twanj" -0xd1c2: "twanh" -0xd1c3: "twad" -0xd1c4: "twal" -0xd1c5: "twalg" -0xd1c6: "twalm" -0xd1c7: "twalb" -0xd1c8: "twals" -0xd1c9: "twalt" -0xd1ca: "twalp" -0xd1cb: "twalh" -0xd1cc: "twam" -0xd1cd: "twab" -0xd1ce: "twabs" -0xd1cf: "twas" -0xd1d0: "twass" -0xd1d1: "twang" -0xd1d2: "twaj" -0xd1d3: "twac" -0xd1d4: "twak" -0xd1d5: "twat" -0xd1d6: "twap" -0xd1d7: "twah" -0xd1d8: "twae" -0xd1d9: "twaeg" -0xd1da: "twaegg" -0xd1db: "twaegs" -0xd1dc: "twaen" -0xd1dd: "twaenj" -0xd1de: "twaenh" -0xd1df: "twaed" -0xd1e0: "twael" -0xd1e1: "twaelg" -0xd1e2: "twaelm" -0xd1e3: "twaelb" -0xd1e4: "twaels" -0xd1e5: "twaelt" -0xd1e6: "twaelp" -0xd1e7: "twaelh" -0xd1e8: "twaem" -0xd1e9: "twaeb" -0xd1ea: "twaebs" -0xd1eb: "twaes" -0xd1ec: "twaess" -0xd1ed: "twaeng" -0xd1ee: "twaej" -0xd1ef: "twaec" -0xd1f0: "twaek" -0xd1f1: "twaet" -0xd1f2: "twaep" -0xd1f3: "twaeh" -0xd1f4: "toe" -0xd1f5: "toeg" -0xd1f6: "toegg" -0xd1f7: "toegs" -0xd1f8: "toen" -0xd1f9: "toenj" -0xd1fa: "toenh" -0xd1fb: "toed" -0xd1fc: "toel" -0xd1fd: "toelg" -0xd1fe: "toelm" -0xd1ff: "toelb" -/* x0d2 */ -0xd200: "toels" -0xd201: "toelt" -0xd202: "toelp" -0xd203: "toelh" -0xd204: "toem" -0xd205: "toeb" -0xd206: "toebs" -0xd207: "toes" -0xd208: "toess" -0xd209: "toeng" -0xd20a: "toej" -0xd20b: "toec" -0xd20c: "toek" -0xd20d: "toet" -0xd20e: "toep" -0xd20f: "toeh" -0xd210: "tyo" -0xd211: "tyog" -0xd212: "tyogg" -0xd213: "tyogs" -0xd214: "tyon" -0xd215: "tyonj" -0xd216: "tyonh" -0xd217: "tyod" -0xd218: "tyol" -0xd219: "tyolg" -0xd21a: "tyolm" -0xd21b: "tyolb" -0xd21c: "tyols" -0xd21d: "tyolt" -0xd21e: "tyolp" -0xd21f: "tyolh" -0xd220: "tyom" -0xd221: "tyob" -0xd222: "tyobs" -0xd223: "tyos" -0xd224: "tyoss" -0xd225: "tyong" -0xd226: "tyoj" -0xd227: "tyoc" -0xd228: "tyok" -0xd229: "tyot" -0xd22a: "tyop" -0xd22b: "tyoh" -0xd22c: "tu" -0xd22d: "tug" -0xd22e: "tugg" -0xd22f: "tugs" -0xd230: "tun" -0xd231: "tunj" -0xd232: "tunh" -0xd233: "tud" -0xd234: "tul" -0xd235: "tulg" -0xd236: "tulm" -0xd237: "tulb" -0xd238: "tuls" -0xd239: "tult" -0xd23a: "tulp" -0xd23b: "tulh" -0xd23c: "tum" -0xd23d: "tub" -0xd23e: "tubs" -0xd23f: "tus" -0xd240: "tuss" -0xd241: "tung" -0xd242: "tuj" -0xd243: "tuc" -0xd244: "tuk" -0xd245: "tut" -0xd246: "tup" -0xd247: "tuh" -0xd248: "tweo" -0xd249: "tweog" -0xd24a: "tweogg" -0xd24b: "tweogs" -0xd24c: "tweon" -0xd24d: "tweonj" -0xd24e: "tweonh" -0xd24f: "tweod" -0xd250: "tweol" -0xd251: "tweolg" -0xd252: "tweolm" -0xd253: "tweolb" -0xd254: "tweols" -0xd255: "tweolt" -0xd256: "tweolp" -0xd257: "tweolh" -0xd258: "tweom" -0xd259: "tweob" -0xd25a: "tweobs" -0xd25b: "tweos" -0xd25c: "tweoss" -0xd25d: "tweong" -0xd25e: "tweoj" -0xd25f: "tweoc" -0xd260: "tweok" -0xd261: "tweot" -0xd262: "tweop" -0xd263: "tweoh" -0xd264: "twe" -0xd265: "tweg" -0xd266: "twegg" -0xd267: "twegs" -0xd268: "twen" -0xd269: "twenj" -0xd26a: "twenh" -0xd26b: "twed" -0xd26c: "twel" -0xd26d: "twelg" -0xd26e: "twelm" -0xd26f: "twelb" -0xd270: "twels" -0xd271: "twelt" -0xd272: "twelp" -0xd273: "twelh" -0xd274: "twem" -0xd275: "tweb" -0xd276: "twebs" -0xd277: "twes" -0xd278: "twess" -0xd279: "tweng" -0xd27a: "twej" -0xd27b: "twec" -0xd27c: "twek" -0xd27d: "twet" -0xd27e: "twep" -0xd27f: "tweh" -0xd280: "twi" -0xd281: "twig" -0xd282: "twigg" -0xd283: "twigs" -0xd284: "twin" -0xd285: "twinj" -0xd286: "twinh" -0xd287: "twid" -0xd288: "twil" -0xd289: "twilg" -0xd28a: "twilm" -0xd28b: "twilb" -0xd28c: "twils" -0xd28d: "twilt" -0xd28e: "twilp" -0xd28f: "twilh" -0xd290: "twim" -0xd291: "twib" -0xd292: "twibs" -0xd293: "twis" -0xd294: "twiss" -0xd295: "twing" -0xd296: "twij" -0xd297: "twic" -0xd298: "twik" -0xd299: "twit" -0xd29a: "twip" -0xd29b: "twih" -0xd29c: "tyu" -0xd29d: "tyug" -0xd29e: "tyugg" -0xd29f: "tyugs" -0xd2a0: "tyun" -0xd2a1: "tyunj" -0xd2a2: "tyunh" -0xd2a3: "tyud" -0xd2a4: "tyul" -0xd2a5: "tyulg" -0xd2a6: "tyulm" -0xd2a7: "tyulb" -0xd2a8: "tyuls" -0xd2a9: "tyult" -0xd2aa: "tyulp" -0xd2ab: "tyulh" -0xd2ac: "tyum" -0xd2ad: "tyub" -0xd2ae: "tyubs" -0xd2af: "tyus" -0xd2b0: "tyuss" -0xd2b1: "tyung" -0xd2b2: "tyuj" -0xd2b3: "tyuc" -0xd2b4: "tyuk" -0xd2b5: "tyut" -0xd2b6: "tyup" -0xd2b7: "tyuh" -0xd2b8: "teu" -0xd2b9: "teug" -0xd2ba: "teugg" -0xd2bb: "teugs" -0xd2bc: "teun" -0xd2bd: "teunj" -0xd2be: "teunh" -0xd2bf: "teud" -0xd2c0: "teul" -0xd2c1: "teulg" -0xd2c2: "teulm" -0xd2c3: "teulb" -0xd2c4: "teuls" -0xd2c5: "teult" -0xd2c6: "teulp" -0xd2c7: "teulh" -0xd2c8: "teum" -0xd2c9: "teub" -0xd2ca: "teubs" -0xd2cb: "teus" -0xd2cc: "teuss" -0xd2cd: "teung" -0xd2ce: "teuj" -0xd2cf: "teuc" -0xd2d0: "teuk" -0xd2d1: "teut" -0xd2d2: "teup" -0xd2d3: "teuh" -0xd2d4: "tyi" -0xd2d5: "tyig" -0xd2d6: "tyigg" -0xd2d7: "tyigs" -0xd2d8: "tyin" -0xd2d9: "tyinj" -0xd2da: "tyinh" -0xd2db: "tyid" -0xd2dc: "tyil" -0xd2dd: "tyilg" -0xd2de: "tyilm" -0xd2df: "tyilb" -0xd2e0: "tyils" -0xd2e1: "tyilt" -0xd2e2: "tyilp" -0xd2e3: "tyilh" -0xd2e4: "tyim" -0xd2e5: "tyib" -0xd2e6: "tyibs" -0xd2e7: "tyis" -0xd2e8: "tyiss" -0xd2e9: "tying" -0xd2ea: "tyij" -0xd2eb: "tyic" -0xd2ec: "tyik" -0xd2ed: "tyit" -0xd2ee: "tyip" -0xd2ef: "tyih" -0xd2f0: "ti" -0xd2f1: "tig" -0xd2f2: "tigg" -0xd2f3: "tigs" -0xd2f4: "tin" -0xd2f5: "tinj" -0xd2f6: "tinh" -0xd2f7: "tid" -0xd2f8: "til" -0xd2f9: "tilg" -0xd2fa: "tilm" -0xd2fb: "tilb" -0xd2fc: "tils" -0xd2fd: "tilt" -0xd2fe: "tilp" -0xd2ff: "tilh" -/* x0d3 */ -0xd300: "tim" -0xd301: "tib" -0xd302: "tibs" -0xd303: "tis" -0xd304: "tiss" -0xd305: "ting" -0xd306: "tij" -0xd307: "tic" -0xd308: "tik" -0xd309: "tit" -0xd30a: "tip" -0xd30b: "tih" -0xd30c: "pa" -0xd30d: "pag" -0xd30e: "pagg" -0xd30f: "pags" -0xd310: "pan" -0xd311: "panj" -0xd312: "panh" -0xd313: "pad" -0xd314: "pal" -0xd315: "palg" -0xd316: "palm" -0xd317: "palb" -0xd318: "pals" -0xd319: "palt" -0xd31a: "palp" -0xd31b: "palh" -0xd31c: "pam" -0xd31d: "pab" -0xd31e: "pabs" -0xd31f: "pas" -0xd320: "pass" -0xd321: "pang" -0xd322: "paj" -0xd323: "pac" -0xd324: "pak" -0xd325: "pat" -0xd326: "pap" -0xd327: "pah" -0xd328: "pae" -0xd329: "paeg" -0xd32a: "paegg" -0xd32b: "paegs" -0xd32c: "paen" -0xd32d: "paenj" -0xd32e: "paenh" -0xd32f: "paed" -0xd330: "pael" -0xd331: "paelg" -0xd332: "paelm" -0xd333: "paelb" -0xd334: "paels" -0xd335: "paelt" -0xd336: "paelp" -0xd337: "paelh" -0xd338: "paem" -0xd339: "paeb" -0xd33a: "paebs" -0xd33b: "paes" -0xd33c: "paess" -0xd33d: "paeng" -0xd33e: "paej" -0xd33f: "paec" -0xd340: "paek" -0xd341: "paet" -0xd342: "paep" -0xd343: "paeh" -0xd344: "pya" -0xd345: "pyag" -0xd346: "pyagg" -0xd347: "pyags" -0xd348: "pyan" -0xd349: "pyanj" -0xd34a: "pyanh" -0xd34b: "pyad" -0xd34c: "pyal" -0xd34d: "pyalg" -0xd34e: "pyalm" -0xd34f: "pyalb" -0xd350: "pyals" -0xd351: "pyalt" -0xd352: "pyalp" -0xd353: "pyalh" -0xd354: "pyam" -0xd355: "pyab" -0xd356: "pyabs" -0xd357: "pyas" -0xd358: "pyass" -0xd359: "pyang" -0xd35a: "pyaj" -0xd35b: "pyac" -0xd35c: "pyak" -0xd35d: "pyat" -0xd35e: "pyap" -0xd35f: "pyah" -0xd360: "pyae" -0xd361: "pyaeg" -0xd362: "pyaegg" -0xd363: "pyaegs" -0xd364: "pyaen" -0xd365: "pyaenj" -0xd366: "pyaenh" -0xd367: "pyaed" -0xd368: "pyael" -0xd369: "pyaelg" -0xd36a: "pyaelm" -0xd36b: "pyaelb" -0xd36c: "pyaels" -0xd36d: "pyaelt" -0xd36e: "pyaelp" -0xd36f: "pyaelh" -0xd370: "pyaem" -0xd371: "pyaeb" -0xd372: "pyaebs" -0xd373: "pyaes" -0xd374: "pyaess" -0xd375: "pyaeng" -0xd376: "pyaej" -0xd377: "pyaec" -0xd378: "pyaek" -0xd379: "pyaet" -0xd37a: "pyaep" -0xd37b: "pyaeh" -0xd37c: "peo" -0xd37d: "peog" -0xd37e: "peogg" -0xd37f: "peogs" -0xd380: "peon" -0xd381: "peonj" -0xd382: "peonh" -0xd383: "peod" -0xd384: "peol" -0xd385: "peolg" -0xd386: "peolm" -0xd387: "peolb" -0xd388: "peols" -0xd389: "peolt" -0xd38a: "peolp" -0xd38b: "peolh" -0xd38c: "peom" -0xd38d: "peob" -0xd38e: "peobs" -0xd38f: "peos" -0xd390: "peoss" -0xd391: "peong" -0xd392: "peoj" -0xd393: "peoc" -0xd394: "peok" -0xd395: "peot" -0xd396: "peop" -0xd397: "peoh" -0xd398: "pe" -0xd399: "peg" -0xd39a: "pegg" -0xd39b: "pegs" -0xd39c: "pen" -0xd39d: "penj" -0xd39e: "penh" -0xd39f: "ped" -0xd3a0: "pel" -0xd3a1: "pelg" -0xd3a2: "pelm" -0xd3a3: "pelb" -0xd3a4: "pels" -0xd3a5: "pelt" -0xd3a6: "pelp" -0xd3a7: "pelh" -0xd3a8: "pem" -0xd3a9: "peb" -0xd3aa: "pebs" -0xd3ab: "pes" -0xd3ac: "pess" -0xd3ad: "peng" -0xd3ae: "pej" -0xd3af: "pec" -0xd3b0: "pek" -0xd3b1: "pet" -0xd3b2: "pep" -0xd3b3: "peh" -0xd3b4: "pyeo" -0xd3b5: "pyeog" -0xd3b6: "pyeogg" -0xd3b7: "pyeogs" -0xd3b8: "pyeon" -0xd3b9: "pyeonj" -0xd3ba: "pyeonh" -0xd3bb: "pyeod" -0xd3bc: "pyeol" -0xd3bd: "pyeolg" -0xd3be: "pyeolm" -0xd3bf: "pyeolb" -0xd3c0: "pyeols" -0xd3c1: "pyeolt" -0xd3c2: "pyeolp" -0xd3c3: "pyeolh" -0xd3c4: "pyeom" -0xd3c5: "pyeob" -0xd3c6: "pyeobs" -0xd3c7: "pyeos" -0xd3c8: "pyeoss" -0xd3c9: "pyeong" -0xd3ca: "pyeoj" -0xd3cb: "pyeoc" -0xd3cc: "pyeok" -0xd3cd: "pyeot" -0xd3ce: "pyeop" -0xd3cf: "pyeoh" -0xd3d0: "pye" -0xd3d1: "pyeg" -0xd3d2: "pyegg" -0xd3d3: "pyegs" -0xd3d4: "pyen" -0xd3d5: "pyenj" -0xd3d6: "pyenh" -0xd3d7: "pyed" -0xd3d8: "pyel" -0xd3d9: "pyelg" -0xd3da: "pyelm" -0xd3db: "pyelb" -0xd3dc: "pyels" -0xd3dd: "pyelt" -0xd3de: "pyelp" -0xd3df: "pyelh" -0xd3e0: "pyem" -0xd3e1: "pyeb" -0xd3e2: "pyebs" -0xd3e3: "pyes" -0xd3e4: "pyess" -0xd3e5: "pyeng" -0xd3e6: "pyej" -0xd3e7: "pyec" -0xd3e8: "pyek" -0xd3e9: "pyet" -0xd3ea: "pyep" -0xd3eb: "pyeh" -0xd3ec: "po" -0xd3ed: "pog" -0xd3ee: "pogg" -0xd3ef: "pogs" -0xd3f0: "pon" -0xd3f1: "ponj" -0xd3f2: "ponh" -0xd3f3: "pod" -0xd3f4: "pol" -0xd3f5: "polg" -0xd3f6: "polm" -0xd3f7: "polb" -0xd3f8: "pols" -0xd3f9: "polt" -0xd3fa: "polp" -0xd3fb: "polh" -0xd3fc: "pom" -0xd3fd: "pob" -0xd3fe: "pobs" -0xd3ff: "pos" -/* x0d4 */ -0xd400: "poss" -0xd401: "pong" -0xd402: "poj" -0xd403: "poc" -0xd404: "pok" -0xd405: "pot" -0xd406: "pop" -0xd407: "poh" -0xd408: "pwa" -0xd409: "pwag" -0xd40a: "pwagg" -0xd40b: "pwags" -0xd40c: "pwan" -0xd40d: "pwanj" -0xd40e: "pwanh" -0xd40f: "pwad" -0xd410: "pwal" -0xd411: "pwalg" -0xd412: "pwalm" -0xd413: "pwalb" -0xd414: "pwals" -0xd415: "pwalt" -0xd416: "pwalp" -0xd417: "pwalh" -0xd418: "pwam" -0xd419: "pwab" -0xd41a: "pwabs" -0xd41b: "pwas" -0xd41c: "pwass" -0xd41d: "pwang" -0xd41e: "pwaj" -0xd41f: "pwac" -0xd420: "pwak" -0xd421: "pwat" -0xd422: "pwap" -0xd423: "pwah" -0xd424: "pwae" -0xd425: "pwaeg" -0xd426: "pwaegg" -0xd427: "pwaegs" -0xd428: "pwaen" -0xd429: "pwaenj" -0xd42a: "pwaenh" -0xd42b: "pwaed" -0xd42c: "pwael" -0xd42d: "pwaelg" -0xd42e: "pwaelm" -0xd42f: "pwaelb" -0xd430: "pwaels" -0xd431: "pwaelt" -0xd432: "pwaelp" -0xd433: "pwaelh" -0xd434: "pwaem" -0xd435: "pwaeb" -0xd436: "pwaebs" -0xd437: "pwaes" -0xd438: "pwaess" -0xd439: "pwaeng" -0xd43a: "pwaej" -0xd43b: "pwaec" -0xd43c: "pwaek" -0xd43d: "pwaet" -0xd43e: "pwaep" -0xd43f: "pwaeh" -0xd440: "poe" -0xd441: "poeg" -0xd442: "poegg" -0xd443: "poegs" -0xd444: "poen" -0xd445: "poenj" -0xd446: "poenh" -0xd447: "poed" -0xd448: "poel" -0xd449: "poelg" -0xd44a: "poelm" -0xd44b: "poelb" -0xd44c: "poels" -0xd44d: "poelt" -0xd44e: "poelp" -0xd44f: "poelh" -0xd450: "poem" -0xd451: "poeb" -0xd452: "poebs" -0xd453: "poes" -0xd454: "poess" -0xd455: "poeng" -0xd456: "poej" -0xd457: "poec" -0xd458: "poek" -0xd459: "poet" -0xd45a: "poep" -0xd45b: "poeh" -0xd45c: "pyo" -0xd45d: "pyog" -0xd45e: "pyogg" -0xd45f: "pyogs" -0xd460: "pyon" -0xd461: "pyonj" -0xd462: "pyonh" -0xd463: "pyod" -0xd464: "pyol" -0xd465: "pyolg" -0xd466: "pyolm" -0xd467: "pyolb" -0xd468: "pyols" -0xd469: "pyolt" -0xd46a: "pyolp" -0xd46b: "pyolh" -0xd46c: "pyom" -0xd46d: "pyob" -0xd46e: "pyobs" -0xd46f: "pyos" -0xd470: "pyoss" -0xd471: "pyong" -0xd472: "pyoj" -0xd473: "pyoc" -0xd474: "pyok" -0xd475: "pyot" -0xd476: "pyop" -0xd477: "pyoh" -0xd478: "pu" -0xd479: "pug" -0xd47a: "pugg" -0xd47b: "pugs" -0xd47c: "pun" -0xd47d: "punj" -0xd47e: "punh" -0xd47f: "pud" -0xd480: "pul" -0xd481: "pulg" -0xd482: "pulm" -0xd483: "pulb" -0xd484: "puls" -0xd485: "pult" -0xd486: "pulp" -0xd487: "pulh" -0xd488: "pum" -0xd489: "pub" -0xd48a: "pubs" -0xd48b: "pus" -0xd48c: "puss" -0xd48d: "pung" -0xd48e: "puj" -0xd48f: "puc" -0xd490: "puk" -0xd491: "put" -0xd492: "pup" -0xd493: "puh" -0xd494: "pweo" -0xd495: "pweog" -0xd496: "pweogg" -0xd497: "pweogs" -0xd498: "pweon" -0xd499: "pweonj" -0xd49a: "pweonh" -0xd49b: "pweod" -0xd49c: "pweol" -0xd49d: "pweolg" -0xd49e: "pweolm" -0xd49f: "pweolb" -0xd4a0: "pweols" -0xd4a1: "pweolt" -0xd4a2: "pweolp" -0xd4a3: "pweolh" -0xd4a4: "pweom" -0xd4a5: "pweob" -0xd4a6: "pweobs" -0xd4a7: "pweos" -0xd4a8: "pweoss" -0xd4a9: "pweong" -0xd4aa: "pweoj" -0xd4ab: "pweoc" -0xd4ac: "pweok" -0xd4ad: "pweot" -0xd4ae: "pweop" -0xd4af: "pweoh" -0xd4b0: "pwe" -0xd4b1: "pweg" -0xd4b2: "pwegg" -0xd4b3: "pwegs" -0xd4b4: "pwen" -0xd4b5: "pwenj" -0xd4b6: "pwenh" -0xd4b7: "pwed" -0xd4b8: "pwel" -0xd4b9: "pwelg" -0xd4ba: "pwelm" -0xd4bb: "pwelb" -0xd4bc: "pwels" -0xd4bd: "pwelt" -0xd4be: "pwelp" -0xd4bf: "pwelh" -0xd4c0: "pwem" -0xd4c1: "pweb" -0xd4c2: "pwebs" -0xd4c3: "pwes" -0xd4c4: "pwess" -0xd4c5: "pweng" -0xd4c6: "pwej" -0xd4c7: "pwec" -0xd4c8: "pwek" -0xd4c9: "pwet" -0xd4ca: "pwep" -0xd4cb: "pweh" -0xd4cc: "pwi" -0xd4cd: "pwig" -0xd4ce: "pwigg" -0xd4cf: "pwigs" -0xd4d0: "pwin" -0xd4d1: "pwinj" -0xd4d2: "pwinh" -0xd4d3: "pwid" -0xd4d4: "pwil" -0xd4d5: "pwilg" -0xd4d6: "pwilm" -0xd4d7: "pwilb" -0xd4d8: "pwils" -0xd4d9: "pwilt" -0xd4da: "pwilp" -0xd4db: "pwilh" -0xd4dc: "pwim" -0xd4dd: "pwib" -0xd4de: "pwibs" -0xd4df: "pwis" -0xd4e0: "pwiss" -0xd4e1: "pwing" -0xd4e2: "pwij" -0xd4e3: "pwic" -0xd4e4: "pwik" -0xd4e5: "pwit" -0xd4e6: "pwip" -0xd4e7: "pwih" -0xd4e8: "pyu" -0xd4e9: "pyug" -0xd4ea: "pyugg" -0xd4eb: "pyugs" -0xd4ec: "pyun" -0xd4ed: "pyunj" -0xd4ee: "pyunh" -0xd4ef: "pyud" -0xd4f0: "pyul" -0xd4f1: "pyulg" -0xd4f2: "pyulm" -0xd4f3: "pyulb" -0xd4f4: "pyuls" -0xd4f5: "pyult" -0xd4f6: "pyulp" -0xd4f7: "pyulh" -0xd4f8: "pyum" -0xd4f9: "pyub" -0xd4fa: "pyubs" -0xd4fb: "pyus" -0xd4fc: "pyuss" -0xd4fd: "pyung" -0xd4fe: "pyuj" -0xd4ff: "pyuc" -/* x0d5 */ -0xd500: "pyuk" -0xd501: "pyut" -0xd502: "pyup" -0xd503: "pyuh" -0xd504: "peu" -0xd505: "peug" -0xd506: "peugg" -0xd507: "peugs" -0xd508: "peun" -0xd509: "peunj" -0xd50a: "peunh" -0xd50b: "peud" -0xd50c: "peul" -0xd50d: "peulg" -0xd50e: "peulm" -0xd50f: "peulb" -0xd510: "peuls" -0xd511: "peult" -0xd512: "peulp" -0xd513: "peulh" -0xd514: "peum" -0xd515: "peub" -0xd516: "peubs" -0xd517: "peus" -0xd518: "peuss" -0xd519: "peung" -0xd51a: "peuj" -0xd51b: "peuc" -0xd51c: "peuk" -0xd51d: "peut" -0xd51e: "peup" -0xd51f: "peuh" -0xd520: "pyi" -0xd521: "pyig" -0xd522: "pyigg" -0xd523: "pyigs" -0xd524: "pyin" -0xd525: "pyinj" -0xd526: "pyinh" -0xd527: "pyid" -0xd528: "pyil" -0xd529: "pyilg" -0xd52a: "pyilm" -0xd52b: "pyilb" -0xd52c: "pyils" -0xd52d: "pyilt" -0xd52e: "pyilp" -0xd52f: "pyilh" -0xd530: "pyim" -0xd531: "pyib" -0xd532: "pyibs" -0xd533: "pyis" -0xd534: "pyiss" -0xd535: "pying" -0xd536: "pyij" -0xd537: "pyic" -0xd538: "pyik" -0xd539: "pyit" -0xd53a: "pyip" -0xd53b: "pyih" -0xd53c: "pi" -0xd53d: "pig" -0xd53e: "pigg" -0xd53f: "pigs" -0xd540: "pin" -0xd541: "pinj" -0xd542: "pinh" -0xd543: "pid" -0xd544: "pil" -0xd545: "pilg" -0xd546: "pilm" -0xd547: "pilb" -0xd548: "pils" -0xd549: "pilt" -0xd54a: "pilp" -0xd54b: "pilh" -0xd54c: "pim" -0xd54d: "pib" -0xd54e: "pibs" -0xd54f: "pis" -0xd550: "piss" -0xd551: "ping" -0xd552: "pij" -0xd553: "pic" -0xd554: "pik" -0xd555: "pit" -0xd556: "pip" -0xd557: "pih" -0xd558: "ha" -0xd559: "hag" -0xd55a: "hagg" -0xd55b: "hags" -0xd55c: "han" -0xd55d: "hanj" -0xd55e: "hanh" -0xd55f: "had" -0xd560: "hal" -0xd561: "halg" -0xd562: "halm" -0xd563: "halb" -0xd564: "hals" -0xd565: "halt" -0xd566: "halp" -0xd567: "halh" -0xd568: "ham" -0xd569: "hab" -0xd56a: "habs" -0xd56b: "has" -0xd56c: "hass" -0xd56d: "hang" -0xd56e: "haj" -0xd56f: "hac" -0xd570: "hak" -0xd571: "hat" -0xd572: "hap" -0xd573: "hah" -0xd574: "hae" -0xd575: "haeg" -0xd576: "haegg" -0xd577: "haegs" -0xd578: "haen" -0xd579: "haenj" -0xd57a: "haenh" -0xd57b: "haed" -0xd57c: "hael" -0xd57d: "haelg" -0xd57e: "haelm" -0xd57f: "haelb" -0xd580: "haels" -0xd581: "haelt" -0xd582: "haelp" -0xd583: "haelh" -0xd584: "haem" -0xd585: "haeb" -0xd586: "haebs" -0xd587: "haes" -0xd588: "haess" -0xd589: "haeng" -0xd58a: "haej" -0xd58b: "haec" -0xd58c: "haek" -0xd58d: "haet" -0xd58e: "haep" -0xd58f: "haeh" -0xd590: "hya" -0xd591: "hyag" -0xd592: "hyagg" -0xd593: "hyags" -0xd594: "hyan" -0xd595: "hyanj" -0xd596: "hyanh" -0xd597: "hyad" -0xd598: "hyal" -0xd599: "hyalg" -0xd59a: "hyalm" -0xd59b: "hyalb" -0xd59c: "hyals" -0xd59d: "hyalt" -0xd59e: "hyalp" -0xd59f: "hyalh" -0xd5a0: "hyam" -0xd5a1: "hyab" -0xd5a2: "hyabs" -0xd5a3: "hyas" -0xd5a4: "hyass" -0xd5a5: "hyang" -0xd5a6: "hyaj" -0xd5a7: "hyac" -0xd5a8: "hyak" -0xd5a9: "hyat" -0xd5aa: "hyap" -0xd5ab: "hyah" -0xd5ac: "hyae" -0xd5ad: "hyaeg" -0xd5ae: "hyaegg" -0xd5af: "hyaegs" -0xd5b0: "hyaen" -0xd5b1: "hyaenj" -0xd5b2: "hyaenh" -0xd5b3: "hyaed" -0xd5b4: "hyael" -0xd5b5: "hyaelg" -0xd5b6: "hyaelm" -0xd5b7: "hyaelb" -0xd5b8: "hyaels" -0xd5b9: "hyaelt" -0xd5ba: "hyaelp" -0xd5bb: "hyaelh" -0xd5bc: "hyaem" -0xd5bd: "hyaeb" -0xd5be: "hyaebs" -0xd5bf: "hyaes" -0xd5c0: "hyaess" -0xd5c1: "hyaeng" -0xd5c2: "hyaej" -0xd5c3: "hyaec" -0xd5c4: "hyaek" -0xd5c5: "hyaet" -0xd5c6: "hyaep" -0xd5c7: "hyaeh" -0xd5c8: "heo" -0xd5c9: "heog" -0xd5ca: "heogg" -0xd5cb: "heogs" -0xd5cc: "heon" -0xd5cd: "heonj" -0xd5ce: "heonh" -0xd5cf: "heod" -0xd5d0: "heol" -0xd5d1: "heolg" -0xd5d2: "heolm" -0xd5d3: "heolb" -0xd5d4: "heols" -0xd5d5: "heolt" -0xd5d6: "heolp" -0xd5d7: "heolh" -0xd5d8: "heom" -0xd5d9: "heob" -0xd5da: "heobs" -0xd5db: "heos" -0xd5dc: "heoss" -0xd5dd: "heong" -0xd5de: "heoj" -0xd5df: "heoc" -0xd5e0: "heok" -0xd5e1: "heot" -0xd5e2: "heop" -0xd5e3: "heoh" -0xd5e4: "he" -0xd5e5: "heg" -0xd5e6: "hegg" -0xd5e7: "hegs" -0xd5e8: "hen" -0xd5e9: "henj" -0xd5ea: "henh" -0xd5eb: "hed" -0xd5ec: "hel" -0xd5ed: "helg" -0xd5ee: "helm" -0xd5ef: "helb" -0xd5f0: "hels" -0xd5f1: "helt" -0xd5f2: "help" -0xd5f3: "helh" -0xd5f4: "hem" -0xd5f5: "heb" -0xd5f6: "hebs" -0xd5f7: "hes" -0xd5f8: "hess" -0xd5f9: "heng" -0xd5fa: "hej" -0xd5fb: "hec" -0xd5fc: "hek" -0xd5fd: "het" -0xd5fe: "hep" -0xd5ff: "heh" -/* x0d6 */ -0xd600: "hyeo" -0xd601: "hyeog" -0xd602: "hyeogg" -0xd603: "hyeogs" -0xd604: "hyeon" -0xd605: "hyeonj" -0xd606: "hyeonh" -0xd607: "hyeod" -0xd608: "hyeol" -0xd609: "hyeolg" -0xd60a: "hyeolm" -0xd60b: "hyeolb" -0xd60c: "hyeols" -0xd60d: "hyeolt" -0xd60e: "hyeolp" -0xd60f: "hyeolh" -0xd610: "hyeom" -0xd611: "hyeob" -0xd612: "hyeobs" -0xd613: "hyeos" -0xd614: "hyeoss" -0xd615: "hyeong" -0xd616: "hyeoj" -0xd617: "hyeoc" -0xd618: "hyeok" -0xd619: "hyeot" -0xd61a: "hyeop" -0xd61b: "hyeoh" -0xd61c: "hye" -0xd61d: "hyeg" -0xd61e: "hyegg" -0xd61f: "hyegs" -0xd620: "hyen" -0xd621: "hyenj" -0xd622: "hyenh" -0xd623: "hyed" -0xd624: "hyel" -0xd625: "hyelg" -0xd626: "hyelm" -0xd627: "hyelb" -0xd628: "hyels" -0xd629: "hyelt" -0xd62a: "hyelp" -0xd62b: "hyelh" -0xd62c: "hyem" -0xd62d: "hyeb" -0xd62e: "hyebs" -0xd62f: "hyes" -0xd630: "hyess" -0xd631: "hyeng" -0xd632: "hyej" -0xd633: "hyec" -0xd634: "hyek" -0xd635: "hyet" -0xd636: "hyep" -0xd637: "hyeh" -0xd638: "ho" -0xd639: "hog" -0xd63a: "hogg" -0xd63b: "hogs" -0xd63c: "hon" -0xd63d: "honj" -0xd63e: "honh" -0xd63f: "hod" -0xd640: "hol" -0xd641: "holg" -0xd642: "holm" -0xd643: "holb" -0xd644: "hols" -0xd645: "holt" -0xd646: "holp" -0xd647: "holh" -0xd648: "hom" -0xd649: "hob" -0xd64a: "hobs" -0xd64b: "hos" -0xd64c: "hoss" -0xd64d: "hong" -0xd64e: "hoj" -0xd64f: "hoc" -0xd650: "hok" -0xd651: "hot" -0xd652: "hop" -0xd653: "hoh" -0xd654: "hwa" -0xd655: "hwag" -0xd656: "hwagg" -0xd657: "hwags" -0xd658: "hwan" -0xd659: "hwanj" -0xd65a: "hwanh" -0xd65b: "hwad" -0xd65c: "hwal" -0xd65d: "hwalg" -0xd65e: "hwalm" -0xd65f: "hwalb" -0xd660: "hwals" -0xd661: "hwalt" -0xd662: "hwalp" -0xd663: "hwalh" -0xd664: "hwam" -0xd665: "hwab" -0xd666: "hwabs" -0xd667: "hwas" -0xd668: "hwass" -0xd669: "hwang" -0xd66a: "hwaj" -0xd66b: "hwac" -0xd66c: "hwak" -0xd66d: "hwat" -0xd66e: "hwap" -0xd66f: "hwah" -0xd670: "hwae" -0xd671: "hwaeg" -0xd672: "hwaegg" -0xd673: "hwaegs" -0xd674: "hwaen" -0xd675: "hwaenj" -0xd676: "hwaenh" -0xd677: "hwaed" -0xd678: "hwael" -0xd679: "hwaelg" -0xd67a: "hwaelm" -0xd67b: "hwaelb" -0xd67c: "hwaels" -0xd67d: "hwaelt" -0xd67e: "hwaelp" -0xd67f: "hwaelh" -0xd680: "hwaem" -0xd681: "hwaeb" -0xd682: "hwaebs" -0xd683: "hwaes" -0xd684: "hwaess" -0xd685: "hwaeng" -0xd686: "hwaej" -0xd687: "hwaec" -0xd688: "hwaek" -0xd689: "hwaet" -0xd68a: "hwaep" -0xd68b: "hwaeh" -0xd68c: "hoe" -0xd68d: "hoeg" -0xd68e: "hoegg" -0xd68f: "hoegs" -0xd690: "hoen" -0xd691: "hoenj" -0xd692: "hoenh" -0xd693: "hoed" -0xd694: "hoel" -0xd695: "hoelg" -0xd696: "hoelm" -0xd697: "hoelb" -0xd698: "hoels" -0xd699: "hoelt" -0xd69a: "hoelp" -0xd69b: "hoelh" -0xd69c: "hoem" -0xd69d: "hoeb" -0xd69e: "hoebs" -0xd69f: "hoes" -0xd6a0: "hoess" -0xd6a1: "hoeng" -0xd6a2: "hoej" -0xd6a3: "hoec" -0xd6a4: "hoek" -0xd6a5: "hoet" -0xd6a6: "hoep" -0xd6a7: "hoeh" -0xd6a8: "hyo" -0xd6a9: "hyog" -0xd6aa: "hyogg" -0xd6ab: "hyogs" -0xd6ac: "hyon" -0xd6ad: "hyonj" -0xd6ae: "hyonh" -0xd6af: "hyod" -0xd6b0: "hyol" -0xd6b1: "hyolg" -0xd6b2: "hyolm" -0xd6b3: "hyolb" -0xd6b4: "hyols" -0xd6b5: "hyolt" -0xd6b6: "hyolp" -0xd6b7: "hyolh" -0xd6b8: "hyom" -0xd6b9: "hyob" -0xd6ba: "hyobs" -0xd6bb: "hyos" -0xd6bc: "hyoss" -0xd6bd: "hyong" -0xd6be: "hyoj" -0xd6bf: "hyoc" -0xd6c0: "hyok" -0xd6c1: "hyot" -0xd6c2: "hyop" -0xd6c3: "hyoh" -0xd6c4: "hu" -0xd6c5: "hug" -0xd6c6: "hugg" -0xd6c7: "hugs" -0xd6c8: "hun" -0xd6c9: "hunj" -0xd6ca: "hunh" -0xd6cb: "hud" -0xd6cc: "hul" -0xd6cd: "hulg" -0xd6ce: "hulm" -0xd6cf: "hulb" -0xd6d0: "huls" -0xd6d1: "hult" -0xd6d2: "hulp" -0xd6d3: "hulh" -0xd6d4: "hum" -0xd6d5: "hub" -0xd6d6: "hubs" -0xd6d7: "hus" -0xd6d8: "huss" -0xd6d9: "hung" -0xd6da: "huj" -0xd6db: "huc" -0xd6dc: "huk" -0xd6dd: "hut" -0xd6de: "hup" -0xd6df: "huh" -0xd6e0: "hweo" -0xd6e1: "hweog" -0xd6e2: "hweogg" -0xd6e3: "hweogs" -0xd6e4: "hweon" -0xd6e5: "hweonj" -0xd6e6: "hweonh" -0xd6e7: "hweod" -0xd6e8: "hweol" -0xd6e9: "hweolg" -0xd6ea: "hweolm" -0xd6eb: "hweolb" -0xd6ec: "hweols" -0xd6ed: "hweolt" -0xd6ee: "hweolp" -0xd6ef: "hweolh" -0xd6f0: "hweom" -0xd6f1: "hweob" -0xd6f2: "hweobs" -0xd6f3: "hweos" -0xd6f4: "hweoss" -0xd6f5: "hweong" -0xd6f6: "hweoj" -0xd6f7: "hweoc" -0xd6f8: "hweok" -0xd6f9: "hweot" -0xd6fa: "hweop" -0xd6fb: "hweoh" -0xd6fc: "hwe" -0xd6fd: "hweg" -0xd6fe: "hwegg" -0xd6ff: "hwegs" -/* x0d7 */ -0xd700: "hwen" -0xd701: "hwenj" -0xd702: "hwenh" -0xd703: "hwed" -0xd704: "hwel" -0xd705: "hwelg" -0xd706: "hwelm" -0xd707: "hwelb" -0xd708: "hwels" -0xd709: "hwelt" -0xd70a: "hwelp" -0xd70b: "hwelh" -0xd70c: "hwem" -0xd70d: "hweb" -0xd70e: "hwebs" -0xd70f: "hwes" -0xd710: "hwess" -0xd711: "hweng" -0xd712: "hwej" -0xd713: "hwec" -0xd714: "hwek" -0xd715: "hwet" -0xd716: "hwep" -0xd717: "hweh" -0xd718: "hwi" -0xd719: "hwig" -0xd71a: "hwigg" -0xd71b: "hwigs" -0xd71c: "hwin" -0xd71d: "hwinj" -0xd71e: "hwinh" -0xd71f: "hwid" -0xd720: "hwil" -0xd721: "hwilg" -0xd722: "hwilm" -0xd723: "hwilb" -0xd724: "hwils" -0xd725: "hwilt" -0xd726: "hwilp" -0xd727: "hwilh" -0xd728: "hwim" -0xd729: "hwib" -0xd72a: "hwibs" -0xd72b: "hwis" -0xd72c: "hwiss" -0xd72d: "hwing" -0xd72e: "hwij" -0xd72f: "hwic" -0xd730: "hwik" -0xd731: "hwit" -0xd732: "hwip" -0xd733: "hwih" -0xd734: "hyu" -0xd735: "hyug" -0xd736: "hyugg" -0xd737: "hyugs" -0xd738: "hyun" -0xd739: "hyunj" -0xd73a: "hyunh" -0xd73b: "hyud" -0xd73c: "hyul" -0xd73d: "hyulg" -0xd73e: "hyulm" -0xd73f: "hyulb" -0xd740: "hyuls" -0xd741: "hyult" -0xd742: "hyulp" -0xd743: "hyulh" -0xd744: "hyum" -0xd745: "hyub" -0xd746: "hyubs" -0xd747: "hyus" -0xd748: "hyuss" -0xd749: "hyung" -0xd74a: "hyuj" -0xd74b: "hyuc" -0xd74c: "hyuk" -0xd74d: "hyut" -0xd74e: "hyup" -0xd74f: "hyuh" -0xd750: "heu" -0xd751: "heug" -0xd752: "heugg" -0xd753: "heugs" -0xd754: "heun" -0xd755: "heunj" -0xd756: "heunh" -0xd757: "heud" -0xd758: "heul" -0xd759: "heulg" -0xd75a: "heulm" -0xd75b: "heulb" -0xd75c: "heuls" -0xd75d: "heult" -0xd75e: "heulp" -0xd75f: "heulh" -0xd760: "heum" -0xd761: "heub" -0xd762: "heubs" -0xd763: "heus" -0xd764: "heuss" -0xd765: "heung" -0xd766: "heuj" -0xd767: "heuc" -0xd768: "heuk" -0xd769: "heut" -0xd76a: "heup" -0xd76b: "heuh" -0xd76c: "hyi" -0xd76d: "hyig" -0xd76e: "hyigg" -0xd76f: "hyigs" -0xd770: "hyin" -0xd771: "hyinj" -0xd772: "hyinh" -0xd773: "hyid" -0xd774: "hyil" -0xd775: "hyilg" -0xd776: "hyilm" -0xd777: "hyilb" -0xd778: "hyils" -0xd779: "hyilt" -0xd77a: "hyilp" -0xd77b: "hyilh" -0xd77c: "hyim" -0xd77d: "hyib" -0xd77e: "hyibs" -0xd77f: "hyis" -0xd780: "hyiss" -0xd781: "hying" -0xd782: "hyij" -0xd783: "hyic" -0xd784: "hyik" -0xd785: "hyit" -0xd786: "hyip" -0xd787: "hyih" -0xd788: "hi" -0xd789: "hig" -0xd78a: "higg" -0xd78b: "higs" -0xd78c: "hin" -0xd78d: "hinj" -0xd78e: "hinh" -0xd78f: "hid" -0xd790: "hil" -0xd791: "hilg" -0xd792: "hilm" -0xd793: "hilb" -0xd794: "hils" -0xd795: "hilt" -0xd796: "hilp" -0xd797: "hilh" -0xd798: "him" -0xd799: "hib" -0xd79a: "hibs" -0xd79b: "his" -0xd79c: "hiss" -0xd79d: "hing" -0xd79e: "hij" -0xd79f: "hic" -0xd7a0: "hik" -0xd7a1: "hit" -0xd7a2: "hip" -0xd7a3: "hih" -0xd7a4: "[?]" -0xd7a5: "[?]" -0xd7a6: "[?]" -0xd7a7: "[?]" -0xd7a8: "[?]" -0xd7a9: "[?]" -0xd7aa: "[?]" -0xd7ab: "[?]" -0xd7ac: "[?]" -0xd7ad: "[?]" -0xd7ae: "[?]" -0xd7af: "[?]" -0xd7b0: "[?]" -0xd7b1: "[?]" -0xd7b2: "[?]" -0xd7b3: "[?]" -0xd7b4: "[?]" -0xd7b5: "[?]" -0xd7b6: "[?]" -0xd7b7: "[?]" -0xd7b8: "[?]" -0xd7b9: "[?]" -0xd7ba: "[?]" -0xd7bb: "[?]" -0xd7bc: "[?]" -0xd7bd: "[?]" -0xd7be: "[?]" -0xd7bf: "[?]" -0xd7c0: "[?]" -0xd7c1: "[?]" -0xd7c2: "[?]" -0xd7c3: "[?]" -0xd7c4: "[?]" -0xd7c5: "[?]" -0xd7c6: "[?]" -0xd7c7: "[?]" -0xd7c8: "[?]" -0xd7c9: "[?]" -0xd7ca: "[?]" -0xd7cb: "[?]" -0xd7cc: "[?]" -0xd7cd: "[?]" -0xd7ce: "[?]" -0xd7cf: "[?]" -0xd7d0: "[?]" -0xd7d1: "[?]" -0xd7d2: "[?]" -0xd7d3: "[?]" -0xd7d4: "[?]" -0xd7d5: "[?]" -0xd7d6: "[?]" -0xd7d7: "[?]" -0xd7d8: "[?]" -0xd7d9: "[?]" -0xd7da: "[?]" -0xd7db: "[?]" -0xd7dc: "[?]" -0xd7dd: "[?]" -0xd7de: "[?]" -0xd7df: "[?]" -0xd7e0: "[?]" -0xd7e1: "[?]" -0xd7e2: "[?]" -0xd7e3: "[?]" -0xd7e4: "[?]" -0xd7e5: "[?]" -0xd7e6: "[?]" -0xd7e7: "[?]" -0xd7e8: "[?]" -0xd7e9: "[?]" -0xd7ea: "[?]" -0xd7eb: "[?]" -0xd7ec: "[?]" -0xd7ed: "[?]" -0xd7ee: "[?]" -0xd7ef: "[?]" -0xd7f0: "[?]" -0xd7f1: "[?]" -0xd7f2: "[?]" -0xd7f3: "[?]" -0xd7f4: "[?]" -0xd7f5: "[?]" -0xd7f6: "[?]" -0xd7f7: "[?]" -0xd7f8: "[?]" -0xd7f9: "[?]" -0xd7fa: "[?]" -0xd7fb: "[?]" -0xd7fc: "[?]" -0xd7fd: "[?]" -0xd7fe: "[?]" -/* x0f9 */ -0xf900: "Kay " -0xf901: "Kayng " -0xf902: "Ke " -0xf903: "Ko " -0xf904: "Kol " -0xf905: "Koc " -0xf906: "Kwi " -0xf907: "Kwi " -0xf908: "Kyun " -0xf909: "Kul " -0xf90a: "Kum " -0xf90b: "Na " -0xf90c: "Na " -0xf90d: "Na " -0xf90e: "La " -0xf90f: "Na " -0xf910: "Na " -0xf911: "Na " -0xf912: "Na " -0xf913: "Na " -0xf914: "Nak " -0xf915: "Nak " -0xf916: "Nak " -0xf917: "Nak " -0xf918: "Nak " -0xf919: "Nak " -0xf91a: "Nak " -0xf91b: "Nan " -0xf91c: "Nan " -0xf91d: "Nan " -0xf91e: "Nan " -0xf91f: "Nan " -0xf920: "Nan " -0xf921: "Nam " -0xf922: "Nam " -0xf923: "Nam " -0xf924: "Nam " -0xf925: "Nap " -0xf926: "Nap " -0xf927: "Nap " -0xf928: "Nang " -0xf929: "Nang " -0xf92a: "Nang " -0xf92b: "Nang " -0xf92c: "Nang " -0xf92d: "Nay " -0xf92e: "Nayng " -0xf92f: "No " -0xf930: "No " -0xf931: "No " -0xf932: "No " -0xf933: "No " -0xf934: "No " -0xf935: "No " -0xf936: "No " -0xf937: "No " -0xf938: "No " -0xf939: "No " -0xf93a: "No " -0xf93b: "Nok " -0xf93c: "Nok " -0xf93d: "Nok " -0xf93e: "Nok " -0xf93f: "Nok " -0xf940: "Nok " -0xf941: "Non " -0xf942: "Nong " -0xf943: "Nong " -0xf944: "Nong " -0xf945: "Nong " -0xf946: "Noy " -0xf947: "Noy " -0xf948: "Noy " -0xf949: "Noy " -0xf94a: "Nwu " -0xf94b: "Nwu " -0xf94c: "Nwu " -0xf94d: "Nwu " -0xf94e: "Nwu " -0xf94f: "Nwu " -0xf950: "Nwu " -0xf951: "Nwu " -0xf952: "Nuk " -0xf953: "Nuk " -0xf954: "Num " -0xf955: "Nung " -0xf956: "Nung " -0xf957: "Nung " -0xf958: "Nung " -0xf959: "Nung " -0xf95a: "Twu " -0xf95b: "La " -0xf95c: "Lak " -0xf95d: "Lak " -0xf95e: "Lan " -0xf95f: "Lyeng " -0xf960: "Lo " -0xf961: "Lyul " -0xf962: "Li " -0xf963: "Pey " -0xf964: "Pen " -0xf965: "Pyen " -0xf966: "Pwu " -0xf967: "Pwul " -0xf968: "Pi " -0xf969: "Sak " -0xf96a: "Sak " -0xf96b: "Sam " -0xf96c: "Sayk " -0xf96d: "Sayng " -0xf96e: "Sep " -0xf96f: "Sey " -0xf970: "Sway " -0xf971: "Sin " -0xf972: "Sim " -0xf973: "Sip " -0xf974: "Ya " -0xf975: "Yak " -0xf976: "Yak " -0xf977: "Yang " -0xf978: "Yang " -0xf979: "Yang " -0xf97a: "Yang " -0xf97b: "Yang " -0xf97c: "Yang " -0xf97d: "Yang " -0xf97e: "Yang " -0xf97f: "Ye " -0xf980: "Ye " -0xf981: "Ye " -0xf982: "Ye " -0xf983: "Ye " -0xf984: "Ye " -0xf985: "Ye " -0xf986: "Ye " -0xf987: "Ye " -0xf988: "Ye " -0xf989: "Ye " -0xf98a: "Yek " -0xf98b: "Yek " -0xf98c: "Yek " -0xf98d: "Yek " -0xf98e: "Yen " -0xf98f: "Yen " -0xf990: "Yen " -0xf991: "Yen " -0xf992: "Yen " -0xf993: "Yen " -0xf994: "Yen " -0xf995: "Yen " -0xf996: "Yen " -0xf997: "Yen " -0xf998: "Yen " -0xf999: "Yen " -0xf99a: "Yen " -0xf99b: "Yen " -0xf99c: "Yel " -0xf99d: "Yel " -0xf99e: "Yel " -0xf99f: "Yel " -0xf9a0: "Yel " -0xf9a1: "Yel " -0xf9a2: "Yem " -0xf9a3: "Yem " -0xf9a4: "Yem " -0xf9a5: "Yem " -0xf9a6: "Yem " -0xf9a7: "Yep " -0xf9a8: "Yeng " -0xf9a9: "Yeng " -0xf9aa: "Yeng " -0xf9ab: "Yeng " -0xf9ac: "Yeng " -0xf9ad: "Yeng " -0xf9ae: "Yeng " -0xf9af: "Yeng " -0xf9b0: "Yeng " -0xf9b1: "Yeng " -0xf9b2: "Yeng " -0xf9b3: "Yeng " -0xf9b4: "Yeng " -0xf9b5: "Yey " -0xf9b6: "Yey " -0xf9b7: "Yey " -0xf9b8: "Yey " -0xf9b9: "O " -0xf9ba: "Yo " -0xf9bb: "Yo " -0xf9bc: "Yo " -0xf9bd: "Yo " -0xf9be: "Yo " -0xf9bf: "Yo " -0xf9c0: "Yo " -0xf9c1: "Yo " -0xf9c2: "Yo " -0xf9c3: "Yo " -0xf9c4: "Yong " -0xf9c5: "Wun " -0xf9c6: "Wen " -0xf9c7: "Yu " -0xf9c8: "Yu " -0xf9c9: "Yu " -0xf9ca: "Yu " -0xf9cb: "Yu " -0xf9cc: "Yu " -0xf9cd: "Yu " -0xf9ce: "Yu " -0xf9cf: "Yu " -0xf9d0: "Yu " -0xf9d1: "Yuk " -0xf9d2: "Yuk " -0xf9d3: "Yuk " -0xf9d4: "Yun " -0xf9d5: "Yun " -0xf9d6: "Yun " -0xf9d7: "Yun " -0xf9d8: "Yul " -0xf9d9: "Yul " -0xf9da: "Yul " -0xf9db: "Yul " -0xf9dc: "Yung " -0xf9dd: "I " -0xf9de: "I " -0xf9df: "I " -0xf9e0: "I " -0xf9e1: "I " -0xf9e2: "I " -0xf9e3: "I " -0xf9e4: "I " -0xf9e5: "I " -0xf9e6: "I " -0xf9e7: "I " -0xf9e8: "I " -0xf9e9: "I " -0xf9ea: "I " -0xf9eb: "Ik " -0xf9ec: "Ik " -0xf9ed: "In " -0xf9ee: "In " -0xf9ef: "In " -0xf9f0: "In " -0xf9f1: "In " -0xf9f2: "In " -0xf9f3: "In " -0xf9f4: "Im " -0xf9f5: "Im " -0xf9f6: "Im " -0xf9f7: "Ip " -0xf9f8: "Ip " -0xf9f9: "Ip " -0xf9fa: "Cang " -0xf9fb: "Cek " -0xf9fc: "Ci " -0xf9fd: "Cip " -0xf9fe: "Cha " -0xf9ff: "Chek " -/* x0fa */ -0xfa00: "Chey " -0xfa01: "Thak " -0xfa02: "Thak " -0xfa03: "Thang " -0xfa04: "Thayk " -0xfa05: "Thong " -0xfa06: "Pho " -0xfa07: "Phok " -0xfa08: "Hang " -0xfa09: "Hang " -0xfa0a: "Hyen " -0xfa0b: "Hwak " -0xfa0c: "Wu " -0xfa0d: "Huo " -0xfa0e: "[?] " -0xfa0f: "[?] " -0xfa10: "Zhong " -0xfa11: "[?] " -0xfa12: "Qing " -0xfa13: "[?] " -0xfa14: "[?] " -0xfa15: "Xi " -0xfa16: "Zhu " -0xfa17: "Yi " -0xfa18: "Li " -0xfa19: "Shen " -0xfa1a: "Xiang " -0xfa1b: "Fu " -0xfa1c: "Jing " -0xfa1d: "Jing " -0xfa1e: "Yu " -0xfa1f: "[?] " -0xfa20: "Hagi " -0xfa21: "[?] " -0xfa22: "Zhu " -0xfa23: "[?] " -0xfa24: "[?] " -0xfa25: "Yi " -0xfa26: "Du " -0xfa27: "[?] " -0xfa28: "[?] " -0xfa29: "[?] " -0xfa2a: "Fan " -0xfa2b: "Si " -0xfa2c: "Guan " -0xfa2d: "[?]" -0xfa2e: "[?]" -0xfa2f: "[?]" -0xfa30: "[?]" -0xfa31: "[?]" -0xfa32: "[?]" -0xfa33: "[?]" -0xfa34: "[?]" -0xfa35: "[?]" -0xfa36: "[?]" -0xfa37: "[?]" -0xfa38: "[?]" -0xfa39: "[?]" -0xfa3a: "[?]" -0xfa3b: "[?]" -0xfa3c: "[?]" -0xfa3d: "[?]" -0xfa3e: "[?]" -0xfa3f: "[?]" -0xfa40: "[?]" -0xfa41: "[?]" -0xfa42: "[?]" -0xfa43: "[?]" -0xfa44: "[?]" -0xfa45: "[?]" -0xfa46: "[?]" -0xfa47: "[?]" -0xfa48: "[?]" -0xfa49: "[?]" -0xfa4a: "[?]" -0xfa4b: "[?]" -0xfa4c: "[?]" -0xfa4d: "[?]" -0xfa4e: "[?]" -0xfa4f: "[?]" -0xfa50: "[?]" -0xfa51: "[?]" -0xfa52: "[?]" -0xfa53: "[?]" -0xfa54: "[?]" -0xfa55: "[?]" -0xfa56: "[?]" -0xfa57: "[?]" -0xfa58: "[?]" -0xfa59: "[?]" -0xfa5a: "[?]" -0xfa5b: "[?]" -0xfa5c: "[?]" -0xfa5d: "[?]" -0xfa5e: "[?]" -0xfa5f: "[?]" -0xfa60: "[?]" -0xfa61: "[?]" -0xfa62: "[?]" -0xfa63: "[?]" -0xfa64: "[?]" -0xfa65: "[?]" -0xfa66: "[?]" -0xfa67: "[?]" -0xfa68: "[?]" -0xfa69: "[?]" -0xfa6a: "[?]" -0xfa6b: "[?]" -0xfa6c: "[?]" -0xfa6d: "[?]" -0xfa6e: "[?]" -0xfa6f: "[?]" -0xfa70: "[?]" -0xfa71: "[?]" -0xfa72: "[?]" -0xfa73: "[?]" -0xfa74: "[?]" -0xfa75: "[?]" -0xfa76: "[?]" -0xfa77: "[?]" -0xfa78: "[?]" -0xfa79: "[?]" -0xfa7a: "[?]" -0xfa7b: "[?]" -0xfa7c: "[?]" -0xfa7d: "[?]" -0xfa7e: "[?]" -0xfa7f: "[?]" -0xfa80: "[?]" -0xfa81: "[?]" -0xfa82: "[?]" -0xfa83: "[?]" -0xfa84: "[?]" -0xfa85: "[?]" -0xfa86: "[?]" -0xfa87: "[?]" -0xfa88: "[?]" -0xfa89: "[?]" -0xfa8a: "[?]" -0xfa8b: "[?]" -0xfa8c: "[?]" -0xfa8d: "[?]" -0xfa8e: "[?]" -0xfa8f: "[?]" -0xfa90: "[?]" -0xfa91: "[?]" -0xfa92: "[?]" -0xfa93: "[?]" -0xfa94: "[?]" -0xfa95: "[?]" -0xfa96: "[?]" -0xfa97: "[?]" -0xfa98: "[?]" -0xfa99: "[?]" -0xfa9a: "[?]" -0xfa9b: "[?]" -0xfa9c: "[?]" -0xfa9d: "[?]" -0xfa9e: "[?]" -0xfa9f: "[?]" -0xfaa0: "[?]" -0xfaa1: "[?]" -0xfaa2: "[?]" -0xfaa3: "[?]" -0xfaa4: "[?]" -0xfaa5: "[?]" -0xfaa6: "[?]" -0xfaa7: "[?]" -0xfaa8: "[?]" -0xfaa9: "[?]" -0xfaaa: "[?]" -0xfaab: "[?]" -0xfaac: "[?]" -0xfaad: "[?]" -0xfaae: "[?]" -0xfaaf: "[?]" -0xfab0: "[?]" -0xfab1: "[?]" -0xfab2: "[?]" -0xfab3: "[?]" -0xfab4: "[?]" -0xfab5: "[?]" -0xfab6: "[?]" -0xfab7: "[?]" -0xfab8: "[?]" -0xfab9: "[?]" -0xfaba: "[?]" -0xfabb: "[?]" -0xfabc: "[?]" -0xfabd: "[?]" -0xfabe: "[?]" -0xfabf: "[?]" -0xfac0: "[?]" -0xfac1: "[?]" -0xfac2: "[?]" -0xfac3: "[?]" -0xfac4: "[?]" -0xfac5: "[?]" -0xfac6: "[?]" -0xfac7: "[?]" -0xfac8: "[?]" -0xfac9: "[?]" -0xfaca: "[?]" -0xfacb: "[?]" -0xfacc: "[?]" -0xfacd: "[?]" -0xface: "[?]" -0xfacf: "[?]" -0xfad0: "[?]" -0xfad1: "[?]" -0xfad2: "[?]" -0xfad3: "[?]" -0xfad4: "[?]" -0xfad5: "[?]" -0xfad6: "[?]" -0xfad7: "[?]" -0xfad8: "[?]" -0xfad9: "[?]" -0xfada: "[?]" -0xfadb: "[?]" -0xfadc: "[?]" -0xfadd: "[?]" -0xfade: "[?]" -0xfadf: "[?]" -0xfae0: "[?]" -0xfae1: "[?]" -0xfae2: "[?]" -0xfae3: "[?]" -0xfae4: "[?]" -0xfae5: "[?]" -0xfae6: "[?]" -0xfae7: "[?]" -0xfae8: "[?]" -0xfae9: "[?]" -0xfaea: "[?]" -0xfaeb: "[?]" -0xfaec: "[?]" -0xfaed: "[?]" -0xfaee: "[?]" -0xfaef: "[?]" -0xfaf0: "[?]" -0xfaf1: "[?]" -0xfaf2: "[?]" -0xfaf3: "[?]" -0xfaf4: "[?]" -0xfaf5: "[?]" -0xfaf6: "[?]" -0xfaf7: "[?]" -0xfaf8: "[?]" -0xfaf9: "[?]" -0xfafa: "[?]" -0xfafb: "[?]" -0xfafc: "[?]" -0xfafd: "[?]" -0xfafe: "[?]" -/* x0fb */ -0xfb00: "ff" -0xfb01: "fi" -0xfb02: "fl" -0xfb03: "ffi" -0xfb04: "ffl" -0xfb05: "st" -0xfb06: "st" -0xfb07: "[?]" -0xfb08: "[?]" -0xfb09: "[?]" -0xfb0a: "[?]" -0xfb0b: "[?]" -0xfb0c: "[?]" -0xfb0d: "[?]" -0xfb0e: "[?]" -0xfb0f: "[?]" -0xfb10: "[?]" -0xfb11: "[?]" -0xfb12: "[?]" -0xfb13: "mn" -0xfb14: "me" -0xfb15: "mi" -0xfb16: "vn" -0xfb17: "mkh" -0xfb18: "[?]" -0xfb19: "[?]" -0xfb1a: "[?]" -0xfb1b: "[?]" -0xfb1c: "[?]" -0xfb1d: "yi" -0xfb1e: "" -0xfb1f: "ay" -0xfb20: "`" -0xfb21: "" -0xfb22: "d" -0xfb23: "h" -0xfb24: "k" -0xfb25: "l" -0xfb26: "m" -0xfb27: "m" -0xfb28: "t" -0xfb29: "+" -0xfb2a: "sh" -0xfb2b: "s" -0xfb2c: "sh" -0xfb2d: "s" -0xfb2e: "a" -0xfb2f: "a" -0xfb30: "" -0xfb31: "b" -0xfb32: "g" -0xfb33: "d" -0xfb34: "h" -0xfb35: "v" -0xfb36: "z" -0xfb37: "[?]" -0xfb38: "t" -0xfb39: "y" -0xfb3a: "k" -0xfb3b: "k" -0xfb3c: "l" -0xfb3d: "[?]" -0xfb3e: "l" -0xfb3f: "[?]" -0xfb40: "n" -0xfb41: "n" -0xfb42: "[?]" -0xfb43: "p" -0xfb44: "p" -0xfb45: "[?]" -0xfb46: "ts" -0xfb47: "ts" -0xfb48: "r" -0xfb49: "sh" -0xfb4a: "t" -0xfb4b: "vo" -0xfb4c: "b" -0xfb4d: "k" -0xfb4e: "p" -0xfb4f: "l" -0xfb50: "" -0xfb51: "" -0xfb52: "" -0xfb53: "" -0xfb54: "" -0xfb55: "" -0xfb56: "" -0xfb57: "" -0xfb58: "" -0xfb59: "" -0xfb5a: "" -0xfb5b: "" -0xfb5c: "" -0xfb5d: "" -0xfb5e: "" -0xfb5f: "" -0xfb60: "" -0xfb61: "" -0xfb62: "" -0xfb63: "" -0xfb64: "" -0xfb65: "" -0xfb66: "" -0xfb67: "" -0xfb68: "" -0xfb69: "" -0xfb6a: "" -0xfb6b: "" -0xfb6c: "" -0xfb6d: "" -0xfb6e: "" -0xfb6f: "" -0xfb70: "" -0xfb71: "" -0xfb72: "" -0xfb73: "" -0xfb74: "" -0xfb75: "" -0xfb76: "" -0xfb77: "" -0xfb78: "" -0xfb79: "" -0xfb7a: "" -0xfb7b: "" -0xfb7c: "" -0xfb7d: "" -0xfb7e: "" -0xfb7f: "" -0xfb80: "" -0xfb81: "" -0xfb82: "" -0xfb83: "" -0xfb84: "" -0xfb85: "" -0xfb86: "" -0xfb87: "" -0xfb88: "" -0xfb89: "" -0xfb8a: "" -0xfb8b: "" -0xfb8c: "" -0xfb8d: "" -0xfb8e: "" -0xfb8f: "" -0xfb90: "" -0xfb91: "" -0xfb92: "" -0xfb93: "" -0xfb94: "" -0xfb95: "" -0xfb96: "" -0xfb97: "" -0xfb98: "" -0xfb99: "" -0xfb9a: "" -0xfb9b: "" -0xfb9c: "" -0xfb9d: "" -0xfb9e: "" -0xfb9f: "" -0xfba0: "" -0xfba1: "" -0xfba2: "" -0xfba3: "" -0xfba4: "" -0xfba5: "" -0xfba6: "" -0xfba7: "" -0xfba8: "" -0xfba9: "" -0xfbaa: "" -0xfbab: "" -0xfbac: "" -0xfbad: "" -0xfbae: "" -0xfbaf: "" -0xfbb0: "" -0xfbb1: "" -0xfbb2: "[?]" -0xfbb3: "[?]" -0xfbb4: "[?]" -0xfbb5: "[?]" -0xfbb6: "[?]" -0xfbb7: "[?]" -0xfbb8: "[?]" -0xfbb9: "[?]" -0xfbba: "[?]" -0xfbbb: "[?]" -0xfbbc: "[?]" -0xfbbd: "[?]" -0xfbbe: "[?]" -0xfbbf: "[?]" -0xfbc0: "[?]" -0xfbc1: "[?]" -0xfbc2: "[?]" -0xfbc3: "[?]" -0xfbc4: "[?]" -0xfbc5: "[?]" -0xfbc6: "[?]" -0xfbc7: "[?]" -0xfbc8: "[?]" -0xfbc9: "[?]" -0xfbca: "[?]" -0xfbcb: "[?]" -0xfbcc: "[?]" -0xfbcd: "[?]" -0xfbce: "[?]" -0xfbcf: "[?]" -0xfbd0: "[?]" -0xfbd1: "[?]" -0xfbd2: "[?]" -0xfbd3: "" -0xfbd4: "" -0xfbd5: "" -0xfbd6: "" -0xfbd7: "" -0xfbd8: "" -0xfbd9: "" -0xfbda: "" -0xfbdb: "" -0xfbdc: "" -0xfbdd: "" -0xfbde: "" -0xfbdf: "" -0xfbe0: "" -0xfbe1: "" -0xfbe2: "" -0xfbe3: "" -0xfbe4: "" -0xfbe5: "" -0xfbe6: "" -0xfbe7: "" -0xfbe8: "" -0xfbe9: "" -0xfbea: "" -0xfbeb: "" -0xfbec: "" -0xfbed: "" -0xfbee: "" -0xfbef: "" -0xfbf0: "" -0xfbf1: "" -0xfbf2: "" -0xfbf3: "" -0xfbf4: "" -0xfbf5: "" -0xfbf6: "" -0xfbf7: "" -0xfbf8: "" -0xfbf9: "" -0xfbfa: "" -0xfbfb: "" -0xfbfc: "" -0xfbfd: "" -0xfbfe: "" -0xfbff: "" -/* x0fc */ -0xfc00: "" -0xfc01: "" -0xfc02: "" -0xfc03: "" -0xfc04: "" -0xfc05: "" -0xfc06: "" -0xfc07: "" -0xfc08: "" -0xfc09: "" -0xfc0a: "" -0xfc0b: "" -0xfc0c: "" -0xfc0d: "" -0xfc0e: "" -0xfc0f: "" -0xfc10: "" -0xfc11: "" -0xfc12: "" -0xfc13: "" -0xfc14: "" -0xfc15: "" -0xfc16: "" -0xfc17: "" -0xfc18: "" -0xfc19: "" -0xfc1a: "" -0xfc1b: "" -0xfc1c: "" -0xfc1d: "" -0xfc1e: "" -0xfc1f: "" -0xfc20: "" -0xfc21: "" -0xfc22: "" -0xfc23: "" -0xfc24: "" -0xfc25: "" -0xfc26: "" -0xfc27: "" -0xfc28: "" -0xfc29: "" -0xfc2a: "" -0xfc2b: "" -0xfc2c: "" -0xfc2d: "" -0xfc2e: "" -0xfc2f: "" -0xfc30: "" -0xfc31: "" -0xfc32: "" -0xfc33: "" -0xfc34: "" -0xfc35: "" -0xfc36: "" -0xfc37: "" -0xfc38: "" -0xfc39: "" -0xfc3a: "" -0xfc3b: "" -0xfc3c: "" -0xfc3d: "" -0xfc3e: "" -0xfc3f: "" -0xfc40: "" -0xfc41: "" -0xfc42: "" -0xfc43: "" -0xfc44: "" -0xfc45: "" -0xfc46: "" -0xfc47: "" -0xfc48: "" -0xfc49: "" -0xfc4a: "" -0xfc4b: "" -0xfc4c: "" -0xfc4d: "" -0xfc4e: "" -0xfc4f: "" -0xfc50: "" -0xfc51: "" -0xfc52: "" -0xfc53: "" -0xfc54: "" -0xfc55: "" -0xfc56: "" -0xfc57: "" -0xfc58: "" -0xfc59: "" -0xfc5a: "" -0xfc5b: "" -0xfc5c: "" -0xfc5d: "" -0xfc5e: "" -0xfc5f: "" -0xfc60: "" -0xfc61: "" -0xfc62: "" -0xfc63: "" -0xfc64: "" -0xfc65: "" -0xfc66: "" -0xfc67: "" -0xfc68: "" -0xfc69: "" -0xfc6a: "" -0xfc6b: "" -0xfc6c: "" -0xfc6d: "" -0xfc6e: "" -0xfc6f: "" -0xfc70: "" -0xfc71: "" -0xfc72: "" -0xfc73: "" -0xfc74: "" -0xfc75: "" -0xfc76: "" -0xfc77: "" -0xfc78: "" -0xfc79: "" -0xfc7a: "" -0xfc7b: "" -0xfc7c: "" -0xfc7d: "" -0xfc7e: "" -0xfc7f: "" -0xfc80: "" -0xfc81: "" -0xfc82: "" -0xfc83: "" -0xfc84: "" -0xfc85: "" -0xfc86: "" -0xfc87: "" -0xfc88: "" -0xfc89: "" -0xfc8a: "" -0xfc8b: "" -0xfc8c: "" -0xfc8d: "" -0xfc8e: "" -0xfc8f: "" -0xfc90: "" -0xfc91: "" -0xfc92: "" -0xfc93: "" -0xfc94: "" -0xfc95: "" -0xfc96: "" -0xfc97: "" -0xfc98: "" -0xfc99: "" -0xfc9a: "" -0xfc9b: "" -0xfc9c: "" -0xfc9d: "" -0xfc9e: "" -0xfc9f: "" -0xfca0: "" -0xfca1: "" -0xfca2: "" -0xfca3: "" -0xfca4: "" -0xfca5: "" -0xfca6: "" -0xfca7: "" -0xfca8: "" -0xfca9: "" -0xfcaa: "" -0xfcab: "" -0xfcac: "" -0xfcad: "" -0xfcae: "" -0xfcaf: "" -0xfcb0: "" -0xfcb1: "" -0xfcb2: "" -0xfcb3: "" -0xfcb4: "" -0xfcb5: "" -0xfcb6: "" -0xfcb7: "" -0xfcb8: "" -0xfcb9: "" -0xfcba: "" -0xfcbb: "" -0xfcbc: "" -0xfcbd: "" -0xfcbe: "" -0xfcbf: "" -0xfcc0: "" -0xfcc1: "" -0xfcc2: "" -0xfcc3: "" -0xfcc4: "" -0xfcc5: "" -0xfcc6: "" -0xfcc7: "" -0xfcc8: "" -0xfcc9: "" -0xfcca: "" -0xfccb: "" -0xfccc: "" -0xfccd: "" -0xfcce: "" -0xfccf: "" -0xfcd0: "" -0xfcd1: "" -0xfcd2: "" -0xfcd3: "" -0xfcd4: "" -0xfcd5: "" -0xfcd6: "" -0xfcd7: "" -0xfcd8: "" -0xfcd9: "" -0xfcda: "" -0xfcdb: "" -0xfcdc: "" -0xfcdd: "" -0xfcde: "" -0xfcdf: "" -0xfce0: "" -0xfce1: "" -0xfce2: "" -0xfce3: "" -0xfce4: "" -0xfce5: "" -0xfce6: "" -0xfce7: "" -0xfce8: "" -0xfce9: "" -0xfcea: "" -0xfceb: "" -0xfcec: "" -0xfced: "" -0xfcee: "" -0xfcef: "" -0xfcf0: "" -0xfcf1: "" -0xfcf2: "" -0xfcf3: "" -0xfcf4: "" -0xfcf5: "" -0xfcf6: "" -0xfcf7: "" -0xfcf8: "" -0xfcf9: "" -0xfcfa: "" -0xfcfb: "" -0xfcfc: "" -0xfcfd: "" -0xfcfe: "" -0xfcff: "" -/* x0fd */ -0xfd00: "" -0xfd01: "" -0xfd02: "" -0xfd03: "" -0xfd04: "" -0xfd05: "" -0xfd06: "" -0xfd07: "" -0xfd08: "" -0xfd09: "" -0xfd0a: "" -0xfd0b: "" -0xfd0c: "" -0xfd0d: "" -0xfd0e: "" -0xfd0f: "" -0xfd10: "" -0xfd11: "" -0xfd12: "" -0xfd13: "" -0xfd14: "" -0xfd15: "" -0xfd16: "" -0xfd17: "" -0xfd18: "" -0xfd19: "" -0xfd1a: "" -0xfd1b: "" -0xfd1c: "" -0xfd1d: "" -0xfd1e: "" -0xfd1f: "" -0xfd20: "" -0xfd21: "" -0xfd22: "" -0xfd23: "" -0xfd24: "" -0xfd25: "" -0xfd26: "" -0xfd27: "" -0xfd28: "" -0xfd29: "" -0xfd2a: "" -0xfd2b: "" -0xfd2c: "" -0xfd2d: "" -0xfd2e: "" -0xfd2f: "" -0xfd30: "" -0xfd31: "" -0xfd32: "" -0xfd33: "" -0xfd34: "" -0xfd35: "" -0xfd36: "" -0xfd37: "" -0xfd38: "" -0xfd39: "" -0xfd3a: "" -0xfd3b: "" -0xfd3c: "" -0xfd3d: "" -0xfd3e: "" -0xfd3f: "" -0xfd40: "[?]" -0xfd41: "[?]" -0xfd42: "[?]" -0xfd43: "[?]" -0xfd44: "[?]" -0xfd45: "[?]" -0xfd46: "[?]" -0xfd47: "[?]" -0xfd48: "[?]" -0xfd49: "[?]" -0xfd4a: "[?]" -0xfd4b: "[?]" -0xfd4c: "[?]" -0xfd4d: "[?]" -0xfd4e: "[?]" -0xfd4f: "[?]" -0xfd50: "" -0xfd51: "" -0xfd52: "" -0xfd53: "" -0xfd54: "" -0xfd55: "" -0xfd56: "" -0xfd57: "" -0xfd58: "" -0xfd59: "" -0xfd5a: "" -0xfd5b: "" -0xfd5c: "" -0xfd5d: "" -0xfd5e: "" -0xfd5f: "" -0xfd60: "" -0xfd61: "" -0xfd62: "" -0xfd63: "" -0xfd64: "" -0xfd65: "" -0xfd66: "" -0xfd67: "" -0xfd68: "" -0xfd69: "" -0xfd6a: "" -0xfd6b: "" -0xfd6c: "" -0xfd6d: "" -0xfd6e: "" -0xfd6f: "" -0xfd70: "" -0xfd71: "" -0xfd72: "" -0xfd73: "" -0xfd74: "" -0xfd75: "" -0xfd76: "" -0xfd77: "" -0xfd78: "" -0xfd79: "" -0xfd7a: "" -0xfd7b: "" -0xfd7c: "" -0xfd7d: "" -0xfd7e: "" -0xfd7f: "" -0xfd80: "" -0xfd81: "" -0xfd82: "" -0xfd83: "" -0xfd84: "" -0xfd85: "" -0xfd86: "" -0xfd87: "" -0xfd88: "" -0xfd89: "" -0xfd8a: "" -0xfd8b: "" -0xfd8c: "" -0xfd8d: "" -0xfd8e: "" -0xfd8f: "" -0xfd90: "[?]" -0xfd91: "[?]" -0xfd92: "" -0xfd93: "" -0xfd94: "" -0xfd95: "" -0xfd96: "" -0xfd97: "" -0xfd98: "" -0xfd99: "" -0xfd9a: "" -0xfd9b: "" -0xfd9c: "" -0xfd9d: "" -0xfd9e: "" -0xfd9f: "" -0xfda0: "" -0xfda1: "" -0xfda2: "" -0xfda3: "" -0xfda4: "" -0xfda5: "" -0xfda6: "" -0xfda7: "" -0xfda8: "" -0xfda9: "" -0xfdaa: "" -0xfdab: "" -0xfdac: "" -0xfdad: "" -0xfdae: "" -0xfdaf: "" -0xfdb0: "" -0xfdb1: "" -0xfdb2: "" -0xfdb3: "" -0xfdb4: "" -0xfdb5: "" -0xfdb6: "" -0xfdb7: "" -0xfdb8: "" -0xfdb9: "" -0xfdba: "" -0xfdbb: "" -0xfdbc: "" -0xfdbd: "" -0xfdbe: "" -0xfdbf: "" -0xfdc0: "" -0xfdc1: "" -0xfdc2: "" -0xfdc3: "" -0xfdc4: "" -0xfdc5: "" -0xfdc6: "" -0xfdc7: "" -0xfdc8: "[?]" -0xfdc9: "[?]" -0xfdca: "[?]" -0xfdcb: "[?]" -0xfdcc: "[?]" -0xfdcd: "[?]" -0xfdce: "[?]" -0xfdcf: "[?]" -0xfdd0: "[?]" -0xfdd1: "[?]" -0xfdd2: "[?]" -0xfdd3: "[?]" -0xfdd4: "[?]" -0xfdd5: "[?]" -0xfdd6: "[?]" -0xfdd7: "[?]" -0xfdd8: "[?]" -0xfdd9: "[?]" -0xfdda: "[?]" -0xfddb: "[?]" -0xfddc: "[?]" -0xfddd: "[?]" -0xfdde: "[?]" -0xfddf: "[?]" -0xfde0: "[?]" -0xfde1: "[?]" -0xfde2: "[?]" -0xfde3: "[?]" -0xfde4: "[?]" -0xfde5: "[?]" -0xfde6: "[?]" -0xfde7: "[?]" -0xfde8: "[?]" -0xfde9: "[?]" -0xfdea: "[?]" -0xfdeb: "[?]" -0xfdec: "[?]" -0xfded: "[?]" -0xfdee: "[?]" -0xfdef: "[?]" -0xfdf0: "" -0xfdf1: "" -0xfdf2: "" -0xfdf3: "" -0xfdf4: "" -0xfdf5: "" -0xfdf6: "" -0xfdf7: "" -0xfdf8: "" -0xfdf9: "" -0xfdfa: "" -0xfdfb: "" -0xfdfc: "[?]" -0xfdfd: "[?]" -0xfdfe: "[?]" -/* x0fe */ -0xfe00: "[?]" -0xfe01: "[?]" -0xfe02: "[?]" -0xfe03: "[?]" -0xfe04: "[?]" -0xfe05: "[?]" -0xfe06: "[?]" -0xfe07: "[?]" -0xfe08: "[?]" -0xfe09: "[?]" -0xfe0a: "[?]" -0xfe0b: "[?]" -0xfe0c: "[?]" -0xfe0d: "[?]" -0xfe0e: "[?]" -0xfe0f: "[?]" -0xfe10: "[?]" -0xfe11: "[?]" -0xfe12: "[?]" -0xfe13: "[?]" -0xfe14: "[?]" -0xfe15: "[?]" -0xfe16: "[?]" -0xfe17: "[?]" -0xfe18: "[?]" -0xfe19: "[?]" -0xfe1a: "[?]" -0xfe1b: "[?]" -0xfe1c: "[?]" -0xfe1d: "[?]" -0xfe1e: "[?]" -0xfe1f: "[?]" -0xfe20: "" -0xfe21: "" -0xfe22: "" -0xfe23: "~" -0xfe24: "[?]" -0xfe25: "[?]" -0xfe26: "[?]" -0xfe27: "[?]" -0xfe28: "[?]" -0xfe29: "[?]" -0xfe2a: "[?]" -0xfe2b: "[?]" -0xfe2c: "[?]" -0xfe2d: "[?]" -0xfe2e: "[?]" -0xfe2f: "[?]" -0xfe30: ".." -0xfe31: "--" -0xfe32: "-" -0xfe33: "_" -0xfe34: "_" -0xfe35: "(" -0xfe36: ") " -0xfe37: "{" -0xfe38: "} " -0xfe39: "[" -0xfe3a: "] " -0xfe3b: "[(" -0xfe3c: ")] " -0xfe3d: "<<" -0xfe3e: ">> " -0xfe3f: "<" -0xfe40: "> " -0xfe41: "[" -0xfe42: "] " -0xfe43: "{" -0xfe44: "}" -0xfe45: "[?]" -0xfe46: "[?]" -0xfe47: "[?]" -0xfe48: "[?]" -0xfe49: "" -0xfe4a: "" -0xfe4b: "" -0xfe4c: "" -0xfe4d: "" -0xfe4e: "" -0xfe4f: "" -0xfe50: "," -0xfe51: "," -0xfe52: "." -0xfe53: "" -0xfe54: ";" -0xfe55: ":" -0xfe56: "?" -0xfe57: "!" -0xfe58: "-" -0xfe59: "(" -0xfe5a: ")" -0xfe5b: "{" -0xfe5c: "}" -0xfe5d: "{" -0xfe5e: "}" -0xfe5f: "#" -0xfe60: "&" -0xfe61: "*" -0xfe62: "+" -0xfe63: "-" -0xfe64: "<" -0xfe65: ">" -0xfe66: "=" -0xfe67: "" -0xfe68: "\\" -0xfe69: "$" -0xfe6a: "%" -0xfe6b: "@" -0xfe6c: "[?]" -0xfe6d: "[?]" -0xfe6e: "[?]" -0xfe6f: "[?]" -0xfe70: "" -0xfe71: "" -0xfe72: "" -0xfe73: "[?]" -0xfe74: "" -0xfe75: "[?]" -0xfe76: "" -0xfe77: "" -0xfe78: "" -0xfe79: "" -0xfe7a: "" -0xfe7b: "" -0xfe7c: "" -0xfe7d: "" -0xfe7e: "" -0xfe7f: "" -0xfe80: "" -0xfe81: "" -0xfe82: "" -0xfe83: "" -0xfe84: "" -0xfe85: "" -0xfe86: "" -0xfe87: "" -0xfe88: "" -0xfe89: "" -0xfe8a: "" -0xfe8b: "" -0xfe8c: "" -0xfe8d: "" -0xfe8e: "" -0xfe8f: "" -0xfe90: "" -0xfe91: "" -0xfe92: "" -0xfe93: "" -0xfe94: "" -0xfe95: "" -0xfe96: "" -0xfe97: "" -0xfe98: "" -0xfe99: "" -0xfe9a: "" -0xfe9b: "" -0xfe9c: "" -0xfe9d: "" -0xfe9e: "" -0xfe9f: "" -0xfea0: "" -0xfea1: "" -0xfea2: "" -0xfea3: "" -0xfea4: "" -0xfea5: "" -0xfea6: "" -0xfea7: "" -0xfea8: "" -0xfea9: "" -0xfeaa: "" -0xfeab: "" -0xfeac: "" -0xfead: "" -0xfeae: "" -0xfeaf: "" -0xfeb0: "" -0xfeb1: "" -0xfeb2: "" -0xfeb3: "" -0xfeb4: "" -0xfeb5: "" -0xfeb6: "" -0xfeb7: "" -0xfeb8: "" -0xfeb9: "" -0xfeba: "" -0xfebb: "" -0xfebc: "" -0xfebd: "" -0xfebe: "" -0xfebf: "" -0xfec0: "" -0xfec1: "" -0xfec2: "" -0xfec3: "" -0xfec4: "" -0xfec5: "" -0xfec6: "" -0xfec7: "" -0xfec8: "" -0xfec9: "" -0xfeca: "" -0xfecb: "" -0xfecc: "" -0xfecd: "" -0xfece: "" -0xfecf: "" -0xfed0: "" -0xfed1: "" -0xfed2: "" -0xfed3: "" -0xfed4: "" -0xfed5: "" -0xfed6: "" -0xfed7: "" -0xfed8: "" -0xfed9: "" -0xfeda: "" -0xfedb: "" -0xfedc: "" -0xfedd: "" -0xfede: "" -0xfedf: "" -0xfee0: "" -0xfee1: "" -0xfee2: "" -0xfee3: "" -0xfee4: "" -0xfee5: "" -0xfee6: "" -0xfee7: "" -0xfee8: "" -0xfee9: "" -0xfeea: "" -0xfeeb: "" -0xfeec: "" -0xfeed: "" -0xfeee: "" -0xfeef: "" -0xfef0: "" -0xfef1: "" -0xfef2: "" -0xfef3: "" -0xfef4: "" -0xfef5: "" -0xfef6: "" -0xfef7: "" -0xfef8: "" -0xfef9: "" -0xfefa: "" -0xfefb: "" -0xfefc: "" -0xfefd: "[?]" -0xfefe: "[?]" -0xfeff: "" -/* x0ff */ -0xff00: "[?]" -0xff01: "!" -0xff02: "\"" -0xff03: "#" -0xff04: "$" -0xff05: "%" -0xff06: "&" -0xff07: "'" -0xff08: "(" -0xff09: ")" -0xff0a: "*" -0xff0b: "+" -0xff0c: "," -0xff0d: "-" -0xff0e: "." -0xff0f: "/" -0xff10: "0" -0xff11: "1" -0xff12: "2" -0xff13: "3" -0xff14: "4" -0xff15: "5" -0xff16: "6" -0xff17: "7" -0xff18: "8" -0xff19: "9" -0xff1a: ":" -0xff1b: ";" -0xff1c: "<" -0xff1d: "=" -0xff1e: ">" -0xff1f: "?" -0xff20: "@" -0xff21: "A" -0xff22: "B" -0xff23: "C" -0xff24: "D" -0xff25: "E" -0xff26: "F" -0xff27: "G" -0xff28: "H" -0xff29: "I" -0xff2a: "J" -0xff2b: "K" -0xff2c: "L" -0xff2d: "M" -0xff2e: "N" -0xff2f: "O" -0xff30: "P" -0xff31: "Q" -0xff32: "R" -0xff33: "S" -0xff34: "T" -0xff35: "U" -0xff36: "V" -0xff37: "W" -0xff38: "X" -0xff39: "Y" -0xff3a: "Z" -0xff3b: "[" -0xff3c: "\\" -0xff3d: "]" -0xff3e: "^" -0xff3f: "_" -0xff40: "`" -0xff41: "a" -0xff42: "b" -0xff43: "c" -0xff44: "d" -0xff45: "e" -0xff46: "f" -0xff47: "g" -0xff48: "h" -0xff49: "i" -0xff4a: "j" -0xff4b: "k" -0xff4c: "l" -0xff4d: "m" -0xff4e: "n" -0xff4f: "o" -0xff50: "p" -0xff51: "q" -0xff52: "r" -0xff53: "s" -0xff54: "t" -0xff55: "u" -0xff56: "v" -0xff57: "w" -0xff58: "x" -0xff59: "y" -0xff5a: "z" -0xff5b: "{" -0xff5c: "|" -0xff5d: "}" -0xff5e: "~" -0xff5f: "[?]" -0xff60: "[?]" -0xff61: "." -0xff62: "[" -0xff63: "]" -0xff64: "," -0xff65: "*" -0xff66: "wo" -0xff67: "a" -0xff68: "i" -0xff69: "u" -0xff6a: "e" -0xff6b: "o" -0xff6c: "ya" -0xff6d: "yu" -0xff6e: "yo" -0xff6f: "tu" -0xff70: "+" -0xff71: "a" -0xff72: "i" -0xff73: "u" -0xff74: "e" -0xff75: "o" -0xff76: "ka" -0xff77: "ki" -0xff78: "ku" -0xff79: "ke" -0xff7a: "ko" -0xff7b: "sa" -0xff7c: "si" -0xff7d: "su" -0xff7e: "se" -0xff7f: "so" -0xff80: "ta" -0xff81: "ti" -0xff82: "tu" -0xff83: "te" -0xff84: "to" -0xff85: "na" -0xff86: "ni" -0xff87: "nu" -0xff88: "ne" -0xff89: "no" -0xff8a: "ha" -0xff8b: "hi" -0xff8c: "hu" -0xff8d: "he" -0xff8e: "ho" -0xff8f: "ma" -0xff90: "mi" -0xff91: "mu" -0xff92: "me" -0xff93: "mo" -0xff94: "ya" -0xff95: "yu" -0xff96: "yo" -0xff97: "ra" -0xff98: "ri" -0xff99: "ru" -0xff9a: "re" -0xff9b: "ro" -0xff9c: "wa" -0xff9d: "n" -0xff9e: ":" -0xff9f: ";" -0xffa0: "" -0xffa1: "g" -0xffa2: "gg" -0xffa3: "gs" -0xffa4: "n" -0xffa5: "nj" -0xffa6: "nh" -0xffa7: "d" -0xffa8: "dd" -0xffa9: "r" -0xffaa: "lg" -0xffab: "lm" -0xffac: "lb" -0xffad: "ls" -0xffae: "lt" -0xffaf: "lp" -0xffb0: "rh" -0xffb1: "m" -0xffb2: "b" -0xffb3: "bb" -0xffb4: "bs" -0xffb5: "s" -0xffb6: "ss" -0xffb7: "" -0xffb8: "j" -0xffb9: "jj" -0xffba: "c" -0xffbb: "k" -0xffbc: "t" -0xffbd: "p" -0xffbe: "h" -0xffbf: "[?]" -0xffc0: "[?]" -0xffc1: "[?]" -0xffc2: "a" -0xffc3: "ae" -0xffc4: "ya" -0xffc5: "yae" -0xffc6: "eo" -0xffc7: "e" -0xffc8: "[?]" -0xffc9: "[?]" -0xffca: "yeo" -0xffcb: "ye" -0xffcc: "o" -0xffcd: "wa" -0xffce: "wae" -0xffcf: "oe" -0xffd0: "[?]" -0xffd1: "[?]" -0xffd2: "yo" -0xffd3: "u" -0xffd4: "weo" -0xffd5: "we" -0xffd6: "wi" -0xffd7: "yu" -0xffd8: "[?]" -0xffd9: "[?]" -0xffda: "eu" -0xffdb: "yi" -0xffdc: "i" -0xffdd: "[?]" -0xffde: "[?]" -0xffdf: "[?]" -0xffe0: "/C" -0xffe1: "PS" -0xffe2: "!" -0xffe3: "-" -0xffe4: "|" -0xffe5: "Y=" -0xffe6: "W=" -0xffe7: "[?]" -0xffe8: "|" -0xffe9: "-" -0xffea: "|" -0xffeb: "-" -0xffec: "|" -0xffed: "#" -0xffee: "O" -0xffef: "[?]" -0xfff0: "[?]" -0xfff1: "[?]" -0xfff2: "[?]" -0xfff3: "[?]" -0xfff4: "[?]" -0xfff5: "[?]" -0xfff6: "[?]" -0xfff7: "[?]" -0xfff8: "[?]" -0xfff9: "{" -0xfffa: "|" -0xfffb: "}" -0xfffc: "" -0xfffd: "" -0xfffe: "" -0xffff: "" diff --git a/vendor/github.com/gosimple/unidecode/unidecode.go b/vendor/github.com/gosimple/unidecode/unidecode.go deleted file mode 100644 index bc5f8a10..00000000 --- a/vendor/github.com/gosimple/unidecode/unidecode.go +++ /dev/null @@ -1,58 +0,0 @@ -// Package unidecode implements a unicode transliterator -// which replaces non-ASCII characters with their ASCII -// approximations. -package unidecode - -//go:generate go run make_table.go - -import ( - "sync" - "unicode" -) - -const pooledCapacity = 64 - -var ( - slicePool sync.Pool - decodingOnce sync.Once -) - -// Unidecode implements a unicode transliterator, which -// replaces non-ASCII characters with their ASCII -// counterparts. -// Given an unicode encoded string, returns -// another string with non-ASCII characters replaced -// with their closest ASCII counterparts. -// e.g. Unicode("áéíóú") => "aeiou" -func Unidecode(s string) string { - decodingOnce.Do(decodeTransliterations) - l := len(s) - var r []rune - if l > pooledCapacity { - r = make([]rune, 0, len(s)) - } else { - if x := slicePool.Get(); x != nil { - r = x.([]rune)[:0] - } else { - r = make([]rune, 0, pooledCapacity) - } - } - for _, c := range s { - if c <= unicode.MaxASCII { - r = append(r, c) - continue - } - if c > unicode.MaxRune || c >= transCount { - /* Ignore reserved chars */ - continue - } - if d := transliterations[c]; d != nil { - r = append(r, d...) - } - } - res := string(r) - if l <= pooledCapacity { - slicePool.Put(r) - } - return res -} diff --git a/vendor/github.com/pmezard/go-difflib/LICENSE b/vendor/github.com/pmezard/go-difflib/LICENSE deleted file mode 100644 index c67dad61..00000000 --- a/vendor/github.com/pmezard/go-difflib/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013, Patrick Mezard -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - The names of its contributors may not 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 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go b/vendor/github.com/pmezard/go-difflib/difflib/difflib.go deleted file mode 100644 index 003e99fa..00000000 --- a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go +++ /dev/null @@ -1,772 +0,0 @@ -// Package difflib is a partial port of Python difflib module. -// -// It provides tools to compare sequences of strings and generate textual diffs. -// -// The following class and functions have been ported: -// -// - SequenceMatcher -// -// - unified_diff -// -// - context_diff -// -// Getting unified diffs was the main goal of the port. Keep in mind this code -// is mostly suitable to output text differences in a human friendly way, there -// are no guarantees generated diffs are consumable by patch(1). -package difflib - -import ( - "bufio" - "bytes" - "fmt" - "io" - "strings" -) - -func min(a, b int) int { - if a < b { - return a - } - return b -} - -func max(a, b int) int { - if a > b { - return a - } - return b -} - -func calculateRatio(matches, length int) float64 { - if length > 0 { - return 2.0 * float64(matches) / float64(length) - } - return 1.0 -} - -type Match struct { - A int - B int - Size int -} - -type OpCode struct { - Tag byte - I1 int - I2 int - J1 int - J2 int -} - -// SequenceMatcher compares sequence of strings. The basic -// algorithm predates, and is a little fancier than, an algorithm -// published in the late 1980's by Ratcliff and Obershelp under the -// hyperbolic name "gestalt pattern matching". The basic idea is to find -// the longest contiguous matching subsequence that contains no "junk" -// elements (R-O doesn't address junk). The same idea is then applied -// recursively to the pieces of the sequences to the left and to the right -// of the matching subsequence. This does not yield minimal edit -// sequences, but does tend to yield matches that "look right" to people. -// -// SequenceMatcher tries to compute a "human-friendly diff" between two -// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the -// longest *contiguous* & junk-free matching subsequence. That's what -// catches peoples' eyes. The Windows(tm) windiff has another interesting -// notion, pairing up elements that appear uniquely in each sequence. -// That, and the method here, appear to yield more intuitive difference -// reports than does diff. This method appears to be the least vulnerable -// to synching up on blocks of "junk lines", though (like blank lines in -// ordinary text files, or maybe "

" lines in HTML files). That may be -// because this is the only method of the 3 that has a *concept* of -// "junk" . -// -// Timing: Basic R-O is cubic time worst case and quadratic time expected -// case. SequenceMatcher is quadratic time for the worst case and has -// expected-case behavior dependent in a complicated way on how many -// elements the sequences have in common; best case time is linear. -type SequenceMatcher struct { - a []string - b []string - b2j map[string][]int - IsJunk func(string) bool - autoJunk bool - bJunk map[string]struct{} - matchingBlocks []Match - fullBCount map[string]int - bPopular map[string]struct{} - opCodes []OpCode -} - -func NewMatcher(a, b []string) *SequenceMatcher { - m := SequenceMatcher{autoJunk: true} - m.SetSeqs(a, b) - return &m -} - -func NewMatcherWithJunk(a, b []string, autoJunk bool, - isJunk func(string) bool) *SequenceMatcher { - - m := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk} - m.SetSeqs(a, b) - return &m -} - -// Set two sequences to be compared. -func (m *SequenceMatcher) SetSeqs(a, b []string) { - m.SetSeq1(a) - m.SetSeq2(b) -} - -// Set the first sequence to be compared. The second sequence to be compared is -// not changed. -// -// SequenceMatcher computes and caches detailed information about the second -// sequence, so if you want to compare one sequence S against many sequences, -// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other -// sequences. -// -// See also SetSeqs() and SetSeq2(). -func (m *SequenceMatcher) SetSeq1(a []string) { - if &a == &m.a { - return - } - m.a = a - m.matchingBlocks = nil - m.opCodes = nil -} - -// Set the second sequence to be compared. The first sequence to be compared is -// not changed. -func (m *SequenceMatcher) SetSeq2(b []string) { - if &b == &m.b { - return - } - m.b = b - m.matchingBlocks = nil - m.opCodes = nil - m.fullBCount = nil - m.chainB() -} - -func (m *SequenceMatcher) chainB() { - // Populate line -> index mapping - b2j := map[string][]int{} - for i, s := range m.b { - indices := b2j[s] - indices = append(indices, i) - b2j[s] = indices - } - - // Purge junk elements - m.bJunk = map[string]struct{}{} - if m.IsJunk != nil { - junk := m.bJunk - for s, _ := range b2j { - if m.IsJunk(s) { - junk[s] = struct{}{} - } - } - for s, _ := range junk { - delete(b2j, s) - } - } - - // Purge remaining popular elements - popular := map[string]struct{}{} - n := len(m.b) - if m.autoJunk && n >= 200 { - ntest := n/100 + 1 - for s, indices := range b2j { - if len(indices) > ntest { - popular[s] = struct{}{} - } - } - for s, _ := range popular { - delete(b2j, s) - } - } - m.bPopular = popular - m.b2j = b2j -} - -func (m *SequenceMatcher) isBJunk(s string) bool { - _, ok := m.bJunk[s] - return ok -} - -// Find longest matching block in a[alo:ahi] and b[blo:bhi]. -// -// If IsJunk is not defined: -// -// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where -// alo <= i <= i+k <= ahi -// blo <= j <= j+k <= bhi -// and for all (i',j',k') meeting those conditions, -// k >= k' -// i <= i' -// and if i == i', j <= j' -// -// In other words, of all maximal matching blocks, return one that -// starts earliest in a, and of all those maximal matching blocks that -// start earliest in a, return the one that starts earliest in b. -// -// If IsJunk is defined, first the longest matching block is -// determined as above, but with the additional restriction that no -// junk element appears in the block. Then that block is extended as -// far as possible by matching (only) junk elements on both sides. So -// the resulting block never matches on junk except as identical junk -// happens to be adjacent to an "interesting" match. -// -// If no blocks match, return (alo, blo, 0). -func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match { - // CAUTION: stripping common prefix or suffix would be incorrect. - // E.g., - // ab - // acab - // Longest matching block is "ab", but if common prefix is - // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so - // strip, so ends up claiming that ab is changed to acab by - // inserting "ca" in the middle. That's minimal but unintuitive: - // "it's obvious" that someone inserted "ac" at the front. - // Windiff ends up at the same place as diff, but by pairing up - // the unique 'b's and then matching the first two 'a's. - besti, bestj, bestsize := alo, blo, 0 - - // find longest junk-free match - // during an iteration of the loop, j2len[j] = length of longest - // junk-free match ending with a[i-1] and b[j] - j2len := map[int]int{} - for i := alo; i != ahi; i++ { - // look at all instances of a[i] in b; note that because - // b2j has no junk keys, the loop is skipped if a[i] is junk - newj2len := map[int]int{} - for _, j := range m.b2j[m.a[i]] { - // a[i] matches b[j] - if j < blo { - continue - } - if j >= bhi { - break - } - k := j2len[j-1] + 1 - newj2len[j] = k - if k > bestsize { - besti, bestj, bestsize = i-k+1, j-k+1, k - } - } - j2len = newj2len - } - - // Extend the best by non-junk elements on each end. In particular, - // "popular" non-junk elements aren't in b2j, which greatly speeds - // the inner loop above, but also means "the best" match so far - // doesn't contain any junk *or* popular non-junk elements. - for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) && - m.a[besti-1] == m.b[bestj-1] { - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - } - for besti+bestsize < ahi && bestj+bestsize < bhi && - !m.isBJunk(m.b[bestj+bestsize]) && - m.a[besti+bestsize] == m.b[bestj+bestsize] { - bestsize += 1 - } - - // Now that we have a wholly interesting match (albeit possibly - // empty!), we may as well suck up the matching junk on each - // side of it too. Can't think of a good reason not to, and it - // saves post-processing the (possibly considerable) expense of - // figuring out what to do with it. In the case of an empty - // interesting match, this is clearly the right thing to do, - // because no other kind of match is possible in the regions. - for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) && - m.a[besti-1] == m.b[bestj-1] { - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - } - for besti+bestsize < ahi && bestj+bestsize < bhi && - m.isBJunk(m.b[bestj+bestsize]) && - m.a[besti+bestsize] == m.b[bestj+bestsize] { - bestsize += 1 - } - - return Match{A: besti, B: bestj, Size: bestsize} -} - -// Return list of triples describing matching subsequences. -// -// Each triple is of the form (i, j, n), and means that -// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in -// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are -// adjacent triples in the list, and the second is not the last triple in the -// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe -// adjacent equal blocks. -// -// The last triple is a dummy, (len(a), len(b), 0), and is the only -// triple with n==0. -func (m *SequenceMatcher) GetMatchingBlocks() []Match { - if m.matchingBlocks != nil { - return m.matchingBlocks - } - - var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match - matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match { - match := m.findLongestMatch(alo, ahi, blo, bhi) - i, j, k := match.A, match.B, match.Size - if match.Size > 0 { - if alo < i && blo < j { - matched = matchBlocks(alo, i, blo, j, matched) - } - matched = append(matched, match) - if i+k < ahi && j+k < bhi { - matched = matchBlocks(i+k, ahi, j+k, bhi, matched) - } - } - return matched - } - matched := matchBlocks(0, len(m.a), 0, len(m.b), nil) - - // It's possible that we have adjacent equal blocks in the - // matching_blocks list now. - nonAdjacent := []Match{} - i1, j1, k1 := 0, 0, 0 - for _, b := range matched { - // Is this block adjacent to i1, j1, k1? - i2, j2, k2 := b.A, b.B, b.Size - if i1+k1 == i2 && j1+k1 == j2 { - // Yes, so collapse them -- this just increases the length of - // the first block by the length of the second, and the first - // block so lengthened remains the block to compare against. - k1 += k2 - } else { - // Not adjacent. Remember the first block (k1==0 means it's - // the dummy we started with), and make the second block the - // new block to compare against. - if k1 > 0 { - nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) - } - i1, j1, k1 = i2, j2, k2 - } - } - if k1 > 0 { - nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) - } - - nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0}) - m.matchingBlocks = nonAdjacent - return m.matchingBlocks -} - -// Return list of 5-tuples describing how to turn a into b. -// -// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple -// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the -// tuple preceding it, and likewise for j1 == the previous j2. -// -// The tags are characters, with these meanings: -// -// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2] -// -// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case. -// -// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case. -// -// 'e' (equal): a[i1:i2] == b[j1:j2] -func (m *SequenceMatcher) GetOpCodes() []OpCode { - if m.opCodes != nil { - return m.opCodes - } - i, j := 0, 0 - matching := m.GetMatchingBlocks() - opCodes := make([]OpCode, 0, len(matching)) - for _, m := range matching { - // invariant: we've pumped out correct diffs to change - // a[:i] into b[:j], and the next matching block is - // a[ai:ai+size] == b[bj:bj+size]. So we need to pump - // out a diff to change a[i:ai] into b[j:bj], pump out - // the matching block, and move (i,j) beyond the match - ai, bj, size := m.A, m.B, m.Size - tag := byte(0) - if i < ai && j < bj { - tag = 'r' - } else if i < ai { - tag = 'd' - } else if j < bj { - tag = 'i' - } - if tag > 0 { - opCodes = append(opCodes, OpCode{tag, i, ai, j, bj}) - } - i, j = ai+size, bj+size - // the list of matching blocks is terminated by a - // sentinel with size 0 - if size > 0 { - opCodes = append(opCodes, OpCode{'e', ai, i, bj, j}) - } - } - m.opCodes = opCodes - return m.opCodes -} - -// Isolate change clusters by eliminating ranges with no changes. -// -// Return a generator of groups with up to n lines of context. -// Each group is in the same format as returned by GetOpCodes(). -func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode { - if n < 0 { - n = 3 - } - codes := m.GetOpCodes() - if len(codes) == 0 { - codes = []OpCode{OpCode{'e', 0, 1, 0, 1}} - } - // Fixup leading and trailing groups if they show no changes. - if codes[0].Tag == 'e' { - c := codes[0] - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2} - } - if codes[len(codes)-1].Tag == 'e' { - c := codes[len(codes)-1] - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)} - } - nn := n + n - groups := [][]OpCode{} - group := []OpCode{} - for _, c := range codes { - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - // End the current group and start a new one whenever - // there is a large range with no changes. - if c.Tag == 'e' && i2-i1 > nn { - group = append(group, OpCode{c.Tag, i1, min(i2, i1+n), - j1, min(j2, j1+n)}) - groups = append(groups, group) - group = []OpCode{} - i1, j1 = max(i1, i2-n), max(j1, j2-n) - } - group = append(group, OpCode{c.Tag, i1, i2, j1, j2}) - } - if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') { - groups = append(groups, group) - } - return groups -} - -// Return a measure of the sequences' similarity (float in [0,1]). -// -// Where T is the total number of elements in both sequences, and -// M is the number of matches, this is 2.0*M / T. -// Note that this is 1 if the sequences are identical, and 0 if -// they have nothing in common. -// -// .Ratio() is expensive to compute if you haven't already computed -// .GetMatchingBlocks() or .GetOpCodes(), in which case you may -// want to try .QuickRatio() or .RealQuickRation() first to get an -// upper bound. -func (m *SequenceMatcher) Ratio() float64 { - matches := 0 - for _, m := range m.GetMatchingBlocks() { - matches += m.Size - } - return calculateRatio(matches, len(m.a)+len(m.b)) -} - -// Return an upper bound on ratio() relatively quickly. -// -// This isn't defined beyond that it is an upper bound on .Ratio(), and -// is faster to compute. -func (m *SequenceMatcher) QuickRatio() float64 { - // viewing a and b as multisets, set matches to the cardinality - // of their intersection; this counts the number of matches - // without regard to order, so is clearly an upper bound - if m.fullBCount == nil { - m.fullBCount = map[string]int{} - for _, s := range m.b { - m.fullBCount[s] = m.fullBCount[s] + 1 - } - } - - // avail[x] is the number of times x appears in 'b' less the - // number of times we've seen it in 'a' so far ... kinda - avail := map[string]int{} - matches := 0 - for _, s := range m.a { - n, ok := avail[s] - if !ok { - n = m.fullBCount[s] - } - avail[s] = n - 1 - if n > 0 { - matches += 1 - } - } - return calculateRatio(matches, len(m.a)+len(m.b)) -} - -// Return an upper bound on ratio() very quickly. -// -// This isn't defined beyond that it is an upper bound on .Ratio(), and -// is faster to compute than either .Ratio() or .QuickRatio(). -func (m *SequenceMatcher) RealQuickRatio() float64 { - la, lb := len(m.a), len(m.b) - return calculateRatio(min(la, lb), la+lb) -} - -// Convert range to the "ed" format -func formatRangeUnified(start, stop int) string { - // Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning := start + 1 // lines start numbering with one - length := stop - start - if length == 1 { - return fmt.Sprintf("%d", beginning) - } - if length == 0 { - beginning -= 1 // empty ranges begin at line just before the range - } - return fmt.Sprintf("%d,%d", beginning, length) -} - -// Unified diff parameters -type UnifiedDiff struct { - A []string // First sequence lines - FromFile string // First file name - FromDate string // First file time - B []string // Second sequence lines - ToFile string // Second file name - ToDate string // Second file time - Eol string // Headers end of line, defaults to LF - Context int // Number of context lines -} - -// Compare two sequences of lines; generate the delta as a unified diff. -// -// Unified diffs are a compact way of showing line changes and a few -// lines of context. The number of context lines is set by 'n' which -// defaults to three. -// -// By default, the diff control lines (those with ---, +++, or @@) are -// created with a trailing newline. This is helpful so that inputs -// created from file.readlines() result in diffs that are suitable for -// file.writelines() since both the inputs and outputs have trailing -// newlines. -// -// For inputs that do not have trailing newlines, set the lineterm -// argument to "" so that the output will be uniformly newline free. -// -// The unidiff format normally has a header for filenames and modification -// times. Any or all of these may be specified using strings for -// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. -// The modification times are normally expressed in the ISO 8601 format. -func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error { - buf := bufio.NewWriter(writer) - defer buf.Flush() - wf := func(format string, args ...interface{}) error { - _, err := buf.WriteString(fmt.Sprintf(format, args...)) - return err - } - ws := func(s string) error { - _, err := buf.WriteString(s) - return err - } - - if len(diff.Eol) == 0 { - diff.Eol = "\n" - } - - started := false - m := NewMatcher(diff.A, diff.B) - for _, g := range m.GetGroupedOpCodes(diff.Context) { - if !started { - started = true - fromDate := "" - if len(diff.FromDate) > 0 { - fromDate = "\t" + diff.FromDate - } - toDate := "" - if len(diff.ToDate) > 0 { - toDate = "\t" + diff.ToDate - } - if diff.FromFile != "" || diff.ToFile != "" { - err := wf("--- %s%s%s", diff.FromFile, fromDate, diff.Eol) - if err != nil { - return err - } - err = wf("+++ %s%s%s", diff.ToFile, toDate, diff.Eol) - if err != nil { - return err - } - } - } - first, last := g[0], g[len(g)-1] - range1 := formatRangeUnified(first.I1, last.I2) - range2 := formatRangeUnified(first.J1, last.J2) - if err := wf("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil { - return err - } - for _, c := range g { - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - if c.Tag == 'e' { - for _, line := range diff.A[i1:i2] { - if err := ws(" " + line); err != nil { - return err - } - } - continue - } - if c.Tag == 'r' || c.Tag == 'd' { - for _, line := range diff.A[i1:i2] { - if err := ws("-" + line); err != nil { - return err - } - } - } - if c.Tag == 'r' || c.Tag == 'i' { - for _, line := range diff.B[j1:j2] { - if err := ws("+" + line); err != nil { - return err - } - } - } - } - } - return nil -} - -// Like WriteUnifiedDiff but returns the diff a string. -func GetUnifiedDiffString(diff UnifiedDiff) (string, error) { - w := &bytes.Buffer{} - err := WriteUnifiedDiff(w, diff) - return string(w.Bytes()), err -} - -// Convert range to the "ed" format. -func formatRangeContext(start, stop int) string { - // Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning := start + 1 // lines start numbering with one - length := stop - start - if length == 0 { - beginning -= 1 // empty ranges begin at line just before the range - } - if length <= 1 { - return fmt.Sprintf("%d", beginning) - } - return fmt.Sprintf("%d,%d", beginning, beginning+length-1) -} - -type ContextDiff UnifiedDiff - -// Compare two sequences of lines; generate the delta as a context diff. -// -// Context diffs are a compact way of showing line changes and a few -// lines of context. The number of context lines is set by diff.Context -// which defaults to three. -// -// By default, the diff control lines (those with *** or ---) are -// created with a trailing newline. -// -// For inputs that do not have trailing newlines, set the diff.Eol -// argument to "" so that the output will be uniformly newline free. -// -// The context diff format normally has a header for filenames and -// modification times. Any or all of these may be specified using -// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate. -// The modification times are normally expressed in the ISO 8601 format. -// If not specified, the strings default to blanks. -func WriteContextDiff(writer io.Writer, diff ContextDiff) error { - buf := bufio.NewWriter(writer) - defer buf.Flush() - var diffErr error - wf := func(format string, args ...interface{}) { - _, err := buf.WriteString(fmt.Sprintf(format, args...)) - if diffErr == nil && err != nil { - diffErr = err - } - } - ws := func(s string) { - _, err := buf.WriteString(s) - if diffErr == nil && err != nil { - diffErr = err - } - } - - if len(diff.Eol) == 0 { - diff.Eol = "\n" - } - - prefix := map[byte]string{ - 'i': "+ ", - 'd': "- ", - 'r': "! ", - 'e': " ", - } - - started := false - m := NewMatcher(diff.A, diff.B) - for _, g := range m.GetGroupedOpCodes(diff.Context) { - if !started { - started = true - fromDate := "" - if len(diff.FromDate) > 0 { - fromDate = "\t" + diff.FromDate - } - toDate := "" - if len(diff.ToDate) > 0 { - toDate = "\t" + diff.ToDate - } - if diff.FromFile != "" || diff.ToFile != "" { - wf("*** %s%s%s", diff.FromFile, fromDate, diff.Eol) - wf("--- %s%s%s", diff.ToFile, toDate, diff.Eol) - } - } - - first, last := g[0], g[len(g)-1] - ws("***************" + diff.Eol) - - range1 := formatRangeContext(first.I1, last.I2) - wf("*** %s ****%s", range1, diff.Eol) - for _, c := range g { - if c.Tag == 'r' || c.Tag == 'd' { - for _, cc := range g { - if cc.Tag == 'i' { - continue - } - for _, line := range diff.A[cc.I1:cc.I2] { - ws(prefix[cc.Tag] + line) - } - } - break - } - } - - range2 := formatRangeContext(first.J1, last.J2) - wf("--- %s ----%s", range2, diff.Eol) - for _, c := range g { - if c.Tag == 'r' || c.Tag == 'i' { - for _, cc := range g { - if cc.Tag == 'd' { - continue - } - for _, line := range diff.B[cc.J1:cc.J2] { - ws(prefix[cc.Tag] + line) - } - } - break - } - } - } - return diffErr -} - -// Like WriteContextDiff but returns the diff a string. -func GetContextDiffString(diff ContextDiff) (string, error) { - w := &bytes.Buffer{} - err := WriteContextDiff(w, diff) - return string(w.Bytes()), err -} - -// Split a string on "\n" while preserving them. The output can be used -// as input for UnifiedDiff and ContextDiff structures. -func SplitLines(s string) []string { - lines := strings.SplitAfter(s, "\n") - lines[len(lines)-1] += "\n" - return lines -} diff --git a/vendor/github.com/stretchr/testify/LICENSE b/vendor/github.com/stretchr/testify/LICENSE deleted file mode 100644 index 4b0421cf..00000000 --- a/vendor/github.com/stretchr/testify/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. - -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/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go deleted file mode 100644 index 41649d26..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ /dev/null @@ -1,394 +0,0 @@ -package assert - -import ( - "fmt" - "reflect" -) - -type CompareType int - -const ( - compareLess CompareType = iota - 1 - compareEqual - compareGreater -) - -var ( - intType = reflect.TypeOf(int(1)) - int8Type = reflect.TypeOf(int8(1)) - int16Type = reflect.TypeOf(int16(1)) - int32Type = reflect.TypeOf(int32(1)) - int64Type = reflect.TypeOf(int64(1)) - - uintType = reflect.TypeOf(uint(1)) - uint8Type = reflect.TypeOf(uint8(1)) - uint16Type = reflect.TypeOf(uint16(1)) - uint32Type = reflect.TypeOf(uint32(1)) - uint64Type = reflect.TypeOf(uint64(1)) - - float32Type = reflect.TypeOf(float32(1)) - float64Type = reflect.TypeOf(float64(1)) - - stringType = reflect.TypeOf("") -) - -func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { - obj1Value := reflect.ValueOf(obj1) - obj2Value := reflect.ValueOf(obj2) - - // throughout this switch we try and avoid calling .Convert() if possible, - // as this has a pretty big performance impact - switch kind { - case reflect.Int: - { - intobj1, ok := obj1.(int) - if !ok { - intobj1 = obj1Value.Convert(intType).Interface().(int) - } - intobj2, ok := obj2.(int) - if !ok { - intobj2 = obj2Value.Convert(intType).Interface().(int) - } - if intobj1 > intobj2 { - return compareGreater, true - } - if intobj1 == intobj2 { - return compareEqual, true - } - if intobj1 < intobj2 { - return compareLess, true - } - } - case reflect.Int8: - { - int8obj1, ok := obj1.(int8) - if !ok { - int8obj1 = obj1Value.Convert(int8Type).Interface().(int8) - } - int8obj2, ok := obj2.(int8) - if !ok { - int8obj2 = obj2Value.Convert(int8Type).Interface().(int8) - } - if int8obj1 > int8obj2 { - return compareGreater, true - } - if int8obj1 == int8obj2 { - return compareEqual, true - } - if int8obj1 < int8obj2 { - return compareLess, true - } - } - case reflect.Int16: - { - int16obj1, ok := obj1.(int16) - if !ok { - int16obj1 = obj1Value.Convert(int16Type).Interface().(int16) - } - int16obj2, ok := obj2.(int16) - if !ok { - int16obj2 = obj2Value.Convert(int16Type).Interface().(int16) - } - if int16obj1 > int16obj2 { - return compareGreater, true - } - if int16obj1 == int16obj2 { - return compareEqual, true - } - if int16obj1 < int16obj2 { - return compareLess, true - } - } - case reflect.Int32: - { - int32obj1, ok := obj1.(int32) - if !ok { - int32obj1 = obj1Value.Convert(int32Type).Interface().(int32) - } - int32obj2, ok := obj2.(int32) - if !ok { - int32obj2 = obj2Value.Convert(int32Type).Interface().(int32) - } - if int32obj1 > int32obj2 { - return compareGreater, true - } - if int32obj1 == int32obj2 { - return compareEqual, true - } - if int32obj1 < int32obj2 { - return compareLess, true - } - } - case reflect.Int64: - { - int64obj1, ok := obj1.(int64) - if !ok { - int64obj1 = obj1Value.Convert(int64Type).Interface().(int64) - } - int64obj2, ok := obj2.(int64) - if !ok { - int64obj2 = obj2Value.Convert(int64Type).Interface().(int64) - } - if int64obj1 > int64obj2 { - return compareGreater, true - } - if int64obj1 == int64obj2 { - return compareEqual, true - } - if int64obj1 < int64obj2 { - return compareLess, true - } - } - case reflect.Uint: - { - uintobj1, ok := obj1.(uint) - if !ok { - uintobj1 = obj1Value.Convert(uintType).Interface().(uint) - } - uintobj2, ok := obj2.(uint) - if !ok { - uintobj2 = obj2Value.Convert(uintType).Interface().(uint) - } - if uintobj1 > uintobj2 { - return compareGreater, true - } - if uintobj1 == uintobj2 { - return compareEqual, true - } - if uintobj1 < uintobj2 { - return compareLess, true - } - } - case reflect.Uint8: - { - uint8obj1, ok := obj1.(uint8) - if !ok { - uint8obj1 = obj1Value.Convert(uint8Type).Interface().(uint8) - } - uint8obj2, ok := obj2.(uint8) - if !ok { - uint8obj2 = obj2Value.Convert(uint8Type).Interface().(uint8) - } - if uint8obj1 > uint8obj2 { - return compareGreater, true - } - if uint8obj1 == uint8obj2 { - return compareEqual, true - } - if uint8obj1 < uint8obj2 { - return compareLess, true - } - } - case reflect.Uint16: - { - uint16obj1, ok := obj1.(uint16) - if !ok { - uint16obj1 = obj1Value.Convert(uint16Type).Interface().(uint16) - } - uint16obj2, ok := obj2.(uint16) - if !ok { - uint16obj2 = obj2Value.Convert(uint16Type).Interface().(uint16) - } - if uint16obj1 > uint16obj2 { - return compareGreater, true - } - if uint16obj1 == uint16obj2 { - return compareEqual, true - } - if uint16obj1 < uint16obj2 { - return compareLess, true - } - } - case reflect.Uint32: - { - uint32obj1, ok := obj1.(uint32) - if !ok { - uint32obj1 = obj1Value.Convert(uint32Type).Interface().(uint32) - } - uint32obj2, ok := obj2.(uint32) - if !ok { - uint32obj2 = obj2Value.Convert(uint32Type).Interface().(uint32) - } - if uint32obj1 > uint32obj2 { - return compareGreater, true - } - if uint32obj1 == uint32obj2 { - return compareEqual, true - } - if uint32obj1 < uint32obj2 { - return compareLess, true - } - } - case reflect.Uint64: - { - uint64obj1, ok := obj1.(uint64) - if !ok { - uint64obj1 = obj1Value.Convert(uint64Type).Interface().(uint64) - } - uint64obj2, ok := obj2.(uint64) - if !ok { - uint64obj2 = obj2Value.Convert(uint64Type).Interface().(uint64) - } - if uint64obj1 > uint64obj2 { - return compareGreater, true - } - if uint64obj1 == uint64obj2 { - return compareEqual, true - } - if uint64obj1 < uint64obj2 { - return compareLess, true - } - } - case reflect.Float32: - { - float32obj1, ok := obj1.(float32) - if !ok { - float32obj1 = obj1Value.Convert(float32Type).Interface().(float32) - } - float32obj2, ok := obj2.(float32) - if !ok { - float32obj2 = obj2Value.Convert(float32Type).Interface().(float32) - } - if float32obj1 > float32obj2 { - return compareGreater, true - } - if float32obj1 == float32obj2 { - return compareEqual, true - } - if float32obj1 < float32obj2 { - return compareLess, true - } - } - case reflect.Float64: - { - float64obj1, ok := obj1.(float64) - if !ok { - float64obj1 = obj1Value.Convert(float64Type).Interface().(float64) - } - float64obj2, ok := obj2.(float64) - if !ok { - float64obj2 = obj2Value.Convert(float64Type).Interface().(float64) - } - if float64obj1 > float64obj2 { - return compareGreater, true - } - if float64obj1 == float64obj2 { - return compareEqual, true - } - if float64obj1 < float64obj2 { - return compareLess, true - } - } - case reflect.String: - { - stringobj1, ok := obj1.(string) - if !ok { - stringobj1 = obj1Value.Convert(stringType).Interface().(string) - } - stringobj2, ok := obj2.(string) - if !ok { - stringobj2 = obj2Value.Convert(stringType).Interface().(string) - } - if stringobj1 > stringobj2 { - return compareGreater, true - } - if stringobj1 == stringobj2 { - return compareEqual, true - } - if stringobj1 < stringobj2 { - return compareLess, true - } - } - } - - return compareEqual, false -} - -// Greater asserts that the first element is greater than the second -// -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") -func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - return compareTwoValues(t, e1, e2, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs) -} - -// GreaterOrEqual asserts that the first element is greater than or equal to the second -// -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") -func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - return compareTwoValues(t, e1, e2, []CompareType{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs) -} - -// Less asserts that the first element is less than the second -// -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") -func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - return compareTwoValues(t, e1, e2, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs) -} - -// LessOrEqual asserts that the first element is less than or equal to the second -// -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") -func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs) -} - -// Positive asserts that the specified element is positive -// -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) -func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { - zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs) -} - -// Negative asserts that the specified element is negative -// -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) -func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { - zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs) -} - -func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - e1Kind := reflect.ValueOf(e1).Kind() - e2Kind := reflect.ValueOf(e2).Kind() - if e1Kind != e2Kind { - return Fail(t, "Elements should be the same type", msgAndArgs...) - } - - compareResult, isComparable := compare(e1, e2, e1Kind) - if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) - } - - if !containsValue(allowedComparesResults, compareResult) { - return Fail(t, fmt.Sprintf(failMessage, e1, e2), msgAndArgs...) - } - - return true -} - -func containsValue(values []CompareType, value CompareType) bool { - for _, v := range values { - if v == value { - return true - } - } - - return false -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go deleted file mode 100644 index 4dfd1229..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ /dev/null @@ -1,741 +0,0 @@ -/* -* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen -* THIS FILE MUST NOT BE EDITED BY HAND - */ - -package assert - -import ( - http "net/http" - url "net/url" - time "time" -) - -// Conditionf uses a Comparison to assert a complex condition. -func Conditionf(t TestingT, comp Comparison, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Condition(t, comp, append([]interface{}{msg}, args...)...) -} - -// Containsf asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") -func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Contains(t, s, contains, append([]interface{}{msg}, args...)...) -} - -// DirExistsf checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func DirExistsf(t TestingT, path string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return DirExists(t, path, append([]interface{}{msg}, args...)...) -} - -// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") -func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) -} - -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// assert.Emptyf(t, obj, "error message %s", "formatted") -func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Empty(t, object, append([]interface{}{msg}, args...)...) -} - -// Equalf asserts that two objects are equal. -// -// assert.Equalf(t, 123, 123, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Equal(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// EqualErrorf asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") -func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return EqualError(t, theError, errString, append([]interface{}{msg}, args...)...) -} - -// EqualValuesf asserts that two objects are equal or convertable to the same types -// and equal. -// -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") -func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return EqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// Errorf asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } -func Errorf(t TestingT, err error, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Error(t, err, append([]interface{}{msg}, args...)...) -} - -// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return ErrorAs(t, err, target, append([]interface{}{msg}, args...)...) -} - -// ErrorIsf asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return ErrorIs(t, err, target, append([]interface{}{msg}, args...)...) -} - -// Eventuallyf asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Eventually(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...) -} - -// Exactlyf asserts that two objects are equal in value and type. -// -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") -func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Exactly(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// Failf reports a failure through -func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, failureMessage, append([]interface{}{msg}, args...)...) -} - -// FailNowf fails test -func FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return FailNow(t, failureMessage, append([]interface{}{msg}, args...)...) -} - -// Falsef asserts that the specified value is false. -// -// assert.Falsef(t, myBool, "error message %s", "formatted") -func Falsef(t TestingT, value bool, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return False(t, value, append([]interface{}{msg}, args...)...) -} - -// FileExistsf checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return FileExists(t, path, append([]interface{}{msg}, args...)...) -} - -// Greaterf asserts that the first element is greater than the second -// -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") -func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Greater(t, e1, e2, append([]interface{}{msg}, args...)...) -} - -// GreaterOrEqualf asserts that the first element is greater than or equal to the second -// -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") -func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return GreaterOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...) -} - -// HTTPBodyContainsf asserts that a specified handler returns a -// body that contains a string. -// -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPBodyContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...) -} - -// HTTPBodyNotContainsf asserts that a specified handler returns a -// body that does not contain a string. -// -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPBodyNotContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...) -} - -// HTTPErrorf asserts that a specified handler returns an error status code. -// -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPError(t, handler, method, url, values, append([]interface{}{msg}, args...)...) -} - -// HTTPRedirectf asserts that a specified handler returns a redirect status code. -// -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPRedirect(t, handler, method, url, values, append([]interface{}{msg}, args...)...) -} - -// HTTPStatusCodef asserts that a specified handler returns a specified status code. -// -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPStatusCode(t, handler, method, url, values, statuscode, append([]interface{}{msg}, args...)...) -} - -// HTTPSuccessf asserts that a specified handler returns a success status code. -// -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return HTTPSuccess(t, handler, method, url, values, append([]interface{}{msg}, args...)...) -} - -// Implementsf asserts that an object is implemented by the specified interface. -// -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") -func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Implements(t, interfaceObject, object, append([]interface{}{msg}, args...)...) -} - -// InDeltaf asserts that the two numerals are within delta of each other. -// -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") -func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return InDelta(t, expected, actual, delta, append([]interface{}{msg}, args...)...) -} - -// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return InDeltaMapValues(t, expected, actual, delta, append([]interface{}{msg}, args...)...) -} - -// InDeltaSlicef is the same as InDelta, except it compares two slices. -func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return InDeltaSlice(t, expected, actual, delta, append([]interface{}{msg}, args...)...) -} - -// InEpsilonf asserts that expected and actual have a relative error less than epsilon -func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return InEpsilon(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...) -} - -// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices. -func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...) -} - -// IsDecreasingf asserts that the collection is decreasing -// -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") -func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return IsDecreasing(t, object, append([]interface{}{msg}, args...)...) -} - -// IsIncreasingf asserts that the collection is increasing -// -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") -func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return IsIncreasing(t, object, append([]interface{}{msg}, args...)...) -} - -// IsNonDecreasingf asserts that the collection is not decreasing -// -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") -func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return IsNonDecreasing(t, object, append([]interface{}{msg}, args...)...) -} - -// IsNonIncreasingf asserts that the collection is not increasing -// -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") -func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...) -} - -// IsTypef asserts that the specified objects are of the same type. -func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return IsType(t, expectedType, object, append([]interface{}{msg}, args...)...) -} - -// JSONEqf asserts that two JSON strings are equivalent. -// -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") -func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return JSONEq(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// Lenf asserts that the specified object has specific length. -// Lenf also fails if the object has a type that len() not accept. -// -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") -func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Len(t, object, length, append([]interface{}{msg}, args...)...) -} - -// Lessf asserts that the first element is less than the second -// -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") -func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Less(t, e1, e2, append([]interface{}{msg}, args...)...) -} - -// LessOrEqualf asserts that the first element is less than or equal to the second -// -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") -func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return LessOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...) -} - -// Negativef asserts that the specified element is negative -// -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") -func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Negative(t, e, append([]interface{}{msg}, args...)...) -} - -// Neverf asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Never(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...) -} - -// Nilf asserts that the specified object is nil. -// -// assert.Nilf(t, err, "error message %s", "formatted") -func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Nil(t, object, append([]interface{}{msg}, args...)...) -} - -// NoDirExistsf checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NoDirExists(t, path, append([]interface{}{msg}, args...)...) -} - -// NoErrorf asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } -func NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NoError(t, err, append([]interface{}{msg}, args...)...) -} - -// NoFileExistsf checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NoFileExists(t, path, append([]interface{}{msg}, args...)...) -} - -// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") -func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotContains(t, s, contains, append([]interface{}{msg}, args...)...) -} - -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } -func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotEmpty(t, object, append([]interface{}{msg}, args...)...) -} - -// NotEqualf asserts that the specified values are NOT equal. -// -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotEqual(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// NotEqualValuesf asserts that two objects are not equal even when converted to the same type -// -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") -func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// NotErrorIsf asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotErrorIs(t, err, target, append([]interface{}{msg}, args...)...) -} - -// NotNilf asserts that the specified object is not nil. -// -// assert.NotNilf(t, err, "error message %s", "formatted") -func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotNil(t, object, append([]interface{}{msg}, args...)...) -} - -// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") -func NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotPanics(t, f, append([]interface{}{msg}, args...)...) -} - -// NotRegexpf asserts that a specified regexp does not match a string. -// -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") -func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotRegexp(t, rx, str, append([]interface{}{msg}, args...)...) -} - -// NotSamef asserts that two pointers do not reference the same object. -// -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotSame(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// NotSubsetf asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") -func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotSubset(t, list, subset, append([]interface{}{msg}, args...)...) -} - -// NotZerof asserts that i is not the zero value for its type. -func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return NotZero(t, i, append([]interface{}{msg}, args...)...) -} - -// Panicsf asserts that the code inside the specified PanicTestFunc panics. -// -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") -func Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Panics(t, f, append([]interface{}{msg}, args...)...) -} - -// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func PanicsWithErrorf(t TestingT, errString string, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return PanicsWithError(t, errString, f, append([]interface{}{msg}, args...)...) -} - -// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...) -} - -// Positivef asserts that the specified element is positive -// -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") -func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Positive(t, e, append([]interface{}{msg}, args...)...) -} - -// Regexpf asserts that a specified regexp matches a string. -// -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") -func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Regexp(t, rx, str, append([]interface{}{msg}, args...)...) -} - -// Samef asserts that two pointers reference the same object. -// -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func Samef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Same(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// Subsetf asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") -func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Subset(t, list, subset, append([]interface{}{msg}, args...)...) -} - -// Truef asserts that the specified value is true. -// -// assert.Truef(t, myBool, "error message %s", "formatted") -func Truef(t TestingT, value bool, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return True(t, value, append([]interface{}{msg}, args...)...) -} - -// WithinDurationf asserts that the two times are within duration delta of each other. -// -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") -func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return WithinDuration(t, expected, actual, delta, append([]interface{}{msg}, args...)...) -} - -// YAMLEqf asserts that two YAML strings are equivalent. -func YAMLEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return YAMLEq(t, expected, actual, append([]interface{}{msg}, args...)...) -} - -// Zerof asserts that i is the zero value for its type. -func Zerof(t TestingT, i interface{}, msg string, args ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Zero(t, i, append([]interface{}{msg}, args...)...) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl b/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl deleted file mode 100644 index d2bb0b81..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{.CommentFormat}} -func {{.DocInfo.Name}}f(t TestingT, {{.ParamsFormat}}) bool { - if h, ok := t.(tHelper); ok { h.Helper() } - return {{.DocInfo.Name}}(t, {{.ForwardedParamsFormat}}) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go deleted file mode 100644 index 25337a6f..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ /dev/null @@ -1,1470 +0,0 @@ -/* -* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen -* THIS FILE MUST NOT BE EDITED BY HAND - */ - -package assert - -import ( - http "net/http" - url "net/url" - time "time" -) - -// Condition uses a Comparison to assert a complex condition. -func (a *Assertions) Condition(comp Comparison, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Condition(a.t, comp, msgAndArgs...) -} - -// Conditionf uses a Comparison to assert a complex condition. -func (a *Assertions) Conditionf(comp Comparison, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Conditionf(a.t, comp, msg, args...) -} - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// a.Contains("Hello World", "World") -// a.Contains(["Hello", "World"], "World") -// a.Contains({"Hello": "World"}, "Hello") -func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Contains(a.t, s, contains, msgAndArgs...) -} - -// Containsf asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// a.Containsf("Hello World", "World", "error message %s", "formatted") -// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") -// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") -func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Containsf(a.t, s, contains, msg, args...) -} - -// DirExists checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return DirExists(a.t, path, msgAndArgs...) -} - -// DirExistsf checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return DirExistsf(a.t, path, msg, args...) -} - -// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2]) -func (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ElementsMatch(a.t, listA, listB, msgAndArgs...) -} - -// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") -func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ElementsMatchf(a.t, listA, listB, msg, args...) -} - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// a.Empty(obj) -func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Empty(a.t, object, msgAndArgs...) -} - -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// a.Emptyf(obj, "error message %s", "formatted") -func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Emptyf(a.t, object, msg, args...) -} - -// Equal asserts that two objects are equal. -// -// a.Equal(123, 123) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Equal(a.t, expected, actual, msgAndArgs...) -} - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// a.EqualError(err, expectedErrorString) -func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return EqualError(a.t, theError, errString, msgAndArgs...) -} - -// EqualErrorf asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") -func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return EqualErrorf(a.t, theError, errString, msg, args...) -} - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// a.EqualValues(uint32(123), int32(123)) -func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return EqualValues(a.t, expected, actual, msgAndArgs...) -} - -// EqualValuesf asserts that two objects are equal or convertable to the same types -// and equal. -// -// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") -func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return EqualValuesf(a.t, expected, actual, msg, args...) -} - -// Equalf asserts that two objects are equal. -// -// a.Equalf(123, 123, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Equalf(a.t, expected, actual, msg, args...) -} - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } -func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Error(a.t, err, msgAndArgs...) -} - -// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ErrorAs(a.t, err, target, msgAndArgs...) -} - -// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ErrorAsf(a.t, err, target, msg, args...) -} - -// ErrorIs asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ErrorIs(a.t, err, target, msgAndArgs...) -} - -// ErrorIsf asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return ErrorIsf(a.t, err, target, msg, args...) -} - -// Errorf asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } -func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Errorf(a.t, err, msg, args...) -} - -// Eventually asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) -func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Eventually(a.t, condition, waitFor, tick, msgAndArgs...) -} - -// Eventuallyf asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Eventuallyf(a.t, condition, waitFor, tick, msg, args...) -} - -// Exactly asserts that two objects are equal in value and type. -// -// a.Exactly(int32(123), int64(123)) -func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Exactly(a.t, expected, actual, msgAndArgs...) -} - -// Exactlyf asserts that two objects are equal in value and type. -// -// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") -func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Exactlyf(a.t, expected, actual, msg, args...) -} - -// Fail reports a failure through -func (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Fail(a.t, failureMessage, msgAndArgs...) -} - -// FailNow fails test -func (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return FailNow(a.t, failureMessage, msgAndArgs...) -} - -// FailNowf fails test -func (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return FailNowf(a.t, failureMessage, msg, args...) -} - -// Failf reports a failure through -func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Failf(a.t, failureMessage, msg, args...) -} - -// False asserts that the specified value is false. -// -// a.False(myBool) -func (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return False(a.t, value, msgAndArgs...) -} - -// Falsef asserts that the specified value is false. -// -// a.Falsef(myBool, "error message %s", "formatted") -func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Falsef(a.t, value, msg, args...) -} - -// FileExists checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return FileExists(a.t, path, msgAndArgs...) -} - -// FileExistsf checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return FileExistsf(a.t, path, msg, args...) -} - -// Greater asserts that the first element is greater than the second -// -// a.Greater(2, 1) -// a.Greater(float64(2), float64(1)) -// a.Greater("b", "a") -func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Greater(a.t, e1, e2, msgAndArgs...) -} - -// GreaterOrEqual asserts that the first element is greater than or equal to the second -// -// a.GreaterOrEqual(2, 1) -// a.GreaterOrEqual(2, 2) -// a.GreaterOrEqual("b", "a") -// a.GreaterOrEqual("b", "b") -func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return GreaterOrEqual(a.t, e1, e2, msgAndArgs...) -} - -// GreaterOrEqualf asserts that the first element is greater than or equal to the second -// -// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") -// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") -// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") -// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") -func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return GreaterOrEqualf(a.t, e1, e2, msg, args...) -} - -// Greaterf asserts that the first element is greater than the second -// -// a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") -// a.Greaterf("b", "a", "error message %s", "formatted") -func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Greaterf(a.t, e1, e2, msg, args...) -} - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...) -} - -// HTTPBodyContainsf asserts that a specified handler returns a -// body that contains a string. -// -// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...) -} - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...) -} - -// HTTPBodyNotContainsf asserts that a specified handler returns a -// body that does not contain a string. -// -// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...) -} - -// HTTPError asserts that a specified handler returns an error status code. -// -// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPError(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPErrorf asserts that a specified handler returns an error status code. -// -// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPErrorf(a.t, handler, method, url, values, msg, args...) -} - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPRedirectf asserts that a specified handler returns a redirect status code. -// -// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPRedirectf(a.t, handler, method, url, values, msg, args...) -} - -// HTTPStatusCode asserts that a specified handler returns a specified status code. -// -// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...) -} - -// HTTPStatusCodef asserts that a specified handler returns a specified status code. -// -// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...) -} - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPSuccessf asserts that a specified handler returns a success status code. -// -// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return HTTPSuccessf(a.t, handler, method, url, values, msg, args...) -} - -// Implements asserts that an object is implemented by the specified interface. -// -// a.Implements((*MyInterface)(nil), new(MyObject)) -func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Implements(a.t, interfaceObject, object, msgAndArgs...) -} - -// Implementsf asserts that an object is implemented by the specified interface. -// -// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") -func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Implementsf(a.t, interfaceObject, object, msg, args...) -} - -// InDelta asserts that the two numerals are within delta of each other. -// -// a.InDelta(math.Pi, 22/7.0, 0.01) -func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDelta(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...) -} - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaSlicef is the same as InDelta, except it compares two slices. -func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDeltaSlicef(a.t, expected, actual, delta, msg, args...) -} - -// InDeltaf asserts that the two numerals are within delta of each other. -// -// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") -func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InDeltaf(a.t, expected, actual, delta, msg, args...) -} - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -func (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...) -} - -// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices. -func (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...) -} - -// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices. -func (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...) -} - -// InEpsilonf asserts that expected and actual have a relative error less than epsilon -func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return InEpsilonf(a.t, expected, actual, epsilon, msg, args...) -} - -// IsDecreasing asserts that the collection is decreasing -// -// a.IsDecreasing([]int{2, 1, 0}) -// a.IsDecreasing([]float{2, 1}) -// a.IsDecreasing([]string{"b", "a"}) -func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsDecreasing(a.t, object, msgAndArgs...) -} - -// IsDecreasingf asserts that the collection is decreasing -// -// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") -// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") -func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsDecreasingf(a.t, object, msg, args...) -} - -// IsIncreasing asserts that the collection is increasing -// -// a.IsIncreasing([]int{1, 2, 3}) -// a.IsIncreasing([]float{1, 2}) -// a.IsIncreasing([]string{"a", "b"}) -func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsIncreasing(a.t, object, msgAndArgs...) -} - -// IsIncreasingf asserts that the collection is increasing -// -// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") -// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") -func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsIncreasingf(a.t, object, msg, args...) -} - -// IsNonDecreasing asserts that the collection is not decreasing -// -// a.IsNonDecreasing([]int{1, 1, 2}) -// a.IsNonDecreasing([]float{1, 2}) -// a.IsNonDecreasing([]string{"a", "b"}) -func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsNonDecreasing(a.t, object, msgAndArgs...) -} - -// IsNonDecreasingf asserts that the collection is not decreasing -// -// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") -func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsNonDecreasingf(a.t, object, msg, args...) -} - -// IsNonIncreasing asserts that the collection is not increasing -// -// a.IsNonIncreasing([]int{2, 1, 1}) -// a.IsNonIncreasing([]float{2, 1}) -// a.IsNonIncreasing([]string{"b", "a"}) -func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsNonIncreasing(a.t, object, msgAndArgs...) -} - -// IsNonIncreasingf asserts that the collection is not increasing -// -// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") -func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsNonIncreasingf(a.t, object, msg, args...) -} - -// IsType asserts that the specified objects are of the same type. -func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsType(a.t, expectedType, object, msgAndArgs...) -} - -// IsTypef asserts that the specified objects are of the same type. -func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return IsTypef(a.t, expectedType, object, msg, args...) -} - -// JSONEq asserts that two JSON strings are equivalent. -// -// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return JSONEq(a.t, expected, actual, msgAndArgs...) -} - -// JSONEqf asserts that two JSON strings are equivalent. -// -// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") -func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return JSONEqf(a.t, expected, actual, msg, args...) -} - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// a.Len(mySlice, 3) -func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Len(a.t, object, length, msgAndArgs...) -} - -// Lenf asserts that the specified object has specific length. -// Lenf also fails if the object has a type that len() not accept. -// -// a.Lenf(mySlice, 3, "error message %s", "formatted") -func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Lenf(a.t, object, length, msg, args...) -} - -// Less asserts that the first element is less than the second -// -// a.Less(1, 2) -// a.Less(float64(1), float64(2)) -// a.Less("a", "b") -func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Less(a.t, e1, e2, msgAndArgs...) -} - -// LessOrEqual asserts that the first element is less than or equal to the second -// -// a.LessOrEqual(1, 2) -// a.LessOrEqual(2, 2) -// a.LessOrEqual("a", "b") -// a.LessOrEqual("b", "b") -func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return LessOrEqual(a.t, e1, e2, msgAndArgs...) -} - -// LessOrEqualf asserts that the first element is less than or equal to the second -// -// a.LessOrEqualf(1, 2, "error message %s", "formatted") -// a.LessOrEqualf(2, 2, "error message %s", "formatted") -// a.LessOrEqualf("a", "b", "error message %s", "formatted") -// a.LessOrEqualf("b", "b", "error message %s", "formatted") -func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return LessOrEqualf(a.t, e1, e2, msg, args...) -} - -// Lessf asserts that the first element is less than the second -// -// a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1), float64(2), "error message %s", "formatted") -// a.Lessf("a", "b", "error message %s", "formatted") -func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Lessf(a.t, e1, e2, msg, args...) -} - -// Negative asserts that the specified element is negative -// -// a.Negative(-1) -// a.Negative(-1.23) -func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Negative(a.t, e, msgAndArgs...) -} - -// Negativef asserts that the specified element is negative -// -// a.Negativef(-1, "error message %s", "formatted") -// a.Negativef(-1.23, "error message %s", "formatted") -func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Negativef(a.t, e, msg, args...) -} - -// Never asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) -func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Never(a.t, condition, waitFor, tick, msgAndArgs...) -} - -// Neverf asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Neverf(a.t, condition, waitFor, tick, msg, args...) -} - -// Nil asserts that the specified object is nil. -// -// a.Nil(err) -func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Nil(a.t, object, msgAndArgs...) -} - -// Nilf asserts that the specified object is nil. -// -// a.Nilf(err, "error message %s", "formatted") -func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Nilf(a.t, object, msg, args...) -} - -// NoDirExists checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func (a *Assertions) NoDirExists(path string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoDirExists(a.t, path, msgAndArgs...) -} - -// NoDirExistsf checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoDirExistsf(a.t, path, msg, args...) -} - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if a.NoError(err) { -// assert.Equal(t, expectedObj, actualObj) -// } -func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoError(a.t, err, msgAndArgs...) -} - -// NoErrorf asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if a.NoErrorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } -func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoErrorf(a.t, err, msg, args...) -} - -// NoFileExists checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func (a *Assertions) NoFileExists(path string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoFileExists(a.t, path, msgAndArgs...) -} - -// NoFileExistsf checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NoFileExistsf(a.t, path, msg, args...) -} - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// a.NotContains("Hello World", "Earth") -// a.NotContains(["Hello", "World"], "Earth") -// a.NotContains({"Hello": "World"}, "Earth") -func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotContains(a.t, s, contains, msgAndArgs...) -} - -// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") -// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") -// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") -func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotContainsf(a.t, s, contains, msg, args...) -} - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if a.NotEmpty(obj) { -// assert.Equal(t, "two", obj[1]) -// } -func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEmpty(a.t, object, msgAndArgs...) -} - -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if a.NotEmptyf(obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } -func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEmptyf(a.t, object, msg, args...) -} - -// NotEqual asserts that the specified values are NOT equal. -// -// a.NotEqual(obj1, obj2) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEqual(a.t, expected, actual, msgAndArgs...) -} - -// NotEqualValues asserts that two objects are not equal even when converted to the same type -// -// a.NotEqualValues(obj1, obj2) -func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEqualValues(a.t, expected, actual, msgAndArgs...) -} - -// NotEqualValuesf asserts that two objects are not equal even when converted to the same type -// -// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") -func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEqualValuesf(a.t, expected, actual, msg, args...) -} - -// NotEqualf asserts that the specified values are NOT equal. -// -// a.NotEqualf(obj1, obj2, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotEqualf(a.t, expected, actual, msg, args...) -} - -// NotErrorIs asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotErrorIs(a.t, err, target, msgAndArgs...) -} - -// NotErrorIsf asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotErrorIsf(a.t, err, target, msg, args...) -} - -// NotNil asserts that the specified object is not nil. -// -// a.NotNil(err) -func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotNil(a.t, object, msgAndArgs...) -} - -// NotNilf asserts that the specified object is not nil. -// -// a.NotNilf(err, "error message %s", "formatted") -func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotNilf(a.t, object, msg, args...) -} - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// a.NotPanics(func(){ RemainCalm() }) -func (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotPanics(a.t, f, msgAndArgs...) -} - -// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") -func (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotPanicsf(a.t, f, msg, args...) -} - -// NotRegexp asserts that a specified regexp does not match a string. -// -// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") -// a.NotRegexp("^start", "it's not starting") -func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotRegexp(a.t, rx, str, msgAndArgs...) -} - -// NotRegexpf asserts that a specified regexp does not match a string. -// -// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") -func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotRegexpf(a.t, rx, str, msg, args...) -} - -// NotSame asserts that two pointers do not reference the same object. -// -// a.NotSame(ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotSame(a.t, expected, actual, msgAndArgs...) -} - -// NotSamef asserts that two pointers do not reference the same object. -// -// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotSamef(a.t, expected, actual, msg, args...) -} - -// NotSubset asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") -func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotSubset(a.t, list, subset, msgAndArgs...) -} - -// NotSubsetf asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") -func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotSubsetf(a.t, list, subset, msg, args...) -} - -// NotZero asserts that i is not the zero value for its type. -func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotZero(a.t, i, msgAndArgs...) -} - -// NotZerof asserts that i is not the zero value for its type. -func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return NotZerof(a.t, i, msg, args...) -} - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// a.Panics(func(){ GoCrazy() }) -func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Panics(a.t, f, msgAndArgs...) -} - -// PanicsWithError asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// a.PanicsWithError("crazy error", func(){ GoCrazy() }) -func (a *Assertions) PanicsWithError(errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return PanicsWithError(a.t, errString, f, msgAndArgs...) -} - -// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) PanicsWithErrorf(errString string, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return PanicsWithErrorf(a.t, errString, f, msg, args...) -} - -// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) -func (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return PanicsWithValue(a.t, expected, f, msgAndArgs...) -} - -// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return PanicsWithValuef(a.t, expected, f, msg, args...) -} - -// Panicsf asserts that the code inside the specified PanicTestFunc panics. -// -// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Panicsf(a.t, f, msg, args...) -} - -// Positive asserts that the specified element is positive -// -// a.Positive(1) -// a.Positive(1.23) -func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Positive(a.t, e, msgAndArgs...) -} - -// Positivef asserts that the specified element is positive -// -// a.Positivef(1, "error message %s", "formatted") -// a.Positivef(1.23, "error message %s", "formatted") -func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Positivef(a.t, e, msg, args...) -} - -// Regexp asserts that a specified regexp matches a string. -// -// a.Regexp(regexp.MustCompile("start"), "it's starting") -// a.Regexp("start...$", "it's not starting") -func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Regexp(a.t, rx, str, msgAndArgs...) -} - -// Regexpf asserts that a specified regexp matches a string. -// -// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") -func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Regexpf(a.t, rx, str, msg, args...) -} - -// Same asserts that two pointers reference the same object. -// -// a.Same(ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Same(a.t, expected, actual, msgAndArgs...) -} - -// Samef asserts that two pointers reference the same object. -// -// a.Samef(ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Samef(a.t, expected, actual, msg, args...) -} - -// Subset asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") -func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Subset(a.t, list, subset, msgAndArgs...) -} - -// Subsetf asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") -func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Subsetf(a.t, list, subset, msg, args...) -} - -// True asserts that the specified value is true. -// -// a.True(myBool) -func (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return True(a.t, value, msgAndArgs...) -} - -// Truef asserts that the specified value is true. -// -// a.Truef(myBool, "error message %s", "formatted") -func (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Truef(a.t, value, msg, args...) -} - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) -func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return WithinDuration(a.t, expected, actual, delta, msgAndArgs...) -} - -// WithinDurationf asserts that the two times are within duration delta of each other. -// -// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") -func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return WithinDurationf(a.t, expected, actual, delta, msg, args...) -} - -// YAMLEq asserts that two YAML strings are equivalent. -func (a *Assertions) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return YAMLEq(a.t, expected, actual, msgAndArgs...) -} - -// YAMLEqf asserts that two YAML strings are equivalent. -func (a *Assertions) YAMLEqf(expected string, actual string, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return YAMLEqf(a.t, expected, actual, msg, args...) -} - -// Zero asserts that i is the zero value for its type. -func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Zero(a.t, i, msgAndArgs...) -} - -// Zerof asserts that i is the zero value for its type. -func (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) bool { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - return Zerof(a.t, i, msg, args...) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl b/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl deleted file mode 100644 index 188bb9e1..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{.CommentWithoutT "a"}} -func (a *Assertions) {{.DocInfo.Name}}({{.Params}}) bool { - if h, ok := a.t.(tHelper); ok { h.Helper() } - return {{.DocInfo.Name}}(a.t, {{.ForwardedParams}}) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go deleted file mode 100644 index 1c3b4718..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ /dev/null @@ -1,81 +0,0 @@ -package assert - -import ( - "fmt" - "reflect" -) - -// isOrdered checks that collection contains orderable elements. -func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { - objKind := reflect.TypeOf(object).Kind() - if objKind != reflect.Slice && objKind != reflect.Array { - return false - } - - objValue := reflect.ValueOf(object) - objLen := objValue.Len() - - if objLen <= 1 { - return true - } - - value := objValue.Index(0) - valueInterface := value.Interface() - firstValueKind := value.Kind() - - for i := 1; i < objLen; i++ { - prevValue := value - prevValueInterface := valueInterface - - value = objValue.Index(i) - valueInterface = value.Interface() - - compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind) - - if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...) - } - - if !containsValue(allowedComparesResults, compareResult) { - return Fail(t, fmt.Sprintf(failMessage, prevValue, value), msgAndArgs...) - } - } - - return true -} - -// IsIncreasing asserts that the collection is increasing -// -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) -func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs) -} - -// IsNonIncreasing asserts that the collection is not increasing -// -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) -func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs) -} - -// IsDecreasing asserts that the collection is decreasing -// -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) -func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs) -} - -// IsNonDecreasing asserts that the collection is not decreasing -// -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) -func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go deleted file mode 100644 index bcac4401..00000000 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ /dev/null @@ -1,1774 +0,0 @@ -package assert - -import ( - "bufio" - "bytes" - "encoding/json" - "errors" - "fmt" - "math" - "os" - "reflect" - "regexp" - "runtime" - "runtime/debug" - "strings" - "time" - "unicode" - "unicode/utf8" - - "github.com/davecgh/go-spew/spew" - "github.com/pmezard/go-difflib/difflib" - yaml "gopkg.in/yaml.v3" -) - -//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl" - -// TestingT is an interface wrapper around *testing.T -type TestingT interface { - Errorf(format string, args ...interface{}) -} - -// ComparisonAssertionFunc is a common function prototype when comparing two values. Can be useful -// for table driven tests. -type ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{}) bool - -// ValueAssertionFunc is a common function prototype when validating a single value. Can be useful -// for table driven tests. -type ValueAssertionFunc func(TestingT, interface{}, ...interface{}) bool - -// BoolAssertionFunc is a common function prototype when validating a bool value. Can be useful -// for table driven tests. -type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool - -// ErrorAssertionFunc is a common function prototype when validating an error value. Can be useful -// for table driven tests. -type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool - -// Comparison is a custom function that returns true on success and false on failure -type Comparison func() (success bool) - -/* - Helper functions -*/ - -// ObjectsAreEqual determines if two objects are considered equal. -// -// This function does no assertion of any kind. -func ObjectsAreEqual(expected, actual interface{}) bool { - if expected == nil || actual == nil { - return expected == actual - } - - exp, ok := expected.([]byte) - if !ok { - return reflect.DeepEqual(expected, actual) - } - - act, ok := actual.([]byte) - if !ok { - return false - } - if exp == nil || act == nil { - return exp == nil && act == nil - } - return bytes.Equal(exp, act) -} - -// ObjectsAreEqualValues gets whether two objects are equal, or if their -// values are equal. -func ObjectsAreEqualValues(expected, actual interface{}) bool { - if ObjectsAreEqual(expected, actual) { - return true - } - - actualType := reflect.TypeOf(actual) - if actualType == nil { - return false - } - expectedValue := reflect.ValueOf(expected) - if expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) { - // Attempt comparison after type conversion - return reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), actual) - } - - return false -} - -/* CallerInfo is necessary because the assert functions use the testing object -internally, causing it to print the file:line of the assert method, rather than where -the problem actually occurred in calling code.*/ - -// CallerInfo returns an array of strings containing the file and line number -// of each stack frame leading from the current test to the assert call that -// failed. -func CallerInfo() []string { - - var pc uintptr - var ok bool - var file string - var line int - var name string - - callers := []string{} - for i := 0; ; i++ { - pc, file, line, ok = runtime.Caller(i) - if !ok { - // The breaks below failed to terminate the loop, and we ran off the - // end of the call stack. - break - } - - // This is a huge edge case, but it will panic if this is the case, see #180 - if file == "" { - break - } - - f := runtime.FuncForPC(pc) - if f == nil { - break - } - name = f.Name() - - // testing.tRunner is the standard library function that calls - // tests. Subtests are called directly by tRunner, without going through - // the Test/Benchmark/Example function that contains the t.Run calls, so - // with subtests we should break when we hit tRunner, without adding it - // to the list of callers. - if name == "testing.tRunner" { - break - } - - parts := strings.Split(file, "/") - file = parts[len(parts)-1] - if len(parts) > 1 { - dir := parts[len(parts)-2] - if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" { - callers = append(callers, fmt.Sprintf("%s:%d", file, line)) - } - } - - // Drop the package - segments := strings.Split(name, ".") - name = segments[len(segments)-1] - if isTest(name, "Test") || - isTest(name, "Benchmark") || - isTest(name, "Example") { - break - } - } - - return callers -} - -// Stolen from the `go test` tool. -// isTest tells whether name looks like a test (or benchmark, according to prefix). -// It is a Test (say) if there is a character after Test that is not a lower-case letter. -// We don't want TesticularCancer. -func isTest(name, prefix string) bool { - if !strings.HasPrefix(name, prefix) { - return false - } - if len(name) == len(prefix) { // "Test" is ok - return true - } - r, _ := utf8.DecodeRuneInString(name[len(prefix):]) - return !unicode.IsLower(r) -} - -func messageFromMsgAndArgs(msgAndArgs ...interface{}) string { - if len(msgAndArgs) == 0 || msgAndArgs == nil { - return "" - } - if len(msgAndArgs) == 1 { - msg := msgAndArgs[0] - if msgAsStr, ok := msg.(string); ok { - return msgAsStr - } - return fmt.Sprintf("%+v", msg) - } - if len(msgAndArgs) > 1 { - return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...) - } - return "" -} - -// Aligns the provided message so that all lines after the first line start at the same location as the first line. -// Assumes that the first line starts at the correct location (after carriage return, tab, label, spacer and tab). -// The longestLabelLen parameter specifies the length of the longest label in the output (required becaues this is the -// basis on which the alignment occurs). -func indentMessageLines(message string, longestLabelLen int) string { - outBuf := new(bytes.Buffer) - - for i, scanner := 0, bufio.NewScanner(strings.NewReader(message)); scanner.Scan(); i++ { - // no need to align first line because it starts at the correct location (after the label) - if i != 0 { - // append alignLen+1 spaces to align with "{{longestLabel}}:" before adding tab - outBuf.WriteString("\n\t" + strings.Repeat(" ", longestLabelLen+1) + "\t") - } - outBuf.WriteString(scanner.Text()) - } - - return outBuf.String() -} - -type failNower interface { - FailNow() -} - -// FailNow fails test -func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - Fail(t, failureMessage, msgAndArgs...) - - // We cannot extend TestingT with FailNow() and - // maintain backwards compatibility, so we fallback - // to panicking when FailNow is not available in - // TestingT. - // See issue #263 - - if t, ok := t.(failNower); ok { - t.FailNow() - } else { - panic("test failed and t is missing `FailNow()`") - } - return false -} - -// Fail reports a failure through -func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - content := []labeledContent{ - {"Error Trace", strings.Join(CallerInfo(), "\n\t\t\t")}, - {"Error", failureMessage}, - } - - // Add test name if the Go version supports it - if n, ok := t.(interface { - Name() string - }); ok { - content = append(content, labeledContent{"Test", n.Name()}) - } - - message := messageFromMsgAndArgs(msgAndArgs...) - if len(message) > 0 { - content = append(content, labeledContent{"Messages", message}) - } - - t.Errorf("\n%s", ""+labeledOutput(content...)) - - return false -} - -type labeledContent struct { - label string - content string -} - -// labeledOutput returns a string consisting of the provided labeledContent. Each labeled output is appended in the following manner: -// -// \t{{label}}:{{align_spaces}}\t{{content}}\n -// -// The initial carriage return is required to undo/erase any padding added by testing.T.Errorf. The "\t{{label}}:" is for the label. -// If a label is shorter than the longest label provided, padding spaces are added to make all the labels match in length. Once this -// alignment is achieved, "\t{{content}}\n" is added for the output. -// -// If the content of the labeledOutput contains line breaks, the subsequent lines are aligned so that they start at the same location as the first line. -func labeledOutput(content ...labeledContent) string { - longestLabel := 0 - for _, v := range content { - if len(v.label) > longestLabel { - longestLabel = len(v.label) - } - } - var output string - for _, v := range content { - output += "\t" + v.label + ":" + strings.Repeat(" ", longestLabel-len(v.label)) + "\t" + indentMessageLines(v.content, longestLabel) + "\n" - } - return output -} - -// Implements asserts that an object is implemented by the specified interface. -// -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) -func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - interfaceType := reflect.TypeOf(interfaceObject).Elem() - - if object == nil { - return Fail(t, fmt.Sprintf("Cannot check if nil implements %v", interfaceType), msgAndArgs...) - } - if !reflect.TypeOf(object).Implements(interfaceType) { - return Fail(t, fmt.Sprintf("%T must implement %v", object, interfaceType), msgAndArgs...) - } - - return true -} - -// IsType asserts that the specified objects are of the same type. -func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) { - return Fail(t, fmt.Sprintf("Object expected to be of type %v, but was %v", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...) - } - - return true -} - -// Equal asserts that two objects are equal. -// -// assert.Equal(t, 123, 123) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if err := validateEqualArgs(expected, actual); err != nil { - return Fail(t, fmt.Sprintf("Invalid operation: %#v == %#v (%s)", - expected, actual, err), msgAndArgs...) - } - - if !ObjectsAreEqual(expected, actual) { - diff := diff(expected, actual) - expected, actual = formatUnequalValues(expected, actual) - return Fail(t, fmt.Sprintf("Not equal: \n"+ - "expected: %s\n"+ - "actual : %s%s", expected, actual, diff), msgAndArgs...) - } - - return true - -} - -// validateEqualArgs checks whether provided arguments can be safely used in the -// Equal/NotEqual functions. -func validateEqualArgs(expected, actual interface{}) error { - if expected == nil && actual == nil { - return nil - } - - if isFunction(expected) || isFunction(actual) { - return errors.New("cannot take func type as argument") - } - return nil -} - -// Same asserts that two pointers reference the same object. -// -// assert.Same(t, ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if !samePointers(expected, actual) { - return Fail(t, fmt.Sprintf("Not same: \n"+ - "expected: %p %#v\n"+ - "actual : %p %#v", expected, expected, actual, actual), msgAndArgs...) - } - - return true -} - -// NotSame asserts that two pointers do not reference the same object. -// -// assert.NotSame(t, ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if samePointers(expected, actual) { - return Fail(t, fmt.Sprintf( - "Expected and actual point to the same object: %p %#v", - expected, expected), msgAndArgs...) - } - return true -} - -// samePointers compares two generic interface objects and returns whether -// they point to the same object -func samePointers(first, second interface{}) bool { - firstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second) - if firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr { - return false - } - - firstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second) - if firstType != secondType { - return false - } - - // compare pointer addresses - return first == second -} - -// formatUnequalValues takes two values of arbitrary types and returns string -// representations appropriate to be presented to the user. -// -// If the values are not of like type, the returned strings will be prefixed -// with the type name, and the value will be enclosed in parenthesis similar -// to a type conversion in the Go grammar. -func formatUnequalValues(expected, actual interface{}) (e string, a string) { - if reflect.TypeOf(expected) != reflect.TypeOf(actual) { - return fmt.Sprintf("%T(%s)", expected, truncatingFormat(expected)), - fmt.Sprintf("%T(%s)", actual, truncatingFormat(actual)) - } - switch expected.(type) { - case time.Duration: - return fmt.Sprintf("%v", expected), fmt.Sprintf("%v", actual) - } - return truncatingFormat(expected), truncatingFormat(actual) -} - -// truncatingFormat formats the data and truncates it if it's too long. -// -// This helps keep formatted error messages lines from exceeding the -// bufio.MaxScanTokenSize max line length that the go testing framework imposes. -func truncatingFormat(data interface{}) string { - value := fmt.Sprintf("%#v", data) - max := bufio.MaxScanTokenSize - 100 // Give us some space the type info too if needed. - if len(value) > max { - value = value[0:max] + "<... truncated>" - } - return value -} - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// assert.EqualValues(t, uint32(123), int32(123)) -func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if !ObjectsAreEqualValues(expected, actual) { - diff := diff(expected, actual) - expected, actual = formatUnequalValues(expected, actual) - return Fail(t, fmt.Sprintf("Not equal: \n"+ - "expected: %s\n"+ - "actual : %s%s", expected, actual, diff), msgAndArgs...) - } - - return true - -} - -// Exactly asserts that two objects are equal in value and type. -// -// assert.Exactly(t, int32(123), int64(123)) -func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - aType := reflect.TypeOf(expected) - bType := reflect.TypeOf(actual) - - if aType != bType { - return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...) - } - - return Equal(t, expected, actual, msgAndArgs...) - -} - -// NotNil asserts that the specified object is not nil. -// -// assert.NotNil(t, err) -func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if !isNil(object) { - return true - } - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, "Expected value not to be nil.", msgAndArgs...) -} - -// containsKind checks if a specified kind in the slice of kinds. -func containsKind(kinds []reflect.Kind, kind reflect.Kind) bool { - for i := 0; i < len(kinds); i++ { - if kind == kinds[i] { - return true - } - } - - return false -} - -// isNil checks if a specified object is nil or not, without Failing. -func isNil(object interface{}) bool { - if object == nil { - return true - } - - value := reflect.ValueOf(object) - kind := value.Kind() - isNilableKind := containsKind( - []reflect.Kind{ - reflect.Chan, reflect.Func, - reflect.Interface, reflect.Map, - reflect.Ptr, reflect.Slice}, - kind) - - if isNilableKind && value.IsNil() { - return true - } - - return false -} - -// Nil asserts that the specified object is nil. -// -// assert.Nil(t, err) -func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if isNil(object) { - return true - } - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, fmt.Sprintf("Expected nil, but got: %#v", object), msgAndArgs...) -} - -// isEmpty gets whether the specified object is considered empty or not. -func isEmpty(object interface{}) bool { - - // get nil case out of the way - if object == nil { - return true - } - - objValue := reflect.ValueOf(object) - - switch objValue.Kind() { - // collection types are empty when they have no element - case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice: - return objValue.Len() == 0 - // pointers are empty if nil or if the value they point to is empty - case reflect.Ptr: - if objValue.IsNil() { - return true - } - deref := objValue.Elem().Interface() - return isEmpty(deref) - // for all other types, compare against the zero value - default: - zero := reflect.Zero(objValue.Type()) - return reflect.DeepEqual(object, zero.Interface()) - } -} - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// assert.Empty(t, obj) -func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - pass := isEmpty(object) - if !pass { - if h, ok := t.(tHelper); ok { - h.Helper() - } - Fail(t, fmt.Sprintf("Should be empty, but was %v", object), msgAndArgs...) - } - - return pass - -} - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } -func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - pass := !isEmpty(object) - if !pass { - if h, ok := t.(tHelper); ok { - h.Helper() - } - Fail(t, fmt.Sprintf("Should NOT be empty, but was %v", object), msgAndArgs...) - } - - return pass - -} - -// getLen try to get length of object. -// return (false, 0) if impossible. -func getLen(x interface{}) (ok bool, length int) { - v := reflect.ValueOf(x) - defer func() { - if e := recover(); e != nil { - ok = false - } - }() - return true, v.Len() -} - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// assert.Len(t, mySlice, 3) -func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - ok, l := getLen(object) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", object), msgAndArgs...) - } - - if l != length { - return Fail(t, fmt.Sprintf("\"%s\" should have %d item(s), but has %d", object, length, l), msgAndArgs...) - } - return true -} - -// True asserts that the specified value is true. -// -// assert.True(t, myBool) -func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { - if !value { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, "Should be true", msgAndArgs...) - } - - return true - -} - -// False asserts that the specified value is false. -// -// assert.False(t, myBool) -func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { - if value { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, "Should be false", msgAndArgs...) - } - - return true - -} - -// NotEqual asserts that the specified values are NOT equal. -// -// assert.NotEqual(t, obj1, obj2) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if err := validateEqualArgs(expected, actual); err != nil { - return Fail(t, fmt.Sprintf("Invalid operation: %#v != %#v (%s)", - expected, actual, err), msgAndArgs...) - } - - if ObjectsAreEqual(expected, actual) { - return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...) - } - - return true - -} - -// NotEqualValues asserts that two objects are not equal even when converted to the same type -// -// assert.NotEqualValues(t, obj1, obj2) -func NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if ObjectsAreEqualValues(expected, actual) { - return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...) - } - - return true -} - -// containsElement try loop over the list check if the list includes the element. -// return (false, false) if impossible. -// return (true, false) if element was not found. -// return (true, true) if element was found. -func includeElement(list interface{}, element interface{}) (ok, found bool) { - - listValue := reflect.ValueOf(list) - listKind := reflect.TypeOf(list).Kind() - defer func() { - if e := recover(); e != nil { - ok = false - found = false - } - }() - - if listKind == reflect.String { - elementValue := reflect.ValueOf(element) - return true, strings.Contains(listValue.String(), elementValue.String()) - } - - if listKind == reflect.Map { - mapKeys := listValue.MapKeys() - for i := 0; i < len(mapKeys); i++ { - if ObjectsAreEqual(mapKeys[i].Interface(), element) { - return true, true - } - } - return true, false - } - - for i := 0; i < listValue.Len(); i++ { - if ObjectsAreEqual(listValue.Index(i).Interface(), element) { - return true, true - } - } - return true, false - -} - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") -func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - ok, found := includeElement(s, contains) - if !ok { - return Fail(t, fmt.Sprintf("%#v could not be applied builtin len()", s), msgAndArgs...) - } - if !found { - return Fail(t, fmt.Sprintf("%#v does not contain %#v", s, contains), msgAndArgs...) - } - - return true - -} - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") -func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - ok, found := includeElement(s, contains) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...) - } - if found { - return Fail(t, fmt.Sprintf("\"%s\" should not contain \"%s\"", s, contains), msgAndArgs...) - } - - return true - -} - -// Subset asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") -func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if subset == nil { - return true // we consider nil to be equal to the nil set - } - - subsetValue := reflect.ValueOf(subset) - defer func() { - if e := recover(); e != nil { - ok = false - } - }() - - listKind := reflect.TypeOf(list).Kind() - subsetKind := reflect.TypeOf(subset).Kind() - - if listKind != reflect.Array && listKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...) - } - - if subsetKind != reflect.Array && subsetKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) - } - - for i := 0; i < subsetValue.Len(); i++ { - element := subsetValue.Index(i).Interface() - ok, found := includeElement(list, element) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...) - } - if !found { - return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", list, element), msgAndArgs...) - } - } - - return true -} - -// NotSubset asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") -func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if subset == nil { - return Fail(t, fmt.Sprintf("nil is the empty set which is a subset of every set"), msgAndArgs...) - } - - subsetValue := reflect.ValueOf(subset) - defer func() { - if e := recover(); e != nil { - ok = false - } - }() - - listKind := reflect.TypeOf(list).Kind() - subsetKind := reflect.TypeOf(subset).Kind() - - if listKind != reflect.Array && listKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...) - } - - if subsetKind != reflect.Array && subsetKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) - } - - for i := 0; i < subsetValue.Len(); i++ { - element := subsetValue.Index(i).Interface() - ok, found := includeElement(list, element) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...) - } - if !found { - return true - } - } - - return Fail(t, fmt.Sprintf("%q is a subset of %q", subset, list), msgAndArgs...) -} - -// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) -func ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if isEmpty(listA) && isEmpty(listB) { - return true - } - - if !isList(t, listA, msgAndArgs...) || !isList(t, listB, msgAndArgs...) { - return false - } - - extraA, extraB := diffLists(listA, listB) - - if len(extraA) == 0 && len(extraB) == 0 { - return true - } - - return Fail(t, formatListDiff(listA, listB, extraA, extraB), msgAndArgs...) -} - -// isList checks that the provided value is array or slice. -func isList(t TestingT, list interface{}, msgAndArgs ...interface{}) (ok bool) { - kind := reflect.TypeOf(list).Kind() - if kind != reflect.Array && kind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s, expecting array or slice", list, kind), - msgAndArgs...) - } - return true -} - -// diffLists diffs two arrays/slices and returns slices of elements that are only in A and only in B. -// If some element is present multiple times, each instance is counted separately (e.g. if something is 2x in A and -// 5x in B, it will be 0x in extraA and 3x in extraB). The order of items in both lists is ignored. -func diffLists(listA, listB interface{}) (extraA, extraB []interface{}) { - aValue := reflect.ValueOf(listA) - bValue := reflect.ValueOf(listB) - - aLen := aValue.Len() - bLen := bValue.Len() - - // Mark indexes in bValue that we already used - visited := make([]bool, bLen) - for i := 0; i < aLen; i++ { - element := aValue.Index(i).Interface() - found := false - for j := 0; j < bLen; j++ { - if visited[j] { - continue - } - if ObjectsAreEqual(bValue.Index(j).Interface(), element) { - visited[j] = true - found = true - break - } - } - if !found { - extraA = append(extraA, element) - } - } - - for j := 0; j < bLen; j++ { - if visited[j] { - continue - } - extraB = append(extraB, bValue.Index(j).Interface()) - } - - return -} - -func formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) string { - var msg bytes.Buffer - - msg.WriteString("elements differ") - if len(extraA) > 0 { - msg.WriteString("\n\nextra elements in list A:\n") - msg.WriteString(spewConfig.Sdump(extraA)) - } - if len(extraB) > 0 { - msg.WriteString("\n\nextra elements in list B:\n") - msg.WriteString(spewConfig.Sdump(extraB)) - } - msg.WriteString("\n\nlistA:\n") - msg.WriteString(spewConfig.Sdump(listA)) - msg.WriteString("\n\nlistB:\n") - msg.WriteString(spewConfig.Sdump(listB)) - - return msg.String() -} - -// Condition uses a Comparison to assert a complex condition. -func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - result := comp() - if !result { - Fail(t, "Condition failed!", msgAndArgs...) - } - return result -} - -// PanicTestFunc defines a func that should be passed to the assert.Panics and assert.NotPanics -// methods, and represents a simple func that takes no arguments, and returns nothing. -type PanicTestFunc func() - -// didPanic returns true if the function passed to it panics. Otherwise, it returns false. -func didPanic(f PanicTestFunc) (bool, interface{}, string) { - - didPanic := false - var message interface{} - var stack string - func() { - - defer func() { - if message = recover(); message != nil { - didPanic = true - stack = string(debug.Stack()) - } - }() - - // call the target function - f() - - }() - - return didPanic, message, stack - -} - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// assert.Panics(t, func(){ GoCrazy() }) -func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if funcDidPanic, panicValue, _ := didPanic(f); !funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...) - } - - return true -} - -// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) -func PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - funcDidPanic, panicValue, panickedStack := didPanic(f) - if !funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...) - } - if panicValue != expected { - return Fail(t, fmt.Sprintf("func %#v should panic with value:\t%#v\n\tPanic value:\t%#v\n\tPanic stack:\t%s", f, expected, panicValue, panickedStack), msgAndArgs...) - } - - return true -} - -// PanicsWithError asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) -func PanicsWithError(t TestingT, errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - funcDidPanic, panicValue, panickedStack := didPanic(f) - if !funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...) - } - panicErr, ok := panicValue.(error) - if !ok || panicErr.Error() != errString { - return Fail(t, fmt.Sprintf("func %#v should panic with error message:\t%#v\n\tPanic value:\t%#v\n\tPanic stack:\t%s", f, errString, panicValue, panickedStack), msgAndArgs...) - } - - return true -} - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// assert.NotPanics(t, func(){ RemainCalm() }) -func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if funcDidPanic, panicValue, panickedStack := didPanic(f); funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should not panic\n\tPanic value:\t%v\n\tPanic stack:\t%s", f, panicValue, panickedStack), msgAndArgs...) - } - - return true -} - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) -func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - dt := expected.Sub(actual) - if dt < -delta || dt > delta { - return Fail(t, fmt.Sprintf("Max difference between %v and %v allowed is %v, but difference was %v", expected, actual, delta, dt), msgAndArgs...) - } - - return true -} - -func toFloat(x interface{}) (float64, bool) { - var xf float64 - xok := true - - switch xn := x.(type) { - case uint: - xf = float64(xn) - case uint8: - xf = float64(xn) - case uint16: - xf = float64(xn) - case uint32: - xf = float64(xn) - case uint64: - xf = float64(xn) - case int: - xf = float64(xn) - case int8: - xf = float64(xn) - case int16: - xf = float64(xn) - case int32: - xf = float64(xn) - case int64: - xf = float64(xn) - case float32: - xf = float64(xn) - case float64: - xf = xn - case time.Duration: - xf = float64(xn) - default: - xok = false - } - - return xf, xok -} - -// InDelta asserts that the two numerals are within delta of each other. -// -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) -func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - af, aok := toFloat(expected) - bf, bok := toFloat(actual) - - if !aok || !bok { - return Fail(t, fmt.Sprintf("Parameters must be numerical"), msgAndArgs...) - } - - if math.IsNaN(af) { - return Fail(t, fmt.Sprintf("Expected must not be NaN"), msgAndArgs...) - } - - if math.IsNaN(bf) { - return Fail(t, fmt.Sprintf("Expected %v with delta %v, but was NaN", expected, delta), msgAndArgs...) - } - - dt := af - bf - if dt < -delta || dt > delta { - return Fail(t, fmt.Sprintf("Max difference between %v and %v allowed is %v, but difference was %v", expected, actual, delta, dt), msgAndArgs...) - } - - return true -} - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Slice || - reflect.TypeOf(expected).Kind() != reflect.Slice { - return Fail(t, fmt.Sprintf("Parameters must be slice"), msgAndArgs...) - } - - actualSlice := reflect.ValueOf(actual) - expectedSlice := reflect.ValueOf(expected) - - for i := 0; i < actualSlice.Len(); i++ { - result := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta, msgAndArgs...) - if !result { - return result - } - } - - return true -} - -// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func InDeltaMapValues(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Map || - reflect.TypeOf(expected).Kind() != reflect.Map { - return Fail(t, "Arguments must be maps", msgAndArgs...) - } - - expectedMap := reflect.ValueOf(expected) - actualMap := reflect.ValueOf(actual) - - if expectedMap.Len() != actualMap.Len() { - return Fail(t, "Arguments must have the same number of keys", msgAndArgs...) - } - - for _, k := range expectedMap.MapKeys() { - ev := expectedMap.MapIndex(k) - av := actualMap.MapIndex(k) - - if !ev.IsValid() { - return Fail(t, fmt.Sprintf("missing key %q in expected map", k), msgAndArgs...) - } - - if !av.IsValid() { - return Fail(t, fmt.Sprintf("missing key %q in actual map", k), msgAndArgs...) - } - - if !InDelta( - t, - ev.Interface(), - av.Interface(), - delta, - msgAndArgs..., - ) { - return false - } - } - - return true -} - -func calcRelativeError(expected, actual interface{}) (float64, error) { - af, aok := toFloat(expected) - if !aok { - return 0, fmt.Errorf("expected value %q cannot be converted to float", expected) - } - if math.IsNaN(af) { - return 0, errors.New("expected value must not be NaN") - } - if af == 0 { - return 0, fmt.Errorf("expected value must have a value other than zero to calculate the relative error") - } - bf, bok := toFloat(actual) - if !bok { - return 0, fmt.Errorf("actual value %q cannot be converted to float", actual) - } - if math.IsNaN(bf) { - return 0, errors.New("actual value must not be NaN") - } - - return math.Abs(af-bf) / math.Abs(af), nil -} - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if math.IsNaN(epsilon) { - return Fail(t, "epsilon must not be NaN") - } - actualEpsilon, err := calcRelativeError(expected, actual) - if err != nil { - return Fail(t, err.Error(), msgAndArgs...) - } - if actualEpsilon > epsilon { - return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+ - " < %#v (actual)", epsilon, actualEpsilon), msgAndArgs...) - } - - return true -} - -// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices. -func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Slice || - reflect.TypeOf(expected).Kind() != reflect.Slice { - return Fail(t, fmt.Sprintf("Parameters must be slice"), msgAndArgs...) - } - - actualSlice := reflect.ValueOf(actual) - expectedSlice := reflect.ValueOf(expected) - - for i := 0; i < actualSlice.Len(); i++ { - result := InEpsilon(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), epsilon) - if !result { - return result - } - } - - return true -} - -/* - Errors -*/ - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) -// } -func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { - if err != nil { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, fmt.Sprintf("Received unexpected error:\n%+v", err), msgAndArgs...) - } - - return true -} - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } -func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { - if err == nil { - if h, ok := t.(tHelper); ok { - h.Helper() - } - return Fail(t, "An error is expected but got nil.", msgAndArgs...) - } - - return true -} - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) -func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if !Error(t, theError, msgAndArgs...) { - return false - } - expected := errString - actual := theError.Error() - // don't need to use deep equals here, we know they are both strings - if expected != actual { - return Fail(t, fmt.Sprintf("Error message not equal:\n"+ - "expected: %q\n"+ - "actual : %q", expected, actual), msgAndArgs...) - } - return true -} - -// matchRegexp return true if a specified regexp matches a string. -func matchRegexp(rx interface{}, str interface{}) bool { - - var r *regexp.Regexp - if rr, ok := rx.(*regexp.Regexp); ok { - r = rr - } else { - r = regexp.MustCompile(fmt.Sprint(rx)) - } - - return (r.FindStringIndex(fmt.Sprint(str)) != nil) - -} - -// Regexp asserts that a specified regexp matches a string. -// -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") -func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - match := matchRegexp(rx, str) - - if !match { - Fail(t, fmt.Sprintf("Expect \"%v\" to match \"%v\"", str, rx), msgAndArgs...) - } - - return match -} - -// NotRegexp asserts that a specified regexp does not match a string. -// -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") -func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - match := matchRegexp(rx, str) - - if match { - Fail(t, fmt.Sprintf("Expect \"%v\" to NOT match \"%v\"", str, rx), msgAndArgs...) - } - - return !match - -} - -// Zero asserts that i is the zero value for its type. -func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { - return Fail(t, fmt.Sprintf("Should be zero, but was %v", i), msgAndArgs...) - } - return true -} - -// NotZero asserts that i is not the zero value for its type. -func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { - return Fail(t, fmt.Sprintf("Should not be zero, but was %v", i), msgAndArgs...) - } - return true -} - -// FileExists checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func FileExists(t TestingT, path string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - info, err := os.Lstat(path) - if err != nil { - if os.IsNotExist(err) { - return Fail(t, fmt.Sprintf("unable to find file %q", path), msgAndArgs...) - } - return Fail(t, fmt.Sprintf("error when running os.Lstat(%q): %s", path, err), msgAndArgs...) - } - if info.IsDir() { - return Fail(t, fmt.Sprintf("%q is a directory", path), msgAndArgs...) - } - return true -} - -// NoFileExists checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func NoFileExists(t TestingT, path string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - info, err := os.Lstat(path) - if err != nil { - return true - } - if info.IsDir() { - return true - } - return Fail(t, fmt.Sprintf("file %q exists", path), msgAndArgs...) -} - -// DirExists checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func DirExists(t TestingT, path string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - info, err := os.Lstat(path) - if err != nil { - if os.IsNotExist(err) { - return Fail(t, fmt.Sprintf("unable to find file %q", path), msgAndArgs...) - } - return Fail(t, fmt.Sprintf("error when running os.Lstat(%q): %s", path, err), msgAndArgs...) - } - if !info.IsDir() { - return Fail(t, fmt.Sprintf("%q is a file", path), msgAndArgs...) - } - return true -} - -// NoDirExists checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func NoDirExists(t TestingT, path string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - info, err := os.Lstat(path) - if err != nil { - if os.IsNotExist(err) { - return true - } - return true - } - if !info.IsDir() { - return true - } - return Fail(t, fmt.Sprintf("directory %q exists", path), msgAndArgs...) -} - -// JSONEq asserts that two JSON strings are equivalent. -// -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - var expectedJSONAsInterface, actualJSONAsInterface interface{} - - if err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid json.\nJSON parsing error: '%s'", expected, err.Error()), msgAndArgs...) - } - - if err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid json.\nJSON parsing error: '%s'", actual, err.Error()), msgAndArgs...) - } - - return Equal(t, expectedJSONAsInterface, actualJSONAsInterface, msgAndArgs...) -} - -// YAMLEq asserts that two YAML strings are equivalent. -func YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - var expectedYAMLAsInterface, actualYAMLAsInterface interface{} - - if err := yaml.Unmarshal([]byte(expected), &expectedYAMLAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid yaml.\nYAML parsing error: '%s'", expected, err.Error()), msgAndArgs...) - } - - if err := yaml.Unmarshal([]byte(actual), &actualYAMLAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid yaml.\nYAML error: '%s'", actual, err.Error()), msgAndArgs...) - } - - return Equal(t, expectedYAMLAsInterface, actualYAMLAsInterface, msgAndArgs...) -} - -func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { - t := reflect.TypeOf(v) - k := t.Kind() - - if k == reflect.Ptr { - t = t.Elem() - k = t.Kind() - } - return t, k -} - -// diff returns a diff of both values as long as both are of the same type and -// are a struct, map, slice, array or string. Otherwise it returns an empty string. -func diff(expected interface{}, actual interface{}) string { - if expected == nil || actual == nil { - return "" - } - - et, ek := typeAndKind(expected) - at, _ := typeAndKind(actual) - - if et != at { - return "" - } - - if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array && ek != reflect.String { - return "" - } - - var e, a string - if et != reflect.TypeOf("") { - e = spewConfig.Sdump(expected) - a = spewConfig.Sdump(actual) - } else { - e = reflect.ValueOf(expected).String() - a = reflect.ValueOf(actual).String() - } - - diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{ - A: difflib.SplitLines(e), - B: difflib.SplitLines(a), - FromFile: "Expected", - FromDate: "", - ToFile: "Actual", - ToDate: "", - Context: 1, - }) - - return "\n\nDiff:\n" + diff -} - -func isFunction(arg interface{}) bool { - if arg == nil { - return false - } - return reflect.TypeOf(arg).Kind() == reflect.Func -} - -var spewConfig = spew.ConfigState{ - Indent: " ", - DisablePointerAddresses: true, - DisableCapacities: true, - SortKeys: true, - DisableMethods: true, - MaxDepth: 10, -} - -type tHelper interface { - Helper() -} - -// Eventually asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) -func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - ch := make(chan bool, 1) - - timer := time.NewTimer(waitFor) - defer timer.Stop() - - ticker := time.NewTicker(tick) - defer ticker.Stop() - - for tick := ticker.C; ; { - select { - case <-timer.C: - return Fail(t, "Condition never satisfied", msgAndArgs...) - case <-tick: - tick = nil - go func() { ch <- condition() }() - case v := <-ch: - if v { - return true - } - tick = ticker.C - } - } -} - -// Never asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) -func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - ch := make(chan bool, 1) - - timer := time.NewTimer(waitFor) - defer timer.Stop() - - ticker := time.NewTicker(tick) - defer ticker.Stop() - - for tick := ticker.C; ; { - select { - case <-timer.C: - return true - case <-tick: - tick = nil - go func() { ch <- condition() }() - case v := <-ch: - if v { - return Fail(t, "Condition satisfied", msgAndArgs...) - } - tick = ticker.C - } - } -} - -// ErrorIs asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if errors.Is(err, target) { - return true - } - - var expectedText string - if target != nil { - expectedText = target.Error() - } - - chain := buildErrorChainString(err) - - return Fail(t, fmt.Sprintf("Target error should be in err chain:\n"+ - "expected: %q\n"+ - "in chain: %s", expectedText, chain, - ), msgAndArgs...) -} - -// NotErrorIs asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if !errors.Is(err, target) { - return true - } - - var expectedText string - if target != nil { - expectedText = target.Error() - } - - chain := buildErrorChainString(err) - - return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ - "found: %q\n"+ - "in chain: %s", expectedText, chain, - ), msgAndArgs...) -} - -// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if errors.As(err, target) { - return true - } - - chain := buildErrorChainString(err) - - return Fail(t, fmt.Sprintf("Should be in error chain:\n"+ - "expected: %q\n"+ - "in chain: %s", target, chain, - ), msgAndArgs...) -} - -func buildErrorChainString(err error) string { - if err == nil { - return "" - } - - e := errors.Unwrap(err) - chain := fmt.Sprintf("%q", err.Error()) - for e != nil { - chain += fmt.Sprintf("\n\t%q", e.Error()) - e = errors.Unwrap(e) - } - return chain -} diff --git a/vendor/github.com/stretchr/testify/assert/doc.go b/vendor/github.com/stretchr/testify/assert/doc.go deleted file mode 100644 index c9dccc4d..00000000 --- a/vendor/github.com/stretchr/testify/assert/doc.go +++ /dev/null @@ -1,45 +0,0 @@ -// Package assert provides a set of comprehensive testing tools for use with the normal Go testing system. -// -// Example Usage -// -// The following is a complete example using assert in a standard test function: -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) -// -// func TestSomething(t *testing.T) { -// -// var a string = "Hello" -// var b string = "Hello" -// -// assert.Equal(t, a, b, "The two words should be the same.") -// -// } -// -// if you assert many times, use the format below: -// -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) -// -// func TestSomething(t *testing.T) { -// assert := assert.New(t) -// -// var a string = "Hello" -// var b string = "Hello" -// -// assert.Equal(a, b, "The two words should be the same.") -// } -// -// Assertions -// -// Assertions allow you to easily write test code, and are global funcs in the `assert` package. -// All assertion functions take, as the first argument, the `*testing.T` object provided by the -// testing framework. This allows the assertion funcs to write the failings and other details to -// the correct place. -// -// Every assertion function also takes an optional string message as the final argument, -// allowing custom error messages to be appended to the message the assertion method outputs. -package assert diff --git a/vendor/github.com/stretchr/testify/assert/errors.go b/vendor/github.com/stretchr/testify/assert/errors.go deleted file mode 100644 index ac9dc9d1..00000000 --- a/vendor/github.com/stretchr/testify/assert/errors.go +++ /dev/null @@ -1,10 +0,0 @@ -package assert - -import ( - "errors" -) - -// AnError is an error instance useful for testing. If the code does not care -// about error specifics, and only needs to return the error for example, this -// error should be used to make the test code more readable. -var AnError = errors.New("assert.AnError general error for testing") diff --git a/vendor/github.com/stretchr/testify/assert/forward_assertions.go b/vendor/github.com/stretchr/testify/assert/forward_assertions.go deleted file mode 100644 index df189d23..00000000 --- a/vendor/github.com/stretchr/testify/assert/forward_assertions.go +++ /dev/null @@ -1,16 +0,0 @@ -package assert - -// Assertions provides assertion methods around the -// TestingT interface. -type Assertions struct { - t TestingT -} - -// New makes a new Assertions object for the specified TestingT. -func New(t TestingT) *Assertions { - return &Assertions{ - t: t, - } -} - -//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_forward.go.tmpl -include-format-funcs" diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go deleted file mode 100644 index 4ed341dd..00000000 --- a/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ /dev/null @@ -1,162 +0,0 @@ -package assert - -import ( - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "strings" -) - -// httpCode is a helper that returns HTTP code of the response. It returns -1 and -// an error if building a new request fails. -func httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) { - w := httptest.NewRecorder() - req, err := http.NewRequest(method, url, nil) - if err != nil { - return -1, err - } - req.URL.RawQuery = values.Encode() - handler(w, req) - return w.Code, nil -} - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - code, err := httpCode(handler, method, url, values) - if err != nil { - Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - } - - isSuccessCode := code >= http.StatusOK && code <= http.StatusPartialContent - if !isSuccessCode { - Fail(t, fmt.Sprintf("Expected HTTP success status code for %q but received %d", url+"?"+values.Encode(), code)) - } - - return isSuccessCode -} - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - code, err := httpCode(handler, method, url, values) - if err != nil { - Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - } - - isRedirectCode := code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect - if !isRedirectCode { - Fail(t, fmt.Sprintf("Expected HTTP redirect status code for %q but received %d", url+"?"+values.Encode(), code)) - } - - return isRedirectCode -} - -// HTTPError asserts that a specified handler returns an error status code. -// -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - code, err := httpCode(handler, method, url, values) - if err != nil { - Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - } - - isErrorCode := code >= http.StatusBadRequest - if !isErrorCode { - Fail(t, fmt.Sprintf("Expected HTTP error status code for %q but received %d", url+"?"+values.Encode(), code)) - } - - return isErrorCode -} - -// HTTPStatusCode asserts that a specified handler returns a specified status code. -// -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - code, err := httpCode(handler, method, url, values) - if err != nil { - Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - } - - successful := code == statuscode - if !successful { - Fail(t, fmt.Sprintf("Expected HTTP status code %d for %q but received %d", statuscode, url+"?"+values.Encode(), code)) - } - - return successful -} - -// HTTPBody is a helper that returns HTTP body of the response. It returns -// empty string if building a new request fails. -func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string { - w := httptest.NewRecorder() - req, err := http.NewRequest(method, url+"?"+values.Encode(), nil) - if err != nil { - return "" - } - handler(w, req) - return w.Body.String() -} - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - body := HTTPBody(handler, method, url, values) - - contains := strings.Contains(body, fmt.Sprint(str)) - if !contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body)) - } - - return contains -} - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - body := HTTPBody(handler, method, url, values) - - contains := strings.Contains(body, fmt.Sprint(str)) - if contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to NOT contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body)) - } - - return !contains -} diff --git a/vendor/github.com/stretchr/testify/require/doc.go b/vendor/github.com/stretchr/testify/require/doc.go deleted file mode 100644 index 169de392..00000000 --- a/vendor/github.com/stretchr/testify/require/doc.go +++ /dev/null @@ -1,28 +0,0 @@ -// Package require implements the same assertions as the `assert` package but -// stops test execution when a test fails. -// -// Example Usage -// -// The following is a complete example using require in a standard test function: -// import ( -// "testing" -// "github.com/stretchr/testify/require" -// ) -// -// func TestSomething(t *testing.T) { -// -// var a string = "Hello" -// var b string = "Hello" -// -// require.Equal(t, a, b, "The two words should be the same.") -// -// } -// -// Assertions -// -// The `require` package have same global functions as in the `assert` package, -// but instead of returning a boolean result they call `t.FailNow()`. -// -// Every assertion function also takes an optional string message as the final argument, -// allowing custom error messages to be appended to the message the assertion method outputs. -package require diff --git a/vendor/github.com/stretchr/testify/require/forward_requirements.go b/vendor/github.com/stretchr/testify/require/forward_requirements.go deleted file mode 100644 index 1dcb2338..00000000 --- a/vendor/github.com/stretchr/testify/require/forward_requirements.go +++ /dev/null @@ -1,16 +0,0 @@ -package require - -// Assertions provides assertion methods around the -// TestingT interface. -type Assertions struct { - t TestingT -} - -// New makes a new Assertions object for the specified TestingT. -func New(t TestingT) *Assertions { - return &Assertions{ - t: t, - } -} - -//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=require -template=require_forward.go.tmpl -include-format-funcs" diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go deleted file mode 100644 index 51820df2..00000000 --- a/vendor/github.com/stretchr/testify/require/require.go +++ /dev/null @@ -1,1879 +0,0 @@ -/* -* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen -* THIS FILE MUST NOT BE EDITED BY HAND - */ - -package require - -import ( - assert "github.com/stretchr/testify/assert" - http "net/http" - url "net/url" - time "time" -) - -// Condition uses a Comparison to assert a complex condition. -func Condition(t TestingT, comp assert.Comparison, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Condition(t, comp, msgAndArgs...) { - return - } - t.FailNow() -} - -// Conditionf uses a Comparison to assert a complex condition. -func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Conditionf(t, comp, msg, args...) { - return - } - t.FailNow() -} - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") -func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Contains(t, s, contains, msgAndArgs...) { - return - } - t.FailNow() -} - -// Containsf asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") -func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Containsf(t, s, contains, msg, args...) { - return - } - t.FailNow() -} - -// DirExists checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func DirExists(t TestingT, path string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.DirExists(t, path, msgAndArgs...) { - return - } - t.FailNow() -} - -// DirExistsf checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func DirExistsf(t TestingT, path string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.DirExistsf(t, path, msg, args...) { - return - } - t.FailNow() -} - -// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) -func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ElementsMatch(t, listA, listB, msgAndArgs...) { - return - } - t.FailNow() -} - -// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") -func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ElementsMatchf(t, listA, listB, msg, args...) { - return - } - t.FailNow() -} - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// assert.Empty(t, obj) -func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Empty(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// assert.Emptyf(t, obj, "error message %s", "formatted") -func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Emptyf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// Equal asserts that two objects are equal. -// -// assert.Equal(t, 123, 123) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Equal(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) -func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.EqualError(t, theError, errString, msgAndArgs...) { - return - } - t.FailNow() -} - -// EqualErrorf asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") -func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.EqualErrorf(t, theError, errString, msg, args...) { - return - } - t.FailNow() -} - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// assert.EqualValues(t, uint32(123), int32(123)) -func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.EqualValues(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// EqualValuesf asserts that two objects are equal or convertable to the same types -// and equal. -// -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") -func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.EqualValuesf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Equalf asserts that two objects are equal. -// -// assert.Equalf(t, 123, 123, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Equalf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } -func Error(t TestingT, err error, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Error(t, err, msgAndArgs...) { - return - } - t.FailNow() -} - -// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ErrorAs(t, err, target, msgAndArgs...) { - return - } - t.FailNow() -} - -// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ErrorAsf(t, err, target, msg, args...) { - return - } - t.FailNow() -} - -// ErrorIs asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func ErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ErrorIs(t, err, target, msgAndArgs...) { - return - } - t.FailNow() -} - -// ErrorIsf asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.ErrorIsf(t, err, target, msg, args...) { - return - } - t.FailNow() -} - -// Errorf asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } -func Errorf(t TestingT, err error, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Errorf(t, err, msg, args...) { - return - } - t.FailNow() -} - -// Eventually asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) -func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Eventually(t, condition, waitFor, tick, msgAndArgs...) { - return - } - t.FailNow() -} - -// Eventuallyf asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Eventuallyf(t, condition, waitFor, tick, msg, args...) { - return - } - t.FailNow() -} - -// Exactly asserts that two objects are equal in value and type. -// -// assert.Exactly(t, int32(123), int64(123)) -func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Exactly(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// Exactlyf asserts that two objects are equal in value and type. -// -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") -func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Exactlyf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Fail reports a failure through -func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Fail(t, failureMessage, msgAndArgs...) { - return - } - t.FailNow() -} - -// FailNow fails test -func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.FailNow(t, failureMessage, msgAndArgs...) { - return - } - t.FailNow() -} - -// FailNowf fails test -func FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.FailNowf(t, failureMessage, msg, args...) { - return - } - t.FailNow() -} - -// Failf reports a failure through -func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Failf(t, failureMessage, msg, args...) { - return - } - t.FailNow() -} - -// False asserts that the specified value is false. -// -// assert.False(t, myBool) -func False(t TestingT, value bool, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.False(t, value, msgAndArgs...) { - return - } - t.FailNow() -} - -// Falsef asserts that the specified value is false. -// -// assert.Falsef(t, myBool, "error message %s", "formatted") -func Falsef(t TestingT, value bool, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Falsef(t, value, msg, args...) { - return - } - t.FailNow() -} - -// FileExists checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func FileExists(t TestingT, path string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.FileExists(t, path, msgAndArgs...) { - return - } - t.FailNow() -} - -// FileExistsf checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func FileExistsf(t TestingT, path string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.FileExistsf(t, path, msg, args...) { - return - } - t.FailNow() -} - -// Greater asserts that the first element is greater than the second -// -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") -func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Greater(t, e1, e2, msgAndArgs...) { - return - } - t.FailNow() -} - -// GreaterOrEqual asserts that the first element is greater than or equal to the second -// -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") -func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.GreaterOrEqual(t, e1, e2, msgAndArgs...) { - return - } - t.FailNow() -} - -// GreaterOrEqualf asserts that the first element is greater than or equal to the second -// -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") -func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.GreaterOrEqualf(t, e1, e2, msg, args...) { - return - } - t.FailNow() -} - -// Greaterf asserts that the first element is greater than the second -// -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") -func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Greaterf(t, e1, e2, msg, args...) { - return - } - t.FailNow() -} - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPBodyContains(t, handler, method, url, values, str, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPBodyContainsf asserts that a specified handler returns a -// body that contains a string. -// -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPBodyContainsf(t, handler, method, url, values, str, msg, args...) { - return - } - t.FailNow() -} - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPBodyNotContains(t, handler, method, url, values, str, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPBodyNotContainsf asserts that a specified handler returns a -// body that does not contain a string. -// -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPBodyNotContainsf(t, handler, method, url, values, str, msg, args...) { - return - } - t.FailNow() -} - -// HTTPError asserts that a specified handler returns an error status code. -// -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPError(t, handler, method, url, values, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPErrorf asserts that a specified handler returns an error status code. -// -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPErrorf(t, handler, method, url, values, msg, args...) { - return - } - t.FailNow() -} - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPRedirect(t, handler, method, url, values, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPRedirectf asserts that a specified handler returns a redirect status code. -// -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPRedirectf(t, handler, method, url, values, msg, args...) { - return - } - t.FailNow() -} - -// HTTPStatusCode asserts that a specified handler returns a specified status code. -// -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPStatusCode(t, handler, method, url, values, statuscode, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPStatusCodef asserts that a specified handler returns a specified status code. -// -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPStatusCodef(t, handler, method, url, values, statuscode, msg, args...) { - return - } - t.FailNow() -} - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPSuccess(t, handler, method, url, values, msgAndArgs...) { - return - } - t.FailNow() -} - -// HTTPSuccessf asserts that a specified handler returns a success status code. -// -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.HTTPSuccessf(t, handler, method, url, values, msg, args...) { - return - } - t.FailNow() -} - -// Implements asserts that an object is implemented by the specified interface. -// -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) -func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Implements(t, interfaceObject, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// Implementsf asserts that an object is implemented by the specified interface. -// -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") -func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Implementsf(t, interfaceObject, object, msg, args...) { - return - } - t.FailNow() -} - -// InDelta asserts that the two numerals are within delta of each other. -// -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) -func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDelta(t, expected, actual, delta, msgAndArgs...) { - return - } - t.FailNow() -} - -// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func InDeltaMapValues(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDeltaMapValues(t, expected, actual, delta, msgAndArgs...) { - return - } - t.FailNow() -} - -// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDeltaMapValuesf(t, expected, actual, delta, msg, args...) { - return - } - t.FailNow() -} - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func InDeltaSlice(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDeltaSlice(t, expected, actual, delta, msgAndArgs...) { - return - } - t.FailNow() -} - -// InDeltaSlicef is the same as InDelta, except it compares two slices. -func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDeltaSlicef(t, expected, actual, delta, msg, args...) { - return - } - t.FailNow() -} - -// InDeltaf asserts that the two numerals are within delta of each other. -// -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") -func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InDeltaf(t, expected, actual, delta, msg, args...) { - return - } - t.FailNow() -} - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -func InEpsilon(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InEpsilon(t, expected, actual, epsilon, msgAndArgs...) { - return - } - t.FailNow() -} - -// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices. -func InEpsilonSlice(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InEpsilonSlice(t, expected, actual, epsilon, msgAndArgs...) { - return - } - t.FailNow() -} - -// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices. -func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InEpsilonSlicef(t, expected, actual, epsilon, msg, args...) { - return - } - t.FailNow() -} - -// InEpsilonf asserts that expected and actual have a relative error less than epsilon -func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.InEpsilonf(t, expected, actual, epsilon, msg, args...) { - return - } - t.FailNow() -} - -// IsDecreasing asserts that the collection is decreasing -// -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) -func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsDecreasing(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// IsDecreasingf asserts that the collection is decreasing -// -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") -func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsDecreasingf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// IsIncreasing asserts that the collection is increasing -// -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) -func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsIncreasing(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// IsIncreasingf asserts that the collection is increasing -// -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") -func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsIncreasingf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// IsNonDecreasing asserts that the collection is not decreasing -// -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) -func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsNonDecreasing(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// IsNonDecreasingf asserts that the collection is not decreasing -// -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") -func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsNonDecreasingf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// IsNonIncreasing asserts that the collection is not increasing -// -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) -func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsNonIncreasing(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// IsNonIncreasingf asserts that the collection is not increasing -// -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") -func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsNonIncreasingf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// IsType asserts that the specified objects are of the same type. -func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsType(t, expectedType, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// IsTypef asserts that the specified objects are of the same type. -func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.IsTypef(t, expectedType, object, msg, args...) { - return - } - t.FailNow() -} - -// JSONEq asserts that two JSON strings are equivalent. -// -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.JSONEq(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// JSONEqf asserts that two JSON strings are equivalent. -// -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") -func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.JSONEqf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// assert.Len(t, mySlice, 3) -func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Len(t, object, length, msgAndArgs...) { - return - } - t.FailNow() -} - -// Lenf asserts that the specified object has specific length. -// Lenf also fails if the object has a type that len() not accept. -// -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") -func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Lenf(t, object, length, msg, args...) { - return - } - t.FailNow() -} - -// Less asserts that the first element is less than the second -// -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") -func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Less(t, e1, e2, msgAndArgs...) { - return - } - t.FailNow() -} - -// LessOrEqual asserts that the first element is less than or equal to the second -// -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") -func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.LessOrEqual(t, e1, e2, msgAndArgs...) { - return - } - t.FailNow() -} - -// LessOrEqualf asserts that the first element is less than or equal to the second -// -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") -func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.LessOrEqualf(t, e1, e2, msg, args...) { - return - } - t.FailNow() -} - -// Lessf asserts that the first element is less than the second -// -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") -func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Lessf(t, e1, e2, msg, args...) { - return - } - t.FailNow() -} - -// Negative asserts that the specified element is negative -// -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) -func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Negative(t, e, msgAndArgs...) { - return - } - t.FailNow() -} - -// Negativef asserts that the specified element is negative -// -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") -func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Negativef(t, e, msg, args...) { - return - } - t.FailNow() -} - -// Never asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) -func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Never(t, condition, waitFor, tick, msgAndArgs...) { - return - } - t.FailNow() -} - -// Neverf asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Neverf(t, condition, waitFor, tick, msg, args...) { - return - } - t.FailNow() -} - -// Nil asserts that the specified object is nil. -// -// assert.Nil(t, err) -func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Nil(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// Nilf asserts that the specified object is nil. -// -// assert.Nilf(t, err, "error message %s", "formatted") -func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Nilf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// NoDirExists checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func NoDirExists(t TestingT, path string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoDirExists(t, path, msgAndArgs...) { - return - } - t.FailNow() -} - -// NoDirExistsf checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoDirExistsf(t, path, msg, args...) { - return - } - t.FailNow() -} - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) -// } -func NoError(t TestingT, err error, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoError(t, err, msgAndArgs...) { - return - } - t.FailNow() -} - -// NoErrorf asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } -func NoErrorf(t TestingT, err error, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoErrorf(t, err, msg, args...) { - return - } - t.FailNow() -} - -// NoFileExists checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func NoFileExists(t TestingT, path string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoFileExists(t, path, msgAndArgs...) { - return - } - t.FailNow() -} - -// NoFileExistsf checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NoFileExistsf(t, path, msg, args...) { - return - } - t.FailNow() -} - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") -func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotContains(t, s, contains, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") -func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotContainsf(t, s, contains, msg, args...) { - return - } - t.FailNow() -} - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } -func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEmpty(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } -func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEmptyf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// NotEqual asserts that the specified values are NOT equal. -// -// assert.NotEqual(t, obj1, obj2) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEqual(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotEqualValues asserts that two objects are not equal even when converted to the same type -// -// assert.NotEqualValues(t, obj1, obj2) -func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEqualValues(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotEqualValuesf asserts that two objects are not equal even when converted to the same type -// -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") -func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEqualValuesf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// NotEqualf asserts that the specified values are NOT equal. -// -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotEqualf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// NotErrorIs asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotErrorIs(t, err, target, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotErrorIsf asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotErrorIsf(t, err, target, msg, args...) { - return - } - t.FailNow() -} - -// NotNil asserts that the specified object is not nil. -// -// assert.NotNil(t, err) -func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotNil(t, object, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotNilf asserts that the specified object is not nil. -// -// assert.NotNilf(t, err, "error message %s", "formatted") -func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotNilf(t, object, msg, args...) { - return - } - t.FailNow() -} - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// assert.NotPanics(t, func(){ RemainCalm() }) -func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotPanics(t, f, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") -func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotPanicsf(t, f, msg, args...) { - return - } - t.FailNow() -} - -// NotRegexp asserts that a specified regexp does not match a string. -// -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") -func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotRegexp(t, rx, str, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotRegexpf asserts that a specified regexp does not match a string. -// -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") -func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotRegexpf(t, rx, str, msg, args...) { - return - } - t.FailNow() -} - -// NotSame asserts that two pointers do not reference the same object. -// -// assert.NotSame(t, ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotSame(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotSamef asserts that two pointers do not reference the same object. -// -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotSamef(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// NotSubset asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") -func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotSubset(t, list, subset, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotSubsetf asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") -func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotSubsetf(t, list, subset, msg, args...) { - return - } - t.FailNow() -} - -// NotZero asserts that i is not the zero value for its type. -func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotZero(t, i, msgAndArgs...) { - return - } - t.FailNow() -} - -// NotZerof asserts that i is not the zero value for its type. -func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.NotZerof(t, i, msg, args...) { - return - } - t.FailNow() -} - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// assert.Panics(t, func(){ GoCrazy() }) -func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Panics(t, f, msgAndArgs...) { - return - } - t.FailNow() -} - -// PanicsWithError asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) -func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.PanicsWithError(t, errString, f, msgAndArgs...) { - return - } - t.FailNow() -} - -// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.PanicsWithErrorf(t, errString, f, msg, args...) { - return - } - t.FailNow() -} - -// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) -func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.PanicsWithValue(t, expected, f, msgAndArgs...) { - return - } - t.FailNow() -} - -// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.PanicsWithValuef(t, expected, f, msg, args...) { - return - } - t.FailNow() -} - -// Panicsf asserts that the code inside the specified PanicTestFunc panics. -// -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") -func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Panicsf(t, f, msg, args...) { - return - } - t.FailNow() -} - -// Positive asserts that the specified element is positive -// -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) -func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Positive(t, e, msgAndArgs...) { - return - } - t.FailNow() -} - -// Positivef asserts that the specified element is positive -// -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") -func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Positivef(t, e, msg, args...) { - return - } - t.FailNow() -} - -// Regexp asserts that a specified regexp matches a string. -// -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") -func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Regexp(t, rx, str, msgAndArgs...) { - return - } - t.FailNow() -} - -// Regexpf asserts that a specified regexp matches a string. -// -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") -func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Regexpf(t, rx, str, msg, args...) { - return - } - t.FailNow() -} - -// Same asserts that two pointers reference the same object. -// -// assert.Same(t, ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Same(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// Samef asserts that two pointers reference the same object. -// -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func Samef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Samef(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Subset asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") -func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Subset(t, list, subset, msgAndArgs...) { - return - } - t.FailNow() -} - -// Subsetf asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") -func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Subsetf(t, list, subset, msg, args...) { - return - } - t.FailNow() -} - -// True asserts that the specified value is true. -// -// assert.True(t, myBool) -func True(t TestingT, value bool, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.True(t, value, msgAndArgs...) { - return - } - t.FailNow() -} - -// Truef asserts that the specified value is true. -// -// assert.Truef(t, myBool, "error message %s", "formatted") -func Truef(t TestingT, value bool, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Truef(t, value, msg, args...) { - return - } - t.FailNow() -} - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) -func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.WithinDuration(t, expected, actual, delta, msgAndArgs...) { - return - } - t.FailNow() -} - -// WithinDurationf asserts that the two times are within duration delta of each other. -// -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") -func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.WithinDurationf(t, expected, actual, delta, msg, args...) { - return - } - t.FailNow() -} - -// YAMLEq asserts that two YAML strings are equivalent. -func YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.YAMLEq(t, expected, actual, msgAndArgs...) { - return - } - t.FailNow() -} - -// YAMLEqf asserts that two YAML strings are equivalent. -func YAMLEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.YAMLEqf(t, expected, actual, msg, args...) { - return - } - t.FailNow() -} - -// Zero asserts that i is the zero value for its type. -func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Zero(t, i, msgAndArgs...) { - return - } - t.FailNow() -} - -// Zerof asserts that i is the zero value for its type. -func Zerof(t TestingT, i interface{}, msg string, args ...interface{}) { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if assert.Zerof(t, i, msg, args...) { - return - } - t.FailNow() -} diff --git a/vendor/github.com/stretchr/testify/require/require.go.tmpl b/vendor/github.com/stretchr/testify/require/require.go.tmpl deleted file mode 100644 index 55e42dde..00000000 --- a/vendor/github.com/stretchr/testify/require/require.go.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{{.Comment}} -func {{.DocInfo.Name}}(t TestingT, {{.Params}}) { - if h, ok := t.(tHelper); ok { h.Helper() } - if assert.{{.DocInfo.Name}}(t, {{.ForwardedParams}}) { return } - t.FailNow() -} diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go deleted file mode 100644 index ed54a9d8..00000000 --- a/vendor/github.com/stretchr/testify/require/require_forward.go +++ /dev/null @@ -1,1471 +0,0 @@ -/* -* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen -* THIS FILE MUST NOT BE EDITED BY HAND - */ - -package require - -import ( - assert "github.com/stretchr/testify/assert" - http "net/http" - url "net/url" - time "time" -) - -// Condition uses a Comparison to assert a complex condition. -func (a *Assertions) Condition(comp assert.Comparison, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Condition(a.t, comp, msgAndArgs...) -} - -// Conditionf uses a Comparison to assert a complex condition. -func (a *Assertions) Conditionf(comp assert.Comparison, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Conditionf(a.t, comp, msg, args...) -} - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// a.Contains("Hello World", "World") -// a.Contains(["Hello", "World"], "World") -// a.Contains({"Hello": "World"}, "Hello") -func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Contains(a.t, s, contains, msgAndArgs...) -} - -// Containsf asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// a.Containsf("Hello World", "World", "error message %s", "formatted") -// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted") -// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted") -func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Containsf(a.t, s, contains, msg, args...) -} - -// DirExists checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - DirExists(a.t, path, msgAndArgs...) -} - -// DirExistsf checks whether a directory exists in the given path. It also fails -// if the path is a file rather a directory or there is an error checking whether it exists. -func (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - DirExistsf(a.t, path, msg, args...) -} - -// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2]) -func (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ElementsMatch(a.t, listA, listB, msgAndArgs...) -} - -// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified -// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, -// the number of appearances of each of them in both lists should match. -// -// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") -func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ElementsMatchf(a.t, listA, listB, msg, args...) -} - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// a.Empty(obj) -func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Empty(a.t, object, msgAndArgs...) -} - -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// a.Emptyf(obj, "error message %s", "formatted") -func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Emptyf(a.t, object, msg, args...) -} - -// Equal asserts that two objects are equal. -// -// a.Equal(123, 123) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Equal(a.t, expected, actual, msgAndArgs...) -} - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// a.EqualError(err, expectedErrorString) -func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - EqualError(a.t, theError, errString, msgAndArgs...) -} - -// EqualErrorf asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted") -func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - EqualErrorf(a.t, theError, errString, msg, args...) -} - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// a.EqualValues(uint32(123), int32(123)) -func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - EqualValues(a.t, expected, actual, msgAndArgs...) -} - -// EqualValuesf asserts that two objects are equal or convertable to the same types -// and equal. -// -// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") -func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - EqualValuesf(a.t, expected, actual, msg, args...) -} - -// Equalf asserts that two objects are equal. -// -// a.Equalf(123, 123, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). Function equality -// cannot be determined and will always fail. -func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Equalf(a.t, expected, actual, msg, args...) -} - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } -func (a *Assertions) Error(err error, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Error(a.t, err, msgAndArgs...) -} - -// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ErrorAs(a.t, err, target, msgAndArgs...) -} - -// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. -// This is a wrapper for errors.As. -func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ErrorAsf(a.t, err, target, msg, args...) -} - -// ErrorIs asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ErrorIs(a.t, err, target, msgAndArgs...) -} - -// ErrorIsf asserts that at least one of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - ErrorIsf(a.t, err, target, msg, args...) -} - -// Errorf asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } -func (a *Assertions) Errorf(err error, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Errorf(a.t, err, msg, args...) -} - -// Eventually asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// a.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond) -func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Eventually(a.t, condition, waitFor, tick, msgAndArgs...) -} - -// Eventuallyf asserts that given condition will be met in waitFor time, -// periodically checking target function each tick. -// -// a.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Eventuallyf(a.t, condition, waitFor, tick, msg, args...) -} - -// Exactly asserts that two objects are equal in value and type. -// -// a.Exactly(int32(123), int64(123)) -func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Exactly(a.t, expected, actual, msgAndArgs...) -} - -// Exactlyf asserts that two objects are equal in value and type. -// -// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") -func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Exactlyf(a.t, expected, actual, msg, args...) -} - -// Fail reports a failure through -func (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Fail(a.t, failureMessage, msgAndArgs...) -} - -// FailNow fails test -func (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - FailNow(a.t, failureMessage, msgAndArgs...) -} - -// FailNowf fails test -func (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - FailNowf(a.t, failureMessage, msg, args...) -} - -// Failf reports a failure through -func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Failf(a.t, failureMessage, msg, args...) -} - -// False asserts that the specified value is false. -// -// a.False(myBool) -func (a *Assertions) False(value bool, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - False(a.t, value, msgAndArgs...) -} - -// Falsef asserts that the specified value is false. -// -// a.Falsef(myBool, "error message %s", "formatted") -func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Falsef(a.t, value, msg, args...) -} - -// FileExists checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - FileExists(a.t, path, msgAndArgs...) -} - -// FileExistsf checks whether a file exists in the given path. It also fails if -// the path points to a directory or there is an error when trying to check the file. -func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - FileExistsf(a.t, path, msg, args...) -} - -// Greater asserts that the first element is greater than the second -// -// a.Greater(2, 1) -// a.Greater(float64(2), float64(1)) -// a.Greater("b", "a") -func (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Greater(a.t, e1, e2, msgAndArgs...) -} - -// GreaterOrEqual asserts that the first element is greater than or equal to the second -// -// a.GreaterOrEqual(2, 1) -// a.GreaterOrEqual(2, 2) -// a.GreaterOrEqual("b", "a") -// a.GreaterOrEqual("b", "b") -func (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - GreaterOrEqual(a.t, e1, e2, msgAndArgs...) -} - -// GreaterOrEqualf asserts that the first element is greater than or equal to the second -// -// a.GreaterOrEqualf(2, 1, "error message %s", "formatted") -// a.GreaterOrEqualf(2, 2, "error message %s", "formatted") -// a.GreaterOrEqualf("b", "a", "error message %s", "formatted") -// a.GreaterOrEqualf("b", "b", "error message %s", "formatted") -func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - GreaterOrEqualf(a.t, e1, e2, msg, args...) -} - -// Greaterf asserts that the first element is greater than the second -// -// a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") -// a.Greaterf("b", "a", "error message %s", "formatted") -func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Greaterf(a.t, e1, e2, msg, args...) -} - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...) -} - -// HTTPBodyContainsf asserts that a specified handler returns a -// body that contains a string. -// -// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...) -} - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...) -} - -// HTTPBodyNotContainsf asserts that a specified handler returns a -// body that does not contain a string. -// -// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...) -} - -// HTTPError asserts that a specified handler returns an error status code. -// -// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPError(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPErrorf asserts that a specified handler returns an error status code. -// -// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPErrorf(a.t, handler, method, url, values, msg, args...) -} - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPRedirectf asserts that a specified handler returns a redirect status code. -// -// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPRedirectf(a.t, handler, method, url, values, msg, args...) -} - -// HTTPStatusCode asserts that a specified handler returns a specified status code. -// -// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...) -} - -// HTTPStatusCodef asserts that a specified handler returns a specified status code. -// -// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...) -} - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...) -} - -// HTTPSuccessf asserts that a specified handler returns a success status code. -// -// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - HTTPSuccessf(a.t, handler, method, url, values, msg, args...) -} - -// Implements asserts that an object is implemented by the specified interface. -// -// a.Implements((*MyInterface)(nil), new(MyObject)) -func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Implements(a.t, interfaceObject, object, msgAndArgs...) -} - -// Implementsf asserts that an object is implemented by the specified interface. -// -// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") -func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Implementsf(a.t, interfaceObject, object, msg, args...) -} - -// InDelta asserts that the two numerals are within delta of each other. -// -// a.InDelta(math.Pi, 22/7.0, 0.01) -func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDelta(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys. -func (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...) -} - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...) -} - -// InDeltaSlicef is the same as InDelta, except it compares two slices. -func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDeltaSlicef(a.t, expected, actual, delta, msg, args...) -} - -// InDeltaf asserts that the two numerals are within delta of each other. -// -// a.InDeltaf(math.Pi, 22/7.0, 0.01, "error message %s", "formatted") -func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InDeltaf(a.t, expected, actual, delta, msg, args...) -} - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -func (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...) -} - -// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices. -func (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...) -} - -// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices. -func (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...) -} - -// InEpsilonf asserts that expected and actual have a relative error less than epsilon -func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - InEpsilonf(a.t, expected, actual, epsilon, msg, args...) -} - -// IsDecreasing asserts that the collection is decreasing -// -// a.IsDecreasing([]int{2, 1, 0}) -// a.IsDecreasing([]float{2, 1}) -// a.IsDecreasing([]string{"b", "a"}) -func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsDecreasing(a.t, object, msgAndArgs...) -} - -// IsDecreasingf asserts that the collection is decreasing -// -// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") -// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") -func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsDecreasingf(a.t, object, msg, args...) -} - -// IsIncreasing asserts that the collection is increasing -// -// a.IsIncreasing([]int{1, 2, 3}) -// a.IsIncreasing([]float{1, 2}) -// a.IsIncreasing([]string{"a", "b"}) -func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsIncreasing(a.t, object, msgAndArgs...) -} - -// IsIncreasingf asserts that the collection is increasing -// -// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") -// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") -func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsIncreasingf(a.t, object, msg, args...) -} - -// IsNonDecreasing asserts that the collection is not decreasing -// -// a.IsNonDecreasing([]int{1, 1, 2}) -// a.IsNonDecreasing([]float{1, 2}) -// a.IsNonDecreasing([]string{"a", "b"}) -func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsNonDecreasing(a.t, object, msgAndArgs...) -} - -// IsNonDecreasingf asserts that the collection is not decreasing -// -// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") -// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") -func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsNonDecreasingf(a.t, object, msg, args...) -} - -// IsNonIncreasing asserts that the collection is not increasing -// -// a.IsNonIncreasing([]int{2, 1, 1}) -// a.IsNonIncreasing([]float{2, 1}) -// a.IsNonIncreasing([]string{"b", "a"}) -func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsNonIncreasing(a.t, object, msgAndArgs...) -} - -// IsNonIncreasingf asserts that the collection is not increasing -// -// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") -// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") -func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsNonIncreasingf(a.t, object, msg, args...) -} - -// IsType asserts that the specified objects are of the same type. -func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsType(a.t, expectedType, object, msgAndArgs...) -} - -// IsTypef asserts that the specified objects are of the same type. -func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - IsTypef(a.t, expectedType, object, msg, args...) -} - -// JSONEq asserts that two JSON strings are equivalent. -// -// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - JSONEq(a.t, expected, actual, msgAndArgs...) -} - -// JSONEqf asserts that two JSON strings are equivalent. -// -// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") -func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - JSONEqf(a.t, expected, actual, msg, args...) -} - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// a.Len(mySlice, 3) -func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Len(a.t, object, length, msgAndArgs...) -} - -// Lenf asserts that the specified object has specific length. -// Lenf also fails if the object has a type that len() not accept. -// -// a.Lenf(mySlice, 3, "error message %s", "formatted") -func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Lenf(a.t, object, length, msg, args...) -} - -// Less asserts that the first element is less than the second -// -// a.Less(1, 2) -// a.Less(float64(1), float64(2)) -// a.Less("a", "b") -func (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Less(a.t, e1, e2, msgAndArgs...) -} - -// LessOrEqual asserts that the first element is less than or equal to the second -// -// a.LessOrEqual(1, 2) -// a.LessOrEqual(2, 2) -// a.LessOrEqual("a", "b") -// a.LessOrEqual("b", "b") -func (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - LessOrEqual(a.t, e1, e2, msgAndArgs...) -} - -// LessOrEqualf asserts that the first element is less than or equal to the second -// -// a.LessOrEqualf(1, 2, "error message %s", "formatted") -// a.LessOrEqualf(2, 2, "error message %s", "formatted") -// a.LessOrEqualf("a", "b", "error message %s", "formatted") -// a.LessOrEqualf("b", "b", "error message %s", "formatted") -func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - LessOrEqualf(a.t, e1, e2, msg, args...) -} - -// Lessf asserts that the first element is less than the second -// -// a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1), float64(2), "error message %s", "formatted") -// a.Lessf("a", "b", "error message %s", "formatted") -func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Lessf(a.t, e1, e2, msg, args...) -} - -// Negative asserts that the specified element is negative -// -// a.Negative(-1) -// a.Negative(-1.23) -func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Negative(a.t, e, msgAndArgs...) -} - -// Negativef asserts that the specified element is negative -// -// a.Negativef(-1, "error message %s", "formatted") -// a.Negativef(-1.23, "error message %s", "formatted") -func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Negativef(a.t, e, msg, args...) -} - -// Never asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// a.Never(func() bool { return false; }, time.Second, 10*time.Millisecond) -func (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Never(a.t, condition, waitFor, tick, msgAndArgs...) -} - -// Neverf asserts that the given condition doesn't satisfy in waitFor time, -// periodically checking the target function each tick. -// -// a.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") -func (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Neverf(a.t, condition, waitFor, tick, msg, args...) -} - -// Nil asserts that the specified object is nil. -// -// a.Nil(err) -func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Nil(a.t, object, msgAndArgs...) -} - -// Nilf asserts that the specified object is nil. -// -// a.Nilf(err, "error message %s", "formatted") -func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Nilf(a.t, object, msg, args...) -} - -// NoDirExists checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func (a *Assertions) NoDirExists(path string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoDirExists(a.t, path, msgAndArgs...) -} - -// NoDirExistsf checks whether a directory does not exist in the given path. -// It fails if the path points to an existing _directory_ only. -func (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoDirExistsf(a.t, path, msg, args...) -} - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if a.NoError(err) { -// assert.Equal(t, expectedObj, actualObj) -// } -func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoError(a.t, err, msgAndArgs...) -} - -// NoErrorf asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if a.NoErrorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) -// } -func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoErrorf(a.t, err, msg, args...) -} - -// NoFileExists checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func (a *Assertions) NoFileExists(path string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoFileExists(a.t, path, msgAndArgs...) -} - -// NoFileExistsf checks whether a file does not exist in a given path. It fails -// if the path points to an existing _file_ only. -func (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NoFileExistsf(a.t, path, msg, args...) -} - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// a.NotContains("Hello World", "Earth") -// a.NotContains(["Hello", "World"], "Earth") -// a.NotContains({"Hello": "World"}, "Earth") -func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotContains(a.t, s, contains, msgAndArgs...) -} - -// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted") -// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted") -// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted") -func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotContainsf(a.t, s, contains, msg, args...) -} - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if a.NotEmpty(obj) { -// assert.Equal(t, "two", obj[1]) -// } -func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEmpty(a.t, object, msgAndArgs...) -} - -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if a.NotEmptyf(obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) -// } -func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEmptyf(a.t, object, msg, args...) -} - -// NotEqual asserts that the specified values are NOT equal. -// -// a.NotEqual(obj1, obj2) -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEqual(a.t, expected, actual, msgAndArgs...) -} - -// NotEqualValues asserts that two objects are not equal even when converted to the same type -// -// a.NotEqualValues(obj1, obj2) -func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEqualValues(a.t, expected, actual, msgAndArgs...) -} - -// NotEqualValuesf asserts that two objects are not equal even when converted to the same type -// -// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") -func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEqualValuesf(a.t, expected, actual, msg, args...) -} - -// NotEqualf asserts that the specified values are NOT equal. -// -// a.NotEqualf(obj1, obj2, "error message %s", "formatted") -// -// Pointer variable equality is determined based on the equality of the -// referenced values (as opposed to the memory addresses). -func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotEqualf(a.t, expected, actual, msg, args...) -} - -// NotErrorIs asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotErrorIs(a.t, err, target, msgAndArgs...) -} - -// NotErrorIsf asserts that at none of the errors in err's chain matches target. -// This is a wrapper for errors.Is. -func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotErrorIsf(a.t, err, target, msg, args...) -} - -// NotNil asserts that the specified object is not nil. -// -// a.NotNil(err) -func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotNil(a.t, object, msgAndArgs...) -} - -// NotNilf asserts that the specified object is not nil. -// -// a.NotNilf(err, "error message %s", "formatted") -func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotNilf(a.t, object, msg, args...) -} - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// a.NotPanics(func(){ RemainCalm() }) -func (a *Assertions) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotPanics(a.t, f, msgAndArgs...) -} - -// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted") -func (a *Assertions) NotPanicsf(f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotPanicsf(a.t, f, msg, args...) -} - -// NotRegexp asserts that a specified regexp does not match a string. -// -// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") -// a.NotRegexp("^start", "it's not starting") -func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotRegexp(a.t, rx, str, msgAndArgs...) -} - -// NotRegexpf asserts that a specified regexp does not match a string. -// -// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") -func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotRegexpf(a.t, rx, str, msg, args...) -} - -// NotSame asserts that two pointers do not reference the same object. -// -// a.NotSame(ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotSame(a.t, expected, actual, msgAndArgs...) -} - -// NotSamef asserts that two pointers do not reference the same object. -// -// a.NotSamef(ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotSamef(a.t, expected, actual, msg, args...) -} - -// NotSubset asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]") -func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotSubset(a.t, list, subset, msgAndArgs...) -} - -// NotSubsetf asserts that the specified list(array, slice...) contains not all -// elements given in the specified subset(array, slice...). -// -// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted") -func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotSubsetf(a.t, list, subset, msg, args...) -} - -// NotZero asserts that i is not the zero value for its type. -func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotZero(a.t, i, msgAndArgs...) -} - -// NotZerof asserts that i is not the zero value for its type. -func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - NotZerof(a.t, i, msg, args...) -} - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// a.Panics(func(){ GoCrazy() }) -func (a *Assertions) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Panics(a.t, f, msgAndArgs...) -} - -// PanicsWithError asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// a.PanicsWithError("crazy error", func(){ GoCrazy() }) -func (a *Assertions) PanicsWithError(errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - PanicsWithError(a.t, errString, f, msgAndArgs...) -} - -// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc -// panics, and that the recovered panic value is an error that satisfies the -// EqualError comparison. -// -// a.PanicsWithErrorf("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) PanicsWithErrorf(errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - PanicsWithErrorf(a.t, errString, f, msg, args...) -} - -// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// a.PanicsWithValue("crazy error", func(){ GoCrazy() }) -func (a *Assertions) PanicsWithValue(expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - PanicsWithValue(a.t, expected, f, msgAndArgs...) -} - -// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that -// the recovered panic value equals the expected panic value. -// -// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) PanicsWithValuef(expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - PanicsWithValuef(a.t, expected, f, msg, args...) -} - -// Panicsf asserts that the code inside the specified PanicTestFunc panics. -// -// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted") -func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Panicsf(a.t, f, msg, args...) -} - -// Positive asserts that the specified element is positive -// -// a.Positive(1) -// a.Positive(1.23) -func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Positive(a.t, e, msgAndArgs...) -} - -// Positivef asserts that the specified element is positive -// -// a.Positivef(1, "error message %s", "formatted") -// a.Positivef(1.23, "error message %s", "formatted") -func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Positivef(a.t, e, msg, args...) -} - -// Regexp asserts that a specified regexp matches a string. -// -// a.Regexp(regexp.MustCompile("start"), "it's starting") -// a.Regexp("start...$", "it's not starting") -func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Regexp(a.t, rx, str, msgAndArgs...) -} - -// Regexpf asserts that a specified regexp matches a string. -// -// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") -func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Regexpf(a.t, rx, str, msg, args...) -} - -// Same asserts that two pointers reference the same object. -// -// a.Same(ptr1, ptr2) -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Same(a.t, expected, actual, msgAndArgs...) -} - -// Samef asserts that two pointers reference the same object. -// -// a.Samef(ptr1, ptr2, "error message %s", "formatted") -// -// Both arguments must be pointer variables. Pointer variable sameness is -// determined based on the equality of both type and value. -func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Samef(a.t, expected, actual, msg, args...) -} - -// Subset asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]") -func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Subset(a.t, list, subset, msgAndArgs...) -} - -// Subsetf asserts that the specified list(array, slice...) contains all -// elements given in the specified subset(array, slice...). -// -// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted") -func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Subsetf(a.t, list, subset, msg, args...) -} - -// True asserts that the specified value is true. -// -// a.True(myBool) -func (a *Assertions) True(value bool, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - True(a.t, value, msgAndArgs...) -} - -// Truef asserts that the specified value is true. -// -// a.Truef(myBool, "error message %s", "formatted") -func (a *Assertions) Truef(value bool, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Truef(a.t, value, msg, args...) -} - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// a.WithinDuration(time.Now(), time.Now(), 10*time.Second) -func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - WithinDuration(a.t, expected, actual, delta, msgAndArgs...) -} - -// WithinDurationf asserts that the two times are within duration delta of each other. -// -// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") -func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - WithinDurationf(a.t, expected, actual, delta, msg, args...) -} - -// YAMLEq asserts that two YAML strings are equivalent. -func (a *Assertions) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - YAMLEq(a.t, expected, actual, msgAndArgs...) -} - -// YAMLEqf asserts that two YAML strings are equivalent. -func (a *Assertions) YAMLEqf(expected string, actual string, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - YAMLEqf(a.t, expected, actual, msg, args...) -} - -// Zero asserts that i is the zero value for its type. -func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Zero(a.t, i, msgAndArgs...) -} - -// Zerof asserts that i is the zero value for its type. -func (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) { - if h, ok := a.t.(tHelper); ok { - h.Helper() - } - Zerof(a.t, i, msg, args...) -} diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go.tmpl b/vendor/github.com/stretchr/testify/require/require_forward.go.tmpl deleted file mode 100644 index 54124df1..00000000 --- a/vendor/github.com/stretchr/testify/require/require_forward.go.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -{{.CommentWithoutT "a"}} -func (a *Assertions) {{.DocInfo.Name}}({{.Params}}) { - if h, ok := a.t.(tHelper); ok { h.Helper() } - {{.DocInfo.Name}}(a.t, {{.ForwardedParams}}) -} diff --git a/vendor/github.com/stretchr/testify/require/requirements.go b/vendor/github.com/stretchr/testify/require/requirements.go deleted file mode 100644 index 91772dfe..00000000 --- a/vendor/github.com/stretchr/testify/require/requirements.go +++ /dev/null @@ -1,29 +0,0 @@ -package require - -// TestingT is an interface wrapper around *testing.T -type TestingT interface { - Errorf(format string, args ...interface{}) - FailNow() -} - -type tHelper interface { - Helper() -} - -// ComparisonAssertionFunc is a common function prototype when comparing two values. Can be useful -// for table driven tests. -type ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{}) - -// ValueAssertionFunc is a common function prototype when validating a single value. Can be useful -// for table driven tests. -type ValueAssertionFunc func(TestingT, interface{}, ...interface{}) - -// BoolAssertionFunc is a common function prototype when validating a bool value. Can be useful -// for table driven tests. -type BoolAssertionFunc func(TestingT, bool, ...interface{}) - -// ErrorAssertionFunc is a common function prototype when validating an error value. Can be useful -// for table driven tests. -type ErrorAssertionFunc func(TestingT, error, ...interface{}) - -//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=require -template=require.go.tmpl -include-format-funcs" diff --git a/vendor/gopkg.in/yaml.v3/.travis.yml b/vendor/gopkg.in/yaml.v3/.travis.yml deleted file mode 100644 index 04d4dae0..00000000 --- a/vendor/gopkg.in/yaml.v3/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go - -go: - - "1.4.x" - - "1.5.x" - - "1.6.x" - - "1.7.x" - - "1.8.x" - - "1.9.x" - - "1.10.x" - - "1.11.x" - - "1.12.x" - - "1.13.x" - - "tip" - -go_import_path: gopkg.in/yaml.v3 diff --git a/vendor/gopkg.in/yaml.v3/LICENSE b/vendor/gopkg.in/yaml.v3/LICENSE deleted file mode 100644 index 2683e4bb..00000000 --- a/vendor/gopkg.in/yaml.v3/LICENSE +++ /dev/null @@ -1,50 +0,0 @@ - -This project is covered by two different licenses: MIT and Apache. - -#### MIT License #### - -The following files were ported to Go from C files of libyaml, and thus -are still covered by their original MIT license, with the additional -copyright staring in 2011 when the project was ported over: - - apic.go emitterc.go parserc.go readerc.go scannerc.go - writerc.go yamlh.go yamlprivateh.go - -Copyright (c) 2006-2010 Kirill Simonov -Copyright (c) 2006-2011 Kirill Simonov - -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. - -### Apache License ### - -All the remaining project files are covered by the Apache license: - -Copyright (c) 2011-2019 Canonical Ltd - -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. diff --git a/vendor/gopkg.in/yaml.v3/NOTICE b/vendor/gopkg.in/yaml.v3/NOTICE deleted file mode 100644 index 866d74a7..00000000 --- a/vendor/gopkg.in/yaml.v3/NOTICE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2011-2016 Canonical Ltd. - -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. diff --git a/vendor/gopkg.in/yaml.v3/README.md b/vendor/gopkg.in/yaml.v3/README.md deleted file mode 100644 index 08eb1bab..00000000 --- a/vendor/gopkg.in/yaml.v3/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# YAML support for the Go language - -Introduction ------------- - -The yaml package enables Go programs to comfortably encode and decode YAML -values. It was developed within [Canonical](https://www.canonical.com) as -part of the [juju](https://juju.ubuntu.com) project, and is based on a -pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) -C library to parse and generate YAML data quickly and reliably. - -Compatibility -------------- - -The yaml package supports most of YAML 1.2, but preserves some behavior -from 1.1 for backwards compatibility. - -Specifically, as of v3 of the yaml package: - - - YAML 1.1 bools (_yes/no, on/off_) are supported as long as they are being - decoded into a typed bool value. Otherwise they behave as a string. Booleans - in YAML 1.2 are _true/false_ only. - - Octals encode and decode as _0777_ per YAML 1.1, rather than _0o777_ - as specified in YAML 1.2, because most parsers still use the old format. - Octals in the _0o777_ format are supported though, so new files work. - - Does not support base-60 floats. These are gone from YAML 1.2, and were - actually never supported by this package as it's clearly a poor choice. - -and offers backwards -compatibility with YAML 1.1 in some cases. -1.2, including support for -anchors, tags, map merging, etc. Multi-document unmarshalling is not yet -implemented, and base-60 floats from YAML 1.1 are purposefully not -supported since they're a poor design and are gone in YAML 1.2. - -Installation and usage ----------------------- - -The import path for the package is *gopkg.in/yaml.v3*. - -To install it, run: - - go get gopkg.in/yaml.v3 - -API documentation ------------------ - -If opened in a browser, the import path itself leads to the API documentation: - - - [https://gopkg.in/yaml.v3](https://gopkg.in/yaml.v3) - -API stability -------------- - -The package API for yaml v3 will remain stable as described in [gopkg.in](https://gopkg.in). - - -License -------- - -The yaml package is licensed under the MIT and Apache License 2.0 licenses. -Please see the LICENSE file for details. - - -Example -------- - -```Go -package main - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v3" -) - -var data = ` -a: Easy! -b: - c: 2 - d: [3, 4] -` - -// Note: struct fields must be public in order for unmarshal to -// correctly populate the data. -type T struct { - A string - B struct { - RenamedC int `yaml:"c"` - D []int `yaml:",flow"` - } -} - -func main() { - t := T{} - - err := yaml.Unmarshal([]byte(data), &t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t:\n%v\n\n", t) - - d, err := yaml.Marshal(&t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t dump:\n%s\n\n", string(d)) - - m := make(map[interface{}]interface{}) - - err = yaml.Unmarshal([]byte(data), &m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m:\n%v\n\n", m) - - d, err = yaml.Marshal(&m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m dump:\n%s\n\n", string(d)) -} -``` - -This example will generate the following output: - -``` ---- t: -{Easy! {2 [3 4]}} - ---- t dump: -a: Easy! -b: - c: 2 - d: [3, 4] - - ---- m: -map[a:Easy! b:map[c:2 d:[3 4]]] - ---- m dump: -a: Easy! -b: - c: 2 - d: - - 3 - - 4 -``` - diff --git a/vendor/gopkg.in/yaml.v3/apic.go b/vendor/gopkg.in/yaml.v3/apic.go deleted file mode 100644 index 65846e67..00000000 --- a/vendor/gopkg.in/yaml.v3/apic.go +++ /dev/null @@ -1,746 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "io" -) - -func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { - //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) - - // Check if we can move the queue at the beginning of the buffer. - if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { - if parser.tokens_head != len(parser.tokens) { - copy(parser.tokens, parser.tokens[parser.tokens_head:]) - } - parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] - parser.tokens_head = 0 - } - parser.tokens = append(parser.tokens, *token) - if pos < 0 { - return - } - copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) - parser.tokens[parser.tokens_head+pos] = *token -} - -// Create a new parser object. -func yaml_parser_initialize(parser *yaml_parser_t) bool { - *parser = yaml_parser_t{ - raw_buffer: make([]byte, 0, input_raw_buffer_size), - buffer: make([]byte, 0, input_buffer_size), - } - return true -} - -// Destroy a parser object. -func yaml_parser_delete(parser *yaml_parser_t) { - *parser = yaml_parser_t{} -} - -// String read handler. -func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - if parser.input_pos == len(parser.input) { - return 0, io.EOF - } - n = copy(buffer, parser.input[parser.input_pos:]) - parser.input_pos += n - return n, nil -} - -// Reader read handler. -func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - return parser.input_reader.Read(buffer) -} - -// Set a string input. -func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_string_read_handler - parser.input = input - parser.input_pos = 0 -} - -// Set a file input. -func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_reader_read_handler - parser.input_reader = r -} - -// Set the source encoding. -func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { - if parser.encoding != yaml_ANY_ENCODING { - panic("must set the encoding only once") - } - parser.encoding = encoding -} - -// Create a new emitter object. -func yaml_emitter_initialize(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{ - buffer: make([]byte, output_buffer_size), - raw_buffer: make([]byte, 0, output_raw_buffer_size), - states: make([]yaml_emitter_state_t, 0, initial_stack_size), - events: make([]yaml_event_t, 0, initial_queue_size), - } -} - -// Destroy an emitter object. -func yaml_emitter_delete(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{} -} - -// String write handler. -func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - *emitter.output_buffer = append(*emitter.output_buffer, buffer...) - return nil -} - -// yaml_writer_write_handler uses emitter.output_writer to write the -// emitted text. -func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - _, err := emitter.output_writer.Write(buffer) - return err -} - -// Set a string output. -func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_string_write_handler - emitter.output_buffer = output_buffer -} - -// Set a file output. -func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_writer_write_handler - emitter.output_writer = w -} - -// Set the output encoding. -func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { - if emitter.encoding != yaml_ANY_ENCODING { - panic("must set the output encoding only once") - } - emitter.encoding = encoding -} - -// Set the canonical output style. -func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { - emitter.canonical = canonical -} - -// Set the indentation increment. -func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { - if indent < 2 || indent > 9 { - indent = 2 - } - emitter.best_indent = indent -} - -// Set the preferred line width. -func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { - if width < 0 { - width = -1 - } - emitter.best_width = width -} - -// Set if unescaped non-ASCII characters are allowed. -func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { - emitter.unicode = unicode -} - -// Set the preferred line break character. -func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { - emitter.line_break = line_break -} - -///* -// * Destroy a token object. -// */ -// -//YAML_DECLARE(void) -//yaml_token_delete(yaml_token_t *token) -//{ -// assert(token); // Non-NULL token object expected. -// -// switch (token.type) -// { -// case YAML_TAG_DIRECTIVE_TOKEN: -// yaml_free(token.data.tag_directive.handle); -// yaml_free(token.data.tag_directive.prefix); -// break; -// -// case YAML_ALIAS_TOKEN: -// yaml_free(token.data.alias.value); -// break; -// -// case YAML_ANCHOR_TOKEN: -// yaml_free(token.data.anchor.value); -// break; -// -// case YAML_TAG_TOKEN: -// yaml_free(token.data.tag.handle); -// yaml_free(token.data.tag.suffix); -// break; -// -// case YAML_SCALAR_TOKEN: -// yaml_free(token.data.scalar.value); -// break; -// -// default: -// break; -// } -// -// memset(token, 0, sizeof(yaml_token_t)); -//} -// -///* -// * Check if a string is a valid UTF-8 sequence. -// * -// * Check 'reader.c' for more details on UTF-8 encoding. -// */ -// -//static int -//yaml_check_utf8(yaml_char_t *start, size_t length) -//{ -// yaml_char_t *end = start+length; -// yaml_char_t *pointer = start; -// -// while (pointer < end) { -// unsigned char octet; -// unsigned int width; -// unsigned int value; -// size_t k; -// -// octet = pointer[0]; -// width = (octet & 0x80) == 0x00 ? 1 : -// (octet & 0xE0) == 0xC0 ? 2 : -// (octet & 0xF0) == 0xE0 ? 3 : -// (octet & 0xF8) == 0xF0 ? 4 : 0; -// value = (octet & 0x80) == 0x00 ? octet & 0x7F : -// (octet & 0xE0) == 0xC0 ? octet & 0x1F : -// (octet & 0xF0) == 0xE0 ? octet & 0x0F : -// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; -// if (!width) return 0; -// if (pointer+width > end) return 0; -// for (k = 1; k < width; k ++) { -// octet = pointer[k]; -// if ((octet & 0xC0) != 0x80) return 0; -// value = (value << 6) + (octet & 0x3F); -// } -// if (!((width == 1) || -// (width == 2 && value >= 0x80) || -// (width == 3 && value >= 0x800) || -// (width == 4 && value >= 0x10000))) return 0; -// -// pointer += width; -// } -// -// return 1; -//} -// - -// Create STREAM-START. -func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - encoding: encoding, - } -} - -// Create STREAM-END. -func yaml_stream_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - } -} - -// Create DOCUMENT-START. -func yaml_document_start_event_initialize( - event *yaml_event_t, - version_directive *yaml_version_directive_t, - tag_directives []yaml_tag_directive_t, - implicit bool, -) { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: implicit, - } -} - -// Create DOCUMENT-END. -func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - implicit: implicit, - } -} - -// Create ALIAS. -func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool { - *event = yaml_event_t{ - typ: yaml_ALIAS_EVENT, - anchor: anchor, - } - return true -} - -// Create SCALAR. -func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - anchor: anchor, - tag: tag, - value: value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-START. -func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-END. -func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - } - return true -} - -// Create MAPPING-START. -func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } -} - -// Create MAPPING-END. -func yaml_mapping_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - } -} - -// Destroy an event object. -func yaml_event_delete(event *yaml_event_t) { - *event = yaml_event_t{} -} - -///* -// * Create a document object. -// */ -// -//YAML_DECLARE(int) -//yaml_document_initialize(document *yaml_document_t, -// version_directive *yaml_version_directive_t, -// tag_directives_start *yaml_tag_directive_t, -// tag_directives_end *yaml_tag_directive_t, -// start_implicit int, end_implicit int) -//{ -// struct { -// error yaml_error_type_t -// } context -// struct { -// start *yaml_node_t -// end *yaml_node_t -// top *yaml_node_t -// } nodes = { NULL, NULL, NULL } -// version_directive_copy *yaml_version_directive_t = NULL -// struct { -// start *yaml_tag_directive_t -// end *yaml_tag_directive_t -// top *yaml_tag_directive_t -// } tag_directives_copy = { NULL, NULL, NULL } -// value yaml_tag_directive_t = { NULL, NULL } -// mark yaml_mark_t = { 0, 0, 0 } -// -// assert(document) // Non-NULL document object is expected. -// assert((tag_directives_start && tag_directives_end) || -// (tag_directives_start == tag_directives_end)) -// // Valid tag directives are expected. -// -// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error -// -// if (version_directive) { -// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) -// if (!version_directive_copy) goto error -// version_directive_copy.major = version_directive.major -// version_directive_copy.minor = version_directive.minor -// } -// -// if (tag_directives_start != tag_directives_end) { -// tag_directive *yaml_tag_directive_t -// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) -// goto error -// for (tag_directive = tag_directives_start -// tag_directive != tag_directives_end; tag_directive ++) { -// assert(tag_directive.handle) -// assert(tag_directive.prefix) -// if (!yaml_check_utf8(tag_directive.handle, -// strlen((char *)tag_directive.handle))) -// goto error -// if (!yaml_check_utf8(tag_directive.prefix, -// strlen((char *)tag_directive.prefix))) -// goto error -// value.handle = yaml_strdup(tag_directive.handle) -// value.prefix = yaml_strdup(tag_directive.prefix) -// if (!value.handle || !value.prefix) goto error -// if (!PUSH(&context, tag_directives_copy, value)) -// goto error -// value.handle = NULL -// value.prefix = NULL -// } -// } -// -// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, -// tag_directives_copy.start, tag_directives_copy.top, -// start_implicit, end_implicit, mark, mark) -// -// return 1 -// -//error: -// STACK_DEL(&context, nodes) -// yaml_free(version_directive_copy) -// while (!STACK_EMPTY(&context, tag_directives_copy)) { -// value yaml_tag_directive_t = POP(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// } -// STACK_DEL(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// -// return 0 -//} -// -///* -// * Destroy a document object. -// */ -// -//YAML_DECLARE(void) -//yaml_document_delete(document *yaml_document_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// tag_directive *yaml_tag_directive_t -// -// context.error = YAML_NO_ERROR // Eliminate a compiler warning. -// -// assert(document) // Non-NULL document object is expected. -// -// while (!STACK_EMPTY(&context, document.nodes)) { -// node yaml_node_t = POP(&context, document.nodes) -// yaml_free(node.tag) -// switch (node.type) { -// case YAML_SCALAR_NODE: -// yaml_free(node.data.scalar.value) -// break -// case YAML_SEQUENCE_NODE: -// STACK_DEL(&context, node.data.sequence.items) -// break -// case YAML_MAPPING_NODE: -// STACK_DEL(&context, node.data.mapping.pairs) -// break -// default: -// assert(0) // Should not happen. -// } -// } -// STACK_DEL(&context, document.nodes) -// -// yaml_free(document.version_directive) -// for (tag_directive = document.tag_directives.start -// tag_directive != document.tag_directives.end -// tag_directive++) { -// yaml_free(tag_directive.handle) -// yaml_free(tag_directive.prefix) -// } -// yaml_free(document.tag_directives.start) -// -// memset(document, 0, sizeof(yaml_document_t)) -//} -// -///** -// * Get a document node. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_node(document *yaml_document_t, index int) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (index > 0 && document.nodes.start + index <= document.nodes.top) { -// return document.nodes.start + index - 1 -// } -// return NULL -//} -// -///** -// * Get the root object. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_root_node(document *yaml_document_t) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (document.nodes.top != document.nodes.start) { -// return document.nodes.start -// } -// return NULL -//} -// -///* -// * Add a scalar node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_scalar(document *yaml_document_t, -// tag *yaml_char_t, value *yaml_char_t, length int, -// style yaml_scalar_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// value_copy *yaml_char_t = NULL -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// assert(value) // Non-NULL value is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (length < 0) { -// length = strlen((char *)value) -// } -// -// if (!yaml_check_utf8(value, length)) goto error -// value_copy = yaml_malloc(length+1) -// if (!value_copy) goto error -// memcpy(value_copy, value, length) -// value_copy[length] = '\0' -// -// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// yaml_free(tag_copy) -// yaml_free(value_copy) -// -// return 0 -//} -// -///* -// * Add a sequence node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_sequence(document *yaml_document_t, -// tag *yaml_char_t, style yaml_sequence_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_item_t -// end *yaml_node_item_t -// top *yaml_node_item_t -// } items = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error -// -// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, items) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Add a mapping node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_mapping(document *yaml_document_t, -// tag *yaml_char_t, style yaml_mapping_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_pair_t -// end *yaml_node_pair_t -// top *yaml_node_pair_t -// } pairs = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error -// -// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, pairs) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Append an item to a sequence node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_sequence_item(document *yaml_document_t, -// sequence int, item int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// assert(document) // Non-NULL document is required. -// assert(sequence > 0 -// && document.nodes.start + sequence <= document.nodes.top) -// // Valid sequence id is required. -// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) -// // A sequence node is required. -// assert(item > 0 && document.nodes.start + item <= document.nodes.top) -// // Valid item id is required. -// -// if (!PUSH(&context, -// document.nodes.start[sequence-1].data.sequence.items, item)) -// return 0 -// -// return 1 -//} -// -///* -// * Append a pair of a key and a value to a mapping node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_mapping_pair(document *yaml_document_t, -// mapping int, key int, value int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// pair yaml_node_pair_t -// -// assert(document) // Non-NULL document is required. -// assert(mapping > 0 -// && document.nodes.start + mapping <= document.nodes.top) -// // Valid mapping id is required. -// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) -// // A mapping node is required. -// assert(key > 0 && document.nodes.start + key <= document.nodes.top) -// // Valid key id is required. -// assert(value > 0 && document.nodes.start + value <= document.nodes.top) -// // Valid value id is required. -// -// pair.key = key -// pair.value = value -// -// if (!PUSH(&context, -// document.nodes.start[mapping-1].data.mapping.pairs, pair)) -// return 0 -// -// return 1 -//} -// -// diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/gopkg.in/yaml.v3/decode.go deleted file mode 100644 index be63169b..00000000 --- a/vendor/gopkg.in/yaml.v3/decode.go +++ /dev/null @@ -1,931 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// 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 yaml - -import ( - "encoding" - "encoding/base64" - "fmt" - "io" - "math" - "reflect" - "strconv" - "time" -) - -// ---------------------------------------------------------------------------- -// Parser, produces a node tree out of a libyaml event stream. - -type parser struct { - parser yaml_parser_t - event yaml_event_t - doc *Node - anchors map[string]*Node - doneInit bool -} - -func newParser(b []byte) *parser { - p := parser{} - if !yaml_parser_initialize(&p.parser) { - panic("failed to initialize YAML emitter") - } - if len(b) == 0 { - b = []byte{'\n'} - } - yaml_parser_set_input_string(&p.parser, b) - return &p -} - -func newParserFromReader(r io.Reader) *parser { - p := parser{} - if !yaml_parser_initialize(&p.parser) { - panic("failed to initialize YAML emitter") - } - yaml_parser_set_input_reader(&p.parser, r) - return &p -} - -func (p *parser) init() { - if p.doneInit { - return - } - p.anchors = make(map[string]*Node) - p.expect(yaml_STREAM_START_EVENT) - p.doneInit = true -} - -func (p *parser) destroy() { - if p.event.typ != yaml_NO_EVENT { - yaml_event_delete(&p.event) - } - yaml_parser_delete(&p.parser) -} - -// expect consumes an event from the event stream and -// checks that it's of the expected type. -func (p *parser) expect(e yaml_event_type_t) { - if p.event.typ == yaml_NO_EVENT { - if !yaml_parser_parse(&p.parser, &p.event) { - p.fail() - } - } - if p.event.typ == yaml_STREAM_END_EVENT { - failf("attempted to go past the end of stream; corrupted value?") - } - if p.event.typ != e { - p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) - p.fail() - } - yaml_event_delete(&p.event) - p.event.typ = yaml_NO_EVENT -} - -// peek peeks at the next event in the event stream, -// puts the results into p.event and returns the event type. -func (p *parser) peek() yaml_event_type_t { - if p.event.typ != yaml_NO_EVENT { - return p.event.typ - } - if !yaml_parser_parse(&p.parser, &p.event) { - p.fail() - } - return p.event.typ -} - -func (p *parser) fail() { - var where string - var line int - if p.parser.problem_mark.line != 0 { - line = p.parser.problem_mark.line - // Scanner errors don't iterate line before returning error - if p.parser.error == yaml_SCANNER_ERROR { - line++ - } - } else if p.parser.context_mark.line != 0 { - line = p.parser.context_mark.line - } - if line != 0 { - where = "line " + strconv.Itoa(line) + ": " - } - var msg string - if len(p.parser.problem) > 0 { - msg = p.parser.problem - } else { - msg = "unknown problem parsing YAML content" - } - failf("%s%s", where, msg) -} - -func (p *parser) anchor(n *Node, anchor []byte) { - if anchor != nil { - n.Anchor = string(anchor) - p.anchors[n.Anchor] = n - } -} - -func (p *parser) parse() *Node { - p.init() - switch p.peek() { - case yaml_SCALAR_EVENT: - return p.scalar() - case yaml_ALIAS_EVENT: - return p.alias() - case yaml_MAPPING_START_EVENT: - return p.mapping() - case yaml_SEQUENCE_START_EVENT: - return p.sequence() - case yaml_DOCUMENT_START_EVENT: - return p.document() - case yaml_STREAM_END_EVENT: - // Happens when attempting to decode an empty buffer. - return nil - case yaml_TAIL_COMMENT_EVENT: - panic("internal error: unexpected tail comment event (please report)") - default: - panic("internal error: attempted to parse unknown event (please report): " + p.event.typ.String()) - } -} - -func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node { - var style Style - if tag != "" && tag != "!" { - tag = shortTag(tag) - style = TaggedStyle - } else if defaultTag != "" { - tag = defaultTag - } else if kind == ScalarNode { - tag, _ = resolve("", value) - } - return &Node{ - Kind: kind, - Tag: tag, - Value: value, - Style: style, - Line: p.event.start_mark.line + 1, - Column: p.event.start_mark.column + 1, - HeadComment: string(p.event.head_comment), - LineComment: string(p.event.line_comment), - FootComment: string(p.event.foot_comment), - } -} - -func (p *parser) parseChild(parent *Node) *Node { - child := p.parse() - parent.Content = append(parent.Content, child) - return child -} - -func (p *parser) document() *Node { - n := p.node(DocumentNode, "", "", "") - p.doc = n - p.expect(yaml_DOCUMENT_START_EVENT) - p.parseChild(n) - if p.peek() == yaml_DOCUMENT_END_EVENT { - n.FootComment = string(p.event.foot_comment) - } - p.expect(yaml_DOCUMENT_END_EVENT) - return n -} - -func (p *parser) alias() *Node { - n := p.node(AliasNode, "", "", string(p.event.anchor)) - n.Alias = p.anchors[n.Value] - if n.Alias == nil { - failf("unknown anchor '%s' referenced", n.Value) - } - p.expect(yaml_ALIAS_EVENT) - return n -} - -func (p *parser) scalar() *Node { - var parsedStyle = p.event.scalar_style() - var nodeStyle Style - switch { - case parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0: - nodeStyle = DoubleQuotedStyle - case parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0: - nodeStyle = SingleQuotedStyle - case parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0: - nodeStyle = LiteralStyle - case parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0: - nodeStyle = FoldedStyle - } - var nodeValue = string(p.event.value) - var nodeTag = string(p.event.tag) - var defaultTag string - if nodeStyle == 0 { - if nodeValue == "<<" { - defaultTag = mergeTag - } - } else { - defaultTag = strTag - } - n := p.node(ScalarNode, defaultTag, nodeTag, nodeValue) - n.Style |= nodeStyle - p.anchor(n, p.event.anchor) - p.expect(yaml_SCALAR_EVENT) - return n -} - -func (p *parser) sequence() *Node { - n := p.node(SequenceNode, seqTag, string(p.event.tag), "") - if p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 { - n.Style |= FlowStyle - } - p.anchor(n, p.event.anchor) - p.expect(yaml_SEQUENCE_START_EVENT) - for p.peek() != yaml_SEQUENCE_END_EVENT { - p.parseChild(n) - } - n.LineComment = string(p.event.line_comment) - n.FootComment = string(p.event.foot_comment) - p.expect(yaml_SEQUENCE_END_EVENT) - return n -} - -func (p *parser) mapping() *Node { - n := p.node(MappingNode, mapTag, string(p.event.tag), "") - block := true - if p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 { - block = false - n.Style |= FlowStyle - } - p.anchor(n, p.event.anchor) - p.expect(yaml_MAPPING_START_EVENT) - for p.peek() != yaml_MAPPING_END_EVENT { - k := p.parseChild(n) - if block && k.FootComment != "" { - // Must be a foot comment for the prior value when being dedented. - if len(n.Content) > 2 { - n.Content[len(n.Content)-3].FootComment = k.FootComment - k.FootComment = "" - } - } - v := p.parseChild(n) - if k.FootComment == "" && v.FootComment != "" { - k.FootComment = v.FootComment - v.FootComment = "" - } - if p.peek() == yaml_TAIL_COMMENT_EVENT { - if k.FootComment == "" { - k.FootComment = string(p.event.foot_comment) - } - p.expect(yaml_TAIL_COMMENT_EVENT) - } - } - n.LineComment = string(p.event.line_comment) - n.FootComment = string(p.event.foot_comment) - if n.Style&FlowStyle == 0 && n.FootComment != "" && len(n.Content) > 1 { - n.Content[len(n.Content)-2].FootComment = n.FootComment - n.FootComment = "" - } - p.expect(yaml_MAPPING_END_EVENT) - return n -} - -// ---------------------------------------------------------------------------- -// Decoder, unmarshals a node into a provided value. - -type decoder struct { - doc *Node - aliases map[*Node]bool - terrors []string - - stringMapType reflect.Type - generalMapType reflect.Type - - knownFields bool - uniqueKeys bool - decodeCount int - aliasCount int - aliasDepth int -} - -var ( - nodeType = reflect.TypeOf(Node{}) - durationType = reflect.TypeOf(time.Duration(0)) - stringMapType = reflect.TypeOf(map[string]interface{}{}) - generalMapType = reflect.TypeOf(map[interface{}]interface{}{}) - ifaceType = generalMapType.Elem() - timeType = reflect.TypeOf(time.Time{}) - ptrTimeType = reflect.TypeOf(&time.Time{}) -) - -func newDecoder() *decoder { - d := &decoder{ - stringMapType: stringMapType, - generalMapType: generalMapType, - uniqueKeys: true, - } - d.aliases = make(map[*Node]bool) - return d -} - -func (d *decoder) terror(n *Node, tag string, out reflect.Value) { - if n.Tag != "" { - tag = n.Tag - } - value := n.Value - if tag != seqTag && tag != mapTag { - if len(value) > 10 { - value = " `" + value[:7] + "...`" - } else { - value = " `" + value + "`" - } - } - d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.Line, shortTag(tag), value, out.Type())) -} - -func (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) { - err := u.UnmarshalYAML(n) - if e, ok := err.(*TypeError); ok { - d.terrors = append(d.terrors, e.Errors...) - return false - } - if err != nil { - fail(err) - } - return true -} - -func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) { - terrlen := len(d.terrors) - err := u.UnmarshalYAML(func(v interface{}) (err error) { - defer handleErr(&err) - d.unmarshal(n, reflect.ValueOf(v)) - if len(d.terrors) > terrlen { - issues := d.terrors[terrlen:] - d.terrors = d.terrors[:terrlen] - return &TypeError{issues} - } - return nil - }) - if e, ok := err.(*TypeError); ok { - d.terrors = append(d.terrors, e.Errors...) - return false - } - if err != nil { - fail(err) - } - return true -} - -// d.prepare initializes and dereferences pointers and calls UnmarshalYAML -// if a value is found to implement it. -// It returns the initialized and dereferenced out value, whether -// unmarshalling was already done by UnmarshalYAML, and if so whether -// its types unmarshalled appropriately. -// -// If n holds a null value, prepare returns before doing anything. -func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - if n.ShortTag() == nullTag { - return out, false, false - } - again := true - for again { - again = false - if out.Kind() == reflect.Ptr { - if out.IsNil() { - out.Set(reflect.New(out.Type().Elem())) - } - out = out.Elem() - again = true - } - if out.CanAddr() { - outi := out.Addr().Interface() - if u, ok := outi.(Unmarshaler); ok { - good = d.callUnmarshaler(n, u) - return out, true, good - } - if u, ok := outi.(obsoleteUnmarshaler); ok { - good = d.callObsoleteUnmarshaler(n, u) - return out, true, good - } - } - } - return out, false, false -} - -func (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) { - if n.ShortTag() == nullTag { - return reflect.Value{} - } - for _, num := range index { - for { - if v.Kind() == reflect.Ptr { - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - v = v.Elem() - continue - } - break - } - v = v.Field(num) - } - return v -} - -const ( - // 400,000 decode operations is ~500kb of dense object declarations, or - // ~5kb of dense object declarations with 10000% alias expansion - alias_ratio_range_low = 400000 - - // 4,000,000 decode operations is ~5MB of dense object declarations, or - // ~4.5MB of dense object declarations with 10% alias expansion - alias_ratio_range_high = 4000000 - - // alias_ratio_range is the range over which we scale allowed alias ratios - alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low) -) - -func allowedAliasRatio(decodeCount int) float64 { - switch { - case decodeCount <= alias_ratio_range_low: - // allow 99% to come from alias expansion for small-to-medium documents - return 0.99 - case decodeCount >= alias_ratio_range_high: - // allow 10% to come from alias expansion for very large documents - return 0.10 - default: - // scale smoothly from 99% down to 10% over the range. - // this maps to 396,000 - 400,000 allowed alias-driven decodes over the range. - // 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps). - return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range) - } -} - -func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) { - d.decodeCount++ - if d.aliasDepth > 0 { - d.aliasCount++ - } - if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) { - failf("document contains excessive aliasing") - } - if out.Type() == nodeType { - out.Set(reflect.ValueOf(n).Elem()) - return true - } - switch n.Kind { - case DocumentNode: - return d.document(n, out) - case AliasNode: - return d.alias(n, out) - } - out, unmarshaled, good := d.prepare(n, out) - if unmarshaled { - return good - } - switch n.Kind { - case ScalarNode: - good = d.scalar(n, out) - case MappingNode: - good = d.mapping(n, out) - case SequenceNode: - good = d.sequence(n, out) - default: - panic("internal error: unknown node kind: " + strconv.Itoa(int(n.Kind))) - } - return good -} - -func (d *decoder) document(n *Node, out reflect.Value) (good bool) { - if len(n.Content) == 1 { - d.doc = n - d.unmarshal(n.Content[0], out) - return true - } - return false -} - -func (d *decoder) alias(n *Node, out reflect.Value) (good bool) { - if d.aliases[n] { - // TODO this could actually be allowed in some circumstances. - failf("anchor '%s' value contains itself", n.Value) - } - d.aliases[n] = true - d.aliasDepth++ - good = d.unmarshal(n.Alias, out) - d.aliasDepth-- - delete(d.aliases, n) - return good -} - -var zeroValue reflect.Value - -func resetMap(out reflect.Value) { - for _, k := range out.MapKeys() { - out.SetMapIndex(k, zeroValue) - } -} - -func (d *decoder) scalar(n *Node, out reflect.Value) bool { - var tag string - var resolved interface{} - if n.indicatedString() { - tag = strTag - resolved = n.Value - } else { - tag, resolved = resolve(n.Tag, n.Value) - if tag == binaryTag { - data, err := base64.StdEncoding.DecodeString(resolved.(string)) - if err != nil { - failf("!!binary value contains invalid base64 data") - } - resolved = string(data) - } - } - if resolved == nil { - if out.CanAddr() { - switch out.Kind() { - case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: - out.Set(reflect.Zero(out.Type())) - return true - } - } - return false - } - if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { - // We've resolved to exactly the type we want, so use that. - out.Set(resolvedv) - return true - } - // Perhaps we can use the value as a TextUnmarshaler to - // set its value. - if out.CanAddr() { - u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) - if ok { - var text []byte - if tag == binaryTag { - text = []byte(resolved.(string)) - } else { - // We let any value be unmarshaled into TextUnmarshaler. - // That might be more lax than we'd like, but the - // TextUnmarshaler itself should bowl out any dubious values. - text = []byte(n.Value) - } - err := u.UnmarshalText(text) - if err != nil { - fail(err) - } - return true - } - } - switch out.Kind() { - case reflect.String: - if tag == binaryTag { - out.SetString(resolved.(string)) - return true - } - out.SetString(n.Value) - return true - case reflect.Interface: - out.Set(reflect.ValueOf(resolved)) - return true - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - // This used to work in v2, but it's very unfriendly. - isDuration := out.Type() == durationType - - switch resolved := resolved.(type) { - case int: - if !isDuration && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case int64: - if !isDuration && !out.OverflowInt(resolved) { - out.SetInt(resolved) - return true - } - case uint64: - if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case float64: - if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case string: - if out.Type() == durationType { - d, err := time.ParseDuration(resolved) - if err == nil { - out.SetInt(int64(d)) - return true - } - } - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - switch resolved := resolved.(type) { - case int: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case int64: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case uint64: - if !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case float64: - if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - } - case reflect.Bool: - switch resolved := resolved.(type) { - case bool: - out.SetBool(resolved) - return true - case string: - // This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html). - // It only works if explicitly attempting to unmarshal into a typed bool value. - switch resolved { - case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON": - out.SetBool(true) - return true - case "n", "N", "no", "No", "NO", "off", "Off", "OFF": - out.SetBool(false) - return true - } - } - case reflect.Float32, reflect.Float64: - switch resolved := resolved.(type) { - case int: - out.SetFloat(float64(resolved)) - return true - case int64: - out.SetFloat(float64(resolved)) - return true - case uint64: - out.SetFloat(float64(resolved)) - return true - case float64: - out.SetFloat(resolved) - return true - } - case reflect.Struct: - if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { - out.Set(resolvedv) - return true - } - case reflect.Ptr: - panic("yaml internal error: please report the issue") - } - d.terror(n, tag, out) - return false -} - -func settableValueOf(i interface{}) reflect.Value { - v := reflect.ValueOf(i) - sv := reflect.New(v.Type()).Elem() - sv.Set(v) - return sv -} - -func (d *decoder) sequence(n *Node, out reflect.Value) (good bool) { - l := len(n.Content) - - var iface reflect.Value - switch out.Kind() { - case reflect.Slice: - out.Set(reflect.MakeSlice(out.Type(), l, l)) - case reflect.Array: - if l != out.Len() { - failf("invalid array: want %d elements but got %d", out.Len(), l) - } - case reflect.Interface: - // No type hints. Will have to use a generic sequence. - iface = out - out = settableValueOf(make([]interface{}, l)) - default: - d.terror(n, seqTag, out) - return false - } - et := out.Type().Elem() - - j := 0 - for i := 0; i < l; i++ { - e := reflect.New(et).Elem() - if ok := d.unmarshal(n.Content[i], e); ok { - out.Index(j).Set(e) - j++ - } - } - if out.Kind() != reflect.Array { - out.Set(out.Slice(0, j)) - } - if iface.IsValid() { - iface.Set(out) - } - return true -} - -func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { - l := len(n.Content) - if d.uniqueKeys { - nerrs := len(d.terrors) - for i := 0; i < l; i += 2 { - ni := n.Content[i] - for j := i + 2; j < l; j += 2 { - nj := n.Content[j] - if ni.Kind == nj.Kind && ni.Value == nj.Value { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: mapping key %#v already defined at line %d", nj.Line, nj.Value, ni.Line)) - } - } - } - if len(d.terrors) > nerrs { - return false - } - } - switch out.Kind() { - case reflect.Struct: - return d.mappingStruct(n, out) - case reflect.Map: - // okay - case reflect.Interface: - iface := out - if isStringMap(n) { - out = reflect.MakeMap(d.stringMapType) - } else { - out = reflect.MakeMap(d.generalMapType) - } - iface.Set(out) - default: - d.terror(n, mapTag, out) - return false - } - - outt := out.Type() - kt := outt.Key() - et := outt.Elem() - - stringMapType := d.stringMapType - generalMapType := d.generalMapType - if outt.Elem() == ifaceType { - if outt.Key().Kind() == reflect.String { - d.stringMapType = outt - } else if outt.Key() == ifaceType { - d.generalMapType = outt - } - } - - if out.IsNil() { - out.Set(reflect.MakeMap(outt)) - } - for i := 0; i < l; i += 2 { - if isMerge(n.Content[i]) { - d.merge(n.Content[i+1], out) - continue - } - k := reflect.New(kt).Elem() - if d.unmarshal(n.Content[i], k) { - kkind := k.Kind() - if kkind == reflect.Interface { - kkind = k.Elem().Kind() - } - if kkind == reflect.Map || kkind == reflect.Slice { - failf("invalid map key: %#v", k.Interface()) - } - e := reflect.New(et).Elem() - if d.unmarshal(n.Content[i+1], e) { - out.SetMapIndex(k, e) - } - } - } - d.stringMapType = stringMapType - d.generalMapType = generalMapType - return true -} - -func isStringMap(n *Node) bool { - if n.Kind != MappingNode { - return false - } - l := len(n.Content) - for i := 0; i < l; i += 2 { - if n.Content[i].ShortTag() != strTag { - return false - } - } - return true -} - -func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { - sinfo, err := getStructInfo(out.Type()) - if err != nil { - panic(err) - } - - var inlineMap reflect.Value - var elemType reflect.Type - if sinfo.InlineMap != -1 { - inlineMap = out.Field(sinfo.InlineMap) - inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) - elemType = inlineMap.Type().Elem() - } - - for _, index := range sinfo.InlineUnmarshalers { - field := d.fieldByIndex(n, out, index) - d.prepare(n, field) - } - - var doneFields []bool - if d.uniqueKeys { - doneFields = make([]bool, len(sinfo.FieldsList)) - } - name := settableValueOf("") - l := len(n.Content) - for i := 0; i < l; i += 2 { - ni := n.Content[i] - if isMerge(ni) { - d.merge(n.Content[i+1], out) - continue - } - if !d.unmarshal(ni, name) { - continue - } - if info, ok := sinfo.FieldsMap[name.String()]; ok { - if d.uniqueKeys { - if doneFields[info.Id] { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type())) - continue - } - doneFields[info.Id] = true - } - var field reflect.Value - if info.Inline == nil { - field = out.Field(info.Num) - } else { - field = d.fieldByIndex(n, out, info.Inline) - } - d.unmarshal(n.Content[i+1], field) - } else if sinfo.InlineMap != -1 { - if inlineMap.IsNil() { - inlineMap.Set(reflect.MakeMap(inlineMap.Type())) - } - value := reflect.New(elemType).Elem() - d.unmarshal(n.Content[i+1], value) - inlineMap.SetMapIndex(name, value) - } else if d.knownFields { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type())) - } - } - return true -} - -func failWantMap() { - failf("map merge requires map or sequence of maps as the value") -} - -func (d *decoder) merge(n *Node, out reflect.Value) { - switch n.Kind { - case MappingNode: - d.unmarshal(n, out) - case AliasNode: - if n.Alias != nil && n.Alias.Kind != MappingNode { - failWantMap() - } - d.unmarshal(n, out) - case SequenceNode: - // Step backwards as earlier nodes take precedence. - for i := len(n.Content) - 1; i >= 0; i-- { - ni := n.Content[i] - if ni.Kind == AliasNode { - if ni.Alias != nil && ni.Alias.Kind != MappingNode { - failWantMap() - } - } else if ni.Kind != MappingNode { - failWantMap() - } - d.unmarshal(ni, out) - } - default: - failWantMap() - } -} - -func isMerge(n *Node) bool { - return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag) -} diff --git a/vendor/gopkg.in/yaml.v3/emitterc.go b/vendor/gopkg.in/yaml.v3/emitterc.go deleted file mode 100644 index ab2a0661..00000000 --- a/vendor/gopkg.in/yaml.v3/emitterc.go +++ /dev/null @@ -1,1992 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" - "fmt" -) - -// Flush the buffer if needed. -func flush(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) { - return yaml_emitter_flush(emitter) - } - return true -} - -// Put a character to the output buffer. -func put(emitter *yaml_emitter_t, value byte) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - emitter.buffer[emitter.buffer_pos] = value - emitter.buffer_pos++ - emitter.column++ - return true -} - -// Put a line break to the output buffer. -func put_break(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - switch emitter.line_break { - case yaml_CR_BREAK: - emitter.buffer[emitter.buffer_pos] = '\r' - emitter.buffer_pos += 1 - case yaml_LN_BREAK: - emitter.buffer[emitter.buffer_pos] = '\n' - emitter.buffer_pos += 1 - case yaml_CRLN_BREAK: - emitter.buffer[emitter.buffer_pos+0] = '\r' - emitter.buffer[emitter.buffer_pos+1] = '\n' - emitter.buffer_pos += 2 - default: - panic("unknown line break setting") - } - if emitter.column == 0 { - emitter.space_above = true - } - emitter.column = 0 - emitter.line++ - // [Go] Do this here and below and drop from everywhere else (see commented lines). - emitter.indention = true - return true -} - -// Copy a character from a string into buffer. -func write(emitter *yaml_emitter_t, s []byte, i *int) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - p := emitter.buffer_pos - w := width(s[*i]) - switch w { - case 4: - emitter.buffer[p+3] = s[*i+3] - fallthrough - case 3: - emitter.buffer[p+2] = s[*i+2] - fallthrough - case 2: - emitter.buffer[p+1] = s[*i+1] - fallthrough - case 1: - emitter.buffer[p+0] = s[*i+0] - default: - panic("unknown character width") - } - emitter.column++ - emitter.buffer_pos += w - *i += w - return true -} - -// Write a whole string into buffer. -func write_all(emitter *yaml_emitter_t, s []byte) bool { - for i := 0; i < len(s); { - if !write(emitter, s, &i) { - return false - } - } - return true -} - -// Copy a line break character from a string into buffer. -func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { - if s[*i] == '\n' { - if !put_break(emitter) { - return false - } - *i++ - } else { - if !write(emitter, s, i) { - return false - } - if emitter.column == 0 { - emitter.space_above = true - } - emitter.column = 0 - emitter.line++ - // [Go] Do this here and above and drop from everywhere else (see commented lines). - emitter.indention = true - } - return true -} - -// Set an emitter error and return false. -func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_EMITTER_ERROR - emitter.problem = problem - return false -} - -// Emit an event. -func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.events = append(emitter.events, *event) - for !yaml_emitter_need_more_events(emitter) { - event := &emitter.events[emitter.events_head] - if !yaml_emitter_analyze_event(emitter, event) { - return false - } - if !yaml_emitter_state_machine(emitter, event) { - return false - } - yaml_event_delete(event) - emitter.events_head++ - } - return true -} - -// Check if we need to accumulate more events before emitting. -// -// We accumulate extra -// - 1 event for DOCUMENT-START -// - 2 events for SEQUENCE-START -// - 3 events for MAPPING-START -// -func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { - if emitter.events_head == len(emitter.events) { - return true - } - var accumulate int - switch emitter.events[emitter.events_head].typ { - case yaml_DOCUMENT_START_EVENT: - accumulate = 1 - break - case yaml_SEQUENCE_START_EVENT: - accumulate = 2 - break - case yaml_MAPPING_START_EVENT: - accumulate = 3 - break - default: - return false - } - if len(emitter.events)-emitter.events_head > accumulate { - return false - } - var level int - for i := emitter.events_head; i < len(emitter.events); i++ { - switch emitter.events[i].typ { - case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: - level++ - case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: - level-- - } - if level == 0 { - return false - } - } - return true -} - -// Append a directive to the directives stack. -func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { - for i := 0; i < len(emitter.tag_directives); i++ { - if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") - } - } - - // [Go] Do we actually need to copy this given garbage collection - // and the lack of deallocating destructors? - tag_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(tag_copy.handle, value.handle) - copy(tag_copy.prefix, value.prefix) - emitter.tag_directives = append(emitter.tag_directives, tag_copy) - return true -} - -// Increase the indentation level. -func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { - emitter.indents = append(emitter.indents, emitter.indent) - if emitter.indent < 0 { - if flow { - emitter.indent = emitter.best_indent - } else { - emitter.indent = 0 - } - } else if !indentless { - emitter.indent += emitter.best_indent - // [Go] If inside a block sequence item, discount the space taken by the indicator. - if emitter.best_indent > 2 && emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE { - emitter.indent -= 2 - } - } - return true -} - -// State dispatcher. -func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { - switch emitter.state { - default: - case yaml_EMIT_STREAM_START_STATE: - return yaml_emitter_emit_stream_start(emitter, event) - - case yaml_EMIT_FIRST_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, true) - - case yaml_EMIT_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, false) - - case yaml_EMIT_DOCUMENT_CONTENT_STATE: - return yaml_emitter_emit_document_content(emitter, event) - - case yaml_EMIT_DOCUMENT_END_STATE: - return yaml_emitter_emit_document_end(emitter, event) - - case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, true, false) - - case yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false, true) - - case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false, false) - - case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, true, false) - - case yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false, true) - - case yaml_EMIT_FLOW_MAPPING_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false, false) - - case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, false) - - case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, true) - - case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, false) - - case yaml_EMIT_END_STATE: - return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") - } - panic("invalid emitter state") -} - -// Expect STREAM-START. -func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_STREAM_START_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") - } - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = event.encoding - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = yaml_UTF8_ENCODING - } - } - if emitter.best_indent < 2 || emitter.best_indent > 9 { - emitter.best_indent = 2 - } - if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { - emitter.best_width = 80 - } - if emitter.best_width < 0 { - emitter.best_width = 1<<31 - 1 - } - if emitter.line_break == yaml_ANY_BREAK { - emitter.line_break = yaml_LN_BREAK - } - - emitter.indent = -1 - emitter.line = 0 - emitter.column = 0 - emitter.whitespace = true - emitter.indention = true - emitter.space_above = true - emitter.foot_indent = -1 - - if emitter.encoding != yaml_UTF8_ENCODING { - if !yaml_emitter_write_bom(emitter) { - return false - } - } - emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE - return true -} - -// Expect DOCUMENT-START or STREAM-END. -func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - - if event.typ == yaml_DOCUMENT_START_EVENT { - - if event.version_directive != nil { - if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { - return false - } - } - - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { - return false - } - if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { - return false - } - } - - for i := 0; i < len(default_tag_directives); i++ { - tag_directive := &default_tag_directives[i] - if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { - return false - } - } - - implicit := event.implicit - if !first || emitter.canonical { - implicit = false - } - - if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if event.version_directive != nil { - implicit = false - if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if len(event.tag_directives) > 0 { - implicit = false - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { - return false - } - if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if yaml_emitter_check_empty_document(emitter) { - implicit = false - } - if !implicit { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { - return false - } - if emitter.canonical || true { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if len(emitter.head_comment) > 0 { - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !put_break(emitter) { - return false - } - } - - emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE - return true - } - - if event.typ == yaml_STREAM_END_EVENT { - if emitter.open_ended { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_END_STATE - return true - } - - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") -} - -// Expect the root node. -func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !yaml_emitter_emit_node(emitter, event, true, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect DOCUMENT-END. -func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_DOCUMENT_END_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") - } - // [Go] Force document foot separation. - emitter.foot_indent = 0 - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - emitter.foot_indent = -1 - if !yaml_emitter_write_indent(emitter) { - return false - } - if !event.implicit { - // [Go] Allocate the slice elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_DOCUMENT_START_STATE - emitter.tag_directives = emitter.tag_directives[:0] - return true -} - -// Expect a flow item node. -func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_SEQUENCE_END_EVENT { - if emitter.canonical && !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.column == 0 || emitter.canonical && !first { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if emitter.column == 0 { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE) - } else { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) - } - if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { - return false - } - if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a flow key node. -func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_MAPPING_END_EVENT { - if (emitter.canonical || len(emitter.head_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0) && !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if !yaml_emitter_process_head_comment(emitter) { - return false - } - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - - if !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - - if emitter.column == 0 { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a flow value node. -func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { - return false - } - } - if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE) - } else { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) - } - if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { - return false - } - if len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a block item node. -func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - // [Go] The original logic here would not indent the sequence when inside a mapping. - // In Go we always indent it, but take the sequence indicator out of the indentation. - indentless := emitter.best_indent == 2 && emitter.mapping_context && (emitter.column == 0 || !emitter.indention) - original := emitter.indent - if !yaml_emitter_increase_indent(emitter, false, indentless) { - return false - } - if emitter.indent > original+2 { - emitter.indent -= 2 - } - } - if event.typ == yaml_SEQUENCE_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) - if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a block key node. -func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_increase_indent(emitter, false, false) { - return false - } - } - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if event.typ == yaml_MAPPING_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a block value node. -func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) - if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a node. -func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, - root bool, sequence bool, mapping bool, simple_key bool) bool { - - emitter.root_context = root - emitter.sequence_context = sequence - emitter.mapping_context = mapping - emitter.simple_key_context = simple_key - - switch event.typ { - case yaml_ALIAS_EVENT: - return yaml_emitter_emit_alias(emitter, event) - case yaml_SCALAR_EVENT: - return yaml_emitter_emit_scalar(emitter, event) - case yaml_SEQUENCE_START_EVENT: - return yaml_emitter_emit_sequence_start(emitter, event) - case yaml_MAPPING_START_EVENT: - return yaml_emitter_emit_mapping_start(emitter, event) - default: - return yaml_emitter_set_emitter_error(emitter, - fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) - } -} - -// Expect ALIAS. -func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SCALAR. -func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_select_scalar_style(emitter, event) { - return false - } - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - if !yaml_emitter_process_scalar(emitter) { - return false - } - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SEQUENCE-START. -func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || - yaml_emitter_check_empty_sequence(emitter) { - emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE - } - return true -} - -// Expect MAPPING-START. -func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || - yaml_emitter_check_empty_mapping(emitter) { - emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE - } - return true -} - -// Check if the document content is an empty scalar. -func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { - return false // [Go] Huh? -} - -// Check if the next events represent an empty sequence. -func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT -} - -// Check if the next events represent an empty mapping. -func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT -} - -// Check if the next node can be expressed as a simple key. -func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { - length := 0 - switch emitter.events[emitter.events_head].typ { - case yaml_ALIAS_EVENT: - length += len(emitter.anchor_data.anchor) - case yaml_SCALAR_EVENT: - if emitter.scalar_data.multiline { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) + - len(emitter.scalar_data.value) - case yaml_SEQUENCE_START_EVENT: - if !yaml_emitter_check_empty_sequence(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - case yaml_MAPPING_START_EVENT: - if !yaml_emitter_check_empty_mapping(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - default: - return false - } - return length <= 128 -} - -// Determine an acceptable scalar style. -func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 - if no_tag && !event.implicit && !event.quoted_implicit { - return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") - } - - style := event.scalar_style() - if style == yaml_ANY_SCALAR_STYLE { - style = yaml_PLAIN_SCALAR_STYLE - } - if emitter.canonical { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - if emitter.simple_key_context && emitter.scalar_data.multiline { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - if style == yaml_PLAIN_SCALAR_STYLE { - if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || - emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if no_tag && !event.implicit { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { - if !emitter.scalar_data.single_quoted_allowed { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { - if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - - if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { - emitter.tag_data.handle = []byte{'!'} - } - emitter.scalar_data.style = style - return true -} - -// Write an anchor. -func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { - if emitter.anchor_data.anchor == nil { - return true - } - c := []byte{'&'} - if emitter.anchor_data.alias { - c[0] = '*' - } - if !yaml_emitter_write_indicator(emitter, c, true, false, false) { - return false - } - return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) -} - -// Write a tag. -func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { - if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { - return true - } - if len(emitter.tag_data.handle) > 0 { - if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { - return false - } - if len(emitter.tag_data.suffix) > 0 { - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - } - } else { - // [Go] Allocate these slices elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { - return false - } - } - return true -} - -// Write a scalar. -func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { - switch emitter.scalar_data.style { - case yaml_PLAIN_SCALAR_STYLE: - return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_SINGLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_DOUBLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_LITERAL_SCALAR_STYLE: - return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) - - case yaml_FOLDED_SCALAR_STYLE: - return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) - } - panic("unknown scalar style") -} - -// Write a head comment. -func yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool { - if len(emitter.tail_comment) > 0 { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_comment(emitter, emitter.tail_comment) { - return false - } - emitter.tail_comment = emitter.tail_comment[:0] - emitter.foot_indent = emitter.indent - if emitter.foot_indent < 0 { - emitter.foot_indent = 0 - } - } - - if len(emitter.head_comment) == 0 { - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_comment(emitter, emitter.head_comment) { - return false - } - emitter.head_comment = emitter.head_comment[:0] - return true -} - -// Write an line comment. -func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool { - if len(emitter.line_comment) == 0 { - return true - } - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !yaml_emitter_write_comment(emitter, emitter.line_comment) { - return false - } - emitter.line_comment = emitter.line_comment[:0] - return true -} - -// Write a foot comment. -func yaml_emitter_process_foot_comment(emitter *yaml_emitter_t) bool { - if len(emitter.foot_comment) == 0 { - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_comment(emitter, emitter.foot_comment) { - return false - } - emitter.foot_comment = emitter.foot_comment[:0] - emitter.foot_indent = emitter.indent - if emitter.foot_indent < 0 { - emitter.foot_indent = 0 - } - return true -} - -// Check if a %YAML directive is valid. -func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { - if version_directive.major != 1 || version_directive.minor != 1 { - return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") - } - return true -} - -// Check if a %TAG directive is valid. -func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { - handle := tag_directive.handle - prefix := tag_directive.prefix - if len(handle) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") - } - if handle[0] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") - } - if handle[len(handle)-1] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") - } - for i := 1; i < len(handle)-1; i += width(handle[i]) { - if !is_alpha(handle, i) { - return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") - } - } - if len(prefix) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") - } - return true -} - -// Check if an anchor is valid. -func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { - if len(anchor) == 0 { - problem := "anchor value must not be empty" - if alias { - problem = "alias value must not be empty" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - for i := 0; i < len(anchor); i += width(anchor[i]) { - if !is_alpha(anchor, i) { - problem := "anchor value must contain alphanumerical characters only" - if alias { - problem = "alias value must contain alphanumerical characters only" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - } - emitter.anchor_data.anchor = anchor - emitter.anchor_data.alias = alias - return true -} - -// Check if a tag is valid. -func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { - if len(tag) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") - } - for i := 0; i < len(emitter.tag_directives); i++ { - tag_directive := &emitter.tag_directives[i] - if bytes.HasPrefix(tag, tag_directive.prefix) { - emitter.tag_data.handle = tag_directive.handle - emitter.tag_data.suffix = tag[len(tag_directive.prefix):] - return true - } - } - emitter.tag_data.suffix = tag - return true -} - -// Check if a scalar is valid. -func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { - var ( - block_indicators = false - flow_indicators = false - line_breaks = false - special_characters = false - tab_characters = false - - leading_space = false - leading_break = false - trailing_space = false - trailing_break = false - break_space = false - space_break = false - - preceded_by_whitespace = false - followed_by_whitespace = false - previous_space = false - previous_break = false - ) - - emitter.scalar_data.value = value - - if len(value) == 0 { - emitter.scalar_data.multiline = false - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = false - return true - } - - if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { - block_indicators = true - flow_indicators = true - } - - preceded_by_whitespace = true - for i, w := 0, 0; i < len(value); i += w { - w = width(value[i]) - followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) - - if i == 0 { - switch value[i] { - case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': - flow_indicators = true - block_indicators = true - case '?', ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '-': - if followed_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } else { - switch value[i] { - case ',', '?', '[', ']', '{', '}': - flow_indicators = true - case ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '#': - if preceded_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } - - if value[i] == '\t' { - tab_characters = true - } else if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { - special_characters = true - } - if is_space(value, i) { - if i == 0 { - leading_space = true - } - if i+width(value[i]) == len(value) { - trailing_space = true - } - if previous_break { - break_space = true - } - previous_space = true - previous_break = false - } else if is_break(value, i) { - line_breaks = true - if i == 0 { - leading_break = true - } - if i+width(value[i]) == len(value) { - trailing_break = true - } - if previous_space { - space_break = true - } - previous_space = false - previous_break = true - } else { - previous_space = false - previous_break = false - } - - // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. - preceded_by_whitespace = is_blankz(value, i) - } - - emitter.scalar_data.multiline = line_breaks - emitter.scalar_data.flow_plain_allowed = true - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = true - - if leading_space || leading_break || trailing_space || trailing_break { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if trailing_space { - emitter.scalar_data.block_allowed = false - } - if break_space { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - } - if space_break || tab_characters || special_characters { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - } - if space_break || special_characters { - emitter.scalar_data.block_allowed = false - } - if line_breaks { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if flow_indicators { - emitter.scalar_data.flow_plain_allowed = false - } - if block_indicators { - emitter.scalar_data.block_plain_allowed = false - } - return true -} - -// Check if the event data is valid. -func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - emitter.anchor_data.anchor = nil - emitter.tag_data.handle = nil - emitter.tag_data.suffix = nil - emitter.scalar_data.value = nil - - if len(event.head_comment) > 0 { - emitter.head_comment = event.head_comment - } - if len(event.line_comment) > 0 { - emitter.line_comment = event.line_comment - } - if len(event.foot_comment) > 0 { - emitter.foot_comment = event.foot_comment - } - if len(event.tail_comment) > 0 { - emitter.tail_comment = event.tail_comment - } - - switch event.typ { - case yaml_ALIAS_EVENT: - if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { - return false - } - - case yaml_SCALAR_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - if !yaml_emitter_analyze_scalar(emitter, event.value) { - return false - } - - case yaml_SEQUENCE_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - - case yaml_MAPPING_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - } - return true -} - -// Write the BOM character. -func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { - if !flush(emitter) { - return false - } - pos := emitter.buffer_pos - emitter.buffer[pos+0] = '\xEF' - emitter.buffer[pos+1] = '\xBB' - emitter.buffer[pos+2] = '\xBF' - emitter.buffer_pos += 3 - return true -} - -func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { - indent := emitter.indent - if indent < 0 { - indent = 0 - } - if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { - if !put_break(emitter) { - return false - } - } - if emitter.foot_indent == indent { - if !put_break(emitter) { - return false - } - } - for emitter.column < indent { - if !put(emitter, ' ') { - return false - } - } - emitter.whitespace = true - //emitter.indention = true - emitter.space_above = false - emitter.foot_indent = -1 - return true -} - -func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, indicator) { - return false - } - emitter.whitespace = is_whitespace - emitter.indention = (emitter.indention && is_indention) - emitter.open_ended = false - return true -} - -func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - for i := 0; i < len(value); { - var must_write bool - switch value[i] { - case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': - must_write = true - default: - must_write = is_alpha(value, i) - } - if must_write { - if !write(emitter, value, &i) { - return false - } - } else { - w := width(value[i]) - for k := 0; k < w; k++ { - octet := value[i] - i++ - if !put(emitter, '%') { - return false - } - - c := octet >> 4 - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - - c = octet & 0x0f - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - } - } - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - if len(value) > 0 && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - - if len(value) > 0 { - emitter.whitespace = false - } - emitter.indention = false - if emitter.root_context { - emitter.open_ended = true - } - - return true -} - -func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { - return false - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if value[i] == '\'' { - if !put(emitter, '\'') { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - spaces := false - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { - return false - } - - for i := 0; i < len(value); { - if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || - is_bom(value, i) || is_break(value, i) || - value[i] == '"' || value[i] == '\\' { - - octet := value[i] - - var w int - var v rune - switch { - case octet&0x80 == 0x00: - w, v = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, v = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, v = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, v = 4, rune(octet&0x07) - } - for k := 1; k < w; k++ { - octet = value[i+k] - v = (v << 6) + (rune(octet) & 0x3F) - } - i += w - - if !put(emitter, '\\') { - return false - } - - var ok bool - switch v { - case 0x00: - ok = put(emitter, '0') - case 0x07: - ok = put(emitter, 'a') - case 0x08: - ok = put(emitter, 'b') - case 0x09: - ok = put(emitter, 't') - case 0x0A: - ok = put(emitter, 'n') - case 0x0b: - ok = put(emitter, 'v') - case 0x0c: - ok = put(emitter, 'f') - case 0x0d: - ok = put(emitter, 'r') - case 0x1b: - ok = put(emitter, 'e') - case 0x22: - ok = put(emitter, '"') - case 0x5c: - ok = put(emitter, '\\') - case 0x85: - ok = put(emitter, 'N') - case 0xA0: - ok = put(emitter, '_') - case 0x2028: - ok = put(emitter, 'L') - case 0x2029: - ok = put(emitter, 'P') - default: - if v <= 0xFF { - ok = put(emitter, 'x') - w = 2 - } else if v <= 0xFFFF { - ok = put(emitter, 'u') - w = 4 - } else { - ok = put(emitter, 'U') - w = 8 - } - for k := (w - 1) * 4; ok && k >= 0; k -= 4 { - digit := byte((v >> uint(k)) & 0x0F) - if digit < 10 { - ok = put(emitter, digit+'0') - } else { - ok = put(emitter, digit+'A'-10) - } - } - } - if !ok { - return false - } - spaces = false - } else if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { - if !yaml_emitter_write_indent(emitter) { - return false - } - if is_space(value, i+1) { - if !put(emitter, '\\') { - return false - } - } - i += width(value[i]) - } else if !write(emitter, value, &i) { - return false - } - spaces = true - } else { - if !write(emitter, value, &i) { - return false - } - spaces = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { - if is_space(value, 0) || is_break(value, 0) { - indent_hint := []byte{'0' + byte(emitter.best_indent)} - if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { - return false - } - } - - emitter.open_ended = false - - var chomp_hint [1]byte - if len(value) == 0 { - chomp_hint[0] = '-' - } else { - i := len(value) - 1 - for value[i]&0xC0 == 0x80 { - i-- - } - if !is_break(value, i) { - chomp_hint[0] = '-' - } else if i == 0 { - chomp_hint[0] = '+' - emitter.open_ended = true - } else { - i-- - for value[i]&0xC0 == 0x80 { - i-- - } - if is_break(value, i) { - chomp_hint[0] = '+' - emitter.open_ended = true - } - } - } - if chomp_hint[0] != 0 { - if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { - return false - } - } - return true -} - -func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - if !put_break(emitter) { - return false - } - //emitter.indention = true - emitter.whitespace = true - breaks := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - - return true -} - -func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - - if !put_break(emitter) { - return false - } - //emitter.indention = true - emitter.whitespace = true - - breaks := true - leading_spaces := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !breaks && !leading_spaces && value[i] == '\n' { - k := 0 - for is_break(value, k) { - k += width(value[k]) - } - if !is_blankz(value, k) { - if !put_break(emitter) { - return false - } - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - leading_spaces = is_blank(value, i) - } - if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - emitter.indention = false - breaks = false - } - } - return true -} - -func yaml_emitter_write_comment(emitter *yaml_emitter_t, comment []byte) bool { - breaks := false - pound := false - for i := 0; i < len(comment); { - if is_break(comment, i) { - if !write_break(emitter, comment, &i) { - return false - } - //emitter.indention = true - breaks = true - pound = false - } else { - if breaks && !yaml_emitter_write_indent(emitter) { - return false - } - if !pound { - if comment[i] != '#' && (!put(emitter, '#') || !put(emitter, ' ')) { - return false - } - pound = true - } - if !write(emitter, comment, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - if !breaks && !put_break(emitter) { - return false - } - - emitter.whitespace = true - //emitter.indention = true - return true -} diff --git a/vendor/gopkg.in/yaml.v3/encode.go b/vendor/gopkg.in/yaml.v3/encode.go deleted file mode 100644 index 1f37271c..00000000 --- a/vendor/gopkg.in/yaml.v3/encode.go +++ /dev/null @@ -1,561 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// 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 yaml - -import ( - "encoding" - "fmt" - "io" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - "time" - "unicode/utf8" -) - -type encoder struct { - emitter yaml_emitter_t - event yaml_event_t - out []byte - flow bool - indent int - doneInit bool -} - -func newEncoder() *encoder { - e := &encoder{} - yaml_emitter_initialize(&e.emitter) - yaml_emitter_set_output_string(&e.emitter, &e.out) - yaml_emitter_set_unicode(&e.emitter, true) - return e -} - -func newEncoderWithWriter(w io.Writer) *encoder { - e := &encoder{} - yaml_emitter_initialize(&e.emitter) - yaml_emitter_set_output_writer(&e.emitter, w) - yaml_emitter_set_unicode(&e.emitter, true) - return e -} - -func (e *encoder) init() { - if e.doneInit { - return - } - if e.indent == 0 { - e.indent = 4 - } - e.emitter.best_indent = e.indent - yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) - e.emit() - e.doneInit = true -} - -func (e *encoder) finish() { - e.emitter.open_ended = false - yaml_stream_end_event_initialize(&e.event) - e.emit() -} - -func (e *encoder) destroy() { - yaml_emitter_delete(&e.emitter) -} - -func (e *encoder) emit() { - // This will internally delete the e.event value. - e.must(yaml_emitter_emit(&e.emitter, &e.event)) -} - -func (e *encoder) must(ok bool) { - if !ok { - msg := e.emitter.problem - if msg == "" { - msg = "unknown problem generating YAML content" - } - failf("%s", msg) - } -} - -func (e *encoder) marshalDoc(tag string, in reflect.Value) { - e.init() - var node *Node - if in.IsValid() { - node, _ = in.Interface().(*Node) - } - if node != nil && node.Kind == DocumentNode { - e.nodev(in) - } else { - yaml_document_start_event_initialize(&e.event, nil, nil, true) - e.emit() - e.marshal(tag, in) - yaml_document_end_event_initialize(&e.event, true) - e.emit() - } -} - -func (e *encoder) marshal(tag string, in reflect.Value) { - tag = shortTag(tag) - if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { - e.nilv() - return - } - iface := in.Interface() - switch value := iface.(type) { - case *Node: - e.nodev(in) - return - case time.Time: - e.timev(tag, in) - return - case *time.Time: - e.timev(tag, in.Elem()) - return - case time.Duration: - e.stringv(tag, reflect.ValueOf(value.String())) - return - case Marshaler: - v, err := value.MarshalYAML() - if err != nil { - fail(err) - } - if v == nil { - e.nilv() - return - } - e.marshal(tag, reflect.ValueOf(v)) - return - case encoding.TextMarshaler: - text, err := value.MarshalText() - if err != nil { - fail(err) - } - in = reflect.ValueOf(string(text)) - case nil: - e.nilv() - return - } - switch in.Kind() { - case reflect.Interface: - e.marshal(tag, in.Elem()) - case reflect.Map: - e.mapv(tag, in) - case reflect.Ptr: - e.marshal(tag, in.Elem()) - case reflect.Struct: - e.structv(tag, in) - case reflect.Slice, reflect.Array: - e.slicev(tag, in) - case reflect.String: - e.stringv(tag, in) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - e.intv(tag, in) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - e.uintv(tag, in) - case reflect.Float32, reflect.Float64: - e.floatv(tag, in) - case reflect.Bool: - e.boolv(tag, in) - default: - panic("cannot marshal type: " + in.Type().String()) - } -} - -func (e *encoder) mapv(tag string, in reflect.Value) { - e.mappingv(tag, func() { - keys := keyList(in.MapKeys()) - sort.Sort(keys) - for _, k := range keys { - e.marshal("", k) - e.marshal("", in.MapIndex(k)) - } - }) -} - -func (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) { - for _, num := range index { - for { - if v.Kind() == reflect.Ptr { - if v.IsNil() { - return reflect.Value{} - } - v = v.Elem() - continue - } - break - } - v = v.Field(num) - } - return v -} - -func (e *encoder) structv(tag string, in reflect.Value) { - sinfo, err := getStructInfo(in.Type()) - if err != nil { - panic(err) - } - e.mappingv(tag, func() { - for _, info := range sinfo.FieldsList { - var value reflect.Value - if info.Inline == nil { - value = in.Field(info.Num) - } else { - value = e.fieldByIndex(in, info.Inline) - if !value.IsValid() { - continue - } - } - if info.OmitEmpty && isZero(value) { - continue - } - e.marshal("", reflect.ValueOf(info.Key)) - e.flow = info.Flow - e.marshal("", value) - } - if sinfo.InlineMap >= 0 { - m := in.Field(sinfo.InlineMap) - if m.Len() > 0 { - e.flow = false - keys := keyList(m.MapKeys()) - sort.Sort(keys) - for _, k := range keys { - if _, found := sinfo.FieldsMap[k.String()]; found { - panic(fmt.Sprintf("cannot have key %q in inlined map: conflicts with struct field", k.String())) - } - e.marshal("", k) - e.flow = false - e.marshal("", m.MapIndex(k)) - } - } - } - }) -} - -func (e *encoder) mappingv(tag string, f func()) { - implicit := tag == "" - style := yaml_BLOCK_MAPPING_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_MAPPING_STYLE - } - yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) - e.emit() - f() - yaml_mapping_end_event_initialize(&e.event) - e.emit() -} - -func (e *encoder) slicev(tag string, in reflect.Value) { - implicit := tag == "" - style := yaml_BLOCK_SEQUENCE_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_SEQUENCE_STYLE - } - e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) - e.emit() - n := in.Len() - for i := 0; i < n; i++ { - e.marshal("", in.Index(i)) - } - e.must(yaml_sequence_end_event_initialize(&e.event)) - e.emit() -} - -// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. -// -// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported -// in YAML 1.2 and by this package, but these should be marshalled quoted for -// the time being for compatibility with other parsers. -func isBase60Float(s string) (result bool) { - // Fast path. - if s == "" { - return false - } - c := s[0] - if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { - return false - } - // Do the full match. - return base60float.MatchString(s) -} - -// From http://yaml.org/type/float.html, except the regular expression there -// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. -var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) - -// isOldBool returns whether s is bool notation as defined in YAML 1.1. -// -// We continue to force strings that YAML 1.1 would interpret as booleans to be -// rendered as quotes strings so that the marshalled output valid for YAML 1.1 -// parsing. -func isOldBool(s string) (result bool) { - switch s { - case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON", - "n", "N", "no", "No", "NO", "off", "Off", "OFF": - return true - default: - return false - } -} - -func (e *encoder) stringv(tag string, in reflect.Value) { - var style yaml_scalar_style_t - s := in.String() - canUsePlain := true - switch { - case !utf8.ValidString(s): - if tag == binaryTag { - failf("explicitly tagged !!binary data must be base64-encoded") - } - if tag != "" { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) - } - // It can't be encoded directly as YAML so use a binary tag - // and encode it as base64. - tag = binaryTag - s = encodeBase64(s) - case tag == "": - // Check to see if it would resolve to a specific - // tag when encoded unquoted. If it doesn't, - // there's no need to quote it. - rtag, _ := resolve("", s) - canUsePlain = rtag == strTag && !(isBase60Float(s) || isOldBool(s)) - } - // Note: it's possible for user code to emit invalid YAML - // if they explicitly specify a tag and a string containing - // text that's incompatible with that tag. - switch { - case strings.Contains(s, "\n"): - if e.flow { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } else { - style = yaml_LITERAL_SCALAR_STYLE - } - case canUsePlain: - style = yaml_PLAIN_SCALAR_STYLE - default: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - e.emitScalar(s, "", tag, style, nil, nil, nil, nil) -} - -func (e *encoder) boolv(tag string, in reflect.Value) { - var s string - if in.Bool() { - s = "true" - } else { - s = "false" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) intv(tag string, in reflect.Value) { - s := strconv.FormatInt(in.Int(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) uintv(tag string, in reflect.Value) { - s := strconv.FormatUint(in.Uint(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) timev(tag string, in reflect.Value) { - t := in.Interface().(time.Time) - s := t.Format(time.RFC3339Nano) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) floatv(tag string, in reflect.Value) { - // Issue #352: When formatting, use the precision of the underlying value - precision := 64 - if in.Kind() == reflect.Float32 { - precision = 32 - } - - s := strconv.FormatFloat(in.Float(), 'g', -1, precision) - switch s { - case "+Inf": - s = ".inf" - case "-Inf": - s = "-.inf" - case "NaN": - s = ".nan" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) nilv() { - e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil) -} - -func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot, tail []byte) { - // TODO Kill this function. Replace all initialize calls by their underlining Go literals. - implicit := tag == "" - if !implicit { - tag = longTag(tag) - } - e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) - e.event.head_comment = head - e.event.line_comment = line - e.event.foot_comment = foot - e.event.tail_comment = tail - e.emit() -} - -func (e *encoder) nodev(in reflect.Value) { - e.node(in.Interface().(*Node), "") -} - -func (e *encoder) node(node *Node, tail string) { - // If the tag was not explicitly requested, and dropping it won't change the - // implicit tag of the value, don't include it in the presentation. - var tag = node.Tag - var stag = shortTag(tag) - var rtag string - var forceQuoting bool - if tag != "" && node.Style&TaggedStyle == 0 { - if node.Kind == ScalarNode { - if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 { - tag = "" - } else { - rtag, _ = resolve("", node.Value) - if rtag == stag { - tag = "" - } else if stag == strTag { - tag = "" - forceQuoting = true - } - } - } else { - switch node.Kind { - case MappingNode: - rtag = mapTag - case SequenceNode: - rtag = seqTag - } - if rtag == stag { - tag = "" - } - } - } - - switch node.Kind { - case DocumentNode: - yaml_document_start_event_initialize(&e.event, nil, nil, true) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - for _, node := range node.Content { - e.node(node, "") - } - yaml_document_end_event_initialize(&e.event, true) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case SequenceNode: - style := yaml_BLOCK_SEQUENCE_STYLE - if node.Style&FlowStyle != 0 { - style = yaml_FLOW_SEQUENCE_STYLE - } - e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style)) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - for _, node := range node.Content { - e.node(node, "") - } - e.must(yaml_sequence_end_event_initialize(&e.event)) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case MappingNode: - style := yaml_BLOCK_MAPPING_STYLE - if node.Style&FlowStyle != 0 { - style = yaml_FLOW_MAPPING_STYLE - } - yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style) - e.event.tail_comment = []byte(tail) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - - // The tail logic below moves the foot comment of prior keys to the following key, - // since the value for each key may be a nested structure and the foot needs to be - // processed only the entirety of the value is streamed. The last tail is processed - // with the mapping end event. - var tail string - for i := 0; i+1 < len(node.Content); i += 2 { - k := node.Content[i] - foot := k.FootComment - if foot != "" { - kopy := *k - kopy.FootComment = "" - k = &kopy - } - e.node(k, tail) - tail = foot - - v := node.Content[i+1] - e.node(v, "") - } - - yaml_mapping_end_event_initialize(&e.event) - e.event.tail_comment = []byte(tail) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case AliasNode: - yaml_alias_event_initialize(&e.event, []byte(node.Value)) - e.event.head_comment = []byte(node.HeadComment) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case ScalarNode: - value := node.Value - if !utf8.ValidString(value) { - if tag == binaryTag { - failf("explicitly tagged !!binary data must be base64-encoded") - } - if tag != "" { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) - } - // It can't be encoded directly as YAML so use a binary tag - // and encode it as base64. - tag = binaryTag - value = encodeBase64(value) - } - - style := yaml_PLAIN_SCALAR_STYLE - switch { - case node.Style&DoubleQuotedStyle != 0: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - case node.Style&SingleQuotedStyle != 0: - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - case node.Style&LiteralStyle != 0: - style = yaml_LITERAL_SCALAR_STYLE - case node.Style&FoldedStyle != 0: - style = yaml_FOLDED_SCALAR_STYLE - case strings.Contains(value, "\n"): - style = yaml_LITERAL_SCALAR_STYLE - case forceQuoting: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail)) - } -} diff --git a/vendor/gopkg.in/yaml.v3/go.mod b/vendor/gopkg.in/yaml.v3/go.mod deleted file mode 100644 index f407ea32..00000000 --- a/vendor/gopkg.in/yaml.v3/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module "gopkg.in/yaml.v3" - -require ( - "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405 -) diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/gopkg.in/yaml.v3/parserc.go deleted file mode 100644 index aea9050b..00000000 --- a/vendor/gopkg.in/yaml.v3/parserc.go +++ /dev/null @@ -1,1229 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" -) - -// The parser implements the following grammar: -// -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// implicit_document ::= block_node DOCUMENT-END* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// block_node_or_indentless_sequence ::= -// ALIAS -// | properties (block_content | indentless_block_sequence)? -// | block_content -// | indentless_block_sequence -// block_node ::= ALIAS -// | properties block_content? -// | block_content -// flow_node ::= ALIAS -// | properties flow_content? -// | flow_content -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// block_content ::= block_collection | flow_collection | SCALAR -// flow_content ::= flow_collection | SCALAR -// block_collection ::= block_sequence | block_mapping -// flow_collection ::= flow_sequence | flow_mapping -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// block_mapping ::= BLOCK-MAPPING_START -// ((KEY block_node_or_indentless_sequence?)? -// (VALUE block_node_or_indentless_sequence?)?)* -// BLOCK-END -// flow_sequence ::= FLOW-SEQUENCE-START -// (flow_sequence_entry FLOW-ENTRY)* -// flow_sequence_entry? -// FLOW-SEQUENCE-END -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// flow_mapping ::= FLOW-MAPPING-START -// (flow_mapping_entry FLOW-ENTRY)* -// flow_mapping_entry? -// FLOW-MAPPING-END -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - -// Peek the next token in the token queue. -func peek_token(parser *yaml_parser_t) *yaml_token_t { - if parser.token_available || yaml_parser_fetch_more_tokens(parser) { - token := &parser.tokens[parser.tokens_head] - yaml_parser_unfold_comments(parser, token) - return token - } - return nil -} - -// yaml_parser_unfold_comments walks through the comments queue and joins all -// comments behind the position of the provided token into the respective -// top-level comment slices in the parser. -func yaml_parser_unfold_comments(parser *yaml_parser_t, token *yaml_token_t) { - for parser.comments_head < len(parser.comments) && token.start_mark.index >= parser.comments[parser.comments_head].token_mark.index { - comment := &parser.comments[parser.comments_head] - if len(comment.head) > 0 { - if token.typ == yaml_BLOCK_END_TOKEN { - // No heads on ends, so keep comment.head for a follow up token. - break - } - if len(parser.head_comment) > 0 { - parser.head_comment = append(parser.head_comment, '\n') - } - parser.head_comment = append(parser.head_comment, comment.head...) - } - if len(comment.foot) > 0 { - if len(parser.foot_comment) > 0 { - parser.foot_comment = append(parser.foot_comment, '\n') - } - parser.foot_comment = append(parser.foot_comment, comment.foot...) - } - if len(comment.line) > 0 { - if len(parser.line_comment) > 0 { - parser.line_comment = append(parser.line_comment, '\n') - } - parser.line_comment = append(parser.line_comment, comment.line...) - } - *comment = yaml_comment_t{} - parser.comments_head++ - } -} - -// Remove the next token from the queue (must be called after peek_token). -func skip_token(parser *yaml_parser_t) { - parser.token_available = false - parser.tokens_parsed++ - parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN - parser.tokens_head++ -} - -// Get the next event. -func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { - // Erase the event object. - *event = yaml_event_t{} - - // No events after the end of the stream or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { - return true - } - - // Generate the next event. - return yaml_parser_state_machine(parser, event) -} - -// Set parser error. -func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -// State dispatcher. -func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { - //trace("yaml_parser_state_machine", "state:", parser.state.String()) - - switch parser.state { - case yaml_PARSE_STREAM_START_STATE: - return yaml_parser_parse_stream_start(parser, event) - - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, true) - - case yaml_PARSE_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, false) - - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return yaml_parser_parse_document_content(parser, event) - - case yaml_PARSE_DOCUMENT_END_STATE: - return yaml_parser_parse_document_end(parser, event) - - case yaml_PARSE_BLOCK_NODE_STATE: - return yaml_parser_parse_node(parser, event, true, false) - - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return yaml_parser_parse_node(parser, event, true, true) - - case yaml_PARSE_FLOW_NODE_STATE: - return yaml_parser_parse_node(parser, event, false, false) - - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, true) - - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, false) - - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_indentless_sequence_entry(parser, event) - - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, true) - - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, false) - - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return yaml_parser_parse_block_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, true) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, false) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) - - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, true) - - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, true) - - default: - panic("invalid parser state") - } -} - -// Parse the production: -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// ************ -func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_STREAM_START_TOKEN { - return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark) - } - parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - encoding: token.encoding, - } - skip_token(parser) - return true -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// * -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// ************************* -func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - // Parse extra document end indicators. - if !implicit { - for token.typ == yaml_DOCUMENT_END_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && - token.typ != yaml_TAG_DIRECTIVE_TOKEN && - token.typ != yaml_DOCUMENT_START_TOKEN && - token.typ != yaml_STREAM_END_TOKEN { - // Parse an implicit document. - if !yaml_parser_process_directives(parser, nil, nil) { - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_BLOCK_NODE_STATE - - var head_comment []byte - if len(parser.head_comment) > 0 { - // [Go] Scan the header comment backwards, and if an empty line is found, break - // the header so the part before the last empty line goes into the - // document header, while the bottom of it goes into a follow up event. - for i := len(parser.head_comment) - 1; i > 0; i-- { - if parser.head_comment[i] == '\n' { - if i == len(parser.head_comment)-1 { - head_comment = parser.head_comment[:i] - parser.head_comment = parser.head_comment[i+1:] - break - } else if parser.head_comment[i-1] == '\n' { - head_comment = parser.head_comment[:i-1] - parser.head_comment = parser.head_comment[i+1:] - break - } - } - } - } - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - - head_comment: head_comment, - } - - } else if token.typ != yaml_STREAM_END_TOKEN { - // Parse an explicit document. - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - start_mark := token.start_mark - if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { - return false - } - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_DOCUMENT_START_TOKEN { - yaml_parser_set_parser_error(parser, - "did not find expected ", token.start_mark) - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE - end_mark := token.end_mark - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: false, - } - skip_token(parser) - - } else { - // Parse the stream end. - parser.state = yaml_PARSE_END_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - } - - return true -} - -// Parse the productions: -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// *********** -// -func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || - token.typ == yaml_TAG_DIRECTIVE_TOKEN || - token.typ == yaml_DOCUMENT_START_TOKEN || - token.typ == yaml_DOCUMENT_END_TOKEN || - token.typ == yaml_STREAM_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } - return yaml_parser_parse_node(parser, event, true, false) -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// ************* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// -func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - start_mark := token.start_mark - end_mark := token.start_mark - - implicit := true - if token.typ == yaml_DOCUMENT_END_TOKEN { - end_mark = token.end_mark - skip_token(parser) - implicit = false - } - - parser.tag_directives = parser.tag_directives[:0] - - parser.state = yaml_PARSE_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - start_mark: start_mark, - end_mark: end_mark, - implicit: implicit, - } - yaml_parser_set_event_comments(parser, event) - if len(event.head_comment) > 0 && len(event.foot_comment) == 0 { - event.foot_comment = event.head_comment - event.head_comment = nil - } - return true -} - -func yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) { - event.head_comment = parser.head_comment - event.line_comment = parser.line_comment - event.foot_comment = parser.foot_comment - parser.head_comment = nil - parser.line_comment = nil - parser.foot_comment = nil - parser.tail_comment = nil - parser.stem_comment = nil -} - -// Parse the productions: -// block_node_or_indentless_sequence ::= -// ALIAS -// ***** -// | properties (block_content | indentless_block_sequence)? -// ********** * -// | block_content | indentless_block_sequence -// * -// block_node ::= ALIAS -// ***** -// | properties block_content? -// ********** * -// | block_content -// * -// flow_node ::= ALIAS -// ***** -// | properties flow_content? -// ********** * -// | flow_content -// * -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// ************************* -// block_content ::= block_collection | flow_collection | SCALAR -// ****** -// flow_content ::= flow_collection | SCALAR -// ****** -func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { - //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_ALIAS_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - *event = yaml_event_t{ - typ: yaml_ALIAS_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - anchor: token.value, - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true - } - - start_mark := token.start_mark - end_mark := token.start_mark - - var tag_token bool - var tag_handle, tag_suffix, anchor []byte - var tag_mark yaml_mark_t - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - start_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } else if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - start_mark = token.start_mark - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - var tag []byte - if tag_token { - if len(tag_handle) == 0 { - tag = tag_suffix - tag_suffix = nil - } else { - for i := range parser.tag_directives { - if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { - tag = append([]byte(nil), parser.tag_directives[i].prefix...) - tag = append(tag, tag_suffix...) - break - } - } - if len(tag) == 0 { - yaml_parser_set_parser_error_context(parser, - "while parsing a node", start_mark, - "found undefined tag handle", tag_mark) - return false - } - } - } - - implicit := len(tag) == 0 - if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - return true - } - if token.typ == yaml_SCALAR_TOKEN { - var plain_implicit, quoted_implicit bool - end_mark = token.end_mark - if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { - plain_implicit = true - } else if len(tag) == 0 { - quoted_implicit = true - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - value: token.value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(token.style), - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true - } - if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { - // [Go] Some of the events below can be merged as they differ only on style. - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), - } - yaml_parser_set_event_comments(parser, event) - return true - } - if token.typ == yaml_FLOW_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - yaml_parser_set_event_comments(parser, event) - return true - } - if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - if parser.stem_comment != nil { - event.head_comment = parser.stem_comment - parser.stem_comment = nil - } - return true - } - if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), - } - return true - } - if len(anchor) > 0 || len(tag) > 0 { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - quoted_implicit: false, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true - } - - context := "while parsing a flow node" - if block { - context = "while parsing a block node" - } - yaml_parser_set_parser_error_context(parser, context, start_mark, - "did not find expected node content", token.start_mark) - return false -} - -// Parse the productions: -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// ******************** *********** * ********* -// -func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - prior_head := len(parser.head_comment) - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if prior_head > 0 && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { - // [Go] It's a sequence under a sequence entry, so the former head comment - // is for the list itself, not the first list item under it. - parser.stem_comment = parser.head_comment[:prior_head] - if len(parser.head_comment) == prior_head { - parser.head_comment = nil - } else { - // Copy suffix to prevent very strange bugs if someone ever appends - // further bytes to the prefix in the stem_comment slice above. - parser.head_comment = append([]byte(nil), parser.head_comment[prior_head+1:]...) - } - - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } else { - parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } - if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block collection", context_mark, - "did not find expected '-' indicator", token.start_mark) -} - -// Parse the productions: -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// *********** * -func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && - token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? - } - return true -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// ******************* -// ((KEY block_node_or_indentless_sequence?)? -// *** * -// (VALUE block_node_or_indentless_sequence?)?)* -// -// BLOCK-END -// ********* -// -func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - // [Go] A tail comment was left from the prior mapping value processed. Emit an event - // as it needs to be processed with that value and not the following key. - if len(parser.tail_comment) > 0 { - *event = yaml_event_t{ - typ: yaml_TAIL_COMMENT_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - foot_comment: parser.tail_comment, - } - parser.tail_comment = nil - return true - } - - if token.typ == yaml_KEY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block mapping", context_mark, - "did not find expected key", token.start_mark) -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// -// ((KEY block_node_or_indentless_sequence?)? -// -// (VALUE block_node_or_indentless_sequence?)?)* -// ***** * -// BLOCK-END -// -// -func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence ::= FLOW-SEQUENCE-START -// ******************* -// (flow_sequence_entry FLOW-ENTRY)* -// * ********** -// flow_sequence_entry? -// * -// FLOW-SEQUENCE-END -// ***************** -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow sequence", context_mark, - "did not find expected ',' or ']'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - implicit: true, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - skip_token(parser) - return true - } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - yaml_parser_set_event_comments(parser, event) - - skip_token(parser) - return true -} - -// -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// *** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - mark := token.end_mark - skip_token(parser) - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// ***** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? - } - return true -} - -// Parse the productions: -// flow_mapping ::= FLOW-MAPPING-START -// ****************** -// (flow_mapping_entry FLOW-ENTRY)* -// * ********** -// flow_mapping_entry? -// ****************** -// FLOW-MAPPING-END -// **************** -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * *** * -// -func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow mapping", context_mark, - "did not find expected ',' or '}'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } else { - parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true -} - -// Parse the productions: -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * ***** * -// -func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { - token := peek_token(parser) - if token == nil { - return false - } - if empty { - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Generate an empty scalar event. -func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: mark, - end_mark: mark, - value: nil, // Empty - implicit: true, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true -} - -var default_tag_directives = []yaml_tag_directive_t{ - {[]byte("!"), []byte("!")}, - {[]byte("!!"), []byte("tag:yaml.org,2002:")}, -} - -// Parse directives. -func yaml_parser_process_directives(parser *yaml_parser_t, - version_directive_ref **yaml_version_directive_t, - tag_directives_ref *[]yaml_tag_directive_t) bool { - - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - - token := peek_token(parser) - if token == nil { - return false - } - - for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { - if version_directive != nil { - yaml_parser_set_parser_error(parser, - "found duplicate %YAML directive", token.start_mark) - return false - } - if token.major != 1 || token.minor != 1 { - yaml_parser_set_parser_error(parser, - "found incompatible YAML document", token.start_mark) - return false - } - version_directive = &yaml_version_directive_t{ - major: token.major, - minor: token.minor, - } - } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { - value := yaml_tag_directive_t{ - handle: token.value, - prefix: token.prefix, - } - if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { - return false - } - tag_directives = append(tag_directives, value) - } - - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - - for i := range default_tag_directives { - if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { - return false - } - } - - if version_directive_ref != nil { - *version_directive_ref = version_directive - } - if tag_directives_ref != nil { - *tag_directives_ref = tag_directives - } - return true -} - -// Append a tag directive to the directives stack. -func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { - for i := range parser.tag_directives { - if bytes.Equal(value.handle, parser.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) - } - } - - // [Go] I suspect the copy is unnecessary. This was likely done - // because there was no way to track ownership of the data. - value_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(value_copy.handle, value.handle) - copy(value_copy.prefix, value.prefix) - parser.tag_directives = append(parser.tag_directives, value_copy) - return true -} diff --git a/vendor/gopkg.in/yaml.v3/readerc.go b/vendor/gopkg.in/yaml.v3/readerc.go deleted file mode 100644 index b7de0a89..00000000 --- a/vendor/gopkg.in/yaml.v3/readerc.go +++ /dev/null @@ -1,434 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "io" -) - -// Set the reader error and return 0. -func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { - parser.error = yaml_READER_ERROR - parser.problem = problem - parser.problem_offset = offset - parser.problem_value = value - return false -} - -// Byte order marks. -const ( - bom_UTF8 = "\xef\xbb\xbf" - bom_UTF16LE = "\xff\xfe" - bom_UTF16BE = "\xfe\xff" -) - -// Determine the input stream encoding by checking the BOM symbol. If no BOM is -// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. -func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { - // Ensure that we had enough bytes in the raw buffer. - for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { - if !yaml_parser_update_raw_buffer(parser) { - return false - } - } - - // Determine the encoding. - buf := parser.raw_buffer - pos := parser.raw_buffer_pos - avail := len(buf) - pos - if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { - parser.encoding = yaml_UTF16LE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { - parser.encoding = yaml_UTF16BE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { - parser.encoding = yaml_UTF8_ENCODING - parser.raw_buffer_pos += 3 - parser.offset += 3 - } else { - parser.encoding = yaml_UTF8_ENCODING - } - return true -} - -// Update the raw buffer. -func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { - size_read := 0 - - // Return if the raw buffer is full. - if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { - return true - } - - // Return on EOF. - if parser.eof { - return true - } - - // Move the remaining bytes in the raw buffer to the beginning. - if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { - copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) - } - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] - parser.raw_buffer_pos = 0 - - // Call the read handler to fill the buffer. - size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] - if err == io.EOF { - parser.eof = true - } else if err != nil { - return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) - } - return true -} - -// Ensure that the buffer contains at least `length` characters. -// Return true on success, false on failure. -// -// The length is supposed to be significantly less that the buffer size. -func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { - if parser.read_handler == nil { - panic("read handler must be set") - } - - // [Go] This function was changed to guarantee the requested length size at EOF. - // The fact we need to do this is pretty awful, but the description above implies - // for that to be the case, and there are tests - - // If the EOF flag is set and the raw buffer is empty, do nothing. - if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { - // [Go] ACTUALLY! Read the documentation of this function above. - // This is just broken. To return true, we need to have the - // given length in the buffer. Not doing that means every single - // check that calls this function to make sure the buffer has a - // given length is Go) panicking; or C) accessing invalid memory. - //return true - } - - // Return if the buffer contains enough characters. - if parser.unread >= length { - return true - } - - // Determine the input encoding if it is not known yet. - if parser.encoding == yaml_ANY_ENCODING { - if !yaml_parser_determine_encoding(parser) { - return false - } - } - - // Move the unread characters to the beginning of the buffer. - buffer_len := len(parser.buffer) - if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { - copy(parser.buffer, parser.buffer[parser.buffer_pos:]) - buffer_len -= parser.buffer_pos - parser.buffer_pos = 0 - } else if parser.buffer_pos == buffer_len { - buffer_len = 0 - parser.buffer_pos = 0 - } - - // Open the whole buffer for writing, and cut it before returning. - parser.buffer = parser.buffer[:cap(parser.buffer)] - - // Fill the buffer until it has enough characters. - first := true - for parser.unread < length { - - // Fill the raw buffer if necessary. - if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { - if !yaml_parser_update_raw_buffer(parser) { - parser.buffer = parser.buffer[:buffer_len] - return false - } - } - first = false - - // Decode the raw buffer. - inner: - for parser.raw_buffer_pos != len(parser.raw_buffer) { - var value rune - var width int - - raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos - - // Decode the next character. - switch parser.encoding { - case yaml_UTF8_ENCODING: - // Decode a UTF-8 character. Check RFC 3629 - // (http://www.ietf.org/rfc/rfc3629.txt) for more details. - // - // The following table (taken from the RFC) is used for - // decoding. - // - // Char. number range | UTF-8 octet sequence - // (hexadecimal) | (binary) - // --------------------+------------------------------------ - // 0000 0000-0000 007F | 0xxxxxxx - // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - // - // Additionally, the characters in the range 0xD800-0xDFFF - // are prohibited as they are reserved for use with UTF-16 - // surrogate pairs. - - // Determine the length of the UTF-8 sequence. - octet := parser.raw_buffer[parser.raw_buffer_pos] - switch { - case octet&0x80 == 0x00: - width = 1 - case octet&0xE0 == 0xC0: - width = 2 - case octet&0xF0 == 0xE0: - width = 3 - case octet&0xF8 == 0xF0: - width = 4 - default: - // The leading octet is invalid. - return yaml_parser_set_reader_error(parser, - "invalid leading UTF-8 octet", - parser.offset, int(octet)) - } - - // Check if the raw buffer contains an incomplete character. - if width > raw_unread { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-8 octet sequence", - parser.offset, -1) - } - break inner - } - - // Decode the leading octet. - switch { - case octet&0x80 == 0x00: - value = rune(octet & 0x7F) - case octet&0xE0 == 0xC0: - value = rune(octet & 0x1F) - case octet&0xF0 == 0xE0: - value = rune(octet & 0x0F) - case octet&0xF8 == 0xF0: - value = rune(octet & 0x07) - default: - value = 0 - } - - // Check and decode the trailing octets. - for k := 1; k < width; k++ { - octet = parser.raw_buffer[parser.raw_buffer_pos+k] - - // Check if the octet is valid. - if (octet & 0xC0) != 0x80 { - return yaml_parser_set_reader_error(parser, - "invalid trailing UTF-8 octet", - parser.offset+k, int(octet)) - } - - // Decode the octet. - value = (value << 6) + rune(octet&0x3F) - } - - // Check the length of the sequence against the value. - switch { - case width == 1: - case width == 2 && value >= 0x80: - case width == 3 && value >= 0x800: - case width == 4 && value >= 0x10000: - default: - return yaml_parser_set_reader_error(parser, - "invalid length of a UTF-8 sequence", - parser.offset, -1) - } - - // Check the range of the value. - if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { - return yaml_parser_set_reader_error(parser, - "invalid Unicode character", - parser.offset, int(value)) - } - - case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: - var low, high int - if parser.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - low, high = 1, 0 - } - - // The UTF-16 encoding is not as simple as one might - // naively think. Check RFC 2781 - // (http://www.ietf.org/rfc/rfc2781.txt). - // - // Normally, two subsequent bytes describe a Unicode - // character. However a special technique (called a - // surrogate pair) is used for specifying character - // values larger than 0xFFFF. - // - // A surrogate pair consists of two pseudo-characters: - // high surrogate area (0xD800-0xDBFF) - // low surrogate area (0xDC00-0xDFFF) - // - // The following formulas are used for decoding - // and encoding characters using surrogate pairs: - // - // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) - // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) - // W1 = 110110yyyyyyyyyy - // W2 = 110111xxxxxxxxxx - // - // where U is the character value, W1 is the high surrogate - // area, W2 is the low surrogate area. - - // Check for incomplete UTF-16 character. - if raw_unread < 2 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 character", - parser.offset, -1) - } - break inner - } - - // Get the character. - value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) - - // Check for unexpected low surrogate area. - if value&0xFC00 == 0xDC00 { - return yaml_parser_set_reader_error(parser, - "unexpected low surrogate area", - parser.offset, int(value)) - } - - // Check for a high surrogate area. - if value&0xFC00 == 0xD800 { - width = 4 - - // Check for incomplete surrogate pair. - if raw_unread < 4 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 surrogate pair", - parser.offset, -1) - } - break inner - } - - // Get the next character. - value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) - - // Check for a low surrogate area. - if value2&0xFC00 != 0xDC00 { - return yaml_parser_set_reader_error(parser, - "expected low surrogate area", - parser.offset+2, int(value2)) - } - - // Generate the value of the surrogate pair. - value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) - } else { - width = 2 - } - - default: - panic("impossible") - } - - // Check if the character is in the allowed range: - // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) - // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) - // | [#x10000-#x10FFFF] (32 bit) - switch { - case value == 0x09: - case value == 0x0A: - case value == 0x0D: - case value >= 0x20 && value <= 0x7E: - case value == 0x85: - case value >= 0xA0 && value <= 0xD7FF: - case value >= 0xE000 && value <= 0xFFFD: - case value >= 0x10000 && value <= 0x10FFFF: - default: - return yaml_parser_set_reader_error(parser, - "control characters are not allowed", - parser.offset, int(value)) - } - - // Move the raw pointers. - parser.raw_buffer_pos += width - parser.offset += width - - // Finally put the character into the buffer. - if value <= 0x7F { - // 0000 0000-0000 007F . 0xxxxxxx - parser.buffer[buffer_len+0] = byte(value) - buffer_len += 1 - } else if value <= 0x7FF { - // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) - parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) - buffer_len += 2 - } else if value <= 0xFFFF { - // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) - buffer_len += 3 - } else { - // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) - buffer_len += 4 - } - - parser.unread++ - } - - // On EOF, put NUL into the buffer and return. - if parser.eof { - parser.buffer[buffer_len] = 0 - buffer_len++ - parser.unread++ - break - } - } - // [Go] Read the documentation of this function above. To return true, - // we need to have the given length in the buffer. Not doing that means - // every single check that calls this function to make sure the buffer - // has a given length is Go) panicking; or C) accessing invalid memory. - // This happens here due to the EOF above breaking early. - for buffer_len < length { - parser.buffer[buffer_len] = 0 - buffer_len++ - } - parser.buffer = parser.buffer[:buffer_len] - return true -} diff --git a/vendor/gopkg.in/yaml.v3/resolve.go b/vendor/gopkg.in/yaml.v3/resolve.go deleted file mode 100644 index 64ae8880..00000000 --- a/vendor/gopkg.in/yaml.v3/resolve.go +++ /dev/null @@ -1,326 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// 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 yaml - -import ( - "encoding/base64" - "math" - "regexp" - "strconv" - "strings" - "time" -) - -type resolveMapItem struct { - value interface{} - tag string -} - -var resolveTable = make([]byte, 256) -var resolveMap = make(map[string]resolveMapItem) - -func init() { - t := resolveTable - t[int('+')] = 'S' // Sign - t[int('-')] = 'S' - for _, c := range "0123456789" { - t[int(c)] = 'D' // Digit - } - for _, c := range "yYnNtTfFoO~" { - t[int(c)] = 'M' // In map - } - t[int('.')] = '.' // Float (potentially in map) - - var resolveMapList = []struct { - v interface{} - tag string - l []string - }{ - {true, boolTag, []string{"true", "True", "TRUE"}}, - {false, boolTag, []string{"false", "False", "FALSE"}}, - {nil, nullTag, []string{"", "~", "null", "Null", "NULL"}}, - {math.NaN(), floatTag, []string{".nan", ".NaN", ".NAN"}}, - {math.Inf(+1), floatTag, []string{".inf", ".Inf", ".INF"}}, - {math.Inf(+1), floatTag, []string{"+.inf", "+.Inf", "+.INF"}}, - {math.Inf(-1), floatTag, []string{"-.inf", "-.Inf", "-.INF"}}, - {"<<", mergeTag, []string{"<<"}}, - } - - m := resolveMap - for _, item := range resolveMapList { - for _, s := range item.l { - m[s] = resolveMapItem{item.v, item.tag} - } - } -} - -const ( - nullTag = "!!null" - boolTag = "!!bool" - strTag = "!!str" - intTag = "!!int" - floatTag = "!!float" - timestampTag = "!!timestamp" - seqTag = "!!seq" - mapTag = "!!map" - binaryTag = "!!binary" - mergeTag = "!!merge" -) - -var longTags = make(map[string]string) -var shortTags = make(map[string]string) - -func init() { - for _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} { - ltag := longTag(stag) - longTags[stag] = ltag - shortTags[ltag] = stag - } -} - -const longTagPrefix = "tag:yaml.org,2002:" - -func shortTag(tag string) string { - if strings.HasPrefix(tag, longTagPrefix) { - if stag, ok := shortTags[tag]; ok { - return stag - } - return "!!" + tag[len(longTagPrefix):] - } - return tag -} - -func longTag(tag string) string { - if strings.HasPrefix(tag, "!!") { - if ltag, ok := longTags[tag]; ok { - return ltag - } - return longTagPrefix + tag[2:] - } - return tag -} - -func resolvableTag(tag string) bool { - switch tag { - case "", strTag, boolTag, intTag, floatTag, nullTag, timestampTag: - return true - } - return false -} - -var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) - -func resolve(tag string, in string) (rtag string, out interface{}) { - tag = shortTag(tag) - if !resolvableTag(tag) { - return tag, in - } - - defer func() { - switch tag { - case "", rtag, strTag, binaryTag: - return - case floatTag: - if rtag == intTag { - switch v := out.(type) { - case int64: - rtag = floatTag - out = float64(v) - return - case int: - rtag = floatTag - out = float64(v) - return - } - } - } - failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) - }() - - // Any data is accepted as a !!str or !!binary. - // Otherwise, the prefix is enough of a hint about what it might be. - hint := byte('N') - if in != "" { - hint = resolveTable[in[0]] - } - if hint != 0 && tag != strTag && tag != binaryTag { - // Handle things we can lookup in a map. - if item, ok := resolveMap[in]; ok { - return item.tag, item.value - } - - // Base 60 floats are a bad idea, were dropped in YAML 1.2, and - // are purposefully unsupported here. They're still quoted on - // the way out for compatibility with other parser, though. - - switch hint { - case 'M': - // We've already checked the map above. - - case '.': - // Not in the map, so maybe a normal float. - floatv, err := strconv.ParseFloat(in, 64) - if err == nil { - return floatTag, floatv - } - - case 'D', 'S': - // Int, float, or timestamp. - // Only try values as a timestamp if the value is unquoted or there's an explicit - // !!timestamp tag. - if tag == "" || tag == timestampTag { - t, ok := parseTimestamp(in) - if ok { - return timestampTag, t - } - } - - plain := strings.Replace(in, "_", "", -1) - intv, err := strconv.ParseInt(plain, 0, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain, 0, 64) - if err == nil { - return intTag, uintv - } - if yamlStyleFloat.MatchString(plain) { - floatv, err := strconv.ParseFloat(plain, 64) - if err == nil { - return floatTag, floatv - } - } - if strings.HasPrefix(plain, "0b") { - intv, err := strconv.ParseInt(plain[2:], 2, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain[2:], 2, 64) - if err == nil { - return intTag, uintv - } - } else if strings.HasPrefix(plain, "-0b") { - intv, err := strconv.ParseInt("-"+plain[3:], 2, 64) - if err == nil { - if true || intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - } - // Octals as introduced in version 1.2 of the spec. - // Octals from the 1.1 spec, spelled as 0777, are still - // decoded by default in v3 as well for compatibility. - // May be dropped in v4 depending on how usage evolves. - if strings.HasPrefix(plain, "0o") { - intv, err := strconv.ParseInt(plain[2:], 8, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain[2:], 8, 64) - if err == nil { - return intTag, uintv - } - } else if strings.HasPrefix(plain, "-0o") { - intv, err := strconv.ParseInt("-"+plain[3:], 8, 64) - if err == nil { - if true || intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - } - default: - panic("internal error: missing handler for resolver table: " + string(rune(hint)) + " (with " + in + ")") - } - } - return strTag, in -} - -// encodeBase64 encodes s as base64 that is broken up into multiple lines -// as appropriate for the resulting length. -func encodeBase64(s string) string { - const lineLen = 70 - encLen := base64.StdEncoding.EncodedLen(len(s)) - lines := encLen/lineLen + 1 - buf := make([]byte, encLen*2+lines) - in := buf[0:encLen] - out := buf[encLen:] - base64.StdEncoding.Encode(in, []byte(s)) - k := 0 - for i := 0; i < len(in); i += lineLen { - j := i + lineLen - if j > len(in) { - j = len(in) - } - k += copy(out[k:], in[i:j]) - if lines > 1 { - out[k] = '\n' - k++ - } - } - return string(out[:k]) -} - -// This is a subset of the formats allowed by the regular expression -// defined at http://yaml.org/type/timestamp.html. -var allowedTimestampFormats = []string{ - "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. - "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". - "2006-1-2 15:4:5.999999999", // space separated with no time zone - "2006-1-2", // date only - // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" - // from the set of examples. -} - -// parseTimestamp parses s as a timestamp string and -// returns the timestamp and reports whether it succeeded. -// Timestamp formats are defined at http://yaml.org/type/timestamp.html -func parseTimestamp(s string) (time.Time, bool) { - // TODO write code to check all the formats supported by - // http://yaml.org/type/timestamp.html instead of using time.Parse. - - // Quick check: all date formats start with YYYY-. - i := 0 - for ; i < len(s); i++ { - if c := s[i]; c < '0' || c > '9' { - break - } - } - if i != 4 || i == len(s) || s[i] != '-' { - return time.Time{}, false - } - for _, format := range allowedTimestampFormats { - if t, err := time.Parse(format, s); err == nil { - return t, true - } - } - return time.Time{}, false -} diff --git a/vendor/gopkg.in/yaml.v3/scannerc.go b/vendor/gopkg.in/yaml.v3/scannerc.go deleted file mode 100644 index 57e954ca..00000000 --- a/vendor/gopkg.in/yaml.v3/scannerc.go +++ /dev/null @@ -1,3025 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" - "fmt" -) - -// Introduction -// ************ -// -// The following notes assume that you are familiar with the YAML specification -// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in -// some cases we are less restrictive that it requires. -// -// The process of transforming a YAML stream into a sequence of events is -// divided on two steps: Scanning and Parsing. -// -// The Scanner transforms the input stream into a sequence of tokens, while the -// parser transform the sequence of tokens produced by the Scanner into a -// sequence of parsing events. -// -// The Scanner is rather clever and complicated. The Parser, on the contrary, -// is a straightforward implementation of a recursive-descendant parser (or, -// LL(1) parser, as it is usually called). -// -// Actually there are two issues of Scanning that might be called "clever", the -// rest is quite straightforward. The issues are "block collection start" and -// "simple keys". Both issues are explained below in details. -// -// Here the Scanning step is explained and implemented. We start with the list -// of all the tokens produced by the Scanner together with short descriptions. -// -// Now, tokens: -// -// STREAM-START(encoding) # The stream start. -// STREAM-END # The stream end. -// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. -// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. -// DOCUMENT-START # '---' -// DOCUMENT-END # '...' -// BLOCK-SEQUENCE-START # Indentation increase denoting a block -// BLOCK-MAPPING-START # sequence or a block mapping. -// BLOCK-END # Indentation decrease. -// FLOW-SEQUENCE-START # '[' -// FLOW-SEQUENCE-END # ']' -// BLOCK-SEQUENCE-START # '{' -// BLOCK-SEQUENCE-END # '}' -// BLOCK-ENTRY # '-' -// FLOW-ENTRY # ',' -// KEY # '?' or nothing (simple keys). -// VALUE # ':' -// ALIAS(anchor) # '*anchor' -// ANCHOR(anchor) # '&anchor' -// TAG(handle,suffix) # '!handle!suffix' -// SCALAR(value,style) # A scalar. -// -// The following two tokens are "virtual" tokens denoting the beginning and the -// end of the stream: -// -// STREAM-START(encoding) -// STREAM-END -// -// We pass the information about the input stream encoding with the -// STREAM-START token. -// -// The next two tokens are responsible for tags: -// -// VERSION-DIRECTIVE(major,minor) -// TAG-DIRECTIVE(handle,prefix) -// -// Example: -// -// %YAML 1.1 -// %TAG ! !foo -// %TAG !yaml! tag:yaml.org,2002: -// --- -// -// The correspoding sequence of tokens: -// -// STREAM-START(utf-8) -// VERSION-DIRECTIVE(1,1) -// TAG-DIRECTIVE("!","!foo") -// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") -// DOCUMENT-START -// STREAM-END -// -// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole -// line. -// -// The document start and end indicators are represented by: -// -// DOCUMENT-START -// DOCUMENT-END -// -// Note that if a YAML stream contains an implicit document (without '---' -// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be -// produced. -// -// In the following examples, we present whole documents together with the -// produced tokens. -// -// 1. An implicit document: -// -// 'a scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// STREAM-END -// -// 2. An explicit document: -// -// --- -// 'a scalar' -// ... -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// SCALAR("a scalar",single-quoted) -// DOCUMENT-END -// STREAM-END -// -// 3. Several documents in a stream: -// -// 'a scalar' -// --- -// 'another scalar' -// --- -// 'yet another scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// DOCUMENT-START -// SCALAR("another scalar",single-quoted) -// DOCUMENT-START -// SCALAR("yet another scalar",single-quoted) -// STREAM-END -// -// We have already introduced the SCALAR token above. The following tokens are -// used to describe aliases, anchors, tag, and scalars: -// -// ALIAS(anchor) -// ANCHOR(anchor) -// TAG(handle,suffix) -// SCALAR(value,style) -// -// The following series of examples illustrate the usage of these tokens: -// -// 1. A recursive sequence: -// -// &A [ *A ] -// -// Tokens: -// -// STREAM-START(utf-8) -// ANCHOR("A") -// FLOW-SEQUENCE-START -// ALIAS("A") -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A tagged scalar: -// -// !!float "3.14" # A good approximation. -// -// Tokens: -// -// STREAM-START(utf-8) -// TAG("!!","float") -// SCALAR("3.14",double-quoted) -// STREAM-END -// -// 3. Various scalar styles: -// -// --- # Implicit empty plain scalars do not produce tokens. -// --- a plain scalar -// --- 'a single-quoted scalar' -// --- "a double-quoted scalar" -// --- |- -// a literal scalar -// --- >- -// a folded -// scalar -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// DOCUMENT-START -// SCALAR("a plain scalar",plain) -// DOCUMENT-START -// SCALAR("a single-quoted scalar",single-quoted) -// DOCUMENT-START -// SCALAR("a double-quoted scalar",double-quoted) -// DOCUMENT-START -// SCALAR("a literal scalar",literal) -// DOCUMENT-START -// SCALAR("a folded scalar",folded) -// STREAM-END -// -// Now it's time to review collection-related tokens. We will start with -// flow collections: -// -// FLOW-SEQUENCE-START -// FLOW-SEQUENCE-END -// FLOW-MAPPING-START -// FLOW-MAPPING-END -// FLOW-ENTRY -// KEY -// VALUE -// -// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and -// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' -// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the -// indicators '?' and ':', which are used for denoting mapping keys and values, -// are represented by the KEY and VALUE tokens. -// -// The following examples show flow collections: -// -// 1. A flow sequence: -// -// [item 1, item 2, item 3] -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-SEQUENCE-START -// SCALAR("item 1",plain) -// FLOW-ENTRY -// SCALAR("item 2",plain) -// FLOW-ENTRY -// SCALAR("item 3",plain) -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A flow mapping: -// -// { -// a simple key: a value, # Note that the KEY token is produced. -// ? a complex key: another value, -// } -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// FLOW-ENTRY -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// FLOW-ENTRY -// FLOW-MAPPING-END -// STREAM-END -// -// A simple key is a key which is not denoted by the '?' indicator. Note that -// the Scanner still produce the KEY token whenever it encounters a simple key. -// -// For scanning block collections, the following tokens are used (note that we -// repeat KEY and VALUE here): -// -// BLOCK-SEQUENCE-START -// BLOCK-MAPPING-START -// BLOCK-END -// BLOCK-ENTRY -// KEY -// VALUE -// -// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation -// increase that precedes a block collection (cf. the INDENT token in Python). -// The token BLOCK-END denote indentation decrease that ends a block collection -// (cf. the DEDENT token in Python). However YAML has some syntax pecularities -// that makes detections of these tokens more complex. -// -// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators -// '-', '?', and ':' correspondingly. -// -// The following examples show how the tokens BLOCK-SEQUENCE-START, -// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: -// -// 1. Block sequences: -// -// - item 1 -// - item 2 -// - -// - item 3.1 -// - item 3.2 -// - -// key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 3.1",plain) -// BLOCK-ENTRY -// SCALAR("item 3.2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Block mappings: -// -// a simple key: a value # The KEY token is produced here. -// ? a complex key -// : another value -// a mapping: -// key 1: value 1 -// key 2: value 2 -// a sequence: -// - item 1 -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// KEY -// SCALAR("a mapping",plain) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML does not always require to start a new block collection from a new -// line. If the current line contains only '-', '?', and ':' indicators, a new -// block collection may start at the current line. The following examples -// illustrate this case: -// -// 1. Collections in a sequence: -// -// - - item 1 -// - item 2 -// - key 1: value 1 -// key 2: value 2 -// - ? complex key -// : complex value -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("complex key") -// VALUE -// SCALAR("complex value") -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Collections in a mapping: -// -// ? a sequence -// : - item 1 -// - item 2 -// ? a mapping -// : key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// KEY -// SCALAR("a mapping",plain) -// VALUE -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML also permits non-indented sequences if they are included into a block -// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: -// -// key: -// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key",plain) -// VALUE -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// - -// Ensure that the buffer contains the required number of characters. -// Return true on success, false on failure (reader error or memory error). -func cache(parser *yaml_parser_t, length int) bool { - // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) - return parser.unread >= length || yaml_parser_update_buffer(parser, length) -} - -// Advance the buffer pointer. -func skip(parser *yaml_parser_t) { - if !is_blank(parser.buffer, parser.buffer_pos) { - parser.newlines = 0 - } - parser.mark.index++ - parser.mark.column++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) -} - -func skip_line(parser *yaml_parser_t) { - if is_crlf(parser.buffer, parser.buffer_pos) { - parser.mark.index += 2 - parser.mark.column = 0 - parser.mark.line++ - parser.unread -= 2 - parser.buffer_pos += 2 - parser.newlines++ - } else if is_break(parser.buffer, parser.buffer_pos) { - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) - parser.newlines++ - } -} - -// Copy a character to a string buffer and advance pointers. -func read(parser *yaml_parser_t, s []byte) []byte { - if !is_blank(parser.buffer, parser.buffer_pos) { - parser.newlines = 0 - } - w := width(parser.buffer[parser.buffer_pos]) - if w == 0 { - panic("invalid character sequence") - } - if len(s) == 0 { - s = make([]byte, 0, 32) - } - if w == 1 && len(s)+w <= cap(s) { - s = s[:len(s)+1] - s[len(s)-1] = parser.buffer[parser.buffer_pos] - parser.buffer_pos++ - } else { - s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) - parser.buffer_pos += w - } - parser.mark.index++ - parser.mark.column++ - parser.unread-- - return s -} - -// Copy a line break character to a string buffer and advance pointers. -func read_line(parser *yaml_parser_t, s []byte) []byte { - buf := parser.buffer - pos := parser.buffer_pos - switch { - case buf[pos] == '\r' && buf[pos+1] == '\n': - // CR LF . LF - s = append(s, '\n') - parser.buffer_pos += 2 - parser.mark.index++ - parser.unread-- - case buf[pos] == '\r' || buf[pos] == '\n': - // CR|LF . LF - s = append(s, '\n') - parser.buffer_pos += 1 - case buf[pos] == '\xC2' && buf[pos+1] == '\x85': - // NEL . LF - s = append(s, '\n') - parser.buffer_pos += 2 - case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): - // LS|PS . LS|PS - s = append(s, buf[parser.buffer_pos:pos+3]...) - parser.buffer_pos += 3 - default: - return s - } - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - parser.newlines++ - return s -} - -// Get the next token. -func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { - // Erase the token object. - *token = yaml_token_t{} // [Go] Is this necessary? - - // No tokens after STREAM-END or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR { - return true - } - - // Ensure that the tokens queue contains enough tokens. - if !parser.token_available { - if !yaml_parser_fetch_more_tokens(parser) { - return false - } - } - - // Fetch the next token from the queue. - *token = parser.tokens[parser.tokens_head] - parser.tokens_head++ - parser.tokens_parsed++ - parser.token_available = false - - if token.typ == yaml_STREAM_END_TOKEN { - parser.stream_end_produced = true - } - return true -} - -// Set the scanner error and return false. -func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { - parser.error = yaml_SCANNER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = parser.mark - return false -} - -func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { - context := "while parsing a tag" - if directive { - context = "while parsing a %TAG directive" - } - return yaml_parser_set_scanner_error(parser, context, context_mark, problem) -} - -func trace(args ...interface{}) func() { - pargs := append([]interface{}{"+++"}, args...) - fmt.Println(pargs...) - pargs = append([]interface{}{"---"}, args...) - return func() { fmt.Println(pargs...) } -} - -// Ensure that the tokens queue contains at least one token which can be -// returned to the Parser. -func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { - // While we need more tokens to fetch, do it. - for { - // [Go] The comment parsing logic requires a lookahead of two tokens - // so that foot comments may be parsed in time of associating them - // with the tokens that are parsed before them, and also for line - // comments to be transformed into head comments in some edge cases. - if parser.tokens_head < len(parser.tokens)-2 { - // If a potential simple key is at the head position, we need to fetch - // the next token to disambiguate it. - head_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed] - if !ok { - break - } else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok { - return false - } else if !valid { - break - } - } - // Fetch the next token. - if !yaml_parser_fetch_next_token(parser) { - return false - } - } - - parser.token_available = true - return true -} - -// The dispatcher for token fetchers. -func yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) { - // Ensure that the buffer is initialized. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check if we just started scanning. Fetch STREAM-START then. - if !parser.stream_start_produced { - return yaml_parser_fetch_stream_start(parser) - } - - scan_mark := parser.mark - - // Eat whitespaces and comments until we reach the next token. - if !yaml_parser_scan_to_next_token(parser) { - return false - } - - // [Go] While unrolling indents, transform the head comments of prior - // indentation levels observed after scan_start into foot comments at - // the respective indexes. - - // Check the indentation level against the current column. - if !yaml_parser_unroll_indent(parser, parser.mark.column, scan_mark) { - return false - } - - // Ensure that the buffer contains at least 4 characters. 4 is the length - // of the longest indicators ('--- ' and '... '). - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - // Is it the end of the stream? - if is_z(parser.buffer, parser.buffer_pos) { - return yaml_parser_fetch_stream_end(parser) - } - - // Is it a directive? - if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { - return yaml_parser_fetch_directive(parser) - } - - buf := parser.buffer - pos := parser.buffer_pos - - // Is it the document start indicator? - if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) - } - - // Is it the document end indicator? - if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) - } - - comment_mark := parser.mark - if len(parser.tokens) > 0 && (parser.flow_level == 0 && buf[pos] == ':' || parser.flow_level > 0 && buf[pos] == ',') { - // Associate any following comments with the prior token. - comment_mark = parser.tokens[len(parser.tokens)-1].start_mark - } - defer func() { - if !ok { - return - } - if !yaml_parser_scan_line_comment(parser, comment_mark) { - ok = false - return - } - }() - - // Is it the flow sequence start indicator? - if buf[pos] == '[' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) - } - - // Is it the flow mapping start indicator? - if parser.buffer[parser.buffer_pos] == '{' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) - } - - // Is it the flow sequence end indicator? - if parser.buffer[parser.buffer_pos] == ']' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_SEQUENCE_END_TOKEN) - } - - // Is it the flow mapping end indicator? - if parser.buffer[parser.buffer_pos] == '}' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_MAPPING_END_TOKEN) - } - - // Is it the flow entry indicator? - if parser.buffer[parser.buffer_pos] == ',' { - return yaml_parser_fetch_flow_entry(parser) - } - - // Is it the block entry indicator? - if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { - return yaml_parser_fetch_block_entry(parser) - } - - // Is it the key indicator? - if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_key(parser) - } - - // Is it the value indicator? - if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_value(parser) - } - - // Is it an alias? - if parser.buffer[parser.buffer_pos] == '*' { - return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) - } - - // Is it an anchor? - if parser.buffer[parser.buffer_pos] == '&' { - return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) - } - - // Is it a tag? - if parser.buffer[parser.buffer_pos] == '!' { - return yaml_parser_fetch_tag(parser) - } - - // Is it a literal scalar? - if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, true) - } - - // Is it a folded scalar? - if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, false) - } - - // Is it a single-quoted scalar? - if parser.buffer[parser.buffer_pos] == '\'' { - return yaml_parser_fetch_flow_scalar(parser, true) - } - - // Is it a double-quoted scalar? - if parser.buffer[parser.buffer_pos] == '"' { - return yaml_parser_fetch_flow_scalar(parser, false) - } - - // Is it a plain scalar? - // - // A plain scalar may start with any non-blank characters except - // - // '-', '?', ':', ',', '[', ']', '{', '}', - // '#', '&', '*', '!', '|', '>', '\'', '\"', - // '%', '@', '`'. - // - // In the block context (and, for the '-' indicator, in the flow context - // too), it may also start with the characters - // - // '-', '?', ':' - // - // if it is followed by a non-space character. - // - // The last rule is more restrictive than the specification requires. - // [Go] TODO Make this logic more reasonable. - //switch parser.buffer[parser.buffer_pos] { - //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': - //} - if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || - parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || - parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || - (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level == 0 && - (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && - !is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_plain_scalar(parser) - } - - // If we don't determine the token type so far, it is an error. - return yaml_parser_set_scanner_error(parser, - "while scanning for the next token", parser.mark, - "found character that cannot start any token") -} - -func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { - if !simple_key.possible { - return false, true - } - - // The 1.2 specification says: - // - // "If the ? indicator is omitted, parsing needs to see past the - // implicit key to recognize it as such. To limit the amount of - // lookahead required, the “:” indicator must appear at most 1024 - // Unicode characters beyond the start of the key. In addition, the key - // is restricted to a single line." - // - if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { - // Check if the potential simple key to be removed is required. - if simple_key.required { - return false, yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - simple_key.possible = false - return false, true - } - return true, true -} - -// Check if a simple key may start at the current position and add it if -// needed. -func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { - // A simple key is required at the current position if the scanner is in - // the block context and the current column coincides with the indentation - // level. - - required := parser.flow_level == 0 && parser.indent == parser.mark.column - - // - // If the current position may start a simple key, save it. - // - if parser.simple_key_allowed { - simple_key := yaml_simple_key_t{ - possible: true, - required: required, - token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), - mark: parser.mark, - } - - if !yaml_parser_remove_simple_key(parser) { - return false - } - parser.simple_keys[len(parser.simple_keys)-1] = simple_key - parser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1 - } - return true -} - -// Remove a potential simple key at the current flow level. -func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { - i := len(parser.simple_keys) - 1 - if parser.simple_keys[i].possible { - // If the key is required, it is an error. - if parser.simple_keys[i].required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", parser.simple_keys[i].mark, - "could not find expected ':'") - } - // Remove the key from the stack. - parser.simple_keys[i].possible = false - delete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number) - } - return true -} - -// max_flow_level limits the flow_level -const max_flow_level = 10000 - -// Increase the flow level and resize the simple key list if needed. -func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { - // Reset the simple key on the next level. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ - possible: false, - required: false, - token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), - mark: parser.mark, - }) - - // Increase the flow level. - parser.flow_level++ - if parser.flow_level > max_flow_level { - return yaml_parser_set_scanner_error(parser, - "while increasing flow level", parser.simple_keys[len(parser.simple_keys)-1].mark, - fmt.Sprintf("exceeded max depth of %d", max_flow_level)) - } - return true -} - -// Decrease the flow level. -func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { - if parser.flow_level > 0 { - parser.flow_level-- - last := len(parser.simple_keys) - 1 - delete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number) - parser.simple_keys = parser.simple_keys[:last] - } - return true -} - -// max_indents limits the indents stack size -const max_indents = 10000 - -// Push the current indentation level to the stack and set the new level -// the current column is greater than the indentation level. In this case, -// append or insert the specified token into the token queue. -func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - if parser.indent < column { - // Push the current indentation level to the stack and set the new - // indentation level. - parser.indents = append(parser.indents, parser.indent) - parser.indent = column - if len(parser.indents) > max_indents { - return yaml_parser_set_scanner_error(parser, - "while increasing indent level", parser.simple_keys[len(parser.simple_keys)-1].mark, - fmt.Sprintf("exceeded max depth of %d", max_indents)) - } - - // Create a token and insert it into the queue. - token := yaml_token_t{ - typ: typ, - start_mark: mark, - end_mark: mark, - } - if number > -1 { - number -= parser.tokens_parsed - } - yaml_insert_token(parser, number, &token) - } - return true -} - -// Pop indentation levels from the indents stack until the current level -// becomes less or equal to the column. For each indentation level, append -// the BLOCK-END token. -func yaml_parser_unroll_indent(parser *yaml_parser_t, column int, scan_mark yaml_mark_t) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - block_mark := scan_mark - block_mark.index-- - - // Loop through the indentation levels in the stack. - for parser.indent > column { - - // [Go] Reposition the end token before potential following - // foot comments of parent blocks. For that, search - // backwards for recent comments that were at the same - // indent as the block that is ending now. - stop_index := block_mark.index - for i := len(parser.comments) - 1; i >= 0; i-- { - comment := &parser.comments[i] - - if comment.end_mark.index < stop_index { - // Don't go back beyond the start of the comment/whitespace scan, unless column < 0. - // If requested indent column is < 0, then the document is over and everything else - // is a foot anyway. - break - } - if comment.start_mark.column == parser.indent+1 { - // This is a good match. But maybe there's a former comment - // at that same indent level, so keep searching. - block_mark = comment.start_mark - } - - // While the end of the former comment matches with - // the start of the following one, we know there's - // nothing in between and scanning is still safe. - stop_index = comment.scan_mark.index - } - - // Create a token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_END_TOKEN, - start_mark: block_mark, - end_mark: block_mark, - } - yaml_insert_token(parser, -1, &token) - - // Pop the indentation level. - parser.indent = parser.indents[len(parser.indents)-1] - parser.indents = parser.indents[:len(parser.indents)-1] - } - return true -} - -// Initialize the scanner and produce the STREAM-START token. -func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { - - // Set the initial indentation. - parser.indent = -1 - - // Initialize the simple key stack. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - parser.simple_keys_by_tok = make(map[int]int) - - // A simple key is allowed at the beginning of the stream. - parser.simple_key_allowed = true - - // We have started. - parser.stream_start_produced = true - - // Create the STREAM-START token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_START_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - encoding: parser.encoding, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the STREAM-END token and shut down the scanner. -func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { - - // Force new line. - if parser.mark.column != 0 { - parser.mark.column = 0 - parser.mark.line++ - } - - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1, parser.mark) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the STREAM-END token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. -func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1, parser.mark) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. - token := yaml_token_t{} - if !yaml_parser_scan_directive(parser, &token) { - return false - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the DOCUMENT-START or DOCUMENT-END token. -func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1, parser.mark) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Consume the token. - start_mark := parser.mark - - skip(parser) - skip(parser) - skip(parser) - - end_mark := parser.mark - - // Create the DOCUMENT-START or DOCUMENT-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. -func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { - - // The indicators '[' and '{' may start a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // Increase the flow level. - if !yaml_parser_increase_flow_level(parser) { - return false - } - - // A simple key may follow the indicators '[' and '{'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. -func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset any potential simple key on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Decrease the flow level. - if !yaml_parser_decrease_flow_level(parser) { - return false - } - - // No simple keys after the indicators ']' and '}'. - parser.simple_key_allowed = false - - // Consume the token. - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-ENTRY token. -func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after ','. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_FLOW_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the BLOCK-ENTRY token. -func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { - // Check if the scanner is in the block context. - if parser.flow_level == 0 { - // Check if we are allowed to start a new entry. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "block sequence entries are not allowed in this context") - } - // Add the BLOCK-SEQUENCE-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { - return false - } - } else { - // It is an error for the '-' indicator to occur in the flow context, - // but we let the Parser detect and report about it because the Parser - // is able to point to the context. - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '-'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the BLOCK-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the KEY token. -func yaml_parser_fetch_key(parser *yaml_parser_t) bool { - - // In the block context, additional checks are required. - if parser.flow_level == 0 { - // Check if we are allowed to start a new key (not nessesary simple). - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping keys are not allowed in this context") - } - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '?' in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the KEY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the VALUE token. -func yaml_parser_fetch_value(parser *yaml_parser_t) bool { - - simple_key := &parser.simple_keys[len(parser.simple_keys)-1] - - // Have we found a simple key? - if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { - return false - - } else if valid { - - // Create the KEY token and insert it into the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: simple_key.mark, - end_mark: simple_key.mark, - } - yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) - - // In the block context, we may need to add the BLOCK-MAPPING-START token. - if !yaml_parser_roll_indent(parser, simple_key.mark.column, - simple_key.token_number, - yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { - return false - } - - // Remove the simple key. - simple_key.possible = false - delete(parser.simple_keys_by_tok, simple_key.token_number) - - // A simple key cannot follow another simple key. - parser.simple_key_allowed = false - - } else { - // The ':' indicator follows a complex key. - - // In the block context, extra checks are required. - if parser.flow_level == 0 { - - // Check if we are allowed to start a complex value. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping values are not allowed in this context") - } - - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Simple keys after ':' are allowed in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - } - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the VALUE token and append it to the queue. - token := yaml_token_t{ - typ: yaml_VALUE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the ALIAS or ANCHOR token. -func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // An anchor or an alias could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow an anchor or an alias. - parser.simple_key_allowed = false - - // Create the ALIAS or ANCHOR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_anchor(parser, &token, typ) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the TAG token. -func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { - // A tag could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a tag. - parser.simple_key_allowed = false - - // Create the TAG token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_tag(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. -func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { - // Remove any potential simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // A simple key may follow a block scalar. - parser.simple_key_allowed = true - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_block_scalar(parser, &token, literal) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. -func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_flow_scalar(parser, &token, single) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,plain) token. -func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_plain_scalar(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Eat whitespaces and comments until the next token is found. -func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { - - scan_mark := parser.mark - - // Until the next token is not found. - for { - // Allow the BOM mark to start a line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { - skip(parser) - } - - // Eat whitespaces. - // Tabs are allowed: - // - in the flow context - // - in the block context, but not at the beginning of the line or - // after '-', '?', or ':' (complex value). - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if we just had a line comment under a sequence entry that - // looks more like a header to the following content. Similar to this: - // - // - # The comment - // - Some data - // - // If so, transform the line comment to a head comment and reposition. - if len(parser.comments) > 0 && len(parser.tokens) > 1 { - tokenA := parser.tokens[len(parser.tokens)-2] - tokenB := parser.tokens[len(parser.tokens)-1] - comment := &parser.comments[len(parser.comments)-1] - if tokenA.typ == yaml_BLOCK_SEQUENCE_START_TOKEN && tokenB.typ == yaml_BLOCK_ENTRY_TOKEN && len(comment.line) > 0 && !is_break(parser.buffer, parser.buffer_pos) { - // If it was in the prior line, reposition so it becomes a - // header of the follow up token. Otherwise, keep it in place - // so it becomes a header of the former. - comment.head = comment.line - comment.line = nil - if comment.start_mark.line == parser.mark.line-1 { - comment.token_mark = parser.mark - } - } - } - - // Eat a comment until a line break. - if parser.buffer[parser.buffer_pos] == '#' { - if !yaml_parser_scan_comments(parser, scan_mark) { - return false - } - } - - // If it is a line break, eat it. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - - // In the block context, a new line may start a simple key. - if parser.flow_level == 0 { - parser.simple_key_allowed = true - } - } else { - break // We have found a token. - } - } - - return true -} - -// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { - // Eat '%'. - start_mark := parser.mark - skip(parser) - - // Scan the directive name. - var name []byte - if !yaml_parser_scan_directive_name(parser, start_mark, &name) { - return false - } - - // Is it a YAML directive? - if bytes.Equal(name, []byte("YAML")) { - // Scan the VERSION directive value. - var major, minor int8 - if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { - return false - } - end_mark := parser.mark - - // Create a VERSION-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_VERSION_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - major: major, - minor: minor, - } - - // Is it a TAG directive? - } else if bytes.Equal(name, []byte("TAG")) { - // Scan the TAG directive value. - var handle, prefix []byte - if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { - return false - } - end_mark := parser.mark - - // Create a TAG-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_TAG_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - prefix: prefix, - } - - // Unknown directive. - } else { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unknown directive name") - return false - } - - // Eat the rest of the line including any comments. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - if parser.buffer[parser.buffer_pos] == '#' { - // [Go] Discard this inline comment for the time being. - //if !yaml_parser_scan_line_comment(parser, start_mark) { - // return false - //} - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - return true -} - -// Scan the directive name. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^ -// -func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { - // Consume the directive name. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - var s []byte - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the name is empty. - if len(s) == 0 { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "could not find expected directive name") - return false - } - - // Check for an blank character after the name. - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unexpected non-alphabetical character") - return false - } - *name = s - return true -} - -// Scan the value of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^ -func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the major version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { - return false - } - - // Eat '.'. - if parser.buffer[parser.buffer_pos] != '.' { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected digit or '.' character") - } - - skip(parser) - - // Consume the minor version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { - return false - } - return true -} - -const max_number_length = 2 - -// Scan the version number of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^ -// %YAML 1.1 # a comment \n -// ^ -func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { - - // Repeat while the next character is digit. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var value, length int8 - for is_digit(parser.buffer, parser.buffer_pos) { - // Check if the number is too long. - length++ - if length > max_number_length { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "found extremely long version number") - } - value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the number was present. - if length == 0 { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected version number") - } - *number = value - return true -} - -// Scan the value of a TAG-DIRECTIVE token. -// -// Scope: -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { - var handle_value, prefix_value []byte - - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a handle. - if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { - return false - } - - // Expect a whitespace. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blank(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace") - return false - } - - // Eat whitespaces. - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a prefix. - if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { - return false - } - - // Expect a whitespace or line break. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace or line break") - return false - } - - *handle = handle_value - *prefix = prefix_value - return true -} - -func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { - var s []byte - - // Eat the indicator character. - start_mark := parser.mark - skip(parser) - - // Consume the value. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - end_mark := parser.mark - - /* - * Check if length of the anchor is greater than 0 and it is followed by - * a whitespace character or one of the indicators: - * - * '?', ':', ',', ']', '}', '%', '@', '`'. - */ - - if len(s) == 0 || - !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || - parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '`') { - context := "while scanning an alias" - if typ == yaml_ANCHOR_TOKEN { - context = "while scanning an anchor" - } - yaml_parser_set_scanner_error(parser, context, start_mark, - "did not find expected alphabetic or numeric character") - return false - } - - // Create a token. - *token = yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - value: s, - } - - return true -} - -/* - * Scan a TAG token. - */ - -func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { - var handle, suffix []byte - - start_mark := parser.mark - - // Check if the tag is in the canonical form. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - if parser.buffer[parser.buffer_pos+1] == '<' { - // Keep the handle as '' - - // Eat '!<' - skip(parser) - skip(parser) - - // Consume the tag value. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - - // Check for '>' and eat it. - if parser.buffer[parser.buffer_pos] != '>' { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find the expected '>'") - return false - } - - skip(parser) - } else { - // The tag has either the '!suffix' or the '!handle!suffix' form. - - // First, try to scan a handle. - if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { - return false - } - - // Check if it is, indeed, handle. - if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { - // Scan the suffix now. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - } else { - // It wasn't a handle after all. Scan the rest of the tag. - if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { - return false - } - - // Set the handle to '!'. - handle = []byte{'!'} - - // A special case: the '!' tag. Set the handle to '' and the - // suffix to '!'. - if len(suffix) == 0 { - handle, suffix = suffix, handle - } - } - } - - // Check the character which ends the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find expected whitespace or line break") - return false - } - - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_TAG_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - suffix: suffix, - } - return true -} - -// Scan a tag handle. -func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { - // Check the initial '!' character. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] != '!' { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - - var s []byte - - // Copy the '!' character. - s = read(parser, s) - - // Copy all subsequent alphabetical and numerical characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the trailing character is '!' and copy it. - if parser.buffer[parser.buffer_pos] == '!' { - s = read(parser, s) - } else { - // It's either the '!' tag or not really a tag handle. If it's a %TAG - // directive, it's an error. If it's a tag token, it must be a part of URI. - if directive && string(s) != "!" { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - } - - *handle = s - return true -} - -// Scan a tag. -func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { - //size_t length = head ? strlen((char *)head) : 0 - var s []byte - hasTag := len(head) > 0 - - // Copy the head if needed. - // - // Note that we don't copy the leading '!' character. - if len(head) > 1 { - s = append(s, head[1:]...) - } - - // Scan the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // The set of characters that may appear in URI is as follows: - // - // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', - // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', - // '%'. - // [Go] TODO Convert this into more reasonable logic. - for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || - parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || - parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || - parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || - parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || - parser.buffer[parser.buffer_pos] == '%' { - // Check if it is a URI-escape sequence. - if parser.buffer[parser.buffer_pos] == '%' { - if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { - return false - } - } else { - s = read(parser, s) - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - hasTag = true - } - - if !hasTag { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected tag URI") - return false - } - *uri = s - return true -} - -// Decode an URI-escape sequence corresponding to a single UTF-8 character. -func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { - - // Decode the required number of characters. - w := 1024 - for w > 0 { - // Check for a URI-escaped octet. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - - if !(parser.buffer[parser.buffer_pos] == '%' && - is_hex(parser.buffer, parser.buffer_pos+1) && - is_hex(parser.buffer, parser.buffer_pos+2)) { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find URI escaped octet") - } - - // Get the octet. - octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) - - // If it is the leading octet, determine the length of the UTF-8 sequence. - if w == 1024 { - w = width(octet) - if w == 0 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect leading UTF-8 octet") - } - } else { - // Check if the trailing octet is correct. - if octet&0xC0 != 0x80 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect trailing UTF-8 octet") - } - } - - // Copy the octet and move the pointers. - *s = append(*s, octet) - skip(parser) - skip(parser) - skip(parser) - w-- - } - return true -} - -// Scan a block scalar. -func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { - // Eat the indicator '|' or '>'. - start_mark := parser.mark - skip(parser) - - // Scan the additional block scalar indicators. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check for a chomping indicator. - var chomping, increment int - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - // Set the chomping method and eat the indicator. - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - - // Check for an indentation indicator. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if is_digit(parser.buffer, parser.buffer_pos) { - // Check that the indentation is greater than 0. - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - - // Get the indentation level and eat the indicator. - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - } - - } else if is_digit(parser.buffer, parser.buffer_pos) { - // Do the same as above, but in the opposite order. - - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - } - } - - // Eat whitespaces and comments to the end of the line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.buffer[parser.buffer_pos] == '#' { - // TODO Test this and then re-enable it. - //if !yaml_parser_scan_line_comment(parser, start_mark) { - // return false - //} - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - end_mark := parser.mark - - // Set the indentation level if it was specified. - var indent int - if increment > 0 { - if parser.indent >= 0 { - indent = parser.indent + increment - } else { - indent = increment - } - } - - // Scan the leading line breaks and determine the indentation level if needed. - var s, leading_break, trailing_breaks []byte - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - - // Scan the block scalar content. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var leading_blank, trailing_blank bool - for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { - // We are at the beginning of a non-empty line. - - // Is it a trailing whitespace? - trailing_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Check if we need to fold the leading line break. - if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { - // Do we need to join the lines by space? - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } - } else { - s = append(s, leading_break...) - } - leading_break = leading_break[:0] - - // Append the remaining line breaks. - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - - // Is it a leading whitespace? - leading_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Consume the current line. - for !is_breakz(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - leading_break = read_line(parser, leading_break) - - // Eat the following indentation spaces and line breaks. - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - } - - // Chomp the tail. - if chomping != -1 { - s = append(s, leading_break...) - } - if chomping == 1 { - s = append(s, trailing_breaks...) - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_LITERAL_SCALAR_STYLE, - } - if !literal { - token.style = yaml_FOLDED_SCALAR_STYLE - } - return true -} - -// Scan indentation spaces and line breaks for a block scalar. Determine the -// indentation level if needed. -func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { - *end_mark = parser.mark - - // Eat the indentation spaces and line breaks. - max_indent := 0 - for { - // Eat the indentation spaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.mark.column > max_indent { - max_indent = parser.mark.column - } - - // Check for a tab character messing the indentation. - if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { - return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found a tab character where an indentation space is expected") - } - - // Have we found a non-empty line? - if !is_break(parser.buffer, parser.buffer_pos) { - break - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - // [Go] Should really be returning breaks instead. - *breaks = read_line(parser, *breaks) - *end_mark = parser.mark - } - - // Determine the indentation level if needed. - if *indent == 0 { - *indent = max_indent - if *indent < parser.indent+1 { - *indent = parser.indent + 1 - } - if *indent < 1 { - *indent = 1 - } - } - return true -} - -// Scan a quoted scalar. -func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { - // Eat the left quote. - start_mark := parser.mark - skip(parser) - - // Consume the content of the quoted scalar. - var s, leading_break, trailing_breaks, whitespaces []byte - for { - // Check that there are no document indicators at the beginning of the line. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected document indicator") - return false - } - - // Check for EOF. - if is_z(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected end of stream") - return false - } - - // Consume non-blank characters. - leading_blanks := false - for !is_blankz(parser.buffer, parser.buffer_pos) { - if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { - // Is is an escaped single quote. - s = append(s, '\'') - skip(parser) - skip(parser) - - } else if single && parser.buffer[parser.buffer_pos] == '\'' { - // It is a right single quote. - break - } else if !single && parser.buffer[parser.buffer_pos] == '"' { - // It is a right double quote. - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { - // It is an escaped line break. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - skip(parser) - skip_line(parser) - leading_blanks = true - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' { - // It is an escape sequence. - code_length := 0 - - // Check the escape character. - switch parser.buffer[parser.buffer_pos+1] { - case '0': - s = append(s, 0) - case 'a': - s = append(s, '\x07') - case 'b': - s = append(s, '\x08') - case 't', '\t': - s = append(s, '\x09') - case 'n': - s = append(s, '\x0A') - case 'v': - s = append(s, '\x0B') - case 'f': - s = append(s, '\x0C') - case 'r': - s = append(s, '\x0D') - case 'e': - s = append(s, '\x1B') - case ' ': - s = append(s, '\x20') - case '"': - s = append(s, '"') - case '\'': - s = append(s, '\'') - case '\\': - s = append(s, '\\') - case 'N': // NEL (#x85) - s = append(s, '\xC2') - s = append(s, '\x85') - case '_': // #xA0 - s = append(s, '\xC2') - s = append(s, '\xA0') - case 'L': // LS (#x2028) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA8') - case 'P': // PS (#x2029) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA9') - case 'x': - code_length = 2 - case 'u': - code_length = 4 - case 'U': - code_length = 8 - default: - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found unknown escape character") - return false - } - - skip(parser) - skip(parser) - - // Consume an arbitrary escape code. - if code_length > 0 { - var value int - - // Scan the character value. - if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { - return false - } - for k := 0; k < code_length; k++ { - if !is_hex(parser.buffer, parser.buffer_pos+k) { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "did not find expected hexdecimal number") - return false - } - value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) - } - - // Check the value and write the character. - if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found invalid Unicode character escape code") - return false - } - if value <= 0x7F { - s = append(s, byte(value)) - } else if value <= 0x7FF { - s = append(s, byte(0xC0+(value>>6))) - s = append(s, byte(0x80+(value&0x3F))) - } else if value <= 0xFFFF { - s = append(s, byte(0xE0+(value>>12))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } else { - s = append(s, byte(0xF0+(value>>18))) - s = append(s, byte(0x80+((value>>12)&0x3F))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } - - // Advance the pointer. - for k := 0; k < code_length; k++ { - skip(parser) - } - } - } else { - // It is a non-escaped non-blank character. - s = read(parser, s) - } - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check if we are at the end of the scalar. - if single { - if parser.buffer[parser.buffer_pos] == '\'' { - break - } - } else { - if parser.buffer[parser.buffer_pos] == '"' { - break - } - } - - // Consume blank characters. - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Join the whitespaces or fold line breaks. - if leading_blanks { - // Do we need to fold line breaks? - if len(leading_break) > 0 && leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Eat the right quote. - skip(parser) - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_SINGLE_QUOTED_SCALAR_STYLE, - } - if !single { - token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - return true -} - -// Scan a plain scalar. -func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { - - var s, leading_break, trailing_breaks, whitespaces []byte - var leading_blanks bool - var indent = parser.indent + 1 - - start_mark := parser.mark - end_mark := parser.mark - - // Consume the content of the plain scalar. - for { - // Check for a document indicator. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - break - } - - // Check for a comment. - if parser.buffer[parser.buffer_pos] == '#' { - break - } - - // Consume non-blank characters. - for !is_blankz(parser.buffer, parser.buffer_pos) { - - // Check for indicators that may end a plain scalar. - if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level > 0 && - (parser.buffer[parser.buffer_pos] == ',' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}')) { - break - } - - // Check if we need to join whitespaces and breaks. - if leading_blanks || len(whitespaces) > 0 { - if leading_blanks { - // Do we need to fold line breaks? - if leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - leading_blanks = false - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Copy the character. - s = read(parser, s) - - end_mark = parser.mark - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - // Is it the end? - if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { - break - } - - // Consume blank characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - - // Check for tab characters that abuse indentation. - if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violates indentation") - return false - } - - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check indentation level. - if parser.flow_level == 0 && parser.mark.column < indent { - break - } - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_PLAIN_SCALAR_STYLE, - } - - // Note that we change the 'simple_key_allowed' flag. - if leading_blanks { - parser.simple_key_allowed = true - } - return true -} - -func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t) bool { - if parser.newlines > 0 { - return true - } - - var start_mark yaml_mark_t - var text []byte - - for peek := 0; peek < 512; peek++ { - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - break - } - if is_blank(parser.buffer, parser.buffer_pos+peek) { - continue - } - if parser.buffer[parser.buffer_pos+peek] == '#' { - seen := parser.mark.index+peek - for { - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if is_breakz(parser.buffer, parser.buffer_pos) { - if parser.mark.index >= seen { - break - } - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } else { - if parser.mark.index >= seen { - if len(text) == 0 { - start_mark = parser.mark - } - text = append(text, parser.buffer[parser.buffer_pos]) - } - skip(parser) - } - } - } - break - } - if len(text) > 0 { - parser.comments = append(parser.comments, yaml_comment_t{ - token_mark: token_mark, - start_mark: start_mark, - line: text, - }) - } - return true -} - -func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) bool { - token := parser.tokens[len(parser.tokens)-1] - - if token.typ == yaml_FLOW_ENTRY_TOKEN && len(parser.tokens) > 1 { - token = parser.tokens[len(parser.tokens)-2] - } - - var token_mark = token.start_mark - var start_mark yaml_mark_t - - var recent_empty = false - var first_empty = parser.newlines <= 1 - - var line = parser.mark.line - var column = parser.mark.column - - var text []byte - - // The foot line is the place where a comment must start to - // still be considered as a foot of the prior content. - // If there's some content in the currently parsed line, then - // the foot is the line below it. - var foot_line = -1 - if scan_mark.line > 0 { - foot_line = parser.mark.line-parser.newlines+1 - if parser.newlines == 0 && parser.mark.column > 1 { - foot_line++ - } - } - - var peek = 0 - for ; peek < 512; peek++ { - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - break - } - column++ - if is_blank(parser.buffer, parser.buffer_pos+peek) { - continue - } - c := parser.buffer[parser.buffer_pos+peek] - if is_breakz(parser.buffer, parser.buffer_pos+peek) || parser.flow_level > 0 && (c == ']' || c == '}') { - // Got line break or terminator. - if !recent_empty { - if first_empty && (start_mark.line == foot_line || start_mark.column-1 < parser.indent) { - // This is the first empty line and there were no empty lines before, - // so this initial part of the comment is a foot of the prior token - // instead of being a head for the following one. Split it up. - if len(text) > 0 { - if start_mark.column-1 < parser.indent { - // If dedented it's unrelated to the prior token. - token_mark = start_mark - } - parser.comments = append(parser.comments, yaml_comment_t{ - scan_mark: scan_mark, - token_mark: token_mark, - start_mark: start_mark, - end_mark: yaml_mark_t{parser.mark.index + peek, line, column}, - foot: text, - }) - scan_mark = yaml_mark_t{parser.mark.index + peek, line, column} - token_mark = scan_mark - text = nil - } - } else { - if len(text) > 0 && parser.buffer[parser.buffer_pos+peek] != 0 { - text = append(text, '\n') - } - } - } - if !is_break(parser.buffer, parser.buffer_pos+peek) { - break - } - first_empty = false - recent_empty = true - column = 0 - line++ - continue - } - - if len(text) > 0 && column < parser.indent+1 && column != start_mark.column { - // The comment at the different indentation is a foot of the - // preceding data rather than a head of the upcoming one. - parser.comments = append(parser.comments, yaml_comment_t{ - scan_mark: scan_mark, - token_mark: token_mark, - start_mark: start_mark, - end_mark: yaml_mark_t{parser.mark.index + peek, line, column}, - foot: text, - }) - scan_mark = yaml_mark_t{parser.mark.index + peek, line, column} - token_mark = scan_mark - text = nil - } - - if parser.buffer[parser.buffer_pos+peek] != '#' { - break - } - - if len(text) == 0 { - start_mark = yaml_mark_t{parser.mark.index + peek, line, column} - } else { - text = append(text, '\n') - } - - recent_empty = false - - // Consume until after the consumed comment line. - seen := parser.mark.index+peek - for { - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if is_breakz(parser.buffer, parser.buffer_pos) { - if parser.mark.index >= seen { - break - } - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } else { - if parser.mark.index >= seen { - text = append(text, parser.buffer[parser.buffer_pos]) - } - skip(parser) - } - } - - peek = 0 - column = 0 - line = parser.mark.line - } - - if len(text) > 0 { - parser.comments = append(parser.comments, yaml_comment_t{ - scan_mark: scan_mark, - token_mark: start_mark, - start_mark: start_mark, - end_mark: yaml_mark_t{parser.mark.index + peek - 1, line, column}, - head: text, - }) - } - return true -} diff --git a/vendor/gopkg.in/yaml.v3/sorter.go b/vendor/gopkg.in/yaml.v3/sorter.go deleted file mode 100644 index 9210ece7..00000000 --- a/vendor/gopkg.in/yaml.v3/sorter.go +++ /dev/null @@ -1,134 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// 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 yaml - -import ( - "reflect" - "unicode" -) - -type keyList []reflect.Value - -func (l keyList) Len() int { return len(l) } -func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l keyList) Less(i, j int) bool { - a := l[i] - b := l[j] - ak := a.Kind() - bk := b.Kind() - for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { - a = a.Elem() - ak = a.Kind() - } - for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { - b = b.Elem() - bk = b.Kind() - } - af, aok := keyFloat(a) - bf, bok := keyFloat(b) - if aok && bok { - if af != bf { - return af < bf - } - if ak != bk { - return ak < bk - } - return numLess(a, b) - } - if ak != reflect.String || bk != reflect.String { - return ak < bk - } - ar, br := []rune(a.String()), []rune(b.String()) - digits := false - for i := 0; i < len(ar) && i < len(br); i++ { - if ar[i] == br[i] { - digits = unicode.IsDigit(ar[i]) - continue - } - al := unicode.IsLetter(ar[i]) - bl := unicode.IsLetter(br[i]) - if al && bl { - return ar[i] < br[i] - } - if al || bl { - if digits { - return al - } else { - return bl - } - } - var ai, bi int - var an, bn int64 - if ar[i] == '0' || br[i] == '0' { - for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- { - if ar[j] != '0' { - an = 1 - bn = 1 - break - } - } - } - for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { - an = an*10 + int64(ar[ai]-'0') - } - for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { - bn = bn*10 + int64(br[bi]-'0') - } - if an != bn { - return an < bn - } - if ai != bi { - return ai < bi - } - return ar[i] < br[i] - } - return len(ar) < len(br) -} - -// keyFloat returns a float value for v if it is a number/bool -// and whether it is a number/bool or not. -func keyFloat(v reflect.Value) (f float64, ok bool) { - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return float64(v.Int()), true - case reflect.Float32, reflect.Float64: - return v.Float(), true - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return float64(v.Uint()), true - case reflect.Bool: - if v.Bool() { - return 1, true - } - return 0, true - } - return 0, false -} - -// numLess returns whether a < b. -// a and b must necessarily have the same kind. -func numLess(a, b reflect.Value) bool { - switch a.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return a.Int() < b.Int() - case reflect.Float32, reflect.Float64: - return a.Float() < b.Float() - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return a.Uint() < b.Uint() - case reflect.Bool: - return !a.Bool() && b.Bool() - } - panic("not a number") -} diff --git a/vendor/gopkg.in/yaml.v3/writerc.go b/vendor/gopkg.in/yaml.v3/writerc.go deleted file mode 100644 index b8a116bf..00000000 --- a/vendor/gopkg.in/yaml.v3/writerc.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -// Set the writer error and return false. -func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_WRITER_ERROR - emitter.problem = problem - return false -} - -// Flush the output buffer. -func yaml_emitter_flush(emitter *yaml_emitter_t) bool { - if emitter.write_handler == nil { - panic("write handler not set") - } - - // Check if the buffer is empty. - if emitter.buffer_pos == 0 { - return true - } - - if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - return true -} diff --git a/vendor/gopkg.in/yaml.v3/yaml.go b/vendor/gopkg.in/yaml.v3/yaml.go deleted file mode 100644 index b5d35a50..00000000 --- a/vendor/gopkg.in/yaml.v3/yaml.go +++ /dev/null @@ -1,662 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// 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 yaml implements YAML support for the Go language. -// -// Source code and other details for the project are available at GitHub: -// -// https://github.com/go-yaml/yaml -// -package yaml - -import ( - "errors" - "fmt" - "io" - "reflect" - "strings" - "sync" - "unicode/utf8" -) - -// The Unmarshaler interface may be implemented by types to customize their -// behavior when being unmarshaled from a YAML document. -type Unmarshaler interface { - UnmarshalYAML(value *Node) error -} - -type obsoleteUnmarshaler interface { - UnmarshalYAML(unmarshal func(interface{}) error) error -} - -// The Marshaler interface may be implemented by types to customize their -// behavior when being marshaled into a YAML document. The returned value -// is marshaled in place of the original value implementing Marshaler. -// -// If an error is returned by MarshalYAML, the marshaling procedure stops -// and returns with the provided error. -type Marshaler interface { - MarshalYAML() (interface{}, error) -} - -// Unmarshal decodes the first document found within the in byte slice -// and assigns decoded values into the out value. -// -// Maps and pointers (to a struct, string, int, etc) are accepted as out -// values. If an internal pointer within a struct is not initialized, -// the yaml package will initialize it if necessary for unmarshalling -// the provided data. The out parameter must not be nil. -// -// The type of the decoded values should be compatible with the respective -// values in out. If one or more values cannot be decoded due to a type -// mismatches, decoding continues partially until the end of the YAML -// content, and a *yaml.TypeError is returned with details for all -// missed values. -// -// Struct fields are only unmarshalled if they are exported (have an -// upper case first letter), and are unmarshalled using the field name -// lowercased as the default key. Custom keys may be defined via the -// "yaml" name in the field tag: the content preceding the first comma -// is used as the key, and the following comma-separated options are -// used to tweak the marshalling process (see Marshal). -// Conflicting names result in a runtime error. -// -// For example: -// -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) -// -// See the documentation of Marshal for the format of tags and a list of -// supported tag options. -// -func Unmarshal(in []byte, out interface{}) (err error) { - return unmarshal(in, out, false) -} - -// A Decorder reads and decodes YAML values from an input stream. -type Decoder struct { - parser *parser - knownFields bool -} - -// NewDecoder returns a new decoder that reads from r. -// -// The decoder introduces its own buffering and may read -// data from r beyond the YAML values requested. -func NewDecoder(r io.Reader) *Decoder { - return &Decoder{ - parser: newParserFromReader(r), - } -} - -// KnownFields ensures that the keys in decoded mappings to -// exist as fields in the struct being decoded into. -func (dec *Decoder) KnownFields(enable bool) { - dec.knownFields = enable -} - -// Decode reads the next YAML-encoded value from its input -// and stores it in the value pointed to by v. -// -// See the documentation for Unmarshal for details about the -// conversion of YAML into a Go value. -func (dec *Decoder) Decode(v interface{}) (err error) { - d := newDecoder() - d.knownFields = dec.knownFields - defer handleErr(&err) - node := dec.parser.parse() - if node == nil { - return io.EOF - } - out := reflect.ValueOf(v) - if out.Kind() == reflect.Ptr && !out.IsNil() { - out = out.Elem() - } - d.unmarshal(node, out) - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -// Decode decodes the node and stores its data into the value pointed to by v. -// -// See the documentation for Unmarshal for details about the -// conversion of YAML into a Go value. -func (n *Node) Decode(v interface{}) (err error) { - d := newDecoder() - defer handleErr(&err) - out := reflect.ValueOf(v) - if out.Kind() == reflect.Ptr && !out.IsNil() { - out = out.Elem() - } - d.unmarshal(n, out) - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -func unmarshal(in []byte, out interface{}, strict bool) (err error) { - defer handleErr(&err) - d := newDecoder() - p := newParser(in) - defer p.destroy() - node := p.parse() - if node != nil { - v := reflect.ValueOf(out) - if v.Kind() == reflect.Ptr && !v.IsNil() { - v = v.Elem() - } - d.unmarshal(node, v) - } - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -// Marshal serializes the value provided into a YAML document. The structure -// of the generated document will reflect the structure of the value itself. -// Maps and pointers (to struct, string, int, etc) are accepted as the in value. -// -// Struct fields are only marshalled if they are exported (have an upper case -// first letter), and are marshalled using the field name lowercased as the -// default key. Custom keys may be defined via the "yaml" name in the field -// tag: the content preceding the first comma is used as the key, and the -// following comma-separated options are used to tweak the marshalling process. -// Conflicting names result in a runtime error. -// -// The field tag format accepted is: -// -// `(...) yaml:"[][,[,]]" (...)` -// -// The following flags are currently supported: -// -// omitempty Only include the field if it's not set to the zero -// value for the type or to empty slices or maps. -// Zero valued structs will be omitted if all their public -// fields are zero, unless they implement an IsZero -// method (see the IsZeroer interface type), in which -// case the field will be included if that method returns true. -// -// flow Marshal using a flow style (useful for structs, -// sequences and maps). -// -// inline Inline the field, which must be a struct or a map, -// causing all of its fields or keys to be processed as if -// they were part of the outer struct. For maps, keys must -// not conflict with the yaml keys of other struct fields. -// -// In addition, if the key is "-", the field is ignored. -// -// For example: -// -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" -// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" -// -func Marshal(in interface{}) (out []byte, err error) { - defer handleErr(&err) - e := newEncoder() - defer e.destroy() - e.marshalDoc("", reflect.ValueOf(in)) - e.finish() - out = e.out - return -} - -// An Encoder writes YAML values to an output stream. -type Encoder struct { - encoder *encoder -} - -// NewEncoder returns a new encoder that writes to w. -// The Encoder should be closed after use to flush all data -// to w. -func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - encoder: newEncoderWithWriter(w), - } -} - -// Encode writes the YAML encoding of v to the stream. -// If multiple items are encoded to the stream, the -// second and subsequent document will be preceded -// with a "---" document separator, but the first will not. -// -// See the documentation for Marshal for details about the conversion of Go -// values to YAML. -func (e *Encoder) Encode(v interface{}) (err error) { - defer handleErr(&err) - e.encoder.marshalDoc("", reflect.ValueOf(v)) - return nil -} - -// SetIndent changes the used indentation used when encoding. -func (e *Encoder) SetIndent(spaces int) { - if spaces < 0 { - panic("yaml: cannot indent to a negative number of spaces") - } - e.encoder.indent = spaces -} - -// Close closes the encoder by writing any remaining data. -// It does not write a stream terminating string "...". -func (e *Encoder) Close() (err error) { - defer handleErr(&err) - e.encoder.finish() - return nil -} - -func handleErr(err *error) { - if v := recover(); v != nil { - if e, ok := v.(yamlError); ok { - *err = e.err - } else { - panic(v) - } - } -} - -type yamlError struct { - err error -} - -func fail(err error) { - panic(yamlError{err}) -} - -func failf(format string, args ...interface{}) { - panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) -} - -// A TypeError is returned by Unmarshal when one or more fields in -// the YAML document cannot be properly decoded into the requested -// types. When this error is returned, the value is still -// unmarshaled partially. -type TypeError struct { - Errors []string -} - -func (e *TypeError) Error() string { - return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) -} - -type Kind uint32 - -const ( - DocumentNode Kind = 1 << iota - SequenceNode - MappingNode - ScalarNode - AliasNode -) - -type Style uint32 - -const ( - TaggedStyle Style = 1 << iota - DoubleQuotedStyle - SingleQuotedStyle - LiteralStyle - FoldedStyle - FlowStyle -) - -// Node represents an element in the YAML document hierarchy. While documents -// are typically encoded and decoded into higher level types, such as structs -// and maps, Node is an intermediate representation that allows detailed -// control over the content being decoded or encoded. -// -// Values that make use of the Node type interact with the yaml package in the -// same way any other type would do, by encoding and decoding yaml data -// directly or indirectly into them. -// -// For example: -// -// var person struct { -// Name string -// Address yaml.Node -// } -// err := yaml.Unmarshal(data, &person) -// -// Or by itself: -// -// var person Node -// err := yaml.Unmarshal(data, &person) -// -type Node struct { - // Kind defines whether the node is a document, a mapping, a sequence, - // a scalar value, or an alias to another node. The specific data type of - // scalar nodes may be obtained via the ShortTag and LongTag methods. - Kind Kind - - // Style allows customizing the apperance of the node in the tree. - Style Style - - // Tag holds the YAML tag defining the data type for the value. - // When decoding, this field will always be set to the resolved tag, - // even when it wasn't explicitly provided in the YAML content. - // When encoding, if this field is unset the value type will be - // implied from the node properties, and if it is set, it will only - // be serialized into the representation if TaggedStyle is used or - // the implicit tag diverges from the provided one. - Tag string - - // Value holds the unescaped and unquoted represenation of the value. - Value string - - // Anchor holds the anchor name for this node, which allows aliases to point to it. - Anchor string - - // Alias holds the node that this alias points to. Only valid when Kind is AliasNode. - Alias *Node - - // Content holds contained nodes for documents, mappings, and sequences. - Content []*Node - - // HeadComment holds any comments in the lines preceding the node and - // not separated by an empty line. - HeadComment string - - // LineComment holds any comments at the end of the line where the node is in. - LineComment string - - // FootComment holds any comments following the node and before empty lines. - FootComment string - - // Line and Column hold the node position in the decoded YAML text. - // These fields are not respected when encoding the node. - Line int - Column int -} - -// LongTag returns the long form of the tag that indicates the data type for -// the node. If the Tag field isn't explicitly defined, one will be computed -// based on the node properties. -func (n *Node) LongTag() string { - return longTag(n.ShortTag()) -} - -// ShortTag returns the short form of the YAML tag that indicates data type for -// the node. If the Tag field isn't explicitly defined, one will be computed -// based on the node properties. -func (n *Node) ShortTag() string { - if n.indicatedString() { - return strTag - } - if n.Tag == "" || n.Tag == "!" { - switch n.Kind { - case MappingNode: - return mapTag - case SequenceNode: - return seqTag - case AliasNode: - if n.Alias != nil { - return n.Alias.ShortTag() - } - case ScalarNode: - tag, _ := resolve("", n.Value) - return tag - } - return "" - } - return shortTag(n.Tag) -} - -func (n *Node) indicatedString() bool { - return n.Kind == ScalarNode && - (shortTag(n.Tag) == strTag || - (n.Tag == "" || n.Tag == "!") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0) -} - -// SetString is a convenience function that sets the node to a string value -// and defines its style in a pleasant way depending on its content. -func (n *Node) SetString(s string) { - n.Kind = ScalarNode - if utf8.ValidString(s) { - n.Value = s - n.Tag = strTag - } else { - n.Value = encodeBase64(s) - n.Tag = binaryTag - } - if strings.Contains(n.Value, "\n") { - n.Style = LiteralStyle - } -} - -// -------------------------------------------------------------------------- -// Maintain a mapping of keys to structure field indexes - -// The code in this section was copied from mgo/bson. - -// structInfo holds details for the serialization of fields of -// a given struct. -type structInfo struct { - FieldsMap map[string]fieldInfo - FieldsList []fieldInfo - - // InlineMap is the number of the field in the struct that - // contains an ,inline map, or -1 if there's none. - InlineMap int - - // InlineUnmarshalers holds indexes to inlined fields that - // contain unmarshaler values. - InlineUnmarshalers [][]int -} - -type fieldInfo struct { - Key string - Num int - OmitEmpty bool - Flow bool - // Id holds the unique field identifier, so we can cheaply - // check for field duplicates without maintaining an extra map. - Id int - - // Inline holds the field index if the field is part of an inlined struct. - Inline []int -} - -var structMap = make(map[reflect.Type]*structInfo) -var fieldMapMutex sync.RWMutex -var unmarshalerType reflect.Type - -func init() { - var v Unmarshaler - unmarshalerType = reflect.ValueOf(&v).Elem().Type() -} - -func getStructInfo(st reflect.Type) (*structInfo, error) { - fieldMapMutex.RLock() - sinfo, found := structMap[st] - fieldMapMutex.RUnlock() - if found { - return sinfo, nil - } - - n := st.NumField() - fieldsMap := make(map[string]fieldInfo) - fieldsList := make([]fieldInfo, 0, n) - inlineMap := -1 - inlineUnmarshalers := [][]int(nil) - for i := 0; i != n; i++ { - field := st.Field(i) - if field.PkgPath != "" && !field.Anonymous { - continue // Private field - } - - info := fieldInfo{Num: i} - - tag := field.Tag.Get("yaml") - if tag == "" && strings.Index(string(field.Tag), ":") < 0 { - tag = string(field.Tag) - } - if tag == "-" { - continue - } - - inline := false - fields := strings.Split(tag, ",") - if len(fields) > 1 { - for _, flag := range fields[1:] { - switch flag { - case "omitempty": - info.OmitEmpty = true - case "flow": - info.Flow = true - case "inline": - inline = true - default: - return nil, errors.New(fmt.Sprintf("unsupported flag %q in tag %q of type %s", flag, tag, st)) - } - } - tag = fields[0] - } - - if inline { - switch field.Type.Kind() { - case reflect.Map: - if inlineMap >= 0 { - return nil, errors.New("multiple ,inline maps in struct " + st.String()) - } - if field.Type.Key() != reflect.TypeOf("") { - return nil, errors.New("option ,inline needs a map with string keys in struct " + st.String()) - } - inlineMap = info.Num - case reflect.Struct, reflect.Ptr: - ftype := field.Type - for ftype.Kind() == reflect.Ptr { - ftype = ftype.Elem() - } - if ftype.Kind() != reflect.Struct { - return nil, errors.New("option ,inline may only be used on a struct or map field") - } - if reflect.PtrTo(ftype).Implements(unmarshalerType) { - inlineUnmarshalers = append(inlineUnmarshalers, []int{i}) - } else { - sinfo, err := getStructInfo(ftype) - if err != nil { - return nil, err - } - for _, index := range sinfo.InlineUnmarshalers { - inlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...)) - } - for _, finfo := range sinfo.FieldsList { - if _, found := fieldsMap[finfo.Key]; found { - msg := "duplicated key '" + finfo.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - if finfo.Inline == nil { - finfo.Inline = []int{i, finfo.Num} - } else { - finfo.Inline = append([]int{i}, finfo.Inline...) - } - finfo.Id = len(fieldsList) - fieldsMap[finfo.Key] = finfo - fieldsList = append(fieldsList, finfo) - } - } - default: - return nil, errors.New("option ,inline may only be used on a struct or map field") - } - continue - } - - if tag != "" { - info.Key = tag - } else { - info.Key = strings.ToLower(field.Name) - } - - if _, found = fieldsMap[info.Key]; found { - msg := "duplicated key '" + info.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - - info.Id = len(fieldsList) - fieldsList = append(fieldsList, info) - fieldsMap[info.Key] = info - } - - sinfo = &structInfo{ - FieldsMap: fieldsMap, - FieldsList: fieldsList, - InlineMap: inlineMap, - InlineUnmarshalers: inlineUnmarshalers, - } - - fieldMapMutex.Lock() - structMap[st] = sinfo - fieldMapMutex.Unlock() - return sinfo, nil -} - -// IsZeroer is used to check whether an object is zero to -// determine whether it should be omitted when marshaling -// with the omitempty flag. One notable implementation -// is time.Time. -type IsZeroer interface { - IsZero() bool -} - -func isZero(v reflect.Value) bool { - kind := v.Kind() - if z, ok := v.Interface().(IsZeroer); ok { - if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { - return true - } - return z.IsZero() - } - switch kind { - case reflect.String: - return len(v.String()) == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - case reflect.Slice: - return v.Len() == 0 - case reflect.Map: - return v.Len() == 0 - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Struct: - vt := v.Type() - for i := v.NumField() - 1; i >= 0; i-- { - if vt.Field(i).PkgPath != "" { - continue // Private field - } - if !isZero(v.Field(i)) { - return false - } - } - return true - } - return false -} diff --git a/vendor/gopkg.in/yaml.v3/yamlh.go b/vendor/gopkg.in/yaml.v3/yamlh.go deleted file mode 100644 index 2719cfbb..00000000 --- a/vendor/gopkg.in/yaml.v3/yamlh.go +++ /dev/null @@ -1,805 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "fmt" - "io" -) - -// The version directive data. -type yaml_version_directive_t struct { - major int8 // The major version number. - minor int8 // The minor version number. -} - -// The tag directive data. -type yaml_tag_directive_t struct { - handle []byte // The tag handle. - prefix []byte // The tag prefix. -} - -type yaml_encoding_t int - -// The stream encoding. -const ( - // Let the parser choose the encoding. - yaml_ANY_ENCODING yaml_encoding_t = iota - - yaml_UTF8_ENCODING // The default UTF-8 encoding. - yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. - yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. -) - -type yaml_break_t int - -// Line break types. -const ( - // Let the parser choose the break type. - yaml_ANY_BREAK yaml_break_t = iota - - yaml_CR_BREAK // Use CR for line breaks (Mac style). - yaml_LN_BREAK // Use LN for line breaks (Unix style). - yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). -) - -type yaml_error_type_t int - -// Many bad things could happen with the parser and emitter. -const ( - // No error is produced. - yaml_NO_ERROR yaml_error_type_t = iota - - yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. - yaml_READER_ERROR // Cannot read or decode the input stream. - yaml_SCANNER_ERROR // Cannot scan the input stream. - yaml_PARSER_ERROR // Cannot parse the input stream. - yaml_COMPOSER_ERROR // Cannot compose a YAML document. - yaml_WRITER_ERROR // Cannot write to the output stream. - yaml_EMITTER_ERROR // Cannot emit a YAML stream. -) - -// The pointer position. -type yaml_mark_t struct { - index int // The position index. - line int // The position line. - column int // The position column. -} - -// Node Styles - -type yaml_style_t int8 - -type yaml_scalar_style_t yaml_style_t - -// Scalar styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0 - - yaml_PLAIN_SCALAR_STYLE yaml_scalar_style_t = 1 << iota // The plain scalar style. - yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. - yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. - yaml_LITERAL_SCALAR_STYLE // The literal scalar style. - yaml_FOLDED_SCALAR_STYLE // The folded scalar style. -) - -type yaml_sequence_style_t yaml_style_t - -// Sequence styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota - - yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. - yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. -) - -type yaml_mapping_style_t yaml_style_t - -// Mapping styles. -const ( - // Let the emitter choose the style. - yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota - - yaml_BLOCK_MAPPING_STYLE // The block mapping style. - yaml_FLOW_MAPPING_STYLE // The flow mapping style. -) - -// Tokens - -type yaml_token_type_t int - -// Token types. -const ( - // An empty token. - yaml_NO_TOKEN yaml_token_type_t = iota - - yaml_STREAM_START_TOKEN // A STREAM-START token. - yaml_STREAM_END_TOKEN // A STREAM-END token. - - yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. - yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. - yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. - yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. - - yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. - yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. - yaml_BLOCK_END_TOKEN // A BLOCK-END token. - - yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. - yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. - yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. - yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. - - yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. - yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. - yaml_KEY_TOKEN // A KEY token. - yaml_VALUE_TOKEN // A VALUE token. - - yaml_ALIAS_TOKEN // An ALIAS token. - yaml_ANCHOR_TOKEN // An ANCHOR token. - yaml_TAG_TOKEN // A TAG token. - yaml_SCALAR_TOKEN // A SCALAR token. -) - -func (tt yaml_token_type_t) String() string { - switch tt { - case yaml_NO_TOKEN: - return "yaml_NO_TOKEN" - case yaml_STREAM_START_TOKEN: - return "yaml_STREAM_START_TOKEN" - case yaml_STREAM_END_TOKEN: - return "yaml_STREAM_END_TOKEN" - case yaml_VERSION_DIRECTIVE_TOKEN: - return "yaml_VERSION_DIRECTIVE_TOKEN" - case yaml_TAG_DIRECTIVE_TOKEN: - return "yaml_TAG_DIRECTIVE_TOKEN" - case yaml_DOCUMENT_START_TOKEN: - return "yaml_DOCUMENT_START_TOKEN" - case yaml_DOCUMENT_END_TOKEN: - return "yaml_DOCUMENT_END_TOKEN" - case yaml_BLOCK_SEQUENCE_START_TOKEN: - return "yaml_BLOCK_SEQUENCE_START_TOKEN" - case yaml_BLOCK_MAPPING_START_TOKEN: - return "yaml_BLOCK_MAPPING_START_TOKEN" - case yaml_BLOCK_END_TOKEN: - return "yaml_BLOCK_END_TOKEN" - case yaml_FLOW_SEQUENCE_START_TOKEN: - return "yaml_FLOW_SEQUENCE_START_TOKEN" - case yaml_FLOW_SEQUENCE_END_TOKEN: - return "yaml_FLOW_SEQUENCE_END_TOKEN" - case yaml_FLOW_MAPPING_START_TOKEN: - return "yaml_FLOW_MAPPING_START_TOKEN" - case yaml_FLOW_MAPPING_END_TOKEN: - return "yaml_FLOW_MAPPING_END_TOKEN" - case yaml_BLOCK_ENTRY_TOKEN: - return "yaml_BLOCK_ENTRY_TOKEN" - case yaml_FLOW_ENTRY_TOKEN: - return "yaml_FLOW_ENTRY_TOKEN" - case yaml_KEY_TOKEN: - return "yaml_KEY_TOKEN" - case yaml_VALUE_TOKEN: - return "yaml_VALUE_TOKEN" - case yaml_ALIAS_TOKEN: - return "yaml_ALIAS_TOKEN" - case yaml_ANCHOR_TOKEN: - return "yaml_ANCHOR_TOKEN" - case yaml_TAG_TOKEN: - return "yaml_TAG_TOKEN" - case yaml_SCALAR_TOKEN: - return "yaml_SCALAR_TOKEN" - } - return "" -} - -// The token structure. -type yaml_token_t struct { - // The token type. - typ yaml_token_type_t - - // The start/end of the token. - start_mark, end_mark yaml_mark_t - - // The stream encoding (for yaml_STREAM_START_TOKEN). - encoding yaml_encoding_t - - // The alias/anchor/scalar value or tag/tag directive handle - // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). - value []byte - - // The tag suffix (for yaml_TAG_TOKEN). - suffix []byte - - // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). - prefix []byte - - // The scalar style (for yaml_SCALAR_TOKEN). - style yaml_scalar_style_t - - // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). - major, minor int8 -} - -// Events - -type yaml_event_type_t int8 - -// Event types. -const ( - // An empty event. - yaml_NO_EVENT yaml_event_type_t = iota - - yaml_STREAM_START_EVENT // A STREAM-START event. - yaml_STREAM_END_EVENT // A STREAM-END event. - yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. - yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. - yaml_ALIAS_EVENT // An ALIAS event. - yaml_SCALAR_EVENT // A SCALAR event. - yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. - yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. - yaml_MAPPING_START_EVENT // A MAPPING-START event. - yaml_MAPPING_END_EVENT // A MAPPING-END event. - yaml_TAIL_COMMENT_EVENT -) - -var eventStrings = []string{ - yaml_NO_EVENT: "none", - yaml_STREAM_START_EVENT: "stream start", - yaml_STREAM_END_EVENT: "stream end", - yaml_DOCUMENT_START_EVENT: "document start", - yaml_DOCUMENT_END_EVENT: "document end", - yaml_ALIAS_EVENT: "alias", - yaml_SCALAR_EVENT: "scalar", - yaml_SEQUENCE_START_EVENT: "sequence start", - yaml_SEQUENCE_END_EVENT: "sequence end", - yaml_MAPPING_START_EVENT: "mapping start", - yaml_MAPPING_END_EVENT: "mapping end", - yaml_TAIL_COMMENT_EVENT: "tail comment", -} - -func (e yaml_event_type_t) String() string { - if e < 0 || int(e) >= len(eventStrings) { - return fmt.Sprintf("unknown event %d", e) - } - return eventStrings[e] -} - -// The event structure. -type yaml_event_t struct { - - // The event type. - typ yaml_event_type_t - - // The start and end of the event. - start_mark, end_mark yaml_mark_t - - // The document encoding (for yaml_STREAM_START_EVENT). - encoding yaml_encoding_t - - // The version directive (for yaml_DOCUMENT_START_EVENT). - version_directive *yaml_version_directive_t - - // The list of tag directives (for yaml_DOCUMENT_START_EVENT). - tag_directives []yaml_tag_directive_t - - // The comments - head_comment []byte - line_comment []byte - foot_comment []byte - tail_comment []byte - - // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). - anchor []byte - - // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - tag []byte - - // The scalar value (for yaml_SCALAR_EVENT). - value []byte - - // Is the document start/end indicator implicit, or the tag optional? - // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). - implicit bool - - // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). - quoted_implicit bool - - // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - style yaml_style_t -} - -func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } -func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } -func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } - -// Nodes - -const ( - yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. - yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. - yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. - yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. - yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. - yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. - - yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. - yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. - - // Not in original libyaml. - yaml_BINARY_TAG = "tag:yaml.org,2002:binary" - yaml_MERGE_TAG = "tag:yaml.org,2002:merge" - - yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. - yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. - yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. -) - -type yaml_node_type_t int - -// Node types. -const ( - // An empty node. - yaml_NO_NODE yaml_node_type_t = iota - - yaml_SCALAR_NODE // A scalar node. - yaml_SEQUENCE_NODE // A sequence node. - yaml_MAPPING_NODE // A mapping node. -) - -// An element of a sequence node. -type yaml_node_item_t int - -// An element of a mapping node. -type yaml_node_pair_t struct { - key int // The key of the element. - value int // The value of the element. -} - -// The node structure. -type yaml_node_t struct { - typ yaml_node_type_t // The node type. - tag []byte // The node tag. - - // The node data. - - // The scalar parameters (for yaml_SCALAR_NODE). - scalar struct { - value []byte // The scalar value. - length int // The length of the scalar value. - style yaml_scalar_style_t // The scalar style. - } - - // The sequence parameters (for YAML_SEQUENCE_NODE). - sequence struct { - items_data []yaml_node_item_t // The stack of sequence items. - style yaml_sequence_style_t // The sequence style. - } - - // The mapping parameters (for yaml_MAPPING_NODE). - mapping struct { - pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). - pairs_start *yaml_node_pair_t // The beginning of the stack. - pairs_end *yaml_node_pair_t // The end of the stack. - pairs_top *yaml_node_pair_t // The top of the stack. - style yaml_mapping_style_t // The mapping style. - } - - start_mark yaml_mark_t // The beginning of the node. - end_mark yaml_mark_t // The end of the node. - -} - -// The document structure. -type yaml_document_t struct { - - // The document nodes. - nodes []yaml_node_t - - // The version directive. - version_directive *yaml_version_directive_t - - // The list of tag directives. - tag_directives_data []yaml_tag_directive_t - tag_directives_start int // The beginning of the tag directives list. - tag_directives_end int // The end of the tag directives list. - - start_implicit int // Is the document start indicator implicit? - end_implicit int // Is the document end indicator implicit? - - // The start/end of the document. - start_mark, end_mark yaml_mark_t -} - -// The prototype of a read handler. -// -// The read handler is called when the parser needs to read more bytes from the -// source. The handler should write not more than size bytes to the buffer. -// The number of written bytes should be set to the size_read variable. -// -// [in,out] data A pointer to an application data specified by -// yaml_parser_set_input(). -// [out] buffer The buffer to write the data from the source. -// [in] size The size of the buffer. -// [out] size_read The actual number of bytes read from the source. -// -// On success, the handler should return 1. If the handler failed, -// the returned value should be 0. On EOF, the handler should set the -// size_read to 0 and return 1. -type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) - -// This structure holds information about a potential simple key. -type yaml_simple_key_t struct { - possible bool // Is a simple key possible? - required bool // Is a simple key required? - token_number int // The number of the token. - mark yaml_mark_t // The position mark. -} - -// The states of the parser. -type yaml_parser_state_t int - -const ( - yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota - - yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. - yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. - yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. - yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. - yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. - yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. - yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. - yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. - yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. - yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. - yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. - yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. - yaml_PARSE_END_STATE // Expect nothing. -) - -func (ps yaml_parser_state_t) String() string { - switch ps { - case yaml_PARSE_STREAM_START_STATE: - return "yaml_PARSE_STREAM_START_STATE" - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_START_STATE: - return "yaml_PARSE_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return "yaml_PARSE_DOCUMENT_CONTENT_STATE" - case yaml_PARSE_DOCUMENT_END_STATE: - return "yaml_PARSE_DOCUMENT_END_STATE" - case yaml_PARSE_BLOCK_NODE_STATE: - return "yaml_PARSE_BLOCK_NODE_STATE" - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" - case yaml_PARSE_FLOW_NODE_STATE: - return "yaml_PARSE_FLOW_NODE_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" - case yaml_PARSE_END_STATE: - return "yaml_PARSE_END_STATE" - } - return "" -} - -// This structure holds aliases data. -type yaml_alias_data_t struct { - anchor []byte // The anchor. - index int // The node id. - mark yaml_mark_t // The anchor mark. -} - -// The parser structure. -// -// All members are internal. Manage the structure using the -// yaml_parser_ family of functions. -type yaml_parser_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - - problem string // Error description. - - // The byte about which the problem occurred. - problem_offset int - problem_value int - problem_mark yaml_mark_t - - // The error context. - context string - context_mark yaml_mark_t - - // Reader stuff - - read_handler yaml_read_handler_t // Read handler. - - input_reader io.Reader // File input data. - input []byte // String input data. - input_pos int - - eof bool // EOF flag - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - unread int // The number of unread characters in the buffer. - - newlines int // The number of line breaks since last non-break/non-blank character - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The input encoding. - - offset int // The offset of the current position (in bytes). - mark yaml_mark_t // The mark of the current position. - - // Comments - - head_comment []byte // The current head comments - line_comment []byte // The current line comments - foot_comment []byte // The current foot comments - tail_comment []byte // Foot comment that happens at the end of a block. - stem_comment []byte // Comment in item preceding a nested structure (list inside list item, etc) - - comments []yaml_comment_t // The folded comments for all parsed tokens - comments_head int - - // Scanner stuff - - stream_start_produced bool // Have we started to scan the input stream? - stream_end_produced bool // Have we reached the end of the input stream? - - flow_level int // The number of unclosed '[' and '{' indicators. - - tokens []yaml_token_t // The tokens queue. - tokens_head int // The head of the tokens queue. - tokens_parsed int // The number of tokens fetched from the queue. - token_available bool // Does the tokens queue contain a token ready for dequeueing. - - indent int // The current indentation level. - indents []int // The indentation levels stack. - - simple_key_allowed bool // May a simple key occur at the current position? - simple_keys []yaml_simple_key_t // The stack of simple keys. - simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number - - // Parser stuff - - state yaml_parser_state_t // The current parser state. - states []yaml_parser_state_t // The parser states stack. - marks []yaml_mark_t // The stack of marks. - tag_directives []yaml_tag_directive_t // The list of TAG directives. - - // Dumper stuff - - aliases []yaml_alias_data_t // The alias data. - - document *yaml_document_t // The currently parsed document. -} - -type yaml_comment_t struct { - - scan_mark yaml_mark_t // Position where scanning for comments started - token_mark yaml_mark_t // Position after which tokens will be associated with this comment - start_mark yaml_mark_t // Position of '#' comment mark - end_mark yaml_mark_t // Position where comment terminated - - head []byte - line []byte - foot []byte -} - -// Emitter Definitions - -// The prototype of a write handler. -// -// The write handler is called when the emitter needs to flush the accumulated -// characters to the output. The handler should write @a size bytes of the -// @a buffer to the output. -// -// @param[in,out] data A pointer to an application data specified by -// yaml_emitter_set_output(). -// @param[in] buffer The buffer with bytes to be written. -// @param[in] size The size of the buffer. -// -// @returns On success, the handler should return @c 1. If the handler failed, -// the returned value should be @c 0. -// -type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error - -type yaml_emitter_state_t int - -// The emitter states. -const ( - // Expect STREAM-START. - yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota - - yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. - yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE // Expect the next item of a flow sequence, with the comma already written out - yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. - yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE // Expect the next key of a flow mapping, with the comma already written out - yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. - yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. - yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. - yaml_EMIT_END_STATE // Expect nothing. -) - -// The emitter structure. -// -// All members are internal. Manage the structure using the @c yaml_emitter_ -// family of functions. -type yaml_emitter_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - problem string // Error description. - - // Writer stuff - - write_handler yaml_write_handler_t // Write handler. - - output_buffer *[]byte // String output data. - output_writer io.Writer // File output data. - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The stream encoding. - - // Emitter stuff - - canonical bool // If the output is in the canonical style? - best_indent int // The number of indentation spaces. - best_width int // The preferred width of the output lines. - unicode bool // Allow unescaped non-ASCII characters? - line_break yaml_break_t // The preferred line break. - - state yaml_emitter_state_t // The current emitter state. - states []yaml_emitter_state_t // The stack of states. - - events []yaml_event_t // The event queue. - events_head int // The head of the event queue. - - indents []int // The stack of indentation levels. - - tag_directives []yaml_tag_directive_t // The list of tag directives. - - indent int // The current indentation level. - - flow_level int // The current flow level. - - root_context bool // Is it the document root context? - sequence_context bool // Is it a sequence context? - mapping_context bool // Is it a mapping context? - simple_key_context bool // Is it a simple mapping key context? - - line int // The current line. - column int // The current column. - whitespace bool // If the last character was a whitespace? - indention bool // If the last character was an indentation character (' ', '-', '?', ':')? - open_ended bool // If an explicit document end is required? - - space_above bool // Is there's an empty line above? - foot_indent int // The indent used to write the foot comment above, or -1 if none. - - // Anchor analysis. - anchor_data struct { - anchor []byte // The anchor value. - alias bool // Is it an alias? - } - - // Tag analysis. - tag_data struct { - handle []byte // The tag handle. - suffix []byte // The tag suffix. - } - - // Scalar analysis. - scalar_data struct { - value []byte // The scalar value. - multiline bool // Does the scalar contain line breaks? - flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? - block_plain_allowed bool // Can the scalar be expressed in the block plain style? - single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? - block_allowed bool // Can the scalar be expressed in the literal or folded styles? - style yaml_scalar_style_t // The output style. - } - - // Comments - head_comment []byte - line_comment []byte - foot_comment []byte - tail_comment []byte - - // Dumper stuff - - opened bool // If the stream was already opened? - closed bool // If the stream was already closed? - - // The information associated with the document nodes. - anchors *struct { - references int // The number of references. - anchor int // The anchor id. - serialized bool // If the node has been emitted? - } - - last_anchor_id int // The last assigned anchor id. - - document *yaml_document_t // The currently emitted document. -} diff --git a/vendor/gopkg.in/yaml.v3/yamlprivateh.go b/vendor/gopkg.in/yaml.v3/yamlprivateh.go deleted file mode 100644 index e88f9c54..00000000 --- a/vendor/gopkg.in/yaml.v3/yamlprivateh.go +++ /dev/null @@ -1,198 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -const ( - // The size of the input raw buffer. - input_raw_buffer_size = 512 - - // The size of the input buffer. - // It should be possible to decode the whole raw buffer. - input_buffer_size = input_raw_buffer_size * 3 - - // The size of the output buffer. - output_buffer_size = 128 - - // The size of the output raw buffer. - // It should be possible to encode the whole output buffer. - output_raw_buffer_size = (output_buffer_size*2 + 2) - - // The size of other stacks and queues. - initial_stack_size = 16 - initial_queue_size = 16 - initial_string_size = 16 -) - -// Check if the character at the specified position is an alphabetical -// character, a digit, '_', or '-'. -func is_alpha(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' -} - -// Check if the character at the specified position is a digit. -func is_digit(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' -} - -// Get the value of a digit. -func as_digit(b []byte, i int) int { - return int(b[i]) - '0' -} - -// Check if the character at the specified position is a hex-digit. -func is_hex(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' -} - -// Get the value of a hex-digit. -func as_hex(b []byte, i int) int { - bi := b[i] - if bi >= 'A' && bi <= 'F' { - return int(bi) - 'A' + 10 - } - if bi >= 'a' && bi <= 'f' { - return int(bi) - 'a' + 10 - } - return int(bi) - '0' -} - -// Check if the character is ASCII. -func is_ascii(b []byte, i int) bool { - return b[i] <= 0x7F -} - -// Check if the character at the start of the buffer can be printed unescaped. -func is_printable(b []byte, i int) bool { - return ((b[i] == 0x0A) || // . == #x0A - (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E - (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF - (b[i] > 0xC2 && b[i] < 0xED) || - (b[i] == 0xED && b[i+1] < 0xA0) || - (b[i] == 0xEE) || - (b[i] == 0xEF && // #xE000 <= . <= #xFFFD - !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF - !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) -} - -// Check if the character at the specified position is NUL. -func is_z(b []byte, i int) bool { - return b[i] == 0x00 -} - -// Check if the beginning of the buffer is a BOM. -func is_bom(b []byte, i int) bool { - return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF -} - -// Check if the character at the specified position is space. -func is_space(b []byte, i int) bool { - return b[i] == ' ' -} - -// Check if the character at the specified position is tab. -func is_tab(b []byte, i int) bool { - return b[i] == '\t' -} - -// Check if the character at the specified position is blank (space or tab). -func is_blank(b []byte, i int) bool { - //return is_space(b, i) || is_tab(b, i) - return b[i] == ' ' || b[i] == '\t' -} - -// Check if the character at the specified position is a line break. -func is_break(b []byte, i int) bool { - return (b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) -} - -func is_crlf(b []byte, i int) bool { - return b[i] == '\r' && b[i+1] == '\n' -} - -// Check if the character is a line break or NUL. -func is_breakz(b []byte, i int) bool { - //return is_break(b, i) || is_z(b, i) - return ( - // is_break: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - // is_z: - b[i] == 0) -} - -// Check if the character is a line break, space, or NUL. -func is_spacez(b []byte, i int) bool { - //return is_space(b, i) || is_breakz(b, i) - return ( - // is_space: - b[i] == ' ' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Check if the character is a line break, space, tab, or NUL. -func is_blankz(b []byte, i int) bool { - //return is_blank(b, i) || is_breakz(b, i) - return ( - // is_blank: - b[i] == ' ' || b[i] == '\t' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Determine the width of the character. -func width(b byte) int { - // Don't replace these by a switch without first - // confirming that it is being inlined. - if b&0x80 == 0x00 { - return 1 - } - if b&0xE0 == 0xC0 { - return 2 - } - if b&0xF0 == 0xE0 { - return 3 - } - if b&0xF8 == 0xF0 { - return 4 - } - return 0 - -} diff --git a/vendor/modules.txt b/vendor/modules.txt deleted file mode 100644 index 8bcbe2df..00000000 --- a/vendor/modules.txt +++ /dev/null @@ -1,15 +0,0 @@ -# github.com/davecgh/go-spew v1.1.0 -github.com/davecgh/go-spew/spew -# github.com/gosimple/slug v1.12.0 -## explicit -github.com/gosimple/slug -# github.com/gosimple/unidecode v1.0.1 -github.com/gosimple/unidecode -# github.com/pmezard/go-difflib v1.0.0 -github.com/pmezard/go-difflib/difflib -# github.com/stretchr/testify v1.7.0 -## explicit -github.com/stretchr/testify/assert -github.com/stretchr/testify/require -# gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c -gopkg.in/yaml.v3