diff --git a/src/server/go.mod b/src/server/go.mod index 5eb1fe52..7a1893c7 100644 --- a/src/server/go.mod +++ b/src/server/go.mod @@ -10,13 +10,18 @@ require ( github.com/redis/go-redis/v9 v9.6.1 github.com/robfig/cron/v3 v3.0.1 github.com/segmentio/kafka-go v0.4.47 + github.com/vicanso/go-charts/v2 v2.6.10 google.golang.org/protobuf v1.35.2 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 ) require ( + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/klauspost/compress v1.15.9 // indirect github.com/pierrec/lz4/v4 v4.1.15 // indirect + github.com/wcharczuk/go-chart/v2 v2.1.0 // indirect + golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 // indirect ) require ( diff --git a/src/server/go.sum b/src/server/go.sum index aa372e98..66ea22a5 100644 --- a/src/server/go.sum +++ b/src/server/go.sum @@ -13,10 +13,14 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= @@ -51,8 +55,13 @@ github.com/segmentio/kafka-go v0.4.47/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVO github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/vicanso/go-charts/v2 v2.6.10 h1:Nb2YBekEbUBPbvohnUO1oYMy31v75brUPk6n/fq+JXw= +github.com/vicanso/go-charts/v2 v2.6.10/go.mod h1:Ii2KDI3udTG1wPtiTnntzjlUBJVJTqNscMzh3oYHzUk= +github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= +github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -63,6 +72,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 h1:QelT11PB4FXiDEXucrfNckHoFxwt8USGY1ajP1ZF5lM= +golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= diff --git a/src/server/vendor/github.com/dustin/go-humanize/.travis.yml b/src/server/vendor/github.com/dustin/go-humanize/.travis.yml new file mode 100644 index 00000000..ac12e485 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: go +go_import_path: github.com/dustin/go-humanize +go: + - 1.13.x + - 1.14.x + - 1.15.x + - 1.16.x + - stable + - master +matrix: + allow_failures: + - go: master + fast_finish: true +install: + - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step). +script: + - diff -u <(echo -n) <(gofmt -d -s .) + - go vet . + - go install -v -race ./... + - go test -v -race ./... diff --git a/src/server/vendor/github.com/dustin/go-humanize/LICENSE b/src/server/vendor/github.com/dustin/go-humanize/LICENSE new file mode 100644 index 00000000..8d9a94a9 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2005-2008 Dustin Sallings + +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/src/server/vendor/github.com/dustin/go-humanize/README.markdown b/src/server/vendor/github.com/dustin/go-humanize/README.markdown new file mode 100644 index 00000000..7d0b16b3 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/README.markdown @@ -0,0 +1,124 @@ +# Humane Units [![Build Status](https://travis-ci.org/dustin/go-humanize.svg?branch=master)](https://travis-ci.org/dustin/go-humanize) [![GoDoc](https://godoc.org/github.com/dustin/go-humanize?status.svg)](https://godoc.org/github.com/dustin/go-humanize) + +Just a few functions for helping humanize times and sizes. + +`go get` it as `github.com/dustin/go-humanize`, import it as +`"github.com/dustin/go-humanize"`, use it as `humanize`. + +See [godoc](https://pkg.go.dev/github.com/dustin/go-humanize) for +complete documentation. + +## Sizes + +This lets you take numbers like `82854982` and convert them to useful +strings like, `83 MB` or `79 MiB` (whichever you prefer). + +Example: + +```go +fmt.Printf("That file is %s.", humanize.Bytes(82854982)) // That file is 83 MB. +``` + +## Times + +This lets you take a `time.Time` and spit it out in relative terms. +For example, `12 seconds ago` or `3 days from now`. + +Example: + +```go +fmt.Printf("This was touched %s.", humanize.Time(someTimeInstance)) // This was touched 7 hours ago. +``` + +Thanks to Kyle Lemons for the time implementation from an IRC +conversation one day. It's pretty neat. + +## Ordinals + +From a [mailing list discussion][odisc] where a user wanted to be able +to label ordinals. + + 0 -> 0th + 1 -> 1st + 2 -> 2nd + 3 -> 3rd + 4 -> 4th + [...] + +Example: + +```go +fmt.Printf("You're my %s best friend.", humanize.Ordinal(193)) // You are my 193rd best friend. +``` + +## Commas + +Want to shove commas into numbers? Be my guest. + + 0 -> 0 + 100 -> 100 + 1000 -> 1,000 + 1000000000 -> 1,000,000,000 + -100000 -> -100,000 + +Example: + +```go +fmt.Printf("You owe $%s.\n", humanize.Comma(6582491)) // You owe $6,582,491. +``` + +## Ftoa + +Nicer float64 formatter that removes trailing zeros. + +```go +fmt.Printf("%f", 2.24) // 2.240000 +fmt.Printf("%s", humanize.Ftoa(2.24)) // 2.24 +fmt.Printf("%f", 2.0) // 2.000000 +fmt.Printf("%s", humanize.Ftoa(2.0)) // 2 +``` + +## SI notation + +Format numbers with [SI notation][sinotation]. + +Example: + +```go +humanize.SI(0.00000000223, "M") // 2.23 nM +``` + +## English-specific functions + +The following functions are in the `humanize/english` subpackage. + +### Plurals + +Simple English pluralization + +```go +english.PluralWord(1, "object", "") // object +english.PluralWord(42, "object", "") // objects +english.PluralWord(2, "bus", "") // buses +english.PluralWord(99, "locus", "loci") // loci + +english.Plural(1, "object", "") // 1 object +english.Plural(42, "object", "") // 42 objects +english.Plural(2, "bus", "") // 2 buses +english.Plural(99, "locus", "loci") // 99 loci +``` + +### Word series + +Format comma-separated words lists with conjuctions: + +```go +english.WordSeries([]string{"foo"}, "and") // foo +english.WordSeries([]string{"foo", "bar"}, "and") // foo and bar +english.WordSeries([]string{"foo", "bar", "baz"}, "and") // foo, bar and baz + +english.OxfordWordSeries([]string{"foo", "bar", "baz"}, "and") // foo, bar, and baz +``` + +[odisc]: https://groups.google.com/d/topic/golang-nuts/l8NhI74jl-4/discussion +[sinotation]: http://en.wikipedia.org/wiki/Metric_prefix diff --git a/src/server/vendor/github.com/dustin/go-humanize/big.go b/src/server/vendor/github.com/dustin/go-humanize/big.go new file mode 100644 index 00000000..f49dc337 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/big.go @@ -0,0 +1,31 @@ +package humanize + +import ( + "math/big" +) + +// order of magnitude (to a max order) +func oomm(n, b *big.Int, maxmag int) (float64, int) { + mag := 0 + m := &big.Int{} + for n.Cmp(b) >= 0 { + n.DivMod(n, b, m) + mag++ + if mag == maxmag && maxmag >= 0 { + break + } + } + return float64(n.Int64()) + (float64(m.Int64()) / float64(b.Int64())), mag +} + +// total order of magnitude +// (same as above, but with no upper limit) +func oom(n, b *big.Int) (float64, int) { + mag := 0 + m := &big.Int{} + for n.Cmp(b) >= 0 { + n.DivMod(n, b, m) + mag++ + } + return float64(n.Int64()) + (float64(m.Int64()) / float64(b.Int64())), mag +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/bigbytes.go b/src/server/vendor/github.com/dustin/go-humanize/bigbytes.go new file mode 100644 index 00000000..3b015fd5 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/bigbytes.go @@ -0,0 +1,189 @@ +package humanize + +import ( + "fmt" + "math/big" + "strings" + "unicode" +) + +var ( + bigIECExp = big.NewInt(1024) + + // BigByte is one byte in bit.Ints + BigByte = big.NewInt(1) + // BigKiByte is 1,024 bytes in bit.Ints + BigKiByte = (&big.Int{}).Mul(BigByte, bigIECExp) + // BigMiByte is 1,024 k bytes in bit.Ints + BigMiByte = (&big.Int{}).Mul(BigKiByte, bigIECExp) + // BigGiByte is 1,024 m bytes in bit.Ints + BigGiByte = (&big.Int{}).Mul(BigMiByte, bigIECExp) + // BigTiByte is 1,024 g bytes in bit.Ints + BigTiByte = (&big.Int{}).Mul(BigGiByte, bigIECExp) + // BigPiByte is 1,024 t bytes in bit.Ints + BigPiByte = (&big.Int{}).Mul(BigTiByte, bigIECExp) + // BigEiByte is 1,024 p bytes in bit.Ints + BigEiByte = (&big.Int{}).Mul(BigPiByte, bigIECExp) + // BigZiByte is 1,024 e bytes in bit.Ints + BigZiByte = (&big.Int{}).Mul(BigEiByte, bigIECExp) + // BigYiByte is 1,024 z bytes in bit.Ints + BigYiByte = (&big.Int{}).Mul(BigZiByte, bigIECExp) + // BigRiByte is 1,024 y bytes in bit.Ints + BigRiByte = (&big.Int{}).Mul(BigYiByte, bigIECExp) + // BigQiByte is 1,024 r bytes in bit.Ints + BigQiByte = (&big.Int{}).Mul(BigRiByte, bigIECExp) +) + +var ( + bigSIExp = big.NewInt(1000) + + // BigSIByte is one SI byte in big.Ints + BigSIByte = big.NewInt(1) + // BigKByte is 1,000 SI bytes in big.Ints + BigKByte = (&big.Int{}).Mul(BigSIByte, bigSIExp) + // BigMByte is 1,000 SI k bytes in big.Ints + BigMByte = (&big.Int{}).Mul(BigKByte, bigSIExp) + // BigGByte is 1,000 SI m bytes in big.Ints + BigGByte = (&big.Int{}).Mul(BigMByte, bigSIExp) + // BigTByte is 1,000 SI g bytes in big.Ints + BigTByte = (&big.Int{}).Mul(BigGByte, bigSIExp) + // BigPByte is 1,000 SI t bytes in big.Ints + BigPByte = (&big.Int{}).Mul(BigTByte, bigSIExp) + // BigEByte is 1,000 SI p bytes in big.Ints + BigEByte = (&big.Int{}).Mul(BigPByte, bigSIExp) + // BigZByte is 1,000 SI e bytes in big.Ints + BigZByte = (&big.Int{}).Mul(BigEByte, bigSIExp) + // BigYByte is 1,000 SI z bytes in big.Ints + BigYByte = (&big.Int{}).Mul(BigZByte, bigSIExp) + // BigRByte is 1,000 SI y bytes in big.Ints + BigRByte = (&big.Int{}).Mul(BigYByte, bigSIExp) + // BigQByte is 1,000 SI r bytes in big.Ints + BigQByte = (&big.Int{}).Mul(BigRByte, bigSIExp) +) + +var bigBytesSizeTable = map[string]*big.Int{ + "b": BigByte, + "kib": BigKiByte, + "kb": BigKByte, + "mib": BigMiByte, + "mb": BigMByte, + "gib": BigGiByte, + "gb": BigGByte, + "tib": BigTiByte, + "tb": BigTByte, + "pib": BigPiByte, + "pb": BigPByte, + "eib": BigEiByte, + "eb": BigEByte, + "zib": BigZiByte, + "zb": BigZByte, + "yib": BigYiByte, + "yb": BigYByte, + "rib": BigRiByte, + "rb": BigRByte, + "qib": BigQiByte, + "qb": BigQByte, + // Without suffix + "": BigByte, + "ki": BigKiByte, + "k": BigKByte, + "mi": BigMiByte, + "m": BigMByte, + "gi": BigGiByte, + "g": BigGByte, + "ti": BigTiByte, + "t": BigTByte, + "pi": BigPiByte, + "p": BigPByte, + "ei": BigEiByte, + "e": BigEByte, + "z": BigZByte, + "zi": BigZiByte, + "y": BigYByte, + "yi": BigYiByte, + "r": BigRByte, + "ri": BigRiByte, + "q": BigQByte, + "qi": BigQiByte, +} + +var ten = big.NewInt(10) + +func humanateBigBytes(s, base *big.Int, sizes []string) string { + if s.Cmp(ten) < 0 { + return fmt.Sprintf("%d B", s) + } + c := (&big.Int{}).Set(s) + val, mag := oomm(c, base, len(sizes)-1) + suffix := sizes[mag] + f := "%.0f %s" + if val < 10 { + f = "%.1f %s" + } + + return fmt.Sprintf(f, val, suffix) + +} + +// BigBytes produces a human readable representation of an SI size. +// +// See also: ParseBigBytes. +// +// BigBytes(82854982) -> 83 MB +func BigBytes(s *big.Int) string { + sizes := []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "RB", "QB"} + return humanateBigBytes(s, bigSIExp, sizes) +} + +// BigIBytes produces a human readable representation of an IEC size. +// +// See also: ParseBigBytes. +// +// BigIBytes(82854982) -> 79 MiB +func BigIBytes(s *big.Int) string { + sizes := []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", "RiB", "QiB"} + return humanateBigBytes(s, bigIECExp, sizes) +} + +// ParseBigBytes parses a string representation of bytes into the number +// of bytes it represents. +// +// See also: BigBytes, BigIBytes. +// +// ParseBigBytes("42 MB") -> 42000000, nil +// ParseBigBytes("42 mib") -> 44040192, nil +func ParseBigBytes(s string) (*big.Int, error) { + lastDigit := 0 + hasComma := false + for _, r := range s { + if !(unicode.IsDigit(r) || r == '.' || r == ',') { + break + } + if r == ',' { + hasComma = true + } + lastDigit++ + } + + num := s[:lastDigit] + if hasComma { + num = strings.Replace(num, ",", "", -1) + } + + val := &big.Rat{} + _, err := fmt.Sscanf(num, "%f", val) + if err != nil { + return nil, err + } + + extra := strings.ToLower(strings.TrimSpace(s[lastDigit:])) + if m, ok := bigBytesSizeTable[extra]; ok { + mv := (&big.Rat{}).SetInt(m) + val.Mul(val, mv) + rv := &big.Int{} + rv.Div(val.Num(), val.Denom()) + return rv, nil + } + + return nil, fmt.Errorf("unhandled size name: %v", extra) +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/bytes.go b/src/server/vendor/github.com/dustin/go-humanize/bytes.go new file mode 100644 index 00000000..0b498f48 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/bytes.go @@ -0,0 +1,143 @@ +package humanize + +import ( + "fmt" + "math" + "strconv" + "strings" + "unicode" +) + +// IEC Sizes. +// kibis of bits +const ( + Byte = 1 << (iota * 10) + KiByte + MiByte + GiByte + TiByte + PiByte + EiByte +) + +// SI Sizes. +const ( + IByte = 1 + KByte = IByte * 1000 + MByte = KByte * 1000 + GByte = MByte * 1000 + TByte = GByte * 1000 + PByte = TByte * 1000 + EByte = PByte * 1000 +) + +var bytesSizeTable = map[string]uint64{ + "b": Byte, + "kib": KiByte, + "kb": KByte, + "mib": MiByte, + "mb": MByte, + "gib": GiByte, + "gb": GByte, + "tib": TiByte, + "tb": TByte, + "pib": PiByte, + "pb": PByte, + "eib": EiByte, + "eb": EByte, + // Without suffix + "": Byte, + "ki": KiByte, + "k": KByte, + "mi": MiByte, + "m": MByte, + "gi": GiByte, + "g": GByte, + "ti": TiByte, + "t": TByte, + "pi": PiByte, + "p": PByte, + "ei": EiByte, + "e": EByte, +} + +func logn(n, b float64) float64 { + return math.Log(n) / math.Log(b) +} + +func humanateBytes(s uint64, base float64, sizes []string) string { + if s < 10 { + return fmt.Sprintf("%d B", s) + } + e := math.Floor(logn(float64(s), base)) + suffix := sizes[int(e)] + val := math.Floor(float64(s)/math.Pow(base, e)*10+0.5) / 10 + f := "%.0f %s" + if val < 10 { + f = "%.1f %s" + } + + return fmt.Sprintf(f, val, suffix) +} + +// Bytes produces a human readable representation of an SI size. +// +// See also: ParseBytes. +// +// Bytes(82854982) -> 83 MB +func Bytes(s uint64) string { + sizes := []string{"B", "kB", "MB", "GB", "TB", "PB", "EB"} + return humanateBytes(s, 1000, sizes) +} + +// IBytes produces a human readable representation of an IEC size. +// +// See also: ParseBytes. +// +// IBytes(82854982) -> 79 MiB +func IBytes(s uint64) string { + sizes := []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"} + return humanateBytes(s, 1024, sizes) +} + +// ParseBytes parses a string representation of bytes into the number +// of bytes it represents. +// +// See Also: Bytes, IBytes. +// +// ParseBytes("42 MB") -> 42000000, nil +// ParseBytes("42 mib") -> 44040192, nil +func ParseBytes(s string) (uint64, error) { + lastDigit := 0 + hasComma := false + for _, r := range s { + if !(unicode.IsDigit(r) || r == '.' || r == ',') { + break + } + if r == ',' { + hasComma = true + } + lastDigit++ + } + + num := s[:lastDigit] + if hasComma { + num = strings.Replace(num, ",", "", -1) + } + + f, err := strconv.ParseFloat(num, 64) + if err != nil { + return 0, err + } + + extra := strings.ToLower(strings.TrimSpace(s[lastDigit:])) + if m, ok := bytesSizeTable[extra]; ok { + f *= float64(m) + if f >= math.MaxUint64 { + return 0, fmt.Errorf("too large: %v", s) + } + return uint64(f), nil + } + + return 0, fmt.Errorf("unhandled size name: %v", extra) +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/comma.go b/src/server/vendor/github.com/dustin/go-humanize/comma.go new file mode 100644 index 00000000..520ae3e5 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/comma.go @@ -0,0 +1,116 @@ +package humanize + +import ( + "bytes" + "math" + "math/big" + "strconv" + "strings" +) + +// Comma produces a string form of the given number in base 10 with +// commas after every three orders of magnitude. +// +// e.g. Comma(834142) -> 834,142 +func Comma(v int64) string { + sign := "" + + // Min int64 can't be negated to a usable value, so it has to be special cased. + if v == math.MinInt64 { + return "-9,223,372,036,854,775,808" + } + + if v < 0 { + sign = "-" + v = 0 - v + } + + parts := []string{"", "", "", "", "", "", ""} + j := len(parts) - 1 + + for v > 999 { + parts[j] = strconv.FormatInt(v%1000, 10) + switch len(parts[j]) { + case 2: + parts[j] = "0" + parts[j] + case 1: + parts[j] = "00" + parts[j] + } + v = v / 1000 + j-- + } + parts[j] = strconv.Itoa(int(v)) + return sign + strings.Join(parts[j:], ",") +} + +// Commaf produces a string form of the given number in base 10 with +// commas after every three orders of magnitude. +// +// e.g. Commaf(834142.32) -> 834,142.32 +func Commaf(v float64) string { + buf := &bytes.Buffer{} + if v < 0 { + buf.Write([]byte{'-'}) + v = 0 - v + } + + comma := []byte{','} + + parts := strings.Split(strconv.FormatFloat(v, 'f', -1, 64), ".") + pos := 0 + if len(parts[0])%3 != 0 { + pos += len(parts[0]) % 3 + buf.WriteString(parts[0][:pos]) + buf.Write(comma) + } + for ; pos < len(parts[0]); pos += 3 { + buf.WriteString(parts[0][pos : pos+3]) + buf.Write(comma) + } + buf.Truncate(buf.Len() - 1) + + if len(parts) > 1 { + buf.Write([]byte{'.'}) + buf.WriteString(parts[1]) + } + return buf.String() +} + +// CommafWithDigits works like the Commaf but limits the resulting +// string to the given number of decimal places. +// +// e.g. CommafWithDigits(834142.32, 1) -> 834,142.3 +func CommafWithDigits(f float64, decimals int) string { + return stripTrailingDigits(Commaf(f), decimals) +} + +// BigComma produces a string form of the given big.Int in base 10 +// with commas after every three orders of magnitude. +func BigComma(b *big.Int) string { + sign := "" + if b.Sign() < 0 { + sign = "-" + b.Abs(b) + } + + athousand := big.NewInt(1000) + c := (&big.Int{}).Set(b) + _, m := oom(c, athousand) + parts := make([]string, m+1) + j := len(parts) - 1 + + mod := &big.Int{} + for b.Cmp(athousand) >= 0 { + b.DivMod(b, athousand, mod) + parts[j] = strconv.FormatInt(mod.Int64(), 10) + switch len(parts[j]) { + case 2: + parts[j] = "0" + parts[j] + case 1: + parts[j] = "00" + parts[j] + } + j-- + } + parts[j] = strconv.Itoa(int(b.Int64())) + return sign + strings.Join(parts[j:], ",") +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/commaf.go b/src/server/vendor/github.com/dustin/go-humanize/commaf.go new file mode 100644 index 00000000..2bc83a03 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/commaf.go @@ -0,0 +1,41 @@ +//go:build go1.6 +// +build go1.6 + +package humanize + +import ( + "bytes" + "math/big" + "strings" +) + +// BigCommaf produces a string form of the given big.Float in base 10 +// with commas after every three orders of magnitude. +func BigCommaf(v *big.Float) string { + buf := &bytes.Buffer{} + if v.Sign() < 0 { + buf.Write([]byte{'-'}) + v.Abs(v) + } + + comma := []byte{','} + + parts := strings.Split(v.Text('f', -1), ".") + pos := 0 + if len(parts[0])%3 != 0 { + pos += len(parts[0]) % 3 + buf.WriteString(parts[0][:pos]) + buf.Write(comma) + } + for ; pos < len(parts[0]); pos += 3 { + buf.WriteString(parts[0][pos : pos+3]) + buf.Write(comma) + } + buf.Truncate(buf.Len() - 1) + + if len(parts) > 1 { + buf.Write([]byte{'.'}) + buf.WriteString(parts[1]) + } + return buf.String() +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/ftoa.go b/src/server/vendor/github.com/dustin/go-humanize/ftoa.go new file mode 100644 index 00000000..bce923f3 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/ftoa.go @@ -0,0 +1,49 @@ +package humanize + +import ( + "strconv" + "strings" +) + +func stripTrailingZeros(s string) string { + if !strings.ContainsRune(s, '.') { + return s + } + offset := len(s) - 1 + for offset > 0 { + if s[offset] == '.' { + offset-- + break + } + if s[offset] != '0' { + break + } + offset-- + } + return s[:offset+1] +} + +func stripTrailingDigits(s string, digits int) string { + if i := strings.Index(s, "."); i >= 0 { + if digits <= 0 { + return s[:i] + } + i++ + if i+digits >= len(s) { + return s + } + return s[:i+digits] + } + return s +} + +// Ftoa converts a float to a string with no trailing zeros. +func Ftoa(num float64) string { + return stripTrailingZeros(strconv.FormatFloat(num, 'f', 6, 64)) +} + +// FtoaWithDigits converts a float to a string but limits the resulting string +// to the given number of decimal places, and no trailing zeros. +func FtoaWithDigits(num float64, digits int) string { + return stripTrailingZeros(stripTrailingDigits(strconv.FormatFloat(num, 'f', 6, 64), digits)) +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/humanize.go b/src/server/vendor/github.com/dustin/go-humanize/humanize.go new file mode 100644 index 00000000..a2c2da31 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/humanize.go @@ -0,0 +1,8 @@ +/* +Package humanize converts boring ugly numbers to human-friendly strings and back. + +Durations can be turned into strings such as "3 days ago", numbers +representing sizes like 82854982 into useful strings like, "83 MB" or +"79 MiB" (whichever you prefer). +*/ +package humanize diff --git a/src/server/vendor/github.com/dustin/go-humanize/number.go b/src/server/vendor/github.com/dustin/go-humanize/number.go new file mode 100644 index 00000000..6470d0d4 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/number.go @@ -0,0 +1,192 @@ +package humanize + +/* +Slightly adapted from the source to fit go-humanize. + +Author: https://github.com/gorhill +Source: https://gist.github.com/gorhill/5285193 + +*/ + +import ( + "math" + "strconv" +) + +var ( + renderFloatPrecisionMultipliers = [...]float64{ + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, + } + + renderFloatPrecisionRounders = [...]float64{ + 0.5, + 0.05, + 0.005, + 0.0005, + 0.00005, + 0.000005, + 0.0000005, + 0.00000005, + 0.000000005, + 0.0000000005, + } +) + +// FormatFloat produces a formatted number as string based on the following user-specified criteria: +// * thousands separator +// * decimal separator +// * decimal precision +// +// Usage: s := RenderFloat(format, n) +// The format parameter tells how to render the number n. +// +// See examples: http://play.golang.org/p/LXc1Ddm1lJ +// +// Examples of format strings, given n = 12345.6789: +// "#,###.##" => "12,345.67" +// "#,###." => "12,345" +// "#,###" => "12345,678" +// "#\u202F###,##" => "12 345,68" +// "#.###,###### => 12.345,678900 +// "" (aka default format) => 12,345.67 +// +// The highest precision allowed is 9 digits after the decimal symbol. +// There is also a version for integer number, FormatInteger(), +// which is convenient for calls within template. +func FormatFloat(format string, n float64) string { + // Special cases: + // NaN = "NaN" + // +Inf = "+Infinity" + // -Inf = "-Infinity" + if math.IsNaN(n) { + return "NaN" + } + if n > math.MaxFloat64 { + return "Infinity" + } + if n < (0.0 - math.MaxFloat64) { + return "-Infinity" + } + + // default format + precision := 2 + decimalStr := "." + thousandStr := "," + positiveStr := "" + negativeStr := "-" + + if len(format) > 0 { + format := []rune(format) + + // If there is an explicit format directive, + // then default values are these: + precision = 9 + thousandStr = "" + + // collect indices of meaningful formatting directives + formatIndx := []int{} + for i, char := range format { + if char != '#' && char != '0' { + formatIndx = append(formatIndx, i) + } + } + + if len(formatIndx) > 0 { + // Directive at index 0: + // Must be a '+' + // Raise an error if not the case + // index: 0123456789 + // +0.000,000 + // +000,000.0 + // +0000.00 + // +0000 + if formatIndx[0] == 0 { + if format[formatIndx[0]] != '+' { + panic("RenderFloat(): invalid positive sign directive") + } + positiveStr = "+" + formatIndx = formatIndx[1:] + } + + // Two directives: + // First is thousands separator + // Raise an error if not followed by 3-digit + // 0123456789 + // 0.000,000 + // 000,000.00 + if len(formatIndx) == 2 { + if (formatIndx[1] - formatIndx[0]) != 4 { + panic("RenderFloat(): thousands separator directive must be followed by 3 digit-specifiers") + } + thousandStr = string(format[formatIndx[0]]) + formatIndx = formatIndx[1:] + } + + // One directive: + // Directive is decimal separator + // The number of digit-specifier following the separator indicates wanted precision + // 0123456789 + // 0.00 + // 000,0000 + if len(formatIndx) == 1 { + decimalStr = string(format[formatIndx[0]]) + precision = len(format) - formatIndx[0] - 1 + } + } + } + + // generate sign part + var signStr string + if n >= 0.000000001 { + signStr = positiveStr + } else if n <= -0.000000001 { + signStr = negativeStr + n = -n + } else { + signStr = "" + n = 0.0 + } + + // split number into integer and fractional parts + intf, fracf := math.Modf(n + renderFloatPrecisionRounders[precision]) + + // generate integer part string + intStr := strconv.FormatInt(int64(intf), 10) + + // add thousand separator if required + if len(thousandStr) > 0 { + for i := len(intStr); i > 3; { + i -= 3 + intStr = intStr[:i] + thousandStr + intStr[i:] + } + } + + // no fractional part, we can leave now + if precision == 0 { + return signStr + intStr + } + + // generate fractional part + fracStr := strconv.Itoa(int(fracf * renderFloatPrecisionMultipliers[precision])) + // may need padding + if len(fracStr) < precision { + fracStr = "000000000000000"[:precision-len(fracStr)] + fracStr + } + + return signStr + intStr + decimalStr + fracStr +} + +// FormatInteger produces a formatted number as string. +// See FormatFloat. +func FormatInteger(format string, n int) string { + return FormatFloat(format, float64(n)) +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/ordinals.go b/src/server/vendor/github.com/dustin/go-humanize/ordinals.go new file mode 100644 index 00000000..43d88a86 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/ordinals.go @@ -0,0 +1,25 @@ +package humanize + +import "strconv" + +// Ordinal gives you the input number in a rank/ordinal format. +// +// Ordinal(3) -> 3rd +func Ordinal(x int) string { + suffix := "th" + switch x % 10 { + case 1: + if x%100 != 11 { + suffix = "st" + } + case 2: + if x%100 != 12 { + suffix = "nd" + } + case 3: + if x%100 != 13 { + suffix = "rd" + } + } + return strconv.Itoa(x) + suffix +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/si.go b/src/server/vendor/github.com/dustin/go-humanize/si.go new file mode 100644 index 00000000..8b850198 --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/si.go @@ -0,0 +1,127 @@ +package humanize + +import ( + "errors" + "math" + "regexp" + "strconv" +) + +var siPrefixTable = map[float64]string{ + -30: "q", // quecto + -27: "r", // ronto + -24: "y", // yocto + -21: "z", // zepto + -18: "a", // atto + -15: "f", // femto + -12: "p", // pico + -9: "n", // nano + -6: "µ", // micro + -3: "m", // milli + 0: "", + 3: "k", // kilo + 6: "M", // mega + 9: "G", // giga + 12: "T", // tera + 15: "P", // peta + 18: "E", // exa + 21: "Z", // zetta + 24: "Y", // yotta + 27: "R", // ronna + 30: "Q", // quetta +} + +var revSIPrefixTable = revfmap(siPrefixTable) + +// revfmap reverses the map and precomputes the power multiplier +func revfmap(in map[float64]string) map[string]float64 { + rv := map[string]float64{} + for k, v := range in { + rv[v] = math.Pow(10, k) + } + return rv +} + +var riParseRegex *regexp.Regexp + +func init() { + ri := `^([\-0-9.]+)\s?([` + for _, v := range siPrefixTable { + ri += v + } + ri += `]?)(.*)` + + riParseRegex = regexp.MustCompile(ri) +} + +// ComputeSI finds the most appropriate SI prefix for the given number +// and returns the prefix along with the value adjusted to be within +// that prefix. +// +// See also: SI, ParseSI. +// +// e.g. ComputeSI(2.2345e-12) -> (2.2345, "p") +func ComputeSI(input float64) (float64, string) { + if input == 0 { + return 0, "" + } + mag := math.Abs(input) + exponent := math.Floor(logn(mag, 10)) + exponent = math.Floor(exponent/3) * 3 + + value := mag / math.Pow(10, exponent) + + // Handle special case where value is exactly 1000.0 + // Should return 1 M instead of 1000 k + if value == 1000.0 { + exponent += 3 + value = mag / math.Pow(10, exponent) + } + + value = math.Copysign(value, input) + + prefix := siPrefixTable[exponent] + return value, prefix +} + +// SI returns a string with default formatting. +// +// SI uses Ftoa to format float value, removing trailing zeros. +// +// See also: ComputeSI, ParseSI. +// +// e.g. SI(1000000, "B") -> 1 MB +// e.g. SI(2.2345e-12, "F") -> 2.2345 pF +func SI(input float64, unit string) string { + value, prefix := ComputeSI(input) + return Ftoa(value) + " " + prefix + unit +} + +// SIWithDigits works like SI but limits the resulting string to the +// given number of decimal places. +// +// e.g. SIWithDigits(1000000, 0, "B") -> 1 MB +// e.g. SIWithDigits(2.2345e-12, 2, "F") -> 2.23 pF +func SIWithDigits(input float64, decimals int, unit string) string { + value, prefix := ComputeSI(input) + return FtoaWithDigits(value, decimals) + " " + prefix + unit +} + +var errInvalid = errors.New("invalid input") + +// ParseSI parses an SI string back into the number and unit. +// +// See also: SI, ComputeSI. +// +// e.g. ParseSI("2.2345 pF") -> (2.2345e-12, "F", nil) +func ParseSI(input string) (float64, string, error) { + found := riParseRegex.FindStringSubmatch(input) + if len(found) != 4 { + return 0, "", errInvalid + } + mag := revSIPrefixTable[found[2]] + unit := found[3] + + base, err := strconv.ParseFloat(found[1], 64) + return base * mag, unit, err +} diff --git a/src/server/vendor/github.com/dustin/go-humanize/times.go b/src/server/vendor/github.com/dustin/go-humanize/times.go new file mode 100644 index 00000000..dd3fbf5e --- /dev/null +++ b/src/server/vendor/github.com/dustin/go-humanize/times.go @@ -0,0 +1,117 @@ +package humanize + +import ( + "fmt" + "math" + "sort" + "time" +) + +// Seconds-based time units +const ( + Day = 24 * time.Hour + Week = 7 * Day + Month = 30 * Day + Year = 12 * Month + LongTime = 37 * Year +) + +// Time formats a time into a relative string. +// +// Time(someT) -> "3 weeks ago" +func Time(then time.Time) string { + return RelTime(then, time.Now(), "ago", "from now") +} + +// A RelTimeMagnitude struct contains a relative time point at which +// the relative format of time will switch to a new format string. A +// slice of these in ascending order by their "D" field is passed to +// CustomRelTime to format durations. +// +// The Format field is a string that may contain a "%s" which will be +// replaced with the appropriate signed label (e.g. "ago" or "from +// now") and a "%d" that will be replaced by the quantity. +// +// The DivBy field is the amount of time the time difference must be +// divided by in order to display correctly. +// +// e.g. if D is 2*time.Minute and you want to display "%d minutes %s" +// DivBy should be time.Minute so whatever the duration is will be +// expressed in minutes. +type RelTimeMagnitude struct { + D time.Duration + Format string + DivBy time.Duration +} + +var defaultMagnitudes = []RelTimeMagnitude{ + {time.Second, "now", time.Second}, + {2 * time.Second, "1 second %s", 1}, + {time.Minute, "%d seconds %s", time.Second}, + {2 * time.Minute, "1 minute %s", 1}, + {time.Hour, "%d minutes %s", time.Minute}, + {2 * time.Hour, "1 hour %s", 1}, + {Day, "%d hours %s", time.Hour}, + {2 * Day, "1 day %s", 1}, + {Week, "%d days %s", Day}, + {2 * Week, "1 week %s", 1}, + {Month, "%d weeks %s", Week}, + {2 * Month, "1 month %s", 1}, + {Year, "%d months %s", Month}, + {18 * Month, "1 year %s", 1}, + {2 * Year, "2 years %s", 1}, + {LongTime, "%d years %s", Year}, + {math.MaxInt64, "a long while %s", 1}, +} + +// RelTime formats a time into a relative string. +// +// It takes two times and two labels. In addition to the generic time +// delta string (e.g. 5 minutes), the labels are used applied so that +// the label corresponding to the smaller time is applied. +// +// RelTime(timeInPast, timeInFuture, "earlier", "later") -> "3 weeks earlier" +func RelTime(a, b time.Time, albl, blbl string) string { + return CustomRelTime(a, b, albl, blbl, defaultMagnitudes) +} + +// CustomRelTime formats a time into a relative string. +// +// It takes two times two labels and a table of relative time formats. +// In addition to the generic time delta string (e.g. 5 minutes), the +// labels are used applied so that the label corresponding to the +// smaller time is applied. +func CustomRelTime(a, b time.Time, albl, blbl string, magnitudes []RelTimeMagnitude) string { + lbl := albl + diff := b.Sub(a) + + if a.After(b) { + lbl = blbl + diff = a.Sub(b) + } + + n := sort.Search(len(magnitudes), func(i int) bool { + return magnitudes[i].D > diff + }) + + if n >= len(magnitudes) { + n = len(magnitudes) - 1 + } + mag := magnitudes[n] + args := []interface{}{} + escaped := false + for _, ch := range mag.Format { + if escaped { + switch ch { + case 's': + args = append(args, lbl) + case 'd': + args = append(args, diff/mag.DivBy) + } + escaped = false + } else { + escaped = ch == '%' + } + } + return fmt.Sprintf(mag.Format, args...) +} diff --git a/src/server/vendor/github.com/golang/freetype/AUTHORS b/src/server/vendor/github.com/golang/freetype/AUTHORS new file mode 100644 index 00000000..5773ac7e --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/AUTHORS @@ -0,0 +1,20 @@ +# This is the official list of Freetype-Go authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. +# +# Freetype-Go is derived from Freetype, which is written in C. The latter +# is copyright 1996-2010 David Turner, Robert Wilhelm, and Werner Lemberg. + +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# Please keep the list sorted. + +Google Inc. +Jeff R. Allen +Maksim Kochkin +Michael Fogleman +Rémy Oudompheng +Roger Peppe +Steven Edwards diff --git a/src/server/vendor/github.com/golang/freetype/CONTRIBUTORS b/src/server/vendor/github.com/golang/freetype/CONTRIBUTORS new file mode 100644 index 00000000..7a1b0a27 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/CONTRIBUTORS @@ -0,0 +1,38 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the Freetype-Go repository. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# The submission process automatically checks to make sure +# that people submitting code are listed in this file (by email address). +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +# http://code.google.com/legal/individual-cla-v1.0.html +# http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# When adding J Random Contributor's name to this file, +# either J's name or J's organization's name should be +# added to the AUTHORS file, depending on whether the +# individual or corporate CLA was used. + +# Names should be added to this file like so: +# Name + +# Please keep the list sorted. + +Andrew Gerrand +Jeff R. Allen +Maksim Kochkin +Michael Fogleman +Nigel Tao +Rémy Oudompheng +Rob Pike +Roger Peppe +Russ Cox +Steven Edwards diff --git a/src/server/vendor/github.com/golang/freetype/LICENSE b/src/server/vendor/github.com/golang/freetype/LICENSE new file mode 100644 index 00000000..e854ba5d --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/LICENSE @@ -0,0 +1,12 @@ +Use of the Freetype-Go software is subject to your choice of exactly one of +the following two licenses: + * The FreeType License, which is similar to the original BSD license with + an advertising clause, or + * The GNU General Public License (GPL), version 2 or later. + +The text of these licenses are available in the licenses/ftl.txt and the +licenses/gpl.txt files respectively. They are also available at +http://freetype.sourceforge.net/license.html + +The Luxi fonts in the testdata directory are licensed separately. See the +testdata/COPYING file for details. diff --git a/src/server/vendor/github.com/golang/freetype/raster/geom.go b/src/server/vendor/github.com/golang/freetype/raster/geom.go new file mode 100644 index 00000000..f3696ea9 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/raster/geom.go @@ -0,0 +1,245 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package raster + +import ( + "fmt" + "math" + + "golang.org/x/image/math/fixed" +) + +// maxAbs returns the maximum of abs(a) and abs(b). +func maxAbs(a, b fixed.Int26_6) fixed.Int26_6 { + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + if a < b { + return b + } + return a +} + +// pNeg returns the vector -p, or equivalently p rotated by 180 degrees. +func pNeg(p fixed.Point26_6) fixed.Point26_6 { + return fixed.Point26_6{-p.X, -p.Y} +} + +// pDot returns the dot product p·q. +func pDot(p fixed.Point26_6, q fixed.Point26_6) fixed.Int52_12 { + px, py := int64(p.X), int64(p.Y) + qx, qy := int64(q.X), int64(q.Y) + return fixed.Int52_12(px*qx + py*qy) +} + +// pLen returns the length of the vector p. +func pLen(p fixed.Point26_6) fixed.Int26_6 { + // TODO(nigeltao): use fixed point math. + x := float64(p.X) + y := float64(p.Y) + return fixed.Int26_6(math.Sqrt(x*x + y*y)) +} + +// pNorm returns the vector p normalized to the given length, or zero if p is +// degenerate. +func pNorm(p fixed.Point26_6, length fixed.Int26_6) fixed.Point26_6 { + d := pLen(p) + if d == 0 { + return fixed.Point26_6{} + } + s, t := int64(length), int64(d) + x := int64(p.X) * s / t + y := int64(p.Y) * s / t + return fixed.Point26_6{fixed.Int26_6(x), fixed.Int26_6(y)} +} + +// pRot45CW returns the vector p rotated clockwise by 45 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot45CW is {1/√2, 1/√2}. +func pRot45CW(p fixed.Point26_6) fixed.Point26_6 { + // 181/256 is approximately 1/√2, or sin(π/4). + px, py := int64(p.X), int64(p.Y) + qx := (+px - py) * 181 / 256 + qy := (+px + py) * 181 / 256 + return fixed.Point26_6{fixed.Int26_6(qx), fixed.Int26_6(qy)} +} + +// pRot90CW returns the vector p rotated clockwise by 90 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot90CW is {0, 1}. +func pRot90CW(p fixed.Point26_6) fixed.Point26_6 { + return fixed.Point26_6{-p.Y, p.X} +} + +// pRot135CW returns the vector p rotated clockwise by 135 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot135CW is {-1/√2, 1/√2}. +func pRot135CW(p fixed.Point26_6) fixed.Point26_6 { + // 181/256 is approximately 1/√2, or sin(π/4). + px, py := int64(p.X), int64(p.Y) + qx := (-px - py) * 181 / 256 + qy := (+px - py) * 181 / 256 + return fixed.Point26_6{fixed.Int26_6(qx), fixed.Int26_6(qy)} +} + +// pRot45CCW returns the vector p rotated counter-clockwise by 45 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot45CCW is {1/√2, -1/√2}. +func pRot45CCW(p fixed.Point26_6) fixed.Point26_6 { + // 181/256 is approximately 1/√2, or sin(π/4). + px, py := int64(p.X), int64(p.Y) + qx := (+px + py) * 181 / 256 + qy := (-px + py) * 181 / 256 + return fixed.Point26_6{fixed.Int26_6(qx), fixed.Int26_6(qy)} +} + +// pRot90CCW returns the vector p rotated counter-clockwise by 90 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot90CCW is {0, -1}. +func pRot90CCW(p fixed.Point26_6) fixed.Point26_6 { + return fixed.Point26_6{p.Y, -p.X} +} + +// pRot135CCW returns the vector p rotated counter-clockwise by 135 degrees. +// +// Note that the Y-axis grows downwards, so {1, 0}.Rot135CCW is {-1/√2, -1/√2}. +func pRot135CCW(p fixed.Point26_6) fixed.Point26_6 { + // 181/256 is approximately 1/√2, or sin(π/4). + px, py := int64(p.X), int64(p.Y) + qx := (-px + py) * 181 / 256 + qy := (-px - py) * 181 / 256 + return fixed.Point26_6{fixed.Int26_6(qx), fixed.Int26_6(qy)} +} + +// An Adder accumulates points on a curve. +type Adder interface { + // Start starts a new curve at the given point. + Start(a fixed.Point26_6) + // Add1 adds a linear segment to the current curve. + Add1(b fixed.Point26_6) + // Add2 adds a quadratic segment to the current curve. + Add2(b, c fixed.Point26_6) + // Add3 adds a cubic segment to the current curve. + Add3(b, c, d fixed.Point26_6) +} + +// A Path is a sequence of curves, and a curve is a start point followed by a +// sequence of linear, quadratic or cubic segments. +type Path []fixed.Int26_6 + +// String returns a human-readable representation of a Path. +func (p Path) String() string { + s := "" + for i := 0; i < len(p); { + if i != 0 { + s += " " + } + switch p[i] { + case 0: + s += "S0" + fmt.Sprint([]fixed.Int26_6(p[i+1:i+3])) + i += 4 + case 1: + s += "A1" + fmt.Sprint([]fixed.Int26_6(p[i+1:i+3])) + i += 4 + case 2: + s += "A2" + fmt.Sprint([]fixed.Int26_6(p[i+1:i+5])) + i += 6 + case 3: + s += "A3" + fmt.Sprint([]fixed.Int26_6(p[i+1:i+7])) + i += 8 + default: + panic("freetype/raster: bad path") + } + } + return s +} + +// Clear cancels any previous calls to p.Start or p.AddXxx. +func (p *Path) Clear() { + *p = (*p)[:0] +} + +// Start starts a new curve at the given point. +func (p *Path) Start(a fixed.Point26_6) { + *p = append(*p, 0, a.X, a.Y, 0) +} + +// Add1 adds a linear segment to the current curve. +func (p *Path) Add1(b fixed.Point26_6) { + *p = append(*p, 1, b.X, b.Y, 1) +} + +// Add2 adds a quadratic segment to the current curve. +func (p *Path) Add2(b, c fixed.Point26_6) { + *p = append(*p, 2, b.X, b.Y, c.X, c.Y, 2) +} + +// Add3 adds a cubic segment to the current curve. +func (p *Path) Add3(b, c, d fixed.Point26_6) { + *p = append(*p, 3, b.X, b.Y, c.X, c.Y, d.X, d.Y, 3) +} + +// AddPath adds the Path q to p. +func (p *Path) AddPath(q Path) { + *p = append(*p, q...) +} + +// AddStroke adds a stroked Path. +func (p *Path) AddStroke(q Path, width fixed.Int26_6, cr Capper, jr Joiner) { + Stroke(p, q, width, cr, jr) +} + +// firstPoint returns the first point in a non-empty Path. +func (p Path) firstPoint() fixed.Point26_6 { + return fixed.Point26_6{p[1], p[2]} +} + +// lastPoint returns the last point in a non-empty Path. +func (p Path) lastPoint() fixed.Point26_6 { + return fixed.Point26_6{p[len(p)-3], p[len(p)-2]} +} + +// addPathReversed adds q reversed to p. +// For example, if q consists of a linear segment from A to B followed by a +// quadratic segment from B to C to D, then the values of q looks like: +// index: 01234567890123 +// value: 0AA01BB12CCDD2 +// So, when adding q backwards to p, we want to Add2(C, B) followed by Add1(A). +func addPathReversed(p Adder, q Path) { + if len(q) == 0 { + return + } + i := len(q) - 1 + for { + switch q[i] { + case 0: + return + case 1: + i -= 4 + p.Add1( + fixed.Point26_6{q[i-2], q[i-1]}, + ) + case 2: + i -= 6 + p.Add2( + fixed.Point26_6{q[i+2], q[i+3]}, + fixed.Point26_6{q[i-2], q[i-1]}, + ) + case 3: + i -= 8 + p.Add3( + fixed.Point26_6{q[i+4], q[i+5]}, + fixed.Point26_6{q[i+2], q[i+3]}, + fixed.Point26_6{q[i-2], q[i-1]}, + ) + default: + panic("freetype/raster: bad path") + } + } +} diff --git a/src/server/vendor/github.com/golang/freetype/raster/paint.go b/src/server/vendor/github.com/golang/freetype/raster/paint.go new file mode 100644 index 00000000..652256cc --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/raster/paint.go @@ -0,0 +1,287 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package raster + +import ( + "image" + "image/color" + "image/draw" + "math" +) + +// A Span is a horizontal segment of pixels with constant alpha. X0 is an +// inclusive bound and X1 is exclusive, the same as for slices. A fully opaque +// Span has Alpha == 0xffff. +type Span struct { + Y, X0, X1 int + Alpha uint32 +} + +// A Painter knows how to paint a batch of Spans. Rasterization may involve +// Painting multiple batches, and done will be true for the final batch. The +// Spans' Y values are monotonically increasing during a rasterization. Paint +// may use all of ss as scratch space during the call. +type Painter interface { + Paint(ss []Span, done bool) +} + +// The PainterFunc type adapts an ordinary function to the Painter interface. +type PainterFunc func(ss []Span, done bool) + +// Paint just delegates the call to f. +func (f PainterFunc) Paint(ss []Span, done bool) { f(ss, done) } + +// An AlphaOverPainter is a Painter that paints Spans onto a *image.Alpha using +// the Over Porter-Duff composition operator. +type AlphaOverPainter struct { + Image *image.Alpha +} + +// Paint satisfies the Painter interface. +func (r AlphaOverPainter) Paint(ss []Span, done bool) { + b := r.Image.Bounds() + for _, s := range ss { + if s.Y < b.Min.Y { + continue + } + if s.Y >= b.Max.Y { + return + } + if s.X0 < b.Min.X { + s.X0 = b.Min.X + } + if s.X1 > b.Max.X { + s.X1 = b.Max.X + } + if s.X0 >= s.X1 { + continue + } + base := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride - r.Image.Rect.Min.X + p := r.Image.Pix[base+s.X0 : base+s.X1] + a := int(s.Alpha >> 8) + for i, c := range p { + v := int(c) + p[i] = uint8((v*255 + (255-v)*a) / 255) + } + } +} + +// NewAlphaOverPainter creates a new AlphaOverPainter for the given image. +func NewAlphaOverPainter(m *image.Alpha) AlphaOverPainter { + return AlphaOverPainter{m} +} + +// An AlphaSrcPainter is a Painter that paints Spans onto a *image.Alpha using +// the Src Porter-Duff composition operator. +type AlphaSrcPainter struct { + Image *image.Alpha +} + +// Paint satisfies the Painter interface. +func (r AlphaSrcPainter) Paint(ss []Span, done bool) { + b := r.Image.Bounds() + for _, s := range ss { + if s.Y < b.Min.Y { + continue + } + if s.Y >= b.Max.Y { + return + } + if s.X0 < b.Min.X { + s.X0 = b.Min.X + } + if s.X1 > b.Max.X { + s.X1 = b.Max.X + } + if s.X0 >= s.X1 { + continue + } + base := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride - r.Image.Rect.Min.X + p := r.Image.Pix[base+s.X0 : base+s.X1] + color := uint8(s.Alpha >> 8) + for i := range p { + p[i] = color + } + } +} + +// NewAlphaSrcPainter creates a new AlphaSrcPainter for the given image. +func NewAlphaSrcPainter(m *image.Alpha) AlphaSrcPainter { + return AlphaSrcPainter{m} +} + +// An RGBAPainter is a Painter that paints Spans onto a *image.RGBA. +type RGBAPainter struct { + // Image is the image to compose onto. + Image *image.RGBA + // Op is the Porter-Duff composition operator. + Op draw.Op + // cr, cg, cb and ca are the 16-bit color to paint the spans. + cr, cg, cb, ca uint32 +} + +// Paint satisfies the Painter interface. +func (r *RGBAPainter) Paint(ss []Span, done bool) { + b := r.Image.Bounds() + for _, s := range ss { + if s.Y < b.Min.Y { + continue + } + if s.Y >= b.Max.Y { + return + } + if s.X0 < b.Min.X { + s.X0 = b.Min.X + } + if s.X1 > b.Max.X { + s.X1 = b.Max.X + } + if s.X0 >= s.X1 { + continue + } + // This code mimics drawGlyphOver in $GOROOT/src/image/draw/draw.go. + ma := s.Alpha + const m = 1<<16 - 1 + i0 := (s.Y-r.Image.Rect.Min.Y)*r.Image.Stride + (s.X0-r.Image.Rect.Min.X)*4 + i1 := i0 + (s.X1-s.X0)*4 + if r.Op == draw.Over { + for i := i0; i < i1; i += 4 { + dr := uint32(r.Image.Pix[i+0]) + dg := uint32(r.Image.Pix[i+1]) + db := uint32(r.Image.Pix[i+2]) + da := uint32(r.Image.Pix[i+3]) + a := (m - (r.ca * ma / m)) * 0x101 + r.Image.Pix[i+0] = uint8((dr*a + r.cr*ma) / m >> 8) + r.Image.Pix[i+1] = uint8((dg*a + r.cg*ma) / m >> 8) + r.Image.Pix[i+2] = uint8((db*a + r.cb*ma) / m >> 8) + r.Image.Pix[i+3] = uint8((da*a + r.ca*ma) / m >> 8) + } + } else { + for i := i0; i < i1; i += 4 { + r.Image.Pix[i+0] = uint8(r.cr * ma / m >> 8) + r.Image.Pix[i+1] = uint8(r.cg * ma / m >> 8) + r.Image.Pix[i+2] = uint8(r.cb * ma / m >> 8) + r.Image.Pix[i+3] = uint8(r.ca * ma / m >> 8) + } + } + } +} + +// SetColor sets the color to paint the spans. +func (r *RGBAPainter) SetColor(c color.Color) { + r.cr, r.cg, r.cb, r.ca = c.RGBA() +} + +// NewRGBAPainter creates a new RGBAPainter for the given image. +func NewRGBAPainter(m *image.RGBA) *RGBAPainter { + return &RGBAPainter{Image: m} +} + +// A MonochromePainter wraps another Painter, quantizing each Span's alpha to +// be either fully opaque or fully transparent. +type MonochromePainter struct { + Painter Painter + y, x0, x1 int +} + +// Paint delegates to the wrapped Painter after quantizing each Span's alpha +// value and merging adjacent fully opaque Spans. +func (m *MonochromePainter) Paint(ss []Span, done bool) { + // We compact the ss slice, discarding any Spans whose alpha quantizes to zero. + j := 0 + for _, s := range ss { + if s.Alpha >= 0x8000 { + if m.y == s.Y && m.x1 == s.X0 { + m.x1 = s.X1 + } else { + ss[j] = Span{m.y, m.x0, m.x1, 1<<16 - 1} + j++ + m.y, m.x0, m.x1 = s.Y, s.X0, s.X1 + } + } + } + if done { + // Flush the accumulated Span. + finalSpan := Span{m.y, m.x0, m.x1, 1<<16 - 1} + if j < len(ss) { + ss[j] = finalSpan + j++ + m.Painter.Paint(ss[:j], true) + } else if j == len(ss) { + m.Painter.Paint(ss, false) + if cap(ss) > 0 { + ss = ss[:1] + } else { + ss = make([]Span, 1) + } + ss[0] = finalSpan + m.Painter.Paint(ss, true) + } else { + panic("unreachable") + } + // Reset the accumulator, so that this Painter can be re-used. + m.y, m.x0, m.x1 = 0, 0, 0 + } else { + m.Painter.Paint(ss[:j], false) + } +} + +// NewMonochromePainter creates a new MonochromePainter that wraps the given +// Painter. +func NewMonochromePainter(p Painter) *MonochromePainter { + return &MonochromePainter{Painter: p} +} + +// A GammaCorrectionPainter wraps another Painter, performing gamma-correction +// on each Span's alpha value. +type GammaCorrectionPainter struct { + // Painter is the wrapped Painter. + Painter Painter + // a is the precomputed alpha values for linear interpolation, with fully + // opaque == 0xffff. + a [256]uint16 + // gammaIsOne is whether gamma correction is a no-op. + gammaIsOne bool +} + +// Paint delegates to the wrapped Painter after performing gamma-correction on +// each Span. +func (g *GammaCorrectionPainter) Paint(ss []Span, done bool) { + if !g.gammaIsOne { + const n = 0x101 + for i, s := range ss { + if s.Alpha == 0 || s.Alpha == 0xffff { + continue + } + p, q := s.Alpha/n, s.Alpha%n + // The resultant alpha is a linear interpolation of g.a[p] and g.a[p+1]. + a := uint32(g.a[p])*(n-q) + uint32(g.a[p+1])*q + ss[i].Alpha = (a + n/2) / n + } + } + g.Painter.Paint(ss, done) +} + +// SetGamma sets the gamma value. +func (g *GammaCorrectionPainter) SetGamma(gamma float64) { + g.gammaIsOne = gamma == 1 + if g.gammaIsOne { + return + } + for i := 0; i < 256; i++ { + a := float64(i) / 0xff + a = math.Pow(a, gamma) + g.a[i] = uint16(0xffff * a) + } +} + +// NewGammaCorrectionPainter creates a new GammaCorrectionPainter that wraps +// the given Painter. +func NewGammaCorrectionPainter(p Painter, gamma float64) *GammaCorrectionPainter { + g := &GammaCorrectionPainter{Painter: p} + g.SetGamma(gamma) + return g +} diff --git a/src/server/vendor/github.com/golang/freetype/raster/raster.go b/src/server/vendor/github.com/golang/freetype/raster/raster.go new file mode 100644 index 00000000..7e6cd4e2 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/raster/raster.go @@ -0,0 +1,601 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +// Package raster provides an anti-aliasing 2-D rasterizer. +// +// It is part of the larger Freetype suite of font-related packages, but the +// raster package is not specific to font rasterization, and can be used +// standalone without any other Freetype package. +// +// Rasterization is done by the same area/coverage accumulation algorithm as +// the Freetype "smooth" module, and the Anti-Grain Geometry library. A +// description of the area/coverage algorithm is at +// http://projects.tuxee.net/cl-vectors/section-the-cl-aa-algorithm +package raster // import "github.com/golang/freetype/raster" + +import ( + "strconv" + + "golang.org/x/image/math/fixed" +) + +// A cell is part of a linked list (for a given yi co-ordinate) of accumulated +// area/coverage for the pixel at (xi, yi). +type cell struct { + xi int + area, cover int + next int +} + +type Rasterizer struct { + // If false, the default behavior is to use the even-odd winding fill + // rule during Rasterize. + UseNonZeroWinding bool + // An offset (in pixels) to the painted spans. + Dx, Dy int + + // The width of the Rasterizer. The height is implicit in len(cellIndex). + width int + // splitScaleN is the scaling factor used to determine how many times + // to decompose a quadratic or cubic segment into a linear approximation. + splitScale2, splitScale3 int + + // The current pen position. + a fixed.Point26_6 + // The current cell and its area/coverage being accumulated. + xi, yi int + area, cover int + + // Saved cells. + cell []cell + // Linked list of cells, one per row. + cellIndex []int + // Buffers. + cellBuf [256]cell + cellIndexBuf [64]int + spanBuf [64]Span +} + +// findCell returns the index in r.cell for the cell corresponding to +// (r.xi, r.yi). The cell is created if necessary. +func (r *Rasterizer) findCell() int { + if r.yi < 0 || r.yi >= len(r.cellIndex) { + return -1 + } + xi := r.xi + if xi < 0 { + xi = -1 + } else if xi > r.width { + xi = r.width + } + i, prev := r.cellIndex[r.yi], -1 + for i != -1 && r.cell[i].xi <= xi { + if r.cell[i].xi == xi { + return i + } + i, prev = r.cell[i].next, i + } + c := len(r.cell) + if c == cap(r.cell) { + buf := make([]cell, c, 4*c) + copy(buf, r.cell) + r.cell = buf[0 : c+1] + } else { + r.cell = r.cell[0 : c+1] + } + r.cell[c] = cell{xi, 0, 0, i} + if prev == -1 { + r.cellIndex[r.yi] = c + } else { + r.cell[prev].next = c + } + return c +} + +// saveCell saves any accumulated r.area/r.cover for (r.xi, r.yi). +func (r *Rasterizer) saveCell() { + if r.area != 0 || r.cover != 0 { + i := r.findCell() + if i != -1 { + r.cell[i].area += r.area + r.cell[i].cover += r.cover + } + r.area = 0 + r.cover = 0 + } +} + +// setCell sets the (xi, yi) cell that r is accumulating area/coverage for. +func (r *Rasterizer) setCell(xi, yi int) { + if r.xi != xi || r.yi != yi { + r.saveCell() + r.xi, r.yi = xi, yi + } +} + +// scan accumulates area/coverage for the yi'th scanline, going from +// x0 to x1 in the horizontal direction (in 26.6 fixed point co-ordinates) +// and from y0f to y1f fractional vertical units within that scanline. +func (r *Rasterizer) scan(yi int, x0, y0f, x1, y1f fixed.Int26_6) { + // Break the 26.6 fixed point X co-ordinates into integral and fractional parts. + x0i := int(x0) / 64 + x0f := x0 - fixed.Int26_6(64*x0i) + x1i := int(x1) / 64 + x1f := x1 - fixed.Int26_6(64*x1i) + + // A perfectly horizontal scan. + if y0f == y1f { + r.setCell(x1i, yi) + return + } + dx, dy := x1-x0, y1f-y0f + // A single cell scan. + if x0i == x1i { + r.area += int((x0f + x1f) * dy) + r.cover += int(dy) + return + } + // There are at least two cells. Apart from the first and last cells, + // all intermediate cells go through the full width of the cell, + // or 64 units in 26.6 fixed point format. + var ( + p, q, edge0, edge1 fixed.Int26_6 + xiDelta int + ) + if dx > 0 { + p, q = (64-x0f)*dy, dx + edge0, edge1, xiDelta = 0, 64, 1 + } else { + p, q = x0f*dy, -dx + edge0, edge1, xiDelta = 64, 0, -1 + } + yDelta, yRem := p/q, p%q + if yRem < 0 { + yDelta -= 1 + yRem += q + } + // Do the first cell. + xi, y := x0i, y0f + r.area += int((x0f + edge1) * yDelta) + r.cover += int(yDelta) + xi, y = xi+xiDelta, y+yDelta + r.setCell(xi, yi) + if xi != x1i { + // Do all the intermediate cells. + p = 64 * (y1f - y + yDelta) + fullDelta, fullRem := p/q, p%q + if fullRem < 0 { + fullDelta -= 1 + fullRem += q + } + yRem -= q + for xi != x1i { + yDelta = fullDelta + yRem += fullRem + if yRem >= 0 { + yDelta += 1 + yRem -= q + } + r.area += int(64 * yDelta) + r.cover += int(yDelta) + xi, y = xi+xiDelta, y+yDelta + r.setCell(xi, yi) + } + } + // Do the last cell. + yDelta = y1f - y + r.area += int((edge0 + x1f) * yDelta) + r.cover += int(yDelta) +} + +// Start starts a new curve at the given point. +func (r *Rasterizer) Start(a fixed.Point26_6) { + r.setCell(int(a.X/64), int(a.Y/64)) + r.a = a +} + +// Add1 adds a linear segment to the current curve. +func (r *Rasterizer) Add1(b fixed.Point26_6) { + x0, y0 := r.a.X, r.a.Y + x1, y1 := b.X, b.Y + dx, dy := x1-x0, y1-y0 + // Break the 26.6 fixed point Y co-ordinates into integral and fractional + // parts. + y0i := int(y0) / 64 + y0f := y0 - fixed.Int26_6(64*y0i) + y1i := int(y1) / 64 + y1f := y1 - fixed.Int26_6(64*y1i) + + if y0i == y1i { + // There is only one scanline. + r.scan(y0i, x0, y0f, x1, y1f) + + } else if dx == 0 { + // This is a vertical line segment. We avoid calling r.scan and instead + // manipulate r.area and r.cover directly. + var ( + edge0, edge1 fixed.Int26_6 + yiDelta int + ) + if dy > 0 { + edge0, edge1, yiDelta = 0, 64, 1 + } else { + edge0, edge1, yiDelta = 64, 0, -1 + } + x0i, yi := int(x0)/64, y0i + x0fTimes2 := (int(x0) - (64 * x0i)) * 2 + // Do the first pixel. + dcover := int(edge1 - y0f) + darea := int(x0fTimes2 * dcover) + r.area += darea + r.cover += dcover + yi += yiDelta + r.setCell(x0i, yi) + // Do all the intermediate pixels. + dcover = int(edge1 - edge0) + darea = int(x0fTimes2 * dcover) + for yi != y1i { + r.area += darea + r.cover += dcover + yi += yiDelta + r.setCell(x0i, yi) + } + // Do the last pixel. + dcover = int(y1f - edge0) + darea = int(x0fTimes2 * dcover) + r.area += darea + r.cover += dcover + + } else { + // There are at least two scanlines. Apart from the first and last + // scanlines, all intermediate scanlines go through the full height of + // the row, or 64 units in 26.6 fixed point format. + var ( + p, q, edge0, edge1 fixed.Int26_6 + yiDelta int + ) + if dy > 0 { + p, q = (64-y0f)*dx, dy + edge0, edge1, yiDelta = 0, 64, 1 + } else { + p, q = y0f*dx, -dy + edge0, edge1, yiDelta = 64, 0, -1 + } + xDelta, xRem := p/q, p%q + if xRem < 0 { + xDelta -= 1 + xRem += q + } + // Do the first scanline. + x, yi := x0, y0i + r.scan(yi, x, y0f, x+xDelta, edge1) + x, yi = x+xDelta, yi+yiDelta + r.setCell(int(x)/64, yi) + if yi != y1i { + // Do all the intermediate scanlines. + p = 64 * dx + fullDelta, fullRem := p/q, p%q + if fullRem < 0 { + fullDelta -= 1 + fullRem += q + } + xRem -= q + for yi != y1i { + xDelta = fullDelta + xRem += fullRem + if xRem >= 0 { + xDelta += 1 + xRem -= q + } + r.scan(yi, x, edge0, x+xDelta, edge1) + x, yi = x+xDelta, yi+yiDelta + r.setCell(int(x)/64, yi) + } + } + // Do the last scanline. + r.scan(yi, x, edge0, x1, y1f) + } + // The next lineTo starts from b. + r.a = b +} + +// Add2 adds a quadratic segment to the current curve. +func (r *Rasterizer) Add2(b, c fixed.Point26_6) { + // Calculate nSplit (the number of recursive decompositions) based on how + // 'curvy' it is. Specifically, how much the middle point b deviates from + // (a+c)/2. + dev := maxAbs(r.a.X-2*b.X+c.X, r.a.Y-2*b.Y+c.Y) / fixed.Int26_6(r.splitScale2) + nsplit := 0 + for dev > 0 { + dev /= 4 + nsplit++ + } + // dev is 32-bit, and nsplit++ every time we shift off 2 bits, so maxNsplit + // is 16. + const maxNsplit = 16 + if nsplit > maxNsplit { + panic("freetype/raster: Add2 nsplit too large: " + strconv.Itoa(nsplit)) + } + // Recursively decompose the curve nSplit levels deep. + var ( + pStack [2*maxNsplit + 3]fixed.Point26_6 + sStack [maxNsplit + 1]int + i int + ) + sStack[0] = nsplit + pStack[0] = c + pStack[1] = b + pStack[2] = r.a + for i >= 0 { + s := sStack[i] + p := pStack[2*i:] + if s > 0 { + // Split the quadratic curve p[:3] into an equivalent set of two + // shorter curves: p[:3] and p[2:5]. The new p[4] is the old p[2], + // and p[0] is unchanged. + mx := p[1].X + p[4].X = p[2].X + p[3].X = (p[4].X + mx) / 2 + p[1].X = (p[0].X + mx) / 2 + p[2].X = (p[1].X + p[3].X) / 2 + my := p[1].Y + p[4].Y = p[2].Y + p[3].Y = (p[4].Y + my) / 2 + p[1].Y = (p[0].Y + my) / 2 + p[2].Y = (p[1].Y + p[3].Y) / 2 + // The two shorter curves have one less split to do. + sStack[i] = s - 1 + sStack[i+1] = s - 1 + i++ + } else { + // Replace the level-0 quadratic with a two-linear-piece + // approximation. + midx := (p[0].X + 2*p[1].X + p[2].X) / 4 + midy := (p[0].Y + 2*p[1].Y + p[2].Y) / 4 + r.Add1(fixed.Point26_6{midx, midy}) + r.Add1(p[0]) + i-- + } + } +} + +// Add3 adds a cubic segment to the current curve. +func (r *Rasterizer) Add3(b, c, d fixed.Point26_6) { + // Calculate nSplit (the number of recursive decompositions) based on how + // 'curvy' it is. + dev2 := maxAbs(r.a.X-3*(b.X+c.X)+d.X, r.a.Y-3*(b.Y+c.Y)+d.Y) / fixed.Int26_6(r.splitScale2) + dev3 := maxAbs(r.a.X-2*b.X+d.X, r.a.Y-2*b.Y+d.Y) / fixed.Int26_6(r.splitScale3) + nsplit := 0 + for dev2 > 0 || dev3 > 0 { + dev2 /= 8 + dev3 /= 4 + nsplit++ + } + // devN is 32-bit, and nsplit++ every time we shift off 2 bits, so + // maxNsplit is 16. + const maxNsplit = 16 + if nsplit > maxNsplit { + panic("freetype/raster: Add3 nsplit too large: " + strconv.Itoa(nsplit)) + } + // Recursively decompose the curve nSplit levels deep. + var ( + pStack [3*maxNsplit + 4]fixed.Point26_6 + sStack [maxNsplit + 1]int + i int + ) + sStack[0] = nsplit + pStack[0] = d + pStack[1] = c + pStack[2] = b + pStack[3] = r.a + for i >= 0 { + s := sStack[i] + p := pStack[3*i:] + if s > 0 { + // Split the cubic curve p[:4] into an equivalent set of two + // shorter curves: p[:4] and p[3:7]. The new p[6] is the old p[3], + // and p[0] is unchanged. + m01x := (p[0].X + p[1].X) / 2 + m12x := (p[1].X + p[2].X) / 2 + m23x := (p[2].X + p[3].X) / 2 + p[6].X = p[3].X + p[5].X = m23x + p[1].X = m01x + p[2].X = (m01x + m12x) / 2 + p[4].X = (m12x + m23x) / 2 + p[3].X = (p[2].X + p[4].X) / 2 + m01y := (p[0].Y + p[1].Y) / 2 + m12y := (p[1].Y + p[2].Y) / 2 + m23y := (p[2].Y + p[3].Y) / 2 + p[6].Y = p[3].Y + p[5].Y = m23y + p[1].Y = m01y + p[2].Y = (m01y + m12y) / 2 + p[4].Y = (m12y + m23y) / 2 + p[3].Y = (p[2].Y + p[4].Y) / 2 + // The two shorter curves have one less split to do. + sStack[i] = s - 1 + sStack[i+1] = s - 1 + i++ + } else { + // Replace the level-0 cubic with a two-linear-piece approximation. + midx := (p[0].X + 3*(p[1].X+p[2].X) + p[3].X) / 8 + midy := (p[0].Y + 3*(p[1].Y+p[2].Y) + p[3].Y) / 8 + r.Add1(fixed.Point26_6{midx, midy}) + r.Add1(p[0]) + i-- + } + } +} + +// AddPath adds the given Path. +func (r *Rasterizer) AddPath(p Path) { + for i := 0; i < len(p); { + switch p[i] { + case 0: + r.Start( + fixed.Point26_6{p[i+1], p[i+2]}, + ) + i += 4 + case 1: + r.Add1( + fixed.Point26_6{p[i+1], p[i+2]}, + ) + i += 4 + case 2: + r.Add2( + fixed.Point26_6{p[i+1], p[i+2]}, + fixed.Point26_6{p[i+3], p[i+4]}, + ) + i += 6 + case 3: + r.Add3( + fixed.Point26_6{p[i+1], p[i+2]}, + fixed.Point26_6{p[i+3], p[i+4]}, + fixed.Point26_6{p[i+5], p[i+6]}, + ) + i += 8 + default: + panic("freetype/raster: bad path") + } + } +} + +// AddStroke adds a stroked Path. +func (r *Rasterizer) AddStroke(q Path, width fixed.Int26_6, cr Capper, jr Joiner) { + Stroke(r, q, width, cr, jr) +} + +// areaToAlpha converts an area value to a uint32 alpha value. A completely +// filled pixel corresponds to an area of 64*64*2, and an alpha of 0xffff. The +// conversion of area values greater than this depends on the winding rule: +// even-odd or non-zero. +func (r *Rasterizer) areaToAlpha(area int) uint32 { + // The C Freetype implementation (version 2.3.12) does "alpha := area>>1" + // without the +1. Round-to-nearest gives a more symmetric result than + // round-down. The C implementation also returns 8-bit alpha, not 16-bit + // alpha. + a := (area + 1) >> 1 + if a < 0 { + a = -a + } + alpha := uint32(a) + if r.UseNonZeroWinding { + if alpha > 0x0fff { + alpha = 0x0fff + } + } else { + alpha &= 0x1fff + if alpha > 0x1000 { + alpha = 0x2000 - alpha + } else if alpha == 0x1000 { + alpha = 0x0fff + } + } + // alpha is now in the range [0x0000, 0x0fff]. Convert that 12-bit alpha to + // 16-bit alpha. + return alpha<<4 | alpha>>8 +} + +// Rasterize converts r's accumulated curves into Spans for p. The Spans passed +// to p are non-overlapping, and sorted by Y and then X. They all have non-zero +// width (and 0 <= X0 < X1 <= r.width) and non-zero A, except for the final +// Span, which has Y, X0, X1 and A all equal to zero. +func (r *Rasterizer) Rasterize(p Painter) { + r.saveCell() + s := 0 + for yi := 0; yi < len(r.cellIndex); yi++ { + xi, cover := 0, 0 + for c := r.cellIndex[yi]; c != -1; c = r.cell[c].next { + if cover != 0 && r.cell[c].xi > xi { + alpha := r.areaToAlpha(cover * 64 * 2) + if alpha != 0 { + xi0, xi1 := xi, r.cell[c].xi + if xi0 < 0 { + xi0 = 0 + } + if xi1 >= r.width { + xi1 = r.width + } + if xi0 < xi1 { + r.spanBuf[s] = Span{yi + r.Dy, xi0 + r.Dx, xi1 + r.Dx, alpha} + s++ + } + } + } + cover += r.cell[c].cover + alpha := r.areaToAlpha(cover*64*2 - r.cell[c].area) + xi = r.cell[c].xi + 1 + if alpha != 0 { + xi0, xi1 := r.cell[c].xi, xi + if xi0 < 0 { + xi0 = 0 + } + if xi1 >= r.width { + xi1 = r.width + } + if xi0 < xi1 { + r.spanBuf[s] = Span{yi + r.Dy, xi0 + r.Dx, xi1 + r.Dx, alpha} + s++ + } + } + if s > len(r.spanBuf)-2 { + p.Paint(r.spanBuf[:s], false) + s = 0 + } + } + } + p.Paint(r.spanBuf[:s], true) +} + +// Clear cancels any previous calls to r.Start or r.AddXxx. +func (r *Rasterizer) Clear() { + r.a = fixed.Point26_6{} + r.xi = 0 + r.yi = 0 + r.area = 0 + r.cover = 0 + r.cell = r.cell[:0] + for i := 0; i < len(r.cellIndex); i++ { + r.cellIndex[i] = -1 + } +} + +// SetBounds sets the maximum width and height of the rasterized image and +// calls Clear. The width and height are in pixels, not fixed.Int26_6 units. +func (r *Rasterizer) SetBounds(width, height int) { + if width < 0 { + width = 0 + } + if height < 0 { + height = 0 + } + // Use the same ssN heuristic as the C Freetype (version 2.4.0) + // implementation. + ss2, ss3 := 32, 16 + if width > 24 || height > 24 { + ss2, ss3 = 2*ss2, 2*ss3 + if width > 120 || height > 120 { + ss2, ss3 = 2*ss2, 2*ss3 + } + } + r.width = width + r.splitScale2 = ss2 + r.splitScale3 = ss3 + r.cell = r.cellBuf[:0] + if height > len(r.cellIndexBuf) { + r.cellIndex = make([]int, height) + } else { + r.cellIndex = r.cellIndexBuf[:height] + } + r.Clear() +} + +// NewRasterizer creates a new Rasterizer with the given bounds. +func NewRasterizer(width, height int) *Rasterizer { + r := new(Rasterizer) + r.SetBounds(width, height) + return r +} diff --git a/src/server/vendor/github.com/golang/freetype/raster/stroke.go b/src/server/vendor/github.com/golang/freetype/raster/stroke.go new file mode 100644 index 00000000..bcc66b26 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/raster/stroke.go @@ -0,0 +1,483 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package raster + +import ( + "golang.org/x/image/math/fixed" +) + +// Two points are considered practically equal if the square of the distance +// between them is less than one quarter (i.e. 1024 / 4096). +const epsilon = fixed.Int52_12(1024) + +// A Capper signifies how to begin or end a stroked path. +type Capper interface { + // Cap adds a cap to p given a pivot point and the normal vector of a + // terminal segment. The normal's length is half of the stroke width. + Cap(p Adder, halfWidth fixed.Int26_6, pivot, n1 fixed.Point26_6) +} + +// The CapperFunc type adapts an ordinary function to be a Capper. +type CapperFunc func(Adder, fixed.Int26_6, fixed.Point26_6, fixed.Point26_6) + +func (f CapperFunc) Cap(p Adder, halfWidth fixed.Int26_6, pivot, n1 fixed.Point26_6) { + f(p, halfWidth, pivot, n1) +} + +// A Joiner signifies how to join interior nodes of a stroked path. +type Joiner interface { + // Join adds a join to the two sides of a stroked path given a pivot + // point and the normal vectors of the trailing and leading segments. + // Both normals have length equal to half of the stroke width. + Join(lhs, rhs Adder, halfWidth fixed.Int26_6, pivot, n0, n1 fixed.Point26_6) +} + +// The JoinerFunc type adapts an ordinary function to be a Joiner. +type JoinerFunc func(lhs, rhs Adder, halfWidth fixed.Int26_6, pivot, n0, n1 fixed.Point26_6) + +func (f JoinerFunc) Join(lhs, rhs Adder, halfWidth fixed.Int26_6, pivot, n0, n1 fixed.Point26_6) { + f(lhs, rhs, halfWidth, pivot, n0, n1) +} + +// RoundCapper adds round caps to a stroked path. +var RoundCapper Capper = CapperFunc(roundCapper) + +func roundCapper(p Adder, halfWidth fixed.Int26_6, pivot, n1 fixed.Point26_6) { + // The cubic Bézier approximation to a circle involves the magic number + // (√2 - 1) * 4/3, which is approximately 35/64. + const k = 35 + e := pRot90CCW(n1) + side := pivot.Add(e) + start, end := pivot.Sub(n1), pivot.Add(n1) + d, e := n1.Mul(k), e.Mul(k) + p.Add3(start.Add(e), side.Sub(d), side) + p.Add3(side.Add(d), end.Add(e), end) +} + +// ButtCapper adds butt caps to a stroked path. +var ButtCapper Capper = CapperFunc(buttCapper) + +func buttCapper(p Adder, halfWidth fixed.Int26_6, pivot, n1 fixed.Point26_6) { + p.Add1(pivot.Add(n1)) +} + +// SquareCapper adds square caps to a stroked path. +var SquareCapper Capper = CapperFunc(squareCapper) + +func squareCapper(p Adder, halfWidth fixed.Int26_6, pivot, n1 fixed.Point26_6) { + e := pRot90CCW(n1) + side := pivot.Add(e) + p.Add1(side.Sub(n1)) + p.Add1(side.Add(n1)) + p.Add1(pivot.Add(n1)) +} + +// RoundJoiner adds round joins to a stroked path. +var RoundJoiner Joiner = JoinerFunc(roundJoiner) + +func roundJoiner(lhs, rhs Adder, haflWidth fixed.Int26_6, pivot, n0, n1 fixed.Point26_6) { + dot := pDot(pRot90CW(n0), n1) + if dot >= 0 { + addArc(lhs, pivot, n0, n1) + rhs.Add1(pivot.Sub(n1)) + } else { + lhs.Add1(pivot.Add(n1)) + addArc(rhs, pivot, pNeg(n0), pNeg(n1)) + } +} + +// BevelJoiner adds bevel joins to a stroked path. +var BevelJoiner Joiner = JoinerFunc(bevelJoiner) + +func bevelJoiner(lhs, rhs Adder, haflWidth fixed.Int26_6, pivot, n0, n1 fixed.Point26_6) { + lhs.Add1(pivot.Add(n1)) + rhs.Add1(pivot.Sub(n1)) +} + +// addArc adds a circular arc from pivot+n0 to pivot+n1 to p. The shorter of +// the two possible arcs is taken, i.e. the one spanning <= 180 degrees. The +// two vectors n0 and n1 must be of equal length. +func addArc(p Adder, pivot, n0, n1 fixed.Point26_6) { + // r2 is the square of the length of n0. + r2 := pDot(n0, n0) + if r2 < epsilon { + // The arc radius is so small that we collapse to a straight line. + p.Add1(pivot.Add(n1)) + return + } + // We approximate the arc by 0, 1, 2 or 3 45-degree quadratic segments plus + // a final quadratic segment from s to n1. Each 45-degree segment has + // control points {1, 0}, {1, tan(π/8)} and {1/√2, 1/√2} suitably scaled, + // rotated and translated. tan(π/8) is approximately 27/64. + const tpo8 = 27 + var s fixed.Point26_6 + // We determine which octant the angle between n0 and n1 is in via three + // dot products. m0, m1 and m2 are n0 rotated clockwise by 45, 90 and 135 + // degrees. + m0 := pRot45CW(n0) + m1 := pRot90CW(n0) + m2 := pRot90CW(m0) + if pDot(m1, n1) >= 0 { + if pDot(n0, n1) >= 0 { + if pDot(m2, n1) <= 0 { + // n1 is between 0 and 45 degrees clockwise of n0. + s = n0 + } else { + // n1 is between 45 and 90 degrees clockwise of n0. + p.Add2(pivot.Add(n0).Add(m1.Mul(tpo8)), pivot.Add(m0)) + s = m0 + } + } else { + pm1, n0t := pivot.Add(m1), n0.Mul(tpo8) + p.Add2(pivot.Add(n0).Add(m1.Mul(tpo8)), pivot.Add(m0)) + p.Add2(pm1.Add(n0t), pm1) + if pDot(m0, n1) >= 0 { + // n1 is between 90 and 135 degrees clockwise of n0. + s = m1 + } else { + // n1 is between 135 and 180 degrees clockwise of n0. + p.Add2(pm1.Sub(n0t), pivot.Add(m2)) + s = m2 + } + } + } else { + if pDot(n0, n1) >= 0 { + if pDot(m0, n1) >= 0 { + // n1 is between 0 and 45 degrees counter-clockwise of n0. + s = n0 + } else { + // n1 is between 45 and 90 degrees counter-clockwise of n0. + p.Add2(pivot.Add(n0).Sub(m1.Mul(tpo8)), pivot.Sub(m2)) + s = pNeg(m2) + } + } else { + pm1, n0t := pivot.Sub(m1), n0.Mul(tpo8) + p.Add2(pivot.Add(n0).Sub(m1.Mul(tpo8)), pivot.Sub(m2)) + p.Add2(pm1.Add(n0t), pm1) + if pDot(m2, n1) <= 0 { + // n1 is between 90 and 135 degrees counter-clockwise of n0. + s = pNeg(m1) + } else { + // n1 is between 135 and 180 degrees counter-clockwise of n0. + p.Add2(pm1.Sub(n0t), pivot.Sub(m0)) + s = pNeg(m0) + } + } + } + // The final quadratic segment has two endpoints s and n1 and the middle + // control point is a multiple of s.Add(n1), i.e. it is on the angle + // bisector of those two points. The multiple ranges between 128/256 and + // 150/256 as the angle between s and n1 ranges between 0 and 45 degrees. + // + // When the angle is 0 degrees (i.e. s and n1 are coincident) then + // s.Add(n1) is twice s and so the middle control point of the degenerate + // quadratic segment should be half s.Add(n1), and half = 128/256. + // + // When the angle is 45 degrees then 150/256 is the ratio of the lengths of + // the two vectors {1, tan(π/8)} and {1 + 1/√2, 1/√2}. + // + // d is the normalized dot product between s and n1. Since the angle ranges + // between 0 and 45 degrees then d ranges between 256/256 and 181/256. + d := 256 * pDot(s, n1) / r2 + multiple := fixed.Int26_6(150-(150-128)*(d-181)/(256-181)) >> 2 + p.Add2(pivot.Add(s.Add(n1).Mul(multiple)), pivot.Add(n1)) +} + +// midpoint returns the midpoint of two Points. +func midpoint(a, b fixed.Point26_6) fixed.Point26_6 { + return fixed.Point26_6{(a.X + b.X) / 2, (a.Y + b.Y) / 2} +} + +// angleGreaterThan45 returns whether the angle between two vectors is more +// than 45 degrees. +func angleGreaterThan45(v0, v1 fixed.Point26_6) bool { + v := pRot45CCW(v0) + return pDot(v, v1) < 0 || pDot(pRot90CW(v), v1) < 0 +} + +// interpolate returns the point (1-t)*a + t*b. +func interpolate(a, b fixed.Point26_6, t fixed.Int52_12) fixed.Point26_6 { + s := 1<<12 - t + x := s*fixed.Int52_12(a.X) + t*fixed.Int52_12(b.X) + y := s*fixed.Int52_12(a.Y) + t*fixed.Int52_12(b.Y) + return fixed.Point26_6{fixed.Int26_6(x >> 12), fixed.Int26_6(y >> 12)} +} + +// curviest2 returns the value of t for which the quadratic parametric curve +// (1-t)²*a + 2*t*(1-t).b + t²*c has maximum curvature. +// +// The curvature of the parametric curve f(t) = (x(t), y(t)) is +// |x′y″-y′x″| / (x′²+y′²)^(3/2). +// +// Let d = b-a and e = c-2*b+a, so that f′(t) = 2*d+2*e*t and f″(t) = 2*e. +// The curvature's numerator is (2*dx+2*ex*t)*(2*ey)-(2*dy+2*ey*t)*(2*ex), +// which simplifies to 4*dx*ey-4*dy*ex, which is constant with respect to t. +// +// Thus, curvature is extreme where the denominator is extreme, i.e. where +// (x′²+y′²) is extreme. The first order condition is that +// 2*x′*x″+2*y′*y″ = 0, or (dx+ex*t)*ex + (dy+ey*t)*ey = 0. +// Solving for t gives t = -(dx*ex+dy*ey) / (ex*ex+ey*ey). +func curviest2(a, b, c fixed.Point26_6) fixed.Int52_12 { + dx := int64(b.X - a.X) + dy := int64(b.Y - a.Y) + ex := int64(c.X - 2*b.X + a.X) + ey := int64(c.Y - 2*b.Y + a.Y) + if ex == 0 && ey == 0 { + return 2048 + } + return fixed.Int52_12(-4096 * (dx*ex + dy*ey) / (ex*ex + ey*ey)) +} + +// A stroker holds state for stroking a path. +type stroker struct { + // p is the destination that records the stroked path. + p Adder + // u is the half-width of the stroke. + u fixed.Int26_6 + // cr and jr specify how to end and connect path segments. + cr Capper + jr Joiner + // r is the reverse path. Stroking a path involves constructing two + // parallel paths 2*u apart. The first path is added immediately to p, + // the second path is accumulated in r and eventually added in reverse. + r Path + // a is the most recent segment point. anorm is the segment normal of + // length u at that point. + a, anorm fixed.Point26_6 +} + +// addNonCurvy2 adds a quadratic segment to the stroker, where the segment +// defined by (k.a, b, c) achieves maximum curvature at either k.a or c. +func (k *stroker) addNonCurvy2(b, c fixed.Point26_6) { + // We repeatedly divide the segment at its middle until it is straight + // enough to approximate the stroke by just translating the control points. + // ds and ps are stacks of depths and points. t is the top of the stack. + const maxDepth = 5 + var ( + ds [maxDepth + 1]int + ps [2*maxDepth + 3]fixed.Point26_6 + t int + ) + // Initially the ps stack has one quadratic segment of depth zero. + ds[0] = 0 + ps[2] = k.a + ps[1] = b + ps[0] = c + anorm := k.anorm + var cnorm fixed.Point26_6 + + for { + depth := ds[t] + a := ps[2*t+2] + b := ps[2*t+1] + c := ps[2*t+0] + ab := b.Sub(a) + bc := c.Sub(b) + abIsSmall := pDot(ab, ab) < fixed.Int52_12(1<<12) + bcIsSmall := pDot(bc, bc) < fixed.Int52_12(1<<12) + if abIsSmall && bcIsSmall { + // Approximate the segment by a circular arc. + cnorm = pRot90CCW(pNorm(bc, k.u)) + mac := midpoint(a, c) + addArc(k.p, mac, anorm, cnorm) + addArc(&k.r, mac, pNeg(anorm), pNeg(cnorm)) + } else if depth < maxDepth && angleGreaterThan45(ab, bc) { + // Divide the segment in two and push both halves on the stack. + mab := midpoint(a, b) + mbc := midpoint(b, c) + t++ + ds[t+0] = depth + 1 + ds[t-1] = depth + 1 + ps[2*t+2] = a + ps[2*t+1] = mab + ps[2*t+0] = midpoint(mab, mbc) + ps[2*t-1] = mbc + continue + } else { + // Translate the control points. + bnorm := pRot90CCW(pNorm(c.Sub(a), k.u)) + cnorm = pRot90CCW(pNorm(bc, k.u)) + k.p.Add2(b.Add(bnorm), c.Add(cnorm)) + k.r.Add2(b.Sub(bnorm), c.Sub(cnorm)) + } + if t == 0 { + k.a, k.anorm = c, cnorm + return + } + t-- + anorm = cnorm + } + panic("unreachable") +} + +// Add1 adds a linear segment to the stroker. +func (k *stroker) Add1(b fixed.Point26_6) { + bnorm := pRot90CCW(pNorm(b.Sub(k.a), k.u)) + if len(k.r) == 0 { + k.p.Start(k.a.Add(bnorm)) + k.r.Start(k.a.Sub(bnorm)) + } else { + k.jr.Join(k.p, &k.r, k.u, k.a, k.anorm, bnorm) + } + k.p.Add1(b.Add(bnorm)) + k.r.Add1(b.Sub(bnorm)) + k.a, k.anorm = b, bnorm +} + +// Add2 adds a quadratic segment to the stroker. +func (k *stroker) Add2(b, c fixed.Point26_6) { + ab := b.Sub(k.a) + bc := c.Sub(b) + abnorm := pRot90CCW(pNorm(ab, k.u)) + if len(k.r) == 0 { + k.p.Start(k.a.Add(abnorm)) + k.r.Start(k.a.Sub(abnorm)) + } else { + k.jr.Join(k.p, &k.r, k.u, k.a, k.anorm, abnorm) + } + + // Approximate nearly-degenerate quadratics by linear segments. + abIsSmall := pDot(ab, ab) < epsilon + bcIsSmall := pDot(bc, bc) < epsilon + if abIsSmall || bcIsSmall { + acnorm := pRot90CCW(pNorm(c.Sub(k.a), k.u)) + k.p.Add1(c.Add(acnorm)) + k.r.Add1(c.Sub(acnorm)) + k.a, k.anorm = c, acnorm + return + } + + // The quadratic segment (k.a, b, c) has a point of maximum curvature. + // If this occurs at an end point, we process the segment as a whole. + t := curviest2(k.a, b, c) + if t <= 0 || 4096 <= t { + k.addNonCurvy2(b, c) + return + } + + // Otherwise, we perform a de Casteljau decomposition at the point of + // maximum curvature and process the two straighter parts. + mab := interpolate(k.a, b, t) + mbc := interpolate(b, c, t) + mabc := interpolate(mab, mbc, t) + + // If the vectors ab and bc are close to being in opposite directions, + // then the decomposition can become unstable, so we approximate the + // quadratic segment by two linear segments joined by an arc. + bcnorm := pRot90CCW(pNorm(bc, k.u)) + if pDot(abnorm, bcnorm) < -fixed.Int52_12(k.u)*fixed.Int52_12(k.u)*2047/2048 { + pArc := pDot(abnorm, bc) < 0 + + k.p.Add1(mabc.Add(abnorm)) + if pArc { + z := pRot90CW(abnorm) + addArc(k.p, mabc, abnorm, z) + addArc(k.p, mabc, z, bcnorm) + } + k.p.Add1(mabc.Add(bcnorm)) + k.p.Add1(c.Add(bcnorm)) + + k.r.Add1(mabc.Sub(abnorm)) + if !pArc { + z := pRot90CW(abnorm) + addArc(&k.r, mabc, pNeg(abnorm), z) + addArc(&k.r, mabc, z, pNeg(bcnorm)) + } + k.r.Add1(mabc.Sub(bcnorm)) + k.r.Add1(c.Sub(bcnorm)) + + k.a, k.anorm = c, bcnorm + return + } + + // Process the decomposed parts. + k.addNonCurvy2(mab, mabc) + k.addNonCurvy2(mbc, c) +} + +// Add3 adds a cubic segment to the stroker. +func (k *stroker) Add3(b, c, d fixed.Point26_6) { + panic("freetype/raster: stroke unimplemented for cubic segments") +} + +// stroke adds the stroked Path q to p, where q consists of exactly one curve. +func (k *stroker) stroke(q Path) { + // Stroking is implemented by deriving two paths each k.u apart from q. + // The left-hand-side path is added immediately to k.p; the right-hand-side + // path is accumulated in k.r. Once we've finished adding the LHS to k.p, + // we add the RHS in reverse order. + k.r = make(Path, 0, len(q)) + k.a = fixed.Point26_6{q[1], q[2]} + for i := 4; i < len(q); { + switch q[i] { + case 1: + k.Add1( + fixed.Point26_6{q[i+1], q[i+2]}, + ) + i += 4 + case 2: + k.Add2( + fixed.Point26_6{q[i+1], q[i+2]}, + fixed.Point26_6{q[i+3], q[i+4]}, + ) + i += 6 + case 3: + k.Add3( + fixed.Point26_6{q[i+1], q[i+2]}, + fixed.Point26_6{q[i+3], q[i+4]}, + fixed.Point26_6{q[i+5], q[i+6]}, + ) + i += 8 + default: + panic("freetype/raster: bad path") + } + } + if len(k.r) == 0 { + return + } + // TODO(nigeltao): if q is a closed curve then we should join the first and + // last segments instead of capping them. + k.cr.Cap(k.p, k.u, q.lastPoint(), pNeg(k.anorm)) + addPathReversed(k.p, k.r) + pivot := q.firstPoint() + k.cr.Cap(k.p, k.u, pivot, pivot.Sub(fixed.Point26_6{k.r[1], k.r[2]})) +} + +// Stroke adds q stroked with the given width to p. The result is typically +// self-intersecting and should be rasterized with UseNonZeroWinding. +// cr and jr may be nil, which defaults to a RoundCapper or RoundJoiner. +func Stroke(p Adder, q Path, width fixed.Int26_6, cr Capper, jr Joiner) { + if len(q) == 0 { + return + } + if cr == nil { + cr = RoundCapper + } + if jr == nil { + jr = RoundJoiner + } + if q[0] != 0 { + panic("freetype/raster: bad path") + } + s := stroker{p: p, u: width / 2, cr: cr, jr: jr} + i := 0 + for j := 4; j < len(q); { + switch q[j] { + case 0: + s.stroke(q[i:j]) + i, j = j, j+4 + case 1: + j += 4 + case 2: + j += 6 + case 3: + j += 8 + default: + panic("freetype/raster: bad path") + } + } + s.stroke(q[i:]) +} diff --git a/src/server/vendor/github.com/golang/freetype/truetype/face.go b/src/server/vendor/github.com/golang/freetype/truetype/face.go new file mode 100644 index 00000000..099006f0 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/truetype/face.go @@ -0,0 +1,507 @@ +// Copyright 2015 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package truetype + +import ( + "image" + "math" + + "github.com/golang/freetype/raster" + "golang.org/x/image/font" + "golang.org/x/image/math/fixed" +) + +func powerOf2(i int) bool { + return i != 0 && (i&(i-1)) == 0 +} + +// Options are optional arguments to NewFace. +type Options struct { + // Size is the font size in points, as in "a 10 point font size". + // + // A zero value means to use a 12 point font size. + Size float64 + + // DPI is the dots-per-inch resolution. + // + // A zero value means to use 72 DPI. + DPI float64 + + // Hinting is how to quantize the glyph nodes. + // + // A zero value means to use no hinting. + Hinting font.Hinting + + // GlyphCacheEntries is the number of entries in the glyph mask image + // cache. + // + // If non-zero, it must be a power of 2. + // + // A zero value means to use 512 entries. + GlyphCacheEntries int + + // SubPixelsX is the number of sub-pixel locations a glyph's dot is + // quantized to, in the horizontal direction. For example, a value of 8 + // means that the dot is quantized to 1/8th of a pixel. This quantization + // only affects the glyph mask image, not its bounding box or advance + // width. A higher value gives a more faithful glyph image, but reduces the + // effectiveness of the glyph cache. + // + // If non-zero, it must be a power of 2, and be between 1 and 64 inclusive. + // + // A zero value means to use 4 sub-pixel locations. + SubPixelsX int + + // SubPixelsY is the number of sub-pixel locations a glyph's dot is + // quantized to, in the vertical direction. For example, a value of 8 + // means that the dot is quantized to 1/8th of a pixel. This quantization + // only affects the glyph mask image, not its bounding box or advance + // width. A higher value gives a more faithful glyph image, but reduces the + // effectiveness of the glyph cache. + // + // If non-zero, it must be a power of 2, and be between 1 and 64 inclusive. + // + // A zero value means to use 1 sub-pixel location. + SubPixelsY int +} + +func (o *Options) size() float64 { + if o != nil && o.Size > 0 { + return o.Size + } + return 12 +} + +func (o *Options) dpi() float64 { + if o != nil && o.DPI > 0 { + return o.DPI + } + return 72 +} + +func (o *Options) hinting() font.Hinting { + if o != nil { + switch o.Hinting { + case font.HintingVertical, font.HintingFull: + // TODO: support vertical hinting. + return font.HintingFull + } + } + return font.HintingNone +} + +func (o *Options) glyphCacheEntries() int { + if o != nil && powerOf2(o.GlyphCacheEntries) { + return o.GlyphCacheEntries + } + // 512 is 128 * 4 * 1, which lets us cache 128 glyphs at 4 * 1 subpixel + // locations in the X and Y direction. + return 512 +} + +func (o *Options) subPixelsX() (value uint32, halfQuantum, mask fixed.Int26_6) { + if o != nil { + switch o.SubPixelsX { + case 1, 2, 4, 8, 16, 32, 64: + return subPixels(o.SubPixelsX) + } + } + // This default value of 4 isn't based on anything scientific, merely as + // small a number as possible that looks almost as good as no quantization, + // or returning subPixels(64). + return subPixels(4) +} + +func (o *Options) subPixelsY() (value uint32, halfQuantum, mask fixed.Int26_6) { + if o != nil { + switch o.SubPixelsX { + case 1, 2, 4, 8, 16, 32, 64: + return subPixels(o.SubPixelsX) + } + } + // This default value of 1 isn't based on anything scientific, merely that + // vertical sub-pixel glyph rendering is pretty rare. Baseline locations + // can usually afford to snap to the pixel grid, so the vertical direction + // doesn't have the deal with the horizontal's fractional advance widths. + return subPixels(1) +} + +// subPixels returns q and the bias and mask that leads to q quantized +// sub-pixel locations per full pixel. +// +// For example, q == 4 leads to a bias of 8 and a mask of 0xfffffff0, or -16, +// because we want to round fractions of fixed.Int26_6 as: +// - 0 to 7 rounds to 0. +// - 8 to 23 rounds to 16. +// - 24 to 39 rounds to 32. +// - 40 to 55 rounds to 48. +// - 56 to 63 rounds to 64. +// which means to add 8 and then bitwise-and with -16, in two's complement +// representation. +// +// When q == 1, we want bias == 32 and mask == -64. +// When q == 2, we want bias == 16 and mask == -32. +// When q == 4, we want bias == 8 and mask == -16. +// ... +// When q == 64, we want bias == 0 and mask == -1. (The no-op case). +// The pattern is clear. +func subPixels(q int) (value uint32, bias, mask fixed.Int26_6) { + return uint32(q), 32 / fixed.Int26_6(q), -64 / fixed.Int26_6(q) +} + +// glyphCacheEntry caches the arguments and return values of rasterize. +type glyphCacheEntry struct { + key glyphCacheKey + val glyphCacheVal +} + +type glyphCacheKey struct { + index Index + fx, fy uint8 +} + +type glyphCacheVal struct { + advanceWidth fixed.Int26_6 + offset image.Point + gw int + gh int +} + +type indexCacheEntry struct { + rune rune + index Index +} + +// NewFace returns a new font.Face for the given Font. +func NewFace(f *Font, opts *Options) font.Face { + a := &face{ + f: f, + hinting: opts.hinting(), + scale: fixed.Int26_6(0.5 + (opts.size() * opts.dpi() * 64 / 72)), + glyphCache: make([]glyphCacheEntry, opts.glyphCacheEntries()), + } + a.subPixelX, a.subPixelBiasX, a.subPixelMaskX = opts.subPixelsX() + a.subPixelY, a.subPixelBiasY, a.subPixelMaskY = opts.subPixelsY() + + // Fill the cache with invalid entries. Valid glyph cache entries have fx + // and fy in the range [0, 64). Valid index cache entries have rune >= 0. + for i := range a.glyphCache { + a.glyphCache[i].key.fy = 0xff + } + for i := range a.indexCache { + a.indexCache[i].rune = -1 + } + + // Set the rasterizer's bounds to be big enough to handle the largest glyph. + b := f.Bounds(a.scale) + xmin := +int(b.Min.X) >> 6 + ymin := -int(b.Max.Y) >> 6 + xmax := +int(b.Max.X+63) >> 6 + ymax := -int(b.Min.Y-63) >> 6 + a.maxw = xmax - xmin + a.maxh = ymax - ymin + a.masks = image.NewAlpha(image.Rect(0, 0, a.maxw, a.maxh*len(a.glyphCache))) + a.r.SetBounds(a.maxw, a.maxh) + a.p = facePainter{a} + + return a +} + +type face struct { + f *Font + hinting font.Hinting + scale fixed.Int26_6 + subPixelX uint32 + subPixelBiasX fixed.Int26_6 + subPixelMaskX fixed.Int26_6 + subPixelY uint32 + subPixelBiasY fixed.Int26_6 + subPixelMaskY fixed.Int26_6 + masks *image.Alpha + glyphCache []glyphCacheEntry + r raster.Rasterizer + p raster.Painter + paintOffset int + maxw int + maxh int + glyphBuf GlyphBuf + indexCache [indexCacheLen]indexCacheEntry + + // TODO: clip rectangle? +} + +const indexCacheLen = 256 + +func (a *face) index(r rune) Index { + const mask = indexCacheLen - 1 + c := &a.indexCache[r&mask] + if c.rune == r { + return c.index + } + i := a.f.Index(r) + c.rune = r + c.index = i + return i +} + +// Close satisfies the font.Face interface. +func (a *face) Close() error { return nil } + +// Metrics satisfies the font.Face interface. +func (a *face) Metrics() font.Metrics { + scale := float64(a.scale) + fupe := float64(a.f.FUnitsPerEm()) + return font.Metrics{ + Height: a.scale, + Ascent: fixed.Int26_6(math.Ceil(scale * float64(+a.f.ascent) / fupe)), + Descent: fixed.Int26_6(math.Ceil(scale * float64(-a.f.descent) / fupe)), + } +} + +// Kern satisfies the font.Face interface. +func (a *face) Kern(r0, r1 rune) fixed.Int26_6 { + i0 := a.index(r0) + i1 := a.index(r1) + kern := a.f.Kern(a.scale, i0, i1) + if a.hinting != font.HintingNone { + kern = (kern + 32) &^ 63 + } + return kern +} + +// Glyph satisfies the font.Face interface. +func (a *face) Glyph(dot fixed.Point26_6, r rune) ( + dr image.Rectangle, mask image.Image, maskp image.Point, advance fixed.Int26_6, ok bool) { + + // Quantize to the sub-pixel granularity. + dotX := (dot.X + a.subPixelBiasX) & a.subPixelMaskX + dotY := (dot.Y + a.subPixelBiasY) & a.subPixelMaskY + + // Split the coordinates into their integer and fractional parts. + ix, fx := int(dotX>>6), dotX&0x3f + iy, fy := int(dotY>>6), dotY&0x3f + + index := a.index(r) + cIndex := uint32(index) + cIndex = cIndex*a.subPixelX - uint32(fx/a.subPixelMaskX) + cIndex = cIndex*a.subPixelY - uint32(fy/a.subPixelMaskY) + cIndex &= uint32(len(a.glyphCache) - 1) + a.paintOffset = a.maxh * int(cIndex) + k := glyphCacheKey{ + index: index, + fx: uint8(fx), + fy: uint8(fy), + } + var v glyphCacheVal + if a.glyphCache[cIndex].key != k { + var ok bool + v, ok = a.rasterize(index, fx, fy) + if !ok { + return image.Rectangle{}, nil, image.Point{}, 0, false + } + a.glyphCache[cIndex] = glyphCacheEntry{k, v} + } else { + v = a.glyphCache[cIndex].val + } + + dr.Min = image.Point{ + X: ix + v.offset.X, + Y: iy + v.offset.Y, + } + dr.Max = image.Point{ + X: dr.Min.X + v.gw, + Y: dr.Min.Y + v.gh, + } + return dr, a.masks, image.Point{Y: a.paintOffset}, v.advanceWidth, true +} + +func (a *face) GlyphBounds(r rune) (bounds fixed.Rectangle26_6, advance fixed.Int26_6, ok bool) { + if err := a.glyphBuf.Load(a.f, a.scale, a.index(r), a.hinting); err != nil { + return fixed.Rectangle26_6{}, 0, false + } + xmin := +a.glyphBuf.Bounds.Min.X + ymin := -a.glyphBuf.Bounds.Max.Y + xmax := +a.glyphBuf.Bounds.Max.X + ymax := -a.glyphBuf.Bounds.Min.Y + if xmin > xmax || ymin > ymax { + return fixed.Rectangle26_6{}, 0, false + } + return fixed.Rectangle26_6{ + Min: fixed.Point26_6{ + X: xmin, + Y: ymin, + }, + Max: fixed.Point26_6{ + X: xmax, + Y: ymax, + }, + }, a.glyphBuf.AdvanceWidth, true +} + +func (a *face) GlyphAdvance(r rune) (advance fixed.Int26_6, ok bool) { + if err := a.glyphBuf.Load(a.f, a.scale, a.index(r), a.hinting); err != nil { + return 0, false + } + return a.glyphBuf.AdvanceWidth, true +} + +// rasterize returns the advance width, integer-pixel offset to render at, and +// the width and height of the given glyph at the given sub-pixel offsets. +// +// The 26.6 fixed point arguments fx and fy must be in the range [0, 1). +func (a *face) rasterize(index Index, fx, fy fixed.Int26_6) (v glyphCacheVal, ok bool) { + if err := a.glyphBuf.Load(a.f, a.scale, index, a.hinting); err != nil { + return glyphCacheVal{}, false + } + // Calculate the integer-pixel bounds for the glyph. + xmin := int(fx+a.glyphBuf.Bounds.Min.X) >> 6 + ymin := int(fy-a.glyphBuf.Bounds.Max.Y) >> 6 + xmax := int(fx+a.glyphBuf.Bounds.Max.X+0x3f) >> 6 + ymax := int(fy-a.glyphBuf.Bounds.Min.Y+0x3f) >> 6 + if xmin > xmax || ymin > ymax { + return glyphCacheVal{}, false + } + // A TrueType's glyph's nodes can have negative co-ordinates, but the + // rasterizer clips anything left of x=0 or above y=0. xmin and ymin are + // the pixel offsets, based on the font's FUnit metrics, that let a + // negative co-ordinate in TrueType space be non-negative in rasterizer + // space. xmin and ymin are typically <= 0. + fx -= fixed.Int26_6(xmin << 6) + fy -= fixed.Int26_6(ymin << 6) + // Rasterize the glyph's vectors. + a.r.Clear() + pixOffset := a.paintOffset * a.maxw + clear(a.masks.Pix[pixOffset : pixOffset+a.maxw*a.maxh]) + e0 := 0 + for _, e1 := range a.glyphBuf.Ends { + a.drawContour(a.glyphBuf.Points[e0:e1], fx, fy) + e0 = e1 + } + a.r.Rasterize(a.p) + return glyphCacheVal{ + a.glyphBuf.AdvanceWidth, + image.Point{xmin, ymin}, + xmax - xmin, + ymax - ymin, + }, true +} + +func clear(pix []byte) { + for i := range pix { + pix[i] = 0 + } +} + +// drawContour draws the given closed contour with the given offset. +func (a *face) drawContour(ps []Point, dx, dy fixed.Int26_6) { + if len(ps) == 0 { + return + } + + // The low bit of each point's Flags value is whether the point is on the + // curve. Truetype fonts only have quadratic Bézier curves, not cubics. + // Thus, two consecutive off-curve points imply an on-curve point in the + // middle of those two. + // + // See http://chanae.walon.org/pub/ttf/ttf_glyphs.htm for more details. + + // ps[0] is a truetype.Point measured in FUnits and positive Y going + // upwards. start is the same thing measured in fixed point units and + // positive Y going downwards, and offset by (dx, dy). + start := fixed.Point26_6{ + X: dx + ps[0].X, + Y: dy - ps[0].Y, + } + var others []Point + if ps[0].Flags&0x01 != 0 { + others = ps[1:] + } else { + last := fixed.Point26_6{ + X: dx + ps[len(ps)-1].X, + Y: dy - ps[len(ps)-1].Y, + } + if ps[len(ps)-1].Flags&0x01 != 0 { + start = last + others = ps[:len(ps)-1] + } else { + start = fixed.Point26_6{ + X: (start.X + last.X) / 2, + Y: (start.Y + last.Y) / 2, + } + others = ps + } + } + a.r.Start(start) + q0, on0 := start, true + for _, p := range others { + q := fixed.Point26_6{ + X: dx + p.X, + Y: dy - p.Y, + } + on := p.Flags&0x01 != 0 + if on { + if on0 { + a.r.Add1(q) + } else { + a.r.Add2(q0, q) + } + } else { + if on0 { + // No-op. + } else { + mid := fixed.Point26_6{ + X: (q0.X + q.X) / 2, + Y: (q0.Y + q.Y) / 2, + } + a.r.Add2(q0, mid) + } + } + q0, on0 = q, on + } + // Close the curve. + if on0 { + a.r.Add1(start) + } else { + a.r.Add2(q0, start) + } +} + +// facePainter is like a raster.AlphaSrcPainter, with an additional Y offset +// (face.paintOffset) to the painted spans. +type facePainter struct { + a *face +} + +func (p facePainter) Paint(ss []raster.Span, done bool) { + m := p.a.masks + b := m.Bounds() + b.Min.Y = p.a.paintOffset + b.Max.Y = p.a.paintOffset + p.a.maxh + for _, s := range ss { + s.Y += p.a.paintOffset + if s.Y < b.Min.Y { + continue + } + if s.Y >= b.Max.Y { + return + } + if s.X0 < b.Min.X { + s.X0 = b.Min.X + } + if s.X1 > b.Max.X { + s.X1 = b.Max.X + } + if s.X0 >= s.X1 { + continue + } + base := (s.Y-m.Rect.Min.Y)*m.Stride - m.Rect.Min.X + p := m.Pix[base+s.X0 : base+s.X1] + color := uint8(s.Alpha >> 8) + for i := range p { + p[i] = color + } + } +} diff --git a/src/server/vendor/github.com/golang/freetype/truetype/glyph.go b/src/server/vendor/github.com/golang/freetype/truetype/glyph.go new file mode 100644 index 00000000..6157ad83 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/truetype/glyph.go @@ -0,0 +1,522 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package truetype + +import ( + "golang.org/x/image/font" + "golang.org/x/image/math/fixed" +) + +// TODO: implement VerticalHinting. + +// A Point is a co-ordinate pair plus whether it is 'on' a contour or an 'off' +// control point. +type Point struct { + X, Y fixed.Int26_6 + // The Flags' LSB means whether or not this Point is 'on' the contour. + // Other bits are reserved for internal use. + Flags uint32 +} + +// A GlyphBuf holds a glyph's contours. A GlyphBuf can be re-used to load a +// series of glyphs from a Font. +type GlyphBuf struct { + // AdvanceWidth is the glyph's advance width. + AdvanceWidth fixed.Int26_6 + // Bounds is the glyph's bounding box. + Bounds fixed.Rectangle26_6 + // Points contains all Points from all contours of the glyph. If hinting + // was used to load a glyph then Unhinted contains those Points before they + // were hinted, and InFontUnits contains those Points before they were + // hinted and scaled. + Points, Unhinted, InFontUnits []Point + // Ends is the point indexes of the end point of each contour. The length + // of Ends is the number of contours in the glyph. The i'th contour + // consists of points Points[Ends[i-1]:Ends[i]], where Ends[-1] is + // interpreted to mean zero. + Ends []int + + font *Font + scale fixed.Int26_6 + hinting font.Hinting + hinter hinter + // phantomPoints are the co-ordinates of the synthetic phantom points + // used for hinting and bounding box calculations. + phantomPoints [4]Point + // pp1x is the X co-ordinate of the first phantom point. The '1' is + // using 1-based indexing; pp1x is almost always phantomPoints[0].X. + // TODO: eliminate this and consistently use phantomPoints[0].X. + pp1x fixed.Int26_6 + // metricsSet is whether the glyph's metrics have been set yet. For a + // compound glyph, a sub-glyph may override the outer glyph's metrics. + metricsSet bool + // tmp is a scratch buffer. + tmp []Point +} + +// Flags for decoding a glyph's contours. These flags are documented at +// http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html. +const ( + flagOnCurve = 1 << iota + flagXShortVector + flagYShortVector + flagRepeat + flagPositiveXShortVector + flagPositiveYShortVector + + // The remaining flags are for internal use. + flagTouchedX + flagTouchedY +) + +// The same flag bits (0x10 and 0x20) are overloaded to have two meanings, +// dependent on the value of the flag{X,Y}ShortVector bits. +const ( + flagThisXIsSame = flagPositiveXShortVector + flagThisYIsSame = flagPositiveYShortVector +) + +// Load loads a glyph's contours from a Font, overwriting any previously loaded +// contours for this GlyphBuf. scale is the number of 26.6 fixed point units in +// 1 em, i is the glyph index, and h is the hinting policy. +func (g *GlyphBuf) Load(f *Font, scale fixed.Int26_6, i Index, h font.Hinting) error { + g.Points = g.Points[:0] + g.Unhinted = g.Unhinted[:0] + g.InFontUnits = g.InFontUnits[:0] + g.Ends = g.Ends[:0] + g.font = f + g.hinting = h + g.scale = scale + g.pp1x = 0 + g.phantomPoints = [4]Point{} + g.metricsSet = false + + if h != font.HintingNone { + if err := g.hinter.init(f, scale); err != nil { + return err + } + } + if err := g.load(0, i, true); err != nil { + return err + } + // TODO: this selection of either g.pp1x or g.phantomPoints[0].X isn't ideal, + // and should be cleaned up once we have all the testScaling tests passing, + // plus additional tests for Freetype-Go's bounding boxes matching C Freetype's. + pp1x := g.pp1x + if h != font.HintingNone { + pp1x = g.phantomPoints[0].X + } + if pp1x != 0 { + for i := range g.Points { + g.Points[i].X -= pp1x + } + } + + advanceWidth := g.phantomPoints[1].X - g.phantomPoints[0].X + if h != font.HintingNone { + if len(f.hdmx) >= 8 { + if n := u32(f.hdmx, 4); n > 3+uint32(i) { + for hdmx := f.hdmx[8:]; uint32(len(hdmx)) >= n; hdmx = hdmx[n:] { + if fixed.Int26_6(hdmx[0]) == scale>>6 { + advanceWidth = fixed.Int26_6(hdmx[2+i]) << 6 + break + } + } + } + } + advanceWidth = (advanceWidth + 32) &^ 63 + } + g.AdvanceWidth = advanceWidth + + // Set g.Bounds to the 'control box', which is the bounding box of the + // Bézier curves' control points. This is easier to calculate, no smaller + // than and often equal to the tightest possible bounding box of the curves + // themselves. This approach is what C Freetype does. We can't just scale + // the nominal bounding box in the glyf data as the hinting process and + // phantom point adjustment may move points outside of that box. + if len(g.Points) == 0 { + g.Bounds = fixed.Rectangle26_6{} + } else { + p := g.Points[0] + g.Bounds.Min.X = p.X + g.Bounds.Max.X = p.X + g.Bounds.Min.Y = p.Y + g.Bounds.Max.Y = p.Y + for _, p := range g.Points[1:] { + if g.Bounds.Min.X > p.X { + g.Bounds.Min.X = p.X + } else if g.Bounds.Max.X < p.X { + g.Bounds.Max.X = p.X + } + if g.Bounds.Min.Y > p.Y { + g.Bounds.Min.Y = p.Y + } else if g.Bounds.Max.Y < p.Y { + g.Bounds.Max.Y = p.Y + } + } + // Snap the box to the grid, if hinting is on. + if h != font.HintingNone { + g.Bounds.Min.X &^= 63 + g.Bounds.Min.Y &^= 63 + g.Bounds.Max.X += 63 + g.Bounds.Max.X &^= 63 + g.Bounds.Max.Y += 63 + g.Bounds.Max.Y &^= 63 + } + } + return nil +} + +func (g *GlyphBuf) load(recursion uint32, i Index, useMyMetrics bool) (err error) { + // The recursion limit here is arbitrary, but defends against malformed glyphs. + if recursion >= 32 { + return UnsupportedError("excessive compound glyph recursion") + } + // Find the relevant slice of g.font.glyf. + var g0, g1 uint32 + if g.font.locaOffsetFormat == locaOffsetFormatShort { + g0 = 2 * uint32(u16(g.font.loca, 2*int(i))) + g1 = 2 * uint32(u16(g.font.loca, 2*int(i)+2)) + } else { + g0 = u32(g.font.loca, 4*int(i)) + g1 = u32(g.font.loca, 4*int(i)+4) + } + + // Decode the contour count and nominal bounding box, from the first + // 10 bytes of the glyf data. boundsYMin and boundsXMax, at offsets 4 + // and 6, are unused. + glyf, ne, boundsXMin, boundsYMax := []byte(nil), 0, fixed.Int26_6(0), fixed.Int26_6(0) + if g0+10 <= g1 { + glyf = g.font.glyf[g0:g1] + ne = int(int16(u16(glyf, 0))) + boundsXMin = fixed.Int26_6(int16(u16(glyf, 2))) + boundsYMax = fixed.Int26_6(int16(u16(glyf, 8))) + } + + // Create the phantom points. + uhm, pp1x := g.font.unscaledHMetric(i), fixed.Int26_6(0) + uvm := g.font.unscaledVMetric(i, boundsYMax) + g.phantomPoints = [4]Point{ + {X: boundsXMin - uhm.LeftSideBearing}, + {X: boundsXMin - uhm.LeftSideBearing + uhm.AdvanceWidth}, + {X: uhm.AdvanceWidth / 2, Y: boundsYMax + uvm.TopSideBearing}, + {X: uhm.AdvanceWidth / 2, Y: boundsYMax + uvm.TopSideBearing - uvm.AdvanceHeight}, + } + if len(glyf) == 0 { + g.addPhantomsAndScale(len(g.Points), len(g.Points), true, true) + copy(g.phantomPoints[:], g.Points[len(g.Points)-4:]) + g.Points = g.Points[:len(g.Points)-4] + // TODO: also trim g.InFontUnits and g.Unhinted? + return nil + } + + // Load and hint the contours. + if ne < 0 { + if ne != -1 { + // http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html says that + // "the values -2, -3, and so forth, are reserved for future use." + return UnsupportedError("negative number of contours") + } + pp1x = g.font.scale(g.scale * (boundsXMin - uhm.LeftSideBearing)) + if err := g.loadCompound(recursion, uhm, i, glyf, useMyMetrics); err != nil { + return err + } + } else { + np0, ne0 := len(g.Points), len(g.Ends) + program := g.loadSimple(glyf, ne) + g.addPhantomsAndScale(np0, np0, true, true) + pp1x = g.Points[len(g.Points)-4].X + if g.hinting != font.HintingNone { + if len(program) != 0 { + err := g.hinter.run( + program, + g.Points[np0:], + g.Unhinted[np0:], + g.InFontUnits[np0:], + g.Ends[ne0:], + ) + if err != nil { + return err + } + } + // Drop the four phantom points. + g.InFontUnits = g.InFontUnits[:len(g.InFontUnits)-4] + g.Unhinted = g.Unhinted[:len(g.Unhinted)-4] + } + if useMyMetrics { + copy(g.phantomPoints[:], g.Points[len(g.Points)-4:]) + } + g.Points = g.Points[:len(g.Points)-4] + if np0 != 0 { + // The hinting program expects the []Ends values to be indexed + // relative to the inner glyph, not the outer glyph, so we delay + // adding np0 until after the hinting program (if any) has run. + for i := ne0; i < len(g.Ends); i++ { + g.Ends[i] += np0 + } + } + } + if useMyMetrics && !g.metricsSet { + g.metricsSet = true + g.pp1x = pp1x + } + return nil +} + +// loadOffset is the initial offset for loadSimple and loadCompound. The first +// 10 bytes are the number of contours and the bounding box. +const loadOffset = 10 + +func (g *GlyphBuf) loadSimple(glyf []byte, ne int) (program []byte) { + offset := loadOffset + for i := 0; i < ne; i++ { + g.Ends = append(g.Ends, 1+int(u16(glyf, offset))) + offset += 2 + } + + // Note the TrueType hinting instructions. + instrLen := int(u16(glyf, offset)) + offset += 2 + program = glyf[offset : offset+instrLen] + offset += instrLen + + if ne == 0 { + return program + } + + np0 := len(g.Points) + np1 := np0 + int(g.Ends[len(g.Ends)-1]) + + // Decode the flags. + for i := np0; i < np1; { + c := uint32(glyf[offset]) + offset++ + g.Points = append(g.Points, Point{Flags: c}) + i++ + if c&flagRepeat != 0 { + count := glyf[offset] + offset++ + for ; count > 0; count-- { + g.Points = append(g.Points, Point{Flags: c}) + i++ + } + } + } + + // Decode the co-ordinates. + var x int16 + for i := np0; i < np1; i++ { + f := g.Points[i].Flags + if f&flagXShortVector != 0 { + dx := int16(glyf[offset]) + offset++ + if f&flagPositiveXShortVector == 0 { + x -= dx + } else { + x += dx + } + } else if f&flagThisXIsSame == 0 { + x += int16(u16(glyf, offset)) + offset += 2 + } + g.Points[i].X = fixed.Int26_6(x) + } + var y int16 + for i := np0; i < np1; i++ { + f := g.Points[i].Flags + if f&flagYShortVector != 0 { + dy := int16(glyf[offset]) + offset++ + if f&flagPositiveYShortVector == 0 { + y -= dy + } else { + y += dy + } + } else if f&flagThisYIsSame == 0 { + y += int16(u16(glyf, offset)) + offset += 2 + } + g.Points[i].Y = fixed.Int26_6(y) + } + + return program +} + +func (g *GlyphBuf) loadCompound(recursion uint32, uhm HMetric, i Index, + glyf []byte, useMyMetrics bool) error { + + // Flags for decoding a compound glyph. These flags are documented at + // http://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html. + const ( + flagArg1And2AreWords = 1 << iota + flagArgsAreXYValues + flagRoundXYToGrid + flagWeHaveAScale + flagUnused + flagMoreComponents + flagWeHaveAnXAndYScale + flagWeHaveATwoByTwo + flagWeHaveInstructions + flagUseMyMetrics + flagOverlapCompound + ) + np0, ne0 := len(g.Points), len(g.Ends) + offset := loadOffset + for { + flags := u16(glyf, offset) + component := Index(u16(glyf, offset+2)) + dx, dy, transform, hasTransform := fixed.Int26_6(0), fixed.Int26_6(0), [4]int16{}, false + if flags&flagArg1And2AreWords != 0 { + dx = fixed.Int26_6(int16(u16(glyf, offset+4))) + dy = fixed.Int26_6(int16(u16(glyf, offset+6))) + offset += 8 + } else { + dx = fixed.Int26_6(int16(int8(glyf[offset+4]))) + dy = fixed.Int26_6(int16(int8(glyf[offset+5]))) + offset += 6 + } + if flags&flagArgsAreXYValues == 0 { + return UnsupportedError("compound glyph transform vector") + } + if flags&(flagWeHaveAScale|flagWeHaveAnXAndYScale|flagWeHaveATwoByTwo) != 0 { + hasTransform = true + switch { + case flags&flagWeHaveAScale != 0: + transform[0] = int16(u16(glyf, offset+0)) + transform[3] = transform[0] + offset += 2 + case flags&flagWeHaveAnXAndYScale != 0: + transform[0] = int16(u16(glyf, offset+0)) + transform[3] = int16(u16(glyf, offset+2)) + offset += 4 + case flags&flagWeHaveATwoByTwo != 0: + transform[0] = int16(u16(glyf, offset+0)) + transform[1] = int16(u16(glyf, offset+2)) + transform[2] = int16(u16(glyf, offset+4)) + transform[3] = int16(u16(glyf, offset+6)) + offset += 8 + } + } + savedPP := g.phantomPoints + np0 := len(g.Points) + componentUMM := useMyMetrics && (flags&flagUseMyMetrics != 0) + if err := g.load(recursion+1, component, componentUMM); err != nil { + return err + } + if flags&flagUseMyMetrics == 0 { + g.phantomPoints = savedPP + } + if hasTransform { + for j := np0; j < len(g.Points); j++ { + p := &g.Points[j] + newX := 0 + + fixed.Int26_6((int64(p.X)*int64(transform[0])+1<<13)>>14) + + fixed.Int26_6((int64(p.Y)*int64(transform[2])+1<<13)>>14) + newY := 0 + + fixed.Int26_6((int64(p.X)*int64(transform[1])+1<<13)>>14) + + fixed.Int26_6((int64(p.Y)*int64(transform[3])+1<<13)>>14) + p.X, p.Y = newX, newY + } + } + dx = g.font.scale(g.scale * dx) + dy = g.font.scale(g.scale * dy) + if flags&flagRoundXYToGrid != 0 { + dx = (dx + 32) &^ 63 + dy = (dy + 32) &^ 63 + } + for j := np0; j < len(g.Points); j++ { + p := &g.Points[j] + p.X += dx + p.Y += dy + } + // TODO: also adjust g.InFontUnits and g.Unhinted? + if flags&flagMoreComponents == 0 { + break + } + } + + instrLen := 0 + if g.hinting != font.HintingNone && offset+2 <= len(glyf) { + instrLen = int(u16(glyf, offset)) + offset += 2 + } + + g.addPhantomsAndScale(np0, len(g.Points), false, instrLen > 0) + points, ends := g.Points[np0:], g.Ends[ne0:] + g.Points = g.Points[:len(g.Points)-4] + for j := range points { + points[j].Flags &^= flagTouchedX | flagTouchedY + } + + if instrLen == 0 { + if !g.metricsSet { + copy(g.phantomPoints[:], points[len(points)-4:]) + } + return nil + } + + // Hint the compound glyph. + program := glyf[offset : offset+instrLen] + // Temporarily adjust the ends to be relative to this compound glyph. + if np0 != 0 { + for i := range ends { + ends[i] -= np0 + } + } + // Hinting instructions of a composite glyph completely refer to the + // (already) hinted subglyphs. + g.tmp = append(g.tmp[:0], points...) + if err := g.hinter.run(program, points, g.tmp, g.tmp, ends); err != nil { + return err + } + if np0 != 0 { + for i := range ends { + ends[i] += np0 + } + } + if !g.metricsSet { + copy(g.phantomPoints[:], points[len(points)-4:]) + } + return nil +} + +func (g *GlyphBuf) addPhantomsAndScale(np0, np1 int, simple, adjust bool) { + // Add the four phantom points. + g.Points = append(g.Points, g.phantomPoints[:]...) + // Scale the points. + if simple && g.hinting != font.HintingNone { + g.InFontUnits = append(g.InFontUnits, g.Points[np1:]...) + } + for i := np1; i < len(g.Points); i++ { + p := &g.Points[i] + p.X = g.font.scale(g.scale * p.X) + p.Y = g.font.scale(g.scale * p.Y) + } + if g.hinting == font.HintingNone { + return + } + // Round the 1st phantom point to the grid, shifting all other points equally. + // Note that "all other points" starts from np0, not np1. + // TODO: delete this adjustment and the np0/np1 distinction, when + // we update the compatibility tests to C Freetype 2.5.3. + // See http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=05c786d990390a7ca18e62962641dac740bacb06 + if adjust { + pp1x := g.Points[len(g.Points)-4].X + if dx := ((pp1x + 32) &^ 63) - pp1x; dx != 0 { + for i := np0; i < len(g.Points); i++ { + g.Points[i].X += dx + } + } + } + if simple { + g.Unhinted = append(g.Unhinted, g.Points[np1:]...) + } + // Round the 2nd and 4th phantom point to the grid. + p := &g.Points[len(g.Points)-3] + p.X = (p.X + 32) &^ 63 + p = &g.Points[len(g.Points)-1] + p.Y = (p.Y + 32) &^ 63 +} diff --git a/src/server/vendor/github.com/golang/freetype/truetype/hint.go b/src/server/vendor/github.com/golang/freetype/truetype/hint.go new file mode 100644 index 00000000..13f785bc --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/truetype/hint.go @@ -0,0 +1,1770 @@ +// Copyright 2012 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package truetype + +// This file implements a Truetype bytecode interpreter. +// The opcodes are described at https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html + +import ( + "errors" + "math" + + "golang.org/x/image/math/fixed" +) + +const ( + twilightZone = 0 + glyphZone = 1 + numZone = 2 +) + +type pointType uint32 + +const ( + current pointType = 0 + unhinted pointType = 1 + inFontUnits pointType = 2 + numPointType = 3 +) + +// callStackEntry is a bytecode call stack entry. +type callStackEntry struct { + program []byte + pc int + loopCount int32 +} + +// hinter implements bytecode hinting. A hinter can be re-used to hint a series +// of glyphs from a Font. +type hinter struct { + stack, store []int32 + + // functions is a map from function number to bytecode. + functions map[int32][]byte + + // font and scale are the font and scale last used for this hinter. + // Changing the font will require running the new font's fpgm bytecode. + // Changing either will require running the font's prep bytecode. + font *Font + scale fixed.Int26_6 + + // gs and defaultGS are the current and default graphics state. The + // default graphics state is the global default graphics state after + // the font's fpgm and prep programs have been run. + gs, defaultGS graphicsState + + // points and ends are the twilight zone's points, glyph's points + // and glyph's contour boundaries. + points [numZone][numPointType][]Point + ends []int + + // scaledCVT is the lazily initialized scaled Control Value Table. + scaledCVTInitialized bool + scaledCVT []fixed.Int26_6 +} + +// graphicsState is described at https://developer.apple.com/fonts/TTRefMan/RM04/Chap4.html +type graphicsState struct { + // Projection vector, freedom vector and dual projection vector. + pv, fv, dv [2]f2dot14 + // Reference points and zone pointers. + rp, zp [3]int32 + // Control Value / Single Width Cut-In. + controlValueCutIn, singleWidthCutIn, singleWidth fixed.Int26_6 + // Delta base / shift. + deltaBase, deltaShift int32 + // Minimum distance. + minDist fixed.Int26_6 + // Loop count. + loop int32 + // Rounding policy. + roundPeriod, roundPhase, roundThreshold fixed.Int26_6 + roundSuper45 bool + // Auto-flip. + autoFlip bool +} + +var globalDefaultGS = graphicsState{ + pv: [2]f2dot14{0x4000, 0}, // Unit vector along the X axis. + fv: [2]f2dot14{0x4000, 0}, + dv: [2]f2dot14{0x4000, 0}, + zp: [3]int32{1, 1, 1}, + controlValueCutIn: (17 << 6) / 16, // 17/16 as a fixed.Int26_6. + deltaBase: 9, + deltaShift: 3, + minDist: 1 << 6, // 1 as a fixed.Int26_6. + loop: 1, + roundPeriod: 1 << 6, // 1 as a fixed.Int26_6. + roundThreshold: 1 << 5, // 1/2 as a fixed.Int26_6. + roundSuper45: false, + autoFlip: true, +} + +func resetTwilightPoints(f *Font, p []Point) []Point { + if n := int(f.maxTwilightPoints) + 4; n <= cap(p) { + p = p[:n] + for i := range p { + p[i] = Point{} + } + } else { + p = make([]Point, n) + } + return p +} + +func (h *hinter) init(f *Font, scale fixed.Int26_6) error { + h.points[twilightZone][0] = resetTwilightPoints(f, h.points[twilightZone][0]) + h.points[twilightZone][1] = resetTwilightPoints(f, h.points[twilightZone][1]) + h.points[twilightZone][2] = resetTwilightPoints(f, h.points[twilightZone][2]) + + rescale := h.scale != scale + if h.font != f { + h.font, rescale = f, true + if h.functions == nil { + h.functions = make(map[int32][]byte) + } else { + for k := range h.functions { + delete(h.functions, k) + } + } + + if x := int(f.maxStackElements); x > len(h.stack) { + x += 255 + x &^= 255 + h.stack = make([]int32, x) + } + if x := int(f.maxStorage); x > len(h.store) { + x += 15 + x &^= 15 + h.store = make([]int32, x) + } + if len(f.fpgm) != 0 { + if err := h.run(f.fpgm, nil, nil, nil, nil); err != nil { + return err + } + } + } + + if rescale { + h.scale = scale + h.scaledCVTInitialized = false + + h.defaultGS = globalDefaultGS + + if len(f.prep) != 0 { + if err := h.run(f.prep, nil, nil, nil, nil); err != nil { + return err + } + h.defaultGS = h.gs + // The MS rasterizer doesn't allow the following graphics state + // variables to be modified by the CVT program. + h.defaultGS.pv = globalDefaultGS.pv + h.defaultGS.fv = globalDefaultGS.fv + h.defaultGS.dv = globalDefaultGS.dv + h.defaultGS.rp = globalDefaultGS.rp + h.defaultGS.zp = globalDefaultGS.zp + h.defaultGS.loop = globalDefaultGS.loop + } + } + return nil +} + +func (h *hinter) run(program []byte, pCurrent, pUnhinted, pInFontUnits []Point, ends []int) error { + h.gs = h.defaultGS + h.points[glyphZone][current] = pCurrent + h.points[glyphZone][unhinted] = pUnhinted + h.points[glyphZone][inFontUnits] = pInFontUnits + h.ends = ends + + if len(program) > 50000 { + return errors.New("truetype: hinting: too many instructions") + } + var ( + steps, pc, top int + opcode uint8 + + callStack [32]callStackEntry + callStackTop int + ) + + for 0 <= pc && pc < len(program) { + steps++ + if steps == 100000 { + return errors.New("truetype: hinting: too many steps") + } + opcode = program[pc] + if top < int(popCount[opcode]) { + return errors.New("truetype: hinting: stack underflow") + } + switch opcode { + + case opSVTCA0: + h.gs.pv = [2]f2dot14{0, 0x4000} + h.gs.fv = [2]f2dot14{0, 0x4000} + h.gs.dv = [2]f2dot14{0, 0x4000} + + case opSVTCA1: + h.gs.pv = [2]f2dot14{0x4000, 0} + h.gs.fv = [2]f2dot14{0x4000, 0} + h.gs.dv = [2]f2dot14{0x4000, 0} + + case opSPVTCA0: + h.gs.pv = [2]f2dot14{0, 0x4000} + h.gs.dv = [2]f2dot14{0, 0x4000} + + case opSPVTCA1: + h.gs.pv = [2]f2dot14{0x4000, 0} + h.gs.dv = [2]f2dot14{0x4000, 0} + + case opSFVTCA0: + h.gs.fv = [2]f2dot14{0, 0x4000} + + case opSFVTCA1: + h.gs.fv = [2]f2dot14{0x4000, 0} + + case opSPVTL0, opSPVTL1, opSFVTL0, opSFVTL1: + top -= 2 + p1 := h.point(0, current, h.stack[top+0]) + p2 := h.point(0, current, h.stack[top+1]) + if p1 == nil || p2 == nil { + return errors.New("truetype: hinting: point out of range") + } + dx := f2dot14(p1.X - p2.X) + dy := f2dot14(p1.Y - p2.Y) + if dx == 0 && dy == 0 { + dx = 0x4000 + } else if opcode&1 != 0 { + // Counter-clockwise rotation. + dx, dy = -dy, dx + } + v := normalize(dx, dy) + if opcode < opSFVTL0 { + h.gs.pv = v + h.gs.dv = v + } else { + h.gs.fv = v + } + + case opSPVFS: + top -= 2 + h.gs.pv = normalize(f2dot14(h.stack[top]), f2dot14(h.stack[top+1])) + h.gs.dv = h.gs.pv + + case opSFVFS: + top -= 2 + h.gs.fv = normalize(f2dot14(h.stack[top]), f2dot14(h.stack[top+1])) + + case opGPV: + if top+1 >= len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + h.stack[top+0] = int32(h.gs.pv[0]) + h.stack[top+1] = int32(h.gs.pv[1]) + top += 2 + + case opGFV: + if top+1 >= len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + h.stack[top+0] = int32(h.gs.fv[0]) + h.stack[top+1] = int32(h.gs.fv[1]) + top += 2 + + case opSFVTPV: + h.gs.fv = h.gs.pv + + case opISECT: + top -= 5 + p := h.point(2, current, h.stack[top+0]) + a0 := h.point(1, current, h.stack[top+1]) + a1 := h.point(1, current, h.stack[top+2]) + b0 := h.point(0, current, h.stack[top+3]) + b1 := h.point(0, current, h.stack[top+4]) + if p == nil || a0 == nil || a1 == nil || b0 == nil || b1 == nil { + return errors.New("truetype: hinting: point out of range") + } + + dbx := b1.X - b0.X + dby := b1.Y - b0.Y + dax := a1.X - a0.X + day := a1.Y - a0.Y + dx := b0.X - a0.X + dy := b0.Y - a0.Y + discriminant := mulDiv(int64(dax), int64(-dby), 0x40) + + mulDiv(int64(day), int64(dbx), 0x40) + dotProduct := mulDiv(int64(dax), int64(dbx), 0x40) + + mulDiv(int64(day), int64(dby), 0x40) + // The discriminant above is actually a cross product of vectors + // da and db. Together with the dot product, they can be used as + // surrogates for sine and cosine of the angle between the vectors. + // Indeed, + // dotproduct = |da||db|cos(angle) + // discriminant = |da||db|sin(angle) + // We use these equations to reject grazing intersections by + // thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. + absDisc, absDotP := discriminant, dotProduct + if absDisc < 0 { + absDisc = -absDisc + } + if absDotP < 0 { + absDotP = -absDotP + } + if 19*absDisc > absDotP { + val := mulDiv(int64(dx), int64(-dby), 0x40) + + mulDiv(int64(dy), int64(dbx), 0x40) + rx := mulDiv(val, int64(dax), discriminant) + ry := mulDiv(val, int64(day), discriminant) + p.X = a0.X + fixed.Int26_6(rx) + p.Y = a0.Y + fixed.Int26_6(ry) + } else { + p.X = (a0.X + a1.X + b0.X + b1.X) / 4 + p.Y = (a0.Y + a1.Y + b0.Y + b1.Y) / 4 + } + p.Flags |= flagTouchedX | flagTouchedY + + case opSRP0, opSRP1, opSRP2: + top-- + h.gs.rp[opcode-opSRP0] = h.stack[top] + + case opSZP0, opSZP1, opSZP2: + top-- + h.gs.zp[opcode-opSZP0] = h.stack[top] + + case opSZPS: + top-- + h.gs.zp[0] = h.stack[top] + h.gs.zp[1] = h.stack[top] + h.gs.zp[2] = h.stack[top] + + case opSLOOP: + top-- + // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#SLOOP + // says that "Setting the loop variable to zero is an error". In + // theory, the inequality on the next line should be "<=" instead + // of "<". In practice, some font files' bytecode, such as the '2' + // glyph in the DejaVuSansMono.ttf that comes with Ubuntu 14.04, + // issue SLOOP with a zero on top of the stack. Just like the C + // Freetype code, we allow the zero. + if h.stack[top] < 0 { + return errors.New("truetype: hinting: invalid data") + } + h.gs.loop = h.stack[top] + + case opRTG: + h.gs.roundPeriod = 1 << 6 + h.gs.roundPhase = 0 + h.gs.roundThreshold = 1 << 5 + h.gs.roundSuper45 = false + + case opRTHG: + h.gs.roundPeriod = 1 << 6 + h.gs.roundPhase = 1 << 5 + h.gs.roundThreshold = 1 << 5 + h.gs.roundSuper45 = false + + case opSMD: + top-- + h.gs.minDist = fixed.Int26_6(h.stack[top]) + + case opELSE: + opcode = 1 + goto ifelse + + case opJMPR: + top-- + pc += int(h.stack[top]) + continue + + case opSCVTCI: + top-- + h.gs.controlValueCutIn = fixed.Int26_6(h.stack[top]) + + case opSSWCI: + top-- + h.gs.singleWidthCutIn = fixed.Int26_6(h.stack[top]) + + case opSSW: + top-- + h.gs.singleWidth = h.font.scale(h.scale * fixed.Int26_6(h.stack[top])) + + case opDUP: + if top >= len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + h.stack[top] = h.stack[top-1] + top++ + + case opPOP: + top-- + + case opCLEAR: + top = 0 + + case opSWAP: + h.stack[top-1], h.stack[top-2] = h.stack[top-2], h.stack[top-1] + + case opDEPTH: + if top >= len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + h.stack[top] = int32(top) + top++ + + case opCINDEX, opMINDEX: + x := int(h.stack[top-1]) + if x <= 0 || x >= top { + return errors.New("truetype: hinting: invalid data") + } + h.stack[top-1] = h.stack[top-1-x] + if opcode == opMINDEX { + copy(h.stack[top-1-x:top-1], h.stack[top-x:top]) + top-- + } + + case opALIGNPTS: + top -= 2 + p := h.point(1, current, h.stack[top]) + q := h.point(0, current, h.stack[top+1]) + if p == nil || q == nil { + return errors.New("truetype: hinting: point out of range") + } + d := dotProduct(fixed.Int26_6(q.X-p.X), fixed.Int26_6(q.Y-p.Y), h.gs.pv) / 2 + h.move(p, +d, true) + h.move(q, -d, true) + + case opUTP: + top-- + p := h.point(0, current, h.stack[top]) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + p.Flags &^= flagTouchedX | flagTouchedY + + case opLOOPCALL, opCALL: + if callStackTop >= len(callStack) { + return errors.New("truetype: hinting: call stack overflow") + } + top-- + f, ok := h.functions[h.stack[top]] + if !ok { + return errors.New("truetype: hinting: undefined function") + } + callStack[callStackTop] = callStackEntry{program, pc, 1} + if opcode == opLOOPCALL { + top-- + if h.stack[top] == 0 { + break + } + callStack[callStackTop].loopCount = h.stack[top] + } + callStackTop++ + program, pc = f, 0 + continue + + case opFDEF: + // Save all bytecode up until the next ENDF. + startPC := pc + 1 + fdefloop: + for { + pc++ + if pc >= len(program) { + return errors.New("truetype: hinting: unbalanced FDEF") + } + switch program[pc] { + case opFDEF: + return errors.New("truetype: hinting: nested FDEF") + case opENDF: + top-- + h.functions[h.stack[top]] = program[startPC : pc+1] + break fdefloop + default: + var ok bool + pc, ok = skipInstructionPayload(program, pc) + if !ok { + return errors.New("truetype: hinting: unbalanced FDEF") + } + } + } + + case opENDF: + if callStackTop == 0 { + return errors.New("truetype: hinting: call stack underflow") + } + callStackTop-- + callStack[callStackTop].loopCount-- + if callStack[callStackTop].loopCount != 0 { + callStackTop++ + pc = 0 + continue + } + program, pc = callStack[callStackTop].program, callStack[callStackTop].pc + + case opMDAP0, opMDAP1: + top-- + i := h.stack[top] + p := h.point(0, current, i) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + distance := fixed.Int26_6(0) + if opcode == opMDAP1 { + distance = dotProduct(p.X, p.Y, h.gs.pv) + // TODO: metrics compensation. + distance = h.round(distance) - distance + } + h.move(p, distance, true) + h.gs.rp[0] = i + h.gs.rp[1] = i + + case opIUP0, opIUP1: + iupY, mask := opcode == opIUP0, uint32(flagTouchedX) + if iupY { + mask = flagTouchedY + } + prevEnd := 0 + for _, end := range h.ends { + for i := prevEnd; i < end; i++ { + for i < end && h.points[glyphZone][current][i].Flags&mask == 0 { + i++ + } + if i == end { + break + } + firstTouched, curTouched := i, i + i++ + for ; i < end; i++ { + if h.points[glyphZone][current][i].Flags&mask != 0 { + h.iupInterp(iupY, curTouched+1, i-1, curTouched, i) + curTouched = i + } + } + if curTouched == firstTouched { + h.iupShift(iupY, prevEnd, end, curTouched) + } else { + h.iupInterp(iupY, curTouched+1, end-1, curTouched, firstTouched) + if firstTouched > 0 { + h.iupInterp(iupY, prevEnd, firstTouched-1, curTouched, firstTouched) + } + } + } + prevEnd = end + } + + case opSHP0, opSHP1: + if top < int(h.gs.loop) { + return errors.New("truetype: hinting: stack underflow") + } + _, _, d, ok := h.displacement(opcode&1 == 0) + if !ok { + return errors.New("truetype: hinting: point out of range") + } + for ; h.gs.loop != 0; h.gs.loop-- { + top-- + p := h.point(2, current, h.stack[top]) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + h.move(p, d, true) + } + h.gs.loop = 1 + + case opSHC0, opSHC1: + top-- + zonePointer, i, d, ok := h.displacement(opcode&1 == 0) + if !ok { + return errors.New("truetype: hinting: point out of range") + } + if h.gs.zp[2] == 0 { + // TODO: implement this when we have a glyph that does this. + return errors.New("hinting: unimplemented SHC instruction") + } + contour := h.stack[top] + if contour < 0 || len(ends) <= int(contour) { + return errors.New("truetype: hinting: contour out of range") + } + j0, j1 := int32(0), int32(h.ends[contour]) + if contour > 0 { + j0 = int32(h.ends[contour-1]) + } + move := h.gs.zp[zonePointer] != h.gs.zp[2] + for j := j0; j < j1; j++ { + if move || j != i { + h.move(h.point(2, current, j), d, true) + } + } + + case opSHZ0, opSHZ1: + top-- + zonePointer, i, d, ok := h.displacement(opcode&1 == 0) + if !ok { + return errors.New("truetype: hinting: point out of range") + } + + // As per C Freetype, SHZ doesn't move the phantom points, or mark + // the points as touched. + limit := int32(len(h.points[h.gs.zp[2]][current])) + if h.gs.zp[2] == glyphZone { + limit -= 4 + } + for j := int32(0); j < limit; j++ { + if i != j || h.gs.zp[zonePointer] != h.gs.zp[2] { + h.move(h.point(2, current, j), d, false) + } + } + + case opSHPIX: + top-- + d := fixed.Int26_6(h.stack[top]) + if top < int(h.gs.loop) { + return errors.New("truetype: hinting: stack underflow") + } + for ; h.gs.loop != 0; h.gs.loop-- { + top-- + p := h.point(2, current, h.stack[top]) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + h.move(p, d, true) + } + h.gs.loop = 1 + + case opIP: + if top < int(h.gs.loop) { + return errors.New("truetype: hinting: stack underflow") + } + pointType := inFontUnits + twilight := h.gs.zp[0] == 0 || h.gs.zp[1] == 0 || h.gs.zp[2] == 0 + if twilight { + pointType = unhinted + } + p := h.point(1, pointType, h.gs.rp[2]) + oldP := h.point(0, pointType, h.gs.rp[1]) + oldRange := dotProduct(p.X-oldP.X, p.Y-oldP.Y, h.gs.dv) + + p = h.point(1, current, h.gs.rp[2]) + curP := h.point(0, current, h.gs.rp[1]) + curRange := dotProduct(p.X-curP.X, p.Y-curP.Y, h.gs.pv) + for ; h.gs.loop != 0; h.gs.loop-- { + top-- + i := h.stack[top] + p = h.point(2, pointType, i) + oldDist := dotProduct(p.X-oldP.X, p.Y-oldP.Y, h.gs.dv) + p = h.point(2, current, i) + curDist := dotProduct(p.X-curP.X, p.Y-curP.Y, h.gs.pv) + newDist := fixed.Int26_6(0) + if oldDist != 0 { + if oldRange != 0 { + newDist = fixed.Int26_6(mulDiv(int64(oldDist), int64(curRange), int64(oldRange))) + } else { + newDist = -oldDist + } + } + h.move(p, newDist-curDist, true) + } + h.gs.loop = 1 + + case opMSIRP0, opMSIRP1: + top -= 2 + i := h.stack[top] + distance := fixed.Int26_6(h.stack[top+1]) + + // TODO: special case h.gs.zp[1] == 0 in C Freetype. + ref := h.point(0, current, h.gs.rp[0]) + p := h.point(1, current, i) + if ref == nil || p == nil { + return errors.New("truetype: hinting: point out of range") + } + curDist := dotProduct(p.X-ref.X, p.Y-ref.Y, h.gs.pv) + + // Set-RP0 bit. + if opcode == opMSIRP1 { + h.gs.rp[0] = i + } + h.gs.rp[1] = h.gs.rp[0] + h.gs.rp[2] = i + + // Move the point. + h.move(p, distance-curDist, true) + + case opALIGNRP: + if top < int(h.gs.loop) { + return errors.New("truetype: hinting: stack underflow") + } + ref := h.point(0, current, h.gs.rp[0]) + if ref == nil { + return errors.New("truetype: hinting: point out of range") + } + for ; h.gs.loop != 0; h.gs.loop-- { + top-- + p := h.point(1, current, h.stack[top]) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + h.move(p, -dotProduct(p.X-ref.X, p.Y-ref.Y, h.gs.pv), true) + } + h.gs.loop = 1 + + case opRTDG: + h.gs.roundPeriod = 1 << 5 + h.gs.roundPhase = 0 + h.gs.roundThreshold = 1 << 4 + h.gs.roundSuper45 = false + + case opMIAP0, opMIAP1: + top -= 2 + i := h.stack[top] + distance := h.getScaledCVT(h.stack[top+1]) + if h.gs.zp[0] == 0 { + p := h.point(0, unhinted, i) + q := h.point(0, current, i) + p.X = fixed.Int26_6((int64(distance) * int64(h.gs.fv[0])) >> 14) + p.Y = fixed.Int26_6((int64(distance) * int64(h.gs.fv[1])) >> 14) + *q = *p + } + p := h.point(0, current, i) + oldDist := dotProduct(p.X, p.Y, h.gs.pv) + if opcode == opMIAP1 { + if fabs(distance-oldDist) > h.gs.controlValueCutIn { + distance = oldDist + } + // TODO: metrics compensation. + distance = h.round(distance) + } + h.move(p, distance-oldDist, true) + h.gs.rp[0] = i + h.gs.rp[1] = i + + case opNPUSHB: + opcode = 0 + goto push + + case opNPUSHW: + opcode = 0x80 + goto push + + case opWS: + top -= 2 + i := int(h.stack[top]) + if i < 0 || len(h.store) <= i { + return errors.New("truetype: hinting: invalid data") + } + h.store[i] = h.stack[top+1] + + case opRS: + i := int(h.stack[top-1]) + if i < 0 || len(h.store) <= i { + return errors.New("truetype: hinting: invalid data") + } + h.stack[top-1] = h.store[i] + + case opWCVTP: + top -= 2 + h.setScaledCVT(h.stack[top], fixed.Int26_6(h.stack[top+1])) + + case opRCVT: + h.stack[top-1] = int32(h.getScaledCVT(h.stack[top-1])) + + case opGC0, opGC1: + i := h.stack[top-1] + if opcode == opGC0 { + p := h.point(2, current, i) + h.stack[top-1] = int32(dotProduct(p.X, p.Y, h.gs.pv)) + } else { + p := h.point(2, unhinted, i) + // Using dv as per C Freetype. + h.stack[top-1] = int32(dotProduct(p.X, p.Y, h.gs.dv)) + } + + case opSCFS: + top -= 2 + i := h.stack[top] + p := h.point(2, current, i) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + c := dotProduct(p.X, p.Y, h.gs.pv) + h.move(p, fixed.Int26_6(h.stack[top+1])-c, true) + if h.gs.zp[2] != 0 { + break + } + q := h.point(2, unhinted, i) + if q == nil { + return errors.New("truetype: hinting: point out of range") + } + q.X = p.X + q.Y = p.Y + + case opMD0, opMD1: + top-- + pt, v, scale := pointType(0), [2]f2dot14{}, false + if opcode == opMD0 { + pt = current + v = h.gs.pv + } else if h.gs.zp[0] == 0 || h.gs.zp[1] == 0 { + pt = unhinted + v = h.gs.dv + } else { + pt = inFontUnits + v = h.gs.dv + scale = true + } + p := h.point(0, pt, h.stack[top-1]) + q := h.point(1, pt, h.stack[top]) + if p == nil || q == nil { + return errors.New("truetype: hinting: point out of range") + } + d := int32(dotProduct(p.X-q.X, p.Y-q.Y, v)) + if scale { + d = int32(int64(d*int32(h.scale)) / int64(h.font.fUnitsPerEm)) + } + h.stack[top-1] = d + + case opMPPEM, opMPS: + if top >= len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + // For MPS, point size should be irrelevant; we return the PPEM. + h.stack[top] = int32(h.scale) >> 6 + top++ + + case opFLIPON, opFLIPOFF: + h.gs.autoFlip = opcode == opFLIPON + + case opDEBUG: + // No-op. + + case opLT: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] < h.stack[top]) + + case opLTEQ: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] <= h.stack[top]) + + case opGT: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] > h.stack[top]) + + case opGTEQ: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] >= h.stack[top]) + + case opEQ: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] == h.stack[top]) + + case opNEQ: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] != h.stack[top]) + + case opODD, opEVEN: + i := h.round(fixed.Int26_6(h.stack[top-1])) >> 6 + h.stack[top-1] = int32(i&1) ^ int32(opcode-opODD) + + case opIF: + top-- + if h.stack[top] == 0 { + opcode = 0 + goto ifelse + } + + case opEIF: + // No-op. + + case opAND: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1] != 0 && h.stack[top] != 0) + + case opOR: + top-- + h.stack[top-1] = bool2int32(h.stack[top-1]|h.stack[top] != 0) + + case opNOT: + h.stack[top-1] = bool2int32(h.stack[top-1] == 0) + + case opDELTAP1: + goto delta + + case opSDB: + top-- + h.gs.deltaBase = h.stack[top] + + case opSDS: + top-- + h.gs.deltaShift = h.stack[top] + + case opADD: + top-- + h.stack[top-1] += h.stack[top] + + case opSUB: + top-- + h.stack[top-1] -= h.stack[top] + + case opDIV: + top-- + if h.stack[top] == 0 { + return errors.New("truetype: hinting: division by zero") + } + h.stack[top-1] = int32(fdiv(fixed.Int26_6(h.stack[top-1]), fixed.Int26_6(h.stack[top]))) + + case opMUL: + top-- + h.stack[top-1] = int32(fmul(fixed.Int26_6(h.stack[top-1]), fixed.Int26_6(h.stack[top]))) + + case opABS: + if h.stack[top-1] < 0 { + h.stack[top-1] = -h.stack[top-1] + } + + case opNEG: + h.stack[top-1] = -h.stack[top-1] + + case opFLOOR: + h.stack[top-1] &^= 63 + + case opCEILING: + h.stack[top-1] += 63 + h.stack[top-1] &^= 63 + + case opROUND00, opROUND01, opROUND10, opROUND11: + // The four flavors of opROUND are equivalent. See the comment below on + // opNROUND for the rationale. + h.stack[top-1] = int32(h.round(fixed.Int26_6(h.stack[top-1]))) + + case opNROUND00, opNROUND01, opNROUND10, opNROUND11: + // No-op. The spec says to add one of four "compensations for the engine + // characteristics", to cater for things like "different dot-size printers". + // https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#engine_compensation + // This code does not implement engine compensation, as we don't expect to + // be used to output on dot-matrix printers. + + case opWCVTF: + top -= 2 + h.setScaledCVT(h.stack[top], h.font.scale(h.scale*fixed.Int26_6(h.stack[top+1]))) + + case opDELTAP2, opDELTAP3, opDELTAC1, opDELTAC2, opDELTAC3: + goto delta + + case opSROUND, opS45ROUND: + top-- + switch (h.stack[top] >> 6) & 0x03 { + case 0: + h.gs.roundPeriod = 1 << 5 + case 1, 3: + h.gs.roundPeriod = 1 << 6 + case 2: + h.gs.roundPeriod = 1 << 7 + } + h.gs.roundSuper45 = opcode == opS45ROUND + if h.gs.roundSuper45 { + // The spec says to multiply by √2, but the C Freetype code says 1/√2. + // We go with 1/√2. + h.gs.roundPeriod *= 46341 + h.gs.roundPeriod /= 65536 + } + h.gs.roundPhase = h.gs.roundPeriod * fixed.Int26_6((h.stack[top]>>4)&0x03) / 4 + if x := h.stack[top] & 0x0f; x != 0 { + h.gs.roundThreshold = h.gs.roundPeriod * fixed.Int26_6(x-4) / 8 + } else { + h.gs.roundThreshold = h.gs.roundPeriod - 1 + } + + case opJROT: + top -= 2 + if h.stack[top+1] != 0 { + pc += int(h.stack[top]) + continue + } + + case opJROF: + top -= 2 + if h.stack[top+1] == 0 { + pc += int(h.stack[top]) + continue + } + + case opROFF: + h.gs.roundPeriod = 0 + h.gs.roundPhase = 0 + h.gs.roundThreshold = 0 + h.gs.roundSuper45 = false + + case opRUTG: + h.gs.roundPeriod = 1 << 6 + h.gs.roundPhase = 0 + h.gs.roundThreshold = 1<<6 - 1 + h.gs.roundSuper45 = false + + case opRDTG: + h.gs.roundPeriod = 1 << 6 + h.gs.roundPhase = 0 + h.gs.roundThreshold = 0 + h.gs.roundSuper45 = false + + case opSANGW, opAA: + // These ops are "anachronistic" and no longer used. + top-- + + case opFLIPPT: + if top < int(h.gs.loop) { + return errors.New("truetype: hinting: stack underflow") + } + points := h.points[glyphZone][current] + for ; h.gs.loop != 0; h.gs.loop-- { + top-- + i := h.stack[top] + if i < 0 || len(points) <= int(i) { + return errors.New("truetype: hinting: point out of range") + } + points[i].Flags ^= flagOnCurve + } + h.gs.loop = 1 + + case opFLIPRGON, opFLIPRGOFF: + top -= 2 + i, j, points := h.stack[top], h.stack[top+1], h.points[glyphZone][current] + if i < 0 || len(points) <= int(i) || j < 0 || len(points) <= int(j) { + return errors.New("truetype: hinting: point out of range") + } + for ; i <= j; i++ { + if opcode == opFLIPRGON { + points[i].Flags |= flagOnCurve + } else { + points[i].Flags &^= flagOnCurve + } + } + + case opSCANCTRL: + // We do not support dropout control, as we always rasterize grayscale glyphs. + top-- + + case opSDPVTL0, opSDPVTL1: + top -= 2 + for i := 0; i < 2; i++ { + pt := unhinted + if i != 0 { + pt = current + } + p := h.point(1, pt, h.stack[top]) + q := h.point(2, pt, h.stack[top+1]) + if p == nil || q == nil { + return errors.New("truetype: hinting: point out of range") + } + dx := f2dot14(p.X - q.X) + dy := f2dot14(p.Y - q.Y) + if dx == 0 && dy == 0 { + dx = 0x4000 + } else if opcode&1 != 0 { + // Counter-clockwise rotation. + dx, dy = -dy, dx + } + if i == 0 { + h.gs.dv = normalize(dx, dy) + } else { + h.gs.pv = normalize(dx, dy) + } + } + + case opGETINFO: + res := int32(0) + if h.stack[top-1]&(1<<0) != 0 { + // Set the engine version. We hard-code this to 35, the same as + // the C freetype code, which says that "Version~35 corresponds + // to MS rasterizer v.1.7 as used e.g. in Windows~98". + res |= 35 + } + if h.stack[top-1]&(1<<5) != 0 { + // Set that we support grayscale. + res |= 1 << 12 + } + // We set no other bits, as we do not support rotated or stretched glyphs. + h.stack[top-1] = res + + case opIDEF: + // IDEF is for ancient versions of the bytecode interpreter, and is no longer used. + return errors.New("truetype: hinting: unsupported IDEF instruction") + + case opROLL: + h.stack[top-1], h.stack[top-3], h.stack[top-2] = + h.stack[top-3], h.stack[top-2], h.stack[top-1] + + case opMAX: + top-- + if h.stack[top-1] < h.stack[top] { + h.stack[top-1] = h.stack[top] + } + + case opMIN: + top-- + if h.stack[top-1] > h.stack[top] { + h.stack[top-1] = h.stack[top] + } + + case opSCANTYPE: + // We do not support dropout control, as we always rasterize grayscale glyphs. + top-- + + case opINSTCTRL: + // TODO: support instruction execution control? It seems rare, and even when + // nominally used (e.g. Source Sans Pro), it seems conditional on extreme or + // unusual rasterization conditions. For example, the code snippet at + // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html#INSTCTRL + // uses INSTCTRL when grid-fitting a rotated or stretched glyph, but + // freetype-go does not support rotated or stretched glyphs. + top -= 2 + + default: + if opcode < opPUSHB000 { + return errors.New("truetype: hinting: unrecognized instruction") + } + + if opcode < opMDRP00000 { + // PUSHxxxx opcode. + + if opcode < opPUSHW000 { + opcode -= opPUSHB000 - 1 + } else { + opcode -= opPUSHW000 - 1 - 0x80 + } + goto push + } + + if opcode < opMIRP00000 { + // MDRPxxxxx opcode. + + top-- + i := h.stack[top] + ref := h.point(0, current, h.gs.rp[0]) + p := h.point(1, current, i) + if ref == nil || p == nil { + return errors.New("truetype: hinting: point out of range") + } + + oldDist := fixed.Int26_6(0) + if h.gs.zp[0] == 0 || h.gs.zp[1] == 0 { + p0 := h.point(1, unhinted, i) + p1 := h.point(0, unhinted, h.gs.rp[0]) + oldDist = dotProduct(p0.X-p1.X, p0.Y-p1.Y, h.gs.dv) + } else { + p0 := h.point(1, inFontUnits, i) + p1 := h.point(0, inFontUnits, h.gs.rp[0]) + oldDist = dotProduct(p0.X-p1.X, p0.Y-p1.Y, h.gs.dv) + oldDist = h.font.scale(h.scale * oldDist) + } + + // Single-width cut-in test. + if x := fabs(oldDist - h.gs.singleWidth); x < h.gs.singleWidthCutIn { + if oldDist >= 0 { + oldDist = +h.gs.singleWidth + } else { + oldDist = -h.gs.singleWidth + } + } + + // Rounding bit. + // TODO: metrics compensation. + distance := oldDist + if opcode&0x04 != 0 { + distance = h.round(oldDist) + } + + // Minimum distance bit. + if opcode&0x08 != 0 { + if oldDist >= 0 { + if distance < h.gs.minDist { + distance = h.gs.minDist + } + } else { + if distance > -h.gs.minDist { + distance = -h.gs.minDist + } + } + } + + // Set-RP0 bit. + h.gs.rp[1] = h.gs.rp[0] + h.gs.rp[2] = i + if opcode&0x10 != 0 { + h.gs.rp[0] = i + } + + // Move the point. + oldDist = dotProduct(p.X-ref.X, p.Y-ref.Y, h.gs.pv) + h.move(p, distance-oldDist, true) + + } else { + // MIRPxxxxx opcode. + + top -= 2 + i := h.stack[top] + cvtDist := h.getScaledCVT(h.stack[top+1]) + if fabs(cvtDist-h.gs.singleWidth) < h.gs.singleWidthCutIn { + if cvtDist >= 0 { + cvtDist = +h.gs.singleWidth + } else { + cvtDist = -h.gs.singleWidth + } + } + + if h.gs.zp[1] == 0 { + // TODO: implement once we have a .ttf file that triggers + // this, so that we can step through C's freetype. + return errors.New("truetype: hinting: unimplemented twilight point adjustment") + } + + ref := h.point(0, unhinted, h.gs.rp[0]) + p := h.point(1, unhinted, i) + if ref == nil || p == nil { + return errors.New("truetype: hinting: point out of range") + } + oldDist := dotProduct(p.X-ref.X, p.Y-ref.Y, h.gs.dv) + + ref = h.point(0, current, h.gs.rp[0]) + p = h.point(1, current, i) + if ref == nil || p == nil { + return errors.New("truetype: hinting: point out of range") + } + curDist := dotProduct(p.X-ref.X, p.Y-ref.Y, h.gs.pv) + + if h.gs.autoFlip && oldDist^cvtDist < 0 { + cvtDist = -cvtDist + } + + // Rounding bit. + // TODO: metrics compensation. + distance := cvtDist + if opcode&0x04 != 0 { + // The CVT value is only used if close enough to oldDist. + if (h.gs.zp[0] == h.gs.zp[1]) && + (fabs(cvtDist-oldDist) > h.gs.controlValueCutIn) { + + distance = oldDist + } + distance = h.round(distance) + } + + // Minimum distance bit. + if opcode&0x08 != 0 { + if oldDist >= 0 { + if distance < h.gs.minDist { + distance = h.gs.minDist + } + } else { + if distance > -h.gs.minDist { + distance = -h.gs.minDist + } + } + } + + // Set-RP0 bit. + h.gs.rp[1] = h.gs.rp[0] + h.gs.rp[2] = i + if opcode&0x10 != 0 { + h.gs.rp[0] = i + } + + // Move the point. + h.move(p, distance-curDist, true) + } + } + pc++ + continue + + ifelse: + // Skip past bytecode until the next ELSE (if opcode == 0) or the + // next EIF (for all opcodes). Opcode == 0 means that we have come + // from an IF. Opcode == 1 means that we have come from an ELSE. + { + ifelseloop: + for depth := 0; ; { + pc++ + if pc >= len(program) { + return errors.New("truetype: hinting: unbalanced IF or ELSE") + } + switch program[pc] { + case opIF: + depth++ + case opELSE: + if depth == 0 && opcode == 0 { + break ifelseloop + } + case opEIF: + depth-- + if depth < 0 { + break ifelseloop + } + default: + var ok bool + pc, ok = skipInstructionPayload(program, pc) + if !ok { + return errors.New("truetype: hinting: unbalanced IF or ELSE") + } + } + } + pc++ + continue + } + + push: + // Push n elements from the program to the stack, where n is the low 7 bits of + // opcode. If the low 7 bits are zero, then n is the next byte from the program. + // The high bit being 0 means that the elements are zero-extended bytes. + // The high bit being 1 means that the elements are sign-extended words. + { + width := 1 + if opcode&0x80 != 0 { + opcode &^= 0x80 + width = 2 + } + if opcode == 0 { + pc++ + if pc >= len(program) { + return errors.New("truetype: hinting: insufficient data") + } + opcode = program[pc] + } + pc++ + if top+int(opcode) > len(h.stack) { + return errors.New("truetype: hinting: stack overflow") + } + if pc+width*int(opcode) > len(program) { + return errors.New("truetype: hinting: insufficient data") + } + for ; opcode > 0; opcode-- { + if width == 1 { + h.stack[top] = int32(program[pc]) + } else { + h.stack[top] = int32(int8(program[pc]))<<8 | int32(program[pc+1]) + } + top++ + pc += width + } + continue + } + + delta: + { + if opcode >= opDELTAC1 && !h.scaledCVTInitialized { + h.initializeScaledCVT() + } + top-- + n := h.stack[top] + if int32(top) < 2*n { + return errors.New("truetype: hinting: stack underflow") + } + for ; n > 0; n-- { + top -= 2 + b := h.stack[top] + c := (b & 0xf0) >> 4 + switch opcode { + case opDELTAP2, opDELTAC2: + c += 16 + case opDELTAP3, opDELTAC3: + c += 32 + } + c += h.gs.deltaBase + if ppem := (int32(h.scale) + 1<<5) >> 6; ppem != c { + continue + } + b = (b & 0x0f) - 8 + if b >= 0 { + b++ + } + b = b * 64 / (1 << uint32(h.gs.deltaShift)) + if opcode >= opDELTAC1 { + a := h.stack[top+1] + if a < 0 || len(h.scaledCVT) <= int(a) { + return errors.New("truetype: hinting: index out of range") + } + h.scaledCVT[a] += fixed.Int26_6(b) + } else { + p := h.point(0, current, h.stack[top+1]) + if p == nil { + return errors.New("truetype: hinting: point out of range") + } + h.move(p, fixed.Int26_6(b), true) + } + } + pc++ + continue + } + } + return nil +} + +func (h *hinter) initializeScaledCVT() { + h.scaledCVTInitialized = true + if n := len(h.font.cvt) / 2; n <= cap(h.scaledCVT) { + h.scaledCVT = h.scaledCVT[:n] + } else { + if n < 32 { + n = 32 + } + h.scaledCVT = make([]fixed.Int26_6, len(h.font.cvt)/2, n) + } + for i := range h.scaledCVT { + unscaled := uint16(h.font.cvt[2*i])<<8 | uint16(h.font.cvt[2*i+1]) + h.scaledCVT[i] = h.font.scale(h.scale * fixed.Int26_6(int16(unscaled))) + } +} + +// getScaledCVT returns the scaled value from the font's Control Value Table. +func (h *hinter) getScaledCVT(i int32) fixed.Int26_6 { + if !h.scaledCVTInitialized { + h.initializeScaledCVT() + } + if i < 0 || len(h.scaledCVT) <= int(i) { + return 0 + } + return h.scaledCVT[i] +} + +// setScaledCVT overrides the scaled value from the font's Control Value Table. +func (h *hinter) setScaledCVT(i int32, v fixed.Int26_6) { + if !h.scaledCVTInitialized { + h.initializeScaledCVT() + } + if i < 0 || len(h.scaledCVT) <= int(i) { + return + } + h.scaledCVT[i] = v +} + +func (h *hinter) point(zonePointer uint32, pt pointType, i int32) *Point { + points := h.points[h.gs.zp[zonePointer]][pt] + if i < 0 || len(points) <= int(i) { + return nil + } + return &points[i] +} + +func (h *hinter) move(p *Point, distance fixed.Int26_6, touch bool) { + fvx := int64(h.gs.fv[0]) + pvx := int64(h.gs.pv[0]) + if fvx == 0x4000 && pvx == 0x4000 { + p.X += fixed.Int26_6(distance) + if touch { + p.Flags |= flagTouchedX + } + return + } + + fvy := int64(h.gs.fv[1]) + pvy := int64(h.gs.pv[1]) + if fvy == 0x4000 && pvy == 0x4000 { + p.Y += fixed.Int26_6(distance) + if touch { + p.Flags |= flagTouchedY + } + return + } + + fvDotPv := (fvx*pvx + fvy*pvy) >> 14 + + if fvx != 0 { + p.X += fixed.Int26_6(mulDiv(fvx, int64(distance), fvDotPv)) + if touch { + p.Flags |= flagTouchedX + } + } + + if fvy != 0 { + p.Y += fixed.Int26_6(mulDiv(fvy, int64(distance), fvDotPv)) + if touch { + p.Flags |= flagTouchedY + } + } +} + +func (h *hinter) iupInterp(interpY bool, p1, p2, ref1, ref2 int) { + if p1 > p2 { + return + } + if ref1 >= len(h.points[glyphZone][current]) || + ref2 >= len(h.points[glyphZone][current]) { + return + } + + var ifu1, ifu2 fixed.Int26_6 + if interpY { + ifu1 = h.points[glyphZone][inFontUnits][ref1].Y + ifu2 = h.points[glyphZone][inFontUnits][ref2].Y + } else { + ifu1 = h.points[glyphZone][inFontUnits][ref1].X + ifu2 = h.points[glyphZone][inFontUnits][ref2].X + } + if ifu1 > ifu2 { + ifu1, ifu2 = ifu2, ifu1 + ref1, ref2 = ref2, ref1 + } + + var unh1, unh2, delta1, delta2 fixed.Int26_6 + if interpY { + unh1 = h.points[glyphZone][unhinted][ref1].Y + unh2 = h.points[glyphZone][unhinted][ref2].Y + delta1 = h.points[glyphZone][current][ref1].Y - unh1 + delta2 = h.points[glyphZone][current][ref2].Y - unh2 + } else { + unh1 = h.points[glyphZone][unhinted][ref1].X + unh2 = h.points[glyphZone][unhinted][ref2].X + delta1 = h.points[glyphZone][current][ref1].X - unh1 + delta2 = h.points[glyphZone][current][ref2].X - unh2 + } + + var xy, ifuXY fixed.Int26_6 + if ifu1 == ifu2 { + for i := p1; i <= p2; i++ { + if interpY { + xy = h.points[glyphZone][unhinted][i].Y + } else { + xy = h.points[glyphZone][unhinted][i].X + } + + if xy <= unh1 { + xy += delta1 + } else { + xy += delta2 + } + + if interpY { + h.points[glyphZone][current][i].Y = xy + } else { + h.points[glyphZone][current][i].X = xy + } + } + return + } + + scale, scaleOK := int64(0), false + for i := p1; i <= p2; i++ { + if interpY { + xy = h.points[glyphZone][unhinted][i].Y + ifuXY = h.points[glyphZone][inFontUnits][i].Y + } else { + xy = h.points[glyphZone][unhinted][i].X + ifuXY = h.points[glyphZone][inFontUnits][i].X + } + + if xy <= unh1 { + xy += delta1 + } else if xy >= unh2 { + xy += delta2 + } else { + if !scaleOK { + scaleOK = true + scale = mulDiv(int64(unh2+delta2-unh1-delta1), 0x10000, int64(ifu2-ifu1)) + } + numer := int64(ifuXY-ifu1) * scale + if numer >= 0 { + numer += 0x8000 + } else { + numer -= 0x8000 + } + xy = unh1 + delta1 + fixed.Int26_6(numer/0x10000) + } + + if interpY { + h.points[glyphZone][current][i].Y = xy + } else { + h.points[glyphZone][current][i].X = xy + } + } +} + +func (h *hinter) iupShift(interpY bool, p1, p2, p int) { + var delta fixed.Int26_6 + if interpY { + delta = h.points[glyphZone][current][p].Y - h.points[glyphZone][unhinted][p].Y + } else { + delta = h.points[glyphZone][current][p].X - h.points[glyphZone][unhinted][p].X + } + if delta == 0 { + return + } + for i := p1; i < p2; i++ { + if i == p { + continue + } + if interpY { + h.points[glyphZone][current][i].Y += delta + } else { + h.points[glyphZone][current][i].X += delta + } + } +} + +func (h *hinter) displacement(useZP1 bool) (zonePointer uint32, i int32, d fixed.Int26_6, ok bool) { + zonePointer, i = uint32(0), h.gs.rp[1] + if useZP1 { + zonePointer, i = 1, h.gs.rp[2] + } + p := h.point(zonePointer, current, i) + q := h.point(zonePointer, unhinted, i) + if p == nil || q == nil { + return 0, 0, 0, false + } + d = dotProduct(p.X-q.X, p.Y-q.Y, h.gs.pv) + return zonePointer, i, d, true +} + +// skipInstructionPayload increments pc by the extra data that follows a +// variable length PUSHB or PUSHW instruction. +func skipInstructionPayload(program []byte, pc int) (newPC int, ok bool) { + switch program[pc] { + case opNPUSHB: + pc++ + if pc >= len(program) { + return 0, false + } + pc += int(program[pc]) + case opNPUSHW: + pc++ + if pc >= len(program) { + return 0, false + } + pc += 2 * int(program[pc]) + case opPUSHB000, opPUSHB001, opPUSHB010, opPUSHB011, + opPUSHB100, opPUSHB101, opPUSHB110, opPUSHB111: + pc += int(program[pc] - (opPUSHB000 - 1)) + case opPUSHW000, opPUSHW001, opPUSHW010, opPUSHW011, + opPUSHW100, opPUSHW101, opPUSHW110, opPUSHW111: + pc += 2 * int(program[pc]-(opPUSHW000-1)) + } + return pc, true +} + +// f2dot14 is a 2.14 fixed point number. +type f2dot14 int16 + +func normalize(x, y f2dot14) [2]f2dot14 { + fx, fy := float64(x), float64(y) + l := 0x4000 / math.Hypot(fx, fy) + fx *= l + if fx >= 0 { + fx += 0.5 + } else { + fx -= 0.5 + } + fy *= l + if fy >= 0 { + fy += 0.5 + } else { + fy -= 0.5 + } + return [2]f2dot14{f2dot14(fx), f2dot14(fy)} +} + +// fabs returns abs(x) in 26.6 fixed point arithmetic. +func fabs(x fixed.Int26_6) fixed.Int26_6 { + if x < 0 { + return -x + } + return x +} + +// fdiv returns x/y in 26.6 fixed point arithmetic. +func fdiv(x, y fixed.Int26_6) fixed.Int26_6 { + return fixed.Int26_6((int64(x) << 6) / int64(y)) +} + +// fmul returns x*y in 26.6 fixed point arithmetic. +func fmul(x, y fixed.Int26_6) fixed.Int26_6 { + return fixed.Int26_6((int64(x)*int64(y) + 1<<5) >> 6) +} + +// dotProduct returns the dot product of [x, y] and q. It is almost the same as +// px := int64(x) +// py := int64(y) +// qx := int64(q[0]) +// qy := int64(q[1]) +// return fixed.Int26_6((px*qx + py*qy + 1<<13) >> 14) +// except that the computation is done with 32-bit integers to produce exactly +// the same rounding behavior as C Freetype. +func dotProduct(x, y fixed.Int26_6, q [2]f2dot14) fixed.Int26_6 { + // Compute x*q[0] as 64-bit value. + l := uint32((int32(x) & 0xFFFF) * int32(q[0])) + m := (int32(x) >> 16) * int32(q[0]) + + lo1 := l + (uint32(m) << 16) + hi1 := (m >> 16) + (int32(l) >> 31) + bool2int32(lo1 < l) + + // Compute y*q[1] as 64-bit value. + l = uint32((int32(y) & 0xFFFF) * int32(q[1])) + m = (int32(y) >> 16) * int32(q[1]) + + lo2 := l + (uint32(m) << 16) + hi2 := (m >> 16) + (int32(l) >> 31) + bool2int32(lo2 < l) + + // Add them. + lo := lo1 + lo2 + hi := hi1 + hi2 + bool2int32(lo < lo1) + + // Divide the result by 2^14 with rounding. + s := hi >> 31 + l = lo + uint32(s) + hi += s + bool2int32(l < lo) + lo = l + + l = lo + 0x2000 + hi += bool2int32(l < lo) + + return fixed.Int26_6((uint32(hi) << 18) | (l >> 14)) +} + +// mulDiv returns x*y/z, rounded to the nearest integer. +func mulDiv(x, y, z int64) int64 { + xy := x * y + if z < 0 { + xy, z = -xy, -z + } + if xy >= 0 { + xy += z / 2 + } else { + xy -= z / 2 + } + return xy / z +} + +// round rounds the given number. The rounding algorithm is described at +// https://developer.apple.com/fonts/TTRefMan/RM02/Chap2.html#rounding +func (h *hinter) round(x fixed.Int26_6) fixed.Int26_6 { + if h.gs.roundPeriod == 0 { + // Rounding is off. + return x + } + if x >= 0 { + ret := x - h.gs.roundPhase + h.gs.roundThreshold + if h.gs.roundSuper45 { + ret /= h.gs.roundPeriod + ret *= h.gs.roundPeriod + } else { + ret &= -h.gs.roundPeriod + } + if x != 0 && ret < 0 { + ret = 0 + } + return ret + h.gs.roundPhase + } + ret := -x - h.gs.roundPhase + h.gs.roundThreshold + if h.gs.roundSuper45 { + ret /= h.gs.roundPeriod + ret *= h.gs.roundPeriod + } else { + ret &= -h.gs.roundPeriod + } + if ret < 0 { + ret = 0 + } + return -ret - h.gs.roundPhase +} + +func bool2int32(b bool) int32 { + if b { + return 1 + } + return 0 +} diff --git a/src/server/vendor/github.com/golang/freetype/truetype/opcodes.go b/src/server/vendor/github.com/golang/freetype/truetype/opcodes.go new file mode 100644 index 00000000..1880e1e6 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/truetype/opcodes.go @@ -0,0 +1,289 @@ +// Copyright 2012 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +package truetype + +// The Truetype opcodes are summarized at +// https://developer.apple.com/fonts/TTRefMan/RM07/appendixA.html + +const ( + opSVTCA0 = 0x00 // Set freedom and projection Vectors To Coordinate Axis + opSVTCA1 = 0x01 // . + opSPVTCA0 = 0x02 // Set Projection Vector To Coordinate Axis + opSPVTCA1 = 0x03 // . + opSFVTCA0 = 0x04 // Set Freedom Vector to Coordinate Axis + opSFVTCA1 = 0x05 // . + opSPVTL0 = 0x06 // Set Projection Vector To Line + opSPVTL1 = 0x07 // . + opSFVTL0 = 0x08 // Set Freedom Vector To Line + opSFVTL1 = 0x09 // . + opSPVFS = 0x0a // Set Projection Vector From Stack + opSFVFS = 0x0b // Set Freedom Vector From Stack + opGPV = 0x0c // Get Projection Vector + opGFV = 0x0d // Get Freedom Vector + opSFVTPV = 0x0e // Set Freedom Vector To Projection Vector + opISECT = 0x0f // moves point p to the InterSECTion of two lines + opSRP0 = 0x10 // Set Reference Point 0 + opSRP1 = 0x11 // Set Reference Point 1 + opSRP2 = 0x12 // Set Reference Point 2 + opSZP0 = 0x13 // Set Zone Pointer 0 + opSZP1 = 0x14 // Set Zone Pointer 1 + opSZP2 = 0x15 // Set Zone Pointer 2 + opSZPS = 0x16 // Set Zone PointerS + opSLOOP = 0x17 // Set LOOP variable + opRTG = 0x18 // Round To Grid + opRTHG = 0x19 // Round To Half Grid + opSMD = 0x1a // Set Minimum Distance + opELSE = 0x1b // ELSE clause + opJMPR = 0x1c // JuMP Relative + opSCVTCI = 0x1d // Set Control Value Table Cut-In + opSSWCI = 0x1e // Set Single Width Cut-In + opSSW = 0x1f // Set Single Width + opDUP = 0x20 // DUPlicate top stack element + opPOP = 0x21 // POP top stack element + opCLEAR = 0x22 // CLEAR the stack + opSWAP = 0x23 // SWAP the top two elements on the stack + opDEPTH = 0x24 // DEPTH of the stack + opCINDEX = 0x25 // Copy the INDEXed element to the top of the stack + opMINDEX = 0x26 // Move the INDEXed element to the top of the stack + opALIGNPTS = 0x27 // ALIGN PoinTS + op_0x28 = 0x28 // deprecated + opUTP = 0x29 // UnTouch Point + opLOOPCALL = 0x2a // LOOP and CALL function + opCALL = 0x2b // CALL function + opFDEF = 0x2c // Function DEFinition + opENDF = 0x2d // END Function definition + opMDAP0 = 0x2e // Move Direct Absolute Point + opMDAP1 = 0x2f // . + opIUP0 = 0x30 // Interpolate Untouched Points through the outline + opIUP1 = 0x31 // . + opSHP0 = 0x32 // SHift Point using reference point + opSHP1 = 0x33 // . + opSHC0 = 0x34 // SHift Contour using reference point + opSHC1 = 0x35 // . + opSHZ0 = 0x36 // SHift Zone using reference point + opSHZ1 = 0x37 // . + opSHPIX = 0x38 // SHift point by a PIXel amount + opIP = 0x39 // Interpolate Point + opMSIRP0 = 0x3a // Move Stack Indirect Relative Point + opMSIRP1 = 0x3b // . + opALIGNRP = 0x3c // ALIGN to Reference Point + opRTDG = 0x3d // Round To Double Grid + opMIAP0 = 0x3e // Move Indirect Absolute Point + opMIAP1 = 0x3f // . + opNPUSHB = 0x40 // PUSH N Bytes + opNPUSHW = 0x41 // PUSH N Words + opWS = 0x42 // Write Store + opRS = 0x43 // Read Store + opWCVTP = 0x44 // Write Control Value Table in Pixel units + opRCVT = 0x45 // Read Control Value Table entry + opGC0 = 0x46 // Get Coordinate projected onto the projection vector + opGC1 = 0x47 // . + opSCFS = 0x48 // Sets Coordinate From the Stack using projection vector and freedom vector + opMD0 = 0x49 // Measure Distance + opMD1 = 0x4a // . + opMPPEM = 0x4b // Measure Pixels Per EM + opMPS = 0x4c // Measure Point Size + opFLIPON = 0x4d // set the auto FLIP Boolean to ON + opFLIPOFF = 0x4e // set the auto FLIP Boolean to OFF + opDEBUG = 0x4f // DEBUG call + opLT = 0x50 // Less Than + opLTEQ = 0x51 // Less Than or EQual + opGT = 0x52 // Greater Than + opGTEQ = 0x53 // Greater Than or EQual + opEQ = 0x54 // EQual + opNEQ = 0x55 // Not EQual + opODD = 0x56 // ODD + opEVEN = 0x57 // EVEN + opIF = 0x58 // IF test + opEIF = 0x59 // End IF + opAND = 0x5a // logical AND + opOR = 0x5b // logical OR + opNOT = 0x5c // logical NOT + opDELTAP1 = 0x5d // DELTA exception P1 + opSDB = 0x5e // Set Delta Base in the graphics state + opSDS = 0x5f // Set Delta Shift in the graphics state + opADD = 0x60 // ADD + opSUB = 0x61 // SUBtract + opDIV = 0x62 // DIVide + opMUL = 0x63 // MULtiply + opABS = 0x64 // ABSolute value + opNEG = 0x65 // NEGate + opFLOOR = 0x66 // FLOOR + opCEILING = 0x67 // CEILING + opROUND00 = 0x68 // ROUND value + opROUND01 = 0x69 // . + opROUND10 = 0x6a // . + opROUND11 = 0x6b // . + opNROUND00 = 0x6c // No ROUNDing of value + opNROUND01 = 0x6d // . + opNROUND10 = 0x6e // . + opNROUND11 = 0x6f // . + opWCVTF = 0x70 // Write Control Value Table in Funits + opDELTAP2 = 0x71 // DELTA exception P2 + opDELTAP3 = 0x72 // DELTA exception P3 + opDELTAC1 = 0x73 // DELTA exception C1 + opDELTAC2 = 0x74 // DELTA exception C2 + opDELTAC3 = 0x75 // DELTA exception C3 + opSROUND = 0x76 // Super ROUND + opS45ROUND = 0x77 // Super ROUND 45 degrees + opJROT = 0x78 // Jump Relative On True + opJROF = 0x79 // Jump Relative On False + opROFF = 0x7a // Round OFF + op_0x7b = 0x7b // deprecated + opRUTG = 0x7c // Round Up To Grid + opRDTG = 0x7d // Round Down To Grid + opSANGW = 0x7e // Set ANGle Weight + opAA = 0x7f // Adjust Angle + opFLIPPT = 0x80 // FLIP PoinT + opFLIPRGON = 0x81 // FLIP RanGe ON + opFLIPRGOFF = 0x82 // FLIP RanGe OFF + op_0x83 = 0x83 // deprecated + op_0x84 = 0x84 // deprecated + opSCANCTRL = 0x85 // SCAN conversion ConTRoL + opSDPVTL0 = 0x86 // Set Dual Projection Vector To Line + opSDPVTL1 = 0x87 // . + opGETINFO = 0x88 // GET INFOrmation + opIDEF = 0x89 // Instruction DEFinition + opROLL = 0x8a // ROLL the top three stack elements + opMAX = 0x8b // MAXimum of top two stack elements + opMIN = 0x8c // MINimum of top two stack elements + opSCANTYPE = 0x8d // SCANTYPE + opINSTCTRL = 0x8e // INSTRuction execution ConTRoL + op_0x8f = 0x8f + op_0x90 = 0x90 + op_0x91 = 0x91 + op_0x92 = 0x92 + op_0x93 = 0x93 + op_0x94 = 0x94 + op_0x95 = 0x95 + op_0x96 = 0x96 + op_0x97 = 0x97 + op_0x98 = 0x98 + op_0x99 = 0x99 + op_0x9a = 0x9a + op_0x9b = 0x9b + op_0x9c = 0x9c + op_0x9d = 0x9d + op_0x9e = 0x9e + op_0x9f = 0x9f + op_0xa0 = 0xa0 + op_0xa1 = 0xa1 + op_0xa2 = 0xa2 + op_0xa3 = 0xa3 + op_0xa4 = 0xa4 + op_0xa5 = 0xa5 + op_0xa6 = 0xa6 + op_0xa7 = 0xa7 + op_0xa8 = 0xa8 + op_0xa9 = 0xa9 + op_0xaa = 0xaa + op_0xab = 0xab + op_0xac = 0xac + op_0xad = 0xad + op_0xae = 0xae + op_0xaf = 0xaf + opPUSHB000 = 0xb0 // PUSH Bytes + opPUSHB001 = 0xb1 // . + opPUSHB010 = 0xb2 // . + opPUSHB011 = 0xb3 // . + opPUSHB100 = 0xb4 // . + opPUSHB101 = 0xb5 // . + opPUSHB110 = 0xb6 // . + opPUSHB111 = 0xb7 // . + opPUSHW000 = 0xb8 // PUSH Words + opPUSHW001 = 0xb9 // . + opPUSHW010 = 0xba // . + opPUSHW011 = 0xbb // . + opPUSHW100 = 0xbc // . + opPUSHW101 = 0xbd // . + opPUSHW110 = 0xbe // . + opPUSHW111 = 0xbf // . + opMDRP00000 = 0xc0 // Move Direct Relative Point + opMDRP00001 = 0xc1 // . + opMDRP00010 = 0xc2 // . + opMDRP00011 = 0xc3 // . + opMDRP00100 = 0xc4 // . + opMDRP00101 = 0xc5 // . + opMDRP00110 = 0xc6 // . + opMDRP00111 = 0xc7 // . + opMDRP01000 = 0xc8 // . + opMDRP01001 = 0xc9 // . + opMDRP01010 = 0xca // . + opMDRP01011 = 0xcb // . + opMDRP01100 = 0xcc // . + opMDRP01101 = 0xcd // . + opMDRP01110 = 0xce // . + opMDRP01111 = 0xcf // . + opMDRP10000 = 0xd0 // . + opMDRP10001 = 0xd1 // . + opMDRP10010 = 0xd2 // . + opMDRP10011 = 0xd3 // . + opMDRP10100 = 0xd4 // . + opMDRP10101 = 0xd5 // . + opMDRP10110 = 0xd6 // . + opMDRP10111 = 0xd7 // . + opMDRP11000 = 0xd8 // . + opMDRP11001 = 0xd9 // . + opMDRP11010 = 0xda // . + opMDRP11011 = 0xdb // . + opMDRP11100 = 0xdc // . + opMDRP11101 = 0xdd // . + opMDRP11110 = 0xde // . + opMDRP11111 = 0xdf // . + opMIRP00000 = 0xe0 // Move Indirect Relative Point + opMIRP00001 = 0xe1 // . + opMIRP00010 = 0xe2 // . + opMIRP00011 = 0xe3 // . + opMIRP00100 = 0xe4 // . + opMIRP00101 = 0xe5 // . + opMIRP00110 = 0xe6 // . + opMIRP00111 = 0xe7 // . + opMIRP01000 = 0xe8 // . + opMIRP01001 = 0xe9 // . + opMIRP01010 = 0xea // . + opMIRP01011 = 0xeb // . + opMIRP01100 = 0xec // . + opMIRP01101 = 0xed // . + opMIRP01110 = 0xee // . + opMIRP01111 = 0xef // . + opMIRP10000 = 0xf0 // . + opMIRP10001 = 0xf1 // . + opMIRP10010 = 0xf2 // . + opMIRP10011 = 0xf3 // . + opMIRP10100 = 0xf4 // . + opMIRP10101 = 0xf5 // . + opMIRP10110 = 0xf6 // . + opMIRP10111 = 0xf7 // . + opMIRP11000 = 0xf8 // . + opMIRP11001 = 0xf9 // . + opMIRP11010 = 0xfa // . + opMIRP11011 = 0xfb // . + opMIRP11100 = 0xfc // . + opMIRP11101 = 0xfd // . + opMIRP11110 = 0xfe // . + opMIRP11111 = 0xff // . +) + +// popCount is the number of stack elements that each opcode pops. +var popCount = [256]uint8{ + // 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f + 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 5, // 0x00 - 0x0f + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, // 0x10 - 0x1f + 1, 1, 0, 2, 0, 1, 1, 2, 0, 1, 2, 1, 1, 0, 1, 1, // 0x20 - 0x2f + 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 2, 2, 0, 0, 2, 2, // 0x30 - 0x3f + 0, 0, 2, 1, 2, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, // 0x40 - 0x4f + 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 2, 2, 1, 1, 1, 1, // 0x50 - 0x5f + 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6f + 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, // 0x70 - 0x7f + 0, 2, 2, 0, 0, 1, 2, 2, 1, 1, 3, 2, 2, 1, 2, 0, // 0x80 - 0x8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x90 - 0x9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xa0 - 0xaf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xb0 - 0xbf + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xc0 - 0xcf + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xd0 - 0xdf + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xe0 - 0xef + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xf0 - 0xff +} diff --git a/src/server/vendor/github.com/golang/freetype/truetype/truetype.go b/src/server/vendor/github.com/golang/freetype/truetype/truetype.go new file mode 100644 index 00000000..7270bbf2 --- /dev/null +++ b/src/server/vendor/github.com/golang/freetype/truetype/truetype.go @@ -0,0 +1,653 @@ +// Copyright 2010 The Freetype-Go Authors. All rights reserved. +// Use of this source code is governed by your choice of either the +// FreeType License or the GNU General Public License version 2 (or +// any later version), both of which can be found in the LICENSE file. + +// Package truetype provides a parser for the TTF and TTC file formats. +// Those formats are documented at http://developer.apple.com/fonts/TTRefMan/ +// and http://www.microsoft.com/typography/otspec/ +// +// Some of a font's methods provide lengths or co-ordinates, e.g. bounds, font +// metrics and control points. All these methods take a scale parameter, which +// is the number of pixels in 1 em, expressed as a 26.6 fixed point value. For +// example, if 1 em is 10 pixels then scale is fixed.I(10), which is equal to +// fixed.Int26_6(10 << 6). +// +// To measure a TrueType font in ideal FUnit space, use scale equal to +// font.FUnitsPerEm(). +package truetype // import "github.com/golang/freetype/truetype" + +import ( + "fmt" + + "golang.org/x/image/math/fixed" +) + +// An Index is a Font's index of a rune. +type Index uint16 + +// A NameID identifies a name table entry. +// +// See https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html +type NameID uint16 + +const ( + NameIDCopyright NameID = 0 + NameIDFontFamily = 1 + NameIDFontSubfamily = 2 + NameIDUniqueSubfamilyID = 3 + NameIDFontFullName = 4 + NameIDNameTableVersion = 5 + NameIDPostscriptName = 6 + NameIDTrademarkNotice = 7 + NameIDManufacturerName = 8 + NameIDDesignerName = 9 + NameIDFontDescription = 10 + NameIDFontVendorURL = 11 + NameIDFontDesignerURL = 12 + NameIDFontLicense = 13 + NameIDFontLicenseURL = 14 + NameIDPreferredFamily = 16 + NameIDPreferredSubfamily = 17 + NameIDCompatibleName = 18 + NameIDSampleText = 19 +) + +const ( + // A 32-bit encoding consists of a most-significant 16-bit Platform ID and a + // least-significant 16-bit Platform Specific ID. The magic numbers are + // specified at https://www.microsoft.com/typography/otspec/name.htm + unicodeEncodingBMPOnly = 0x00000003 // PID = 0 (Unicode), PSID = 3 (Unicode 2.0 BMP Only) + unicodeEncodingFull = 0x00000004 // PID = 0 (Unicode), PSID = 4 (Unicode 2.0 Full Repertoire) + microsoftSymbolEncoding = 0x00030000 // PID = 3 (Microsoft), PSID = 0 (Symbol) + microsoftUCS2Encoding = 0x00030001 // PID = 3 (Microsoft), PSID = 1 (UCS-2) + microsoftUCS4Encoding = 0x0003000a // PID = 3 (Microsoft), PSID = 10 (UCS-4) +) + +// An HMetric holds the horizontal metrics of a single glyph. +type HMetric struct { + AdvanceWidth, LeftSideBearing fixed.Int26_6 +} + +// A VMetric holds the vertical metrics of a single glyph. +type VMetric struct { + AdvanceHeight, TopSideBearing fixed.Int26_6 +} + +// A FormatError reports that the input is not a valid TrueType font. +type FormatError string + +func (e FormatError) Error() string { + return "freetype: invalid TrueType format: " + string(e) +} + +// An UnsupportedError reports that the input uses a valid but unimplemented +// TrueType feature. +type UnsupportedError string + +func (e UnsupportedError) Error() string { + return "freetype: unsupported TrueType feature: " + string(e) +} + +// u32 returns the big-endian uint32 at b[i:]. +func u32(b []byte, i int) uint32 { + return uint32(b[i])<<24 | uint32(b[i+1])<<16 | uint32(b[i+2])<<8 | uint32(b[i+3]) +} + +// u16 returns the big-endian uint16 at b[i:]. +func u16(b []byte, i int) uint16 { + return uint16(b[i])<<8 | uint16(b[i+1]) +} + +// readTable returns a slice of the TTF data given by a table's directory entry. +func readTable(ttf []byte, offsetLength []byte) ([]byte, error) { + offset := int(u32(offsetLength, 0)) + if offset < 0 { + return nil, FormatError(fmt.Sprintf("offset too large: %d", uint32(offset))) + } + length := int(u32(offsetLength, 4)) + if length < 0 { + return nil, FormatError(fmt.Sprintf("length too large: %d", uint32(length))) + } + end := offset + length + if end < 0 || end > len(ttf) { + return nil, FormatError(fmt.Sprintf("offset + length too large: %d", uint32(offset)+uint32(length))) + } + return ttf[offset:end], nil +} + +// parseSubtables returns the offset and platformID of the best subtable in +// table, where best favors a Unicode cmap encoding, and failing that, a +// Microsoft cmap encoding. offset is the offset of the first subtable in +// table, and size is the size of each subtable. +// +// If pred is non-nil, then only subtables that satisfy that predicate will be +// considered. +func parseSubtables(table []byte, name string, offset, size int, pred func([]byte) bool) ( + bestOffset int, bestPID uint32, retErr error) { + + if len(table) < 4 { + return 0, 0, FormatError(name + " too short") + } + nSubtables := int(u16(table, 2)) + if len(table) < size*nSubtables+offset { + return 0, 0, FormatError(name + " too short") + } + ok := false + for i := 0; i < nSubtables; i, offset = i+1, offset+size { + if pred != nil && !pred(table[offset:]) { + continue + } + // We read the 16-bit Platform ID and 16-bit Platform Specific ID as a single uint32. + // All values are big-endian. + pidPsid := u32(table, offset) + // We prefer the Unicode cmap encoding. Failing to find that, we fall + // back onto the Microsoft cmap encoding. + if pidPsid == unicodeEncodingBMPOnly || pidPsid == unicodeEncodingFull { + bestOffset, bestPID, ok = offset, pidPsid>>16, true + break + + } else if pidPsid == microsoftSymbolEncoding || + pidPsid == microsoftUCS2Encoding || + pidPsid == microsoftUCS4Encoding { + + bestOffset, bestPID, ok = offset, pidPsid>>16, true + // We don't break out of the for loop, so that Unicode can override Microsoft. + } + } + if !ok { + return 0, 0, UnsupportedError(name + " encoding") + } + return bestOffset, bestPID, nil +} + +const ( + locaOffsetFormatUnknown int = iota + locaOffsetFormatShort + locaOffsetFormatLong +) + +// A cm holds a parsed cmap entry. +type cm struct { + start, end, delta, offset uint32 +} + +// A Font represents a Truetype font. +type Font struct { + // Tables sliced from the TTF data. The different tables are documented + // at http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html + cmap, cvt, fpgm, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, name, os2, prep, vmtx []byte + + cmapIndexes []byte + + // Cached values derived from the raw ttf data. + cm []cm + locaOffsetFormat int + nGlyph, nHMetric, nKern int + fUnitsPerEm int32 + ascent int32 // In FUnits. + descent int32 // In FUnits; typically negative. + bounds fixed.Rectangle26_6 // In FUnits. + // Values from the maxp section. + maxTwilightPoints, maxStorage, maxFunctionDefs, maxStackElements uint16 +} + +func (f *Font) parseCmap() error { + const ( + cmapFormat4 = 4 + cmapFormat12 = 12 + languageIndependent = 0 + ) + + offset, _, err := parseSubtables(f.cmap, "cmap", 4, 8, nil) + if err != nil { + return err + } + offset = int(u32(f.cmap, offset+4)) + if offset <= 0 || offset > len(f.cmap) { + return FormatError("bad cmap offset") + } + + cmapFormat := u16(f.cmap, offset) + switch cmapFormat { + case cmapFormat4: + language := u16(f.cmap, offset+4) + if language != languageIndependent { + return UnsupportedError(fmt.Sprintf("language: %d", language)) + } + segCountX2 := int(u16(f.cmap, offset+6)) + if segCountX2%2 == 1 { + return FormatError(fmt.Sprintf("bad segCountX2: %d", segCountX2)) + } + segCount := segCountX2 / 2 + offset += 14 + f.cm = make([]cm, segCount) + for i := 0; i < segCount; i++ { + f.cm[i].end = uint32(u16(f.cmap, offset)) + offset += 2 + } + offset += 2 + for i := 0; i < segCount; i++ { + f.cm[i].start = uint32(u16(f.cmap, offset)) + offset += 2 + } + for i := 0; i < segCount; i++ { + f.cm[i].delta = uint32(u16(f.cmap, offset)) + offset += 2 + } + for i := 0; i < segCount; i++ { + f.cm[i].offset = uint32(u16(f.cmap, offset)) + offset += 2 + } + f.cmapIndexes = f.cmap[offset:] + return nil + + case cmapFormat12: + if u16(f.cmap, offset+2) != 0 { + return FormatError(fmt.Sprintf("cmap format: % x", f.cmap[offset:offset+4])) + } + length := u32(f.cmap, offset+4) + language := u32(f.cmap, offset+8) + if language != languageIndependent { + return UnsupportedError(fmt.Sprintf("language: %d", language)) + } + nGroups := u32(f.cmap, offset+12) + if length != 12*nGroups+16 { + return FormatError("inconsistent cmap length") + } + offset += 16 + f.cm = make([]cm, nGroups) + for i := uint32(0); i < nGroups; i++ { + f.cm[i].start = u32(f.cmap, offset+0) + f.cm[i].end = u32(f.cmap, offset+4) + f.cm[i].delta = u32(f.cmap, offset+8) - f.cm[i].start + offset += 12 + } + return nil + } + return UnsupportedError(fmt.Sprintf("cmap format: %d", cmapFormat)) +} + +func (f *Font) parseHead() error { + if len(f.head) != 54 { + return FormatError(fmt.Sprintf("bad head length: %d", len(f.head))) + } + f.fUnitsPerEm = int32(u16(f.head, 18)) + f.bounds.Min.X = fixed.Int26_6(int16(u16(f.head, 36))) + f.bounds.Min.Y = fixed.Int26_6(int16(u16(f.head, 38))) + f.bounds.Max.X = fixed.Int26_6(int16(u16(f.head, 40))) + f.bounds.Max.Y = fixed.Int26_6(int16(u16(f.head, 42))) + switch i := u16(f.head, 50); i { + case 0: + f.locaOffsetFormat = locaOffsetFormatShort + case 1: + f.locaOffsetFormat = locaOffsetFormatLong + default: + return FormatError(fmt.Sprintf("bad indexToLocFormat: %d", i)) + } + return nil +} + +func (f *Font) parseHhea() error { + if len(f.hhea) != 36 { + return FormatError(fmt.Sprintf("bad hhea length: %d", len(f.hhea))) + } + f.ascent = int32(int16(u16(f.hhea, 4))) + f.descent = int32(int16(u16(f.hhea, 6))) + f.nHMetric = int(u16(f.hhea, 34)) + if 4*f.nHMetric+2*(f.nGlyph-f.nHMetric) != len(f.hmtx) { + return FormatError(fmt.Sprintf("bad hmtx length: %d", len(f.hmtx))) + } + return nil +} + +func (f *Font) parseKern() error { + // Apple's TrueType documentation (http://developer.apple.com/fonts/TTRefMan/RM06/Chap6kern.html) says: + // "Previous versions of the 'kern' table defined both the version and nTables fields in the header + // as UInt16 values and not UInt32 values. Use of the older format on the Mac OS is discouraged + // (although AAT can sense an old kerning table and still make correct use of it). Microsoft + // Windows still uses the older format for the 'kern' table and will not recognize the newer one. + // Fonts targeted for the Mac OS only should use the new format; fonts targeted for both the Mac OS + // and Windows should use the old format." + // Since we expect that almost all fonts aim to be Windows-compatible, we only parse the "older" format, + // just like the C Freetype implementation. + if len(f.kern) == 0 { + if f.nKern != 0 { + return FormatError("bad kern table length") + } + return nil + } + if len(f.kern) < 18 { + return FormatError("kern data too short") + } + version, offset := u16(f.kern, 0), 2 + if version != 0 { + return UnsupportedError(fmt.Sprintf("kern version: %d", version)) + } + + n, offset := u16(f.kern, offset), offset+2 + if n == 0 { + return UnsupportedError("kern nTables: 0") + } + // TODO: support multiple subtables. In practice, almost all .ttf files + // have only one subtable, if they have a kern table at all. But it's not + // impossible. Xolonium Regular (https://fontlibrary.org/en/font/xolonium) + // has 3 subtables. Those subtables appear to be disjoint, rather than + // being the same kerning pairs encoded in three different ways. + // + // For now, we'll use only the first subtable. + + offset += 2 // Skip the version. + length, offset := int(u16(f.kern, offset)), offset+2 + coverage, offset := u16(f.kern, offset), offset+2 + if coverage != 0x0001 { + // We only support horizontal kerning. + return UnsupportedError(fmt.Sprintf("kern coverage: 0x%04x", coverage)) + } + f.nKern, offset = int(u16(f.kern, offset)), offset+2 + if 6*f.nKern != length-14 { + return FormatError("bad kern table length") + } + return nil +} + +func (f *Font) parseMaxp() error { + if len(f.maxp) != 32 { + return FormatError(fmt.Sprintf("bad maxp length: %d", len(f.maxp))) + } + f.nGlyph = int(u16(f.maxp, 4)) + f.maxTwilightPoints = u16(f.maxp, 16) + f.maxStorage = u16(f.maxp, 18) + f.maxFunctionDefs = u16(f.maxp, 20) + f.maxStackElements = u16(f.maxp, 24) + return nil +} + +// scale returns x divided by f.fUnitsPerEm, rounded to the nearest integer. +func (f *Font) scale(x fixed.Int26_6) fixed.Int26_6 { + if x >= 0 { + x += fixed.Int26_6(f.fUnitsPerEm) / 2 + } else { + x -= fixed.Int26_6(f.fUnitsPerEm) / 2 + } + return x / fixed.Int26_6(f.fUnitsPerEm) +} + +// Bounds returns the union of a Font's glyphs' bounds. +func (f *Font) Bounds(scale fixed.Int26_6) fixed.Rectangle26_6 { + b := f.bounds + b.Min.X = f.scale(scale * b.Min.X) + b.Min.Y = f.scale(scale * b.Min.Y) + b.Max.X = f.scale(scale * b.Max.X) + b.Max.Y = f.scale(scale * b.Max.Y) + return b +} + +// FUnitsPerEm returns the number of FUnits in a Font's em-square's side. +func (f *Font) FUnitsPerEm() int32 { + return f.fUnitsPerEm +} + +// Index returns a Font's index for the given rune. +func (f *Font) Index(x rune) Index { + c := uint32(x) + for i, j := 0, len(f.cm); i < j; { + h := i + (j-i)/2 + cm := &f.cm[h] + if c < cm.start { + j = h + } else if cm.end < c { + i = h + 1 + } else if cm.offset == 0 { + return Index(c + cm.delta) + } else { + offset := int(cm.offset) + 2*(h-len(f.cm)+int(c-cm.start)) + return Index(u16(f.cmapIndexes, offset)) + } + } + return 0 +} + +// Name returns the Font's name value for the given NameID. It returns "" if +// there was an error, or if that name was not found. +func (f *Font) Name(id NameID) string { + x, platformID, err := parseSubtables(f.name, "name", 6, 12, func(b []byte) bool { + return NameID(u16(b, 6)) == id + }) + if err != nil { + return "" + } + offset, length := u16(f.name, 4)+u16(f.name, x+10), u16(f.name, x+8) + // Return the ASCII value of the encoded string. + // The string is encoded as UTF-16 on non-Apple platformIDs; Apple is platformID 1. + src := f.name[offset : offset+length] + var dst []byte + if platformID != 1 { // UTF-16. + if len(src)&1 != 0 { + return "" + } + dst = make([]byte, len(src)/2) + for i := range dst { + dst[i] = printable(u16(src, 2*i)) + } + } else { // ASCII. + dst = make([]byte, len(src)) + for i, c := range src { + dst[i] = printable(uint16(c)) + } + } + return string(dst) +} + +func printable(r uint16) byte { + if 0x20 <= r && r < 0x7f { + return byte(r) + } + return '?' +} + +// unscaledHMetric returns the unscaled horizontal metrics for the glyph with +// the given index. +func (f *Font) unscaledHMetric(i Index) (h HMetric) { + j := int(i) + if j < 0 || f.nGlyph <= j { + return HMetric{} + } + if j >= f.nHMetric { + p := 4 * (f.nHMetric - 1) + return HMetric{ + AdvanceWidth: fixed.Int26_6(u16(f.hmtx, p)), + LeftSideBearing: fixed.Int26_6(int16(u16(f.hmtx, p+2*(j-f.nHMetric)+4))), + } + } + return HMetric{ + AdvanceWidth: fixed.Int26_6(u16(f.hmtx, 4*j)), + LeftSideBearing: fixed.Int26_6(int16(u16(f.hmtx, 4*j+2))), + } +} + +// HMetric returns the horizontal metrics for the glyph with the given index. +func (f *Font) HMetric(scale fixed.Int26_6, i Index) HMetric { + h := f.unscaledHMetric(i) + h.AdvanceWidth = f.scale(scale * h.AdvanceWidth) + h.LeftSideBearing = f.scale(scale * h.LeftSideBearing) + return h +} + +// unscaledVMetric returns the unscaled vertical metrics for the glyph with +// the given index. yMax is the top of the glyph's bounding box. +func (f *Font) unscaledVMetric(i Index, yMax fixed.Int26_6) (v VMetric) { + j := int(i) + if j < 0 || f.nGlyph <= j { + return VMetric{} + } + if 4*j+4 <= len(f.vmtx) { + return VMetric{ + AdvanceHeight: fixed.Int26_6(u16(f.vmtx, 4*j)), + TopSideBearing: fixed.Int26_6(int16(u16(f.vmtx, 4*j+2))), + } + } + // The OS/2 table has grown over time. + // https://developer.apple.com/fonts/TTRefMan/RM06/Chap6OS2.html + // says that it was originally 68 bytes. Optional fields, including + // the ascender and descender, are described at + // http://www.microsoft.com/typography/otspec/os2.htm + if len(f.os2) >= 72 { + sTypoAscender := fixed.Int26_6(int16(u16(f.os2, 68))) + sTypoDescender := fixed.Int26_6(int16(u16(f.os2, 70))) + return VMetric{ + AdvanceHeight: sTypoAscender - sTypoDescender, + TopSideBearing: sTypoAscender - yMax, + } + } + return VMetric{ + AdvanceHeight: fixed.Int26_6(f.fUnitsPerEm), + TopSideBearing: 0, + } +} + +// VMetric returns the vertical metrics for the glyph with the given index. +func (f *Font) VMetric(scale fixed.Int26_6, i Index) VMetric { + // TODO: should 0 be bounds.YMax? + v := f.unscaledVMetric(i, 0) + v.AdvanceHeight = f.scale(scale * v.AdvanceHeight) + v.TopSideBearing = f.scale(scale * v.TopSideBearing) + return v +} + +// Kern returns the horizontal adjustment for the given glyph pair. A positive +// kern means to move the glyphs further apart. +func (f *Font) Kern(scale fixed.Int26_6, i0, i1 Index) fixed.Int26_6 { + if f.nKern == 0 { + return 0 + } + g := uint32(i0)<<16 | uint32(i1) + lo, hi := 0, f.nKern + for lo < hi { + i := (lo + hi) / 2 + ig := u32(f.kern, 18+6*i) + if ig < g { + lo = i + 1 + } else if ig > g { + hi = i + } else { + return f.scale(scale * fixed.Int26_6(int16(u16(f.kern, 22+6*i)))) + } + } + return 0 +} + +// Parse returns a new Font for the given TTF or TTC data. +// +// For TrueType Collections, the first font in the collection is parsed. +func Parse(ttf []byte) (font *Font, err error) { + return parse(ttf, 0) +} + +func parse(ttf []byte, offset int) (font *Font, err error) { + if len(ttf)-offset < 12 { + err = FormatError("TTF data is too short") + return + } + originalOffset := offset + magic, offset := u32(ttf, offset), offset+4 + switch magic { + case 0x00010000: + // No-op. + case 0x74746366: // "ttcf" as a big-endian uint32. + if originalOffset != 0 { + err = FormatError("recursive TTC") + return + } + ttcVersion, offset := u32(ttf, offset), offset+4 + if ttcVersion != 0x00010000 && ttcVersion != 0x00020000 { + err = FormatError("bad TTC version") + return + } + numFonts, offset := int(u32(ttf, offset)), offset+4 + if numFonts <= 0 { + err = FormatError("bad number of TTC fonts") + return + } + if len(ttf[offset:])/4 < numFonts { + err = FormatError("TTC offset table is too short") + return + } + // TODO: provide an API to select which font in a TrueType collection to return, + // not just the first one. This may require an API to parse a TTC's name tables, + // so users of this package can select the font in a TTC by name. + offset = int(u32(ttf, offset)) + if offset <= 0 || offset > len(ttf) { + err = FormatError("bad TTC offset") + return + } + return parse(ttf, offset) + default: + err = FormatError("bad TTF version") + return + } + n, offset := int(u16(ttf, offset)), offset+2 + offset += 6 // Skip the searchRange, entrySelector and rangeShift. + if len(ttf) < 16*n+offset { + err = FormatError("TTF data is too short") + return + } + f := new(Font) + // Assign the table slices. + for i := 0; i < n; i++ { + x := 16*i + offset + switch string(ttf[x : x+4]) { + case "cmap": + f.cmap, err = readTable(ttf, ttf[x+8:x+16]) + case "cvt ": + f.cvt, err = readTable(ttf, ttf[x+8:x+16]) + case "fpgm": + f.fpgm, err = readTable(ttf, ttf[x+8:x+16]) + case "glyf": + f.glyf, err = readTable(ttf, ttf[x+8:x+16]) + case "hdmx": + f.hdmx, err = readTable(ttf, ttf[x+8:x+16]) + case "head": + f.head, err = readTable(ttf, ttf[x+8:x+16]) + case "hhea": + f.hhea, err = readTable(ttf, ttf[x+8:x+16]) + case "hmtx": + f.hmtx, err = readTable(ttf, ttf[x+8:x+16]) + case "kern": + f.kern, err = readTable(ttf, ttf[x+8:x+16]) + case "loca": + f.loca, err = readTable(ttf, ttf[x+8:x+16]) + case "maxp": + f.maxp, err = readTable(ttf, ttf[x+8:x+16]) + case "name": + f.name, err = readTable(ttf, ttf[x+8:x+16]) + case "OS/2": + f.os2, err = readTable(ttf, ttf[x+8:x+16]) + case "prep": + f.prep, err = readTable(ttf, ttf[x+8:x+16]) + case "vmtx": + f.vmtx, err = readTable(ttf, ttf[x+8:x+16]) + } + if err != nil { + return + } + } + // Parse and sanity-check the TTF data. + if err = f.parseHead(); err != nil { + return + } + if err = f.parseMaxp(); err != nil { + return + } + if err = f.parseCmap(); err != nil { + return + } + if err = f.parseKern(); err != nil { + return + } + if err = f.parseHhea(); err != nil { + return + } + font = f + return +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/.gitignore b/src/server/vendor/github.com/vicanso/go-charts/v2/.gitignore new file mode 100644 index 00000000..57206ee4 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/.gitignore @@ -0,0 +1,20 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ +*.png +*.svg +tmp +NotoSansSC.ttf +.vscode \ No newline at end of file diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/LICENSE b/src/server/vendor/github.com/vicanso/go-charts/v2/LICENSE new file mode 100644 index 00000000..f31a1654 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Tree Xie + +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/src/server/vendor/github.com/vicanso/go-charts/v2/Makefile b/src/server/vendor/github.com/vicanso/go-charts/v2/Makefile new file mode 100644 index 00000000..7b718c48 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/Makefile @@ -0,0 +1,20 @@ +export GO111MODULE = on + +.PHONY: default test test-cover dev hooks + + +# for test +test: + go test -race -cover ./... + +test-cover: + go test -race -coverprofile=test.out ./... && go tool cover --html=test.out + +bench: + go test --benchmem -bench=. ./... + +lint: + golangci-lint run + +hooks: + cp hooks/* .git/hooks/ \ No newline at end of file diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/README.md b/src/server/vendor/github.com/vicanso/go-charts/v2/README.md new file mode 100644 index 00000000..1e4ea8b9 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/README.md @@ -0,0 +1,540 @@ +# go-charts + +[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/vicanso/go-charts/blob/master/LICENSE) +[![Build Status](https://github.com/vicanso/go-charts/workflows/Test/badge.svg)](https://github.com/vicanso/go-charts/actions) + +[中文](./README_zh.md) + +`go-charts` base on [go-chart](https://github.com/wcharczuk/go-chart),it is simpler way for generating charts, which supports `svg` and `png` format and themes: `light`, `dark`, `grafana` and `ant`. The default format is `png` and the default theme is `light`. + +`Apache ECharts` is popular among Front-end developers, so `go-charts` supports the option of `Apache ECharts`. Developers can generate charts almost the same as `Apache ECharts`. + +Screenshot of common charts, the left part is light theme, the right part is grafana theme. + +

+ go-charts +

+ +

+ go-table +

+ +## Chart Type + +These chart types are supported: `line`, `bar`, `horizontal bar`, `pie`, `radar` or `funnel` and `table`. + +## Example + +More examples can be found in the [./examples/](./examples/) directory. + + +### Line Chart +```go +package main + +import ( + charts "github.com/vicanso/go-charts/v2" +) + +func main() { + values := [][]float64{ + { + 120, + 132, + 101, + 134, + 90, + 230, + 210, + }, + { + // snip... + }, + { + // snip... + }, + { + // snip... + }, + { + // snip... + }, + } + p, err := charts.LineRender( + values, + charts.TitleTextOptionFunc("Line"), + charts.XAxisDataOptionFunc([]string{ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun", + }), + charts.LegendLabelsOptionFunc([]string{ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", + }, charts.PositionCenter), + ) + + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Bar Chart + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + values := [][]float64{ + { + 2.0, + 4.9, + 7.0, + 23.2, + 25.6, + 76.7, + 135.6, + 162.2, + 32.6, + 20.0, + 6.4, + 3.3, + }, + { + // snip... + }, + } + p, err := charts.BarRender( + values, + charts.XAxisDataOptionFunc([]string{ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + }), + charts.LegendLabelsOptionFunc([]string{ + "Rainfall", + "Evaporation", + }, charts.PositionRight), + charts.MarkLineOptionFunc(0, charts.SeriesMarkDataTypeAverage), + charts.MarkPointOptionFunc(0, charts.SeriesMarkDataTypeMax, + charts.SeriesMarkDataTypeMin), + // custom option func + func(opt *charts.ChartOption) { + opt.SeriesList[1].MarkPoint = charts.NewMarkPoint( + charts.SeriesMarkDataTypeMax, + charts.SeriesMarkDataTypeMin, + ) + opt.SeriesList[1].MarkLine = charts.NewMarkLine( + charts.SeriesMarkDataTypeAverage, + ) + }, + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Horizontal Bar Chart + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + values := [][]float64{ + { + 18203, + 23489, + 29034, + 104970, + 131744, + 630230, + }, + { + // snip... + }, + } + p, err := charts.HorizontalBarRender( + values, + charts.TitleTextOptionFunc("World Population"), + charts.PaddingOptionFunc(charts.Box{ + Top: 20, + Right: 40, + Bottom: 20, + Left: 20, + }), + charts.LegendLabelsOptionFunc([]string{ + "2011", + "2012", + }), + charts.YAxisDataOptionFunc([]string{ + "Brazil", + "Indonesia", + "USA", + "India", + "China", + "World", + }), + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Pie Chart + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + values := []float64{ + 1048, + 735, + 580, + 484, + 300, + } + p, err := charts.PieRender( + values, + charts.TitleOptionFunc(charts.TitleOption{ + Text: "Rainfall vs Evaporation", + Subtext: "Fake Data", + Left: charts.PositionCenter, + }), + charts.PaddingOptionFunc(charts.Box{ + Top: 20, + Right: 20, + Bottom: 20, + Left: 20, + }), + charts.LegendOptionFunc(charts.LegendOption{ + Orient: charts.OrientVertical, + Data: []string{ + "Search Engine", + "Direct", + "Email", + "Union Ads", + "Video Ads", + }, + Left: charts.PositionLeft, + }), + charts.PieSeriesShowLabel(), + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Radar Chart + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + values := [][]float64{ + { + 4200, + 3000, + 20000, + 35000, + 50000, + 18000, + }, + { + // snip... + }, + } + p, err := charts.RadarRender( + values, + charts.TitleTextOptionFunc("Basic Radar Chart"), + charts.LegendLabelsOptionFunc([]string{ + "Allocated Budget", + "Actual Spending", + }), + charts.RadarIndicatorOptionFunc([]string{ + "Sales", + "Administration", + "Information Technology", + "Customer Support", + "Development", + "Marketing", + }, []float64{ + 6500, + 16000, + 30000, + 38000, + 52000, + 25000, + }), + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Funnel Chart + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + values := []float64{ + 100, + 80, + 60, + 40, + 20, + } + p, err := charts.FunnelRender( + values, + charts.TitleTextOptionFunc("Funnel"), + charts.LegendLabelsOptionFunc([]string{ + "Show", + "Click", + "Visit", + "Inquiry", + "Order", + }), + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### Table + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + header := []string{ + "Name", + "Age", + "Address", + "Tag", + "Action", + } + data := [][]string{ + { + "John Brown", + "32", + "New York No. 1 Lake Park", + "nice, developer", + "Send Mail", + }, + { + "Jim Green ", + "42", + "London No. 1 Lake Park", + "wow", + "Send Mail", + }, + { + "Joe Black ", + "32", + "Sidney No. 1 Lake Park", + "cool, teacher", + "Send Mail", + }, + } + spans := map[int]int{ + 0: 2, + 1: 1, + // 设置第三列的span + 2: 3, + 3: 2, + 4: 2, + } + p, err := charts.TableRender( + header, + data, + spans, + ) + if err != nil { + panic(err) + } + + buf, err := p.Bytes() + if err != nil { + panic(err) + } + // snip... +} +``` + +### ECharts Render + +```go +package main + +import ( + "github.com/vicanso/go-charts/v2" +) + +func main() { + buf, err := charts.RenderEChartsToPNG(`{ + "title": { + "text": "Line" + }, + "xAxis": { + "data": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] + }, + "series": [ + { + "data": [150, 230, 224, 218, 135, 147, 260] + } + ] + }`) + // snip... +} +``` + +## ECharts Option + +The name with `[]` is new parameter, others are the same as `echarts`. + +- `[type]` The canvas type, support `svg` and `png`, default is `svg` +- `[theme]` The theme, support `dark`, `light` and `grafana`, default is `light` +- `[fontFamily]` The font family for chart +- `[padding]` The padding of chart +- `[box]` The canvas box of chart +- `[width]` The width of chart +- `[height]` The height of chart +- `title` Title component, including main title and subtitle + - `title.text` The main title text, supporting for \n for newlines + - `title.subtext`Subtitle text, supporting for \n for newlines + - `title.left` Distance between title component and the left side of the container. Left value can be instant pixel value like 20; it can also be a percentage value relative to container width like '20%'; and it can also be 'left', 'center', or 'right'. + - `title.top` Distance between title component and the top side of the container. Top value can be instant pixel value like 20 + - `title.textStyle.color` Text color for title + - `title.textStyle.fontSize` Text font size for title + - `title.textStyle.fontFamily` Text font family for title, it will change the font family for chart +- `xAxis` The x axis in cartesian(rectangular) coordinate. `go-charts` only support one x axis. + - `xAxis.boundaryGap` The boundary gap on both sides of a coordinate axis. The setting and behavior of category axes and non-category axes are different. If set `null` or `true`, the label appear in the center part of two axis ticks. + - `xAxis.splitNumber` Number of segments that the axis is split into. Note that this number serves only as a recommendation, and the true segments may be adjusted based on readability + - `xAxis.data` Category data, only support string array. +- `yAxis` The y axis in cartesian(rectangular) coordinate, it support 2 y axis + - `yAxis.min` The minimum value of axis. It will be automatically computed to make sure axis tick is equally distributed when not set + - `yAxis.max` The maximum value of axis. It will be automatically computed to make sure axis tick is equally distributed when not se. + - `yAxis.axisLabel.formatter` Formatter of axis label, which supports string template: `"formatter": "{value} kg"` + - `yAxis.axisLine.lineStyle.color` The color for line +- `legend` Legend component + - `legend.show` Whether to show legend + - `legend.data` Data array of legend, only support string array: ["Email", "Video Ads"] + - `legend.align` Legend marker and text aligning. Support `left` and `right`, default is `left` + - `legend.padding` legend space around content + - `legend.left` Distance between legend component and the left side of the container. Left value can be instant pixel value like 20; it can also be a percentage value relative to container width like '20%'; and it can also be 'left', 'center', or 'right'. + - `legend.top` Distance between legend component and the top side of the container. Top value can be instant pixel value like 20 +- `radar` Coordinate for radar charts + - `radar.indicator` Indicator of radar chart, which is used to assign multiple variables(dimensions) in radar chart + - `radar.indicator.name` Indicator's name + - `radar.indicator.max` The maximum value of indicator + - `radar.indicator.min` The minimum value of indicator, default value is 0. +- `series` The series for chart + - `series.name` Series name used for displaying in legend. + - `series.type` Series type: `line`, `bar`, `pie`, `radar` or `funnel` + - `series.radius` Radius of Pie chart:`50%`, default is `40%` + - `series.yAxisIndex` Index of y axis to combine with, which is useful for multiple y axes in one chart + - `series.label.show` Whether to show label + - `series.label.distance` Distance to the host graphic element + - `series.label.color` Label color + - `series.itemStyle.color` Color for the series's item + - `series.markPoint` Mark point in a chart. + - `series.markPoint.symbolSize` Symbol size, default is `30` + - `series.markPoint.data` Data array for mark points, each of which is an object and the type only support `max` and `min`: `[{"type": "max"}, {"type": "min"}]` + - `series.markLine` Mark line in a chart + - `series.markPoint.data` Data array for mark points, each of which is an object and the type only support `max`, `min` and `average`: `[{"type": "max"}, {"type": "min"}, {"type": "average"}]`` + - `series.data` Data array of series, which can be in the following forms: + - `value` It's a float array: [1.1, 2,3, 5.2] + - `object` It's a object value array: [{"value": 1048, "name": "Search Engine"},{"value": 735,"name": "Direct"}] +- `[children]` The options of children chart + + +## Performance + +Generate a png chart will be less than 20ms. It's better than using `chrome headless` with `echarts`. + +```bash +BenchmarkMultiChartPNGRender-8 78 15216336 ns/op 2298308 B/op 1148 allocs/op +BenchmarkMultiChartSVGRender-8 367 3356325 ns/op 20597282 B/op 3088 allocs/op +``` diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/README_zh.md b/src/server/vendor/github.com/vicanso/go-charts/v2/README_zh.md new file mode 100644 index 00000000..c31cf777 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/README_zh.md @@ -0,0 +1,576 @@ +# go-charts + +[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/vicanso/go-charts/blob/master/LICENSE) +[![Build Status](https://github.com/vicanso/go-charts/workflows/Test/badge.svg)](https://github.com/vicanso/go-charts/actions) + +`go-charts`基于[go-chart](https://github.com/wcharczuk/go-chart),更简单方便的形式生成数据图表,支持`svg`与`png`两种方式的输出,支持主题`light`, `dark`, `grafana`以及`ant`。默认的输入格式为`png`,默认主题为`light`。 + +`Apache ECharts`在前端开发中得到众多开发者的认可,因此`go-charts`提供了兼容`Apache ECharts`的配置参数,简单快捷的生成相似的图表(`svg`或`png`),方便插入至Email或分享使用。下面为常用的图表截图(主题为light与grafana): + + +

+ go-charts +

+ +

+ go-table +

0 { + p.Child(PainterPaddingOption(Box{ + Top: ticksPaddingTop, + Left: ticksPaddingLeft, + })).Ticks(TicksOption{ + Count: tickCount, + Length: tickLength, + Unit: unit, + Orient: orient, + First: opt.FirstAxis, + }) + p.LineStroke([]Point{ + { + X: x0, + Y: y0, + }, + { + X: x1, + Y: y1, + }, + }) + } + + p.Child(PainterPaddingOption(Box{ + Left: labelPaddingLeft, + Top: labelPaddingTop, + Right: labelPaddingRight, + })).MultiText(MultiTextOption{ + First: opt.FirstAxis, + Align: textAlign, + TextList: data, + Orient: orient, + Unit: unit, + Position: labelPosition, + TextRotation: opt.TextRotation, + Offset: opt.LabelOffset, + }) + // 显示辅助线 + if opt.SplitLineShow { + style.StrokeColor = opt.SplitLineColor + style.StrokeWidth = 1 + top.OverrideDrawingStyle(style) + if isVertical { + x0 := p.Width() + x1 := top.Width() + if opt.Position == PositionRight { + x0 = 0 + x1 = top.Width() - p.Width() + } + yValues := autoDivide(height, tickCount) + yValues = yValues[0 : len(yValues)-1] + for _, y := range yValues { + top.LineStroke([]Point{ + { + X: x0, + Y: y, + }, + { + X: x1, + Y: y, + }, + }) + } + } else { + y0 := p.Height() - defaultXAxisHeight + y1 := top.Height() - defaultXAxisHeight + for index, x := range autoDivide(width, tickCount) { + if index == 0 { + continue + } + top.LineStroke([]Point{ + { + X: x, + Y: y0, + }, + { + X: x, + Y: y1, + }, + }) + } + } + } + + return Box{ + Bottom: height, + Right: width, + }, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/bar_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/bar_chart.go new file mode 100644 index 00000000..2d702f26 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/bar_chart.go @@ -0,0 +1,253 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "math" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" +) + +type barChart struct { + p *Painter + opt *BarChartOption +} + +// NewBarChart returns a bar chart renderer +func NewBarChart(p *Painter, opt BarChartOption) *barChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &barChart{ + p: p, + opt: &opt, + } +} + +type BarChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The x axis option + XAxis XAxisOption + // The padding of line chart + Padding Box + // The y axis option + YAxisOptions []YAxisOption + // The option of title + Title TitleOption + // The legend option + Legend LegendOption + BarWidth int + // Margin of bar + BarMargin int +} + +func (b *barChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + p := b.p + opt := b.opt + seriesPainter := result.seriesPainter + + xRange := NewRange(AxisRangeOption{ + Painter: b.p, + DivideCount: len(opt.XAxis.Data), + Size: seriesPainter.Width(), + }) + x0, x1 := xRange.GetRange(0) + width := int(x1 - x0) + // 每一块之间的margin + margin := 10 + // 每一个bar之间的margin + barMargin := 5 + if width < 20 { + margin = 2 + barMargin = 2 + } else if width < 50 { + margin = 5 + barMargin = 3 + } + if opt.BarMargin > 0 { + barMargin = opt.BarMargin + } + seriesCount := len(seriesList) + // 总的宽度-两个margin-(总数-1)的barMargin + barWidth := (width - 2*margin - barMargin*(seriesCount-1)) / seriesCount + if opt.BarWidth > 0 && opt.BarWidth < barWidth { + barWidth = opt.BarWidth + // 重新计算margin + margin = (width - seriesCount*barWidth - barMargin*(seriesCount-1)) / 2 + } + barMaxHeight := seriesPainter.Height() + theme := opt.Theme + seriesNames := seriesList.Names() + + markPointPainter := NewMarkPointPainter(seriesPainter) + markLinePainter := NewMarkLinePainter(seriesPainter) + rendererList := []Renderer{ + markPointPainter, + markLinePainter, + } + for index := range seriesList { + series := seriesList[index] + yRange := result.axisRanges[series.AxisIndex] + seriesColor := theme.GetSeriesColor(series.index) + + divideValues := xRange.AutoDivide() + points := make([]Point, len(series.Data)) + var labelPainter *SeriesLabelPainter + if series.Label.Show { + labelPainter = NewSeriesLabelPainter(SeriesLabelPainterParams{ + P: seriesPainter, + SeriesNames: seriesNames, + Label: series.Label, + Theme: opt.Theme, + Font: opt.Font, + }) + rendererList = append(rendererList, labelPainter) + } + + for j, item := range series.Data { + if j >= xRange.divideCount { + continue + } + x := divideValues[j] + x += margin + if index != 0 { + x += index * (barWidth + barMargin) + } + + h := int(yRange.getHeight(item.Value)) + fillColor := seriesColor + if !item.Style.FillColor.IsZero() { + fillColor = item.Style.FillColor + } + top := barMaxHeight - h + + if series.RoundRadius <= 0 { + seriesPainter.OverrideDrawingStyle(Style{ + FillColor: fillColor, + }).Rect(chart.Box{ + Top: top, + Left: x, + Right: x + barWidth, + Bottom: barMaxHeight - 1, + }) + } else { + seriesPainter.OverrideDrawingStyle(Style{ + FillColor: fillColor, + }).RoundedRect(chart.Box{ + Top: top, + Left: x, + Right: x + barWidth, + Bottom: barMaxHeight - 1, + }, series.RoundRadius) + } + // 用于生成marker point + points[j] = Point{ + // 居中的位置 + X: x + barWidth>>1, + Y: top, + } + // 用于生成marker point + points[j] = Point{ + // 居中的位置 + X: x + barWidth>>1, + Y: top, + } + // 如果label不需要展示,则返回 + if labelPainter == nil { + continue + } + y := barMaxHeight - h + radians := float64(0) + fontColor := series.Label.Color + if series.Label.Position == PositionBottom { + y = barMaxHeight + radians = -math.Pi / 2 + if fontColor.IsZero() { + if isLightColor(fillColor) { + fontColor = defaultLightFontColor + } else { + fontColor = defaultDarkFontColor + } + } + } + labelPainter.Add(LabelValue{ + Index: index, + Value: item.Value, + X: x + barWidth>>1, + Y: y, + // 旋转 + Radians: radians, + FontColor: fontColor, + Offset: series.Label.Offset, + FontSize: series.Label.FontSize, + }) + } + + markPointPainter.Add(markPointRenderOption{ + FillColor: seriesColor, + Font: opt.Font, + Series: series, + Points: points, + }) + markLinePainter.Add(markLineRenderOption{ + FillColor: seriesColor, + FontColor: opt.Theme.GetTextColor(), + StrokeColor: seriesColor, + Font: opt.Font, + Series: series, + Range: yRange, + }) + } + // 最大、最小的mark point + err := doRender(rendererList...) + if err != nil { + return BoxZero, err + } + + return p.box, nil +} + +func (b *barChart) Render() (Box, error) { + p := b.p + opt := b.opt + renderResult, err := defaultRender(p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: opt.XAxis, + YAxisOptions: opt.YAxisOptions, + TitleOption: opt.Title, + LegendOption: opt.Legend, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypeLine) + return b.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/chart_option.go b/src/server/vendor/github.com/vicanso/go-charts/v2/chart_option.go new file mode 100644 index 00000000..d80a3837 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/chart_option.go @@ -0,0 +1,426 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "sort" + + "github.com/golang/freetype/truetype" +) + +type ChartOption struct { + theme ColorPalette + font *truetype.Font + // The output type of chart, "svg" or "png", default value is "svg" + Type string + // The font family, which should be installed first + FontFamily string + // The theme of chart, "light" and "dark". + // The default theme is "light" + Theme string + // The title option + Title TitleOption + // The legend option + Legend LegendOption + // The x axis option + XAxis XAxisOption + // The y axis option list + YAxisOptions []YAxisOption + // The width of chart, default width is 600 + Width int + // The height of chart, default height is 400 + Height int + Parent *Painter + // The padding for chart, default padding is [20, 10, 10, 10] + Padding Box + // The canvas box for chart + Box Box + // The series list + SeriesList SeriesList + // The radar indicator list + RadarIndicators []RadarIndicator + // The background color of chart + BackgroundColor Color + // The flag for show symbol of line, set this to *false will hide symbol + SymbolShow *bool + // The stroke width of line chart + LineStrokeWidth float64 + // The bar with of bar chart + BarWidth int + // The margin of each bar + BarMargin int + // The bar height of horizontal bar chart + BarHeight int + // Fill the area of line chart + FillArea bool + // background fill (alpha) opacity + Opacity uint8 + // The child charts + Children []ChartOption + // The value formatter + ValueFormatter ValueFormatter +} + +// OptionFunc option function +type OptionFunc func(opt *ChartOption) + +// SVGTypeOption set svg type of chart's output +func SVGTypeOption() OptionFunc { + return TypeOptionFunc(ChartOutputSVG) +} + +// PNGTypeOption set png type of chart's output +func PNGTypeOption() OptionFunc { + return TypeOptionFunc(ChartOutputPNG) +} + +// TypeOptionFunc set type of chart's output +func TypeOptionFunc(t string) OptionFunc { + return func(opt *ChartOption) { + opt.Type = t + } +} + +// FontFamilyOptionFunc set font family of chart +func FontFamilyOptionFunc(fontFamily string) OptionFunc { + return func(opt *ChartOption) { + opt.FontFamily = fontFamily + } +} + +// ThemeOptionFunc set them of chart +func ThemeOptionFunc(theme string) OptionFunc { + return func(opt *ChartOption) { + opt.Theme = theme + } +} + +// TitleOptionFunc set title of chart +func TitleOptionFunc(title TitleOption) OptionFunc { + return func(opt *ChartOption) { + opt.Title = title + } +} + +// TitleTextOptionFunc set title text of chart +func TitleTextOptionFunc(text string, subtext ...string) OptionFunc { + return func(opt *ChartOption) { + opt.Title.Text = text + if len(subtext) != 0 { + opt.Title.Subtext = subtext[0] + } + } +} + +// LegendOptionFunc set legend of chart +func LegendOptionFunc(legend LegendOption) OptionFunc { + return func(opt *ChartOption) { + opt.Legend = legend + } +} + +// LegendLabelsOptionFunc set legend labels of chart +func LegendLabelsOptionFunc(labels []string, left ...string) OptionFunc { + return func(opt *ChartOption) { + opt.Legend = NewLegendOption(labels, left...) + } +} + +// XAxisOptionFunc set x axis of chart +func XAxisOptionFunc(xAxisOption XAxisOption) OptionFunc { + return func(opt *ChartOption) { + opt.XAxis = xAxisOption + } +} + +// XAxisDataOptionFunc set x axis data of chart +func XAxisDataOptionFunc(data []string, boundaryGap ...*bool) OptionFunc { + return func(opt *ChartOption) { + opt.XAxis = NewXAxisOption(data, boundaryGap...) + } +} + +// YAxisOptionFunc set y axis of chart, support two y axis +func YAxisOptionFunc(yAxisOption ...YAxisOption) OptionFunc { + return func(opt *ChartOption) { + opt.YAxisOptions = yAxisOption + } +} + +// YAxisDataOptionFunc set y axis data of chart +func YAxisDataOptionFunc(data []string) OptionFunc { + return func(opt *ChartOption) { + opt.YAxisOptions = NewYAxisOptions(data) + } +} + +// WidthOptionFunc set width of chart +func WidthOptionFunc(width int) OptionFunc { + return func(opt *ChartOption) { + opt.Width = width + } +} + +// HeightOptionFunc set height of chart +func HeightOptionFunc(height int) OptionFunc { + return func(opt *ChartOption) { + opt.Height = height + } +} + +// PaddingOptionFunc set padding of chart +func PaddingOptionFunc(padding Box) OptionFunc { + return func(opt *ChartOption) { + opt.Padding = padding + } +} + +// BoxOptionFunc set box of chart +func BoxOptionFunc(box Box) OptionFunc { + return func(opt *ChartOption) { + opt.Box = box + } +} + +// PieSeriesShowLabel set pie series show label +func PieSeriesShowLabel() OptionFunc { + return func(opt *ChartOption) { + for index := range opt.SeriesList { + opt.SeriesList[index].Label.Show = true + } + } +} + +// ChildOptionFunc add child chart +func ChildOptionFunc(child ...ChartOption) OptionFunc { + return func(opt *ChartOption) { + if opt.Children == nil { + opt.Children = make([]ChartOption, 0) + } + opt.Children = append(opt.Children, child...) + } +} + +// RadarIndicatorOptionFunc set radar indicator of chart +func RadarIndicatorOptionFunc(names []string, values []float64) OptionFunc { + return func(opt *ChartOption) { + opt.RadarIndicators = NewRadarIndicators(names, values) + } +} + +// BackgroundColorOptionFunc set background color of chart +func BackgroundColorOptionFunc(color Color) OptionFunc { + return func(opt *ChartOption) { + opt.BackgroundColor = color + } +} + +// MarkLineOptionFunc set mark line for series of chart +func MarkLineOptionFunc(seriesIndex int, markLineTypes ...string) OptionFunc { + return func(opt *ChartOption) { + if len(opt.SeriesList) <= seriesIndex { + return + } + opt.SeriesList[seriesIndex].MarkLine = NewMarkLine(markLineTypes...) + } +} + +// MarkPointOptionFunc set mark point for series of chart +func MarkPointOptionFunc(seriesIndex int, markPointTypes ...string) OptionFunc { + return func(opt *ChartOption) { + if len(opt.SeriesList) <= seriesIndex { + return + } + opt.SeriesList[seriesIndex].MarkPoint = NewMarkPoint(markPointTypes...) + } +} + +func (o *ChartOption) fillDefault() { + t := NewTheme(o.Theme) + o.theme = t + // 如果为空,初始化 + axisCount := 1 + for _, series := range o.SeriesList { + if series.AxisIndex >= axisCount { + axisCount++ + } + } + o.Width = getDefaultInt(o.Width, defaultChartWidth) + o.Height = getDefaultInt(o.Height, defaultChartHeight) + yAxisOptions := make([]YAxisOption, axisCount) + copy(yAxisOptions, o.YAxisOptions) + o.YAxisOptions = yAxisOptions + o.font, _ = GetFont(o.FontFamily) + + if o.font == nil { + o.font, _ = GetDefaultFont() + } else { + // 如果指定了字体,则设置主题的字体 + t.SetFont(o.font) + } + if o.BackgroundColor.IsZero() { + o.BackgroundColor = t.GetBackgroundColor() + } + if o.Padding.IsZero() { + o.Padding = Box{ + Top: 20, + Right: 20, + Bottom: 20, + Left: 20, + } + } + // legend与series name的关联 + if len(o.Legend.Data) == 0 { + o.Legend.Data = o.SeriesList.Names() + } else { + seriesCount := len(o.SeriesList) + for index, name := range o.Legend.Data { + if index < seriesCount && + len(o.SeriesList[index].Name) == 0 { + o.SeriesList[index].Name = name + } + } + nameIndexDict := map[string]int{} + for index, name := range o.Legend.Data { + nameIndexDict[name] = index + } + // 保证series的顺序与legend一致 + sort.Slice(o.SeriesList, func(i, j int) bool { + return nameIndexDict[o.SeriesList[i].Name] < nameIndexDict[o.SeriesList[j].Name] + }) + } +} + +// LineRender line chart render +func LineRender(values [][]float64, opts ...OptionFunc) (*Painter, error) { + seriesList := NewSeriesListDataFromValues(values, ChartTypeLine) + return Render(ChartOption{ + SeriesList: seriesList, + }, opts...) +} + +// BarRender bar chart render +func BarRender(values [][]float64, opts ...OptionFunc) (*Painter, error) { + seriesList := NewSeriesListDataFromValues(values, ChartTypeBar) + return Render(ChartOption{ + SeriesList: seriesList, + }, opts...) +} + +// HorizontalBarRender horizontal bar chart render +func HorizontalBarRender(values [][]float64, opts ...OptionFunc) (*Painter, error) { + seriesList := NewSeriesListDataFromValues(values, ChartTypeHorizontalBar) + return Render(ChartOption{ + SeriesList: seriesList, + }, opts...) +} + +// PieRender pie chart render +func PieRender(values []float64, opts ...OptionFunc) (*Painter, error) { + return Render(ChartOption{ + SeriesList: NewPieSeriesList(values), + }, opts...) +} + +// RadarRender radar chart render +func RadarRender(values [][]float64, opts ...OptionFunc) (*Painter, error) { + seriesList := NewSeriesListDataFromValues(values, ChartTypeRadar) + return Render(ChartOption{ + SeriesList: seriesList, + }, opts...) +} + +// FunnelRender funnel chart render +func FunnelRender(values []float64, opts ...OptionFunc) (*Painter, error) { + seriesList := NewFunnelSeriesList(values) + return Render(ChartOption{ + SeriesList: seriesList, + }, opts...) +} + +// TableRender table chart render +func TableRender(header []string, data [][]string, spanMaps ...map[int]int) (*Painter, error) { + opt := TableChartOption{ + Header: header, + Data: data, + } + if len(spanMaps) != 0 { + spanMap := spanMaps[0] + spans := make([]int, len(opt.Header)) + for index := range spans { + v, ok := spanMap[index] + if !ok { + v = 1 + } + spans[index] = v + } + opt.Spans = spans + } + return TableOptionRender(opt) +} + +// TableOptionRender table render with option +func TableOptionRender(opt TableChartOption) (*Painter, error) { + if opt.Type == "" { + opt.Type = ChartOutputPNG + } + if opt.Width <= 0 { + opt.Width = defaultChartWidth + } + if opt.FontFamily != "" { + opt.Font, _ = GetFont(opt.FontFamily) + } + if opt.Font == nil { + opt.Font, _ = GetDefaultFont() + } + + p, err := NewPainter(PainterOptions{ + Type: opt.Type, + Width: opt.Width, + // 仅用于计算表格高度,因此随便设置即可 + Height: 100, + Font: opt.Font, + }) + if err != nil { + return nil, err + } + info, err := NewTableChart(p, opt).render() + if err != nil { + return nil, err + } + + p, err = NewPainter(PainterOptions{ + Type: opt.Type, + Width: info.Width, + Height: info.Height, + Font: opt.Font, + }) + if err != nil { + return nil, err + } + _, err = NewTableChart(p, opt).renderWithInfo(info) + if err != nil { + return nil, err + } + return p, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/charts.go b/src/server/vendor/github.com/vicanso/go-charts/v2/charts.go new file mode 100644 index 00000000..91a00486 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/charts.go @@ -0,0 +1,473 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "errors" + "math" + "sort" + + "github.com/wcharczuk/go-chart/v2" +) + +const labelFontSize = 10 +const smallLabelFontSize = 8 +const defaultDotWidth = 2.0 +const defaultStrokeWidth = 2.0 + +var defaultChartWidth = 600 +var defaultChartHeight = 400 + +// SetDefaultWidth sets default width of chart +func SetDefaultWidth(width int) { + if width > 0 { + defaultChartWidth = width + } +} + +// SetDefaultHeight sets default height of chart +func SetDefaultHeight(height int) { + if height > 0 { + defaultChartHeight = height + } +} + +var nullValue = math.MaxFloat64 + +// SetNullValue sets the null value, default is MaxFloat64 +func SetNullValue(v float64) { + nullValue = v +} + +// GetNullValue gets the null value +func GetNullValue() float64 { + return nullValue +} + +type Renderer interface { + Render() (Box, error) +} + +type renderHandler struct { + list []func() error +} + +func (rh *renderHandler) Add(fn func() error) { + list := rh.list + if len(list) == 0 { + list = make([]func() error, 0) + } + rh.list = append(list, fn) +} + +func (rh *renderHandler) Do() error { + for _, fn := range rh.list { + err := fn() + if err != nil { + return err + } + } + return nil +} + +type defaultRenderOption struct { + Theme ColorPalette + Padding Box + SeriesList SeriesList + // The y axis option + YAxisOptions []YAxisOption + // The x axis option + XAxis XAxisOption + // The title option + TitleOption TitleOption + // The legend option + LegendOption LegendOption + // background is filled + backgroundIsFilled bool + // x y axis is reversed + axisReversed bool +} + +type defaultRenderResult struct { + axisRanges map[int]axisRange + // 图例区域 + seriesPainter *Painter +} + +func defaultRender(p *Painter, opt defaultRenderOption) (*defaultRenderResult, error) { + seriesList := opt.SeriesList + seriesList.init() + if !opt.backgroundIsFilled { + p.SetBackground(p.Width(), p.Height(), opt.Theme.GetBackgroundColor()) + } + + if !opt.Padding.IsZero() { + p = p.Child(PainterPaddingOption(opt.Padding)) + } + + legendHeight := 0 + if len(opt.LegendOption.Data) != 0 { + if opt.LegendOption.Theme == nil { + opt.LegendOption.Theme = opt.Theme + } + legendResult, err := NewLegendPainter(p, opt.LegendOption).Render() + if err != nil { + return nil, err + } + legendHeight = legendResult.Height() + } + + // 如果有标题 + if opt.TitleOption.Text != "" { + if opt.TitleOption.Theme == nil { + opt.TitleOption.Theme = opt.Theme + } + titlePainter := NewTitlePainter(p, opt.TitleOption) + + titleBox, err := titlePainter.Render() + if err != nil { + return nil, err + } + + top := chart.MaxInt(legendHeight, titleBox.Height()) + // 如果是垂直方式,则不计算legend高度 + if opt.LegendOption.Orient == OrientVertical { + top = titleBox.Height() + } + p = p.Child(PainterPaddingOption(Box{ + // 标题下留白 + Top: top + 20, + })) + } + + result := defaultRenderResult{ + axisRanges: make(map[int]axisRange), + } + + // 计算图表对应的轴有哪些 + axisIndexList := make([]int, 0) + for _, series := range opt.SeriesList { + if containsInt(axisIndexList, series.AxisIndex) { + continue + } + axisIndexList = append(axisIndexList, series.AxisIndex) + } + // 高度需要减去x轴的高度 + rangeHeight := p.Height() - defaultXAxisHeight + rangeWidthLeft := 0 + rangeWidthRight := 0 + + // 倒序 + sort.Sort(sort.Reverse(sort.IntSlice(axisIndexList))) + + // 计算对应的axis range + for _, index := range axisIndexList { + yAxisOption := YAxisOption{} + if len(opt.YAxisOptions) > index { + yAxisOption = opt.YAxisOptions[index] + } + divideCount := yAxisOption.DivideCount + if divideCount <= 0 { + divideCount = defaultAxisDivideCount + } + max, min := opt.SeriesList.GetMaxMin(index) + r := NewRange(AxisRangeOption{ + Painter: p, + Min: min, + Max: max, + // 高度需要减去x轴的高度 + Size: rangeHeight, + // 分隔数量 + DivideCount: divideCount, + }) + if yAxisOption.Min != nil && *yAxisOption.Min <= min { + r.min = *yAxisOption.Min + } + if yAxisOption.Max != nil && *yAxisOption.Max >= max { + r.max = *yAxisOption.Max + } + result.axisRanges[index] = r + + if yAxisOption.Theme == nil { + yAxisOption.Theme = opt.Theme + } + if !opt.axisReversed { + yAxisOption.Data = r.Values() + } else { + yAxisOption.isCategoryAxis = true + // 由于x轴为value部分,因此计算其label单独处理 + opt.XAxis.Data = NewRange(AxisRangeOption{ + Painter: p, + Min: min, + Max: max, + // 高度需要减去x轴的高度 + Size: rangeHeight, + // 分隔数量 + DivideCount: defaultAxisDivideCount, + }).Values() + opt.XAxis.isValueAxis = true + } + reverseStringSlice(yAxisOption.Data) + // TODO生成其它位置既yAxis + var yAxis *axisPainter + child := p.Child(PainterPaddingOption(Box{ + Left: rangeWidthLeft, + Right: rangeWidthRight, + })) + if index == 0 { + yAxis = NewLeftYAxis(child, yAxisOption) + } else { + yAxis = NewRightYAxis(child, yAxisOption) + } + yAxisBox, err := yAxis.Render() + if err != nil { + return nil, err + } + if index == 0 { + rangeWidthLeft += yAxisBox.Width() + } else { + rangeWidthRight += yAxisBox.Width() + } + } + + if opt.XAxis.Theme == nil { + opt.XAxis.Theme = opt.Theme + } + xAxis := NewBottomXAxis(p.Child(PainterPaddingOption(Box{ + Left: rangeWidthLeft, + Right: rangeWidthRight, + })), opt.XAxis) + _, err := xAxis.Render() + if err != nil { + return nil, err + } + + result.seriesPainter = p.Child(PainterPaddingOption(Box{ + Bottom: defaultXAxisHeight, + Left: rangeWidthLeft, + Right: rangeWidthRight, + })) + return &result, nil +} + +func doRender(renderers ...Renderer) error { + for _, r := range renderers { + _, err := r.Render() + if err != nil { + return err + } + } + return nil +} + +func Render(opt ChartOption, opts ...OptionFunc) (*Painter, error) { + for _, fn := range opts { + fn(&opt) + } + opt.fillDefault() + + isChild := true + if opt.Parent == nil { + isChild = false + p, err := NewPainter(PainterOptions{ + Type: opt.Type, + Width: opt.Width, + Height: opt.Height, + Font: opt.font, + }) + if err != nil { + return nil, err + } + opt.Parent = p + } + p := opt.Parent + if opt.ValueFormatter != nil { + p.valueFormatter = opt.ValueFormatter + } + if !opt.Box.IsZero() { + p = p.Child(PainterBoxOption(opt.Box)) + } + if !isChild { + p.SetBackground(p.Width(), p.Height(), opt.BackgroundColor) + } + seriesList := opt.SeriesList + seriesList.init() + + seriesCount := len(seriesList) + + // line chart + lineSeriesList := seriesList.Filter(ChartTypeLine) + barSeriesList := seriesList.Filter(ChartTypeBar) + horizontalBarSeriesList := seriesList.Filter(ChartTypeHorizontalBar) + pieSeriesList := seriesList.Filter(ChartTypePie) + radarSeriesList := seriesList.Filter(ChartTypeRadar) + funnelSeriesList := seriesList.Filter(ChartTypeFunnel) + + if len(horizontalBarSeriesList) != 0 && len(horizontalBarSeriesList) != seriesCount { + return nil, errors.New("Horizontal bar can not mix other charts") + } + if len(pieSeriesList) != 0 && len(pieSeriesList) != seriesCount { + return nil, errors.New("Pie can not mix other charts") + } + if len(radarSeriesList) != 0 && len(radarSeriesList) != seriesCount { + return nil, errors.New("Radar can not mix other charts") + } + if len(funnelSeriesList) != 0 && len(funnelSeriesList) != seriesCount { + return nil, errors.New("Funnel can not mix other charts") + } + + axisReversed := len(horizontalBarSeriesList) != 0 + renderOpt := defaultRenderOption{ + Theme: opt.theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: opt.XAxis, + YAxisOptions: opt.YAxisOptions, + TitleOption: opt.Title, + LegendOption: opt.Legend, + axisReversed: axisReversed, + // 前置已设置背景色 + backgroundIsFilled: true, + } + if len(pieSeriesList) != 0 || + len(radarSeriesList) != 0 || + len(funnelSeriesList) != 0 { + renderOpt.XAxis.Show = FalseFlag() + renderOpt.YAxisOptions = []YAxisOption{ + { + Show: FalseFlag(), + }, + } + } + if len(horizontalBarSeriesList) != 0 { + renderOpt.YAxisOptions[0].DivideCount = len(renderOpt.YAxisOptions[0].Data) + renderOpt.YAxisOptions[0].Unit = 1 + } + + renderResult, err := defaultRender(p, renderOpt) + if err != nil { + return nil, err + } + + handler := renderHandler{} + + // bar chart + if len(barSeriesList) != 0 { + handler.Add(func() error { + _, err := NewBarChart(p, BarChartOption{ + Theme: opt.theme, + Font: opt.font, + XAxis: opt.XAxis, + BarWidth: opt.BarWidth, + BarMargin: opt.BarMargin, + }).render(renderResult, barSeriesList) + return err + }) + } + + // horizontal bar chart + if len(horizontalBarSeriesList) != 0 { + handler.Add(func() error { + _, err := NewHorizontalBarChart(p, HorizontalBarChartOption{ + Theme: opt.theme, + Font: opt.font, + BarHeight: opt.BarHeight, + BarMargin: opt.BarMargin, + YAxisOptions: opt.YAxisOptions, + }).render(renderResult, horizontalBarSeriesList) + return err + }) + } + + // pie chart + if len(pieSeriesList) != 0 { + handler.Add(func() error { + _, err := NewPieChart(p, PieChartOption{ + Theme: opt.theme, + Font: opt.font, + }).render(renderResult, pieSeriesList) + return err + }) + } + + // line chart + if len(lineSeriesList) != 0 { + handler.Add(func() error { + _, err := NewLineChart(p, LineChartOption{ + Theme: opt.theme, + Font: opt.font, + XAxis: opt.XAxis, + SymbolShow: opt.SymbolShow, + StrokeWidth: opt.LineStrokeWidth, + FillArea: opt.FillArea, + Opacity: opt.Opacity, + }).render(renderResult, lineSeriesList) + return err + }) + } + + // radar chart + if len(radarSeriesList) != 0 { + handler.Add(func() error { + _, err := NewRadarChart(p, RadarChartOption{ + Theme: opt.theme, + Font: opt.font, + // 相应值 + RadarIndicators: opt.RadarIndicators, + }).render(renderResult, radarSeriesList) + return err + }) + } + + // funnel chart + if len(funnelSeriesList) != 0 { + handler.Add(func() error { + _, err := NewFunnelChart(p, FunnelChartOption{ + Theme: opt.theme, + Font: opt.font, + }).render(renderResult, funnelSeriesList) + return err + }) + } + + err = handler.Do() + + if err != nil { + return nil, err + } + for _, item := range opt.Children { + item.Parent = p + if item.Theme == "" { + item.Theme = opt.Theme + } + if item.FontFamily == "" { + item.FontFamily = opt.FontFamily + } + _, err = Render(item) + if err != nil { + return nil, err + } + } + + return p, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/echarts.go b/src/server/vendor/github.com/vicanso/go-charts/v2/echarts.go new file mode 100644 index 00000000..5a0e5a05 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/echarts.go @@ -0,0 +1,528 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "bytes" + "encoding/json" + "fmt" + "regexp" + "strconv" + + "github.com/wcharczuk/go-chart/v2" +) + +func convertToArray(data []byte) []byte { + data = bytes.TrimSpace(data) + if len(data) == 0 { + return nil + } + if data[0] != '[' { + data = []byte("[" + string(data) + "]") + } + return data +} + +type EChartsPosition string + +func (p *EChartsPosition) UnmarshalJSON(data []byte) error { + if len(data) == 0 { + return nil + } + if regexp.MustCompile(`^\d+`).Match(data) { + data = []byte(fmt.Sprintf(`"%s"`, string(data))) + } + s := (*string)(p) + return json.Unmarshal(data, s) +} + +type EChartStyle struct { + Color string `json:"color"` +} + +func (es *EChartStyle) ToStyle() Style { + color := parseColor(es.Color) + return Style{ + FillColor: color, + FontColor: color, + StrokeColor: color, + } +} + +type EChartsSeriesDataValue struct { + values []float64 +} + +func (value *EChartsSeriesDataValue) UnmarshalJSON(data []byte) error { + data = convertToArray(data) + return json.Unmarshal(data, &value.values) +} +func (value *EChartsSeriesDataValue) First() float64 { + if len(value.values) == 0 { + return 0 + } + return value.values[0] +} +func NewEChartsSeriesDataValue(values ...float64) EChartsSeriesDataValue { + return EChartsSeriesDataValue{ + values: values, + } +} + +type EChartsSeriesData struct { + Value EChartsSeriesDataValue `json:"value"` + Name string `json:"name"` + ItemStyle EChartStyle `json:"itemStyle"` +} +type _EChartsSeriesData EChartsSeriesData + +var numericRep = regexp.MustCompile(`^[-+]?[0-9]+(?:\.[0-9]+)?$`) + +func (es *EChartsSeriesData) UnmarshalJSON(data []byte) error { + data = bytes.TrimSpace(data) + if len(data) == 0 { + return nil + } + if numericRep.Match(data) { + v, err := strconv.ParseFloat(string(data), 64) + if err != nil { + return err + } + es.Value = EChartsSeriesDataValue{ + values: []float64{ + v, + }, + } + return nil + } + v := _EChartsSeriesData{} + err := json.Unmarshal(data, &v) + if err != nil { + return err + } + es.Name = v.Name + es.Value = v.Value + es.ItemStyle = v.ItemStyle + return nil +} + +type EChartsXAxisData struct { + BoundaryGap *bool `json:"boundaryGap"` + SplitNumber int `json:"splitNumber"` + Data []string `json:"data"` + Type string `json:"type"` +} +type EChartsXAxis struct { + Data []EChartsXAxisData +} + +func (ex *EChartsXAxis) UnmarshalJSON(data []byte) error { + data = convertToArray(data) + if len(data) == 0 { + return nil + } + return json.Unmarshal(data, &ex.Data) +} + +type EChartsAxisLabel struct { + Formatter string `json:"formatter"` +} +type EChartsYAxisData struct { + Min *float64 `json:"min"` + Max *float64 `json:"max"` + AxisLabel EChartsAxisLabel `json:"axisLabel"` + AxisLine struct { + LineStyle struct { + Color string `json:"color"` + } `json:"lineStyle"` + } `json:"axisLine"` + Data []string `json:"data"` +} +type EChartsYAxis struct { + Data []EChartsYAxisData `json:"data"` +} + +func (ey *EChartsYAxis) UnmarshalJSON(data []byte) error { + data = convertToArray(data) + if len(data) == 0 { + return nil + } + return json.Unmarshal(data, &ey.Data) +} + +type EChartsPadding struct { + Box chart.Box +} + +func (eb *EChartsPadding) UnmarshalJSON(data []byte) error { + data = convertToArray(data) + if len(data) == 0 { + return nil + } + arr := make([]int, 0) + err := json.Unmarshal(data, &arr) + if err != nil { + return err + } + if len(arr) == 0 { + return nil + } + switch len(arr) { + case 1: + eb.Box = chart.Box{ + Left: arr[0], + Top: arr[0], + Bottom: arr[0], + Right: arr[0], + } + case 2: + eb.Box = chart.Box{ + Top: arr[0], + Bottom: arr[0], + Left: arr[1], + Right: arr[1], + } + default: + result := make([]int, 4) + copy(result, arr) + if len(arr) == 3 { + result[3] = result[1] + } + // 上右下左 + eb.Box = chart.Box{ + Top: result[0], + Right: result[1], + Bottom: result[2], + Left: result[3], + } + } + return nil +} + +type EChartsLabelOption struct { + Show bool `json:"show"` + Distance int `json:"distance"` + Color string `json:"color"` +} +type EChartsLegend struct { + Show *bool `json:"show"` + Data []string `json:"data"` + Align string `json:"align"` + Orient string `json:"orient"` + Padding EChartsPadding `json:"padding"` + Left EChartsPosition `json:"left"` + Top EChartsPosition `json:"top"` + TextStyle EChartsTextStyle `json:"textStyle"` +} + +type EChartsMarkData struct { + Type string `json:"type"` +} +type _EChartsMarkData EChartsMarkData + +func (emd *EChartsMarkData) UnmarshalJSON(data []byte) error { + data = bytes.TrimSpace(data) + if len(data) == 0 { + return nil + } + data = convertToArray(data) + ds := make([]*_EChartsMarkData, 0) + err := json.Unmarshal(data, &ds) + if err != nil { + return err + } + for _, d := range ds { + if d.Type != "" { + emd.Type = d.Type + } + } + return nil +} + +type EChartsMarkPoint struct { + SymbolSize int `json:"symbolSize"` + Data []EChartsMarkData `json:"data"` +} + +func (emp *EChartsMarkPoint) ToSeriesMarkPoint() SeriesMarkPoint { + sp := SeriesMarkPoint{ + SymbolSize: emp.SymbolSize, + } + if len(emp.Data) == 0 { + return sp + } + data := make([]SeriesMarkData, len(emp.Data)) + for index, item := range emp.Data { + data[index].Type = item.Type + } + sp.Data = data + return sp +} + +type EChartsMarkLine struct { + Data []EChartsMarkData `json:"data"` +} + +func (eml *EChartsMarkLine) ToSeriesMarkLine() SeriesMarkLine { + sl := SeriesMarkLine{} + if len(eml.Data) == 0 { + return sl + } + data := make([]SeriesMarkData, len(eml.Data)) + for index, item := range eml.Data { + data[index].Type = item.Type + } + sl.Data = data + return sl +} + +type EChartsSeries struct { + Data []EChartsSeriesData `json:"data"` + Name string `json:"name"` + Type string `json:"type"` + Radius string `json:"radius"` + YAxisIndex int `json:"yAxisIndex"` + ItemStyle EChartStyle `json:"itemStyle"` + // label的配置 + Label EChartsLabelOption `json:"label"` + MarkPoint EChartsMarkPoint `json:"markPoint"` + MarkLine EChartsMarkLine `json:"markLine"` + Max *float64 `json:"max"` + Min *float64 `json:"min"` +} +type EChartsSeriesList []EChartsSeries + +func (esList EChartsSeriesList) ToSeriesList() SeriesList { + seriesList := make(SeriesList, 0, len(esList)) + for _, item := range esList { + // 如果是pie,则每个子荐生成一个series + if item.Type == ChartTypePie { + for _, dataItem := range item.Data { + seriesList = append(seriesList, Series{ + Type: item.Type, + Name: dataItem.Name, + Label: SeriesLabel{ + Show: true, + }, + Radius: item.Radius, + Data: []SeriesData{ + { + Value: dataItem.Value.First(), + }, + }, + }) + } + continue + } + // 如果是radar或funnel + if item.Type == ChartTypeRadar || + item.Type == ChartTypeFunnel { + for _, dataItem := range item.Data { + seriesList = append(seriesList, Series{ + Name: dataItem.Name, + Type: item.Type, + Data: NewSeriesDataFromValues(dataItem.Value.values), + Max: item.Max, + Min: item.Min, + Label: SeriesLabel{ + Color: parseColor(item.Label.Color), + Show: item.Label.Show, + Distance: item.Label.Distance, + }, + }) + } + continue + } + data := make([]SeriesData, len(item.Data)) + for j, dataItem := range item.Data { + data[j] = SeriesData{ + Value: dataItem.Value.First(), + Style: dataItem.ItemStyle.ToStyle(), + } + } + seriesList = append(seriesList, Series{ + Type: item.Type, + Data: data, + AxisIndex: item.YAxisIndex, + Style: item.ItemStyle.ToStyle(), + Label: SeriesLabel{ + Color: parseColor(item.Label.Color), + Show: item.Label.Show, + Distance: item.Label.Distance, + }, + Name: item.Name, + MarkPoint: item.MarkPoint.ToSeriesMarkPoint(), + MarkLine: item.MarkLine.ToSeriesMarkLine(), + }) + } + return seriesList +} + +type EChartsTextStyle struct { + Color string `json:"color"` + FontFamily string `json:"fontFamily"` + FontSize float64 `json:"fontSize"` +} + +func (et *EChartsTextStyle) ToStyle() chart.Style { + s := chart.Style{ + FontSize: et.FontSize, + FontColor: parseColor(et.Color), + } + if et.FontFamily != "" { + s.Font, _ = GetFont(et.FontFamily) + } + return s +} + +type EChartsOption struct { + Type string `json:"type"` + Theme string `json:"theme"` + FontFamily string `json:"fontFamily"` + Padding EChartsPadding `json:"padding"` + Box chart.Box `json:"box"` + Width int `json:"width"` + Height int `json:"height"` + Title struct { + Text string `json:"text"` + Subtext string `json:"subtext"` + Left EChartsPosition `json:"left"` + Top EChartsPosition `json:"top"` + TextStyle EChartsTextStyle `json:"textStyle"` + SubtextStyle EChartsTextStyle `json:"subtextStyle"` + } `json:"title"` + XAxis EChartsXAxis `json:"xAxis"` + YAxis EChartsYAxis `json:"yAxis"` + Legend EChartsLegend `json:"legend"` + Radar struct { + Indicator []RadarIndicator `json:"indicator"` + } `json:"radar"` + Series EChartsSeriesList `json:"series"` + Children []EChartsOption `json:"children"` +} + +func (eo *EChartsOption) ToOption() ChartOption { + fontFamily := eo.FontFamily + if len(fontFamily) == 0 { + fontFamily = eo.Title.TextStyle.FontFamily + } + titleTextStyle := eo.Title.TextStyle.ToStyle() + titleSubtextStyle := eo.Title.SubtextStyle.ToStyle() + legendTextStyle := eo.Legend.TextStyle.ToStyle() + o := ChartOption{ + Type: eo.Type, + FontFamily: fontFamily, + Theme: eo.Theme, + Title: TitleOption{ + Text: eo.Title.Text, + Subtext: eo.Title.Subtext, + FontColor: titleTextStyle.FontColor, + FontSize: titleTextStyle.FontSize, + SubtextFontSize: titleSubtextStyle.FontSize, + SubtextFontColor: titleSubtextStyle.FontColor, + Left: string(eo.Title.Left), + Top: string(eo.Title.Top), + }, + Legend: LegendOption{ + Show: eo.Legend.Show, + FontSize: legendTextStyle.FontSize, + FontColor: legendTextStyle.FontColor, + Data: eo.Legend.Data, + Left: string(eo.Legend.Left), + Top: string(eo.Legend.Top), + Align: eo.Legend.Align, + Orient: eo.Legend.Orient, + }, + RadarIndicators: eo.Radar.Indicator, + Width: eo.Width, + Height: eo.Height, + Padding: eo.Padding.Box, + Box: eo.Box, + SeriesList: eo.Series.ToSeriesList(), + } + isHorizontalChart := false + for _, item := range eo.XAxis.Data { + if item.Type == "value" { + isHorizontalChart = true + } + } + if isHorizontalChart { + for index := range o.SeriesList { + series := o.SeriesList[index] + if series.Type == ChartTypeBar { + o.SeriesList[index].Type = ChartTypeHorizontalBar + } + } + } + + if len(eo.XAxis.Data) != 0 { + xAxisData := eo.XAxis.Data[0] + o.XAxis = XAxisOption{ + BoundaryGap: xAxisData.BoundaryGap, + Data: xAxisData.Data, + SplitNumber: xAxisData.SplitNumber, + } + } + yAxisOptions := make([]YAxisOption, len(eo.YAxis.Data)) + for index, item := range eo.YAxis.Data { + yAxisOptions[index] = YAxisOption{ + Min: item.Min, + Max: item.Max, + Formatter: item.AxisLabel.Formatter, + Color: parseColor(item.AxisLine.LineStyle.Color), + Data: item.Data, + } + } + o.YAxisOptions = yAxisOptions + + if len(eo.Children) != 0 { + o.Children = make([]ChartOption, len(eo.Children)) + for index, item := range eo.Children { + o.Children[index] = item.ToOption() + } + } + return o +} + +func renderEcharts(options, outputType string) ([]byte, error) { + o := EChartsOption{} + err := json.Unmarshal([]byte(options), &o) + if err != nil { + return nil, err + } + opt := o.ToOption() + opt.Type = outputType + d, err := Render(opt) + if err != nil { + return nil, err + } + return d.Bytes() +} + +func RenderEChartsToPNG(options string) ([]byte, error) { + return renderEcharts(options, "png") +} + +func RenderEChartsToSVG(options string) ([]byte, error) { + return renderEcharts(options, "svg") +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/font.go b/src/server/vendor/github.com/vicanso/go-charts/v2/font.go new file mode 100644 index 00000000..dae5141a --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/font.go @@ -0,0 +1,78 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "errors" + "sync" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/roboto" +) + +var fonts = sync.Map{} +var ErrFontNotExists = errors.New("font is not exists") +var defaultFontFamily = "defaultFontFamily" + +func init() { + name := "roboto" + _ = InstallFont(name, roboto.Roboto) + font, _ := GetFont(name) + SetDefaultFont(font) +} + +// InstallFont installs the font for charts +func InstallFont(fontFamily string, data []byte) error { + font, err := truetype.Parse(data) + if err != nil { + return err + } + fonts.Store(fontFamily, font) + return nil +} + +// GetDefaultFont get default font +func GetDefaultFont() (*truetype.Font, error) { + return GetFont(defaultFontFamily) +} + +// SetDefaultFont set default font +func SetDefaultFont(font *truetype.Font) { + if font == nil { + return + } + fonts.Store(defaultFontFamily, font) +} + +// GetFont get the font by font family +func GetFont(fontFamily string) (*truetype.Font, error) { + value, ok := fonts.Load(fontFamily) + if !ok { + return nil, ErrFontNotExists + } + f, ok := value.(*truetype.Font) + if !ok { + return nil, ErrFontNotExists + } + return f, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/funnel_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/funnel_chart.go new file mode 100644 index 00000000..d4a8bdd8 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/funnel_chart.go @@ -0,0 +1,192 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" +) + +type funnelChart struct { + p *Painter + opt *FunnelChartOption +} + +// NewFunnelSeriesList returns a series list for funnel +func NewFunnelSeriesList(values []float64) SeriesList { + seriesList := make(SeriesList, len(values)) + for index, value := range values { + seriesList[index] = NewSeriesFromValues([]float64{ + value, + }, ChartTypeFunnel) + } + return seriesList +} + +// NewFunnelChart returns a funnel chart renderer +func NewFunnelChart(p *Painter, opt FunnelChartOption) *funnelChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &funnelChart{ + p: p, + opt: &opt, + } +} + +type FunnelChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The padding of line chart + Padding Box + // The option of title + Title TitleOption + // The legend option + Legend LegendOption +} + +func (f *funnelChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + opt := f.opt + seriesPainter := result.seriesPainter + max := seriesList[0].Data[0].Value + min := float64(0) + for _, item := range seriesList { + if item.Max != nil { + max = *item.Max + } + if item.Min != nil { + min = *item.Min + } + } + theme := opt.Theme + gap := 2 + height := seriesPainter.Height() + width := seriesPainter.Width() + count := len(seriesList) + + h := (height - gap*(count-1)) / count + + y := 0 + widthList := make([]int, len(seriesList)) + textList := make([]string, len(seriesList)) + seriesNames := seriesList.Names() + offset := max - min + for index, item := range seriesList { + value := item.Data[0].Value + // 最大最小值一致则为100% + widthPercent := 100.0 + if offset != 0 { + widthPercent = (value - min) / offset + } + w := int(widthPercent * float64(width)) + widthList[index] = w + // 如果最大值为0,则占比100% + percent := 1.0 + if max != 0 { + percent = value / max + } + textList[index] = NewFunnelLabelFormatter(seriesNames, item.Label.Formatter)(index, value, percent) + } + + for index, w := range widthList { + series := seriesList[index] + nextWidth := 0 + if index+1 < len(widthList) { + nextWidth = widthList[index+1] + } + topStartX := (width - w) >> 1 + topEndX := topStartX + w + bottomStartX := (width - nextWidth) >> 1 + bottomEndX := bottomStartX + nextWidth + points := []Point{ + { + X: topStartX, + Y: y, + }, + { + X: topEndX, + Y: y, + }, + { + X: bottomEndX, + Y: y + h, + }, + { + X: bottomStartX, + Y: y + h, + }, + { + X: topStartX, + Y: y, + }, + } + color := theme.GetSeriesColor(series.index) + + seriesPainter.OverrideDrawingStyle(Style{ + FillColor: color, + }).FillArea(points) + + // 文本 + text := textList[index] + seriesPainter.OverrideTextStyle(Style{ + FontColor: theme.GetTextColor(), + FontSize: labelFontSize, + Font: opt.Font, + }) + textBox := seriesPainter.MeasureText(text) + textX := width>>1 - textBox.Width()>>1 + textY := y + h>>1 + seriesPainter.Text(text, textX, textY) + y += (h + gap) + } + + return f.p.box, nil +} + +func (f *funnelChart) Render() (Box, error) { + p := f.p + opt := f.opt + renderResult, err := defaultRender(p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: XAxisOption{ + Show: FalseFlag(), + }, + YAxisOptions: []YAxisOption{ + { + Show: FalseFlag(), + }, + }, + TitleOption: opt.Title, + LegendOption: opt.Legend, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypeFunnel) + return f.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/grid.go b/src/server/vendor/github.com/vicanso/go-charts/v2/grid.go new file mode 100644 index 00000000..0ebd226c --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/grid.go @@ -0,0 +1,92 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +type gridPainter struct { + p *Painter + opt *GridPainterOption +} + +type GridPainterOption struct { + // The stroke width + StrokeWidth float64 + // The stroke color + StrokeColor Color + // The spans of column + ColumnSpans []int + // The column of grid + Column int + // The row of grid + Row int + // Ignore first row + IgnoreFirstRow bool + // Ignore last row + IgnoreLastRow bool + // Ignore first column + IgnoreFirstColumn bool + // Ignore last column + IgnoreLastColumn bool +} + +// NewGridPainter returns new a grid renderer +func NewGridPainter(p *Painter, opt GridPainterOption) *gridPainter { + return &gridPainter{ + p: p, + opt: &opt, + } +} + +func (g *gridPainter) Render() (Box, error) { + opt := g.opt + ignoreColumnLines := make([]int, 0) + if opt.IgnoreFirstColumn { + ignoreColumnLines = append(ignoreColumnLines, 0) + } + if opt.IgnoreLastColumn { + ignoreColumnLines = append(ignoreColumnLines, opt.Column) + } + ignoreRowLines := make([]int, 0) + if opt.IgnoreFirstRow { + ignoreRowLines = append(ignoreRowLines, 0) + } + if opt.IgnoreLastRow { + ignoreRowLines = append(ignoreRowLines, opt.Row) + } + strokeWidth := opt.StrokeWidth + if strokeWidth <= 0 { + strokeWidth = 1 + } + + g.p.SetDrawingStyle(Style{ + StrokeWidth: strokeWidth, + StrokeColor: opt.StrokeColor, + }) + g.p.Grid(GridOption{ + Column: opt.Column, + ColumnSpans: opt.ColumnSpans, + Row: opt.Row, + IgnoreColumnLines: ignoreColumnLines, + IgnoreRowLines: ignoreRowLines, + }) + return g.p.box, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/horizontal_bar_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/horizontal_bar_chart.go new file mode 100644 index 00000000..2ea97bd1 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/horizontal_bar_chart.go @@ -0,0 +1,216 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" +) + +type horizontalBarChart struct { + p *Painter + opt *HorizontalBarChartOption +} + +type HorizontalBarChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The x axis option + XAxis XAxisOption + // The padding of line chart + Padding Box + // The y axis option + YAxisOptions []YAxisOption + // The option of title + Title TitleOption + // The legend option + Legend LegendOption + BarHeight int + // Margin of bar + BarMargin int +} + +// NewHorizontalBarChart returns a horizontal bar chart renderer +func NewHorizontalBarChart(p *Painter, opt HorizontalBarChartOption) *horizontalBarChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &horizontalBarChart{ + p: p, + opt: &opt, + } +} + +func (h *horizontalBarChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + p := h.p + opt := h.opt + seriesPainter := result.seriesPainter + yRange := result.axisRanges[0] + y0, y1 := yRange.GetRange(0) + height := int(y1 - y0) + // 每一块之间的margin + margin := 10 + // 每一个bar之间的margin + barMargin := 5 + if height < 20 { + margin = 2 + barMargin = 2 + } else if height < 50 { + margin = 5 + barMargin = 3 + } + if opt.BarMargin > 0 { + barMargin = opt.BarMargin + } + seriesCount := len(seriesList) + // 总的高度-两个margin-(总数-1)的barMargin + barHeight := (height - 2*margin - barMargin*(seriesCount-1)) / seriesCount + if opt.BarHeight > 0 && opt.BarHeight < barHeight { + barHeight = opt.BarHeight + margin = (height - seriesCount*barHeight - barMargin*(seriesCount-1)) / 2 + } + + theme := opt.Theme + + max, min := seriesList.GetMaxMin(0) + xRange := NewRange(AxisRangeOption{ + Painter: p, + Min: min, + Max: max, + DivideCount: defaultAxisDivideCount, + Size: seriesPainter.Width(), + }) + seriesNames := seriesList.Names() + + rendererList := []Renderer{} + for index := range seriesList { + series := seriesList[index] + seriesColor := theme.GetSeriesColor(series.index) + divideValues := yRange.AutoDivide() + + var labelPainter *SeriesLabelPainter + if series.Label.Show { + labelPainter = NewSeriesLabelPainter(SeriesLabelPainterParams{ + P: seriesPainter, + SeriesNames: seriesNames, + Label: series.Label, + Theme: opt.Theme, + Font: opt.Font, + }) + rendererList = append(rendererList, labelPainter) + } + for j, item := range series.Data { + if j >= yRange.divideCount { + continue + } + // 显示位置切换 + j = yRange.divideCount - j - 1 + y := divideValues[j] + y += margin + if index != 0 { + y += index * (barHeight + barMargin) + } + + w := int(xRange.getHeight(item.Value)) + fillColor := seriesColor + if !item.Style.FillColor.IsZero() { + fillColor = item.Style.FillColor + } + right := w + if series.RoundRadius <= 0 { + seriesPainter.OverrideDrawingStyle(Style{ + FillColor: fillColor, + }).Rect(chart.Box{ + Top: y, + Left: 0, + Right: right, + Bottom: y + barHeight, + }) + } else { + seriesPainter.OverrideDrawingStyle(Style{ + FillColor: fillColor, + }).RoundedRect(chart.Box{ + Top: y, + Left: 0, + Right: right, + Bottom: y + barHeight, + }, series.RoundRadius) + } + + // 如果label不需要展示,则返回 + if labelPainter == nil { + continue + } + labelValue := LabelValue{ + Orient: OrientHorizontal, + Index: index, + Value: item.Value, + X: right, + Y: y + barHeight>>1, + Offset: series.Label.Offset, + FontColor: series.Label.Color, + FontSize: series.Label.FontSize, + } + if series.Label.Position == PositionLeft { + labelValue.X = 0 + if labelValue.FontColor.IsZero() { + if isLightColor(fillColor) { + labelValue.FontColor = defaultLightFontColor + } else { + labelValue.FontColor = defaultDarkFontColor + } + } + } + labelPainter.Add(labelValue) + } + } + err := doRender(rendererList...) + if err != nil { + return BoxZero, err + } + return p.box, nil +} + +func (h *horizontalBarChart) Render() (Box, error) { + p := h.p + opt := h.opt + renderResult, err := defaultRender(p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: opt.XAxis, + YAxisOptions: opt.YAxisOptions, + TitleOption: opt.Title, + LegendOption: opt.Legend, + axisReversed: true, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypeHorizontalBar) + return h.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/legend.go b/src/server/vendor/github.com/vicanso/go-charts/v2/legend.go new file mode 100644 index 00000000..035642c4 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/legend.go @@ -0,0 +1,251 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "strconv" + "strings" +) + +type legendPainter struct { + p *Painter + opt *LegendOption +} + +const IconRect = "rect" +const IconLineDot = "lineDot" + +type LegendOption struct { + // The theme + Theme ColorPalette + // Text array of legend + Data []string + // Distance between legend component and the left side of the container. + // It can be pixel value: 20, percentage value: 20%, + // or position value: right, center. + Left string + // Distance between legend component and the top side of the container. + // It can be pixel value: 20. + Top string + // Legend marker and text aligning, it can be left or right, default is left. + Align string + // The layout orientation of legend, it can be horizontal or vertical, default is horizontal. + Orient string + // Icon of the legend. + Icon string + // Font size of legend text + FontSize float64 + // FontColor color of legend text + FontColor Color + // The flag for show legend, set this to *false will hide legend + Show *bool + // The padding of legend + Padding Box +} + +// NewLegendOption returns a legend option +func NewLegendOption(labels []string, left ...string) LegendOption { + opt := LegendOption{ + Data: labels, + } + if len(left) != 0 { + opt.Left = left[0] + } + return opt +} + +// IsEmpty checks legend is empty +func (opt *LegendOption) IsEmpty() bool { + isEmpty := true + for _, v := range opt.Data { + if v != "" { + isEmpty = false + break + } + } + return isEmpty +} + +// NewLegendPainter returns a legend renderer +func NewLegendPainter(p *Painter, opt LegendOption) *legendPainter { + return &legendPainter{ + p: p, + opt: &opt, + } +} + +func (l *legendPainter) Render() (Box, error) { + opt := l.opt + theme := opt.Theme + if opt.IsEmpty() || + isFalse(opt.Show) { + return BoxZero, nil + } + if theme == nil { + theme = l.p.theme + } + if opt.FontSize == 0 { + opt.FontSize = theme.GetFontSize() + } + if opt.FontColor.IsZero() { + opt.FontColor = theme.GetTextColor() + } + if opt.Left == "" { + opt.Left = PositionCenter + } + padding := opt.Padding + if padding.IsZero() { + padding.Top = 5 + } + p := l.p.Child(PainterPaddingOption(padding)) + p.SetTextStyle(Style{ + FontSize: opt.FontSize, + FontColor: opt.FontColor, + }) + measureList := make([]Box, len(opt.Data)) + maxTextWidth := 0 + for index, text := range opt.Data { + b := p.MeasureText(text) + if b.Width() > maxTextWidth { + maxTextWidth = b.Width() + } + measureList[index] = b + } + + // 计算展示的宽高 + width := 0 + height := 0 + offset := 20 + textOffset := 2 + legendWidth := 30 + legendHeight := 20 + itemMaxHeight := 0 + for _, item := range measureList { + if item.Height() > itemMaxHeight { + itemMaxHeight = item.Height() + } + if opt.Orient == OrientVertical { + height += item.Height() + } else { + width += item.Width() + } + } + // 增加padding + itemMaxHeight += 10 + if opt.Orient == OrientVertical { + width = maxTextWidth + textOffset + legendWidth + height = offset * len(opt.Data) + } else { + height = legendHeight + offsetValue := (len(opt.Data) - 1) * (offset + textOffset) + allLegendWidth := len(opt.Data) * legendWidth + width += (offsetValue + allLegendWidth) + } + + // 计算开始的位置 + left := 0 + switch opt.Left { + case PositionRight: + left = p.Width() - width + case PositionCenter: + left = (p.Width() - width) >> 1 + default: + if strings.HasSuffix(opt.Left, "%") { + value, _ := strconv.Atoi(strings.ReplaceAll(opt.Left, "%", "")) + left = p.Width() * value / 100 + } else { + value, _ := strconv.Atoi(opt.Left) + left = value + } + } + top, _ := strconv.Atoi(opt.Top) + + if left < 0 { + left = 0 + } + + x := int(left) + y := int(top) + 10 + startY := y + x0 := x + y0 := y + + drawIcon := func(top, left int) int { + if opt.Icon == IconRect { + p.Rect(Box{ + Top: top - legendHeight + 8, + Left: left, + Right: left + legendWidth, + Bottom: top + 1, + }) + } else { + p.LegendLineDot(Box{ + Top: top + 1, + Left: left, + Right: left + legendWidth, + Bottom: top + legendHeight + 1, + }) + } + return left + legendWidth + } + lastIndex := len(opt.Data) - 1 + for index, text := range opt.Data { + color := theme.GetSeriesColor(index) + p.SetDrawingStyle(Style{ + FillColor: color, + StrokeColor: color, + }) + itemWidth := x0 + measureList[index].Width() + textOffset + offset + legendWidth + if lastIndex == index { + itemWidth = x0 + measureList[index].Width() + legendWidth + } + if itemWidth > p.Width() { + x0 = 0 + y += itemMaxHeight + y0 = y + } + if opt.Align != AlignRight { + x0 = drawIcon(y0, x0) + x0 += textOffset + } + p.Text(text, x0, y0) + x0 += measureList[index].Width() + if opt.Align == AlignRight { + x0 += textOffset + x0 = drawIcon(y0, x0) + } + if opt.Orient == OrientVertical { + y0 += offset + x0 = x + } else { + x0 += offset + y0 = y + } + height = y0 - startY + 10 + } + + return Box{ + Right: width, + Bottom: height + padding.Bottom + padding.Top, + }, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/line_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/line_chart.go new file mode 100644 index 00000000..363cd368 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/line_chart.go @@ -0,0 +1,240 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "math" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +type lineChart struct { + p *Painter + opt *LineChartOption +} + +// NewLineChart returns a line chart render +func NewLineChart(p *Painter, opt LineChartOption) *lineChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &lineChart{ + p: p, + opt: &opt, + } +} + +type LineChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The x axis option + XAxis XAxisOption + // The padding of line chart + Padding Box + // The y axis option + YAxisOptions []YAxisOption + // The option of title + Title TitleOption + // The legend option + Legend LegendOption + // The flag for show symbol of line, set this to *false will hide symbol + SymbolShow *bool + // The stroke width of line + StrokeWidth float64 + // Fill the area of line + FillArea bool + // background is filled + backgroundIsFilled bool + // background fill (alpha) opacity + Opacity uint8 +} + +func (l *lineChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + p := l.p + opt := l.opt + boundaryGap := true + if isFalse(opt.XAxis.BoundaryGap) { + boundaryGap = false + } + + seriesPainter := result.seriesPainter + + xDivideCount := len(opt.XAxis.Data) + if !boundaryGap { + xDivideCount-- + } + xDivideValues := autoDivide(seriesPainter.Width(), xDivideCount) + xValues := make([]int, len(xDivideValues)-1) + if boundaryGap { + for i := 0; i < len(xDivideValues)-1; i++ { + xValues[i] = (xDivideValues[i] + xDivideValues[i+1]) >> 1 + } + } else { + xValues = xDivideValues + } + markPointPainter := NewMarkPointPainter(seriesPainter) + markLinePainter := NewMarkLinePainter(seriesPainter) + rendererList := []Renderer{ + markPointPainter, + markLinePainter, + } + strokeWidth := opt.StrokeWidth + if strokeWidth == 0 { + strokeWidth = defaultStrokeWidth + } + seriesNames := seriesList.Names() + for index := range seriesList { + series := seriesList[index] + seriesColor := opt.Theme.GetSeriesColor(series.index) + drawingStyle := Style{ + StrokeColor: seriesColor, + StrokeWidth: strokeWidth, + } + if len(series.Style.StrokeDashArray) > 0 { + drawingStyle.StrokeDashArray = series.Style.StrokeDashArray + } + + yRange := result.axisRanges[series.AxisIndex] + points := make([]Point, 0) + var labelPainter *SeriesLabelPainter + if series.Label.Show { + labelPainter = NewSeriesLabelPainter(SeriesLabelPainterParams{ + P: seriesPainter, + SeriesNames: seriesNames, + Label: series.Label, + Theme: opt.Theme, + Font: opt.Font, + }) + rendererList = append(rendererList, labelPainter) + } + for i, item := range series.Data { + h := yRange.getRestHeight(item.Value) + if item.Value == nullValue { + h = int(math.MaxInt32) + } + p := Point{ + X: xValues[i], + Y: h, + } + points = append(points, p) + + // 如果label不需要展示,则返回 + if labelPainter == nil { + continue + } + labelPainter.Add(LabelValue{ + Index: index, + Value: item.Value, + X: p.X, + Y: p.Y, + // 字体大小 + FontSize: series.Label.FontSize, + }) + } + // 如果需要填充区域 + if opt.FillArea { + areaPoints := make([]Point, len(points)) + copy(areaPoints, points) + bottomY := yRange.getRestHeight(yRange.min) + var opacity uint8 = 200 + if opt.Opacity != 0 { + opacity = opt.Opacity + } + areaPoints = append(areaPoints, Point{ + X: areaPoints[len(areaPoints)-1].X, + Y: bottomY, + }, Point{ + X: areaPoints[0].X, + Y: bottomY, + }, areaPoints[0]) + seriesPainter.SetDrawingStyle(Style{ + FillColor: seriesColor.WithAlpha(opacity), + }) + seriesPainter.FillArea(areaPoints) + } + seriesPainter.SetDrawingStyle(drawingStyle) + + // 画线 + seriesPainter.LineStroke(points) + + // 画点 + if opt.Theme.IsDark() { + drawingStyle.FillColor = drawingStyle.StrokeColor + } else { + drawingStyle.FillColor = drawing.ColorWhite + } + drawingStyle.StrokeWidth = 1 + seriesPainter.SetDrawingStyle(drawingStyle) + if !isFalse(opt.SymbolShow) { + seriesPainter.Dots(points) + } + markPointPainter.Add(markPointRenderOption{ + FillColor: seriesColor, + Font: opt.Font, + Points: points, + Series: series, + }) + markLinePainter.Add(markLineRenderOption{ + FillColor: seriesColor, + FontColor: opt.Theme.GetTextColor(), + StrokeColor: seriesColor, + Font: opt.Font, + Series: series, + Range: yRange, + }) + } + // 最大、最小的mark point + err := doRender(rendererList...) + if err != nil { + return BoxZero, err + } + + return p.box, nil +} + +func (l *lineChart) Render() (Box, error) { + p := l.p + opt := l.opt + + renderResult, err := defaultRender(p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: opt.XAxis, + YAxisOptions: opt.YAxisOptions, + TitleOption: opt.Title, + LegendOption: opt.Legend, + backgroundIsFilled: opt.backgroundIsFilled, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypeLine) + + return l.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/mark_line.go b/src/server/vendor/github.com/vicanso/go-charts/v2/mark_line.go new file mode 100644 index 00000000..bc850bbd --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/mark_line.go @@ -0,0 +1,113 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" +) + +// NewMarkLine returns a series mark line +func NewMarkLine(markLineTypes ...string) SeriesMarkLine { + data := make([]SeriesMarkData, len(markLineTypes)) + for index, t := range markLineTypes { + data[index] = SeriesMarkData{ + Type: t, + } + } + return SeriesMarkLine{ + Data: data, + } +} + +type markLinePainter struct { + p *Painter + options []markLineRenderOption +} + +func (m *markLinePainter) Add(opt markLineRenderOption) { + m.options = append(m.options, opt) +} + +// NewMarkLinePainter returns a mark line renderer +func NewMarkLinePainter(p *Painter) *markLinePainter { + return &markLinePainter{ + p: p, + options: make([]markLineRenderOption, 0), + } +} + +type markLineRenderOption struct { + FillColor Color + FontColor Color + StrokeColor Color + Font *truetype.Font + Series Series + Range axisRange +} + +func (m *markLinePainter) Render() (Box, error) { + painter := m.p + for _, opt := range m.options { + s := opt.Series + if len(s.MarkLine.Data) == 0 { + continue + } + font := opt.Font + if font == nil { + font, _ = GetDefaultFont() + } + summary := s.Summary() + for _, markLine := range s.MarkLine.Data { + // 由于mark line会修改style,因此每次重新设置 + painter.OverrideDrawingStyle(Style{ + FillColor: opt.FillColor, + StrokeColor: opt.StrokeColor, + StrokeWidth: 1, + StrokeDashArray: []float64{ + 4, + 2, + }, + }).OverrideTextStyle(Style{ + Font: font, + FontColor: opt.FontColor, + FontSize: labelFontSize, + }) + value := float64(0) + switch markLine.Type { + case SeriesMarkDataTypeMax: + value = summary.MaxValue + case SeriesMarkDataTypeMin: + value = summary.MinValue + default: + value = summary.AverageValue + } + y := opt.Range.getRestHeight(value) + width := painter.Width() + text := commafWithDigits(value) + textBox := painter.MeasureText(text) + painter.MarkLine(0, y, width-2) + painter.Text(text, width, y+textBox.Height()>>1-2) + } + } + return BoxZero, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/mark_point.go b/src/server/vendor/github.com/vicanso/go-charts/v2/mark_point.go new file mode 100644 index 00000000..fd8a88b1 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/mark_point.go @@ -0,0 +1,115 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" +) + +// NewMarkPoint returns a series mark point +func NewMarkPoint(markPointTypes ...string) SeriesMarkPoint { + data := make([]SeriesMarkData, len(markPointTypes)) + for index, t := range markPointTypes { + data[index] = SeriesMarkData{ + Type: t, + } + } + return SeriesMarkPoint{ + Data: data, + } +} + +type markPointPainter struct { + p *Painter + options []markPointRenderOption +} + +func (m *markPointPainter) Add(opt markPointRenderOption) { + m.options = append(m.options, opt) +} + +type markPointRenderOption struct { + FillColor Color + Font *truetype.Font + Series Series + Points []Point +} + +// NewMarkPointPainter returns a mark point renderer +func NewMarkPointPainter(p *Painter) *markPointPainter { + return &markPointPainter{ + p: p, + options: make([]markPointRenderOption, 0), + } +} + +func (m *markPointPainter) Render() (Box, error) { + painter := m.p + for _, opt := range m.options { + s := opt.Series + if len(s.MarkPoint.Data) == 0 { + continue + } + points := opt.Points + summary := s.Summary() + symbolSize := s.MarkPoint.SymbolSize + if symbolSize == 0 { + symbolSize = 30 + } + textStyle := Style{ + FontSize: labelFontSize, + StrokeWidth: 1, + Font: opt.Font, + } + if isLightColor(opt.FillColor) { + textStyle.FontColor = defaultLightFontColor + } else { + textStyle.FontColor = defaultDarkFontColor + } + painter.OverrideDrawingStyle(Style{ + FillColor: opt.FillColor, + }).OverrideTextStyle(textStyle) + for _, markPointData := range s.MarkPoint.Data { + textStyle.FontSize = labelFontSize + painter.OverrideTextStyle(textStyle) + p := points[summary.MinIndex] + value := summary.MinValue + switch markPointData.Type { + case SeriesMarkDataTypeMax: + p = points[summary.MaxIndex] + value = summary.MaxValue + } + + painter.Pin(p.X, p.Y-symbolSize>>1, symbolSize) + text := commafWithDigits(value) + textBox := painter.MeasureText(text) + if textBox.Width() > symbolSize { + textStyle.FontSize = smallLabelFontSize + painter.OverrideTextStyle(textStyle) + textBox = painter.MeasureText(text) + } + painter.Text(text, p.X-textBox.Width()>>1, p.Y-symbolSize>>1-2) + } + } + return BoxZero, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/painter.go b/src/server/vendor/github.com/vicanso/go-charts/v2/painter.go new file mode 100644 index 00000000..2bbbe2e0 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/painter.go @@ -0,0 +1,866 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "bytes" + "errors" + "math" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" +) + +type ValueFormatter func(float64) string + +type Painter struct { + render chart.Renderer + box Box + font *truetype.Font + parent *Painter + style Style + theme ColorPalette + // 类型 + outputType string + valueFormatter ValueFormatter +} + +type PainterOptions struct { + // Draw type, "svg" or "png", default type is "png" + Type string + // The width of draw painter + Width int + // The height of draw painter + Height int + // The font for painter + Font *truetype.Font +} + +type PainterOption func(*Painter) + +type TicksOption struct { + // the first tick + First int + Length int + Orient string + Count int + Unit int +} + +type MultiTextOption struct { + TextList []string + Orient string + Unit int + Position string + Align string + // The text rotation of label + TextRotation float64 + Offset Box + // The first text index + First int +} + +type GridOption struct { + Column int + Row int + ColumnSpans []int + // 忽略不展示的column + IgnoreColumnLines []int + // 忽略不展示的row + IgnoreRowLines []int +} + +// PainterPaddingOption sets the padding of draw painter +func PainterPaddingOption(padding Box) PainterOption { + return func(p *Painter) { + p.box.Left += padding.Left + p.box.Top += padding.Top + p.box.Right -= padding.Right + p.box.Bottom -= padding.Bottom + } +} + +// PainterBoxOption sets the box of draw painter +func PainterBoxOption(box Box) PainterOption { + return func(p *Painter) { + if box.IsZero() { + return + } + p.box = box + } +} + +// PainterFontOption sets the font of draw painter +func PainterFontOption(font *truetype.Font) PainterOption { + return func(p *Painter) { + if font == nil { + return + } + p.font = font + } +} + +// PainterStyleOption sets the style of draw painter +func PainterStyleOption(style Style) PainterOption { + return func(p *Painter) { + p.SetStyle(style) + } +} + +// PainterThemeOption sets the theme of draw painter +func PainterThemeOption(theme ColorPalette) PainterOption { + return func(p *Painter) { + if theme == nil { + return + } + p.theme = theme + } +} + +// PainterWidthHeightOption set width or height of draw painter +func PainterWidthHeightOption(width, height int) PainterOption { + return func(p *Painter) { + if width > 0 { + p.box.Right = p.box.Left + width + } + if height > 0 { + p.box.Bottom = p.box.Top + height + } + } +} + +// NewPainter creates a painter +func NewPainter(opts PainterOptions, opt ...PainterOption) (*Painter, error) { + if opts.Width <= 0 || opts.Height <= 0 { + return nil, errors.New("width/height can not be nil") + } + font := opts.Font + if font == nil { + f, err := GetDefaultFont() + if err != nil { + return nil, err + } + font = f + } + fn := chart.PNG + if opts.Type == ChartOutputSVG { + fn = chart.SVG + } + width := opts.Width + height := opts.Height + r, err := fn(width, height) + if err != nil { + return nil, err + } + r.SetFont(font) + + p := &Painter{ + render: r, + box: Box{ + Right: opts.Width, + Bottom: opts.Height, + }, + font: font, + // 类型 + outputType: opts.Type, + } + p.setOptions(opt...) + if p.theme == nil { + p.theme = NewTheme(ThemeLight) + } + return p, nil +} +func (p *Painter) setOptions(opts ...PainterOption) { + for _, fn := range opts { + fn(p) + } +} + +func (p *Painter) Child(opt ...PainterOption) *Painter { + child := &Painter{ + // 格式化 + valueFormatter: p.valueFormatter, + // render + render: p.render, + box: p.box.Clone(), + font: p.font, + parent: p, + style: p.style, + theme: p.theme, + } + child.setOptions(opt...) + return child +} + +func (p *Painter) SetStyle(style Style) { + if style.Font == nil { + style.Font = p.font + } + p.style = style + style.WriteToRenderer(p.render) +} + +func overrideStyle(defaultStyle Style, style Style) Style { + if style.StrokeWidth == 0 { + style.StrokeWidth = defaultStyle.StrokeWidth + } + if style.StrokeColor.IsZero() { + style.StrokeColor = defaultStyle.StrokeColor + } + if style.StrokeDashArray == nil { + style.StrokeDashArray = defaultStyle.StrokeDashArray + } + if style.DotColor.IsZero() { + style.DotColor = defaultStyle.DotColor + } + if style.DotWidth == 0 { + style.DotWidth = defaultStyle.DotWidth + } + if style.FillColor.IsZero() { + style.FillColor = defaultStyle.FillColor + } + if style.FontSize == 0 { + style.FontSize = defaultStyle.FontSize + } + if style.FontColor.IsZero() { + style.FontColor = defaultStyle.FontColor + } + if style.Font == nil { + style.Font = defaultStyle.Font + } + return style +} + +func (p *Painter) OverrideDrawingStyle(style Style) *Painter { + s := overrideStyle(p.style, style) + p.SetDrawingStyle(s) + return p +} + +func (p *Painter) SetDrawingStyle(style Style) *Painter { + style.WriteDrawingOptionsToRenderer(p.render) + return p +} + +func (p *Painter) SetTextStyle(style Style) *Painter { + if style.Font == nil { + style.Font = p.font + } + style.WriteTextOptionsToRenderer(p.render) + return p +} +func (p *Painter) OverrideTextStyle(style Style) *Painter { + s := overrideStyle(p.style, style) + p.SetTextStyle(s) + return p +} + +func (p *Painter) ResetStyle() *Painter { + p.style.WriteToRenderer(p.render) + return p +} + +// Bytes returns the data of draw canvas +func (p *Painter) Bytes() ([]byte, error) { + buffer := bytes.Buffer{} + err := p.render.Save(&buffer) + if err != nil { + return nil, err + } + return buffer.Bytes(), err +} + +// MoveTo moves the cursor to a given point +func (p *Painter) MoveTo(x, y int) *Painter { + p.render.MoveTo(x+p.box.Left, y+p.box.Top) + return p +} + +func (p *Painter) ArcTo(cx, cy int, rx, ry, startAngle, delta float64) *Painter { + p.render.ArcTo(cx+p.box.Left, cy+p.box.Top, rx, ry, startAngle, delta) + return p +} + +func (p *Painter) LineTo(x, y int) *Painter { + p.render.LineTo(x+p.box.Left, y+p.box.Top) + return p +} + +func (p *Painter) QuadCurveTo(cx, cy, x, y int) *Painter { + p.render.QuadCurveTo(cx+p.box.Left, cy+p.box.Top, x+p.box.Left, y+p.box.Top) + return p +} + +func (p *Painter) Pin(x, y, width int) *Painter { + r := float64(width) / 2 + y -= width / 4 + angle := chart.DegreesToRadians(15) + box := p.box + + startAngle := math.Pi/2 + angle + delta := 2*math.Pi - 2*angle + p.ArcTo(x, y, r, r, startAngle, delta) + p.LineTo(x, y) + p.Close() + p.FillStroke() + + startX := x - int(r) + startY := y + endX := x + int(r) + endY := y + p.MoveTo(startX, startY) + + left := box.Left + top := box.Top + cx := x + cy := y + int(r*2.5) + p.render.QuadCurveTo(cx+left, cy+top, endX+left, endY+top) + p.Close() + p.Fill() + return p +} + +func (p *Painter) arrow(x, y, width, height int, direction string) *Painter { + halfWidth := width >> 1 + halfHeight := height >> 1 + if direction == PositionTop || direction == PositionBottom { + x0 := x - halfWidth + x1 := x0 + width + dy := -height / 3 + y0 := y + y1 := y0 - height + if direction == PositionBottom { + y0 = y - height + y1 = y + dy = 2 * dy + } + p.MoveTo(x0, y0) + p.LineTo(x0+halfWidth, y1) + p.LineTo(x1, y0) + p.LineTo(x0+halfWidth, y+dy) + p.LineTo(x0, y0) + } else { + x0 := x + width + x1 := x0 - width + y0 := y - halfHeight + dx := -width / 3 + if direction == PositionRight { + x0 = x - width + dx = -dx + x1 = x0 + width + } + p.MoveTo(x0, y0) + p.LineTo(x1, y0+halfHeight) + p.LineTo(x0, y0+height) + p.LineTo(x0+dx, y0+halfHeight) + p.LineTo(x0, y0) + } + p.FillStroke() + return p +} + +func (p *Painter) ArrowLeft(x, y, width, height int) *Painter { + p.arrow(x, y, width, height, PositionLeft) + return p +} + +func (p *Painter) ArrowRight(x, y, width, height int) *Painter { + p.arrow(x, y, width, height, PositionRight) + return p +} + +func (p *Painter) ArrowTop(x, y, width, height int) *Painter { + p.arrow(x, y, width, height, PositionTop) + return p +} +func (p *Painter) ArrowBottom(x, y, width, height int) *Painter { + p.arrow(x, y, width, height, PositionBottom) + return p +} + +func (p *Painter) Circle(radius float64, x, y int) *Painter { + p.render.Circle(radius, x+p.box.Left, y+p.box.Top) + return p +} + +func (p *Painter) Stroke() *Painter { + p.render.Stroke() + return p +} + +func (p *Painter) Close() *Painter { + p.render.Close() + return p +} + +func (p *Painter) FillStroke() *Painter { + p.render.FillStroke() + return p +} + +func (p *Painter) Fill() *Painter { + p.render.Fill() + return p +} + +func (p *Painter) Width() int { + return p.box.Width() +} + +func (p *Painter) Height() int { + return p.box.Height() +} + +func (p *Painter) MeasureText(text string) Box { + return p.render.MeasureText(text) +} + +func (p *Painter) MeasureTextMaxWidthHeight(textList []string) (int, int) { + maxWidth := 0 + maxHeight := 0 + for _, text := range textList { + box := p.MeasureText(text) + if maxWidth < box.Width() { + maxWidth = box.Width() + } + if maxHeight < box.Height() { + maxHeight = box.Height() + } + } + return maxWidth, maxHeight +} + +func (p *Painter) LineStroke(points []Point) *Painter { + shouldMoveTo := false + for index, point := range points { + x := point.X + y := point.Y + if y == int(math.MaxInt32) { + p.Stroke() + shouldMoveTo = true + continue + } + if shouldMoveTo || index == 0 { + p.MoveTo(x, y) + shouldMoveTo = false + } else { + p.LineTo(x, y) + } + } + p.Stroke() + return p +} + +func (p *Painter) SmoothLineStroke(points []Point) *Painter { + prevX := 0 + prevY := 0 + // TODO 如何生成平滑的折线 + for index, point := range points { + x := point.X + y := point.Y + if index == 0 { + p.MoveTo(x, y) + } else { + cx := prevX + (x-prevX)/5 + cy := y + (y-prevY)/2 + p.QuadCurveTo(cx, cy, x, y) + } + prevX = x + prevY = y + } + p.Stroke() + return p +} + +func (p *Painter) SetBackground(width, height int, color Color, inside ...bool) *Painter { + r := p.render + s := chart.Style{ + FillColor: color, + } + // 背景色 + p.SetDrawingStyle(s) + defer p.ResetStyle() + if len(inside) != 0 && inside[0] { + p.MoveTo(0, 0) + p.LineTo(width, 0) + p.LineTo(width, height) + p.LineTo(0, height) + p.LineTo(0, 0) + } else { + // 设置背景色不使用box,因此不直接使用Painter + r.MoveTo(0, 0) + r.LineTo(width, 0) + r.LineTo(width, height) + r.LineTo(0, height) + r.LineTo(0, 0) + } + p.FillStroke() + return p +} +func (p *Painter) MarkLine(x, y, width int) *Painter { + arrowWidth := 16 + arrowHeight := 10 + endX := x + width + radius := 3 + p.Circle(3, x+radius, y) + p.render.Fill() + p.MoveTo(x+radius*3, y) + p.LineTo(endX-arrowWidth, y) + p.Stroke() + p.ArrowRight(endX, y, arrowWidth, arrowHeight) + return p +} + +func (p *Painter) Polygon(center Point, radius float64, sides int) *Painter { + points := getPolygonPoints(center, radius, sides) + for i, item := range points { + if i == 0 { + p.MoveTo(item.X, item.Y) + } else { + p.LineTo(item.X, item.Y) + } + } + p.LineTo(points[0].X, points[0].Y) + p.Stroke() + return p +} + +func (p *Painter) FillArea(points []Point) *Painter { + var x, y int + for index, point := range points { + x = point.X + y = point.Y + if index == 0 { + p.MoveTo(x, y) + } else { + p.LineTo(x, y) + } + } + p.Fill() + return p +} + +func (p *Painter) Text(body string, x, y int) *Painter { + p.render.Text(body, x+p.box.Left, y+p.box.Top) + return p +} + +func (p *Painter) TextRotation(body string, x, y int, radians float64) { + p.render.SetTextRotation(radians) + p.render.Text(body, x+p.box.Left, y+p.box.Top) + p.render.ClearTextRotation() +} + +func (p *Painter) SetTextRotation(radians float64) { + p.render.SetTextRotation(radians) +} +func (p *Painter) ClearTextRotation() { + p.render.ClearTextRotation() +} + +func (p *Painter) TextFit(body string, x, y, width int, textAligns ...string) chart.Box { + style := p.style + textWarp := style.TextWrap + style.TextWrap = chart.TextWrapWord + r := p.render + lines := chart.Text.WrapFit(r, body, width, style) + p.SetTextStyle(style) + var output chart.Box + + textAlign := "" + if len(textAligns) != 0 { + textAlign = textAligns[0] + } + for index, line := range lines { + if line == "" { + continue + } + x0 := x + y0 := y + output.Height() + lineBox := r.MeasureText(line) + switch textAlign { + case AlignRight: + x0 += width - lineBox.Width() + case AlignCenter: + x0 += (width - lineBox.Width()) >> 1 + } + p.Text(line, x0, y0) + output.Right = chart.MaxInt(lineBox.Right, output.Right) + output.Bottom += lineBox.Height() + if index < len(lines)-1 { + output.Bottom += +style.GetTextLineSpacing() + } + } + p.style.TextWrap = textWarp + return output +} + +func (p *Painter) Ticks(opt TicksOption) *Painter { + if opt.Count <= 0 || opt.Length <= 0 { + return p + } + count := opt.Count + first := opt.First + width := p.Width() + height := p.Height() + unit := 1 + if opt.Unit > 1 { + unit = opt.Unit + } + var values []int + isVertical := opt.Orient == OrientVertical + if isVertical { + values = autoDivide(height, count) + } else { + values = autoDivide(width, count) + } + for index, value := range values { + if index < first { + continue + } + if (index-first)%unit != 0 { + continue + } + if isVertical { + p.LineStroke([]Point{ + { + X: 0, + Y: value, + }, + { + X: opt.Length, + Y: value, + }, + }) + } else { + p.LineStroke([]Point{ + { + X: value, + Y: opt.Length, + }, + { + X: value, + Y: 0, + }, + }) + } + } + return p +} + +func (p *Painter) MultiText(opt MultiTextOption) *Painter { + if len(opt.TextList) == 0 { + return p + } + count := len(opt.TextList) + positionCenter := true + showIndex := opt.Unit / 2 + if containsString([]string{ + PositionLeft, + PositionTop, + }, opt.Position) { + positionCenter = false + count-- + // 非居中 + showIndex = 0 + } + width := p.Width() + height := p.Height() + var values []int + isVertical := opt.Orient == OrientVertical + if isVertical { + values = autoDivide(height, count) + } else { + values = autoDivide(width, count) + } + isTextRotation := opt.TextRotation != 0 + offset := opt.Offset + for index, text := range opt.TextList { + if index < opt.First { + continue + } + if opt.Unit != 0 && (index-opt.First)%opt.Unit != showIndex { + continue + } + if isTextRotation { + p.ClearTextRotation() + p.SetTextRotation(opt.TextRotation) + } + box := p.MeasureText(text) + start := values[index] + if positionCenter { + start = (values[index] + values[index+1]) >> 1 + } + x := 0 + y := 0 + if isVertical { + y = start + box.Height()>>1 + switch opt.Align { + case AlignRight: + x = width - box.Width() + case AlignCenter: + x = width - box.Width()>>1 + default: + x = 0 + } + } else { + x = start - box.Width()>>1 + } + x += offset.Left + y += offset.Top + p.Text(text, x, y) + } + if isTextRotation { + p.ClearTextRotation() + } + return p +} + +func (p *Painter) Grid(opt GridOption) *Painter { + width := p.Width() + height := p.Height() + drawLines := func(values []int, ignoreIndexList []int, isVertical bool) { + for index, v := range values { + if containsInt(ignoreIndexList, index) { + continue + } + x0 := 0 + y0 := 0 + x1 := 0 + y1 := 0 + if isVertical { + + x0 = v + x1 = v + y1 = height + } else { + x1 = width + y0 = v + y1 = v + } + p.LineStroke([]Point{ + { + X: x0, + Y: y0, + }, + { + X: x1, + Y: y1, + }, + }) + } + } + columnCount := sumInt(opt.ColumnSpans) + if columnCount == 0 { + columnCount = opt.Column + } + if columnCount > 0 { + values := autoDivideSpans(width, columnCount, opt.ColumnSpans) + drawLines(values, opt.IgnoreColumnLines, true) + } + if opt.Row > 0 { + values := autoDivide(height, opt.Row) + drawLines(values, opt.IgnoreRowLines, false) + } + return p +} + +func (p *Painter) Dots(points []Point) *Painter { + for _, item := range points { + p.Circle(2, item.X, item.Y) + } + p.FillStroke() + return p +} + +func (p *Painter) Rect(box Box) *Painter { + p.MoveTo(box.Left, box.Top) + p.LineTo(box.Right, box.Top) + p.LineTo(box.Right, box.Bottom) + p.LineTo(box.Left, box.Bottom) + p.LineTo(box.Left, box.Top) + p.FillStroke() + return p +} + +func (p *Painter) RoundedRect(box Box, radius int) *Painter { + r := (box.Right - box.Left) / 2 + if radius > r { + radius = r + } + rx := float64(radius) + ry := float64(radius) + p.MoveTo(box.Left+radius, box.Top) + p.LineTo(box.Right-radius, box.Top) + + cx := box.Right - radius + cy := box.Top + radius + // right top + p.ArcTo(cx, cy, rx, ry, -math.Pi/2, math.Pi/2) + + p.LineTo(box.Right, box.Bottom-radius) + + // right bottom + cx = box.Right - radius + cy = box.Bottom - radius + p.ArcTo(cx, cy, rx, ry, 0.0, math.Pi/2) + + p.LineTo(box.Left+radius, box.Bottom) + + // left bottom + cx = box.Left + radius + cy = box.Bottom - radius + p.ArcTo(cx, cy, rx, ry, math.Pi/2, math.Pi/2) + + p.LineTo(box.Left, box.Top+radius) + + // left top + cx = box.Left + radius + cy = box.Top + radius + p.ArcTo(cx, cy, rx, ry, math.Pi, math.Pi/2) + + p.Close() + p.FillStroke() + p.Fill() + return p +} + +func (p *Painter) LegendLineDot(box Box) *Painter { + width := box.Width() + height := box.Height() + strokeWidth := 3 + dotHeight := 5 + + p.render.SetStrokeWidth(float64(strokeWidth)) + center := (height-strokeWidth)>>1 - 1 + p.MoveTo(box.Left, box.Top-center) + p.LineTo(box.Right, box.Top-center) + p.Stroke() + p.Circle(float64(dotHeight), box.Left+width>>1, box.Top-center) + p.FillStroke() + return p +} + +func (p *Painter) GetRenderer() chart.Renderer { + return p.render +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/pie_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/pie_chart.go new file mode 100644 index 00000000..9e036c6b --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/pie_chart.go @@ -0,0 +1,318 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "errors" + "math" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" +) + +type pieChart struct { + p *Painter + opt *PieChartOption +} + +type PieChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The padding of line chart + Padding Box + // The option of title + Title TitleOption + // The legend option + Legend LegendOption + // background is filled + backgroundIsFilled bool +} + +// NewPieChart returns a pie chart renderer +func NewPieChart(p *Painter, opt PieChartOption) *pieChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &pieChart{ + p: p, + opt: &opt, + } +} + +type sector struct { + value float64 + percent float64 + cx int + cy int + rx float64 + ry float64 + start float64 + delta float64 + offset int + quadrant int + lineStartX int + lineStartY int + lineBranchX int + lineBranchY int + lineEndX int + lineEndY int + showLabel bool + label string + series Series + color Color +} + +func NewSector(cx int, cy int, radius float64, labelRadius float64, value float64, currentValue float64, totalValue float64, labelLineLength int, label string, series Series, color Color) sector { + s := sector{} + s.value = value + s.percent = value / totalValue + s.cx = cx + s.cy = cy + s.rx = radius + s.ry = radius + p := (currentValue + value/2) / totalValue + if p < 0.25 { + s.quadrant = 1 + } else if p < 0.5 { + s.quadrant = 4 + } else if p < 0.75 { + s.quadrant = 3 + } else { + s.quadrant = 2 + } + s.start = chart.PercentToRadians(currentValue/totalValue) - math.Pi/2 + s.delta = chart.PercentToRadians(value / totalValue) + angle := s.start + s.delta/2 + s.lineStartX = cx + int(radius*math.Cos(angle)) + s.lineStartY = cy + int(radius*math.Sin(angle)) + s.lineBranchX = cx + int(labelRadius*math.Cos(angle)) + s.lineBranchY = cy + int(labelRadius*math.Sin(angle)) + s.offset = labelLineLength + if s.lineBranchX <= cx { + s.offset *= -1 + } + s.lineEndX = s.lineBranchX + s.offset + s.lineEndY = s.lineBranchY + s.series = series + s.color = color + s.showLabel = series.Label.Show + s.label = NewPieLabelFormatter([]string{label}, series.Label.Formatter)(0, s.value, s.percent) + return s +} + +func (s *sector) calculateY(prevY int) int { + for i := 0; i <= s.cy; i++ { + if s.quadrant <= 2 { + if (prevY - s.lineBranchY) > labelFontSize+5 { + break + } + s.lineBranchY -= 1 + } else { + if (s.lineBranchY - prevY) > labelFontSize+5 { + break + } + s.lineBranchY += 1 + } + } + s.lineEndY = s.lineBranchY + return s.lineBranchY +} + +func (s *sector) calculateTextXY(textBox Box) (x int, y int) { + textMargin := 3 + x = s.lineEndX + textMargin + y = s.lineEndY + textBox.Height()>>1 - 1 + if s.offset < 0 { + textWidth := textBox.Width() + x = s.lineEndX - textWidth - textMargin + } + return +} + +func (p *pieChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + opt := p.opt + values := make([]float64, len(seriesList)) + total := float64(0) + radiusValue := "" + for index, series := range seriesList { + if len(series.Radius) != 0 { + radiusValue = series.Radius + } + value := float64(0) + for _, item := range series.Data { + value += item.Value + } + values[index] = value + total += value + } + if total <= 0 { + return BoxZero, errors.New("The sum value of pie chart should gt 0") + } + seriesPainter := result.seriesPainter + cx := seriesPainter.Width() >> 1 + cy := seriesPainter.Height() >> 1 + + diameter := chart.MinInt(seriesPainter.Width(), seriesPainter.Height()) + radius := getRadius(float64(diameter), radiusValue) + + labelLineWidth := 15 + if radius < 50 { + labelLineWidth = 10 + } + labelRadius := radius + float64(labelLineWidth) + seriesNames := opt.Legend.Data + if len(seriesNames) == 0 { + seriesNames = seriesList.Names() + } + theme := opt.Theme + + currentValue := float64(0) + + var quadrant1, quadrant2, quadrant3, quadrant4 []sector + for index, v := range values { + series := seriesList[index] + color := theme.GetSeriesColor(index) + if index == len(values)-1 { + if color == theme.GetSeriesColor(0) { + color = theme.GetSeriesColor(1) + } + } + s := NewSector(cx, cy, radius, labelRadius, v, currentValue, total, labelLineWidth, seriesNames[index], series, color) + switch quadrant := s.quadrant; quadrant { + case 1: + quadrant1 = append([]sector{s}, quadrant1...) + case 2: + quadrant2 = append(quadrant2, s) + case 3: + quadrant3 = append([]sector{s}, quadrant3...) + case 4: + quadrant4 = append(quadrant4, s) + } + currentValue += v + } + sectors := append(quadrant1, quadrant4...) + sectors = append(sectors, quadrant3...) + sectors = append(sectors, quadrant2...) + + currentQuadrant := 0 + prevY := 0 + maxY := 0 + minY := 0 + for _, s := range sectors { + seriesPainter.OverrideDrawingStyle(Style{ + StrokeWidth: 1, + StrokeColor: s.color, + FillColor: s.color, + }) + seriesPainter.MoveTo(s.cx, s.cy) + seriesPainter.ArcTo(s.cx, s.cy, s.rx, s.ry, s.start, s.delta).LineTo(s.cx, s.cy).Close().FillStroke() + if !s.showLabel { + continue + } + if currentQuadrant != s.quadrant { + if s.quadrant == 1 { + minY = cy * 2 + maxY = 0 + prevY = cy * 2 + } + if s.quadrant == 2 { + if currentQuadrant != 3 { + prevY = s.lineEndY + } else { + prevY = minY + } + } + if s.quadrant == 3 { + if currentQuadrant != 4 { + prevY = s.lineEndY + } else { + minY = cy * 2 + maxY = 0 + prevY = 0 + } + } + if s.quadrant == 4 { + if currentQuadrant != 1 { + prevY = s.lineEndY + } else { + prevY = maxY + } + } + currentQuadrant = s.quadrant + } + prevY = s.calculateY(prevY) + if prevY > maxY { + maxY = prevY + } + if prevY < minY { + minY = prevY + } + seriesPainter.MoveTo(s.lineStartX, s.lineStartY) + seriesPainter.LineTo(s.lineBranchX, s.lineBranchY) + seriesPainter.MoveTo(s.lineBranchX, s.lineBranchY) + seriesPainter.LineTo(s.lineEndX, s.lineEndY) + seriesPainter.Stroke() + textStyle := Style{ + FontColor: theme.GetTextColor(), + FontSize: labelFontSize, + Font: opt.Font, + } + if !s.series.Label.Color.IsZero() { + textStyle.FontColor = s.series.Label.Color + } + seriesPainter.OverrideTextStyle(textStyle) + x, y := s.calculateTextXY(seriesPainter.MeasureText(s.label)) + seriesPainter.Text(s.label, x, y) + } + return p.p.box, nil +} + +func (p *pieChart) Render() (Box, error) { + opt := p.opt + + renderResult, err := defaultRender(p.p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: XAxisOption{ + Show: FalseFlag(), + }, + YAxisOptions: []YAxisOption{ + { + Show: FalseFlag(), + }, + }, + TitleOption: opt.Title, + LegendOption: opt.Legend, + backgroundIsFilled: opt.backgroundIsFilled, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypePie) + return p.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/radar_chart.go b/src/server/vendor/github.com/vicanso/go-charts/v2/radar_chart.go new file mode 100644 index 00000000..f3d63b94 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/radar_chart.go @@ -0,0 +1,273 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "errors" + + "github.com/dustin/go-humanize" + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +type radarChart struct { + p *Painter + opt *RadarChartOption +} + +type RadarIndicator struct { + // Indicator's name + Name string + // The maximum value of indicator + Max float64 + // The minimum value of indicator + Min float64 +} + +type RadarChartOption struct { + // The theme + Theme ColorPalette + // The font size + Font *truetype.Font + // The data series list + SeriesList SeriesList + // The padding of line chart + Padding Box + // The option of title + Title TitleOption + // The legend option + Legend LegendOption + // The radar indicator list + RadarIndicators []RadarIndicator + // background is filled + backgroundIsFilled bool +} + +// NewRadarIndicators returns a radar indicator list +func NewRadarIndicators(names []string, values []float64) []RadarIndicator { + if len(names) != len(values) { + return nil + } + indicators := make([]RadarIndicator, len(names)) + for index, name := range names { + indicators[index] = RadarIndicator{ + Name: name, + Max: values[index], + } + } + return indicators +} + +// NewRadarChart returns a radar chart renderer +func NewRadarChart(p *Painter, opt RadarChartOption) *radarChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &radarChart{ + p: p, + opt: &opt, + } +} + +func (r *radarChart) render(result *defaultRenderResult, seriesList SeriesList) (Box, error) { + opt := r.opt + indicators := opt.RadarIndicators + sides := len(indicators) + if sides < 3 { + return BoxZero, errors.New("The count of indicator should be >= 3") + } + maxValues := make([]float64, len(indicators)) + for _, series := range seriesList { + for index, item := range series.Data { + if index < len(maxValues) && item.Value > maxValues[index] { + maxValues[index] = item.Value + } + } + } + for index, indicator := range indicators { + if indicator.Max <= 0 { + indicators[index].Max = maxValues[index] + } + } + + radiusValue := "" + for _, series := range seriesList { + if len(series.Radius) != 0 { + radiusValue = series.Radius + } + } + + seriesPainter := result.seriesPainter + theme := opt.Theme + + cx := seriesPainter.Width() >> 1 + cy := seriesPainter.Height() >> 1 + diameter := chart.MinInt(seriesPainter.Width(), seriesPainter.Height()) + radius := getRadius(float64(diameter), radiusValue) + + divideCount := 5 + divideRadius := float64(int(radius / float64(divideCount))) + radius = divideRadius * float64(divideCount) + + seriesPainter.OverrideDrawingStyle(Style{ + StrokeColor: theme.GetAxisSplitLineColor(), + StrokeWidth: 1, + }) + center := Point{ + X: cx, + Y: cy, + } + for i := 0; i < divideCount; i++ { + seriesPainter.Polygon(center, divideRadius*float64(i+1), sides) + } + points := getPolygonPoints(center, radius, sides) + for _, p := range points { + seriesPainter.MoveTo(center.X, center.Y) + seriesPainter.LineTo(p.X, p.Y) + seriesPainter.Stroke() + } + seriesPainter.OverrideTextStyle(Style{ + FontColor: theme.GetTextColor(), + FontSize: labelFontSize, + Font: opt.Font, + }) + offset := 5 + // 文本生成 + for index, p := range points { + name := indicators[index].Name + b := seriesPainter.MeasureText(name) + isXCenter := p.X == center.X + isYCenter := p.Y == center.Y + isRight := p.X > center.X + isLeft := p.X < center.X + isTop := p.Y < center.Y + isBottom := p.Y > center.Y + x := p.X + y := p.Y + if isXCenter { + x -= b.Width() >> 1 + if isTop { + y -= b.Height() + } else { + y += b.Height() + } + } + if isYCenter { + y += b.Height() >> 1 + } + if isTop { + y += offset + } + if isBottom { + y += offset + } + if isRight { + x += offset + } + if isLeft { + x -= (b.Width() + offset) + } + seriesPainter.Text(name, x, y) + } + + // 雷达图 + angles := getPolygonPointAngles(sides) + maxCount := len(indicators) + for _, series := range seriesList { + linePoints := make([]Point, 0, maxCount) + for j, item := range series.Data { + if j >= maxCount { + continue + } + indicator := indicators[j] + var percent float64 + offset := indicator.Max - indicator.Min + if offset > 0 { + percent = (item.Value - indicator.Min) / offset + } + r := percent * radius + p := getPolygonPoint(center, r, angles[j]) + linePoints = append(linePoints, p) + } + color := theme.GetSeriesColor(series.index) + dotFillColor := drawing.ColorWhite + if theme.IsDark() { + dotFillColor = color + } + linePoints = append(linePoints, linePoints[0]) + seriesPainter.OverrideDrawingStyle(Style{ + StrokeColor: color, + StrokeWidth: defaultStrokeWidth, + DotWidth: defaultDotWidth, + DotColor: color, + FillColor: color.WithAlpha(20), + }) + seriesPainter.LineStroke(linePoints). + FillArea(linePoints) + dotWith := 2.0 + seriesPainter.OverrideDrawingStyle(Style{ + StrokeWidth: defaultStrokeWidth, + StrokeColor: color, + FillColor: dotFillColor, + }) + for index, point := range linePoints { + seriesPainter.Circle(dotWith, point.X, point.Y) + seriesPainter.FillStroke() + if series.Label.Show && index < len(series.Data) { + value := humanize.FtoaWithDigits(series.Data[index].Value, 2) + b := seriesPainter.MeasureText(value) + seriesPainter.Text(value, point.X-b.Width()/2, point.Y) + } + + } + } + + return r.p.box, nil +} + +func (r *radarChart) Render() (Box, error) { + p := r.p + opt := r.opt + renderResult, err := defaultRender(p, defaultRenderOption{ + Theme: opt.Theme, + Padding: opt.Padding, + SeriesList: opt.SeriesList, + XAxis: XAxisOption{ + Show: FalseFlag(), + }, + YAxisOptions: []YAxisOption{ + { + Show: FalseFlag(), + }, + }, + TitleOption: opt.Title, + LegendOption: opt.Legend, + backgroundIsFilled: opt.backgroundIsFilled, + }) + if err != nil { + return BoxZero, err + } + seriesList := opt.SeriesList.Filter(ChartTypeRadar) + return r.render(renderResult, seriesList) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/range.go b/src/server/vendor/github.com/vicanso/go-charts/v2/range.go new file mode 100644 index 00000000..ec64c2dd --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/range.go @@ -0,0 +1,144 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "math" +) + +const defaultAxisDivideCount = 6 + +type axisRange struct { + p *Painter + divideCount int + min float64 + max float64 + size int + boundary bool +} + +type AxisRangeOption struct { + Painter *Painter + // The min value of axis + Min float64 + // The max value of axis + Max float64 + // The size of axis + Size int + // Boundary gap + Boundary bool + // The count of divide + DivideCount int +} + +// NewRange returns a axis range +func NewRange(opt AxisRangeOption) axisRange { + max := opt.Max + min := opt.Min + + max += math.Abs(max * 0.1) + min -= math.Abs(min * 0.1) + divideCount := opt.DivideCount + r := math.Abs(max - min) + + // 最小单位计算 + unit := 1 + if r > 5 { + unit = 2 + } + if r > 10 { + unit = 4 + } + if r > 30 { + unit = 5 + } + if r > 100 { + unit = 10 + } + if r > 200 { + unit = 20 + } + unit = int((r/float64(divideCount))/float64(unit))*unit + unit + + if min != 0 { + isLessThanZero := min < 0 + min = float64(int(min/float64(unit)) * unit) + // 如果是小于0,int的时候向上取整了,因此调整 + if min < 0 || + (isLessThanZero && min == 0) { + min -= float64(unit) + } + } + max = min + float64(unit*divideCount) + expectMax := opt.Max * 2 + if max > expectMax { + max = float64(ceilFloatToInt(expectMax)) + } + return axisRange{ + p: opt.Painter, + divideCount: divideCount, + min: min, + max: max, + size: opt.Size, + boundary: opt.Boundary, + } +} + +// Values returns values of range +func (r axisRange) Values() []string { + offset := (r.max - r.min) / float64(r.divideCount) + values := make([]string, 0) + formatter := commafWithDigits + if r.p != nil && r.p.valueFormatter != nil { + formatter = r.p.valueFormatter + } + for i := 0; i <= r.divideCount; i++ { + v := r.min + float64(i)*offset + value := formatter(v) + values = append(values, value) + } + return values +} + +func (r *axisRange) getHeight(value float64) int { + if r.max <= r.min { + return 0 + } + v := (value - r.min) / (r.max - r.min) + return int(v * float64(r.size)) +} + +func (r *axisRange) getRestHeight(value float64) int { + return r.size - r.getHeight(value) +} + +// GetRange returns a range of index +func (r *axisRange) GetRange(index int) (float64, float64) { + unit := float64(r.size) / float64(r.divideCount) + return unit * float64(index), unit * float64(index+1) +} + +// AutoDivide divides the axis +func (r *axisRange) AutoDivide() []int { + return autoDivide(r.size, r.divideCount) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/series.go b/src/server/vendor/github.com/vicanso/go-charts/v2/series.go new file mode 100644 index 00000000..0ad135f0 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/series.go @@ -0,0 +1,318 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "math" + "strings" + + "github.com/dustin/go-humanize" + "github.com/wcharczuk/go-chart/v2" +) + +type SeriesData struct { + // The value of series data + Value float64 + // The style of series data + Style Style +} + +// NewSeriesListDataFromValues returns a series list +func NewSeriesListDataFromValues(values [][]float64, chartType ...string) SeriesList { + seriesList := make(SeriesList, len(values)) + for index, value := range values { + seriesList[index] = NewSeriesFromValues(value, chartType...) + } + return seriesList +} + +// NewSeriesFromValues returns a series +func NewSeriesFromValues(values []float64, chartType ...string) Series { + s := Series{ + Data: NewSeriesDataFromValues(values), + } + if len(chartType) != 0 { + s.Type = chartType[0] + } + return s +} + +// NewSeriesDataFromValues return a series data +func NewSeriesDataFromValues(values []float64) []SeriesData { + data := make([]SeriesData, len(values)) + for index, value := range values { + data[index] = SeriesData{ + Value: value, + } + } + return data +} + +type SeriesLabel struct { + // Data label formatter, which supports string template. + // {b}: the name of a data item. + // {c}: the value of a data item. + // {d}: the percent of a data item(pie chart). + Formatter string + // The color for label + Color Color + // Show flag for label + Show bool + // Distance to the host graphic element. + Distance int + // The position of label + Position string + // The offset of label's position + Offset Box + // The font size of label + FontSize float64 +} + +const ( + SeriesMarkDataTypeMax = "max" + SeriesMarkDataTypeMin = "min" + SeriesMarkDataTypeAverage = "average" +) + +type SeriesMarkData struct { + // The mark data type, it can be "max", "min", "average". + // The "average" is only for mark line + Type string +} +type SeriesMarkPoint struct { + // The width of symbol, default value is 30 + SymbolSize int + // The mark data of series mark point + Data []SeriesMarkData +} +type SeriesMarkLine struct { + // The mark data of series mark line + Data []SeriesMarkData +} +type Series struct { + index int + // The type of series, it can be "line", "bar" or "pie". + // Default value is "line" + Type string + // The data list of series + Data []SeriesData + // The Y axis index, it should be 0 or 1. + // Default value is 0 + AxisIndex int + // The style for series + Style chart.Style + // The label for series + Label SeriesLabel + // The name of series + Name string + // Radius for Pie chart, e.g.: 40%, default is "40%" + Radius string + // Round for bar chart + RoundRadius int + // Mark point for series + MarkPoint SeriesMarkPoint + // Make line for series + MarkLine SeriesMarkLine + // Max value of series + Min *float64 + // Min value of series + Max *float64 +} +type SeriesList []Series + +func (sl SeriesList) init() { + if len(sl) == 0 { + return + } + if sl[len(sl)-1].index != 0 { + return + } + for i := 0; i < len(sl); i++ { + if sl[i].Type == "" { + sl[i].Type = ChartTypeLine + } + sl[i].index = i + } +} + +func (sl SeriesList) Filter(chartType string) SeriesList { + arr := make(SeriesList, 0) + for index, item := range sl { + if item.Type == chartType { + arr = append(arr, sl[index]) + } + } + return arr +} + +// GetMaxMin get max and min value of series list +func (sl SeriesList) GetMaxMin(axisIndex int) (float64, float64) { + min := math.MaxFloat64 + max := -math.MaxFloat64 + for _, series := range sl { + if series.AxisIndex != axisIndex { + continue + } + for _, item := range series.Data { + // 如果为空值,忽略 + if item.Value == nullValue { + continue + } + if item.Value > max { + max = item.Value + } + if item.Value < min { + min = item.Value + } + } + } + return max, min +} + +type PieSeriesOption struct { + Radius string + Label SeriesLabel + Names []string +} + +func NewPieSeriesList(values []float64, opts ...PieSeriesOption) SeriesList { + result := make([]Series, len(values)) + var opt PieSeriesOption + if len(opts) != 0 { + opt = opts[0] + } + for index, v := range values { + name := "" + if index < len(opt.Names) { + name = opt.Names[index] + } + s := Series{ + Type: ChartTypePie, + Data: []SeriesData{ + { + Value: v, + }, + }, + Radius: opt.Radius, + Label: opt.Label, + Name: name, + } + result[index] = s + } + return result +} + +type seriesSummary struct { + // The index of max value + MaxIndex int + // The max value + MaxValue float64 + // The index of min value + MinIndex int + // The min value + MinValue float64 + // THe average value + AverageValue float64 +} + +// Summary get summary of series +func (s *Series) Summary() seriesSummary { + minIndex := -1 + maxIndex := -1 + minValue := math.MaxFloat64 + maxValue := -math.MaxFloat64 + sum := float64(0) + for j, item := range s.Data { + if item.Value < minValue { + minIndex = j + minValue = item.Value + } + if item.Value > maxValue { + maxIndex = j + maxValue = item.Value + } + sum += item.Value + } + return seriesSummary{ + MaxIndex: maxIndex, + MaxValue: maxValue, + MinIndex: minIndex, + MinValue: minValue, + AverageValue: sum / float64(len(s.Data)), + } +} + +// Names returns the names of series list +func (sl SeriesList) Names() []string { + names := make([]string, len(sl)) + for index, s := range sl { + names[index] = s.Name + } + return names +} + +// LabelFormatter label formatter +type LabelFormatter func(index int, value float64, percent float64) string + +// NewPieLabelFormatter returns a pie label formatter +func NewPieLabelFormatter(seriesNames []string, layout string) LabelFormatter { + if len(layout) == 0 { + layout = "{b}: {d}" + } + return NewLabelFormatter(seriesNames, layout) +} + +// NewFunnelLabelFormatter returns a funner label formatter +func NewFunnelLabelFormatter(seriesNames []string, layout string) LabelFormatter { + if len(layout) == 0 { + layout = "{b}({d})" + } + return NewLabelFormatter(seriesNames, layout) +} + +// NewValueLabelFormatter returns a value formatter +func NewValueLabelFormatter(seriesNames []string, layout string) LabelFormatter { + if len(layout) == 0 { + layout = "{c}" + } + return NewLabelFormatter(seriesNames, layout) +} + +// NewLabelFormatter returns a label formaatter +func NewLabelFormatter(seriesNames []string, layout string) LabelFormatter { + return func(index int, value, percent float64) string { + // 如果无percent的则设置为<0 + percentText := "" + if percent >= 0 { + percentText = humanize.FtoaWithDigits(percent*100, 2) + "%" + } + valueText := humanize.FtoaWithDigits(value, 2) + name := "" + if len(seriesNames) > index { + name = seriesNames[index] + } + text := strings.ReplaceAll(layout, "{c}", valueText) + text = strings.ReplaceAll(text, "{d}", percentText) + text = strings.ReplaceAll(text, "{b}", name) + return text + } +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/series_label.go b/src/server/vendor/github.com/vicanso/go-charts/v2/series_label.go new file mode 100644 index 00000000..10fd1485 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/series_label.go @@ -0,0 +1,148 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" +) + +type labelRenderValue struct { + Text string + Style Style + X int + Y int + // 旋转 + Radians float64 +} + +type LabelValue struct { + Index int + Value float64 + X int + Y int + // 旋转 + Radians float64 + // 字体颜色 + FontColor Color + // 字体大小 + FontSize float64 + Orient string + Offset Box +} + +type SeriesLabelPainter struct { + p *Painter + seriesNames []string + label *SeriesLabel + theme ColorPalette + font *truetype.Font + values []labelRenderValue +} + +type SeriesLabelPainterParams struct { + P *Painter + SeriesNames []string + Label SeriesLabel + Theme ColorPalette + Font *truetype.Font +} + +func NewSeriesLabelPainter(params SeriesLabelPainterParams) *SeriesLabelPainter { + return &SeriesLabelPainter{ + p: params.P, + seriesNames: params.SeriesNames, + label: ¶ms.Label, + theme: params.Theme, + font: params.Font, + values: make([]labelRenderValue, 0), + } +} + +func (o *SeriesLabelPainter) Add(value LabelValue) { + label := o.label + distance := label.Distance + if distance == 0 { + distance = 5 + } + text := NewValueLabelFormatter(o.seriesNames, label.Formatter)(value.Index, value.Value, -1) + labelStyle := Style{ + FontColor: o.theme.GetTextColor(), + FontSize: labelFontSize, + Font: o.font, + } + if value.FontSize != 0 { + labelStyle.FontSize = value.FontSize + } + if !value.FontColor.IsZero() { + label.Color = value.FontColor + } + if !label.Color.IsZero() { + labelStyle.FontColor = label.Color + } + p := o.p + p.OverrideDrawingStyle(labelStyle) + rotated := value.Radians != 0 + if rotated { + p.SetTextRotation(value.Radians) + } + textBox := p.MeasureText(text) + renderValue := labelRenderValue{ + Text: text, + Style: labelStyle, + X: value.X, + Y: value.Y, + Radians: value.Radians, + } + if value.Orient != OrientHorizontal { + renderValue.X -= textBox.Width() >> 1 + renderValue.Y -= distance + } else { + renderValue.X += distance + renderValue.Y += textBox.Height() >> 1 + renderValue.Y -= 2 + } + if rotated { + renderValue.X = value.X + textBox.Width()>>1 - 1 + p.ClearTextRotation() + } else { + if textBox.Width()%2 != 0 { + renderValue.X++ + } + } + renderValue.X += value.Offset.Left + renderValue.Y += value.Offset.Top + o.values = append(o.values, renderValue) +} + +func (o *SeriesLabelPainter) Render() (Box, error) { + for _, item := range o.values { + o.p.OverrideTextStyle(item.Style) + if item.Radians != 0 { + o.p.TextRotation(item.Text, item.X, item.Y, item.Radians) + } else { + o.p.Text(item.Text, item.X, item.Y) + } + } + return chart.BoxZero, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/start_zh.md b/src/server/vendor/github.com/vicanso/go-charts/v2/start_zh.md new file mode 100644 index 00000000..ee8359c7 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/start_zh.md @@ -0,0 +1,254 @@ +# go-charts + +`go-charts`主要分为了下几个模块: + +- `标题`:图表的标题,包括主副标题,位置为图表的顶部 +- `图例`:图表的图例列表,用于标识每个图例对应的颜色与名称信息,默认为图表的顶部,可自定义位置 +- `X轴`:图表的x轴,用于折线图、柱状图中,表示每个点对应的时间,位置图表的底部 +- `Y轴`:图表的y轴,用于折线图、柱状图中,最多可使用两组y轴(一左一右),默认位置图表的左侧 +- `内容`: 图表的内容,折线图、柱状图、饼图等,在图表的中间区域 + +## 标题 + +### 常用设置 + +标题一般仅需要设置主副标题即可,其它的属性均会设置默认值,常用的方式是使用`TitleTextOptionFunc`设置,其中副标题为可选值,方式如下: + +```go + charts.TitleTextOptionFunc("Text", "Subtext"), +``` + +### 个性化设置 + +```go +func(opt *charts.ChartOption) { + opt.Title = charts.TitleOption{ + // 主标题 + Text: "Text", + // 副标题 + Subtext: "Subtext", + // 标题左侧位置,可设置为"center","right",数值("20")或百份比("20%") + Left: charts.PositionRight, + // 标题顶部位置,只可调为数值 + Top: "20", + // 主标题文字大小 + FontSize: 14, + // 副标题文字大小 + SubtextFontSize: 12, + // 主标题字体颜色 + FontColor: charts.Color{ + R: 100, + G: 100, + B: 100, + A: 255, + }, + // 副标题字体影响 + SubtextFontColor: charts.Color{ + R: 200, + G: 200, + B: 200, + A: 255, + }, + } +}, +``` + +### 部分属性个性化设置 + +```go +charts.TitleTextOptionFunc("Text", "Subtext"), +func(opt *charts.ChartOption) { + // 修改top的值 + opt.Title.Top = "20" +}, +``` + +## 图例 + +### 常用设置 + +图例组件与图表中的数据一一对应,常用仅设置其名称及左侧的值即可(可选),方式如下: + + +```go +charts.LegendLabelsOptionFunc([]string{ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", +}, "50"), +``` + +### 个性化设置 + +```go +func(opt *charts.ChartOption) { + opt.Legend = charts.LegendOption{ + // 图例名称 + Data: []string{ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", + }, + // 图例左侧位置,可设置为"center","right",数值("20")或百份比("20%") + // 如果示例有多行,只影响第一行,而且对于多行的示例,设置"center", "right"无效 + Left: "50", + // 图例顶部位置,只可调为数值 + Top: "10", + // 图例图标的位置,默认为左侧,只允许左或右 + Align: charts.AlignRight, + // 图例排列方式,默认为水平,只允许水平或垂直 + Orient: charts.OrientVertical, + // 图标类型,提供"rect"与"lineDot"两种类型 + Icon: charts.IconRect, + // 字体大小 + FontSize: 14, + // 字体颜色 + FontColor: charts.Color{ + R: 150, + G: 150, + B: 150, + A: 255, + }, + // 是否展示,如果不需要展示则设置 + // Show: charts.FalseFlag(), + // 图例区域的padding值 + Padding: charts.Box{ + Top: 10, + Left: 10, + }, + } +}, +``` + +### 部分属性个性化设置 + +```go +charts.LegendLabelsOptionFunc([]string{ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", +}, "50"), +func(opt *charts.ChartOption) { + opt.Legend.Top = "10" +}, +``` + +## X轴 + +### 常用设置 + +图表中X轴的展示,常用的设置方式是指定数组即可: + +```go +charts.XAxisDataOptionFunc([]string{ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun", +}), +``` + +### 个性化设置 + +```go +func(opt *charts.ChartOption) { + opt.XAxis = charts.XAxisOption{ + // X轴内容 + Data: []string{ + "01", + "02", + "03", + "04", + "05", + "06", + "07", + "08", + "09", + }, + // 如果数据点不居中,则设置为false + BoundaryGap: charts.FalseFlag(), + // 字体大小 + FontSize: 14, + // 是否展示,如果不需要展示则设置 + // Show: charts.FalseFlag(), + // 会根据文本内容以及此值选择适合的分块大小,一般不需要设置 + // SplitNumber: 3, + // 线条颜色 + StrokeColor: charts.Color{ + R: 200, + G: 200, + B: 200, + A: 255, + }, + // 文字颜色 + FontColor: charts.Color{ + R: 100, + G: 100, + B: 100, + A: 255, + }, + } +}, +``` + +### 部分属性个性化设置 + +```go +charts.XAxisDataOptionFunc([]string{ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun", +}), +func(opt *charts.ChartOption) { + opt.XAxis.FontColor = charts.Color{ + R: 100, + G: 100, + B: 100, + A: 255, + }, +}, +``` + +## Y轴 + +图表中的y轴展示的相关数据会根据图表中的数据自动生成适合的值,如果需要自定义,则可自定义以下部分数据: + +```go +func(opt *charts.ChartOption) { + opt.YAxisOptions = []charts.YAxisOption{ + { + // 字体大小 + FontSize: 16, + // 字体颜色 + FontColor: charts.Color{ + R: 100, + G: 100, + B: 100, + A: 255, + }, + // 内容,{value}会替换为对应的值 + Formatter: "{value} ml", + // Y轴颜色,如果设置此值,会覆盖font color + Color: charts.Color{ + R: 255, + G: 0, + B: 0, + A: 255, + }, + }, + } +}, +``` diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/table.go b/src/server/vendor/github.com/vicanso/go-charts/v2/table.go new file mode 100644 index 00000000..86ef5695 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/table.go @@ -0,0 +1,438 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "errors" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +type tableChart struct { + p *Painter + opt *TableChartOption +} + +// NewTableChart returns a table chart render +func NewTableChart(p *Painter, opt TableChartOption) *tableChart { + if opt.Theme == nil { + opt.Theme = defaultTheme + } + return &tableChart{ + p: p, + opt: &opt, + } +} + +type TableCell struct { + // Text the text of table cell + Text string + // Style the current style of table cell + Style Style + // Row the row index of table cell + Row int + // Column the column index of table cell + Column int +} + +type TableChartOption struct { + // The output type + Type string + // The width of table + Width int + // The theme + Theme ColorPalette + // The padding of table cell + Padding Box + // The header data of table + Header []string + // The data of table + Data [][]string + // The span list of table column + Spans []int + // The text align list of table cell + TextAligns []string + // The font size of table + FontSize float64 + // The font family, which should be installed first + FontFamily string + Font *truetype.Font + // The font color of table + FontColor Color + // The background color of header + HeaderBackgroundColor Color + // The header font color + HeaderFontColor Color + // The background color of row + RowBackgroundColors []Color + // The background color + BackgroundColor Color + // CellTextStyle customize text style of table cell + CellTextStyle func(TableCell) *Style + // CellStyle customize drawing style of table cell + CellStyle func(TableCell) *Style +} + +type TableSetting struct { + // The color of header + HeaderColor Color + // The color of heder text + HeaderFontColor Color + // The color of table text + FontColor Color + // The color list of row + RowColors []Color + // The padding of cell + Padding Box +} + +var TableLightThemeSetting = TableSetting{ + HeaderColor: Color{ + R: 240, + G: 240, + B: 240, + A: 255, + }, + HeaderFontColor: Color{ + R: 98, + G: 105, + B: 118, + A: 255, + }, + FontColor: Color{ + R: 70, + G: 70, + B: 70, + A: 255, + }, + RowColors: []Color{ + drawing.ColorWhite, + { + R: 247, + G: 247, + B: 247, + A: 255, + }, + }, + Padding: Box{ + Left: 10, + Top: 10, + Right: 10, + Bottom: 10, + }, +} + +var TableDarkThemeSetting = TableSetting{ + HeaderColor: Color{ + R: 38, + G: 38, + B: 42, + A: 255, + }, + HeaderFontColor: Color{ + R: 216, + G: 217, + B: 218, + A: 255, + }, + FontColor: Color{ + R: 216, + G: 217, + B: 218, + A: 255, + }, + RowColors: []Color{ + { + R: 24, + G: 24, + B: 28, + A: 255, + }, + { + R: 38, + G: 38, + B: 42, + A: 255, + }, + }, + Padding: Box{ + Left: 10, + Top: 10, + Right: 10, + Bottom: 10, + }, +} + +var tableDefaultSetting = TableLightThemeSetting + +// SetDefaultTableSetting sets the default setting for table +func SetDefaultTableSetting(setting TableSetting) { + tableDefaultSetting = setting +} + +type renderInfo struct { + Width int + Height int + HeaderHeight int + RowHeights []int + ColumnWidths []int +} + +func (t *tableChart) render() (*renderInfo, error) { + info := renderInfo{ + RowHeights: make([]int, 0), + } + p := t.p + opt := t.opt + if len(opt.Header) == 0 { + return nil, errors.New("header can not be nil") + } + theme := opt.Theme + if theme == nil { + theme = p.theme + } + fontSize := opt.FontSize + if fontSize == 0 { + fontSize = 12 + } + fontColor := opt.FontColor + if fontColor.IsZero() { + fontColor = tableDefaultSetting.FontColor + } + font := opt.Font + if font == nil { + font = theme.GetFont() + } + headerFontColor := opt.HeaderFontColor + if opt.HeaderFontColor.IsZero() { + headerFontColor = tableDefaultSetting.HeaderFontColor + } + + spans := opt.Spans + if len(spans) != len(opt.Header) { + newSpans := make([]int, len(opt.Header)) + for index := range opt.Header { + if index >= len(spans) { + newSpans[index] = 1 + } else { + newSpans[index] = spans[index] + } + } + spans = newSpans + } + + sum := sumInt(spans) + values := autoDivideSpans(p.Width(), sum, spans) + columnWidths := make([]int, 0) + for index, v := range values { + if index == len(values)-1 { + break + } + columnWidths = append(columnWidths, values[index+1]-v) + } + info.ColumnWidths = columnWidths + + height := 0 + textStyle := Style{ + FontSize: fontSize, + FontColor: headerFontColor, + FillColor: headerFontColor, + Font: font, + } + + headerHeight := 0 + padding := opt.Padding + if padding.IsZero() { + padding = tableDefaultSetting.Padding + } + getCellTextStyle := opt.CellTextStyle + if getCellTextStyle == nil { + getCellTextStyle = func(_ TableCell) *Style { + return nil + } + } + // textAligns := opt.TextAligns + getTextAlign := func(index int) string { + if len(opt.TextAligns) <= index { + return "" + } + return opt.TextAligns[index] + } + + // 表格单元的处理 + renderTableCells := func( + currentStyle Style, + rowIndex int, + textList []string, + currentHeight int, + cellPadding Box, + ) int { + cellMaxHeight := 0 + paddingHeight := cellPadding.Top + cellPadding.Bottom + paddingWidth := cellPadding.Left + cellPadding.Right + for index, text := range textList { + cellStyle := getCellTextStyle(TableCell{ + Text: text, + Row: rowIndex, + Column: index, + Style: currentStyle, + }) + if cellStyle == nil { + cellStyle = ¤tStyle + } + p.SetStyle(*cellStyle) + x := values[index] + y := currentHeight + cellPadding.Top + width := values[index+1] - x + x += cellPadding.Left + width -= paddingWidth + box := p.TextFit(text, x, y+int(fontSize), width, getTextAlign(index)) + // 计算最高的高度 + if box.Height()+paddingHeight > cellMaxHeight { + cellMaxHeight = box.Height() + paddingHeight + } + } + return cellMaxHeight + } + + // 表头的处理 + headerHeight = renderTableCells(textStyle, 0, opt.Header, height, padding) + height += headerHeight + info.HeaderHeight = headerHeight + + // 表格内容的处理 + textStyle.FontColor = fontColor + textStyle.FillColor = fontColor + for index, textList := range opt.Data { + cellHeight := renderTableCells(textStyle, index+1, textList, height, padding) + info.RowHeights = append(info.RowHeights, cellHeight) + height += cellHeight + } + + info.Width = p.Width() + info.Height = height + return &info, nil +} + +func (t *tableChart) renderWithInfo(info *renderInfo) (Box, error) { + p := t.p + opt := t.opt + if !opt.BackgroundColor.IsZero() { + p.SetBackground(p.Width(), p.Height(), opt.BackgroundColor) + } + headerBGColor := opt.HeaderBackgroundColor + if headerBGColor.IsZero() { + headerBGColor = tableDefaultSetting.HeaderColor + } + + // 如果设置表头背景色 + p.SetBackground(info.Width, info.HeaderHeight, headerBGColor, true) + currentHeight := info.HeaderHeight + rowColors := opt.RowBackgroundColors + if rowColors == nil { + rowColors = tableDefaultSetting.RowColors + } + for index, h := range info.RowHeights { + color := rowColors[index%len(rowColors)] + child := p.Child(PainterPaddingOption(Box{ + Top: currentHeight, + })) + child.SetBackground(p.Width(), h, color, true) + currentHeight += h + } + // 根据是否有设置表格样式调整背景色 + getCellStyle := opt.CellStyle + if getCellStyle != nil { + arr := [][]string{ + opt.Header, + } + arr = append(arr, opt.Data...) + top := 0 + heights := []int{ + info.HeaderHeight, + } + heights = append(heights, info.RowHeights...) + // 循环所有表格单元,生成背景色 + for i, textList := range arr { + left := 0 + for j, v := range textList { + style := getCellStyle(TableCell{ + Text: v, + Row: i, + Column: j, + }) + if style != nil && !style.FillColor.IsZero() { + padding := style.Padding + child := p.Child(PainterPaddingOption(Box{ + Top: top + padding.Top, + Left: left + padding.Left, + })) + w := info.ColumnWidths[j] - padding.Left - padding.Top + h := heights[i] - padding.Top - padding.Bottom + child.SetBackground(w, h, style.FillColor, true) + } + left += info.ColumnWidths[j] + } + top += heights[i] + } + } + _, err := t.render() + if err != nil { + return BoxZero, err + } + + return Box{ + Right: info.Width, + Bottom: info.Height, + }, nil +} + +func (t *tableChart) Render() (Box, error) { + p := t.p + opt := t.opt + if !opt.BackgroundColor.IsZero() { + p.SetBackground(p.Width(), p.Height(), opt.BackgroundColor) + } + if opt.Font == nil && opt.FontFamily != "" { + opt.Font, _ = GetFont(opt.FontFamily) + } + + r := p.render + fn := chart.PNG + if p.outputType == ChartOutputSVG { + fn = chart.SVG + } + newRender, err := fn(p.Width(), 100) + if err != nil { + return BoxZero, err + } + p.render = newRender + info, err := t.render() + if err != nil { + return BoxZero, err + } + p.render = r + return t.renderWithInfo(info) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/theme.go b/src/server/vendor/github.com/vicanso/go-charts/v2/theme.go new file mode 100644 index 00000000..a6d624f3 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/theme.go @@ -0,0 +1,332 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +const ThemeDark = "dark" +const ThemeLight = "light" +const ThemeGrafana = "grafana" +const ThemeAnt = "ant" + +type ColorPalette interface { + IsDark() bool + GetAxisStrokeColor() Color + SetAxisStrokeColor(Color) + GetAxisSplitLineColor() Color + SetAxisSplitLineColor(Color) + GetSeriesColor(int) Color + SetSeriesColor([]Color) + GetBackgroundColor() Color + SetBackgroundColor(Color) + GetTextColor() Color + SetTextColor(Color) + GetFontSize() float64 + SetFontSize(float64) + GetFont() *truetype.Font + SetFont(*truetype.Font) +} + +type themeColorPalette struct { + isDarkMode bool + axisStrokeColor Color + axisSplitLineColor Color + backgroundColor Color + textColor Color + seriesColors []Color + fontSize float64 + font *truetype.Font +} + +type ThemeOption struct { + IsDarkMode bool + AxisStrokeColor Color + AxisSplitLineColor Color + BackgroundColor Color + TextColor Color + SeriesColors []Color +} + +var palettes = map[string]*themeColorPalette{} + +const defaultFontSize = 12.0 + +var defaultTheme ColorPalette + +var defaultLightFontColor = drawing.Color{ + R: 70, + G: 70, + B: 70, + A: 255, +} +var defaultDarkFontColor = drawing.Color{ + R: 238, + G: 238, + B: 238, + A: 255, +} + +func init() { + echartSeriesColors := []Color{ + parseColor("#5470c6"), + parseColor("#91cc75"), + parseColor("#fac858"), + parseColor("#ee6666"), + parseColor("#73c0de"), + parseColor("#3ba272"), + parseColor("#fc8452"), + parseColor("#9a60b4"), + parseColor("#ea7ccc"), + } + grafanaSeriesColors := []Color{ + parseColor("#7EB26D"), + parseColor("#EAB839"), + parseColor("#6ED0E0"), + parseColor("#EF843C"), + parseColor("#E24D42"), + parseColor("#1F78C1"), + parseColor("#705DA0"), + parseColor("#508642"), + } + antSeriesColors := []Color{ + parseColor("#5b8ff9"), + parseColor("#5ad8a6"), + parseColor("#5d7092"), + parseColor("#f6bd16"), + parseColor("#6f5ef9"), + parseColor("#6dc8ec"), + parseColor("#945fb9"), + parseColor("#ff9845"), + } + AddTheme( + ThemeDark, + ThemeOption{ + IsDarkMode: true, + AxisStrokeColor: Color{ + R: 185, + G: 184, + B: 206, + A: 255, + }, + AxisSplitLineColor: Color{ + R: 72, + G: 71, + B: 83, + A: 255, + }, + BackgroundColor: Color{ + R: 16, + G: 12, + B: 42, + A: 255, + }, + TextColor: Color{ + R: 238, + G: 238, + B: 238, + A: 255, + }, + SeriesColors: echartSeriesColors, + }, + ) + + AddTheme( + ThemeLight, + ThemeOption{ + IsDarkMode: false, + AxisStrokeColor: Color{ + R: 110, + G: 112, + B: 121, + A: 255, + }, + AxisSplitLineColor: Color{ + R: 224, + G: 230, + B: 242, + A: 255, + }, + BackgroundColor: drawing.ColorWhite, + TextColor: Color{ + R: 70, + G: 70, + B: 70, + A: 255, + }, + SeriesColors: echartSeriesColors, + }, + ) + AddTheme( + ThemeAnt, + ThemeOption{ + IsDarkMode: false, + AxisStrokeColor: Color{ + R: 110, + G: 112, + B: 121, + A: 255, + }, + AxisSplitLineColor: Color{ + R: 224, + G: 230, + B: 242, + A: 255, + }, + BackgroundColor: drawing.ColorWhite, + TextColor: drawing.Color{ + R: 70, + G: 70, + B: 70, + A: 255, + }, + SeriesColors: antSeriesColors, + }, + ) + AddTheme( + ThemeGrafana, + ThemeOption{ + IsDarkMode: true, + AxisStrokeColor: Color{ + R: 185, + G: 184, + B: 206, + A: 255, + }, + AxisSplitLineColor: Color{ + R: 68, + G: 67, + B: 67, + A: 255, + }, + BackgroundColor: drawing.Color{ + R: 31, + G: 29, + B: 29, + A: 255, + }, + TextColor: Color{ + R: 216, + G: 217, + B: 218, + A: 255, + }, + SeriesColors: grafanaSeriesColors, + }, + ) + SetDefaultTheme(ThemeLight) +} + +// SetDefaultTheme sets default theme +func SetDefaultTheme(name string) { + defaultTheme = NewTheme(name) +} + +func AddTheme(name string, opt ThemeOption) { + palettes[name] = &themeColorPalette{ + isDarkMode: opt.IsDarkMode, + axisStrokeColor: opt.AxisStrokeColor, + axisSplitLineColor: opt.AxisSplitLineColor, + backgroundColor: opt.BackgroundColor, + textColor: opt.TextColor, + seriesColors: opt.SeriesColors, + } +} + +func NewTheme(name string) ColorPalette { + p, ok := palettes[name] + if !ok { + p = palettes[ThemeLight] + } + clone := *p + return &clone +} + +func (t *themeColorPalette) IsDark() bool { + return t.isDarkMode +} + +func (t *themeColorPalette) GetAxisStrokeColor() Color { + return t.axisStrokeColor +} + +func (t *themeColorPalette) SetAxisStrokeColor(c Color) { + t.axisStrokeColor = c +} + +func (t *themeColorPalette) GetAxisSplitLineColor() Color { + return t.axisSplitLineColor +} + +func (t *themeColorPalette) SetAxisSplitLineColor(c Color) { + t.axisSplitLineColor = c +} + +func (t *themeColorPalette) GetSeriesColor(index int) Color { + colors := t.seriesColors + return colors[index%len(colors)] +} +func (t *themeColorPalette) SetSeriesColor(colors []Color) { + t.seriesColors = colors +} + +func (t *themeColorPalette) GetBackgroundColor() Color { + return t.backgroundColor +} + +func (t *themeColorPalette) SetBackgroundColor(c Color) { + t.backgroundColor = c +} + +func (t *themeColorPalette) GetTextColor() Color { + return t.textColor +} + +func (t *themeColorPalette) SetTextColor(c Color) { + t.textColor = c +} + +func (t *themeColorPalette) GetFontSize() float64 { + if t.fontSize != 0 { + return t.fontSize + } + return defaultFontSize +} + +func (t *themeColorPalette) SetFontSize(fontSize float64) { + t.fontSize = fontSize +} + +func (t *themeColorPalette) GetFont() *truetype.Font { + if t.font != nil { + return t.font + } + f, _ := GetDefaultFont() + return f +} + +func (t *themeColorPalette) SetFont(f *truetype.Font) { + t.font = f +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/title.go b/src/server/vendor/github.com/vicanso/go-charts/v2/title.go new file mode 100644 index 00000000..74ab4f90 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/title.go @@ -0,0 +1,197 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "strconv" + "strings" + + "github.com/golang/freetype/truetype" +) + +type TitleOption struct { + // The theme of chart + Theme ColorPalette + // Title text, support \n for new line + Text string + // Subtitle text, support \n for new line + Subtext string + // Distance between title component and the left side of the container. + // It can be pixel value: 20, percentage value: 20%, + // or position value: right, center. + Left string + // Distance between title component and the top side of the container. + // It can be pixel value: 20. + Top string + // The font of label + Font *truetype.Font + // The font size of label + FontSize float64 + // The color of label + FontColor Color + // The subtext font size of label + SubtextFontSize float64 + // The subtext font color of label + SubtextFontColor Color +} + +type titleMeasureOption struct { + width int + height int + text string + style Style +} + +func splitTitleText(text string) []string { + arr := strings.Split(text, "\n") + result := make([]string, 0) + for _, v := range arr { + v = strings.TrimSpace(v) + if v == "" { + continue + } + result = append(result, v) + } + return result +} + +type titlePainter struct { + p *Painter + opt *TitleOption +} + +// NewTitlePainter returns a title renderer +func NewTitlePainter(p *Painter, opt TitleOption) *titlePainter { + return &titlePainter{ + p: p, + opt: &opt, + } +} + +func (t *titlePainter) Render() (Box, error) { + opt := t.opt + p := t.p + theme := opt.Theme + + if theme == nil { + theme = p.theme + } + if opt.Text == "" && opt.Subtext == "" { + return BoxZero, nil + } + + measureOptions := make([]titleMeasureOption, 0) + + if opt.Font == nil { + opt.Font = theme.GetFont() + } + if opt.FontColor.IsZero() { + opt.FontColor = theme.GetTextColor() + } + if opt.FontSize == 0 { + opt.FontSize = theme.GetFontSize() + } + if opt.SubtextFontColor.IsZero() { + opt.SubtextFontColor = opt.FontColor + } + if opt.SubtextFontSize == 0 { + opt.SubtextFontSize = opt.FontSize + } + + titleTextStyle := Style{ + Font: opt.Font, + FontSize: opt.FontSize, + FontColor: opt.FontColor, + } + // 主标题 + for _, v := range splitTitleText(opt.Text) { + measureOptions = append(measureOptions, titleMeasureOption{ + text: v, + style: titleTextStyle, + }) + } + subtextStyle := Style{ + Font: opt.Font, + FontSize: opt.SubtextFontSize, + FontColor: opt.SubtextFontColor, + } + // 副标题 + for _, v := range splitTitleText(opt.Subtext) { + measureOptions = append(measureOptions, titleMeasureOption{ + text: v, + style: subtextStyle, + }) + } + textMaxWidth := 0 + textMaxHeight := 0 + for index, item := range measureOptions { + p.OverrideTextStyle(item.style) + textBox := p.MeasureText(item.text) + + w := textBox.Width() + h := textBox.Height() + if w > textMaxWidth { + textMaxWidth = w + } + if h > textMaxHeight { + textMaxHeight = h + } + measureOptions[index].height = h + measureOptions[index].width = w + } + width := textMaxWidth + + titleX := 0 + switch opt.Left { + case PositionRight: + titleX = p.Width() - textMaxWidth + case PositionCenter: + titleX = p.Width()>>1 - (textMaxWidth >> 1) + default: + if strings.HasSuffix(opt.Left, "%") { + value, _ := strconv.Atoi(strings.ReplaceAll(opt.Left, "%", "")) + titleX = p.Width() * value / 100 + } else { + value, _ := strconv.Atoi(opt.Left) + titleX = value + } + } + titleY := 0 + // TODO TOP 暂只支持数值 + if opt.Top != "" { + value, _ := strconv.Atoi(opt.Top) + titleY += value + } + for _, item := range measureOptions { + p.OverrideTextStyle(item.style) + x := titleX + (textMaxWidth-item.width)>>1 + y := titleY + item.height + p.Text(item.text, x, y) + titleY += item.height + } + + return Box{ + Bottom: titleY, + Right: titleX + width, + }, nil +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/util.go b/src/server/vendor/github.com/vicanso/go-charts/v2/util.go new file mode 100644 index 00000000..b333e6d9 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/util.go @@ -0,0 +1,271 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "math" + "regexp" + "strconv" + "strings" + + "github.com/dustin/go-humanize" + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +func TrueFlag() *bool { + t := true + return &t +} + +func FalseFlag() *bool { + f := false + return &f +} + +func containsInt(values []int, value int) bool { + for _, v := range values { + if v == value { + return true + } + } + return false +} + +func containsString(values []string, value string) bool { + for _, v := range values { + if v == value { + return true + } + } + return false +} + +func ceilFloatToInt(value float64) int { + i := int(value) + if value == float64(i) { + return i + } + return i + 1 +} + +func getDefaultInt(value, defaultValue int) int { + if value == 0 { + return defaultValue + } + return value +} + +func autoDivide(max, size int) []int { + unit := float64(max) / float64(size) + + values := make([]int, size+1) + for i := 0; i < size+1; i++ { + if i == size { + values[i] = max + } else { + values[i] = int(float64(i) * unit) + } + } + return values +} + +func autoDivideSpans(max, size int, spans []int) []int { + values := autoDivide(max, size) + // 重新合并 + if len(spans) != 0 { + newValues := make([]int, len(spans)+1) + newValues[0] = 0 + end := 0 + for index, v := range spans { + end += v + newValues[index+1] = values[end] + } + values = newValues + } + return values +} + +func sumInt(values []int) int { + sum := 0 + for _, v := range values { + sum += v + } + return sum +} + +// measureTextMaxWidthHeight returns maxWidth and maxHeight of text list +func measureTextMaxWidthHeight(textList []string, p *Painter) (int, int) { + maxWidth := 0 + maxHeight := 0 + for _, text := range textList { + box := p.MeasureText(text) + maxWidth = chart.MaxInt(maxWidth, box.Width()) + maxHeight = chart.MaxInt(maxHeight, box.Height()) + } + return maxWidth, maxHeight +} + +func reverseStringSlice(stringList []string) { + for i, j := 0, len(stringList)-1; i < j; i, j = i+1, j-1 { + stringList[i], stringList[j] = stringList[j], stringList[i] + } +} + +func reverseIntSlice(intList []int) { + for i, j := 0, len(intList)-1; i < j; i, j = i+1, j-1 { + intList[i], intList[j] = intList[j], intList[i] + } +} + +func convertPercent(value string) float64 { + if !strings.HasSuffix(value, "%") { + return -1 + } + v, err := strconv.Atoi(strings.ReplaceAll(value, "%", "")) + if err != nil { + return -1 + } + return float64(v) / 100 +} + +func isFalse(flag *bool) bool { + if flag != nil && !*flag { + return true + } + return false +} + +func NewFloatPoint(f float64) *float64 { + v := f + return &v +} + +const K_VALUE = float64(1000) +const M_VALUE = K_VALUE * K_VALUE +const G_VALUE = M_VALUE * K_VALUE +const T_VALUE = G_VALUE * K_VALUE + +func commafWithDigits(value float64) string { + decimals := 2 + if value >= T_VALUE { + return humanize.CommafWithDigits(value/T_VALUE, decimals) + "T" + } + if value >= G_VALUE { + return humanize.CommafWithDigits(value/G_VALUE, decimals) + "G" + } + if value >= M_VALUE { + return humanize.CommafWithDigits(value/M_VALUE, decimals) + "M" + } + if value >= K_VALUE { + return humanize.CommafWithDigits(value/K_VALUE, decimals) + "k" + } + return humanize.CommafWithDigits(value, decimals) +} + +func parseColor(color string) Color { + c := Color{} + if color == "" { + return c + } + if strings.HasPrefix(color, "#") { + return drawing.ColorFromHex(color[1:]) + } + reg := regexp.MustCompile(`\((\S+)\)`) + result := reg.FindAllStringSubmatch(color, 1) + if len(result) == 0 || len(result[0]) != 2 { + return c + } + arr := strings.Split(result[0][1], ",") + if len(arr) < 3 { + return c + } + // 设置默认为255 + c.A = 255 + for index, v := range arr { + value, _ := strconv.Atoi(strings.TrimSpace(v)) + ui8 := uint8(value) + switch index { + case 0: + c.R = ui8 + case 1: + c.G = ui8 + case 2: + c.B = ui8 + default: + c.A = ui8 + } + } + return c +} + +const defaultRadiusPercent = 0.4 + +func getRadius(diameter float64, radiusValue string) float64 { + var radius float64 + if len(radiusValue) != 0 { + v := convertPercent(radiusValue) + if v != -1 { + radius = float64(diameter) * v + } else { + radius, _ = strconv.ParseFloat(radiusValue, 64) + } + } + if radius <= 0 { + radius = float64(diameter) * defaultRadiusPercent + } + return radius +} + +func getPolygonPointAngles(sides int) []float64 { + angles := make([]float64, sides) + for i := 0; i < sides; i++ { + angle := 2*math.Pi/float64(sides)*float64(i) - (math.Pi / 2) + angles[i] = angle + } + return angles +} + +func getPolygonPoint(center Point, radius, angle float64) Point { + x := center.X + int(radius*math.Cos(angle)) + y := center.Y + int(radius*math.Sin(angle)) + return Point{ + X: x, + Y: y, + } +} + +func getPolygonPoints(center Point, radius float64, sides int) []Point { + points := make([]Point, sides) + for i, angle := range getPolygonPointAngles(sides) { + points[i] = getPolygonPoint(center, radius, angle) + } + return points +} + +func isLightColor(c Color) bool { + r := float64(c.R) * float64(c.R) * 0.299 + g := float64(c.G) * float64(c.G) * 0.587 + b := float64(c.B) * float64(c.B) * 0.114 + return math.Sqrt(r+g+b) > 127.5 +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/xaxis.go b/src/server/vendor/github.com/vicanso/go-charts/v2/xaxis.go new file mode 100644 index 00000000..61698d7c --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/xaxis.go @@ -0,0 +1,105 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import ( + "github.com/golang/freetype/truetype" +) + +type XAxisOption struct { + // The font of x axis + Font *truetype.Font + // The boundary gap on both sides of a coordinate axis. + // Nil or *true means the center part of two axis ticks + BoundaryGap *bool + // The data value of x axis + Data []string + // The theme of chart + Theme ColorPalette + // The font size of x axis label + FontSize float64 + // The flag for show axis, set this to *false will hide axis + Show *bool + // Number of segments that the axis is split into. Note that this number serves only as a recommendation. + SplitNumber int + // The position of axis, it can be 'top' or 'bottom' + Position string + // The line color of axis + StrokeColor Color + // The color of label + FontColor Color + // The text rotation of label + TextRotation float64 + // The first axis + FirstAxis int + // The offset of label + LabelOffset Box + isValueAxis bool +} + +const defaultXAxisHeight = 30 + +// NewXAxisOption returns a x axis option +func NewXAxisOption(data []string, boundaryGap ...*bool) XAxisOption { + opt := XAxisOption{ + Data: data, + } + if len(boundaryGap) != 0 { + opt.BoundaryGap = boundaryGap[0] + } + return opt +} + +func (opt *XAxisOption) ToAxisOption() AxisOption { + position := PositionBottom + if opt.Position == PositionTop { + position = PositionTop + } + axisOpt := AxisOption{ + Theme: opt.Theme, + Data: opt.Data, + BoundaryGap: opt.BoundaryGap, + Position: position, + SplitNumber: opt.SplitNumber, + StrokeColor: opt.StrokeColor, + FontSize: opt.FontSize, + Font: opt.Font, + FontColor: opt.FontColor, + Show: opt.Show, + SplitLineColor: opt.Theme.GetAxisSplitLineColor(), + TextRotation: opt.TextRotation, + LabelOffset: opt.LabelOffset, + FirstAxis: opt.FirstAxis, + } + if opt.isValueAxis { + axisOpt.SplitLineShow = true + axisOpt.StrokeWidth = -1 + axisOpt.BoundaryGap = FalseFlag() + } + return axisOpt +} + +// NewBottomXAxis returns a bottom x axis renderer +func NewBottomXAxis(p *Painter, opt XAxisOption) *axisPainter { + return NewAxisPainter(p, opt.ToAxisOption()) +} diff --git a/src/server/vendor/github.com/vicanso/go-charts/v2/yaxis.go b/src/server/vendor/github.com/vicanso/go-charts/v2/yaxis.go new file mode 100644 index 00000000..e58b7a60 --- /dev/null +++ b/src/server/vendor/github.com/vicanso/go-charts/v2/yaxis.go @@ -0,0 +1,128 @@ +// MIT License + +// Copyright (c) 2022 Tree Xie + +// 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 charts + +import "github.com/golang/freetype/truetype" + +type YAxisOption struct { + // The minimun value of axis. + Min *float64 + // The maximum value of axis. + Max *float64 + // The font of y axis + Font *truetype.Font + // The data value of x axis + Data []string + // The theme of chart + Theme ColorPalette + // The font size of x axis label + FontSize float64 + // The position of axis, it can be 'left' or 'right' + Position string + // The color of label + FontColor Color + // Formatter for y axis text value + Formatter string + // Color for y axis + Color Color + // The flag for show axis, set this to *false will hide axis + Show *bool + DivideCount int + Unit int + isCategoryAxis bool + // The flag for show axis split line, set this to true will show axis split line + SplitLineShow *bool +} + +// NewYAxisOptions returns a y axis option +func NewYAxisOptions(data []string, others ...[]string) []YAxisOption { + arr := [][]string{ + data, + } + arr = append(arr, others...) + opts := make([]YAxisOption, 0) + for _, data := range arr { + opts = append(opts, YAxisOption{ + Data: data, + }) + } + return opts +} + +func (opt *YAxisOption) ToAxisOption(p *Painter) AxisOption { + position := PositionLeft + if opt.Position == PositionRight { + position = PositionRight + } + theme := opt.Theme + if theme == nil { + theme = p.theme + } + axisOpt := AxisOption{ + Formatter: opt.Formatter, + Theme: theme, + Data: opt.Data, + Position: position, + FontSize: opt.FontSize, + StrokeWidth: -1, + Font: opt.Font, + FontColor: opt.FontColor, + BoundaryGap: FalseFlag(), + SplitLineShow: true, + SplitLineColor: theme.GetAxisSplitLineColor(), + Show: opt.Show, + Unit: opt.Unit, + } + if !opt.Color.IsZero() { + axisOpt.FontColor = opt.Color + axisOpt.StrokeColor = opt.Color + } + if opt.isCategoryAxis { + axisOpt.BoundaryGap = TrueFlag() + axisOpt.StrokeWidth = 1 + axisOpt.SplitLineShow = false + } + if opt.SplitLineShow != nil { + axisOpt.SplitLineShow = *opt.SplitLineShow + } + return axisOpt +} + +// NewLeftYAxis returns a left y axis renderer +func NewLeftYAxis(p *Painter, opt YAxisOption) *axisPainter { + p = p.Child(PainterPaddingOption(Box{ + Bottom: defaultXAxisHeight, + })) + return NewAxisPainter(p, opt.ToAxisOption(p)) +} + +// NewRightYAxis returns a right y axis renderer +func NewRightYAxis(p *Painter, opt YAxisOption) *axisPainter { + p = p.Child(PainterPaddingOption(Box{ + Bottom: defaultXAxisHeight, + })) + axisOpt := opt.ToAxisOption(p) + axisOpt.Position = PositionRight + axisOpt.SplitLineShow = false + return NewAxisPainter(p, axisOpt) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/.gitignore b/src/server/vendor/github.com/wcharczuk/go-chart/v2/.gitignore new file mode 100644 index 00000000..3e4b6e13 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/.gitignore @@ -0,0 +1,19 @@ +# Binaries for programs and plugins +*.exe +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 +.glide/ + +# Other +.vscode +.DS_Store +coverage.html \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/COVERAGE b/src/server/vendor/github.com/wcharczuk/go-chart/v2/COVERAGE new file mode 100644 index 00000000..7e492f87 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/COVERAGE @@ -0,0 +1 @@ +29.02 \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/LICENSE b/src/server/vendor/github.com/wcharczuk/go-chart/v2/LICENSE new file mode 100644 index 00000000..8d9f1c57 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 William Charczuk. + +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. \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/Makefile b/src/server/vendor/github.com/wcharczuk/go-chart/v2/Makefile new file mode 100644 index 00000000..e0928c3d --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/Makefile @@ -0,0 +1,10 @@ +all: new-install test + +new-install: + @go get -v -u ./... + +generate: + @go generate ./... + +test: + @go test ./... \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/PROFANITY_RULES.yml b/src/server/vendor/github.com/wcharczuk/go-chart/v2/PROFANITY_RULES.yml new file mode 100644 index 00000000..1e6c8038 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/PROFANITY_RULES.yml @@ -0,0 +1,4 @@ +go-sdk: + excludeFiles: [ "*_test.go" ] + importsContain: [ github.com/blend/go-sdk/* ] + description: "please don't use go-sdk in this repo" \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/README.md b/src/server/vendor/github.com/wcharczuk/go-chart/v2/README.md new file mode 100644 index 00000000..a0cdbc0e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/README.md @@ -0,0 +1,95 @@ +go-chart +======== +[![CircleCI](https://circleci.com/gh/wcharczuk/go-chart.svg?style=svg)](https://circleci.com/gh/wcharczuk/go-chart) [![Go Report Card](https://goreportcard.com/badge/github.com/wcharczuk/go-chart)](https://goreportcard.com/report/github.com/wcharczuk/go-chart) + +Package `chart` is a very simple golang native charting library that supports timeseries and continuous line charts. + +Master should now be on the v3.x codebase, which overhauls the api significantly. Per usual, see `examples` for more information. + +# Installation + +To install `chart` run the following: + +```bash +> go get -u github.com/wcharczuk/go-chart +``` + +Most of the components are interchangeable so feel free to crib whatever you want. + +# Output Examples + +Spark Lines: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/tvix_ltm.png) + +Single axis: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/goog_ltm.png) + +Two axis: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/two_axis.png) + +# Other Chart Types + +Pie Chart: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/pie_chart.png) + +The code for this chart can be found in `examples/pie_chart/main.go`. + +Stacked Bar: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/stacked_bar.png) + +The code for this chart can be found in `examples/stacked_bar/main.go`. + +# Code Examples + +Actual chart configurations and examples can be found in the `./examples/` directory. They are simple CLI programs that write to `output.png` (they are also updated with `go generate`. + +# Usage + +Everything starts with the `chart.Chart` object. The bare minimum to draw a chart would be the following: + +```golang + +import ( + ... + "bytes" + ... + "github.com/wcharczuk/go-chart" //exposes "chart" +) + +graph := chart.Chart{ + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0}, + }, + }, +} + +buffer := bytes.NewBuffer([]byte{}) +err := graph.Render(chart.PNG, buffer) +``` + +Explanation of the above: A `chart` can have many `Series`, a `Series` is a collection of things that need to be drawn according to the X range and the Y range(s). + +Here, we have a single series with x range values as float64s, rendered to a PNG. Note; we can pass any type of `io.Writer` into `Render(...)`, meaning that we can render the chart to a file or a resonse or anything else that implements `io.Writer`. + +# API Overview + +Everything on the `chart.Chart` object has defaults that can be overriden. Whenever a developer sets a property on the chart object, it is to be assumed that value will be used instead of the default. + +The best way to see the api in action is to look at the examples in the `./_examples/` directory. + +# Design Philosophy + +I wanted to make a charting library that used only native golang, that could be stood up on a server (i.e. it had built in fonts). + +The goal with the API itself is to have the "zero value be useful", and to require the user to not code more than they absolutely needed. + +# Contributions + +Contributions are welcome though this library is in a holding pattern for the forseable future. diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/annotation_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/annotation_series.go new file mode 100644 index 00000000..96e78f91 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/annotation_series.go @@ -0,0 +1,91 @@ +package chart + +import ( + "fmt" + "math" +) + +// Interface Assertions. +var ( + _ Series = (*AnnotationSeries)(nil) +) + +// AnnotationSeries is a series of labels on the chart. +type AnnotationSeries struct { + Name string + Style Style + YAxis YAxisType + Annotations []Value2 +} + +// GetName returns the name of the time series. +func (as AnnotationSeries) GetName() string { + return as.Name +} + +// GetStyle returns the line style. +func (as AnnotationSeries) GetStyle() Style { + return as.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (as AnnotationSeries) GetYAxis() YAxisType { + return as.YAxis +} + +func (as AnnotationSeries) annotationStyleDefaults(defaults Style) Style { + return Style{ + FontColor: DefaultTextColor, + Font: defaults.Font, + FillColor: DefaultAnnotationFillColor, + FontSize: DefaultAnnotationFontSize, + StrokeColor: defaults.StrokeColor, + StrokeWidth: defaults.StrokeWidth, + Padding: DefaultAnnotationPadding, + } +} + +// Measure returns a bounds box of the series. +func (as AnnotationSeries) Measure(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) Box { + box := Box{ + Top: math.MaxInt32, + Left: math.MaxInt32, + Right: 0, + Bottom: 0, + } + if !as.Style.Hidden { + seriesStyle := as.Style.InheritFrom(as.annotationStyleDefaults(defaults)) + for _, a := range as.Annotations { + style := a.Style.InheritFrom(seriesStyle) + lx := canvasBox.Left + xrange.Translate(a.XValue) + ly := canvasBox.Bottom - yrange.Translate(a.YValue) + ab := Draw.MeasureAnnotation(r, canvasBox, style, lx, ly, a.Label) + box.Top = MinInt(box.Top, ab.Top) + box.Left = MinInt(box.Left, ab.Left) + box.Right = MaxInt(box.Right, ab.Right) + box.Bottom = MaxInt(box.Bottom, ab.Bottom) + } + } + return box +} + +// Render draws the series. +func (as AnnotationSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + if !as.Style.Hidden { + seriesStyle := as.Style.InheritFrom(as.annotationStyleDefaults(defaults)) + for _, a := range as.Annotations { + style := a.Style.InheritFrom(seriesStyle) + lx := canvasBox.Left + xrange.Translate(a.XValue) + ly := canvasBox.Bottom - yrange.Translate(a.YValue) + Draw.Annotation(r, canvasBox, style, lx, ly, a.Label) + } + } +} + +// Validate validates the series. +func (as AnnotationSeries) Validate() error { + if len(as.Annotations) == 0 { + return fmt.Errorf("annotation series requires annotations to be set and not empty") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/array.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/array.go new file mode 100644 index 00000000..71b3ee73 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/array.go @@ -0,0 +1,24 @@ +package chart + +var ( + _ Sequence = (*Array)(nil) +) + +// NewArray returns a new array from a given set of values. +// Array implements Sequence, which allows it to be used with the sequence helpers. +func NewArray(values ...float64) Array { + return Array(values) +} + +// Array is a wrapper for an array of floats that implements `ValuesProvider`. +type Array []float64 + +// Len returns the value provider length. +func (a Array) Len() int { + return len(a) +} + +// GetValue returns the value at a given index. +func (a Array) GetValue(index int) float64 { + return a[index] +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/axis.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/axis.go new file mode 100644 index 00000000..54e4d369 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/axis.go @@ -0,0 +1,45 @@ +package chart + +// TickPosition is an enumeration of possible tick drawing positions. +type TickPosition int + +const ( + // TickPositionUnset means to use the default tick position. + TickPositionUnset TickPosition = 0 + // TickPositionBetweenTicks draws the labels for a tick between the previous and current tick. + TickPositionBetweenTicks TickPosition = 1 + // TickPositionUnderTick draws the tick below the tick. + TickPositionUnderTick TickPosition = 2 +) + +// YAxisType is a type of y-axis; it can either be primary or secondary. +type YAxisType int + +const ( + // YAxisPrimary is the primary axis. + YAxisPrimary YAxisType = 0 + // YAxisSecondary is the secondary axis. + YAxisSecondary YAxisType = 1 +) + +// Axis is a chart feature detailing what values happen where. +type Axis interface { + GetName() string + SetName(name string) + + GetStyle() Style + SetStyle(style Style) + + GetTicks() []Tick + GenerateTicks(r Renderer, ra Range, vf ValueFormatter) []Tick + + // GenerateGridLines returns the gridlines for the axis. + GetGridLines(ticks []Tick) []GridLine + + // Measure should return an absolute box for the axis. + // This is used when auto-fitting the canvas to the background. + Measure(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick) Box + + // Render renders the axis. + Render(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/bar_chart.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bar_chart.go new file mode 100644 index 00000000..d61f3db1 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bar_chart.go @@ -0,0 +1,516 @@ +package chart + +import ( + "errors" + "fmt" + "io" + "math" + + "github.com/golang/freetype/truetype" +) + +// BarChart is a chart that draws bars on a range. +type BarChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + BarWidth int + + Background Style + Canvas Style + + XAxis Style + YAxis YAxis + + BarSpacing int + + UseBaseValue bool + BaseValue float64 + + Font *truetype.Font + defaultFont *truetype.Font + + Bars []Value + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (bc BarChart) GetDPI() float64 { + if bc.DPI == 0 { + return DefaultDPI + } + return bc.DPI +} + +// GetFont returns the text font. +func (bc BarChart) GetFont() *truetype.Font { + if bc.Font == nil { + return bc.defaultFont + } + return bc.Font +} + +// GetWidth returns the chart width or the default value. +func (bc BarChart) GetWidth() int { + if bc.Width == 0 { + return DefaultChartWidth + } + return bc.Width +} + +// GetHeight returns the chart height or the default value. +func (bc BarChart) GetHeight() int { + if bc.Height == 0 { + return DefaultChartHeight + } + return bc.Height +} + +// GetBarSpacing returns the spacing between bars. +func (bc BarChart) GetBarSpacing() int { + if bc.BarSpacing == 0 { + return DefaultBarSpacing + } + return bc.BarSpacing +} + +// GetBarWidth returns the default bar width. +func (bc BarChart) GetBarWidth() int { + if bc.BarWidth == 0 { + return DefaultBarWidth + } + return bc.BarWidth +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (bc BarChart) Render(rp RendererProvider, w io.Writer) error { + if len(bc.Bars) == 0 { + return errors.New("please provide at least one bar") + } + + r, err := rp(bc.GetWidth(), bc.GetHeight()) + if err != nil { + return err + } + + if bc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + bc.defaultFont = defaultFont + } + r.SetDPI(bc.GetDPI()) + + bc.drawBackground(r) + + var canvasBox Box + var yt []Tick + var yr Range + var yf ValueFormatter + + canvasBox = bc.getDefaultCanvasBox() + yr = bc.getRanges() + if yr.GetMax()-yr.GetMin() == 0 { + return fmt.Errorf("invalid data range; cannot be zero") + } + yr = bc.setRangeDomains(canvasBox, yr) + yf = bc.getValueFormatters() + + if bc.hasAxes() { + yt = bc.getAxesTicks(r, yr, yf) + canvasBox = bc.getAdjustedCanvasBox(r, canvasBox, yr, yt) + yr = bc.setRangeDomains(canvasBox, yr) + } + bc.drawCanvas(r, canvasBox) + bc.drawBars(r, canvasBox, yr) + bc.drawXAxis(r, canvasBox) + bc.drawYAxis(r, canvasBox, yr, yt) + + bc.drawTitle(r) + for _, a := range bc.Elements { + a(r, canvasBox, bc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (bc BarChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, bc.getCanvasStyle()) +} + +func (bc BarChart) getRanges() Range { + var yrange Range + if bc.YAxis.Range != nil && !bc.YAxis.Range.IsZero() { + yrange = bc.YAxis.Range + } else { + yrange = &ContinuousRange{} + } + + if !yrange.IsZero() { + return yrange + } + + if len(bc.YAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range bc.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrange.SetMin(tickMin) + yrange.SetMax(tickMax) + return yrange + } + + min, max := math.MaxFloat64, -math.MaxFloat64 + for _, b := range bc.Bars { + min = math.Min(b.Value, min) + max = math.Max(b.Value, max) + } + + yrange.SetMin(min) + yrange.SetMax(max) + + return yrange +} + +func (bc BarChart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: bc.GetWidth(), + Bottom: bc.GetHeight(), + }, bc.getBackgroundStyle()) +} + +func (bc BarChart) drawBars(r Renderer, canvasBox Box, yr Range) { + xoffset := canvasBox.Left + + width, spacing, _ := bc.calculateScaledTotalWidth(canvasBox) + bs2 := spacing >> 1 + + var barBox Box + var bxl, bxr, by int + for index, bar := range bc.Bars { + bxl = xoffset + bs2 + bxr = bxl + width + + by = canvasBox.Bottom - yr.Translate(bar.Value) + + if bc.UseBaseValue { + barBox = Box{ + Top: by, + Left: bxl, + Right: bxr, + Bottom: canvasBox.Bottom - yr.Translate(bc.BaseValue), + } + } else { + barBox = Box{ + Top: by, + Left: bxl, + Right: bxr, + Bottom: canvasBox.Bottom, + } + } + + Draw.Box(r, barBox, bar.Style.InheritFrom(bc.styleDefaultsBar(index))) + + xoffset += width + spacing + } +} + +func (bc BarChart) drawXAxis(r Renderer, canvasBox Box) { + if !bc.XAxis.Hidden { + axisStyle := bc.XAxis.InheritFrom(bc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + width, spacing, _ := bc.calculateScaledTotalWidth(canvasBox) + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + cursor := canvasBox.Left + for index, bar := range bc.Bars { + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + width + spacing, + Bottom: bc.GetHeight(), + } + + if len(bar.Label) > 0 { + Draw.TextWithin(r, bar.Label, barLabelBox, axisStyle) + } + + axisStyle.WriteToRenderer(r) + if index < len(bc.Bars)-1 { + r.MoveTo(barLabelBox.Right, canvasBox.Bottom) + r.LineTo(barLabelBox.Right, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + } + cursor += width + spacing + } + } +} + +func (bc BarChart) drawYAxis(r Renderer, canvasBox Box, yr Range, ticks []Tick) { + if !bc.YAxis.Style.Hidden { + axisStyle := bc.YAxis.Style.InheritFrom(bc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + r.MoveTo(canvasBox.Right, canvasBox.Top) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Right, canvasBox.Bottom) + r.LineTo(canvasBox.Right+DefaultHorizontalTickWidth, canvasBox.Bottom) + r.Stroke() + + var ty int + var tb Box + for _, t := range ticks { + ty = canvasBox.Bottom - yr.Translate(t.Value) + + axisStyle.GetStrokeOptions().WriteToRenderer(r) + r.MoveTo(canvasBox.Right, ty) + r.LineTo(canvasBox.Right+DefaultHorizontalTickWidth, ty) + r.Stroke() + + axisStyle.GetTextOptions().WriteToRenderer(r) + tb = r.MeasureText(t.Label) + Draw.Text(r, t.Label, canvasBox.Right+DefaultYAxisMargin+5, ty+(tb.Height()>>1), axisStyle) + } + + } +} + +func (bc BarChart) drawTitle(r Renderer) { + if len(bc.Title) > 0 && !bc.TitleStyle.Hidden { + r.SetFont(bc.TitleStyle.GetFont(bc.GetFont())) + r.SetFontColor(bc.TitleStyle.GetFontColor(bc.GetColorPalette().TextColor())) + titleFontSize := bc.TitleStyle.GetFontSize(bc.getTitleFontSize()) + r.SetFontSize(titleFontSize) + + textBox := r.MeasureText(bc.Title) + + textWidth := textBox.Width() + textHeight := textBox.Height() + + titleX := (bc.GetWidth() >> 1) - (textWidth >> 1) + titleY := bc.TitleStyle.Padding.GetTop(DefaultTitleTop) + textHeight + + r.Text(bc.Title, titleX, titleY) + } +} + +func (bc BarChart) getCanvasStyle() Style { + return bc.Canvas.InheritFrom(bc.styleDefaultsCanvas()) +} + +func (bc BarChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: bc.GetColorPalette().CanvasColor(), + StrokeColor: bc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultCanvasStrokeWidth, + } +} + +func (bc BarChart) hasAxes() bool { + return !bc.YAxis.Style.Hidden +} + +func (bc BarChart) setRangeDomains(canvasBox Box, yr Range) Range { + yr.SetDomain(canvasBox.Height()) + return yr +} + +func (bc BarChart) getDefaultCanvasBox() Box { + return bc.box() +} + +func (bc BarChart) getValueFormatters() ValueFormatter { + if bc.YAxis.ValueFormatter != nil { + return bc.YAxis.ValueFormatter + } + return FloatValueFormatter +} + +func (bc BarChart) getAxesTicks(r Renderer, yr Range, yf ValueFormatter) (yticks []Tick) { + if !bc.YAxis.Style.Hidden { + yticks = bc.YAxis.GetTicks(r, yr, bc.styleDefaultsAxes(), yf) + } + return +} + +func (bc BarChart) calculateEffectiveBarSpacing(canvasBox Box) int { + totalWithBaseSpacing := bc.calculateTotalBarWidth(bc.GetBarWidth(), bc.GetBarSpacing()) + if totalWithBaseSpacing > canvasBox.Width() { + lessBarWidths := canvasBox.Width() - (len(bc.Bars) * bc.GetBarWidth()) + if lessBarWidths > 0 { + return int(math.Ceil(float64(lessBarWidths) / float64(len(bc.Bars)))) + } + return 0 + } + return bc.GetBarSpacing() +} + +func (bc BarChart) calculateEffectiveBarWidth(canvasBox Box, spacing int) int { + totalWithBaseWidth := bc.calculateTotalBarWidth(bc.GetBarWidth(), spacing) + if totalWithBaseWidth > canvasBox.Width() { + totalLessBarSpacings := canvasBox.Width() - (len(bc.Bars) * spacing) + if totalLessBarSpacings > 0 { + return int(math.Ceil(float64(totalLessBarSpacings) / float64(len(bc.Bars)))) + } + return 0 + } + return bc.GetBarWidth() +} + +func (bc BarChart) calculateTotalBarWidth(barWidth, spacing int) int { + return len(bc.Bars) * (barWidth + spacing) +} + +func (bc BarChart) calculateScaledTotalWidth(canvasBox Box) (width, spacing, total int) { + spacing = bc.calculateEffectiveBarSpacing(canvasBox) + width = bc.calculateEffectiveBarWidth(canvasBox, spacing) + total = bc.calculateTotalBarWidth(width, spacing) + return +} + +func (bc BarChart) getAdjustedCanvasBox(r Renderer, canvasBox Box, yrange Range, yticks []Tick) Box { + axesOuterBox := canvasBox.Clone() + + _, _, totalWidth := bc.calculateScaledTotalWidth(canvasBox) + + if !bc.XAxis.Hidden { + xaxisHeight := DefaultVerticalTickHeight + + axisStyle := bc.XAxis.InheritFrom(bc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + cursor := canvasBox.Left + for _, bar := range bc.Bars { + if len(bar.Label) > 0 { + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + bc.GetBarWidth() + bc.GetBarSpacing(), + Bottom: bc.GetHeight(), + } + lines := Text.WrapFit(r, bar.Label, barLabelBox.Width(), axisStyle) + linesBox := Text.MeasureLines(r, lines, axisStyle) + + xaxisHeight = MinInt(linesBox.Height()+(2*DefaultXAxisMargin), xaxisHeight) + } + } + + xbox := Box{ + Top: canvasBox.Top, + Left: canvasBox.Left, + Right: canvasBox.Left + totalWidth, + Bottom: bc.GetHeight() - xaxisHeight, + } + + axesOuterBox = axesOuterBox.Grow(xbox) + } + + if !bc.YAxis.Style.Hidden { + axesBounds := bc.YAxis.Measure(r, canvasBox, yrange, bc.styleDefaultsAxes(), yticks) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + + return canvasBox.OuterConstrain(bc.box(), axesOuterBox) +} + +// box returns the chart bounds as a box. +func (bc BarChart) box() Box { + dpr := bc.Background.Padding.GetRight(10) + dpb := bc.Background.Padding.GetBottom(50) + + return Box{ + Top: bc.Background.Padding.GetTop(20), + Left: bc.Background.Padding.GetLeft(20), + Right: bc.GetWidth() - dpr, + Bottom: bc.GetHeight() - dpb, + } +} + +func (bc BarChart) getBackgroundStyle() Style { + return bc.Background.InheritFrom(bc.styleDefaultsBackground()) +} + +func (bc BarChart) styleDefaultsBackground() Style { + return Style{ + FillColor: bc.GetColorPalette().BackgroundColor(), + StrokeColor: bc.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (bc BarChart) styleDefaultsBar(index int) Style { + return Style{ + StrokeColor: bc.GetColorPalette().GetSeriesColor(index), + StrokeWidth: 3.0, + FillColor: bc.GetColorPalette().GetSeriesColor(index), + } +} + +func (bc BarChart) styleDefaultsTitle() Style { + return bc.TitleStyle.InheritFrom(Style{ + FontColor: bc.GetColorPalette().TextColor(), + Font: bc.GetFont(), + FontSize: bc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (bc BarChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(bc.GetWidth(), bc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +func (bc BarChart) styleDefaultsAxes() Style { + return Style{ + StrokeColor: bc.GetColorPalette().AxisStrokeColor(), + Font: bc.GetFont(), + FontSize: DefaultAxisFontSize, + FontColor: bc.GetColorPalette().TextColor(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + } +} + +func (bc BarChart) styleDefaultsElements() Style { + return Style{ + Font: bc.GetFont(), + } +} + +// GetColorPalette returns the color palette for the chart. +func (bc BarChart) GetColorPalette() ColorPalette { + if bc.ColorPalette != nil { + return bc.ColorPalette + } + return AlternateColorPalette +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/bollinger_band_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bollinger_band_series.go new file mode 100644 index 00000000..728b232b --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bollinger_band_series.go @@ -0,0 +1,135 @@ +package chart + +import ( + "fmt" +) + +// Interface Assertions. +var ( + _ Series = (*BollingerBandsSeries)(nil) +) + +// BollingerBandsSeries draws bollinger bands for an inner series. +// Bollinger bands are defined by two lines, one at SMA+k*stddev, one at SMA-k*stdev. +type BollingerBandsSeries struct { + Name string + Style Style + YAxis YAxisType + + Period int + K float64 + InnerSeries ValuesProvider + + valueBuffer *ValueBuffer +} + +// GetName returns the name of the time series. +func (bbs BollingerBandsSeries) GetName() string { + return bbs.Name +} + +// GetStyle returns the line style. +func (bbs BollingerBandsSeries) GetStyle() Style { + return bbs.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (bbs BollingerBandsSeries) GetYAxis() YAxisType { + return bbs.YAxis +} + +// GetPeriod returns the window size. +func (bbs BollingerBandsSeries) GetPeriod() int { + if bbs.Period == 0 { + return DefaultSimpleMovingAveragePeriod + } + return bbs.Period +} + +// GetK returns the K value, or the number of standard deviations above and below +// to band the simple moving average with. +// Typical K value is 2.0. +func (bbs BollingerBandsSeries) GetK(defaults ...float64) float64 { + if bbs.K == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 2.0 + } + return bbs.K +} + +// Len returns the number of elements in the series. +func (bbs BollingerBandsSeries) Len() int { + return bbs.InnerSeries.Len() +} + +// GetBoundedValues gets the bounded value for the series. +func (bbs *BollingerBandsSeries) GetBoundedValues(index int) (x, y1, y2 float64) { + if bbs.InnerSeries == nil { + return + } + if bbs.valueBuffer == nil || index == 0 { + bbs.valueBuffer = NewValueBufferWithCapacity(bbs.GetPeriod()) + } + if bbs.valueBuffer.Len() >= bbs.GetPeriod() { + bbs.valueBuffer.Dequeue() + } + px, py := bbs.InnerSeries.GetValues(index) + bbs.valueBuffer.Enqueue(py) + x = px + + ay := Seq{bbs.valueBuffer}.Average() + std := Seq{bbs.valueBuffer}.StdDev() + + y1 = ay + (bbs.GetK() * std) + y2 = ay - (bbs.GetK() * std) + return +} + +// GetBoundedLastValues returns the last bounded value for the series. +func (bbs *BollingerBandsSeries) GetBoundedLastValues() (x, y1, y2 float64) { + if bbs.InnerSeries == nil { + return + } + period := bbs.GetPeriod() + seriesLength := bbs.InnerSeries.Len() + startAt := seriesLength - period + if startAt < 0 { + startAt = 0 + } + + vb := NewValueBufferWithCapacity(period) + for index := startAt; index < seriesLength; index++ { + xn, yn := bbs.InnerSeries.GetValues(index) + vb.Enqueue(yn) + x = xn + } + + ay := Seq{vb}.Average() + std := Seq{vb}.StdDev() + + y1 = ay + (bbs.GetK() * std) + y2 = ay - (bbs.GetK() * std) + + return +} + +// Render renders the series. +func (bbs *BollingerBandsSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + s := bbs.Style.InheritFrom(defaults.InheritFrom(Style{ + StrokeWidth: 1.0, + StrokeColor: DefaultAxisColor.WithAlpha(64), + FillColor: DefaultAxisColor.WithAlpha(32), + })) + + Draw.BoundedSeries(r, canvasBox, xrange, yrange, s, bbs, bbs.GetPeriod()) +} + +// Validate validates the series. +func (bbs BollingerBandsSeries) Validate() error { + if bbs.InnerSeries == nil { + return fmt.Errorf("bollinger bands series requires InnerSeries to be set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/bounded_last_values_annotation_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bounded_last_values_annotation_series.go new file mode 100644 index 00000000..670ddf79 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/bounded_last_values_annotation_series.go @@ -0,0 +1,36 @@ +package chart + +import "fmt" + +// BoundedLastValuesAnnotationSeries returns a last value annotation series for a bounded values provider. +func BoundedLastValuesAnnotationSeries(innerSeries FullBoundedValuesProvider, vfs ...ValueFormatter) AnnotationSeries { + lvx, lvy1, lvy2 := innerSeries.GetBoundedLastValues() + + var vf ValueFormatter + if len(vfs) > 0 { + vf = vfs[0] + } else if typed, isTyped := innerSeries.(ValueFormatterProvider); isTyped { + _, vf = typed.GetValueFormatters() + } else { + vf = FloatValueFormatter + } + + label1 := vf(lvy1) + label2 := vf(lvy2) + + var seriesName string + var seriesStyle Style + if typed, isTyped := innerSeries.(Series); isTyped { + seriesName = fmt.Sprintf("%s - Last Values", typed.GetName()) + seriesStyle = typed.GetStyle() + } + + return AnnotationSeries{ + Name: seriesName, + Style: seriesStyle, + Annotations: []Value2{ + {XValue: lvx, YValue: lvy1, Label: label1}, + {XValue: lvx, YValue: lvy2, Label: label2}, + }, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/box.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/box.go new file mode 100644 index 00000000..9611ff9a --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/box.go @@ -0,0 +1,351 @@ +package chart + +import ( + "fmt" + "math" +) + +var ( + // BoxZero is a preset box that represents an intentional zero value. + BoxZero = Box{IsSet: true} +) + +// NewBox returns a new (set) box. +func NewBox(top, left, right, bottom int) Box { + return Box{ + IsSet: true, + Top: top, + Left: left, + Right: right, + Bottom: bottom, + } +} + +// Box represents the main 4 dimensions of a box. +type Box struct { + Top int + Left int + Right int + Bottom int + IsSet bool +} + +// IsZero returns if the box is set or not. +func (b Box) IsZero() bool { + if b.IsSet { + return false + } + return b.Top == 0 && b.Left == 0 && b.Right == 0 && b.Bottom == 0 +} + +// String returns a string representation of the box. +func (b Box) String() string { + return fmt.Sprintf("box(%d,%d,%d,%d)", b.Top, b.Left, b.Right, b.Bottom) +} + +// GetTop returns a coalesced value with a default. +func (b Box) GetTop(defaults ...int) int { + if !b.IsSet && b.Top == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Top +} + +// GetLeft returns a coalesced value with a default. +func (b Box) GetLeft(defaults ...int) int { + if !b.IsSet && b.Left == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Left +} + +// GetRight returns a coalesced value with a default. +func (b Box) GetRight(defaults ...int) int { + if !b.IsSet && b.Right == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Right +} + +// GetBottom returns a coalesced value with a default. +func (b Box) GetBottom(defaults ...int) int { + if !b.IsSet && b.Bottom == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Bottom +} + +// Width returns the width +func (b Box) Width() int { + return AbsInt(b.Right - b.Left) +} + +// Height returns the height +func (b Box) Height() int { + return AbsInt(b.Bottom - b.Top) +} + +// Center returns the center of the box +func (b Box) Center() (x, y int) { + w2, h2 := b.Width()>>1, b.Height()>>1 + return b.Left + w2, b.Top + h2 +} + +// Aspect returns the aspect ratio of the box. +func (b Box) Aspect() float64 { + return float64(b.Width()) / float64(b.Height()) +} + +// Clone returns a new copy of the box. +func (b Box) Clone() Box { + return Box{ + IsSet: b.IsSet, + Top: b.Top, + Left: b.Left, + Right: b.Right, + Bottom: b.Bottom, + } +} + +// IsBiggerThan returns if a box is bigger than another box. +func (b Box) IsBiggerThan(other Box) bool { + return b.Top < other.Top || + b.Bottom > other.Bottom || + b.Left < other.Left || + b.Right > other.Right +} + +// IsSmallerThan returns if a box is smaller than another box. +func (b Box) IsSmallerThan(other Box) bool { + return b.Top > other.Top && + b.Bottom < other.Bottom && + b.Left > other.Left && + b.Right < other.Right +} + +// Equals returns if the box equals another box. +func (b Box) Equals(other Box) bool { + return b.Top == other.Top && + b.Left == other.Left && + b.Right == other.Right && + b.Bottom == other.Bottom +} + +// Grow grows a box based on another box. +func (b Box) Grow(other Box) Box { + return Box{ + Top: MinInt(b.Top, other.Top), + Left: MinInt(b.Left, other.Left), + Right: MaxInt(b.Right, other.Right), + Bottom: MaxInt(b.Bottom, other.Bottom), + } +} + +// Shift pushes a box by x,y. +func (b Box) Shift(x, y int) Box { + return Box{ + Top: b.Top + y, + Left: b.Left + x, + Right: b.Right + x, + Bottom: b.Bottom + y, + } +} + +// Corners returns the box as a set of corners. +func (b Box) Corners() BoxCorners { + return BoxCorners{ + TopLeft: Point{b.Left, b.Top}, + TopRight: Point{b.Right, b.Top}, + BottomRight: Point{b.Right, b.Bottom}, + BottomLeft: Point{b.Left, b.Bottom}, + } +} + +// Fit is functionally the inverse of grow. +// Fit maintains the original aspect ratio of the `other` box, +// but constrains it to the bounds of the target box. +func (b Box) Fit(other Box) Box { + ba := b.Aspect() + oa := other.Aspect() + + if oa == ba { + return b.Clone() + } + + bw, bh := float64(b.Width()), float64(b.Height()) + bw2 := int(bw) >> 1 + bh2 := int(bh) >> 1 + if oa > ba { // ex. 16:9 vs. 4:3 + var noh2 int + if oa > 1.0 { + noh2 = int(bw/oa) >> 1 + } else { + noh2 = int(bh*oa) >> 1 + } + return Box{ + Top: (b.Top + bh2) - noh2, + Left: b.Left, + Right: b.Right, + Bottom: (b.Top + bh2) + noh2, + } + } + var now2 int + if oa > 1.0 { + now2 = int(bh/oa) >> 1 + } else { + now2 = int(bw*oa) >> 1 + } + return Box{ + Top: b.Top, + Left: (b.Left + bw2) - now2, + Right: (b.Left + bw2) + now2, + Bottom: b.Bottom, + } +} + +// Constrain is similar to `Fit` except that it will work +// more literally like the opposite of grow. +func (b Box) Constrain(other Box) Box { + newBox := b.Clone() + + newBox.Top = MaxInt(newBox.Top, other.Top) + newBox.Left = MaxInt(newBox.Left, other.Left) + newBox.Right = MinInt(newBox.Right, other.Right) + newBox.Bottom = MinInt(newBox.Bottom, other.Bottom) + + return newBox +} + +// OuterConstrain is similar to `Constraint` with the difference +// that it applies corrections +func (b Box) OuterConstrain(bounds, other Box) Box { + newBox := b.Clone() + if other.Top < bounds.Top { + delta := bounds.Top - other.Top + newBox.Top = b.Top + delta + } + + if other.Left < bounds.Left { + delta := bounds.Left - other.Left + newBox.Left = b.Left + delta + } + + if other.Right > bounds.Right { + delta := other.Right - bounds.Right + newBox.Right = b.Right - delta + } + + if other.Bottom > bounds.Bottom { + delta := other.Bottom - bounds.Bottom + newBox.Bottom = b.Bottom - delta + } + return newBox +} + +// BoxCorners is a box with independent corners. +type BoxCorners struct { + TopLeft, TopRight, BottomRight, BottomLeft Point +} + +// Box return the BoxCorners as a regular box. +func (bc BoxCorners) Box() Box { + return Box{ + Top: MinInt(bc.TopLeft.Y, bc.TopRight.Y), + Left: MinInt(bc.TopLeft.X, bc.BottomLeft.X), + Right: MaxInt(bc.TopRight.X, bc.BottomRight.X), + Bottom: MaxInt(bc.BottomLeft.Y, bc.BottomRight.Y), + } +} + +// Width returns the width +func (bc BoxCorners) Width() int { + minLeft := MinInt(bc.TopLeft.X, bc.BottomLeft.X) + maxRight := MaxInt(bc.TopRight.X, bc.BottomRight.X) + return maxRight - minLeft +} + +// Height returns the height +func (bc BoxCorners) Height() int { + minTop := MinInt(bc.TopLeft.Y, bc.TopRight.Y) + maxBottom := MaxInt(bc.BottomLeft.Y, bc.BottomRight.Y) + return maxBottom - minTop +} + +// Center returns the center of the box +func (bc BoxCorners) Center() (x, y int) { + + left := MeanInt(bc.TopLeft.X, bc.BottomLeft.X) + right := MeanInt(bc.TopRight.X, bc.BottomRight.X) + x = ((right - left) >> 1) + left + + top := MeanInt(bc.TopLeft.Y, bc.TopRight.Y) + bottom := MeanInt(bc.BottomLeft.Y, bc.BottomRight.Y) + y = ((bottom - top) >> 1) + top + + return +} + +// Rotate rotates the box. +func (bc BoxCorners) Rotate(thetaDegrees float64) BoxCorners { + cx, cy := bc.Center() + + thetaRadians := DegreesToRadians(thetaDegrees) + + tlx, tly := RotateCoordinate(cx, cy, bc.TopLeft.X, bc.TopLeft.Y, thetaRadians) + trx, try := RotateCoordinate(cx, cy, bc.TopRight.X, bc.TopRight.Y, thetaRadians) + brx, bry := RotateCoordinate(cx, cy, bc.BottomRight.X, bc.BottomRight.Y, thetaRadians) + blx, bly := RotateCoordinate(cx, cy, bc.BottomLeft.X, bc.BottomLeft.Y, thetaRadians) + + return BoxCorners{ + TopLeft: Point{tlx, tly}, + TopRight: Point{trx, try}, + BottomRight: Point{brx, bry}, + BottomLeft: Point{blx, bly}, + } +} + +// Equals returns if the box equals another box. +func (bc BoxCorners) Equals(other BoxCorners) bool { + return bc.TopLeft.Equals(other.TopLeft) && + bc.TopRight.Equals(other.TopRight) && + bc.BottomRight.Equals(other.BottomRight) && + bc.BottomLeft.Equals(other.BottomLeft) +} + +func (bc BoxCorners) String() string { + return fmt.Sprintf("BoxC{%s,%s,%s,%s}", bc.TopLeft.String(), bc.TopRight.String(), bc.BottomRight.String(), bc.BottomLeft.String()) +} + +// Point is an X,Y pair +type Point struct { + X, Y int +} + +// DistanceTo calculates the distance to another point. +func (p Point) DistanceTo(other Point) float64 { + dx := math.Pow(float64(p.X-other.X), 2) + dy := math.Pow(float64(p.Y-other.Y), 2) + return math.Pow(dx+dy, 0.5) +} + +// Equals returns if a point equals another point. +func (p Point) Equals(other Point) bool { + return p.X == other.X && p.Y == other.Y +} + +// String returns a string representation of the point. +func (p Point) String() string { + return fmt.Sprintf("P{%d,%d}", p.X, p.Y) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/chart.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/chart.go new file mode 100644 index 00000000..5212a437 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/chart.go @@ -0,0 +1,577 @@ +package chart + +import ( + "errors" + "fmt" + "io" + "math" + + "github.com/golang/freetype/truetype" +) + +// Chart is what we're drawing. +type Chart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + + XAxis XAxis + YAxis YAxis + YAxisSecondary YAxis + + Font *truetype.Font + defaultFont *truetype.Font + + Series []Series + Elements []Renderable + + Log Logger +} + +// GetDPI returns the dpi for the chart. +func (c Chart) GetDPI(defaults ...float64) float64 { + if c.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return c.DPI +} + +// GetFont returns the text font. +func (c Chart) GetFont() *truetype.Font { + if c.Font == nil { + return c.defaultFont + } + return c.Font +} + +// GetWidth returns the chart width or the default value. +func (c Chart) GetWidth() int { + if c.Width == 0 { + return DefaultChartWidth + } + return c.Width +} + +// GetHeight returns the chart height or the default value. +func (c Chart) GetHeight() int { + if c.Height == 0 { + return DefaultChartHeight + } + return c.Height +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (c Chart) Render(rp RendererProvider, w io.Writer) error { + if len(c.Series) == 0 { + return errors.New("please provide at least one series") + } + if err := c.checkHasVisibleSeries(); err != nil { + return err + } + + c.YAxisSecondary.AxisType = YAxisSecondary + + r, err := rp(c.GetWidth(), c.GetHeight()) + if err != nil { + return err + } + + if c.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + c.defaultFont = defaultFont + } + r.SetDPI(c.GetDPI(DefaultDPI)) + + c.drawBackground(r) + + var xt, yt, yta []Tick + xr, yr, yra := c.getRanges() + canvasBox := c.getDefaultCanvasBox() + xf, yf, yfa := c.getValueFormatters() + + Debugf(c.Log, "chart; canvas box: %v", canvasBox) + + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + + err = c.checkRanges(xr, yr, yra) + if err != nil { + r.Save(w) + return err + } + + if c.hasAxes() { + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + canvasBox = c.getAxesAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xt, yt, yta) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + + Debugf(c.Log, "chart; axes adjusted canvas box: %v", canvasBox) + + // do a second pass in case things haven't settled yet. + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + canvasBox = c.getAxesAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xt, yt, yta) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + } + + if c.hasAnnotationSeries() { + canvasBox = c.getAnnotationAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xf, yf, yfa) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + + Debugf(c.Log, "chart; annotation adjusted canvas box: %v", canvasBox) + } + + c.drawCanvas(r, canvasBox) + c.drawAxes(r, canvasBox, xr, yr, yra, xt, yt, yta) + for index, series := range c.Series { + c.drawSeries(r, canvasBox, xr, yr, yra, series, index) + } + + c.drawTitle(r) + + for _, a := range c.Elements { + a(r, canvasBox, c.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (c Chart) checkHasVisibleSeries() error { + var style Style + for _, s := range c.Series { + style = s.GetStyle() + if !style.Hidden { + return nil + } + } + return fmt.Errorf("chart render; must have (1) visible series") +} + +func (c Chart) validateSeries() error { + var err error + for _, s := range c.Series { + err = s.Validate() + if err != nil { + return err + } + } + return nil +} + +func (c Chart) getRanges() (xrange, yrange, yrangeAlt Range) { + var minx, maxx float64 = math.MaxFloat64, -math.MaxFloat64 + var miny, maxy float64 = math.MaxFloat64, -math.MaxFloat64 + var minya, maxya float64 = math.MaxFloat64, -math.MaxFloat64 + + seriesMappedToSecondaryAxis := false + + // note: a possible future optimization is to not scan the series values if + // all axis are represented by either custom ticks or custom ranges. + for _, s := range c.Series { + if !s.GetStyle().Hidden { + seriesAxis := s.GetYAxis() + if bvp, isBoundedValuesProvider := s.(BoundedValuesProvider); isBoundedValuesProvider { + seriesLength := bvp.Len() + for index := 0; index < seriesLength; index++ { + vx, vy1, vy2 := bvp.GetBoundedValues(index) + + minx = math.Min(minx, vx) + maxx = math.Max(maxx, vx) + + if seriesAxis == YAxisPrimary { + miny = math.Min(miny, vy1) + miny = math.Min(miny, vy2) + maxy = math.Max(maxy, vy1) + maxy = math.Max(maxy, vy2) + } else if seriesAxis == YAxisSecondary { + minya = math.Min(minya, vy1) + minya = math.Min(minya, vy2) + maxya = math.Max(maxya, vy1) + maxya = math.Max(maxya, vy2) + seriesMappedToSecondaryAxis = true + } + } + } else if vp, isValuesProvider := s.(ValuesProvider); isValuesProvider { + seriesLength := vp.Len() + for index := 0; index < seriesLength; index++ { + vx, vy := vp.GetValues(index) + + minx = math.Min(minx, vx) + maxx = math.Max(maxx, vx) + + if seriesAxis == YAxisPrimary { + miny = math.Min(miny, vy) + maxy = math.Max(maxy, vy) + } else if seriesAxis == YAxisSecondary { + minya = math.Min(minya, vy) + maxya = math.Max(maxya, vy) + seriesMappedToSecondaryAxis = true + } + } + } + } + } + + if c.XAxis.Range == nil { + xrange = &ContinuousRange{} + } else { + xrange = c.XAxis.Range + } + + if c.YAxis.Range == nil { + yrange = &ContinuousRange{} + } else { + yrange = c.YAxis.Range + } + + if c.YAxisSecondary.Range == nil { + yrangeAlt = &ContinuousRange{} + } else { + yrangeAlt = c.YAxisSecondary.Range + } + + if len(c.XAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.XAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + xrange.SetMin(tickMin) + xrange.SetMax(tickMax) + } else if xrange.IsZero() { + xrange.SetMin(minx) + xrange.SetMax(maxx) + } + + if len(c.YAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrange.SetMin(tickMin) + yrange.SetMax(tickMax) + } else if yrange.IsZero() { + yrange.SetMin(miny) + yrange.SetMax(maxy) + + if !c.YAxis.Style.Hidden { + delta := yrange.GetDelta() + roundTo := GetRoundToForDelta(delta) + rmin, rmax := RoundDown(yrange.GetMin(), roundTo), RoundUp(yrange.GetMax(), roundTo) + + yrange.SetMin(rmin) + yrange.SetMax(rmax) + } + } + + if len(c.YAxisSecondary.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrangeAlt.SetMin(tickMin) + yrangeAlt.SetMax(tickMax) + } else if seriesMappedToSecondaryAxis && yrangeAlt.IsZero() { + yrangeAlt.SetMin(minya) + yrangeAlt.SetMax(maxya) + + if !c.YAxisSecondary.Style.Hidden { + delta := yrangeAlt.GetDelta() + roundTo := GetRoundToForDelta(delta) + rmin, rmax := RoundDown(yrangeAlt.GetMin(), roundTo), RoundUp(yrangeAlt.GetMax(), roundTo) + yrangeAlt.SetMin(rmin) + yrangeAlt.SetMax(rmax) + } + } + + return +} + +func (c Chart) checkRanges(xr, yr, yra Range) error { + Debugf(c.Log, "checking xrange: %v", xr) + xDelta := xr.GetDelta() + if math.IsInf(xDelta, 0) { + return errors.New("infinite x-range delta") + } + if math.IsNaN(xDelta) { + return errors.New("nan x-range delta") + } + if xDelta == 0 { + return errors.New("zero x-range delta; there needs to be at least (2) values") + } + + Debugf(c.Log, "checking yrange: %v", yr) + yDelta := yr.GetDelta() + if math.IsInf(yDelta, 0) { + return errors.New("infinite y-range delta") + } + if math.IsNaN(yDelta) { + return errors.New("nan y-range delta") + } + + if c.hasSecondarySeries() { + Debugf(c.Log, "checking secondary yrange: %v", yra) + yraDelta := yra.GetDelta() + if math.IsInf(yraDelta, 0) { + return errors.New("infinite secondary y-range delta") + } + if math.IsNaN(yraDelta) { + return errors.New("nan secondary y-range delta") + } + } + + return nil +} + +func (c Chart) getDefaultCanvasBox() Box { + return c.Box() +} + +func (c Chart) getValueFormatters() (x, y, ya ValueFormatter) { + for _, s := range c.Series { + if vfp, isVfp := s.(ValueFormatterProvider); isVfp { + sx, sy := vfp.GetValueFormatters() + if s.GetYAxis() == YAxisPrimary { + x = sx + y = sy + } else if s.GetYAxis() == YAxisSecondary { + x = sx + ya = sy + } + } + } + if c.XAxis.ValueFormatter != nil { + x = c.XAxis.GetValueFormatter() + } + if c.YAxis.ValueFormatter != nil { + y = c.YAxis.GetValueFormatter() + } + if c.YAxisSecondary.ValueFormatter != nil { + ya = c.YAxisSecondary.GetValueFormatter() + } + return +} + +func (c Chart) hasAxes() bool { + return !c.XAxis.Style.Hidden || !c.YAxis.Style.Hidden || !c.YAxisSecondary.Style.Hidden +} + +func (c Chart) getAxesTicks(r Renderer, xr, yr, yar Range, xf, yf, yfa ValueFormatter) (xticks, yticks, yticksAlt []Tick) { + if !c.XAxis.Style.Hidden { + xticks = c.XAxis.GetTicks(r, xr, c.styleDefaultsAxes(), xf) + } + if !c.YAxis.Style.Hidden { + yticks = c.YAxis.GetTicks(r, yr, c.styleDefaultsAxes(), yf) + } + if !c.YAxisSecondary.Style.Hidden { + yticksAlt = c.YAxisSecondary.GetTicks(r, yar, c.styleDefaultsAxes(), yfa) + } + return +} + +func (c Chart) getAxesAdjustedCanvasBox(r Renderer, canvasBox Box, xr, yr, yra Range, xticks, yticks, yticksAlt []Tick) Box { + axesOuterBox := canvasBox.Clone() + if !c.XAxis.Style.Hidden { + axesBounds := c.XAxis.Measure(r, canvasBox, xr, c.styleDefaultsAxes(), xticks) + Debugf(c.Log, "chart; x-axis measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + if !c.YAxis.Style.Hidden { + axesBounds := c.YAxis.Measure(r, canvasBox, yr, c.styleDefaultsAxes(), yticks) + Debugf(c.Log, "chart; y-axis measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + if !c.YAxisSecondary.Style.Hidden && c.hasSecondarySeries() { + axesBounds := c.YAxisSecondary.Measure(r, canvasBox, yra, c.styleDefaultsAxes(), yticksAlt) + Debugf(c.Log, "chart; y-axis secondary measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + + return canvasBox.OuterConstrain(c.Box(), axesOuterBox) +} + +func (c Chart) setRangeDomains(canvasBox Box, xr, yr, yra Range) (Range, Range, Range) { + xr.SetDomain(canvasBox.Width()) + yr.SetDomain(canvasBox.Height()) + yra.SetDomain(canvasBox.Height()) + return xr, yr, yra +} + +func (c Chart) hasAnnotationSeries() bool { + for _, s := range c.Series { + if as, isAnnotationSeries := s.(AnnotationSeries); isAnnotationSeries { + if !as.GetStyle().Hidden { + return true + } + } + } + return false +} + +func (c Chart) hasSecondarySeries() bool { + for _, s := range c.Series { + if s.GetYAxis() == YAxisSecondary { + return true + } + } + return false +} + +func (c Chart) getAnnotationAdjustedCanvasBox(r Renderer, canvasBox Box, xr, yr, yra Range, xf, yf, yfa ValueFormatter) Box { + annotationSeriesBox := canvasBox.Clone() + for seriesIndex, s := range c.Series { + if as, isAnnotationSeries := s.(AnnotationSeries); isAnnotationSeries { + if !as.GetStyle().Hidden { + style := c.styleDefaultsSeries(seriesIndex) + var annotationBounds Box + if as.YAxis == YAxisPrimary { + annotationBounds = as.Measure(r, canvasBox, xr, yr, style) + } else if as.YAxis == YAxisSecondary { + annotationBounds = as.Measure(r, canvasBox, xr, yra, style) + } + + annotationSeriesBox = annotationSeriesBox.Grow(annotationBounds) + } + } + } + + return canvasBox.OuterConstrain(c.Box(), annotationSeriesBox) +} + +func (c Chart) getBackgroundStyle() Style { + return c.Background.InheritFrom(c.styleDefaultsBackground()) +} + +func (c Chart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: c.GetWidth(), + Bottom: c.GetHeight(), + }, c.getBackgroundStyle()) +} + +func (c Chart) getCanvasStyle() Style { + return c.Canvas.InheritFrom(c.styleDefaultsCanvas()) +} + +func (c Chart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, c.getCanvasStyle()) +} + +func (c Chart) drawAxes(r Renderer, canvasBox Box, xrange, yrange, yrangeAlt Range, xticks, yticks, yticksAlt []Tick) { + if !c.XAxis.Style.Hidden { + c.XAxis.Render(r, canvasBox, xrange, c.styleDefaultsAxes(), xticks) + } + if !c.YAxis.Style.Hidden { + c.YAxis.Render(r, canvasBox, yrange, c.styleDefaultsAxes(), yticks) + } + if !c.YAxisSecondary.Style.Hidden { + c.YAxisSecondary.Render(r, canvasBox, yrangeAlt, c.styleDefaultsAxes(), yticksAlt) + } +} + +func (c Chart) drawSeries(r Renderer, canvasBox Box, xrange, yrange, yrangeAlt Range, s Series, seriesIndex int) { + if !s.GetStyle().Hidden { + if s.GetYAxis() == YAxisPrimary { + s.Render(r, canvasBox, xrange, yrange, c.styleDefaultsSeries(seriesIndex)) + } else if s.GetYAxis() == YAxisSecondary { + s.Render(r, canvasBox, xrange, yrangeAlt, c.styleDefaultsSeries(seriesIndex)) + } + } +} + +func (c Chart) drawTitle(r Renderer) { + if len(c.Title) > 0 && !c.TitleStyle.Hidden { + r.SetFont(c.TitleStyle.GetFont(c.GetFont())) + r.SetFontColor(c.TitleStyle.GetFontColor(c.GetColorPalette().TextColor())) + titleFontSize := c.TitleStyle.GetFontSize(DefaultTitleFontSize) + r.SetFontSize(titleFontSize) + + textBox := r.MeasureText(c.Title) + + textWidth := textBox.Width() + textHeight := textBox.Height() + + titleX := (c.GetWidth() >> 1) - (textWidth >> 1) + titleY := c.TitleStyle.Padding.GetTop(DefaultTitleTop) + textHeight + + r.Text(c.Title, titleX, titleY) + } +} + +func (c Chart) styleDefaultsBackground() Style { + return Style{ + FillColor: c.GetColorPalette().BackgroundColor(), + StrokeColor: c.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultBackgroundStrokeWidth, + } +} + +func (c Chart) styleDefaultsCanvas() Style { + return Style{ + FillColor: c.GetColorPalette().CanvasColor(), + StrokeColor: c.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultCanvasStrokeWidth, + } +} + +func (c Chart) styleDefaultsSeries(seriesIndex int) Style { + return Style{ + DotColor: c.GetColorPalette().GetSeriesColor(seriesIndex), + StrokeColor: c.GetColorPalette().GetSeriesColor(seriesIndex), + StrokeWidth: DefaultSeriesLineWidth, + Font: c.GetFont(), + FontSize: DefaultFontSize, + } +} + +func (c Chart) styleDefaultsAxes() Style { + return Style{ + Font: c.GetFont(), + FontColor: c.GetColorPalette().TextColor(), + FontSize: DefaultAxisFontSize, + StrokeColor: c.GetColorPalette().AxisStrokeColor(), + StrokeWidth: DefaultAxisLineWidth, + } +} + +func (c Chart) styleDefaultsElements() Style { + return Style{ + Font: c.GetFont(), + } +} + +// GetColorPalette returns the color palette for the chart. +func (c Chart) GetColorPalette() ColorPalette { + if c.ColorPalette != nil { + return c.ColorPalette + } + return DefaultColorPalette +} + +// Box returns the chart bounds as a box. +func (c Chart) Box() Box { + dpr := c.Background.Padding.GetRight(DefaultBackgroundPadding.Right) + dpb := c.Background.Padding.GetBottom(DefaultBackgroundPadding.Bottom) + + return Box{ + Top: c.Background.Padding.GetTop(DefaultBackgroundPadding.Top), + Left: c.Background.Padding.GetLeft(DefaultBackgroundPadding.Left), + Right: c.GetWidth() - dpr, + Bottom: c.GetHeight() - dpb, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/colors.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/colors.go new file mode 100644 index 00000000..b51f9ea5 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/colors.go @@ -0,0 +1,184 @@ +package chart + +import "github.com/wcharczuk/go-chart/v2/drawing" + +var ( + // ColorWhite is white. + ColorWhite = drawing.Color{R: 255, G: 255, B: 255, A: 255} + // ColorBlue is the basic theme blue color. + ColorBlue = drawing.Color{R: 0, G: 116, B: 217, A: 255} + // ColorCyan is the basic theme cyan color. + ColorCyan = drawing.Color{R: 0, G: 217, B: 210, A: 255} + // ColorGreen is the basic theme green color. + ColorGreen = drawing.Color{R: 0, G: 217, B: 101, A: 255} + // ColorRed is the basic theme red color. + ColorRed = drawing.Color{R: 217, G: 0, B: 116, A: 255} + // ColorOrange is the basic theme orange color. + ColorOrange = drawing.Color{R: 217, G: 101, B: 0, A: 255} + // ColorYellow is the basic theme yellow color. + ColorYellow = drawing.Color{R: 217, G: 210, B: 0, A: 255} + // ColorBlack is the basic theme black color. + ColorBlack = drawing.Color{R: 51, G: 51, B: 51, A: 255} + // ColorLightGray is the basic theme light gray color. + ColorLightGray = drawing.Color{R: 239, G: 239, B: 239, A: 255} + + // ColorAlternateBlue is a alternate theme color. + ColorAlternateBlue = drawing.Color{R: 106, G: 195, B: 203, A: 255} + // ColorAlternateGreen is a alternate theme color. + ColorAlternateGreen = drawing.Color{R: 42, G: 190, B: 137, A: 255} + // ColorAlternateGray is a alternate theme color. + ColorAlternateGray = drawing.Color{R: 110, G: 128, B: 139, A: 255} + // ColorAlternateYellow is a alternate theme color. + ColorAlternateYellow = drawing.Color{R: 240, G: 174, B: 90, A: 255} + // ColorAlternateLightGray is a alternate theme color. + ColorAlternateLightGray = drawing.Color{R: 187, G: 190, B: 191, A: 255} + + // ColorTransparent is a transparent (alpha zero) color. + ColorTransparent = drawing.Color{R: 1, G: 1, B: 1, A: 0} +) + +var ( + // DefaultBackgroundColor is the default chart background color. + // It is equivalent to css color:white. + DefaultBackgroundColor = ColorWhite + // DefaultBackgroundStrokeColor is the default chart border color. + // It is equivalent to color:white. + DefaultBackgroundStrokeColor = ColorWhite + // DefaultCanvasColor is the default chart canvas color. + // It is equivalent to css color:white. + DefaultCanvasColor = ColorWhite + // DefaultCanvasStrokeColor is the default chart canvas stroke color. + // It is equivalent to css color:white. + DefaultCanvasStrokeColor = ColorWhite + // DefaultTextColor is the default chart text color. + // It is equivalent to #333333. + DefaultTextColor = ColorBlack + // DefaultAxisColor is the default chart axis line color. + // It is equivalent to #333333. + DefaultAxisColor = ColorBlack + // DefaultStrokeColor is the default chart border color. + // It is equivalent to #efefef. + DefaultStrokeColor = ColorLightGray + // DefaultFillColor is the default fill color. + // It is equivalent to #0074d9. + DefaultFillColor = ColorBlue + // DefaultAnnotationFillColor is the default annotation background color. + DefaultAnnotationFillColor = ColorWhite + // DefaultGridLineColor is the default grid line color. + DefaultGridLineColor = ColorLightGray +) + +var ( + // DefaultColors are a couple default series colors. + DefaultColors = []drawing.Color{ + ColorBlue, + ColorGreen, + ColorRed, + ColorCyan, + ColorOrange, + } + + // DefaultAlternateColors are a couple alternate colors. + DefaultAlternateColors = []drawing.Color{ + ColorAlternateBlue, + ColorAlternateGreen, + ColorAlternateGray, + ColorAlternateYellow, + ColorBlue, + ColorGreen, + ColorRed, + ColorCyan, + ColorOrange, + } +) + +// GetDefaultColor returns a color from the default list by index. +// NOTE: the index will wrap around (using a modulo). +func GetDefaultColor(index int) drawing.Color { + finalIndex := index % len(DefaultColors) + return DefaultColors[finalIndex] +} + +// GetAlternateColor returns a color from the default list by index. +// NOTE: the index will wrap around (using a modulo). +func GetAlternateColor(index int) drawing.Color { + finalIndex := index % len(DefaultAlternateColors) + return DefaultAlternateColors[finalIndex] +} + +// ColorPalette is a set of colors that. +type ColorPalette interface { + BackgroundColor() drawing.Color + BackgroundStrokeColor() drawing.Color + CanvasColor() drawing.Color + CanvasStrokeColor() drawing.Color + AxisStrokeColor() drawing.Color + TextColor() drawing.Color + GetSeriesColor(index int) drawing.Color +} + +// DefaultColorPalette represents the default palatte. +var DefaultColorPalette defaultColorPalette + +type defaultColorPalette struct{} + +func (dp defaultColorPalette) BackgroundColor() drawing.Color { + return DefaultBackgroundColor +} + +func (dp defaultColorPalette) BackgroundStrokeColor() drawing.Color { + return DefaultBackgroundStrokeColor +} + +func (dp defaultColorPalette) CanvasColor() drawing.Color { + return DefaultCanvasColor +} + +func (dp defaultColorPalette) CanvasStrokeColor() drawing.Color { + return DefaultCanvasStrokeColor +} + +func (dp defaultColorPalette) AxisStrokeColor() drawing.Color { + return DefaultAxisColor +} + +func (dp defaultColorPalette) TextColor() drawing.Color { + return DefaultTextColor +} + +func (dp defaultColorPalette) GetSeriesColor(index int) drawing.Color { + return GetDefaultColor(index) +} + +// AlternateColorPalette represents the default palatte. +var AlternateColorPalette alternateColorPalette + +type alternateColorPalette struct{} + +func (ap alternateColorPalette) BackgroundColor() drawing.Color { + return DefaultBackgroundColor +} + +func (ap alternateColorPalette) BackgroundStrokeColor() drawing.Color { + return DefaultBackgroundStrokeColor +} + +func (ap alternateColorPalette) CanvasColor() drawing.Color { + return DefaultCanvasColor +} + +func (ap alternateColorPalette) CanvasStrokeColor() drawing.Color { + return DefaultCanvasStrokeColor +} + +func (ap alternateColorPalette) AxisStrokeColor() drawing.Color { + return DefaultAxisColor +} + +func (ap alternateColorPalette) TextColor() drawing.Color { + return DefaultTextColor +} + +func (ap alternateColorPalette) GetSeriesColor(index int) drawing.Color { + return GetAlternateColor(index) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/concat_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/concat_series.go new file mode 100644 index 00000000..edec7e5d --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/concat_series.go @@ -0,0 +1,44 @@ +package chart + +// ConcatSeries is a special type of series that concatenates its `InnerSeries`. +type ConcatSeries []Series + +// Len returns the length of the concatenated set of series. +func (cs ConcatSeries) Len() int { + total := 0 + for _, s := range cs { + if typed, isValuesProvider := s.(ValuesProvider); isValuesProvider { + total += typed.Len() + } + } + + return total +} + +// GetValue returns the value at the (meta) index (i.e 0 => totalLen-1) +func (cs ConcatSeries) GetValue(index int) (x, y float64) { + cursor := 0 + for _, s := range cs { + if typed, isValuesProvider := s.(ValuesProvider); isValuesProvider { + len := typed.Len() + if index < cursor+len { + x, y = typed.GetValues(index - cursor) //FENCEPOSTS. + return + } + cursor += typed.Len() + } + } + return +} + +// Validate validates the series. +func (cs ConcatSeries) Validate() error { + var err error + for _, s := range cs { + err = s.Validate() + if err != nil { + return err + } + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_range.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_range.go new file mode 100644 index 00000000..517b7277 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_range.go @@ -0,0 +1,81 @@ +package chart + +import ( + "fmt" + "math" +) + +// ContinuousRange represents a boundary for a set of numbers. +type ContinuousRange struct { + Min float64 + Max float64 + Domain int + Descending bool +} + +// IsDescending returns if the range is descending. +func (r ContinuousRange) IsDescending() bool { + return r.Descending +} + +// IsZero returns if the ContinuousRange has been set or not. +func (r ContinuousRange) IsZero() bool { + return (r.Min == 0 || math.IsNaN(r.Min)) && + (r.Max == 0 || math.IsNaN(r.Max)) && + r.Domain == 0 +} + +// GetMin gets the min value for the continuous range. +func (r ContinuousRange) GetMin() float64 { + return r.Min +} + +// SetMin sets the min value for the continuous range. +func (r *ContinuousRange) SetMin(min float64) { + r.Min = min +} + +// GetMax returns the max value for the continuous range. +func (r ContinuousRange) GetMax() float64 { + return r.Max +} + +// SetMax sets the max value for the continuous range. +func (r *ContinuousRange) SetMax(max float64) { + r.Max = max +} + +// GetDelta returns the difference between the min and max value. +func (r ContinuousRange) GetDelta() float64 { + return r.Max - r.Min +} + +// GetDomain returns the range domain. +func (r ContinuousRange) GetDomain() int { + return r.Domain +} + +// SetDomain sets the range domain. +func (r *ContinuousRange) SetDomain(domain int) { + r.Domain = domain +} + +// String returns a simple string for the ContinuousRange. +func (r ContinuousRange) String() string { + if r.GetDelta() == 0 { + return "ContinuousRange [empty]" + } + return fmt.Sprintf("ContinuousRange [%.2f,%.2f] => %d", r.Min, r.Max, r.Domain) +} + +// Translate maps a given value into the ContinuousRange space. +func (r ContinuousRange) Translate(value float64) int { + normalized := value - r.Min + ratio := normalized / r.GetDelta() + + if r.IsDescending() { + return r.Domain - int(math.Ceil(ratio*float64(r.Domain))) + } + + return int(math.Ceil(ratio * float64(r.Domain))) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_series.go new file mode 100644 index 00000000..73c7ab78 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/continuous_series.go @@ -0,0 +1,96 @@ +package chart + +import "fmt" + +// Interface Assertions. +var ( + _ Series = (*ContinuousSeries)(nil) + _ FirstValuesProvider = (*ContinuousSeries)(nil) + _ LastValuesProvider = (*ContinuousSeries)(nil) +) + +// ContinuousSeries represents a line on a chart. +type ContinuousSeries struct { + Name string + Style Style + + YAxis YAxisType + + XValueFormatter ValueFormatter + YValueFormatter ValueFormatter + + XValues []float64 + YValues []float64 +} + +// GetName returns the name of the time series. +func (cs ContinuousSeries) GetName() string { + return cs.Name +} + +// GetStyle returns the line style. +func (cs ContinuousSeries) GetStyle() Style { + return cs.Style +} + +// Len returns the number of elements in the series. +func (cs ContinuousSeries) Len() int { + return len(cs.XValues) +} + +// GetValues gets the x,y values at a given index. +func (cs ContinuousSeries) GetValues(index int) (float64, float64) { + return cs.XValues[index], cs.YValues[index] +} + +// GetFirstValues gets the first x,y values. +func (cs ContinuousSeries) GetFirstValues() (float64, float64) { + return cs.XValues[0], cs.YValues[0] +} + +// GetLastValues gets the last x,y values. +func (cs ContinuousSeries) GetLastValues() (float64, float64) { + return cs.XValues[len(cs.XValues)-1], cs.YValues[len(cs.YValues)-1] +} + +// GetValueFormatters returns value formatter defaults for the series. +func (cs ContinuousSeries) GetValueFormatters() (x, y ValueFormatter) { + if cs.XValueFormatter != nil { + x = cs.XValueFormatter + } else { + x = FloatValueFormatter + } + if cs.YValueFormatter != nil { + y = cs.YValueFormatter + } else { + y = FloatValueFormatter + } + return +} + +// GetYAxis returns which YAxis the series draws on. +func (cs ContinuousSeries) GetYAxis() YAxisType { + return cs.YAxis +} + +// Render renders the series. +func (cs ContinuousSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := cs.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, cs) +} + +// Validate validates the series. +func (cs ContinuousSeries) Validate() error { + if len(cs.XValues) == 0 { + return fmt.Errorf("continuous series; must have xvalues set") + } + + if len(cs.YValues) == 0 { + return fmt.Errorf("continuous series; must have yvalues set") + } + + if len(cs.XValues) != len(cs.YValues) { + return fmt.Errorf("continuous series; must have same length xvalues as yvalues") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/defaults.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/defaults.go new file mode 100644 index 00000000..d74330fd --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/defaults.go @@ -0,0 +1,103 @@ +package chart + +const ( + // DefaultChartHeight is the default chart height. + DefaultChartHeight = 400 + // DefaultChartWidth is the default chart width. + DefaultChartWidth = 1024 + // DefaultStrokeWidth is the default chart stroke width. + DefaultStrokeWidth = 0.0 + // DefaultDotWidth is the default chart dot width. + DefaultDotWidth = 0.0 + // DefaultSeriesLineWidth is the default line width. + DefaultSeriesLineWidth = 1.0 + // DefaultAxisLineWidth is the line width of the axis lines. + DefaultAxisLineWidth = 1.0 + //DefaultDPI is the default dots per inch for the chart. + DefaultDPI = 92.0 + // DefaultMinimumFontSize is the default minimum font size. + DefaultMinimumFontSize = 8.0 + // DefaultFontSize is the default font size. + DefaultFontSize = 10.0 + // DefaultTitleFontSize is the default title font size. + DefaultTitleFontSize = 18.0 + // DefaultAnnotationDeltaWidth is the width of the left triangle out of annotations. + DefaultAnnotationDeltaWidth = 10 + // DefaultAnnotationFontSize is the font size of annotations. + DefaultAnnotationFontSize = 10.0 + // DefaultAxisFontSize is the font size of the axis labels. + DefaultAxisFontSize = 10.0 + // DefaultTitleTop is the default distance from the top of the chart to put the title. + DefaultTitleTop = 10 + + // DefaultBackgroundStrokeWidth is the default stroke on the chart background. + DefaultBackgroundStrokeWidth = 0.0 + // DefaultCanvasStrokeWidth is the default stroke on the chart canvas. + DefaultCanvasStrokeWidth = 0.0 + + // DefaultLineSpacing is the default vertical distance between lines of text. + DefaultLineSpacing = 5 + + // DefaultYAxisMargin is the default distance from the right of the canvas to the y axis labels. + DefaultYAxisMargin = 10 + // DefaultXAxisMargin is the default distance from bottom of the canvas to the x axis labels. + DefaultXAxisMargin = 10 + + //DefaultVerticalTickHeight is half the margin. + DefaultVerticalTickHeight = DefaultXAxisMargin >> 1 + //DefaultHorizontalTickWidth is half the margin. + DefaultHorizontalTickWidth = DefaultYAxisMargin >> 1 + + // DefaultTickCount is the default number of ticks to show + DefaultTickCount = 10 + // DefaultTickCountSanityCheck is a hard limit on number of ticks to prevent infinite loops. + DefaultTickCountSanityCheck = 1 << 10 //1024 + + // DefaultMinimumTickHorizontalSpacing is the minimum distance between horizontal ticks. + DefaultMinimumTickHorizontalSpacing = 20 + // DefaultMinimumTickVerticalSpacing is the minimum distance between vertical ticks. + DefaultMinimumTickVerticalSpacing = 20 + + // DefaultDateFormat is the default date format. + DefaultDateFormat = "2006-01-02" + // DefaultDateHourFormat is the date format for hour timestamp formats. + DefaultDateHourFormat = "01-02 3PM" + // DefaultDateMinuteFormat is the date format for minute range timestamp formats. + DefaultDateMinuteFormat = "01-02 3:04PM" + // DefaultFloatFormat is the default float format. + DefaultFloatFormat = "%.2f" + // DefaultPercentValueFormat is the default percent format. + DefaultPercentValueFormat = "%0.2f%%" + + // DefaultBarSpacing is the default pixel spacing between bars. + DefaultBarSpacing = 100 + // DefaultBarWidth is the default pixel width of bars in a bar chart. + DefaultBarWidth = 50 +) + +var ( + // DashArrayDots is a dash array that represents '....' style stroke dashes. + DashArrayDots = []int{1, 1} + // DashArrayDashesSmall is a dash array that represents '- - -' style stroke dashes. + DashArrayDashesSmall = []int{3, 3} + // DashArrayDashesMedium is a dash array that represents '-- -- --' style stroke dashes. + DashArrayDashesMedium = []int{5, 5} + // DashArrayDashesLarge is a dash array that represents '----- ----- -----' style stroke dashes. + DashArrayDashesLarge = []int{10, 10} +) + +var ( + // DefaultAnnotationPadding is the padding around an annotation. + DefaultAnnotationPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5} + + // DefaultBackgroundPadding is the default canvas padding config. + DefaultBackgroundPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5} +) + +const ( + // ContentTypePNG is the png mime type. + ContentTypePNG = "image/png" + + // ContentTypeSVG is the svg mime type. + ContentTypeSVG = "image/svg+xml" +) diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/donut_chart.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/donut_chart.go new file mode 100644 index 00000000..f5a7854b --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/donut_chart.go @@ -0,0 +1,315 @@ +package chart + +import ( + "errors" + "fmt" + "io" + + "github.com/golang/freetype/truetype" +) + +// DonutChart is a chart that draws sections of a circle based on percentages with an hole. +type DonutChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + SliceStyle Style + + Font *truetype.Font + defaultFont *truetype.Font + + Values []Value + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (pc DonutChart) GetDPI(defaults ...float64) float64 { + if pc.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return pc.DPI +} + +// GetFont returns the text font. +func (pc DonutChart) GetFont() *truetype.Font { + if pc.Font == nil { + return pc.defaultFont + } + return pc.Font +} + +// GetWidth returns the chart width or the default value. +func (pc DonutChart) GetWidth() int { + if pc.Width == 0 { + return DefaultChartWidth + } + return pc.Width +} + +// GetHeight returns the chart height or the default value. +func (pc DonutChart) GetHeight() int { + if pc.Height == 0 { + return DefaultChartWidth + } + return pc.Height +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (pc DonutChart) Render(rp RendererProvider, w io.Writer) error { + if len(pc.Values) == 0 { + return errors.New("please provide at least one value") + } + + r, err := rp(pc.GetWidth(), pc.GetHeight()) + if err != nil { + return err + } + + if pc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + pc.defaultFont = defaultFont + } + r.SetDPI(pc.GetDPI(DefaultDPI)) + + canvasBox := pc.getDefaultCanvasBox() + canvasBox = pc.getCircleAdjustedCanvasBox(canvasBox) + + pc.drawBackground(r) + pc.drawCanvas(r, canvasBox) + + finalValues, err := pc.finalizeValues(pc.Values) + if err != nil { + return err + } + pc.drawSlices(r, canvasBox, finalValues) + pc.drawTitle(r) + for _, a := range pc.Elements { + a(r, canvasBox, pc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (pc DonutChart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: pc.GetWidth(), + Bottom: pc.GetHeight(), + }, pc.getBackgroundStyle()) +} + +func (pc DonutChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, pc.getCanvasStyle()) +} + +func (pc DonutChart) drawTitle(r Renderer) { + if len(pc.Title) > 0 && !pc.TitleStyle.Hidden { + Draw.TextWithin(r, pc.Title, pc.Box(), pc.styleDefaultsTitle()) + } +} + +func (pc DonutChart) drawSlices(r Renderer, canvasBox Box, values []Value) { + cx, cy := canvasBox.Center() + diameter := MinInt(canvasBox.Width(), canvasBox.Height()) + radius := float64(diameter>>1) / 1.1 + labelRadius := (radius * 2.83) / 3.0 + + // draw the donut slices + var rads, delta, delta2, total float64 + var lx, ly int + + if len(values) == 1 { + pc.styleDonutChartValue(0).WriteToRenderer(r) + r.MoveTo(cx, cy) + r.Circle(radius, cx, cy) + } else { + for index, v := range values { + v.Style.InheritFrom(pc.styleDonutChartValue(index)).WriteToRenderer(r) + r.MoveTo(cx, cy) + rads = PercentToRadians(total) + delta = PercentToRadians(v.Value) + + r.ArcTo(cx, cy, (radius / 1.25), (radius / 1.25), rads, delta) + + r.LineTo(cx, cy) + r.Close() + r.FillStroke() + total = total + v.Value + } + } + + //making the donut hole + v := Value{Value: 100, Label: "center"} + styletemp := pc.SliceStyle.InheritFrom(Style{ + StrokeColor: ColorWhite, StrokeWidth: 4.0, FillColor: ColorWhite, FontColor: ColorWhite, //Font: pc.GetFont(),//FontSize: pc.getScaledFontSize(), + }) + v.Style.InheritFrom(styletemp).WriteToRenderer(r) + r.MoveTo(cx, cy) + r.ArcTo(cx, cy, (radius / 3.5), (radius / 3.5), DegreesToRadians(0), DegreesToRadians(359)) + r.LineTo(cx, cy) + r.Close() + r.FillStroke() + + // draw the labels + total = 0 + for index, v := range values { + v.Style.InheritFrom(pc.styleDonutChartValue(index)).WriteToRenderer(r) + if len(v.Label) > 0 { + delta2 = PercentToRadians(total + (v.Value / 2.0)) + delta2 = RadianAdd(delta2, _pi2) + lx, ly = CirclePoint(cx, cy, labelRadius, delta2) + + tb := r.MeasureText(v.Label) + lx = lx - (tb.Width() >> 1) + ly = ly + (tb.Height() >> 1) + + r.Text(v.Label, lx, ly) + } + total = total + v.Value + } +} + +func (pc DonutChart) finalizeValues(values []Value) ([]Value, error) { + finalValues := Values(values).Normalize() + if len(finalValues) == 0 { + return nil, fmt.Errorf("donut chart must contain at least (1) non-zero value") + } + return finalValues, nil +} + +func (pc DonutChart) getDefaultCanvasBox() Box { + return pc.Box() +} + +func (pc DonutChart) getCircleAdjustedCanvasBox(canvasBox Box) Box { + circleDiameter := MinInt(canvasBox.Width(), canvasBox.Height()) + + square := Box{ + Right: circleDiameter, + Bottom: circleDiameter, + } + + return canvasBox.Fit(square) +} + +func (pc DonutChart) getBackgroundStyle() Style { + return pc.Background.InheritFrom(pc.styleDefaultsBackground()) +} + +func (pc DonutChart) getCanvasStyle() Style { + return pc.Canvas.InheritFrom(pc.styleDefaultsCanvas()) +} + +func (pc DonutChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: pc.GetColorPalette().CanvasColor(), + StrokeColor: pc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc DonutChart) styleDefaultsDonutChartValue() Style { + return Style{ + StrokeColor: pc.GetColorPalette().TextColor(), + StrokeWidth: 4.0, + FillColor: pc.GetColorPalette().TextColor(), + } +} + +func (pc DonutChart) styleDonutChartValue(index int) Style { + return pc.SliceStyle.InheritFrom(Style{ + StrokeColor: ColorWhite, + StrokeWidth: 4.0, + FillColor: pc.GetColorPalette().GetSeriesColor(index), + FontSize: pc.getScaledFontSize(), + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + }) +} + +func (pc DonutChart) getScaledFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48.0 + } else if effectiveDimension >= 1024 { + return 24.0 + } else if effectiveDimension > 512 { + return 18.0 + } else if effectiveDimension > 256 { + return 12.0 + } + return 10.0 +} + +func (pc DonutChart) styleDefaultsBackground() Style { + return Style{ + FillColor: pc.GetColorPalette().BackgroundColor(), + StrokeColor: pc.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc DonutChart) styleDefaultsElements() Style { + return Style{ + Font: pc.GetFont(), + } +} + +func (pc DonutChart) styleDefaultsTitle() Style { + return pc.TitleStyle.InheritFrom(Style{ + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + FontSize: pc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (pc DonutChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +// GetColorPalette returns the color palette for the chart. +func (pc DonutChart) GetColorPalette() ColorPalette { + if pc.ColorPalette != nil { + return pc.ColorPalette + } + return AlternateColorPalette +} + +// Box returns the chart bounds as a box. +func (pc DonutChart) Box() Box { + dpr := pc.Background.Padding.GetRight(DefaultBackgroundPadding.Right) + dpb := pc.Background.Padding.GetBottom(DefaultBackgroundPadding.Bottom) + + return Box{ + Top: pc.Background.Padding.GetTop(DefaultBackgroundPadding.Top), + Left: pc.Background.Padding.GetLeft(DefaultBackgroundPadding.Left), + Right: pc.GetWidth() - dpr, + Bottom: pc.GetHeight() - dpb, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/draw.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/draw.go new file mode 100644 index 00000000..e1880792 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/draw.go @@ -0,0 +1,325 @@ +package chart + +import ( + "math" +) + +var ( + // Draw contains helpers for drawing common objects. + Draw = &draw{} +) + +type draw struct{} + +// LineSeries draws a line series with a renderer. +func (d draw) LineSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, vs ValuesProvider) { + if vs.Len() == 0 { + return + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + v0x, v0y := vs.GetValues(0) + x0 := cl + xrange.Translate(v0x) + y0 := cb - yrange.Translate(v0y) + + yv0 := yrange.Translate(0) + + var vx, vy float64 + var x, y int + + if style.ShouldDrawStroke() && style.ShouldDrawFill() { + style.GetFillOptions().WriteDrawingOptionsToRenderer(r) + r.MoveTo(x0, y0) + for i := 1; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + r.LineTo(x, y) + } + r.LineTo(x, MinInt(cb, cb-yv0)) + r.LineTo(x0, MinInt(cb, cb-yv0)) + r.LineTo(x0, y0) + r.Fill() + } + + if style.ShouldDrawStroke() { + style.GetStrokeOptions().WriteDrawingOptionsToRenderer(r) + + r.MoveTo(x0, y0) + for i := 1; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + r.LineTo(x, y) + } + r.Stroke() + } + + if style.ShouldDrawDot() { + defaultDotWidth := style.GetDotWidth() + + style.GetDotOptions().WriteDrawingOptionsToRenderer(r) + for i := 0; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + + dotWidth := defaultDotWidth + if style.DotWidthProvider != nil { + dotWidth = style.DotWidthProvider(xrange, yrange, i, vx, vy) + } + + if style.DotColorProvider != nil { + dotColor := style.DotColorProvider(xrange, yrange, i, vx, vy) + + r.SetFillColor(dotColor) + r.SetStrokeColor(dotColor) + } + + r.Circle(dotWidth, x, y) + r.FillStroke() + } + } +} + +// BoundedSeries draws a series that implements BoundedValuesProvider. +func (d draw) BoundedSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, bbs BoundedValuesProvider, drawOffsetIndexes ...int) { + drawOffsetIndex := 0 + if len(drawOffsetIndexes) > 0 { + drawOffsetIndex = drawOffsetIndexes[0] + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + v0x, v0y1, v0y2 := bbs.GetBoundedValues(0) + x0 := cl + xrange.Translate(v0x) + y0 := cb - yrange.Translate(v0y1) + + var vx, vy1, vy2 float64 + var x, y int + + xvalues := make([]float64, bbs.Len()) + xvalues[0] = v0x + y2values := make([]float64, bbs.Len()) + y2values[0] = v0y2 + + style.GetFillAndStrokeOptions().WriteToRenderer(r) + r.MoveTo(x0, y0) + for i := 1; i < bbs.Len(); i++ { + vx, vy1, vy2 = bbs.GetBoundedValues(i) + + xvalues[i] = vx + y2values[i] = vy2 + + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy1) + if i > drawOffsetIndex { + r.LineTo(x, y) + } else { + r.MoveTo(x, y) + } + } + y = cb - yrange.Translate(vy2) + r.LineTo(x, y) + for i := bbs.Len() - 1; i >= drawOffsetIndex; i-- { + vx, vy2 = xvalues[i], y2values[i] + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy2) + r.LineTo(x, y) + } + r.Close() + r.FillStroke() +} + +// HistogramSeries draws a value provider as boxes from 0. +func (d draw) HistogramSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, vs ValuesProvider, barWidths ...int) { + if vs.Len() == 0 { + return + } + + //calculate bar width? + seriesLength := vs.Len() + barWidth := int(math.Floor(float64(xrange.GetDomain()) / float64(seriesLength))) + if len(barWidths) > 0 { + barWidth = barWidths[0] + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + //foreach datapoint, draw a box. + for index := 0; index < seriesLength; index++ { + vx, vy := vs.GetValues(index) + y0 := yrange.Translate(0) + x := cl + xrange.Translate(vx) + y := yrange.Translate(vy) + + d.Box(r, Box{ + Top: cb - y0, + Left: x - (barWidth >> 1), + Right: x + (barWidth >> 1), + Bottom: cb - y, + }, style) + } +} + +// MeasureAnnotation measures how big an annotation would be. +func (d draw) MeasureAnnotation(r Renderer, canvasBox Box, style Style, lx, ly int, label string) Box { + style.WriteToRenderer(r) + defer r.ResetStyle() + + textBox := r.MeasureText(label) + textWidth := textBox.Width() + textHeight := textBox.Height() + halfTextHeight := textHeight >> 1 + + pt := style.Padding.GetTop(DefaultAnnotationPadding.Top) + pl := style.Padding.GetLeft(DefaultAnnotationPadding.Left) + pr := style.Padding.GetRight(DefaultAnnotationPadding.Right) + pb := style.Padding.GetBottom(DefaultAnnotationPadding.Bottom) + + strokeWidth := style.GetStrokeWidth() + + top := ly - (pt + halfTextHeight) + right := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + int(strokeWidth) + bottom := ly + (pb + halfTextHeight) + + return Box{ + Top: top, + Left: lx, + Right: right, + Bottom: bottom, + } +} + +// Annotation draws an anotation with a renderer. +func (d draw) Annotation(r Renderer, canvasBox Box, style Style, lx, ly int, label string) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + textBox := r.MeasureText(label) + textWidth := textBox.Width() + halfTextHeight := textBox.Height() >> 1 + + style.GetFillAndStrokeOptions().WriteToRenderer(r) + + pt := style.Padding.GetTop(DefaultAnnotationPadding.Top) + pl := style.Padding.GetLeft(DefaultAnnotationPadding.Left) + pr := style.Padding.GetRight(DefaultAnnotationPadding.Right) + pb := style.Padding.GetBottom(DefaultAnnotationPadding.Bottom) + + textX := lx + pl + DefaultAnnotationDeltaWidth + textY := ly + halfTextHeight + + ltx := lx + DefaultAnnotationDeltaWidth + lty := ly - (pt + halfTextHeight) + + rtx := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + rty := ly - (pt + halfTextHeight) + + rbx := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + rby := ly + (pb + halfTextHeight) + + lbx := lx + DefaultAnnotationDeltaWidth + lby := ly + (pb + halfTextHeight) + + r.MoveTo(lx, ly) + r.LineTo(ltx, lty) + r.LineTo(rtx, rty) + r.LineTo(rbx, rby) + r.LineTo(lbx, lby) + r.LineTo(lx, ly) + r.Close() + r.FillStroke() + + style.GetTextOptions().WriteToRenderer(r) + r.Text(label, textX, textY) +} + +// Box draws a box with a given style. +func (d draw) Box(r Renderer, b Box, s Style) { + s.GetFillAndStrokeOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.MoveTo(b.Left, b.Top) + r.LineTo(b.Right, b.Top) + r.LineTo(b.Right, b.Bottom) + r.LineTo(b.Left, b.Bottom) + r.LineTo(b.Left, b.Top) + r.FillStroke() +} + +func (d draw) BoxRotated(r Renderer, b Box, thetaDegrees float64, s Style) { + d.BoxCorners(r, b.Corners().Rotate(thetaDegrees), s) +} + +func (d draw) BoxCorners(r Renderer, bc BoxCorners, s Style) { + s.GetFillAndStrokeOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.MoveTo(bc.TopLeft.X, bc.TopLeft.Y) + r.LineTo(bc.TopRight.X, bc.TopRight.Y) + r.LineTo(bc.BottomRight.X, bc.BottomRight.Y) + r.LineTo(bc.BottomLeft.X, bc.BottomLeft.Y) + r.Close() + r.FillStroke() +} + +// DrawText draws text with a given style. +func (d draw) Text(r Renderer, text string, x, y int, style Style) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.Text(text, x, y) +} + +func (d draw) MeasureText(r Renderer, text string, style Style) Box { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + return r.MeasureText(text) +} + +// TextWithin draws the text within a given box. +func (d draw) TextWithin(r Renderer, text string, box Box, style Style) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + lines := Text.WrapFit(r, text, box.Width(), style) + linesBox := Text.MeasureLines(r, lines, style) + + y := box.Top + + switch style.GetTextVerticalAlign() { + case TextVerticalAlignBottom, TextVerticalAlignBaseline: // i have to build better baseline handling into measure text + y = y - linesBox.Height() + case TextVerticalAlignMiddle: + y = y + (box.Height() >> 1) - (linesBox.Height() >> 1) + case TextVerticalAlignMiddleBaseline: + y = y + (box.Height() >> 1) - linesBox.Height() + } + + var tx, ty int + for _, line := range lines { + lineBox := r.MeasureText(line) + switch style.GetTextHorizontalAlign() { + case TextHorizontalAlignCenter: + tx = box.Left + ((box.Width() - lineBox.Width()) >> 1) + case TextHorizontalAlignRight: + tx = box.Right - lineBox.Width() + default: + tx = box.Left + } + if style.TextRotationDegrees == 0 { + ty = y + lineBox.Height() + } else { + ty = y + } + + r.Text(line, tx, ty) + y += lineBox.Height() + style.GetTextLineSpacing() + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/README.md b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/README.md new file mode 100644 index 00000000..a97cb304 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/README.md @@ -0,0 +1,5 @@ +go-chart > drawing +================== + +The bulk of the code in this package is based on [draw2d](https://github.com/llgcode/draw2d), but +with significant modifications to make the APIs more golang friendly and careful about units (points vs. pixels). \ No newline at end of file diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/color.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/color.go new file mode 100644 index 00000000..cfe09245 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/color.go @@ -0,0 +1,126 @@ +package drawing + +import ( + "fmt" + "strconv" +) + +var ( + // ColorTransparent is a fully transparent color. + ColorTransparent = Color{} + + // ColorWhite is white. + ColorWhite = Color{R: 255, G: 255, B: 255, A: 255} + + // ColorBlack is black. + ColorBlack = Color{R: 0, G: 0, B: 0, A: 255} + + // ColorRed is red. + ColorRed = Color{R: 255, G: 0, B: 0, A: 255} + + // ColorGreen is green. + ColorGreen = Color{R: 0, G: 255, B: 0, A: 255} + + // ColorBlue is blue. + ColorBlue = Color{R: 0, G: 0, B: 255, A: 255} +) + +func parseHex(hex string) uint8 { + v, _ := strconv.ParseInt(hex, 16, 16) + return uint8(v) +} + +// ColorFromHex returns a color from a css hex code. +func ColorFromHex(hex string) Color { + var c Color + if len(hex) == 3 { + c.R = parseHex(string(hex[0])) * 0x11 + c.G = parseHex(string(hex[1])) * 0x11 + c.B = parseHex(string(hex[2])) * 0x11 + } else { + c.R = parseHex(string(hex[0:2])) + c.G = parseHex(string(hex[2:4])) + c.B = parseHex(string(hex[4:6])) + } + c.A = 255 + return c +} + +// ColorFromAlphaMixedRGBA returns the system alpha mixed rgba values. +func ColorFromAlphaMixedRGBA(r, g, b, a uint32) Color { + fa := float64(a) / 255.0 + var c Color + c.R = uint8(float64(r) / fa) + c.G = uint8(float64(g) / fa) + c.B = uint8(float64(b) / fa) + c.A = uint8(a | (a >> 8)) + return c +} + +// ColorChannelFromFloat returns a normalized byte from a given float value. +func ColorChannelFromFloat(v float64) uint8 { + return uint8(v * 255) +} + +// Color is our internal color type because color.Color is bullshit. +type Color struct { + R, G, B, A uint8 +} + +// RGBA returns the color as a pre-alpha mixed color set. +func (c Color) RGBA() (r, g, b, a uint32) { + fa := float64(c.A) / 255.0 + r = uint32(float64(uint32(c.R)) * fa) + r |= r << 8 + g = uint32(float64(uint32(c.G)) * fa) + g |= g << 8 + b = uint32(float64(uint32(c.B)) * fa) + b |= b << 8 + a = uint32(c.A) + a |= a << 8 + return +} + +// IsZero returns if the color has been set or not. +func (c Color) IsZero() bool { + return c.R == 0 && c.G == 0 && c.B == 0 && c.A == 0 +} + +// IsTransparent returns if the colors alpha channel is zero. +func (c Color) IsTransparent() bool { + return c.A == 0 +} + +// WithAlpha returns a copy of the color with a given alpha. +func (c Color) WithAlpha(a uint8) Color { + return Color{ + R: c.R, + G: c.G, + B: c.B, + A: a, + } +} + +// Equals returns true if the color equals another. +func (c Color) Equals(other Color) bool { + return c.R == other.R && + c.G == other.G && + c.B == other.B && + c.A == other.A +} + +// AverageWith averages two colors. +func (c Color) AverageWith(other Color) Color { + return Color{ + R: (c.R + other.R) >> 1, + G: (c.G + other.G) >> 1, + B: (c.B + other.B) >> 1, + A: c.A, + } +} + +// String returns a css string representation of the color. +func (c Color) String() string { + fa := float64(c.A) / float64(255) + return fmt.Sprintf("rgba(%v,%v,%v,%.1f)", c.R, c.G, c.B, fa) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/constants.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/constants.go new file mode 100644 index 00000000..2fb154e9 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/constants.go @@ -0,0 +1,6 @@ +package drawing + +const ( + // DefaultDPI is the default image DPI. + DefaultDPI = 96.0 +) diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/curve.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/curve.go new file mode 100644 index 00000000..c33efcca --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/curve.go @@ -0,0 +1,185 @@ +package drawing + +import "math" + +const ( + // CurveRecursionLimit represents the maximum recursion that is really necessary to subsivide a curve into straight lines + CurveRecursionLimit = 32 +) + +// Cubic +// x1, y1, cpx1, cpy1, cpx2, cpy2, x2, y2 float64 + +// SubdivideCubic a Bezier cubic curve in 2 equivalents Bezier cubic curves. +// c1 and c2 parameters are the resulting curves +func SubdivideCubic(c, c1, c2 []float64) { + // First point of c is the first point of c1 + c1[0], c1[1] = c[0], c[1] + // Last point of c is the last point of c2 + c2[6], c2[7] = c[6], c[7] + + // Subdivide segment using midpoints + c1[2] = (c[0] + c[2]) / 2 + c1[3] = (c[1] + c[3]) / 2 + + midX := (c[2] + c[4]) / 2 + midY := (c[3] + c[5]) / 2 + + c2[4] = (c[4] + c[6]) / 2 + c2[5] = (c[5] + c[7]) / 2 + + c1[4] = (c1[2] + midX) / 2 + c1[5] = (c1[3] + midY) / 2 + + c2[2] = (midX + c2[4]) / 2 + c2[3] = (midY + c2[5]) / 2 + + c1[6] = (c1[4] + c2[2]) / 2 + c1[7] = (c1[5] + c2[3]) / 2 + + // Last Point of c1 is equal to the first point of c2 + c2[0], c2[1] = c1[6], c1[7] +} + +// TraceCubic generate lines subdividing the cubic curve using a Liner +// flattening_threshold helps determines the flattening expectation of the curve +func TraceCubic(t Liner, cubic []float64, flatteningThreshold float64) { + // Allocation curves + var curves [CurveRecursionLimit * 8]float64 + copy(curves[0:8], cubic[0:8]) + i := 0 + + // current curve + var c []float64 + + var dx, dy, d2, d3 float64 + + for i >= 0 { + c = curves[i*8:] + dx = c[6] - c[0] + dy = c[7] - c[1] + + d2 = math.Abs((c[2]-c[6])*dy - (c[3]-c[7])*dx) + d3 = math.Abs((c[4]-c[6])*dy - (c[5]-c[7])*dx) + + // if it's flat then trace a line + if (d2+d3)*(d2+d3) < flatteningThreshold*(dx*dx+dy*dy) || i == len(curves)-1 { + t.LineTo(c[6], c[7]) + i-- + } else { + // second half of bezier go lower onto the stack + SubdivideCubic(c, curves[(i+1)*8:], curves[i*8:]) + i++ + } + } +} + +// Quad +// x1, y1, cpx1, cpy2, x2, y2 float64 + +// SubdivideQuad a Bezier quad curve in 2 equivalents Bezier quad curves. +// c1 and c2 parameters are the resulting curves +func SubdivideQuad(c, c1, c2 []float64) { + // First point of c is the first point of c1 + c1[0], c1[1] = c[0], c[1] + // Last point of c is the last point of c2 + c2[4], c2[5] = c[4], c[5] + + // Subdivide segment using midpoints + c1[2] = (c[0] + c[2]) / 2 + c1[3] = (c[1] + c[3]) / 2 + c2[2] = (c[2] + c[4]) / 2 + c2[3] = (c[3] + c[5]) / 2 + c1[4] = (c1[2] + c2[2]) / 2 + c1[5] = (c1[3] + c2[3]) / 2 + c2[0], c2[1] = c1[4], c1[5] + return +} + +func traceWindowIndices(i int) (startAt, endAt int) { + startAt = i * 6 + endAt = startAt + 6 + return +} + +func traceCalcDeltas(c []float64) (dx, dy, d float64) { + dx = c[4] - c[0] + dy = c[5] - c[1] + d = math.Abs(((c[2]-c[4])*dy - (c[3]-c[5])*dx)) + return +} + +func traceIsFlat(dx, dy, d, threshold float64) bool { + return (d * d) < threshold*(dx*dx+dy*dy) +} + +func traceGetWindow(curves []float64, i int) []float64 { + startAt, endAt := traceWindowIndices(i) + return curves[startAt:endAt] +} + +// TraceQuad generate lines subdividing the curve using a Liner +// flattening_threshold helps determines the flattening expectation of the curve +func TraceQuad(t Liner, quad []float64, flatteningThreshold float64) { + const curveLen = CurveRecursionLimit * 6 + const curveEndIndex = curveLen - 1 + const lastIteration = CurveRecursionLimit - 1 + + // Allocates curves stack + curves := make([]float64, curveLen) + + // copy 6 elements from the quad path to the stack + copy(curves[0:6], quad[0:6]) + + var i int + var c []float64 + var dx, dy, d float64 + + for i >= 0 { + c = traceGetWindow(curves, i) + dx, dy, d = traceCalcDeltas(c) + + // bail early if the distance is 0 + if d == 0 { + return + } + + // if it's flat then trace a line + if traceIsFlat(dx, dy, d, flatteningThreshold) || i == lastIteration { + t.LineTo(c[4], c[5]) + i-- + } else { + SubdivideQuad(c, traceGetWindow(curves, i+1), traceGetWindow(curves, i)) + i++ + } + } +} + +// TraceArc trace an arc using a Liner +func TraceArc(t Liner, x, y, rx, ry, start, angle, scale float64) (lastX, lastY float64) { + end := start + angle + clockWise := true + if angle < 0 { + clockWise = false + } + ra := (math.Abs(rx) + math.Abs(ry)) / 2 + da := math.Acos(ra/(ra+0.125/scale)) * 2 + //normalize + if !clockWise { + da = -da + } + angle = start + da + var curX, curY float64 + for { + if (angle < end-da/4) != clockWise { + curX = x + math.Cos(end)*rx + curY = y + math.Sin(end)*ry + return curX, curY + } + curX = x + math.Cos(angle)*rx + curY = y + math.Sin(angle)*ry + + angle += da + t.LineTo(curX, curY) + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/dasher.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/dasher.go new file mode 100644 index 00000000..20a5a6b2 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/dasher.go @@ -0,0 +1,89 @@ +package drawing + +// NewDashVertexConverter creates a new dash converter. +func NewDashVertexConverter(dash []float64, dashOffset float64, flattener Flattener) *DashVertexConverter { + var dasher DashVertexConverter + dasher.dash = dash + dasher.currentDash = 0 + dasher.dashOffset = dashOffset + dasher.next = flattener + return &dasher +} + +// DashVertexConverter is a converter for dash vertexes. +type DashVertexConverter struct { + next Flattener + x, y, distance float64 + dash []float64 + currentDash int + dashOffset float64 +} + +// LineTo implements the pathbuilder interface. +func (dasher *DashVertexConverter) LineTo(x, y float64) { + dasher.lineTo(x, y) +} + +// MoveTo implements the pathbuilder interface. +func (dasher *DashVertexConverter) MoveTo(x, y float64) { + dasher.next.MoveTo(x, y) + dasher.x, dasher.y = x, y + dasher.distance = dasher.dashOffset + dasher.currentDash = 0 +} + +// LineJoin implements the pathbuilder interface. +func (dasher *DashVertexConverter) LineJoin() { + dasher.next.LineJoin() +} + +// Close implements the pathbuilder interface. +func (dasher *DashVertexConverter) Close() { + dasher.next.Close() +} + +// End implements the pathbuilder interface. +func (dasher *DashVertexConverter) End() { + dasher.next.End() +} + +func (dasher *DashVertexConverter) lineTo(x, y float64) { + rest := dasher.dash[dasher.currentDash] - dasher.distance + for rest < 0 { + dasher.distance = dasher.distance - dasher.dash[dasher.currentDash] + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + rest = dasher.dash[dasher.currentDash] - dasher.distance + } + d := distance(dasher.x, dasher.y, x, y) + for d >= rest { + k := rest / d + lx := dasher.x + k*(x-dasher.x) + ly := dasher.y + k*(y-dasher.y) + if dasher.currentDash%2 == 0 { + // line + dasher.next.LineTo(lx, ly) + } else { + // gap + dasher.next.End() + dasher.next.MoveTo(lx, ly) + } + d = d - rest + dasher.x, dasher.y = lx, ly + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + rest = dasher.dash[dasher.currentDash] + } + dasher.distance = d + if dasher.currentDash%2 == 0 { + // line + dasher.next.LineTo(x, y) + } else { + // gap + dasher.next.End() + dasher.next.MoveTo(x, y) + } + if dasher.distance >= dasher.dash[dasher.currentDash] { + dasher.distance = dasher.distance - dasher.dash[dasher.currentDash] + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + } + dasher.x, dasher.y = x, y +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/demux_flattener.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/demux_flattener.go new file mode 100644 index 00000000..43b86462 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/demux_flattener.go @@ -0,0 +1,41 @@ +package drawing + +// DemuxFlattener is a flattener +type DemuxFlattener struct { + Flatteners []Flattener +} + +// MoveTo implements the path builder interface. +func (dc DemuxFlattener) MoveTo(x, y float64) { + for _, flattener := range dc.Flatteners { + flattener.MoveTo(x, y) + } +} + +// LineTo implements the path builder interface. +func (dc DemuxFlattener) LineTo(x, y float64) { + for _, flattener := range dc.Flatteners { + flattener.LineTo(x, y) + } +} + +// LineJoin implements the path builder interface. +func (dc DemuxFlattener) LineJoin() { + for _, flattener := range dc.Flatteners { + flattener.LineJoin() + } +} + +// Close implements the path builder interface. +func (dc DemuxFlattener) Close() { + for _, flattener := range dc.Flatteners { + flattener.Close() + } +} + +// End implements the path builder interface. +func (dc DemuxFlattener) End() { + for _, flattener := range dc.Flatteners { + flattener.End() + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/drawing.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/drawing.go new file mode 100644 index 00000000..8a1da6ab --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/drawing.go @@ -0,0 +1,148 @@ +package drawing + +import ( + "image/color" + + "github.com/golang/freetype/truetype" +) + +// FillRule defines the type for fill rules +type FillRule int + +const ( + // FillRuleEvenOdd determines the "insideness" of a point in the shape + // by drawing a ray from that point to infinity in any direction + // and counting the number of path segments from the given shape that the ray crosses. + // If this number is odd, the point is inside; if even, the point is outside. + FillRuleEvenOdd FillRule = iota + // FillRuleWinding determines the "insideness" of a point in the shape + // by drawing a ray from that point to infinity in any direction + // and then examining the places where a segment of the shape crosses the ray. + // Starting with a count of zero, add one each time a path segment crosses + // the ray from left to right and subtract one each time + // a path segment crosses the ray from right to left. After counting the crossings, + // if the result is zero then the point is outside the path. Otherwise, it is inside. + FillRuleWinding +) + +// LineCap is the style of line extremities +type LineCap int + +const ( + // RoundCap defines a rounded shape at the end of the line + RoundCap LineCap = iota + // ButtCap defines a squared shape exactly at the end of the line + ButtCap + // SquareCap defines a squared shape at the end of the line + SquareCap +) + +// LineJoin is the style of segments joint +type LineJoin int + +const ( + // BevelJoin represents cut segments joint + BevelJoin LineJoin = iota + // RoundJoin represents rounded segments joint + RoundJoin + // MiterJoin represents peaker segments joint + MiterJoin +) + +// StrokeStyle keeps stroke style attributes +// that is used by the Stroke method of a Drawer +type StrokeStyle struct { + // Color defines the color of stroke + Color color.Color + // Line width + Width float64 + // Line cap style rounded, butt or square + LineCap LineCap + // Line join style bevel, round or miter + LineJoin LineJoin + // offset of the first dash + DashOffset float64 + // array represented dash length pair values are plain dash and impair are space between dash + // if empty display plain line + Dash []float64 +} + +// SolidFillStyle define style attributes for a solid fill style +type SolidFillStyle struct { + // Color defines the line color + Color color.Color + // FillRule defines the file rule to used + FillRule FillRule +} + +// Valign Vertical Alignment of the text +type Valign int + +const ( + // ValignTop top align text + ValignTop Valign = iota + // ValignCenter centered text + ValignCenter + // ValignBottom bottom aligned text + ValignBottom + // ValignBaseline align text with the baseline of the font + ValignBaseline +) + +// Halign Horizontal Alignment of the text +type Halign int + +const ( + // HalignLeft Horizontally align to left + HalignLeft = iota + // HalignCenter Horizontally align to center + HalignCenter + // HalignRight Horizontally align to right + HalignRight +) + +// TextStyle describe text property +type TextStyle struct { + // Color defines the color of text + Color color.Color + // Size font size + Size float64 + // The font to use + Font *truetype.Font + // Horizontal Alignment of the text + Halign Halign + // Vertical Alignment of the text + Valign Valign +} + +// ScalingPolicy is a constant to define how to scale an image +type ScalingPolicy int + +const ( + // ScalingNone no scaling applied + ScalingNone ScalingPolicy = iota + // ScalingStretch the image is stretched so that its width and height are exactly the given width and height + ScalingStretch + // ScalingWidth the image is scaled so that its width is exactly the given width + ScalingWidth + // ScalingHeight the image is scaled so that its height is exactly the given height + ScalingHeight + // ScalingFit the image is scaled to the largest scale that allow the image to fit within a rectangle width x height + ScalingFit + // ScalingSameArea the image is scaled so that its area is exactly the area of the given rectangle width x height + ScalingSameArea + // ScalingFill the image is scaled to the smallest scale that allow the image to fully cover a rectangle width x height + ScalingFill +) + +// ImageScaling style attributes used to display the image +type ImageScaling struct { + // Horizontal Alignment of the image + Halign Halign + // Vertical Alignment of the image + Valign Valign + // Width Height used by scaling policy + Width, Height float64 + // ScalingPolicy defines the scaling policy to applied to the image + ScalingPolicy ScalingPolicy +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/flattener.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/flattener.go new file mode 100644 index 00000000..7b34201e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/flattener.go @@ -0,0 +1,97 @@ +package drawing + +// Liner receive segment definition +type Liner interface { + // LineTo Draw a line from the current position to the point (x, y) + LineTo(x, y float64) +} + +// Flattener receive segment definition +type Flattener interface { + // MoveTo Start a New line from the point (x, y) + MoveTo(x, y float64) + // LineTo Draw a line from the current position to the point (x, y) + LineTo(x, y float64) + // LineJoin add the most recent starting point to close the path to create a polygon + LineJoin() + // Close add the most recent starting point to close the path to create a polygon + Close() + // End mark the current line as finished so we can draw caps + End() +} + +// Flatten convert curves into straight segments keeping join segments info +func Flatten(path *Path, flattener Flattener, scale float64) { + // First Point + var startX, startY float64 + // Current Point + var x, y float64 + var i int + for _, cmp := range path.Components { + switch cmp { + case MoveToComponent: + x, y = path.Points[i], path.Points[i+1] + startX, startY = x, y + if i != 0 { + flattener.End() + } + flattener.MoveTo(x, y) + i += 2 + case LineToComponent: + x, y = path.Points[i], path.Points[i+1] + flattener.LineTo(x, y) + flattener.LineJoin() + i += 2 + case QuadCurveToComponent: + // we include the previous point for the start of the curve + TraceQuad(flattener, path.Points[i-2:], 0.5) + x, y = path.Points[i+2], path.Points[i+3] + flattener.LineTo(x, y) + i += 4 + case CubicCurveToComponent: + TraceCubic(flattener, path.Points[i-2:], 0.5) + x, y = path.Points[i+4], path.Points[i+5] + flattener.LineTo(x, y) + i += 6 + case ArcToComponent: + x, y = TraceArc(flattener, path.Points[i], path.Points[i+1], path.Points[i+2], path.Points[i+3], path.Points[i+4], path.Points[i+5], scale) + flattener.LineTo(x, y) + i += 6 + case CloseComponent: + flattener.LineTo(startX, startY) + flattener.Close() + } + } + flattener.End() +} + +// SegmentedPath is a path of disparate point sectinos. +type SegmentedPath struct { + Points []float64 +} + +// MoveTo implements the path interface. +func (p *SegmentedPath) MoveTo(x, y float64) { + p.Points = append(p.Points, x, y) + // TODO need to mark this point as moveto +} + +// LineTo implements the path interface. +func (p *SegmentedPath) LineTo(x, y float64) { + p.Points = append(p.Points, x, y) +} + +// LineJoin implements the path interface. +func (p *SegmentedPath) LineJoin() { + // TODO need to mark the current point as linejoin +} + +// Close implements the path interface. +func (p *SegmentedPath) Close() { + // TODO Close +} + +// End implements the path interface. +func (p *SegmentedPath) End() { + // Nothing to do +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/free_type_path.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/free_type_path.go new file mode 100644 index 00000000..5c3c2667 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/free_type_path.go @@ -0,0 +1,30 @@ +package drawing + +import ( + "github.com/golang/freetype/raster" + "golang.org/x/image/math/fixed" +) + +// FtLineBuilder is a builder for freetype raster glyphs. +type FtLineBuilder struct { + Adder raster.Adder +} + +// MoveTo implements the path builder interface. +func (liner FtLineBuilder) MoveTo(x, y float64) { + liner.Adder.Start(fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}) +} + +// LineTo implements the path builder interface. +func (liner FtLineBuilder) LineTo(x, y float64) { + liner.Adder.Add1(fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}) +} + +// LineJoin implements the path builder interface. +func (liner FtLineBuilder) LineJoin() {} + +// Close implements the path builder interface. +func (liner FtLineBuilder) Close() {} + +// End implements the path builder interface. +func (liner FtLineBuilder) End() {} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/graphic_context.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/graphic_context.go new file mode 100644 index 00000000..553c1eb0 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/graphic_context.go @@ -0,0 +1,82 @@ +package drawing + +import ( + "image" + "image/color" + + "github.com/golang/freetype/truetype" +) + +// GraphicContext describes the interface for the various backends (images, pdf, opengl, ...) +type GraphicContext interface { + // PathBuilder describes the interface for path drawing + PathBuilder + // BeginPath creates a new path + BeginPath() + // GetMatrixTransform returns the current transformation matrix + GetMatrixTransform() Matrix + // SetMatrixTransform sets the current transformation matrix + SetMatrixTransform(tr Matrix) + // ComposeMatrixTransform composes the current transformation matrix with tr + ComposeMatrixTransform(tr Matrix) + // Rotate applies a rotation to the current transformation matrix. angle is in radian. + Rotate(angle float64) + // Translate applies a translation to the current transformation matrix. + Translate(tx, ty float64) + // Scale applies a scale to the current transformation matrix. + Scale(sx, sy float64) + // SetStrokeColor sets the current stroke color + SetStrokeColor(c color.Color) + // SetFillColor sets the current fill color + SetFillColor(c color.Color) + // SetFillRule sets the current fill rule + SetFillRule(f FillRule) + // SetLineWidth sets the current line width + SetLineWidth(lineWidth float64) + // SetLineCap sets the current line cap + SetLineCap(cap LineCap) + // SetLineJoin sets the current line join + SetLineJoin(join LineJoin) + // SetLineDash sets the current dash + SetLineDash(dash []float64, dashOffset float64) + // SetFontSize sets the current font size + SetFontSize(fontSize float64) + // GetFontSize gets the current font size + GetFontSize() float64 + // SetFont sets the font for the context + SetFont(f *truetype.Font) + // GetFont returns the current font + GetFont() *truetype.Font + // DrawImage draws the raster image in the current canvas + DrawImage(image image.Image) + // Save the context and push it to the context stack + Save() + // Restore remove the current context and restore the last one + Restore() + // Clear fills the current canvas with a default transparent color + Clear() + // ClearRect fills the specified rectangle with a default transparent color + ClearRect(x1, y1, x2, y2 int) + // SetDPI sets the current DPI + SetDPI(dpi int) + // GetDPI gets the current DPI + GetDPI() int + // GetStringBounds gets pixel bounds(dimensions) of given string + GetStringBounds(s string) (left, top, right, bottom float64) + // CreateStringPath creates a path from the string s at x, y + CreateStringPath(text string, x, y float64) (cursor float64) + // FillString draws the text at point (0, 0) + FillString(text string) (cursor float64) + // FillStringAt draws the text at the specified point (x, y) + FillStringAt(text string, x, y float64) (cursor float64) + // StrokeString draws the contour of the text at point (0, 0) + StrokeString(text string) (cursor float64) + // StrokeStringAt draws the contour of the text at point (x, y) + StrokeStringAt(text string, x, y float64) (cursor float64) + // Stroke strokes the paths with the color specified by SetStrokeColor + Stroke(paths ...*Path) + // Fill fills the paths with the color specified by SetFillColor + Fill(paths ...*Path) + // FillStroke first fills the paths and than strokes them + FillStroke(paths ...*Path) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/image_filter.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/image_filter.go new file mode 100644 index 00000000..3cf03093 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/image_filter.go @@ -0,0 +1,13 @@ +package drawing + +// ImageFilter defines the type of filter to use +type ImageFilter int + +const ( + // LinearFilter defines a linear filter + LinearFilter ImageFilter = iota + // BilinearFilter defines a bilinear filter + BilinearFilter + // BicubicFilter defines a bicubic filter + BicubicFilter +) diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/line.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/line.go new file mode 100644 index 00000000..b4e28e79 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/line.go @@ -0,0 +1,48 @@ +package drawing + +import ( + "image/color" + "image/draw" +) + +// PolylineBresenham draws a polyline to an image +func PolylineBresenham(img draw.Image, c color.Color, s ...float64) { + for i := 2; i < len(s); i += 2 { + Bresenham(img, c, int(s[i-2]+0.5), int(s[i-1]+0.5), int(s[i]+0.5), int(s[i+1]+0.5)) + } +} + +// Bresenham draws a line between (x0, y0) and (x1, y1) +func Bresenham(img draw.Image, color color.Color, x0, y0, x1, y1 int) { + dx := abs(x1 - x0) + dy := abs(y1 - y0) + var sx, sy int + if x0 < x1 { + sx = 1 + } else { + sx = -1 + } + if y0 < y1 { + sy = 1 + } else { + sy = -1 + } + err := dx - dy + + var e2 int + for { + img.Set(x0, y0, color) + if x0 == x1 && y0 == y1 { + return + } + e2 = 2 * err + if e2 > -dy { + err = err - dy + x0 = x0 + sx + } + if e2 < dx { + err = err + dx + y0 = y0 + sy + } + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/matrix.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/matrix.go new file mode 100644 index 00000000..8bd20492 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/matrix.go @@ -0,0 +1,220 @@ +package drawing + +import ( + "math" +) + +// Matrix represents an affine transformation +type Matrix [6]float64 + +const ( + epsilon = 1e-6 +) + +// Determinant compute the determinant of the matrix +func (tr Matrix) Determinant() float64 { + return tr[0]*tr[3] - tr[1]*tr[2] +} + +// Transform applies the transformation matrix to points. It modify the points passed in parameter. +func (tr Matrix) Transform(points []float64) { + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = x*tr[0] + y*tr[2] + tr[4] + points[j] = x*tr[1] + y*tr[3] + tr[5] + } +} + +// TransformPoint applies the transformation matrix to point. It returns the point the transformed point. +func (tr Matrix) TransformPoint(x, y float64) (xres, yres float64) { + xres = x*tr[0] + y*tr[2] + tr[4] + yres = x*tr[1] + y*tr[3] + tr[5] + return xres, yres +} + +func minMax(x, y float64) (min, max float64) { + if x > y { + return y, x + } + return x, y +} + +// TransformRectangle applies the transformation matrix to the rectangle represented by the min and the max point of the rectangle +func (tr Matrix) TransformRectangle(x0, y0, x2, y2 float64) (nx0, ny0, nx2, ny2 float64) { + points := []float64{x0, y0, x2, y0, x2, y2, x0, y2} + tr.Transform(points) + points[0], points[2] = minMax(points[0], points[2]) + points[4], points[6] = minMax(points[4], points[6]) + points[1], points[3] = minMax(points[1], points[3]) + points[5], points[7] = minMax(points[5], points[7]) + + nx0 = math.Min(points[0], points[4]) + ny0 = math.Min(points[1], points[5]) + nx2 = math.Max(points[2], points[6]) + ny2 = math.Max(points[3], points[7]) + return nx0, ny0, nx2, ny2 +} + +// InverseTransform applies the transformation inverse matrix to the rectangle represented by the min and the max point of the rectangle +func (tr Matrix) InverseTransform(points []float64) { + d := tr.Determinant() // matrix determinant + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = ((x-tr[4])*tr[3] - (y-tr[5])*tr[2]) / d + points[j] = ((y-tr[5])*tr[0] - (x-tr[4])*tr[1]) / d + } +} + +// InverseTransformPoint applies the transformation inverse matrix to point. It returns the point the transformed point. +func (tr Matrix) InverseTransformPoint(x, y float64) (xres, yres float64) { + d := tr.Determinant() // matrix determinant + xres = ((x-tr[4])*tr[3] - (y-tr[5])*tr[2]) / d + yres = ((y-tr[5])*tr[0] - (x-tr[4])*tr[1]) / d + return xres, yres +} + +// VectorTransform applies the transformation matrix to points without using the translation parameter of the affine matrix. +// It modify the points passed in parameter. +func (tr Matrix) VectorTransform(points []float64) { + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = x*tr[0] + y*tr[2] + points[j] = x*tr[1] + y*tr[3] + } +} + +// NewIdentityMatrix creates an identity transformation matrix. +func NewIdentityMatrix() Matrix { + return Matrix{1, 0, 0, 1, 0, 0} +} + +// NewTranslationMatrix creates a transformation matrix with a translation tx and ty translation parameter +func NewTranslationMatrix(tx, ty float64) Matrix { + return Matrix{1, 0, 0, 1, tx, ty} +} + +// NewScaleMatrix creates a transformation matrix with a sx, sy scale factor +func NewScaleMatrix(sx, sy float64) Matrix { + return Matrix{sx, 0, 0, sy, 0, 0} +} + +// NewRotationMatrix creates a rotation transformation matrix. angle is in radian +func NewRotationMatrix(angle float64) Matrix { + c := math.Cos(angle) + s := math.Sin(angle) + return Matrix{c, s, -s, c, 0, 0} +} + +// NewMatrixFromRects creates a transformation matrix, combining a scale and a translation, that transform rectangle1 into rectangle2. +func NewMatrixFromRects(rectangle1, rectangle2 [4]float64) Matrix { + xScale := (rectangle2[2] - rectangle2[0]) / (rectangle1[2] - rectangle1[0]) + yScale := (rectangle2[3] - rectangle2[1]) / (rectangle1[3] - rectangle1[1]) + xOffset := rectangle2[0] - (rectangle1[0] * xScale) + yOffset := rectangle2[1] - (rectangle1[1] * yScale) + return Matrix{xScale, 0, 0, yScale, xOffset, yOffset} +} + +// Inverse computes the inverse matrix +func (tr *Matrix) Inverse() { + d := tr.Determinant() // matrix determinant + tr0, tr1, tr2, tr3, tr4, tr5 := tr[0], tr[1], tr[2], tr[3], tr[4], tr[5] + tr[0] = tr3 / d + tr[1] = -tr1 / d + tr[2] = -tr2 / d + tr[3] = tr0 / d + tr[4] = (tr2*tr5 - tr3*tr4) / d + tr[5] = (tr1*tr4 - tr0*tr5) / d +} + +// Copy copies the matrix. +func (tr Matrix) Copy() Matrix { + var result Matrix + copy(result[:], tr[:]) + return result +} + +// Compose multiplies trToConcat x tr +func (tr *Matrix) Compose(trToCompose Matrix) { + tr0, tr1, tr2, tr3, tr4, tr5 := tr[0], tr[1], tr[2], tr[3], tr[4], tr[5] + tr[0] = trToCompose[0]*tr0 + trToCompose[1]*tr2 + tr[1] = trToCompose[1]*tr3 + trToCompose[0]*tr1 + tr[2] = trToCompose[2]*tr0 + trToCompose[3]*tr2 + tr[3] = trToCompose[3]*tr3 + trToCompose[2]*tr1 + tr[4] = trToCompose[4]*tr0 + trToCompose[5]*tr2 + tr4 + tr[5] = trToCompose[5]*tr3 + trToCompose[4]*tr1 + tr5 +} + +// Scale adds a scale to the matrix +func (tr *Matrix) Scale(sx, sy float64) { + tr[0] = sx * tr[0] + tr[1] = sx * tr[1] + tr[2] = sy * tr[2] + tr[3] = sy * tr[3] +} + +// Translate adds a translation to the matrix +func (tr *Matrix) Translate(tx, ty float64) { + tr[4] = tx*tr[0] + ty*tr[2] + tr[4] + tr[5] = ty*tr[3] + tx*tr[1] + tr[5] +} + +// Rotate adds a rotation to the matrix. +func (tr *Matrix) Rotate(radians float64) { + c := math.Cos(radians) + s := math.Sin(radians) + t0 := c*tr[0] + s*tr[2] + t1 := s*tr[3] + c*tr[1] + t2 := c*tr[2] - s*tr[0] + t3 := c*tr[3] - s*tr[1] + tr[0] = t0 + tr[1] = t1 + tr[2] = t2 + tr[3] = t3 +} + +// GetTranslation gets the matrix traslation. +func (tr Matrix) GetTranslation() (x, y float64) { + return tr[4], tr[5] +} + +// GetScaling gets the matrix scaling. +func (tr Matrix) GetScaling() (x, y float64) { + return tr[0], tr[3] +} + +// GetScale computes a scale for the matrix +func (tr Matrix) GetScale() float64 { + x := 0.707106781*tr[0] + 0.707106781*tr[1] + y := 0.707106781*tr[2] + 0.707106781*tr[3] + return math.Sqrt(x*x + y*y) +} + +// ******************** Testing ******************** + +// Equals tests if a two transformation are equal. A tolerance is applied when comparing matrix elements. +func (tr Matrix) Equals(tr2 Matrix) bool { + for i := 0; i < 6; i = i + 1 { + if !fequals(tr[i], tr2[i]) { + return false + } + } + return true +} + +// IsIdentity tests if a transformation is the identity transformation. A tolerance is applied when comparing matrix elements. +func (tr Matrix) IsIdentity() bool { + return fequals(tr[4], 0) && fequals(tr[5], 0) && tr.IsTranslation() +} + +// IsTranslation tests if a transformation is is a pure translation. A tolerance is applied when comparing matrix elements. +func (tr Matrix) IsTranslation() bool { + return fequals(tr[0], 1) && fequals(tr[1], 0) && fequals(tr[2], 0) && fequals(tr[3], 1) +} + +// fequals compares two floats. return true if the distance between the two floats is less than epsilon, false otherwise +func fequals(float1, float2 float64) bool { + return math.Abs(float1-float2) <= epsilon +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/painter.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/painter.go new file mode 100644 index 00000000..1353449a --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/painter.go @@ -0,0 +1,31 @@ +package drawing + +import ( + "image" + "image/color" + + "golang.org/x/image/draw" + "golang.org/x/image/math/f64" + + "github.com/golang/freetype/raster" +) + +// Painter implements the freetype raster.Painter and has a SetColor method like the RGBAPainter +type Painter interface { + raster.Painter + SetColor(color color.Color) +} + +// DrawImage draws an image into dest using an affine transformation matrix, an op and a filter +func DrawImage(src image.Image, dest draw.Image, tr Matrix, op draw.Op, filter ImageFilter) { + var transformer draw.Transformer + switch filter { + case LinearFilter: + transformer = draw.NearestNeighbor + case BilinearFilter: + transformer = draw.BiLinear + case BicubicFilter: + transformer = draw.CatmullRom + } + transformer.Transform(dest, f64.Aff3{tr[0], tr[1], tr[4], tr[2], tr[3], tr[5]}, src, src.Bounds(), op, nil) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/path.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/path.go new file mode 100644 index 00000000..20f2d2ed --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/path.go @@ -0,0 +1,186 @@ +package drawing + +import ( + "fmt" + "math" +) + +// PathBuilder describes the interface for path drawing. +type PathBuilder interface { + // LastPoint returns the current point of the current sub path + LastPoint() (x, y float64) + // MoveTo creates a new subpath that start at the specified point + MoveTo(x, y float64) + // LineTo adds a line to the current subpath + LineTo(x, y float64) + // QuadCurveTo adds a quadratic Bézier curve to the current subpath + QuadCurveTo(cx, cy, x, y float64) + // CubicCurveTo adds a cubic Bézier curve to the current subpath + CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) + // ArcTo adds an arc to the current subpath + ArcTo(cx, cy, rx, ry, startAngle, angle float64) + // Close creates a line from the current point to the last MoveTo + // point (if not the same) and mark the path as closed so the + // first and last lines join nicely. + Close() +} + +// PathComponent represents component of a path +type PathComponent int + +const ( + // MoveToComponent is a MoveTo component in a Path + MoveToComponent PathComponent = iota + // LineToComponent is a LineTo component in a Path + LineToComponent + // QuadCurveToComponent is a QuadCurveTo component in a Path + QuadCurveToComponent + // CubicCurveToComponent is a CubicCurveTo component in a Path + CubicCurveToComponent + // ArcToComponent is a ArcTo component in a Path + ArcToComponent + // CloseComponent is a ArcTo component in a Path + CloseComponent +) + +// Path stores points +type Path struct { + // Components is a slice of PathComponent in a Path and mark the role of each points in the Path + Components []PathComponent + // Points are combined with Components to have a specific role in the path + Points []float64 + // Last Point of the Path + x, y float64 +} + +func (p *Path) appendToPath(cmd PathComponent, points ...float64) { + p.Components = append(p.Components, cmd) + p.Points = append(p.Points, points...) +} + +// LastPoint returns the current point of the current path +func (p *Path) LastPoint() (x, y float64) { + return p.x, p.y +} + +// MoveTo starts a new path at (x, y) position +func (p *Path) MoveTo(x, y float64) { + p.appendToPath(MoveToComponent, x, y) + p.x = x + p.y = y +} + +// LineTo adds a line to the current path +func (p *Path) LineTo(x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(LineToComponent, x, y) + p.x = x + p.y = y +} + +// QuadCurveTo adds a quadratic bezier curve to the current path +func (p *Path) QuadCurveTo(cx, cy, x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(QuadCurveToComponent, cx, cy, x, y) + p.x = x + p.y = y +} + +// CubicCurveTo adds a cubic bezier curve to the current path +func (p *Path) CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(CubicCurveToComponent, cx1, cy1, cx2, cy2, x, y) + p.x = x + p.y = y +} + +// ArcTo adds an arc to the path +func (p *Path) ArcTo(cx, cy, rx, ry, startAngle, delta float64) { + endAngle := startAngle + delta + clockWise := true + if delta < 0 { + clockWise = false + } + // normalize + if clockWise { + for endAngle < startAngle { + endAngle += math.Pi * 2.0 + } + } else { + for startAngle < endAngle { + startAngle += math.Pi * 2.0 + } + } + startX := cx + math.Cos(startAngle)*rx + startY := cy + math.Sin(startAngle)*ry + if len(p.Components) > 0 { + p.LineTo(startX, startY) + } else { + p.MoveTo(startX, startY) + } + p.appendToPath(ArcToComponent, cx, cy, rx, ry, startAngle, delta) + p.x = cx + math.Cos(endAngle)*rx + p.y = cy + math.Sin(endAngle)*ry +} + +// Close closes the current path +func (p *Path) Close() { + p.appendToPath(CloseComponent) +} + +// Copy make a clone of the current path and return it +func (p *Path) Copy() (dest *Path) { + dest = new(Path) + dest.Components = make([]PathComponent, len(p.Components)) + copy(dest.Components, p.Components) + dest.Points = make([]float64, len(p.Points)) + copy(dest.Points, p.Points) + dest.x, dest.y = p.x, p.y + return dest +} + +// Clear reset the path +func (p *Path) Clear() { + p.Components = p.Components[0:0] + p.Points = p.Points[0:0] + return +} + +// IsEmpty returns true if the path is empty +func (p *Path) IsEmpty() bool { + return len(p.Components) == 0 +} + +// String returns a debug text view of the path +func (p *Path) String() string { + s := "" + j := 0 + for _, cmd := range p.Components { + switch cmd { + case MoveToComponent: + s += fmt.Sprintf("MoveTo: %f, %f\n", p.Points[j], p.Points[j+1]) + j = j + 2 + case LineToComponent: + s += fmt.Sprintf("LineTo: %f, %f\n", p.Points[j], p.Points[j+1]) + j = j + 2 + case QuadCurveToComponent: + s += fmt.Sprintf("QuadCurveTo: %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3]) + j = j + 4 + case CubicCurveToComponent: + s += fmt.Sprintf("CubicCurveTo: %f, %f, %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3], p.Points[j+4], p.Points[j+5]) + j = j + 6 + case ArcToComponent: + s += fmt.Sprintf("ArcTo: %f, %f, %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3], p.Points[j+4], p.Points[j+5]) + j = j + 6 + case CloseComponent: + s += "Close\n" + } + } + return s +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/raster_graphic_context.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/raster_graphic_context.go new file mode 100644 index 00000000..1ca0c30f --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/raster_graphic_context.go @@ -0,0 +1,283 @@ +package drawing + +import ( + "errors" + "image" + "image/color" + "math" + + "github.com/golang/freetype/raster" + "github.com/golang/freetype/truetype" + "golang.org/x/image/draw" + "golang.org/x/image/font" + "golang.org/x/image/math/fixed" +) + +// NewRasterGraphicContext creates a new Graphic context from an image. +func NewRasterGraphicContext(img draw.Image) (*RasterGraphicContext, error) { + var painter Painter + switch selectImage := img.(type) { + case *image.RGBA: + painter = raster.NewRGBAPainter(selectImage) + default: + return nil, errors.New("NewRasterGraphicContext() :: invalid image type") + } + return NewRasterGraphicContextWithPainter(img, painter), nil +} + +// NewRasterGraphicContextWithPainter creates a new Graphic context from an image and a Painter (see Freetype-go) +func NewRasterGraphicContextWithPainter(img draw.Image, painter Painter) *RasterGraphicContext { + width, height := img.Bounds().Dx(), img.Bounds().Dy() + return &RasterGraphicContext{ + NewStackGraphicContext(), + img, + painter, + raster.NewRasterizer(width, height), + raster.NewRasterizer(width, height), + &truetype.GlyphBuf{}, + DefaultDPI, + } +} + +// RasterGraphicContext is the implementation of GraphicContext for a raster image +type RasterGraphicContext struct { + *StackGraphicContext + img draw.Image + painter Painter + fillRasterizer *raster.Rasterizer + strokeRasterizer *raster.Rasterizer + glyphBuf *truetype.GlyphBuf + DPI float64 +} + +// SetDPI sets the screen resolution in dots per inch. +func (rgc *RasterGraphicContext) SetDPI(dpi float64) { + rgc.DPI = dpi + rgc.recalc() +} + +// GetDPI returns the resolution of the Image GraphicContext +func (rgc *RasterGraphicContext) GetDPI() float64 { + return rgc.DPI +} + +// Clear fills the current canvas with a default transparent color +func (rgc *RasterGraphicContext) Clear() { + width, height := rgc.img.Bounds().Dx(), rgc.img.Bounds().Dy() + rgc.ClearRect(0, 0, width, height) +} + +// ClearRect fills the current canvas with a default transparent color at the specified rectangle +func (rgc *RasterGraphicContext) ClearRect(x1, y1, x2, y2 int) { + imageColor := image.NewUniform(rgc.current.FillColor) + draw.Draw(rgc.img, image.Rect(x1, y1, x2, y2), imageColor, image.ZP, draw.Over) +} + +// DrawImage draws the raster image in the current canvas +func (rgc *RasterGraphicContext) DrawImage(img image.Image) { + DrawImage(img, rgc.img, rgc.current.Tr, draw.Over, BilinearFilter) +} + +// FillString draws the text at point (0, 0) +func (rgc *RasterGraphicContext) FillString(text string) (cursor float64, err error) { + cursor, err = rgc.FillStringAt(text, 0, 0) + return +} + +// FillStringAt draws the text at the specified point (x, y) +func (rgc *RasterGraphicContext) FillStringAt(text string, x, y float64) (cursor float64, err error) { + cursor, err = rgc.CreateStringPath(text, x, y) + rgc.Fill() + return +} + +// StrokeString draws the contour of the text at point (0, 0) +func (rgc *RasterGraphicContext) StrokeString(text string) (cursor float64, err error) { + cursor, err = rgc.StrokeStringAt(text, 0, 0) + return +} + +// StrokeStringAt draws the contour of the text at point (x, y) +func (rgc *RasterGraphicContext) StrokeStringAt(text string, x, y float64) (cursor float64, err error) { + cursor, err = rgc.CreateStringPath(text, x, y) + rgc.Stroke() + return +} + +func (rgc *RasterGraphicContext) drawGlyph(glyph truetype.Index, dx, dy float64) error { + if err := rgc.glyphBuf.Load(rgc.current.Font, fixed.Int26_6(rgc.current.Scale), glyph, font.HintingNone); err != nil { + return err + } + e0 := 0 + for _, e1 := range rgc.glyphBuf.Ends { + DrawContour(rgc, rgc.glyphBuf.Points[e0:e1], dx, dy) + e0 = e1 + } + return nil +} + +// CreateStringPath creates a path from the string s at x, y, and returns the string width. +// The text is placed so that the left edge of the em square of the first character of s +// and the baseline intersect at x, y. The majority of the affected pixels will be +// above and to the right of the point, but some may be below or to the left. +// For example, drawing a string that starts with a 'J' in an italic font may +// affect pixels below and left of the point. +func (rgc *RasterGraphicContext) CreateStringPath(s string, x, y float64) (cursor float64, err error) { + f := rgc.GetFont() + if f == nil { + err = errors.New("No font loaded, cannot continue") + return + } + rgc.recalc() + + startx := x + prev, hasPrev := truetype.Index(0), false + for _, rc := range s { + index := f.Index(rc) + if hasPrev { + x += fUnitsToFloat64(f.Kern(fixed.Int26_6(rgc.current.Scale), prev, index)) + } + err = rgc.drawGlyph(index, x, y) + if err != nil { + cursor = x - startx + return + } + x += fUnitsToFloat64(f.HMetric(fixed.Int26_6(rgc.current.Scale), index).AdvanceWidth) + prev, hasPrev = index, true + } + cursor = x - startx + return +} + +// GetStringBounds returns the approximate pixel bounds of a string. +func (rgc *RasterGraphicContext) GetStringBounds(s string) (left, top, right, bottom float64, err error) { + f := rgc.GetFont() + if f == nil { + err = errors.New("No font loaded, cannot continue") + return + } + rgc.recalc() + + left = math.MaxFloat64 + top = math.MaxFloat64 + + cursor := 0.0 + prev, hasPrev := truetype.Index(0), false + for _, rc := range s { + index := f.Index(rc) + if hasPrev { + cursor += fUnitsToFloat64(f.Kern(fixed.Int26_6(rgc.current.Scale), prev, index)) + } + + if err = rgc.glyphBuf.Load(rgc.current.Font, fixed.Int26_6(rgc.current.Scale), index, font.HintingNone); err != nil { + return + } + e0 := 0 + for _, e1 := range rgc.glyphBuf.Ends { + ps := rgc.glyphBuf.Points[e0:e1] + for _, p := range ps { + x, y := pointToF64Point(p) + top = math.Min(top, y) + bottom = math.Max(bottom, y) + left = math.Min(left, x+cursor) + right = math.Max(right, x+cursor) + } + e0 = e1 + } + cursor += fUnitsToFloat64(f.HMetric(fixed.Int26_6(rgc.current.Scale), index).AdvanceWidth) + prev, hasPrev = index, true + } + return +} + +// recalc recalculates scale and bounds values from the font size, screen +// resolution and font metrics, and invalidates the glyph cache. +func (rgc *RasterGraphicContext) recalc() { + rgc.current.Scale = rgc.current.FontSizePoints * float64(rgc.DPI) +} + +// SetFont sets the font used to draw text. +func (rgc *RasterGraphicContext) SetFont(font *truetype.Font) { + rgc.current.Font = font +} + +// GetFont returns the font used to draw text. +func (rgc *RasterGraphicContext) GetFont() *truetype.Font { + return rgc.current.Font +} + +// SetFontSize sets the font size in points (as in ``a 12 point font''). +func (rgc *RasterGraphicContext) SetFontSize(fontSizePoints float64) { + rgc.current.FontSizePoints = fontSizePoints + rgc.recalc() +} + +func (rgc *RasterGraphicContext) paint(rasterizer *raster.Rasterizer, color color.Color) { + rgc.painter.SetColor(color) + rasterizer.Rasterize(rgc.painter) + rasterizer.Clear() + rgc.current.Path.Clear() +} + +// Stroke strokes the paths with the color specified by SetStrokeColor +func (rgc *RasterGraphicContext) Stroke(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.strokeRasterizer.UseNonZeroWinding = true + + stroker := NewLineStroker(rgc.current.Cap, rgc.current.Join, Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.strokeRasterizer}}) + stroker.HalfLineWidth = rgc.current.LineWidth / 2 + + var liner Flattener + if rgc.current.Dash != nil && len(rgc.current.Dash) > 0 { + liner = NewDashVertexConverter(rgc.current.Dash, rgc.current.DashOffset, stroker) + } else { + liner = stroker + } + for _, p := range paths { + Flatten(p, liner, rgc.current.Tr.GetScale()) + } + + rgc.paint(rgc.strokeRasterizer, rgc.current.StrokeColor) +} + +// Fill fills the paths with the color specified by SetFillColor +func (rgc *RasterGraphicContext) Fill(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.fillRasterizer.UseNonZeroWinding = rgc.current.FillRule == FillRuleWinding + + flattener := Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.fillRasterizer}} + for _, p := range paths { + Flatten(p, flattener, rgc.current.Tr.GetScale()) + } + + rgc.paint(rgc.fillRasterizer, rgc.current.FillColor) +} + +// FillStroke first fills the paths and than strokes them +func (rgc *RasterGraphicContext) FillStroke(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.fillRasterizer.UseNonZeroWinding = rgc.current.FillRule == FillRuleWinding + rgc.strokeRasterizer.UseNonZeroWinding = true + + flattener := Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.fillRasterizer}} + + stroker := NewLineStroker(rgc.current.Cap, rgc.current.Join, Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.strokeRasterizer}}) + stroker.HalfLineWidth = rgc.current.LineWidth / 2 + + var liner Flattener + if rgc.current.Dash != nil && len(rgc.current.Dash) > 0 { + liner = NewDashVertexConverter(rgc.current.Dash, rgc.current.DashOffset, stroker) + } else { + liner = stroker + } + + demux := DemuxFlattener{Flatteners: []Flattener{flattener, liner}} + for _, p := range paths { + Flatten(p, demux, rgc.current.Tr.GetScale()) + } + + // Fill + rgc.paint(rgc.fillRasterizer, rgc.current.FillColor) + // Stroke + rgc.paint(rgc.strokeRasterizer, rgc.current.StrokeColor) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stack_graphic_context.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stack_graphic_context.go new file mode 100644 index 00000000..c3243c9c --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stack_graphic_context.go @@ -0,0 +1,211 @@ +package drawing + +import ( + "image" + "image/color" + + "github.com/golang/freetype/truetype" +) + +// StackGraphicContext is a context that does thngs. +type StackGraphicContext struct { + current *ContextStack +} + +// ContextStack is a graphic context implementation. +type ContextStack struct { + Tr Matrix + Path *Path + LineWidth float64 + Dash []float64 + DashOffset float64 + StrokeColor color.Color + FillColor color.Color + FillRule FillRule + Cap LineCap + Join LineJoin + + FontSizePoints float64 + Font *truetype.Font + + Scale float64 + + Previous *ContextStack +} + +// NewStackGraphicContext Create a new Graphic context from an image +func NewStackGraphicContext() *StackGraphicContext { + gc := &StackGraphicContext{} + gc.current = new(ContextStack) + gc.current.Tr = NewIdentityMatrix() + gc.current.Path = new(Path) + gc.current.LineWidth = 1.0 + gc.current.StrokeColor = image.Black + gc.current.FillColor = image.White + gc.current.Cap = RoundCap + gc.current.FillRule = FillRuleEvenOdd + gc.current.Join = RoundJoin + gc.current.FontSizePoints = 10 + return gc +} + +// GetMatrixTransform returns the matrix transform. +func (gc *StackGraphicContext) GetMatrixTransform() Matrix { + return gc.current.Tr +} + +// SetMatrixTransform sets the matrix transform. +func (gc *StackGraphicContext) SetMatrixTransform(tr Matrix) { + gc.current.Tr = tr +} + +// ComposeMatrixTransform composes a transform into the current transform. +func (gc *StackGraphicContext) ComposeMatrixTransform(tr Matrix) { + gc.current.Tr.Compose(tr) +} + +// Rotate rotates the matrix transform by an angle in degrees. +func (gc *StackGraphicContext) Rotate(angle float64) { + gc.current.Tr.Rotate(angle) +} + +// Translate translates a transform. +func (gc *StackGraphicContext) Translate(tx, ty float64) { + gc.current.Tr.Translate(tx, ty) +} + +// Scale scales a transform. +func (gc *StackGraphicContext) Scale(sx, sy float64) { + gc.current.Tr.Scale(sx, sy) +} + +// SetStrokeColor sets the stroke color. +func (gc *StackGraphicContext) SetStrokeColor(c color.Color) { + gc.current.StrokeColor = c +} + +// SetFillColor sets the fill color. +func (gc *StackGraphicContext) SetFillColor(c color.Color) { + gc.current.FillColor = c +} + +// SetFillRule sets the fill rule. +func (gc *StackGraphicContext) SetFillRule(f FillRule) { + gc.current.FillRule = f +} + +// SetLineWidth sets the line width. +func (gc *StackGraphicContext) SetLineWidth(lineWidth float64) { + gc.current.LineWidth = lineWidth +} + +// SetLineCap sets the line cap. +func (gc *StackGraphicContext) SetLineCap(cap LineCap) { + gc.current.Cap = cap +} + +// SetLineJoin sets the line join. +func (gc *StackGraphicContext) SetLineJoin(join LineJoin) { + gc.current.Join = join +} + +// SetLineDash sets the line dash. +func (gc *StackGraphicContext) SetLineDash(dash []float64, dashOffset float64) { + gc.current.Dash = dash + gc.current.DashOffset = dashOffset +} + +// SetFontSize sets the font size. +func (gc *StackGraphicContext) SetFontSize(fontSizePoints float64) { + gc.current.FontSizePoints = fontSizePoints +} + +// GetFontSize gets the font size. +func (gc *StackGraphicContext) GetFontSize() float64 { + return gc.current.FontSizePoints +} + +// SetFont sets the current font. +func (gc *StackGraphicContext) SetFont(f *truetype.Font) { + gc.current.Font = f +} + +// GetFont returns the font. +func (gc *StackGraphicContext) GetFont() *truetype.Font { + return gc.current.Font +} + +// BeginPath starts a new path. +func (gc *StackGraphicContext) BeginPath() { + gc.current.Path.Clear() +} + +// IsEmpty returns if the path is empty. +func (gc *StackGraphicContext) IsEmpty() bool { + return gc.current.Path.IsEmpty() +} + +// LastPoint returns the last point on the path. +func (gc *StackGraphicContext) LastPoint() (x float64, y float64) { + return gc.current.Path.LastPoint() +} + +// MoveTo moves the cursor for a path. +func (gc *StackGraphicContext) MoveTo(x, y float64) { + gc.current.Path.MoveTo(x, y) +} + +// LineTo draws a line. +func (gc *StackGraphicContext) LineTo(x, y float64) { + gc.current.Path.LineTo(x, y) +} + +// QuadCurveTo draws a quad curve. +func (gc *StackGraphicContext) QuadCurveTo(cx, cy, x, y float64) { + gc.current.Path.QuadCurveTo(cx, cy, x, y) +} + +// CubicCurveTo draws a cubic curve. +func (gc *StackGraphicContext) CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) { + gc.current.Path.CubicCurveTo(cx1, cy1, cx2, cy2, x, y) +} + +// ArcTo draws an arc. +func (gc *StackGraphicContext) ArcTo(cx, cy, rx, ry, startAngle, delta float64) { + gc.current.Path.ArcTo(cx, cy, rx, ry, startAngle, delta) +} + +// Close closes a path. +func (gc *StackGraphicContext) Close() { + gc.current.Path.Close() +} + +// Save pushes a context onto the stack. +func (gc *StackGraphicContext) Save() { + context := new(ContextStack) + context.FontSizePoints = gc.current.FontSizePoints + context.Font = gc.current.Font + context.LineWidth = gc.current.LineWidth + context.StrokeColor = gc.current.StrokeColor + context.FillColor = gc.current.FillColor + context.FillRule = gc.current.FillRule + context.Dash = gc.current.Dash + context.DashOffset = gc.current.DashOffset + context.Cap = gc.current.Cap + context.Join = gc.current.Join + context.Path = gc.current.Path.Copy() + context.Font = gc.current.Font + context.Scale = gc.current.Scale + copy(context.Tr[:], gc.current.Tr[:]) + context.Previous = gc.current + gc.current = context +} + +// Restore restores the previous context. +func (gc *StackGraphicContext) Restore() { + if gc.current.Previous != nil { + oldContext := gc.current + gc.current = gc.current.Previous + oldContext.Previous = nil + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stroker.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stroker.go new file mode 100644 index 00000000..e3ae0705 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/stroker.go @@ -0,0 +1,85 @@ +// Copyright 2010 The draw2d Authors. All rights reserved. +// created: 13/12/2010 by Laurent Le Goff + +package drawing + +// NewLineStroker creates a new line stroker. +func NewLineStroker(c LineCap, j LineJoin, flattener Flattener) *LineStroker { + l := new(LineStroker) + l.Flattener = flattener + l.HalfLineWidth = 0.5 + l.Cap = c + l.Join = j + return l +} + +// LineStroker draws the stroke portion of a line. +type LineStroker struct { + Flattener Flattener + HalfLineWidth float64 + Cap LineCap + Join LineJoin + vertices []float64 + rewind []float64 + x, y, nx, ny float64 +} + +// MoveTo implements the path builder interface. +func (l *LineStroker) MoveTo(x, y float64) { + l.x, l.y = x, y +} + +// LineTo implements the path builder interface. +func (l *LineStroker) LineTo(x, y float64) { + l.line(l.x, l.y, x, y) +} + +// LineJoin implements the path builder interface. +func (l *LineStroker) LineJoin() {} + +func (l *LineStroker) line(x1, y1, x2, y2 float64) { + dx := (x2 - x1) + dy := (y2 - y1) + d := vectorDistance(dx, dy) + if d != 0 { + nx := dy * l.HalfLineWidth / d + ny := -(dx * l.HalfLineWidth / d) + l.appendVertex(x1+nx, y1+ny, x2+nx, y2+ny, x1-nx, y1-ny, x2-nx, y2-ny) + l.x, l.y, l.nx, l.ny = x2, y2, nx, ny + } +} + +// Close implements the path builder interface. +func (l *LineStroker) Close() { + if len(l.vertices) > 1 { + l.appendVertex(l.vertices[0], l.vertices[1], l.rewind[0], l.rewind[1]) + } +} + +// End implements the path builder interface. +func (l *LineStroker) End() { + if len(l.vertices) > 1 { + l.Flattener.MoveTo(l.vertices[0], l.vertices[1]) + for i, j := 2, 3; j < len(l.vertices); i, j = i+2, j+2 { + l.Flattener.LineTo(l.vertices[i], l.vertices[j]) + } + } + for i, j := len(l.rewind)-2, len(l.rewind)-1; j > 0; i, j = i-2, j-2 { + l.Flattener.LineTo(l.rewind[i], l.rewind[j]) + } + if len(l.vertices) > 1 { + l.Flattener.LineTo(l.vertices[0], l.vertices[1]) + } + l.Flattener.End() + // reinit vertices + l.vertices = l.vertices[0:0] + l.rewind = l.rewind[0:0] + l.x, l.y, l.nx, l.ny = 0, 0, 0, 0 + +} + +func (l *LineStroker) appendVertex(vertices ...float64) { + s := len(vertices) / 2 + l.vertices = append(l.vertices, vertices[:s]...) + l.rewind = append(l.rewind, vertices[s:]...) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/text.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/text.go new file mode 100644 index 00000000..d7ff5c28 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/text.go @@ -0,0 +1,67 @@ +package drawing + +import ( + "github.com/golang/freetype/truetype" + "golang.org/x/image/math/fixed" +) + +// DrawContour draws the given closed contour at the given sub-pixel offset. +func DrawContour(path PathBuilder, ps []truetype.Point, dx, dy float64) { + if len(ps) == 0 { + return + } + startX, startY := pointToF64Point(ps[0]) + path.MoveTo(startX+dx, startY+dy) + q0X, q0Y, on0 := startX, startY, true + for _, p := range ps[1:] { + qX, qY := pointToF64Point(p) + on := p.Flags&0x01 != 0 + if on { + if on0 { + path.LineTo(qX+dx, qY+dy) + } else { + path.QuadCurveTo(q0X+dx, q0Y+dy, qX+dx, qY+dy) + } + } else if !on0 { + midX := (q0X + qX) / 2 + midY := (q0Y + qY) / 2 + path.QuadCurveTo(q0X+dx, q0Y+dy, midX+dx, midY+dy) + } + q0X, q0Y, on0 = qX, qY, on + } + // Close the curve. + if on0 { + path.LineTo(startX+dx, startY+dy) + } else { + path.QuadCurveTo(q0X+dx, q0Y+dy, startX+dx, startY+dy) + } +} + +// FontExtents contains font metric information. +type FontExtents struct { + // Ascent is the distance that the text + // extends above the baseline. + Ascent float64 + + // Descent is the distance that the text + // extends below the baseline. The descent + // is given as a negative value. + Descent float64 + + // Height is the distance from the lowest + // descending point to the highest ascending + // point. + Height float64 +} + +// Extents returns the FontExtents for a font. +// TODO needs to read this https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#intro +func Extents(font *truetype.Font, size float64) FontExtents { + bounds := font.Bounds(fixed.Int26_6(font.FUnitsPerEm())) + scale := size / float64(font.FUnitsPerEm()) + return FontExtents{ + Ascent: float64(bounds.Max.Y) * scale, + Descent: float64(bounds.Min.Y) * scale, + Height: float64(bounds.Max.Y-bounds.Min.Y) * scale, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/transformer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/transformer.go new file mode 100644 index 00000000..4e317206 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/transformer.go @@ -0,0 +1,39 @@ +// Copyright 2010 The draw2d Authors. All rights reserved. +// created: 13/12/2010 by Laurent Le Goff + +package drawing + +// Transformer apply the Matrix transformation tr +type Transformer struct { + Tr Matrix + Flattener Flattener +} + +// MoveTo implements the path builder interface. +func (t Transformer) MoveTo(x, y float64) { + u := x*t.Tr[0] + y*t.Tr[2] + t.Tr[4] + v := x*t.Tr[1] + y*t.Tr[3] + t.Tr[5] + t.Flattener.MoveTo(u, v) +} + +// LineTo implements the path builder interface. +func (t Transformer) LineTo(x, y float64) { + u := x*t.Tr[0] + y*t.Tr[2] + t.Tr[4] + v := x*t.Tr[1] + y*t.Tr[3] + t.Tr[5] + t.Flattener.LineTo(u, v) +} + +// LineJoin implements the path builder interface. +func (t Transformer) LineJoin() { + t.Flattener.LineJoin() +} + +// Close implements the path builder interface. +func (t Transformer) Close() { + t.Flattener.Close() +} + +// End implements the path builder interface. +func (t Transformer) End() { + t.Flattener.End() +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/util.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/util.go new file mode 100644 index 00000000..1eba3ff9 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/drawing/util.go @@ -0,0 +1,68 @@ +package drawing + +import ( + "math" + + "golang.org/x/image/math/fixed" + + "github.com/golang/freetype/raster" + "github.com/golang/freetype/truetype" +) + +// PixelsToPoints returns the points for a given number of pixels at a DPI. +func PixelsToPoints(dpi, pixels float64) (points float64) { + points = (pixels * 72.0) / dpi + return +} + +// PointsToPixels returns the pixels for a given number of points at a DPI. +func PointsToPixels(dpi, points float64) (pixels float64) { + pixels = (points * dpi) / 72.0 + return +} + +func abs(i int) int { + if i < 0 { + return -i + } + return i +} + +func distance(x1, y1, x2, y2 float64) float64 { + return vectorDistance(x2-x1, y2-y1) +} + +func vectorDistance(dx, dy float64) float64 { + return float64(math.Sqrt(dx*dx + dy*dy)) +} + +func toFtCap(c LineCap) raster.Capper { + switch c { + case RoundCap: + return raster.RoundCapper + case ButtCap: + return raster.ButtCapper + case SquareCap: + return raster.SquareCapper + } + return raster.RoundCapper +} + +func toFtJoin(j LineJoin) raster.Joiner { + switch j { + case RoundJoin: + return raster.RoundJoiner + case BevelJoin: + return raster.BevelJoiner + } + return raster.RoundJoiner +} + +func pointToF64Point(p truetype.Point) (x, y float64) { + return fUnitsToFloat64(p.X), -fUnitsToFloat64(p.Y) +} + +func fUnitsToFloat64(x fixed.Int26_6) float64 { + scaled := x << 2 + return float64(scaled/256) + float64(scaled%256)/256.0 +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/ema_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/ema_series.go new file mode 100644 index 00000000..44415b58 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/ema_series.go @@ -0,0 +1,131 @@ +package chart + +import "fmt" + +const ( + // DefaultEMAPeriod is the default EMA period used in the sigma calculation. + DefaultEMAPeriod = 12 +) + +// Interface Assertions. +var ( + _ Series = (*EMASeries)(nil) + _ FirstValuesProvider = (*EMASeries)(nil) + _ LastValuesProvider = (*EMASeries)(nil) +) + +// EMASeries is a computed series. +type EMASeries struct { + Name string + Style Style + YAxis YAxisType + + Period int + InnerSeries ValuesProvider + + cache []float64 +} + +// GetName returns the name of the time series. +func (ema EMASeries) GetName() string { + return ema.Name +} + +// GetStyle returns the line style. +func (ema EMASeries) GetStyle() Style { + return ema.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (ema EMASeries) GetYAxis() YAxisType { + return ema.YAxis +} + +// GetPeriod returns the window size. +func (ema EMASeries) GetPeriod() int { + if ema.Period == 0 { + return DefaultEMAPeriod + } + return ema.Period +} + +// Len returns the number of elements in the series. +func (ema EMASeries) Len() int { + return ema.InnerSeries.Len() +} + +// GetSigma returns the smoothing factor for the serise. +func (ema EMASeries) GetSigma() float64 { + return 2.0 / (float64(ema.GetPeriod()) + 1) +} + +// GetValues gets a value at a given index. +func (ema *EMASeries) GetValues(index int) (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + vx, _ := ema.InnerSeries.GetValues(index) + x = vx + y = ema.cache[index] + return +} + +// GetFirstValues computes the first moving average value. +func (ema *EMASeries) GetFirstValues() (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + x, _ = ema.InnerSeries.GetValues(0) + y = ema.cache[0] + return +} + +// GetLastValues computes the last moving average value but walking back window size samples, +// and recomputing the last moving average chunk. +func (ema *EMASeries) GetLastValues() (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + lastIndex := ema.InnerSeries.Len() - 1 + x, _ = ema.InnerSeries.GetValues(lastIndex) + y = ema.cache[lastIndex] + return +} + +func (ema *EMASeries) ensureCachedValues() { + seriesLength := ema.InnerSeries.Len() + ema.cache = make([]float64, seriesLength) + sigma := ema.GetSigma() + for x := 0; x < seriesLength; x++ { + _, y := ema.InnerSeries.GetValues(x) + if x == 0 { + ema.cache[x] = y + continue + } + previousEMA := ema.cache[x-1] + ema.cache[x] = ((y - previousEMA) * sigma) + previousEMA + } +} + +// Render renders the series. +func (ema *EMASeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := ema.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, ema) +} + +// Validate validates the series. +func (ema *EMASeries) Validate() error { + if ema.InnerSeries == nil { + return fmt.Errorf("ema series requires InnerSeries to be set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/fileutil.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/fileutil.go new file mode 100644 index 00000000..f1a77687 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/fileutil.go @@ -0,0 +1,49 @@ +package chart + +import ( + "bufio" + "io" + "os" +) + +// ReadLines reads a file and calls the handler for each line. +func ReadLines(filePath string, handler func(string) error) error { + f, err := os.Open(filePath) + if err != nil { + return err + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := scanner.Text() + err = handler(line) + if err != nil { + return err + } + } + return nil +} + +// ReadChunks reads a file in `chunkSize` pieces, dispatched to the handler. +func ReadChunks(filePath string, chunkSize int, handler func([]byte) error) error { + f, err := os.Open(filePath) + if err != nil { + return err + } + defer f.Close() + + chunk := make([]byte, chunkSize) + for { + readBytes, err := f.Read(chunk) + if err == io.EOF { + break + } + readData := chunk[:readBytes] + err = handler(readData) + if err != nil { + return err + } + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/first_value_annotation.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/first_value_annotation.go new file mode 100644 index 00000000..2b214b34 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/first_value_annotation.go @@ -0,0 +1,37 @@ +package chart + +import "fmt" + +// FirstValueAnnotation returns an annotation series of just the first value of a value provider as an annotation. +func FirstValueAnnotation(innerSeries ValuesProvider, vfs ...ValueFormatter) AnnotationSeries { + var vf ValueFormatter + if len(vfs) > 0 { + vf = vfs[0] + } else if typed, isTyped := innerSeries.(ValueFormatterProvider); isTyped { + _, vf = typed.GetValueFormatters() + } else { + vf = FloatValueFormatter + } + + var firstValue Value2 + if typed, isTyped := innerSeries.(FirstValuesProvider); isTyped { + firstValue.XValue, firstValue.YValue = typed.GetFirstValues() + firstValue.Label = vf(firstValue.YValue) + } else { + firstValue.XValue, firstValue.YValue = innerSeries.GetValues(0) + firstValue.Label = vf(firstValue.YValue) + } + + var seriesName string + var seriesStyle Style + if typed, isTyped := innerSeries.(Series); isTyped { + seriesName = fmt.Sprintf("%s - First Value", typed.GetName()) + seriesStyle = typed.GetStyle() + } + + return AnnotationSeries{ + Name: seriesName, + Style: seriesStyle, + Annotations: []Value2{firstValue}, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/font.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/font.go new file mode 100644 index 00000000..401143bc --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/font.go @@ -0,0 +1,29 @@ +package chart + +import ( + "sync" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/roboto" +) + +var ( + _defaultFontLock sync.Mutex + _defaultFont *truetype.Font +) + +// GetDefaultFont returns the default font (Roboto-Medium). +func GetDefaultFont() (*truetype.Font, error) { + if _defaultFont == nil { + _defaultFontLock.Lock() + defer _defaultFontLock.Unlock() + if _defaultFont == nil { + font, err := truetype.Parse(roboto.Roboto) + if err != nil { + return nil, err + } + _defaultFont = font + } + } + return _defaultFont, nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/grid_line.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/grid_line.go new file mode 100644 index 00000000..80274bda --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/grid_line.go @@ -0,0 +1,72 @@ +package chart + +// GridLineProvider is a type that provides grid lines. +type GridLineProvider interface { + GetGridLines(ticks []Tick, isVertical bool, majorStyle, minorStyle Style) []GridLine +} + +// GridLine is a line on a graph canvas. +type GridLine struct { + IsMinor bool + Style Style + Value float64 +} + +// Major returns if the gridline is a `major` line. +func (gl GridLine) Major() bool { + return !gl.IsMinor +} + +// Minor returns if the gridline is a `minor` line. +func (gl GridLine) Minor() bool { + return gl.IsMinor +} + +// Render renders the gridline +func (gl GridLine) Render(r Renderer, canvasBox Box, ra Range, isVertical bool, defaults Style) { + r.SetStrokeColor(gl.Style.GetStrokeColor(defaults.GetStrokeColor())) + r.SetStrokeWidth(gl.Style.GetStrokeWidth(defaults.GetStrokeWidth())) + r.SetStrokeDashArray(gl.Style.GetStrokeDashArray(defaults.GetStrokeDashArray())) + + if isVertical { + lineLeft := canvasBox.Left + ra.Translate(gl.Value) + lineBottom := canvasBox.Bottom + lineTop := canvasBox.Top + + r.MoveTo(lineLeft, lineBottom) + r.LineTo(lineLeft, lineTop) + r.Stroke() + } else { + lineLeft := canvasBox.Left + lineRight := canvasBox.Right + lineHeight := canvasBox.Bottom - ra.Translate(gl.Value) + + r.MoveTo(lineLeft, lineHeight) + r.LineTo(lineRight, lineHeight) + r.Stroke() + } +} + +// GenerateGridLines generates grid lines. +func GenerateGridLines(ticks []Tick, majorStyle, minorStyle Style) []GridLine { + var gl []GridLine + isMinor := false + + if len(ticks) < 3 { + return gl + } + + for _, t := range ticks[1 : len(ticks)-1] { + s := majorStyle + if isMinor { + s = minorStyle + } + gl = append(gl, GridLine{ + Style: s, + IsMinor: isMinor, + Value: t.Value, + }) + isMinor = !isMinor + } + return gl +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/histogram_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/histogram_series.go new file mode 100644 index 00000000..a21571da --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/histogram_series.go @@ -0,0 +1,67 @@ +package chart + +import "fmt" + +// HistogramSeries is a special type of series that draws as a histogram. +// Some peculiarities; it will always be lower bounded at 0 (at the very least). +// This may alter ranges a bit and generally you want to put a histogram series on it's own y-axis. +type HistogramSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider +} + +// GetName implements Series.GetName. +func (hs HistogramSeries) GetName() string { + return hs.Name +} + +// GetStyle implements Series.GetStyle. +func (hs HistogramSeries) GetStyle() Style { + return hs.Style +} + +// GetYAxis returns which yaxis the series is mapped to. +func (hs HistogramSeries) GetYAxis() YAxisType { + return hs.YAxis +} + +// Len implements BoundedValuesProvider.Len. +func (hs HistogramSeries) Len() int { + return hs.InnerSeries.Len() +} + +// GetValues implements ValuesProvider.GetValues. +func (hs HistogramSeries) GetValues(index int) (x, y float64) { + return hs.InnerSeries.GetValues(index) +} + +// GetBoundedValues implements BoundedValuesProvider.GetBoundedValue +func (hs HistogramSeries) GetBoundedValues(index int) (x, y1, y2 float64) { + vx, vy := hs.InnerSeries.GetValues(index) + + x = vx + + if vy > 0 { + y1 = vy + return + } + + y2 = vy + return +} + +// Render implements Series.Render. +func (hs HistogramSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := hs.Style.InheritFrom(defaults) + Draw.HistogramSeries(r, canvasBox, xrange, yrange, style, hs) +} + +// Validate validates the series. +func (hs HistogramSeries) Validate() error { + if hs.InnerSeries == nil { + return fmt.Errorf("histogram series requires InnerSeries to be set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/image_writer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/image_writer.go new file mode 100644 index 00000000..85ce0c07 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/image_writer.go @@ -0,0 +1,42 @@ +package chart + +import ( + "bytes" + "errors" + "image" + "image/png" +) + +// RGBACollector is a render target for a chart. +type RGBACollector interface { + SetRGBA(i *image.RGBA) +} + +// ImageWriter is a special type of io.Writer that produces a final image. +type ImageWriter struct { + rgba *image.RGBA + contents *bytes.Buffer +} + +func (ir *ImageWriter) Write(buffer []byte) (int, error) { + if ir.contents == nil { + ir.contents = bytes.NewBuffer([]byte{}) + } + return ir.contents.Write(buffer) +} + +// SetRGBA sets a raw version of the image. +func (ir *ImageWriter) SetRGBA(i *image.RGBA) { + ir.rgba = i +} + +// Image returns an *image.Image for the result. +func (ir *ImageWriter) Image() (image.Image, error) { + if ir.rgba != nil { + return ir.rgba, nil + } + if ir.contents != nil && ir.contents.Len() > 0 { + return png.Decode(ir.contents) + } + return nil, errors.New("no valid sources for image data, cannot continue") +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/jet.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/jet.go new file mode 100644 index 00000000..cce8c856 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/jet.go @@ -0,0 +1,33 @@ +package chart + +import "github.com/wcharczuk/go-chart/v2/drawing" + +// Jet is a color map provider based on matlab's jet color map. +func Jet(v, vmin, vmax float64) drawing.Color { + c := drawing.Color{R: 0xff, G: 0xff, B: 0xff, A: 0xff} // white + var dv float64 + + if v < vmin { + v = vmin + } + if v > vmax { + v = vmax + } + dv = vmax - vmin + + if v < (vmin + 0.25*dv) { + c.R = 0 + c.G = drawing.ColorChannelFromFloat(4 * (v - vmin) / dv) + } else if v < (vmin + 0.5*dv) { + c.R = 0 + c.B = drawing.ColorChannelFromFloat(1 + 4*(vmin+0.25*dv-v)/dv) + } else if v < (vmin + 0.75*dv) { + c.R = drawing.ColorChannelFromFloat(4 * (v - vmin - 0.5*dv) / dv) + c.B = 0 + } else { + c.G = drawing.ColorChannelFromFloat(1 + 4*(vmin+0.75*dv-v)/dv) + c.B = 0 + } + + return c +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/last_value_annotation_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/last_value_annotation_series.go new file mode 100644 index 00000000..550c3679 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/last_value_annotation_series.go @@ -0,0 +1,37 @@ +package chart + +import "fmt" + +// LastValueAnnotationSeries returns an annotation series of just the last value of a value provider. +func LastValueAnnotationSeries(innerSeries ValuesProvider, vfs ...ValueFormatter) AnnotationSeries { + var vf ValueFormatter + if len(vfs) > 0 { + vf = vfs[0] + } else if typed, isTyped := innerSeries.(ValueFormatterProvider); isTyped { + _, vf = typed.GetValueFormatters() + } else { + vf = FloatValueFormatter + } + + var lastValue Value2 + if typed, isTyped := innerSeries.(LastValuesProvider); isTyped { + lastValue.XValue, lastValue.YValue = typed.GetLastValues() + lastValue.Label = vf(lastValue.YValue) + } else { + lastValue.XValue, lastValue.YValue = innerSeries.GetValues(innerSeries.Len() - 1) + lastValue.Label = vf(lastValue.YValue) + } + + var seriesName string + var seriesStyle Style + if typed, isTyped := innerSeries.(Series); isTyped { + seriesName = fmt.Sprintf("%s - Last Value", typed.GetName()) + seriesStyle = typed.GetStyle() + } + + return AnnotationSeries{ + Name: seriesName, + Style: seriesStyle, + Annotations: []Value2{lastValue}, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/legend.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/legend.go new file mode 100644 index 00000000..fbd48ed0 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/legend.go @@ -0,0 +1,331 @@ +package chart + +import ( + "github.com/wcharczuk/go-chart/v2/drawing" +) + +// Legend returns a legend renderable function. +func Legend(c *Chart, userDefaults ...Style) Renderable { + return func(r Renderer, cb Box, chartDefaults Style) { + legendDefaults := Style{ + FillColor: drawing.ColorWhite, + FontColor: DefaultTextColor, + FontSize: 8.0, + StrokeColor: DefaultAxisColor, + StrokeWidth: DefaultAxisLineWidth, + } + + var legendStyle Style + if len(userDefaults) > 0 { + legendStyle = userDefaults[0].InheritFrom(chartDefaults.InheritFrom(legendDefaults)) + } else { + legendStyle = chartDefaults.InheritFrom(legendDefaults) + } + + // DEFAULTS + legendPadding := Box{ + Top: 5, + Left: 5, + Right: 5, + Bottom: 5, + } + lineTextGap := 5 + lineLengthMinimum := 25 + + var labels []string + var lines []Style + for index, s := range c.Series { + if !s.GetStyle().Hidden { + if _, isAnnotationSeries := s.(AnnotationSeries); !isAnnotationSeries { + labels = append(labels, s.GetName()) + lines = append(lines, s.GetStyle().InheritFrom(c.styleDefaultsSeries(index))) + } + } + } + + legend := Box{ + Top: cb.Top, + Left: cb.Left, + // bottom and right will be sized by the legend content + relevant padding. + } + + legendContent := Box{ + Top: legend.Top + legendPadding.Top, + Left: legend.Left + legendPadding.Left, + Right: legend.Left + legendPadding.Left, + Bottom: legend.Top + legendPadding.Top, + } + + legendStyle.GetTextOptions().WriteToRenderer(r) + + // measure + labelCount := 0 + for x := 0; x < len(labels); x++ { + if len(labels[x]) > 0 { + tb := r.MeasureText(labels[x]) + if labelCount > 0 { + legendContent.Bottom += DefaultMinimumTickVerticalSpacing + } + legendContent.Bottom += tb.Height() + right := legendContent.Left + tb.Width() + lineTextGap + lineLengthMinimum + legendContent.Right = MaxInt(legendContent.Right, right) + labelCount++ + } + } + + legend = legend.Grow(legendContent) + legend.Right = legendContent.Right + legendPadding.Right + legend.Bottom = legendContent.Bottom + legendPadding.Bottom + + Draw.Box(r, legend, legendStyle) + + legendStyle.GetTextOptions().WriteToRenderer(r) + + ycursor := legendContent.Top + tx := legendContent.Left + legendCount := 0 + var label string + for x := 0; x < len(labels); x++ { + label = labels[x] + if len(label) > 0 { + if legendCount > 0 { + ycursor += DefaultMinimumTickVerticalSpacing + } + + tb := r.MeasureText(label) + + ty := ycursor + tb.Height() + r.Text(label, tx, ty) + + th2 := tb.Height() >> 1 + + lx := tx + tb.Width() + lineTextGap + ly := ty - th2 + lx2 := legendContent.Right - legendPadding.Right + + r.SetStrokeColor(lines[x].GetStrokeColor()) + r.SetStrokeWidth(lines[x].GetStrokeWidth()) + r.SetStrokeDashArray(lines[x].GetStrokeDashArray()) + + r.MoveTo(lx, ly) + r.LineTo(lx2, ly) + r.Stroke() + + ycursor += tb.Height() + legendCount++ + } + } + } +} + +// LegendThin is a legend that doesn't obscure the chart area. +func LegendThin(c *Chart, userDefaults ...Style) Renderable { + return func(r Renderer, cb Box, chartDefaults Style) { + legendDefaults := Style{ + FillColor: drawing.ColorWhite, + FontColor: DefaultTextColor, + FontSize: 8.0, + StrokeColor: DefaultAxisColor, + StrokeWidth: DefaultAxisLineWidth, + Padding: Box{ + Top: 2, + Left: 7, + Right: 7, + Bottom: 5, + }, + } + + var legendStyle Style + if len(userDefaults) > 0 { + legendStyle = userDefaults[0].InheritFrom(chartDefaults.InheritFrom(legendDefaults)) + } else { + legendStyle = chartDefaults.InheritFrom(legendDefaults) + } + + r.SetFont(legendStyle.GetFont()) + r.SetFontColor(legendStyle.GetFontColor()) + r.SetFontSize(legendStyle.GetFontSize()) + + var labels []string + var lines []Style + for index, s := range c.Series { + if !s.GetStyle().Hidden { + if _, isAnnotationSeries := s.(AnnotationSeries); !isAnnotationSeries { + labels = append(labels, s.GetName()) + lines = append(lines, s.GetStyle().InheritFrom(c.styleDefaultsSeries(index))) + } + } + } + + var textHeight int + var textWidth int + var textBox Box + for x := 0; x < len(labels); x++ { + if len(labels[x]) > 0 { + textBox = r.MeasureText(labels[x]) + textHeight = MaxInt(textBox.Height(), textHeight) + textWidth = MaxInt(textBox.Width(), textWidth) + } + } + + legendBoxHeight := textHeight + legendStyle.Padding.Top + legendStyle.Padding.Bottom + chartPadding := cb.Top + legendYMargin := (chartPadding - legendBoxHeight) >> 1 + + legendBox := Box{ + Left: cb.Left, + Right: cb.Right, + Top: legendYMargin, + Bottom: legendYMargin + legendBoxHeight, + } + + Draw.Box(r, legendBox, legendDefaults) + + r.SetFont(legendStyle.GetFont()) + r.SetFontColor(legendStyle.GetFontColor()) + r.SetFontSize(legendStyle.GetFontSize()) + + lineTextGap := 5 + lineLengthMinimum := 25 + + tx := legendBox.Left + legendStyle.Padding.Left + ty := legendYMargin + legendStyle.Padding.Top + textHeight + var label string + var lx, ly int + th2 := textHeight >> 1 + for index := range labels { + label = labels[index] + if len(label) > 0 { + textBox = r.MeasureText(label) + r.Text(label, tx, ty) + + lx = tx + textBox.Width() + lineTextGap + ly = ty - th2 + + r.SetStrokeColor(lines[index].GetStrokeColor()) + r.SetStrokeWidth(lines[index].GetStrokeWidth()) + r.SetStrokeDashArray(lines[index].GetStrokeDashArray()) + + r.MoveTo(lx, ly) + r.LineTo(lx+lineLengthMinimum, ly) + r.Stroke() + + tx += textBox.Width() + DefaultMinimumTickHorizontalSpacing + lineTextGap + lineLengthMinimum + } + } + } +} + +// LegendLeft is a legend that is designed for longer series lists. +func LegendLeft(c *Chart, userDefaults ...Style) Renderable { + return func(r Renderer, cb Box, chartDefaults Style) { + legendDefaults := Style{ + FillColor: drawing.ColorWhite, + FontColor: DefaultTextColor, + FontSize: 8.0, + StrokeColor: DefaultAxisColor, + StrokeWidth: DefaultAxisLineWidth, + } + + var legendStyle Style + if len(userDefaults) > 0 { + legendStyle = userDefaults[0].InheritFrom(chartDefaults.InheritFrom(legendDefaults)) + } else { + legendStyle = chartDefaults.InheritFrom(legendDefaults) + } + + // DEFAULTS + legendPadding := Box{ + Top: 5, + Left: 5, + Right: 5, + Bottom: 5, + } + lineTextGap := 5 + lineLengthMinimum := 25 + + var labels []string + var lines []Style + for index, s := range c.Series { + if !s.GetStyle().Hidden { + if _, isAnnotationSeries := s.(AnnotationSeries); !isAnnotationSeries { + labels = append(labels, s.GetName()) + lines = append(lines, s.GetStyle().InheritFrom(c.styleDefaultsSeries(index))) + } + } + } + + legend := Box{ + Top: 5, + Left: 5, + // bottom and right will be sized by the legend content + relevant padding. + } + + legendContent := Box{ + Top: legend.Top + legendPadding.Top, + Left: legend.Left + legendPadding.Left, + Right: legend.Left + legendPadding.Left, + Bottom: legend.Top + legendPadding.Top, + } + + legendStyle.GetTextOptions().WriteToRenderer(r) + + // measure + labelCount := 0 + for x := 0; x < len(labels); x++ { + if len(labels[x]) > 0 { + tb := r.MeasureText(labels[x]) + if labelCount > 0 { + legendContent.Bottom += DefaultMinimumTickVerticalSpacing + } + legendContent.Bottom += tb.Height() + right := legendContent.Left + tb.Width() + lineTextGap + lineLengthMinimum + legendContent.Right = MaxInt(legendContent.Right, right) + labelCount++ + } + } + + legend = legend.Grow(legendContent) + legend.Right = legendContent.Right + legendPadding.Right + legend.Bottom = legendContent.Bottom + legendPadding.Bottom + + Draw.Box(r, legend, legendStyle) + + legendStyle.GetTextOptions().WriteToRenderer(r) + + ycursor := legendContent.Top + tx := legendContent.Left + legendCount := 0 + var label string + for x := 0; x < len(labels); x++ { + label = labels[x] + if len(label) > 0 { + if legendCount > 0 { + ycursor += DefaultMinimumTickVerticalSpacing + } + + tb := r.MeasureText(label) + + ty := ycursor + tb.Height() + r.Text(label, tx, ty) + + th2 := tb.Height() >> 1 + + lx := tx + tb.Width() + lineTextGap + ly := ty - th2 + lx2 := legendContent.Right - legendPadding.Right + + r.SetStrokeColor(lines[x].GetStrokeColor()) + r.SetStrokeWidth(lines[x].GetStrokeWidth()) + r.SetStrokeDashArray(lines[x].GetStrokeDashArray()) + + r.MoveTo(lx, ly) + r.LineTo(lx2, ly) + r.Stroke() + + ycursor += tb.Height() + legendCount++ + } + } + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_coefficient_provider.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_coefficient_provider.go new file mode 100644 index 00000000..9701f6ba --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_coefficient_provider.go @@ -0,0 +1,42 @@ +package chart + +// LinearCoefficientProvider is a type that returns linear cofficients. +type LinearCoefficientProvider interface { + Coefficients() (m, b, stdev, avg float64) +} + +// LinearCoefficients returns a fixed linear coefficient pair. +func LinearCoefficients(m, b float64) LinearCoefficientSet { + return LinearCoefficientSet{ + M: m, + B: b, + } +} + +// NormalizedLinearCoefficients returns a fixed linear coefficient pair. +func NormalizedLinearCoefficients(m, b, stdev, avg float64) LinearCoefficientSet { + return LinearCoefficientSet{ + M: m, + B: b, + StdDev: stdev, + Avg: avg, + } +} + +// LinearCoefficientSet is the m and b values for the linear equation in the form: +// y = (m*x) + b +type LinearCoefficientSet struct { + M float64 + B float64 + StdDev float64 + Avg float64 +} + +// Coefficients returns the coefficients. +func (lcs LinearCoefficientSet) Coefficients() (m, b, stdev, avg float64) { + m = lcs.M + b = lcs.B + stdev = lcs.StdDev + avg = lcs.Avg + return +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_regression_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_regression_series.go new file mode 100644 index 00000000..8ff8b1a5 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_regression_series.go @@ -0,0 +1,187 @@ +package chart + +import ( + "fmt" +) + +// Interface Assertions. +var ( + _ Series = (*LinearRegressionSeries)(nil) + _ FirstValuesProvider = (*LinearRegressionSeries)(nil) + _ LastValuesProvider = (*LinearRegressionSeries)(nil) + _ LinearCoefficientProvider = (*LinearRegressionSeries)(nil) +) + +// LinearRegressionSeries is a series that plots the n-nearest neighbors +// linear regression for the values. +type LinearRegressionSeries struct { + Name string + Style Style + YAxis YAxisType + + Limit int + Offset int + InnerSeries ValuesProvider + + m float64 + b float64 + avgx float64 + stddevx float64 +} + +// Coefficients returns the linear coefficients for the series. +func (lrs LinearRegressionSeries) Coefficients() (m, b, stdev, avg float64) { + if lrs.IsZero() { + lrs.computeCoefficients() + } + + m = lrs.m + b = lrs.b + stdev = lrs.stddevx + avg = lrs.avgx + return +} + +// GetName returns the name of the time series. +func (lrs LinearRegressionSeries) GetName() string { + return lrs.Name +} + +// GetStyle returns the line style. +func (lrs LinearRegressionSeries) GetStyle() Style { + return lrs.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (lrs LinearRegressionSeries) GetYAxis() YAxisType { + return lrs.YAxis +} + +// Len returns the number of elements in the series. +func (lrs LinearRegressionSeries) Len() int { + return MinInt(lrs.GetLimit(), lrs.InnerSeries.Len()-lrs.GetOffset()) +} + +// GetLimit returns the window size. +func (lrs LinearRegressionSeries) GetLimit() int { + if lrs.Limit == 0 { + return lrs.InnerSeries.Len() + } + return lrs.Limit +} + +// GetEndIndex returns the effective limit end. +func (lrs LinearRegressionSeries) GetEndIndex() int { + windowEnd := lrs.GetOffset() + lrs.GetLimit() + innerSeriesLastIndex := lrs.InnerSeries.Len() - 1 + return MinInt(windowEnd, innerSeriesLastIndex) +} + +// GetOffset returns the data offset. +func (lrs LinearRegressionSeries) GetOffset() int { + if lrs.Offset == 0 { + return 0 + } + return lrs.Offset +} + +// GetValues gets a value at a given index. +func (lrs *LinearRegressionSeries) GetValues(index int) (x, y float64) { + if lrs.InnerSeries == nil || lrs.InnerSeries.Len() == 0 { + return + } + if lrs.IsZero() { + lrs.computeCoefficients() + } + offset := lrs.GetOffset() + effectiveIndex := MinInt(index+offset, lrs.InnerSeries.Len()) + x, y = lrs.InnerSeries.GetValues(effectiveIndex) + y = (lrs.m * lrs.normalize(x)) + lrs.b + return +} + +// GetFirstValues computes the first linear regression value. +func (lrs *LinearRegressionSeries) GetFirstValues() (x, y float64) { + if lrs.InnerSeries == nil || lrs.InnerSeries.Len() == 0 { + return + } + if lrs.IsZero() { + lrs.computeCoefficients() + } + x, y = lrs.InnerSeries.GetValues(0) + y = (lrs.m * lrs.normalize(x)) + lrs.b + return +} + +// GetLastValues computes the last linear regression value. +func (lrs *LinearRegressionSeries) GetLastValues() (x, y float64) { + if lrs.InnerSeries == nil || lrs.InnerSeries.Len() == 0 { + return + } + if lrs.IsZero() { + lrs.computeCoefficients() + } + endIndex := lrs.GetEndIndex() + x, y = lrs.InnerSeries.GetValues(endIndex) + y = (lrs.m * lrs.normalize(x)) + lrs.b + return +} + +// Render renders the series. +func (lrs *LinearRegressionSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := lrs.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, lrs) +} + +// Validate validates the series. +func (lrs *LinearRegressionSeries) Validate() error { + if lrs.InnerSeries == nil { + return fmt.Errorf("linear regression series requires InnerSeries to be set") + } + return nil +} + +// IsZero returns if we've computed the coefficients or not. +func (lrs *LinearRegressionSeries) IsZero() bool { + return lrs.m == 0 && lrs.b == 0 +} + +// +// internal helpers +// + +func (lrs *LinearRegressionSeries) normalize(xvalue float64) float64 { + return (xvalue - lrs.avgx) / lrs.stddevx +} + +// computeCoefficients computes the `m` and `b` terms in the linear formula given by `y = mx+b`. +func (lrs *LinearRegressionSeries) computeCoefficients() { + startIndex := lrs.GetOffset() + endIndex := lrs.GetEndIndex() + + p := float64(endIndex - startIndex) + + xvalues := NewValueBufferWithCapacity(lrs.Len()) + for index := startIndex; index < endIndex; index++ { + x, _ := lrs.InnerSeries.GetValues(index) + xvalues.Enqueue(x) + } + + lrs.avgx = Seq{xvalues}.Average() + lrs.stddevx = Seq{xvalues}.StdDev() + + var sumx, sumy, sumxx, sumxy float64 + for index := startIndex; index < endIndex; index++ { + x, y := lrs.InnerSeries.GetValues(index) + + x = lrs.normalize(x) + + sumx += x + sumy += y + sumxx += x * x + sumxy += x * y + } + + lrs.m = (p*sumxy - sumx*sumy) / (p*sumxx - sumx*sumx) + lrs.b = (sumy / p) - (lrs.m * sumx / p) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_sequence.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_sequence.go new file mode 100644 index 00000000..dda761b0 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_sequence.go @@ -0,0 +1,73 @@ +package chart + +// LinearRange returns an array of values representing the range from start to end, incremented by 1.0. +func LinearRange(start, end float64) []float64 { + return Seq{NewLinearSequence().WithStart(start).WithEnd(end).WithStep(1.0)}.Values() +} + +// LinearRangeWithStep returns the array values of a linear seq with a given start, end and optional step. +func LinearRangeWithStep(start, end, step float64) []float64 { + return Seq{NewLinearSequence().WithStart(start).WithEnd(end).WithStep(step)}.Values() +} + +// NewLinearSequence returns a new linear generator. +func NewLinearSequence() *LinearSeq { + return &LinearSeq{step: 1.0} +} + +// LinearSeq is a stepwise generator. +type LinearSeq struct { + start float64 + end float64 + step float64 +} + +// Start returns the start value. +func (lg LinearSeq) Start() float64 { + return lg.start +} + +// End returns the end value. +func (lg LinearSeq) End() float64 { + return lg.end +} + +// Step returns the step value. +func (lg LinearSeq) Step() float64 { + return lg.step +} + +// Len returns the number of elements in the seq. +func (lg LinearSeq) Len() int { + if lg.start < lg.end { + return int((lg.end-lg.start)/lg.step) + 1 + } + return int((lg.start-lg.end)/lg.step) + 1 +} + +// GetValue returns the value at a given index. +func (lg LinearSeq) GetValue(index int) float64 { + fi := float64(index) + if lg.start < lg.end { + return lg.start + (fi * lg.step) + } + return lg.start - (fi * lg.step) +} + +// WithStart sets the start and returns the linear generator. +func (lg *LinearSeq) WithStart(start float64) *LinearSeq { + lg.start = start + return lg +} + +// WithEnd sets the end and returns the linear generator. +func (lg *LinearSeq) WithEnd(end float64) *LinearSeq { + lg.end = end + return lg +} + +// WithStep sets the step and returns the linear generator. +func (lg *LinearSeq) WithStep(step float64) *LinearSeq { + lg.step = step + return lg +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_series.go new file mode 100644 index 00000000..89afa938 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/linear_series.go @@ -0,0 +1,119 @@ +package chart + +import ( + "fmt" +) + +// Interface Assertions. +var ( + _ Series = (*LinearSeries)(nil) + _ FirstValuesProvider = (*LinearSeries)(nil) + _ LastValuesProvider = (*LinearSeries)(nil) +) + +// LinearSeries is a series that plots a line in a given domain. +type LinearSeries struct { + Name string + Style Style + YAxis YAxisType + + XValues []float64 + InnerSeries LinearCoefficientProvider + + m float64 + b float64 + stdev float64 + avg float64 +} + +// GetName returns the name of the time series. +func (ls LinearSeries) GetName() string { + return ls.Name +} + +// GetStyle returns the line style. +func (ls LinearSeries) GetStyle() Style { + return ls.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (ls LinearSeries) GetYAxis() YAxisType { + return ls.YAxis +} + +// Len returns the number of elements in the series. +func (ls LinearSeries) Len() int { + return len(ls.XValues) +} + +// GetEndIndex returns the effective limit end. +func (ls LinearSeries) GetEndIndex() int { + return len(ls.XValues) - 1 +} + +// GetValues gets a value at a given index. +func (ls *LinearSeries) GetValues(index int) (x, y float64) { + if ls.InnerSeries == nil || len(ls.XValues) == 0 { + return + } + if ls.IsZero() { + ls.computeCoefficients() + } + x = ls.XValues[index] + y = (ls.m * ls.normalize(x)) + ls.b + return +} + +// GetFirstValues computes the first linear regression value. +func (ls *LinearSeries) GetFirstValues() (x, y float64) { + if ls.InnerSeries == nil || len(ls.XValues) == 0 { + return + } + if ls.IsZero() { + ls.computeCoefficients() + } + x, y = ls.GetValues(0) + return +} + +// GetLastValues computes the last linear regression value. +func (ls *LinearSeries) GetLastValues() (x, y float64) { + if ls.InnerSeries == nil || len(ls.XValues) == 0 { + return + } + if ls.IsZero() { + ls.computeCoefficients() + } + x, y = ls.GetValues(ls.GetEndIndex()) + return +} + +// Render renders the series. +func (ls *LinearSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + Draw.LineSeries(r, canvasBox, xrange, yrange, ls.Style.InheritFrom(defaults), ls) +} + +// Validate validates the series. +func (ls LinearSeries) Validate() error { + if ls.InnerSeries == nil { + return fmt.Errorf("linear regression series requires InnerSeries to be set") + } + return nil +} + +// IsZero returns if the linear series has computed coefficients or not. +func (ls LinearSeries) IsZero() bool { + return ls.m == 0 && ls.b == 0 +} + +// computeCoefficients computes the `m` and `b` terms in the linear formula given by `y = mx+b`. +func (ls *LinearSeries) computeCoefficients() { + ls.m, ls.b, ls.stdev, ls.avg = ls.InnerSeries.Coefficients() +} + +func (ls *LinearSeries) normalize(xvalue float64) float64 { + if ls.avg > 0 && ls.stdev > 0 { + return (xvalue - ls.avg) / ls.stdev + } + return xvalue +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/logger.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/logger.go new file mode 100644 index 00000000..28fc0036 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/logger.go @@ -0,0 +1,148 @@ +package chart + +import ( + "fmt" + "io" + "os" + "time" +) + +var ( + _ Logger = (*StdoutLogger)(nil) +) + +// NewLogger returns a new logger. +func NewLogger(options ...LoggerOption) Logger { + stl := &StdoutLogger{ + TimeFormat: time.RFC3339Nano, + Stdout: os.Stdout, + Stderr: os.Stderr, + } + for _, option := range options { + option(stl) + } + return stl +} + +// Logger is a type that implements the logging interface. +type Logger interface { + Info(...interface{}) + Infof(string, ...interface{}) + Debug(...interface{}) + Debugf(string, ...interface{}) + Err(error) + FatalErr(error) + Error(...interface{}) + Errorf(string, ...interface{}) +} + +// Info logs an info message if the logger is set. +func Info(log Logger, arguments ...interface{}) { + if log == nil { + return + } + log.Info(arguments...) +} + +// Infof logs an info message if the logger is set. +func Infof(log Logger, format string, arguments ...interface{}) { + if log == nil { + return + } + log.Infof(format, arguments...) +} + +// Debug logs an debug message if the logger is set. +func Debug(log Logger, arguments ...interface{}) { + if log == nil { + return + } + log.Debug(arguments...) +} + +// Debugf logs an debug message if the logger is set. +func Debugf(log Logger, format string, arguments ...interface{}) { + if log == nil { + return + } + log.Debugf(format, arguments...) +} + +// LoggerOption mutates a stdout logger. +type LoggerOption = func(*StdoutLogger) + +//OptLoggerStdout sets the Stdout writer. +func OptLoggerStdout(wr io.Writer) LoggerOption { + return func(stl *StdoutLogger) { + stl.Stdout = wr + } +} + +// OptLoggerStderr sets the Stdout writer. +func OptLoggerStderr(wr io.Writer) LoggerOption { + return func(stl *StdoutLogger) { + stl.Stderr = wr + } +} + +// StdoutLogger is a basic logger. +type StdoutLogger struct { + TimeFormat string + Stdout io.Writer + Stderr io.Writer +} + +// Info writes an info message. +func (l *StdoutLogger) Info(arguments ...interface{}) { + l.Println(append([]interface{}{"[INFO]"}, arguments...)...) +} + +// Infof writes an info message. +func (l *StdoutLogger) Infof(format string, arguments ...interface{}) { + l.Println(append([]interface{}{"[INFO]"}, fmt.Sprintf(format, arguments...))...) +} + +// Debug writes an debug message. +func (l *StdoutLogger) Debug(arguments ...interface{}) { + l.Println(append([]interface{}{"[DEBUG]"}, arguments...)...) +} + +// Debugf writes an debug message. +func (l *StdoutLogger) Debugf(format string, arguments ...interface{}) { + l.Println(append([]interface{}{"[DEBUG]"}, fmt.Sprintf(format, arguments...))...) +} + +// Error writes an error message. +func (l *StdoutLogger) Error(arguments ...interface{}) { + l.Println(append([]interface{}{"[ERROR]"}, arguments...)...) +} + +// Errorf writes an error message. +func (l *StdoutLogger) Errorf(format string, arguments ...interface{}) { + l.Println(append([]interface{}{"[ERROR]"}, fmt.Sprintf(format, arguments...))...) +} + +// Err writes an error message. +func (l *StdoutLogger) Err(err error) { + if err != nil { + l.Println(append([]interface{}{"[ERROR]"}, err.Error())...) + } +} + +// FatalErr writes an error message and exits. +func (l *StdoutLogger) FatalErr(err error) { + if err != nil { + l.Println(append([]interface{}{"[FATAL]"}, err.Error())...) + os.Exit(1) + } +} + +// Println prints a new message. +func (l *StdoutLogger) Println(arguments ...interface{}) { + fmt.Fprintln(l.Stdout, append([]interface{}{time.Now().UTC().Format(l.TimeFormat)}, arguments...)...) +} + +// Errorln prints a new message. +func (l *StdoutLogger) Errorln(arguments ...interface{}) { + fmt.Fprintln(l.Stderr, append([]interface{}{time.Now().UTC().Format(l.TimeFormat)}, arguments...)...) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/macd_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/macd_series.go new file mode 100644 index 00000000..6d040119 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/macd_series.go @@ -0,0 +1,338 @@ +package chart + +import "fmt" + +const ( + // DefaultMACDPeriodPrimary is the long window. + DefaultMACDPeriodPrimary = 26 + // DefaultMACDPeriodSecondary is the short window. + DefaultMACDPeriodSecondary = 12 + // DefaultMACDSignalPeriod is the signal period to compute for the MACD. + DefaultMACDSignalPeriod = 9 +) + +// MACDSeries computes the difference between the MACD line and the MACD Signal line. +// It is used in technical analysis and gives a lagging indicator of momentum. +type MACDSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider + + PrimaryPeriod int + SecondaryPeriod int + SignalPeriod int + + signal *MACDSignalSeries + macdl *MACDLineSeries +} + +// Validate validates the series. +func (macd MACDSeries) Validate() error { + var err error + if macd.signal != nil { + err = macd.signal.Validate() + } + if err != nil { + return err + } + if macd.macdl != nil { + err = macd.macdl.Validate() + } + if err != nil { + return err + } + return nil +} + +// GetPeriods returns the primary and secondary periods. +func (macd MACDSeries) GetPeriods() (w1, w2, sig int) { + if macd.PrimaryPeriod == 0 { + w1 = DefaultMACDPeriodPrimary + } else { + w1 = macd.PrimaryPeriod + } + if macd.SecondaryPeriod == 0 { + w2 = DefaultMACDPeriodSecondary + } else { + w2 = macd.SecondaryPeriod + } + if macd.SignalPeriod == 0 { + sig = DefaultMACDSignalPeriod + } else { + sig = macd.SignalPeriod + } + return +} + +// GetName returns the name of the time series. +func (macd MACDSeries) GetName() string { + return macd.Name +} + +// GetStyle returns the line style. +func (macd MACDSeries) GetStyle() Style { + return macd.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (macd MACDSeries) GetYAxis() YAxisType { + return macd.YAxis +} + +// Len returns the number of elements in the series. +func (macd MACDSeries) Len() int { + if macd.InnerSeries == nil { + return 0 + } + + return macd.InnerSeries.Len() +} + +// GetValues gets a value at a given index. For MACD it is the signal value. +func (macd *MACDSeries) GetValues(index int) (x float64, y float64) { + if macd.InnerSeries == nil { + return + } + + if macd.signal == nil || macd.macdl == nil { + macd.ensureChildSeries() + } + + _, lv := macd.macdl.GetValues(index) + _, sv := macd.signal.GetValues(index) + + x, _ = macd.InnerSeries.GetValues(index) + y = lv - sv + + return +} + +func (macd *MACDSeries) ensureChildSeries() { + w1, w2, sig := macd.GetPeriods() + + macd.signal = &MACDSignalSeries{ + InnerSeries: macd.InnerSeries, + PrimaryPeriod: w1, + SecondaryPeriod: w2, + SignalPeriod: sig, + } + + macd.macdl = &MACDLineSeries{ + InnerSeries: macd.InnerSeries, + PrimaryPeriod: w1, + SecondaryPeriod: w2, + } +} + +// MACDSignalSeries computes the EMA of the MACDLineSeries. +type MACDSignalSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider + + PrimaryPeriod int + SecondaryPeriod int + SignalPeriod int + + signal *EMASeries +} + +// Validate validates the series. +func (macds MACDSignalSeries) Validate() error { + if macds.signal != nil { + return macds.signal.Validate() + } + return nil +} + +// GetPeriods returns the primary and secondary periods. +func (macds MACDSignalSeries) GetPeriods() (w1, w2, sig int) { + if macds.PrimaryPeriod == 0 { + w1 = DefaultMACDPeriodPrimary + } else { + w1 = macds.PrimaryPeriod + } + if macds.SecondaryPeriod == 0 { + w2 = DefaultMACDPeriodSecondary + } else { + w2 = macds.SecondaryPeriod + } + if macds.SignalPeriod == 0 { + sig = DefaultMACDSignalPeriod + } else { + sig = macds.SignalPeriod + } + return +} + +// GetName returns the name of the time series. +func (macds MACDSignalSeries) GetName() string { + return macds.Name +} + +// GetStyle returns the line style. +func (macds MACDSignalSeries) GetStyle() Style { + return macds.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (macds MACDSignalSeries) GetYAxis() YAxisType { + return macds.YAxis +} + +// Len returns the number of elements in the series. +func (macds *MACDSignalSeries) Len() int { + if macds.InnerSeries == nil { + return 0 + } + + return macds.InnerSeries.Len() +} + +// GetValues gets a value at a given index. For MACD it is the signal value. +func (macds *MACDSignalSeries) GetValues(index int) (x float64, y float64) { + if macds.InnerSeries == nil { + return + } + + if macds.signal == nil { + macds.ensureSignal() + } + x, _ = macds.InnerSeries.GetValues(index) + _, y = macds.signal.GetValues(index) + return +} + +func (macds *MACDSignalSeries) ensureSignal() { + w1, w2, sig := macds.GetPeriods() + + macds.signal = &EMASeries{ + InnerSeries: &MACDLineSeries{ + InnerSeries: macds.InnerSeries, + PrimaryPeriod: w1, + SecondaryPeriod: w2, + }, + Period: sig, + } +} + +// Render renders the series. +func (macds *MACDSignalSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := macds.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, macds) +} + +// MACDLineSeries is a series that computes the inner ema1-ema2 value as a series. +type MACDLineSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider + + PrimaryPeriod int + SecondaryPeriod int + + ema1 *EMASeries + ema2 *EMASeries + + Sigma float64 +} + +// Validate validates the series. +func (macdl MACDLineSeries) Validate() error { + var err error + if macdl.ema1 != nil { + err = macdl.ema1.Validate() + } + if err != nil { + return err + } + if macdl.ema2 != nil { + err = macdl.ema2.Validate() + } + if err != nil { + return err + } + if macdl.InnerSeries == nil { + return fmt.Errorf("MACDLineSeries: must provide an inner series") + } + return nil +} + +// GetName returns the name of the time series. +func (macdl MACDLineSeries) GetName() string { + return macdl.Name +} + +// GetStyle returns the line style. +func (macdl MACDLineSeries) GetStyle() Style { + return macdl.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (macdl MACDLineSeries) GetYAxis() YAxisType { + return macdl.YAxis +} + +// GetPeriods returns the primary and secondary periods. +func (macdl MACDLineSeries) GetPeriods() (w1, w2 int) { + if macdl.PrimaryPeriod == 0 { + w1 = DefaultMACDPeriodPrimary + } else { + w1 = macdl.PrimaryPeriod + } + if macdl.SecondaryPeriod == 0 { + w2 = DefaultMACDPeriodSecondary + } else { + w2 = macdl.SecondaryPeriod + } + return +} + +// Len returns the number of elements in the series. +func (macdl *MACDLineSeries) Len() int { + if macdl.InnerSeries == nil { + return 0 + } + + return macdl.InnerSeries.Len() +} + +// GetValues gets a value at a given index. For MACD it is the signal value. +func (macdl *MACDLineSeries) GetValues(index int) (x float64, y float64) { + if macdl.InnerSeries == nil { + return + } + if macdl.ema1 == nil && macdl.ema2 == nil { + macdl.ensureEMASeries() + } + + x, _ = macdl.InnerSeries.GetValues(index) + + _, emav1 := macdl.ema1.GetValues(index) + _, emav2 := macdl.ema2.GetValues(index) + + y = emav2 - emav1 + return +} + +func (macdl *MACDLineSeries) ensureEMASeries() { + w1, w2 := macdl.GetPeriods() + + macdl.ema1 = &EMASeries{ + InnerSeries: macdl.InnerSeries, + Period: w1, + } + macdl.ema2 = &EMASeries{ + InnerSeries: macdl.InnerSeries, + Period: w2, + } +} + +// Render renders the series. +func (macdl *MACDLineSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := macdl.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, macdl) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/mathutil.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/mathutil.go new file mode 100644 index 00000000..d1f07f9d --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/mathutil.go @@ -0,0 +1,252 @@ +package chart + +import "math" + +const ( + _pi = math.Pi + _2pi = 2 * math.Pi + _3pi4 = (3 * math.Pi) / 4.0 + _4pi3 = (4 * math.Pi) / 3.0 + _3pi2 = (3 * math.Pi) / 2.0 + _5pi4 = (5 * math.Pi) / 4.0 + _7pi4 = (7 * math.Pi) / 4.0 + _pi2 = math.Pi / 2.0 + _pi4 = math.Pi / 4.0 + _d2r = (math.Pi / 180.0) + _r2d = (180.0 / math.Pi) +) + +// MinMax returns the minimum and maximum of a given set of values. +func MinMax(values ...float64) (min, max float64) { + if len(values) == 0 { + return + } + + max = values[0] + min = values[0] + var value float64 + for index := 1; index < len(values); index++ { + value = values[index] + if value < min { + min = value + } + if value > max { + max = value + } + } + return +} + +// MinInt returns the minimum int. +func MinInt(values ...int) (min int) { + if len(values) == 0 { + return + } + + min = values[0] + var value int + for index := 1; index < len(values); index++ { + value = values[index] + if value < min { + min = value + } + } + return +} + +// MaxInt returns the maximum int. +func MaxInt(values ...int) (max int) { + if len(values) == 0 { + return + } + + max = values[0] + var value int + for index := 1; index < len(values); index++ { + value = values[index] + if value > max { + max = value + } + } + return +} + +// AbsInt returns the absolute value of an int. +func AbsInt(value int) int { + if value < 0 { + return -value + } + return value +} + +// DegreesToRadians returns degrees as radians. +func DegreesToRadians(degrees float64) float64 { + return degrees * _d2r +} + +// RadiansToDegrees translates a radian value to a degree value. +func RadiansToDegrees(value float64) float64 { + return math.Mod(value, _2pi) * _r2d +} + +// PercentToRadians converts a normalized value (0,1) to radians. +func PercentToRadians(pct float64) float64 { + return DegreesToRadians(360.0 * pct) +} + +// RadianAdd adds a delta to a base in radians. +func RadianAdd(base, delta float64) float64 { + value := base + delta + if value > _2pi { + return math.Mod(value, _2pi) + } else if value < 0 { + return math.Mod(_2pi+value, _2pi) + } + return value +} + +// DegreesAdd adds a delta to a base in radians. +func DegreesAdd(baseDegrees, deltaDegrees float64) float64 { + value := baseDegrees + deltaDegrees + if value > _2pi { + return math.Mod(value, 360.0) + } else if value < 0 { + return math.Mod(360.0+value, 360.0) + } + return value +} + +// DegreesToCompass returns the degree value in compass / clock orientation. +func DegreesToCompass(deg float64) float64 { + return DegreesAdd(deg, -90.0) +} + +// CirclePoint returns the absolute position of a circle diameter point given +// by the radius and the theta. +func CirclePoint(cx, cy int, radius, thetaRadians float64) (x, y int) { + x = cx + int(radius*math.Sin(thetaRadians)) + y = cy - int(radius*math.Cos(thetaRadians)) + return +} + +// RotateCoordinate rotates a coordinate around a given center by a theta in radians. +func RotateCoordinate(cx, cy, x, y int, thetaRadians float64) (rx, ry int) { + tempX, tempY := float64(x-cx), float64(y-cy) + rotatedX := tempX*math.Cos(thetaRadians) - tempY*math.Sin(thetaRadians) + rotatedY := tempX*math.Sin(thetaRadians) + tempY*math.Cos(thetaRadians) + rx = int(rotatedX) + cx + ry = int(rotatedY) + cy + return +} + +// RoundUp rounds up to a given roundTo value. +func RoundUp(value, roundTo float64) float64 { + if roundTo < 0.000000000000001 { + return value + } + d1 := math.Ceil(value / roundTo) + return d1 * roundTo +} + +// RoundDown rounds down to a given roundTo value. +func RoundDown(value, roundTo float64) float64 { + if roundTo < 0.000000000000001 { + return value + } + d1 := math.Floor(value / roundTo) + return d1 * roundTo +} + +// Normalize returns a set of numbers on the interval [0,1] for a given set of inputs. +// An example: 4,3,2,1 => 0.4, 0.3, 0.2, 0.1 +// Caveat; the total may be < 1.0; there are going to be issues with irrational numbers etc. +func Normalize(values ...float64) []float64 { + var total float64 + for _, v := range values { + total += v + } + output := make([]float64, len(values)) + for x, v := range values { + output[x] = RoundDown(v/total, 0.0001) + } + return output +} + +// Mean returns the mean of a set of values +func Mean(values ...float64) float64 { + return Sum(values...) / float64(len(values)) +} + +// MeanInt returns the mean of a set of integer values. +func MeanInt(values ...int) int { + return SumInt(values...) / len(values) +} + +// Sum sums a set of values. +func Sum(values ...float64) float64 { + var total float64 + for _, v := range values { + total += v + } + return total +} + +// SumInt sums a set of values. +func SumInt(values ...int) int { + var total int + for _, v := range values { + total += v + } + return total +} + +// PercentDifference computes the percentage difference between two values. +// The formula is (v2-v1)/v1. +func PercentDifference(v1, v2 float64) float64 { + if v1 == 0 { + return 0 + } + return (v2 - v1) / v1 +} + +// GetRoundToForDelta returns a `roundTo` value for a given delta. +func GetRoundToForDelta(delta float64) float64 { + startingDeltaBound := math.Pow(10.0, 10.0) + for cursor := startingDeltaBound; cursor > 0; cursor /= 10.0 { + if delta > cursor { + return cursor / 10.0 + } + } + + return 0.0 +} + +// RoundPlaces rounds an input to a given places. +func RoundPlaces(input float64, places int) (rounded float64) { + if math.IsNaN(input) { + return 0.0 + } + + sign := 1.0 + if input < 0 { + sign = -1 + input *= -1 + } + + precision := math.Pow(10, float64(places)) + digit := input * precision + _, decimal := math.Modf(digit) + + if decimal >= 0.5 { + rounded = math.Ceil(digit) + } else { + rounded = math.Floor(digit) + } + + return rounded / precision * sign +} + +func f64i(value float64) int { + r := RoundPlaces(value, 0) + return int(r) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/matrix.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/matrix.go new file mode 100644 index 00000000..2bb4ba4e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/matrix.go @@ -0,0 +1,592 @@ +package matrix + +import ( + "bytes" + "errors" + "fmt" + "math" +) + +const ( + // DefaultEpsilon represents the minimum precision for matrix math operations. + DefaultEpsilon = 0.000001 +) + +var ( + // ErrDimensionMismatch is a typical error. + ErrDimensionMismatch = errors.New("dimension mismatch") + + // ErrSingularValue is a typical error. + ErrSingularValue = errors.New("singular value") +) + +// New returns a new matrix. +func New(rows, cols int, values ...float64) *Matrix { + if len(values) == 0 { + return &Matrix{ + stride: cols, + epsilon: DefaultEpsilon, + elements: make([]float64, rows*cols), + } + } + elems := make([]float64, rows*cols) + copy(elems, values) + return &Matrix{ + stride: cols, + epsilon: DefaultEpsilon, + elements: elems, + } +} + +// Identity returns the identity matrix of a given order. +func Identity(order int) *Matrix { + m := New(order, order) + for i := 0; i < order; i++ { + m.Set(i, i, 1) + } + return m +} + +// Zero returns a matrix of a given size zeroed. +func Zero(rows, cols int) *Matrix { + return New(rows, cols) +} + +// Ones returns an matrix of ones. +func Ones(rows, cols int) *Matrix { + ones := make([]float64, rows*cols) + for i := 0; i < (rows * cols); i++ { + ones[i] = 1 + } + + return &Matrix{ + stride: cols, + epsilon: DefaultEpsilon, + elements: ones, + } +} + +// Eye returns the eye matrix. +func Eye(n int) *Matrix { + m := Zero(n, n) + for i := 0; i < len(m.elements); i += n + 1 { + m.elements[i] = 1 + } + return m +} + +// NewFromArrays creates a matrix from a jagged array set. +func NewFromArrays(a [][]float64) *Matrix { + rows := len(a) + if rows == 0 { + return nil + } + cols := len(a[0]) + m := New(rows, cols) + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + m.Set(row, col, a[row][col]) + } + } + return m +} + +// Matrix represents a 2d dense array of floats. +type Matrix struct { + epsilon float64 + elements []float64 + stride int +} + +// String returns a string representation of the matrix. +func (m *Matrix) String() string { + buffer := bytes.NewBuffer(nil) + rows, cols := m.Size() + + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + buffer.WriteString(f64s(m.Get(row, col))) + buffer.WriteRune(' ') + } + buffer.WriteRune('\n') + } + return buffer.String() +} + +// Epsilon returns the maximum precision for math operations. +func (m *Matrix) Epsilon() float64 { + return m.epsilon +} + +// WithEpsilon sets the epsilon on the matrix and returns a reference to the matrix. +func (m *Matrix) WithEpsilon(epsilon float64) *Matrix { + m.epsilon = epsilon + return m +} + +// Each applies the action to each element of the matrix in +// rows => cols order. +func (m *Matrix) Each(action func(row, col int, value float64)) { + rows, cols := m.Size() + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + action(row, col, m.Get(row, col)) + } + } +} + +// Round rounds all the values in a matrix to it epsilon, +// returning a reference to the original +func (m *Matrix) Round() *Matrix { + rows, cols := m.Size() + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + m.Set(row, col, roundToEpsilon(m.Get(row, col), m.epsilon)) + } + } + return m +} + +// Arrays returns the matrix as a two dimensional jagged array. +func (m *Matrix) Arrays() [][]float64 { + rows, cols := m.Size() + a := make([][]float64, rows) + + for row := 0; row < rows; row++ { + a[row] = make([]float64, cols) + + for col := 0; col < cols; col++ { + a[row][col] = m.Get(row, col) + } + } + return a +} + +// Size returns the dimensions of the matrix. +func (m *Matrix) Size() (rows, cols int) { + rows = len(m.elements) / m.stride + cols = m.stride + return +} + +// IsSquare returns if the row count is equal to the column count. +func (m *Matrix) IsSquare() bool { + return m.stride == (len(m.elements) / m.stride) +} + +// IsSymmetric returns if the matrix is symmetric about its diagonal. +func (m *Matrix) IsSymmetric() bool { + rows, cols := m.Size() + + if rows != cols { + return false + } + + for i := 0; i < rows; i++ { + for j := 0; j < i; j++ { + if m.Get(i, j) != m.Get(j, i) { + return false + } + } + } + return true +} + +// Get returns the element at the given row, col. +func (m *Matrix) Get(row, col int) float64 { + index := (m.stride * row) + col + return m.elements[index] +} + +// Set sets a value. +func (m *Matrix) Set(row, col int, val float64) { + index := (m.stride * row) + col + m.elements[index] = val +} + +// Col returns a column of the matrix as a vector. +func (m *Matrix) Col(col int) Vector { + rows, _ := m.Size() + values := make([]float64, rows) + for row := 0; row < rows; row++ { + values[row] = m.Get(row, col) + } + return Vector(values) +} + +// Row returns a row of the matrix as a vector. +func (m *Matrix) Row(row int) Vector { + _, cols := m.Size() + values := make([]float64, cols) + for col := 0; col < cols; col++ { + values[col] = m.Get(row, col) + } + return Vector(values) +} + +// SubMatrix returns a sub matrix from a given outer matrix. +func (m *Matrix) SubMatrix(i, j, rows, cols int) *Matrix { + return &Matrix{ + elements: m.elements[i*m.stride+j : i*m.stride+j+(rows-1)*m.stride+cols], + stride: m.stride, + epsilon: m.epsilon, + } +} + +// ScaleRow applies a scale to an entire row. +func (m *Matrix) ScaleRow(row int, scale float64) { + startIndex := row * m.stride + for i := startIndex; i < m.stride; i++ { + m.elements[i] = m.elements[i] * scale + } +} + +func (m *Matrix) scaleAddRow(rd int, rs int, f float64) { + indexd := rd * m.stride + indexs := rs * m.stride + for col := 0; col < m.stride; col++ { + m.elements[indexd] += f * m.elements[indexs] + indexd++ + indexs++ + } +} + +// SwapRows swaps a row in the matrix in place. +func (m *Matrix) SwapRows(i, j int) { + var vi, vj float64 + for col := 0; col < m.stride; col++ { + vi = m.Get(i, col) + vj = m.Get(j, col) + m.Set(i, col, vj) + m.Set(j, col, vi) + } +} + +// Augment concatenates two matrices about the horizontal. +func (m *Matrix) Augment(m2 *Matrix) (*Matrix, error) { + mr, mc := m.Size() + m2r, m2c := m2.Size() + if mr != m2r { + return nil, ErrDimensionMismatch + } + + m3 := Zero(mr, mc+m2c) + for row := 0; row < mr; row++ { + for col := 0; col < mc; col++ { + m3.Set(row, col, m.Get(row, col)) + } + for col := 0; col < m2c; col++ { + m3.Set(row, mc+col, m2.Get(row, col)) + } + } + return m3, nil +} + +// Copy returns a duplicate of a given matrix. +func (m *Matrix) Copy() *Matrix { + m2 := &Matrix{stride: m.stride, epsilon: m.epsilon, elements: make([]float64, len(m.elements))} + copy(m2.elements, m.elements) + return m2 +} + +// DiagonalVector returns a vector from the diagonal of a matrix. +func (m *Matrix) DiagonalVector() Vector { + rows, cols := m.Size() + rank := minInt(rows, cols) + values := make([]float64, rank) + + for index := 0; index < rank; index++ { + values[index] = m.Get(index, index) + } + return Vector(values) +} + +// Diagonal returns a matrix from the diagonal of a matrix. +func (m *Matrix) Diagonal() *Matrix { + rows, cols := m.Size() + rank := minInt(rows, cols) + m2 := New(rank, rank) + + for index := 0; index < rank; index++ { + m2.Set(index, index, m.Get(index, index)) + } + return m2 +} + +// Equals returns if a matrix equals another matrix. +func (m *Matrix) Equals(other *Matrix) bool { + if other == nil && m != nil { + return false + } else if other == nil { + return true + } + + if m.stride != other.stride { + return false + } + + msize := len(m.elements) + m2size := len(other.elements) + + if msize != m2size { + return false + } + + for i := 0; i < msize; i++ { + if m.elements[i] != other.elements[i] { + return false + } + } + return true +} + +// L returns the matrix with zeros below the diagonal. +func (m *Matrix) L() *Matrix { + rows, cols := m.Size() + m2 := New(rows, cols) + for row := 0; row < rows; row++ { + for col := row; col < cols; col++ { + m2.Set(row, col, m.Get(row, col)) + } + } + return m2 +} + +// U returns the matrix with zeros above the diagonal. +// Does not include the diagonal. +func (m *Matrix) U() *Matrix { + rows, cols := m.Size() + m2 := New(rows, cols) + for row := 0; row < rows; row++ { + for col := 0; col < row && col < cols; col++ { + m2.Set(row, col, m.Get(row, col)) + } + } + return m2 +} + +// math operations + +// Multiply multiplies two matrices. +func (m *Matrix) Multiply(m2 *Matrix) (m3 *Matrix, err error) { + if m.stride*m2.stride != len(m2.elements) { + return nil, ErrDimensionMismatch + } + + m3 = &Matrix{epsilon: m.epsilon, stride: m2.stride, elements: make([]float64, (len(m.elements)/m.stride)*m2.stride)} + for m1c0, m3x := 0, 0; m1c0 < len(m.elements); m1c0 += m.stride { + for m2r0 := 0; m2r0 < m2.stride; m2r0++ { + for m1x, m2x := m1c0, m2r0; m2x < len(m2.elements); m2x += m2.stride { + m3.elements[m3x] += m.elements[m1x] * m2.elements[m2x] + m1x++ + } + m3x++ + } + } + return +} + +// Pivotize does something i'm not sure what. +func (m *Matrix) Pivotize() *Matrix { + pv := make([]int, m.stride) + + for i := range pv { + pv[i] = i + } + + for j, dx := 0, 0; j < m.stride; j++ { + row := j + max := m.elements[dx] + for i, ixcj := j, dx; i < m.stride; i++ { + if m.elements[ixcj] > max { + max = m.elements[ixcj] + row = i + } + ixcj += m.stride + } + if j != row { + pv[row], pv[j] = pv[j], pv[row] + } + dx += m.stride + 1 + } + p := Zero(m.stride, m.stride) + for r, c := range pv { + p.elements[r*m.stride+c] = 1 + } + return p +} + +// Times returns the product of a matrix and another. +func (m *Matrix) Times(m2 *Matrix) (*Matrix, error) { + mr, mc := m.Size() + m2r, m2c := m2.Size() + + if mc != m2r { + return nil, fmt.Errorf("cannot multiply (%dx%d) and (%dx%d)", mr, mc, m2r, m2c) + //return nil, ErrDimensionMismatch + } + + c := Zero(mr, m2c) + + for i := 0; i < mr; i++ { + sums := c.elements[i*c.stride : (i+1)*c.stride] + for k, a := range m.elements[i*m.stride : i*m.stride+m.stride] { + for j, b := range m2.elements[k*m2.stride : k*m2.stride+m2.stride] { + sums[j] += a * b + } + } + } + + return c, nil +} + +// Decompositions + +// LU performs the LU decomposition. +func (m *Matrix) LU() (l, u, p *Matrix) { + l = Zero(m.stride, m.stride) + u = Zero(m.stride, m.stride) + p = m.Pivotize() + m, _ = p.Multiply(m) + for j, jxc0 := 0, 0; j < m.stride; j++ { + l.elements[jxc0+j] = 1 + for i, ixc0 := 0, 0; ixc0 <= jxc0; i++ { + sum := 0. + for k, kxcj := 0, j; k < i; k++ { + sum += u.elements[kxcj] * l.elements[ixc0+k] + kxcj += m.stride + } + u.elements[ixc0+j] = m.elements[ixc0+j] - sum + ixc0 += m.stride + } + for ixc0 := jxc0; ixc0 < len(m.elements); ixc0 += m.stride { + sum := 0. + for k, kxcj := 0, j; k < j; k++ { + sum += u.elements[kxcj] * l.elements[ixc0+k] + kxcj += m.stride + } + l.elements[ixc0+j] = (m.elements[ixc0+j] - sum) / u.elements[jxc0+j] + } + jxc0 += m.stride + } + return +} + +// QR performs the qr decomposition. +func (m *Matrix) QR() (q, r *Matrix) { + defer func() { + q = q.Round() + r = r.Round() + }() + + rows, cols := m.Size() + qr := m.Copy() + q = New(rows, cols) + r = New(rows, cols) + + var i, j, k int + var norm, s float64 + + for k = 0; k < cols; k++ { + norm = 0 + for i = k; i < rows; i++ { + norm = math.Hypot(norm, qr.Get(i, k)) + } + + if norm != 0 { + if qr.Get(k, k) < 0 { + norm = -norm + } + + for i = k; i < rows; i++ { + qr.Set(i, k, qr.Get(i, k)/norm) + } + qr.Set(k, k, qr.Get(k, k)+1.0) + + for j = k + 1; j < cols; j++ { + s = 0 + for i = k; i < rows; i++ { + s += qr.Get(i, k) * qr.Get(i, j) + } + s = -s / qr.Get(k, k) + for i = k; i < rows; i++ { + qr.Set(i, j, qr.Get(i, j)+s*qr.Get(i, k)) + + if i < j { + r.Set(i, j, qr.Get(i, j)) + } + } + + } + } + + r.Set(k, k, -norm) + + } + + //Q Matrix: + i, j, k = 0, 0, 0 + + for k = cols - 1; k >= 0; k-- { + q.Set(k, k, 1.0) + for j = k; j < cols; j++ { + if qr.Get(k, k) != 0 { + s = 0 + for i = k; i < rows; i++ { + s += qr.Get(i, k) * q.Get(i, j) + } + s = -s / qr.Get(k, k) + for i = k; i < rows; i++ { + q.Set(i, j, q.Get(i, j)+s*qr.Get(i, k)) + } + } + } + } + + return +} + +// Transpose flips a matrix about its diagonal, returning a new copy. +func (m *Matrix) Transpose() *Matrix { + rows, cols := m.Size() + m2 := Zero(cols, rows) + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + m2.Set(j, i, m.Get(i, j)) + } + } + return m2 +} + +// Inverse returns a matrix such that M*I==1. +func (m *Matrix) Inverse() (*Matrix, error) { + if !m.IsSymmetric() { + return nil, ErrDimensionMismatch + } + + rows, cols := m.Size() + + aug, _ := m.Augment(Eye(rows)) + for i := 0; i < rows; i++ { + j := i + for k := i; k < rows; k++ { + if math.Abs(aug.Get(k, i)) > math.Abs(aug.Get(j, i)) { + j = k + } + } + if j != i { + aug.SwapRows(i, j) + } + if aug.Get(i, i) == 0 { + return nil, ErrSingularValue + } + aug.ScaleRow(i, 1.0/aug.Get(i, i)) + for k := 0; k < rows; k++ { + if k == i { + continue + } + aug.scaleAddRow(k, i, -aug.Get(k, i)) + } + } + return aug.SubMatrix(0, cols, rows, cols), nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/regression.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/regression.go new file mode 100644 index 00000000..7aaea7c2 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/regression.go @@ -0,0 +1,45 @@ +package matrix + +import "errors" + +var ( + // ErrPolyRegArraysSameLength is a common error. + ErrPolyRegArraysSameLength = errors.New("polynomial array inputs must be the same length") +) + +// Poly returns the polynomial regress of a given degree over the given values. +func Poly(xvalues, yvalues []float64, degree int) ([]float64, error) { + if len(xvalues) != len(yvalues) { + return nil, ErrPolyRegArraysSameLength + } + + m := len(yvalues) + n := degree + 1 + y := New(m, 1, yvalues...) + x := Zero(m, n) + + for i := 0; i < m; i++ { + ip := float64(1) + for j := 0; j < n; j++ { + x.Set(i, j, ip) + ip *= xvalues[i] + } + } + + q, r := x.QR() + qty, err := q.Transpose().Times(y) + if err != nil { + return nil, err + } + + c := make([]float64, n) + for i := n - 1; i >= 0; i-- { + c[i] = qty.Get(i, 0) + for j := i + 1; j < n; j++ { + c[i] -= c[j] * r.Get(i, j) + } + c[i] /= r.Get(i, i) + } + + return c, nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/util.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/util.go new file mode 100644 index 00000000..5f157796 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/util.go @@ -0,0 +1,36 @@ +package matrix + +import ( + "math" + "strconv" +) + +func minInt(values ...int) int { + min := math.MaxInt32 + + for x := 0; x < len(values); x++ { + if values[x] < min { + min = values[x] + } + } + return min +} + +func maxInt(values ...int) int { + max := math.MinInt32 + + for x := 0; x < len(values); x++ { + if values[x] > max { + max = values[x] + } + } + return max +} + +func f64s(v float64) string { + return strconv.FormatFloat(v, 'f', -1, 64) +} + +func roundToEpsilon(value, epsilon float64) float64 { + return math.Nextafter(value, value) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/vector.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/vector.go new file mode 100644 index 00000000..c8aa3807 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/matrix/vector.go @@ -0,0 +1,17 @@ +package matrix + +// Vector is just an array of values. +type Vector []float64 + +// DotProduct returns the dot product of two vectors. +func (v Vector) DotProduct(v2 Vector) (result float64, err error) { + if len(v) != len(v2) { + err = ErrDimensionMismatch + return + } + + for i := 0; i < len(v); i++ { + result = result + (v[i] * v2[i]) + } + return +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/min_max_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/min_max_series.go new file mode 100644 index 00000000..18d330aa --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/min_max_series.go @@ -0,0 +1,138 @@ +package chart + +import ( + "fmt" + "math" +) + +// MinSeries draws a horizontal line at the minimum value of the inner series. +type MinSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider + + minValue *float64 +} + +// GetName returns the name of the time series. +func (ms MinSeries) GetName() string { + return ms.Name +} + +// GetStyle returns the line style. +func (ms MinSeries) GetStyle() Style { + return ms.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (ms MinSeries) GetYAxis() YAxisType { + return ms.YAxis +} + +// Len returns the number of elements in the series. +func (ms MinSeries) Len() int { + return ms.InnerSeries.Len() +} + +// GetValues gets a value at a given index. +func (ms *MinSeries) GetValues(index int) (x, y float64) { + ms.ensureMinValue() + x, _ = ms.InnerSeries.GetValues(index) + y = *ms.minValue + return +} + +// Render renders the series. +func (ms *MinSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := ms.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, ms) +} + +func (ms *MinSeries) ensureMinValue() { + if ms.minValue == nil { + minValue := math.MaxFloat64 + var y float64 + for x := 0; x < ms.InnerSeries.Len(); x++ { + _, y = ms.InnerSeries.GetValues(x) + if y < minValue { + minValue = y + } + } + ms.minValue = &minValue + } +} + +// Validate validates the series. +func (ms *MinSeries) Validate() error { + if ms.InnerSeries == nil { + return fmt.Errorf("min series requires InnerSeries to be set") + } + return nil +} + +// MaxSeries draws a horizontal line at the maximum value of the inner series. +type MaxSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries ValuesProvider + + maxValue *float64 +} + +// GetName returns the name of the time series. +func (ms MaxSeries) GetName() string { + return ms.Name +} + +// GetStyle returns the line style. +func (ms MaxSeries) GetStyle() Style { + return ms.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (ms MaxSeries) GetYAxis() YAxisType { + return ms.YAxis +} + +// Len returns the number of elements in the series. +func (ms MaxSeries) Len() int { + return ms.InnerSeries.Len() +} + +// GetValues gets a value at a given index. +func (ms *MaxSeries) GetValues(index int) (x, y float64) { + ms.ensureMaxValue() + x, _ = ms.InnerSeries.GetValues(index) + y = *ms.maxValue + return +} + +// Render renders the series. +func (ms *MaxSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := ms.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, ms) +} + +func (ms *MaxSeries) ensureMaxValue() { + if ms.maxValue == nil { + maxValue := -math.MaxFloat64 + var y float64 + for x := 0; x < ms.InnerSeries.Len(); x++ { + _, y = ms.InnerSeries.GetValues(x) + if y > maxValue { + maxValue = y + } + } + ms.maxValue = &maxValue + } +} + +// Validate validates the series. +func (ms *MaxSeries) Validate() error { + if ms.InnerSeries == nil { + return fmt.Errorf("max series requires InnerSeries to be set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/parse.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/parse.go new file mode 100644 index 00000000..5ecae0a2 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/parse.go @@ -0,0 +1,40 @@ +package chart + +import ( + "strconv" + "strings" + "time" +) + +// ParseFloats parses a list of floats. +func ParseFloats(values ...string) ([]float64, error) { + var output []float64 + var parsedValue float64 + var err error + var cleaned string + for _, value := range values { + cleaned = strings.TrimSpace(strings.Replace(value, ",", "", -1)) + if cleaned == "" { + continue + } + if parsedValue, err = strconv.ParseFloat(cleaned, 64); err != nil { + return nil, err + } + output = append(output, parsedValue) + } + return output, nil +} + +// ParseTimes parses a list of times with a given format. +func ParseTimes(layout string, values ...string) ([]time.Time, error) { + var output []time.Time + var parsedValue time.Time + var err error + for _, value := range values { + if parsedValue, err = time.Parse(layout, value); err != nil { + return nil, err + } + output = append(output, parsedValue) + } + return output, nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/percent_change_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/percent_change_series.go new file mode 100644 index 00000000..3767893e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/percent_change_series.go @@ -0,0 +1,89 @@ +package chart + +// Interface Assertions. +var ( + _ Series = (*PercentChangeSeries)(nil) + _ FirstValuesProvider = (*PercentChangeSeries)(nil) + _ LastValuesProvider = (*PercentChangeSeries)(nil) + _ ValueFormatterProvider = (*PercentChangeSeries)(nil) +) + +// PercentChangeSeriesSource is a series that +// can be used with a PercentChangeSeries +type PercentChangeSeriesSource interface { + Series + FirstValuesProvider + LastValuesProvider + ValuesProvider + ValueFormatterProvider +} + +// PercentChangeSeries applies a +// percentage difference function to a given continuous series. +type PercentChangeSeries struct { + Name string + Style Style + YAxis YAxisType + InnerSeries PercentChangeSeriesSource +} + +// GetName returns the name of the time series. +func (pcs PercentChangeSeries) GetName() string { + return pcs.Name +} + +// GetStyle returns the line style. +func (pcs PercentChangeSeries) GetStyle() Style { + return pcs.Style +} + +// Len implements part of Series. +func (pcs PercentChangeSeries) Len() int { + return pcs.InnerSeries.Len() +} + +// GetFirstValues implements FirstValuesProvider. +func (pcs PercentChangeSeries) GetFirstValues() (x, y float64) { + return pcs.InnerSeries.GetFirstValues() +} + +// GetValues gets x, y values at a given index. +func (pcs PercentChangeSeries) GetValues(index int) (x, y float64) { + _, fy := pcs.InnerSeries.GetFirstValues() + x0, y0 := pcs.InnerSeries.GetValues(index) + x = x0 + y = PercentDifference(fy, y0) + return +} + +// GetValueFormatters returns value formatter defaults for the series. +func (pcs PercentChangeSeries) GetValueFormatters() (x, y ValueFormatter) { + x, _ = pcs.InnerSeries.GetValueFormatters() + y = PercentValueFormatter + return +} + +// GetYAxis returns which YAxis the series draws on. +func (pcs PercentChangeSeries) GetYAxis() YAxisType { + return pcs.YAxis +} + +// GetLastValues gets the last values. +func (pcs PercentChangeSeries) GetLastValues() (x, y float64) { + _, fy := pcs.InnerSeries.GetFirstValues() + x0, y0 := pcs.InnerSeries.GetLastValues() + x = x0 + y = PercentDifference(fy, y0) + return +} + +// Render renders the series. +func (pcs PercentChangeSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := pcs.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, pcs) +} + +// Validate validates the series. +func (pcs PercentChangeSeries) Validate() error { + return pcs.InnerSeries.Validate() +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/pie_chart.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/pie_chart.go new file mode 100644 index 00000000..49b551f5 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/pie_chart.go @@ -0,0 +1,311 @@ +package chart + +import ( + "errors" + "fmt" + "io" + + "github.com/golang/freetype/truetype" +) + +// PieChart is a chart that draws sections of a circle based on percentages. +type PieChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + SliceStyle Style + + Font *truetype.Font + defaultFont *truetype.Font + + Values []Value + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (pc PieChart) GetDPI(defaults ...float64) float64 { + if pc.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return pc.DPI +} + +// GetFont returns the text font. +func (pc PieChart) GetFont() *truetype.Font { + if pc.Font == nil { + return pc.defaultFont + } + return pc.Font +} + +// GetWidth returns the chart width or the default value. +func (pc PieChart) GetWidth() int { + if pc.Width == 0 { + return DefaultChartWidth + } + return pc.Width +} + +// GetHeight returns the chart height or the default value. +func (pc PieChart) GetHeight() int { + if pc.Height == 0 { + return DefaultChartWidth + } + return pc.Height +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (pc PieChart) Render(rp RendererProvider, w io.Writer) error { + if len(pc.Values) == 0 { + return errors.New("please provide at least one value") + } + + r, err := rp(pc.GetWidth(), pc.GetHeight()) + if err != nil { + return err + } + + if pc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + pc.defaultFont = defaultFont + } + r.SetDPI(pc.GetDPI(DefaultDPI)) + + canvasBox := pc.getDefaultCanvasBox() + canvasBox = pc.getCircleAdjustedCanvasBox(canvasBox) + + pc.drawBackground(r) + pc.drawCanvas(r, canvasBox) + + finalValues, err := pc.finalizeValues(pc.Values) + if err != nil { + return err + } + pc.drawSlices(r, canvasBox, finalValues) + pc.drawTitle(r) + for _, a := range pc.Elements { + a(r, canvasBox, pc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (pc PieChart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: pc.GetWidth(), + Bottom: pc.GetHeight(), + }, pc.getBackgroundStyle()) +} + +func (pc PieChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, pc.getCanvasStyle()) +} + +func (pc PieChart) drawTitle(r Renderer) { + if len(pc.Title) > 0 && !pc.TitleStyle.Hidden { + Draw.TextWithin(r, pc.Title, pc.Box(), pc.styleDefaultsTitle()) + } +} + +func (pc PieChart) drawSlices(r Renderer, canvasBox Box, values []Value) { + cx, cy := canvasBox.Center() + diameter := MinInt(canvasBox.Width(), canvasBox.Height()) + radius := float64(diameter >> 1) + labelRadius := (radius * 2.0) / 3.0 + + // draw the pie slices + var rads, delta, delta2, total float64 + var lx, ly int + + if len(values) == 1 { + pc.stylePieChartValue(0).WriteToRenderer(r) + r.MoveTo(cx, cy) + r.Circle(radius, cx, cy) + } else { + for index, v := range values { + v.Style.InheritFrom(pc.stylePieChartValue(index)).WriteToRenderer(r) + + r.MoveTo(cx, cy) + rads = PercentToRadians(total) + delta = PercentToRadians(v.Value) + + r.ArcTo(cx, cy, radius, radius, rads, delta) + + r.LineTo(cx, cy) + r.Close() + r.FillStroke() + total = total + v.Value + } + } + + // draw the labels + total = 0 + for index, v := range values { + v.Style.InheritFrom(pc.stylePieChartValue(index)).WriteToRenderer(r) + if len(v.Label) > 0 { + delta2 = PercentToRadians(total + (v.Value / 2.0)) + delta2 = RadianAdd(delta2, _pi2) + lx, ly = CirclePoint(cx, cy, labelRadius, delta2) + + tb := r.MeasureText(v.Label) + lx = lx - (tb.Width() >> 1) + ly = ly + (tb.Height() >> 1) + + if lx < 0 { + lx = 0 + } + if ly < 0 { + lx = 0 + } + + r.Text(v.Label, lx, ly) + } + total = total + v.Value + } +} + +func (pc PieChart) finalizeValues(values []Value) ([]Value, error) { + finalValues := Values(values).Normalize() + if len(finalValues) == 0 { + return nil, fmt.Errorf("pie chart must contain at least (1) non-zero value") + } + return finalValues, nil +} + +func (pc PieChart) getDefaultCanvasBox() Box { + return pc.Box() +} + +func (pc PieChart) getCircleAdjustedCanvasBox(canvasBox Box) Box { + circleDiameter := MinInt(canvasBox.Width(), canvasBox.Height()) + + square := Box{ + Right: circleDiameter, + Bottom: circleDiameter, + } + + return canvasBox.Fit(square) +} + +func (pc PieChart) getBackgroundStyle() Style { + return pc.Background.InheritFrom(pc.styleDefaultsBackground()) +} + +func (pc PieChart) getCanvasStyle() Style { + return pc.Canvas.InheritFrom(pc.styleDefaultsCanvas()) +} + +func (pc PieChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: pc.GetColorPalette().CanvasColor(), + StrokeColor: pc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc PieChart) styleDefaultsPieChartValue() Style { + return Style{ + StrokeColor: pc.GetColorPalette().TextColor(), + StrokeWidth: 5.0, + FillColor: pc.GetColorPalette().TextColor(), + } +} + +func (pc PieChart) stylePieChartValue(index int) Style { + return pc.SliceStyle.InheritFrom(Style{ + StrokeColor: ColorWhite, + StrokeWidth: 5.0, + FillColor: pc.GetColorPalette().GetSeriesColor(index), + FontSize: pc.getScaledFontSize(), + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + }) +} + +func (pc PieChart) getScaledFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48.0 + } else if effectiveDimension >= 1024 { + return 24.0 + } else if effectiveDimension > 512 { + return 18.0 + } else if effectiveDimension > 256 { + return 12.0 + } + return 10.0 +} + +func (pc PieChart) styleDefaultsBackground() Style { + return Style{ + FillColor: pc.GetColorPalette().BackgroundColor(), + StrokeColor: pc.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc PieChart) styleDefaultsElements() Style { + return Style{ + Font: pc.GetFont(), + } +} + +func (pc PieChart) styleDefaultsTitle() Style { + return pc.TitleStyle.InheritFrom(Style{ + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + FontSize: pc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (pc PieChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +// GetColorPalette returns the color palette for the chart. +func (pc PieChart) GetColorPalette() ColorPalette { + if pc.ColorPalette != nil { + return pc.ColorPalette + } + return AlternateColorPalette +} + +// Box returns the chart bounds as a box. +func (pc PieChart) Box() Box { + dpr := pc.Background.Padding.GetRight(DefaultBackgroundPadding.Right) + dpb := pc.Background.Padding.GetBottom(DefaultBackgroundPadding.Bottom) + + return Box{ + Top: pc.Background.Padding.GetTop(DefaultBackgroundPadding.Top), + Left: pc.Background.Padding.GetLeft(DefaultBackgroundPadding.Left), + Right: pc.GetWidth() - dpr, + Bottom: pc.GetHeight() - dpb, + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/polynomial_regression_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/polynomial_regression_series.go new file mode 100644 index 00000000..22cd3c13 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/polynomial_regression_series.go @@ -0,0 +1,177 @@ +package chart + +import ( + "fmt" + "math" + + "github.com/wcharczuk/go-chart/v2/matrix" +) + +// Interface Assertions. +var ( + _ Series = (*PolynomialRegressionSeries)(nil) + _ FirstValuesProvider = (*PolynomialRegressionSeries)(nil) + _ LastValuesProvider = (*PolynomialRegressionSeries)(nil) +) + +// PolynomialRegressionSeries implements a polynomial regression over a given +// inner series. +type PolynomialRegressionSeries struct { + Name string + Style Style + YAxis YAxisType + + Limit int + Offset int + Degree int + InnerSeries ValuesProvider + + coeffs []float64 +} + +// GetName returns the name of the time series. +func (prs PolynomialRegressionSeries) GetName() string { + return prs.Name +} + +// GetStyle returns the line style. +func (prs PolynomialRegressionSeries) GetStyle() Style { + return prs.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (prs PolynomialRegressionSeries) GetYAxis() YAxisType { + return prs.YAxis +} + +// Len returns the number of elements in the series. +func (prs PolynomialRegressionSeries) Len() int { + return MinInt(prs.GetLimit(), prs.InnerSeries.Len()-prs.GetOffset()) +} + +// GetLimit returns the window size. +func (prs PolynomialRegressionSeries) GetLimit() int { + if prs.Limit == 0 { + return prs.InnerSeries.Len() + } + return prs.Limit +} + +// GetEndIndex returns the effective limit end. +func (prs PolynomialRegressionSeries) GetEndIndex() int { + windowEnd := prs.GetOffset() + prs.GetLimit() + innerSeriesLastIndex := prs.InnerSeries.Len() - 1 + return MinInt(windowEnd, innerSeriesLastIndex) +} + +// GetOffset returns the data offset. +func (prs PolynomialRegressionSeries) GetOffset() int { + if prs.Offset == 0 { + return 0 + } + return prs.Offset +} + +// Validate validates the series. +func (prs *PolynomialRegressionSeries) Validate() error { + if prs.InnerSeries == nil { + return fmt.Errorf("linear regression series requires InnerSeries to be set") + } + + endIndex := prs.GetEndIndex() + if endIndex >= prs.InnerSeries.Len() { + return fmt.Errorf("invalid window; inner series has length %d but end index is %d", prs.InnerSeries.Len(), endIndex) + } + + return nil +} + +// GetValues returns the series value for a given index. +func (prs *PolynomialRegressionSeries) GetValues(index int) (x, y float64) { + if prs.InnerSeries == nil || prs.InnerSeries.Len() == 0 { + return + } + + if prs.coeffs == nil { + coeffs, err := prs.computeCoefficients() + if err != nil { + panic(err) + } + prs.coeffs = coeffs + } + + offset := prs.GetOffset() + effectiveIndex := MinInt(index+offset, prs.InnerSeries.Len()) + x, y = prs.InnerSeries.GetValues(effectiveIndex) + y = prs.apply(x) + return +} + +// GetFirstValues computes the first poly regression value. +func (prs *PolynomialRegressionSeries) GetFirstValues() (x, y float64) { + if prs.InnerSeries == nil || prs.InnerSeries.Len() == 0 { + return + } + if prs.coeffs == nil { + coeffs, err := prs.computeCoefficients() + if err != nil { + panic(err) + } + prs.coeffs = coeffs + } + x, y = prs.InnerSeries.GetValues(0) + y = prs.apply(x) + return +} + +// GetLastValues computes the last poly regression value. +func (prs *PolynomialRegressionSeries) GetLastValues() (x, y float64) { + if prs.InnerSeries == nil || prs.InnerSeries.Len() == 0 { + return + } + if prs.coeffs == nil { + coeffs, err := prs.computeCoefficients() + if err != nil { + panic(err) + } + prs.coeffs = coeffs + } + endIndex := prs.GetEndIndex() + x, y = prs.InnerSeries.GetValues(endIndex) + y = prs.apply(x) + return +} + +func (prs *PolynomialRegressionSeries) apply(v float64) (out float64) { + for index, coeff := range prs.coeffs { + out = out + (coeff * math.Pow(v, float64(index))) + } + return +} + +func (prs *PolynomialRegressionSeries) computeCoefficients() ([]float64, error) { + xvalues, yvalues := prs.values() + return matrix.Poly(xvalues, yvalues, prs.Degree) +} + +func (prs *PolynomialRegressionSeries) values() (xvalues, yvalues []float64) { + startIndex := prs.GetOffset() + endIndex := prs.GetEndIndex() + + xvalues = make([]float64, endIndex-startIndex) + yvalues = make([]float64, endIndex-startIndex) + + for index := startIndex; index < endIndex; index++ { + x, y := prs.InnerSeries.GetValues(index) + xvalues[index-startIndex] = x + yvalues[index-startIndex] = y + } + + return +} + +// Render renders the series. +func (prs *PolynomialRegressionSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := prs.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, prs) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/random_sequence.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/random_sequence.go new file mode 100644 index 00000000..45c99716 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/random_sequence.go @@ -0,0 +1,92 @@ +package chart + +import ( + "math" + "math/rand" + "time" +) + +var ( + _ Sequence = (*RandomSeq)(nil) +) + +// RandomValues returns an array of random values. +func RandomValues(count int) []float64 { + return Seq{NewRandomSequence().WithLen(count)}.Values() +} + +// RandomValuesWithMax returns an array of random values with a given average. +func RandomValuesWithMax(count int, max float64) []float64 { + return Seq{NewRandomSequence().WithMax(max).WithLen(count)}.Values() +} + +// NewRandomSequence creates a new random seq. +func NewRandomSequence() *RandomSeq { + return &RandomSeq{ + rnd: rand.New(rand.NewSource(time.Now().Unix())), + } +} + +// RandomSeq is a random number seq generator. +type RandomSeq struct { + rnd *rand.Rand + max *float64 + min *float64 + len *int +} + +// Len returns the number of elements that will be generated. +func (r *RandomSeq) Len() int { + if r.len != nil { + return *r.len + } + return math.MaxInt32 +} + +// GetValue returns the value. +func (r *RandomSeq) GetValue(_ int) float64 { + if r.min != nil && r.max != nil { + var delta float64 + + if *r.max > *r.min { + delta = *r.max - *r.min + } else { + delta = *r.min - *r.max + } + + return *r.min + (r.rnd.Float64() * delta) + } else if r.max != nil { + return r.rnd.Float64() * *r.max + } else if r.min != nil { + return *r.min + (r.rnd.Float64()) + } + return r.rnd.Float64() +} + +// WithLen sets a maximum len +func (r *RandomSeq) WithLen(length int) *RandomSeq { + r.len = &length + return r +} + +// Min returns the minimum value. +func (r RandomSeq) Min() *float64 { + return r.min +} + +// WithMin sets the scale and returns the Random. +func (r *RandomSeq) WithMin(min float64) *RandomSeq { + r.min = &min + return r +} + +// Max returns the maximum value. +func (r RandomSeq) Max() *float64 { + return r.max +} + +// WithMax sets the average and returns the Random. +func (r *RandomSeq) WithMax(max float64) *RandomSeq { + r.max = &max + return r +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/range.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/range.go new file mode 100644 index 00000000..a7b22ab9 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/range.go @@ -0,0 +1,43 @@ +package chart + +// NameProvider is a type that returns a name. +type NameProvider interface { + GetName() string +} + +// StyleProvider is a type that returns a style. +type StyleProvider interface { + GetStyle() Style +} + +// IsZeroable is a type that returns if it's been set or not. +type IsZeroable interface { + IsZero() bool +} + +// Stringable is a type that has a string representation. +type Stringable interface { + String() string +} + +// Range is a common interface for a range of values. +type Range interface { + Stringable + IsZeroable + + GetMin() float64 + SetMin(min float64) + + GetMax() float64 + SetMax(max float64) + + GetDelta() float64 + + GetDomain() int + SetDomain(domain int) + + IsDescending() bool + + // Translate the range to the domain. + Translate(value float64) int +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/raster_renderer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/raster_renderer.go new file mode 100644 index 00000000..4de26554 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/raster_renderer.go @@ -0,0 +1,230 @@ +package chart + +import ( + "image" + "image/png" + "io" + "math" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +// PNG returns a new png/raster renderer. +func PNG(width, height int) (Renderer, error) { + i := image.NewRGBA(image.Rect(0, 0, width, height)) + gc, err := drawing.NewRasterGraphicContext(i) + if err == nil { + return &rasterRenderer{ + i: i, + gc: gc, + }, nil + } + return nil, err +} + +// rasterRenderer renders chart commands to a bitmap. +type rasterRenderer struct { + i *image.RGBA + gc *drawing.RasterGraphicContext + + rotateRadians *float64 + + s Style +} + +func (rr *rasterRenderer) ResetStyle() { + rr.s = Style{Font: rr.s.Font} + rr.ClearTextRotation() +} + +// GetDPI returns the dpi. +func (rr *rasterRenderer) GetDPI() float64 { + return rr.gc.GetDPI() +} + +// SetDPI implements the interface method. +func (rr *rasterRenderer) SetDPI(dpi float64) { + rr.gc.SetDPI(dpi) +} + +// SetClassName implements the interface method. However, PNGs have no classes. +func (rr *rasterRenderer) SetClassName(_ string) {} + +// SetStrokeColor implements the interface method. +func (rr *rasterRenderer) SetStrokeColor(c drawing.Color) { + rr.s.StrokeColor = c +} + +// SetLineWidth implements the interface method. +func (rr *rasterRenderer) SetStrokeWidth(width float64) { + rr.s.StrokeWidth = width +} + +// StrokeDashArray sets the stroke dash array. +func (rr *rasterRenderer) SetStrokeDashArray(dashArray []float64) { + rr.s.StrokeDashArray = dashArray +} + +// SetFillColor implements the interface method. +func (rr *rasterRenderer) SetFillColor(c drawing.Color) { + rr.s.FillColor = c +} + +// MoveTo implements the interface method. +func (rr *rasterRenderer) MoveTo(x, y int) { + rr.gc.MoveTo(float64(x), float64(y)) +} + +// LineTo implements the interface method. +func (rr *rasterRenderer) LineTo(x, y int) { + rr.gc.LineTo(float64(x), float64(y)) +} + +// QuadCurveTo implements the interface method. +func (rr *rasterRenderer) QuadCurveTo(cx, cy, x, y int) { + rr.gc.QuadCurveTo(float64(cx), float64(cy), float64(x), float64(y)) +} + +// ArcTo implements the interface method. +func (rr *rasterRenderer) ArcTo(cx, cy int, rx, ry, startAngle, delta float64) { + rr.gc.ArcTo(float64(cx), float64(cy), rx, ry, startAngle, delta) +} + +// Close implements the interface method. +func (rr *rasterRenderer) Close() { + rr.gc.Close() +} + +// Stroke implements the interface method. +func (rr *rasterRenderer) Stroke() { + rr.gc.SetStrokeColor(rr.s.StrokeColor) + rr.gc.SetLineWidth(rr.s.StrokeWidth) + rr.gc.SetLineDash(rr.s.StrokeDashArray, 0) + rr.gc.Stroke() +} + +// Fill implements the interface method. +func (rr *rasterRenderer) Fill() { + rr.gc.SetFillColor(rr.s.FillColor) + rr.gc.Fill() +} + +// FillStroke implements the interface method. +func (rr *rasterRenderer) FillStroke() { + rr.gc.SetFillColor(rr.s.FillColor) + rr.gc.SetStrokeColor(rr.s.StrokeColor) + rr.gc.SetLineWidth(rr.s.StrokeWidth) + rr.gc.SetLineDash(rr.s.StrokeDashArray, 0) + rr.gc.FillStroke() +} + +// Circle fully draws a circle at a given point but does not apply the fill or stroke. +func (rr *rasterRenderer) Circle(radius float64, x, y int) { + xf := float64(x) + yf := float64(y) + + rr.gc.MoveTo(xf-radius, yf) //9 + rr.gc.QuadCurveTo(xf-radius, yf-radius, xf, yf-radius) //12 + rr.gc.QuadCurveTo(xf+radius, yf-radius, xf+radius, yf) //3 + rr.gc.QuadCurveTo(xf+radius, yf+radius, xf, yf+radius) //6 + rr.gc.QuadCurveTo(xf-radius, yf+radius, xf-radius, yf) //9 +} + +// SetFont implements the interface method. +func (rr *rasterRenderer) SetFont(f *truetype.Font) { + rr.s.Font = f +} + +// SetFontSize implements the interface method. +func (rr *rasterRenderer) SetFontSize(size float64) { + rr.s.FontSize = size +} + +// SetFontColor implements the interface method. +func (rr *rasterRenderer) SetFontColor(c drawing.Color) { + rr.s.FontColor = c +} + +// Text implements the interface method. +func (rr *rasterRenderer) Text(body string, x, y int) { + xf, yf := rr.getCoords(x, y) + rr.gc.SetFont(rr.s.Font) + rr.gc.SetFontSize(rr.s.FontSize) + rr.gc.SetFillColor(rr.s.FontColor) + rr.gc.CreateStringPath(body, float64(xf), float64(yf)) + rr.gc.Fill() +} + +// MeasureText returns the height and width in pixels of a string. +func (rr *rasterRenderer) MeasureText(body string) Box { + rr.gc.SetFont(rr.s.Font) + rr.gc.SetFontSize(rr.s.FontSize) + rr.gc.SetFillColor(rr.s.FontColor) + l, t, r, b, err := rr.gc.GetStringBounds(body) + if err != nil { + return Box{} + } + if l < 0 { + r = r - l // equivalent to r+(-1*l) + l = 0 + } + if t < 0 { + b = b - t + t = 0 + } + + if l > 0 { + r = r + l + l = 0 + } + + if t > 0 { + b = b + t + t = 0 + } + + textBox := Box{ + Top: int(math.Ceil(t)), + Left: int(math.Ceil(l)), + Right: int(math.Ceil(r)), + Bottom: int(math.Ceil(b)), + } + if rr.rotateRadians == nil { + return textBox + } + + return textBox.Corners().Rotate(RadiansToDegrees(*rr.rotateRadians)).Box() +} + +// SetTextRotation sets a text rotation. +func (rr *rasterRenderer) SetTextRotation(radians float64) { + rr.rotateRadians = &radians +} + +func (rr *rasterRenderer) getCoords(x, y int) (xf, yf int) { + if rr.rotateRadians == nil { + xf = x + yf = y + return + } + + rr.gc.Translate(float64(x), float64(y)) + rr.gc.Rotate(*rr.rotateRadians) + return +} + +// ClearTextRotation clears text rotation. +func (rr *rasterRenderer) ClearTextRotation() { + rr.gc.SetMatrixTransform(drawing.NewIdentityMatrix()) + rr.rotateRadians = nil +} + +// Save implements the interface method. +func (rr *rasterRenderer) Save(w io.Writer) error { + if typed, isTyped := w.(RGBACollector); isTyped { + typed.SetRGBA(rr.i) + return nil + } + return png.Encode(w, rr.i) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderable.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderable.go new file mode 100644 index 00000000..6efb3ad7 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderable.go @@ -0,0 +1,4 @@ +package chart + +// Renderable is a function that can be called to render custom elements on the chart. +type Renderable func(r Renderer, canvasBox Box, defaults Style) diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer.go new file mode 100644 index 00000000..589c7737 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer.go @@ -0,0 +1,89 @@ +package chart + +import ( + "io" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +// Renderer represents the basic methods required to draw a chart. +type Renderer interface { + // ResetStyle should reset any style related settings on the renderer. + ResetStyle() + + // GetDPI gets the DPI for the renderer. + GetDPI() float64 + + // SetDPI sets the DPI for the renderer. + SetDPI(dpi float64) + + // SetClassName sets the current class name. + SetClassName(string) + + // SetStrokeColor sets the current stroke color. + SetStrokeColor(drawing.Color) + + // SetFillColor sets the current fill color. + SetFillColor(drawing.Color) + + // SetStrokeWidth sets the stroke width. + SetStrokeWidth(width float64) + + // SetStrokeDashArray sets the stroke dash array. + SetStrokeDashArray(dashArray []float64) + + // MoveTo moves the cursor to a given point. + MoveTo(x, y int) + + // LineTo both starts a shape and draws a line to a given point + // from the previous point. + LineTo(x, y int) + + // QuadCurveTo draws a quad curve. + // cx and cy represent the bezier "control points". + QuadCurveTo(cx, cy, x, y int) + + // ArcTo draws an arc with a given center (cx,cy) + // a given set of radii (rx,ry), a startAngle and delta (in radians). + ArcTo(cx, cy int, rx, ry, startAngle, delta float64) + + // Close finalizes a shape as drawn by LineTo. + Close() + + // Stroke strokes the path. + Stroke() + + // Fill fills the path, but does not stroke. + Fill() + + // FillStroke fills and strokes a path. + FillStroke() + + // Circle draws a circle at the given coords with a given radius. + Circle(radius float64, x, y int) + + // SetFont sets a font for a text field. + SetFont(*truetype.Font) + + // SetFontColor sets a font's color + SetFontColor(drawing.Color) + + // SetFontSize sets the font size for a text field. + SetFontSize(size float64) + + // Text draws a text blob. + Text(body string, x, y int) + + // MeasureText measures text. + MeasureText(body string) Box + + // SetTextRotatation sets a rotation for drawing elements. + SetTextRotation(radians float64) + + // ClearTextRotation clears rotation. + ClearTextRotation() + + // Save writes the image to the given writer. + Save(w io.Writer) error +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer_provider.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer_provider.go new file mode 100644 index 00000000..be961a8e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/renderer_provider.go @@ -0,0 +1,4 @@ +package chart + +// RendererProvider is a function that returns a renderer. +type RendererProvider func(int, int) (Renderer, error) diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/roboto/roboto.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/roboto/roboto.go new file mode 100644 index 00000000..60658c65 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/roboto/roboto.go @@ -0,0 +1,5 @@ +package roboto + +// Roboto is the .ttf of Roboto-Medium. +// yes it is inlined. +var Roboto = []byte{0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0x0, 0x80, 0x0, 0x3, 0x0, 0x50, 0x47, 0x44, 0x45, 0x46, 0xE1, 0x72, 0xE4, 0x6D, 0x0, 0x3, 0x6A, 0x7C, 0x0, 0x0, 0x3, 0x76, 0x47, 0x50, 0x4F, 0x53, 0xE, 0xB6, 0x68, 0x58, 0x0, 0x3, 0x6D, 0xF4, 0x0, 0x1, 0x10, 0xC4, 0x47, 0x53, 0x55, 0x42, 0x72, 0xEB, 0xE7, 0x34, 0x0, 0x4, 0x7E, 0xB8, 0x0, 0x0, 0x2B, 0x68, 0x4F, 0x53, 0x2F, 0x32, 0x9B, 0x33, 0xB2, 0x3A, 0x0, 0x0, 0x1, 0x58, 0x0, 0x0, 0x0, 0x60, 0x63, 0x6D, 0x61, 0x70, 0x6A, 0x87, 0x43, 0x81, 0x0, 0x0, 0x36, 0x34, 0x0, 0x0, 0x18, 0xCC, 0x67, 0x6C, 0x79, 0x66, 0xEC, 0x38, 0xAB, 0xF4, 0x0, 0x0, 0x83, 0x80, 0x0, 0x2, 0xE3, 0xCD, 0x68, 0x65, 0x61, 0x64, 0x0, 0xD8, 0xDB, 0x29, 0x0, 0x0, 0x0, 0xDC, 0x0, 0x0, 0x0, 0x36, 0x68, 0x68, 0x65, 0x61, 0x10, 0x97, 0x17, 0xF0, 0x0, 0x0, 0x1, 0x14, 0x0, 0x0, 0x0, 0x24, 0x68, 0x6D, 0x74, 0x78, 0xC2, 0x6D, 0xF3, 0x5F, 0x0, 0x0, 0x1, 0xB8, 0x0, 0x0, 0x34, 0x7A, 0x6C, 0x6F, 0x63, 0x61, 0x16, 0x82, 0xFE, 0x88, 0x0, 0x0, 0x4F, 0x0, 0x0, 0x0, 0x34, 0x80, 0x6D, 0x61, 0x78, 0x70, 0xD, 0x43, 0x1, 0x29, 0x0, 0x0, 0x1, 0x38, 0x0, 0x0, 0x0, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x44, 0x5E, 0x77, 0xFC, 0x0, 0x3, 0x67, 0x50, 0x0, 0x0, 0x3, 0xC, 0x70, 0x6F, 0x73, 0x74, 0xFF, 0x6D, 0x0, 0x64, 0x0, 0x3, 0x6A, 0x5C, 0x0, 0x0, 0x0, 0x20, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x22, 0x4E, 0xAE, 0xA5, 0x79, 0xC3, 0x5F, 0xF, 0x3C, 0xF5, 0x0, 0x19, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC4, 0xF0, 0x73, 0x9E, 0x0, 0x0, 0x0, 0x0, 0xD3, 0x91, 0xF9, 0xF6, 0xF8, 0xBE, 0xFD, 0xD5, 0x10, 0x6A, 0x8, 0x73, 0x0, 0x0, 0x0, 0x9, 0x0, 0x2, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x7, 0x6C, 0xFE, 0xC, 0x0, 0x0, 0x11, 0x2, 0xF8, 0xBE, 0xFB, 0xC3, 0x10, 0x6A, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xD, 0x1E, 0x0, 0x1, 0x0, 0x0, 0xD, 0x1F, 0x0, 0xD6, 0x0, 0x16, 0x0, 0x50, 0x0, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x2, 0x0, 0x4, 0x4, 0x99, 0x1, 0xF4, 0x0, 0x5, 0x0, 0x0, 0x5, 0x9A, 0x5, 0x33, 0x0, 0x0, 0x1, 0x1F, 0x5, 0x9A, 0x5, 0x33, 0x0, 0x0, 0x3, 0xD1, 0x0, 0x66, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE0, 0x0, 0x2, 0xFF, 0x50, 0x0, 0x21, 0x7F, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x47, 0x4F, 0x4F, 0x47, 0x0, 0x40, 0x0, 0x0, 0xFF, 0xFF, 0x8, 0x62, 0xFD, 0xD5, 0x0, 0x0, 0x8, 0x62, 0x2, 0x2B, 0x20, 0x0, 0x1, 0x9F, 0x0, 0x0, 0x0, 0x0, 0x4, 0x3A, 0x5, 0xB0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x3, 0x3, 0x8C, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xFE, 0x0, 0x0, 0x1, 0xFE, 0x0, 0x0, 0x1, 0xFE, 0x0, 0x0, 0x2, 0x25, 0x0, 0x90, 0x2, 0x98, 0x0, 0x65, 0x4, 0xE2, 0x0, 0x61, 0x4, 0x8C, 0x0, 0x65, 0x5, 0xE0, 0x0, 0x64, 0x5, 0x1D, 0x0, 0x55, 0x1, 0x5A, 0x0, 0x53, 0x2, 0xCB, 0x0, 0x80, 0x2, 0xD3, 0x0, 0x28, 0x3, 0x8A, 0x0, 0x1C, 0x4, 0x76, 0x0, 0x45, 0x1, 0xC3, 0x0, 0x1D, 0x2, 0xA1, 0x0, 0x47, 0x2, 0x3C, 0x0, 0x88, 0x3, 0x2B, 0x0, 0x2, 0x4, 0x8C, 0x0, 0x69, 0x4, 0x8C, 0x0, 0xA8, 0x4, 0x8C, 0x0, 0x51, 0x4, 0x8C, 0x0, 0x50, 0x4, 0x8C, 0x0, 0x35, 0x4, 0x8C, 0x0, 0x81, 0x4, 0x8C, 0x0, 0x76, 0x4, 0x8C, 0x0, 0x46, 0x4, 0x8C, 0x0, 0x69, 0x4, 0x8C, 0x0, 0x5E, 0x2, 0x1F, 0x0, 0x82, 0x1, 0xE7, 0x0, 0x2F, 0x4, 0x11, 0x0, 0x3F, 0x4, 0x7A, 0x0, 0x91, 0x4, 0x2A, 0x0, 0x81, 0x3, 0xE5, 0x0, 0x3C, 0x7, 0x29, 0x0, 0x52, 0x5, 0x53, 0x0, 0x12, 0x5, 0xD, 0x0, 0x95, 0x5, 0x39, 0x0, 0x66, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x86, 0x0, 0x95, 0x4, 0x66, 0x0, 0x95, 0x5, 0x73, 0x0, 0x6A, 0x5, 0xB0, 0x0, 0x95, 0x2, 0x42, 0x0, 0xA4, 0x4, 0x71, 0x0, 0x2D, 0x5, 0xB, 0x0, 0x95, 0x4, 0x55, 0x0, 0x95, 0x7, 0x1, 0x0, 0x95, 0x5, 0xAF, 0x0, 0x95, 0x5, 0x86, 0x0, 0x66, 0x5, 0x1E, 0x0, 0x95, 0x5, 0x86, 0x0, 0x60, 0x4, 0xFF, 0x0, 0x95, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0xDC, 0x0, 0x2D, 0x5, 0x38, 0x0, 0x7E, 0x5, 0x2E, 0x0, 0x12, 0x7, 0xB, 0x0, 0x31, 0x5, 0x10, 0x0, 0x29, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xD2, 0x0, 0x50, 0x2, 0x32, 0x0, 0x84, 0x3, 0x58, 0x0, 0x14, 0x2, 0x32, 0x0, 0xD, 0x3, 0x6C, 0x0, 0x35, 0x3, 0x9C, 0x0, 0x3, 0x2, 0x94, 0x0, 0x31, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x81, 0x0, 0x7D, 0x4, 0x31, 0x0, 0x50, 0x4, 0x85, 0x0, 0x50, 0x4, 0x4B, 0x0, 0x54, 0x2, 0xD6, 0x0, 0x2D, 0x4, 0x89, 0x0, 0x52, 0x4, 0x71, 0x0, 0x7A, 0x2, 0xC, 0x0, 0x7D, 0x2, 0x1, 0xFF, 0xB4, 0x4, 0x2D, 0x0, 0x7D, 0x2, 0xC, 0x0, 0x8C, 0x6, 0xF7, 0x0, 0x7D, 0x4, 0x73, 0x0, 0x7A, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x81, 0x0, 0x7D, 0x4, 0x8B, 0x0, 0x50, 0x2, 0xD0, 0x0, 0x7D, 0x4, 0x22, 0x0, 0x4C, 0x2, 0xAA, 0x0, 0x8, 0x4, 0x72, 0x0, 0x77, 0x3, 0xF6, 0x0, 0x17, 0x5, 0xF2, 0x0, 0x22, 0x4, 0x7, 0x0, 0x1F, 0x3, 0xE5, 0x0, 0xC, 0x4, 0x7, 0x0, 0x52, 0x2, 0xAF, 0x0, 0x38, 0x2, 0x2, 0x0, 0xAE, 0x2, 0xAF, 0x0, 0x1C, 0x5, 0x51, 0x0, 0x76, 0x2, 0x1F, 0x0, 0x86, 0x4, 0x7D, 0x0, 0x65, 0x4, 0xB6, 0x0, 0x5F, 0x5, 0x9E, 0x0, 0x5D, 0x4, 0x41, 0x0, 0xC, 0x1, 0xFD, 0x0, 0x89, 0x4, 0xF9, 0x0, 0x5A, 0x3, 0x85, 0x0, 0x5E, 0x6, 0x45, 0x0, 0x56, 0x3, 0x92, 0x0, 0x8E, 0x3, 0xE2, 0x0, 0x56, 0x4, 0x6E, 0x0, 0x7F, 0x6, 0x45, 0x0, 0x56, 0x3, 0xDC, 0x0, 0x9C, 0x3, 0xB, 0x0, 0x7F, 0x4, 0x4B, 0x0, 0x5F, 0x2, 0xF6, 0x0, 0x3C, 0x2, 0xF6, 0x0, 0x37, 0x2, 0x9C, 0x0, 0x71, 0x4, 0xBB, 0x0, 0x93, 0x3, 0xEE, 0x0, 0x46, 0x2, 0x42, 0x0, 0x8E, 0x2, 0x11, 0x0, 0x6E, 0x2, 0xF6, 0x0, 0x81, 0x3, 0xA7, 0x0, 0x77, 0x3, 0xE2, 0x0, 0x5E, 0x5, 0xD0, 0x0, 0x59, 0x6, 0x2B, 0x0, 0x50, 0x6, 0x57, 0x0, 0x67, 0x3, 0xE5, 0x0, 0x43, 0x7, 0x85, 0xFF, 0xF6, 0x4, 0x45, 0x0, 0x4D, 0x5, 0x85, 0x0, 0x6A, 0x4, 0xCB, 0x0, 0x95, 0x4, 0xE8, 0x0, 0x88, 0x6, 0xC1, 0x0, 0x48, 0x4, 0xA7, 0x0, 0x68, 0x4, 0x92, 0x0, 0x44, 0x4, 0x89, 0x0, 0x50, 0x4, 0x97, 0x0, 0x83, 0x4, 0xEE, 0x0, 0x50, 0x5, 0xB0, 0x0, 0x20, 0x2, 0x1B, 0x0, 0x90, 0x4, 0x98, 0x0, 0x8E, 0x4, 0x64, 0x0, 0x22, 0x2, 0x4F, 0x0, 0x22, 0x5, 0x94, 0x0, 0x90, 0x4, 0x89, 0x0, 0x7F, 0x7, 0xB4, 0x0, 0x65, 0x7, 0x3B, 0x0, 0x5B, 0x2, 0xD, 0x0, 0x8B, 0x4, 0xDA, 0x0, 0x1A, 0x6, 0xA, 0x0, 0x22, 0x5, 0x8, 0x0, 0x90, 0x4, 0x81, 0x0, 0x7D, 0x5, 0x78, 0x0, 0x55, 0x5, 0x0, 0x0, 0x4F, 0x5, 0x39, 0x0, 0x4D, 0x5, 0xB9, 0x0, 0x66, 0x4, 0xC7, 0x0, 0x50, 0x5, 0x86, 0x0, 0x21, 0x6, 0x39, 0x0, 0x22, 0x5, 0x8, 0x0, 0x4E, 0x4, 0x85, 0x0, 0x50, 0x4, 0x89, 0x0, 0x53, 0x4, 0x86, 0x0, 0x3A, 0x5, 0x89, 0x0, 0x51, 0x4, 0xD6, 0x0, 0x57, 0x4, 0xB9, 0x0, 0x0, 0x2, 0xD1, 0xFF, 0xE4, 0x5, 0xBC, 0x0, 0x6A, 0x5, 0x30, 0x0, 0x18, 0x6, 0xBD, 0x0, 0x7A, 0x2, 0xC6, 0x0, 0x14, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x2, 0xC6, 0x0, 0x14, 0x4, 0x6A, 0x0, 0x16, 0x7, 0x3F, 0x0, 0x99, 0x6, 0x2, 0x0, 0x0, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x7, 0x1, 0x0, 0x66, 0x5, 0x9C, 0x0, 0x50, 0x6, 0x1C, 0x0, 0x22, 0x4, 0x81, 0x0, 0x7D, 0x5, 0x84, 0x0, 0x95, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x57, 0x4, 0x91, 0x0, 0x48, 0x3, 0xF4, 0x0, 0x1B, 0x2, 0xAA, 0x0, 0x8, 0x5, 0x50, 0x0, 0x1E, 0x2, 0xCA, 0x0, 0x13, 0x4, 0xDC, 0x0, 0x2D, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x5, 0x53, 0x0, 0x6F, 0x5, 0x3C, 0x0, 0x7E, 0x5, 0x59, 0x0, 0x8, 0x4, 0xC4, 0x0, 0xC, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x14, 0x0, 0x59, 0x5, 0x33, 0x0, 0x4A, 0x5, 0x33, 0x0, 0x64, 0x4, 0x8D, 0x0, 0x53, 0x4, 0x3F, 0x0, 0x45, 0x4, 0xA8, 0x0, 0x51, 0x4, 0xAF, 0x0, 0x3F, 0x4, 0x30, 0x0, 0x2E, 0x4, 0x22, 0x0, 0x4C, 0x4, 0x81, 0x0, 0x7D, 0x1, 0xF5, 0x0, 0xA7, 0x3, 0x3, 0x0, 0xA7, 0x2, 0xC6, 0x0, 0x14, 0x2, 0x25, 0x0, 0x90, 0x9, 0x6B, 0x0, 0x95, 0x8, 0xD6, 0x0, 0x95, 0x8, 0x18, 0x0, 0x50, 0x5, 0x8B, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x25, 0x5, 0x33, 0x0, 0x4A, 0x4, 0xA7, 0x0, 0x5E, 0x8, 0xA0, 0x0, 0x95, 0x5, 0x4F, 0x0, 0x95, 0x4, 0xCF, 0x0, 0x4E, 0x4, 0xA, 0x0, 0x48, 0x5, 0x39, 0x0, 0x95, 0x5, 0xD2, 0x0, 0x50, 0x5, 0x36, 0x0, 0x67, 0x5, 0x9, 0x0, 0x55, 0x5, 0x4, 0x0, 0x50, 0x4, 0x4D, 0x0, 0x52, 0x3, 0xC8, 0x0, 0x14, 0x5, 0xC7, 0x0, 0x7A, 0x3, 0xC8, 0x0, 0x14, 0x2, 0x27, 0xFF, 0xB5, 0x7, 0x36, 0x0, 0x60, 0x7, 0x15, 0x0, 0x50, 0x5, 0x53, 0xFF, 0x49, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x4, 0xA0, 0x0, 0x1A, 0x4, 0xDC, 0x0, 0x2D, 0x4, 0x1E, 0x0, 0x49, 0x4, 0x5E, 0x0, 0x52, 0x4, 0x47, 0x0, 0x37, 0x3, 0xF2, 0x0, 0x4C, 0x5, 0x5B, 0x0, 0x1A, 0x6, 0x43, 0x0, 0x22, 0x5, 0x2E, 0x0, 0x12, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0xCC, 0x0, 0x2D, 0x2, 0xDF, 0x0, 0x27, 0x5, 0xDC, 0x0, 0x66, 0x4, 0xD9, 0x0, 0x50, 0x5, 0x43, 0x0, 0x21, 0x3, 0x2D, 0x0, 0x1A, 0x5, 0x95, 0x0, 0x22, 0x4, 0x52, 0x0, 0x22, 0x4, 0x55, 0x0, 0x59, 0x4, 0xB8, 0x0, 0x56, 0x4, 0xB8, 0x0, 0x3E, 0x4, 0x82, 0x0, 0x7D, 0x4, 0x31, 0x0, 0x3B, 0x4, 0x47, 0x0, 0x2D, 0x4, 0xDA, 0x0, 0x50, 0x4, 0xDA, 0x0, 0x50, 0x4, 0x4B, 0x0, 0x40, 0x4, 0x3D, 0x0, 0x5A, 0x5, 0xC1, 0x0, 0x40, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x54, 0x5, 0xD6, 0x0, 0x54, 0x4, 0x43, 0x0, 0x53, 0x2, 0xBA, 0x0, 0x39, 0x4, 0xE4, 0x0, 0x52, 0x4, 0x89, 0x0, 0x52, 0x4, 0xDB, 0x0, 0x68, 0x4, 0x76, 0x0, 0x14, 0x5, 0x1B, 0x0, 0x1B, 0x4, 0x71, 0x0, 0x78, 0x4, 0x71, 0x0, 0x7A, 0x4, 0x71, 0x0, 0x7A, 0x2, 0xC6, 0x0, 0x14, 0x2, 0x78, 0x0, 0x77, 0x2, 0xD7, 0x0, 0x5D, 0x3, 0x6, 0x0, 0x14, 0x3, 0xD3, 0x0, 0x22, 0x2, 0xA6, 0x0, 0xB7, 0x4, 0xD5, 0x0, 0x8C, 0x6, 0xF7, 0x0, 0x7D, 0x6, 0xF7, 0x0, 0x7D, 0x6, 0xF7, 0x0, 0x7D, 0x4, 0xD0, 0xFF, 0xF9, 0x4, 0xCF, 0x0, 0x7A, 0x4, 0x86, 0x0, 0x7D, 0x6, 0xA8, 0x0, 0x66, 0x6, 0x93, 0x0, 0x66, 0x4, 0xD4, 0x0, 0x50, 0x2, 0xD0, 0x0, 0x1B, 0x2, 0xD0, 0x0, 0x1B, 0x3, 0x2A, 0x0, 0x1B, 0x2, 0xD0, 0x0, 0x7D, 0x2, 0xD0, 0x0, 0x7D, 0x2, 0x68, 0x0, 0x7D, 0x2, 0x68, 0x0, 0x1B, 0x4, 0x73, 0x0, 0x71, 0x4, 0x73, 0x0, 0x71, 0x4, 0x22, 0x0, 0x4C, 0x3, 0x4C, 0x0, 0x1B, 0x3, 0x4C, 0x0, 0x1B, 0x3, 0x4C, 0x0, 0x1B, 0x3, 0xF2, 0x0, 0x1E, 0x2, 0xAA, 0x0, 0x37, 0x2, 0xC1, 0x0, 0x8, 0x5, 0x3E, 0x0, 0x18, 0x4, 0xF0, 0x0, 0x62, 0x4, 0x60, 0x0, 0x77, 0x3, 0xF6, 0x0, 0x19, 0x5, 0xF0, 0x0, 0x22, 0x3, 0xE7, 0x0, 0xD, 0x4, 0x39, 0x0, 0x8, 0x4, 0x93, 0x0, 0x52, 0x5, 0x1, 0x0, 0x52, 0x4, 0x8D, 0x0, 0x51, 0x4, 0xA3, 0x0, 0x51, 0x4, 0x31, 0x0, 0x3B, 0x4, 0x31, 0x0, 0x50, 0x4, 0x31, 0x0, 0x3B, 0x4, 0x31, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x43, 0x0, 0x61, 0x5, 0x11, 0x0, 0x50, 0x3, 0xAD, 0x0, 0x1E, 0x4, 0x2D, 0xFF, 0xF6, 0x3, 0x8B, 0x0, 0x7A, 0x4, 0xDA, 0x0, 0x50, 0x4, 0x31, 0x0, 0x3B, 0x4, 0x31, 0x0, 0x50, 0x7, 0xB8, 0x0, 0x50, 0x7, 0x64, 0x0, 0x50, 0x8, 0xB2, 0x0, 0x50, 0x5, 0xDD, 0x0, 0x8, 0x4, 0x95, 0x0, 0x8, 0x6, 0x3D, 0x0, 0x8, 0x6, 0xD3, 0x0, 0x2D, 0x5, 0x75, 0x0, 0x8C, 0x5, 0x35, 0x0, 0x8C, 0x3, 0xC6, 0x0, 0x36, 0x3, 0xDD, 0x0, 0x57, 0x5, 0x17, 0x0, 0x1B, 0x5, 0x57, 0x0, 0x1B, 0x3, 0x5E, 0x0, 0x64, 0x3, 0x5E, 0x0, 0x64, 0x1, 0xEF, 0x0, 0x22, 0x2, 0x3A, 0x0, 0x64, 0x2, 0x3A, 0x0, 0x28, 0x2, 0x8A, 0x0, 0x28, 0x3, 0x73, 0x0, 0x64, 0x4, 0x7A, 0x0, 0x28, 0x3, 0x45, 0x0, 0x2F, 0x1, 0x94, 0x0, 0x23, 0x2, 0xE3, 0x0, 0x23, 0x1, 0xD6, 0x0, 0x50, 0x1, 0xD6, 0x0, 0x50, 0x1, 0x3C, 0x0, 0x36, 0x1, 0x3C, 0x0, 0x36, 0x2, 0xFD, 0x0, 0x1B, 0x2, 0xFD, 0x0, 0x3C, 0x3, 0x60, 0x0, 0x3D, 0x3, 0x60, 0x0, 0x3D, 0x3, 0x44, 0x0, 0x30, 0x3, 0x44, 0x0, 0x30, 0x3, 0xE7, 0x0, 0x95, 0x3, 0xB1, 0x0, 0x72, 0x1, 0x20, 0x0, 0x3D, 0x3, 0xDC, 0x0, 0x9C, 0x2, 0x74, 0x0, 0x48, 0x2, 0x6D, 0x0, 0x37, 0x1, 0x20, 0x0, 0x3D, 0x3, 0x50, 0x0, 0x51, 0x2, 0x6D, 0x0, 0x37, 0x2, 0x74, 0x0, 0x48, 0x1, 0xF4, 0x0, 0x5F, 0x1, 0xF4, 0x0, 0x5F, 0x1, 0x3C, 0x0, 0x36, 0x1, 0x3C, 0x0, 0x36, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x59, 0x0, 0x3D, 0x3, 0x7D, 0x0, 0x76, 0x2, 0xC, 0x0, 0x82, 0x2, 0xB2, 0x0, 0x79, 0x2, 0x4D, 0x0, 0x29, 0x3, 0xD8, 0x0, 0x7A, 0x3, 0x20, 0x0, 0x4A, 0x1, 0xDB, 0xFF, 0x3A, 0x2, 0xA5, 0x0, 0x50, 0x3, 0x6B, 0x0, 0x35, 0x1, 0x8D, 0x0, 0x64, 0x3, 0x1B, 0x0, 0x3C, 0x3, 0x48, 0x0, 0x2F, 0x3, 0x58, 0x0, 0x51, 0x2, 0xB2, 0x0, 0x1A, 0x2, 0xB2, 0x0, 0x1A, 0x2, 0xB2, 0x0, 0x1A, 0x2, 0xB2, 0x0, 0x1A, 0x2, 0xB2, 0x0, 0x1A, 0x3, 0x1E, 0x0, 0x84, 0x2, 0xF7, 0x0, 0x84, 0x3, 0x54, 0x0, 0x49, 0x3, 0x1C, 0x0, 0x43, 0x3, 0x29, 0x0, 0x50, 0x2, 0x80, 0x0, 0x3D, 0x2, 0x80, 0x0, 0x3D, 0x2, 0x81, 0x0, 0x3D, 0x2, 0x81, 0x0, 0x3D, 0x2, 0x6C, 0x0, 0x83, 0x2, 0x6D, 0x0, 0x37, 0x4, 0x13, 0x0, 0x37, 0x4, 0x1A, 0x0, 0x48, 0x3, 0x70, 0x0, 0x4A, 0x1, 0xBD, 0x0, 0x51, 0x2, 0x35, 0x0, 0x50, 0x2, 0x35, 0x0, 0x50, 0x2, 0x35, 0x0, 0x50, 0x2, 0x35, 0x0, 0x50, 0x3, 0x57, 0x0, 0x50, 0x3, 0x39, 0x0, 0x50, 0x3, 0x98, 0x0, 0x43, 0x0, 0x0, 0xFC, 0x8D, 0x0, 0x0, 0xFD, 0x5E, 0x0, 0x0, 0xFC, 0x60, 0x0, 0x0, 0xFC, 0x72, 0x0, 0x0, 0xFC, 0x60, 0x0, 0x0, 0xFB, 0xEE, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFD, 0x2F, 0x0, 0x0, 0xFC, 0x4, 0x0, 0x0, 0xFD, 0x3D, 0x0, 0x0, 0xFC, 0xDC, 0x0, 0x0, 0xFB, 0xEE, 0x0, 0x0, 0xFC, 0x60, 0x0, 0x0, 0xFD, 0x65, 0x0, 0x0, 0xFC, 0xDD, 0x0, 0x0, 0xFC, 0xB, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFD, 0x47, 0x0, 0x0, 0xFD, 0x1E, 0x0, 0x0, 0xFD, 0x1D, 0x0, 0x0, 0xFF, 0x3A, 0x0, 0x0, 0xFC, 0xB8, 0x0, 0x0, 0xFC, 0xC7, 0x0, 0x0, 0xFC, 0xD4, 0x0, 0x0, 0xFC, 0xDC, 0x0, 0x0, 0xFC, 0xF3, 0x0, 0x0, 0xFE, 0x65, 0x0, 0x0, 0xFD, 0x71, 0x0, 0x0, 0xFC, 0xDB, 0x0, 0x0, 0xFC, 0xDC, 0x0, 0x0, 0xFC, 0xDC, 0x0, 0x0, 0xFC, 0xC2, 0x0, 0x0, 0xFD, 0xBD, 0x0, 0x0, 0xFE, 0xCE, 0x0, 0x0, 0xFD, 0x1B, 0x0, 0x0, 0xFC, 0x3, 0x0, 0x0, 0xFC, 0xDD, 0x0, 0x0, 0xFD, 0x32, 0x0, 0x0, 0xFD, 0x28, 0x0, 0x0, 0xFC, 0xCA, 0x0, 0x0, 0xFD, 0x65, 0x0, 0x0, 0xFC, 0x5B, 0x0, 0x0, 0xFC, 0x2B, 0x0, 0x0, 0xFC, 0x61, 0x0, 0x0, 0xFC, 0x61, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0x43, 0x0, 0x0, 0xFC, 0x62, 0x0, 0x0, 0xFB, 0xED, 0x0, 0x0, 0xFB, 0xED, 0x0, 0x0, 0xFC, 0x49, 0x0, 0x0, 0xFC, 0x69, 0x0, 0x0, 0xFB, 0x44, 0x0, 0x0, 0xFC, 0x1E, 0x0, 0x0, 0xFB, 0xA, 0x0, 0x0, 0xFD, 0x50, 0x0, 0x0, 0xFC, 0x5C, 0x0, 0x0, 0xFC, 0xE8, 0x0, 0x0, 0xFC, 0x2B, 0x0, 0x0, 0xFD, 0x4, 0x0, 0x0, 0xFD, 0x45, 0x0, 0x0, 0xFB, 0xED, 0x0, 0x0, 0xFF, 0x0, 0x0, 0x0, 0xFF, 0xF, 0x0, 0x0, 0xFC, 0x49, 0x0, 0x0, 0xFD, 0x30, 0x0, 0x0, 0xFC, 0xB, 0x0, 0x0, 0xFD, 0x60, 0x0, 0x0, 0xFC, 0x5C, 0x0, 0x0, 0xFC, 0xC2, 0x0, 0x0, 0xFC, 0xCE, 0x0, 0x0, 0xFD, 0x9, 0x0, 0x0, 0xFC, 0x4A, 0x0, 0x0, 0xFC, 0x2A, 0x0, 0x0, 0xFC, 0x55, 0x0, 0x0, 0xFC, 0xD, 0x0, 0x0, 0xFC, 0xD1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFC, 0x7C, 0x0, 0x0, 0xFD, 0x6F, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFD, 0x4, 0x0, 0x0, 0xFC, 0xBE, 0x0, 0x0, 0xFC, 0xCE, 0x0, 0x0, 0xFC, 0x17, 0x0, 0x0, 0xFD, 0x4F, 0x1, 0xC0, 0x0, 0x49, 0x0, 0x0, 0xFC, 0xD9, 0x0, 0x0, 0xFC, 0x41, 0x0, 0x0, 0xFC, 0xFC, 0x0, 0x0, 0xFD, 0x34, 0x0, 0x0, 0xFD, 0x34, 0x0, 0x0, 0xFD, 0xB6, 0x0, 0x0, 0xFD, 0xB6, 0x0, 0x0, 0xFC, 0x2E, 0x0, 0x0, 0xFD, 0x34, 0x0, 0x0, 0xFD, 0x27, 0x0, 0x0, 0xFC, 0xD0, 0x0, 0x0, 0xFC, 0xCE, 0x0, 0x0, 0xFD, 0x79, 0x0, 0x0, 0xFC, 0xC2, 0x0, 0x0, 0xFC, 0xD6, 0x0, 0x0, 0xFC, 0xCC, 0x0, 0x0, 0xFC, 0xC0, 0x0, 0x0, 0xFC, 0xD6, 0x0, 0x0, 0xFC, 0x33, 0x0, 0x0, 0xFD, 0x46, 0x0, 0x0, 0xFC, 0xFB, 0x0, 0x0, 0xFC, 0xC5, 0x0, 0x0, 0xFC, 0xE6, 0x4, 0x81, 0x0, 0x95, 0x3, 0xEB, 0x0, 0x1B, 0x4, 0xDB, 0x0, 0x2D, 0x4, 0x2D, 0x0, 0x36, 0x1, 0xEF, 0x0, 0x51, 0x1, 0xEF, 0x0, 0x50, 0x5, 0xA9, 0x0, 0x95, 0x4, 0xBD, 0x0, 0x86, 0x4, 0x31, 0x0, 0x3B, 0x4, 0x31, 0x0, 0x50, 0x4, 0x31, 0x0, 0x3B, 0x2, 0x20, 0x0, 0x47, 0x2, 0x5D, 0x0, 0xC7, 0x4, 0x3C, 0x0, 0x68, 0x2, 0x42, 0x0, 0x8E, 0x4, 0x75, 0x0, 0x9B, 0x5, 0xC0, 0x0, 0x19, 0x5, 0x7B, 0x0, 0x5C, 0x5, 0x39, 0x0, 0x20, 0x4, 0x91, 0x0, 0x6D, 0x5, 0xB1, 0x0, 0x9B, 0x4, 0x91, 0x0, 0x48, 0x5, 0xF0, 0x0, 0x4A, 0x5, 0xAB, 0x0, 0x44, 0x5, 0x5C, 0x0, 0x6B, 0x4, 0x85, 0x0, 0x56, 0x4, 0xC6, 0x0, 0x96, 0x4, 0xF, 0x0, 0x21, 0x4, 0x89, 0x0, 0x54, 0x4, 0x61, 0x0, 0x61, 0x4, 0x1B, 0x0, 0x61, 0x4, 0x89, 0x0, 0x7F, 0x4, 0xA2, 0x0, 0x74, 0x2, 0xAA, 0x0, 0xAA, 0x4, 0x6A, 0x0, 0x16, 0x4, 0x13, 0x0, 0x63, 0x4, 0xF4, 0x0, 0x2E, 0x4, 0x89, 0x0, 0x81, 0x4, 0x38, 0x0, 0x52, 0x4, 0x91, 0x0, 0x53, 0x4, 0x2E, 0x0, 0x40, 0x4, 0x61, 0x0, 0x80, 0x5, 0xD0, 0x0, 0x45, 0x5, 0xCA, 0x0, 0x50, 0x6, 0x95, 0x0, 0x66, 0x5, 0xB, 0x0, 0x95, 0x4, 0x81, 0x0, 0x50, 0x4, 0xB3, 0x0, 0x76, 0x4, 0x7B, 0xFF, 0xE1, 0x5, 0xD3, 0x0, 0x54, 0x6, 0x71, 0x0, 0x33, 0x5, 0x59, 0x0, 0x23, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x4, 0x66, 0x0, 0x95, 0x4, 0x24, 0x0, 0x87, 0x5, 0x2C, 0x0, 0x23, 0x4, 0x66, 0x0, 0x52, 0x5, 0xFB, 0x0, 0x21, 0x5, 0x7B, 0x0, 0x21, 0x5, 0x36, 0x0, 0x23, 0x4, 0x82, 0x0, 0x50, 0x3, 0x95, 0x0, 0x50, 0x3, 0x95, 0x0, 0x28, 0x5, 0xD9, 0x0, 0x7D, 0x4, 0xD8, 0x0, 0x14, 0x5, 0x39, 0x0, 0x4D, 0x5, 0x39, 0x0, 0x66, 0x5, 0x39, 0x0, 0x4D, 0x5, 0xFF, 0x0, 0x23, 0x5, 0x5A, 0x0, 0x69, 0x8, 0x89, 0x0, 0x2D, 0x8, 0x90, 0x0, 0x9B, 0x6, 0x5C, 0x0, 0x31, 0x5, 0xAA, 0x0, 0x93, 0x5, 0x8, 0x0, 0x90, 0x6, 0x7, 0x0, 0x24, 0x7, 0xA2, 0x0, 0x17, 0x4, 0xD6, 0x0, 0x49, 0x5, 0xA9, 0x0, 0x95, 0x5, 0xAA, 0x0, 0x2D, 0x5, 0xA, 0x0, 0x3A, 0x6, 0x60, 0x0, 0x4F, 0x5, 0xF9, 0x0, 0x93, 0x5, 0x89, 0x0, 0x8E, 0x7, 0x9C, 0x0, 0x99, 0x7, 0xFA, 0x0, 0x99, 0x6, 0x1A, 0x0, 0x18, 0x6, 0xF9, 0x0, 0x9C, 0x5, 0x7, 0x0, 0x91, 0x5, 0x51, 0x0, 0x6B, 0x7, 0x54, 0x0, 0xA0, 0x4, 0xF7, 0x0, 0x21, 0x4, 0x7D, 0x0, 0x5B, 0x4, 0x90, 0x0, 0x8F, 0x3, 0x5B, 0x0, 0x85, 0x4, 0xF7, 0x0, 0x27, 0x6, 0x77, 0x0, 0x1E, 0x4, 0x17, 0x0, 0x4E, 0x4, 0x98, 0x0, 0x86, 0x4, 0x6F, 0x0, 0x8F, 0x4, 0x9A, 0x0, 0x22, 0x6, 0x3, 0x0, 0x8F, 0x4, 0x98, 0x0, 0x86, 0x4, 0x98, 0x0, 0x86, 0x3, 0xF6, 0x0, 0x24, 0x5, 0xD3, 0x0, 0x54, 0x4, 0xD4, 0x0, 0x86, 0x4, 0x66, 0x0, 0x5F, 0x6, 0x8F, 0x0, 0x86, 0x6, 0xEC, 0x0, 0x7F, 0x5, 0x18, 0x0, 0x1F, 0x6, 0x6F, 0x0, 0x8F, 0x4, 0x69, 0x0, 0x8F, 0x4, 0x3D, 0x0, 0x52, 0x6, 0x84, 0x0, 0x91, 0x4, 0x70, 0x0, 0x27, 0x4, 0x71, 0xFF, 0xDA, 0x4, 0x3D, 0x0, 0x54, 0x6, 0xD2, 0x0, 0x1F, 0x6, 0xE4, 0x0, 0x86, 0x4, 0x89, 0xFF, 0xEE, 0x4, 0x98, 0x0, 0x86, 0x7, 0x49, 0x0, 0x89, 0x6, 0x50, 0x0, 0x70, 0x4, 0x68, 0xFF, 0xDF, 0x7, 0x29, 0x0, 0x99, 0x6, 0x1, 0x0, 0x87, 0x5, 0xC, 0x0, 0x1D, 0x4, 0x61, 0x0, 0xA, 0x7, 0x42, 0x0, 0xAD, 0x6, 0x36, 0x0, 0x9E, 0x6, 0xEE, 0x0, 0x80, 0x5, 0xE7, 0x0, 0x83, 0x9, 0x33, 0x0, 0xA4, 0x7, 0xFA, 0x0, 0x90, 0x4, 0x21, 0x0, 0x29, 0x3, 0xF0, 0x0, 0x33, 0x5, 0x7B, 0x0, 0x5F, 0x4, 0x89, 0x0, 0x4F, 0x5, 0x1A, 0x0, 0x10, 0x4, 0xF, 0x0, 0x21, 0x5, 0x7B, 0x0, 0x5F, 0x4, 0x89, 0x0, 0x50, 0x7, 0x45, 0x0, 0x89, 0x6, 0x45, 0x0, 0x74, 0x7, 0x49, 0x0, 0x89, 0x6, 0x50, 0x0, 0x70, 0x5, 0x1B, 0x0, 0x67, 0x4, 0x4A, 0x0, 0x5C, 0x5, 0x0, 0x0, 0x6E, 0x0, 0x0, 0xFC, 0x65, 0x0, 0x0, 0xFC, 0x72, 0x0, 0x0, 0xFD, 0x7A, 0x0, 0x0, 0xFD, 0xA5, 0x0, 0x0, 0xFC, 0x2D, 0x0, 0x0, 0xFA, 0x24, 0x0, 0x0, 0xFA, 0x4C, 0x6, 0x2A, 0x0, 0x95, 0x5, 0x1B, 0x0, 0x86, 0x4, 0x68, 0xFF, 0xDF, 0x5, 0x14, 0x0, 0x95, 0x4, 0x87, 0x0, 0x7D, 0x4, 0x6A, 0x0, 0x90, 0x3, 0xA2, 0x0, 0x7F, 0x4, 0xF2, 0x0, 0x9B, 0x4, 0x21, 0x0, 0x7F, 0x8, 0x1C, 0x0, 0x17, 0x6, 0xD3, 0x0, 0x1E, 0x5, 0xCC, 0x0, 0x9B, 0x4, 0xFA, 0x0, 0x8F, 0x5, 0x2D, 0x0, 0x91, 0x4, 0xAB, 0x0, 0x8E, 0x6, 0x96, 0x0, 0x34, 0x5, 0xA4, 0x0, 0x3E, 0x6, 0x28, 0x0, 0x95, 0x5, 0xD, 0x0, 0x86, 0x7, 0xD1, 0x0, 0x95, 0x5, 0xAB, 0x0, 0x7F, 0x8, 0x47, 0x0, 0x9B, 0x6, 0xF5, 0x0, 0x7F, 0x6, 0x2B, 0x0, 0x67, 0x5, 0x0, 0x0, 0x61, 0x5, 0x39, 0x0, 0x29, 0x4, 0x46, 0x0, 0x1F, 0x7, 0x32, 0x0, 0x2E, 0x5, 0x71, 0x0, 0x26, 0x5, 0xFB, 0x0, 0x8E, 0x4, 0xDC, 0x0, 0x5F, 0x5, 0x75, 0x0, 0x81, 0x4, 0x73, 0x0, 0x74, 0x5, 0x87, 0x0, 0x85, 0x6, 0x24, 0x0, 0x17, 0x4, 0xC4, 0xFF, 0xCA, 0x5, 0x21, 0x0, 0x91, 0x4, 0x79, 0x0, 0x8E, 0x6, 0x28, 0x0, 0x2D, 0x5, 0x1D, 0x0, 0x22, 0x5, 0xB0, 0x0, 0x9B, 0x4, 0x89, 0x0, 0x7F, 0x6, 0x35, 0x0, 0x95, 0x5, 0x1A, 0x0, 0x86, 0x7, 0x7E, 0x0, 0x95, 0x6, 0x78, 0x0, 0x8F, 0x5, 0x89, 0x0, 0x51, 0x4, 0xA6, 0x0, 0x5C, 0x4, 0xA7, 0x0, 0x5E, 0x4, 0xC7, 0x0, 0x32, 0x3, 0xAF, 0x0, 0x2C, 0x5, 0x67, 0x0, 0x29, 0x4, 0x74, 0x0, 0x1F, 0x5, 0x7, 0x0, 0x52, 0x6, 0xF2, 0x0, 0x68, 0x6, 0xDE, 0x0, 0x5F, 0x6, 0x53, 0x0, 0x3C, 0x5, 0x29, 0x0, 0x30, 0x4, 0x7B, 0x0, 0x49, 0x4, 0x3F, 0x0, 0x75, 0x7, 0xBE, 0x0, 0x43, 0x6, 0x9E, 0x0, 0x41, 0x7, 0xFE, 0x0, 0x94, 0x6, 0x9F, 0x0, 0x77, 0x5, 0x4, 0x0, 0x5D, 0x4, 0x2D, 0x0, 0x55, 0x5, 0xAA, 0x0, 0x22, 0x5, 0x1E, 0x0, 0x45, 0x5, 0x56, 0x0, 0x82, 0x6, 0x49, 0x0, 0x2D, 0x5, 0x3E, 0x0, 0x22, 0x7, 0xAE, 0x0, 0x2D, 0x6, 0x1C, 0x0, 0x22, 0x7, 0x1F, 0x0, 0x95, 0x6, 0x37, 0x0, 0x7D, 0x7, 0x76, 0x0, 0x43, 0x6, 0xE5, 0x0, 0x27, 0x5, 0x27, 0x0, 0x9B, 0x4, 0x6F, 0x0, 0x8F, 0x8, 0xC6, 0x0, 0x2D, 0x7, 0x1C, 0x0, 0x22, 0x8, 0xD7, 0x0, 0x9B, 0x7, 0x19, 0x0, 0x86, 0x6, 0x23, 0x0, 0x9B, 0x5, 0xE, 0x0, 0x86, 0x5, 0xFD, 0x0, 0x85, 0x4, 0xF5, 0x0, 0x7A, 0x6, 0x10, 0x0, 0xD, 0x5, 0xB, 0x0, 0xD, 0xA, 0xC2, 0x0, 0x24, 0x9, 0x5, 0x0, 0x27, 0x6, 0x1C, 0x0, 0x3A, 0x4, 0xFA, 0x0, 0x2B, 0x6, 0x1B, 0x0, 0x2D, 0x5, 0x10, 0x0, 0x22, 0x0, 0x0, 0xFB, 0x6C, 0x0, 0x0, 0xFB, 0xAF, 0x0, 0x0, 0xFB, 0xD1, 0x0, 0x0, 0xFC, 0x8A, 0x0, 0x0, 0xFC, 0x25, 0x0, 0x0, 0xFB, 0xA6, 0x0, 0x0, 0xFB, 0x4C, 0x0, 0x0, 0xFD, 0x5B, 0x0, 0x0, 0xFC, 0x76, 0x0, 0x0, 0xFD, 0x5B, 0x0, 0x0, 0xFD, 0x57, 0x0, 0x0, 0xFB, 0xAA, 0x0, 0x0, 0xFA, 0xED, 0x0, 0x0, 0xFB, 0x9D, 0x0, 0x0, 0xFA, 0xEF, 0x4, 0xA0, 0x0, 0x8, 0x6, 0x47, 0xFF, 0xF0, 0x6, 0xC1, 0x0, 0x3D, 0x5, 0x17, 0x0, 0x1B, 0x4, 0x55, 0x0, 0x50, 0x4, 0x8A, 0x0, 0x86, 0x4, 0xEE, 0x0, 0x2D, 0x4, 0xA, 0x0, 0x86, 0x4, 0x17, 0x0, 0x4E, 0x2, 0x7, 0x0, 0x7A, 0x3, 0xF0, 0x0, 0x1A, 0x4, 0x6D, 0x0, 0x84, 0x3, 0xB4, 0x0, 0x2D, 0x5, 0xEB, 0x0, 0x86, 0x4, 0x98, 0x0, 0x85, 0x4, 0x9E, 0x0, 0x50, 0x4, 0x31, 0x0, 0x3B, 0x5, 0x2, 0x0, 0x50, 0x5, 0x2, 0x0, 0x50, 0x5, 0x8F, 0x0, 0x25, 0x7, 0x3E, 0x0, 0x4C, 0x3, 0xE6, 0x0, 0x4F, 0x4, 0x9B, 0x0, 0x4F, 0x4, 0x9B, 0x0, 0x4F, 0x4, 0x6C, 0x0, 0x8F, 0x4, 0x7A, 0x0, 0x31, 0x4, 0x7A, 0x0, 0x31, 0x3, 0xF6, 0x0, 0x25, 0x4, 0xF2, 0x0, 0x7A, 0x4, 0xF6, 0x0, 0x5B, 0x6, 0x5C, 0x0, 0x5B, 0x4, 0xF6, 0x0, 0x5B, 0x3, 0xF7, 0x0, 0x1A, 0x5, 0xF4, 0x0, 0x25, 0x4, 0x7, 0x0, 0x56, 0x4, 0x7, 0x0, 0x4E, 0x4, 0x25, 0x0, 0x56, 0x4, 0xCA, 0x0, 0x39, 0x3, 0x65, 0x0, 0x8F, 0x4, 0xA0, 0x0, 0x8, 0x4, 0xAB, 0x0, 0x8F, 0x4, 0x6C, 0x0, 0x8F, 0x5, 0x52, 0x0, 0x2D, 0x4, 0xA4, 0x0, 0x22, 0x4, 0x2F, 0x0, 0x1B, 0x5, 0xB2, 0x0, 0x1B, 0x3, 0xD1, 0x0, 0x64, 0x4, 0xA9, 0x0, 0x1B, 0x3, 0xE3, 0x0, 0x64, 0x3, 0x65, 0x0, 0x64, 0x3, 0x65, 0x0, 0x35, 0x3, 0xF9, 0x0, 0x3C, 0x4, 0x40, 0x0, 0x64, 0x1, 0xC1, 0x0, 0x7F, 0x3, 0x55, 0x0, 0x28, 0x3, 0xE1, 0x0, 0x64, 0x3, 0x33, 0x0, 0x64, 0x5, 0x38, 0x0, 0x64, 0x4, 0x3D, 0x0, 0x64, 0x4, 0x3D, 0x0, 0x64, 0x4, 0xC, 0x0, 0x3C, 0x3, 0x78, 0x0, 0x3C, 0x3, 0xC7, 0x0, 0x64, 0x3, 0xDA, 0x0, 0x64, 0x3, 0xA2, 0x0, 0x28, 0x3, 0xF5, 0x0, 0x64, 0x5, 0x74, 0x0, 0x35, 0x3, 0x56, 0x0, 0x3C, 0x3, 0x56, 0x0, 0x56, 0x3, 0xA6, 0x0, 0x3C, 0x5, 0x33, 0x0, 0x3C, 0x3, 0x79, 0x0, 0x64, 0x3, 0x79, 0x0, 0x3C, 0x3, 0x52, 0x0, 0x3C, 0x3, 0x52, 0x0, 0x3C, 0x3, 0x24, 0x0, 0x3C, 0x3, 0x24, 0x0, 0x3C, 0x3, 0x7A, 0x0, 0x3C, 0x1, 0xD4, 0x0, 0x78, 0x3, 0x52, 0x0, 0x64, 0x5, 0x30, 0x0, 0x64, 0x3, 0x5E, 0x0, 0x64, 0x3, 0x6E, 0x0, 0x3C, 0x2, 0xBF, 0x0, 0x28, 0x3, 0x46, 0x0, 0x28, 0x3, 0x46, 0x0, 0x28, 0x3, 0x79, 0x0, 0x64, 0x2, 0x2E, 0x0, 0x28, 0x3, 0x5E, 0x0, 0x64, 0x3, 0xA6, 0x0, 0x3C, 0x5, 0x30, 0x0, 0x64, 0x3, 0x33, 0x0, 0x28, 0x3, 0xA2, 0x0, 0x35, 0x3, 0xA9, 0x0, 0x64, 0x3, 0x5A, 0x0, 0x28, 0x3, 0x60, 0x0, 0x3C, 0x4, 0x68, 0x0, 0x3C, 0x3, 0x88, 0x0, 0x35, 0x1, 0xD4, 0x0, 0x78, 0x2, 0x3A, 0x0, 0x64, 0x3, 0x5E, 0x0, 0x64, 0x3, 0x33, 0x0, 0x28, 0x3, 0xA9, 0x0, 0x64, 0x3, 0x5A, 0x0, 0x28, 0x3, 0x75, 0x0, 0x64, 0x4, 0x68, 0x0, 0x3C, 0x3, 0xA2, 0x0, 0x42, 0x6, 0xFC, 0x0, 0x77, 0x5, 0xF, 0xFF, 0xEC, 0x4, 0xFF, 0x0, 0x50, 0x3, 0x56, 0x0, 0x13, 0x7, 0xD7, 0x0, 0x14, 0x5, 0x4D, 0x0, 0x14, 0x4, 0xF1, 0xFF, 0xE6, 0x3, 0x57, 0xFF, 0xDD, 0x3, 0x1D, 0xFF, 0xFC, 0x4, 0x51, 0x0, 0x27, 0x3, 0x1D, 0xFF, 0xE2, 0x4, 0x28, 0x0, 0x2D, 0x4, 0x89, 0x0, 0x7C, 0x4, 0x40, 0x0, 0x64, 0x4, 0x63, 0x0, 0x3D, 0x6, 0xE1, 0x0, 0x22, 0x2, 0xC6, 0x0, 0x14, 0x2, 0xE5, 0x0, 0x14, 0x5, 0x17, 0x0, 0x18, 0x5, 0x5F, 0x0, 0x18, 0x4, 0xF0, 0x0, 0x18, 0x4, 0x82, 0x0, 0x7D, 0x4, 0xCC, 0x0, 0x50, 0x2, 0xD6, 0x0, 0x2D, 0x5, 0xBB, 0x0, 0x51, 0x4, 0x64, 0x0, 0x7D, 0x2, 0x56, 0x0, 0x82, 0x7, 0x43, 0x0, 0x7D, 0x4, 0xC6, 0x0, 0x7D, 0x4, 0x81, 0x0, 0x7D, 0x2, 0xD0, 0x0, 0x64, 0x4, 0x22, 0x0, 0x4C, 0x3, 0xA4, 0x0, 0x1B, 0x3, 0xF6, 0x0, 0x17, 0x4, 0x1C, 0x0, 0x1F, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD5, 0x0, 0x5B, 0x5, 0x2A, 0x0, 0x50, 0x4, 0xAE, 0x0, 0x4E, 0x4, 0x79, 0x0, 0x54, 0x4, 0x8C, 0x0, 0x61, 0x4, 0x5A, 0x0, 0x4D, 0x5, 0x77, 0x0, 0x47, 0x2, 0x8A, 0x0, 0x7D, 0x4, 0x38, 0x0, 0x3B, 0x3, 0x4C, 0x0, 0x1B, 0x5, 0xF, 0x0, 0x77, 0x4, 0xA7, 0x0, 0x5E, 0x3, 0xAC, 0x0, 0x41, 0x3, 0x31, 0x0, 0x3C, 0x3, 0x7C, 0x0, 0x3C, 0x3, 0x83, 0x0, 0x3C, 0x3, 0xF, 0x0, 0x32, 0x2, 0x5C, 0x0, 0x35, 0x2, 0x75, 0x0, 0x33, 0x3, 0x7A, 0x0, 0x3C, 0x3, 0x5E, 0x0, 0x64, 0x2, 0x6A, 0x0, 0x28, 0x2, 0x4, 0x0, 0x64, 0x2, 0x6A, 0x0, 0x3F, 0x2, 0x6A, 0x0, 0x28, 0x2, 0xB2, 0x0, 0x0, 0x1, 0xEA, 0x0, 0x64, 0x1, 0xF8, 0x0, 0x64, 0x2, 0xE7, 0x0, 0x65, 0x5, 0x2E, 0x0, 0x64, 0x5, 0x2E, 0x0, 0x64, 0x3, 0xA0, 0x0, 0x1A, 0x3, 0xAD, 0x0, 0x64, 0x3, 0xE7, 0x0, 0x64, 0x3, 0x6E, 0x0, 0x3C, 0x4, 0x6D, 0x0, 0x3C, 0x3, 0x1B, 0x0, 0x3C, 0x2, 0x1E, 0x0, 0x1A, 0x2, 0x47, 0x0, 0x28, 0x3, 0xB2, 0x0, 0x28, 0x3, 0xD0, 0x0, 0x4C, 0x3, 0xBA, 0x0, 0x5B, 0x3, 0x68, 0x0, 0x5B, 0x3, 0x23, 0x0, 0x1C, 0x2, 0xE4, 0x0, 0x2E, 0x3, 0x47, 0x0, 0x2E, 0x3, 0xAE, 0x0, 0x2E, 0x3, 0x67, 0x0, 0x33, 0x3, 0xA1, 0x0, 0x58, 0x0, 0x0, 0xFB, 0xCE, 0x0, 0x0, 0xFB, 0xCB, 0x0, 0x0, 0xFD, 0xA, 0x0, 0x0, 0xFC, 0xCB, 0x0, 0x0, 0xFC, 0xDE, 0x0, 0x0, 0xFC, 0x3C, 0x0, 0x0, 0xFC, 0xA4, 0x0, 0x0, 0xFC, 0x6E, 0x0, 0x0, 0xFC, 0x22, 0x0, 0x0, 0xFC, 0x60, 0x0, 0x0, 0xFD, 0x44, 0x0, 0x0, 0xFB, 0x61, 0x0, 0x0, 0xFB, 0x3D, 0x0, 0x0, 0xFC, 0x9F, 0x0, 0x0, 0xFD, 0x2F, 0x0, 0x0, 0xFC, 0xD6, 0x0, 0x0, 0xFC, 0xC9, 0x0, 0x0, 0xFC, 0x94, 0x0, 0x0, 0xFC, 0x9B, 0x0, 0x0, 0xFC, 0x3D, 0x0, 0x0, 0xFC, 0x1F, 0x0, 0x0, 0xFC, 0x19, 0x0, 0x0, 0xFC, 0x13, 0x0, 0x0, 0xFC, 0xCC, 0x0, 0x0, 0xFC, 0xAA, 0x0, 0x0, 0xFC, 0xAA, 0x0, 0x0, 0xFC, 0xB8, 0x0, 0x0, 0xFC, 0xAA, 0x0, 0x0, 0xFC, 0xD2, 0x0, 0x0, 0xFD, 0x71, 0x0, 0x0, 0xFD, 0xB, 0x0, 0x0, 0xFC, 0x65, 0x0, 0x0, 0xFC, 0xC9, 0x0, 0x0, 0xFC, 0x97, 0x0, 0x0, 0xFC, 0xBB, 0x0, 0x0, 0xFD, 0x1, 0x0, 0x0, 0xFC, 0xC3, 0x0, 0x0, 0xFD, 0x6B, 0x0, 0x0, 0xFC, 0xD8, 0x0, 0x0, 0xFC, 0x9B, 0x0, 0x0, 0xFC, 0xBA, 0x0, 0x0, 0xFC, 0xAD, 0x0, 0x0, 0xFC, 0xBF, 0x0, 0x0, 0xFD, 0xD, 0x0, 0x0, 0xFC, 0xFB, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0xB9, 0x0, 0x0, 0xFC, 0xE5, 0x0, 0x0, 0xFC, 0x6E, 0x0, 0x0, 0xFC, 0x40, 0x0, 0x0, 0xFC, 0xD0, 0x0, 0x0, 0xFC, 0xB1, 0x0, 0x0, 0xFC, 0xC9, 0x0, 0x0, 0xFC, 0xDB, 0x0, 0x0, 0xFD, 0x23, 0x0, 0x0, 0xFC, 0x55, 0x0, 0x0, 0xFC, 0x46, 0x0, 0x0, 0xFA, 0xEF, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x2, 0xF1, 0x0, 0xA, 0x2, 0xEB, 0x0, 0x6, 0x2, 0xE6, 0x0, 0x14, 0x2, 0xE1, 0x0, 0xE, 0x2, 0xD6, 0x0, 0xD2, 0x2, 0xEB, 0x0, 0x41, 0x2, 0xD6, 0x0, 0x2D, 0x5, 0x4B, 0x0, 0x74, 0x4, 0x89, 0x0, 0x54, 0x6, 0x1F, 0x0, 0x95, 0x4, 0x6B, 0x0, 0x1B, 0x4, 0x9A, 0x0, 0x66, 0x4, 0x5F, 0x0, 0x4E, 0x5, 0x73, 0x0, 0x1C, 0x4, 0xA9, 0x0, 0x1B, 0x1, 0xF1, 0x0, 0x5B, 0x1, 0xC4, 0x0, 0x73, 0x2, 0x2, 0x0, 0x5B, 0x3, 0x6D, 0x0, 0x4B, 0x3, 0xB4, 0x0, 0x6F, 0x3, 0x1F, 0x0, 0x5B, 0x3, 0xB, 0x0, 0x5B, 0x3, 0x15, 0x0, 0x6F, 0x2, 0xFA, 0x0, 0x68, 0x3, 0x2C, 0x0, 0x68, 0x3, 0x15, 0x0, 0x6F, 0x3, 0xB4, 0x0, 0x6F, 0x3, 0xB4, 0x0, 0x6F, 0x2, 0x0, 0x0, 0x66, 0x2, 0x0, 0x0, 0x64, 0x1, 0xF1, 0x0, 0x69, 0x4, 0x14, 0x0, 0x0, 0x8, 0x29, 0x0, 0x0, 0x4, 0x14, 0x0, 0x0, 0x8, 0x29, 0x0, 0x0, 0x2, 0xB9, 0x0, 0x0, 0x2, 0xA, 0x0, 0x0, 0x1, 0x5C, 0x0, 0x0, 0x4, 0x7F, 0x0, 0x0, 0x2, 0x30, 0x0, 0x0, 0x1, 0xA2, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0xD1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0x68, 0x0, 0x0, 0xFC, 0x94, 0x0, 0x0, 0xFC, 0xAD, 0x0, 0x0, 0xFC, 0x5E, 0x2, 0xA1, 0x0, 0x47, 0x2, 0xA1, 0x0, 0x47, 0x4, 0x83, 0x0, 0x9F, 0x5, 0x29, 0x0, 0x9D, 0x6, 0x30, 0x0, 0x82, 0x3, 0x37, 0x0, 0xAB, 0x3, 0x9D, 0x0, 0x4, 0x1, 0xC0, 0x0, 0x64, 0x1, 0xBC, 0x0, 0x34, 0x1, 0xCE, 0x0, 0x32, 0x1, 0xA8, 0x0, 0x4B, 0x3, 0x14, 0x0, 0x6D, 0x3, 0x1C, 0x0, 0x41, 0x3, 0x8, 0x0, 0x32, 0x3, 0x35, 0x0, 0x4F, 0x4, 0x5D, 0x0, 0x41, 0x4, 0x9A, 0x0, 0x5D, 0x2, 0xCC, 0x0, 0x88, 0x4, 0x5E, 0x0, 0x98, 0x2, 0x2A, 0x0, 0x85, 0x3, 0xFA, 0x0, 0x8C, 0x5, 0xA6, 0x0, 0x8C, 0x1, 0xC8, 0x0, 0x5B, 0x7, 0xA8, 0x0, 0x4B, 0x9, 0x5F, 0x0, 0x4B, 0x4, 0xF7, 0x0, 0x4C, 0x2, 0x1B, 0x0, 0x4C, 0x3, 0x91, 0x0, 0x50, 0x4, 0xF8, 0x0, 0x50, 0x3, 0x79, 0x0, 0x30, 0x2, 0x73, 0x0, 0x6C, 0x2, 0x69, 0x0, 0x55, 0x5, 0x44, 0x0, 0x4A, 0x3, 0xC3, 0x0, 0x2C, 0x3, 0xB0, 0x0, 0xD, 0x6, 0x23, 0x0, 0xB, 0x6, 0x23, 0x0, 0xB, 0x3, 0x54, 0x0, 0x3B, 0x5, 0x58, 0x0, 0x50, 0x3, 0x6D, 0x0, 0x54, 0x3, 0x9C, 0x0, 0x2D, 0x2, 0x8F, 0x0, 0x99, 0x2, 0x90, 0x0, 0x5E, 0x3, 0xB2, 0x0, 0x3C, 0x4, 0x11, 0x0, 0x84, 0x4, 0xE7, 0x0, 0x66, 0x4, 0xE7, 0x0, 0x66, 0x3, 0xC3, 0x0, 0x3E, 0x2, 0x20, 0x0, 0x84, 0x6, 0x23, 0x0, 0xB, 0x3, 0xE7, 0x0, 0x50, 0x3, 0xD7, 0x0, 0x43, 0x5, 0x7E, 0x0, 0x50, 0x6, 0x23, 0x0, 0xB, 0x5, 0x24, 0x0, 0xC0, 0x3, 0xCA, 0x0, 0x43, 0x6, 0x63, 0x0, 0x50, 0x4, 0xFC, 0x0, 0x43, 0x4, 0x9F, 0x0, 0x43, 0x1, 0xB3, 0x0, 0x43, 0x4, 0x94, 0x0, 0x43, 0x4, 0xB8, 0x0, 0x43, 0x1, 0xB3, 0x0, 0x43, 0x1, 0xB3, 0x0, 0x43, 0x2, 0xF6, 0x0, 0x4C, 0x1, 0xD7, 0x0, 0x79, 0x2, 0xF6, 0x0, 0x35, 0x2, 0xF6, 0x0, 0x4F, 0x2, 0xF6, 0x0, 0x4E, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x47, 0x3, 0x3C, 0x0, 0x50, 0x2, 0xF9, 0x0, 0x50, 0x2, 0xF9, 0x0, 0x50, 0x2, 0x0, 0x0, 0x50, 0x2, 0x0, 0x0, 0x50, 0x3, 0x5D, 0x0, 0x6A, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x81, 0x2, 0xF6, 0x0, 0x3C, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x35, 0x2, 0xF6, 0x0, 0x4F, 0x2, 0xF6, 0x0, 0x4E, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x47, 0x3, 0x3C, 0x0, 0x50, 0x2, 0xF9, 0x0, 0x50, 0x2, 0xF9, 0x0, 0x50, 0x2, 0x0, 0x0, 0x50, 0x2, 0x0, 0x0, 0x50, 0x3, 0x56, 0x0, 0x3C, 0x3, 0x52, 0x0, 0x3C, 0x3, 0x6E, 0x0, 0x3C, 0x3, 0x3A, 0x0, 0x28, 0x3, 0x52, 0x0, 0x3C, 0x3, 0x5E, 0x0, 0x64, 0x3, 0x52, 0x0, 0x64, 0x1, 0xB5, 0x0, 0x78, 0x5, 0x30, 0x0, 0x64, 0x3, 0x5E, 0x0, 0x64, 0x3, 0x79, 0x0, 0x64, 0x3, 0x1B, 0x0, 0x3C, 0x2, 0x2E, 0x0, 0x28, 0x5, 0x7B, 0x0, 0x58, 0x5, 0x39, 0x0, 0x66, 0x5, 0x39, 0x0, 0x66, 0x4, 0xB6, 0x0, 0x60, 0x6, 0xF7, 0x0, 0x7D, 0x6, 0x71, 0x0, 0x22, 0x6, 0xB8, 0x0, 0x99, 0x8, 0x94, 0x0, 0x95, 0x6, 0x29, 0x0, 0x22, 0x6, 0x8D, 0x0, 0x7D, 0x4, 0x8C, 0x0, 0x5E, 0x5, 0xA3, 0x0, 0x22, 0x4, 0xDC, 0x0, 0x2D, 0xA, 0x74, 0x0, 0x35, 0x5, 0x1F, 0x0, 0x22, 0x5, 0xF6, 0x0, 0x22, 0x5, 0x73, 0x0, 0x69, 0x5, 0x82, 0x0, 0x22, 0x4, 0xCF, 0x0, 0x43, 0x5, 0x39, 0x0, 0x65, 0x4, 0x56, 0x0, 0x22, 0x5, 0x29, 0x0, 0x35, 0x4, 0xDC, 0x0, 0x2D, 0x4, 0x34, 0x0, 0x28, 0x4, 0xA3, 0x0, 0x22, 0x6, 0x97, 0x0, 0x28, 0x5, 0x5F, 0x0, 0x50, 0x5, 0x7D, 0x0, 0x29, 0x5, 0x86, 0x0, 0x66, 0x0, 0x0, 0xFB, 0x5B, 0x0, 0x0, 0xFA, 0x85, 0x0, 0x0, 0xFB, 0x5B, 0x0, 0x0, 0xFC, 0x54, 0x6, 0x1C, 0x0, 0x6A, 0x6, 0xF, 0x0, 0x6A, 0x7, 0x20, 0x0, 0x28, 0x5, 0xE5, 0x0, 0x71, 0x6, 0x9, 0x0, 0x6A, 0x6, 0x8A, 0x0, 0x28, 0x3, 0xE3, 0x0, 0x4C, 0x8, 0x2F, 0x0, 0x90, 0x6, 0x38, 0x0, 0x56, 0x5, 0x87, 0x0, 0x95, 0x4, 0xFF, 0x0, 0x95, 0x5, 0x18, 0x0, 0x65, 0x5, 0xB0, 0x0, 0x65, 0x5, 0x9, 0x0, 0x6E, 0x5, 0x2D, 0x0, 0x12, 0x4, 0x9E, 0x0, 0x51, 0x5, 0x11, 0x0, 0x95, 0x5, 0x52, 0x0, 0x12, 0x5, 0x15, 0x0, 0x96, 0x4, 0x66, 0x0, 0x35, 0x6, 0x48, 0x0, 0x65, 0x8, 0xA, 0x0, 0x6A, 0x8, 0xF, 0x0, 0x57, 0x7, 0x6, 0x0, 0x93, 0x6, 0xF1, 0x0, 0x93, 0x8, 0xF5, 0x0, 0x93, 0x7, 0x4, 0x0, 0x93, 0x7, 0xCE, 0x0, 0x58, 0x6, 0xF3, 0x0, 0x93, 0x7, 0xA6, 0x0, 0x58, 0x7, 0x79, 0x0, 0x5B, 0x7, 0xE9, 0x0, 0x52, 0x6, 0xDC, 0x0, 0x93, 0x7, 0x2A, 0x0, 0x51, 0x6, 0x35, 0x0, 0x59, 0x6, 0xDD, 0x0, 0x54, 0x6, 0xD1, 0x0, 0x5B, 0x6, 0xA2, 0x0, 0x59, 0x5, 0x0, 0x0, 0x93, 0x2, 0x44, 0x0, 0xA4, 0x4, 0x61, 0x0, 0xA4, 0x6, 0x7E, 0x0, 0xA4, 0x7, 0x68, 0x0, 0xA4, 0x5, 0x2F, 0x0, 0x12, 0x7, 0x68, 0x0, 0x12, 0x9, 0x86, 0x0, 0x12, 0xB, 0xA3, 0x0, 0x12, 0x7, 0x59, 0x0, 0xA4, 0x5, 0x11, 0x0, 0x28, 0x7, 0x5F, 0x0, 0x28, 0x9, 0x7D, 0x0, 0x28, 0x4, 0x64, 0x0, 0xA4, 0x5, 0x38, 0x0, 0x65, 0x5, 0x42, 0x0, 0xA4, 0x7, 0x1D, 0x0, 0xA4, 0x2, 0xF, 0x0, 0x7E, 0x4, 0x1B, 0x0, 0x7E, 0x6, 0x27, 0x0, 0x7E, 0x6, 0x1, 0x0, 0x7E, 0x3, 0xF7, 0x0, 0x1A, 0x6, 0x7, 0x0, 0x1A, 0x8, 0x13, 0x0, 0x1A, 0xA, 0x1F, 0x0, 0x1A, 0x6, 0x18, 0x0, 0x7E, 0x4, 0xE, 0x0, 0x22, 0x6, 0x19, 0x0, 0x22, 0x8, 0x25, 0x0, 0x22, 0x1, 0xEF, 0x0, 0x7E, 0x4, 0x3E, 0x0, 0x50, 0x4, 0x82, 0x0, 0x50, 0x6, 0xF6, 0x0, 0x7E, 0x7, 0x34, 0x0, 0x68, 0x5, 0x5E, 0x0, 0x99, 0x7, 0xF1, 0x0, 0x6A, 0x5, 0x33, 0x0, 0x4D, 0x4, 0x31, 0x0, 0x3B, 0x5, 0x33, 0x0, 0x66, 0x6, 0x4C, 0x0, 0x3C, 0x5, 0x63, 0x0, 0x99, 0x8, 0xA1, 0x0, 0x6A, 0x6, 0xFE, 0x0, 0x46, 0x4, 0x91, 0x0, 0x62, 0x5, 0x96, 0x0, 0xA6, 0x4, 0xDA, 0x0, 0x41, 0x4, 0x83, 0x0, 0x9F, 0x4, 0xB3, 0x0, 0x3C, 0x8, 0x45, 0x0, 0x5E, 0x2, 0x2E, 0xFF, 0xAF, 0x4, 0x8F, 0x0, 0x65, 0x4, 0x7A, 0x0, 0x91, 0x4, 0x11, 0x0, 0x3C, 0x4, 0x2A, 0x0, 0x80, 0x5, 0x4F, 0x0, 0x45, 0x4, 0xD, 0x0, 0x24, 0x3, 0xFA, 0x0, 0x99, 0x3, 0xFA, 0x0, 0x52, 0x2, 0xFF, 0x0, 0x40, 0x2, 0xFF, 0x0, 0x67, 0x4, 0xB2, 0x0, 0x40, 0x4, 0xB2, 0x0, 0x67, 0x3, 0xC0, 0x0, 0x99, 0x3, 0xC0, 0x0, 0x5A, 0x2, 0x93, 0x0, 0x99, 0x2, 0x93, 0x0, 0x54, 0x3, 0x1A, 0x0, 0x50, 0x3, 0x1A, 0x0, 0x50, 0x5, 0x52, 0x0, 0x50, 0x5, 0xF, 0x0, 0x34, 0x4, 0xCF, 0x0, 0x50, 0x4, 0xCF, 0x0, 0x50, 0x4, 0xBC, 0x0, 0x50, 0x4, 0xBC, 0x0, 0x50, 0x4, 0xA8, 0x0, 0x21, 0x2, 0xE0, 0x0, 0x21, 0x4, 0xD6, 0x0, 0x5, 0x5, 0x5E, 0x0, 0x21, 0x4, 0xFF, 0x0, 0x95, 0x4, 0x55, 0x0, 0x5B, 0x2, 0xF5, 0x0, 0x8, 0x6, 0x28, 0x0, 0x95, 0x4, 0xF5, 0x0, 0x7A, 0x5, 0x62, 0x0, 0x95, 0x4, 0x9C, 0x0, 0x7D, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x20, 0x0, 0x52, 0x6, 0xD, 0x0, 0x66, 0x7, 0x1, 0x0, 0x95, 0x5, 0x55, 0x0, 0x12, 0x6, 0xD, 0x0, 0x11, 0x4, 0xA4, 0x0, 0x17, 0x7, 0xF4, 0x0, 0x30, 0x6, 0xAA, 0x0, 0x22, 0x4, 0xF, 0x0, 0x31, 0x4, 0x81, 0x0, 0x95, 0x3, 0x6D, 0x0, 0x7A, 0x5, 0xD3, 0x0, 0x49, 0x5, 0x54, 0x0, 0x54, 0x2, 0xF2, 0x0, 0x28, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x15, 0x0, 0x56, 0x1, 0xF5, 0x0, 0x29, 0x3, 0x4D, 0x0, 0x28, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0xD2, 0x0, 0x4F, 0x0, 0x0, 0xFC, 0xB4, 0x0, 0x0, 0xFC, 0xD1, 0x0, 0x0, 0xFD, 0x3, 0x0, 0x0, 0xFC, 0x87, 0x0, 0x0, 0xFC, 0x16, 0x0, 0x0, 0xFC, 0xD1, 0x0, 0x0, 0xFC, 0xD4, 0x0, 0x0, 0xFC, 0x9E, 0x0, 0x0, 0xFC, 0x66, 0x0, 0x0, 0xFC, 0xC1, 0x0, 0x0, 0xFC, 0xB1, 0x0, 0x0, 0xFC, 0xC1, 0x0, 0x0, 0xFC, 0xBF, 0x0, 0x0, 0xFC, 0xC2, 0x0, 0x0, 0xFC, 0xC5, 0x0, 0x0, 0xFC, 0xD4, 0x0, 0x0, 0xFC, 0xB1, 0x0, 0x0, 0xFC, 0xAB, 0x0, 0x0, 0xFC, 0x49, 0x0, 0x0, 0xFC, 0x34, 0x0, 0x0, 0xFC, 0xB1, 0x0, 0x0, 0xFC, 0x19, 0x0, 0x0, 0xFC, 0xBF, 0x0, 0x0, 0xFC, 0xBF, 0x0, 0x0, 0xFC, 0x9C, 0x0, 0x0, 0xFC, 0x93, 0x0, 0x0, 0xFC, 0x84, 0x0, 0x0, 0xFC, 0x78, 0x0, 0x0, 0xFC, 0x7F, 0x0, 0x0, 0xFC, 0x92, 0x0, 0x0, 0xFC, 0x6C, 0x0, 0x0, 0xFB, 0xCB, 0x3, 0x49, 0x0, 0x50, 0x3, 0x49, 0x0, 0x50, 0x2, 0x83, 0x0, 0x50, 0x2, 0x83, 0x0, 0x50, 0x2, 0xCE, 0x0, 0x50, 0x3, 0x37, 0x0, 0x50, 0x5, 0x17, 0x0, 0x50, 0x5, 0x1E, 0x0, 0x50, 0x4, 0x90, 0x0, 0x50, 0x4, 0x85, 0x0, 0x50, 0x4, 0x85, 0x0, 0x50, 0x3, 0xAB, 0x0, 0x50, 0x3, 0xE2, 0x0, 0x50, 0x3, 0xE2, 0x0, 0x50, 0x5, 0xF5, 0x0, 0x5F, 0x5, 0xBB, 0x0, 0x47, 0x5, 0xB8, 0x0, 0x47, 0x5, 0xB8, 0x0, 0x45, 0x1, 0xC3, 0x0, 0x50, 0x4, 0x98, 0x0, 0x50, 0x5, 0x51, 0x0, 0x37, 0x5, 0x51, 0x0, 0x3B, 0x3, 0x6, 0x0, 0x50, 0x2, 0xCD, 0x0, 0x50, 0x3, 0xE3, 0x0, 0x48, 0x5, 0x57, 0x0, 0x57, 0x3, 0x87, 0x0, 0x64, 0x3, 0x70, 0x0, 0x46, 0x3, 0x5C, 0x0, 0x50, 0x3, 0x5C, 0x0, 0x50, 0x3, 0x70, 0x0, 0x4A, 0x3, 0x70, 0x0, 0x4A, 0x3, 0xBD, 0x0, 0x99, 0x3, 0xBC, 0x0, 0x42, 0x2, 0x39, 0x0, 0x50, 0x2, 0x39, 0x0, 0x50, 0x2, 0x39, 0x0, 0x50, 0x2, 0x39, 0x0, 0x50, 0x4, 0xB1, 0x0, 0x57, 0x4, 0xB1, 0x0, 0x4E, 0x4, 0x62, 0x0, 0x80, 0x4, 0x69, 0x0, 0x28, 0x4, 0x9F, 0x0, 0x43, 0x4, 0x9F, 0x0, 0x43, 0x4, 0x9F, 0x0, 0x43, 0x4, 0xBB, 0x0, 0x43, 0x3, 0xE5, 0x0, 0x3D, 0x1, 0xC1, 0x0, 0x50, 0x2, 0x43, 0x0, 0x46, 0x1, 0xD7, 0x0, 0x5E, 0x1, 0xDD, 0x0, 0x57, 0x1, 0xBB, 0x0, 0x50, 0x1, 0xDD, 0x0, 0x46, 0x2, 0x20, 0x0, 0x84, 0x3, 0x4F, 0x0, 0x50, 0x3, 0x54, 0x0, 0x99, 0x4, 0x7E, 0x0, 0x50, 0x4, 0xEA, 0x0, 0x5B, 0xB, 0xCA, 0x0, 0xAE, 0x11, 0x2, 0x0, 0xAE, 0x2, 0x42, 0x0, 0x50, 0x1, 0xB3, 0x0, 0x43, 0x1, 0x97, 0x0, 0x50, 0x4, 0x94, 0x0, 0x41, 0x2, 0xD6, 0x0, 0x64, 0x1, 0xE3, 0x0, 0x5B, 0x3, 0x39, 0x0, 0x5B, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x57, 0x2, 0xA0, 0x0, 0xA7, 0x2, 0xA6, 0x0, 0xAA, 0x4, 0xDF, 0x0, 0x8, 0x4, 0x55, 0x0, 0x14, 0x4, 0xCB, 0x0, 0x47, 0x4, 0xD8, 0x0, 0x47, 0x8, 0x91, 0x0, 0x68, 0x6, 0xCB, 0x0, 0x4F, 0x6, 0x1A, 0x0, 0x18, 0x5, 0x1D, 0x0, 0x1F, 0x7, 0xAA, 0xFF, 0xCF, 0x7, 0xE, 0x0, 0x1F, 0x6, 0x85, 0x0, 0x96, 0x5, 0xB7, 0x0, 0x7D, 0x7, 0x64, 0x0, 0x66, 0x6, 0xC4, 0x0, 0x50, 0x7, 0x31, 0x0, 0x96, 0x6, 0x7, 0x0, 0x7D, 0x5, 0x53, 0x0, 0x12, 0x4, 0xC8, 0x0, 0x1C, 0x6, 0xEE, 0x0, 0x80, 0x5, 0x9A, 0x0, 0x5B, 0x7, 0x31, 0x0, 0x96, 0x6, 0x63, 0x0, 0x7D, 0x5, 0xAF, 0x0, 0x1E, 0x4, 0xDC, 0x0, 0x22, 0x5, 0xF6, 0x0, 0x3B, 0x4, 0xD4, 0x0, 0x2E, 0x7, 0x63, 0x0, 0x24, 0x6, 0x8, 0x0, 0x27, 0x7, 0x4E, 0x0, 0x2D, 0x5, 0xEC, 0x0, 0x22, 0x8, 0xAC, 0x0, 0x95, 0x7, 0x3E, 0x0, 0x88, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0xDC, 0x0, 0x66, 0x5, 0x76, 0x0, 0x50, 0x9, 0x41, 0x0, 0x66, 0x7, 0x8A, 0x0, 0x50, 0x9, 0xCA, 0x0, 0x54, 0x0, 0x0, 0xFB, 0x5D, 0x0, 0x0, 0xF9, 0x94, 0x0, 0x0, 0xFB, 0x5D, 0x0, 0x0, 0xF9, 0x7A, 0x3, 0xB6, 0x0, 0x50, 0x0, 0x0, 0xFC, 0xB8, 0x0, 0x0, 0xFC, 0xBC, 0x0, 0x0, 0xFC, 0xF9, 0x0, 0x0, 0xFC, 0xA5, 0x0, 0x0, 0xFC, 0x2E, 0x0, 0x0, 0xFC, 0x67, 0x0, 0x0, 0xFC, 0xE0, 0x0, 0x0, 0xFC, 0x32, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0x99, 0x3, 0x26, 0x0, 0x50, 0x2, 0xD6, 0x0, 0x47, 0x6, 0x7, 0x0, 0x24, 0x4, 0xF7, 0x0, 0x27, 0x4, 0xD3, 0x0, 0x4D, 0x4, 0x22, 0x0, 0x4D, 0x9, 0x7B, 0x0, 0x49, 0x7, 0xFE, 0x0, 0x4E, 0x6, 0x6A, 0x0, 0x84, 0x5, 0x65, 0x0, 0x36, 0x7, 0x1A, 0x0, 0x24, 0x5, 0xFB, 0x0, 0x27, 0x5, 0xFC, 0x0, 0x2D, 0x5, 0x7A, 0x0, 0x24, 0x4, 0xDC, 0x0, 0x2D, 0x3, 0xF8, 0x0, 0x24, 0x6, 0x2A, 0x0, 0x93, 0x5, 0x1C, 0x0, 0x87, 0x4, 0xDA, 0x0, 0x2D, 0x3, 0xF6, 0x0, 0x24, 0x6, 0xCC, 0x0, 0x1B, 0x5, 0x69, 0x0, 0x11, 0x5, 0x8A, 0x0, 0x85, 0x4, 0x80, 0x0, 0x7E, 0x7, 0xFB, 0x0, 0x93, 0x7, 0x7, 0x0, 0x7D, 0x9, 0x47, 0x0, 0x66, 0x7, 0x8D, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x3, 0xD5, 0x0, 0x28, 0x3, 0x44, 0x0, 0x64, 0x0, 0x0, 0xFC, 0x78, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x5E, 0x0, 0x50, 0x2, 0x58, 0x0, 0x50, 0x2, 0x5E, 0x0, 0x50, 0x3, 0x5, 0x0, 0x32, 0x3, 0xF, 0x0, 0x3C, 0x3, 0xF, 0x0, 0x3C, 0x3, 0xF, 0x0, 0x3C, 0x3, 0xF, 0x0, 0x3C, 0x2, 0xF2, 0x0, 0x99, 0x2, 0xF2, 0x0, 0x99, 0x2, 0xF2, 0x0, 0x99, 0x2, 0xF2, 0x0, 0x99, 0x2, 0xF2, 0x0, 0x99, 0x3, 0x93, 0x0, 0x99, 0x3, 0x93, 0x0, 0x99, 0x3, 0x93, 0x0, 0x99, 0x3, 0x93, 0x0, 0x99, 0x3, 0x93, 0x0, 0x99, 0x2, 0xB7, 0x0, 0x50, 0x3, 0x5F, 0x0, 0x55, 0x3, 0xC5, 0x0, 0x50, 0x3, 0x49, 0x0, 0x50, 0x2, 0xFC, 0x0, 0x50, 0x2, 0xFC, 0x0, 0x50, 0x1, 0xA6, 0x0, 0x64, 0x1, 0xA6, 0x0, 0x64, 0x1, 0xA6, 0x0, 0x64, 0x4, 0xFE, 0x0, 0x50, 0x4, 0xFE, 0x0, 0x50, 0x2, 0xB6, 0x0, 0x65, 0x2, 0x37, 0x0, 0x50, 0x2, 0xAF, 0x0, 0x57, 0x2, 0x30, 0x0, 0x50, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x80, 0x0, 0x7E, 0x6, 0x5F, 0x0, 0x2D, 0x5, 0xD3, 0x0, 0x8, 0x4, 0x5F, 0x0, 0x59, 0x4, 0x57, 0x0, 0x54, 0x4, 0x1D, 0x0, 0x35, 0x4, 0x1F, 0x0, 0x35, 0x5, 0x28, 0x0, 0x35, 0x5, 0x14, 0x0, 0x35, 0x3, 0x5B, 0x0, 0x85, 0x4, 0x22, 0x0, 0x4C, 0x8, 0x7C, 0x0, 0x12, 0x6, 0xDA, 0x0, 0x5B, 0x8, 0xAB, 0x0, 0x12, 0x7, 0x1E, 0x0, 0x5B, 0x8, 0x62, 0xFF, 0xF6, 0x6, 0xDA, 0x0, 0x5B, 0x7, 0x64, 0x0, 0x12, 0x6, 0x5E, 0x0, 0x5B, 0x7, 0x64, 0x0, 0x12, 0x6, 0x5E, 0x0, 0x5B, 0x7, 0x6D, 0x0, 0x12, 0x6, 0x69, 0x0, 0x5B, 0x5, 0x3A, 0x0, 0x4D, 0x4, 0x31, 0x0, 0x3B, 0x5, 0x5F, 0x0, 0x14, 0x4, 0x8F, 0x0, 0x14, 0x5, 0x11, 0x0, 0x95, 0x4, 0x43, 0x0, 0x7D, 0x5, 0x5F, 0x0, 0x14, 0x4, 0xA6, 0x0, 0x14, 0x4, 0xEE, 0x0, 0x95, 0x2, 0x7B, 0x0, 0x64, 0x4, 0xA4, 0x0, 0x14, 0x2, 0xC6, 0x0, 0x14, 0x6, 0x6A, 0x0, 0x14, 0x5, 0x4A, 0x0, 0x1B, 0x5, 0xF5, 0x0, 0x66, 0x5, 0x11, 0x0, 0x50, 0x9, 0x41, 0x0, 0x66, 0x7, 0x89, 0x0, 0x50, 0x5, 0x6A, 0x0, 0x14, 0x4, 0xE4, 0x0, 0xD, 0x6, 0x34, 0x0, 0x28, 0x5, 0xBC, 0x0, 0x22, 0x6, 0x3A, 0x0, 0x28, 0x5, 0xA4, 0x0, 0x2B, 0x5, 0x9B, 0x0, 0x60, 0x4, 0xE3, 0x0, 0x50, 0x6, 0xE8, 0x0, 0x60, 0x5, 0xB4, 0x0, 0x50, 0x4, 0x37, 0x0, 0x14, 0x3, 0x4A, 0x0, 0xD, 0x5, 0x2B, 0x0, 0x22, 0x5, 0x2E, 0x0, 0x22, 0x5, 0x2E, 0x0, 0x12, 0x3, 0xF6, 0x0, 0x17, 0x7, 0xB, 0x0, 0x31, 0x6, 0xB9, 0x0, 0x17, 0x4, 0x95, 0x0, 0x4A, 0x4, 0xA4, 0x0, 0x51, 0x5, 0x23, 0x0, 0x14, 0x4, 0xE9, 0x0, 0x14, 0x5, 0x23, 0x0, 0x14, 0x4, 0xE9, 0x0, 0x14, 0x4, 0x7E, 0x0, 0x95, 0x3, 0xE2, 0x0, 0x7D, 0x4, 0x33, 0x0, 0x25, 0x3, 0xBC, 0x0, 0x21, 0x4, 0x50, 0x0, 0x46, 0x4, 0x40, 0x0, 0x49, 0x4, 0xB2, 0x0, 0x4D, 0x4, 0xB4, 0x0, 0x40, 0x3, 0xA2, 0x0, 0x56, 0x5, 0xB8, 0x0, 0x50, 0x3, 0x31, 0x0, 0x8C, 0x8, 0x2C, 0x0, 0x7D, 0x5, 0xAA, 0x0, 0x7A, 0x3, 0xA2, 0x0, 0x7D, 0x5, 0x6F, 0x0, 0x76, 0x3, 0xC7, 0x0, 0x8, 0x4, 0x72, 0x0, 0x1B, 0x5, 0x86, 0x0, 0x69, 0x4, 0xB2, 0x0, 0x50, 0x4, 0xAC, 0x0, 0x99, 0x3, 0x55, 0x0, 0x7D, 0x5, 0x5, 0x0, 0x4A, 0x4, 0xEE, 0x0, 0x30, 0x4, 0x29, 0x0, 0x42, 0x4, 0x55, 0x0, 0x2E, 0x1, 0xFB, 0x0, 0x83, 0x5, 0x8A, 0x0, 0x95, 0x4, 0x76, 0x0, 0x7D, 0x3, 0x93, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x7D, 0x5, 0x58, 0x0, 0x86, 0x4, 0x3F, 0x0, 0x50, 0x3, 0x41, 0x0, 0x49, 0x1, 0xBC, 0x0, 0x6B, 0x2, 0xD1, 0x0, 0x57, 0x1, 0x5D, 0x0, 0x50, 0x1, 0x5D, 0x0, 0x50, 0x5, 0x8C, 0x0, 0x8E, 0x3, 0xE3, 0x0, 0x28, 0x6, 0x27, 0x0, 0x95, 0x4, 0xF5, 0x0, 0x7A, 0x5, 0xAD, 0x0, 0x14, 0x4, 0xAD, 0x0, 0x14, 0x4, 0x31, 0x0, 0x50, 0x4, 0xD3, 0x0, 0x7A, 0x6, 0x23, 0x0, 0x28, 0x5, 0xA3, 0x0, 0x42, 0x5, 0x19, 0x0, 0x1B, 0x2, 0xD6, 0x0, 0x2D, 0x5, 0x25, 0x0, 0x58, 0x4, 0x78, 0x0, 0x53, 0x5, 0x41, 0x0, 0x58, 0x4, 0x3E, 0x0, 0x4F, 0x5, 0x0, 0x0, 0x44, 0x4, 0x5D, 0x0, 0x27, 0x6, 0x19, 0x0, 0x14, 0x5, 0x41, 0x0, 0x14, 0x5, 0x4F, 0x0, 0x14, 0x4, 0x8B, 0x0, 0x14, 0x6, 0x21, 0x0, 0x14, 0x5, 0x41, 0x0, 0x14, 0x5, 0x87, 0x0, 0x14, 0x3, 0x27, 0x0, 0x15, 0x5, 0x93, 0x0, 0x14, 0x4, 0xD3, 0x0, 0x14, 0x6, 0x8C, 0x0, 0x1B, 0x4, 0xD6, 0x0, 0x49, 0x5, 0x8D, 0x0, 0x66, 0x5, 0x93, 0x0, 0x28, 0x5, 0xB, 0xFF, 0xF3, 0x4, 0xDC, 0x0, 0x2D, 0x6, 0x29, 0x0, 0x3C, 0x4, 0xF9, 0x0, 0x35, 0x5, 0x83, 0x0, 0x3C, 0x6, 0x93, 0x0, 0x7D, 0x4, 0x66, 0x0, 0x34, 0x5, 0x1E, 0x0, 0x4A, 0x7, 0x1, 0x0, 0x95, 0x2, 0x42, 0x0, 0xA4, 0x9, 0x8F, 0x0, 0x75, 0x4, 0x61, 0x0, 0x18, 0x5, 0x49, 0x0, 0x1B, 0x6, 0xCE, 0x0, 0x5B, 0x3, 0x8A, 0x0, 0x7D, 0x5, 0x18, 0x0, 0x1B, 0x5, 0x7C, 0x0, 0x2F, 0x2, 0xD6, 0x0, 0x2D, 0x4, 0xE9, 0x0, 0x50, 0x3, 0xBD, 0x0, 0x35, 0x3, 0x61, 0x0, 0x24, 0x2, 0xA0, 0x0, 0x35, 0x7, 0x8A, 0x0, 0x7D, 0x5, 0x8, 0x0, 0x7D, 0x4, 0xF8, 0x0, 0x7D, 0x3, 0xFE, 0x0, 0x7D, 0x4, 0x31, 0x0, 0x86, 0x4, 0xB, 0x0, 0x25, 0x7, 0x4D, 0x0, 0x50, 0x7, 0x41, 0x0, 0x5D, 0x7, 0x41, 0x0, 0x5D, 0x6, 0xC4, 0x0, 0x50, 0x6, 0xC4, 0x0, 0x50, 0x4, 0x58, 0x0, 0x35, 0x4, 0xC6, 0x0, 0x99, 0x2, 0x21, 0x0, 0x7D, 0x3, 0xA1, 0x0, 0x7D, 0x4, 0xF, 0x0, 0x28, 0x4, 0xD9, 0x0, 0x28, 0x4, 0x7F, 0x0, 0x1F, 0x5, 0xEB, 0x0, 0x1F, 0x2, 0x6B, 0xFF, 0xD8, 0x4, 0x72, 0x0, 0x77, 0x5, 0x9, 0x0, 0x1B, 0x6, 0xEF, 0x0, 0x77, 0x6, 0xF7, 0x0, 0x7D, 0x4, 0xE1, 0x0, 0x14, 0x4, 0xA, 0x0, 0x1F, 0x4, 0xF5, 0x0, 0x1F, 0x4, 0xC, 0x0, 0xA, 0x4, 0xF2, 0x0, 0x1F, 0x4, 0xBD, 0xFF, 0xDE, 0x5, 0xA7, 0xFF, 0xDE, 0x4, 0xA7, 0xFF, 0xBE, 0x3, 0x90, 0x0, 0xD, 0x3, 0x26, 0x0, 0x50, 0x3, 0x5E, 0x0, 0x64, 0x2, 0xDE, 0x0, 0x35, 0x2, 0x7F, 0x0, 0x35, 0x3, 0xAE, 0x0, 0x28, 0x4, 0x85, 0x0, 0x56, 0x4, 0xF7, 0x0, 0x68, 0x2, 0x5B, 0x0, 0xA2, 0x2, 0x98, 0x0, 0x64, 0x1, 0xF1, 0x0, 0x46, 0x5, 0x1B, 0x0, 0x2D, 0x4, 0xA8, 0x0, 0x19, 0x4, 0xBD, 0x0, 0x2D, 0x7, 0x24, 0x0, 0x2D, 0x7, 0x24, 0x0, 0x2D, 0x5, 0x12, 0x0, 0x2D, 0x6, 0xB7, 0x0, 0x4C, 0x0, 0x0, 0xFC, 0xF4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFB, 0xC3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xB8, 0x0, 0x0, 0xFB, 0x9C, 0x0, 0x0, 0xFB, 0x9C, 0x0, 0x0, 0xFC, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFB, 0xC3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFD, 0xB8, 0x0, 0x0, 0xFB, 0x9C, 0x0, 0x0, 0xFB, 0x9C, 0x0, 0x0, 0x0, 0x0, 0x8, 0x31, 0x0, 0x5A, 0x8, 0x35, 0x0, 0x5C, 0x5, 0x38, 0x0, 0x74, 0x5, 0x3F, 0x0, 0x74, 0x4, 0xD8, 0x0, 0x25, 0x2, 0xF6, 0x0, 0x3C, 0x2, 0xF6, 0x0, 0x81, 0x2, 0xF6, 0x0, 0x4C, 0x4, 0x1D, 0x0, 0x50, 0x4, 0x1D, 0x0, 0x58, 0x4, 0x1D, 0x0, 0x3A, 0x4, 0x1D, 0x0, 0x61, 0x4, 0x1D, 0x0, 0x67, 0x4, 0x1D, 0x0, 0x31, 0x4, 0x1D, 0x0, 0x3F, 0x4, 0x1D, 0x0, 0x43, 0x4, 0x1D, 0x0, 0x96, 0x4, 0x1D, 0x0, 0x59, 0x4, 0x2A, 0x0, 0x41, 0x4, 0x3D, 0x0, 0x5, 0x4, 0x5F, 0x0, 0x16, 0x6, 0x8, 0x0, 0x29, 0x4, 0x7C, 0x0, 0x9, 0x4, 0x84, 0x0, 0x67, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x5D, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x4D, 0x4, 0x6D, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xDD, 0x0, 0x76, 0x6, 0x6, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x4, 0x5C, 0x0, 0x76, 0x3, 0xD6, 0x0, 0x25, 0x1, 0xFD, 0x0, 0x85, 0x4, 0xDE, 0x0, 0x76, 0x4, 0xA7, 0x0, 0x55, 0x3, 0xC6, 0x0, 0x76, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x67, 0x0, 0x39, 0x3, 0xA4, 0x0, 0xA, 0x3, 0xBA, 0x0, 0x76, 0x4, 0x7C, 0x0, 0x9, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x7C, 0x0, 0x9, 0x3, 0x99, 0x0, 0x43, 0x4, 0xD8, 0x0, 0x76, 0x4, 0x19, 0x0, 0x45, 0x5, 0x9E, 0x0, 0x51, 0x5, 0x55, 0x0, 0x51, 0x4, 0xE4, 0x0, 0x5F, 0x5, 0x92, 0x0, 0x25, 0x4, 0x80, 0x0, 0x50, 0x7, 0x54, 0x0, 0x25, 0x7, 0x58, 0x0, 0x76, 0x5, 0x98, 0x0, 0x25, 0x4, 0xD8, 0x0, 0x76, 0x4, 0x72, 0x0, 0x76, 0x5, 0x59, 0x0, 0x27, 0x6, 0x3A, 0x0, 0x1B, 0x4, 0x46, 0x0, 0x43, 0x4, 0xE4, 0x0, 0x76, 0x4, 0x5D, 0x0, 0x76, 0x4, 0xCC, 0x0, 0x25, 0x4, 0x47, 0x0, 0x20, 0x5, 0x5E, 0x0, 0x76, 0x4, 0x8C, 0x0, 0x41, 0x6, 0x85, 0x0, 0x76, 0x7, 0xB, 0x0, 0x76, 0x5, 0x5A, 0x0, 0xA, 0x6, 0x20, 0x0, 0x76, 0x4, 0x68, 0x0, 0x76, 0x4, 0x80, 0x0, 0x3D, 0x6, 0x92, 0x0, 0x76, 0x4, 0x88, 0x0, 0x44, 0x4, 0x23, 0x0, 0xA, 0x6, 0x92, 0x0, 0x1B, 0x4, 0x9E, 0x0, 0x76, 0x5, 0x1B, 0x0, 0x76, 0x5, 0x6E, 0x0, 0x25, 0x5, 0xF1, 0x0, 0x50, 0x4, 0x5A, 0x0, 0x5, 0x4, 0xC5, 0x0, 0x16, 0x6, 0x95, 0x0, 0x25, 0x4, 0x8C, 0x0, 0x41, 0x4, 0x8C, 0x0, 0x76, 0x5, 0xFE, 0x0, 0xB, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x47, 0x0, 0x43, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x67, 0x0, 0x39, 0x3, 0xF7, 0x0, 0x47, 0x8, 0x37, 0x0, 0x76, 0x4, 0x9D, 0x0, 0x4D, 0x4, 0xEB, 0x0, 0x28, 0x3, 0xF7, 0x0, 0x25, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x35, 0x2, 0xF6, 0x0, 0x4F, 0x2, 0xF6, 0x0, 0x4E, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x47, 0x3, 0xBA, 0x0, 0x90, 0x2, 0xB2, 0x0, 0x96, 0x3, 0xE1, 0x0, 0x76, 0x4, 0x3B, 0x0, 0x9, 0x4, 0xBC, 0x0, 0x56, 0x5, 0x44, 0x0, 0x9B, 0x5, 0x28, 0x0, 0x9B, 0x4, 0x31, 0x0, 0x81, 0x5, 0x3A, 0x0, 0x9B, 0x4, 0x2E, 0x0, 0x81, 0x4, 0x7B, 0x0, 0x76, 0x4, 0x80, 0x0, 0x50, 0x4, 0x61, 0x0, 0x76, 0x4, 0x9E, 0x0, 0x9, 0x2, 0x6, 0x0, 0x94, 0x3, 0xA2, 0x0, 0x76, 0x0, 0x0, 0xFC, 0x5A, 0x0, 0x0, 0xFC, 0x5A, 0x0, 0x0, 0xFC, 0x5A, 0x0, 0x0, 0xFC, 0x5A, 0x0, 0x0, 0xFC, 0x61, 0x0, 0x0, 0xFC, 0x9C, 0x0, 0x0, 0xFC, 0x61, 0x0, 0x0, 0xFC, 0x61, 0x0, 0x0, 0xFC, 0x5A, 0x0, 0x0, 0xFC, 0xAA, 0x0, 0x0, 0xFC, 0x5E, 0x4, 0xC, 0x0, 0x7B, 0x4, 0xC, 0xFF, 0x4B, 0x4, 0xC, 0x0, 0x76, 0x4, 0xC, 0x0, 0x76, 0x0, 0x0, 0xFC, 0x61, 0x3, 0xBA, 0x0, 0x76, 0x3, 0xA2, 0x0, 0x76, 0x3, 0xA2, 0x0, 0x76, 0x0, 0x0, 0xFC, 0x5A, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x35, 0x2, 0xF6, 0x0, 0x4F, 0x2, 0xF6, 0x0, 0x4E, 0x2, 0xF6, 0x0, 0x37, 0x2, 0xF6, 0x0, 0x4C, 0x2, 0xF6, 0x0, 0x47, 0x5, 0x7B, 0x0, 0x6C, 0x5, 0xA3, 0x0, 0x6C, 0x5, 0x86, 0x0, 0x9B, 0x5, 0xE1, 0x0, 0x6B, 0x5, 0xE3, 0x0, 0x6B, 0x4, 0x1C, 0x0, 0x98, 0x4, 0x82, 0x0, 0x6F, 0x4, 0x57, 0x0, 0xF, 0x4, 0xBF, 0x0, 0x36, 0x4, 0x6B, 0x0, 0x67, 0x4, 0x2E, 0x0, 0x43, 0x3, 0xA2, 0x0, 0x76, 0x1, 0xB4, 0x0, 0x5D, 0x6, 0x99, 0x0, 0x50, 0x4, 0xB4, 0x0, 0x74, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0x75, 0x0, 0x66, 0x5, 0x98, 0x0, 0x64, 0x8, 0xAC, 0x0, 0x95, 0x2, 0x10, 0xFF, 0xAF, 0x4, 0x8C, 0x0, 0x39, 0x4, 0x8C, 0x0, 0x6B, 0x4, 0x8C, 0x0, 0x2C, 0x4, 0x8C, 0x0, 0x66, 0x4, 0x8C, 0x0, 0x63, 0x4, 0x8C, 0x0, 0x35, 0x4, 0x8C, 0x0, 0x6F, 0x4, 0x8C, 0x0, 0x59, 0x4, 0x8C, 0x0, 0x69, 0x4, 0x8C, 0x0, 0xE4, 0x2, 0x27, 0xFF, 0xB5, 0x2, 0x42, 0x0, 0x90, 0x2, 0xE6, 0x0, 0x1E, 0x2, 0xD3, 0x0, 0x1A, 0x2, 0x27, 0xFF, 0xB5, 0x3, 0xAD, 0x0, 0x1E, 0x1, 0xD7, 0x0, 0x8D, 0x2, 0x1B, 0x0, 0x90, 0x2, 0x6A, 0x0, 0x28, 0x2, 0x1B, 0xFF, 0xFA, 0x2, 0x1B, 0x0, 0x90, 0x1, 0xD4, 0x0, 0x88, 0x2, 0x27, 0xFF, 0xB5, 0x2, 0xB2, 0x0, 0x0, 0x1, 0xEF, 0x0, 0x22, 0x1, 0xEF, 0x0, 0x22, 0x4, 0x61, 0x0, 0x76, 0x4, 0xD8, 0x0, 0x25, 0x4, 0xD8, 0x0, 0x2D, 0x4, 0xD8, 0x0, 0xA, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0x9D, 0x4, 0xD8, 0x0, 0x87, 0x4, 0xD8, 0x0, 0x2D, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x98, 0x4, 0xD8, 0x0, 0x90, 0x4, 0xD8, 0x0, 0x24, 0x4, 0xD8, 0x0, 0x99, 0x4, 0xD8, 0x0, 0x8E, 0x4, 0xD8, 0x0, 0x7A, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x84, 0x4, 0xD8, 0x0, 0x86, 0x4, 0xD8, 0x0, 0x96, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x9D, 0x4, 0xD8, 0x0, 0x31, 0x4, 0xD8, 0x0, 0x7E, 0x4, 0xD8, 0x0, 0x9E, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0xB7, 0x4, 0xD8, 0x0, 0x8E, 0x4, 0xD8, 0x0, 0x33, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x38, 0x4, 0xD8, 0x0, 0x39, 0x4, 0xD8, 0x0, 0x94, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x37, 0x3, 0xAC, 0x0, 0x78, 0x3, 0xAC, 0x0, 0x93, 0x4, 0xD8, 0x0, 0xBA, 0x3, 0xAC, 0x0, 0x71, 0x3, 0xAC, 0x0, 0x84, 0x4, 0xD8, 0x0, 0x33, 0x4, 0xD8, 0x0, 0x39, 0x4, 0xD8, 0x0, 0x38, 0x4, 0xD8, 0x0, 0x90, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xB2, 0x4, 0xD8, 0x0, 0xBC, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x99, 0x4, 0xD8, 0x0, 0xB7, 0x4, 0xD8, 0x0, 0xA, 0x4, 0xD8, 0x0, 0xBC, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xB2, 0x4, 0xD8, 0x0, 0x47, 0x4, 0xD8, 0x0, 0x37, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x99, 0x4, 0xD8, 0x0, 0x1D, 0x4, 0xD8, 0x0, 0x67, 0x4, 0xD8, 0x0, 0x49, 0x3, 0xAC, 0x0, 0x78, 0x3, 0xAC, 0x0, 0x93, 0x3, 0xAC, 0x0, 0x84, 0x3, 0xAC, 0x0, 0x93, 0x4, 0xD8, 0x0, 0xBC, 0x4, 0xD8, 0x0, 0x9D, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0x8E, 0x4, 0xD8, 0x0, 0x23, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x96, 0x4, 0xD8, 0x0, 0x86, 0x4, 0xD8, 0x0, 0x7E, 0x4, 0xD8, 0x0, 0x3C, 0x4, 0xD8, 0x0, 0x2C, 0x4, 0xD8, 0x0, 0x98, 0x4, 0xD8, 0x0, 0x24, 0x3, 0xAC, 0x0, 0x78, 0x3, 0xAC, 0x0, 0x93, 0x4, 0xD8, 0x0, 0x94, 0x4, 0xD8, 0x0, 0xA7, 0x3, 0xAC, 0x0, 0x78, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x87, 0x3, 0xAC, 0x0, 0x93, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xBA, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x7A, 0x4, 0xD8, 0x0, 0x84, 0x4, 0xD8, 0x0, 0x94, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0x98, 0x4, 0xD8, 0x0, 0x99, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x18, 0x4, 0xD8, 0x0, 0x23, 0x4, 0xD8, 0x0, 0x9D, 0x4, 0xD8, 0x0, 0x8E, 0x4, 0xD8, 0x0, 0x8D, 0x4, 0xD8, 0x0, 0x31, 0x4, 0xD8, 0x0, 0x1D, 0x3, 0xAC, 0x0, 0x93, 0x4, 0xD8, 0x0, 0x9E, 0x3, 0xAC, 0x0, 0x78, 0x3, 0xAC, 0x0, 0x84, 0x3, 0xAC, 0x0, 0x71, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x37, 0x4, 0xD8, 0x0, 0x67, 0x4, 0xD8, 0x0, 0x47, 0x4, 0xD8, 0x0, 0x49, 0x4, 0xD8, 0x0, 0x37, 0x4, 0xD8, 0x0, 0x98, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0x3C, 0x4, 0xD8, 0x0, 0xA8, 0x4, 0xD8, 0x0, 0x2C, 0x4, 0xD8, 0x0, 0xA7, 0x4, 0xD8, 0x0, 0x94, 0x4, 0xD8, 0x0, 0xAB, 0x4, 0xD8, 0x0, 0xBC, 0x4, 0xD8, 0x0, 0xB2, 0x3, 0xAC, 0x0, 0x78, 0x3, 0xAC, 0x0, 0x84, 0x4, 0xD8, 0x0, 0xB2, 0x3, 0xAC, 0x0, 0x93, 0x3, 0xAC, 0x0, 0x93, 0x0, 0x0, 0xFB, 0x8F, 0x0, 0x0, 0xFA, 0xC2, 0x0, 0x0, 0xFB, 0x5E, 0x0, 0x0, 0xFB, 0x1B, 0x0, 0x0, 0xFB, 0x6A, 0x0, 0x0, 0xFB, 0xD6, 0x0, 0x0, 0xFB, 0xE, 0x0, 0x0, 0xFB, 0x9A, 0x0, 0x0, 0xFB, 0xA0, 0x0, 0x0, 0xFB, 0xA6, 0x0, 0x0, 0xFB, 0x78, 0x0, 0x0, 0xFB, 0x50, 0x0, 0x0, 0xFC, 0x2C, 0x0, 0x0, 0xFC, 0x19, 0x0, 0x0, 0xFB, 0x6D, 0x4, 0xEB, 0x0, 0x63, 0x0, 0x0, 0xFC, 0x11, 0x0, 0x0, 0xFB, 0x5E, 0x0, 0x0, 0xFA, 0x4E, 0x0, 0x0, 0xFA, 0x81, 0x0, 0x0, 0xF9, 0xCE, 0x0, 0x0, 0xF8, 0xBE, 0x4, 0x34, 0x0, 0x3A, 0x4, 0x89, 0x0, 0x7D, 0x4, 0x3D, 0x0, 0x51, 0x4, 0x99, 0x0, 0x50, 0x4, 0x93, 0x0, 0x50, 0x4, 0xA1, 0x0, 0x4C, 0x4, 0x94, 0x0, 0x7D, 0x4, 0x9F, 0x0, 0x50, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x89, 0x0, 0x51, 0x4, 0x63, 0x0, 0x3E, 0x3, 0xA4, 0x0, 0x5A, 0x4, 0xC6, 0x0, 0x5, 0x5, 0x90, 0x0, 0x50, 0x5, 0xA, 0x0, 0x7A, 0x5, 0xBC, 0x0, 0x5, 0x5, 0x9D, 0x0, 0x5, 0x3, 0xF9, 0x0, 0x5, 0x5, 0x3, 0x0, 0x5D, 0x3, 0xC4, 0x0, 0x4, 0x6, 0x47, 0xFF, 0xF0, 0x4, 0x9, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x5, 0x9, 0x0, 0x32, 0x4, 0xDD, 0x0, 0x76, 0x0, 0x0, 0xFD, 0x40, 0x0, 0x0, 0xFC, 0x4A, 0x0, 0x0, 0xFC, 0x57, 0x0, 0x0, 0xFC, 0x57, 0x0, 0x0, 0xFC, 0x65, 0x0, 0x0, 0xFC, 0x5F, 0x0, 0x0, 0xFC, 0x57, 0x0, 0x0, 0xFC, 0x57, 0x0, 0x0, 0xFC, 0x65, 0x0, 0x0, 0xFC, 0x4A, 0x0, 0x0, 0xFC, 0x57, 0x0, 0x0, 0xFC, 0x50, 0x0, 0x0, 0xFC, 0x57, 0x1, 0xFE, 0x0, 0x0, 0x2, 0xA1, 0x0, 0x47, 0x5, 0x58, 0x0, 0x15, 0x5, 0x58, 0x0, 0x15, 0x4, 0x8F, 0xFF, 0xF2, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0xFF, 0xE8, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x39, 0x0, 0x66, 0x4, 0x86, 0x0, 0x95, 0x4, 0x86, 0x0, 0x95, 0x4, 0x86, 0x0, 0x95, 0x4, 0x86, 0x0, 0x95, 0x2, 0x42, 0xFF, 0xC7, 0x2, 0x42, 0x0, 0xA4, 0x2, 0x42, 0xFF, 0xCB, 0x2, 0x42, 0xFF, 0xC0, 0x5, 0xAF, 0x0, 0x95, 0x5, 0x86, 0x0, 0x66, 0x5, 0x86, 0x0, 0x66, 0x5, 0x86, 0x0, 0x66, 0x5, 0x86, 0x0, 0x66, 0x5, 0x86, 0x0, 0x66, 0x5, 0x38, 0x0, 0x7E, 0x5, 0x38, 0x0, 0x7E, 0x5, 0x38, 0x0, 0x7E, 0x5, 0x38, 0x0, 0x7E, 0x4, 0xE0, 0x0, 0x8, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x31, 0x0, 0x50, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x4B, 0x0, 0x54, 0x2, 0x1B, 0xFF, 0xB2, 0x2, 0x1B, 0x0, 0x90, 0x2, 0x1B, 0xFF, 0xB6, 0x2, 0x1B, 0xFF, 0xAB, 0x4, 0x73, 0x0, 0x7A, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x72, 0x0, 0x77, 0x4, 0x72, 0x0, 0x77, 0x4, 0x72, 0x0, 0x77, 0x4, 0x72, 0x0, 0x77, 0x3, 0xE5, 0x0, 0xC, 0x3, 0xE5, 0x0, 0xC, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x5, 0x1B, 0x0, 0x50, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x2, 0x42, 0xFF, 0xB2, 0x2, 0x1B, 0xFF, 0x9D, 0x2, 0x42, 0xFF, 0xCE, 0x2, 0x1B, 0xFF, 0xB9, 0x2, 0x42, 0xFF, 0xDF, 0x2, 0x1B, 0xFF, 0xCA, 0x2, 0x42, 0x0, 0x15, 0x2, 0xC, 0xFF, 0xFE, 0x2, 0x42, 0x0, 0x9E, 0x6, 0xB3, 0x0, 0xA4, 0x4, 0xD, 0x0, 0x7D, 0x4, 0x71, 0x0, 0x2D, 0x2, 0x27, 0xFF, 0xB5, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x4, 0x55, 0x0, 0x95, 0x2, 0xC, 0x0, 0x8B, 0x4, 0x55, 0x0, 0x95, 0x2, 0xC, 0x0, 0x57, 0x4, 0x55, 0x0, 0x95, 0x2, 0xA2, 0x0, 0x8C, 0x4, 0x55, 0x0, 0x95, 0x2, 0xE8, 0x0, 0x8C, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x4, 0x73, 0xFF, 0xA4, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x7D, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x51, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x38, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xD2, 0x0, 0x8, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x7, 0x85, 0xFF, 0xF6, 0x6, 0xC1, 0x0, 0x48, 0x5, 0x85, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x50, 0x4, 0x7B, 0xFF, 0xA6, 0x4, 0x7B, 0xFF, 0xA6, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x80, 0x0, 0x50, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x1, 0xFD, 0xFF, 0xA5, 0x1, 0xFD, 0x0, 0x84, 0x1, 0xFD, 0xFF, 0xA9, 0x1, 0xFD, 0xFF, 0x9E, 0x4, 0xDD, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x3D, 0x0, 0x5, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x80, 0x0, 0x50, 0x4, 0x80, 0x0, 0x50, 0x4, 0x80, 0x0, 0x50, 0x4, 0x80, 0x0, 0x50, 0x4, 0x7B, 0x0, 0x6A, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x4, 0xA7, 0x0, 0x55, 0x4, 0xA7, 0x0, 0x55, 0x4, 0xA7, 0x0, 0x55, 0x4, 0xA7, 0x0, 0x55, 0x4, 0xDE, 0x0, 0x76, 0x1, 0xFD, 0xFF, 0x90, 0x1, 0xFD, 0xFF, 0xAC, 0x1, 0xFD, 0xFF, 0xBD, 0x1, 0xFD, 0x0, 0x14, 0x1, 0xFD, 0x0, 0x7C, 0x3, 0xD6, 0x0, 0x25, 0x4, 0x5C, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x4, 0xDD, 0x0, 0x76, 0x4, 0xDD, 0x0, 0x76, 0x4, 0xDD, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x5D, 0x0, 0x76, 0x4, 0x5D, 0x0, 0x76, 0x4, 0x5D, 0x0, 0x76, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x35, 0x0, 0x3F, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x4, 0x84, 0x0, 0x67, 0x6, 0x8, 0x0, 0x29, 0x4, 0x3D, 0x0, 0x5, 0x4, 0x3D, 0x0, 0x5, 0x4, 0x2A, 0x0, 0x41, 0x4, 0x2A, 0x0, 0x41, 0x4, 0x2A, 0x0, 0x41, 0x5, 0x53, 0x0, 0x12, 0x4, 0x86, 0xFE, 0xE7, 0x5, 0xB0, 0xFE, 0xF0, 0x2, 0x42, 0xFE, 0xF2, 0x5, 0x9A, 0xFF, 0xBC, 0x5, 0x44, 0xFF, 0x45, 0x5, 0x70, 0xFF, 0xC6, 0x2, 0xAA, 0xFF, 0x87, 0x5, 0x53, 0x0, 0x12, 0x5, 0xD, 0x0, 0x95, 0x4, 0x86, 0x0, 0x95, 0x4, 0xD2, 0x0, 0x50, 0x5, 0xB0, 0x0, 0x95, 0x2, 0x42, 0x0, 0xA4, 0x5, 0xB, 0x0, 0x95, 0x7, 0x1, 0x0, 0x95, 0x5, 0xAF, 0x0, 0x95, 0x5, 0x86, 0x0, 0x66, 0x5, 0x1E, 0x0, 0x95, 0x4, 0xDC, 0x0, 0x2D, 0x4, 0xE0, 0x0, 0x8, 0x5, 0x10, 0x0, 0x29, 0x2, 0x42, 0xFF, 0xC0, 0x4, 0xE0, 0x0, 0x8, 0x4, 0x85, 0x0, 0x56, 0x4, 0x61, 0x0, 0x61, 0x4, 0x89, 0x0, 0x7F, 0x2, 0xAA, 0x0, 0xAA, 0x4, 0x61, 0x0, 0x80, 0x4, 0x98, 0x0, 0x8E, 0x4, 0x8E, 0x0, 0x50, 0x4, 0xBB, 0x0, 0x93, 0x3, 0xF6, 0x0, 0x17, 0x4, 0x63, 0x0, 0x3E, 0x2, 0xAA, 0xFF, 0xCD, 0x4, 0x61, 0x0, 0x80, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x61, 0x0, 0x80, 0x6, 0x95, 0x0, 0x66, 0x4, 0x86, 0x0, 0x95, 0x4, 0x75, 0x0, 0x9B, 0x4, 0xD5, 0x0, 0x4A, 0x2, 0x42, 0x0, 0xA4, 0x2, 0x42, 0xFF, 0xC0, 0x4, 0x71, 0x0, 0x2D, 0x5, 0x28, 0x0, 0x9B, 0x5, 0xB, 0x0, 0x95, 0x5, 0xA, 0x0, 0x3A, 0x5, 0x53, 0x0, 0x12, 0x5, 0xD, 0x0, 0x95, 0x4, 0x75, 0x0, 0x9B, 0x4, 0x86, 0x0, 0x95, 0x5, 0xA9, 0x0, 0x95, 0x7, 0x1, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0x86, 0x0, 0x66, 0x5, 0xB1, 0x0, 0x9B, 0x5, 0x1E, 0x0, 0x95, 0x5, 0x39, 0x0, 0x66, 0x4, 0xDC, 0x0, 0x2D, 0x5, 0x10, 0x0, 0x29, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x98, 0x0, 0x86, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x81, 0x0, 0x7D, 0x4, 0x31, 0x0, 0x50, 0x3, 0xE5, 0x0, 0xC, 0x4, 0x7, 0x0, 0x1F, 0x4, 0x4B, 0x0, 0x54, 0x3, 0x5B, 0x0, 0x85, 0x4, 0x22, 0x0, 0x4C, 0x2, 0xC, 0x0, 0x7D, 0x2, 0x1B, 0xFF, 0xAB, 0x2, 0x1, 0xFF, 0xB4, 0x4, 0x6F, 0x0, 0x8F, 0x3, 0xE5, 0x0, 0xC, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x1, 0x5A, 0x0, 0x53, 0x2, 0x98, 0x0, 0x65, 0x4, 0x4A, 0x0, 0x90, 0x2, 0x27, 0xFF, 0xB0, 0x1, 0xBC, 0x0, 0x34, 0x7, 0x1, 0x0, 0x95, 0x6, 0xF7, 0x0, 0x7D, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x86, 0x0, 0x95, 0x5, 0xA9, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x98, 0x0, 0x86, 0x5, 0xAB, 0x0, 0x44, 0x5, 0xCA, 0x0, 0x50, 0x5, 0x1A, 0x0, 0x10, 0x4, 0xF, 0xFF, 0xF2, 0x8, 0x73, 0x0, 0x50, 0x9, 0x6B, 0x0, 0x66, 0x4, 0xD6, 0x0, 0x49, 0x4, 0x17, 0x0, 0x4E, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xF, 0x0, 0x21, 0x2, 0x42, 0x0, 0xA4, 0x7, 0xA2, 0x0, 0x17, 0x6, 0x77, 0x0, 0x1E, 0x2, 0x42, 0x0, 0xA4, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x7, 0x85, 0xFF, 0xF6, 0x6, 0xC1, 0x0, 0x48, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x5, 0x89, 0x0, 0x51, 0x4, 0x3D, 0x0, 0x5A, 0x4, 0x3D, 0x0, 0x5A, 0x7, 0xA2, 0x0, 0x17, 0x6, 0x77, 0x0, 0x1E, 0x4, 0xD6, 0x0, 0x49, 0x4, 0x17, 0x0, 0x4E, 0x5, 0xA9, 0x0, 0x95, 0x4, 0x98, 0x0, 0x86, 0x5, 0xA9, 0x0, 0x95, 0x4, 0x98, 0x0, 0x86, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x7B, 0x0, 0x5F, 0x4, 0x89, 0x0, 0x4F, 0x5, 0x7B, 0x0, 0x5F, 0x5, 0x7B, 0x0, 0x5F, 0x4, 0x89, 0x0, 0x4F, 0x5, 0x51, 0x0, 0x6B, 0x4, 0x3D, 0x0, 0x52, 0x5, 0xA, 0x0, 0x3A, 0x3, 0xE5, 0x0, 0xC, 0x5, 0xA, 0x0, 0x3A, 0x3, 0xE5, 0x0, 0xC, 0x5, 0xA, 0x0, 0x3A, 0x3, 0xE5, 0x0, 0xC, 0x5, 0x89, 0x0, 0x8E, 0x4, 0x66, 0x0, 0x5F, 0x6, 0xF9, 0x0, 0x9C, 0x6, 0x6F, 0x0, 0x8F, 0x4, 0x85, 0x0, 0x50, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0xE, 0x4, 0x55, 0xFF, 0x98, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0xFF, 0xD4, 0x4, 0x4B, 0xFF, 0x8C, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x2, 0x42, 0x0, 0xA4, 0x2, 0x1B, 0x0, 0x90, 0x2, 0x42, 0x0, 0x94, 0x2, 0xC, 0x0, 0x79, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x25, 0x4, 0x8E, 0xFF, 0xA1, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x5, 0x8A, 0x0, 0x58, 0x4, 0x9F, 0x0, 0x4F, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x5, 0xA5, 0x0, 0x7E, 0x4, 0xF2, 0x0, 0x77, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0xA3, 0x0, 0x50, 0x4, 0xDC, 0x0, 0x2D, 0x3, 0xF6, 0x0, 0x24, 0x5, 0x89, 0x0, 0x8E, 0x4, 0x66, 0x0, 0x5F, 0x4, 0x75, 0x0, 0x9B, 0x3, 0x5B, 0x0, 0x85, 0x6, 0x24, 0x0, 0x17, 0x4, 0xC4, 0xFF, 0xCA, 0x4, 0x71, 0x0, 0x7A, 0x5, 0x7, 0xFF, 0xD0, 0x5, 0x7, 0xFF, 0xD0, 0x4, 0x75, 0xFF, 0xF0, 0x3, 0x5B, 0xFF, 0xE2, 0x5, 0x3C, 0xFF, 0xF7, 0x4, 0x45, 0xFF, 0xC2, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xF, 0x0, 0x21, 0x5, 0x10, 0x0, 0x29, 0x4, 0x7, 0x0, 0x1F, 0x4, 0x61, 0x0, 0x61, 0x4, 0x66, 0x0, 0x2, 0x6, 0x30, 0x0, 0x82, 0x4, 0x8C, 0x0, 0x51, 0x4, 0x8C, 0x0, 0x50, 0x4, 0x8C, 0x0, 0x35, 0x4, 0x8C, 0x0, 0x81, 0x4, 0xA0, 0x0, 0x8A, 0x4, 0xB4, 0x0, 0x7D, 0x4, 0xA0, 0x0, 0x5E, 0x4, 0xB4, 0x0, 0x7D, 0x1, 0xC4, 0x0, 0x73, 0x2, 0xB6, 0x0, 0x90, 0x4, 0x89, 0x0, 0x7F, 0x8, 0xC6, 0x0, 0x95, 0x6, 0x56, 0x0, 0x95, 0x4, 0xD, 0x0, 0x8C, 0xA, 0x20, 0x0, 0x95, 0x7, 0xB0, 0x0, 0x95, 0x6, 0x74, 0x0, 0x7A, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x2, 0x42, 0xFF, 0xC0, 0x2, 0x1B, 0xFF, 0xAB, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x4, 0x3D, 0x0, 0x5A, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x7, 0x85, 0xFF, 0xF6, 0x6, 0xC1, 0x0, 0x48, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0xA, 0xC, 0x0, 0x95, 0x9, 0x41, 0x0, 0x95, 0x8, 0x8C, 0x0, 0x50, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0xD, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x86, 0x0, 0x49, 0x4, 0x4B, 0x0, 0x1, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x2, 0x42, 0xFE, 0xF7, 0x2, 0x1B, 0xFE, 0xE2, 0x2, 0x42, 0xFF, 0xDE, 0x2, 0x1B, 0xFF, 0xC9, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x16, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x4, 0xFF, 0x0, 0x32, 0x2, 0xD0, 0xFF, 0x6F, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x56, 0x5, 0x38, 0x0, 0x71, 0x4, 0x72, 0x0, 0xF, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0x89, 0x0, 0x4F, 0x4, 0x90, 0x0, 0x8F, 0x4, 0x98, 0x0, 0x86, 0x4, 0x71, 0x0, 0x2D, 0x4, 0xDF, 0xFF, 0xF, 0x4, 0x7B, 0xFF, 0xE1, 0x4, 0x31, 0x0, 0x50, 0x2, 0x1, 0xFF, 0xB4, 0x5, 0x7B, 0x0, 0x5F, 0x4, 0xCB, 0x0, 0x95, 0x4, 0x97, 0x0, 0x83, 0x5, 0x39, 0x0, 0x66, 0x7, 0x1, 0x0, 0x95, 0x5, 0x86, 0x0, 0x60, 0x4, 0x8B, 0x0, 0x50, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x5, 0xD, 0x0, 0x95, 0x4, 0x81, 0x0, 0x7D, 0x5, 0xD, 0x0, 0x95, 0x4, 0x81, 0x0, 0x7D, 0x5, 0xD, 0x0, 0x95, 0x4, 0x81, 0x0, 0x7D, 0x5, 0x39, 0x0, 0x66, 0x4, 0x31, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x85, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x85, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x85, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x85, 0x0, 0x50, 0x5, 0x3A, 0x0, 0x95, 0x4, 0x85, 0x0, 0x50, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x4, 0x66, 0x0, 0x95, 0x2, 0xD6, 0x0, 0x2D, 0x5, 0x73, 0x0, 0x6A, 0x4, 0x89, 0x0, 0x52, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x5, 0xB0, 0x0, 0x95, 0x4, 0x71, 0x0, 0x7A, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x5, 0xB, 0x0, 0x95, 0x4, 0x2D, 0x0, 0x7D, 0x4, 0x55, 0x0, 0x95, 0x2, 0xC, 0x0, 0x79, 0x4, 0x55, 0xFF, 0xC1, 0x2, 0xC, 0xFF, 0xB3, 0x4, 0x55, 0x0, 0x95, 0x2, 0xC, 0xFF, 0xB0, 0x4, 0x55, 0x0, 0x95, 0x2, 0xC, 0xFF, 0xAF, 0x7, 0x1, 0x0, 0x95, 0x6, 0xF7, 0x0, 0x7D, 0x7, 0x1, 0x0, 0x95, 0x6, 0xF7, 0x0, 0x7D, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0xAF, 0x0, 0x95, 0x4, 0x73, 0x0, 0x7A, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x1E, 0x0, 0x95, 0x4, 0x81, 0x0, 0x7D, 0x5, 0x1E, 0x0, 0x95, 0x4, 0x81, 0x0, 0x7D, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x7D, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x73, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0x0, 0x46, 0x4, 0xFF, 0x0, 0x95, 0x2, 0xD0, 0xFF, 0xAA, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xD5, 0x0, 0x4A, 0x4, 0x22, 0x0, 0x4C, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x4, 0xDC, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x8, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x38, 0x0, 0x7E, 0x4, 0x72, 0x0, 0x77, 0x5, 0x2E, 0x0, 0x12, 0x3, 0xF6, 0x0, 0x17, 0x5, 0x2E, 0x0, 0x12, 0x3, 0xF6, 0x0, 0x17, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x7, 0xB, 0x0, 0x31, 0x5, 0xF2, 0x0, 0x22, 0x5, 0x10, 0x0, 0x29, 0x4, 0x7, 0x0, 0x1F, 0x5, 0x10, 0x0, 0x29, 0x4, 0x7, 0x0, 0x1F, 0x4, 0xE0, 0x0, 0x8, 0x3, 0xE5, 0x0, 0xC, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0xD2, 0x0, 0x50, 0x4, 0x7, 0x0, 0x52, 0x4, 0x71, 0x0, 0x7A, 0x2, 0xAA, 0xFF, 0xE5, 0x5, 0xF2, 0x0, 0x22, 0x3, 0xE5, 0x0, 0xC, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0xFE, 0xAF, 0x5, 0x53, 0xFE, 0xE5, 0x5, 0x53, 0xFF, 0xA, 0x5, 0x53, 0xFE, 0xF9, 0x5, 0x53, 0xFF, 0x67, 0x5, 0x53, 0xFF, 0x54, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x86, 0xFE, 0x96, 0x4, 0x86, 0xFE, 0x9D, 0x4, 0x86, 0xFD, 0x11, 0x4, 0x86, 0xFD, 0x47, 0x4, 0x86, 0xFD, 0x6C, 0x4, 0x86, 0xFD, 0x5B, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x5, 0xB0, 0xFE, 0x9F, 0x5, 0xB0, 0xFE, 0xA6, 0x5, 0xB0, 0xFD, 0x1A, 0x5, 0xB0, 0xFD, 0x50, 0x5, 0xB0, 0xFD, 0x75, 0x5, 0xB0, 0xFD, 0x64, 0x5, 0xB0, 0xFD, 0xD2, 0x5, 0xB0, 0xFD, 0xBF, 0x2, 0xAA, 0x0, 0xAA, 0x2, 0xAA, 0x0, 0xA2, 0x2, 0xAA, 0xFF, 0xF5, 0x2, 0xAA, 0xFF, 0xE9, 0x2, 0xAA, 0x0, 0x49, 0x2, 0xAA, 0x0, 0x20, 0x2, 0xAA, 0x0, 0x2D, 0x2, 0xAA, 0x0, 0x6, 0x2, 0x42, 0xFE, 0xA1, 0x2, 0x42, 0xFE, 0xA8, 0x2, 0x42, 0xFD, 0x1C, 0x2, 0x42, 0xFD, 0x52, 0x2, 0x42, 0xFD, 0x77, 0x2, 0x42, 0xFD, 0x66, 0x2, 0x42, 0xFD, 0xD4, 0x2, 0x42, 0xFD, 0xC1, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x5, 0x9A, 0xFF, 0x6B, 0x5, 0x9A, 0xFF, 0x72, 0x5, 0xCC, 0xFE, 0x18, 0x5, 0xCC, 0xFE, 0x4E, 0x5, 0xCC, 0xFE, 0x73, 0x5, 0xCC, 0xFE, 0x62, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0xE0, 0xFE, 0x97, 0x4, 0xE0, 0xFD, 0x41, 0x4, 0xE0, 0xFD, 0x55, 0x4, 0xE0, 0xFD, 0xB0, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x5, 0x70, 0xFF, 0x75, 0x5, 0x70, 0xFF, 0x7C, 0x5, 0xA2, 0xFE, 0x22, 0x5, 0xA2, 0xFE, 0x58, 0x5, 0xA2, 0xFE, 0x7D, 0x5, 0xA2, 0xFE, 0x6C, 0x5, 0xA2, 0xFE, 0xDA, 0x5, 0xA2, 0xFE, 0xC7, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x61, 0x0, 0x61, 0x4, 0x61, 0x0, 0x61, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x2, 0xAA, 0x0, 0x3A, 0x2, 0xAA, 0x0, 0xAA, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0xFE, 0xAF, 0x5, 0x53, 0xFE, 0xE5, 0x5, 0x53, 0xFF, 0xA, 0x5, 0x53, 0xFE, 0xF9, 0x5, 0x53, 0xFF, 0x67, 0x5, 0x53, 0xFF, 0x54, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x5, 0xB0, 0xFE, 0x9F, 0x5, 0xB0, 0xFE, 0xA6, 0x5, 0xB0, 0xFD, 0x1A, 0x5, 0xB0, 0xFD, 0x50, 0x5, 0xB0, 0xFD, 0x75, 0x5, 0xB0, 0xFD, 0x64, 0x5, 0xB0, 0xFD, 0xD2, 0x5, 0xB0, 0xFD, 0xBF, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x5, 0x70, 0xFF, 0x75, 0x5, 0x70, 0xFF, 0x7C, 0x5, 0xA2, 0xFE, 0x22, 0x5, 0xA2, 0xFE, 0x58, 0x5, 0xA2, 0xFE, 0x7D, 0x5, 0xA2, 0xFE, 0x6C, 0x5, 0xA2, 0xFE, 0xDA, 0x5, 0xA2, 0xFE, 0xC7, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x4, 0x85, 0x0, 0x56, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0xFF, 0xD7, 0x5, 0x53, 0x0, 0x12, 0x5, 0x53, 0x0, 0x12, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x89, 0x0, 0x7F, 0x4, 0x86, 0xFE, 0x39, 0x4, 0x86, 0xFE, 0x82, 0x5, 0xB0, 0xFE, 0x42, 0x5, 0xB0, 0xFE, 0x8B, 0x5, 0xB0, 0x0, 0x95, 0x2, 0xAA, 0xFF, 0xEC, 0x2, 0xAA, 0xFF, 0xDB, 0x2, 0xAA, 0xFF, 0xC2, 0x2, 0xAA, 0xFF, 0xD0, 0x2, 0xAA, 0xFF, 0xED, 0x2, 0xAA, 0xFF, 0xC6, 0x2, 0x42, 0xFF, 0xDF, 0x2, 0x42, 0xFF, 0xCE, 0x2, 0x42, 0x0, 0x2D, 0x2, 0x42, 0x0, 0xA4, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0x89, 0x0, 0x81, 0x4, 0x89, 0x0, 0x81, 0x4, 0x61, 0x0, 0x80, 0x4, 0x61, 0x0, 0x80, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xE0, 0x0, 0x8, 0x4, 0xE0, 0xFE, 0x33, 0x4, 0xE0, 0xFE, 0x7C, 0x5, 0x1E, 0xFE, 0xD8, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x6, 0x95, 0x0, 0x66, 0x5, 0x9A, 0xFF, 0xE, 0x5, 0x9A, 0xFF, 0x57, 0x5, 0x70, 0xFF, 0x18, 0x5, 0x70, 0xFF, 0x61, 0x5, 0x5C, 0x0, 0x6B, 0x1, 0xFE, 0x0, 0x0, 0x7, 0xCA, 0x0, 0x3C, 0x6, 0xA, 0x0, 0x3C, 0x6, 0xA, 0x0, 0x90, 0x1, 0xFE, 0x0, 0x0, 0x2, 0xCC, 0x0, 0x88, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x1D, 0xFF, 0x66, 0x5, 0x1A, 0xFF, 0x73, 0x2, 0x39, 0xFF, 0x75, 0x4, 0xCA, 0xFF, 0x9E, 0x4, 0x79, 0xFF, 0x24, 0x4, 0xEE, 0xFF, 0xAE, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x61, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x4, 0x2A, 0x0, 0x41, 0x4, 0xDE, 0x0, 0x76, 0x1, 0xFD, 0x0, 0x85, 0x4, 0x5C, 0x0, 0x76, 0x6, 0x6, 0x0, 0x76, 0x4, 0xDD, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x6D, 0x0, 0x76, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x3D, 0x0, 0x5, 0x4, 0x5F, 0x0, 0x16, 0x1, 0xFD, 0xFF, 0x9E, 0x4, 0x3D, 0x0, 0x5, 0x3, 0xE1, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x4, 0x35, 0x0, 0x3F, 0x1, 0xFD, 0x0, 0x85, 0x1, 0xFD, 0xFF, 0x9E, 0x3, 0xD6, 0x0, 0x25, 0x4, 0x5C, 0x0, 0x76, 0x4, 0x47, 0x0, 0x20, 0x4, 0x9E, 0x0, 0x9, 0x4, 0x61, 0x0, 0x76, 0x3, 0xBA, 0x0, 0x76, 0x3, 0xE1, 0x0, 0x76, 0x4, 0xE4, 0x0, 0x76, 0x6, 0x6, 0x0, 0x76, 0x4, 0xDE, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x4, 0xD8, 0x0, 0x76, 0x4, 0x6D, 0x0, 0x76, 0x4, 0x80, 0x0, 0x50, 0x4, 0x3C, 0x0, 0x25, 0x4, 0x5F, 0x0, 0x16, 0x4, 0x46, 0x0, 0x43, 0x4, 0xDE, 0x0, 0x76, 0x4, 0x80, 0x0, 0x50, 0x4, 0x3D, 0x0, 0x5, 0x5, 0xFE, 0x0, 0xB, 0x4, 0xE4, 0x0, 0x76, 0x4, 0x47, 0x0, 0x20, 0x5, 0x9E, 0x0, 0x51, 0x3, 0xD6, 0x0, 0x25, 0x5, 0xD3, 0x0, 0x85, 0x6, 0x47, 0xFF, 0xF0, 0x4, 0xC0, 0x0, 0x50, 0x4, 0x35, 0x0, 0x3F, 0x6, 0x8, 0x0, 0x29, 0x6, 0x8, 0x0, 0x29, 0x6, 0x8, 0x0, 0x29, 0x4, 0x3D, 0x0, 0x5, 0x5, 0x53, 0x0, 0x12, 0x4, 0x55, 0x0, 0x5B, 0x4, 0x86, 0x0, 0x95, 0x4, 0x4B, 0x0, 0x54, 0x5, 0x86, 0x0, 0x66, 0x4, 0x8E, 0x0, 0x50, 0x4, 0x9E, 0x0, 0x9, 0x3, 0xE1, 0x0, 0x76, 0x4, 0xC0, 0x0, 0x50, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x75, 0x0, 0x66, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0x98, 0x0, 0x64, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x5, 0xB0, 0x0, 0x95, 0x2, 0x1B, 0xFF, 0x91, 0x0, 0x79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x24, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x9, 0x2C, 0x0, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0x24, 0x0, 0x3, 0x0, 0xA, 0x0, 0x0, 0x9, 0x2C, 0x0, 0x4, 0x9, 0x8, 0x0, 0x0, 0x1, 0x4C, 0x1, 0x0, 0x0, 0x7, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x2, 0x0, 0x9, 0x0, 0xD, 0x0, 0x7E, 0x0, 0xA0, 0x0, 0xAC, 0x0, 0xAD, 0x0, 0xBF, 0x0, 0xC6, 0x0, 0xCF, 0x0, 0xE6, 0x0, 0xEF, 0x0, 0xFE, 0x1, 0xF, 0x1, 0x11, 0x1, 0x25, 0x1, 0x27, 0x1, 0x30, 0x1, 0x53, 0x1, 0x5F, 0x1, 0x67, 0x1, 0x7E, 0x1, 0x95, 0x1, 0x9F, 0x1, 0xC6, 0x1, 0xE3, 0x1, 0xFF, 0x2, 0x17, 0x2, 0x25, 0x2, 0x33, 0x2, 0x74, 0x2, 0x75, 0x2, 0x98, 0x2, 0x9C, 0x2, 0xBB, 0x2, 0xBC, 0x3, 0x77, 0x3, 0x7F, 0x3, 0x8A, 0x3, 0x8C, 0x3, 0x92, 0x3, 0xA1, 0x3, 0xB0, 0x3, 0xB9, 0x3, 0xD4, 0x3, 0xE1, 0x4, 0x25, 0x4, 0x2F, 0x4, 0x45, 0x4, 0x4F, 0x4, 0x62, 0x4, 0x6F, 0x4, 0x79, 0x4, 0x8B, 0x4, 0x9F, 0x4, 0xA9, 0x4, 0xB1, 0x4, 0xBA, 0x4, 0xCE, 0x4, 0xD7, 0x4, 0xE9, 0x4, 0xF5, 0x5, 0x1, 0x5, 0x10, 0x5, 0x1D, 0x5, 0x2F, 0x1A, 0xBE, 0x1D, 0xF5, 0x1E, 0x1, 0x1E, 0x27, 0x1E, 0x2F, 0x1E, 0x3D, 0x1E, 0x3F, 0x1E, 0x7F, 0x1E, 0x85, 0x1E, 0x9A, 0x1E, 0x9F, 0x1E, 0xF1, 0x1E, 0xFF, 0x1F, 0x15, 0x1F, 0x1D, 0x1F, 0x45, 0x1F, 0x4D, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x7D, 0x1F, 0xB4, 0x1F, 0xBC, 0x1F, 0xC4, 0x1F, 0xCC, 0x1F, 0xD3, 0x1F, 0xDB, 0x1F, 0xDF, 0x1F, 0xEC, 0x1F, 0xEF, 0x1F, 0xF4, 0x1F, 0xFC, 0x1F, 0xFE, 0x20, 0x9, 0x20, 0x14, 0x20, 0x15, 0x20, 0x27, 0x20, 0x3C, 0x20, 0x46, 0x20, 0x49, 0x20, 0x5E, 0x20, 0x5F, 0x20, 0x71, 0x20, 0x8E, 0x20, 0x9C, 0x20, 0xAB, 0x20, 0xBE, 0x20, 0xDC, 0x20, 0xE8, 0x20, 0xF0, 0x21, 0x1, 0x21, 0x3, 0x21, 0x6, 0x21, 0x9, 0x21, 0x13, 0x21, 0x17, 0x21, 0x23, 0x21, 0x26, 0x21, 0x2B, 0x21, 0x2E, 0x21, 0x32, 0x21, 0x3B, 0x21, 0x4D, 0x21, 0x89, 0x22, 0x2, 0x22, 0x6, 0x22, 0xF, 0x22, 0x12, 0x22, 0x1A, 0x22, 0x1E, 0x22, 0x2B, 0x22, 0x48, 0x22, 0x60, 0x22, 0x65, 0x24, 0x23, 0x25, 0xCA, 0x27, 0xEF, 0x2B, 0x4F, 0x2B, 0x5F, 0x2C, 0x7F, 0x2E, 0x42, 0xA6, 0x9D, 0xA6, 0x9F, 0xA7, 0x8E, 0xA7, 0x8F, 0xA7, 0xAD, 0xA7, 0xB1, 0xA7, 0xFF, 0xA9, 0x2E, 0xAB, 0x5F, 0xAB, 0x65, 0xEE, 0x2, 0xF6, 0xC3, 0xFB, 0x6, 0xFE, 0x2D, 0xFE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x9, 0x0, 0xD, 0x0, 0x20, 0x0, 0xA0, 0x0, 0xA1, 0x0, 0xAD, 0x0, 0xAE, 0x0, 0xC0, 0x0, 0xC7, 0x0, 0xD0, 0x0, 0xE7, 0x0, 0xF0, 0x0, 0xFF, 0x1, 0x10, 0x1, 0x12, 0x1, 0x26, 0x1, 0x28, 0x1, 0x31, 0x1, 0x54, 0x1, 0x60, 0x1, 0x68, 0x1, 0x7F, 0x1, 0x96, 0x1, 0xA0, 0x1, 0xC7, 0x1, 0xE4, 0x2, 0x0, 0x2, 0x18, 0x2, 0x26, 0x2, 0x34, 0x2, 0x75, 0x2, 0x76, 0x2, 0x99, 0x2, 0x9D, 0x2, 0xBC, 0x2, 0xBD, 0x3, 0x7A, 0x3, 0x84, 0x3, 0x8C, 0x3, 0x8E, 0x3, 0x93, 0x3, 0xA3, 0x3, 0xB1, 0x3, 0xBA, 0x3, 0xD5, 0x3, 0xF0, 0x4, 0x26, 0x4, 0x30, 0x4, 0x46, 0x4, 0x50, 0x4, 0x63, 0x4, 0x70, 0x4, 0x7A, 0x4, 0x8C, 0x4, 0xA0, 0x4, 0xAA, 0x4, 0xB2, 0x4, 0xBB, 0x4, 0xCF, 0x4, 0xD8, 0x4, 0xEA, 0x4, 0xF6, 0x5, 0x2, 0x5, 0x11, 0x5, 0x1E, 0x1A, 0xB0, 0x1D, 0x0, 0x1D, 0xFC, 0x1E, 0x2, 0x1E, 0x28, 0x1E, 0x30, 0x1E, 0x3E, 0x1E, 0x40, 0x1E, 0x80, 0x1E, 0x86, 0x1E, 0x9B, 0x1E, 0xA0, 0x1E, 0xF2, 0x1F, 0x0, 0x1F, 0x18, 0x1F, 0x20, 0x1F, 0x48, 0x1F, 0x50, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x80, 0x1F, 0xB6, 0x1F, 0xBD, 0x1F, 0xC6, 0x1F, 0xCD, 0x1F, 0xD6, 0x1F, 0xDD, 0x1F, 0xE0, 0x1F, 0xED, 0x1F, 0xF2, 0x1F, 0xF6, 0x1F, 0xFD, 0x20, 0x0, 0x20, 0xA, 0x20, 0x15, 0x20, 0x16, 0x20, 0x2F, 0x20, 0x3D, 0x20, 0x47, 0x20, 0x4A, 0x20, 0x5F, 0x20, 0x70, 0x20, 0x74, 0x20, 0x90, 0x20, 0xA0, 0x20, 0xAC, 0x20, 0xDB, 0x20, 0xE8, 0x20, 0xF0, 0x21, 0x0, 0x21, 0x3, 0x21, 0x5, 0x21, 0x9, 0x21, 0x13, 0x21, 0x16, 0x21, 0x1E, 0x21, 0x25, 0x21, 0x2A, 0x21, 0x2E, 0x21, 0x32, 0x21, 0x3B, 0x21, 0x4D, 0x21, 0x4F, 0x22, 0x2, 0x22, 0x6, 0x22, 0xF, 0x22, 0x11, 0x22, 0x1A, 0x22, 0x1E, 0x22, 0x2B, 0x22, 0x48, 0x22, 0x60, 0x22, 0x64, 0x24, 0x23, 0x25, 0xCA, 0x27, 0xE6, 0x2B, 0x4E, 0x2B, 0x5A, 0x2C, 0x60, 0x2D, 0xE0, 0xA6, 0x40, 0xA6, 0x9F, 0xA7, 0x0, 0xA7, 0x8F, 0xA7, 0x90, 0xA7, 0xB0, 0xA7, 0xF7, 0xA9, 0x2E, 0xAB, 0x30, 0xAB, 0x64, 0xEE, 0x1, 0xF6, 0xC3, 0xFB, 0x0, 0xFE, 0x20, 0xFE, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x1, 0x0, 0x0, 0xFF, 0xFA, 0xFF, 0xF7, 0xFF, 0xE5, 0x8, 0x26, 0xFF, 0xC3, 0x8, 0x1A, 0xFF, 0xC2, 0x0, 0x0, 0x8, 0xD, 0x0, 0x0, 0x8, 0x8, 0x0, 0x0, 0x8, 0x4, 0x0, 0x0, 0x8, 0x2, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x7, 0xF8, 0x0, 0x0, 0x7, 0xFA, 0xFF, 0x17, 0x0, 0x0, 0xFF, 0x14, 0x9, 0x21, 0x0, 0x0, 0x9, 0x14, 0x0, 0x0, 0x9, 0x8, 0xFE, 0xB5, 0x8, 0xC7, 0xFE, 0xB4, 0x0, 0x0, 0xFE, 0xB2, 0x7, 0x72, 0xFE, 0xB1, 0x0, 0x0, 0x0, 0x0, 0x6, 0x4D, 0x6, 0x4C, 0x0, 0x0, 0x0, 0x0, 0xFE, 0x89, 0x0, 0x0, 0xFE, 0x7D, 0x0, 0x0, 0xFE, 0x50, 0x0, 0x0, 0xFE, 0x48, 0x0, 0x0, 0xFE, 0x3D, 0x0, 0x0, 0xFE, 0x37, 0x0, 0x0, 0xFE, 0x30, 0x0, 0x0, 0xFE, 0x28, 0x0, 0x0, 0x5, 0x77, 0x0, 0x0, 0x5, 0x75, 0x0, 0x0, 0xFD, 0xF5, 0x0, 0x0, 0xFD, 0xF0, 0xE8, 0x70, 0xE6, 0x2F, 0x0, 0x0, 0xED, 0x4B, 0x0, 0x0, 0xED, 0x45, 0xEB, 0xF1, 0xED, 0x43, 0xEB, 0xA2, 0xED, 0x3D, 0xE5, 0x94, 0xEB, 0xCE, 0x0, 0x0, 0xEC, 0xD8, 0xEC, 0xD6, 0xEC, 0xD4, 0xEC, 0xD2, 0xEC, 0xD0, 0xEC, 0xCF, 0xEC, 0xCE, 0xEC, 0xCD, 0xEC, 0xCC, 0xEC, 0xCA, 0xEC, 0xC9, 0x0, 0x0, 0xEC, 0xC3, 0x0, 0x0, 0xEC, 0xBE, 0xE4, 0x65, 0xEC, 0xBA, 0xE4, 0x58, 0xEC, 0xB5, 0xEC, 0xB4, 0xE4, 0x4B, 0xE4, 0x4A, 0xE4, 0x4B, 0xEA, 0xC7, 0xE4, 0x4A, 0x0, 0x0, 0xE4, 0x3F, 0xEC, 0x6B, 0xE4, 0x3C, 0xEC, 0x56, 0xE4, 0x2B, 0xE4, 0x29, 0xE4, 0x28, 0x0, 0x0, 0xE4, 0x23, 0xE4, 0x7, 0xE3, 0xFC, 0xE3, 0xF5, 0xE3, 0xE6, 0xE3, 0xE5, 0xE3, 0xE4, 0xE3, 0xE2, 0xE3, 0xD9, 0xE3, 0xD7, 0xE3, 0xD1, 0x0, 0x0, 0xE3, 0xCC, 0xE3, 0xCA, 0xE3, 0xC7, 0xE3, 0xBF, 0xE3, 0xAE, 0xE3, 0xAD, 0xE3, 0x35, 0xE0, 0x2B, 0xE3, 0x29, 0xE3, 0x28, 0xE3, 0x21, 0xE3, 0x1E, 0xE3, 0x12, 0xE2, 0xF6, 0xE2, 0xDF, 0xE2, 0xDC, 0xE1, 0x1F, 0xDF, 0x79, 0xDD, 0x5E, 0xDA, 0x0, 0xD9, 0xF6, 0xD8, 0xF6, 0xD7, 0x96, 0x5F, 0x99, 0x5F, 0x98, 0x5F, 0x38, 0x65, 0x27, 0x5F, 0x37, 0x5F, 0x35, 0x5E, 0xF0, 0x5D, 0xC2, 0x5B, 0xC1, 0x5B, 0xBD, 0x19, 0x22, 0x10, 0x62, 0xC, 0x26, 0x9, 0xD, 0x8, 0x3C, 0x7, 0x40, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3A, 0x0, 0x0, 0x1, 0x44, 0x0, 0x0, 0x1, 0x6E, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0xCA, 0x0, 0x0, 0x0, 0x0, 0x1, 0xD4, 0x0, 0x0, 0x0, 0x0, 0x1, 0xE2, 0x0, 0x0, 0x2, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x28, 0x2, 0x32, 0x0, 0x0, 0x0, 0x0, 0x2, 0x3A, 0x2, 0x56, 0x0, 0x0, 0x2, 0x6E, 0x0, 0x0, 0x2, 0xA0, 0x0, 0x0, 0x3, 0x8, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0, 0x3, 0x52, 0x0, 0x0, 0x3, 0x62, 0x0, 0x0, 0x3, 0x86, 0x0, 0x0, 0x3, 0x92, 0x0, 0x0, 0x3, 0xB6, 0x0, 0x0, 0x3, 0xD6, 0x0, 0x0, 0x3, 0xEA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xFC, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x0, 0x4, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x0, 0x82, 0x8, 0xC9, 0x8, 0xDD, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0x0, 0x83, 0x0, 0x84, 0x8, 0xE3, 0x8, 0xE4, 0x8, 0xE5, 0x8, 0xE6, 0x8, 0xE7, 0x0, 0x85, 0x0, 0x86, 0x8, 0xE8, 0x8, 0xE9, 0x8, 0xEA, 0x8, 0xEB, 0x8, 0xEC, 0x8, 0xED, 0x0, 0x87, 0x0, 0x88, 0x8, 0xF8, 0x8, 0xF9, 0x8, 0xFA, 0x8, 0xFB, 0x8, 0xFC, 0x8, 0xFD, 0x0, 0x89, 0x0, 0x8A, 0x8, 0xFE, 0x8, 0xFF, 0x9, 0x0, 0x9, 0x1, 0x9, 0x2, 0x0, 0x8B, 0x8, 0xC8, 0x0, 0x8C, 0x0, 0x8D, 0x8, 0xCA, 0x0, 0x8E, 0x9, 0x31, 0x9, 0x32, 0x9, 0x33, 0x9, 0x34, 0x9, 0x35, 0x9, 0x36, 0x0, 0x8F, 0x9, 0x37, 0x9, 0x38, 0x9, 0x39, 0x9, 0x3A, 0x9, 0x3B, 0x9, 0x3C, 0x9, 0x3D, 0x9, 0x3E, 0x0, 0x90, 0x0, 0x91, 0x9, 0x3F, 0x9, 0x40, 0x9, 0x41, 0x9, 0x42, 0x9, 0x43, 0x9, 0x44, 0x9, 0x45, 0x0, 0x92, 0x0, 0x93, 0x9, 0x46, 0x9, 0x47, 0x9, 0x48, 0x9, 0x49, 0x9, 0x4A, 0x9, 0x4B, 0x0, 0x94, 0x0, 0x95, 0x9, 0x5A, 0x9, 0x5B, 0x9, 0x5E, 0x9, 0x5F, 0x9, 0x60, 0x9, 0x61, 0x8, 0xCB, 0x8, 0xCC, 0xA, 0xE6, 0x0, 0xAD, 0x0, 0xAE, 0x0, 0xAF, 0x0, 0xB0, 0x0, 0xB1, 0x0, 0xB2, 0x0, 0xB3, 0xA, 0xE7, 0xA, 0x5E, 0x0, 0xDB, 0x0, 0xDC, 0xB, 0x5, 0xB, 0x6, 0xB, 0x7, 0xB, 0x8, 0xB, 0x9, 0xB, 0xA, 0xB, 0xB, 0xB, 0xC, 0x0, 0xDD, 0x0, 0xDE, 0xA, 0x2D, 0xB, 0xD, 0xB, 0xE, 0xB, 0xF, 0xB, 0x10, 0xB, 0x11, 0x0, 0xDF, 0x0, 0xE0, 0xB, 0x12, 0xB, 0x13, 0x8, 0xD3, 0x8, 0xEE, 0x9, 0x79, 0x9, 0x7A, 0x9, 0x7B, 0x9, 0x7C, 0x9, 0x58, 0x9, 0x59, 0x9, 0x5C, 0x9, 0x5D, 0x0, 0xE1, 0x0, 0xE2, 0xB, 0x2C, 0xB, 0x2D, 0x0, 0xE3, 0x0, 0xE4, 0x0, 0xE5, 0x0, 0xE6, 0x0, 0xE7, 0x0, 0xE8, 0xB, 0x3D, 0x1, 0x4D, 0x1, 0x4E, 0xB, 0x3E, 0xA, 0xE5, 0x2, 0x29, 0x2, 0x2A, 0x2, 0x2B, 0x2, 0x2C, 0xB, 0x3F, 0x2, 0x2D, 0x2, 0x2E, 0x9, 0xD5, 0x2, 0x2F, 0x9, 0xD6, 0x9, 0xD7, 0x9, 0xD8, 0x2, 0x30, 0x2, 0x31, 0x9, 0xDF, 0x9, 0xE0, 0x9, 0xE1, 0x2, 0x32, 0x9, 0xE2, 0x9, 0xE3, 0x2, 0x33, 0x9, 0xE4, 0x9, 0xE5, 0x2, 0x34, 0x9, 0xE6, 0x2, 0x35, 0x9, 0xE7, 0x2, 0x36, 0x9, 0xE8, 0x9, 0xE9, 0x2, 0x37, 0x9, 0xEA, 0x2, 0x38, 0x2, 0x39, 0x9, 0xEB, 0x9, 0xEC, 0x9, 0xED, 0x9, 0xEE, 0x9, 0xEF, 0x9, 0xF0, 0x9, 0xF1, 0x9, 0xF2, 0x2, 0x43, 0x9, 0xF4, 0x9, 0xF5, 0x2, 0x44, 0x9, 0xF3, 0x2, 0x45, 0x2, 0x46, 0x2, 0x47, 0x2, 0x48, 0x2, 0x49, 0x2, 0x4A, 0x2, 0x4B, 0x9, 0xF6, 0x2, 0x4C, 0x2, 0x4D, 0x9, 0xF7, 0x9, 0xF8, 0x9, 0xF9, 0x9, 0xFA, 0x9, 0xFB, 0x2, 0x4E, 0x2, 0x4F, 0x2, 0x50, 0x2, 0x51, 0xB, 0x40, 0xB, 0x41, 0x2, 0x5F, 0x2, 0x60, 0xB, 0x42, 0xB, 0x43, 0xB, 0x44, 0x2, 0x61, 0x2, 0x62, 0xB, 0x45, 0xB, 0x46, 0xB, 0x47, 0xB, 0x48, 0x2, 0x63, 0x2, 0x64, 0x2, 0x65, 0x2, 0x66, 0x2, 0x67, 0xA, 0x33, 0x9, 0xFC, 0x2, 0x68, 0x9, 0xFD, 0x2, 0x69, 0x9, 0xFE, 0x9, 0xFF, 0xA, 0x0, 0xA, 0x1, 0x2, 0x6A, 0x2, 0x6B, 0x2, 0x6C, 0xA, 0x3, 0xA, 0x34, 0xA, 0x4, 0x2, 0x6D, 0xA, 0x5, 0x2, 0x6E, 0xA, 0x6, 0xA, 0x7, 0x2, 0x6F, 0xA, 0x8, 0x2, 0x70, 0x2, 0x71, 0x2, 0x72, 0xA, 0x9, 0xA, 0x2, 0x2, 0x73, 0xA, 0xA, 0xA, 0xB, 0xA, 0xC, 0xA, 0xD, 0xA, 0xE, 0xA, 0xF, 0xA, 0x10, 0x2, 0x74, 0x2, 0x75, 0xA, 0x11, 0xA, 0x12, 0x2, 0x80, 0x2, 0x81, 0x2, 0x82, 0x2, 0x83, 0xA, 0x13, 0x2, 0x84, 0x2, 0x85, 0x2, 0x86, 0xA, 0x14, 0x2, 0x87, 0x2, 0x88, 0x2, 0x89, 0x2, 0x8A, 0xA, 0x15, 0x2, 0x8B, 0xA, 0x16, 0xA, 0x17, 0x2, 0x8C, 0xA, 0x18, 0x2, 0x8D, 0xA, 0x19, 0xA, 0x35, 0xA, 0x1A, 0x2, 0x98, 0xA, 0x1B, 0x2, 0x99, 0xA, 0x1C, 0xA, 0x1D, 0xA, 0x1E, 0xA, 0x1F, 0x2, 0x9A, 0x2, 0x9B, 0x2, 0x9C, 0xA, 0x20, 0xA, 0x36, 0xA, 0x21, 0x2, 0x9D, 0x2, 0x9E, 0x2, 0x9F, 0xA, 0xD1, 0xA, 0x37, 0xA, 0x38, 0x2, 0xAD, 0x2, 0xAE, 0x2, 0xAF, 0x2, 0xB0, 0xA, 0x39, 0xA, 0x3A, 0xA, 0x3C, 0xA, 0x3B, 0xA, 0xD0, 0x2, 0xC3, 0x2, 0xC4, 0x2, 0xC5, 0x2, 0xC6, 0x2, 0xC7, 0xA, 0xD2, 0xA, 0xD3, 0x2, 0xC8, 0x2, 0xC9, 0x2, 0xCA, 0x2, 0xCB, 0xA, 0x3D, 0xA, 0x3E, 0x2, 0xCC, 0x2, 0xCD, 0x2, 0xCE, 0x2, 0xCF, 0xA, 0xD4, 0xA, 0xD5, 0xA, 0x3F, 0xA, 0x40, 0xA, 0xC7, 0xA, 0xC8, 0xA, 0x41, 0xA, 0x42, 0xA, 0xD6, 0xA, 0xD7, 0xA, 0xCF, 0x2, 0xE3, 0x2, 0xE4, 0xA, 0xCD, 0xA, 0xCE, 0xA, 0x43, 0xA, 0x44, 0xA, 0x45, 0x2, 0xE5, 0x2, 0xE6, 0x2, 0xE7, 0x2, 0xE8, 0x2, 0xE9, 0x2, 0xEA, 0x2, 0xEB, 0x2, 0xEC, 0xA, 0xC9, 0xA, 0xCA, 0x2, 0xED, 0x2, 0xEE, 0x2, 0xEF, 0xA, 0x50, 0xA, 0x4F, 0xA, 0x51, 0xA, 0x52, 0xA, 0x53, 0xA, 0x54, 0xA, 0x55, 0x2, 0xF0, 0x2, 0xF1, 0xA, 0x56, 0xA, 0x57, 0xA, 0x58, 0xA, 0x59, 0xA, 0x5A, 0xA, 0x5B, 0xA, 0x5C, 0xA, 0x5D, 0xA, 0xCB, 0xA, 0xCC, 0xA, 0x6B, 0xA, 0x6C, 0x2, 0xF2, 0x2, 0xF3, 0x2, 0xF4, 0x2, 0xF5, 0xA, 0xD8, 0xA, 0xD9, 0x2, 0xF6, 0xA, 0x6D, 0xA, 0xDA, 0x3, 0x6, 0x3, 0x7, 0x3, 0x8, 0x3, 0x9, 0x3, 0xA, 0x3, 0xB, 0x3, 0xC, 0x3, 0xD, 0xB, 0x49, 0xB, 0x4A, 0xB, 0x4B, 0xB, 0x4C, 0x4, 0x25, 0x4, 0x26, 0x4, 0x27, 0x4, 0x28, 0xA, 0x31, 0xA, 0x32, 0x4, 0x29, 0x4, 0x2A, 0xB, 0x73, 0xB, 0x74, 0x4, 0x2B, 0x4, 0x2C, 0x4, 0x2D, 0x4, 0x2E, 0xA, 0x28, 0xA, 0x29, 0xA, 0xC0, 0xA, 0xC1, 0xA, 0xC2, 0xA, 0xC3, 0xA, 0xC4, 0xA, 0xC5, 0x4, 0x34, 0x4, 0x35, 0x4, 0x36, 0x4, 0x37, 0x4, 0x38, 0x4, 0x39, 0x4, 0x3A, 0x4, 0x3B, 0x4, 0x3C, 0x4, 0x3D, 0x4, 0x3E, 0xC, 0x86, 0xC, 0x87, 0xC, 0x88, 0x4, 0x3F, 0x4, 0x40, 0x4, 0x41, 0xC, 0x90, 0xC, 0x91, 0xC, 0x92, 0xC, 0x93, 0xC, 0xB1, 0x4, 0x72, 0x4, 0x73, 0xA, 0x2A, 0xA, 0x2B, 0x4, 0x74, 0x4, 0x75, 0x4, 0x76, 0x4, 0x77, 0x4, 0x78, 0x4, 0x79, 0x4, 0x7A, 0x4, 0x7B, 0xA, 0x2C, 0x4, 0xC5, 0x4, 0xC6, 0x4, 0xC7, 0xA, 0xDB, 0x4, 0xC8, 0x4, 0xC9, 0x4, 0xCA, 0x4, 0xCB, 0x4, 0xCC, 0x4, 0xCD, 0x4, 0xCE, 0xA, 0xC6, 0x4, 0xF5, 0x2, 0x39, 0x0, 0xC, 0x0, 0x0, 0x0, 0x0, 0xF, 0xA0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0xD, 0x0, 0x0, 0x0, 0xD, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x7E, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0xA0, 0x0, 0x0, 0x0, 0xA0, 0x0, 0x0, 0x8, 0xC6, 0x0, 0x0, 0x0, 0xA1, 0x0, 0x0, 0x0, 0xAC, 0x0, 0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0xAD, 0x0, 0x0, 0x0, 0xAD, 0x0, 0x0, 0x8, 0xC7, 0x0, 0x0, 0x0, 0xAE, 0x0, 0x0, 0x0, 0xBF, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0xC0, 0x0, 0x0, 0x0, 0xC5, 0x0, 0x0, 0x8, 0xCD, 0x0, 0x0, 0x0, 0xC6, 0x0, 0x0, 0x0, 0xC6, 0x0, 0x0, 0x0, 0x82, 0x0, 0x0, 0x0, 0xC7, 0x0, 0x0, 0x0, 0xCF, 0x0, 0x0, 0x8, 0xD4, 0x0, 0x0, 0x0, 0xD0, 0x0, 0x0, 0x0, 0xD0, 0x0, 0x0, 0x8, 0xC9, 0x0, 0x0, 0x0, 0xD1, 0x0, 0x0, 0x0, 0xD6, 0x0, 0x0, 0x8, 0xDD, 0x0, 0x0, 0x0, 0xD7, 0x0, 0x0, 0x0, 0xD8, 0x0, 0x0, 0x0, 0x83, 0x0, 0x0, 0x0, 0xD9, 0x0, 0x0, 0x0, 0xDD, 0x0, 0x0, 0x8, 0xE3, 0x0, 0x0, 0x0, 0xDE, 0x0, 0x0, 0x0, 0xDF, 0x0, 0x0, 0x0, 0x85, 0x0, 0x0, 0x0, 0xE0, 0x0, 0x0, 0x0, 0xE5, 0x0, 0x0, 0x8, 0xE8, 0x0, 0x0, 0x0, 0xE6, 0x0, 0x0, 0x0, 0xE6, 0x0, 0x0, 0x0, 0x87, 0x0, 0x0, 0x0, 0xE7, 0x0, 0x0, 0x0, 0xEF, 0x0, 0x0, 0x8, 0xEF, 0x0, 0x0, 0x0, 0xF0, 0x0, 0x0, 0x0, 0xF0, 0x0, 0x0, 0x0, 0x88, 0x0, 0x0, 0x0, 0xF1, 0x0, 0x0, 0x0, 0xF6, 0x0, 0x0, 0x8, 0xF8, 0x0, 0x0, 0x0, 0xF7, 0x0, 0x0, 0x0, 0xF8, 0x0, 0x0, 0x0, 0x89, 0x0, 0x0, 0x0, 0xF9, 0x0, 0x0, 0x0, 0xFD, 0x0, 0x0, 0x8, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x0, 0x8B, 0x0, 0x0, 0x0, 0xFF, 0x0, 0x0, 0x1, 0xF, 0x0, 0x0, 0x9, 0x3, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x8, 0xC8, 0x0, 0x0, 0x1, 0x11, 0x0, 0x0, 0x1, 0x11, 0x0, 0x0, 0x0, 0x8C, 0x0, 0x0, 0x1, 0x12, 0x0, 0x0, 0x1, 0x25, 0x0, 0x0, 0x9, 0x14, 0x0, 0x0, 0x1, 0x26, 0x0, 0x0, 0x1, 0x26, 0x0, 0x0, 0x0, 0x8D, 0x0, 0x0, 0x1, 0x27, 0x0, 0x0, 0x1, 0x27, 0x0, 0x0, 0x8, 0xCA, 0x0, 0x0, 0x1, 0x28, 0x0, 0x0, 0x1, 0x30, 0x0, 0x0, 0x9, 0x28, 0x0, 0x0, 0x1, 0x31, 0x0, 0x0, 0x1, 0x31, 0x0, 0x0, 0x0, 0x8E, 0x0, 0x0, 0x1, 0x32, 0x0, 0x0, 0x1, 0x37, 0x0, 0x0, 0x9, 0x31, 0x0, 0x0, 0x1, 0x38, 0x0, 0x0, 0x1, 0x38, 0x0, 0x0, 0x0, 0x8F, 0x0, 0x0, 0x1, 0x39, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x9, 0x37, 0x0, 0x0, 0x1, 0x41, 0x0, 0x0, 0x1, 0x42, 0x0, 0x0, 0x0, 0x90, 0x0, 0x0, 0x1, 0x43, 0x0, 0x0, 0x1, 0x49, 0x0, 0x0, 0x9, 0x3F, 0x0, 0x0, 0x1, 0x4A, 0x0, 0x0, 0x1, 0x4B, 0x0, 0x0, 0x0, 0x92, 0x0, 0x0, 0x1, 0x4C, 0x0, 0x0, 0x1, 0x51, 0x0, 0x0, 0x9, 0x46, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x53, 0x0, 0x0, 0x0, 0x94, 0x0, 0x0, 0x1, 0x54, 0x0, 0x0, 0x1, 0x5F, 0x0, 0x0, 0x9, 0x4C, 0x0, 0x0, 0x1, 0x60, 0x0, 0x0, 0x1, 0x61, 0x0, 0x0, 0x9, 0x5A, 0x0, 0x0, 0x1, 0x62, 0x0, 0x0, 0x1, 0x65, 0x0, 0x0, 0x9, 0x5E, 0x0, 0x0, 0x1, 0x66, 0x0, 0x0, 0x1, 0x67, 0x0, 0x0, 0x8, 0xCB, 0x0, 0x0, 0x1, 0x68, 0x0, 0x0, 0x1, 0x7E, 0x0, 0x0, 0x9, 0x62, 0x0, 0x0, 0x1, 0x7F, 0x0, 0x0, 0x1, 0x95, 0x0, 0x0, 0x0, 0x96, 0x0, 0x0, 0x1, 0x96, 0x0, 0x0, 0x1, 0x96, 0x0, 0x0, 0xA, 0xE6, 0x0, 0x0, 0x1, 0x97, 0x0, 0x0, 0x1, 0x9D, 0x0, 0x0, 0x0, 0xAD, 0x0, 0x0, 0x1, 0x9E, 0x0, 0x0, 0x1, 0x9E, 0x0, 0x0, 0xA, 0xE7, 0x0, 0x0, 0x1, 0x9F, 0x0, 0x0, 0x1, 0x9F, 0x0, 0x0, 0xA, 0x5E, 0x0, 0x0, 0x1, 0xA0, 0x0, 0x0, 0x1, 0xC6, 0x0, 0x0, 0x0, 0xB4, 0x0, 0x0, 0x1, 0xC7, 0x0, 0x0, 0x1, 0xE3, 0x0, 0x0, 0xA, 0xE8, 0x0, 0x0, 0x1, 0xE4, 0x0, 0x0, 0x1, 0xE5, 0x0, 0x0, 0x0, 0xDB, 0x0, 0x0, 0x1, 0xE6, 0x0, 0x0, 0x1, 0xED, 0x0, 0x0, 0xB, 0x5, 0x0, 0x0, 0x1, 0xEE, 0x0, 0x0, 0x1, 0xEF, 0x0, 0x0, 0x0, 0xDD, 0x0, 0x0, 0x1, 0xF0, 0x0, 0x0, 0x1, 0xF0, 0x0, 0x0, 0xA, 0x2D, 0x0, 0x0, 0x1, 0xF1, 0x0, 0x0, 0x1, 0xF5, 0x0, 0x0, 0xB, 0xD, 0x0, 0x0, 0x1, 0xF6, 0x0, 0x0, 0x1, 0xF7, 0x0, 0x0, 0x0, 0xDF, 0x0, 0x0, 0x1, 0xF8, 0x0, 0x0, 0x1, 0xF9, 0x0, 0x0, 0xB, 0x12, 0x0, 0x0, 0x1, 0xFA, 0x0, 0x0, 0x1, 0xFA, 0x0, 0x0, 0x8, 0xD3, 0x0, 0x0, 0x1, 0xFB, 0x0, 0x0, 0x1, 0xFB, 0x0, 0x0, 0x8, 0xEE, 0x0, 0x0, 0x1, 0xFC, 0x0, 0x0, 0x1, 0xFF, 0x0, 0x0, 0x9, 0x79, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x17, 0x0, 0x0, 0xB, 0x14, 0x0, 0x0, 0x2, 0x18, 0x0, 0x0, 0x2, 0x19, 0x0, 0x0, 0x9, 0x58, 0x0, 0x0, 0x2, 0x1A, 0x0, 0x0, 0x2, 0x1B, 0x0, 0x0, 0x9, 0x5C, 0x0, 0x0, 0x2, 0x1C, 0x0, 0x0, 0x2, 0x1D, 0x0, 0x0, 0x0, 0xE1, 0x0, 0x0, 0x2, 0x1E, 0x0, 0x0, 0x2, 0x1F, 0x0, 0x0, 0xB, 0x2C, 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x2, 0x25, 0x0, 0x0, 0x0, 0xE3, 0x0, 0x0, 0x2, 0x26, 0x0, 0x0, 0x2, 0x33, 0x0, 0x0, 0xB, 0x2E, 0x0, 0x0, 0x2, 0x34, 0x0, 0x0, 0x2, 0x74, 0x0, 0x0, 0x0, 0xE9, 0x0, 0x0, 0x2, 0x75, 0x0, 0x0, 0x2, 0x75, 0x0, 0x0, 0xB, 0x3C, 0x0, 0x0, 0x2, 0x76, 0x0, 0x0, 0x2, 0x98, 0x0, 0x0, 0x1, 0x2A, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0xB, 0x3D, 0x0, 0x0, 0x2, 0x9A, 0x0, 0x0, 0x2, 0x9B, 0x0, 0x0, 0x1, 0x4D, 0x0, 0x0, 0x2, 0x9C, 0x0, 0x0, 0x2, 0x9C, 0x0, 0x0, 0xB, 0x3E, 0x0, 0x0, 0x2, 0x9D, 0x0, 0x0, 0x2, 0xBB, 0x0, 0x0, 0x1, 0x4F, 0x0, 0x0, 0x2, 0xBC, 0x0, 0x0, 0x2, 0xBC, 0x0, 0x0, 0xA, 0x2E, 0x0, 0x0, 0x2, 0xBD, 0x0, 0x0, 0x3, 0x77, 0x0, 0x0, 0x1, 0x6E, 0x0, 0x0, 0x3, 0x7A, 0x0, 0x0, 0x3, 0x7A, 0x0, 0x0, 0xA, 0xE5, 0x0, 0x0, 0x3, 0x7B, 0x0, 0x0, 0x3, 0x7E, 0x0, 0x0, 0x2, 0x29, 0x0, 0x0, 0x3, 0x7F, 0x0, 0x0, 0x3, 0x7F, 0x0, 0x0, 0xB, 0x3F, 0x0, 0x0, 0x3, 0x84, 0x0, 0x0, 0x3, 0x85, 0x0, 0x0, 0x2, 0x2D, 0x0, 0x0, 0x3, 0x86, 0x0, 0x0, 0x3, 0x86, 0x0, 0x0, 0x9, 0xD5, 0x0, 0x0, 0x3, 0x87, 0x0, 0x0, 0x3, 0x87, 0x0, 0x0, 0x2, 0x2F, 0x0, 0x0, 0x3, 0x88, 0x0, 0x0, 0x3, 0x8A, 0x0, 0x0, 0x9, 0xD6, 0x0, 0x0, 0x3, 0x8C, 0x0, 0x0, 0x3, 0x8C, 0x0, 0x0, 0x9, 0xD9, 0x0, 0x0, 0x3, 0x8E, 0x0, 0x0, 0x3, 0x92, 0x0, 0x0, 0x9, 0xDA, 0x0, 0x0, 0x3, 0x93, 0x0, 0x0, 0x3, 0x94, 0x0, 0x0, 0x2, 0x30, 0x0, 0x0, 0x3, 0x95, 0x0, 0x0, 0x3, 0x97, 0x0, 0x0, 0x9, 0xDF, 0x0, 0x0, 0x3, 0x98, 0x0, 0x0, 0x3, 0x98, 0x0, 0x0, 0x2, 0x32, 0x0, 0x0, 0x3, 0x99, 0x0, 0x0, 0x3, 0x9A, 0x0, 0x0, 0x9, 0xE2, 0x0, 0x0, 0x3, 0x9B, 0x0, 0x0, 0x3, 0x9B, 0x0, 0x0, 0x2, 0x33, 0x0, 0x0, 0x3, 0x9C, 0x0, 0x0, 0x3, 0x9D, 0x0, 0x0, 0x9, 0xE4, 0x0, 0x0, 0x3, 0x9E, 0x0, 0x0, 0x3, 0x9E, 0x0, 0x0, 0x2, 0x34, 0x0, 0x0, 0x3, 0x9F, 0x0, 0x0, 0x3, 0x9F, 0x0, 0x0, 0x9, 0xE6, 0x0, 0x0, 0x3, 0xA0, 0x0, 0x0, 0x3, 0xA0, 0x0, 0x0, 0x2, 0x35, 0x0, 0x0, 0x3, 0xA1, 0x0, 0x0, 0x3, 0xA1, 0x0, 0x0, 0x9, 0xE7, 0x0, 0x0, 0x3, 0xA3, 0x0, 0x0, 0x3, 0xA3, 0x0, 0x0, 0x2, 0x36, 0x0, 0x0, 0x3, 0xA4, 0x0, 0x0, 0x3, 0xA5, 0x0, 0x0, 0x9, 0xE8, 0x0, 0x0, 0x3, 0xA6, 0x0, 0x0, 0x3, 0xA6, 0x0, 0x0, 0x2, 0x37, 0x0, 0x0, 0x3, 0xA7, 0x0, 0x0, 0x3, 0xA7, 0x0, 0x0, 0x9, 0xEA, 0x0, 0x0, 0x3, 0xA8, 0x0, 0x0, 0x3, 0xA9, 0x0, 0x0, 0x2, 0x38, 0x0, 0x0, 0x3, 0xAA, 0x0, 0x0, 0x3, 0xB0, 0x0, 0x0, 0x9, 0xEB, 0x0, 0x0, 0x3, 0xB1, 0x0, 0x0, 0x3, 0xB9, 0x0, 0x0, 0x2, 0x3A, 0x0, 0x0, 0x3, 0xBA, 0x0, 0x0, 0x3, 0xBA, 0x0, 0x0, 0x9, 0xF2, 0x0, 0x0, 0x3, 0xBB, 0x0, 0x0, 0x3, 0xBB, 0x0, 0x0, 0x2, 0x43, 0x0, 0x0, 0x3, 0xBC, 0x0, 0x0, 0x3, 0xBD, 0x0, 0x0, 0x9, 0xF4, 0x0, 0x0, 0x3, 0xBE, 0x0, 0x0, 0x3, 0xBE, 0x0, 0x0, 0x2, 0x44, 0x0, 0x0, 0x3, 0xBF, 0x0, 0x0, 0x3, 0xBF, 0x0, 0x0, 0x9, 0xF3, 0x0, 0x0, 0x3, 0xC0, 0x0, 0x0, 0x3, 0xC6, 0x0, 0x0, 0x2, 0x45, 0x0, 0x0, 0x3, 0xC7, 0x0, 0x0, 0x3, 0xC7, 0x0, 0x0, 0x9, 0xF6, 0x0, 0x0, 0x3, 0xC8, 0x0, 0x0, 0x3, 0xC9, 0x0, 0x0, 0x2, 0x4C, 0x0, 0x0, 0x3, 0xCA, 0x0, 0x0, 0x3, 0xCE, 0x0, 0x0, 0x9, 0xF7, 0x0, 0x0, 0x3, 0xCF, 0x0, 0x0, 0x3, 0xD2, 0x0, 0x0, 0x2, 0x4E, 0x0, 0x0, 0x3, 0xD3, 0x0, 0x0, 0x3, 0xD4, 0x0, 0x0, 0xB, 0x40, 0x0, 0x0, 0x3, 0xD5, 0x0, 0x0, 0x3, 0xE1, 0x0, 0x0, 0x2, 0x52, 0x0, 0x0, 0x3, 0xF0, 0x0, 0x0, 0x3, 0xF1, 0x0, 0x0, 0x2, 0x5F, 0x0, 0x0, 0x3, 0xF2, 0x0, 0x0, 0x3, 0xF4, 0x0, 0x0, 0xB, 0x42, 0x0, 0x0, 0x3, 0xF5, 0x0, 0x0, 0x3, 0xF6, 0x0, 0x0, 0x2, 0x61, 0x0, 0x0, 0x3, 0xF7, 0x0, 0x0, 0x3, 0xFA, 0x0, 0x0, 0xB, 0x45, 0x0, 0x0, 0x3, 0xFB, 0x0, 0x0, 0x3, 0xFF, 0x0, 0x0, 0x2, 0x63, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0xA, 0x33, 0x0, 0x0, 0x4, 0x1, 0x0, 0x0, 0x4, 0x1, 0x0, 0x0, 0x9, 0xFC, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x4, 0x2, 0x0, 0x0, 0x2, 0x68, 0x0, 0x0, 0x4, 0x3, 0x0, 0x0, 0x4, 0x3, 0x0, 0x0, 0x9, 0xFD, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x2, 0x69, 0x0, 0x0, 0x4, 0x5, 0x0, 0x0, 0x4, 0x8, 0x0, 0x0, 0x9, 0xFE, 0x0, 0x0, 0x4, 0x9, 0x0, 0x0, 0x4, 0xB, 0x0, 0x0, 0x2, 0x6A, 0x0, 0x0, 0x4, 0xC, 0x0, 0x0, 0x4, 0xC, 0x0, 0x0, 0xA, 0x3, 0x0, 0x0, 0x4, 0xD, 0x0, 0x0, 0x4, 0xD, 0x0, 0x0, 0xA, 0x34, 0x0, 0x0, 0x4, 0xE, 0x0, 0x0, 0x4, 0xE, 0x0, 0x0, 0xA, 0x4, 0x0, 0x0, 0x4, 0xF, 0x0, 0x0, 0x4, 0xF, 0x0, 0x0, 0x2, 0x6D, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0xA, 0x5, 0x0, 0x0, 0x4, 0x11, 0x0, 0x0, 0x4, 0x11, 0x0, 0x0, 0x2, 0x6E, 0x0, 0x0, 0x4, 0x12, 0x0, 0x0, 0x4, 0x13, 0x0, 0x0, 0xA, 0x6, 0x0, 0x0, 0x4, 0x14, 0x0, 0x0, 0x4, 0x14, 0x0, 0x0, 0x2, 0x6F, 0x0, 0x0, 0x4, 0x15, 0x0, 0x0, 0x4, 0x15, 0x0, 0x0, 0xA, 0x8, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0, 0x4, 0x18, 0x0, 0x0, 0x2, 0x70, 0x0, 0x0, 0x4, 0x19, 0x0, 0x0, 0x4, 0x19, 0x0, 0x0, 0xA, 0x9, 0x0, 0x0, 0x4, 0x1A, 0x0, 0x0, 0x4, 0x1A, 0x0, 0x0, 0xA, 0x2, 0x0, 0x0, 0x4, 0x1B, 0x0, 0x0, 0x4, 0x1B, 0x0, 0x0, 0x2, 0x73, 0x0, 0x0, 0x4, 0x1C, 0x0, 0x0, 0x4, 0x22, 0x0, 0x0, 0xA, 0xA, 0x0, 0x0, 0x4, 0x23, 0x0, 0x0, 0x4, 0x24, 0x0, 0x0, 0x2, 0x74, 0x0, 0x0, 0x4, 0x25, 0x0, 0x0, 0x4, 0x25, 0x0, 0x0, 0xA, 0x11, 0x0, 0x0, 0x4, 0x26, 0x0, 0x0, 0x4, 0x2F, 0x0, 0x0, 0x2, 0x76, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0xA, 0x12, 0x0, 0x0, 0x4, 0x31, 0x0, 0x0, 0x4, 0x34, 0x0, 0x0, 0x2, 0x80, 0x0, 0x0, 0x4, 0x35, 0x0, 0x0, 0x4, 0x35, 0x0, 0x0, 0xA, 0x13, 0x0, 0x0, 0x4, 0x36, 0x0, 0x0, 0x4, 0x38, 0x0, 0x0, 0x2, 0x84, 0x0, 0x0, 0x4, 0x39, 0x0, 0x0, 0x4, 0x39, 0x0, 0x0, 0xA, 0x14, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x4, 0x3D, 0x0, 0x0, 0x2, 0x87, 0x0, 0x0, 0x4, 0x3E, 0x0, 0x0, 0x4, 0x3E, 0x0, 0x0, 0xA, 0x15, 0x0, 0x0, 0x4, 0x3F, 0x0, 0x0, 0x4, 0x3F, 0x0, 0x0, 0x2, 0x8B, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x4, 0x41, 0x0, 0x0, 0xA, 0x16, 0x0, 0x0, 0x4, 0x42, 0x0, 0x0, 0x4, 0x42, 0x0, 0x0, 0x2, 0x8C, 0x0, 0x0, 0x4, 0x43, 0x0, 0x0, 0x4, 0x43, 0x0, 0x0, 0xA, 0x18, 0x0, 0x0, 0x4, 0x44, 0x0, 0x0, 0x4, 0x44, 0x0, 0x0, 0x2, 0x8D, 0x0, 0x0, 0x4, 0x45, 0x0, 0x0, 0x4, 0x45, 0x0, 0x0, 0xA, 0x19, 0x0, 0x0, 0x4, 0x46, 0x0, 0x0, 0x4, 0x4F, 0x0, 0x0, 0x2, 0x8E, 0x0, 0x0, 0x4, 0x50, 0x0, 0x0, 0x4, 0x50, 0x0, 0x0, 0xA, 0x35, 0x0, 0x0, 0x4, 0x51, 0x0, 0x0, 0x4, 0x51, 0x0, 0x0, 0xA, 0x1A, 0x0, 0x0, 0x4, 0x52, 0x0, 0x0, 0x4, 0x52, 0x0, 0x0, 0x2, 0x98, 0x0, 0x0, 0x4, 0x53, 0x0, 0x0, 0x4, 0x53, 0x0, 0x0, 0xA, 0x1B, 0x0, 0x0, 0x4, 0x54, 0x0, 0x0, 0x4, 0x54, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0x4, 0x55, 0x0, 0x0, 0x4, 0x58, 0x0, 0x0, 0xA, 0x1C, 0x0, 0x0, 0x4, 0x59, 0x0, 0x0, 0x4, 0x5B, 0x0, 0x0, 0x2, 0x9A, 0x0, 0x0, 0x4, 0x5C, 0x0, 0x0, 0x4, 0x5C, 0x0, 0x0, 0xA, 0x20, 0x0, 0x0, 0x4, 0x5D, 0x0, 0x0, 0x4, 0x5D, 0x0, 0x0, 0xA, 0x36, 0x0, 0x0, 0x4, 0x5E, 0x0, 0x0, 0x4, 0x5E, 0x0, 0x0, 0xA, 0x21, 0x0, 0x0, 0x4, 0x5F, 0x0, 0x0, 0x4, 0x61, 0x0, 0x0, 0x2, 0x9D, 0x0, 0x0, 0x4, 0x62, 0x0, 0x0, 0x4, 0x62, 0x0, 0x0, 0xA, 0xD1, 0x0, 0x0, 0x4, 0x63, 0x0, 0x0, 0x4, 0x6F, 0x0, 0x0, 0x2, 0xA0, 0x0, 0x0, 0x4, 0x70, 0x0, 0x0, 0x4, 0x71, 0x0, 0x0, 0xA, 0x37, 0x0, 0x0, 0x4, 0x72, 0x0, 0x0, 0x4, 0x75, 0x0, 0x0, 0x2, 0xAD, 0x0, 0x0, 0x4, 0x76, 0x0, 0x0, 0x4, 0x77, 0x0, 0x0, 0xA, 0x39, 0x0, 0x0, 0x4, 0x78, 0x0, 0x0, 0x4, 0x78, 0x0, 0x0, 0xA, 0x3C, 0x0, 0x0, 0x4, 0x79, 0x0, 0x0, 0x4, 0x79, 0x0, 0x0, 0xA, 0x3B, 0x0, 0x0, 0x4, 0x7A, 0x0, 0x0, 0x4, 0x8B, 0x0, 0x0, 0x2, 0xB1, 0x0, 0x0, 0x4, 0x8C, 0x0, 0x0, 0x4, 0x8C, 0x0, 0x0, 0xA, 0xD0, 0x0, 0x0, 0x4, 0x8D, 0x0, 0x0, 0x4, 0x91, 0x0, 0x0, 0x2, 0xC3, 0x0, 0x0, 0x4, 0x92, 0x0, 0x0, 0x4, 0x93, 0x0, 0x0, 0xA, 0xD2, 0x0, 0x0, 0x4, 0x94, 0x0, 0x0, 0x4, 0x97, 0x0, 0x0, 0x2, 0xC8, 0x0, 0x0, 0x4, 0x98, 0x0, 0x0, 0x4, 0x99, 0x0, 0x0, 0xA, 0x3D, 0x0, 0x0, 0x4, 0x9A, 0x0, 0x0, 0x4, 0x9D, 0x0, 0x0, 0x2, 0xCC, 0x0, 0x0, 0x4, 0x9E, 0x0, 0x0, 0x4, 0x9F, 0x0, 0x0, 0xA, 0xD4, 0x0, 0x0, 0x4, 0xA0, 0x0, 0x0, 0x4, 0xA9, 0x0, 0x0, 0x2, 0xD0, 0x0, 0x0, 0x4, 0xAA, 0x0, 0x0, 0x4, 0xAB, 0x0, 0x0, 0xA, 0x3F, 0x0, 0x0, 0x4, 0xAC, 0x0, 0x0, 0x4, 0xAD, 0x0, 0x0, 0xA, 0xC7, 0x0, 0x0, 0x4, 0xAE, 0x0, 0x0, 0x4, 0xAF, 0x0, 0x0, 0xA, 0x41, 0x0, 0x0, 0x4, 0xB0, 0x0, 0x0, 0x4, 0xB1, 0x0, 0x0, 0xA, 0xD6, 0x0, 0x0, 0x4, 0xB2, 0x0, 0x0, 0x4, 0xBA, 0x0, 0x0, 0x2, 0xDA, 0x0, 0x0, 0x4, 0xBB, 0x0, 0x0, 0x4, 0xBB, 0x0, 0x0, 0xA, 0xCF, 0x0, 0x0, 0x4, 0xBC, 0x0, 0x0, 0x4, 0xBD, 0x0, 0x0, 0x2, 0xE3, 0x0, 0x0, 0x4, 0xBE, 0x0, 0x0, 0x4, 0xBF, 0x0, 0x0, 0xA, 0xCD, 0x0, 0x0, 0x4, 0xC0, 0x0, 0x0, 0x4, 0xC2, 0x0, 0x0, 0xA, 0x43, 0x0, 0x0, 0x4, 0xC3, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x2, 0xE5, 0x0, 0x0, 0x4, 0xCB, 0x0, 0x0, 0x4, 0xCC, 0x0, 0x0, 0xA, 0xC9, 0x0, 0x0, 0x4, 0xCD, 0x0, 0x0, 0x4, 0xCE, 0x0, 0x0, 0x2, 0xED, 0x0, 0x0, 0x4, 0xCF, 0x0, 0x0, 0x4, 0xD7, 0x0, 0x0, 0xA, 0x46, 0x0, 0x0, 0x4, 0xD8, 0x0, 0x0, 0x4, 0xD8, 0x0, 0x0, 0x2, 0xEF, 0x0, 0x0, 0x4, 0xD9, 0x0, 0x0, 0x4, 0xD9, 0x0, 0x0, 0xA, 0x50, 0x0, 0x0, 0x4, 0xDA, 0x0, 0x0, 0x4, 0xDA, 0x0, 0x0, 0xA, 0x4F, 0x0, 0x0, 0x4, 0xDB, 0x0, 0x0, 0x4, 0xDF, 0x0, 0x0, 0xA, 0x51, 0x0, 0x0, 0x4, 0xE0, 0x0, 0x0, 0x4, 0xE1, 0x0, 0x0, 0x2, 0xF0, 0x0, 0x0, 0x4, 0xE2, 0x0, 0x0, 0x4, 0xE9, 0x0, 0x0, 0xA, 0x56, 0x0, 0x0, 0x4, 0xEA, 0x0, 0x0, 0x4, 0xF5, 0x0, 0x0, 0xA, 0x5F, 0x0, 0x0, 0x4, 0xF6, 0x0, 0x0, 0x4, 0xF7, 0x0, 0x0, 0xA, 0xCB, 0x0, 0x0, 0x4, 0xF8, 0x0, 0x0, 0x4, 0xF9, 0x0, 0x0, 0xA, 0x6B, 0x0, 0x0, 0x4, 0xFA, 0x0, 0x0, 0x4, 0xFD, 0x0, 0x0, 0x2, 0xF2, 0x0, 0x0, 0x4, 0xFE, 0x0, 0x0, 0x4, 0xFF, 0x0, 0x0, 0xA, 0xD8, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x2, 0xF6, 0x0, 0x0, 0x5, 0x1, 0x0, 0x0, 0x5, 0x1, 0x0, 0x0, 0xA, 0x6D, 0x0, 0x0, 0x5, 0x2, 0x0, 0x0, 0x5, 0x10, 0x0, 0x0, 0x2, 0xF7, 0x0, 0x0, 0x5, 0x11, 0x0, 0x0, 0x5, 0x11, 0x0, 0x0, 0xA, 0xDA, 0x0, 0x0, 0x5, 0x12, 0x0, 0x0, 0x5, 0x19, 0x0, 0x0, 0x3, 0x6, 0x0, 0x0, 0x5, 0x1A, 0x0, 0x0, 0x5, 0x1D, 0x0, 0x0, 0xB, 0x49, 0x0, 0x0, 0x5, 0x1E, 0x0, 0x0, 0x5, 0x2F, 0x0, 0x0, 0x3, 0xE, 0x0, 0x0, 0x1A, 0xB0, 0x0, 0x0, 0x1A, 0xBE, 0x0, 0x0, 0x3, 0x20, 0x0, 0x0, 0x1D, 0x0, 0x0, 0x0, 0x1D, 0xF5, 0x0, 0x0, 0x3, 0x2F, 0x0, 0x0, 0x1D, 0xFC, 0x0, 0x0, 0x1D, 0xFF, 0x0, 0x0, 0x4, 0x25, 0x0, 0x0, 0x1E, 0x0, 0x0, 0x0, 0x1E, 0x1, 0x0, 0x0, 0xA, 0x31, 0x0, 0x0, 0x1E, 0x2, 0x0, 0x0, 0x1E, 0x27, 0x0, 0x0, 0xB, 0x4D, 0x0, 0x0, 0x1E, 0x28, 0x0, 0x0, 0x1E, 0x29, 0x0, 0x0, 0x4, 0x29, 0x0, 0x0, 0x1E, 0x2A, 0x0, 0x0, 0x1E, 0x2B, 0x0, 0x0, 0xB, 0x73, 0x0, 0x0, 0x1E, 0x2C, 0x0, 0x0, 0x1E, 0x2F, 0x0, 0x0, 0x4, 0x2B, 0x0, 0x0, 0x1E, 0x30, 0x0, 0x0, 0x1E, 0x3D, 0x0, 0x0, 0xB, 0x75, 0x0, 0x0, 0x1E, 0x3E, 0x0, 0x0, 0x1E, 0x3F, 0x0, 0x0, 0xA, 0x2F, 0x0, 0x0, 0x1E, 0x40, 0x0, 0x0, 0x1E, 0x7F, 0x0, 0x0, 0xB, 0x83, 0x0, 0x0, 0x1E, 0x80, 0x0, 0x0, 0x1E, 0x85, 0x0, 0x0, 0xA, 0x22, 0x0, 0x0, 0x1E, 0x86, 0x0, 0x0, 0x1E, 0x9A, 0x0, 0x0, 0xB, 0xC3, 0x0, 0x0, 0x1E, 0x9B, 0x0, 0x0, 0x1E, 0x9F, 0x0, 0x0, 0x4, 0x2F, 0x0, 0x0, 0x1E, 0xA0, 0x0, 0x0, 0x1E, 0xF1, 0x0, 0x0, 0xA, 0x6E, 0x0, 0x0, 0x1E, 0xF2, 0x0, 0x0, 0x1E, 0xF3, 0x0, 0x0, 0xA, 0x28, 0x0, 0x0, 0x1E, 0xF4, 0x0, 0x0, 0x1E, 0xF9, 0x0, 0x0, 0xA, 0xC0, 0x0, 0x0, 0x1E, 0xFA, 0x0, 0x0, 0x1E, 0xFF, 0x0, 0x0, 0x4, 0x34, 0x0, 0x0, 0x1F, 0x0, 0x0, 0x0, 0x1F, 0x15, 0x0, 0x0, 0xB, 0xD8, 0x0, 0x0, 0x1F, 0x18, 0x0, 0x0, 0x1F, 0x1D, 0x0, 0x0, 0xB, 0xEE, 0x0, 0x0, 0x1F, 0x20, 0x0, 0x0, 0x1F, 0x45, 0x0, 0x0, 0xB, 0xF4, 0x0, 0x0, 0x1F, 0x48, 0x0, 0x0, 0x1F, 0x4D, 0x0, 0x0, 0xC, 0x1A, 0x0, 0x0, 0x1F, 0x50, 0x0, 0x0, 0x1F, 0x57, 0x0, 0x0, 0xC, 0x20, 0x0, 0x0, 0x1F, 0x59, 0x0, 0x0, 0x1F, 0x59, 0x0, 0x0, 0xC, 0x28, 0x0, 0x0, 0x1F, 0x5B, 0x0, 0x0, 0x1F, 0x5B, 0x0, 0x0, 0xC, 0x29, 0x0, 0x0, 0x1F, 0x5D, 0x0, 0x0, 0x1F, 0x5D, 0x0, 0x0, 0xC, 0x2A, 0x0, 0x0, 0x1F, 0x5F, 0x0, 0x0, 0x1F, 0x7D, 0x0, 0x0, 0xC, 0x2B, 0x0, 0x0, 0x1F, 0x80, 0x0, 0x0, 0x1F, 0xB4, 0x0, 0x0, 0xC, 0x4A, 0x0, 0x0, 0x1F, 0xB6, 0x0, 0x0, 0x1F, 0xBC, 0x0, 0x0, 0xC, 0x7F, 0x0, 0x0, 0x1F, 0xBD, 0x0, 0x0, 0x1F, 0xC1, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x1F, 0xC2, 0x0, 0x0, 0x1F, 0xC4, 0x0, 0x0, 0xC, 0x86, 0x0, 0x0, 0x1F, 0xC6, 0x0, 0x0, 0x1F, 0xCC, 0x0, 0x0, 0xC, 0x89, 0x0, 0x0, 0x1F, 0xCD, 0x0, 0x0, 0x1F, 0xCF, 0x0, 0x0, 0x4, 0x3F, 0x0, 0x0, 0x1F, 0xD0, 0x0, 0x0, 0x1F, 0xD3, 0x0, 0x0, 0xC, 0x90, 0x0, 0x0, 0x1F, 0xD6, 0x0, 0x0, 0x1F, 0xDB, 0x0, 0x0, 0xC, 0x94, 0x0, 0x0, 0x1F, 0xDD, 0x0, 0x0, 0x1F, 0xDF, 0x0, 0x0, 0x4, 0x42, 0x0, 0x0, 0x1F, 0xE0, 0x0, 0x0, 0x1F, 0xEC, 0x0, 0x0, 0xC, 0x9A, 0x0, 0x0, 0x1F, 0xED, 0x0, 0x0, 0x1F, 0xEF, 0x0, 0x0, 0x4, 0x45, 0x0, 0x0, 0x1F, 0xF2, 0x0, 0x0, 0x1F, 0xF4, 0x0, 0x0, 0xC, 0xA7, 0x0, 0x0, 0x1F, 0xF6, 0x0, 0x0, 0x1F, 0xFC, 0x0, 0x0, 0xC, 0xAA, 0x0, 0x0, 0x1F, 0xFD, 0x0, 0x0, 0x1F, 0xFE, 0x0, 0x0, 0x4, 0x48, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x9, 0x0, 0x0, 0x4, 0x4A, 0x0, 0x0, 0x20, 0xA, 0x0, 0x0, 0x20, 0x14, 0x0, 0x0, 0x4, 0x55, 0x0, 0x0, 0x20, 0x15, 0x0, 0x0, 0x20, 0x15, 0x0, 0x0, 0xA, 0xDC, 0x0, 0x0, 0x20, 0x16, 0x0, 0x0, 0x20, 0x27, 0x0, 0x0, 0x4, 0x60, 0x0, 0x0, 0x20, 0x2F, 0x0, 0x0, 0x20, 0x2F, 0x0, 0x0, 0xC, 0xB1, 0x0, 0x0, 0x20, 0x30, 0x0, 0x0, 0x20, 0x31, 0x0, 0x0, 0x4, 0x72, 0x0, 0x0, 0x20, 0x32, 0x0, 0x0, 0x20, 0x33, 0x0, 0x0, 0xA, 0x2A, 0x0, 0x0, 0x20, 0x34, 0x0, 0x0, 0x20, 0x3B, 0x0, 0x0, 0x4, 0x74, 0x0, 0x0, 0x20, 0x3C, 0x0, 0x0, 0x20, 0x3C, 0x0, 0x0, 0xA, 0x2C, 0x0, 0x0, 0x20, 0x3D, 0x0, 0x0, 0x20, 0x46, 0x0, 0x0, 0x4, 0x7C, 0x0, 0x0, 0x20, 0x47, 0x0, 0x0, 0x20, 0x49, 0x0, 0x0, 0xC, 0xB2, 0x0, 0x0, 0x20, 0x4A, 0x0, 0x0, 0x20, 0x5E, 0x0, 0x0, 0x4, 0x86, 0x0, 0x0, 0x20, 0x5F, 0x0, 0x0, 0x20, 0x5F, 0x0, 0x0, 0xC, 0xB5, 0x0, 0x0, 0x20, 0x70, 0x0, 0x0, 0x20, 0x71, 0x0, 0x0, 0x4, 0x9B, 0x0, 0x0, 0x20, 0x74, 0x0, 0x0, 0x20, 0x8E, 0x0, 0x0, 0x4, 0x9D, 0x0, 0x0, 0x20, 0x90, 0x0, 0x0, 0x20, 0x9C, 0x0, 0x0, 0x4, 0xB8, 0x0, 0x0, 0x20, 0xA0, 0x0, 0x0, 0x20, 0xA2, 0x0, 0x0, 0x4, 0xC5, 0x0, 0x0, 0x20, 0xA3, 0x0, 0x0, 0x20, 0xA3, 0x0, 0x0, 0xA, 0xDB, 0x0, 0x0, 0x20, 0xA4, 0x0, 0x0, 0x20, 0xAA, 0x0, 0x0, 0x4, 0xC8, 0x0, 0x0, 0x20, 0xAB, 0x0, 0x0, 0x20, 0xAB, 0x0, 0x0, 0xA, 0xC6, 0x0, 0x0, 0x20, 0xAC, 0x0, 0x0, 0x20, 0xBE, 0x0, 0x0, 0x4, 0xCF, 0x0, 0x0, 0x20, 0xDB, 0x0, 0x0, 0x20, 0xDC, 0x0, 0x0, 0x4, 0xE2, 0x0, 0x0, 0x20, 0xE8, 0x0, 0x0, 0x20, 0xE8, 0x0, 0x0, 0x4, 0xE4, 0x0, 0x0, 0x20, 0xF0, 0x0, 0x0, 0x20, 0xF0, 0x0, 0x0, 0x4, 0xE5, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x21, 0x1, 0x0, 0x0, 0x4, 0xE6, 0x0, 0x0, 0x21, 0x3, 0x0, 0x0, 0x21, 0x3, 0x0, 0x0, 0x4, 0xE8, 0x0, 0x0, 0x21, 0x5, 0x0, 0x0, 0x21, 0x6, 0x0, 0x0, 0x4, 0xE9, 0x0, 0x0, 0x21, 0x9, 0x0, 0x0, 0x21, 0x9, 0x0, 0x0, 0x4, 0xEB, 0x0, 0x0, 0x21, 0x13, 0x0, 0x0, 0x21, 0x13, 0x0, 0x0, 0x4, 0xEC, 0x0, 0x0, 0x21, 0x16, 0x0, 0x0, 0x21, 0x17, 0x0, 0x0, 0x4, 0xED, 0x0, 0x0, 0x21, 0x1E, 0x0, 0x0, 0x21, 0x23, 0x0, 0x0, 0x4, 0xEF, 0x0, 0x0, 0x21, 0x25, 0x0, 0x0, 0x21, 0x25, 0x0, 0x0, 0x4, 0xF5, 0x0, 0x0, 0x21, 0x26, 0x0, 0x0, 0x21, 0x26, 0x0, 0x0, 0x2, 0x39, 0x0, 0x0, 0x21, 0x2A, 0x0, 0x0, 0x21, 0x2B, 0x0, 0x0, 0x4, 0xF6, 0x0, 0x0, 0x21, 0x2E, 0x0, 0x0, 0x21, 0x2E, 0x0, 0x0, 0x4, 0xF8, 0x0, 0x0, 0x21, 0x32, 0x0, 0x0, 0x21, 0x32, 0x0, 0x0, 0x4, 0xF9, 0x0, 0x0, 0x21, 0x3B, 0x0, 0x0, 0x21, 0x3B, 0x0, 0x0, 0x4, 0xFA, 0x0, 0x0, 0x21, 0x4D, 0x0, 0x0, 0x21, 0x4D, 0x0, 0x0, 0x4, 0xFB, 0x0, 0x0, 0x21, 0x4F, 0x0, 0x0, 0x21, 0x89, 0x0, 0x0, 0x4, 0xFC, 0x0, 0x0, 0x22, 0x2, 0x0, 0x0, 0x22, 0x2, 0x0, 0x0, 0x5, 0x37, 0x0, 0x0, 0x22, 0x6, 0x0, 0x0, 0x22, 0x6, 0x0, 0x0, 0x2, 0x31, 0x0, 0x0, 0x22, 0xF, 0x0, 0x0, 0x22, 0xF, 0x0, 0x0, 0x5, 0x38, 0x0, 0x0, 0x22, 0x11, 0x0, 0x0, 0x22, 0x12, 0x0, 0x0, 0x5, 0x39, 0x0, 0x0, 0x22, 0x1A, 0x0, 0x0, 0x22, 0x1A, 0x0, 0x0, 0x5, 0x3B, 0x0, 0x0, 0x22, 0x1E, 0x0, 0x0, 0x22, 0x1E, 0x0, 0x0, 0x5, 0x3C, 0x0, 0x0, 0x22, 0x2B, 0x0, 0x0, 0x22, 0x2B, 0x0, 0x0, 0x5, 0x3D, 0x0, 0x0, 0x22, 0x48, 0x0, 0x0, 0x22, 0x48, 0x0, 0x0, 0x5, 0x3E, 0x0, 0x0, 0x22, 0x60, 0x0, 0x0, 0x22, 0x60, 0x0, 0x0, 0x5, 0x3F, 0x0, 0x0, 0x22, 0x64, 0x0, 0x0, 0x22, 0x65, 0x0, 0x0, 0x5, 0x40, 0x0, 0x0, 0x24, 0x23, 0x0, 0x0, 0x24, 0x23, 0x0, 0x0, 0x5, 0x42, 0x0, 0x0, 0x25, 0xCA, 0x0, 0x0, 0x25, 0xCA, 0x0, 0x0, 0x5, 0x43, 0x0, 0x0, 0x27, 0xE6, 0x0, 0x0, 0x27, 0xEF, 0x0, 0x0, 0x5, 0x44, 0x0, 0x0, 0x2B, 0x4E, 0x0, 0x0, 0x2B, 0x4F, 0x0, 0x0, 0x5, 0x4E, 0x0, 0x0, 0x2B, 0x5A, 0x0, 0x0, 0x2B, 0x5F, 0x0, 0x0, 0x5, 0x50, 0x0, 0x0, 0x2C, 0x60, 0x0, 0x0, 0x2C, 0x7F, 0x0, 0x0, 0x5, 0x56, 0x0, 0x0, 0x2D, 0xE0, 0x0, 0x0, 0x2E, 0x42, 0x0, 0x0, 0x5, 0x76, 0x0, 0x0, 0xA6, 0x40, 0x0, 0x0, 0xA6, 0x9D, 0x0, 0x0, 0x5, 0xD9, 0x0, 0x0, 0xA6, 0x9F, 0x0, 0x0, 0xA6, 0x9F, 0x0, 0x0, 0x6, 0x37, 0x0, 0x0, 0xA7, 0x0, 0x0, 0x0, 0xA7, 0x8E, 0x0, 0x0, 0x6, 0x38, 0x0, 0x0, 0xA7, 0x8F, 0x0, 0x0, 0xA7, 0x8F, 0x0, 0x0, 0xC, 0xB6, 0x0, 0x0, 0xA7, 0x90, 0x0, 0x0, 0xA7, 0xAD, 0x0, 0x0, 0x6, 0xC7, 0x0, 0x0, 0xA7, 0xB0, 0x0, 0x0, 0xA7, 0xB1, 0x0, 0x0, 0x6, 0xE5, 0x0, 0x0, 0xA7, 0xF7, 0x0, 0x0, 0xA7, 0xFF, 0x0, 0x0, 0x6, 0xE7, 0x0, 0x0, 0xA9, 0x2E, 0x0, 0x0, 0xA9, 0x2E, 0x0, 0x0, 0x6, 0xF0, 0x0, 0x0, 0xAB, 0x30, 0x0, 0x0, 0xAB, 0x5F, 0x0, 0x0, 0x6, 0xF1, 0x0, 0x0, 0xAB, 0x64, 0x0, 0x0, 0xAB, 0x65, 0x0, 0x0, 0x7, 0x21, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x0, 0xEE, 0x2, 0x0, 0x0, 0x7, 0x23, 0x0, 0x0, 0xF6, 0xC3, 0x0, 0x0, 0xF6, 0xC3, 0x0, 0x0, 0x7, 0x25, 0x0, 0x0, 0xFB, 0x0, 0x0, 0x0, 0xFB, 0x6, 0x0, 0x0, 0x7, 0x26, 0x0, 0x0, 0xFE, 0x20, 0x0, 0x0, 0xFE, 0x2D, 0x0, 0x0, 0x7, 0x2D, 0x0, 0x0, 0xFE, 0xFF, 0x0, 0x0, 0xFE, 0xFF, 0x0, 0x0, 0x7, 0x3B, 0x0, 0x0, 0xFF, 0xFC, 0x0, 0x0, 0xFF, 0xFD, 0x0, 0x0, 0x7, 0x3C, 0x0, 0x1, 0xF1, 0x6A, 0x0, 0x1, 0xF1, 0x6B, 0x0, 0x0, 0x7, 0x3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, 0x8E, 0x0, 0x0, 0x0, 0xBA, 0x0, 0x0, 0x1, 0x29, 0x0, 0x0, 0x1, 0xA5, 0x0, 0x0, 0x2, 0x4B, 0x0, 0x0, 0x2, 0xEE, 0x0, 0x0, 0x3, 0x9, 0x0, 0x0, 0x3, 0x51, 0x0, 0x0, 0x3, 0x9B, 0x0, 0x0, 0x3, 0xE0, 0x0, 0x0, 0x4, 0x11, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x4, 0x54, 0x0, 0x0, 0x4, 0x77, 0x0, 0x0, 0x4, 0x96, 0x0, 0x0, 0x4, 0xFA, 0x0, 0x0, 0x5, 0x1F, 0x0, 0x0, 0x5, 0x73, 0x0, 0x0, 0x5, 0xE2, 0x0, 0x0, 0x6, 0x21, 0x0, 0x0, 0x6, 0x7F, 0x0, 0x0, 0x6, 0xEE, 0x0, 0x0, 0x7, 0x15, 0x0, 0x0, 0x7, 0x9F, 0x0, 0x0, 0x8, 0xD, 0x0, 0x0, 0x8, 0x25, 0x0, 0x0, 0x8, 0x3D, 0x0, 0x0, 0x8, 0x65, 0x0, 0x0, 0x8, 0x8D, 0x0, 0x0, 0x8, 0xB1, 0x0, 0x0, 0x9, 0x19, 0x0, 0x0, 0x9, 0xE8, 0x0, 0x0, 0xA, 0x24, 0x0, 0x0, 0xA, 0x8E, 0x0, 0x0, 0xA, 0xF2, 0x0, 0x0, 0xB, 0x41, 0x0, 0x0, 0xB, 0x6F, 0x0, 0x0, 0xB, 0x9B, 0x0, 0x0, 0xC, 0x8, 0x0, 0x0, 0xC, 0x37, 0x0, 0x0, 0xC, 0x52, 0x0, 0x0, 0xC, 0x8A, 0x0, 0x0, 0xC, 0xC5, 0x0, 0x0, 0xC, 0xE2, 0x0, 0x0, 0xD, 0x25, 0x0, 0x0, 0xD, 0x54, 0x0, 0x0, 0xD, 0xBC, 0x0, 0x0, 0xE, 0x6, 0x0, 0x0, 0xE, 0x7A, 0x0, 0x0, 0xE, 0xD3, 0x0, 0x0, 0xF, 0x47, 0x0, 0x0, 0xF, 0x6D, 0x0, 0x0, 0xF, 0xAB, 0x0, 0x0, 0xF, 0xD6, 0x0, 0x0, 0x10, 0x15, 0x0, 0x0, 0x10, 0x58, 0x0, 0x0, 0x10, 0x89, 0x0, 0x0, 0x10, 0xB4, 0x0, 0x0, 0x10, 0xD8, 0x0, 0x0, 0x10, 0xF6, 0x0, 0x0, 0x11, 0x1A, 0x0, 0x0, 0x11, 0x43, 0x0, 0x0, 0x11, 0x5B, 0x0, 0x0, 0x11, 0x79, 0x0, 0x0, 0x11, 0xEB, 0x0, 0x0, 0x12, 0x43, 0x0, 0x0, 0x12, 0x9A, 0x0, 0x0, 0x12, 0xF4, 0x0, 0x0, 0x13, 0x58, 0x0, 0x0, 0x13, 0x9A, 0x0, 0x0, 0x14, 0x11, 0x0, 0x0, 0x14, 0x50, 0x0, 0x0, 0x14, 0x86, 0x0, 0x0, 0x14, 0xCE, 0x0, 0x0, 0x15, 0x9, 0x0, 0x0, 0x15, 0x24, 0x0, 0x0, 0x15, 0x84, 0x0, 0x0, 0x15, 0xC3, 0x0, 0x0, 0x16, 0x1F, 0x0, 0x0, 0x16, 0x78, 0x0, 0x0, 0x16, 0xD3, 0x0, 0x0, 0x17, 0x8, 0x0, 0x0, 0x17, 0x74, 0x0, 0x0, 0x17, 0xB8, 0x0, 0x0, 0x17, 0xF5, 0x0, 0x0, 0x18, 0x1C, 0x0, 0x0, 0x18, 0x57, 0x0, 0x0, 0x18, 0x97, 0x0, 0x0, 0x18, 0xDD, 0x0, 0x0, 0x19, 0x8, 0x0, 0x0, 0x19, 0x5A, 0x0, 0x0, 0x19, 0x75, 0x0, 0x0, 0x19, 0xC6, 0x0, 0x0, 0x1A, 0x11, 0x0, 0x0, 0x1A, 0x4B, 0x0, 0x0, 0x1A, 0xB2, 0x0, 0x0, 0x1B, 0x12, 0x0, 0x0, 0x1B, 0x92, 0x0, 0x0, 0x1B, 0xE7, 0x0, 0x0, 0x1C, 0xF, 0x0, 0x0, 0x1C, 0xBE, 0x0, 0x0, 0x1D, 0xA, 0x0, 0x0, 0x1D, 0xBE, 0x0, 0x0, 0x1E, 0x29, 0x0, 0x0, 0x1E, 0x41, 0x0, 0x0, 0x1E, 0x61, 0x0, 0x0, 0x1F, 0x25, 0x0, 0x0, 0x1F, 0x3F, 0x0, 0x0, 0x1F, 0x82, 0x0, 0x0, 0x1F, 0xC0, 0x0, 0x0, 0x20, 0x9, 0x0, 0x0, 0x20, 0x70, 0x0, 0x0, 0x20, 0x8E, 0x0, 0x0, 0x20, 0xCF, 0x0, 0x0, 0x20, 0xFA, 0x0, 0x0, 0x21, 0x22, 0x0, 0x0, 0x21, 0x56, 0x0, 0x0, 0x21, 0x7A, 0x0, 0x0, 0x21, 0xCB, 0x0, 0x0, 0x21, 0xE3, 0x0, 0x0, 0x22, 0x5, 0x0, 0x0, 0x22, 0x27, 0x0, 0x0, 0x22, 0x49, 0x0, 0x0, 0x22, 0xB1, 0x0, 0x0, 0x23, 0x4, 0x0, 0x0, 0x23, 0x47, 0x0, 0x0, 0x23, 0xD4, 0x0, 0x0, 0x24, 0x20, 0x0, 0x0, 0x24, 0x9D, 0x0, 0x0, 0x25, 0x4E, 0x0, 0x0, 0x25, 0xD5, 0x0, 0x0, 0x26, 0x28, 0x0, 0x0, 0x26, 0xAF, 0x0, 0x0, 0x27, 0x8, 0x0, 0x0, 0x27, 0x71, 0x0, 0x0, 0x27, 0xC2, 0x0, 0x0, 0x27, 0xDD, 0x0, 0x0, 0x28, 0x16, 0x0, 0x0, 0x28, 0x49, 0x0, 0x0, 0x28, 0x77, 0x0, 0x0, 0x28, 0xBF, 0x0, 0x0, 0x29, 0x15, 0x0, 0x0, 0x29, 0x87, 0x0, 0x0, 0x2A, 0x33, 0x0, 0x0, 0x2A, 0x61, 0x0, 0x0, 0x2A, 0x79, 0x0, 0x0, 0x2A, 0xFF, 0x0, 0x0, 0x2B, 0x15, 0x0, 0x0, 0x2B, 0x75, 0x0, 0x0, 0x2B, 0xC2, 0x0, 0x0, 0x2C, 0x23, 0x0, 0x0, 0x2C, 0x87, 0x0, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x2D, 0x6F, 0x0, 0x0, 0x2D, 0x85, 0x0, 0x0, 0x2D, 0xEF, 0x0, 0x0, 0x2E, 0x3A, 0x0, 0x0, 0x2E, 0x9A, 0x0, 0x0, 0x2F, 0x15, 0x0, 0x0, 0x2F, 0x43, 0x0, 0x0, 0x2F, 0xAF, 0x0, 0x0, 0x30, 0x23, 0x0, 0x0, 0x30, 0x64, 0x0, 0x0, 0x30, 0xC1, 0x0, 0x0, 0x31, 0x41, 0x0, 0x0, 0x31, 0x9D, 0x0, 0x0, 0x31, 0xFD, 0x0, 0x0, 0x32, 0x13, 0x0, 0x0, 0x32, 0x66, 0x0, 0x0, 0x32, 0xB9, 0x0, 0x0, 0x32, 0xCF, 0x0, 0x0, 0x33, 0x3A, 0x0, 0x0, 0x33, 0x99, 0x0, 0x0, 0x33, 0xDD, 0x0, 0x0, 0x34, 0x54, 0x0, 0x0, 0x34, 0xC3, 0x0, 0x0, 0x35, 0x38, 0x0, 0x0, 0x35, 0x9F, 0x0, 0x0, 0x36, 0x5, 0x0, 0x0, 0x36, 0x77, 0x0, 0x0, 0x36, 0xD6, 0x0, 0x0, 0x37, 0x49, 0x0, 0x0, 0x37, 0xB7, 0x0, 0x0, 0x37, 0xC7, 0x0, 0x0, 0x38, 0x2C, 0x0, 0x0, 0x38, 0x89, 0x0, 0x0, 0x38, 0xC6, 0x0, 0x0, 0x39, 0x21, 0x0, 0x0, 0x39, 0x5C, 0x0, 0x0, 0x39, 0xAE, 0x0, 0x0, 0x39, 0xFF, 0x0, 0x0, 0x3A, 0x6E, 0x0, 0x0, 0x3A, 0xC4, 0x0, 0x0, 0x3B, 0xC, 0x0, 0x0, 0x3B, 0x71, 0x0, 0x0, 0x3B, 0xB6, 0x0, 0x0, 0x3B, 0xF4, 0x0, 0x0, 0x3C, 0x52, 0x0, 0x0, 0x3C, 0xB0, 0x0, 0x0, 0x3D, 0xB, 0x0, 0x0, 0x3D, 0x7E, 0x0, 0x0, 0x3D, 0xE0, 0x0, 0x0, 0x3E, 0x42, 0x0, 0x0, 0x3E, 0xA8, 0x0, 0x0, 0x3F, 0x8, 0x0, 0x0, 0x3F, 0x60, 0x0, 0x0, 0x3F, 0x7B, 0x0, 0x0, 0x3F, 0x93, 0x0, 0x0, 0x3F, 0xB3, 0x0, 0x0, 0x3F, 0xC3, 0x0, 0x0, 0x3F, 0xE3, 0x0, 0x0, 0x40, 0x6F, 0x0, 0x0, 0x41, 0x6, 0x0, 0x0, 0x41, 0x84, 0x0, 0x0, 0x42, 0x7, 0x0, 0x0, 0x42, 0x1F, 0x0, 0x0, 0x42, 0x97, 0x0, 0x0, 0x42, 0xEE, 0x0, 0x0, 0x43, 0x4A, 0x0, 0x0, 0x43, 0xB6, 0x0, 0x0, 0x44, 0x1B, 0x0, 0x0, 0x44, 0x58, 0x0, 0x0, 0x44, 0xEE, 0x0, 0x0, 0x45, 0x79, 0x0, 0x0, 0x46, 0x7, 0x0, 0x0, 0x46, 0x4E, 0x0, 0x0, 0x46, 0x93, 0x0, 0x0, 0x46, 0xEC, 0x0, 0x0, 0x47, 0x69, 0x0, 0x0, 0x47, 0xD1, 0x0, 0x0, 0x48, 0x1, 0x0, 0x0, 0x48, 0x97, 0x0, 0x0, 0x49, 0x2F, 0x0, 0x0, 0x49, 0x93, 0x0, 0x0, 0x4A, 0x22, 0x0, 0x0, 0x4A, 0xA4, 0x0, 0x0, 0x4A, 0xBA, 0x0, 0x0, 0x4B, 0x6, 0x0, 0x0, 0x4B, 0x94, 0x0, 0x0, 0x4B, 0xE8, 0x0, 0x0, 0x4C, 0x35, 0x0, 0x0, 0x4C, 0x7A, 0x0, 0x0, 0x4C, 0x92, 0x0, 0x0, 0x4C, 0xED, 0x0, 0x0, 0x4D, 0x17, 0x0, 0x0, 0x4D, 0x7C, 0x0, 0x0, 0x4E, 0x15, 0x0, 0x0, 0x4E, 0x2D, 0x0, 0x0, 0x4E, 0x45, 0x0, 0x0, 0x4E, 0xC5, 0x0, 0x0, 0x4F, 0x37, 0x0, 0x0, 0x4F, 0x99, 0x0, 0x0, 0x4F, 0xB1, 0x0, 0x0, 0x50, 0x6, 0x0, 0x0, 0x50, 0x6E, 0x0, 0x0, 0x50, 0xE5, 0x0, 0x0, 0x51, 0x4F, 0x0, 0x0, 0x51, 0xB9, 0x0, 0x0, 0x52, 0x2B, 0x0, 0x0, 0x52, 0x82, 0x0, 0x0, 0x53, 0x2, 0x0, 0x0, 0x53, 0x74, 0x0, 0x0, 0x53, 0xE6, 0x0, 0x0, 0x54, 0x4A, 0x0, 0x0, 0x54, 0xB1, 0x0, 0x0, 0x55, 0x33, 0x0, 0x0, 0x55, 0x43, 0x0, 0x0, 0x55, 0xB0, 0x0, 0x0, 0x56, 0x40, 0x0, 0x0, 0x56, 0xB0, 0x0, 0x0, 0x56, 0xEF, 0x0, 0x0, 0x57, 0x7E, 0x0, 0x0, 0x57, 0x8E, 0x0, 0x0, 0x57, 0xED, 0x0, 0x0, 0x58, 0x4B, 0x0, 0x0, 0x58, 0xCC, 0x0, 0x0, 0x59, 0x9, 0x0, 0x0, 0x59, 0x60, 0x0, 0x0, 0x59, 0xCF, 0x0, 0x0, 0x59, 0xE7, 0x0, 0x0, 0x5A, 0x18, 0x0, 0x0, 0x5A, 0x43, 0x0, 0x0, 0x5A, 0x5B, 0x0, 0x0, 0x5A, 0xAE, 0x0, 0x0, 0x5A, 0xDF, 0x0, 0x0, 0x5B, 0x42, 0x0, 0x0, 0x5B, 0xA3, 0x0, 0x0, 0x5C, 0x5, 0x0, 0x0, 0x5C, 0x7C, 0x0, 0x0, 0x5C, 0xD2, 0x0, 0x0, 0x5D, 0x29, 0x0, 0x0, 0x5D, 0x55, 0x0, 0x0, 0x5D, 0xC5, 0x0, 0x0, 0x5E, 0x49, 0x0, 0x0, 0x5E, 0xBB, 0x0, 0x0, 0x5E, 0xEE, 0x0, 0x0, 0x5F, 0x21, 0x0, 0x0, 0x5F, 0x6D, 0x0, 0x0, 0x5F, 0xA2, 0x0, 0x0, 0x5F, 0xEF, 0x0, 0x0, 0x60, 0x1F, 0x0, 0x0, 0x60, 0x51, 0x0, 0x0, 0x60, 0x9E, 0x0, 0x0, 0x60, 0xE5, 0x0, 0x0, 0x61, 0x6E, 0x0, 0x0, 0x61, 0xB4, 0x0, 0x0, 0x61, 0xCC, 0x0, 0x0, 0x62, 0x14, 0x0, 0x0, 0x62, 0x81, 0x0, 0x0, 0x62, 0xC6, 0x0, 0x0, 0x63, 0xB, 0x0, 0x0, 0x63, 0x68, 0x0, 0x0, 0x63, 0xEE, 0x0, 0x0, 0x64, 0x3D, 0x0, 0x0, 0x64, 0x64, 0x0, 0x0, 0x64, 0xB2, 0x0, 0x0, 0x64, 0xF7, 0x0, 0x0, 0x65, 0x27, 0x0, 0x0, 0x65, 0x73, 0x0, 0x0, 0x65, 0xDA, 0x0, 0x0, 0x66, 0x38, 0x0, 0x0, 0x66, 0xBD, 0x0, 0x0, 0x67, 0xB, 0x0, 0x0, 0x67, 0x5C, 0x0, 0x0, 0x67, 0xAC, 0x0, 0x0, 0x68, 0x5, 0x0, 0x0, 0x68, 0x8D, 0x0, 0x0, 0x69, 0x0, 0x0, 0x0, 0x69, 0x75, 0x0, 0x0, 0x69, 0xDF, 0x0, 0x0, 0x6A, 0x1C, 0x0, 0x0, 0x6A, 0x39, 0x0, 0x0, 0x6A, 0xAB, 0x0, 0x0, 0x6B, 0x9, 0x0, 0x0, 0x6B, 0x21, 0x0, 0x0, 0x6B, 0x98, 0x0, 0x0, 0x6C, 0x3E, 0x0, 0x0, 0x6C, 0xEF, 0x0, 0x0, 0x6D, 0x7C, 0x0, 0x0, 0x6D, 0xFB, 0x0, 0x0, 0x6E, 0xA6, 0x0, 0x0, 0x6F, 0x2A, 0x0, 0x0, 0x6F, 0x9E, 0x0, 0x0, 0x6F, 0xD5, 0x0, 0x0, 0x70, 0x3B, 0x0, 0x0, 0x70, 0x7C, 0x0, 0x0, 0x70, 0xD3, 0x0, 0x0, 0x71, 0x44, 0x0, 0x0, 0x71, 0x80, 0x0, 0x0, 0x71, 0xCC, 0x0, 0x0, 0x72, 0x15, 0x0, 0x0, 0x72, 0x49, 0x0, 0x0, 0x72, 0x7D, 0x0, 0x0, 0x72, 0xC3, 0x0, 0x0, 0x73, 0xC, 0x0, 0x0, 0x73, 0x4D, 0x0, 0x0, 0x73, 0x90, 0x0, 0x0, 0x73, 0xAC, 0x0, 0x0, 0x73, 0xC4, 0x0, 0x0, 0x73, 0xEB, 0x0, 0x0, 0x74, 0x12, 0x0, 0x0, 0x74, 0x40, 0x0, 0x0, 0x74, 0x6F, 0x0, 0x0, 0x74, 0xBC, 0x0, 0x0, 0x75, 0x4, 0x0, 0x0, 0x75, 0x33, 0x0, 0x0, 0x75, 0x5E, 0x0, 0x0, 0x75, 0x8C, 0x0, 0x0, 0x75, 0xBB, 0x0, 0x0, 0x75, 0xE6, 0x0, 0x0, 0x76, 0x11, 0x0, 0x0, 0x76, 0x2B, 0x0, 0x0, 0x76, 0x3B, 0x0, 0x0, 0x76, 0x4B, 0x0, 0x0, 0x76, 0x5B, 0x0, 0x0, 0x76, 0x74, 0x0, 0x0, 0x76, 0x86, 0x0, 0x0, 0x76, 0x98, 0x0, 0x0, 0x76, 0xAA, 0x0, 0x0, 0x76, 0xD2, 0x0, 0x0, 0x76, 0xEC, 0x0, 0x0, 0x76, 0xFE, 0x0, 0x0, 0x77, 0x2E, 0x0, 0x0, 0x77, 0x4F, 0x0, 0x0, 0x77, 0x6F, 0x0, 0x0, 0x77, 0x98, 0x0, 0x0, 0x77, 0xB2, 0x0, 0x0, 0x77, 0xE2, 0x0, 0x0, 0x78, 0xA, 0x0, 0x0, 0x78, 0x4D, 0x0, 0x0, 0x78, 0x87, 0x0, 0x0, 0x78, 0xCB, 0x0, 0x0, 0x78, 0xF6, 0x0, 0x0, 0x79, 0x29, 0x0, 0x0, 0x79, 0x5D, 0x0, 0x0, 0x79, 0xBA, 0x0, 0x0, 0x79, 0xD5, 0x0, 0x0, 0x7A, 0x38, 0x0, 0x0, 0x7A, 0x71, 0x0, 0x0, 0x7A, 0xB6, 0x0, 0x0, 0x7A, 0xD4, 0x0, 0x0, 0x7A, 0xF7, 0x0, 0x0, 0x7B, 0x1A, 0x0, 0x0, 0x7B, 0x3D, 0x0, 0x0, 0x7B, 0x5A, 0x0, 0x0, 0x7B, 0x77, 0x0, 0x0, 0x7B, 0x9D, 0x0, 0x0, 0x7B, 0xC7, 0x0, 0x0, 0x7B, 0xEE, 0x0, 0x0, 0x7C, 0x2F, 0x0, 0x0, 0x7C, 0x5C, 0x0, 0x0, 0x7C, 0x88, 0x0, 0x0, 0x7C, 0xB5, 0x0, 0x0, 0x7C, 0xDF, 0x0, 0x0, 0x7D, 0x21, 0x0, 0x0, 0x7D, 0x33, 0x0, 0x0, 0x7D, 0x4D, 0x0, 0x0, 0x7D, 0x67, 0x0, 0x0, 0x7D, 0xAA, 0x0, 0x0, 0x7D, 0xC4, 0x0, 0x0, 0x7D, 0xE3, 0x0, 0x0, 0x7E, 0x2, 0x0, 0x0, 0x7E, 0x1F, 0x0, 0x0, 0x7E, 0x3D, 0x0, 0x0, 0x7E, 0x60, 0x0, 0x0, 0x7E, 0x7E, 0x0, 0x0, 0x7E, 0xAA, 0x0, 0x0, 0x7E, 0xC8, 0x0, 0x0, 0x7E, 0xE7, 0x0, 0x0, 0x7E, 0xF9, 0x0, 0x0, 0x7F, 0xB, 0x0, 0x0, 0x7F, 0x24, 0x0, 0x0, 0x7F, 0x36, 0x0, 0x0, 0x7F, 0x66, 0x0, 0x0, 0x7F, 0x8F, 0x0, 0x0, 0x7F, 0xDC, 0x0, 0x0, 0x80, 0xF, 0x0, 0x0, 0x80, 0x21, 0x0, 0x0, 0x80, 0x3B, 0x0, 0x0, 0x80, 0x65, 0x0, 0x0, 0x80, 0x77, 0x0, 0x0, 0x80, 0x91, 0x0, 0x0, 0x80, 0xBD, 0x0, 0x0, 0x81, 0x9, 0x0, 0x0, 0x81, 0x3A, 0x0, 0x0, 0x81, 0x62, 0x0, 0x0, 0x81, 0x76, 0x0, 0x0, 0x81, 0x9E, 0x0, 0x0, 0x81, 0xB2, 0x0, 0x0, 0x81, 0xCF, 0x0, 0x0, 0x81, 0xEE, 0x0, 0x0, 0x82, 0x11, 0x0, 0x0, 0x82, 0x35, 0x0, 0x0, 0x82, 0x53, 0x0, 0x0, 0x82, 0x7B, 0x0, 0x0, 0x82, 0xAA, 0x0, 0x0, 0x82, 0xCC, 0x0, 0x0, 0x82, 0xEE, 0x0, 0x0, 0x83, 0x17, 0x0, 0x0, 0x83, 0x31, 0x0, 0x0, 0x83, 0x61, 0x0, 0x0, 0x83, 0x92, 0x0, 0x0, 0x83, 0xB6, 0x0, 0x0, 0x83, 0xF2, 0x0, 0x0, 0x84, 0x35, 0x0, 0x0, 0x84, 0x5C, 0x0, 0x0, 0x84, 0x91, 0x0, 0x0, 0x84, 0xCB, 0x0, 0x0, 0x84, 0xE5, 0x0, 0x0, 0x85, 0xA, 0x0, 0x0, 0x85, 0x4F, 0x0, 0x0, 0x85, 0x78, 0x0, 0x0, 0x85, 0xA2, 0x0, 0x0, 0x85, 0xD1, 0x0, 0x0, 0x86, 0x1, 0x0, 0x0, 0x86, 0x44, 0x0, 0x0, 0x86, 0x5C, 0x0, 0x0, 0x86, 0x6E, 0x0, 0x0, 0x86, 0x94, 0x0, 0x0, 0x86, 0xA6, 0x0, 0x0, 0x86, 0xB8, 0x0, 0x0, 0x86, 0xD1, 0x0, 0x0, 0x86, 0xEF, 0x0, 0x0, 0x87, 0xD, 0x0, 0x0, 0x87, 0x3C, 0x0, 0x0, 0x87, 0x60, 0x0, 0x0, 0x87, 0x89, 0x0, 0x0, 0x87, 0xCE, 0x0, 0x0, 0x88, 0x2, 0x0, 0x0, 0x88, 0x3E, 0x0, 0x0, 0x88, 0x65, 0x0, 0x0, 0x88, 0x77, 0x0, 0x0, 0x88, 0x89, 0x0, 0x0, 0x88, 0x9B, 0x0, 0x0, 0x88, 0xAD, 0x0, 0x0, 0x88, 0xBF, 0x0, 0x0, 0x88, 0xEB, 0x0, 0x0, 0x89, 0x10, 0x0, 0x0, 0x89, 0x36, 0x0, 0x0, 0x89, 0x50, 0x0, 0x0, 0x89, 0x6F, 0x0, 0x0, 0x89, 0xC6, 0x0, 0x0, 0x8A, 0x43, 0x0, 0x0, 0x8A, 0xB9, 0x0, 0x0, 0x8A, 0xF0, 0x0, 0x0, 0x8B, 0x19, 0x0, 0x0, 0x8B, 0x19, 0x0, 0x0, 0x8B, 0x44, 0x0, 0x0, 0x8B, 0x73, 0x0, 0x0, 0x8B, 0xC5, 0x0, 0x0, 0x8B, 0xF9, 0x0, 0x0, 0x8C, 0xB, 0x0, 0x0, 0x8C, 0x1D, 0x0, 0x0, 0x8C, 0x37, 0x0, 0x0, 0x8C, 0x49, 0x0, 0x0, 0x8C, 0x5B, 0x0, 0x0, 0x8C, 0x97, 0x0, 0x0, 0x8D, 0xB, 0x0, 0x0, 0x8D, 0x30, 0x0, 0x0, 0x8D, 0x42, 0x0, 0x0, 0x8D, 0x79, 0x0, 0x0, 0x8D, 0x93, 0x0, 0x0, 0x8D, 0xA5, 0x0, 0x0, 0x8D, 0xF3, 0x0, 0x0, 0x8E, 0x2A, 0x0, 0x0, 0x8E, 0x53, 0x0, 0x0, 0x8E, 0xBB, 0x0, 0x0, 0x8F, 0xE, 0x0, 0x0, 0x8F, 0x38, 0x0, 0x0, 0x8F, 0x76, 0x0, 0x0, 0x8F, 0xB1, 0x0, 0x0, 0x8F, 0xFE, 0x0, 0x0, 0x90, 0x4E, 0x0, 0x0, 0x90, 0x89, 0x0, 0x0, 0x90, 0xE2, 0x0, 0x0, 0x91, 0x16, 0x0, 0x0, 0x91, 0x52, 0x0, 0x0, 0x91, 0x7F, 0x0, 0x0, 0x91, 0xB4, 0x0, 0x0, 0x91, 0xDA, 0x0, 0x0, 0x92, 0x17, 0x0, 0x0, 0x92, 0x47, 0x0, 0x0, 0x92, 0x77, 0x0, 0x0, 0x92, 0x87, 0x0, 0x0, 0x92, 0xA3, 0x0, 0x0, 0x92, 0xB3, 0x0, 0x0, 0x92, 0xF8, 0x0, 0x0, 0x93, 0x4F, 0x0, 0x0, 0x93, 0xBF, 0x0, 0x0, 0x94, 0x2F, 0x0, 0x0, 0x94, 0x47, 0x0, 0x0, 0x94, 0x63, 0x0, 0x0, 0x94, 0xC0, 0x0, 0x0, 0x94, 0xD0, 0x0, 0x0, 0x94, 0xF0, 0x0, 0x0, 0x95, 0x1E, 0x0, 0x0, 0x95, 0x92, 0x0, 0x0, 0x95, 0xBC, 0x0, 0x0, 0x95, 0xF1, 0x0, 0x0, 0x96, 0x17, 0x0, 0x0, 0x96, 0x4E, 0x0, 0x0, 0x96, 0xC0, 0x0, 0x0, 0x97, 0x14, 0x0, 0x0, 0x97, 0x84, 0x0, 0x0, 0x97, 0xEE, 0x0, 0x0, 0x98, 0x60, 0x0, 0x0, 0x98, 0x8E, 0x0, 0x0, 0x99, 0x16, 0x0, 0x0, 0x99, 0x84, 0x0, 0x0, 0x99, 0xEE, 0x0, 0x0, 0x9A, 0x2C, 0x0, 0x0, 0x9A, 0x98, 0x0, 0x0, 0x9A, 0xCA, 0x0, 0x0, 0x9B, 0x22, 0x0, 0x0, 0x9B, 0xA8, 0x0, 0x0, 0x9B, 0xEF, 0x0, 0x0, 0x9C, 0x49, 0x0, 0x0, 0x9C, 0xB1, 0x0, 0x0, 0x9D, 0x12, 0x0, 0x0, 0x9D, 0x4F, 0x0, 0x0, 0x9D, 0x99, 0x0, 0x0, 0x9E, 0xF, 0x0, 0x0, 0x9E, 0x70, 0x0, 0x0, 0x9E, 0xE9, 0x0, 0x0, 0x9F, 0x2C, 0x0, 0x0, 0x9F, 0xBC, 0x0, 0x0, 0xA0, 0x3D, 0x0, 0x0, 0xA0, 0x99, 0x0, 0x0, 0xA0, 0xA9, 0x0, 0x0, 0xA1, 0x25, 0x0, 0x0, 0xA1, 0x9D, 0x0, 0x0, 0xA2, 0xD, 0x0, 0x0, 0xA2, 0x72, 0x0, 0x0, 0xA2, 0xE2, 0x0, 0x0, 0xA3, 0x4A, 0x0, 0x0, 0xA3, 0x7B, 0x0, 0x0, 0xA3, 0xAB, 0x0, 0x0, 0xA4, 0x15, 0x0, 0x0, 0xA4, 0x43, 0x0, 0x0, 0xA4, 0xB4, 0x0, 0x0, 0xA5, 0xB, 0x0, 0x0, 0xA5, 0x6F, 0x0, 0x0, 0xA5, 0xEE, 0x0, 0x0, 0xA6, 0x38, 0x0, 0x0, 0xA6, 0x82, 0x0, 0x0, 0xA6, 0xBD, 0x0, 0x0, 0xA6, 0xD5, 0x0, 0x0, 0xA7, 0x39, 0x0, 0x0, 0xA7, 0xBA, 0x0, 0x0, 0xA8, 0x3B, 0x0, 0x0, 0xA8, 0x91, 0x0, 0x0, 0xA8, 0xFC, 0x0, 0x0, 0xA9, 0x6B, 0x0, 0x0, 0xA9, 0xCA, 0x0, 0x0, 0xAA, 0x14, 0x0, 0x0, 0xAA, 0x43, 0x0, 0x0, 0xAA, 0x8F, 0x0, 0x0, 0xAA, 0xE5, 0x0, 0x0, 0xAB, 0x40, 0x0, 0x0, 0xAB, 0xB2, 0x0, 0x0, 0xAB, 0xE0, 0x0, 0x0, 0xAC, 0x20, 0x0, 0x0, 0xAC, 0x66, 0x0, 0x0, 0xAC, 0xE9, 0x0, 0x0, 0xAD, 0x19, 0x0, 0x0, 0xAD, 0x56, 0x0, 0x0, 0xAD, 0x86, 0x0, 0x0, 0xAD, 0xC1, 0x0, 0x0, 0xAE, 0xC, 0x0, 0x0, 0xAE, 0x62, 0x0, 0x0, 0xAE, 0xA6, 0x0, 0x0, 0xAF, 0x10, 0x0, 0x0, 0xAF, 0x87, 0x0, 0x0, 0xAF, 0xDA, 0x0, 0x0, 0xB0, 0x58, 0x0, 0x0, 0xB0, 0xB5, 0x0, 0x0, 0xB0, 0xD5, 0x0, 0x0, 0xB1, 0x25, 0x0, 0x0, 0xB1, 0x7C, 0x0, 0x0, 0xB1, 0xE5, 0x0, 0x0, 0xB2, 0x13, 0x0, 0x0, 0xB2, 0x4C, 0x0, 0x0, 0xB2, 0x8B, 0x0, 0x0, 0xB2, 0xC6, 0x0, 0x0, 0xB2, 0xF5, 0x0, 0x0, 0xB3, 0x1A, 0x0, 0x0, 0xB3, 0x40, 0x0, 0x0, 0xB3, 0xD6, 0x0, 0x0, 0xB4, 0x6, 0x0, 0x0, 0xB4, 0x41, 0x0, 0x0, 0xB4, 0x71, 0x0, 0x0, 0xB4, 0xAC, 0x0, 0x0, 0xB4, 0xF1, 0x0, 0x0, 0xB5, 0x41, 0x0, 0x0, 0xB5, 0x7F, 0x0, 0x0, 0xB5, 0xDA, 0x0, 0x0, 0xB6, 0x49, 0x0, 0x0, 0xB6, 0x96, 0x0, 0x0, 0xB6, 0xFD, 0x0, 0x0, 0xB7, 0x5E, 0x0, 0x0, 0xB7, 0xCA, 0x0, 0x0, 0xB8, 0x23, 0x0, 0x0, 0xB8, 0x73, 0x0, 0x0, 0xB8, 0xA2, 0x0, 0x0, 0xB8, 0xFF, 0x0, 0x0, 0xB9, 0x59, 0x0, 0x0, 0xB9, 0xB0, 0x0, 0x0, 0xBA, 0x2D, 0x0, 0x0, 0xBA, 0x9E, 0x0, 0x0, 0xBA, 0xE3, 0x0, 0x0, 0xBB, 0x2B, 0x0, 0x0, 0xBB, 0x87, 0x0, 0x0, 0xBB, 0xE4, 0x0, 0x0, 0xBC, 0x4E, 0x0, 0x0, 0xBC, 0xBD, 0x0, 0x0, 0xBD, 0x36, 0x0, 0x0, 0xBD, 0xB4, 0x0, 0x0, 0xBE, 0x4E, 0x0, 0x0, 0xBE, 0xE0, 0x0, 0x0, 0xBF, 0x4F, 0x0, 0x0, 0xBF, 0xB7, 0x0, 0x0, 0xBF, 0xFA, 0x0, 0x0, 0xC0, 0x40, 0x0, 0x0, 0xC0, 0xBF, 0x0, 0x0, 0xC1, 0x2E, 0x0, 0x0, 0xC1, 0xF2, 0x0, 0x0, 0xC2, 0xB1, 0x0, 0x0, 0xC3, 0x28, 0x0, 0x0, 0xC3, 0x9C, 0x0, 0x0, 0xC3, 0xEE, 0x0, 0x0, 0xC4, 0x3B, 0x0, 0x0, 0xC4, 0x92, 0x0, 0x0, 0xC4, 0xB8, 0x0, 0x0, 0xC4, 0xF6, 0x0, 0x0, 0xC5, 0x16, 0x0, 0x0, 0xC5, 0x37, 0x0, 0x0, 0xC5, 0x75, 0x0, 0x0, 0xC6, 0xA6, 0x0, 0x0, 0xC7, 0x48, 0x0, 0x0, 0xC7, 0x68, 0x0, 0x0, 0xC7, 0x88, 0x0, 0x0, 0xC7, 0xDD, 0x0, 0x0, 0xC8, 0x3B, 0x0, 0x0, 0xC8, 0xA9, 0x0, 0x0, 0xC8, 0xD3, 0x0, 0x0, 0xC8, 0xF7, 0x0, 0x0, 0xC9, 0x46, 0x0, 0x0, 0xC9, 0x91, 0x0, 0x0, 0xC9, 0xA9, 0x0, 0x0, 0xC9, 0xC1, 0x0, 0x0, 0xC9, 0xD9, 0x0, 0x0, 0xC9, 0xF1, 0x0, 0x0, 0xCA, 0x3D, 0x0, 0x0, 0xCA, 0x86, 0x0, 0x0, 0xCA, 0xC5, 0x0, 0x0, 0xCB, 0x4, 0x0, 0x0, 0xCB, 0x1C, 0x0, 0x0, 0xCB, 0x34, 0x0, 0x0, 0xCB, 0x69, 0x0, 0x0, 0xCB, 0x9E, 0x0, 0x0, 0xCB, 0xF2, 0x0, 0x0, 0xCC, 0x43, 0x0, 0x0, 0xCC, 0xD4, 0x0, 0x0, 0xCD, 0x5C, 0x0, 0x0, 0xCD, 0x74, 0x0, 0x0, 0xCD, 0x8C, 0x0, 0x0, 0xCD, 0xC8, 0x0, 0x0, 0xCE, 0x2, 0x0, 0x0, 0xCE, 0x1A, 0x0, 0x0, 0xCE, 0x32, 0x0, 0x0, 0xCE, 0x80, 0x0, 0x0, 0xCE, 0xCA, 0x0, 0x0, 0xCF, 0xA, 0x0, 0x0, 0xCF, 0x88, 0x0, 0x0, 0xCF, 0xF9, 0x0, 0x0, 0xD0, 0x54, 0x0, 0x0, 0xD0, 0xA4, 0x0, 0x0, 0xD0, 0xBC, 0x0, 0x0, 0xD0, 0xD4, 0x0, 0x0, 0xD1, 0x1A, 0x0, 0x0, 0xD1, 0x60, 0x0, 0x0, 0xD1, 0x78, 0x0, 0x0, 0xD1, 0x90, 0x0, 0x0, 0xD1, 0xA8, 0x0, 0x0, 0xD1, 0xC0, 0x0, 0x0, 0xD2, 0x30, 0x0, 0x0, 0xD2, 0x8A, 0x0, 0x0, 0xD2, 0xE5, 0x0, 0x0, 0xD3, 0x3, 0x0, 0x0, 0xD3, 0x23, 0x0, 0x0, 0xD3, 0x3B, 0x0, 0x0, 0xD3, 0x53, 0x0, 0x0, 0xD3, 0x99, 0x0, 0x0, 0xD4, 0x6, 0x0, 0x0, 0xD4, 0x8E, 0x0, 0x0, 0xD5, 0x12, 0x0, 0x0, 0xD5, 0x8A, 0x0, 0x0, 0xD5, 0xFD, 0x0, 0x0, 0xD6, 0x67, 0x0, 0x0, 0xD6, 0xDB, 0x0, 0x0, 0xD7, 0x4D, 0x0, 0x0, 0xD7, 0xAF, 0x0, 0x0, 0xD8, 0x10, 0x0, 0x0, 0xD8, 0x7A, 0x0, 0x0, 0xD8, 0xD9, 0x0, 0x0, 0xD9, 0x32, 0x0, 0x0, 0xD9, 0x89, 0x0, 0x0, 0xDA, 0x0, 0x0, 0x0, 0xDA, 0x18, 0x0, 0x0, 0xDA, 0x30, 0x0, 0x0, 0xDA, 0x98, 0x0, 0x0, 0xDA, 0xFA, 0x0, 0x0, 0xDB, 0x5A, 0x0, 0x0, 0xDB, 0xC9, 0x0, 0x0, 0xDC, 0x31, 0x0, 0x0, 0xDC, 0xC5, 0x0, 0x0, 0xDD, 0x15, 0x0, 0x0, 0xDD, 0x62, 0x0, 0x0, 0xDD, 0xDF, 0x0, 0x0, 0xDE, 0x5B, 0x0, 0x0, 0xDE, 0xC6, 0x0, 0x0, 0xDF, 0x31, 0x0, 0x0, 0xDF, 0x61, 0x0, 0x0, 0xDF, 0x91, 0x0, 0x0, 0xDF, 0xD9, 0x0, 0x0, 0xE0, 0x21, 0x0, 0x0, 0xE0, 0x67, 0x0, 0x0, 0xE0, 0xAF, 0x0, 0x0, 0xE1, 0x3C, 0x0, 0x0, 0xE1, 0xBF, 0x0, 0x0, 0xE2, 0x2B, 0x0, 0x0, 0xE2, 0x92, 0x0, 0x0, 0xE2, 0xDD, 0x0, 0x0, 0xE3, 0x27, 0x0, 0x0, 0xE3, 0x61, 0x0, 0x0, 0xE3, 0xE5, 0x0, 0x0, 0xE4, 0x76, 0x0, 0x0, 0xE4, 0xA0, 0x0, 0x0, 0xE4, 0xC2, 0x0, 0x0, 0xE5, 0x15, 0x0, 0x0, 0xE5, 0x88, 0x0, 0x0, 0xE5, 0xB5, 0x0, 0x0, 0xE5, 0xCF, 0x0, 0x0, 0xE5, 0xED, 0x0, 0x0, 0xE6, 0x24, 0x0, 0x0, 0xE6, 0x82, 0x0, 0x0, 0xE7, 0x31, 0x0, 0x0, 0xE7, 0x8F, 0x0, 0x0, 0xE7, 0xE8, 0x0, 0x0, 0xE8, 0x21, 0x0, 0x0, 0xE8, 0x71, 0x0, 0x0, 0xE9, 0x23, 0x0, 0x0, 0xE9, 0x8C, 0x0, 0x0, 0xE9, 0xE0, 0x0, 0x0, 0xEA, 0x29, 0x0, 0x0, 0xEA, 0x41, 0x0, 0x0, 0xEA, 0x6E, 0x0, 0x0, 0xEA, 0x7E, 0x0, 0x0, 0xEA, 0xB9, 0x0, 0x0, 0xEA, 0xEF, 0x0, 0x0, 0xEB, 0x28, 0x0, 0x0, 0xEB, 0x5B, 0x0, 0x0, 0xEB, 0x96, 0x0, 0x0, 0xEB, 0xA6, 0x0, 0x0, 0xEC, 0x0, 0x0, 0x0, 0xEC, 0x57, 0x0, 0x0, 0xEC, 0xB4, 0x0, 0x0, 0xED, 0xD, 0x0, 0x0, 0xED, 0x95, 0x0, 0x0, 0xEE, 0x40, 0x0, 0x0, 0xEE, 0xA2, 0x0, 0x0, 0xEE, 0xE1, 0x0, 0x0, 0xEF, 0x1E, 0x0, 0x0, 0xEF, 0x63, 0x0, 0x0, 0xEF, 0xB1, 0x0, 0x0, 0xEF, 0xFC, 0x0, 0x0, 0xF0, 0xC, 0x0, 0x0, 0xF0, 0x4A, 0x0, 0x0, 0xF0, 0x86, 0x0, 0x0, 0xF0, 0xFC, 0x0, 0x0, 0xF1, 0x5B, 0x0, 0x0, 0xF1, 0x6B, 0x0, 0x0, 0xF1, 0x7B, 0x0, 0x0, 0xF1, 0x8B, 0x0, 0x0, 0xF1, 0xE1, 0x0, 0x0, 0xF2, 0x52, 0x0, 0x0, 0xF2, 0xB7, 0x0, 0x0, 0xF2, 0xC7, 0x0, 0x0, 0xF2, 0xF0, 0x0, 0x0, 0xF3, 0x0, 0x0, 0x0, 0xF3, 0x10, 0x0, 0x0, 0xF3, 0x61, 0x0, 0x0, 0xF3, 0x71, 0x0, 0x0, 0xF3, 0xAA, 0x0, 0x0, 0xF3, 0xF9, 0x0, 0x0, 0xF4, 0x5B, 0x0, 0x0, 0xF4, 0xC9, 0x0, 0x0, 0xF5, 0x12, 0x0, 0x0, 0xF5, 0x42, 0x0, 0x0, 0xF5, 0x72, 0x0, 0x0, 0xF5, 0xD3, 0x0, 0x0, 0xF6, 0x4, 0x0, 0x0, 0xF6, 0x1F, 0x0, 0x0, 0xF6, 0x53, 0x0, 0x0, 0xF6, 0x8C, 0x0, 0x0, 0xF6, 0xAB, 0x0, 0x0, 0xF6, 0xEC, 0x0, 0x0, 0xF7, 0x1F, 0x0, 0x0, 0xF7, 0x50, 0x0, 0x0, 0xF7, 0xA8, 0x0, 0x0, 0xF8, 0x12, 0x0, 0x0, 0xF8, 0x54, 0x0, 0x0, 0xF8, 0x9E, 0x0, 0x0, 0xF8, 0xC4, 0x0, 0x0, 0xF8, 0xFC, 0x0, 0x0, 0xF9, 0x37, 0x0, 0x0, 0xF9, 0xA3, 0x0, 0x0, 0xFA, 0xF, 0x0, 0x0, 0xFA, 0x76, 0x0, 0x0, 0xFB, 0x15, 0x0, 0x0, 0xFB, 0x6B, 0x0, 0x0, 0xFB, 0xBF, 0x0, 0x0, 0xFC, 0x1C, 0x0, 0x0, 0xFC, 0x75, 0x0, 0x0, 0xFC, 0xD2, 0x0, 0x0, 0xFD, 0x2F, 0x0, 0x0, 0xFD, 0x9F, 0x0, 0x0, 0xFD, 0xD6, 0x0, 0x0, 0xFE, 0xE, 0x0, 0x0, 0xFE, 0x69, 0x0, 0x0, 0xFE, 0xB9, 0x0, 0x0, 0xFF, 0x2, 0x0, 0x0, 0xFF, 0x47, 0x0, 0x0, 0xFF, 0x78, 0x0, 0x0, 0xFF, 0xAA, 0x0, 0x0, 0xFF, 0xFD, 0x0, 0x1, 0x0, 0x40, 0x0, 0x1, 0x0, 0x7C, 0x0, 0x1, 0x0, 0xB6, 0x0, 0x1, 0x1, 0x11, 0x0, 0x1, 0x1, 0x40, 0x0, 0x1, 0x1, 0xA0, 0x0, 0x1, 0x2, 0x7, 0x0, 0x1, 0x2, 0x3B, 0x0, 0x1, 0x2, 0xB1, 0x0, 0x1, 0x3, 0x1A, 0x0, 0x1, 0x3, 0x87, 0x0, 0x1, 0x3, 0xC0, 0x0, 0x1, 0x3, 0xD2, 0x0, 0x1, 0x3, 0xE4, 0x0, 0x1, 0x3, 0xF6, 0x0, 0x1, 0x4, 0x8, 0x0, 0x1, 0x4, 0x1A, 0x0, 0x1, 0x4, 0x6E, 0x0, 0x1, 0x4, 0x80, 0x0, 0x1, 0x4, 0x92, 0x0, 0x1, 0x5, 0x18, 0x0, 0x1, 0x5, 0xA5, 0x0, 0x1, 0x6, 0x30, 0x0, 0x1, 0x6, 0xA2, 0x0, 0x1, 0x7, 0x51, 0x0, 0x1, 0x7, 0xC5, 0x0, 0x1, 0x8, 0x50, 0x0, 0x1, 0x8, 0xB7, 0x0, 0x1, 0x9, 0x15, 0x0, 0x1, 0x9, 0xAE, 0x0, 0x1, 0xA, 0x22, 0x0, 0x1, 0xA, 0x88, 0x0, 0x1, 0xB, 0x0, 0x0, 0x1, 0xB, 0x10, 0x0, 0x1, 0xB, 0x82, 0x0, 0x1, 0xC, 0x14, 0x0, 0x1, 0xC, 0x2C, 0x0, 0x1, 0xC, 0x44, 0x0, 0x1, 0xC, 0xB6, 0x0, 0x1, 0xD, 0x11, 0x0, 0x1, 0xD, 0xB5, 0x0, 0x1, 0xE, 0x2E, 0x0, 0x1, 0xE, 0xAA, 0x0, 0x1, 0xF, 0xD, 0x0, 0x1, 0xF, 0xAA, 0x0, 0x1, 0x10, 0x8, 0x0, 0x1, 0x10, 0x43, 0x0, 0x1, 0x10, 0xC4, 0x0, 0x1, 0x11, 0x24, 0x0, 0x1, 0x11, 0xA0, 0x0, 0x1, 0x11, 0xF5, 0x0, 0x1, 0x12, 0x7E, 0x0, 0x1, 0x12, 0xEB, 0x0, 0x1, 0x13, 0x36, 0x0, 0x1, 0x13, 0x96, 0x0, 0x1, 0x13, 0xE2, 0x0, 0x1, 0x14, 0x73, 0x0, 0x1, 0x14, 0xF5, 0x0, 0x1, 0x15, 0x7F, 0x0, 0x1, 0x16, 0x0, 0x0, 0x1, 0x16, 0x88, 0x0, 0x1, 0x17, 0x10, 0x0, 0x1, 0x17, 0x97, 0x0, 0x1, 0x17, 0xEF, 0x0, 0x1, 0x18, 0x63, 0x0, 0x1, 0x18, 0xC6, 0x0, 0x1, 0x19, 0x26, 0x0, 0x1, 0x19, 0x9B, 0x0, 0x1, 0x1A, 0x1, 0x0, 0x1, 0x1A, 0x50, 0x0, 0x1, 0x1A, 0xC5, 0x0, 0x1, 0x1B, 0x3D, 0x0, 0x1, 0x1B, 0x9A, 0x0, 0x1, 0x1B, 0xDC, 0x0, 0x1, 0x1C, 0x20, 0x0, 0x1, 0x1C, 0x30, 0x0, 0x1, 0x1C, 0x6B, 0x0, 0x1, 0x1C, 0xB4, 0x0, 0x1, 0x1C, 0xE4, 0x0, 0x1, 0x1D, 0x11, 0x0, 0x1, 0x1D, 0x4C, 0x0, 0x1, 0x1D, 0xB0, 0x0, 0x1, 0x1D, 0xDE, 0x0, 0x1, 0x1E, 0x13, 0x0, 0x1, 0x1E, 0x32, 0x0, 0x1, 0x1E, 0xA1, 0x0, 0x1, 0x1E, 0xFB, 0x0, 0x1, 0x1F, 0x49, 0x0, 0x1, 0x1F, 0x98, 0x0, 0x1, 0x1F, 0xC7, 0x0, 0x1, 0x20, 0x1A, 0x0, 0x1, 0x20, 0xA2, 0x0, 0x1, 0x21, 0x20, 0x0, 0x1, 0x21, 0x60, 0x0, 0x1, 0x21, 0xB1, 0x0, 0x1, 0x22, 0xB, 0x0, 0x1, 0x22, 0x8F, 0x0, 0x1, 0x22, 0xC7, 0x0, 0x1, 0x23, 0x14, 0x0, 0x1, 0x23, 0x42, 0x0, 0x1, 0x23, 0x6F, 0x0, 0x1, 0x23, 0xB5, 0x0, 0x1, 0x24, 0x16, 0x0, 0x1, 0x24, 0x6C, 0x0, 0x1, 0x24, 0xCC, 0x0, 0x1, 0x25, 0x22, 0x0, 0x1, 0x25, 0x79, 0x0, 0x1, 0x25, 0xF5, 0x0, 0x1, 0x26, 0x19, 0x0, 0x1, 0x26, 0x3B, 0x0, 0x1, 0x26, 0x5D, 0x0, 0x1, 0x26, 0x7E, 0x0, 0x1, 0x26, 0xA0, 0x0, 0x1, 0x26, 0xCE, 0x0, 0x1, 0x26, 0xFC, 0x0, 0x1, 0x27, 0x2E, 0x0, 0x1, 0x27, 0x62, 0x0, 0x1, 0x27, 0x97, 0x0, 0x1, 0x27, 0xC3, 0x0, 0x1, 0x27, 0xD7, 0x0, 0x1, 0x27, 0xFE, 0x0, 0x1, 0x28, 0x40, 0x0, 0x1, 0x28, 0xA0, 0x0, 0x1, 0x28, 0xFB, 0x0, 0x1, 0x29, 0x3A, 0x0, 0x1, 0x29, 0xD3, 0x0, 0x1, 0x2A, 0x5A, 0x0, 0x1, 0x2A, 0xCA, 0x0, 0x1, 0x2B, 0x36, 0x0, 0x1, 0x2B, 0x94, 0x0, 0x1, 0x2C, 0xA, 0x0, 0x1, 0x2C, 0x71, 0x0, 0x1, 0x2C, 0xC2, 0x0, 0x1, 0x2C, 0xF6, 0x0, 0x1, 0x2D, 0x10, 0x0, 0x1, 0x2D, 0x30, 0x0, 0x1, 0x2D, 0x67, 0x0, 0x1, 0x2D, 0x7B, 0x0, 0x1, 0x2D, 0xAA, 0x0, 0x1, 0x2D, 0xFD, 0x0, 0x1, 0x2E, 0x3D, 0x0, 0x1, 0x2E, 0x99, 0x0, 0x1, 0x2E, 0xC9, 0x0, 0x1, 0x2E, 0xF7, 0x0, 0x1, 0x2F, 0x54, 0x0, 0x1, 0x2F, 0xA4, 0x0, 0x1, 0x30, 0xA, 0x0, 0x1, 0x30, 0x5D, 0x0, 0x1, 0x30, 0x9F, 0x0, 0x1, 0x31, 0x5, 0x0, 0x1, 0x31, 0x54, 0x0, 0x1, 0x31, 0x68, 0x0, 0x1, 0x31, 0xAF, 0x0, 0x1, 0x31, 0xF4, 0x0, 0x1, 0x32, 0x37, 0x0, 0x1, 0x32, 0xBE, 0x0, 0x1, 0x33, 0x1E, 0x0, 0x1, 0x33, 0x71, 0x0, 0x1, 0x33, 0x83, 0x0, 0x1, 0x33, 0xBA, 0x0, 0x1, 0x34, 0x2F, 0x0, 0x1, 0x34, 0x41, 0x0, 0x1, 0x34, 0x88, 0x0, 0x1, 0x34, 0x9E, 0x0, 0x1, 0x34, 0xB4, 0x0, 0x1, 0x34, 0xCC, 0x0, 0x1, 0x34, 0xE4, 0x0, 0x1, 0x34, 0xFC, 0x0, 0x1, 0x35, 0x14, 0x0, 0x1, 0x35, 0x60, 0x0, 0x1, 0x35, 0xA8, 0x0, 0x1, 0x35, 0xE7, 0x0, 0x1, 0x36, 0x5B, 0x0, 0x1, 0x36, 0x6B, 0x0, 0x1, 0x36, 0x83, 0x0, 0x1, 0x36, 0xBE, 0x0, 0x1, 0x37, 0x1E, 0x0, 0x1, 0x37, 0x7F, 0x0, 0x1, 0x37, 0xE2, 0x0, 0x1, 0x38, 0x48, 0x0, 0x1, 0x38, 0x6D, 0x0, 0x1, 0x38, 0x97, 0x0, 0x1, 0x38, 0xBC, 0x0, 0x1, 0x39, 0x0, 0x0, 0x1, 0x39, 0x82, 0x0, 0x1, 0x39, 0xBA, 0x0, 0x1, 0x39, 0xF3, 0x0, 0x1, 0x3A, 0x4D, 0x0, 0x1, 0x3A, 0x85, 0x0, 0x1, 0x3A, 0xBF, 0x0, 0x1, 0x3B, 0x19, 0x0, 0x1, 0x3B, 0x74, 0x0, 0x1, 0x3B, 0xCF, 0x0, 0x1, 0x3B, 0xF0, 0x0, 0x1, 0x3C, 0x10, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x36, 0x0, 0x1, 0x3C, 0x50, 0x0, 0x1, 0x3C, 0x8C, 0x0, 0x1, 0x3C, 0xBA, 0x0, 0x1, 0x3C, 0xE7, 0x0, 0x1, 0x3C, 0xF7, 0x0, 0x1, 0x3D, 0x7, 0x0, 0x1, 0x3D, 0x17, 0x0, 0x1, 0x3D, 0x2B, 0x0, 0x1, 0x3D, 0x3F, 0x0, 0x1, 0x3D, 0x57, 0x0, 0x1, 0x3D, 0x7D, 0x0, 0x1, 0x3D, 0xA4, 0x0, 0x1, 0x3D, 0xCC, 0x0, 0x1, 0x3D, 0xF5, 0x0, 0x1, 0x3E, 0x1C, 0x0, 0x1, 0x3E, 0x34, 0x0, 0x1, 0x3E, 0x4C, 0x0, 0x1, 0x3E, 0x8E, 0x0, 0x1, 0x3E, 0xD1, 0x0, 0x1, 0x3F, 0x2, 0x0, 0x1, 0x3F, 0x47, 0x0, 0x1, 0x3F, 0x75, 0x0, 0x1, 0x3F, 0x91, 0x0, 0x1, 0x3F, 0xA1, 0x0, 0x1, 0x3F, 0xB9, 0x0, 0x1, 0x3F, 0xD9, 0x0, 0x1, 0x40, 0x1, 0x0, 0x1, 0x40, 0xE2, 0x0, 0x1, 0x41, 0xF7, 0x0, 0x1, 0x42, 0x32, 0x0, 0x1, 0x42, 0x4F, 0x0, 0x1, 0x42, 0x7B, 0x0, 0x1, 0x42, 0xB6, 0x0, 0x1, 0x42, 0xE4, 0x0, 0x1, 0x43, 0xA, 0x0, 0x1, 0x43, 0x2E, 0x0, 0x1, 0x43, 0xE7, 0x0, 0x1, 0x44, 0x62, 0x0, 0x1, 0x44, 0x74, 0x0, 0x1, 0x44, 0xB0, 0x0, 0x1, 0x44, 0xED, 0x0, 0x1, 0x45, 0x1C, 0x0, 0x1, 0x45, 0xE7, 0x0, 0x1, 0x46, 0x3, 0x0, 0x1, 0x46, 0x23, 0x0, 0x1, 0x46, 0x50, 0x0, 0x1, 0x46, 0x7D, 0x0, 0x1, 0x46, 0x9C, 0x0, 0x1, 0x46, 0xC7, 0x0, 0x1, 0x46, 0xFA, 0x0, 0x1, 0x47, 0x2D, 0x0, 0x1, 0x47, 0x3F, 0x0, 0x1, 0x47, 0x82, 0x0, 0x1, 0x47, 0xED, 0x0, 0x1, 0x48, 0x5, 0x0, 0x1, 0x48, 0x62, 0x0, 0x1, 0x48, 0xAF, 0x0, 0x1, 0x48, 0xEA, 0x0, 0x1, 0x49, 0x35, 0x0, 0x1, 0x49, 0x57, 0x0, 0x1, 0x49, 0xA1, 0x0, 0x1, 0x49, 0xCB, 0x0, 0x1, 0x49, 0xFD, 0x0, 0x1, 0x4A, 0x17, 0x0, 0x1, 0x4A, 0x41, 0x0, 0x1, 0x4A, 0xF0, 0x0, 0x1, 0x4B, 0x12, 0x0, 0x1, 0x4B, 0x3C, 0x0, 0x1, 0x4B, 0x4E, 0x0, 0x1, 0x4B, 0x87, 0x0, 0x1, 0x4B, 0x99, 0x0, 0x1, 0x4B, 0xAB, 0x0, 0x1, 0x4B, 0xBD, 0x0, 0x1, 0x4B, 0xCF, 0x0, 0x1, 0x4B, 0xE1, 0x0, 0x1, 0x4B, 0xF3, 0x0, 0x1, 0x4C, 0x20, 0x0, 0x1, 0x4C, 0x3A, 0x0, 0x1, 0x4C, 0x62, 0x0, 0x1, 0x4C, 0x9C, 0x0, 0x1, 0x4C, 0xD7, 0x0, 0x1, 0x4D, 0x13, 0x0, 0x1, 0x4D, 0x25, 0x0, 0x1, 0x4D, 0x37, 0x0, 0x1, 0x4D, 0x49, 0x0, 0x1, 0x4D, 0x5B, 0x0, 0x1, 0x4D, 0x6D, 0x0, 0x1, 0x4D, 0x7F, 0x0, 0x1, 0x4D, 0x91, 0x0, 0x1, 0x4D, 0xA3, 0x0, 0x1, 0x4D, 0xB5, 0x0, 0x1, 0x4D, 0xC7, 0x0, 0x1, 0x4D, 0xD9, 0x0, 0x1, 0x4D, 0xEB, 0x0, 0x1, 0x4D, 0xFD, 0x0, 0x1, 0x4E, 0x36, 0x0, 0x1, 0x4E, 0x70, 0x0, 0x1, 0x4E, 0x82, 0x0, 0x1, 0x4E, 0x94, 0x0, 0x1, 0x4E, 0xA6, 0x0, 0x1, 0x4E, 0xB8, 0x0, 0x1, 0x4E, 0xCC, 0x0, 0x1, 0x4E, 0xDE, 0x0, 0x1, 0x4E, 0xF0, 0x0, 0x1, 0x4F, 0x2, 0x0, 0x1, 0x4F, 0x14, 0x0, 0x1, 0x4F, 0x4F, 0x0, 0x1, 0x4F, 0xA0, 0x0, 0x1, 0x4F, 0xB2, 0x0, 0x1, 0x4F, 0xC4, 0x0, 0x1, 0x50, 0x29, 0x0, 0x1, 0x50, 0xCF, 0x0, 0x1, 0x51, 0x57, 0x0, 0x1, 0x51, 0xCB, 0x0, 0x1, 0x52, 0x3E, 0x0, 0x1, 0x52, 0xC2, 0x0, 0x1, 0x53, 0x3C, 0x0, 0x1, 0x53, 0x54, 0x0, 0x1, 0x53, 0xFB, 0x0, 0x1, 0x54, 0x56, 0x0, 0x1, 0x54, 0xC5, 0x0, 0x1, 0x55, 0xF, 0x0, 0x1, 0x55, 0x5E, 0x0, 0x1, 0x56, 0x4E, 0x0, 0x1, 0x56, 0xE9, 0x0, 0x1, 0x57, 0x6A, 0x0, 0x1, 0x57, 0xED, 0x0, 0x1, 0x58, 0x5F, 0x0, 0x1, 0x58, 0xDB, 0x0, 0x1, 0x59, 0x54, 0x0, 0x1, 0x59, 0xAC, 0x0, 0x1, 0x5A, 0x77, 0x0, 0x1, 0x5A, 0xAB, 0x0, 0x1, 0x5B, 0x7, 0x0, 0x1, 0x5B, 0x67, 0x0, 0x1, 0x5C, 0x14, 0x0, 0x1, 0x5C, 0x65, 0x0, 0x1, 0x5C, 0xC8, 0x0, 0x1, 0x5D, 0x3A, 0x0, 0x1, 0x5D, 0x5C, 0x0, 0x1, 0x5D, 0x86, 0x0, 0x1, 0x5D, 0xA8, 0x0, 0x1, 0x5D, 0xED, 0x0, 0x1, 0x5E, 0xAC, 0x0, 0x1, 0x5F, 0x76, 0x0, 0x1, 0x60, 0x15, 0x0, 0x1, 0x60, 0xB9, 0x0, 0x1, 0x61, 0x4B, 0x0, 0x1, 0x61, 0xB2, 0x0, 0x1, 0x62, 0x14, 0x0, 0x1, 0x62, 0x99, 0x0, 0x1, 0x63, 0x3C, 0x0, 0x1, 0x63, 0xAF, 0x0, 0x1, 0x64, 0x3A, 0x0, 0x1, 0x64, 0xBD, 0x0, 0x1, 0x65, 0x11, 0x0, 0x1, 0x65, 0x5F, 0x0, 0x1, 0x65, 0xAD, 0x0, 0x1, 0x66, 0x1F, 0x0, 0x1, 0x66, 0x2F, 0x0, 0x1, 0x66, 0xA2, 0x0, 0x1, 0x66, 0xFF, 0x0, 0x1, 0x67, 0x27, 0x0, 0x1, 0x67, 0x9B, 0x0, 0x1, 0x68, 0x45, 0x0, 0x1, 0x69, 0x2C, 0x0, 0x1, 0x69, 0x4E, 0x0, 0x1, 0x69, 0x70, 0x0, 0x1, 0x69, 0x9A, 0x0, 0x1, 0x69, 0xBC, 0x0, 0x1, 0x69, 0xDE, 0x0, 0x1, 0x6A, 0x0, 0x0, 0x1, 0x6A, 0x22, 0x0, 0x1, 0x6A, 0x44, 0x0, 0x1, 0x6A, 0x66, 0x0, 0x1, 0x6A, 0x88, 0x0, 0x1, 0x6A, 0xAA, 0x0, 0x1, 0x6A, 0xCC, 0x0, 0x1, 0x6A, 0xEE, 0x0, 0x1, 0x6B, 0x10, 0x0, 0x1, 0x6B, 0x32, 0x0, 0x1, 0x6B, 0x4C, 0x0, 0x1, 0x6B, 0x5C, 0x0, 0x1, 0x6B, 0x74, 0x0, 0x1, 0x6B, 0x94, 0x0, 0x1, 0x6B, 0xAC, 0x0, 0x1, 0x6B, 0xBC, 0x0, 0x1, 0x6B, 0xD4, 0x0, 0x1, 0x6B, 0xF4, 0x0, 0x1, 0x6C, 0x1C, 0x0, 0x1, 0x6C, 0x34, 0x0, 0x1, 0x6C, 0x44, 0x0, 0x1, 0x6C, 0x5C, 0x0, 0x1, 0x6C, 0x7C, 0x0, 0x1, 0x6C, 0x8C, 0x0, 0x1, 0x6C, 0x9C, 0x0, 0x1, 0x6C, 0xAC, 0x0, 0x1, 0x6C, 0xBC, 0x0, 0x1, 0x6C, 0xCC, 0x0, 0x1, 0x6C, 0xE4, 0x0, 0x1, 0x6D, 0x4, 0x0, 0x1, 0x6D, 0x1C, 0x0, 0x1, 0x6D, 0x2C, 0x0, 0x1, 0x6D, 0x44, 0x0, 0x1, 0x6D, 0x64, 0x0, 0x1, 0x6D, 0x8C, 0x0, 0x1, 0x6D, 0xA4, 0x0, 0x1, 0x6D, 0xB4, 0x0, 0x1, 0x6D, 0xCC, 0x0, 0x1, 0x6D, 0xEC, 0x0, 0x1, 0x6D, 0xFC, 0x0, 0x1, 0x6E, 0xC, 0x0, 0x1, 0x6E, 0x1C, 0x0, 0x1, 0x6E, 0x2C, 0x0, 0x1, 0x6E, 0xAE, 0x0, 0x1, 0x6F, 0x2F, 0x0, 0x1, 0x70, 0x10, 0x0, 0x1, 0x70, 0x71, 0x0, 0x1, 0x70, 0xC8, 0x0, 0x1, 0x71, 0x2E, 0x0, 0x1, 0x71, 0x61, 0x0, 0x1, 0x72, 0xC, 0x0, 0x1, 0x73, 0x49, 0x0, 0x1, 0x73, 0x6B, 0x0, 0x1, 0x73, 0xEB, 0x0, 0x1, 0x74, 0x11, 0x0, 0x1, 0x74, 0x4A, 0x0, 0x1, 0x74, 0x64, 0x0, 0x1, 0x74, 0x91, 0x0, 0x1, 0x75, 0x3F, 0x0, 0x1, 0x75, 0x85, 0x0, 0x1, 0x75, 0xFE, 0x0, 0x1, 0x76, 0x45, 0x0, 0x1, 0x76, 0x67, 0x0, 0x1, 0x76, 0x89, 0x0, 0x1, 0x76, 0xAD, 0x0, 0x1, 0x76, 0xE8, 0x0, 0x1, 0x77, 0x18, 0x0, 0x1, 0x77, 0x49, 0x0, 0x1, 0x77, 0x71, 0x0, 0x1, 0x77, 0x98, 0x0, 0x1, 0x77, 0xB0, 0x0, 0x1, 0x77, 0xF4, 0x0, 0x1, 0x78, 0x30, 0x0, 0x1, 0x78, 0x68, 0x0, 0x1, 0x78, 0x94, 0x0, 0x1, 0x78, 0xBE, 0x0, 0x1, 0x78, 0xEE, 0x0, 0x1, 0x79, 0x1C, 0x0, 0x1, 0x79, 0x72, 0x0, 0x1, 0x79, 0xCC, 0x0, 0x1, 0x7A, 0x1, 0x0, 0x1, 0x7A, 0x37, 0x0, 0x1, 0x7A, 0x75, 0x0, 0x1, 0x7A, 0xB2, 0x0, 0x1, 0x7A, 0xD0, 0x0, 0x1, 0x7A, 0xEE, 0x0, 0x1, 0x7B, 0x3F, 0x0, 0x1, 0x7B, 0x57, 0x0, 0x1, 0x7B, 0xC9, 0x0, 0x1, 0x7C, 0x67, 0x0, 0x1, 0x7C, 0xC6, 0x0, 0x1, 0x7C, 0xDE, 0x0, 0x1, 0x7C, 0xF6, 0x0, 0x1, 0x7D, 0x3C, 0x0, 0x1, 0x7D, 0x82, 0x0, 0x1, 0x7D, 0xB6, 0x0, 0x1, 0x7D, 0xEA, 0x0, 0x1, 0x7E, 0x5F, 0x0, 0x1, 0x7E, 0xBA, 0x0, 0x1, 0x7E, 0xF5, 0x0, 0x1, 0x7F, 0x6A, 0x0, 0x1, 0x7F, 0xAF, 0x0, 0x1, 0x80, 0x17, 0x0, 0x1, 0x80, 0x7B, 0x0, 0x1, 0x80, 0xE0, 0x0, 0x1, 0x81, 0x6, 0x0, 0x1, 0x81, 0x2C, 0x0, 0x1, 0x81, 0x9C, 0x0, 0x1, 0x82, 0x17, 0x0, 0x1, 0x82, 0x62, 0x0, 0x1, 0x82, 0xED, 0x0, 0x1, 0x83, 0x1A, 0x0, 0x1, 0x83, 0x2C, 0x0, 0x1, 0x83, 0x5B, 0x0, 0x1, 0x83, 0xE8, 0x0, 0x1, 0x84, 0x36, 0x0, 0x1, 0x84, 0xA0, 0x0, 0x1, 0x84, 0xF3, 0x0, 0x1, 0x85, 0x12, 0x0, 0x1, 0x85, 0x5C, 0x0, 0x1, 0x85, 0xA5, 0x0, 0x1, 0x85, 0xFE, 0x0, 0x1, 0x86, 0x30, 0x0, 0x1, 0x86, 0x6D, 0x0, 0x1, 0x86, 0xA4, 0x0, 0x1, 0x86, 0xCF, 0x0, 0x1, 0x86, 0xDF, 0x0, 0x1, 0x87, 0x5, 0x0, 0x1, 0x87, 0x19, 0x0, 0x1, 0x87, 0x29, 0x0, 0x1, 0x87, 0x4D, 0x0, 0x1, 0x87, 0x5D, 0x0, 0x1, 0x87, 0x8B, 0x0, 0x1, 0x87, 0xC4, 0x0, 0x1, 0x87, 0xF3, 0x0, 0x1, 0x88, 0x2A, 0x0, 0x1, 0x88, 0x75, 0x0, 0x1, 0x88, 0xC4, 0x0, 0x1, 0x89, 0x2C, 0x0, 0x1, 0x89, 0x7F, 0x0, 0x1, 0x89, 0xB6, 0x0, 0x1, 0x8A, 0x24, 0x0, 0x1, 0x8A, 0x70, 0x0, 0x1, 0x8A, 0xC1, 0x0, 0x1, 0x8B, 0x38, 0x0, 0x1, 0x8B, 0x78, 0x0, 0x1, 0x8B, 0xCD, 0x0, 0x1, 0x8C, 0x2E, 0x0, 0x1, 0x8C, 0x4F, 0x0, 0x1, 0x8C, 0x8D, 0x0, 0x1, 0x8C, 0xB2, 0x0, 0x1, 0x8C, 0xD8, 0x0, 0x1, 0x8D, 0x1C, 0x0, 0x1, 0x8D, 0x63, 0x0, 0x1, 0x8D, 0x89, 0x0, 0x1, 0x8D, 0xCC, 0x0, 0x1, 0x8E, 0x39, 0x0, 0x1, 0x8E, 0x89, 0x0, 0x1, 0x8E, 0xD8, 0x0, 0x1, 0x8F, 0x2, 0x0, 0x1, 0x8F, 0x1F, 0x0, 0x1, 0x8F, 0x35, 0x0, 0x1, 0x8F, 0xD4, 0x0, 0x1, 0x8F, 0xED, 0x0, 0x1, 0x90, 0x14, 0x0, 0x1, 0x90, 0x3A, 0x0, 0x1, 0x90, 0x63, 0x0, 0x1, 0x90, 0xBD, 0x0, 0x1, 0x91, 0x1, 0x0, 0x1, 0x91, 0x15, 0x0, 0x1, 0x91, 0x73, 0x0, 0x1, 0x91, 0xA0, 0x0, 0x1, 0x92, 0x12, 0x0, 0x1, 0x92, 0x99, 0x0, 0x1, 0x92, 0xF2, 0x0, 0x1, 0x93, 0x69, 0x0, 0x1, 0x93, 0x86, 0x0, 0x1, 0x93, 0x9C, 0x0, 0x1, 0x93, 0xFC, 0x0, 0x1, 0x94, 0x5D, 0x0, 0x1, 0x94, 0x75, 0x0, 0x1, 0x94, 0x8F, 0x0, 0x1, 0x94, 0xAE, 0x0, 0x1, 0x94, 0xCD, 0x0, 0x1, 0x94, 0xEC, 0x0, 0x1, 0x95, 0xA, 0x0, 0x1, 0x95, 0x46, 0x0, 0x1, 0x95, 0x80, 0x0, 0x1, 0x95, 0x98, 0x0, 0x1, 0x95, 0xB0, 0x0, 0x1, 0x95, 0xD2, 0x0, 0x1, 0x95, 0xF4, 0x0, 0x1, 0x96, 0x1E, 0x0, 0x1, 0x96, 0x50, 0x0, 0x1, 0x96, 0xBD, 0x0, 0x1, 0x96, 0xFD, 0x0, 0x1, 0x97, 0xF, 0x0, 0x1, 0x97, 0x21, 0x0, 0x1, 0x97, 0x35, 0x0, 0x1, 0x97, 0x47, 0x0, 0x1, 0x97, 0x59, 0x0, 0x1, 0x97, 0x9B, 0x0, 0x1, 0x97, 0xBE, 0x0, 0x1, 0x97, 0xE4, 0x0, 0x1, 0x98, 0x13, 0x0, 0x1, 0x98, 0x90, 0x0, 0x1, 0x98, 0xB0, 0x0, 0x1, 0x98, 0xDC, 0x0, 0x1, 0x99, 0xF, 0x0, 0x1, 0x99, 0x49, 0x0, 0x1, 0x99, 0xFD, 0x0, 0x1, 0x9A, 0x92, 0x0, 0x1, 0x9A, 0xAC, 0x0, 0x1, 0x9A, 0xD3, 0x0, 0x1, 0x9B, 0x16, 0x0, 0x1, 0x9B, 0x73, 0x0, 0x1, 0x9B, 0xD2, 0x0, 0x1, 0x9B, 0xEA, 0x0, 0x1, 0x9C, 0x2, 0x0, 0x1, 0x9C, 0x74, 0x0, 0x1, 0x9C, 0xE1, 0x0, 0x1, 0x9D, 0x12, 0x0, 0x1, 0x9D, 0x22, 0x0, 0x1, 0x9D, 0x5E, 0x0, 0x1, 0x9D, 0x98, 0x0, 0x1, 0x9E, 0x1E, 0x0, 0x1, 0x9E, 0x9F, 0x0, 0x1, 0x9F, 0x2C, 0x0, 0x1, 0x9F, 0xA9, 0x0, 0x1, 0x9F, 0xF4, 0x0, 0x1, 0xA0, 0x39, 0x0, 0x1, 0xA0, 0x51, 0x0, 0x1, 0xA0, 0x69, 0x0, 0x1, 0xA0, 0xC9, 0x0, 0x1, 0xA1, 0x27, 0x0, 0x1, 0xA1, 0x9F, 0x0, 0x1, 0xA2, 0x11, 0x0, 0x1, 0xA2, 0x63, 0x0, 0x1, 0xA2, 0xE9, 0x0, 0x1, 0xA3, 0x26, 0x0, 0x1, 0xA3, 0x63, 0x0, 0x1, 0xA3, 0xDC, 0x0, 0x1, 0xA4, 0x53, 0x0, 0x1, 0xA4, 0xA6, 0x0, 0x1, 0xA4, 0xF9, 0x0, 0x1, 0xA5, 0x3A, 0x0, 0x1, 0xA5, 0x76, 0x0, 0x1, 0xA5, 0xA7, 0x0, 0x1, 0xA5, 0xD8, 0x0, 0x1, 0xA6, 0x33, 0x0, 0x1, 0xA6, 0x88, 0x0, 0x1, 0xA6, 0xCD, 0x0, 0x1, 0xA7, 0x11, 0x0, 0x1, 0xA7, 0x59, 0x0, 0x1, 0xA7, 0x99, 0x0, 0x1, 0xA7, 0xB1, 0x0, 0x1, 0xA8, 0x29, 0x0, 0x1, 0xA8, 0xC6, 0x0, 0x1, 0xA9, 0x59, 0x0, 0x1, 0xA9, 0x81, 0x0, 0x1, 0xA9, 0x99, 0x0, 0x1, 0xAB, 0xDB, 0x0, 0x1, 0xAC, 0x1, 0x0, 0x1, 0xAD, 0x2D, 0x0, 0x1, 0xAD, 0x6C, 0x0, 0x1, 0xAE, 0xD, 0x0, 0x1, 0xAE, 0x61, 0x0, 0x1, 0xAE, 0xAE, 0x0, 0x1, 0xAE, 0xD9, 0x0, 0x1, 0xAF, 0x13, 0x0, 0x1, 0xAF, 0x55, 0x0, 0x1, 0xAF, 0x93, 0x0, 0x1, 0xAF, 0xDD, 0x0, 0x1, 0xB0, 0x16, 0x0, 0x1, 0xB0, 0x61, 0x0, 0x1, 0xB0, 0x73, 0x0, 0x1, 0xB0, 0xAC, 0x0, 0x1, 0xB0, 0xBC, 0x0, 0x1, 0xB0, 0xCE, 0x0, 0x1, 0xB1, 0x2A, 0x0, 0x1, 0xB1, 0x7F, 0x0, 0x1, 0xB1, 0xF2, 0x0, 0x1, 0xB2, 0x5D, 0x0, 0x1, 0xB2, 0xFF, 0x0, 0x1, 0xB3, 0x9B, 0x0, 0x1, 0xB3, 0xFD, 0x0, 0x1, 0xB4, 0x5B, 0x0, 0x1, 0xB4, 0xEC, 0x0, 0x1, 0xB5, 0x7C, 0x0, 0x1, 0xB5, 0xDD, 0x0, 0x1, 0xB6, 0x3F, 0x0, 0x1, 0xB6, 0x7B, 0x0, 0x1, 0xB6, 0xB7, 0x0, 0x1, 0xB7, 0x12, 0x0, 0x1, 0xB7, 0x6B, 0x0, 0x1, 0xB7, 0xB6, 0x0, 0x1, 0xB8, 0x3, 0x0, 0x1, 0xB8, 0x4D, 0x0, 0x1, 0xB8, 0x94, 0x0, 0x1, 0xB8, 0xEC, 0x0, 0x1, 0xB9, 0x42, 0x0, 0x1, 0xB9, 0xA8, 0x0, 0x1, 0xBA, 0xC, 0x0, 0x1, 0xBA, 0x24, 0x0, 0x1, 0xBA, 0xBE, 0x0, 0x1, 0xBB, 0x42, 0x0, 0x1, 0xBB, 0xBF, 0x0, 0x1, 0xBC, 0x3, 0x0, 0x1, 0xBC, 0x42, 0x0, 0x1, 0xBC, 0x9D, 0x0, 0x1, 0xBC, 0xD5, 0x0, 0x1, 0xBD, 0x17, 0x0, 0x1, 0xBD, 0x29, 0x0, 0x1, 0xBD, 0x6C, 0x0, 0x1, 0xBD, 0xA3, 0x0, 0x1, 0xBD, 0xE6, 0x0, 0x1, 0xBE, 0x1E, 0x0, 0x1, 0xBE, 0x61, 0x0, 0x1, 0xBE, 0x97, 0x0, 0x1, 0xBE, 0xD3, 0x0, 0x1, 0xBF, 0xF, 0x0, 0x1, 0xBF, 0x4B, 0x0, 0x1, 0xBF, 0x83, 0x0, 0x1, 0xBF, 0xB9, 0x0, 0x1, 0xBF, 0xF0, 0x0, 0x1, 0xC0, 0x27, 0x0, 0x1, 0xC0, 0x5E, 0x0, 0x1, 0xC0, 0x91, 0x0, 0x1, 0xC0, 0xB2, 0x0, 0x1, 0xC0, 0xD8, 0x0, 0x1, 0xC0, 0xFE, 0x0, 0x1, 0xC1, 0x23, 0x0, 0x1, 0xC1, 0x42, 0x0, 0x1, 0xC1, 0x79, 0x0, 0x1, 0xC1, 0xAF, 0x0, 0x1, 0xC1, 0xE5, 0x0, 0x1, 0xC2, 0x3, 0x0, 0x1, 0xC2, 0x30, 0x0, 0x1, 0xC2, 0x5A, 0x0, 0x1, 0xC2, 0x93, 0x0, 0x1, 0xC2, 0xCA, 0x0, 0x1, 0xC3, 0x1, 0x0, 0x1, 0xC3, 0x2F, 0x0, 0x1, 0xC3, 0x5D, 0x0, 0x1, 0xC3, 0xC5, 0x0, 0x1, 0xC4, 0x27, 0x0, 0x1, 0xC4, 0x5E, 0x0, 0x1, 0xC4, 0x95, 0x0, 0x1, 0xC4, 0xDE, 0x0, 0x1, 0xC5, 0x35, 0x0, 0x1, 0xC5, 0xA8, 0x0, 0x1, 0xC6, 0x30, 0x0, 0x1, 0xC6, 0xA0, 0x0, 0x1, 0xC6, 0xF5, 0x0, 0x1, 0xC7, 0x3F, 0x0, 0x1, 0xC7, 0x8A, 0x0, 0x1, 0xC7, 0xF7, 0x0, 0x1, 0xC8, 0x68, 0x0, 0x1, 0xC8, 0x94, 0x0, 0x1, 0xC8, 0xA4, 0x0, 0x1, 0xC9, 0x4, 0x0, 0x1, 0xC9, 0xCB, 0x0, 0x1, 0xCA, 0x4F, 0x0, 0x1, 0xCA, 0xFD, 0x0, 0x1, 0xCB, 0x58, 0x0, 0x1, 0xCB, 0xE6, 0x0, 0x1, 0xCC, 0x2F, 0x0, 0x1, 0xCC, 0xA9, 0x0, 0x1, 0xCC, 0xFF, 0x0, 0x1, 0xCD, 0x85, 0x0, 0x1, 0xCD, 0xE9, 0x0, 0x1, 0xCE, 0x74, 0x0, 0x1, 0xCE, 0xF8, 0x0, 0x1, 0xCF, 0x70, 0x0, 0x1, 0xCF, 0x88, 0x0, 0x1, 0xCF, 0xA0, 0x0, 0x1, 0xCF, 0xF4, 0x0, 0x1, 0xD0, 0x45, 0x0, 0x1, 0xD0, 0xA9, 0x0, 0x1, 0xD1, 0xA, 0x0, 0x1, 0xD1, 0x34, 0x0, 0x1, 0xD1, 0x58, 0x0, 0x1, 0xD1, 0x70, 0x0, 0x1, 0xD1, 0x88, 0x0, 0x1, 0xD2, 0x1, 0x0, 0x1, 0xD2, 0x75, 0x0, 0x1, 0xD3, 0xA, 0x0, 0x1, 0xD3, 0x96, 0x0, 0x1, 0xD3, 0xAE, 0x0, 0x1, 0xD3, 0xC6, 0x0, 0x1, 0xD3, 0xDE, 0x0, 0x1, 0xD3, 0xF6, 0x0, 0x1, 0xD4, 0x5F, 0x0, 0x1, 0xD4, 0xDF, 0x0, 0x1, 0xD5, 0x59, 0x0, 0x1, 0xD5, 0xE8, 0x0, 0x1, 0xD6, 0x74, 0x0, 0x1, 0xD6, 0x8C, 0x0, 0x1, 0xD7, 0x36, 0x0, 0x1, 0xD7, 0xBF, 0x0, 0x1, 0xD8, 0xC, 0x0, 0x1, 0xD8, 0x5B, 0x0, 0x1, 0xD8, 0xBA, 0x0, 0x1, 0xD9, 0x18, 0x0, 0x1, 0xD9, 0x5D, 0x0, 0x1, 0xD9, 0x9C, 0x0, 0x1, 0xD9, 0xF8, 0x0, 0x1, 0xDA, 0x10, 0x0, 0x1, 0xDA, 0x98, 0x0, 0x1, 0xDB, 0x21, 0x0, 0x1, 0xDB, 0x7D, 0x0, 0x1, 0xDB, 0xE5, 0x0, 0x1, 0xDC, 0x40, 0x0, 0x1, 0xDC, 0xA9, 0x0, 0x1, 0xDC, 0xD3, 0x0, 0x1, 0xDC, 0xFC, 0x0, 0x1, 0xDD, 0x60, 0x0, 0x1, 0xDD, 0xC8, 0x0, 0x1, 0xDE, 0x2F, 0x0, 0x1, 0xDE, 0x9E, 0x0, 0x1, 0xDF, 0xF, 0x0, 0x1, 0xDF, 0x80, 0x0, 0x1, 0xDF, 0xE0, 0x0, 0x1, 0xE0, 0x66, 0x0, 0x1, 0xE0, 0xAB, 0x0, 0x1, 0xE1, 0x36, 0x0, 0x1, 0xE1, 0xA0, 0x0, 0x1, 0xE1, 0xEB, 0x0, 0x1, 0xE2, 0x51, 0x0, 0x1, 0xE2, 0xAB, 0x0, 0x1, 0xE3, 0x2D, 0x0, 0x1, 0xE3, 0xA2, 0x0, 0x1, 0xE4, 0x11, 0x0, 0x1, 0xE4, 0x52, 0x0, 0x1, 0xE4, 0x90, 0x0, 0x1, 0xE4, 0xF8, 0x0, 0x1, 0xE5, 0x5F, 0x0, 0x1, 0xE5, 0xC2, 0x0, 0x1, 0xE5, 0xD6, 0x0, 0x1, 0xE5, 0xE8, 0x0, 0x1, 0xE6, 0x26, 0x0, 0x1, 0xE6, 0x65, 0x0, 0x1, 0xE6, 0x98, 0x0, 0x1, 0xE6, 0xCD, 0x0, 0x1, 0xE7, 0x24, 0x0, 0x1, 0xE7, 0x76, 0x0, 0x1, 0xE7, 0x88, 0x0, 0x1, 0xE7, 0xD3, 0x0, 0x1, 0xE7, 0xFB, 0x0, 0x1, 0xE8, 0x1C, 0x0, 0x1, 0xE8, 0x3D, 0x0, 0x1, 0xE8, 0x66, 0x0, 0x1, 0xE8, 0xD5, 0x0, 0x1, 0xE8, 0xED, 0x0, 0x1, 0xE9, 0x5, 0x0, 0x1, 0xE9, 0x74, 0x0, 0x1, 0xE9, 0xD8, 0x0, 0x1, 0xEA, 0x4B, 0x0, 0x1, 0xEA, 0xA9, 0x0, 0x1, 0xEB, 0x32, 0x0, 0x1, 0xEB, 0xAD, 0x0, 0x1, 0xEB, 0xF9, 0x0, 0x1, 0xEC, 0x4B, 0x0, 0x1, 0xEC, 0xD4, 0x0, 0x1, 0xED, 0x58, 0x0, 0x1, 0xED, 0xD3, 0x0, 0x1, 0xEE, 0x40, 0x0, 0x1, 0xEE, 0x9C, 0x0, 0x1, 0xEE, 0xED, 0x0, 0x1, 0xEF, 0x6C, 0x0, 0x1, 0xF0, 0x7, 0x0, 0x1, 0xF0, 0x6C, 0x0, 0x1, 0xF0, 0xCC, 0x0, 0x1, 0xF1, 0x31, 0x0, 0x1, 0xF1, 0x93, 0x0, 0x1, 0xF2, 0xA, 0x0, 0x1, 0xF2, 0x56, 0x0, 0x1, 0xF2, 0xE2, 0x0, 0x1, 0xF3, 0x60, 0x0, 0x1, 0xF3, 0xAD, 0x0, 0x1, 0xF3, 0xBD, 0x0, 0x1, 0xF4, 0x3D, 0x0, 0x1, 0xF4, 0x95, 0x0, 0x1, 0xF4, 0xCE, 0x0, 0x1, 0xF4, 0xF2, 0x0, 0x1, 0xF5, 0xC, 0x0, 0x1, 0xF5, 0x59, 0x0, 0x1, 0xF5, 0x71, 0x0, 0x1, 0xF5, 0xA9, 0x0, 0x1, 0xF5, 0xD3, 0x0, 0x1, 0xF6, 0x1B, 0x0, 0x1, 0xF6, 0x5C, 0x0, 0x1, 0xF6, 0x77, 0x0, 0x1, 0xF6, 0xC7, 0x0, 0x1, 0xF6, 0xFC, 0x0, 0x1, 0xF7, 0x7F, 0x0, 0x1, 0xF8, 0x26, 0x0, 0x1, 0xF8, 0x60, 0x0, 0x1, 0xF8, 0xD1, 0x0, 0x1, 0xF9, 0x4F, 0x0, 0x1, 0xF9, 0x5F, 0x0, 0x1, 0xF9, 0xDC, 0x0, 0x1, 0xFA, 0x49, 0x0, 0x1, 0xFA, 0xC8, 0x0, 0x1, 0xFB, 0x24, 0x0, 0x1, 0xFB, 0xB4, 0x0, 0x1, 0xFC, 0x23, 0x0, 0x1, 0xFC, 0x95, 0x0, 0x1, 0xFC, 0xC9, 0x0, 0x1, 0xFD, 0x1A, 0x0, 0x1, 0xFD, 0x82, 0x0, 0x1, 0xFE, 0x25, 0x0, 0x1, 0xFE, 0xF1, 0x0, 0x1, 0xFF, 0xA4, 0x0, 0x2, 0x0, 0x33, 0x0, 0x2, 0x0, 0xE7, 0x0, 0x2, 0x1, 0x2A, 0x0, 0x2, 0x1, 0x89, 0x0, 0x2, 0x1, 0xB2, 0x0, 0x2, 0x1, 0xFF, 0x0, 0x2, 0x2, 0x61, 0x0, 0x2, 0x2, 0xDB, 0x0, 0x2, 0x3, 0x24, 0x0, 0x2, 0x3, 0x8D, 0x0, 0x2, 0x3, 0xD4, 0x0, 0x2, 0x4, 0x11, 0x0, 0x2, 0x4, 0x6C, 0x0, 0x2, 0x4, 0xE9, 0x0, 0x2, 0x4, 0xFD, 0x0, 0x2, 0x5, 0x4F, 0x0, 0x2, 0x5, 0x8F, 0x0, 0x2, 0x5, 0xFD, 0x0, 0x2, 0x6, 0x45, 0x0, 0x2, 0x6, 0xB9, 0x0, 0x2, 0x6, 0xFA, 0x0, 0x2, 0x7, 0x70, 0x0, 0x2, 0x7, 0xBA, 0x0, 0x2, 0x8, 0x3, 0x0, 0x2, 0x8, 0x51, 0x0, 0x2, 0x8, 0xA1, 0x0, 0x2, 0x9, 0x8, 0x0, 0x2, 0x9, 0x50, 0x0, 0x2, 0x9, 0x9D, 0x0, 0x2, 0xA, 0x7, 0x0, 0x2, 0xA, 0x66, 0x0, 0x2, 0xA, 0x80, 0x0, 0x2, 0xA, 0xA7, 0x0, 0x2, 0xA, 0xCF, 0x0, 0x2, 0xA, 0xE7, 0x0, 0x2, 0xB, 0x37, 0x0, 0x2, 0xB, 0x80, 0x0, 0x2, 0xB, 0xFD, 0x0, 0x2, 0xC, 0x6F, 0x0, 0x2, 0xC, 0xD9, 0x0, 0x2, 0xD, 0x9E, 0x0, 0x2, 0xD, 0xC4, 0x0, 0x2, 0xD, 0xEA, 0x0, 0x2, 0xD, 0xFC, 0x0, 0x2, 0xE, 0xE, 0x0, 0x2, 0xE, 0x27, 0x0, 0x2, 0xE, 0x41, 0x0, 0x2, 0xE, 0x5A, 0x0, 0x2, 0xE, 0x80, 0x0, 0x2, 0xE, 0xA6, 0x0, 0x2, 0xE, 0xD9, 0x0, 0x2, 0xF, 0xE, 0x0, 0x2, 0xF, 0x20, 0x0, 0x2, 0xF, 0x32, 0x0, 0x2, 0xF, 0x44, 0x0, 0x2, 0xF, 0x44, 0x0, 0x2, 0x10, 0xD9, 0x0, 0x2, 0x11, 0x5E, 0x0, 0x2, 0x11, 0xDA, 0x0, 0x2, 0x12, 0x47, 0x0, 0x2, 0x12, 0x77, 0x0, 0x2, 0x12, 0xBF, 0x0, 0x2, 0x12, 0xE3, 0x0, 0x2, 0x13, 0x2D, 0x0, 0x2, 0x13, 0x93, 0x0, 0x2, 0x14, 0x12, 0x0, 0x2, 0x14, 0x39, 0x0, 0x2, 0x14, 0x9F, 0x0, 0x2, 0x14, 0xFA, 0x0, 0x2, 0x15, 0x37, 0x0, 0x2, 0x15, 0xA4, 0x0, 0x2, 0x15, 0xF1, 0x0, 0x2, 0x16, 0x16, 0x0, 0x2, 0x16, 0x68, 0x0, 0x2, 0x16, 0x93, 0x0, 0x2, 0x16, 0xC3, 0x0, 0x2, 0x17, 0x3, 0x0, 0x2, 0x17, 0x3E, 0x0, 0x2, 0x17, 0x6F, 0x0, 0x2, 0x17, 0xAB, 0x0, 0x2, 0x17, 0xD1, 0x0, 0x2, 0x18, 0x41, 0x0, 0x2, 0x18, 0x94, 0x0, 0x2, 0x19, 0x0, 0x0, 0x2, 0x19, 0x45, 0x0, 0x2, 0x19, 0xA5, 0x0, 0x2, 0x19, 0xD4, 0x0, 0x2, 0x1A, 0x17, 0x0, 0x2, 0x1A, 0x34, 0x0, 0x2, 0x1A, 0x6F, 0x0, 0x2, 0x1A, 0xA0, 0x0, 0x2, 0x1A, 0xBB, 0x0, 0x2, 0x1A, 0xEA, 0x0, 0x2, 0x1B, 0x4E, 0x0, 0x2, 0x1B, 0x7A, 0x0, 0x2, 0x1B, 0xF6, 0x0, 0x2, 0x1C, 0x56, 0x0, 0x2, 0x1C, 0xAB, 0x0, 0x2, 0x1C, 0xCC, 0x0, 0x2, 0x1C, 0xFD, 0x0, 0x2, 0x1D, 0x69, 0x0, 0x2, 0x1D, 0x97, 0x0, 0x2, 0x1D, 0xCD, 0x0, 0x2, 0x1D, 0xF2, 0x0, 0x2, 0x1E, 0x2A, 0x0, 0x2, 0x1E, 0x99, 0x0, 0x2, 0x1E, 0xEA, 0x0, 0x2, 0x1F, 0x4D, 0x0, 0x2, 0x1F, 0x9B, 0x0, 0x2, 0x1F, 0xFC, 0x0, 0x2, 0x20, 0x68, 0x0, 0x2, 0x20, 0xC4, 0x0, 0x2, 0x21, 0xC, 0x0, 0x2, 0x21, 0x3B, 0x0, 0x2, 0x21, 0x7F, 0x0, 0x2, 0x21, 0xD0, 0x0, 0x2, 0x22, 0x27, 0x0, 0x2, 0x22, 0x98, 0x0, 0x2, 0x22, 0xC2, 0x0, 0x2, 0x22, 0xFB, 0x0, 0x2, 0x23, 0x3A, 0x0, 0x2, 0x23, 0x7E, 0x0, 0x2, 0x23, 0xAE, 0x0, 0x2, 0x23, 0xEA, 0x0, 0x2, 0x24, 0x18, 0x0, 0x2, 0x24, 0x53, 0x0, 0x2, 0x24, 0x9D, 0x0, 0x2, 0x24, 0xB5, 0x0, 0x2, 0x24, 0xF8, 0x0, 0x2, 0x25, 0x58, 0x0, 0x2, 0x25, 0xC7, 0x0, 0x2, 0x26, 0x14, 0x0, 0x2, 0x26, 0x47, 0x0, 0x2, 0x26, 0xA7, 0x0, 0x2, 0x26, 0xEB, 0x0, 0x2, 0x27, 0x37, 0x0, 0x2, 0x27, 0x76, 0x0, 0x2, 0x28, 0x6, 0x0, 0x2, 0x28, 0x1E, 0x0, 0x2, 0x28, 0x67, 0x0, 0x2, 0x28, 0xA3, 0x0, 0x2, 0x28, 0xEB, 0x0, 0x2, 0x29, 0x2A, 0x0, 0x2, 0x29, 0xA5, 0x0, 0x2, 0x2A, 0xC, 0x0, 0x2, 0x2A, 0x62, 0x0, 0x2, 0x2A, 0xC8, 0x0, 0x2, 0x2B, 0x3C, 0x0, 0x2, 0x2B, 0xA1, 0x0, 0x2, 0x2C, 0x24, 0x0, 0x2, 0x2C, 0x9B, 0x0, 0x2, 0x2C, 0xF9, 0x0, 0x2, 0x2D, 0x2D, 0x0, 0x2, 0x2D, 0x93, 0x0, 0x2, 0x2D, 0xCD, 0x0, 0x2, 0x2E, 0x23, 0x0, 0x2, 0x2E, 0x7E, 0x0, 0x2, 0x2E, 0xA4, 0x0, 0x2, 0x2F, 0xC, 0x0, 0x2, 0x2F, 0x65, 0x0, 0x2, 0x2F, 0x7F, 0x0, 0x2, 0x2F, 0xD0, 0x0, 0x2, 0x2F, 0xFE, 0x0, 0x2, 0x30, 0xC3, 0x0, 0x2, 0x31, 0x27, 0x0, 0x2, 0x31, 0x8D, 0x0, 0x2, 0x31, 0xC6, 0x0, 0x2, 0x31, 0xFF, 0x0, 0x2, 0x32, 0x36, 0x0, 0x2, 0x32, 0x6B, 0x0, 0x2, 0x32, 0xB5, 0x0, 0x2, 0x33, 0xF, 0x0, 0x2, 0x33, 0x72, 0x0, 0x2, 0x33, 0xAB, 0x0, 0x2, 0x33, 0xD2, 0x0, 0x2, 0x34, 0xF, 0x0, 0x2, 0x34, 0x60, 0x0, 0x2, 0x34, 0xB3, 0x0, 0x2, 0x35, 0x14, 0x0, 0x2, 0x35, 0x67, 0x0, 0x2, 0x35, 0x9C, 0x0, 0x2, 0x35, 0xEA, 0x0, 0x2, 0x36, 0x13, 0x0, 0x2, 0x36, 0x3B, 0x0, 0x2, 0x36, 0x8C, 0x0, 0x2, 0x36, 0xC4, 0x0, 0x2, 0x37, 0x4, 0x0, 0x2, 0x37, 0x39, 0x0, 0x2, 0x37, 0x6D, 0x0, 0x2, 0x37, 0xB6, 0x0, 0x2, 0x38, 0xE, 0x0, 0x2, 0x38, 0x5C, 0x0, 0x2, 0x38, 0x82, 0x0, 0x2, 0x38, 0xBF, 0x0, 0x2, 0x39, 0x13, 0x0, 0x2, 0x39, 0x87, 0x0, 0x2, 0x39, 0x99, 0x0, 0x2, 0x39, 0xAB, 0x0, 0x2, 0x39, 0xBD, 0x0, 0x2, 0x39, 0xCF, 0x0, 0x2, 0x39, 0xE1, 0x0, 0x2, 0x39, 0xF3, 0x0, 0x2, 0x3A, 0x5, 0x0, 0x2, 0x3A, 0x69, 0x0, 0x2, 0x3A, 0xD8, 0x0, 0x2, 0x3B, 0x28, 0x0, 0x2, 0x3B, 0x94, 0x0, 0x2, 0x3C, 0xB, 0x0, 0x2, 0x3C, 0x30, 0x0, 0x2, 0x3C, 0x82, 0x0, 0x2, 0x3C, 0xD9, 0x0, 0x2, 0x3D, 0x17, 0x0, 0x2, 0x3D, 0x76, 0x0, 0x2, 0x3D, 0x9C, 0x0, 0x2, 0x3E, 0x1, 0x0, 0x2, 0x3E, 0x1B, 0x0, 0x2, 0x3E, 0x89, 0x0, 0x2, 0x3E, 0xFF, 0x0, 0x2, 0x3F, 0x45, 0x0, 0x2, 0x3F, 0x89, 0x0, 0x2, 0x40, 0xB, 0x0, 0x2, 0x40, 0x7C, 0x0, 0x2, 0x40, 0xE8, 0x0, 0x2, 0x41, 0x17, 0x0, 0x2, 0x41, 0x27, 0x0, 0x2, 0x41, 0x37, 0x0, 0x2, 0x41, 0x47, 0x0, 0x2, 0x41, 0x57, 0x0, 0x2, 0x41, 0x67, 0x0, 0x2, 0x41, 0x77, 0x0, 0x2, 0x41, 0x87, 0x0, 0x2, 0x41, 0x97, 0x0, 0x2, 0x41, 0xA7, 0x0, 0x2, 0x41, 0xB7, 0x0, 0x2, 0x41, 0xC7, 0x0, 0x2, 0x42, 0x3, 0x0, 0x2, 0x42, 0x19, 0x0, 0x2, 0x42, 0x2F, 0x0, 0x2, 0x42, 0x3F, 0x0, 0x2, 0x42, 0x8D, 0x0, 0x2, 0x42, 0xA8, 0x0, 0x2, 0x42, 0xB8, 0x0, 0x2, 0x42, 0xE5, 0x0, 0x2, 0x42, 0xFB, 0x0, 0x2, 0x43, 0xB, 0x0, 0x2, 0x43, 0x26, 0x0, 0x2, 0x43, 0x36, 0x0, 0x2, 0x43, 0x81, 0x0, 0x2, 0x43, 0xAF, 0x0, 0x2, 0x43, 0xDD, 0x0, 0x2, 0x44, 0x45, 0x0, 0x2, 0x44, 0x78, 0x0, 0x2, 0x44, 0x9D, 0x0, 0x2, 0x44, 0xC8, 0x0, 0x2, 0x44, 0xF8, 0x0, 0x2, 0x45, 0x28, 0x0, 0x2, 0x45, 0x57, 0x0, 0x2, 0x45, 0x85, 0x0, 0x2, 0x45, 0xAD, 0x0, 0x2, 0x45, 0xDE, 0x0, 0x2, 0x46, 0xF, 0x0, 0x2, 0x46, 0x3D, 0x0, 0x2, 0x46, 0x67, 0x0, 0x2, 0x46, 0x98, 0x0, 0x2, 0x46, 0xC8, 0x0, 0x2, 0x46, 0xFA, 0x0, 0x2, 0x47, 0x25, 0x0, 0x2, 0x47, 0x56, 0x0, 0x2, 0x47, 0x84, 0x0, 0x2, 0x47, 0xB5, 0x0, 0x2, 0x47, 0xE6, 0x0, 0x2, 0x48, 0x19, 0x0, 0x2, 0x48, 0x4B, 0x0, 0x2, 0x48, 0x7B, 0x0, 0x2, 0x48, 0xAA, 0x0, 0x2, 0x48, 0xD7, 0x0, 0x2, 0x49, 0x7, 0x0, 0x2, 0x49, 0x34, 0x0, 0x2, 0x49, 0x67, 0x0, 0x2, 0x49, 0x97, 0x0, 0x2, 0x49, 0xC9, 0x0, 0x2, 0x49, 0xF8, 0x0, 0x2, 0x4A, 0x22, 0x0, 0x2, 0x4A, 0x52, 0x0, 0x2, 0x4A, 0x82, 0x0, 0x2, 0x4A, 0xAD, 0x0, 0x2, 0x4A, 0xD5, 0x0, 0x2, 0x4A, 0xFB, 0x0, 0x2, 0x4B, 0x28, 0x0, 0x2, 0x4B, 0x4C, 0x0, 0x2, 0x4B, 0x73, 0x0, 0x2, 0x4B, 0xA3, 0x0, 0x2, 0x4B, 0xCB, 0x0, 0x2, 0x4B, 0xFD, 0x0, 0x2, 0x4C, 0x2E, 0x0, 0x2, 0x4C, 0x57, 0x0, 0x2, 0x4C, 0x83, 0x0, 0x2, 0x4C, 0xB0, 0x0, 0x2, 0x4C, 0xD9, 0x0, 0x2, 0x4D, 0xD, 0x0, 0x2, 0x4D, 0x3F, 0x0, 0x2, 0x4D, 0x6F, 0x0, 0x2, 0x4D, 0x99, 0x0, 0x2, 0x4D, 0xC5, 0x0, 0x2, 0x4D, 0xEE, 0x0, 0x2, 0x4E, 0x19, 0x0, 0x2, 0x4E, 0x46, 0x0, 0x2, 0x4E, 0x6E, 0x0, 0x2, 0x4E, 0x9E, 0x0, 0x2, 0x4E, 0xCD, 0x0, 0x2, 0x4F, 0x1, 0x0, 0x2, 0x4F, 0x34, 0x0, 0x2, 0x4F, 0x64, 0x0, 0x2, 0x4F, 0x92, 0x0, 0x2, 0x4F, 0xC3, 0x0, 0x2, 0x4F, 0xEE, 0x0, 0x2, 0x50, 0x18, 0x0, 0x2, 0x50, 0x3F, 0x0, 0x2, 0x50, 0x67, 0x0, 0x2, 0x50, 0x93, 0x0, 0x2, 0x50, 0xC8, 0x0, 0x2, 0x50, 0xF9, 0x0, 0x2, 0x51, 0x29, 0x0, 0x2, 0x51, 0x5C, 0x0, 0x2, 0x51, 0x8C, 0x0, 0x2, 0x51, 0xC0, 0x0, 0x2, 0x51, 0xF0, 0x0, 0x2, 0x52, 0x20, 0x0, 0x2, 0x52, 0x54, 0x0, 0x2, 0x52, 0x88, 0x0, 0x2, 0x52, 0xBA, 0x0, 0x2, 0x52, 0xDF, 0x0, 0x2, 0x53, 0xF, 0x0, 0x2, 0x53, 0x43, 0x0, 0x2, 0x53, 0x6E, 0x0, 0x2, 0x53, 0x96, 0x0, 0x2, 0x53, 0xC0, 0x0, 0x2, 0x53, 0xF3, 0x0, 0x2, 0x54, 0x26, 0x0, 0x2, 0x54, 0x4B, 0x0, 0x2, 0x54, 0x7E, 0x0, 0x2, 0x54, 0xAE, 0x0, 0x2, 0x54, 0xD5, 0x0, 0x2, 0x55, 0x4, 0x0, 0x2, 0x55, 0x39, 0x0, 0x2, 0x55, 0x68, 0x0, 0x2, 0x55, 0x92, 0x0, 0x2, 0x55, 0xBE, 0x0, 0x2, 0x55, 0xE7, 0x0, 0x2, 0x56, 0x1B, 0x0, 0x2, 0x56, 0x50, 0x0, 0x2, 0x56, 0x81, 0x0, 0x2, 0x56, 0xB4, 0x0, 0x2, 0x56, 0xE1, 0x0, 0x2, 0x57, 0xF, 0x0, 0x2, 0x57, 0x3F, 0x0, 0x2, 0x57, 0x70, 0x0, 0x2, 0x57, 0xA0, 0x0, 0x2, 0x57, 0xCD, 0x0, 0x2, 0x57, 0xFF, 0x0, 0x2, 0x58, 0x2F, 0x0, 0x2, 0x58, 0x5D, 0x0, 0x2, 0x58, 0x8A, 0x0, 0x2, 0x58, 0xBA, 0x0, 0x2, 0x58, 0xE3, 0x0, 0x2, 0x59, 0x13, 0x0, 0x2, 0x59, 0x3E, 0x0, 0x2, 0x59, 0x68, 0x0, 0x2, 0x59, 0x8F, 0x0, 0x2, 0x59, 0xC1, 0x0, 0x2, 0x59, 0xF1, 0x0, 0x2, 0x5A, 0x22, 0x0, 0x2, 0x5A, 0x4D, 0x0, 0x2, 0x5A, 0x81, 0x0, 0x2, 0x5A, 0xAA, 0x0, 0x2, 0x5A, 0xDB, 0x0, 0x2, 0x5B, 0x9, 0x0, 0x2, 0x5B, 0x30, 0x0, 0x2, 0x5B, 0x61, 0x0, 0x2, 0x5B, 0x91, 0x0, 0x2, 0x5B, 0xBE, 0x0, 0x2, 0x5B, 0xEE, 0x0, 0x2, 0x5C, 0x1A, 0x0, 0x2, 0x5C, 0x49, 0x0, 0x2, 0x5C, 0x79, 0x0, 0x2, 0x5C, 0xA1, 0x0, 0x2, 0x5C, 0xC5, 0x0, 0x2, 0x5C, 0xF5, 0x0, 0x2, 0x5D, 0x19, 0x0, 0x2, 0x5D, 0x40, 0x0, 0x2, 0x5D, 0xD6, 0x0, 0x2, 0x5E, 0xBD, 0x0, 0x2, 0x5F, 0x28, 0x0, 0x2, 0x5F, 0xC6, 0x0, 0x2, 0x60, 0x40, 0x0, 0x2, 0x60, 0xBE, 0x0, 0x2, 0x61, 0x4B, 0x0, 0x2, 0x61, 0xC0, 0x0, 0x2, 0x62, 0x54, 0x0, 0x2, 0x62, 0xC1, 0x0, 0x2, 0x63, 0x42, 0x0, 0x2, 0x63, 0xD8, 0x0, 0x2, 0x64, 0x48, 0x0, 0x2, 0x64, 0xD1, 0x0, 0x2, 0x65, 0x70, 0x0, 0x2, 0x65, 0xD2, 0x0, 0x2, 0x66, 0x2E, 0x0, 0x2, 0x66, 0x8A, 0x0, 0x2, 0x66, 0xE6, 0x0, 0x2, 0x67, 0x94, 0x0, 0x2, 0x68, 0x42, 0x0, 0x2, 0x68, 0xF0, 0x0, 0x2, 0x69, 0x16, 0x0, 0x2, 0x69, 0x71, 0x0, 0x2, 0x69, 0xC8, 0x0, 0x2, 0x6A, 0x22, 0x0, 0x2, 0x6A, 0x9D, 0x0, 0x2, 0x6A, 0xF8, 0x0, 0x2, 0x6B, 0x51, 0x0, 0x2, 0x6B, 0xAC, 0x0, 0x2, 0x6C, 0x11, 0x0, 0x2, 0x6C, 0x88, 0x0, 0x2, 0x6C, 0xF8, 0x0, 0x2, 0x6D, 0x8, 0x0, 0x2, 0x6D, 0xA5, 0x0, 0x2, 0x6E, 0x5A, 0x0, 0x2, 0x6F, 0x1, 0x0, 0x2, 0x6F, 0x1B, 0x0, 0x2, 0x6F, 0xD1, 0x0, 0x2, 0x70, 0x70, 0x0, 0x2, 0x71, 0x6, 0x0, 0x2, 0x71, 0x39, 0x0, 0x2, 0x71, 0x8C, 0x0, 0x2, 0x71, 0xD4, 0x0, 0x2, 0x72, 0x5B, 0x0, 0x2, 0x72, 0xA8, 0x0, 0x2, 0x72, 0xF0, 0x0, 0x2, 0x73, 0x2B, 0x0, 0x2, 0x73, 0xAE, 0x0, 0x2, 0x74, 0xD, 0x0, 0x2, 0x74, 0x53, 0x0, 0x2, 0x74, 0x88, 0x0, 0x2, 0x74, 0xB4, 0x0, 0x2, 0x75, 0xD, 0x0, 0x2, 0x75, 0x6B, 0x0, 0x2, 0x75, 0x97, 0x0, 0x2, 0x75, 0xE8, 0x0, 0x2, 0x76, 0x41, 0x0, 0x2, 0x76, 0x96, 0x0, 0x2, 0x77, 0x0, 0x0, 0x2, 0x77, 0x0, 0x0, 0x2, 0x77, 0x10, 0x0, 0x2, 0x77, 0x73, 0x0, 0x2, 0x77, 0xD6, 0x0, 0x2, 0x78, 0x27, 0x0, 0x2, 0x78, 0x5F, 0x0, 0x2, 0x78, 0xB3, 0x0, 0x2, 0x78, 0xCB, 0x0, 0x2, 0x78, 0xE3, 0x0, 0x2, 0x78, 0xFB, 0x0, 0x2, 0x79, 0x13, 0x0, 0x2, 0x79, 0x2B, 0x0, 0x2, 0x79, 0x43, 0x0, 0x2, 0x79, 0x5B, 0x0, 0x2, 0x79, 0x73, 0x0, 0x2, 0x79, 0x8B, 0x0, 0x2, 0x79, 0xA3, 0x0, 0x2, 0x79, 0xBB, 0x0, 0x2, 0x79, 0xD3, 0x0, 0x2, 0x79, 0xEB, 0x0, 0x2, 0x7A, 0x3, 0x0, 0x2, 0x7A, 0x1B, 0x0, 0x2, 0x7A, 0x33, 0x0, 0x2, 0x7A, 0x4B, 0x0, 0x2, 0x7A, 0x63, 0x0, 0x2, 0x7A, 0x7B, 0x0, 0x2, 0x7A, 0x93, 0x0, 0x2, 0x7A, 0xAB, 0x0, 0x2, 0x7A, 0xC3, 0x0, 0x2, 0x7A, 0xDB, 0x0, 0x2, 0x7A, 0xF3, 0x0, 0x2, 0x7B, 0xB, 0x0, 0x2, 0x7B, 0x23, 0x0, 0x2, 0x7B, 0x3B, 0x0, 0x2, 0x7B, 0x53, 0x0, 0x2, 0x7B, 0x6B, 0x0, 0x2, 0x7B, 0x81, 0x0, 0x2, 0x7B, 0x97, 0x0, 0x2, 0x7B, 0xAD, 0x0, 0x2, 0x7B, 0xC5, 0x0, 0x2, 0x7B, 0xDD, 0x0, 0x2, 0x7B, 0xF5, 0x0, 0x2, 0x7C, 0xD, 0x0, 0x2, 0x7C, 0x25, 0x0, 0x2, 0x7C, 0x3B, 0x0, 0x2, 0x7C, 0x51, 0x0, 0x2, 0x7C, 0x67, 0x0, 0x2, 0x7C, 0x7D, 0x0, 0x2, 0x7C, 0x95, 0x0, 0x2, 0x7C, 0xAD, 0x0, 0x2, 0x7C, 0xC3, 0x0, 0x2, 0x7C, 0xDB, 0x0, 0x2, 0x7C, 0xF3, 0x0, 0x2, 0x7D, 0x9, 0x0, 0x2, 0x7D, 0x1F, 0x0, 0x2, 0x7D, 0x37, 0x0, 0x2, 0x7D, 0x4F, 0x0, 0x2, 0x7D, 0x67, 0x0, 0x2, 0x7D, 0x7D, 0x0, 0x2, 0x7D, 0x93, 0x0, 0x2, 0x7D, 0xAB, 0x0, 0x2, 0x7D, 0xC1, 0x0, 0x2, 0x7D, 0xD9, 0x0, 0x2, 0x7D, 0xEF, 0x0, 0x2, 0x7E, 0x7, 0x0, 0x2, 0x7E, 0x1D, 0x0, 0x2, 0x7E, 0x7D, 0x0, 0x2, 0x7F, 0x14, 0x0, 0x2, 0x7F, 0x2C, 0x0, 0x2, 0x7F, 0x44, 0x0, 0x2, 0x7F, 0x5C, 0x0, 0x2, 0x7F, 0x72, 0x0, 0x2, 0x7F, 0x8A, 0x0, 0x2, 0x7F, 0xA2, 0x0, 0x2, 0x7F, 0xBA, 0x0, 0x2, 0x7F, 0xD0, 0x0, 0x2, 0x7F, 0xE8, 0x0, 0x2, 0x80, 0x0, 0x0, 0x2, 0x80, 0x18, 0x0, 0x2, 0x80, 0x2E, 0x0, 0x2, 0x80, 0x46, 0x0, 0x2, 0x80, 0x5C, 0x0, 0x2, 0x80, 0x74, 0x0, 0x2, 0x80, 0x8C, 0x0, 0x2, 0x80, 0xE4, 0x0, 0x2, 0x81, 0x6B, 0x0, 0x2, 0x81, 0x83, 0x0, 0x2, 0x81, 0x99, 0x0, 0x2, 0x81, 0xB1, 0x0, 0x2, 0x81, 0xC7, 0x0, 0x2, 0x81, 0xDF, 0x0, 0x2, 0x81, 0xF5, 0x0, 0x2, 0x82, 0xD, 0x0, 0x2, 0x82, 0x25, 0x0, 0x2, 0x82, 0x3D, 0x0, 0x2, 0x82, 0x55, 0x0, 0x2, 0x82, 0x6D, 0x0, 0x2, 0x82, 0x85, 0x0, 0x2, 0x82, 0x9D, 0x0, 0x2, 0x82, 0xB5, 0x0, 0x2, 0x82, 0xCD, 0x0, 0x2, 0x82, 0xE5, 0x0, 0x2, 0x82, 0xFD, 0x0, 0x2, 0x83, 0x15, 0x0, 0x2, 0x83, 0x2B, 0x0, 0x2, 0x83, 0x41, 0x0, 0x2, 0x83, 0x59, 0x0, 0x2, 0x83, 0x71, 0x0, 0x2, 0x83, 0x89, 0x0, 0x2, 0x83, 0xA1, 0x0, 0x2, 0x83, 0xB9, 0x0, 0x2, 0x83, 0xD1, 0x0, 0x2, 0x83, 0xE9, 0x0, 0x2, 0x84, 0x1, 0x0, 0x2, 0x84, 0x19, 0x0, 0x2, 0x84, 0x31, 0x0, 0x2, 0x84, 0x49, 0x0, 0x2, 0x84, 0x61, 0x0, 0x2, 0x84, 0x79, 0x0, 0x2, 0x84, 0x91, 0x0, 0x2, 0x84, 0xA9, 0x0, 0x2, 0x84, 0xC1, 0x0, 0x2, 0x84, 0xD9, 0x0, 0x2, 0x84, 0xF1, 0x0, 0x2, 0x85, 0x9, 0x0, 0x2, 0x85, 0x21, 0x0, 0x2, 0x85, 0x37, 0x0, 0x2, 0x85, 0x4F, 0x0, 0x2, 0x85, 0x67, 0x0, 0x2, 0x85, 0x7D, 0x0, 0x2, 0x85, 0x95, 0x0, 0x2, 0x85, 0xAD, 0x0, 0x2, 0x85, 0xC5, 0x0, 0x2, 0x85, 0xDD, 0x0, 0x2, 0x85, 0xF5, 0x0, 0x2, 0x86, 0xD, 0x0, 0x2, 0x86, 0x25, 0x0, 0x2, 0x86, 0x3D, 0x0, 0x2, 0x86, 0x55, 0x0, 0x2, 0x86, 0x6B, 0x0, 0x2, 0x86, 0x83, 0x0, 0x2, 0x86, 0x9B, 0x0, 0x2, 0x86, 0xB3, 0x0, 0x2, 0x86, 0xC9, 0x0, 0x2, 0x86, 0xE1, 0x0, 0x2, 0x86, 0xF9, 0x0, 0x2, 0x87, 0x11, 0x0, 0x2, 0x87, 0x29, 0x0, 0x2, 0x87, 0x41, 0x0, 0x2, 0x87, 0x57, 0x0, 0x2, 0x87, 0x6F, 0x0, 0x2, 0x87, 0x87, 0x0, 0x2, 0x87, 0x9F, 0x0, 0x2, 0x87, 0xB7, 0x0, 0x2, 0x87, 0xCF, 0x0, 0x2, 0x87, 0xE7, 0x0, 0x2, 0x87, 0xFF, 0x0, 0x2, 0x88, 0x15, 0x0, 0x2, 0x88, 0x2D, 0x0, 0x2, 0x88, 0x43, 0x0, 0x2, 0x88, 0x5B, 0x0, 0x2, 0x88, 0x73, 0x0, 0x2, 0x88, 0x8B, 0x0, 0x2, 0x88, 0xA3, 0x0, 0x2, 0x88, 0xBB, 0x0, 0x2, 0x88, 0xD3, 0x0, 0x2, 0x89, 0x38, 0x0, 0x2, 0x89, 0x9B, 0x0, 0x2, 0x89, 0xB3, 0x0, 0x2, 0x89, 0xCB, 0x0, 0x2, 0x89, 0xE3, 0x0, 0x2, 0x89, 0xF9, 0x0, 0x2, 0x8A, 0x11, 0x0, 0x2, 0x8A, 0x29, 0x0, 0x2, 0x8A, 0x41, 0x0, 0x2, 0x8A, 0x59, 0x0, 0x2, 0x8A, 0x71, 0x0, 0x2, 0x8A, 0x89, 0x0, 0x2, 0x8A, 0x9F, 0x0, 0x2, 0x8A, 0xB7, 0x0, 0x2, 0x8A, 0xCF, 0x0, 0x2, 0x8A, 0xE7, 0x0, 0x2, 0x8A, 0xFF, 0x0, 0x2, 0x8B, 0x17, 0x0, 0x2, 0x8B, 0x2F, 0x0, 0x2, 0x8B, 0x45, 0x0, 0x2, 0x8B, 0x5D, 0x0, 0x2, 0x8B, 0x75, 0x0, 0x2, 0x8B, 0x8B, 0x0, 0x2, 0x8B, 0xA1, 0x0, 0x2, 0x8B, 0xB9, 0x0, 0x2, 0x8B, 0xD1, 0x0, 0x2, 0x8B, 0xE9, 0x0, 0x2, 0x8C, 0x1, 0x0, 0x2, 0x8C, 0x19, 0x0, 0x2, 0x8C, 0x31, 0x0, 0x2, 0x8C, 0x47, 0x0, 0x2, 0x8C, 0x5D, 0x0, 0x2, 0x8C, 0x75, 0x0, 0x2, 0x8C, 0x8B, 0x0, 0x2, 0x8C, 0xA3, 0x0, 0x2, 0x8C, 0xBB, 0x0, 0x2, 0x8C, 0xD3, 0x0, 0x2, 0x8C, 0xEB, 0x0, 0x2, 0x8D, 0x3, 0x0, 0x2, 0x8D, 0x19, 0x0, 0x2, 0x8D, 0x2F, 0x0, 0x2, 0x8D, 0x47, 0x0, 0x2, 0x8D, 0x5F, 0x0, 0x2, 0x8D, 0x77, 0x0, 0x2, 0x8D, 0x8D, 0x0, 0x2, 0x8D, 0xA5, 0x0, 0x2, 0x8D, 0xBD, 0x0, 0x2, 0x8D, 0xD3, 0x0, 0x2, 0x8D, 0xEB, 0x0, 0x2, 0x8E, 0x48, 0x0, 0x2, 0x8E, 0x60, 0x0, 0x2, 0x8E, 0x76, 0x0, 0x2, 0x8E, 0x8E, 0x0, 0x2, 0x8E, 0xA4, 0x0, 0x2, 0x8E, 0xBA, 0x0, 0x2, 0x8E, 0xD0, 0x0, 0x2, 0x8E, 0xE6, 0x0, 0x2, 0x8E, 0xFE, 0x0, 0x2, 0x8F, 0x56, 0x0, 0x2, 0x8F, 0x6C, 0x0, 0x2, 0x8F, 0x82, 0x0, 0x2, 0x8F, 0x9A, 0x0, 0x2, 0x8F, 0xB2, 0x0, 0x2, 0x8F, 0xCA, 0x0, 0x2, 0x8F, 0xE0, 0x0, 0x2, 0x8F, 0xF8, 0x0, 0x2, 0x90, 0x10, 0x0, 0x2, 0x90, 0x28, 0x0, 0x2, 0x90, 0x3E, 0x0, 0x2, 0x90, 0x54, 0x0, 0x2, 0x90, 0x6C, 0x0, 0x2, 0x90, 0x84, 0x0, 0x2, 0x90, 0x9A, 0x0, 0x2, 0x90, 0xB2, 0x0, 0x2, 0x90, 0xCA, 0x0, 0x2, 0x90, 0xE2, 0x0, 0x2, 0x90, 0xFA, 0x0, 0x2, 0x91, 0x12, 0x0, 0x2, 0x91, 0x2A, 0x0, 0x2, 0x91, 0x40, 0x0, 0x2, 0x91, 0x58, 0x0, 0x2, 0x91, 0x70, 0x0, 0x2, 0x91, 0x88, 0x0, 0x2, 0x91, 0xA0, 0x0, 0x2, 0x91, 0xB8, 0x0, 0x2, 0x91, 0xCE, 0x0, 0x2, 0x91, 0xE6, 0x0, 0x2, 0x91, 0xFC, 0x0, 0x2, 0x92, 0x14, 0x0, 0x2, 0x92, 0x2A, 0x0, 0x2, 0x92, 0x42, 0x0, 0x2, 0x92, 0x58, 0x0, 0x2, 0x92, 0x70, 0x0, 0x2, 0x92, 0x86, 0x0, 0x2, 0x92, 0x9C, 0x0, 0x2, 0x92, 0xB4, 0x0, 0x2, 0x92, 0xCC, 0x0, 0x2, 0x92, 0xE4, 0x0, 0x2, 0x93, 0x46, 0x0, 0x2, 0x93, 0x5E, 0x0, 0x2, 0x93, 0x74, 0x0, 0x2, 0x93, 0x8A, 0x0, 0x2, 0x93, 0xA2, 0x0, 0x2, 0x93, 0xBA, 0x0, 0x2, 0x93, 0xD0, 0x0, 0x2, 0x93, 0xE6, 0x0, 0x2, 0x93, 0xFE, 0x0, 0x2, 0x94, 0x16, 0x0, 0x2, 0x94, 0x2E, 0x0, 0x2, 0x94, 0x46, 0x0, 0x2, 0x94, 0x5E, 0x0, 0x2, 0x94, 0x76, 0x0, 0x2, 0x94, 0x8E, 0x0, 0x2, 0x94, 0x9E, 0x0, 0x2, 0x94, 0xAE, 0x0, 0x2, 0x94, 0xBE, 0x0, 0x2, 0x94, 0xCE, 0x0, 0x2, 0x94, 0xDE, 0x0, 0x2, 0x94, 0xEE, 0x0, 0x2, 0x94, 0xFE, 0x0, 0x2, 0x95, 0xE, 0x0, 0x2, 0x95, 0x1E, 0x0, 0x2, 0x95, 0x2E, 0x0, 0x2, 0x95, 0x3E, 0x0, 0x2, 0x95, 0x4E, 0x0, 0x2, 0x95, 0x5E, 0x0, 0x2, 0x95, 0x6E, 0x0, 0x2, 0x95, 0x86, 0x0, 0x2, 0x95, 0x9E, 0x0, 0x2, 0x95, 0xB6, 0x0, 0x2, 0x95, 0xCE, 0x0, 0x2, 0x95, 0xE6, 0x0, 0x2, 0x95, 0xFC, 0x0, 0x2, 0x96, 0x12, 0x0, 0x2, 0x96, 0x22, 0x0, 0x2, 0x96, 0x32, 0x0, 0x2, 0x96, 0x42, 0x0, 0x2, 0x96, 0x52, 0x0, 0x2, 0x96, 0x62, 0x0, 0x2, 0x96, 0x7A, 0x0, 0x2, 0x96, 0x90, 0x0, 0x2, 0x96, 0xA8, 0x0, 0x2, 0x96, 0xC0, 0x0, 0x2, 0x96, 0xD8, 0x0, 0x2, 0x96, 0xF0, 0x0, 0x2, 0x97, 0x8, 0x0, 0x2, 0x97, 0x7C, 0x0, 0x2, 0x97, 0x8C, 0x0, 0x2, 0x97, 0xA4, 0x0, 0x2, 0x97, 0xB4, 0x0, 0x2, 0x97, 0xC4, 0x0, 0x2, 0x97, 0xDC, 0x0, 0x2, 0x97, 0xF4, 0x0, 0x2, 0x98, 0x4, 0x0, 0x2, 0x98, 0x14, 0x0, 0x2, 0x98, 0x24, 0x0, 0x2, 0x98, 0x34, 0x0, 0x2, 0x98, 0x4C, 0x0, 0x2, 0x98, 0x5C, 0x0, 0x2, 0x98, 0x6C, 0x0, 0x2, 0x98, 0x7C, 0x0, 0x2, 0x98, 0x8C, 0x0, 0x2, 0x98, 0x9C, 0x0, 0x2, 0x98, 0xAC, 0x0, 0x2, 0x98, 0xBC, 0x0, 0x2, 0x98, 0xCC, 0x0, 0x2, 0x98, 0xDC, 0x0, 0x2, 0x98, 0xEC, 0x0, 0x2, 0x99, 0x4, 0x0, 0x2, 0x99, 0x14, 0x0, 0x2, 0x99, 0x24, 0x0, 0x2, 0x99, 0x7B, 0x0, 0x2, 0x99, 0x8B, 0x0, 0x2, 0x99, 0x9B, 0x0, 0x2, 0x99, 0xB1, 0x0, 0x2, 0x99, 0xC9, 0x0, 0x2, 0x99, 0xD9, 0x0, 0x2, 0x99, 0xE9, 0x0, 0x2, 0x9A, 0x1, 0x0, 0x2, 0x9A, 0x11, 0x0, 0x2, 0x9A, 0x29, 0x0, 0x2, 0x9A, 0x3F, 0x0, 0x2, 0x9A, 0x57, 0x0, 0x2, 0x9A, 0x6F, 0x0, 0x2, 0x9A, 0x87, 0x0, 0x2, 0x9A, 0x9F, 0x0, 0x2, 0x9A, 0xB7, 0x0, 0x2, 0x9A, 0xCF, 0x0, 0x2, 0x9A, 0xE7, 0x0, 0x2, 0x9A, 0xFD, 0x0, 0x2, 0x9B, 0xD, 0x0, 0x2, 0x9B, 0x1D, 0x0, 0x2, 0x9B, 0x35, 0x0, 0x2, 0x9B, 0x4D, 0x0, 0x2, 0x9B, 0x5D, 0x0, 0x2, 0x9B, 0x75, 0x0, 0x2, 0x9B, 0x8D, 0x0, 0x2, 0x9B, 0xA5, 0x0, 0x2, 0x9B, 0xBD, 0x0, 0x2, 0x9B, 0xD5, 0x0, 0x2, 0x9B, 0xED, 0x0, 0x2, 0x9C, 0x5, 0x0, 0x2, 0x9C, 0x1D, 0x0, 0x2, 0x9C, 0x2D, 0x0, 0x2, 0x9C, 0x3D, 0x0, 0x2, 0x9C, 0x55, 0x0, 0x2, 0x9C, 0x6D, 0x0, 0x2, 0x9C, 0x85, 0x0, 0x2, 0x9C, 0x9D, 0x0, 0x2, 0x9C, 0xB5, 0x0, 0x2, 0x9C, 0xCD, 0x0, 0x2, 0x9C, 0xE5, 0x0, 0x2, 0x9C, 0xFD, 0x0, 0x2, 0x9D, 0xD, 0x0, 0x2, 0x9D, 0x1D, 0x0, 0x2, 0x9D, 0x2D, 0x0, 0x2, 0x9D, 0x45, 0x0, 0x2, 0x9D, 0x5D, 0x0, 0x2, 0x9D, 0x6D, 0x0, 0x2, 0x9D, 0x85, 0x0, 0x2, 0x9D, 0x9B, 0x0, 0x2, 0x9D, 0xB3, 0x0, 0x2, 0x9D, 0xC9, 0x0, 0x2, 0x9D, 0xD9, 0x0, 0x2, 0x9D, 0xE9, 0x0, 0x2, 0x9E, 0x1, 0x0, 0x2, 0x9E, 0x17, 0x0, 0x2, 0x9E, 0x2F, 0x0, 0x2, 0x9E, 0x3F, 0x0, 0x2, 0x9E, 0x55, 0x0, 0x2, 0x9E, 0x6D, 0x0, 0x2, 0x9E, 0x85, 0x0, 0x2, 0x9E, 0x9D, 0x0, 0x2, 0x9E, 0xB3, 0x0, 0x2, 0x9E, 0xCB, 0x0, 0x2, 0x9E, 0xE1, 0x0, 0x2, 0x9E, 0xF9, 0x0, 0x2, 0x9F, 0x11, 0x0, 0x2, 0x9F, 0x29, 0x0, 0x2, 0x9F, 0x41, 0x0, 0x2, 0x9F, 0x51, 0x0, 0x2, 0x9F, 0x61, 0x0, 0x2, 0x9F, 0x71, 0x0, 0x2, 0x9F, 0x89, 0x0, 0x2, 0x9F, 0x9F, 0x0, 0x2, 0x9F, 0xB7, 0x0, 0x2, 0x9F, 0xCD, 0x0, 0x2, 0x9F, 0xE5, 0x0, 0x2, 0x9F, 0xFB, 0x0, 0x2, 0xA0, 0x13, 0x0, 0x2, 0xA0, 0x29, 0x0, 0x2, 0xA0, 0x41, 0x0, 0x2, 0xA0, 0x59, 0x0, 0x2, 0xA0, 0x71, 0x0, 0x2, 0xA0, 0x87, 0x0, 0x2, 0xA0, 0x9F, 0x0, 0x2, 0xA0, 0xB7, 0x0, 0x2, 0xA0, 0xC7, 0x0, 0x2, 0xA0, 0xDF, 0x0, 0x2, 0xA0, 0xF7, 0x0, 0x2, 0xA1, 0xF, 0x0, 0x2, 0xA1, 0x27, 0x0, 0x2, 0xA1, 0x3F, 0x0, 0x2, 0xA1, 0x55, 0x0, 0x2, 0xA1, 0x6D, 0x0, 0x2, 0xA1, 0x83, 0x0, 0x2, 0xA1, 0x9B, 0x0, 0x2, 0xA1, 0xB1, 0x0, 0x2, 0xA1, 0xC9, 0x0, 0x2, 0xA1, 0xDF, 0x0, 0x2, 0xA1, 0xFF, 0x0, 0x2, 0xA2, 0x1D, 0x0, 0x2, 0xA2, 0x35, 0x0, 0x2, 0xA2, 0x4B, 0x0, 0x2, 0xA2, 0x63, 0x0, 0x2, 0xA2, 0x79, 0x0, 0x2, 0xA2, 0x91, 0x0, 0x2, 0xA2, 0xA7, 0x0, 0x2, 0xA2, 0xBF, 0x0, 0x2, 0xA2, 0xD5, 0x0, 0x2, 0xA2, 0xF5, 0x0, 0x2, 0xA3, 0x13, 0x0, 0x2, 0xA3, 0x2B, 0x0, 0x2, 0xA3, 0x43, 0x0, 0x2, 0xA3, 0x5B, 0x0, 0x2, 0xA3, 0x73, 0x0, 0x2, 0xA3, 0x8B, 0x0, 0x2, 0xA3, 0xA1, 0x0, 0x2, 0xA3, 0xB9, 0x0, 0x2, 0xA3, 0xCF, 0x0, 0x2, 0xA3, 0xE7, 0x0, 0x2, 0xA3, 0xFD, 0x0, 0x2, 0xA4, 0x15, 0x0, 0x2, 0xA4, 0x2B, 0x0, 0x2, 0xA4, 0x43, 0x0, 0x2, 0xA4, 0x59, 0x0, 0x2, 0xA4, 0x79, 0x0, 0x2, 0xA4, 0x97, 0x0, 0x2, 0xA4, 0xAF, 0x0, 0x2, 0xA4, 0xC7, 0x0, 0x2, 0xA4, 0xDF, 0x0, 0x2, 0xA4, 0xF7, 0x0, 0x2, 0xA5, 0xF, 0x0, 0x2, 0xA5, 0x27, 0x0, 0x2, 0xA5, 0x3F, 0x0, 0x2, 0xA5, 0x57, 0x0, 0x2, 0xA5, 0x6F, 0x0, 0x2, 0xA5, 0x85, 0x0, 0x2, 0xA5, 0x9D, 0x0, 0x2, 0xA5, 0xB3, 0x0, 0x2, 0xA5, 0xCB, 0x0, 0x2, 0xA5, 0xE1, 0x0, 0x2, 0xA5, 0xF9, 0x0, 0x2, 0xA6, 0xF, 0x0, 0x2, 0xA6, 0x2F, 0x0, 0x2, 0xA6, 0x4D, 0x0, 0x2, 0xA6, 0x65, 0x0, 0x2, 0xA6, 0x7D, 0x0, 0x2, 0xA6, 0x95, 0x0, 0x2, 0xA6, 0xAD, 0x0, 0x2, 0xA6, 0xC5, 0x0, 0x2, 0xA6, 0xDD, 0x0, 0x2, 0xA6, 0xF5, 0x0, 0x2, 0xA7, 0xB, 0x0, 0x2, 0xA7, 0x23, 0x0, 0x2, 0xA7, 0x3B, 0x0, 0x2, 0xA7, 0x53, 0x0, 0x2, 0xA7, 0x6B, 0x0, 0x2, 0xA7, 0x83, 0x0, 0x2, 0xA7, 0x9B, 0x0, 0x2, 0xA7, 0xB3, 0x0, 0x2, 0xA7, 0xCB, 0x0, 0x2, 0xA7, 0xE3, 0x0, 0x2, 0xA7, 0xFB, 0x0, 0x2, 0xA8, 0x13, 0x0, 0x2, 0xA8, 0x2B, 0x0, 0x2, 0xA8, 0x43, 0x0, 0x2, 0xA8, 0x59, 0x0, 0x2, 0xA8, 0x71, 0x0, 0x2, 0xA8, 0x89, 0x0, 0x2, 0xA8, 0xA1, 0x0, 0x2, 0xA8, 0xB9, 0x0, 0x2, 0xA8, 0xD1, 0x0, 0x2, 0xA8, 0xE9, 0x0, 0x2, 0xA9, 0x1, 0x0, 0x2, 0xA9, 0x17, 0x0, 0x2, 0xA9, 0x37, 0x0, 0x2, 0xA9, 0x4F, 0x0, 0x2, 0xA9, 0x67, 0x0, 0x2, 0xA9, 0x7F, 0x0, 0x2, 0xA9, 0x97, 0x0, 0x2, 0xA9, 0xAF, 0x0, 0x2, 0xA9, 0xC7, 0x0, 0x2, 0xA9, 0xDF, 0x0, 0x2, 0xA9, 0xF7, 0x0, 0x2, 0xAA, 0x7, 0x0, 0x2, 0xAA, 0x5F, 0x0, 0x2, 0xAA, 0xB7, 0x0, 0x2, 0xAA, 0xEA, 0x0, 0x2, 0xAB, 0x1E, 0x0, 0x2, 0xAB, 0x66, 0x0, 0x2, 0xAB, 0xAF, 0x0, 0x2, 0xAB, 0xEE, 0x0, 0x2, 0xAC, 0x28, 0x0, 0x2, 0xAC, 0x76, 0x0, 0x2, 0xAC, 0xC1, 0x0, 0x2, 0xAC, 0xD1, 0x0, 0x2, 0xAC, 0xE9, 0x0, 0x2, 0xAC, 0xF9, 0x0, 0x2, 0xAD, 0x9, 0x0, 0x2, 0xAD, 0x19, 0x0, 0x2, 0xAD, 0x29, 0x0, 0x2, 0xAD, 0x39, 0x0, 0x2, 0xAD, 0x49, 0x0, 0x2, 0xAD, 0x59, 0x0, 0x2, 0xAD, 0x69, 0x0, 0x2, 0xAD, 0x79, 0x0, 0x2, 0xAD, 0x89, 0x0, 0x2, 0xAD, 0xBB, 0x0, 0x2, 0xAD, 0xCB, 0x0, 0x2, 0xAD, 0xE3, 0x0, 0x2, 0xAD, 0xFB, 0x0, 0x2, 0xAE, 0x13, 0x0, 0x2, 0xAE, 0x2B, 0x0, 0x2, 0xAE, 0x43, 0x0, 0x2, 0xAE, 0x5B, 0x0, 0x2, 0xAE, 0x73, 0x0, 0x2, 0xAE, 0x89, 0x0, 0x2, 0xAE, 0xA1, 0x0, 0x2, 0xAE, 0xB9, 0x0, 0x2, 0xAE, 0xD1, 0x0, 0x2, 0xAE, 0xE7, 0x0, 0x2, 0xAE, 0xFF, 0x0, 0x2, 0xAF, 0x15, 0x0, 0x2, 0xAF, 0x2D, 0x0, 0x2, 0xAF, 0x45, 0x0, 0x2, 0xAF, 0x5D, 0x0, 0x2, 0xAF, 0x75, 0x0, 0x2, 0xAF, 0x8D, 0x0, 0x2, 0xAF, 0xA5, 0x0, 0x2, 0xAF, 0xBD, 0x0, 0x2, 0xAF, 0xD5, 0x0, 0x2, 0xAF, 0xE5, 0x0, 0x2, 0xAF, 0xFD, 0x0, 0x2, 0xB0, 0x15, 0x0, 0x2, 0xB0, 0x2D, 0x0, 0x2, 0xB0, 0x45, 0x0, 0x2, 0xB0, 0x5D, 0x0, 0x2, 0xB0, 0x75, 0x0, 0x2, 0xB0, 0x8D, 0x0, 0x2, 0xB0, 0xA3, 0x0, 0x2, 0xB0, 0xBB, 0x0, 0x2, 0xB0, 0xD3, 0x0, 0x2, 0xB0, 0xEB, 0x0, 0x2, 0xB1, 0x3, 0x0, 0x2, 0xB1, 0x23, 0x0, 0x2, 0xB1, 0x41, 0x0, 0x2, 0xB1, 0x59, 0x0, 0x2, 0xB1, 0x71, 0x0, 0x2, 0xB1, 0x89, 0x0, 0x2, 0xB1, 0xA1, 0x0, 0x2, 0xB1, 0xB9, 0x0, 0x2, 0xB1, 0xD1, 0x0, 0x2, 0xB1, 0xE9, 0x0, 0x2, 0xB2, 0x1, 0x0, 0x2, 0xB2, 0x19, 0x0, 0x2, 0xB2, 0x31, 0x0, 0x2, 0xB2, 0x49, 0x0, 0x2, 0xB2, 0x61, 0x0, 0x2, 0xB2, 0x79, 0x0, 0x2, 0xB2, 0x91, 0x0, 0x2, 0xB2, 0xA9, 0x0, 0x2, 0xB2, 0xC1, 0x0, 0x2, 0xB2, 0xD9, 0x0, 0x2, 0xB2, 0xF1, 0x0, 0x2, 0xB3, 0x9, 0x0, 0x2, 0xB3, 0x21, 0x0, 0x2, 0xB3, 0x39, 0x0, 0x2, 0xB3, 0x51, 0x0, 0x2, 0xB3, 0x69, 0x0, 0x2, 0xB3, 0x81, 0x0, 0x2, 0xB3, 0x99, 0x0, 0x2, 0xB3, 0xB1, 0x0, 0x2, 0xB3, 0xC9, 0x0, 0x2, 0xB3, 0xE1, 0x0, 0x2, 0xB3, 0xF9, 0x0, 0x2, 0xB4, 0x11, 0x0, 0x2, 0xB4, 0x29, 0x0, 0x2, 0xB4, 0x41, 0x0, 0x2, 0xB4, 0x59, 0x0, 0x2, 0xB4, 0x71, 0x0, 0x2, 0xB4, 0x89, 0x0, 0x2, 0xB4, 0xA1, 0x0, 0x2, 0xB4, 0xB9, 0x0, 0x2, 0xB4, 0xD1, 0x0, 0x2, 0xB4, 0xE9, 0x0, 0x2, 0xB5, 0x1, 0x0, 0x2, 0xB5, 0x19, 0x0, 0x2, 0xB5, 0x31, 0x0, 0x2, 0xB5, 0x49, 0x0, 0x2, 0xB5, 0x61, 0x0, 0x2, 0xB5, 0x79, 0x0, 0x2, 0xB5, 0x91, 0x0, 0x2, 0xB5, 0xA7, 0x0, 0x2, 0xB5, 0xB7, 0x0, 0x2, 0xB5, 0xC7, 0x0, 0x2, 0xB5, 0xD7, 0x0, 0x2, 0xB5, 0xE7, 0x0, 0x2, 0xB5, 0xFF, 0x0, 0x2, 0xB6, 0x17, 0x0, 0x2, 0xB6, 0x27, 0x0, 0x2, 0xB6, 0x37, 0x0, 0x2, 0xB6, 0x47, 0x0, 0x2, 0xB6, 0x57, 0x0, 0x2, 0xB6, 0x67, 0x0, 0x2, 0xB6, 0x77, 0x0, 0x2, 0xB6, 0x87, 0x0, 0x2, 0xB6, 0x97, 0x0, 0x2, 0xB6, 0xA7, 0x0, 0x2, 0xB6, 0xB7, 0x0, 0x2, 0xB6, 0xC7, 0x0, 0x2, 0xB6, 0xDF, 0x0, 0x2, 0xB6, 0xF7, 0x0, 0x2, 0xB7, 0xF, 0x0, 0x2, 0xB7, 0x27, 0x0, 0x2, 0xB7, 0x3F, 0x0, 0x2, 0xB7, 0x57, 0x0, 0x2, 0xB7, 0x77, 0x0, 0x2, 0xB7, 0x97, 0x0, 0x2, 0xB7, 0xAF, 0x0, 0x2, 0xB7, 0xC7, 0x0, 0x2, 0xB7, 0xDF, 0x0, 0x2, 0xB7, 0xF7, 0x0, 0x2, 0xB8, 0xF, 0x0, 0x2, 0xB8, 0x27, 0x0, 0x2, 0xB8, 0x3F, 0x0, 0x2, 0xB8, 0x57, 0x0, 0x2, 0xB8, 0x6F, 0x0, 0x2, 0xB8, 0x87, 0x0, 0x2, 0xB8, 0x9F, 0x0, 0x2, 0xB8, 0xB7, 0x0, 0x2, 0xB8, 0xCF, 0x0, 0x2, 0xB8, 0xE7, 0x0, 0x2, 0xB8, 0xFF, 0x0, 0x2, 0xB9, 0x17, 0x0, 0x2, 0xB9, 0x2F, 0x0, 0x2, 0xB9, 0x47, 0x0, 0x2, 0xB9, 0x67, 0x0, 0x2, 0xB9, 0x85, 0x0, 0x2, 0xB9, 0x9D, 0x0, 0x2, 0xB9, 0xB5, 0x0, 0x2, 0xB9, 0xCD, 0x0, 0x2, 0xB9, 0xE3, 0x0, 0x2, 0xB9, 0xFB, 0x0, 0x2, 0xBA, 0x13, 0x0, 0x2, 0xBA, 0x2B, 0x0, 0x2, 0xBA, 0x43, 0x0, 0x2, 0xBA, 0x5B, 0x0, 0x2, 0xBA, 0x73, 0x0, 0x2, 0xBA, 0x8B, 0x0, 0x2, 0xBA, 0xA3, 0x0, 0x2, 0xBA, 0xBB, 0x0, 0x2, 0xBA, 0xD3, 0x0, 0x2, 0xBA, 0xEB, 0x0, 0x2, 0xBB, 0x3, 0x0, 0x2, 0xBB, 0x1B, 0x0, 0x2, 0xBB, 0x33, 0x0, 0x2, 0xBB, 0x4B, 0x0, 0x2, 0xBB, 0x63, 0x0, 0x2, 0xBB, 0x83, 0x0, 0x2, 0xBB, 0xA3, 0x0, 0x2, 0xBB, 0xBB, 0x0, 0x2, 0xBB, 0xD3, 0x0, 0x2, 0xBB, 0xEB, 0x0, 0x2, 0xBC, 0x3, 0x0, 0x2, 0xBC, 0x1B, 0x0, 0x2, 0xBC, 0x33, 0x0, 0x2, 0xBC, 0x4B, 0x0, 0x2, 0xBC, 0x63, 0x0, 0x2, 0xBC, 0x7B, 0x0, 0x2, 0xBC, 0x93, 0x0, 0x2, 0xBC, 0xAB, 0x0, 0x2, 0xBC, 0xC3, 0x0, 0x2, 0xBC, 0xDB, 0x0, 0x2, 0xBC, 0xF3, 0x0, 0x2, 0xBD, 0xB, 0x0, 0x2, 0xBD, 0x23, 0x0, 0x2, 0xBD, 0x3B, 0x0, 0x2, 0xBD, 0x53, 0x0, 0x2, 0xBD, 0x6B, 0x0, 0x2, 0xBD, 0x83, 0x0, 0x2, 0xBD, 0x9B, 0x0, 0x2, 0xBD, 0xB3, 0x0, 0x2, 0xBD, 0xCB, 0x0, 0x2, 0xBD, 0xE3, 0x0, 0x2, 0xBD, 0xFB, 0x0, 0x2, 0xBE, 0x13, 0x0, 0x2, 0xBE, 0x2B, 0x0, 0x2, 0xBE, 0x43, 0x0, 0x2, 0xBE, 0x5B, 0x0, 0x2, 0xBE, 0x73, 0x0, 0x2, 0xBE, 0x8B, 0x0, 0x2, 0xBE, 0xA3, 0x0, 0x2, 0xBE, 0xC3, 0x0, 0x2, 0xBE, 0xE1, 0x0, 0x2, 0xBE, 0xF9, 0x0, 0x2, 0xBF, 0x11, 0x0, 0x2, 0xBF, 0x29, 0x0, 0x2, 0xBF, 0x41, 0x0, 0x2, 0xBF, 0x59, 0x0, 0x2, 0xBF, 0x71, 0x0, 0x2, 0xBF, 0x89, 0x0, 0x2, 0xBF, 0xA1, 0x0, 0x2, 0xBF, 0xB9, 0x0, 0x2, 0xBF, 0xD1, 0x0, 0x2, 0xBF, 0xF1, 0x0, 0x2, 0xC0, 0x11, 0x0, 0x2, 0xC0, 0x29, 0x0, 0x2, 0xC0, 0x41, 0x0, 0x2, 0xC0, 0x59, 0x0, 0x2, 0xC0, 0x71, 0x0, 0x2, 0xC0, 0x89, 0x0, 0x2, 0xC0, 0xA1, 0x0, 0x2, 0xC0, 0xB9, 0x0, 0x2, 0xC0, 0xD1, 0x0, 0x2, 0xC0, 0xE9, 0x0, 0x2, 0xC1, 0x1, 0x0, 0x2, 0xC1, 0x19, 0x0, 0x2, 0xC1, 0x31, 0x0, 0x2, 0xC1, 0x49, 0x0, 0x2, 0xC1, 0x61, 0x0, 0x2, 0xC1, 0x79, 0x0, 0x2, 0xC1, 0x91, 0x0, 0x2, 0xC1, 0xA9, 0x0, 0x2, 0xC1, 0xC1, 0x0, 0x2, 0xC1, 0xD9, 0x0, 0x2, 0xC1, 0xEF, 0x0, 0x2, 0xC2, 0x7, 0x0, 0x2, 0xC2, 0x1F, 0x0, 0x2, 0xC2, 0x37, 0x0, 0x2, 0xC2, 0x4F, 0x0, 0x2, 0xC2, 0x67, 0x0, 0x2, 0xC2, 0x7F, 0x0, 0x2, 0xC2, 0x97, 0x0, 0x2, 0xC2, 0xAF, 0x0, 0x2, 0xC2, 0xC7, 0x0, 0x2, 0xC2, 0xDD, 0x0, 0x2, 0xC2, 0xF5, 0x0, 0x2, 0xC3, 0xD, 0x0, 0x2, 0xC3, 0x25, 0x0, 0x2, 0xC3, 0x3B, 0x0, 0x2, 0xC3, 0x53, 0x0, 0x2, 0xC3, 0x6B, 0x0, 0x2, 0xC3, 0x83, 0x0, 0x2, 0xC3, 0x9B, 0x0, 0x2, 0xC3, 0xB3, 0x0, 0x2, 0xC3, 0xCB, 0x0, 0x2, 0xC3, 0xE3, 0x0, 0x2, 0xC3, 0xFB, 0x0, 0x2, 0xC4, 0x13, 0x0, 0x2, 0xC4, 0x2B, 0x0, 0x2, 0xC4, 0x43, 0x0, 0x2, 0xC4, 0x5B, 0x0, 0x2, 0xC4, 0x73, 0x0, 0x2, 0xC4, 0x8B, 0x0, 0x2, 0xC4, 0xA3, 0x0, 0x2, 0xC4, 0xBB, 0x0, 0x2, 0xC4, 0xD3, 0x0, 0x2, 0xC4, 0xE9, 0x0, 0x2, 0xC4, 0xFF, 0x0, 0x2, 0xC5, 0x17, 0x0, 0x2, 0xC5, 0x2F, 0x0, 0x2, 0xC5, 0x47, 0x0, 0x2, 0xC5, 0x5F, 0x0, 0x2, 0xC5, 0x77, 0x0, 0x2, 0xC5, 0x8F, 0x0, 0x2, 0xC5, 0xA7, 0x0, 0x2, 0xC5, 0xBF, 0x0, 0x2, 0xC5, 0xD7, 0x0, 0x2, 0xC5, 0xEF, 0x0, 0x2, 0xC6, 0x7, 0x0, 0x2, 0xC6, 0x1F, 0x0, 0x2, 0xC6, 0x37, 0x0, 0x2, 0xC6, 0x4F, 0x0, 0x2, 0xC6, 0x67, 0x0, 0x2, 0xC6, 0x7F, 0x0, 0x2, 0xC6, 0x97, 0x0, 0x2, 0xC6, 0xAF, 0x0, 0x2, 0xC6, 0xC7, 0x0, 0x2, 0xC6, 0xDF, 0x0, 0x2, 0xC6, 0xF7, 0x0, 0x2, 0xC7, 0xF, 0x0, 0x2, 0xC7, 0x27, 0x0, 0x2, 0xC7, 0x3F, 0x0, 0x2, 0xC7, 0x57, 0x0, 0x2, 0xC7, 0x6F, 0x0, 0x2, 0xC7, 0x87, 0x0, 0x2, 0xC7, 0x9F, 0x0, 0x2, 0xC7, 0xB7, 0x0, 0x2, 0xC7, 0xCF, 0x0, 0x2, 0xC7, 0xE7, 0x0, 0x2, 0xC7, 0xFF, 0x0, 0x2, 0xC8, 0x17, 0x0, 0x2, 0xC8, 0x2F, 0x0, 0x2, 0xC8, 0x45, 0x0, 0x2, 0xC8, 0x5B, 0x0, 0x2, 0xC8, 0x71, 0x0, 0x2, 0xC8, 0x87, 0x0, 0x2, 0xC8, 0x9D, 0x0, 0x2, 0xC8, 0xB3, 0x0, 0x2, 0xC8, 0xC9, 0x0, 0x2, 0xC8, 0xDF, 0x0, 0x2, 0xC8, 0xF7, 0x0, 0x2, 0xC9, 0xF, 0x0, 0x2, 0xC9, 0x27, 0x0, 0x2, 0xC9, 0x3F, 0x0, 0x2, 0xC9, 0x57, 0x0, 0x2, 0xC9, 0x6F, 0x0, 0x2, 0xC9, 0x87, 0x0, 0x2, 0xC9, 0x9F, 0x0, 0x2, 0xC9, 0xB7, 0x0, 0x2, 0xC9, 0xCF, 0x0, 0x2, 0xC9, 0xE7, 0x0, 0x2, 0xC9, 0xFF, 0x0, 0x2, 0xCA, 0x17, 0x0, 0x2, 0xCA, 0x2F, 0x0, 0x2, 0xCA, 0x47, 0x0, 0x2, 0xCA, 0x5F, 0x0, 0x2, 0xCA, 0x77, 0x0, 0x2, 0xCA, 0x8F, 0x0, 0x2, 0xCA, 0xA7, 0x0, 0x2, 0xCA, 0xBF, 0x0, 0x2, 0xCA, 0xD7, 0x0, 0x2, 0xCA, 0xEF, 0x0, 0x2, 0xCB, 0x7, 0x0, 0x2, 0xCB, 0x1D, 0x0, 0x2, 0xCB, 0x35, 0x0, 0x2, 0xCB, 0x4D, 0x0, 0x2, 0xCB, 0x65, 0x0, 0x2, 0xCB, 0x7D, 0x0, 0x2, 0xCB, 0x95, 0x0, 0x2, 0xCB, 0xAD, 0x0, 0x2, 0xCB, 0xC5, 0x0, 0x2, 0xCB, 0xDD, 0x0, 0x2, 0xCB, 0xF5, 0x0, 0x2, 0xCC, 0xD, 0x0, 0x2, 0xCC, 0x25, 0x0, 0x2, 0xCC, 0x3D, 0x0, 0x2, 0xCC, 0x55, 0x0, 0x2, 0xCC, 0x6D, 0x0, 0x2, 0xCC, 0x85, 0x0, 0x2, 0xCC, 0x9D, 0x0, 0x2, 0xCC, 0xB5, 0x0, 0x2, 0xCC, 0xCD, 0x0, 0x2, 0xCC, 0xE5, 0x0, 0x2, 0xCC, 0xFD, 0x0, 0x2, 0xCD, 0x15, 0x0, 0x2, 0xCD, 0x2D, 0x0, 0x2, 0xCD, 0x45, 0x0, 0x2, 0xCD, 0x5D, 0x0, 0x2, 0xCD, 0x75, 0x0, 0x2, 0xCD, 0x8D, 0x0, 0x2, 0xCD, 0xA5, 0x0, 0x2, 0xCD, 0xBD, 0x0, 0x2, 0xCD, 0xD5, 0x0, 0x2, 0xCD, 0xED, 0x0, 0x2, 0xCE, 0x3, 0x0, 0x2, 0xCE, 0x1B, 0x0, 0x2, 0xCE, 0x33, 0x0, 0x2, 0xCE, 0x4B, 0x0, 0x2, 0xCE, 0x63, 0x0, 0x2, 0xCE, 0x7B, 0x0, 0x2, 0xCE, 0x93, 0x0, 0x2, 0xCE, 0xAB, 0x0, 0x2, 0xCE, 0xCB, 0x0, 0x2, 0xCE, 0xEB, 0x0, 0x2, 0xCF, 0xB, 0x0, 0x2, 0xCF, 0x2B, 0x0, 0x2, 0xCF, 0x4B, 0x0, 0x2, 0xCF, 0x6B, 0x0, 0x2, 0xCF, 0x8B, 0x0, 0x2, 0xCF, 0xAB, 0x0, 0x2, 0xCF, 0xC9, 0x0, 0x2, 0xCF, 0xE7, 0x0, 0x2, 0xD0, 0x7, 0x0, 0x2, 0xD0, 0x27, 0x0, 0x2, 0xD0, 0x47, 0x0, 0x2, 0xD0, 0x67, 0x0, 0x2, 0xD0, 0x87, 0x0, 0x2, 0xD0, 0xA7, 0x0, 0x2, 0xD0, 0xC5, 0x0, 0x2, 0xD0, 0xE3, 0x0, 0x2, 0xD1, 0x1, 0x0, 0x2, 0xD1, 0x1F, 0x0, 0x2, 0xD1, 0x3D, 0x0, 0x2, 0xD1, 0x5B, 0x0, 0x2, 0xD1, 0x79, 0x0, 0x2, 0xD1, 0x97, 0x0, 0x2, 0xD1, 0xB7, 0x0, 0x2, 0xD1, 0xD7, 0x0, 0x2, 0xD1, 0xF7, 0x0, 0x2, 0xD2, 0x17, 0x0, 0x2, 0xD2, 0x37, 0x0, 0x2, 0xD2, 0x57, 0x0, 0x2, 0xD2, 0x77, 0x0, 0x2, 0xD2, 0x97, 0x0, 0x2, 0xD2, 0xB7, 0x0, 0x2, 0xD2, 0xD7, 0x0, 0x2, 0xD2, 0xF7, 0x0, 0x2, 0xD3, 0x17, 0x0, 0x2, 0xD3, 0x37, 0x0, 0x2, 0xD3, 0x57, 0x0, 0x2, 0xD3, 0x77, 0x0, 0x2, 0xD3, 0x97, 0x0, 0x2, 0xD3, 0xB7, 0x0, 0x2, 0xD3, 0xD7, 0x0, 0x2, 0xD3, 0xF7, 0x0, 0x2, 0xD4, 0x17, 0x0, 0x2, 0xD4, 0x37, 0x0, 0x2, 0xD4, 0x57, 0x0, 0x2, 0xD4, 0x77, 0x0, 0x2, 0xD4, 0x97, 0x0, 0x2, 0xD4, 0xAF, 0x0, 0x2, 0xD4, 0xC7, 0x0, 0x2, 0xD4, 0xE7, 0x0, 0x2, 0xD4, 0xFF, 0x0, 0x2, 0xD5, 0x1F, 0x0, 0x2, 0xD5, 0x37, 0x0, 0x2, 0xD5, 0x57, 0x0, 0x2, 0xD5, 0x6F, 0x0, 0x2, 0xD5, 0x87, 0x0, 0x2, 0xD5, 0x9F, 0x0, 0x2, 0xD5, 0xB5, 0x0, 0x2, 0xD5, 0xCD, 0x0, 0x2, 0xD5, 0xEB, 0x0, 0x2, 0xD6, 0x1, 0x0, 0x2, 0xD6, 0x1F, 0x0, 0x2, 0xD6, 0x37, 0x0, 0x2, 0xD6, 0x55, 0x0, 0x2, 0xD6, 0x6D, 0x0, 0x2, 0xD6, 0x85, 0x0, 0x2, 0xD6, 0x9D, 0x0, 0x2, 0xD6, 0xB5, 0x0, 0x2, 0xD6, 0xCD, 0x0, 0x2, 0xD6, 0xE5, 0x0, 0x2, 0xD6, 0xFD, 0x0, 0x2, 0xD7, 0x15, 0x0, 0x2, 0xD7, 0x2D, 0x0, 0x2, 0xD7, 0x43, 0x0, 0x2, 0xD7, 0x5B, 0x0, 0x2, 0xD7, 0x73, 0x0, 0x2, 0xD7, 0x8B, 0x0, 0x2, 0xD7, 0xA3, 0x0, 0x2, 0xD7, 0xBB, 0x0, 0x2, 0xD7, 0xD1, 0x0, 0x2, 0xD7, 0xE7, 0x0, 0x2, 0xD7, 0xFD, 0x0, 0x2, 0xD8, 0x13, 0x0, 0x2, 0xD8, 0x2B, 0x0, 0x2, 0xD8, 0x43, 0x0, 0x2, 0xD8, 0x5B, 0x0, 0x2, 0xD8, 0x71, 0x0, 0x2, 0xD8, 0x89, 0x0, 0x2, 0xD8, 0xA1, 0x0, 0x2, 0xD8, 0xB9, 0x0, 0x2, 0xD8, 0xD1, 0x0, 0x2, 0xD8, 0xE9, 0x0, 0x2, 0xD9, 0x9, 0x0, 0x2, 0xD9, 0x21, 0x0, 0x2, 0xD9, 0x41, 0x0, 0x2, 0xD9, 0x59, 0x0, 0x2, 0xD9, 0x79, 0x0, 0x2, 0xD9, 0x91, 0x0, 0x2, 0xD9, 0xA9, 0x0, 0x2, 0xD9, 0xC1, 0x0, 0x2, 0xD9, 0xD9, 0x0, 0x2, 0xD9, 0xF1, 0x0, 0x2, 0xD9, 0xF1, 0x0, 0x2, 0xDA, 0x9, 0x0, 0x2, 0xDA, 0x21, 0x0, 0x2, 0xDA, 0x39, 0x0, 0x2, 0xDA, 0x39, 0x0, 0x2, 0xDA, 0x49, 0x0, 0x2, 0xDA, 0x61, 0x0, 0x2, 0xDA, 0x79, 0x0, 0x2, 0xDA, 0x91, 0x0, 0x2, 0xDA, 0xA9, 0x0, 0x2, 0xDA, 0xC1, 0x0, 0x2, 0xDA, 0xD9, 0x0, 0x2, 0xDA, 0xF1, 0x0, 0x2, 0xDB, 0x1, 0x0, 0x2, 0xDB, 0x11, 0x0, 0x2, 0xDB, 0x21, 0x0, 0x2, 0xDB, 0x31, 0x0, 0x2, 0xDB, 0x41, 0x0, 0x2, 0xDB, 0x51, 0x0, 0x2, 0xDB, 0x61, 0x0, 0x2, 0xDB, 0x71, 0x0, 0x2, 0xDB, 0x81, 0x0, 0x2, 0xDB, 0x91, 0x0, 0x2, 0xDB, 0xA1, 0x0, 0x2, 0xDB, 0xB1, 0x0, 0x2, 0xDB, 0xC1, 0x0, 0x2, 0xDB, 0xD1, 0x0, 0x2, 0xDB, 0xE9, 0x0, 0x2, 0xDB, 0xFF, 0x0, 0x2, 0xDC, 0x15, 0x0, 0x2, 0xDC, 0x2D, 0x0, 0x2, 0xDC, 0x3D, 0x0, 0x2, 0xDC, 0x4D, 0x0, 0x2, 0xDC, 0x65, 0x0, 0x2, 0xDC, 0x75, 0x0, 0x2, 0xDC, 0x8D, 0x0, 0x2, 0xDC, 0xA3, 0x0, 0x2, 0xDC, 0xB3, 0x0, 0x2, 0xDC, 0xC3, 0x0, 0x2, 0xDC, 0xD3, 0x0, 0x2, 0xDC, 0xE3, 0x0, 0x2, 0xDC, 0xFB, 0x0, 0x2, 0xDD, 0xB, 0x0, 0x2, 0xDD, 0x1B, 0x0, 0x2, 0xDD, 0x2B, 0x0, 0x2, 0xDD, 0x3B, 0x0, 0x2, 0xDD, 0x4B, 0x0, 0x2, 0xDD, 0x5B, 0x0, 0x2, 0xDD, 0x6B, 0x0, 0x2, 0xDD, 0x7B, 0x0, 0x2, 0xDD, 0xF2, 0x0, 0x2, 0xDE, 0x2C, 0x0, 0x2, 0xDE, 0x8F, 0x0, 0x2, 0xDE, 0x9F, 0x0, 0x2, 0xDE, 0xB7, 0x0, 0x2, 0xDE, 0xCF, 0x0, 0x2, 0xDE, 0xE5, 0x0, 0x2, 0xDE, 0xF5, 0x0, 0x2, 0xDF, 0x5, 0x0, 0x2, 0xDF, 0x1D, 0x0, 0x2, 0xDF, 0x35, 0x0, 0x2, 0xDF, 0x4D, 0x0, 0x2, 0xDF, 0x65, 0x0, 0x2, 0xDF, 0x7D, 0x0, 0x2, 0xDF, 0x95, 0x0, 0x2, 0xDF, 0xAD, 0x0, 0x2, 0xDF, 0xC5, 0x0, 0x2, 0xDF, 0xDD, 0x0, 0x2, 0xDF, 0xF5, 0x0, 0x2, 0xE0, 0xD, 0x0, 0x2, 0xE0, 0x25, 0x0, 0x2, 0xE0, 0x3D, 0x0, 0x2, 0xE0, 0x55, 0x0, 0x2, 0xE0, 0x6D, 0x0, 0x2, 0xE0, 0x85, 0x0, 0x2, 0xE0, 0x9D, 0x0, 0x2, 0xE0, 0xB5, 0x0, 0x2, 0xE0, 0xCD, 0x0, 0x2, 0xE0, 0xE5, 0x0, 0x2, 0xE0, 0xFD, 0x0, 0x2, 0xE1, 0x15, 0x0, 0x2, 0xE1, 0x2D, 0x0, 0x2, 0xE1, 0x45, 0x0, 0x2, 0xE1, 0x5D, 0x0, 0x2, 0xE1, 0x75, 0x0, 0x2, 0xE1, 0x8D, 0x0, 0x2, 0xE1, 0xA5, 0x0, 0x2, 0xE1, 0xBD, 0x0, 0x2, 0xE1, 0xD5, 0x0, 0x2, 0xE1, 0xED, 0x0, 0x2, 0xE2, 0x5, 0x0, 0x2, 0xE2, 0x1D, 0x0, 0x2, 0xE2, 0x35, 0x0, 0x2, 0xE2, 0x4D, 0x0, 0x2, 0xE2, 0x65, 0x0, 0x2, 0xE2, 0x7D, 0x0, 0x2, 0xE2, 0x95, 0x0, 0x2, 0xE2, 0xAD, 0x0, 0x2, 0xE2, 0xC5, 0x0, 0x2, 0xE2, 0xDD, 0x0, 0x2, 0xE2, 0xF5, 0x0, 0x2, 0xE3, 0xD, 0x0, 0x2, 0xE3, 0x25, 0x0, 0x2, 0xE3, 0x3D, 0x0, 0x2, 0xE3, 0x55, 0x0, 0x2, 0xE3, 0x6D, 0x0, 0x2, 0xE3, 0x85, 0x0, 0x2, 0xE3, 0x9D, 0x0, 0x2, 0xE3, 0xB5, 0x0, 0x2, 0xE3, 0xCD, 0x0, 0x5, 0x0, 0x64, 0x0, 0x0, 0x3, 0x28, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x5, 0x0, 0x8, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x1, 0x1, 0x21, 0x1, 0x11, 0x9, 0x6, 0x7, 0x11, 0x21, 0x11, 0x1, 0xC4, 0x1, 0x1, 0xFD, 0xFD, 0x2, 0x30, 0xFE, 0xEF, 0xFE, 0xB9, 0x1, 0xD, 0xFE, 0xF3, 0x2, 0x2B, 0xFE, 0xFF, 0xFE, 0xFE, 0x5E, 0x2, 0xC4, 0x3, 0x1C, 0x2, 0x5E, 0xFA, 0xDA, 0x5, 0x8, 0xFD, 0x7C, 0xFD, 0x88, 0x2, 0x78, 0x2, 0x78, 0xFA, 0xE6, 0x2, 0x5E, 0xFD, 0xA2, 0x36, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x90, 0xFF, 0xF2, 0x1, 0xA3, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x3, 0x23, 0x3, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x97, 0x18, 0xD1, 0x18, 0x6, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xFB, 0xFD, 0x4, 0x3, 0xFA, 0xC4, 0x38, 0x4B, 0x4B, 0x38, 0x37, 0x4B, 0x4B, 0x0, 0x2, 0x0, 0x65, 0x3, 0xF5, 0x2, 0x41, 0x6, 0x0, 0x0, 0x4, 0x0, 0x9, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x15, 0x1, 0x23, 0x11, 0x33, 0x15, 0x2, 0x1D, 0x8B, 0xAF, 0xFE, 0xAF, 0x8B, 0xAF, 0x3, 0xF5, 0x2, 0xB, 0x88, 0xFE, 0x7D, 0x2, 0xB, 0x88, 0x0, 0x2, 0x0, 0x61, 0x0, 0x0, 0x4, 0xBD, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x13, 0x13, 0x23, 0x3, 0x23, 0x13, 0x23, 0x35, 0x21, 0x13, 0x23, 0x35, 0x21, 0x13, 0x33, 0x3, 0x33, 0x13, 0x33, 0x3, 0x33, 0x15, 0x23, 0x3, 0x33, 0x15, 0x23, 0x3, 0x2, 0xEE, 0x3A, 0xE0, 0x3B, 0x77, 0x4C, 0xE0, 0x4D, 0xA7, 0x4D, 0xE8, 0x1, 0x5, 0x3B, 0xF4, 0x1, 0x11, 0x4E, 0xA7, 0x4E, 0xE1, 0x4D, 0xA8, 0x4E, 0xD0, 0xED, 0x3B, 0xDD, 0xFA, 0x4D, 0x2, 0x38, 0x1, 0x39, 0xFE, 0xC7, 0xFD, 0xC8, 0x1, 0x9A, 0xFE, 0x66, 0x1, 0x9A, 0x9E, 0x1, 0x39, 0x9F, 0x1, 0xA0, 0xFE, 0x60, 0x1, 0xA0, 0xFE, 0x60, 0x9F, 0xFE, 0xC7, 0x9E, 0xFE, 0x66, 0x0, 0x1, 0x0, 0x65, 0xFF, 0x2C, 0x4, 0x26, 0x6, 0x9C, 0x0, 0x2B, 0x0, 0x0, 0x5, 0x23, 0x35, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x2, 0x9F, 0x9F, 0x9F, 0xFC, 0xF3, 0x9B, 0x58, 0x71, 0x77, 0x70, 0x87, 0xC3, 0xDC, 0xCC, 0xAB, 0x9F, 0xAA, 0xC2, 0xF2, 0x6E, 0x63, 0x6A, 0x62, 0x6A, 0x8B, 0xC2, 0xDF, 0xD4, 0xB3, 0xD4, 0xC3, 0x11, 0xD2, 0xEA, 0x9A, 0x6F, 0x6F, 0x5B, 0x55, 0x72, 0x2E, 0x43, 0xC5, 0xB8, 0xA9, 0xD3, 0x13, 0xDB, 0xDD, 0x18, 0xF0, 0xCA, 0x7E, 0x92, 0x71, 0x59, 0x55, 0x6B, 0x32, 0x46, 0xC3, 0xB9, 0xAF, 0xCD, 0x14, 0x0, 0x5, 0x0, 0x64, 0xFF, 0xEB, 0x5, 0x89, 0x5, 0xC5, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x1E, 0x0, 0x2B, 0x0, 0x38, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x25, 0x1, 0x27, 0x1, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x64, 0xA1, 0x93, 0x95, 0xA0, 0x9F, 0xFE, 0xD8, 0xA2, 0xA9, 0x46, 0x47, 0x46, 0x43, 0x44, 0x47, 0x46, 0x45, 0x3, 0x85, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0xF5, 0xA2, 0x92, 0x95, 0xA0, 0x9F, 0xFE, 0xD8, 0xA2, 0xA9, 0x49, 0x44, 0x8A, 0x45, 0x47, 0x46, 0x45, 0x4, 0x98, 0x7C, 0xB1, 0xB1, 0x7C, 0x4D, 0x7A, 0xB1, 0xB1, 0x7A, 0x3B, 0x5E, 0x5D, 0x3C, 0x4D, 0x3D, 0x5E, 0x5E, 0x3D, 0x47, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFC, 0x3D, 0x7B, 0xB1, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0xB1, 0x7B, 0x3C, 0x5E, 0xA9, 0x3F, 0x3C, 0x5E, 0x5E, 0x3C, 0x0, 0x3, 0x0, 0x56, 0xFF, 0xEC, 0x5, 0x11, 0x5, 0xC4, 0x0, 0xB, 0x0, 0x15, 0x0, 0x33, 0x0, 0x0, 0x1, 0x14, 0x17, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x13, 0x32, 0x37, 0x1, 0x7, 0x6, 0x6, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x7, 0x1, 0x36, 0x35, 0x33, 0x10, 0x7, 0x17, 0x1, 0xB3, 0x67, 0x57, 0x3F, 0x36, 0x50, 0x49, 0x4C, 0x4E, 0x86, 0x7A, 0x6B, 0xFE, 0xC3, 0x1F, 0x51, 0x28, 0x7C, 0x2, 0x32, 0x52, 0x9D, 0xD6, 0xDC, 0xFF, 0x0, 0x98, 0x78, 0x45, 0x52, 0xD2, 0xAD, 0xA7, 0xC4, 0x68, 0x59, 0x67, 0x1, 0x18, 0x3D, 0xD3, 0x7E, 0xD6, 0x4, 0x58, 0x53, 0x7F, 0x3B, 0x29, 0x50, 0x3D, 0x34, 0x56, 0x64, 0xFC, 0x12, 0x52, 0x1, 0x77, 0x16, 0x3F, 0x6E, 0x23, 0x60, 0x83, 0xAF, 0x61, 0x75, 0xE9, 0xB5, 0x80, 0xAD, 0x55, 0x57, 0x9C, 0x54, 0xAD, 0xC4, 0xC1, 0x83, 0x66, 0x96, 0x41, 0x4B, 0xFE, 0xB3, 0x79, 0x92, 0xFE, 0xEF, 0xA7, 0xFE, 0x0, 0x1, 0x0, 0x53, 0x3, 0xFC, 0x1, 0xB, 0x6, 0x0, 0x0, 0x4, 0x0, 0x0, 0x13, 0x23, 0x11, 0x33, 0x15, 0xF2, 0x9F, 0xB8, 0x3, 0xFC, 0x2, 0x4, 0x7D, 0x0, 0x1, 0x0, 0x81, 0xFE, 0x31, 0x2, 0xA3, 0x6, 0x5F, 0x0, 0x10, 0x0, 0x0, 0x13, 0x10, 0x12, 0x12, 0x37, 0x17, 0x6, 0x2, 0x3, 0x15, 0x10, 0x12, 0x17, 0x7, 0x26, 0x2, 0x2, 0x81, 0xA4, 0xE8, 0x66, 0x30, 0x70, 0xD3, 0x2, 0xD4, 0x71, 0x30, 0x66, 0xE8, 0xA4, 0x2, 0x50, 0x1, 0x21, 0x1, 0xAD, 0x1, 0xF, 0x32, 0x8E, 0x55, 0xFE, 0x53, 0xFE, 0x93, 0x24, 0xFE, 0x88, 0xFE, 0x4D, 0x5B, 0x87, 0x32, 0x1, 0xF, 0x1, 0xAC, 0x0, 0x1, 0x0, 0x28, 0xFE, 0x31, 0x2, 0x52, 0x6, 0x5F, 0x0, 0x11, 0x0, 0x0, 0x1, 0x10, 0x2, 0x2, 0x7, 0x27, 0x36, 0x12, 0x11, 0x35, 0x34, 0x2, 0x26, 0x27, 0x37, 0x16, 0x12, 0x12, 0x2, 0x52, 0xA6, 0xEB, 0x69, 0x30, 0x71, 0xD4, 0x68, 0x97, 0x46, 0x30, 0x69, 0xEB, 0xA6, 0x2, 0x40, 0xFE, 0xE4, 0xFE, 0x51, 0xFE, 0xEE, 0x32, 0x87, 0x56, 0x1, 0xB8, 0x1, 0x78, 0x14, 0xFB, 0x1, 0x69, 0xE9, 0x39, 0x87, 0x32, 0xFE, 0xEE, 0xFE, 0x53, 0x0, 0x1, 0x0, 0x1C, 0x2, 0x4E, 0x3, 0x75, 0x5, 0xB1, 0x0, 0xE, 0x0, 0x0, 0x13, 0x13, 0x25, 0x37, 0x5, 0x3, 0x33, 0x3, 0x25, 0x17, 0x5, 0x13, 0x7, 0x3, 0x3, 0x7E, 0xCE, 0xFE, 0xD0, 0x36, 0x1, 0x2F, 0xF, 0xB3, 0xF, 0x1, 0x29, 0x36, 0xFE, 0xCA, 0xC8, 0x91, 0xB5, 0xB1, 0x2, 0xBC, 0x1, 0x10, 0x58, 0xAA, 0x76, 0x1, 0x59, 0xFE, 0xA1, 0x73, 0xAB, 0x58, 0xFE, 0xF5, 0x69, 0x1, 0x20, 0xFE, 0xE8, 0x0, 0x1, 0x0, 0x45, 0x0, 0x92, 0x4, 0x2B, 0x4, 0xB6, 0x0, 0xB, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x4, 0x2B, 0xFE, 0x83, 0xEB, 0xFE, 0x82, 0x1, 0x7E, 0xEB, 0x1, 0x7D, 0x2, 0x44, 0xFE, 0x4E, 0x1, 0xB2, 0xDD, 0x1, 0x95, 0xFE, 0x6B, 0x0, 0x1, 0x0, 0x1D, 0xFE, 0xB8, 0x1, 0x5D, 0x0, 0xEB, 0x0, 0x9, 0x0, 0x0, 0x25, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x35, 0x1, 0x5D, 0x67, 0x56, 0x83, 0x2A, 0x3C, 0xEB, 0xAC, 0x66, 0xDA, 0x47, 0x4D, 0x43, 0x8F, 0x5F, 0xB5, 0x0, 0x1, 0x0, 0x47, 0x2, 0xA, 0x2, 0x54, 0x2, 0xCD, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x2, 0x54, 0xFD, 0xF3, 0x2, 0xCD, 0xC3, 0xC3, 0x0, 0x1, 0x0, 0x88, 0xFF, 0xF4, 0x1, 0xA3, 0x1, 0x1, 0x0, 0x7, 0x0, 0x0, 0x36, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x88, 0x4A, 0x86, 0x4B, 0x4B, 0x86, 0x4A, 0xB3, 0x4E, 0x4E, 0x72, 0x4D, 0x4D, 0x0, 0x1, 0x0, 0x2, 0xFF, 0x83, 0x2, 0xFF, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x1, 0x23, 0x1, 0x2, 0xFF, 0xFD, 0xC3, 0xC0, 0x2, 0x3E, 0x5, 0xB0, 0xF9, 0xD3, 0x6, 0x2D, 0x0, 0x2, 0x0, 0x69, 0xFF, 0xEC, 0x4, 0x22, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x3, 0x11, 0x10, 0x0, 0x33, 0x32, 0x0, 0x13, 0x27, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x14, 0x16, 0x32, 0x36, 0x37, 0x4, 0x22, 0xFE, 0xFD, 0xD8, 0xD3, 0xFE, 0xF9, 0x4, 0x1, 0x6, 0xD6, 0xD7, 0x1, 0x5, 0x1, 0xF2, 0x7A, 0x71, 0x6E, 0x7A, 0x1, 0x7B, 0xE0, 0x78, 0x1, 0x2, 0x66, 0xFE, 0xA6, 0xFE, 0xE0, 0x1, 0x18, 0x1, 0x4D, 0x1, 0x0, 0x1, 0x5B, 0x1, 0x18, 0xFE, 0xEA, 0xFE, 0xA9, 0x1F, 0xDD, 0xAE, 0xAB, 0xD8, 0xFE, 0xC5, 0xDD, 0xB7, 0xB4, 0xD8, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x3, 0x0, 0x5, 0xB5, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x35, 0x25, 0x3, 0x0, 0xF3, 0xFE, 0x9B, 0x2, 0x39, 0x5, 0xB5, 0xFA, 0x4B, 0x4, 0x92, 0x7A, 0xCD, 0xD0, 0x0, 0x1, 0x0, 0x51, 0x0, 0x0, 0x4, 0x41, 0x5, 0xC4, 0x0, 0x18, 0x0, 0x0, 0x25, 0x15, 0x21, 0x35, 0x1, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x0, 0x33, 0x32, 0x16, 0x15, 0x14, 0x2, 0x7, 0x1, 0x4, 0x41, 0xFC, 0x2C, 0x1, 0xDA, 0x78, 0x56, 0x71, 0x68, 0x7C, 0x7C, 0xF3, 0x1, 0x2, 0xEC, 0xDA, 0xEF, 0xA3, 0x82, 0xFE, 0xB9, 0xC3, 0xC3, 0xA8, 0x2, 0x4, 0x85, 0x9F, 0x4A, 0x64, 0x83, 0x97, 0x75, 0xBF, 0x1, 0x10, 0xDA, 0xB6, 0x86, 0xFE, 0xFD, 0x8A, 0xFE, 0xA2, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x16, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x21, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x2D, 0xBD, 0xFE, 0xE0, 0xF3, 0x82, 0x6C, 0x71, 0x81, 0xFE, 0xED, 0x89, 0x8F, 0x7D, 0x7B, 0xDD, 0x61, 0x80, 0xF2, 0x1, 0x5, 0xCA, 0xD1, 0x1, 0x2, 0x6F, 0x71, 0x86, 0x70, 0xFE, 0xE8, 0x14, 0xD0, 0xCB, 0x60, 0x78, 0x79, 0x70, 0xEF, 0xC0, 0x7D, 0x62, 0xDB, 0x6E, 0x5E, 0xAD, 0xE2, 0xD1, 0xCD, 0x56, 0xB1, 0x33, 0x2D, 0xBB, 0x6C, 0xCD, 0xDF, 0x0, 0x2, 0x0, 0x35, 0x0, 0x0, 0x4, 0x59, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xE, 0x0, 0x0, 0x1, 0x21, 0x11, 0x7, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0x1, 0x33, 0x1, 0x7D, 0x11, 0x1, 0xBA, 0xB6, 0xF3, 0xFD, 0x8B, 0x6, 0x2, 0x74, 0xFA, 0xB6, 0x2, 0x8, 0x2, 0x5D, 0x1E, 0xFC, 0xFE, 0xFE, 0xBB, 0x1, 0x45, 0x93, 0x3, 0xD8, 0xFC, 0x58, 0x0, 0x1, 0x0, 0x81, 0xFF, 0xEC, 0x4, 0x3A, 0x5, 0xB0, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x27, 0x13, 0x21, 0x15, 0x21, 0x3, 0x36, 0x33, 0x32, 0x12, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x27, 0x33, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x70, 0xC1, 0x4E, 0x3, 0xE, 0xFD, 0xBC, 0x27, 0x64, 0x7F, 0xCF, 0xE8, 0xEC, 0xF3, 0xB6, 0xFE, 0xE9, 0xD, 0xEC, 0x1C, 0xD2, 0x76, 0x77, 0x83, 0x80, 0x55, 0x58, 0x2, 0xA2, 0x30, 0x2, 0xDE, 0xD1, 0xFE, 0xA4, 0x39, 0xFE, 0xF9, 0xE3, 0xCA, 0xFE, 0xE4, 0xD3, 0xCB, 0xDB, 0xA7, 0x83, 0x7D, 0xA2, 0x31, 0x0, 0x2, 0x0, 0x76, 0xFF, 0xEC, 0x4, 0x37, 0x5, 0xB7, 0x0, 0x15, 0x0, 0x22, 0x0, 0x0, 0x5, 0x22, 0x0, 0x11, 0x35, 0x34, 0x12, 0x24, 0x21, 0x33, 0x15, 0x23, 0x6, 0x6, 0x7, 0x36, 0x33, 0x32, 0x12, 0x15, 0x14, 0x2, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x16, 0x2, 0x5F, 0xDC, 0xFE, 0xF3, 0x8C, 0x1, 0x3C, 0x1, 0x7, 0x1C, 0x19, 0xE8, 0xDF, 0x13, 0x72, 0xB8, 0xD5, 0xCA, 0xF7, 0xE4, 0x6E, 0x7D, 0x77, 0x73, 0x55, 0x83, 0x1C, 0x90, 0x14, 0x1, 0x43, 0x1, 0x8, 0x4F, 0xD8, 0x1, 0x74, 0xE5, 0xC8, 0x2, 0xF5, 0xAD, 0x79, 0xFE, 0xD7, 0xBE, 0xD1, 0xFE, 0xE0, 0xC4, 0xA6, 0x81, 0x7A, 0xB0, 0x60, 0x44, 0x4B, 0xAF, 0xB3, 0x0, 0x1, 0x0, 0x46, 0x0, 0x0, 0x4, 0x37, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x15, 0x1, 0x21, 0x1, 0x21, 0x35, 0x4, 0x37, 0xFD, 0xBA, 0xFF, 0x0, 0x2, 0x46, 0xFD, 0xF, 0x5, 0xB0, 0x86, 0xFA, 0xD6, 0x4, 0xED, 0xC3, 0x0, 0x3, 0x0, 0x69, 0xFF, 0xEC, 0x4, 0x23, 0x5, 0xC4, 0x0, 0x16, 0x0, 0x22, 0x0, 0x2D, 0x0, 0x0, 0x4, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x3, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x13, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x32, 0x36, 0x1, 0x7C, 0xFE, 0xED, 0x7F, 0x6C, 0x5E, 0x6D, 0xFC, 0xC1, 0xC2, 0xFB, 0x6E, 0x5E, 0x6C, 0x80, 0xFE, 0xEF, 0x2, 0x6D, 0x5D, 0x5C, 0x6E, 0x6D, 0x5E, 0x5D, 0x6C, 0x20, 0x81, 0x6A, 0x6B, 0x7E, 0x7E, 0xDA, 0x7C, 0x14, 0xD7, 0xCA, 0x79, 0xB8, 0x31, 0x30, 0xA8, 0x6A, 0xC2, 0xD1, 0xD1, 0xC2, 0x6A, 0xA8, 0x30, 0x32, 0xB7, 0x79, 0xCA, 0xD7, 0x4, 0x3C, 0x60, 0x79, 0x74, 0x65, 0x62, 0x78, 0x78, 0xFD, 0xD4, 0x6C, 0x85, 0x85, 0x6C, 0x6E, 0x7D, 0x7D, 0x0, 0x2, 0x0, 0x5E, 0xFF, 0xF9, 0x4, 0x13, 0x5, 0xC4, 0x0, 0x15, 0x0, 0x22, 0x0, 0x0, 0x5, 0x35, 0x33, 0x36, 0x36, 0x37, 0x6, 0x23, 0x22, 0x2, 0x35, 0x34, 0x12, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x4, 0x21, 0x13, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x31, 0x1F, 0xFC, 0xC7, 0xC, 0x7A, 0xA4, 0xD4, 0xCF, 0xF6, 0xE0, 0xF0, 0xEF, 0x7D, 0xFE, 0xC8, 0xFE, 0xE7, 0xEF, 0x4F, 0x7F, 0x1F, 0x8F, 0x5F, 0x6D, 0x78, 0x71, 0x7, 0xCA, 0x3, 0xEC, 0xB0, 0x81, 0x1, 0x27, 0xC0, 0xD2, 0x1, 0x2A, 0xFE, 0xA1, 0xF1, 0x4F, 0xD2, 0xFE, 0x8D, 0xE7, 0x2, 0xA6, 0x5B, 0x43, 0x5F, 0xAF, 0xB5, 0xB3, 0x7E, 0x76, 0xBA, 0xFF, 0xFF, 0x0, 0x82, 0xFF, 0xF4, 0x1, 0x9D, 0x4, 0x52, 0x0, 0x26, 0x0, 0x13, 0xFA, 0x0, 0x0, 0x7, 0x0, 0x13, 0xFF, 0xFA, 0x3, 0x51, 0xFF, 0xFF, 0x0, 0x2F, 0xFE, 0xB8, 0x1, 0x88, 0x4, 0x52, 0x0, 0x27, 0x0, 0x13, 0xFF, 0xE5, 0x3, 0x51, 0x0, 0x6, 0x0, 0x11, 0x12, 0x0, 0x0, 0x1, 0x0, 0x3F, 0x0, 0xA5, 0x3, 0x85, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x0, 0x25, 0x1, 0x35, 0x1, 0x15, 0x5, 0x5, 0x3, 0x85, 0xFC, 0xBA, 0x3, 0x46, 0xFD, 0xB1, 0x2, 0x4F, 0xA5, 0x1, 0x74, 0xC1, 0x1, 0x74, 0xF2, 0xE4, 0xE1, 0x0, 0x2, 0x0, 0x91, 0x1, 0x64, 0x3, 0xF0, 0x3, 0xD6, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x3, 0xF0, 0xFC, 0xA1, 0x3, 0x5F, 0xFC, 0xA1, 0x3, 0xD6, 0xC9, 0xC9, 0xFE, 0x58, 0xCA, 0xCA, 0x0, 0x1, 0x0, 0x81, 0x0, 0xA5, 0x3, 0xE0, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x0, 0x37, 0x35, 0x25, 0x25, 0x35, 0x1, 0x15, 0x81, 0x2, 0x6A, 0xFD, 0x96, 0x3, 0x5F, 0xA5, 0xEF, 0xE8, 0xE4, 0xEE, 0xFE, 0x8D, 0xC2, 0x0, 0x2, 0x0, 0x3C, 0xFF, 0xF4, 0x3, 0x98, 0x5, 0xC4, 0x0, 0x17, 0x0, 0x21, 0x0, 0x0, 0x1, 0x23, 0x3E, 0x3, 0x35, 0x34, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x6, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0x41, 0xE3, 0x2, 0x42, 0xD7, 0x2C, 0xB6, 0x48, 0x77, 0x1, 0xF3, 0x2, 0xFA, 0xB7, 0xC9, 0xE0, 0x5B, 0xA1, 0x35, 0x25, 0xF5, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x1, 0xAD, 0x89, 0x9A, 0xD3, 0x5B, 0x3B, 0xC1, 0x55, 0x60, 0xBD, 0xC2, 0xCC, 0xB6, 0x65, 0xA4, 0x9A, 0x33, 0x76, 0xFE, 0x80, 0x38, 0x4B, 0x4B, 0x38, 0x37, 0x4B, 0x4B, 0x0, 0x2, 0x0, 0x53, 0xFE, 0x3B, 0x6, 0xDC, 0x5, 0x91, 0x0, 0x30, 0x0, 0x3A, 0x0, 0x0, 0x1, 0x20, 0x0, 0x13, 0x12, 0x12, 0x24, 0x33, 0x20, 0x0, 0x3, 0xE, 0x2, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x37, 0x12, 0x0, 0x33, 0x32, 0x16, 0x17, 0x3, 0x6, 0x16, 0x33, 0x32, 0x36, 0x37, 0x12, 0x0, 0x21, 0x20, 0x0, 0x3, 0x2, 0x0, 0x21, 0x32, 0x37, 0x17, 0x6, 0x6, 0x3, 0x32, 0x36, 0x37, 0x13, 0x26, 0x23, 0x22, 0x3, 0x2, 0x3, 0x7B, 0xFE, 0x7C, 0xFE, 0x5C, 0x11, 0xC, 0xDA, 0x1, 0x7C, 0xFF, 0x1, 0x82, 0x1, 0x95, 0x11, 0x5, 0x57, 0xB7, 0x96, 0xB5, 0x3C, 0x68, 0x9D, 0x94, 0x95, 0x13, 0x1A, 0x1, 0x2, 0xA3, 0x71, 0x81, 0x3A, 0x33, 0xB, 0x4F, 0x2E, 0x6C, 0x7C, 0x6, 0x11, 0xFE, 0xD1, 0xFE, 0xB1, 0xFE, 0xCA, 0xFE, 0x97, 0xF, 0x11, 0x1, 0x47, 0x1, 0x36, 0xC1, 0x8A, 0x27, 0x46, 0xD2, 0x72, 0x2B, 0x65, 0x24, 0x2D, 0x2E, 0x32, 0xE9, 0x26, 0x19, 0xFE, 0x3B, 0x1, 0xE7, 0x1, 0xB5, 0x1, 0x11, 0x1, 0xB0, 0xF9, 0xFE, 0x12, 0xFE, 0x63, 0x81, 0xF8, 0xA2, 0x9A, 0x99, 0xF4, 0xC7, 0x1, 0x4, 0x1, 0x33, 0x40, 0x2B, 0xFD, 0xCC, 0x7B, 0x4A, 0xE4, 0xA5, 0x1, 0x60, 0x1, 0x98, 0xFE, 0x3D, 0xFE, 0x9F, 0xFE, 0x8F, 0xFE, 0x6D, 0x49, 0x88, 0x2D, 0x2C, 0x2, 0x57, 0x4F, 0x62, 0x1, 0xEE, 0x12, 0xFE, 0x64, 0xFE, 0xEB, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x3, 0x7E, 0xD4, 0xD3, 0x2, 0x64, 0x77, 0xFD, 0xCC, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xE3, 0x2, 0x28, 0x2, 0x1F, 0x2, 0x5E, 0xFD, 0xA2, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x95, 0x0, 0x0, 0x4, 0xA3, 0x5, 0xB0, 0x0, 0x7, 0x0, 0xF, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x1, 0x91, 0xF8, 0x77, 0x84, 0xF1, 0xFE, 0xFE, 0x1, 0x1A, 0x7C, 0x80, 0xE3, 0xFD, 0xD1, 0x1, 0xF2, 0xEE, 0x1, 0xC, 0x6C, 0x68, 0x7D, 0x79, 0xFE, 0xF4, 0xEC, 0x4, 0xE5, 0xFE, 0x67, 0x6B, 0x61, 0xC8, 0x5, 0xFD, 0xAC, 0xFE, 0x39, 0x7C, 0x64, 0xE0, 0x7, 0xFD, 0x6F, 0x5, 0xB0, 0xBE, 0xCC, 0x63, 0xA1, 0x2B, 0x21, 0xBB, 0x72, 0xD0, 0xD9, 0x0, 0x1, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x33, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x3, 0xEF, 0xFC, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x13, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x87, 0x9C, 0xAB, 0xAC, 0x1, 0x9B, 0xB1, 0xA3, 0x89, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xFA, 0xE4, 0x7D, 0xDA, 0xFE, 0xF5, 0x97, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD2, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x1, 0x91, 0xA6, 0xCC, 0xD0, 0x2, 0xCF, 0xC4, 0xFE, 0x53, 0x1, 0xAD, 0x1, 0x25, 0x1, 0x6B, 0xFE, 0x93, 0xFE, 0xD2, 0x4, 0xE5, 0xFB, 0xE5, 0x1, 0x0, 0xE1, 0x53, 0xEC, 0xFB, 0xFB, 0x1B, 0x5, 0xB0, 0xFE, 0x87, 0xFE, 0xC5, 0x49, 0xFE, 0xC5, 0xFE, 0x88, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x95, 0x3, 0xB1, 0xFD, 0x4B, 0x2, 0x56, 0xFD, 0xAA, 0x2, 0xBC, 0x5, 0xB0, 0xCB, 0xFE, 0x6D, 0xC7, 0xFE, 0x3F, 0xCA, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x31, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x3, 0xDB, 0xFD, 0xB6, 0xFC, 0x3, 0x9C, 0xFD, 0x60, 0x2, 0x4A, 0x2, 0x69, 0xFD, 0x97, 0x5, 0xB0, 0xCB, 0xFE, 0x4E, 0x0, 0x1, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x5, 0xC4, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x11, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x11, 0x21, 0x35, 0x4, 0xF0, 0x2E, 0xF5, 0xF5, 0xFE, 0xED, 0xFE, 0xA5, 0x1, 0x3E, 0x1, 0x1A, 0x1, 0xB, 0x1, 0x9, 0x1A, 0xF8, 0x13, 0x8A, 0x95, 0xB0, 0xAB, 0x2, 0xC8, 0xAF, 0x83, 0x77, 0x1A, 0xFE, 0xD5, 0x2, 0xEB, 0xFD, 0xD3, 0x3D, 0x95, 0x1, 0x6E, 0x1, 0x4E, 0x5F, 0x1, 0x4E, 0x1, 0x6F, 0xFE, 0xFA, 0xCB, 0x71, 0x95, 0xFE, 0xE8, 0x6B, 0xF0, 0xFE, 0xFE, 0x3C, 0x1C, 0x1, 0x1E, 0xBF, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x4, 0x1C, 0xFD, 0x75, 0xFC, 0xFC, 0x2, 0x8B, 0xFD, 0x2, 0x88, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x2, 0x5E, 0xFA, 0x50, 0x0, 0x1, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0xA0, 0xFC, 0x5, 0xB0, 0xFA, 0x50, 0x5, 0xB0, 0x0, 0x1, 0x0, 0x2D, 0xFF, 0xEC, 0x3, 0xE5, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x4, 0x23, 0x22, 0x24, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x2, 0xE9, 0xFC, 0xFE, 0xF2, 0xCE, 0xCF, 0xFE, 0xF3, 0xFD, 0x7C, 0x63, 0x62, 0x7E, 0x5, 0xB0, 0xFC, 0x4, 0xD9, 0xEF, 0xD5, 0xDF, 0x7E, 0x6C, 0x83, 0x7B, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x3, 0xEC, 0xFE, 0x4B, 0xA6, 0xFC, 0xFC, 0x8D, 0x1, 0xAA, 0x1, 0x32, 0xFD, 0xE3, 0x2, 0x3B, 0x2, 0x76, 0xB0, 0xFE, 0x3A, 0x5, 0xB0, 0xFD, 0x54, 0xAE, 0x1, 0xFE, 0xFD, 0x7C, 0xFC, 0xD4, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x95, 0xFC, 0x2, 0x96, 0x5, 0xB0, 0xFB, 0x1A, 0xCA, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x13, 0x1, 0x23, 0x1, 0x1, 0x91, 0xFC, 0x1, 0x47, 0x1, 0xA4, 0x1, 0xA3, 0x1, 0x48, 0xFC, 0x18, 0xFE, 0x53, 0xB5, 0xFE, 0x53, 0x1, 0xE0, 0xFE, 0x20, 0x5, 0xB0, 0xFB, 0xA4, 0x4, 0x5C, 0xFA, 0x50, 0x1, 0xE0, 0x2, 0x80, 0xFB, 0xA0, 0x4, 0x61, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x5, 0x18, 0xFD, 0xFD, 0x76, 0xFC, 0xFC, 0x2, 0x8C, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0x9, 0xFB, 0xF7, 0x5, 0xB0, 0xFB, 0xF4, 0x4, 0xC, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x27, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x5, 0x1F, 0xFE, 0xB5, 0xFE, 0xF0, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFD, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0xA2, 0xA8, 0xB6, 0x2, 0xB3, 0xFE, 0xB4, 0xFE, 0x85, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x2, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD4, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x21, 0x32, 0x0, 0x15, 0x14, 0x4, 0x23, 0x1, 0x91, 0x1, 0x31, 0x93, 0x81, 0x81, 0x93, 0xFE, 0xCF, 0xFC, 0x2, 0x2D, 0xFD, 0x1, 0x15, 0xFE, 0xEB, 0xFD, 0x4, 0xE5, 0xFE, 0x3, 0x8A, 0x6D, 0x66, 0xA0, 0xFD, 0x38, 0xFD, 0xE3, 0x5, 0xB0, 0xFE, 0xFA, 0xC9, 0xD3, 0xF1, 0x0, 0x2, 0x0, 0x60, 0xFF, 0x4, 0x5, 0x1B, 0x5, 0xC4, 0x0, 0x12, 0x0, 0x20, 0x0, 0x0, 0x5, 0x25, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x14, 0x2, 0x7, 0x17, 0x3, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x4, 0x76, 0xFE, 0xCB, 0x3F, 0x44, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0x84, 0x75, 0xFB, 0xFF, 0xB9, 0xA7, 0xA2, 0xBC, 0xBE, 0xA2, 0xA8, 0xB6, 0xFC, 0xF5, 0xD, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xCE, 0xFE, 0xCF, 0x59, 0xC4, 0x3, 0x67, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x17, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x1, 0x15, 0x1, 0x91, 0x1, 0x4, 0x88, 0x89, 0x80, 0x8D, 0x1, 0x37, 0xFE, 0xDC, 0xFE, 0xE5, 0xFC, 0x2, 0x0, 0xFB, 0x1, 0x12, 0x8E, 0x7D, 0x1, 0x47, 0x4, 0xE5, 0xFE, 0x17, 0x89, 0x68, 0x70, 0x87, 0x1, 0xFB, 0x1B, 0x2, 0x31, 0xFD, 0xCF, 0x5, 0xB0, 0xE0, 0xD7, 0x92, 0xC6, 0x34, 0xFD, 0xA0, 0xD, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x25, 0x0, 0x0, 0x1, 0x34, 0x26, 0x24, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x22, 0x24, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x3, 0x8D, 0x72, 0xFE, 0x60, 0xFE, 0xFD, 0x1, 0x1D, 0xE7, 0xF7, 0x1, 0x16, 0xFC, 0x86, 0x8E, 0x85, 0x7F, 0x98, 0x99, 0xF7, 0xED, 0xFE, 0xE7, 0xED, 0x8B, 0xFE, 0xFA, 0xA9, 0xFD, 0xB8, 0x85, 0x84, 0x85, 0x1, 0x78, 0x57, 0x69, 0x81, 0xCA, 0xAE, 0xB0, 0xE3, 0xFE, 0xF9, 0xB6, 0x6B, 0x89, 0x73, 0x56, 0x52, 0x6B, 0x2D, 0x48, 0xD8, 0xAE, 0xB8, 0xD6, 0x66, 0xCD, 0x99, 0x8A, 0x7A, 0x6C, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x4, 0xB0, 0xFE, 0x3B, 0xFC, 0xFE, 0x3E, 0x4, 0x83, 0x4, 0xE5, 0xFB, 0x1B, 0x4, 0xE5, 0xCB, 0x0, 0x1, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x4, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x3, 0xC1, 0xFD, 0xFE, 0xC2, 0xE3, 0xE9, 0xFE, 0xCA, 0xFB, 0x9F, 0x85, 0x87, 0x9D, 0x5, 0xB0, 0xFC, 0x33, 0xFA, 0xFD, 0xFD, 0xFA, 0x3, 0xCD, 0xFC, 0x33, 0x9C, 0x91, 0x91, 0x9C, 0x0, 0x1, 0x0, 0x12, 0x0, 0x0, 0x5, 0x1D, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x2, 0x1C, 0xFD, 0xF6, 0x1, 0x15, 0x1, 0x6F, 0x1, 0x71, 0x1, 0x16, 0xFD, 0xF4, 0x5, 0xB0, 0xFB, 0x8E, 0x4, 0x72, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x1, 0x33, 0x1, 0x13, 0x33, 0x1, 0x23, 0x1, 0x1, 0x1, 0x81, 0xFE, 0xB0, 0xFB, 0xE2, 0x1, 0x16, 0xD4, 0x1, 0x13, 0xDF, 0xFB, 0xFE, 0xB1, 0xF3, 0xFE, 0xEB, 0xFE, 0xE5, 0x5, 0xB0, 0xFB, 0xBD, 0x4, 0x43, 0xFB, 0xB9, 0x4, 0x47, 0xFA, 0x50, 0x4, 0x26, 0xFB, 0xDA, 0x0, 0x1, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x9, 0x2, 0x21, 0x1, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x1, 0x1, 0x58, 0x1, 0x32, 0x1, 0x31, 0x1, 0x24, 0xFE, 0x48, 0x1, 0xC3, 0xFE, 0xD9, 0xFE, 0xC7, 0xFE, 0xC6, 0xFE, 0xD9, 0x1, 0xC3, 0xFE, 0x48, 0x5, 0xB0, 0xFD, 0xF2, 0x2, 0xE, 0xFD, 0x2E, 0xFD, 0x22, 0x2, 0x17, 0xFD, 0xE9, 0x2, 0xDE, 0x2, 0xD2, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x9, 0x2, 0x21, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x21, 0x1, 0x4E, 0x1, 0x4F, 0x1, 0x18, 0xFE, 0x18, 0xFE, 0xFE, 0x18, 0x5, 0xB0, 0xFD, 0x4F, 0x2, 0xB1, 0xFC, 0x68, 0xFD, 0xE8, 0x2, 0x18, 0x3, 0x98, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x33, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x50, 0x2, 0xF2, 0xFD, 0x14, 0x4, 0x1E, 0xFD, 0xE, 0x3, 0xA, 0xA4, 0x4, 0x41, 0xCB, 0xA0, 0xFB, 0xBA, 0xCA, 0x0, 0x1, 0x0, 0x84, 0xFE, 0xBB, 0x2, 0x1D, 0x6, 0x8F, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x23, 0x11, 0x33, 0x15, 0x21, 0x11, 0x2, 0x1D, 0xA6, 0xA6, 0xFE, 0x67, 0x6, 0x8F, 0xBE, 0xF9, 0xA8, 0xBE, 0x7, 0xD4, 0x0, 0x1, 0x0, 0x14, 0xFF, 0x83, 0x3, 0x64, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x0, 0x5, 0x1, 0x33, 0x1, 0x2, 0x74, 0xFD, 0xA0, 0xF0, 0x2, 0x60, 0x7D, 0x6, 0x2D, 0xF9, 0xD3, 0x0, 0x1, 0x0, 0xD, 0xFE, 0xBB, 0x1, 0xA6, 0x6, 0x8F, 0x0, 0x7, 0x0, 0x0, 0x13, 0x35, 0x21, 0x11, 0x21, 0x35, 0x33, 0x11, 0xD, 0x1, 0x99, 0xFE, 0x67, 0xA6, 0x5, 0xD1, 0xBE, 0xF8, 0x2C, 0xBE, 0x6, 0x58, 0x0, 0x1, 0x0, 0x35, 0x2, 0xD9, 0x3, 0x36, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x3, 0x3, 0x23, 0x1, 0x33, 0x1, 0x2, 0x68, 0xB2, 0xB2, 0xCF, 0x1, 0x2B, 0xAC, 0x1, 0x2A, 0x2, 0xD9, 0x1, 0xCF, 0xFE, 0x31, 0x2, 0xD7, 0xFD, 0x29, 0x0, 0x1, 0x0, 0x3, 0xFF, 0x40, 0x3, 0x99, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x21, 0x15, 0x21, 0x35, 0x3, 0x99, 0xFC, 0x6A, 0xC0, 0xC0, 0x0, 0x1, 0x0, 0x31, 0x4, 0xD2, 0x2, 0xA, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x13, 0x23, 0x1, 0x1, 0x46, 0xC4, 0xCA, 0xFE, 0xF1, 0x6, 0x0, 0xFE, 0xD2, 0x1, 0x2E, 0x0, 0x2, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x26, 0x0, 0x0, 0x24, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x2, 0x4D, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0x1, 0x5F, 0x12, 0xA, 0x73, 0xAA, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB6, 0xED, 0x29, 0xAF, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0xAF, 0x25, 0x41, 0x7A, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0x20, 0x92, 0x57, 0x11, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x32, 0x6, 0x0, 0x0, 0xF, 0x0, 0x1A, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x2, 0x8D, 0xBD, 0x6C, 0xB, 0xDC, 0xF2, 0x6A, 0xB2, 0xD1, 0xD6, 0xD7, 0xFE, 0xF4, 0x87, 0x6A, 0x67, 0x8C, 0x9B, 0x43, 0x44, 0x14, 0x8A, 0x76, 0x6, 0x0, 0xFD, 0xD2, 0x7C, 0xFE, 0xCD, 0xF4, 0x15, 0xEF, 0xFE, 0xC9, 0xC7, 0xCA, 0xAA, 0x8F, 0xD2, 0x8C, 0xFE, 0x44, 0x8D, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x2, 0x3A, 0x58, 0x7A, 0x5, 0xE4, 0x4, 0xFF, 0x0, 0xB5, 0xFA, 0xF2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0xAF, 0x68, 0x4F, 0x9D, 0xDD, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x4, 0x6, 0x0, 0x0, 0xB, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x73, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFA, 0x0, 0x0, 0x2, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x2, 0x3D, 0x64, 0x7A, 0x12, 0x1, 0xCE, 0x4, 0x61, 0x1, 0x44, 0x34, 0xCB, 0xA2, 0xF1, 0xFE, 0xEC, 0x1, 0x1B, 0xCE, 0xEC, 0xE3, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA7, 0x68, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFD, 0x2D, 0x4C, 0x80, 0x1, 0x2C, 0xDF, 0x29, 0x1, 0x1, 0x1, 0x2D, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x14, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x2, 0xA1, 0xDB, 0xF4, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0xDB, 0x3, 0x87, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0x0, 0x2, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x26, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x27, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x4, 0x2, 0x40, 0x96, 0x44, 0x43, 0x95, 0x84, 0x79, 0x78, 0x65, 0x59, 0xF4, 0x48, 0x73, 0x70, 0xA4, 0x79, 0x8D, 0x6A, 0xAE, 0xC6, 0xE8, 0x2, 0xE9, 0xC9, 0xBA, 0x69, 0xA, 0xDC, 0xFE, 0xEF, 0xB3, 0x80, 0x1, 0xD9, 0x7C, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0xA3, 0x51, 0x62, 0x91, 0x85, 0x85, 0x7F, 0x49, 0x76, 0x1, 0x35, 0xE8, 0x1D, 0xF7, 0x1, 0x31, 0x7F, 0x6B, 0xFB, 0xE4, 0xDB, 0xED, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x47, 0x93, 0x48, 0xF2, 0xF2, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xF3, 0x62, 0x3, 0x88, 0x83, 0xFC, 0xFB, 0x6, 0x0, 0xFD, 0xC3, 0x8B, 0xB6, 0xDA, 0xFD, 0x42, 0x2, 0xBB, 0x71, 0x5C, 0x0, 0x2, 0x0, 0x7D, 0x0, 0x0, 0x1, 0x91, 0x5, 0xD5, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x11, 0x23, 0x11, 0x7D, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x1, 0x2, 0xF3, 0x5, 0x54, 0x38, 0x49, 0x49, 0x38, 0x37, 0x4A, 0x4A, 0xE3, 0xFB, 0xC6, 0x4, 0x3A, 0x0, 0x2, 0xFF, 0xB4, 0xFE, 0x4B, 0x1, 0x86, 0x5, 0xD5, 0x0, 0x9, 0x0, 0x15, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x17, 0x33, 0x11, 0x10, 0x21, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x72, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x15, 0xF3, 0xFE, 0xBC, 0x44, 0x3E, 0x2E, 0x2A, 0x7B, 0x5, 0x54, 0x38, 0x49, 0x49, 0x38, 0x37, 0x4A, 0x4A, 0xE3, 0xFB, 0x66, 0xFE, 0xAB, 0x11, 0xBF, 0x8, 0x8D, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x37, 0x6, 0x0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x3, 0x1E, 0xFE, 0xBF, 0x6D, 0xF3, 0xF3, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6D, 0x1, 0xBE, 0x1, 0xD2, 0x70, 0xFE, 0x9E, 0x6, 0x0, 0xFC, 0x8A, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xFD, 0x88, 0x0, 0x1, 0x0, 0x8C, 0x0, 0x0, 0x1, 0x7F, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x7F, 0xF3, 0x6, 0x0, 0xFA, 0x0, 0x6, 0x0, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x7A, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x3F, 0x93, 0x3D, 0xF2, 0xE4, 0x7, 0x73, 0xC6, 0xD7, 0x51, 0x77, 0xD6, 0xA6, 0xBD, 0x1, 0xF3, 0x69, 0x5A, 0x53, 0x69, 0x14, 0xF3, 0x68, 0x3, 0x88, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0xA5, 0xA5, 0xB8, 0xD4, 0xFD, 0x3E, 0x2, 0xBE, 0x78, 0x52, 0x5A, 0x48, 0xFD, 0x1A, 0x2, 0xBC, 0x72, 0x5A, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x47, 0x91, 0x49, 0xF3, 0xE5, 0x8, 0x77, 0xC2, 0x9C, 0xBC, 0x1, 0xF3, 0x61, 0x3, 0x88, 0x84, 0xFC, 0xFC, 0x4, 0x3A, 0x7C, 0x90, 0xB3, 0xDA, 0xFD, 0x3F, 0x2, 0xBE, 0x70, 0x5A, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x27, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x50, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0xEB, 0xFE, 0xF7, 0x4, 0xF2, 0x7D, 0x89, 0x86, 0x7D, 0x7C, 0x89, 0x87, 0x7D, 0x2, 0x27, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x1, 0x33, 0xE6, 0xD, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x48, 0x83, 0x73, 0x75, 0x83, 0x96, 0x41, 0x43, 0xDA, 0xB1, 0x6C, 0xF2, 0xDF, 0xA, 0x6D, 0xB7, 0xCE, 0xD9, 0xDA, 0xAF, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0xC3, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x4, 0x3, 0x4, 0x4E, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x4, 0x3, 0xF3, 0x6A, 0xAA, 0xCA, 0xE2, 0xE1, 0xCD, 0xB4, 0x6B, 0xD, 0xD9, 0xFE, 0x36, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0xFE, 0x60, 0x1, 0xFD, 0x71, 0x1, 0x3A, 0xED, 0x14, 0xF7, 0x1, 0x30, 0x7E, 0x6A, 0xFC, 0x75, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x2, 0x51, 0xA9, 0x39, 0xF2, 0xE8, 0x6, 0x56, 0x9E, 0x31, 0x25, 0x2, 0x32, 0x3, 0x64, 0x80, 0xFD, 0x1C, 0x4, 0x3A, 0x7A, 0x8E, 0xD, 0xE5, 0x8, 0x0, 0x1, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x24, 0x0, 0x0, 0x1, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x2, 0xDC, 0x55, 0x8E, 0xB0, 0xD9, 0xE0, 0xC1, 0xCB, 0xE7, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x5F, 0x7F, 0xBC, 0xD3, 0xEE, 0xC7, 0xDF, 0xEA, 0xEC, 0x5, 0x8A, 0x50, 0x60, 0x65, 0x1, 0x26, 0x35, 0x4C, 0x1E, 0x25, 0x93, 0x89, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x6C, 0x40, 0x1B, 0x28, 0x92, 0x91, 0x90, 0xB8, 0xE4, 0x86, 0x64, 0x50, 0x4A, 0x0, 0x1, 0x0, 0x8, 0xFF, 0xEC, 0x2, 0x73, 0x5, 0x41, 0x0, 0x15, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x73, 0x46, 0x5A, 0x79, 0x9F, 0xB3, 0xB3, 0xF2, 0xBF, 0xBF, 0x40, 0x31, 0x2A, 0x2B, 0x4, 0x18, 0x89, 0xA7, 0x2, 0x6B, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x3, 0x12, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xF3, 0x67, 0x45, 0xAE, 0x40, 0xF3, 0x6A, 0x7E, 0xBA, 0xD5, 0x2, 0xBF, 0xFD, 0x43, 0x75, 0x55, 0x7D, 0x3, 0xA, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x17, 0x0, 0x0, 0x3, 0xDB, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x13, 0x33, 0x1, 0x1, 0x91, 0xFE, 0x86, 0xFB, 0xEA, 0xE4, 0xFB, 0xFE, 0x89, 0x4, 0x3A, 0xFC, 0xFB, 0x3, 0x5, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x13, 0x33, 0x13, 0x13, 0x33, 0x1, 0x23, 0x3, 0x3, 0x1, 0x4A, 0xFE, 0xD8, 0xED, 0xAF, 0xDD, 0xB8, 0xE1, 0xAC, 0xED, 0xFE, 0xD8, 0xC8, 0xE8, 0xE4, 0x4, 0x3A, 0xFD, 0x1E, 0x2, 0xE2, 0xFD, 0x14, 0x2, 0xEC, 0xFB, 0xC6, 0x2, 0xE6, 0xFD, 0x1A, 0x0, 0x1, 0x0, 0x1F, 0x0, 0x0, 0x3, 0xE9, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x3, 0x21, 0x1, 0x1, 0x1, 0x38, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0x1, 0x56, 0xFE, 0xF3, 0xD8, 0xD7, 0xFE, 0xF2, 0x1, 0x56, 0xFE, 0xB6, 0x4, 0x3A, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0xFD, 0xDA, 0x1, 0x72, 0xFE, 0x8E, 0x2, 0x26, 0x2, 0x14, 0x0, 0x1, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x4, 0x3A, 0x0, 0x10, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x2, 0x7, 0xD9, 0x31, 0x44, 0x2E, 0x5A, 0x5E, 0x1B, 0x23, 0xFE, 0x84, 0x1, 0x7, 0xE5, 0xDC, 0x1, 0x3, 0xFE, 0x54, 0x5A, 0xCB, 0xFE, 0x4B, 0x11, 0xBC, 0x3, 0x41, 0x51, 0x5E, 0x4, 0x35, 0xFD, 0x21, 0x2, 0xDF, 0xFB, 0x2B, 0xFE, 0xFD, 0x15, 0x0, 0x1, 0x0, 0x52, 0x0, 0x0, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x33, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x52, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x2, 0x3F, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xC3, 0x0, 0x1, 0x0, 0x38, 0xFE, 0x98, 0x2, 0x92, 0x6, 0x3D, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x26, 0x26, 0x35, 0x35, 0x34, 0x23, 0x35, 0x32, 0x35, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x15, 0x14, 0x7, 0x16, 0x15, 0x15, 0x14, 0x16, 0x17, 0x2, 0x62, 0xCE, 0x9A, 0xC2, 0xC2, 0x9A, 0xCE, 0x30, 0x68, 0x4C, 0xAC, 0xAC, 0x4C, 0x68, 0xFE, 0x98, 0x3A, 0xFA, 0x9E, 0xC6, 0xE2, 0xB2, 0xE2, 0xC6, 0x9E, 0xF9, 0x3A, 0x8C, 0x22, 0xB1, 0x72, 0xC2, 0xE5, 0x5A, 0x5A, 0xE5, 0xC2, 0x72, 0xB1, 0x22, 0x0, 0x1, 0x0, 0xAE, 0xFE, 0xF2, 0x1, 0x56, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x56, 0xA8, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0x0, 0x1, 0x0, 0x1C, 0xFE, 0x98, 0x2, 0x76, 0x6, 0x3D, 0x0, 0x1A, 0x0, 0x0, 0x13, 0x27, 0x36, 0x36, 0x35, 0x35, 0x34, 0x37, 0x26, 0x35, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x15, 0x14, 0x33, 0x15, 0x22, 0x15, 0x15, 0x14, 0x6, 0x4C, 0x30, 0x68, 0x4B, 0xB6, 0xB6, 0x4B, 0x68, 0x30, 0xCF, 0x99, 0xC2, 0xC2, 0x99, 0xFE, 0x98, 0x8D, 0x22, 0xB1, 0x72, 0xC3, 0xE8, 0x56, 0x56, 0xE8, 0xC3, 0x72, 0xB1, 0x22, 0x8C, 0x3A, 0xF9, 0x9E, 0xC6, 0xE2, 0xB2, 0xE2, 0xC6, 0x9E, 0xFA, 0x0, 0x1, 0x0, 0x76, 0x1, 0x84, 0x4, 0xDC, 0x3, 0x30, 0x0, 0x17, 0x0, 0x0, 0x1, 0x37, 0x14, 0x6, 0x23, 0x22, 0x2E, 0x2, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x36, 0x4, 0x21, 0xBB, 0xBB, 0x90, 0x4E, 0x7B, 0x97, 0x44, 0x26, 0x43, 0x4D, 0xC1, 0xB9, 0x91, 0x55, 0x8C, 0x43, 0x5E, 0x48, 0x43, 0x54, 0x3, 0x12, 0x1, 0xAC, 0xE3, 0x39, 0x86, 0x22, 0x68, 0x54, 0xAF, 0xD8, 0x4A, 0x3F, 0x58, 0x6E, 0x0, 0x2, 0x0, 0x86, 0xFE, 0x93, 0x1, 0x9A, 0x4, 0x4D, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x1, 0x14, 0x6, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x1, 0x13, 0x33, 0x13, 0x1, 0x9A, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xFE, 0xF9, 0x17, 0xD1, 0x18, 0x3, 0xCB, 0x37, 0x4C, 0x4C, 0x37, 0x38, 0x4A, 0x4A, 0xFA, 0x90, 0x4, 0x3, 0xFB, 0xFD, 0x0, 0x1, 0x0, 0x65, 0xFF, 0xB, 0x4, 0xB, 0x5, 0x26, 0x0, 0x21, 0x0, 0x0, 0x1, 0x6, 0x6, 0x7, 0x15, 0x23, 0x35, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0xB, 0x5, 0xC4, 0x92, 0xC8, 0xC4, 0xBF, 0xBF, 0xC4, 0xC8, 0x9C, 0xBA, 0x5, 0xE5, 0x4, 0x70, 0x64, 0x94, 0x62, 0x61, 0x96, 0x59, 0x7A, 0x4, 0x1, 0x66, 0x88, 0xCD, 0x1C, 0xEA, 0xEA, 0x23, 0x1, 0x2D, 0xC6, 0x24, 0xC5, 0x1, 0x2E, 0x23, 0xE1, 0xE0, 0x1B, 0xD7, 0x9D, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x68, 0x4F, 0x0, 0x1, 0x0, 0x5F, 0x0, 0x0, 0x4, 0x7C, 0x5, 0xC4, 0x0, 0x20, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x36, 0x36, 0x35, 0x27, 0x23, 0x35, 0x33, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x17, 0x21, 0x15, 0x21, 0x17, 0x14, 0x7, 0x21, 0x4, 0x7C, 0xFB, 0xE7, 0x51, 0x32, 0x21, 0x6, 0xA2, 0x9B, 0x8, 0xFF, 0xC6, 0xD0, 0xE3, 0xF5, 0x79, 0x4F, 0x50, 0x6F, 0x9, 0x1, 0x37, 0xFE, 0xD0, 0x7, 0x41, 0x2, 0xB8, 0xCA, 0xD, 0x8A, 0x3D, 0xB9, 0xC7, 0xF1, 0xCF, 0xE6, 0xDE, 0xB5, 0x6E, 0x5A, 0x78, 0x72, 0xF1, 0xC7, 0xB1, 0x88, 0x54, 0x0, 0x2, 0x0, 0x5D, 0xFF, 0xE5, 0x5, 0x4F, 0x4, 0xF1, 0x0, 0x1B, 0x0, 0x27, 0x0, 0x0, 0x5, 0x27, 0x6, 0x23, 0x22, 0x27, 0x7, 0x27, 0x37, 0x26, 0x35, 0x34, 0x37, 0x27, 0x37, 0x17, 0x36, 0x33, 0x32, 0x17, 0x37, 0x17, 0x7, 0x16, 0x15, 0x14, 0x7, 0x17, 0x1, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x34, 0x2, 0x23, 0x22, 0x2, 0x4, 0xC1, 0x83, 0x9F, 0xCB, 0xCA, 0x9F, 0x81, 0x8D, 0x88, 0x65, 0x6D, 0x90, 0x8D, 0x8E, 0x9B, 0xC1, 0xC2, 0x9B, 0x90, 0x8E, 0x93, 0x6A, 0x62, 0x8B, 0xFB, 0xEB, 0xEF, 0xAB, 0xAA, 0xEF, 0xEF, 0xAA, 0xAB, 0xEF, 0x1B, 0x87, 0x80, 0x7E, 0x84, 0x90, 0x8A, 0x9D, 0xC3, 0xCC, 0xA1, 0x93, 0x90, 0x91, 0x73, 0x75, 0x94, 0x91, 0x96, 0xA1, 0xC9, 0xC0, 0x9D, 0x8D, 0x1, 0xEA, 0xB8, 0xFE, 0xFE, 0x1, 0x2, 0xB8, 0xB9, 0x1, 0x0, 0xFF, 0x0, 0x0, 0x1, 0x0, 0xC, 0x0, 0x0, 0x4, 0x35, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x35, 0x21, 0x35, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x15, 0x21, 0x15, 0x21, 0x3, 0xCA, 0xFE, 0xD1, 0xFC, 0xFE, 0xCC, 0x1, 0x34, 0xFE, 0xCC, 0xF7, 0xFE, 0xAA, 0x1, 0x10, 0x1, 0x6, 0x1, 0x5, 0x1, 0xE, 0xFE, 0xAA, 0xEB, 0xFE, 0xD1, 0x1, 0x2F, 0x1, 0x2D, 0xFE, 0xD3, 0x1, 0x2D, 0x97, 0x8A, 0x98, 0x2, 0xCA, 0xFD, 0xA0, 0x2, 0x60, 0xFD, 0x36, 0x98, 0x8A, 0x0, 0x2, 0x0, 0x89, 0xFE, 0xF2, 0x1, 0x6E, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x13, 0x23, 0x11, 0x33, 0x1, 0x6E, 0xE5, 0xE5, 0xE5, 0xE5, 0x5, 0xB0, 0xFD, 0xA, 0x2, 0xF6, 0xF9, 0x42, 0x3, 0x1B, 0x0, 0x2, 0x0, 0x5A, 0xFE, 0x25, 0x4, 0x8D, 0x5, 0xC5, 0x0, 0xC, 0x0, 0x3A, 0x0, 0x0, 0x1, 0x36, 0x35, 0x34, 0x26, 0x24, 0x27, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x3, 0x22, 0x26, 0x26, 0x35, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x10, 0x37, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x4, 0x17, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x4, 0x3, 0x2B, 0x71, 0x76, 0xFE, 0xA5, 0xF, 0x6B, 0x89, 0xC6, 0x51, 0x80, 0x84, 0xF6, 0x9D, 0xF3, 0xBC, 0x68, 0x7E, 0x87, 0x88, 0xB9, 0xDD, 0xFA, 0xAA, 0x86, 0x1, 0x14, 0xE6, 0xEC, 0x1, 0xF, 0xF3, 0x86, 0x82, 0x89, 0x7E, 0x77, 0x1, 0xAE, 0x77, 0x7C, 0xAA, 0x86, 0xFE, 0xED, 0x1, 0x13, 0x2F, 0x76, 0x4B, 0x5F, 0x6B, 0x6, 0x2A, 0x7B, 0x5C, 0x5C, 0x37, 0x17, 0xFC, 0xFD, 0x4E, 0xB9, 0xA2, 0x1, 0x86, 0x60, 0x61, 0x4C, 0x4F, 0x5A, 0x37, 0x3B, 0xB6, 0x1, 0x70, 0x59, 0x67, 0xB7, 0xAA, 0xCD, 0xDE, 0xCF, 0x61, 0x89, 0x69, 0x49, 0x53, 0x56, 0x77, 0x56, 0x5A, 0xB9, 0xB8, 0x58, 0x67, 0xB8, 0xB2, 0xC1, 0x0, 0x2, 0x0, 0x5E, 0x4, 0xE0, 0x3, 0x24, 0x5, 0xCD, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x5E, 0x44, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x44, 0x1, 0xC9, 0x44, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x44, 0x5, 0x56, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x3, 0x0, 0x57, 0xFF, 0xEB, 0x5, 0xE3, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x37, 0x0, 0x0, 0x13, 0x34, 0x12, 0x24, 0x20, 0x4, 0x12, 0x15, 0x14, 0x2, 0x4, 0x20, 0x24, 0x2, 0x37, 0x14, 0x12, 0x4, 0x20, 0x24, 0x12, 0x35, 0x34, 0x2, 0x24, 0x20, 0x4, 0x2, 0x1, 0x33, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x57, 0xC0, 0x1, 0x42, 0x1, 0x88, 0x1, 0x42, 0xC0, 0xC0, 0xFE, 0xBE, 0xFE, 0x78, 0xFE, 0xBE, 0xC0, 0x7A, 0x9F, 0x1, 0xB, 0x1, 0x44, 0x1, 0xB, 0x9E, 0x9E, 0xFE, 0xF5, 0xFE, 0xBC, 0xFE, 0xF5, 0x9F, 0x2, 0xF1, 0x9C, 0xB4, 0x9B, 0xA1, 0xBC, 0xBC, 0xA1, 0x9B, 0xB5, 0x9C, 0x5B, 0x59, 0x60, 0x62, 0x62, 0x60, 0x59, 0x5A, 0x2, 0xD9, 0xD4, 0x1, 0x52, 0xC5, 0xC5, 0xFE, 0xAE, 0xD4, 0xD3, 0xFE, 0xAC, 0xC7, 0xC7, 0x1, 0x54, 0xD3, 0xB0, 0xFE, 0xE4, 0xA5, 0xA5, 0x1, 0x1C, 0xB0, 0xB1, 0x1, 0x19, 0xA4, 0xA4, 0xFE, 0xE7, 0xFE, 0xCA, 0x9D, 0x9D, 0xD7, 0xAC, 0x77, 0xAC, 0xD7, 0x9C, 0x9D, 0x60, 0x52, 0x8D, 0x6E, 0x78, 0x70, 0x8C, 0x52, 0x0, 0x2, 0x0, 0x8E, 0x2, 0xB4, 0x3, 0x12, 0x5, 0xC5, 0x0, 0x9, 0x0, 0x23, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x25, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x1, 0xB2, 0x28, 0x54, 0x1B, 0x65, 0x57, 0x50, 0x1, 0x24, 0xB, 0x6, 0x4D, 0x7C, 0x78, 0x81, 0x1, 0x44, 0x77, 0x74, 0x8A, 0xAD, 0xAA, 0x8D, 0x83, 0xA0, 0x1A, 0x3, 0x44, 0x25, 0x19, 0x88, 0x42, 0x2C, 0x58, 0x82, 0x20, 0x24, 0x52, 0x7D, 0x67, 0xE1, 0x6, 0x33, 0x7F, 0x63, 0xE, 0x65, 0x84, 0x8B, 0x89, 0xFE, 0xC6, 0x66, 0x4F, 0xFF, 0xFF, 0x0, 0x56, 0x0, 0x8B, 0x3, 0x86, 0x3, 0xAA, 0x0, 0x26, 0x4, 0x79, 0xEA, 0x0, 0x0, 0x7, 0x4, 0x79, 0x1, 0x52, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7F, 0x1, 0x76, 0x3, 0xC2, 0x3, 0x25, 0x0, 0x5, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x35, 0x21, 0x3, 0xC2, 0xC8, 0xFD, 0x85, 0x3, 0x43, 0x1, 0x76, 0x1, 0x4, 0xAB, 0x0, 0x4, 0x0, 0x57, 0xFF, 0xEB, 0x5, 0xE3, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x24, 0x0, 0x3A, 0x0, 0x0, 0x13, 0x34, 0x12, 0x24, 0x20, 0x4, 0x12, 0x15, 0x14, 0x2, 0x4, 0x20, 0x24, 0x2, 0x37, 0x14, 0x12, 0x4, 0x20, 0x24, 0x12, 0x35, 0x34, 0x2, 0x24, 0x20, 0x4, 0x2, 0x25, 0x15, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x14, 0x16, 0x17, 0x15, 0x23, 0x26, 0x26, 0x34, 0x26, 0x23, 0x57, 0xC0, 0x1, 0x42, 0x1, 0x88, 0x1, 0x42, 0xC0, 0xC0, 0xFE, 0xBE, 0xFE, 0x78, 0xFE, 0xBE, 0xC0, 0x7A, 0x9F, 0x1, 0xB, 0x1, 0x44, 0x1, 0xB, 0x9E, 0x9E, 0xFE, 0xF5, 0xFE, 0xBC, 0xFE, 0xF5, 0x9F, 0x1, 0xBC, 0x90, 0x40, 0x61, 0x4D, 0x62, 0x82, 0x97, 0x1, 0x19, 0x95, 0xB0, 0x77, 0x40, 0x34, 0x7, 0xA, 0x9B, 0xA, 0x3, 0x48, 0x47, 0x2, 0xD9, 0xD4, 0x1, 0x52, 0xC5, 0xC5, 0xFE, 0xAE, 0xD4, 0xD3, 0xFE, 0xAC, 0xC7, 0xC7, 0x1, 0x54, 0xD3, 0xB0, 0xFE, 0xE4, 0xA5, 0xA5, 0x1, 0x1C, 0xB0, 0xB1, 0x1, 0x19, 0xA4, 0xA4, 0xFE, 0xE7, 0x7F, 0xF6, 0x1, 0x3A, 0x39, 0x49, 0x39, 0xFE, 0x84, 0xFE, 0xAF, 0x3, 0x52, 0x82, 0x81, 0x75, 0x40, 0x1D, 0x6E, 0xA3, 0x45, 0x17, 0x10, 0x1A, 0x60, 0x92, 0x45, 0x0, 0x1, 0x0, 0x9C, 0x5, 0xC, 0x3, 0x4A, 0x5, 0xAA, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x3, 0x4A, 0xFD, 0x52, 0x5, 0xAA, 0x9E, 0x9E, 0x0, 0x2, 0x0, 0x7F, 0x3, 0xAF, 0x2, 0x8C, 0x5, 0xC5, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x7F, 0x9C, 0x6D, 0x6B, 0x99, 0x99, 0x6B, 0x6D, 0x9C, 0x8B, 0x4B, 0x66, 0x46, 0x46, 0x66, 0x4B, 0x5, 0x26, 0x9F, 0x9F, 0xDC, 0x9B, 0x9B, 0x6E, 0x35, 0x47, 0x47, 0x35, 0x37, 0x49, 0x49, 0x0, 0x2, 0x0, 0x5F, 0x0, 0x1, 0x3, 0xF3, 0x4, 0xFC, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x3, 0x15, 0x21, 0x35, 0x3, 0xF3, 0xFE, 0xA9, 0xD7, 0xFE, 0x9A, 0x1, 0x66, 0xD7, 0x1, 0x57, 0x25, 0xFC, 0xB0, 0x2, 0xBC, 0xFE, 0x7C, 0x1, 0x84, 0xC7, 0x1, 0x79, 0xFE, 0x87, 0xFD, 0x42, 0xC4, 0xC4, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x9B, 0x2, 0xB2, 0x5, 0xBB, 0x0, 0x15, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x20, 0x16, 0x15, 0x14, 0x6, 0x7, 0x7, 0x2, 0xB2, 0xFD, 0x9C, 0x1, 0x2C, 0x63, 0x6A, 0x40, 0x3C, 0xBB, 0xA2, 0x1, 0x1C, 0x9E, 0x67, 0x61, 0x91, 0x3, 0x30, 0x95, 0x7E, 0x1, 0x13, 0x5C, 0x3F, 0x5F, 0x45, 0x32, 0x6E, 0x9E, 0x81, 0x72, 0x52, 0x80, 0x51, 0x75, 0x0, 0x1, 0x0, 0x37, 0x2, 0x90, 0x2, 0xA9, 0x5, 0xBB, 0x0, 0x24, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0x69, 0x70, 0xC2, 0xBB, 0x45, 0x3B, 0x3F, 0x3E, 0x86, 0x5C, 0x5C, 0x78, 0x36, 0x3E, 0x2F, 0x41, 0xBA, 0xAD, 0x79, 0x89, 0xAA, 0x87, 0x94, 0xB7, 0x2, 0x90, 0x70, 0x80, 0x25, 0x36, 0x38, 0x2A, 0x64, 0x2, 0x80, 0x2, 0x5F, 0x23, 0x35, 0x27, 0x23, 0x6B, 0x74, 0x73, 0x6E, 0x77, 0x33, 0x29, 0x8F, 0x6F, 0x79, 0x0, 0x1, 0x0, 0x71, 0x4, 0xD2, 0x2, 0x49, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x13, 0x13, 0x21, 0x1, 0x71, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0x4, 0xD2, 0x1, 0x2E, 0xFE, 0xD2, 0x0, 0x1, 0x0, 0x93, 0xFE, 0x60, 0x4, 0x1F, 0x4, 0x3A, 0x0, 0x12, 0x0, 0x0, 0x5, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x23, 0x27, 0x6, 0x2, 0x4A, 0x79, 0x4C, 0xF2, 0xF2, 0x1, 0x6F, 0x54, 0xA8, 0x3C, 0xF2, 0xDE, 0x7, 0x5A, 0x15, 0x38, 0xFE, 0x3D, 0x5, 0xDA, 0xFD, 0x8D, 0xAE, 0x6A, 0x7A, 0x3, 0x11, 0xFB, 0xC6, 0x57, 0x6C, 0x0, 0x1, 0x0, 0x46, 0x0, 0x0, 0x3, 0x56, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x23, 0x26, 0x2, 0x10, 0x12, 0x33, 0x21, 0x3, 0x56, 0xD1, 0x5A, 0xEA, 0xFB, 0xFE, 0xEE, 0x1, 0x24, 0x2, 0x8, 0x2, 0x1, 0x9, 0x1, 0x92, 0x1, 0xB, 0x0, 0x1, 0x0, 0x8E, 0x2, 0x46, 0x1, 0xAA, 0x3, 0x52, 0x0, 0x9, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x8E, 0x4B, 0x86, 0x4B, 0x4B, 0x86, 0x4B, 0x2, 0xCB, 0x39, 0x4E, 0x4E, 0x39, 0x38, 0x4D, 0x4D, 0x0, 0x1, 0x0, 0x6E, 0xFE, 0x40, 0x1, 0xC9, 0x0, 0x4, 0x0, 0xE, 0x0, 0x0, 0x37, 0x33, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x32, 0x35, 0x34, 0x26, 0x27, 0x8D, 0xB2, 0xC, 0x38, 0x5E, 0xA5, 0xA1, 0x7, 0x88, 0x46, 0x50, 0x4, 0x37, 0xA, 0x4D, 0x56, 0x65, 0x7B, 0x8A, 0x59, 0x2D, 0x22, 0x6, 0x0, 0x1, 0x0, 0x81, 0x2, 0x9B, 0x2, 0x3, 0x5, 0xAF, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x35, 0x25, 0x2, 0x3, 0xBA, 0xC8, 0x1, 0x6F, 0x5, 0xAF, 0xFC, 0xEC, 0x2, 0x3B, 0x31, 0x93, 0x77, 0x0, 0x2, 0x0, 0x77, 0x2, 0xB3, 0x3, 0x2C, 0x5, 0xC5, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x77, 0xBB, 0x9F, 0xA1, 0xBA, 0xB9, 0xFE, 0xC0, 0xBC, 0xAF, 0x55, 0x58, 0x56, 0x54, 0x55, 0x57, 0x56, 0x55, 0x4, 0x62, 0x9B, 0xC8, 0xC8, 0x9B, 0x4D, 0x9B, 0xC7, 0xC7, 0x9B, 0x59, 0x77, 0x77, 0x59, 0x4D, 0x58, 0x77, 0x77, 0x58, 0xFF, 0xFF, 0x0, 0x5E, 0x0, 0x8A, 0x3, 0x9A, 0x3, 0xA9, 0x0, 0x26, 0x4, 0x7A, 0x9, 0x0, 0x0, 0x7, 0x4, 0x7A, 0x1, 0x7E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x59, 0x0, 0x0, 0x5, 0x84, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0xFF, 0xD8, 0x2, 0x98, 0x0, 0x27, 0x4, 0x83, 0x1, 0x1B, 0x0, 0x8, 0x0, 0x7, 0x7, 0x9E, 0x2, 0xC5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x5, 0xCC, 0x5, 0xAF, 0x0, 0x27, 0x4, 0x83, 0x0, 0xF0, 0x0, 0x8, 0x0, 0x27, 0x7, 0x42, 0xFF, 0xCF, 0x2, 0x9B, 0x0, 0x7, 0x7, 0x41, 0x3, 0x1A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x67, 0x0, 0x0, 0x5, 0xFD, 0x5, 0xBB, 0x0, 0x27, 0x4, 0x83, 0x1, 0xA8, 0x0, 0x8, 0x0, 0x27, 0x7, 0x9E, 0x3, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x7, 0x9D, 0x0, 0x30, 0x2, 0x9B, 0x0, 0x2, 0x0, 0x43, 0xFE, 0x7E, 0x3, 0xA5, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x21, 0x0, 0x0, 0x1, 0x14, 0x6, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x3, 0x33, 0xE, 0x3, 0x15, 0x14, 0x33, 0x32, 0x36, 0x37, 0x33, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x2, 0x8B, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xF8, 0xE3, 0x1, 0x40, 0xD4, 0x2B, 0xBA, 0x4B, 0x76, 0x1, 0xF3, 0x2, 0xF9, 0xB7, 0xCD, 0xE3, 0x5C, 0x9E, 0x33, 0x22, 0x3, 0xCC, 0x37, 0x4C, 0x4C, 0x37, 0x38, 0x4A, 0x4A, 0xFE, 0x92, 0x87, 0x96, 0xDA, 0x5C, 0x3E, 0xBD, 0x58, 0x60, 0xBC, 0xC6, 0xC9, 0xBA, 0x66, 0xA5, 0x9C, 0x32, 0x72, 0x0, 0x2, 0xFF, 0xF6, 0x0, 0x0, 0x7, 0x57, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x1, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x3, 0xBF, 0x1B, 0xFE, 0xA0, 0x1, 0x92, 0xE, 0xFE, 0x8, 0xB8, 0xFE, 0xDE, 0x3, 0x43, 0x3, 0xE1, 0xFD, 0x79, 0x11, 0x2, 0x25, 0xFD, 0xE4, 0x13, 0x2, 0x97, 0x2, 0x2B, 0x2, 0x8A, 0xFD, 0x76, 0xFD, 0xD5, 0x1, 0x55, 0xFE, 0xAB, 0x5, 0xB0, 0xC4, 0xFE, 0x67, 0xC4, 0xFE, 0x35, 0xC4, 0x0, 0x1, 0x0, 0x4D, 0x0, 0xD7, 0x3, 0xEC, 0x4, 0x86, 0x0, 0xB, 0x0, 0x0, 0x25, 0x1, 0x1, 0x27, 0x1, 0x1, 0x37, 0x1, 0x1, 0x17, 0x1, 0x1, 0x3, 0x58, 0xFE, 0xC5, 0xFE, 0xC4, 0x94, 0x1, 0x3C, 0xFE, 0xC4, 0x94, 0x1, 0x3C, 0x1, 0x3B, 0x94, 0xFE, 0xC4, 0x1, 0x3C, 0xD7, 0x1, 0x42, 0xFE, 0xBE, 0x95, 0x1, 0x43, 0x1, 0x42, 0x95, 0xFE, 0xBE, 0x1, 0x42, 0x95, 0xFE, 0xBE, 0xFE, 0xBD, 0x0, 0x3, 0x0, 0x6A, 0xFF, 0xA1, 0x5, 0x22, 0x5, 0xEE, 0x0, 0x8, 0x0, 0x11, 0x0, 0x28, 0x0, 0x0, 0x1, 0x14, 0x17, 0x1, 0x26, 0x23, 0x22, 0x2, 0x15, 0x1, 0x32, 0x12, 0x35, 0x35, 0x34, 0x27, 0x1, 0x16, 0x17, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x2, 0x35, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x11, 0x15, 0x10, 0x0, 0x1, 0x67, 0x47, 0x1, 0xF6, 0x56, 0x88, 0xA3, 0xBC, 0x1, 0x61, 0xA7, 0xB6, 0x2C, 0xFE, 0x18, 0x4D, 0x6A, 0xA6, 0x83, 0x5B, 0xA8, 0x90, 0x5B, 0x67, 0x1, 0x51, 0x1, 0xB, 0xC3, 0x90, 0x57, 0xA7, 0x93, 0x9E, 0xFE, 0xB5, 0x2, 0xB3, 0xCF, 0x80, 0x3, 0x3A, 0x55, 0xFF, 0x0, 0xF5, 0xFD, 0xBE, 0x1, 0x2, 0xF5, 0x4B, 0xA6, 0x73, 0xFC, 0xDB, 0x36, 0xD0, 0x4B, 0x96, 0xEE, 0x5C, 0x1, 0x15, 0xB3, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0x65, 0x8F, 0xF2, 0xC0, 0xFE, 0xC0, 0x49, 0xFE, 0xB4, 0xFE, 0x85, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x4, 0x7F, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x1, 0x88, 0xF5, 0x91, 0x7E, 0x7E, 0x91, 0xF5, 0xF3, 0xF3, 0xFD, 0xF5, 0x1, 0x5, 0xFE, 0xF7, 0xF9, 0x3, 0xD6, 0xFE, 0x19, 0x95, 0x5C, 0x5F, 0x97, 0xFD, 0x56, 0xFE, 0xD4, 0x5, 0xB0, 0xFE, 0xE9, 0x2, 0xF8, 0xBD, 0xBE, 0xF8, 0x0, 0x1, 0x0, 0x88, 0xFF, 0xEC, 0x4, 0x9C, 0x6, 0x16, 0x0, 0x2C, 0x0, 0x0, 0x21, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x6, 0x15, 0x14, 0x1E, 0x2, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2E, 0x2, 0x35, 0x34, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x1, 0x7A, 0xF2, 0xEF, 0xC5, 0xAB, 0xE7, 0x3B, 0x3C, 0x62, 0x82, 0x61, 0xDF, 0xC0, 0x50, 0xAA, 0x27, 0x31, 0x20, 0x7C, 0x46, 0x62, 0x58, 0x62, 0x80, 0x62, 0x3F, 0x3F, 0x61, 0x4B, 0xB9, 0x4, 0x4, 0x52, 0xE0, 0xE4, 0xAF, 0xB5, 0x66, 0x71, 0x5A, 0x48, 0x3C, 0x61, 0x68, 0x85, 0x5F, 0xAF, 0xB5, 0x26, 0x1A, 0xC3, 0x13, 0x2D, 0x56, 0x43, 0x42, 0x61, 0x62, 0x83, 0x64, 0x53, 0x6A, 0x65, 0x4C, 0x56, 0x5B, 0xF9, 0x0, 0x3, 0x0, 0x48, 0xFF, 0xEB, 0x6, 0x85, 0x4, 0x4F, 0x0, 0x7, 0x0, 0x12, 0x0, 0x3C, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x5, 0x6, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x17, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0xC3, 0x6B, 0x78, 0xF, 0x1, 0xC3, 0x60, 0xFC, 0xBC, 0x3F, 0x84, 0x2B, 0xBC, 0x72, 0x75, 0x58, 0x4, 0xDB, 0x28, 0xC7, 0x98, 0xFC, 0x8D, 0x35, 0xCD, 0x9C, 0xB6, 0xC2, 0xF0, 0xE8, 0xBE, 0x5E, 0x58, 0x5F, 0x70, 0xF2, 0xF8, 0xCA, 0xE2, 0x6D, 0x82, 0xC9, 0xD8, 0xEA, 0xFD, 0x48, 0x9, 0x8D, 0x92, 0x71, 0x8B, 0x35, 0x3, 0x8B, 0x95, 0x73, 0x1D, 0x63, 0x88, 0xFD, 0x1A, 0x3D, 0x28, 0xD2, 0x66, 0x42, 0x3D, 0x52, 0x41, 0x1F, 0x5A, 0xA2, 0x3E, 0x64, 0xB6, 0x97, 0x9E, 0xAD, 0x46, 0x5A, 0x68, 0x5C, 0x3F, 0x13, 0x90, 0xBB, 0x84, 0x85, 0x1, 0xFE, 0xF8, 0xE2, 0x8D, 0x7E, 0xAB, 0x3D, 0x1F, 0x0, 0x2, 0x0, 0x68, 0xFF, 0xEC, 0x4, 0x41, 0x6, 0x2C, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x0, 0x5, 0x22, 0x0, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x26, 0x27, 0x7, 0x27, 0x37, 0x26, 0x27, 0x37, 0x16, 0x17, 0x37, 0x17, 0x7, 0x16, 0x12, 0x15, 0x15, 0x10, 0x0, 0x27, 0x32, 0x36, 0x35, 0x35, 0x27, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x2, 0x51, 0xD9, 0xFE, 0xF0, 0xF9, 0xCA, 0x93, 0x70, 0x34, 0x7B, 0xCD, 0x4E, 0xAD, 0x7D, 0xA4, 0x4B, 0xEE, 0xB2, 0xB4, 0x4D, 0x99, 0x77, 0x87, 0xFE, 0xE7, 0xD3, 0x77, 0x82, 0x1, 0x1B, 0x75, 0x5A, 0x7F, 0x8A, 0x83, 0x14, 0x1, 0x1C, 0xCC, 0xE4, 0x1, 0x15, 0x5A, 0xAC, 0x77, 0x88, 0x6D, 0x73, 0x52, 0x29, 0xC3, 0x31, 0x87, 0x77, 0x6D, 0x66, 0x7B, 0xFE, 0xB0, 0xCB, 0x57, 0xFF, 0x0, 0xFE, 0xC1, 0xC3, 0xD1, 0x9D, 0x67, 0x24, 0x2A, 0x3F, 0xAA, 0x93, 0x70, 0xB5, 0x0, 0x3, 0x0, 0x44, 0x0, 0x93, 0x4, 0x38, 0x4, 0xCD, 0x0, 0x9, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x15, 0x21, 0x35, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0xB3, 0x4B, 0x86, 0x4B, 0x4B, 0x86, 0x4B, 0x2, 0x85, 0xFC, 0xC, 0x1, 0x6F, 0x4B, 0x86, 0x4B, 0x4B, 0x86, 0x4B, 0x4, 0x47, 0x3A, 0x4C, 0x4C, 0x3A, 0x38, 0x4B, 0x4B, 0xF4, 0xD4, 0xD4, 0xFD, 0xFC, 0x39, 0x4C, 0x4C, 0x39, 0x38, 0x4C, 0x4C, 0x0, 0x3, 0x0, 0x50, 0xFF, 0x76, 0x4, 0x3E, 0x4, 0xBC, 0x0, 0x8, 0x0, 0x11, 0x0, 0x27, 0x0, 0x0, 0x1, 0x14, 0x17, 0x1, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x27, 0x1, 0x16, 0x17, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x3, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x13, 0x15, 0x14, 0x0, 0x1, 0x42, 0x41, 0x1, 0x2B, 0x2E, 0x3A, 0x87, 0x7D, 0x1, 0x6, 0x86, 0x7D, 0x3A, 0xFE, 0xD9, 0x2B, 0x33, 0x63, 0x54, 0x49, 0x90, 0x66, 0xCB, 0x3, 0x1, 0xA, 0xEC, 0x69, 0x59, 0x47, 0x90, 0x66, 0xC1, 0x4, 0xFE, 0xF7, 0x2, 0x12, 0xA0, 0x5E, 0x2, 0x61, 0x16, 0xD5, 0x8F, 0xFE, 0x88, 0xD2, 0x91, 0x15, 0x94, 0x5E, 0xFD, 0xA7, 0x11, 0xC3, 0x1E, 0x94, 0xD0, 0x94, 0x1, 0x2F, 0x1E, 0xEC, 0x1, 0x3B, 0x22, 0x90, 0xCF, 0x95, 0xFE, 0xDB, 0x21, 0xEB, 0xFE, 0xC5, 0x0, 0x2, 0x0, 0x83, 0xFE, 0x60, 0x4, 0x37, 0x6, 0x0, 0x0, 0xB, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x4E, 0x83, 0x73, 0x75, 0x83, 0x95, 0x41, 0x43, 0xD9, 0xB0, 0x6C, 0xF3, 0xF3, 0x6B, 0xAF, 0xCE, 0xD9, 0xDA, 0xAF, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7B, 0xFE, 0x1F, 0x7D, 0xC3, 0x74, 0xFE, 0x0, 0x7, 0xA0, 0xFD, 0xD8, 0x76, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0xB3, 0x6, 0x0, 0x0, 0xB, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x73, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xFC, 0xFC, 0xF3, 0xAF, 0xAF, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0xF1, 0xAB, 0x8D, 0x8D, 0xAB, 0xFB, 0x38, 0x0, 0x2, 0x0, 0x20, 0x0, 0x0, 0x5, 0x9E, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x17, 0x0, 0x0, 0x1, 0x35, 0x21, 0x15, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x4, 0x23, 0xFD, 0x75, 0x2, 0x8B, 0xFD, 0x75, 0xFD, 0x7B, 0x7B, 0xFD, 0x2, 0x8B, 0xFC, 0x7F, 0x7F, 0x3, 0x52, 0xBB, 0xBB, 0xFC, 0xAE, 0x2, 0x88, 0xFD, 0x78, 0x4, 0xD, 0xA1, 0x1, 0x2, 0xFE, 0xFE, 0x1, 0x2, 0xFE, 0xFE, 0xA1, 0xFB, 0xF3, 0x0, 0x1, 0x0, 0x90, 0x0, 0x0, 0x1, 0x83, 0x4, 0x3A, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x83, 0xF3, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x6B, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x36, 0xFE, 0xB8, 0x6D, 0xF3, 0xF3, 0x54, 0x1, 0x50, 0x1, 0x2D, 0xFE, 0x61, 0x1, 0xB8, 0x1, 0xAD, 0xFE, 0x53, 0x4, 0x3A, 0xFE, 0x51, 0x1, 0xAF, 0xFD, 0xF4, 0xFD, 0xD2, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x4, 0x36, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x0, 0x33, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x15, 0x7, 0x11, 0x21, 0x15, 0xA5, 0x83, 0x83, 0xFC, 0xEB, 0xEB, 0x2, 0x95, 0x2, 0x89, 0x28, 0x93, 0x28, 0x2, 0x94, 0xFD, 0xB8, 0x47, 0x93, 0x47, 0xFD, 0xF5, 0xCA, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x2, 0x2F, 0x6, 0x0, 0x0, 0xB, 0x0, 0x0, 0x21, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x15, 0x7, 0x1, 0x9B, 0xF3, 0x86, 0x86, 0xF3, 0x94, 0x94, 0x2, 0x92, 0x30, 0x92, 0x30, 0x2, 0xDC, 0xFD, 0x7A, 0x35, 0x92, 0x35, 0x0, 0x1, 0x0, 0x90, 0xFE, 0x4B, 0x5, 0x9, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x35, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x14, 0x6, 0x3, 0xA2, 0x46, 0x3C, 0xE, 0x2A, 0x39, 0x78, 0x3, 0xFD, 0x80, 0xFC, 0xFC, 0x2, 0x80, 0xFD, 0xBF, 0xFE, 0x4B, 0x11, 0xC7, 0xD, 0xA9, 0x41, 0x4, 0x17, 0xFB, 0xE9, 0x5, 0xB0, 0xFB, 0xEC, 0x4, 0x14, 0xFA, 0x17, 0xB9, 0xC3, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0x4B, 0x4, 0x6, 0x4, 0x4E, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x2, 0xA6, 0x45, 0x3A, 0xE, 0x26, 0x3D, 0x7A, 0x1, 0x65, 0x60, 0x93, 0x4A, 0xF2, 0xDE, 0xD, 0x71, 0xC6, 0xA1, 0xC3, 0x1, 0xBB, 0xFE, 0x4B, 0x11, 0xC5, 0xC, 0xA9, 0x2, 0xE2, 0x83, 0x65, 0x68, 0xFC, 0xE0, 0x4, 0x3A, 0x96, 0xAA, 0xC4, 0xE3, 0xFD, 0x1A, 0xB6, 0xC0, 0x0, 0x2, 0x0, 0x65, 0xFF, 0xEB, 0x7, 0x2D, 0x5, 0xC5, 0x0, 0xB, 0x0, 0x21, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x5, 0x6, 0x23, 0x20, 0x0, 0x11, 0x11, 0x10, 0x0, 0x21, 0x32, 0x17, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x2, 0xAB, 0x5B, 0x70, 0x70, 0x5D, 0x9C, 0xB6, 0xB8, 0x1, 0xBC, 0xB0, 0x70, 0xFE, 0xFD, 0xFE, 0xBD, 0x1, 0x41, 0x1, 0x3, 0x72, 0xB0, 0x3, 0x5C, 0xFD, 0x4B, 0x2, 0x56, 0xFD, 0xAA, 0x2, 0xBB, 0xAE, 0xE, 0x4, 0x38, 0xE, 0xC9, 0xC7, 0xFE, 0xCE, 0xC7, 0xCB, 0xAE, 0x15, 0x1, 0x4C, 0x1, 0x9, 0x1, 0x30, 0x1, 0x9, 0x1, 0x4C, 0x15, 0xCB, 0xFE, 0x6D, 0xC7, 0xFE, 0x3F, 0xCA, 0x0, 0x3, 0x0, 0x5B, 0xFF, 0xEB, 0x6, 0xF3, 0x4, 0x4F, 0x0, 0xD, 0x0, 0x15, 0x0, 0x37, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x17, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x1, 0x4E, 0x76, 0x88, 0x87, 0x76, 0x76, 0x89, 0x87, 0x75, 0x3, 0xE1, 0x5C, 0x74, 0x11, 0x1, 0xB4, 0x63, 0x1, 0x39, 0x35, 0xC6, 0x91, 0x7E, 0xC4, 0x42, 0x3F, 0xC0, 0x7D, 0xEB, 0xFE, 0xFD, 0x3, 0x1, 0x4, 0xEB, 0x7E, 0xC2, 0x3F, 0x40, 0xB9, 0x6D, 0xE2, 0xE2, 0xFD, 0x56, 0xA, 0x87, 0x80, 0x6B, 0x8D, 0x37, 0x2, 0x12, 0x91, 0xD3, 0xD3, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x1, 0x64, 0x93, 0x6F, 0x1A, 0x5F, 0x89, 0xFC, 0xE1, 0x2E, 0x53, 0x5D, 0x52, 0x52, 0x5D, 0x1, 0x36, 0xE7, 0x1F, 0xEC, 0x1, 0x3B, 0x5E, 0x52, 0x53, 0x5E, 0x1, 0xFE, 0xF2, 0xD9, 0x90, 0x7C, 0xAD, 0x37, 0x26, 0x0, 0x1, 0x0, 0x8B, 0x0, 0x0, 0x2, 0x96, 0x6, 0x15, 0x0, 0xC, 0x0, 0x0, 0x21, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x1, 0x7E, 0xF3, 0xC5, 0xAE, 0x3D, 0x5B, 0x19, 0x2A, 0x32, 0xA3, 0x4, 0xA1, 0xB5, 0xBF, 0x15, 0xB9, 0xB, 0xB1, 0xFF, 0xFF, 0x0, 0x1A, 0xFF, 0xEC, 0x4, 0x8B, 0x6, 0x0, 0x0, 0x26, 0x0, 0x47, 0x59, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x8A, 0x2, 0x39, 0x0, 0x3, 0x0, 0x22, 0x0, 0x0, 0x5, 0xA1, 0x5, 0xB0, 0x0, 0x7, 0x0, 0xF, 0x0, 0x2A, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x6, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x33, 0x31, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x2, 0x90, 0xF8, 0x76, 0x85, 0xF2, 0xFE, 0xFF, 0x1, 0x19, 0x7D, 0x7F, 0xE3, 0xFD, 0xD1, 0x5B, 0x48, 0x9, 0xC6, 0x11, 0xBF, 0xB2, 0x1, 0xF2, 0xEE, 0x1, 0xC, 0x6C, 0x67, 0x7D, 0x78, 0xFE, 0xF4, 0xEC, 0x4, 0xE5, 0xFE, 0x67, 0x6B, 0x61, 0xC8, 0x5, 0xFD, 0xAC, 0xFE, 0x39, 0x7C, 0x64, 0xE0, 0x7, 0xFD, 0x6F, 0x4, 0xE5, 0x1, 0x63, 0x4C, 0x25, 0x26, 0x39, 0x49, 0x9E, 0xA6, 0xBE, 0xCC, 0x63, 0xA1, 0x2B, 0x21, 0xBB, 0x72, 0xD0, 0xD9, 0xFF, 0xFF, 0x0, 0x90, 0x0, 0x0, 0x4, 0xC1, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x30, 0xF5, 0x0, 0x0, 0x6, 0x2, 0x7C, 0xFF, 0x0, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x32, 0x6, 0x0, 0x0, 0x11, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x4, 0x32, 0xD7, 0xCE, 0xBD, 0x6C, 0xB, 0xDC, 0x2, 0xDE, 0xFE, 0x14, 0x6A, 0xB2, 0xD1, 0xD6, 0xFE, 0x1D, 0x87, 0x6A, 0x67, 0x8C, 0x9B, 0x43, 0x44, 0x2, 0x12, 0xEF, 0xFE, 0xC9, 0x8A, 0x76, 0x6, 0x0, 0xAB, 0xFE, 0x7D, 0x7C, 0xFE, 0xCD, 0xF4, 0xFE, 0x8C, 0xCA, 0xAA, 0x8F, 0xD2, 0x8C, 0xFE, 0x44, 0x8D, 0x0, 0x2, 0x0, 0x55, 0x0, 0x0, 0x5, 0x33, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x15, 0x0, 0x0, 0x21, 0x11, 0x27, 0x35, 0x37, 0x33, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x1, 0x2, 0xAD, 0xAD, 0xFD, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFE, 0xEC, 0xF8, 0xFE, 0xD8, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x3, 0xC7, 0xBE, 0x6C, 0xBF, 0xFD, 0xD3, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x2, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xB2, 0x6, 0x0, 0x0, 0x12, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x11, 0x27, 0x35, 0x37, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x3, 0xC, 0xBC, 0x6C, 0xC, 0xDC, 0xAD, 0xAD, 0xF3, 0x6A, 0xB1, 0xD0, 0xD7, 0x1, 0xD8, 0xFE, 0xF5, 0x86, 0x6A, 0x66, 0x8C, 0x9C, 0x42, 0x43, 0x14, 0x89, 0x75, 0x4, 0x17, 0xBE, 0x6C, 0xBF, 0xFD, 0xD3, 0x7B, 0xFE, 0xD0, 0xF3, 0x19, 0xEF, 0xFE, 0xC9, 0xC7, 0xCA, 0xAA, 0x8F, 0xD2, 0x8B, 0xFE, 0x43, 0x8D, 0x0, 0x1, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0xD3, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x21, 0x20, 0x0, 0x4D, 0xFC, 0x11, 0x86, 0x9D, 0xAB, 0xAC, 0x1, 0x9C, 0xB1, 0xA3, 0x89, 0x12, 0xFC, 0x14, 0x1, 0x1A, 0x1, 0xC, 0x1, 0xA, 0x1, 0x3D, 0x4, 0xFE, 0xBD, 0xFE, 0xED, 0xFE, 0xFA, 0xFE, 0xEC, 0x1, 0xE1, 0x8B, 0x9E, 0xFB, 0xE4, 0x7D, 0xDA, 0x1, 0xA, 0x96, 0x8C, 0xD4, 0x1, 0x1A, 0xFE, 0x92, 0xFE, 0xCD, 0x85, 0xFE, 0xC5, 0xFE, 0x89, 0x1, 0x1B, 0x0, 0x1, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xEF, 0x6, 0x4, 0x0, 0x25, 0x0, 0x0, 0x1, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x4, 0xEB, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x13, 0xF1, 0x90, 0x4A, 0xE5, 0x44, 0x3E, 0x21, 0x2A, 0x4C, 0x6C, 0xFC, 0x10, 0x87, 0x9C, 0xAB, 0xAC, 0x1, 0x9B, 0xB1, 0xA3, 0x89, 0x12, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0x81, 0xC1, 0x11, 0xC9, 0x8, 0x40, 0x64, 0xBF, 0x8C, 0x9D, 0xFA, 0xE4, 0x7D, 0xDA, 0xFE, 0xF5, 0x97, 0x8B, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0xD3, 0x4, 0x99, 0x0, 0x25, 0x0, 0x0, 0x1, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x3, 0xF5, 0x4, 0xFF, 0x0, 0xB5, 0xFA, 0xF2, 0xF3, 0xF9, 0xB2, 0x76, 0x3A, 0xC6, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5D, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0x96, 0x58, 0x7A, 0x5, 0x1, 0x66, 0x9D, 0xDD, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0x60, 0xAB, 0xF, 0xA3, 0x7, 0x3E, 0x56, 0xA3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x68, 0x4F, 0xFF, 0xFF, 0x0, 0x21, 0x0, 0x0, 0x5, 0x1E, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x4C, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x91, 0x0, 0x0, 0x2, 0x0, 0x22, 0x0, 0x0, 0x5, 0xD1, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x6, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x10, 0x21, 0x31, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x2, 0x90, 0xA6, 0xCC, 0xD0, 0x2, 0xCF, 0xC4, 0xFE, 0x53, 0x5C, 0x48, 0x9, 0xC6, 0x11, 0x1, 0x72, 0x1, 0xAD, 0x1, 0x25, 0x1, 0x6B, 0xFE, 0x93, 0xFE, 0xD2, 0x4, 0xE5, 0xFB, 0xE5, 0x1, 0x0, 0xE1, 0x53, 0xEC, 0xFB, 0xFB, 0x1B, 0x4, 0xE5, 0x1, 0x62, 0x4D, 0x25, 0x26, 0x39, 0x49, 0x1, 0x44, 0xFE, 0x87, 0xFE, 0xC5, 0x49, 0xFE, 0xC5, 0xFE, 0x88, 0x0, 0x2, 0x0, 0x4E, 0x0, 0x0, 0x4, 0x7F, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x14, 0x0, 0x0, 0x21, 0x21, 0x26, 0x24, 0x35, 0x34, 0x24, 0x33, 0x21, 0x11, 0x21, 0x35, 0x21, 0x3, 0x11, 0x21, 0x22, 0x6, 0x14, 0x16, 0x33, 0x4, 0x7F, 0xFD, 0xD7, 0xF6, 0xFE, 0xEE, 0x1, 0x14, 0xF8, 0x1, 0x29, 0xFD, 0x60, 0x3, 0x9C, 0xFC, 0xFE, 0xD7, 0x8D, 0x82, 0x82, 0x8D, 0x1, 0xFE, 0xC7, 0xCA, 0xF3, 0x1, 0x62, 0xCB, 0xFB, 0x1A, 0x1, 0xEE, 0x8B, 0xCA, 0x99, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x4, 0x6, 0x0, 0x0, 0xB, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x21, 0x35, 0x21, 0x11, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x73, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xFE, 0x15, 0x2, 0xDE, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x1, 0x7E, 0xAB, 0xFA, 0x0, 0x0, 0x2, 0x0, 0x53, 0xFE, 0x88, 0x4, 0x34, 0x4, 0x4D, 0x0, 0x15, 0x0, 0x25, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x26, 0x27, 0x26, 0x2, 0x35, 0x35, 0x34, 0x0, 0x20, 0x0, 0x15, 0x15, 0x14, 0x2, 0x7, 0x7, 0x16, 0x17, 0x3, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x16, 0x33, 0x32, 0x36, 0x35, 0x3, 0xB0, 0xFD, 0x14, 0x1, 0xAC, 0x31, 0x8A, 0x99, 0xC9, 0x1, 0x3, 0x1, 0xDA, 0x1, 0x4, 0xE9, 0xC4, 0x21, 0xEA, 0x60, 0x6F, 0x75, 0x89, 0x87, 0x76, 0x66, 0x42, 0x1D, 0x2D, 0x8E, 0x7B, 0xFE, 0x88, 0xC1, 0x31, 0x70, 0x82, 0x1, 0x10, 0xA9, 0x15, 0xE3, 0x1, 0x30, 0xFE, 0xD8, 0xDD, 0x15, 0xBE, 0xFE, 0xF3, 0x1B, 0x2, 0xCF, 0x6B, 0x3, 0x29, 0x8A, 0xC6, 0xC6, 0x8A, 0x15, 0x73, 0xA9, 0x2B, 0x8, 0xC8, 0x87, 0x0, 0x1, 0x0, 0x3A, 0x0, 0x0, 0x3, 0xF2, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x33, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x41, 0x2, 0xB4, 0xFD, 0xAA, 0x2, 0x56, 0xFD, 0x45, 0x3, 0xB8, 0xCB, 0x1, 0x93, 0xC7, 0x1, 0xC1, 0xCA, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x51, 0xFF, 0xEC, 0x5, 0x1E, 0x5, 0xC4, 0x0, 0x16, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x20, 0x0, 0x11, 0x35, 0x21, 0x26, 0x2, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x20, 0x0, 0x11, 0x15, 0x14, 0x2, 0x4, 0x27, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x2, 0xB8, 0xFE, 0xD0, 0xFE, 0xC9, 0x3, 0xD1, 0x3, 0xC6, 0xE7, 0x83, 0xB6, 0x39, 0x31, 0x20, 0xE4, 0xA6, 0x1, 0x49, 0x1, 0x5C, 0xA4, 0xFE, 0xEA, 0xAC, 0xA1, 0xB7, 0xF, 0xFD, 0x2F, 0xA0, 0x14, 0x1, 0x6E, 0x1, 0x36, 0x8E, 0xC1, 0x1, 0xF, 0x30, 0x16, 0xC5, 0x13, 0x44, 0xFE, 0x7D, 0xFE, 0xCF, 0x75, 0xCB, 0xFE, 0xCA, 0xAE, 0xD5, 0xEB, 0xAC, 0x1F, 0x9D, 0xDB, 0x0, 0x1, 0x0, 0x57, 0xFF, 0xEB, 0x4, 0x8D, 0x5, 0xC5, 0x0, 0x28, 0x0, 0x0, 0x1, 0x14, 0x6, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x8D, 0x9C, 0xF2, 0x80, 0xEE, 0xFE, 0xC6, 0xF9, 0x69, 0x7A, 0x1, 0x23, 0xEF, 0xCE, 0x1, 0x2B, 0xFC, 0x8F, 0x6E, 0x92, 0x83, 0x77, 0x8E, 0xAA, 0xAA, 0x8D, 0x8E, 0xA3, 0x88, 0x7F, 0x93, 0x1, 0x94, 0x95, 0xBC, 0x58, 0xCA, 0xE3, 0xF9, 0x59, 0x2C, 0xA1, 0x6E, 0xCC, 0xD4, 0xDA, 0xBD, 0x5D, 0x6E, 0x7A, 0x5A, 0x62, 0x79, 0xC7, 0x6E, 0x7D, 0x75, 0x6D, 0x80, 0x5E, 0x0, 0x1, 0x0, 0x0, 0xFE, 0x4B, 0x4, 0x84, 0x5, 0xB0, 0x0, 0x12, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x6, 0x7F, 0x45, 0x3A, 0xE, 0x32, 0x2D, 0x7B, 0x3, 0x9C, 0xFD, 0x60, 0x2, 0x4A, 0xFD, 0xB6, 0xC0, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x5, 0xEF, 0xCB, 0xFE, 0x4E, 0xCA, 0xFD, 0x58, 0xB6, 0xC0, 0x0, 0x1, 0xFF, 0xE4, 0xFE, 0x4B, 0x2, 0xD3, 0x6, 0x15, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x15, 0x23, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x23, 0x35, 0x33, 0x35, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x2, 0x84, 0xC8, 0xB8, 0xA1, 0x45, 0x3A, 0xE, 0x21, 0x3E, 0x77, 0x1, 0xA5, 0xA5, 0x2, 0x5B, 0x63, 0xB2, 0x3F, 0x59, 0x18, 0x2B, 0x37, 0x9B, 0x2, 0x4, 0x3A, 0xB3, 0xFC, 0x33, 0xB2, 0xBD, 0x11, 0xBF, 0xD, 0xA9, 0x3, 0xD0, 0xB3, 0x6E, 0xAB, 0x5D, 0x65, 0x15, 0xBC, 0xA, 0xA9, 0x6B, 0x0, 0x1, 0x0, 0x6A, 0xFF, 0xEC, 0x5, 0xF3, 0x6, 0x4, 0x0, 0x29, 0x0, 0x0, 0x25, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x11, 0x21, 0x35, 0x21, 0x4, 0xF0, 0x2E, 0xF5, 0xF5, 0xFE, 0xED, 0xFE, 0xA5, 0x1, 0x3E, 0x1, 0x1A, 0xF6, 0x8F, 0x4A, 0xE0, 0x46, 0x3C, 0x24, 0x26, 0x4C, 0x6C, 0xF9, 0x13, 0x8A, 0x95, 0xB0, 0xAB, 0x2, 0xC8, 0xAF, 0x83, 0x77, 0x1A, 0xFE, 0xD5, 0x2, 0x27, 0xBE, 0x3D, 0x95, 0x1, 0x6E, 0x1, 0x4E, 0x5F, 0x1, 0x4E, 0x1, 0x6F, 0x7A, 0xBA, 0x11, 0xC5, 0x9, 0x45, 0x64, 0x9B, 0x71, 0x95, 0xFE, 0xE8, 0x6B, 0xF0, 0xFE, 0xFE, 0x3C, 0x1C, 0x1, 0x1E, 0xBF, 0x0, 0x2, 0x0, 0x18, 0xFE, 0x4B, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x16, 0x16, 0x15, 0x14, 0x6, 0x26, 0x35, 0x34, 0x27, 0x6, 0x15, 0x14, 0x2, 0x98, 0x88, 0xAE, 0x74, 0x49, 0xFD, 0xF9, 0x1, 0x1D, 0x1, 0x61, 0x1, 0x65, 0x1, 0x1E, 0xFD, 0xF7, 0x47, 0x73, 0xAB, 0x48, 0x3F, 0x3F, 0xFE, 0x4B, 0x81, 0x81, 0x42, 0xF8, 0xAA, 0x4, 0x7F, 0xFC, 0xA2, 0x3, 0x5E, 0xFB, 0x7C, 0xA7, 0xF6, 0x42, 0x81, 0x81, 0xBC, 0x4B, 0x3E, 0x92, 0x93, 0x3D, 0x4B, 0x0, 0x1, 0x0, 0x7A, 0xFF, 0xEC, 0x6, 0x43, 0x6, 0x0, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x16, 0x16, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x6, 0x6, 0x4, 0xA5, 0xCA, 0xD3, 0x2, 0x4A, 0x75, 0x93, 0x48, 0xF2, 0xF2, 0x76, 0xB7, 0xD0, 0x90, 0x1, 0x67, 0x88, 0x67, 0xF3, 0x2, 0xD3, 0x14, 0xD1, 0xEE, 0x1, 0x7, 0x5F, 0x77, 0x83, 0xFC, 0xFB, 0x6, 0x0, 0xFD, 0xC3, 0x8B, 0xF2, 0xAA, 0xFE, 0xFA, 0x90, 0x69, 0x6B, 0x94, 0x2, 0x88, 0xFD, 0x71, 0xEE, 0xD1, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x3F, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x84, 0x0, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xC4, 0x0, 0x16, 0x0, 0x0, 0x21, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x13, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x3, 0x1, 0x3, 0xEC, 0xFE, 0x4D, 0xA8, 0xFC, 0xFC, 0x8D, 0xE8, 0x4C, 0x83, 0x6A, 0x6F, 0x68, 0x59, 0x2C, 0x32, 0x20, 0x33, 0x3A, 0xF7, 0x2, 0x3D, 0x2, 0x72, 0xBC, 0xFE, 0x4A, 0x5, 0xB0, 0xFD, 0x45, 0xBD, 0x1, 0x2D, 0x67, 0x7E, 0x45, 0xB1, 0x1B, 0x26, 0x4D, 0xFE, 0xB9, 0xFC, 0xD1, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x37, 0x6, 0x15, 0x0, 0x16, 0x0, 0x0, 0x21, 0x1, 0x7, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x3, 0x1E, 0xFE, 0xBF, 0x6D, 0xF3, 0xBB, 0x9A, 0x4C, 0x2F, 0x1D, 0x23, 0x40, 0x5D, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6D, 0x1, 0xBE, 0x1, 0xD2, 0x70, 0xFE, 0x9E, 0x4, 0xD6, 0x9D, 0xA2, 0xF, 0xA3, 0x7, 0x3E, 0x56, 0xFD, 0xB4, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xFD, 0x88, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x5C, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x84, 0x4A, 0x0, 0x1, 0x0, 0x16, 0xFF, 0xEE, 0x4, 0x4A, 0x5, 0xFC, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x3, 0x3, 0x21, 0x1, 0x27, 0x7, 0x35, 0x37, 0x26, 0x23, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x17, 0x17, 0x37, 0x15, 0x7, 0x1, 0x16, 0x33, 0x37, 0x17, 0x6, 0x3, 0xEC, 0x65, 0x79, 0x2D, 0xCA, 0xF8, 0xFE, 0xF7, 0x1, 0x82, 0x17, 0xBC, 0x79, 0x26, 0x4F, 0x35, 0x3, 0x31, 0x51, 0x6B, 0x77, 0x1F, 0xD, 0xB1, 0x72, 0x1, 0x61, 0x26, 0x3D, 0x23, 0x3, 0x28, 0x12, 0x51, 0x73, 0x2, 0x18, 0xFD, 0x36, 0x4, 0x11, 0x38, 0x43, 0xB6, 0x2B, 0x51, 0x2, 0xB5, 0x11, 0x54, 0x4E, 0x22, 0x3F, 0xB6, 0x29, 0xFC, 0x7D, 0x5E, 0x2, 0xC2, 0x9, 0x0, 0x1, 0x0, 0x99, 0xFF, 0xEC, 0x6, 0xA6, 0x5, 0xB0, 0x0, 0x1E, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x3, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x5, 0xC7, 0xA, 0x6C, 0xC6, 0xE8, 0x4F, 0x6C, 0xEA, 0xA1, 0xC3, 0x1, 0xF3, 0x67, 0x44, 0xBA, 0x39, 0x4, 0xF3, 0x67, 0x44, 0xB6, 0x39, 0xF3, 0x74, 0x88, 0xB9, 0xB9, 0xC1, 0x1, 0x1, 0x4, 0x2, 0xFC, 0x2, 0x94, 0x6B, 0xA7, 0x43, 0x4, 0x13, 0xFC, 0x2, 0x94, 0x6B, 0x9C, 0x4, 0x61, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x0, 0xFE, 0x4B, 0x5, 0x6B, 0x5, 0xB0, 0x0, 0x12, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x23, 0x1, 0x11, 0x14, 0x6, 0x7F, 0x45, 0x3A, 0xE, 0x32, 0x2D, 0x7B, 0xFC, 0x2, 0x8C, 0xFB, 0xFD, 0xFD, 0x76, 0xC0, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x5, 0xEF, 0xFB, 0xF4, 0x4, 0xC, 0xFA, 0x50, 0x4, 0x9, 0xFB, 0xB8, 0xB6, 0xC0, 0x0, 0x2, 0x0, 0x58, 0xFF, 0xEC, 0x5, 0xAA, 0x6, 0x2E, 0x0, 0x14, 0x0, 0x22, 0x0, 0x0, 0x5, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x36, 0x36, 0x35, 0x33, 0x10, 0x7, 0x16, 0x17, 0x15, 0x10, 0x0, 0x13, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x2, 0xB6, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0xFF, 0xA2, 0x55, 0x45, 0xBB, 0xF4, 0x59, 0x1, 0xFE, 0xB5, 0x4F, 0xB9, 0xA7, 0xA3, 0xBC, 0xBE, 0xA3, 0xA7, 0xB7, 0x14, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xA7, 0xD, 0x8F, 0x75, 0xFE, 0xAF, 0x47, 0xAA, 0xEB, 0x4E, 0xFE, 0xB4, 0xFE, 0x85, 0x3, 0x12, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x2, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xBC, 0x4, 0xA9, 0x0, 0x14, 0x0, 0x22, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x36, 0x36, 0x35, 0x33, 0x10, 0x7, 0x16, 0x15, 0x15, 0x14, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x2, 0x47, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0xE3, 0x87, 0x3F, 0x26, 0xA8, 0xC0, 0x41, 0xFE, 0xF7, 0xFE, 0xE, 0x7D, 0x88, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0x14, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0x94, 0x16, 0x7D, 0x5C, 0xFE, 0xE5, 0x43, 0x7F, 0xA5, 0x15, 0xEB, 0xFE, 0xC5, 0x2, 0x26, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x2, 0x0, 0x66, 0xFE, 0x60, 0x6, 0x69, 0x5, 0xC4, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x1, 0x23, 0x11, 0x7, 0x11, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x16, 0x17, 0x25, 0x33, 0x1, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x12, 0x6, 0x69, 0xF2, 0x91, 0x2E, 0xF1, 0xF5, 0xFE, 0xF0, 0xFE, 0xA4, 0x1, 0x5B, 0x1, 0x11, 0xB3, 0xDD, 0x3E, 0x1, 0x10, 0xB9, 0xFC, 0x76, 0x83, 0x77, 0x1B, 0x1E, 0x7A, 0x83, 0xB1, 0xC5, 0xBE, 0xFE, 0x60, 0x6, 0x46, 0x3B, 0xFC, 0x54, 0x3D, 0x96, 0x1, 0x68, 0x1, 0x54, 0x61, 0x1, 0x4C, 0x1, 0x6F, 0x56, 0x34, 0x76, 0xFB, 0x6, 0x3F, 0x1C, 0x3, 0x8E, 0x20, 0x3B, 0xFF, 0xF2, 0x61, 0xE5, 0xFE, 0xF3, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x5, 0x1B, 0x4, 0x4E, 0x0, 0x13, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x23, 0x11, 0x7, 0x11, 0x6, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x1B, 0xF3, 0x70, 0x3A, 0xBC, 0x86, 0xFA, 0xF2, 0xF3, 0xF9, 0x6B, 0xA6, 0x38, 0xE4, 0xB2, 0xFD, 0x1F, 0x53, 0x38, 0x38, 0x54, 0x94, 0x63, 0x78, 0xFE, 0x60, 0x4, 0xB3, 0x39, 0xFD, 0xCA, 0x4F, 0x69, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0x4C, 0x37, 0x6F, 0xFC, 0x75, 0x2D, 0x2, 0x7C, 0x33, 0xDB, 0x81, 0x24, 0x9F, 0xBD, 0x0, 0x2, 0x0, 0x22, 0x0, 0x0, 0x5, 0xD2, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x6, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x33, 0x31, 0x21, 0x32, 0x0, 0x15, 0x14, 0x4, 0x23, 0x2, 0x90, 0x1, 0x30, 0x93, 0x81, 0x81, 0x93, 0xFE, 0xD0, 0xFD, 0x5B, 0x48, 0x9, 0xC6, 0x11, 0xBF, 0xB2, 0x2, 0x2D, 0xFE, 0x1, 0x14, 0xFE, 0xEC, 0xFE, 0x4, 0xE5, 0xFE, 0x3, 0x8A, 0x6D, 0x66, 0xA0, 0xFD, 0x38, 0xFD, 0xE3, 0x4, 0xE5, 0x1, 0x63, 0x4C, 0x25, 0x26, 0x39, 0x49, 0x9E, 0xA6, 0xFE, 0xFA, 0xC9, 0xD3, 0xF1, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x5, 0x72, 0x0, 0xB, 0x0, 0x26, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x31, 0x36, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x48, 0x83, 0x73, 0x75, 0x83, 0x96, 0x41, 0x43, 0xDA, 0xB1, 0x6C, 0xF2, 0x3, 0xD4, 0x7D, 0x49, 0x33, 0x25, 0x1B, 0x41, 0x5D, 0x6B, 0xB0, 0xCE, 0xD9, 0xDA, 0xAF, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0xC3, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0xAF, 0x89, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0x5C, 0x77, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x95, 0xFE, 0x9C, 0x5, 0x9A, 0x6, 0x18, 0x0, 0x10, 0x0, 0x19, 0x0, 0x0, 0x1, 0x21, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x15, 0x21, 0x16, 0x4, 0x15, 0x14, 0x6, 0x7, 0x1, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x5, 0x9A, 0xFE, 0xF1, 0xFE, 0x22, 0xFE, 0xE4, 0xFC, 0xFC, 0x1, 0x11, 0xF5, 0x1, 0xB, 0x8E, 0x7D, 0x2, 0x3, 0xFB, 0xF7, 0x1, 0x4, 0x88, 0x89, 0x80, 0x8D, 0xFE, 0x9C, 0x3, 0x95, 0xFD, 0xCF, 0x6, 0x18, 0x68, 0x3, 0xE0, 0xD4, 0x92, 0xC6, 0x34, 0xFC, 0x3C, 0x6, 0x3C, 0xFE, 0x17, 0x89, 0x68, 0x70, 0x87, 0x1, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x24, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0x4, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x0, 0x33, 0x32, 0x4, 0x10, 0x4, 0x4, 0x6, 0x1, 0x47, 0x86, 0x83, 0x86, 0xB7, 0xFD, 0xA8, 0xFE, 0xFA, 0x8C, 0xEC, 0xFE, 0xE6, 0xEC, 0xFB, 0x9A, 0x95, 0x7F, 0x86, 0x8D, 0x86, 0xFC, 0x1, 0x16, 0xF7, 0xE7, 0x1, 0x1D, 0xFE, 0xF7, 0xFE, 0x66, 0x73, 0x1, 0x78, 0x58, 0x6C, 0x7A, 0x8A, 0x99, 0xCD, 0x66, 0xD6, 0xB8, 0xAD, 0xD9, 0x49, 0x2D, 0x6B, 0x51, 0x56, 0x73, 0x89, 0x6B, 0xB6, 0x1, 0x7, 0xE3, 0xFE, 0xA0, 0xCA, 0x7F, 0x69, 0x0, 0x1, 0x0, 0x57, 0xFF, 0xEC, 0x3, 0xD6, 0x4, 0x4E, 0x0, 0x25, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x6, 0x1, 0x46, 0x65, 0x5F, 0x51, 0x8A, 0x5, 0xEC, 0xEA, 0xDF, 0xC7, 0xEF, 0xD4, 0xBC, 0x83, 0x5B, 0x58, 0x5C, 0x5F, 0x60, 0xF3, 0xE7, 0xCA, 0xC1, 0xE1, 0xD8, 0xB2, 0x8E, 0x54, 0x1, 0x26, 0x3A, 0x4A, 0x50, 0x64, 0x86, 0xE4, 0xB8, 0x90, 0x91, 0x92, 0x28, 0x1C, 0x40, 0x35, 0x36, 0x52, 0x63, 0x3F, 0x92, 0xC6, 0xC3, 0x85, 0x88, 0x94, 0x25, 0x1E, 0x4C, 0xFF, 0xFF, 0x0, 0x48, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x6, 0x2, 0x36, 0x0, 0x0, 0x0, 0x2, 0x0, 0x1B, 0xFE, 0x5E, 0x3, 0xD0, 0x6, 0x1F, 0x0, 0x15, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x20, 0x3, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0x32, 0x36, 0x34, 0x26, 0x23, 0x22, 0x6, 0x14, 0x16, 0x3, 0x4F, 0xFE, 0xC4, 0x8, 0x3D, 0x42, 0x99, 0xD8, 0xD8, 0x99, 0x98, 0xDA, 0x88, 0x26, 0x24, 0x3C, 0xFD, 0xF9, 0x3E, 0x56, 0x56, 0x3E, 0x40, 0x57, 0x57, 0xFE, 0x5E, 0x1, 0x64, 0x3, 0x91, 0x16, 0xD8, 0x98, 0x99, 0xD9, 0xD9, 0x99, 0xFB, 0x27, 0xAE, 0x9, 0xC0, 0x11, 0x5, 0xB4, 0x4F, 0x9C, 0x50, 0x50, 0x9C, 0x4F, 0x0, 0x1, 0x0, 0x8, 0xFE, 0x84, 0x2, 0x73, 0x5, 0x41, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x26, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x2, 0x1, 0x5E, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x77, 0x9A, 0xB3, 0xB3, 0xF2, 0xBF, 0xBF, 0x40, 0x31, 0x2A, 0x2B, 0x6, 0xFE, 0x84, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x28, 0x2, 0x89, 0xA5, 0x2, 0x6B, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0xFE, 0xF7, 0xFE, 0xCD, 0x0, 0x1, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x25, 0x5, 0xB0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x10, 0x25, 0x21, 0x5, 0x25, 0xFE, 0x3A, 0xFB, 0xD0, 0x5E, 0x49, 0x8, 0xC6, 0x11, 0x1, 0x64, 0x3, 0xA3, 0x4, 0xE5, 0xFB, 0x1B, 0x4, 0xE5, 0x63, 0x4D, 0x23, 0x28, 0x3E, 0x44, 0x1, 0x3C, 0x8, 0x0, 0x1, 0x0, 0x13, 0xFF, 0xEC, 0x2, 0x95, 0x6, 0x1F, 0x0, 0x1F, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x36, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x7D, 0x43, 0x5D, 0x79, 0x9F, 0xB2, 0xB2, 0x1, 0xD5, 0x7E, 0x49, 0x33, 0x25, 0x1B, 0x40, 0x5D, 0xBF, 0xBF, 0x3F, 0x31, 0x2A, 0x2B, 0x4, 0x18, 0x95, 0xAF, 0x2, 0x57, 0xB3, 0xA9, 0xB1, 0x8B, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xA6, 0xB3, 0xFD, 0xB7, 0x51, 0x37, 0xA, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x4B, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x14, 0x33, 0x32, 0x37, 0x3, 0xCF, 0x3A, 0x45, 0xA4, 0xBD, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0x74, 0x31, 0x31, 0xFE, 0x5C, 0x11, 0xC0, 0xB6, 0x5, 0x24, 0xCB, 0xCB, 0xFA, 0xDC, 0xA9, 0xD, 0x0, 0x1, 0x0, 0x7E, 0xFF, 0xEC, 0x6, 0x3D, 0x6, 0x1, 0x0, 0x19, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x15, 0x36, 0x36, 0x35, 0x33, 0x14, 0x6, 0x7, 0x11, 0x14, 0x4, 0x2, 0x9D, 0xE9, 0xFE, 0xCA, 0xFB, 0x9F, 0x85, 0x87, 0x9D, 0xFD, 0x7F, 0x4C, 0xB4, 0xAA, 0xD5, 0xFE, 0xC2, 0x14, 0xFD, 0xFA, 0x3, 0xCD, 0xFC, 0x33, 0x9C, 0x91, 0x91, 0x9C, 0x3, 0xCD, 0xDB, 0xB, 0x9B, 0x86, 0xD0, 0xE8, 0xB, 0xFD, 0xA5, 0xFA, 0xFD, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xEC, 0x5, 0x29, 0x4, 0x94, 0x0, 0x19, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x15, 0x36, 0x36, 0x35, 0x33, 0x14, 0x6, 0x7, 0x11, 0x3, 0x12, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xF3, 0x67, 0x45, 0xAE, 0x40, 0xF3, 0x65, 0x2B, 0xA2, 0x82, 0xB0, 0x6A, 0x7E, 0xBA, 0xD5, 0x2, 0xBF, 0xFD, 0x43, 0x75, 0x55, 0x7D, 0x3, 0xA, 0x88, 0xB, 0x6E, 0x69, 0xA4, 0xB2, 0xB, 0xFC, 0xCD, 0x0, 0x1, 0x0, 0x70, 0xFF, 0xEB, 0x4, 0xE2, 0x5, 0xB0, 0x0, 0x22, 0x0, 0x0, 0x4, 0x0, 0x11, 0x35, 0x34, 0x12, 0x37, 0x23, 0x35, 0x21, 0x15, 0x6, 0x2, 0x7, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x2, 0x27, 0x35, 0x21, 0x15, 0x23, 0x16, 0x12, 0x15, 0x15, 0x10, 0x0, 0x1, 0xAE, 0xFE, 0xC2, 0x7D, 0x67, 0xD6, 0x1, 0xF1, 0x6D, 0x81, 0x2, 0xA1, 0x8B, 0x89, 0xA0, 0x85, 0x71, 0x1, 0xF9, 0xD9, 0x66, 0x7E, 0xFE, 0xC6, 0x15, 0x1, 0x5E, 0x1, 0x15, 0x63, 0xA1, 0x1, 0x21, 0x62, 0xCB, 0xD1, 0x1D, 0xFE, 0xFD, 0xEE, 0x75, 0xD0, 0xD5, 0xD5, 0xD0, 0x65, 0xFA, 0x1, 0x8, 0x1C, 0xD1, 0xCB, 0x62, 0xFE, 0xDF, 0xA1, 0x63, 0xFE, 0xEB, 0xFE, 0xA2, 0x0, 0x1, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x4, 0x2, 0x9E, 0xEA, 0xFE, 0xCA, 0xFC, 0x9E, 0x86, 0x87, 0x9C, 0x4B, 0x4D, 0x23, 0x28, 0x3E, 0x44, 0x9E, 0xC0, 0xFE, 0xC2, 0x14, 0xFD, 0xFA, 0x3, 0xCD, 0xFC, 0x33, 0x9C, 0x91, 0x91, 0x9C, 0x2, 0x6B, 0x5F, 0x48, 0x8, 0xC6, 0x11, 0xC0, 0xB6, 0xFD, 0x95, 0xFA, 0xFD, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x5, 0x6D, 0x5, 0xC4, 0x0, 0x12, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x1, 0x13, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x3, 0x2, 0xEF, 0xFE, 0xFE, 0x17, 0x1, 0x1A, 0x1, 0x4E, 0xA4, 0x71, 0x8F, 0x72, 0x82, 0x65, 0x59, 0x2C, 0x32, 0x3F, 0x4C, 0x41, 0xFB, 0x2, 0x18, 0x3, 0x98, 0xFD, 0x4D, 0x1, 0x51, 0xE8, 0x8E, 0x45, 0xB1, 0x1B, 0x7D, 0x7C, 0xFE, 0x27, 0x0, 0x1, 0x0, 0xC, 0xFE, 0x4B, 0x4, 0xDD, 0x5, 0x52, 0x0, 0x1C, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x1, 0x21, 0x13, 0x17, 0x13, 0x3E, 0x2, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x1, 0x2, 0x7, 0xD9, 0x23, 0x52, 0x2E, 0x56, 0x5D, 0x1F, 0x25, 0xFE, 0x83, 0x1, 0x7, 0xD1, 0x11, 0xD0, 0x19, 0x43, 0x7B, 0x6B, 0x77, 0x5F, 0x37, 0x3E, 0x2E, 0x38, 0x44, 0x27, 0xFE, 0x95, 0x59, 0xD8, 0xFE, 0x4B, 0x11, 0xBC, 0x3, 0x3D, 0x51, 0x62, 0x4, 0x35, 0xFD, 0x63, 0x4E, 0x2, 0xA9, 0x50, 0xA0, 0x6A, 0x4E, 0x95, 0x20, 0x6B, 0x76, 0xFB, 0xBA, 0xFE, 0xF4, 0x10, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x33, 0x35, 0x1, 0x21, 0x35, 0x21, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x21, 0x1, 0x21, 0x15, 0x50, 0x1, 0x53, 0xFE, 0xDD, 0x1, 0x99, 0x1, 0x29, 0xFD, 0x14, 0x4, 0x1E, 0xFE, 0xBB, 0x1, 0x1A, 0xFE, 0x71, 0xFE, 0xC8, 0x3, 0xA, 0xA4, 0x1, 0xEA, 0xAA, 0x1, 0xAD, 0xCB, 0xA0, 0xFE, 0x28, 0xAA, 0xFE, 0x3C, 0xCA, 0x0, 0x1, 0x0, 0x59, 0x0, 0x0, 0x3, 0xC7, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x33, 0x35, 0x13, 0x23, 0x35, 0x21, 0x37, 0x21, 0x35, 0x21, 0x15, 0x3, 0x33, 0x15, 0x21, 0x3, 0x21, 0x15, 0x59, 0xE7, 0xB3, 0x1, 0x33, 0xBF, 0xFD, 0xE5, 0x3, 0x4E, 0xDF, 0xAB, 0xFE, 0xD5, 0xCB, 0x2, 0x3F, 0x9F, 0x1, 0x31, 0xAA, 0xFC, 0xC4, 0x99, 0xFE, 0xD9, 0xAA, 0xFE, 0xF3, 0xC3, 0x0, 0x1, 0x0, 0x4A, 0xFE, 0x59, 0x4, 0xCF, 0x5, 0xB0, 0x0, 0x19, 0x0, 0x0, 0x0, 0x0, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x16, 0x0, 0x11, 0x10, 0x0, 0x1, 0x78, 0xFE, 0xE6, 0x14, 0xFD, 0x13, 0x86, 0xA3, 0xB3, 0x9D, 0xAD, 0xB0, 0xF3, 0x1, 0xC0, 0xFD, 0x1E, 0x4, 0x18, 0xFE, 0x36, 0xFA, 0x1, 0x26, 0xFE, 0xBF, 0xFE, 0x59, 0x1, 0x1A, 0xD3, 0x8F, 0x94, 0xC4, 0xCB, 0xE0, 0xB6, 0xA2, 0x1, 0xFB, 0xCB, 0x9C, 0xFD, 0xF5, 0xE, 0xFE, 0xD9, 0xFE, 0xDE, 0xFE, 0xCE, 0xFE, 0xD9, 0x0, 0x1, 0x0, 0x64, 0xFE, 0x59, 0x4, 0xE9, 0x5, 0xB0, 0x0, 0x19, 0x0, 0x0, 0x0, 0x0, 0x11, 0x10, 0x0, 0x37, 0x1, 0x35, 0x21, 0x15, 0x21, 0x1, 0x15, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x6, 0x0, 0x1, 0xA5, 0xFE, 0xBF, 0x1, 0x27, 0xFB, 0xFE, 0x36, 0x4, 0x16, 0xFD, 0x20, 0x1, 0xC0, 0xF4, 0xB2, 0xAC, 0x9E, 0xB2, 0xA4, 0x86, 0x13, 0xFC, 0x14, 0xFE, 0xE6, 0xFE, 0x59, 0x1, 0x27, 0x1, 0x32, 0x1, 0x22, 0x1, 0x27, 0xE, 0x2, 0xB, 0x9C, 0xCB, 0xFE, 0x5, 0xA2, 0xB7, 0xDF, 0xCB, 0xC4, 0x94, 0x8F, 0xD3, 0xFE, 0xE6, 0x0, 0x1, 0x0, 0x53, 0xFE, 0x75, 0x4, 0x3C, 0x4, 0x3A, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x14, 0x6, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x1, 0x37, 0x21, 0x15, 0x21, 0x1, 0x15, 0x23, 0x6, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x3C, 0x90, 0xE0, 0x78, 0xDF, 0xFE, 0xDE, 0xDA, 0xC7, 0xFE, 0x89, 0x1, 0x3, 0x8C, 0xFD, 0x9C, 0x1, 0x5C, 0x96, 0x91, 0x95, 0x8E, 0x80, 0x6F, 0x86, 0x1D, 0x95, 0xBB, 0x58, 0xE0, 0xCC, 0xC3, 0xE7, 0x18, 0x1, 0xBC, 0x9B, 0xC4, 0xFE, 0x6F, 0xAB, 0x2, 0x82, 0x95, 0x64, 0x85, 0x87, 0x5E, 0x0, 0x1, 0x0, 0x45, 0xFE, 0x4B, 0x3, 0xE3, 0x4, 0x3A, 0x0, 0x24, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x36, 0x37, 0x33, 0x14, 0x6, 0x1, 0xFB, 0xC7, 0xEF, 0xC9, 0xC8, 0x7E, 0x5F, 0xAC, 0xD3, 0x1, 0x41, 0xFE, 0x4, 0x3, 0x69, 0x1, 0xFE, 0xBA, 0x7A, 0x89, 0xE2, 0xAF, 0x88, 0x53, 0xC4, 0x4D, 0x8E, 0x5, 0xEC, 0xEB, 0xFE, 0x4B, 0xB8, 0x90, 0x88, 0x97, 0x29, 0x1A, 0x3E, 0x3D, 0x71, 0x3, 0x93, 0x1, 0x0, 0xC3, 0x8F, 0xFE, 0xDC, 0x20, 0x9B, 0x66, 0x92, 0x90, 0x25, 0x1D, 0x4A, 0x32, 0x85, 0x4F, 0x65, 0x86, 0xE4, 0x0, 0x1, 0x0, 0x51, 0x0, 0x0, 0x4, 0x58, 0x5, 0xC4, 0x0, 0x1E, 0x0, 0x0, 0x25, 0x15, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x0, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x15, 0x21, 0x7, 0x1, 0x4, 0x41, 0xFC, 0x2C, 0x1, 0xB8, 0xFE, 0xF1, 0x1, 0xA1, 0x35, 0x29, 0x71, 0x68, 0x7C, 0x7C, 0xF3, 0x1, 0x2, 0xEC, 0xDA, 0xEF, 0x4E, 0x9E, 0xFE, 0xE7, 0x33, 0xFE, 0x90, 0xC3, 0xC3, 0xA8, 0x1, 0xDF, 0xAB, 0x48, 0x6B, 0x35, 0x64, 0x83, 0x97, 0x75, 0xBF, 0x1, 0x10, 0xDA, 0xB6, 0x7B, 0x87, 0xAB, 0x3A, 0xFE, 0x76, 0x0, 0x1, 0x0, 0x3F, 0xFF, 0xEC, 0x4, 0x60, 0x5, 0xB0, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x24, 0x27, 0x33, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x13, 0x23, 0x35, 0x21, 0x15, 0x21, 0x3, 0x36, 0x33, 0x32, 0x12, 0x15, 0x14, 0x2, 0x2, 0x81, 0xB6, 0xFE, 0xE9, 0xD, 0xEB, 0x1C, 0xD2, 0x77, 0x76, 0x83, 0x80, 0x55, 0x58, 0x27, 0xC2, 0x39, 0xCE, 0x3, 0xF2, 0xFD, 0xBC, 0x28, 0x64, 0x80, 0xCF, 0xE8, 0xED, 0x14, 0xD3, 0xCB, 0xDB, 0xA7, 0x83, 0x7D, 0xA2, 0x31, 0x25, 0x30, 0x2, 0xD, 0xD1, 0xD1, 0xFE, 0xA4, 0x39, 0xFE, 0xF9, 0xE3, 0xCA, 0xFE, 0xE4, 0x0, 0x1, 0x0, 0x2E, 0xFF, 0xF0, 0x3, 0xF2, 0x4, 0x3A, 0x0, 0x20, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x13, 0x23, 0x35, 0x21, 0x15, 0x21, 0x7, 0x36, 0x36, 0x37, 0x36, 0x16, 0x15, 0x14, 0x6, 0x2, 0x33, 0x68, 0xCC, 0x86, 0xED, 0x2, 0x70, 0x5B, 0x6B, 0x61, 0x67, 0x62, 0x81, 0x3C, 0xD5, 0x31, 0xA7, 0x3, 0x84, 0xFE, 0x4, 0x1D, 0x23, 0x75, 0x3D, 0xB7, 0xCD, 0xD1, 0x10, 0x46, 0x91, 0x71, 0x11, 0x46, 0x50, 0x66, 0x52, 0x53, 0x67, 0x53, 0xD, 0x1, 0x94, 0xC7, 0xC7, 0xD5, 0x14, 0x23, 0x1, 0x2, 0xC3, 0xB1, 0xA0, 0xD4, 0x0, 0x1, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x5, 0x41, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2E, 0x2, 0x27, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x1E, 0x2, 0x15, 0x14, 0x6, 0x2, 0x15, 0xDF, 0xEA, 0xEC, 0x5, 0x8D, 0x4D, 0x5E, 0x67, 0x6E, 0x91, 0x6C, 0x1, 0xB3, 0xB3, 0xF2, 0xC0, 0xC0, 0x6D, 0x8E, 0x6D, 0xEE, 0x14, 0xE4, 0x86, 0x65, 0x4F, 0x49, 0x3B, 0x45, 0x4E, 0x53, 0x8C, 0x81, 0x6E, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0x66, 0x63, 0x5E, 0x46, 0x71, 0x75, 0x90, 0xB8, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x4, 0x4E, 0x0, 0xE, 0x0, 0x18, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x4, 0x7, 0x13, 0x22, 0x7, 0x11, 0x36, 0x24, 0x37, 0x35, 0x34, 0x26, 0x1, 0x6F, 0xF2, 0xDE, 0xB, 0x6C, 0xB8, 0xCE, 0xD9, 0xAE, 0xFE, 0xC3, 0xD7, 0xD7, 0x96, 0x41, 0xCB, 0x1, 0x2, 0x2, 0x75, 0xFE, 0x60, 0x5, 0xDA, 0x6E, 0x82, 0xFE, 0xD0, 0xF8, 0x14, 0xCB, 0xFE, 0xFA, 0xA9, 0x3E, 0x4, 0x2E, 0x7D, 0xFD, 0xF, 0x37, 0xEB, 0xD0, 0x1B, 0x92, 0xCF, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x1, 0x4E, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x4E, 0xA7, 0x5, 0xB0, 0xFA, 0x50, 0x5, 0xB0, 0xFF, 0xFF, 0x0, 0xA7, 0x0, 0x0, 0x2, 0x5C, 0x5, 0xB0, 0x0, 0x26, 0x0, 0xD4, 0x0, 0x0, 0x0, 0x7, 0x0, 0xD4, 0x1, 0xE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0xD4, 0x6D, 0x0, 0x0, 0x27, 0x7, 0xA4, 0xFF, 0x84, 0x1, 0x7, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFF, 0x27, 0xFF, 0xFF, 0x0, 0x90, 0xFF, 0xF2, 0x1, 0xA3, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x9, 0x25, 0x7, 0x41, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x27, 0x0, 0x3F, 0x4, 0x99, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x5, 0x34, 0x1, 0x3F, 0x0, 0x4, 0x0, 0x95, 0x0, 0x0, 0x8, 0x8F, 0x5, 0xF2, 0x0, 0x8, 0x0, 0x12, 0x0, 0x1C, 0x0, 0x26, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0x1, 0x11, 0x33, 0x32, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x1, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x21, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x6, 0x4D, 0x8C, 0x8B, 0xD0, 0xFE, 0xF3, 0x9D, 0xFE, 0xF5, 0xFC, 0x12, 0xA6, 0xCC, 0xD0, 0x2, 0xCF, 0xC4, 0x2, 0xDF, 0x2, 0x25, 0xFD, 0xE5, 0x3, 0x4F, 0xFD, 0xD6, 0x2, 0x3F, 0xF8, 0x6, 0x1, 0xAD, 0x1, 0x25, 0x1, 0x6B, 0xFE, 0x93, 0xFE, 0xD2, 0x5, 0xF2, 0x8F, 0x8F, 0x12, 0xFC, 0xFB, 0x13, 0xFE, 0xF3, 0xFB, 0xE5, 0x1, 0x0, 0xE1, 0x53, 0xEC, 0xFB, 0xFB, 0x1B, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xC3, 0x5, 0xB0, 0xFE, 0x87, 0xFE, 0xC5, 0x49, 0xFE, 0xC5, 0xFE, 0x88, 0x0, 0x4, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0xD1, 0x6, 0x18, 0x0, 0x8, 0x0, 0x14, 0x0, 0x24, 0x0, 0x2E, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x33, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x5, 0x8F, 0x8C, 0x8B, 0xD0, 0xFE, 0xF3, 0x9D, 0xFE, 0xF5, 0xFD, 0x76, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x7D, 0x11, 0x6D, 0xBA, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x5F, 0x2, 0x25, 0xFD, 0xE5, 0x3, 0x4F, 0xFD, 0xD6, 0x2, 0x3F, 0x5, 0xF2, 0x8F, 0x8F, 0x12, 0xFC, 0xFB, 0x13, 0xFA, 0xC1, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x75, 0x89, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x41, 0xF9, 0xE8, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xC3, 0x0, 0x1, 0x0, 0x6A, 0xFF, 0xEC, 0x5, 0x89, 0x5, 0xC4, 0x0, 0x27, 0x0, 0x0, 0x25, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x11, 0x33, 0x15, 0x23, 0x4, 0xF0, 0x2E, 0xF5, 0xF5, 0xFE, 0xED, 0xFE, 0xA5, 0x1, 0x3E, 0x1, 0x1A, 0x1, 0xB, 0x1, 0x9, 0x1A, 0xF8, 0x13, 0x8A, 0x95, 0xB0, 0xAB, 0x2, 0xC8, 0xAF, 0x83, 0x77, 0x1A, 0xFE, 0xF8, 0x1, 0x8, 0xFE, 0xD5, 0x2, 0x27, 0x99, 0x99, 0xBE, 0x3D, 0x95, 0x1, 0x6E, 0x1, 0x4E, 0x5F, 0x1, 0x4E, 0x1, 0x6F, 0xFE, 0xFA, 0xCB, 0x71, 0x95, 0xFE, 0xE8, 0x6B, 0xF0, 0xFE, 0xFE, 0x3C, 0x1C, 0x38, 0x9E, 0x48, 0xBF, 0xFE, 0xF9, 0x9E, 0x0, 0x2, 0x0, 0x25, 0xFD, 0xFF, 0x4, 0x7D, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x2B, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x21, 0x35, 0x21, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x33, 0x15, 0x23, 0x6, 0x4, 0x2, 0x49, 0x95, 0x45, 0x43, 0x95, 0x84, 0x79, 0x78, 0x65, 0x58, 0xEB, 0x52, 0x6C, 0x6E, 0xAD, 0xBB, 0x38, 0xFD, 0x15, 0x2, 0xFE, 0x6A, 0xAE, 0xC6, 0xEA, 0xE9, 0xC9, 0xBA, 0x69, 0xA, 0xDC, 0x67, 0x74, 0x24, 0xFF, 0x0, 0xB3, 0x7F, 0x1, 0xDA, 0x7C, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0x4C, 0x45, 0x63, 0x8E, 0x77, 0x8F, 0x7F, 0x96, 0x76, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x7F, 0x6B, 0xFB, 0x92, 0x7F, 0xA1, 0xAD, 0xFF, 0xFF, 0x0, 0x4A, 0xFE, 0x59, 0x4, 0xCF, 0x7, 0x29, 0x0, 0x26, 0x0, 0xCB, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x90, 0x1, 0x27, 0x0, 0x2, 0x0, 0x5E, 0xFE, 0x75, 0x4, 0x46, 0x5, 0xF2, 0x0, 0x8, 0x0, 0x24, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0x1, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x1, 0xB4, 0x8B, 0x8C, 0xCF, 0xFE, 0xF4, 0x9D, 0xFE, 0xF5, 0x1, 0x60, 0x77, 0xE1, 0x90, 0xF3, 0x85, 0x70, 0x80, 0x8E, 0x9B, 0x93, 0x8E, 0x1, 0x5C, 0xFD, 0x9B, 0x3, 0x8D, 0x1, 0xFE, 0x89, 0xC7, 0xD9, 0xFE, 0xDF, 0x5, 0xF2, 0x8F, 0x8F, 0x12, 0xFC, 0xFB, 0x13, 0xF8, 0x83, 0x58, 0xBB, 0x95, 0x5E, 0x87, 0x85, 0x64, 0x97, 0x82, 0xAB, 0x1, 0x91, 0xC4, 0x9B, 0xFE, 0x44, 0x18, 0xE7, 0xC3, 0xCC, 0xE0, 0x0, 0x1, 0x0, 0x95, 0xFF, 0xEC, 0x8, 0x26, 0x5, 0xB0, 0x0, 0x18, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x35, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x12, 0x21, 0x20, 0x13, 0x11, 0x33, 0x11, 0x6, 0x4, 0x7, 0x6, 0x20, 0xE9, 0xFE, 0xE5, 0xFD, 0x75, 0xFC, 0xFC, 0x2, 0x8B, 0xFD, 0x4, 0x1, 0x3, 0x1, 0x5, 0x5, 0xFC, 0x1, 0xFE, 0xDF, 0xE0, 0x14, 0xFD, 0xFA, 0xA5, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x2, 0x5E, 0xFC, 0x2A, 0xFE, 0xDC, 0x1, 0x22, 0x2, 0x61, 0xFD, 0xA7, 0xF8, 0xFB, 0x1, 0x0, 0x2, 0x0, 0x95, 0xFE, 0x60, 0x4, 0xE7, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x5, 0x1, 0x22, 0x7, 0x11, 0x24, 0x0, 0x35, 0x35, 0x34, 0x26, 0x1, 0x91, 0xFC, 0xFC, 0x6C, 0x94, 0x1, 0x11, 0x1, 0x43, 0x2, 0xFE, 0x2D, 0xFE, 0x7D, 0x1, 0x0, 0xA7, 0x59, 0x1, 0x32, 0x1, 0x27, 0x9F, 0xFE, 0x60, 0x7, 0x50, 0x23, 0x37, 0xFE, 0xCC, 0xFE, 0xCE, 0x3B, 0xFE, 0xB3, 0xFD, 0xF5, 0x67, 0x5, 0x95, 0x72, 0xFB, 0xAE, 0x61, 0x1, 0xAC, 0xE1, 0x36, 0xCE, 0xD2, 0x0, 0x1, 0x0, 0x4E, 0xFE, 0x4B, 0x4, 0x6F, 0x5, 0xC4, 0x0, 0x20, 0x0, 0x0, 0x13, 0x35, 0x24, 0x0, 0x35, 0x34, 0x27, 0x6, 0x5, 0x27, 0x24, 0x24, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x2, 0x4, 0xB0, 0x1, 0x52, 0x1, 0x70, 0x53, 0xE6, 0xFE, 0x77, 0x1, 0x1, 0x64, 0x1, 0x4B, 0x82, 0x94, 0x66, 0x98, 0xFC, 0x1, 0x2E, 0xCC, 0xF2, 0x1, 0x1F, 0xA1, 0xB7, 0xF9, 0xFE, 0x4F, 0xFE, 0x4B, 0xCA, 0x44, 0x1, 0x9, 0xEF, 0xAA, 0x38, 0x97, 0x61, 0xBB, 0x6B, 0xE7, 0xCE, 0x5F, 0x84, 0x6E, 0x5F, 0xBF, 0xD9, 0xD3, 0xCC, 0xD1, 0xA5, 0x6B, 0xF7, 0xE7, 0xFE, 0xCE, 0xB8, 0x0, 0x1, 0x0, 0x48, 0xFE, 0x4B, 0x3, 0xAE, 0x4, 0x4D, 0x0, 0x20, 0x0, 0x0, 0x13, 0x35, 0x36, 0x24, 0x35, 0x34, 0x27, 0x6, 0x5, 0x35, 0x3E, 0x2, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x10, 0x0, 0xAC, 0xFB, 0x1, 0x13, 0x31, 0xB5, 0xFE, 0xD8, 0x86, 0xE7, 0x8E, 0x4D, 0x62, 0x51, 0x6D, 0xF2, 0xFA, 0xAF, 0xC5, 0xE4, 0x81, 0x95, 0xFE, 0x68, 0xFE, 0x4B, 0xBA, 0x45, 0xBE, 0xBE, 0x6B, 0x42, 0x74, 0x45, 0xB2, 0x26, 0x68, 0x98, 0x6D, 0x3A, 0x59, 0x4D, 0x3E, 0x98, 0xAE, 0xA1, 0x9A, 0xA6, 0x86, 0x61, 0xC9, 0xFE, 0xF3, 0xFE, 0xD7, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x60, 0x4, 0xBB, 0x5, 0xC4, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x4, 0x15, 0x4, 0xBB, 0xF4, 0x96, 0x86, 0xA2, 0x81, 0xF3, 0xF3, 0x91, 0xA1, 0xCF, 0x1, 0x32, 0xFE, 0x60, 0x5, 0x8B, 0x8F, 0x84, 0x4E, 0xFB, 0x50, 0x5, 0xB0, 0x3A, 0x4E, 0xF0, 0xE9, 0x0, 0x3, 0x0, 0x50, 0xFE, 0x4B, 0x5, 0xB4, 0x6, 0x0, 0x0, 0x1C, 0x0, 0x28, 0x0, 0x31, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x7, 0x27, 0x37, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x32, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x16, 0x4, 0x6C, 0x86, 0x97, 0x20, 0x95, 0x7C, 0xF3, 0x6B, 0xAD, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x3C, 0x40, 0x8B, 0xA9, 0xAE, 0xFD, 0x31, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x2, 0xBB, 0x61, 0x6B, 0x2F, 0x32, 0x33, 0xFE, 0x4B, 0x65, 0x4D, 0x8F, 0x93, 0xE0, 0x82, 0x77, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFA, 0x5C, 0xE, 0x8E, 0x80, 0x78, 0x99, 0x2, 0x68, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFE, 0x47, 0xBC, 0x16, 0x37, 0x30, 0x3F, 0x0, 0x2, 0x0, 0x67, 0xFF, 0xEB, 0x4, 0xD0, 0x5, 0xC4, 0x0, 0x23, 0x0, 0x2F, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x37, 0x15, 0x6, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x35, 0x16, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x4, 0x23, 0x3, 0x22, 0x6, 0x15, 0x10, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x2, 0x90, 0xEC, 0xFE, 0xC3, 0xBB, 0xBB, 0xEB, 0xAF, 0x4E, 0x4F, 0xA6, 0x80, 0x23, 0x80, 0xA6, 0x50, 0x4E, 0xB0, 0xEB, 0xBC, 0xBB, 0xFE, 0xC3, 0xED, 0x15, 0x8A, 0xA2, 0x1, 0x41, 0x8B, 0xA2, 0xA2, 0x8B, 0x15, 0xEA, 0xE8, 0xF1, 0x78, 0x60, 0xD2, 0xB9, 0xAF, 0x4, 0xC1, 0x13, 0x48, 0x50, 0x6F, 0x4F, 0x4F, 0x6F, 0x50, 0x48, 0x13, 0xC1, 0x4, 0xAF, 0xB9, 0xD2, 0x60, 0x78, 0xEF, 0xE9, 0xEB, 0x2, 0xDE, 0x86, 0x86, 0xFE, 0xFD, 0x80, 0x85, 0x84, 0x86, 0x0, 0x2, 0x0, 0x55, 0xFF, 0xEB, 0x4, 0xB4, 0x6, 0x15, 0x0, 0x23, 0x0, 0x31, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x37, 0x15, 0x6, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x35, 0x16, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x4, 0x23, 0x3, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x2, 0x7A, 0xEC, 0xFE, 0xC7, 0xBF, 0xBF, 0xE7, 0xAF, 0x4D, 0x56, 0xA9, 0x82, 0x23, 0x83, 0xA8, 0x55, 0x4D, 0xAF, 0xE6, 0xBF, 0xBF, 0xFE, 0xC7, 0xEC, 0x15, 0x8C, 0xA6, 0xA6, 0x8C, 0x15, 0x8C, 0xA6, 0xA6, 0x8C, 0x15, 0xE8, 0xE8, 0xF3, 0x76, 0x66, 0xEE, 0xC5, 0xD4, 0x4, 0xB9, 0x1E, 0x66, 0x62, 0x86, 0x65, 0x65, 0x86, 0x62, 0x66, 0x1E, 0xB9, 0x4, 0xD4, 0xC5, 0xEE, 0x66, 0x76, 0xF1, 0xE9, 0xE9, 0x2, 0xDD, 0x89, 0x84, 0x82, 0x8B, 0x8A, 0x85, 0x83, 0x88, 0x0, 0x1, 0x0, 0x50, 0xFE, 0xFD, 0x4, 0xE4, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x1, 0x23, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x16, 0x16, 0x15, 0x14, 0x4, 0xD3, 0xC9, 0x9, 0x40, 0x65, 0xFC, 0xE2, 0x2, 0xF2, 0xFD, 0x14, 0x4, 0x1E, 0xFD, 0xE, 0x1, 0xF3, 0xB3, 0xBC, 0xFE, 0xFD, 0x25, 0x26, 0x4C, 0x6C, 0xA4, 0x4, 0x41, 0xCB, 0xA0, 0xFB, 0xBA, 0x2, 0xAC, 0x9D, 0x44, 0x0, 0x1, 0x0, 0x52, 0xFF, 0x11, 0x4, 0x25, 0x4, 0x3A, 0x0, 0x12, 0x0, 0x0, 0x5, 0x23, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x4, 0x11, 0x14, 0x4, 0x14, 0xBF, 0x8, 0x49, 0x65, 0xFD, 0xA3, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x1, 0x41, 0x1, 0x63, 0xEF, 0x20, 0x2A, 0x47, 0x5E, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0x8, 0xFE, 0xD8, 0x46, 0x0, 0x2, 0x0, 0x14, 0xFE, 0x4B, 0x3, 0xAA, 0x6, 0x0, 0x0, 0x10, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x7, 0x27, 0x37, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x16, 0x2, 0x63, 0x85, 0x98, 0x21, 0x95, 0x7C, 0xF3, 0xF3, 0x3C, 0x41, 0x8A, 0xA9, 0xAD, 0x97, 0x29, 0x38, 0x6B, 0x30, 0x32, 0x34, 0xFE, 0x4B, 0x64, 0x4E, 0x8F, 0x93, 0xDF, 0x6, 0x20, 0xFA, 0x5C, 0xE, 0x8E, 0x80, 0x78, 0x99, 0xAF, 0x32, 0x2C, 0x5E, 0x17, 0x36, 0x30, 0x3F, 0x0, 0x2, 0x0, 0x7A, 0xFE, 0x4B, 0x5, 0xA9, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x29, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x7, 0x27, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x16, 0x4, 0x62, 0x86, 0x97, 0x21, 0x95, 0x7C, 0xF3, 0x61, 0x5E, 0x91, 0x49, 0xF3, 0xE5, 0x8, 0x77, 0xC2, 0x9C, 0xBC, 0x1, 0x3C, 0x41, 0x8A, 0xA9, 0xAD, 0x97, 0x29, 0x38, 0x6B, 0x30, 0x32, 0x34, 0xFE, 0x4B, 0x65, 0x4E, 0x90, 0x93, 0xDF, 0x2, 0xDE, 0x70, 0x5A, 0x84, 0xFC, 0xFC, 0x4, 0x3A, 0x7C, 0x90, 0xB3, 0xDA, 0xFD, 0x9B, 0xE, 0x8E, 0x80, 0x78, 0x99, 0xAF, 0x32, 0x2C, 0x5E, 0x17, 0x36, 0x30, 0x3F, 0x0, 0x2, 0x0, 0x14, 0xFF, 0xEC, 0x3, 0xAA, 0x5, 0x41, 0x0, 0x18, 0x0, 0x22, 0x0, 0x0, 0x25, 0x14, 0x6, 0x23, 0x22, 0x26, 0x27, 0x7, 0x27, 0x37, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x36, 0x33, 0x32, 0x16, 0x5, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x3, 0xAA, 0xAD, 0x9A, 0x85, 0x98, 0x21, 0x95, 0x7C, 0xF3, 0xB2, 0xB2, 0xF3, 0xBF, 0xBF, 0x3F, 0x3E, 0x8A, 0xA9, 0xFE, 0xBC, 0x29, 0x38, 0x6B, 0x30, 0x32, 0xFC, 0x78, 0x98, 0x64, 0x4E, 0x8F, 0x92, 0xDF, 0x2, 0x7, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFE, 0x75, 0xF, 0x8F, 0xE1, 0x33, 0x2B, 0x5E, 0x17, 0x36, 0x6F, 0x0, 0x1, 0xFF, 0xB5, 0xFE, 0x4B, 0x1, 0x94, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0xA1, 0xF3, 0xBB, 0xA5, 0x45, 0x3A, 0xE, 0x27, 0x3C, 0x7A, 0x1, 0x4, 0x3A, 0xFB, 0x87, 0xB6, 0xC0, 0x11, 0xBF, 0xD, 0xB0, 0x0, 0x3, 0x0, 0x60, 0xFF, 0xEC, 0x6, 0xD6, 0x6, 0x0, 0x0, 0x1B, 0x0, 0x27, 0x0, 0x32, 0x0, 0x0, 0x5, 0x22, 0x27, 0x15, 0x23, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x5, 0x31, 0xB4, 0x6A, 0xDC, 0xC, 0x6C, 0xB6, 0xC4, 0xE5, 0xE5, 0xC6, 0xAB, 0x6A, 0xF3, 0x6A, 0xB2, 0xD1, 0xD6, 0xD7, 0xFC, 0x48, 0x94, 0x45, 0x43, 0x94, 0x84, 0x73, 0x72, 0x3, 0x2F, 0x87, 0x69, 0x66, 0x8C, 0x9B, 0x43, 0x44, 0x14, 0x7C, 0x68, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x76, 0x2, 0x28, 0xFD, 0xD2, 0x7C, 0xFE, 0xCD, 0xF4, 0x15, 0xEF, 0xFE, 0xC9, 0xC7, 0x84, 0x1, 0xD1, 0x80, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xCA, 0xAA, 0x8F, 0xD2, 0x8C, 0xFE, 0x44, 0x8D, 0x0, 0x3, 0x0, 0x50, 0xFE, 0x60, 0x6, 0xC5, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x17, 0x0, 0x33, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x39, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0x3, 0x26, 0x83, 0x73, 0x75, 0x83, 0x96, 0x41, 0x43, 0xDA, 0xB1, 0x6C, 0xF3, 0x6A, 0xAA, 0xCA, 0xE2, 0xE1, 0xCD, 0xB4, 0x6B, 0xD, 0xC6, 0xA, 0x6D, 0xB7, 0xCE, 0xD9, 0xDA, 0xAF, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0xC3, 0x76, 0xFD, 0xFE, 0x1, 0xFD, 0x71, 0x1, 0x3A, 0xED, 0x14, 0xF7, 0x1, 0x30, 0x7E, 0x6A, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x3, 0xFF, 0x49, 0xFF, 0x60, 0x5, 0x6A, 0x5, 0xFC, 0x0, 0x2, 0x0, 0x5, 0x0, 0x15, 0x0, 0x0, 0x1, 0x13, 0x27, 0x13, 0x3, 0x3, 0x1, 0x23, 0x7, 0x23, 0x1, 0x1, 0x33, 0x13, 0x1, 0x33, 0x1, 0x1, 0x21, 0x3, 0x21, 0x7, 0x2, 0x11, 0xD7, 0x3E, 0xD4, 0x5F, 0xDE, 0xFE, 0xD9, 0x95, 0x83, 0xB9, 0x1, 0x5, 0x1, 0xEA, 0xE3, 0x6D, 0x1, 0x2A, 0xB8, 0xFE, 0x58, 0x1, 0x81, 0xFE, 0xF8, 0x77, 0xFD, 0xD7, 0x13, 0x2, 0xC6, 0x1, 0x6, 0xB1, 0xFD, 0xA2, 0x1, 0xF, 0xFE, 0xF1, 0xFD, 0xE1, 0xA0, 0x1, 0x3F, 0x5, 0x11, 0xFE, 0xE0, 0x1, 0x6C, 0xFD, 0xFA, 0xFC, 0xA, 0x1, 0x54, 0x17, 0x0, 0x2, 0x0, 0x66, 0xFF, 0x83, 0x4, 0xEC, 0x6, 0x1F, 0x0, 0x8, 0x0, 0x29, 0x0, 0x0, 0x1, 0x10, 0x17, 0x1, 0x26, 0x23, 0x22, 0x6, 0x7, 0x1, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x2, 0x35, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x16, 0x17, 0x23, 0x26, 0x27, 0x1, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x6, 0x0, 0x1, 0x65, 0x64, 0x1, 0x62, 0x30, 0x3E, 0xAB, 0xAC, 0x1, 0x1, 0x4C, 0x60, 0x54, 0x2F, 0x9A, 0x45, 0x82, 0x91, 0x1, 0x44, 0x1, 0x13, 0x62, 0x53, 0x29, 0x9A, 0x3D, 0x6D, 0x79, 0xE, 0xFC, 0x10, 0x38, 0xFE, 0x9C, 0x31, 0x3C, 0xA3, 0x89, 0x12, 0xFC, 0x13, 0xFE, 0xE5, 0x2, 0x9D, 0xFE, 0xFA, 0x79, 0x3, 0xCD, 0xD, 0xFA, 0xE4, 0xFC, 0xD2, 0x19, 0x82, 0xBE, 0x53, 0x1, 0x37, 0xD2, 0x76, 0x1, 0x3A, 0x1, 0x77, 0x16, 0x71, 0xA8, 0x41, 0xDC, 0x8B, 0x87, 0x46, 0xFC, 0x2C, 0x10, 0x97, 0x8B, 0xD4, 0xFE, 0xE6, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x3, 0xF5, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x26, 0x0, 0x0, 0x1, 0x14, 0x17, 0x13, 0x27, 0x22, 0x6, 0x15, 0x13, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x11, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x13, 0x33, 0x3, 0x16, 0x17, 0x23, 0x26, 0x27, 0x3, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x1, 0x42, 0x2D, 0xE8, 0x1E, 0x94, 0x63, 0xFA, 0x56, 0x4A, 0x9E, 0x9A, 0xB6, 0xCA, 0xF3, 0xF9, 0x33, 0x2F, 0x89, 0x9A, 0x9B, 0xC9, 0x6, 0xE4, 0x5, 0x34, 0xF6, 0x27, 0x31, 0x58, 0x7A, 0x5, 0xE4, 0x4, 0xFF, 0x0, 0x2, 0xB, 0x92, 0x56, 0x2, 0x66, 0x2, 0xDB, 0x81, 0xFD, 0xBD, 0x16, 0xFE, 0x5E, 0x1, 0xE1, 0x91, 0x1, 0x4B, 0x12, 0xDE, 0x1, 0x41, 0x8, 0x1, 0x6A, 0xFE, 0x67, 0x6C, 0xF4, 0x57, 0x3A, 0xFD, 0x75, 0xE, 0x68, 0x4F, 0x9D, 0xDD, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x4, 0x72, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x4B, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x8A, 0x0, 0x0, 0x2, 0x0, 0x2D, 0xFF, 0x83, 0x4, 0xB0, 0x6, 0x1F, 0x0, 0x2, 0x0, 0x13, 0x0, 0x0, 0x1, 0x37, 0x23, 0x3, 0x35, 0x3, 0x23, 0x1, 0x11, 0x21, 0x35, 0x21, 0x37, 0x33, 0x7, 0x33, 0x15, 0x23, 0x1, 0x11, 0x2, 0xEB, 0x7A, 0x7A, 0xFC, 0xAF, 0xA0, 0x1, 0x4F, 0xFE, 0x3E, 0x3, 0xA0, 0x39, 0x9F, 0x39, 0x44, 0xAC, 0xFE, 0xE7, 0x3, 0xF9, 0xEC, 0xFB, 0x1B, 0xD8, 0xFE, 0xAB, 0x2, 0x8C, 0x2, 0xD6, 0xCB, 0x6F, 0x6F, 0xCB, 0xFD, 0xDD, 0xFD, 0x3E, 0x0, 0x1, 0x0, 0x49, 0xFE, 0x4B, 0x3, 0xC9, 0x4, 0x4E, 0x0, 0x30, 0x0, 0x0, 0x1, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x16, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x3, 0x37, 0x16, 0x33, 0x32, 0x36, 0x2, 0xDA, 0x5B, 0x84, 0xAB, 0xE2, 0xE1, 0xC1, 0xCB, 0xE6, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x8E, 0x60, 0xB5, 0xCB, 0xEF, 0xC7, 0x35, 0x30, 0x3B, 0x52, 0x3D, 0x4B, 0x4B, 0x51, 0x28, 0x7B, 0x4A, 0x70, 0x93, 0x3D, 0xE9, 0xC0, 0x53, 0xBA, 0x60, 0x64, 0x1, 0x26, 0x38, 0x4A, 0x1C, 0x24, 0x91, 0x8D, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x36, 0x49, 0x37, 0x15, 0x27, 0x96, 0x8A, 0x90, 0xB8, 0x8, 0x71, 0x7E, 0x43, 0x8C, 0x27, 0x4A, 0x90, 0x6C, 0x1, 0xA4, 0x5E, 0xA7, 0x4A, 0x0, 0x1, 0x0, 0x52, 0xFE, 0x4B, 0x4, 0xB8, 0x4, 0x3A, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x2E, 0x2, 0x23, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x33, 0x32, 0x1E, 0x2, 0x33, 0x32, 0x37, 0x17, 0x6, 0x6, 0x3, 0xC3, 0x77, 0x83, 0x60, 0x7F, 0x73, 0xFE, 0xDB, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x43, 0x80, 0x9A, 0x64, 0x57, 0x3D, 0x44, 0x4C, 0x52, 0x28, 0x80, 0xFE, 0x4B, 0x84, 0xAD, 0x84, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0x87, 0xB2, 0x85, 0x43, 0x8C, 0x27, 0x4A, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x3, 0xF1, 0x5, 0xC4, 0x0, 0x18, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x7, 0x2, 0x86, 0xFC, 0x73, 0x96, 0x61, 0x62, 0x94, 0x63, 0x70, 0x5, 0xEF, 0x5, 0xFB, 0xC4, 0xF9, 0xFD, 0xB6, 0xB5, 0x1, 0xDE, 0xCF, 0x7F, 0x79, 0x7D, 0xD1, 0x76, 0x5E, 0xBB, 0xEA, 0xFE, 0xBF, 0xDE, 0x79, 0xBC, 0xFE, 0xDA, 0x2D, 0x0, 0x1, 0x0, 0x4C, 0x0, 0x0, 0x3, 0xA4, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x2, 0x79, 0xF3, 0x66, 0x72, 0x54, 0x53, 0x71, 0x50, 0x60, 0xF2, 0xEA, 0xB8, 0xDB, 0xDB, 0x93, 0x98, 0x1, 0xD1, 0x82, 0x5C, 0x59, 0x83, 0x77, 0x5D, 0xB5, 0xE2, 0xE1, 0xBF, 0x8C, 0xBF, 0x19, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x27, 0x4E, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x8A, 0xFE, 0xD3, 0x0, 0x2, 0x0, 0x22, 0xFF, 0xEC, 0x6, 0x21, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x21, 0x15, 0x14, 0x16, 0x17, 0x22, 0x24, 0x35, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x4, 0x3, 0x23, 0x87, 0x9D, 0xFD, 0xB9, 0x9E, 0x85, 0xE9, 0xFE, 0xCA, 0xE2, 0xE2, 0xFC, 0x2, 0x47, 0xFD, 0xDD, 0xDD, 0xFE, 0xC2, 0xB6, 0x91, 0x9C, 0xB5, 0xB5, 0x9C, 0x91, 0xCA, 0xFD, 0xFA, 0xB5, 0xAB, 0x2, 0x6D, 0xFD, 0x93, 0x2, 0x6D, 0xFD, 0x93, 0xAB, 0xB5, 0xFA, 0xFD, 0x0, 0x1, 0x0, 0x12, 0x0, 0x0, 0x5, 0x1C, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x1, 0x4, 0x7, 0xFE, 0x8E, 0xFE, 0x92, 0xFE, 0xEB, 0x2, 0xA, 0xF4, 0x2, 0xC, 0x4, 0x73, 0xFB, 0x8D, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x95, 0xFF, 0x83, 0x4, 0x4D, 0x6, 0x1F, 0x0, 0x3, 0x0, 0x7, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x13, 0x21, 0x11, 0x13, 0x13, 0x23, 0x11, 0x5, 0x21, 0x7, 0x23, 0x37, 0x21, 0x11, 0x21, 0x37, 0x33, 0x7, 0x33, 0x15, 0x23, 0x3, 0x33, 0x15, 0x23, 0x3, 0x21, 0x2, 0x8C, 0x71, 0xFE, 0x94, 0x47, 0x7D, 0xC4, 0x2, 0xBC, 0xFD, 0xEE, 0x23, 0x9B, 0x23, 0xFE, 0xF5, 0x2, 0xA0, 0x1F, 0x9A, 0x1F, 0x77, 0xAF, 0x70, 0xC0, 0xF7, 0x7D, 0x1, 0xDA, 0x3, 0x52, 0x1, 0x93, 0xFE, 0x6D, 0xFD, 0x78, 0x1, 0xC1, 0xFE, 0x3F, 0xCA, 0x7D, 0x7D, 0x5, 0xB0, 0x6F, 0x6F, 0xCB, 0xFE, 0x6D, 0xC7, 0xFE, 0x3F, 0x0, 0x4, 0x0, 0x54, 0xFE, 0x60, 0x4, 0xC, 0x5, 0xB0, 0x0, 0x5, 0x0, 0xA, 0x0, 0xE, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x33, 0x13, 0x17, 0x34, 0x27, 0x7, 0x33, 0x1, 0x37, 0x23, 0x16, 0x1, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x3, 0x35, 0x10, 0x0, 0x33, 0x32, 0x17, 0x13, 0x33, 0x3, 0x16, 0x11, 0x15, 0x21, 0x3, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x6, 0x2, 0x36, 0x66, 0x82, 0xE, 0xBF, 0x63, 0xC0, 0x3E, 0x4A, 0x88, 0xFE, 0x56, 0x44, 0x80, 0x5, 0x1, 0x18, 0x5E, 0x52, 0x9F, 0x9B, 0xB7, 0xCF, 0x3, 0x1, 0x1B, 0xCE, 0x39, 0x33, 0x89, 0x9B, 0x9C, 0xDB, 0xFE, 0x4B, 0x66, 0x35, 0x3E, 0xAB, 0x68, 0x83, 0x34, 0xCB, 0x3, 0x8B, 0x8C, 0x7C, 0x1, 0x5, 0xF3, 0x71, 0x42, 0xC5, 0xFE, 0x9B, 0xB3, 0x68, 0xFE, 0x83, 0x1A, 0xFE, 0x5A, 0x1, 0xE5, 0x8E, 0x1, 0x1C, 0x31, 0x1, 0x1, 0x1, 0x2D, 0xA, 0x1, 0x6C, 0xFE, 0x63, 0x80, 0xFE, 0x97, 0x59, 0xFE, 0xF2, 0x14, 0x86, 0x7D, 0x4C, 0x80, 0xFF, 0xFF, 0x0, 0x2D, 0xFF, 0xEC, 0x4, 0xB1, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2F, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x1, 0x83, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x27, 0xFE, 0x4B, 0x2, 0xC5, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4F, 0x7C, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x97, 0xFF, 0x74, 0x0, 0x2, 0x0, 0x66, 0xFE, 0x4B, 0x5, 0xD2, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x27, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0xDE, 0x88, 0x73, 0x1B, 0x1B, 0x73, 0x88, 0xD3, 0xA8, 0xB0, 0x3, 0xBF, 0x3E, 0x44, 0x9D, 0xBF, 0x80, 0x9D, 0xFE, 0xCE, 0xFE, 0xC1, 0x1, 0x49, 0x1, 0x28, 0xC1, 0x91, 0xA, 0xBD, 0x56, 0x41, 0x2A, 0x21, 0xBC, 0x3F, 0x1C, 0x3, 0x82, 0x1C, 0x3F, 0xFE, 0xDD, 0xC8, 0x61, 0xD6, 0xFE, 0xEA, 0xFD, 0xA0, 0x11, 0xC0, 0xB6, 0x54, 0x29, 0x1, 0x92, 0x1, 0x2A, 0x61, 0x1, 0x32, 0x1, 0x89, 0x3D, 0x29, 0xFA, 0x11, 0x62, 0x45, 0x8, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x4B, 0x4, 0xE0, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x25, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x39, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0x3, 0x2A, 0x37, 0x45, 0x7E, 0xD6, 0x6A, 0xAA, 0xCA, 0xE2, 0xE1, 0xCD, 0xB4, 0x6B, 0xD, 0xD9, 0x5D, 0x40, 0x22, 0x1E, 0xAF, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0xFD, 0xA9, 0xD, 0x8D, 0xB3, 0xD2, 0x71, 0x1, 0x3A, 0xED, 0x14, 0xF7, 0x1, 0x30, 0x7E, 0x6A, 0xFB, 0x51, 0x56, 0x40, 0x6, 0x0, 0x2, 0x0, 0x21, 0x0, 0x0, 0x5, 0x23, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x1, 0x15, 0x1, 0xD6, 0x1, 0x4, 0x88, 0x88, 0x80, 0x8D, 0x1, 0x37, 0xFE, 0xDC, 0xFE, 0xE6, 0xFD, 0xB8, 0xB8, 0x2, 0x0, 0xFB, 0x1, 0x12, 0x8D, 0x7D, 0x1, 0x47, 0x4, 0xE5, 0xFE, 0x17, 0x89, 0x68, 0x70, 0x87, 0x1, 0xFB, 0x1B, 0x2, 0x31, 0xFD, 0xCF, 0x2, 0x31, 0xCB, 0x2, 0xB4, 0xE0, 0xD7, 0x92, 0xC6, 0x34, 0xFD, 0xA0, 0xD, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x3, 0x11, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x57, 0x5C, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x8A, 0xFF, 0x47, 0x0, 0x2, 0x0, 0x22, 0x0, 0x0, 0x5, 0x73, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x11, 0x23, 0x11, 0x1, 0x21, 0x35, 0x33, 0x3, 0x21, 0x13, 0x21, 0x13, 0x21, 0x3, 0x33, 0x15, 0x21, 0x2, 0xCA, 0x87, 0xFE, 0xF2, 0x1, 0x6, 0xFE, 0xFE, 0xF2, 0xFE, 0xE5, 0xD2, 0x91, 0x1, 0x19, 0x84, 0x1, 0x94, 0x85, 0x1, 0x18, 0x91, 0xD3, 0xFE, 0xE4, 0x2, 0xFF, 0x1, 0x16, 0xFE, 0x3, 0xFD, 0xE8, 0x2, 0x18, 0x1, 0xFD, 0x8A, 0x1, 0x11, 0xFE, 0xEF, 0x1, 0x11, 0xFE, 0xEF, 0x8A, 0x0, 0x2, 0x0, 0x22, 0xFE, 0x4B, 0x4, 0x30, 0x4, 0x3A, 0x0, 0x2, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x3, 0x23, 0x35, 0x33, 0x3, 0x21, 0x13, 0x33, 0x13, 0x21, 0x3, 0x33, 0x15, 0x23, 0x1, 0x2, 0x7, 0x2, 0x36, 0x53, 0xA9, 0xC9, 0x2E, 0x47, 0x2E, 0x5A, 0x5E, 0x1C, 0x23, 0xDB, 0xCA, 0x9B, 0x72, 0x1, 0x6, 0x65, 0xFB, 0x61, 0x1, 0x3, 0x70, 0x8B, 0xB9, 0xFE, 0xF2, 0x5A, 0xCB, 0x1, 0x5C, 0x1, 0x14, 0xFB, 0xDB, 0x11, 0xBC, 0x3, 0x41, 0x51, 0x5D, 0x2, 0x6C, 0x86, 0x1, 0x44, 0xFE, 0xBC, 0x1, 0x44, 0xFE, 0xBC, 0x86, 0xFC, 0xF5, 0xFE, 0xFD, 0x15, 0x0, 0x2, 0x0, 0x59, 0xFF, 0xEC, 0x3, 0xFA, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x27, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x15, 0x33, 0x24, 0x35, 0x34, 0x26, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x27, 0x35, 0x33, 0x16, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x4, 0x23, 0x23, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x2, 0x5C, 0x54, 0x7A, 0x19, 0x91, 0x1, 0x1, 0x58, 0x1, 0x34, 0xF2, 0xCC, 0xB6, 0xED, 0x29, 0xF8, 0x12, 0xA, 0x72, 0xAB, 0xA1, 0xCF, 0xFE, 0xFD, 0xE9, 0x99, 0x5E, 0x60, 0x56, 0x67, 0x3, 0x8B, 0x51, 0x31, 0xCC, 0x5, 0xB0, 0x41, 0x58, 0xFD, 0xAD, 0x7F, 0xCD, 0xBA, 0xBA, 0x1, 0xE0, 0x92, 0x57, 0x11, 0x25, 0x40, 0x79, 0xB9, 0x8B, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x0, 0x2, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x3, 0xFB, 0xA3, 0x35, 0x68, 0xBF, 0xCA, 0xDC, 0xDB, 0xCD, 0xB6, 0x66, 0x14, 0xD0, 0x3, 0x46, 0x10, 0xA, 0x19, 0x33, 0xFD, 0xF3, 0x8D, 0x44, 0x44, 0x8B, 0x84, 0x6E, 0x6D, 0x15, 0xA1, 0xA1, 0x1, 0x28, 0xE7, 0x15, 0xFC, 0x1, 0x43, 0x97, 0x83, 0xFC, 0xFA, 0x7B, 0x4, 0xB3, 0x1F, 0xC3, 0x88, 0x1, 0xC9, 0x8C, 0xE0, 0xB1, 0x8B, 0xC1, 0x0, 0x2, 0x0, 0x3E, 0xFF, 0xEB, 0x4, 0x61, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x2, 0xB9, 0xB6, 0x66, 0x13, 0xD0, 0x3, 0x46, 0xC, 0xF, 0x18, 0x32, 0x4D, 0xA3, 0x34, 0x68, 0xBF, 0xCB, 0xDB, 0xDA, 0xFE, 0xF5, 0x83, 0x6F, 0x6D, 0x83, 0x8D, 0x45, 0x44, 0x15, 0x97, 0x83, 0x3, 0x7, 0x7A, 0x5, 0xB4, 0x1F, 0xA2, 0xA1, 0xFE, 0xD8, 0xE7, 0x14, 0xFD, 0xFE, 0xBE, 0xC3, 0xE0, 0xB1, 0x8B, 0xC0, 0x88, 0xFE, 0x39, 0x8D, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x32, 0x6, 0x1F, 0x0, 0x19, 0x0, 0x24, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x4, 0x32, 0xD7, 0xCE, 0xBD, 0x6C, 0xB, 0xDC, 0xD6, 0x7E, 0x49, 0x33, 0x25, 0x1B, 0x41, 0x5D, 0x6A, 0xB2, 0xD1, 0xD6, 0xFE, 0x1D, 0x87, 0x6A, 0x67, 0x8C, 0x9B, 0x43, 0x44, 0x2, 0x12, 0xEF, 0xFE, 0xC9, 0x8A, 0x76, 0x4, 0xE0, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFE, 0xF2, 0x7C, 0xFE, 0xCD, 0xF4, 0xFE, 0x8C, 0xCA, 0xAA, 0x8F, 0xD2, 0x8C, 0xFE, 0x44, 0x8D, 0x0, 0x1, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x3B, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x1, 0x66, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0x0, 0x2, 0x0, 0x2D, 0xFF, 0x7A, 0x4, 0x9, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x2B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x16, 0x7, 0x7, 0x27, 0x37, 0x26, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x2, 0x5B, 0x4E, 0x7B, 0x36, 0x20, 0x63, 0x99, 0x38, 0xC7, 0x78, 0x9E, 0x93, 0x5C, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0xF, 0x63, 0xB2, 0x6B, 0x99, 0x8B, 0xF7, 0xC2, 0x95, 0x6D, 0xAF, 0x44, 0x3C, 0x2D, 0x22, 0xAE, 0x21, 0x91, 0xA4, 0x79, 0xC1, 0x8C, 0xCB, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x55, 0x3F, 0x69, 0x5E, 0x93, 0x67, 0x94, 0xC4, 0x40, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x4B, 0x4, 0xE0, 0x6, 0x0, 0x0, 0xB, 0x0, 0x25, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x3, 0x2C, 0x36, 0x45, 0x7E, 0xD6, 0x6B, 0xAD, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x5C, 0x41, 0x23, 0x1C, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0xA5, 0xD, 0x8D, 0xB3, 0xD8, 0x77, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xF9, 0x8B, 0x56, 0x40, 0x6, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0xE0, 0x6, 0x1F, 0x0, 0xB, 0x0, 0x25, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x7D, 0x11, 0x6D, 0xBA, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xD6, 0x7E, 0x48, 0x33, 0x23, 0x1C, 0x41, 0x5C, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x75, 0x89, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x1, 0x9, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFB, 0x20, 0x0, 0x2, 0x0, 0x40, 0xFF, 0xEC, 0x3, 0xF8, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x37, 0x21, 0x35, 0x34, 0x12, 0x33, 0x32, 0x0, 0x11, 0x15, 0x14, 0x0, 0x1, 0x30, 0x1, 0xCE, 0x11, 0x7B, 0x63, 0x79, 0x61, 0x5, 0xC2, 0xA1, 0xCC, 0x34, 0x83, 0x68, 0xA8, 0x80, 0x95, 0xA, 0xFD, 0x3D, 0xE2, 0xEC, 0xCE, 0x1, 0x1C, 0xFE, 0xEB, 0x2, 0x83, 0x7C, 0x8C, 0x97, 0x5F, 0xFD, 0x57, 0x80, 0x4C, 0x7D, 0x86, 0xA5, 0x7D, 0x67, 0xEA, 0x1, 0x2C, 0xFE, 0xD3, 0xFE, 0xFF, 0x29, 0xDF, 0xFE, 0xD4, 0x0, 0x2, 0x0, 0x5A, 0xFF, 0xEB, 0x3, 0xF8, 0x4, 0x50, 0x0, 0x15, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x14, 0x0, 0x27, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x0, 0x15, 0x1, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x3, 0xF8, 0xFE, 0xF1, 0xCB, 0xE2, 0xE2, 0x2, 0xA9, 0xA, 0x87, 0x80, 0x6B, 0x8C, 0x38, 0x4E, 0x35, 0xC6, 0x91, 0xEA, 0x1, 0xD, 0xFE, 0x26, 0x5B, 0x74, 0x11, 0xFE, 0x4C, 0x64, 0x2, 0xE, 0xED, 0xFE, 0xCA, 0x2, 0x1, 0xE, 0xD9, 0x90, 0x7C, 0xAD, 0x37, 0x26, 0x9F, 0x2F, 0x52, 0xFE, 0xCE, 0xE8, 0xFE, 0x7A, 0x93, 0x6F, 0x1A, 0x5F, 0x89, 0x0, 0x2, 0x0, 0x40, 0xFF, 0xEC, 0x5, 0xAD, 0x4, 0x4E, 0x0, 0x20, 0x0, 0x28, 0x0, 0x0, 0x5, 0x22, 0x2, 0x35, 0x35, 0x25, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x37, 0x16, 0x16, 0x33, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x27, 0x7, 0x15, 0x6, 0x0, 0x27, 0x32, 0x36, 0x35, 0x5, 0x15, 0x14, 0x16, 0x2, 0xE, 0xEC, 0xE2, 0x2, 0xAD, 0x1E, 0x88, 0x63, 0xA8, 0x68, 0x83, 0x34, 0xCC, 0xA1, 0xBA, 0xFC, 0x32, 0xDD, 0x15, 0x35, 0x52, 0x3B, 0x1F, 0x41, 0x4C, 0x85, 0x63, 0x1A, 0x26, 0x1, 0xFE, 0xE5, 0xCD, 0x76, 0x80, 0xFE, 0x2B, 0x66, 0x14, 0x1, 0x2C, 0xEA, 0x3E, 0x91, 0x54, 0x66, 0x86, 0x7D, 0x4D, 0x7F, 0xB8, 0x95, 0x2D, 0x8B, 0xA5, 0x3, 0x95, 0x24, 0xA2, 0x70, 0x8, 0x3C, 0xFD, 0xFE, 0xD3, 0xC3, 0xC3, 0xAD, 0x5F, 0x1B, 0x5E, 0x98, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x4, 0x4D, 0x0, 0x6, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0x0, 0x4, 0x4D, 0x0, 0x26, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x4, 0x2, 0x23, 0x71, 0xD5, 0x89, 0xF2, 0x7A, 0x6A, 0x6E, 0x75, 0xD1, 0xD2, 0xC7, 0x68, 0x61, 0x63, 0x6D, 0x59, 0x7A, 0xF2, 0x1, 0x8, 0xB6, 0xCD, 0xFD, 0xB8, 0xCB, 0xFE, 0xF0, 0x14, 0x48, 0x97, 0x76, 0x3D, 0x5D, 0x5C, 0x3A, 0x91, 0x4, 0xAD, 0x4C, 0x3C, 0x34, 0x57, 0x4D, 0x3E, 0x98, 0xAE, 0xA1, 0x9A, 0x98, 0x4D, 0x42, 0xB9, 0x9A, 0xAC, 0x0, 0x1, 0x0, 0x54, 0xFF, 0xEC, 0x5, 0xC2, 0x4, 0x4D, 0x0, 0x32, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x16, 0x17, 0x37, 0x16, 0x16, 0x33, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x27, 0x7, 0x6, 0x7, 0x16, 0x15, 0x14, 0x4, 0x2, 0x23, 0x71, 0xD5, 0x89, 0xF2, 0x7A, 0x6A, 0x6E, 0x75, 0xD1, 0xD2, 0xC7, 0x68, 0x61, 0x63, 0x6D, 0x59, 0x7A, 0xF2, 0x1, 0x8, 0xB6, 0xA3, 0xE6, 0x2B, 0xF4, 0x16, 0x34, 0x52, 0x3C, 0x1F, 0x43, 0x4B, 0x84, 0x63, 0x1A, 0x51, 0x26, 0x87, 0xCB, 0xFE, 0xF0, 0x14, 0x48, 0x97, 0x76, 0x3D, 0x5D, 0x5C, 0x3A, 0x91, 0x4, 0xAD, 0x4C, 0x3C, 0x34, 0x57, 0x4D, 0x3E, 0x98, 0xAE, 0x67, 0x63, 0x32, 0x8A, 0xA6, 0x4, 0x96, 0x24, 0xA3, 0x70, 0x12, 0x6A, 0x39, 0x42, 0xB9, 0x9A, 0xAC, 0x0, 0x2, 0x0, 0x53, 0xFF, 0xEC, 0x3, 0xE2, 0x4, 0x4D, 0x0, 0x12, 0x0, 0x28, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x22, 0x26, 0x26, 0x35, 0x31, 0x35, 0x31, 0x31, 0x34, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x2, 0x2D, 0x64, 0x5E, 0xB7, 0x58, 0x62, 0x9A, 0x4D, 0x62, 0x5B, 0x8D, 0x7D, 0x64, 0x6D, 0xD7, 0x8F, 0x89, 0xD6, 0x74, 0xC4, 0xE5, 0xA6, 0xB9, 0xF8, 0xA6, 0x5D, 0x3A, 0x92, 0x2, 0xB0, 0x5, 0x81, 0x34, 0x57, 0x97, 0xD4, 0xD2, 0xAF, 0xBA, 0x60, 0xF8, 0xE3, 0x1, 0xD3, 0xEF, 0x63, 0xA1, 0x9A, 0x99, 0x4C, 0x41, 0xBA, 0x9A, 0xAC, 0x0, 0x1, 0x0, 0x39, 0xFE, 0x4B, 0x2, 0xB2, 0x4, 0x3A, 0x0, 0x13, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x2, 0xBA, 0x45, 0x3C, 0x2D, 0x2A, 0x7A, 0x1, 0xCD, 0xCD, 0xF3, 0xB4, 0xB4, 0x8, 0xFE, 0x4B, 0x11, 0xBF, 0x8, 0x8B, 0x62, 0xAB, 0x3, 0x8F, 0xFC, 0x71, 0xAB, 0x70, 0xFE, 0xBB, 0x0, 0x2, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xEA, 0x5, 0x72, 0x0, 0xB, 0x0, 0x30, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x27, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x35, 0x36, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x14, 0x4, 0x2, 0x40, 0x96, 0x44, 0x43, 0x95, 0x84, 0x79, 0x78, 0x65, 0x59, 0xF4, 0x48, 0x73, 0x70, 0xA4, 0x79, 0x8D, 0x6A, 0xAE, 0xC6, 0xE8, 0x2, 0xE9, 0xC9, 0xAF, 0x67, 0x1, 0xD5, 0x7E, 0x49, 0x33, 0x25, 0x1B, 0x40, 0x5D, 0xFE, 0xEF, 0xB3, 0x80, 0x1, 0xD9, 0x7C, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0xA3, 0x51, 0x62, 0x91, 0x85, 0x85, 0x7F, 0x49, 0x76, 0x1, 0x35, 0xE8, 0x1D, 0xF7, 0x1, 0x31, 0x70, 0x58, 0xB1, 0x8B, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFB, 0xEB, 0xDB, 0xED, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x1, 0x0, 0x68, 0xFF, 0xED, 0x4, 0x66, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x11, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x23, 0x35, 0x4, 0x66, 0x2C, 0xF0, 0xD1, 0xEA, 0xFE, 0xD9, 0x1, 0x26, 0xE2, 0xE4, 0xED, 0x12, 0xF2, 0x1C, 0xD5, 0x7C, 0x99, 0x98, 0x86, 0x6C, 0x71, 0x18, 0xEF, 0x2, 0x36, 0xFE, 0x6A, 0x38, 0x7B, 0x1, 0xC, 0xD4, 0xA4, 0xD4, 0x1, 0x9, 0xCA, 0xAC, 0xB6, 0xA2, 0x7A, 0xA5, 0x79, 0xA6, 0x27, 0x11, 0x9E, 0xB2, 0x0, 0x2, 0x0, 0x14, 0xFE, 0x4B, 0x4, 0x63, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x13, 0x16, 0x15, 0x14, 0x6, 0x26, 0x35, 0x34, 0x27, 0x6, 0x15, 0x14, 0x2, 0x3B, 0x88, 0xAD, 0x33, 0x87, 0xFE, 0x54, 0x1, 0x3, 0x1, 0x25, 0x1, 0x25, 0x1, 0x2, 0xFE, 0x56, 0x82, 0x31, 0xAA, 0x48, 0x3C, 0x42, 0xFE, 0x4B, 0x7F, 0x7C, 0x4D, 0x65, 0x1, 0xC, 0x3, 0x36, 0xFD, 0xBD, 0x2, 0x43, 0xFC, 0xC5, 0xFE, 0xFE, 0x63, 0x54, 0x7C, 0x7F, 0xBB, 0x4B, 0x41, 0x7D, 0x87, 0x37, 0x4B, 0x0, 0x2, 0x0, 0x1B, 0xFF, 0xEC, 0x5, 0x1, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x2A, 0x0, 0x0, 0x25, 0x32, 0x35, 0x34, 0x27, 0x6, 0x15, 0x14, 0x6, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x2, 0x8E, 0x3C, 0x3C, 0x3D, 0x48, 0x9C, 0x57, 0x46, 0x5F, 0x60, 0x38, 0x34, 0x3F, 0x85, 0x32, 0x83, 0x65, 0x6A, 0xA4, 0x4B, 0x4B, 0xA4, 0x69, 0x66, 0x83, 0x32, 0x86, 0x3F, 0x34, 0x38, 0x60, 0x5F, 0x46, 0x57, 0x9B, 0xA7, 0x40, 0x2B, 0x67, 0x69, 0x29, 0x40, 0xBB, 0x7E, 0x75, 0x50, 0xB1, 0x79, 0xA4, 0x6F, 0x49, 0x93, 0x3B, 0x5D, 0x9B, 0x77, 0x77, 0x9B, 0x5D, 0x3B, 0x93, 0x49, 0x6F, 0xA4, 0x7A, 0xB0, 0x50, 0x75, 0x7E, 0x0, 0x1, 0x0, 0x78, 0xFE, 0x60, 0x3, 0xF8, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x3, 0xF8, 0xF3, 0x76, 0xB7, 0x9F, 0xC1, 0xF3, 0x62, 0x5E, 0x92, 0x48, 0xF3, 0xFE, 0x60, 0x2, 0x16, 0x8A, 0xB9, 0xDC, 0x2, 0xB9, 0xFD, 0x45, 0x70, 0x5D, 0x81, 0x3, 0x7, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x1F, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x47, 0x93, 0x48, 0xF2, 0xD6, 0x7E, 0x48, 0x33, 0x23, 0x1C, 0x41, 0x5D, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xF3, 0x62, 0x3, 0x88, 0x83, 0xFC, 0xFB, 0x4, 0xE0, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFE, 0xE3, 0x8B, 0xB6, 0xDA, 0xFD, 0x42, 0x2, 0xBB, 0x71, 0x5C, 0x0, 0x1, 0x0, 0x7A, 0xFE, 0x7D, 0x3, 0xF9, 0x6, 0x1F, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x2, 0xA5, 0x43, 0x39, 0x1D, 0x23, 0x41, 0x5C, 0x62, 0x5D, 0x93, 0x48, 0xF2, 0xD6, 0x7E, 0x48, 0x33, 0x23, 0x1C, 0x41, 0x5D, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xD6, 0xFE, 0x7D, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x2, 0xFE, 0x71, 0x5C, 0x83, 0xFC, 0xFB, 0x4, 0xE0, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFE, 0xE3, 0x8B, 0xB6, 0xDA, 0xFC, 0xFF, 0xB3, 0x8D, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x5D, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFF, 0x74, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xEC, 0x2, 0x47, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x77, 0xF3, 0x5D, 0x40, 0x1F, 0x21, 0x36, 0x46, 0x7D, 0xD7, 0x4, 0x3A, 0xFC, 0xF1, 0x55, 0x41, 0x7, 0xA3, 0xD, 0x8D, 0xB2, 0x0, 0x1, 0x0, 0x5D, 0x0, 0x0, 0x2, 0x7A, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x11, 0x23, 0x35, 0x21, 0x15, 0x23, 0x11, 0x33, 0x2, 0x7A, 0xFD, 0xE3, 0x93, 0x93, 0x2, 0x1D, 0x97, 0x97, 0xC4, 0x2, 0xB3, 0xC3, 0xC3, 0xFD, 0x4D, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xF2, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x79, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x9A, 0xFD, 0xB9, 0x0, 0x2, 0x0, 0x22, 0x0, 0x0, 0x3, 0xB8, 0x6, 0x0, 0x0, 0x8, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x35, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x33, 0x5, 0x23, 0x11, 0x23, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x33, 0x1, 0xD1, 0x33, 0x38, 0x61, 0x6B, 0x2, 0x48, 0xF4, 0xF3, 0x7C, 0x8B, 0xA8, 0xAD, 0x9A, 0x38, 0x30, 0xF3, 0xF4, 0x2, 0xE4, 0x4C, 0x30, 0x3F, 0x5E, 0x5D, 0xB5, 0xFD, 0xD1, 0x2, 0x2F, 0x8E, 0x80, 0x78, 0x99, 0xA, 0x1, 0xBC, 0xFC, 0xE4, 0x0, 0x1, 0x0, 0xB7, 0xFE, 0x4B, 0x2, 0x87, 0x6, 0x0, 0x0, 0xD, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0xB7, 0xF3, 0x5D, 0x40, 0x24, 0x1C, 0x36, 0x46, 0x7D, 0xD7, 0x6, 0x0, 0xF9, 0x8B, 0x56, 0x40, 0x6, 0xA3, 0xD, 0x8D, 0xB3, 0x0, 0x1, 0x0, 0x8C, 0xFE, 0x4B, 0x4, 0x75, 0x6, 0x0, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x24, 0x27, 0x33, 0x16, 0x33, 0x32, 0x36, 0x35, 0x10, 0x25, 0x23, 0x35, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x74, 0xB3, 0xFE, 0xED, 0x22, 0xF3, 0x26, 0xCF, 0x80, 0x8E, 0xFE, 0xE0, 0x7F, 0x1, 0x4E, 0xFE, 0x4E, 0xF3, 0xF3, 0x2, 0xCB, 0x1, 0xFE, 0x8E, 0xC5, 0xD7, 0xFE, 0xDF, 0xFE, 0x4B, 0x9D, 0xC3, 0x9D, 0x8A, 0x6E, 0x1, 0x5, 0x6, 0xAC, 0x1, 0xBA, 0xFC, 0x89, 0x6, 0x0, 0xFE, 0x3A, 0x9B, 0xFE, 0x1A, 0x19, 0xE6, 0xC2, 0xCD, 0xE0, 0x0, 0x1, 0x0, 0x7D, 0xFF, 0xEC, 0x6, 0x7A, 0x4, 0x3A, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x5, 0x95, 0x7, 0x73, 0xC5, 0xD8, 0x51, 0x35, 0xA7, 0x70, 0xA5, 0xBE, 0x1, 0xF3, 0x69, 0x59, 0x52, 0x69, 0x15, 0xF3, 0x69, 0x5A, 0x93, 0x3C, 0xF3, 0x71, 0x85, 0xA5, 0x4B, 0x5A, 0xB8, 0xD4, 0x2, 0xC2, 0xFD, 0x42, 0x78, 0x52, 0x58, 0x47, 0x2, 0xE9, 0xFD, 0x44, 0x72, 0x5A, 0x78, 0x3, 0x10, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x6, 0x7A, 0x4, 0x3A, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x6, 0x7A, 0xF3, 0x72, 0xBF, 0xD8, 0x51, 0x35, 0xA7, 0x70, 0xA5, 0xBE, 0x1, 0xF3, 0x69, 0x59, 0x52, 0x69, 0x15, 0xF3, 0x69, 0x5A, 0x93, 0x3C, 0xF3, 0xFE, 0x60, 0x2, 0x9, 0x7D, 0xA5, 0x4B, 0x5A, 0xB8, 0xD4, 0x2, 0xC2, 0xFD, 0x42, 0x78, 0x52, 0x58, 0x47, 0x2, 0xE9, 0xFD, 0x44, 0x72, 0x5A, 0x78, 0x3, 0x10, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x4B, 0x6, 0x7A, 0x4, 0x4E, 0x0, 0x28, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x5, 0x26, 0x43, 0x39, 0x1D, 0x23, 0x41, 0x5C, 0x69, 0x5A, 0x53, 0x69, 0x14, 0xF3, 0x68, 0x5A, 0x93, 0x3D, 0xF2, 0xE4, 0x7, 0x73, 0xC6, 0xD7, 0x51, 0x77, 0xD6, 0xA7, 0xBD, 0xD7, 0xFE, 0x4B, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x3, 0x33, 0x78, 0x52, 0x5A, 0x48, 0xFD, 0x1A, 0x2, 0xBC, 0x72, 0x5A, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0xA5, 0xA5, 0xBA, 0xD7, 0xFC, 0xCE, 0xB3, 0x8D, 0x0, 0x1, 0xFF, 0xF9, 0xFE, 0x4B, 0x4, 0x56, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x14, 0x6, 0x75, 0x42, 0x3A, 0x1D, 0x23, 0x41, 0x5D, 0xE4, 0x8, 0x77, 0xC3, 0x9C, 0xBC, 0x1, 0xF3, 0x62, 0x5D, 0x92, 0x49, 0xD6, 0xFE, 0x4B, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x4, 0xAF, 0x7D, 0x91, 0xB3, 0xDA, 0xFD, 0x3F, 0x2, 0xBE, 0x70, 0x5A, 0x86, 0xFC, 0x89, 0xB3, 0x8D, 0x0, 0x1, 0x0, 0x7A, 0xFE, 0x4B, 0x4, 0xD6, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x4, 0xD6, 0x37, 0x45, 0x7E, 0xD6, 0x61, 0x5E, 0x91, 0x49, 0xF3, 0xE5, 0x8, 0x77, 0xC2, 0x9C, 0xBC, 0x1, 0x5D, 0x40, 0x22, 0x1E, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0x3, 0x33, 0x70, 0x5A, 0x84, 0xFC, 0xFC, 0x4, 0x3A, 0x7C, 0x90, 0xB3, 0xDA, 0xFC, 0xCA, 0x56, 0x40, 0x6, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x9, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x23, 0x1, 0x1, 0x6F, 0xF2, 0xF2, 0x1, 0xA8, 0xF2, 0xF2, 0xFE, 0x58, 0x4, 0x3A, 0xFD, 0x28, 0x2, 0xD8, 0xFB, 0xC6, 0x2, 0xDA, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x6, 0x4B, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x33, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x22, 0x6, 0x2, 0x5D, 0x28, 0xAB, 0xAB, 0x2A, 0x87, 0x7C, 0x7D, 0x88, 0xEA, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEB, 0x5B, 0x9E, 0x7D, 0x2, 0x7A, 0xFD, 0xD7, 0x1, 0xD3, 0xFE, 0x2D, 0x2, 0x29, 0xFD, 0x85, 0x7D, 0x9D, 0xAF, 0xC, 0x2, 0xC4, 0xC, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0xC3, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0x14, 0xC1, 0xF6, 0xC2, 0xFF, 0x0, 0xC1, 0x14, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2D, 0x4, 0x4E, 0x0, 0x17, 0x0, 0x2D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x34, 0x12, 0x24, 0x33, 0x31, 0x33, 0x31, 0x31, 0x32, 0x4, 0x12, 0x15, 0x14, 0x6, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x21, 0x20, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x4, 0x8C, 0xE6, 0x5C, 0x5D, 0xE6, 0x9B, 0xB7, 0x4F, 0x9F, 0x1, 0x47, 0xFD, 0x1, 0xFD, 0x1, 0x47, 0x9F, 0x4F, 0xB6, 0xA6, 0x67, 0x51, 0xDA, 0xFE, 0xE9, 0xFE, 0xEA, 0xDA, 0x51, 0x67, 0x50, 0x6B, 0xFB, 0x1, 0x35, 0x36, 0x15, 0xDF, 0xDF, 0x9B, 0xEC, 0x79, 0xA2, 0x1, 0x16, 0xAB, 0xAB, 0xFE, 0xEA, 0xA0, 0x7A, 0xED, 0x9B, 0xC3, 0xC5, 0x7A, 0xA6, 0xF8, 0xF8, 0xA6, 0x7A, 0xC5, 0x8A, 0xA9, 0xBE, 0xC5, 0xA3, 0x44, 0x45, 0x0, 0x3, 0x0, 0x50, 0xFE, 0x60, 0x4, 0x84, 0x6, 0x0, 0x0, 0x13, 0x0, 0x19, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x37, 0x11, 0x33, 0x11, 0x16, 0x12, 0x15, 0x15, 0x14, 0x2, 0x7, 0x1, 0x10, 0x17, 0x11, 0x6, 0x7, 0x5, 0x34, 0x27, 0x11, 0x36, 0x37, 0x2, 0xE3, 0xF2, 0xBC, 0xE5, 0xE6, 0xBB, 0xF2, 0xBC, 0xE5, 0xE5, 0xBC, 0xFE, 0x60, 0xAE, 0xAA, 0x4, 0x2, 0x4F, 0xAF, 0xAB, 0x4, 0xFE, 0x60, 0x1, 0x97, 0x22, 0x1, 0x16, 0xE3, 0x15, 0xE3, 0x1, 0x17, 0x22, 0x1, 0xBD, 0xFE, 0x43, 0x22, 0xFE, 0xE9, 0xE4, 0x14, 0xE3, 0xFE, 0xE9, 0x22, 0x2, 0x1C, 0xFF, 0x0, 0x4B, 0x2, 0xAC, 0x4B, 0xF6, 0xB, 0xFE, 0x4E, 0xFD, 0x53, 0x4A, 0xF7, 0x0, 0x1, 0x0, 0x1B, 0xFF, 0xEC, 0x2, 0x53, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x1, 0x6C, 0x7, 0x57, 0x9D, 0x31, 0x25, 0x2, 0x32, 0x31, 0xA7, 0x3A, 0xF2, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x7F, 0x2, 0xE5, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x1B, 0xFF, 0xEC, 0x2, 0x53, 0x6, 0x0, 0x0, 0xD, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x1, 0x6C, 0x7, 0x57, 0x9D, 0x31, 0x25, 0x2, 0x32, 0x31, 0xA7, 0x3A, 0xF2, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x7F, 0x4, 0xAB, 0xFA, 0x0, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0x30, 0x4, 0x3A, 0x0, 0x17, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3, 0x30, 0x36, 0x46, 0x7D, 0xD7, 0x56, 0x99, 0x31, 0x25, 0x2, 0x32, 0x31, 0xA7, 0x3A, 0xF2, 0x5D, 0x40, 0x24, 0x1C, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0xE6, 0x85, 0xD, 0xE5, 0x8, 0x7F, 0x2, 0xE5, 0xFB, 0x51, 0x56, 0x40, 0x6, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x2, 0x51, 0xA9, 0x39, 0xF2, 0xE8, 0x6, 0x56, 0x9E, 0x31, 0x25, 0x2, 0x32, 0x3, 0x64, 0x80, 0xFB, 0x7C, 0x5, 0xDA, 0x7A, 0x8E, 0xD, 0xE5, 0x8, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x4B, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0x17, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x4C, 0x36, 0x46, 0x7D, 0xD6, 0xE8, 0x6, 0x56, 0x9E, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA9, 0x39, 0x5D, 0x40, 0x24, 0x1C, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0x4, 0xAF, 0x7A, 0x8E, 0xD, 0xE5, 0x8, 0x80, 0xFC, 0xA7, 0x56, 0x40, 0x6, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x2, 0x4D, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x0, 0x21, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x70, 0xF3, 0xD6, 0x7E, 0x43, 0x39, 0x1D, 0x22, 0x41, 0x5D, 0x3, 0xF, 0xB2, 0x8D, 0xF, 0xA3, 0x7, 0x3E, 0x56, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x60, 0x1, 0xEB, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x1, 0xEB, 0xF3, 0x5C, 0x41, 0x1D, 0x23, 0x37, 0x45, 0x7E, 0xD6, 0xFE, 0x60, 0x4, 0xAF, 0x56, 0x40, 0x7, 0xA3, 0xD, 0x8D, 0xB2, 0x0, 0x2, 0x0, 0x71, 0x0, 0x0, 0x4, 0x2A, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x13, 0x3, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x13, 0x1, 0x63, 0xEE, 0x5F, 0x56, 0x5D, 0x65, 0xE9, 0xE8, 0xE2, 0xF2, 0x1, 0xD3, 0xCE, 0xE8, 0xCF, 0xFF, 0x3, 0x79, 0xFE, 0xC9, 0x5F, 0x3A, 0x3B, 0x63, 0xFC, 0x87, 0x1, 0x8E, 0xFE, 0x72, 0x4, 0x3A, 0xC5, 0x95, 0xD4, 0x56, 0xFE, 0x4A, 0x0, 0x2, 0x0, 0x71, 0x0, 0x0, 0x4, 0x2A, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x15, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x3, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x71, 0xF2, 0xE2, 0xE8, 0xFD, 0xFF, 0xCF, 0xE8, 0xCE, 0xE1, 0xE1, 0x65, 0x5D, 0x56, 0x5F, 0xEE, 0x4, 0x3A, 0xFE, 0x72, 0x1, 0x8E, 0xFE, 0x4A, 0x56, 0xD4, 0x95, 0xC5, 0xC1, 0x65, 0x39, 0x38, 0x61, 0x0, 0x1, 0x0, 0x4C, 0xFE, 0x52, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x30, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0xF8, 0x33, 0x3B, 0x88, 0xB6, 0xEC, 0x5, 0x8A, 0x50, 0x60, 0x65, 0x55, 0x8E, 0xB0, 0xD9, 0xE0, 0xC1, 0xCB, 0xE7, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x5F, 0x7F, 0xBC, 0xD3, 0xEE, 0xC7, 0x8E, 0x6C, 0x5D, 0x41, 0x22, 0x1D, 0xFE, 0x61, 0xF, 0xA5, 0x9B, 0x1, 0xC4, 0x64, 0x50, 0x4A, 0x3A, 0x35, 0x4C, 0x1E, 0x25, 0x93, 0x89, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x6C, 0x40, 0x1B, 0x28, 0x92, 0x91, 0x90, 0xB8, 0x36, 0x90, 0x56, 0x3F, 0x7, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0x31, 0x6, 0x15, 0x0, 0x15, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x11, 0x14, 0x6, 0xA4, 0x43, 0x46, 0x7, 0x28, 0x35, 0xAD, 0xCD, 0xAF, 0x43, 0x46, 0x7, 0x28, 0x35, 0xAD, 0xCC, 0xFE, 0x4B, 0x12, 0xBE, 0x8, 0xAC, 0x4, 0xE2, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAC, 0xFB, 0x1E, 0xB4, 0xC0, 0xFF, 0xFF, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0x31, 0x6, 0x15, 0x0, 0x26, 0x1, 0x37, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0xC7, 0xFD, 0x78, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0x31, 0x4, 0x4E, 0x0, 0x15, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x16, 0x33, 0x32, 0x37, 0x3, 0x31, 0x46, 0x43, 0xAF, 0xCC, 0x1, 0xAD, 0x33, 0x2A, 0x7, 0x48, 0x41, 0xB0, 0xCC, 0x1, 0xAC, 0x34, 0x2A, 0xFE, 0x5D, 0x12, 0xBF, 0xB5, 0x3, 0x1D, 0xAA, 0x8, 0xBE, 0x12, 0xBF, 0xB5, 0xFC, 0xE3, 0xAA, 0x8, 0x0, 0x2, 0x0, 0x1E, 0xFE, 0x4B, 0x3, 0xD2, 0x6, 0x15, 0x0, 0x9, 0x0, 0x23, 0x0, 0x0, 0x1, 0x32, 0x35, 0x35, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x17, 0x1, 0x62, 0x6C, 0x32, 0x30, 0x6B, 0x38, 0x1, 0xFF, 0x95, 0x21, 0x98, 0x85, 0x9A, 0xAD, 0xA9, 0x8A, 0x41, 0x3C, 0xCC, 0xB0, 0x42, 0x46, 0x6, 0x2A, 0x33, 0xAD, 0x1, 0xF3, 0xFE, 0xFA, 0x77, 0x2E, 0x17, 0x5E, 0x2C, 0x32, 0x8C, 0x8E, 0x4D, 0x64, 0x99, 0x78, 0x80, 0x8E, 0xE, 0x4, 0x45, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAA, 0xFB, 0x3B, 0xDD, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x2, 0xA2, 0x5, 0x55, 0x0, 0x15, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x33, 0x2, 0xA2, 0xB3, 0xF2, 0xBF, 0xBF, 0x3F, 0x32, 0x26, 0x2F, 0x46, 0x5A, 0x7A, 0x9E, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0x1, 0x7, 0xB4, 0x2, 0x5C, 0x49, 0x2C, 0xA, 0xBB, 0x18, 0x89, 0xA7, 0xFD, 0x96, 0x0, 0x1, 0x0, 0x8, 0xFE, 0x4B, 0x2, 0x8A, 0x5, 0x41, 0x0, 0x15, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x8A, 0x36, 0x46, 0x7D, 0xD6, 0xB3, 0xB3, 0xF2, 0xBF, 0xBF, 0x5D, 0x40, 0x22, 0x1E, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0x3, 0xFC, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFC, 0x4, 0x56, 0x40, 0x6, 0x0, 0x2, 0x0, 0x18, 0xFF, 0xEC, 0x5, 0x27, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x32, 0x37, 0x35, 0x21, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x2, 0x7D, 0xAF, 0x40, 0xFE, 0x66, 0x67, 0x1, 0x41, 0x6, 0x6A, 0xC6, 0x9F, 0xC5, 0x1, 0xC7, 0xC7, 0xF3, 0x1, 0x9A, 0xF3, 0xC8, 0xC8, 0xB3, 0x7F, 0xAF, 0x64, 0x75, 0x55, 0xB3, 0x6A, 0x7E, 0xBA, 0xD5, 0x66, 0xAB, 0x1, 0xAE, 0xFE, 0x52, 0x1, 0xAE, 0xFE, 0x52, 0xAB, 0xFE, 0x1F, 0x0, 0x1, 0x0, 0x62, 0xFF, 0xEB, 0x4, 0x8E, 0x4, 0x4E, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x32, 0x36, 0x36, 0x35, 0x34, 0x26, 0x26, 0x35, 0x34, 0x36, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x34, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x15, 0x14, 0x16, 0x16, 0x2, 0x77, 0x7A, 0x7E, 0x2D, 0x3B, 0x3E, 0x31, 0x99, 0x9C, 0x22, 0x4F, 0x3B, 0x3B, 0x59, 0xE7, 0xD7, 0xD4, 0xE7, 0x5A, 0x3B, 0x3B, 0x4F, 0x22, 0x9D, 0x98, 0x31, 0x3D, 0x3C, 0x2D, 0x7D, 0xAE, 0x57, 0x7C, 0x36, 0x56, 0x8E, 0x87, 0x41, 0x2F, 0x6E, 0x4E, 0xBD, 0x21, 0x39, 0x37, 0x71, 0x9B, 0x75, 0x5C, 0xBB, 0x7D, 0x7C, 0xBB, 0x5D, 0x75, 0x9B, 0x71, 0x37, 0x39, 0x21, 0xBD, 0x4E, 0x6E, 0x2F, 0x41, 0x87, 0x8E, 0x56, 0x36, 0x7C, 0x57, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xE9, 0x4, 0x4E, 0x0, 0x18, 0x0, 0x0, 0x24, 0x36, 0x35, 0x11, 0x34, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x20, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x2, 0x89, 0x6D, 0x63, 0x25, 0x3A, 0x1C, 0x82, 0x64, 0x93, 0x58, 0xF6, 0xFE, 0x7A, 0xF6, 0xF3, 0x6D, 0xB3, 0x6B, 0x94, 0x1, 0x48, 0x83, 0xE, 0xB3, 0x2C, 0xC1, 0x80, 0xFE, 0xA7, 0xF3, 0xD5, 0xD5, 0xF3, 0x2, 0x86, 0xFD, 0x77, 0x92, 0x6C, 0x0, 0x1, 0x0, 0x19, 0x0, 0x0, 0x3, 0xDD, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x0, 0x21, 0x3, 0x3, 0x23, 0x1, 0x33, 0x1, 0x2, 0xE1, 0xE9, 0xE4, 0xFB, 0x1, 0x77, 0xD3, 0x1, 0x7A, 0x3, 0x5, 0xFC, 0xFB, 0x4, 0x3A, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x4, 0x3A, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x23, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x23, 0x3, 0x27, 0x7, 0x3, 0x23, 0x3, 0x27, 0x1, 0xB4, 0xA5, 0xED, 0x1, 0x28, 0xC8, 0xCD, 0x17, 0x18, 0xD0, 0xC7, 0x1, 0x28, 0xED, 0x9D, 0xC, 0xE, 0xD5, 0xB8, 0xD6, 0xA, 0x2, 0xBE, 0xFD, 0x42, 0x4, 0x3A, 0xFD, 0x64, 0x6D, 0x6D, 0x2, 0x9C, 0xFB, 0xC6, 0x2, 0xC4, 0x51, 0x4F, 0xFD, 0x3A, 0x2, 0xC5, 0x39, 0x0, 0x1, 0x0, 0xD, 0x0, 0x0, 0x3, 0xD8, 0x5, 0xEF, 0x0, 0x10, 0x0, 0x0, 0x21, 0x3, 0x3, 0x21, 0x1, 0x12, 0x37, 0x37, 0x32, 0x17, 0x15, 0x27, 0x22, 0x6, 0x7, 0x7, 0x1, 0x2, 0xD1, 0xE5, 0xDC, 0xFE, 0xFD, 0x1, 0xAB, 0x5B, 0xCB, 0x2D, 0x2E, 0x47, 0x2E, 0x5A, 0x5E, 0x1C, 0x23, 0x1, 0x7D, 0x2, 0xDF, 0xFD, 0x21, 0x4, 0xD2, 0x1, 0x6, 0x15, 0x2, 0x11, 0xBC, 0x3, 0x41, 0x51, 0x5D, 0xFB, 0xCA, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x4, 0x31, 0x4, 0x39, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x2, 0x93, 0xF3, 0xFE, 0x68, 0x1, 0xB, 0x1, 0xA, 0x1, 0x9, 0x1, 0xB, 0xFE, 0x62, 0x1, 0x6D, 0x2, 0xCC, 0xFD, 0xFE, 0x2, 0x2, 0xFD, 0x2B, 0x0, 0x1, 0x0, 0x52, 0xFE, 0x4B, 0x4, 0x99, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x1, 0x20, 0x3, 0x35, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x4, 0x2B, 0xFE, 0xF1, 0x6, 0xFD, 0x3C, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x2, 0x3C, 0x5C, 0x40, 0x23, 0x1D, 0x33, 0xFE, 0x4B, 0x1, 0x33, 0x82, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xFE, 0xC8, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x0, 0x2, 0x0, 0x52, 0xFF, 0x1B, 0x4, 0xE3, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x33, 0x32, 0x36, 0x35, 0x34, 0x1, 0x7, 0x27, 0x37, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x3, 0xCA, 0x32, 0x66, 0x4C, 0x69, 0x56, 0x72, 0xFE, 0x4D, 0x9B, 0x9C, 0x52, 0xFE, 0xD3, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x87, 0x8E, 0xC8, 0x83, 0x80, 0x82, 0xF0, 0xAC, 0x1, 0x9E, 0x6C, 0x6F, 0x4C, 0x3D, 0x52, 0xFE, 0x62, 0xE5, 0x71, 0x74, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xC8, 0xC7, 0x89, 0x72, 0x9A, 0xBD, 0x0, 0x1, 0x0, 0x51, 0xFE, 0x4B, 0x4, 0x39, 0x4, 0x3A, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x24, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x39, 0xB3, 0xFE, 0xE8, 0x1D, 0xF3, 0xF, 0x76, 0x70, 0x80, 0x8E, 0x9B, 0x93, 0x8D, 0x1, 0x69, 0xFD, 0x91, 0x3, 0x89, 0x1, 0xFE, 0x78, 0x16, 0xC5, 0xD6, 0xFE, 0xDF, 0xFE, 0x4B, 0xAB, 0xDE, 0x56, 0x70, 0x89, 0x6B, 0x8F, 0x80, 0xAC, 0x1, 0xBA, 0xC3, 0x9B, 0xFE, 0x1A, 0x2, 0x13, 0xEA, 0xBF, 0xCF, 0xE1, 0x0, 0x2, 0x0, 0x51, 0xFE, 0x4B, 0x4, 0x8F, 0x4, 0x3A, 0x0, 0x1F, 0x0, 0x29, 0x0, 0x0, 0x1, 0x22, 0x24, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x37, 0x26, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x17, 0x16, 0x16, 0x15, 0x14, 0x7, 0x17, 0x7, 0x27, 0x6, 0x27, 0x32, 0x37, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x2, 0x20, 0xC1, 0xFE, 0xF2, 0xBE, 0x92, 0x79, 0xC8, 0x5F, 0x2, 0x9, 0x98, 0x89, 0x8D, 0x1, 0x69, 0xFD, 0x91, 0x3, 0x89, 0x1, 0xFE, 0x78, 0x18, 0xC5, 0xD4, 0x23, 0x79, 0x86, 0x70, 0x8E, 0xE0, 0x79, 0x4B, 0x54, 0xA4, 0x4D, 0x6D, 0x89, 0xFE, 0x4B, 0xA8, 0x9B, 0x78, 0x99, 0x5A, 0x49, 0x22, 0x81, 0x72, 0xAC, 0x1, 0xBA, 0xC3, 0x9B, 0xFE, 0x1A, 0x3, 0x12, 0xEC, 0xC0, 0x5F, 0x4C, 0x6E, 0x94, 0x68, 0x68, 0xC3, 0x38, 0x46, 0x5D, 0x5B, 0x47, 0x39, 0x0, 0x1, 0x0, 0x3B, 0x0, 0x0, 0x3, 0xE1, 0x6, 0x15, 0x0, 0x18, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x7, 0x2, 0x74, 0xF9, 0x7C, 0x95, 0x62, 0x62, 0x95, 0x58, 0x7A, 0x5, 0xE5, 0x5, 0x1, 0x0, 0xB4, 0xFA, 0xF3, 0xB5, 0xB8, 0x2, 0x2B, 0xDC, 0x81, 0x6E, 0x83, 0xD9, 0x67, 0x50, 0x9D, 0xDD, 0xFE, 0xC0, 0xDF, 0x6E, 0xC1, 0xFE, 0xD7, 0x29, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x3, 0xF5, 0x6, 0x15, 0x0, 0x18, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x2, 0xAC, 0xF3, 0xB7, 0xB2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x55, 0x7F, 0x2, 0x2B, 0xFD, 0xD5, 0x1, 0x74, 0x2B, 0x1, 0x28, 0xBF, 0x70, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x70, 0x7B, 0xD1, 0xF, 0x0, 0x1, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x5, 0xFF, 0x0, 0x18, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x27, 0x23, 0x11, 0x33, 0x11, 0x16, 0x12, 0x15, 0x15, 0x14, 0x2, 0x1, 0xF5, 0xC4, 0xF1, 0x5, 0xE5, 0x5, 0x6F, 0x63, 0x95, 0x62, 0x55, 0x7F, 0x95, 0xF3, 0xB7, 0xB2, 0xF3, 0x14, 0xE4, 0xB3, 0x56, 0x7E, 0xDB, 0x82, 0x70, 0x7A, 0xD1, 0xF, 0x2, 0x29, 0xFE, 0x8D, 0x2A, 0xFE, 0xD8, 0xBE, 0x70, 0xDF, 0xFE, 0xBF, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x4B, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x11, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x2, 0x3A, 0x58, 0x7A, 0x5, 0xE4, 0x4, 0xFF, 0x0, 0xB5, 0xFA, 0xF2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0xF2, 0x67, 0x50, 0x9D, 0xDD, 0x1, 0x41, 0xDF, 0x1, 0xC4, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0xFE, 0x3C, 0x83, 0xDA, 0x0, 0x3, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x27, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x27, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x5, 0x1F, 0xFE, 0xB5, 0xFE, 0xF0, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFD, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0xA2, 0xA8, 0xB6, 0xFE, 0x13, 0x4A, 0x43, 0x44, 0x4A, 0x4A, 0x44, 0x43, 0x4A, 0x2, 0xB3, 0xFE, 0xB4, 0xFE, 0x85, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x2, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x29, 0x3A, 0x4D, 0x4D, 0x3A, 0x38, 0x4D, 0x4D, 0x0, 0x2, 0x0, 0x61, 0xFF, 0xEC, 0x3, 0xF0, 0x4, 0x4D, 0x0, 0x15, 0x0, 0x27, 0x0, 0x0, 0x1, 0x31, 0x14, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x15, 0x31, 0x15, 0x1, 0x32, 0x36, 0x10, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x3, 0xF0, 0x8F, 0xD7, 0x6D, 0xC4, 0xF8, 0xB9, 0xA6, 0xE5, 0xC4, 0x75, 0xD6, 0x88, 0xFE, 0x26, 0x6B, 0x7D, 0x8D, 0x5B, 0x62, 0x4D, 0x9A, 0x62, 0x58, 0xB7, 0x5E, 0x2, 0x27, 0xE4, 0xF7, 0x60, 0xAC, 0x9A, 0xBA, 0x41, 0x4C, 0x99, 0x9A, 0xA1, 0x63, 0xEF, 0xD3, 0x1, 0xFE, 0x7F, 0xAF, 0x1, 0xA6, 0x97, 0x57, 0x34, 0x81, 0x5, 0xB0, 0x2, 0x92, 0x3A, 0x5D, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xED, 0x5, 0x17, 0x4, 0x99, 0x0, 0x28, 0x0, 0x0, 0x25, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x23, 0x35, 0x21, 0x4, 0x4D, 0x2C, 0xF0, 0xD1, 0xEA, 0xFE, 0xDA, 0x1, 0x26, 0xE2, 0xD6, 0x7C, 0x3A, 0xC5, 0x3B, 0x33, 0x1C, 0x23, 0x41, 0x5D, 0xF2, 0x1B, 0xD5, 0x7D, 0x99, 0x99, 0x85, 0x6C, 0x72, 0x17, 0xEF, 0x1, 0xE7, 0xA0, 0x38, 0x7B, 0x1, 0xC, 0xD4, 0xA4, 0xD4, 0x1, 0x9, 0x5F, 0xAA, 0xF, 0xA3, 0x7, 0x3E, 0x56, 0x82, 0xB6, 0xA2, 0x7A, 0xA5, 0x79, 0xA6, 0x27, 0x11, 0x9E, 0xB2, 0x0, 0x3, 0x0, 0x1E, 0xFE, 0x4B, 0x3, 0x99, 0x5, 0xD5, 0x0, 0x9, 0x0, 0x1A, 0x0, 0x23, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x3, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0x16, 0x1, 0xBF, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5A, 0x9A, 0xAD, 0xA9, 0x8A, 0x7D, 0xF3, 0xD8, 0xD8, 0x96, 0xC9, 0x6C, 0x62, 0x6B, 0x38, 0x5, 0x54, 0x38, 0x49, 0x49, 0x38, 0x37, 0x4A, 0x4A, 0xF9, 0x2E, 0x99, 0x78, 0x80, 0x8E, 0x3, 0xD0, 0xFC, 0x30, 0xB4, 0x13, 0x87, 0xD1, 0xAF, 0x77, 0x45, 0x5E, 0x2C, 0x32, 0x0, 0x1, 0xFF, 0xF6, 0xFE, 0x60, 0x3, 0xB0, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x11, 0x7, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x37, 0x11, 0x33, 0x3, 0xB0, 0xF3, 0x4D, 0xFE, 0xD6, 0xFE, 0xDB, 0x1, 0x93, 0xFE, 0x42, 0x1, 0x19, 0x1, 0x41, 0x6D, 0xF3, 0xFE, 0x60, 0x3, 0x50, 0x60, 0xFE, 0xB0, 0x1, 0xC2, 0x2, 0x78, 0xFE, 0x2E, 0x70, 0x1, 0x62, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x3, 0x65, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x7A, 0xF3, 0x1, 0xF8, 0x4, 0x3A, 0xFC, 0x87, 0xC1, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x4, 0xE0, 0x5, 0x72, 0x0, 0x19, 0x0, 0x25, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x4, 0x3, 0xF3, 0x6A, 0xAA, 0xCA, 0xE2, 0xE1, 0xCD, 0xA9, 0x69, 0xD7, 0x7D, 0x49, 0x33, 0x25, 0x1B, 0x40, 0x5D, 0xFE, 0x36, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0xFE, 0x60, 0x1, 0xFD, 0x71, 0x1, 0x3A, 0xED, 0x14, 0xF7, 0x1, 0x30, 0x6F, 0x54, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFC, 0x7C, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0x0, 0x1, 0x0, 0x3B, 0x0, 0x0, 0x3, 0xE1, 0x6, 0x15, 0x0, 0x20, 0x0, 0x0, 0x25, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x7, 0x15, 0x33, 0x3, 0x43, 0xCF, 0xF9, 0xD6, 0xD6, 0x7C, 0x95, 0x62, 0x62, 0x95, 0x58, 0x7A, 0x5, 0xE5, 0x5, 0x1, 0x0, 0xB4, 0xFA, 0xF3, 0xB5, 0xB8, 0xCF, 0x8C, 0x8C, 0x8C, 0xAB, 0xF4, 0xDC, 0x81, 0x6E, 0x83, 0xD9, 0x67, 0x50, 0x9D, 0xDD, 0xFE, 0xC0, 0xDF, 0x6E, 0xC1, 0xFE, 0xD7, 0x29, 0x3E, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x3, 0xF5, 0x6, 0x15, 0x0, 0x26, 0x1, 0x49, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x0, 0x53, 0xFE, 0x5, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0x72, 0x6, 0x0, 0x0, 0xB, 0x0, 0xE, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x1, 0x21, 0x3, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x21, 0x15, 0x1, 0x21, 0x15, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x2, 0x50, 0x2, 0x25, 0xFD, 0xDB, 0xDD, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x3, 0x59, 0xFD, 0xD6, 0x2, 0x3F, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0x14, 0x2, 0xD7, 0xFC, 0x8A, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFE, 0x3A, 0x99, 0xFD, 0x22, 0xC3, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x4B, 0x7, 0x11, 0x6, 0x0, 0x0, 0xB, 0x0, 0x36, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x22, 0x24, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x11, 0x23, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x3, 0x5C, 0xB3, 0xFE, 0xDA, 0x26, 0xF3, 0x14, 0x7F, 0x76, 0x83, 0x8E, 0x9A, 0x94, 0x8D, 0x1, 0x6A, 0xFE, 0x37, 0xDD, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x2, 0xE2, 0x1, 0xFE, 0x79, 0xCE, 0xE3, 0xFE, 0xDF, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0x98, 0x99, 0xCB, 0x48, 0x59, 0x89, 0x6B, 0x8F, 0x80, 0xAC, 0x1, 0xBA, 0xFC, 0x89, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFE, 0x3A, 0x9B, 0xFE, 0x1D, 0x15, 0xE6, 0xC4, 0xD1, 0xE1, 0x0, 0x4, 0x0, 0x50, 0xFF, 0x1B, 0x8, 0x94, 0x6, 0x0, 0x0, 0xB, 0x0, 0xE, 0x0, 0x17, 0x0, 0x38, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x1, 0x21, 0x1, 0x22, 0x6, 0x7, 0x33, 0x32, 0x36, 0x35, 0x34, 0x1, 0x7, 0x27, 0x37, 0x21, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x21, 0x15, 0x1, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x2, 0x50, 0x2, 0x25, 0xFD, 0xDB, 0x3, 0x77, 0x32, 0x66, 0x4C, 0x69, 0x56, 0x72, 0xFE, 0x4C, 0x9A, 0x9C, 0x53, 0xFD, 0xF6, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x3, 0x58, 0xFD, 0xD6, 0x8A, 0x8E, 0xC5, 0x83, 0x80, 0x82, 0xF0, 0xAC, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0x13, 0x2, 0xD6, 0xFE, 0x28, 0x6C, 0x6F, 0x4E, 0x41, 0x4C, 0xFE, 0x62, 0xE5, 0x71, 0x74, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFE, 0x3A, 0x99, 0xFD, 0x22, 0xC8, 0xC7, 0x89, 0x72, 0x9A, 0xBD, 0x0, 0x2, 0x0, 0x8, 0x0, 0x0, 0x5, 0x86, 0x5, 0x41, 0x0, 0x11, 0x0, 0x32, 0x0, 0x0, 0x25, 0x32, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x37, 0x23, 0x11, 0x14, 0x16, 0x33, 0x33, 0x31, 0x7, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x3, 0xD3, 0xC4, 0x53, 0x90, 0xB7, 0xD2, 0x1F, 0x9D, 0x40, 0x31, 0x55, 0xA0, 0x79, 0x9F, 0xB3, 0xB3, 0xF2, 0x1, 0x87, 0x47, 0x52, 0xCB, 0xE6, 0xF3, 0x60, 0x5F, 0x5B, 0x59, 0x72, 0x6B, 0xCA, 0xC7, 0xEF, 0xC7, 0xC9, 0x66, 0x31, 0x48, 0x1D, 0x25, 0x99, 0x83, 0x44, 0x3D, 0xFD, 0xCB, 0x50, 0x38, 0xCA, 0x9D, 0xB5, 0x2, 0x35, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0x14, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x36, 0x40, 0x39, 0x17, 0x2B, 0x98, 0x89, 0x90, 0xA4, 0x0, 0x2, 0x0, 0x8, 0xFE, 0x4B, 0x4, 0x7A, 0x6, 0x15, 0x0, 0x7, 0x0, 0x2B, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x23, 0x11, 0x14, 0x16, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x11, 0x14, 0x6, 0x2, 0x1E, 0x25, 0x32, 0xC8, 0x33, 0xD, 0x43, 0x46, 0x7, 0x28, 0x35, 0xAB, 0x2, 0x52, 0x49, 0xA6, 0x79, 0xB3, 0xB3, 0xF2, 0xC8, 0xCD, 0xB0, 0x42, 0x46, 0x6, 0x2A, 0x34, 0xAD, 0xCC, 0xB6, 0x7, 0x2, 0xCA, 0xFD, 0xB7, 0x4E, 0x3A, 0xFD, 0x95, 0x12, 0xBE, 0x8, 0xA8, 0x40, 0xF, 0xB6, 0x9C, 0x2, 0x49, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAC, 0xFB, 0x1E, 0xB4, 0xC0, 0x0, 0x2, 0x0, 0x8, 0xFF, 0xEC, 0x6, 0x2, 0x5, 0x41, 0x0, 0x32, 0x0, 0x3D, 0x0, 0x0, 0x25, 0x32, 0x37, 0x26, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x5, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x16, 0x2, 0x13, 0x37, 0x50, 0x3E, 0xF4, 0xF8, 0xC5, 0xF1, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0xD, 0x5D, 0xCE, 0x6F, 0x87, 0x85, 0xF7, 0xC2, 0xC1, 0x7D, 0xA3, 0x95, 0x79, 0x9F, 0xB3, 0xB3, 0xF2, 0xB1, 0xB1, 0x3A, 0x2, 0x6C, 0x4F, 0x7B, 0x36, 0x21, 0x3C, 0x86, 0x4C, 0x3C, 0xB6, 0x33, 0x7E, 0xA4, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x50, 0x3D, 0x48, 0x78, 0x93, 0x67, 0x94, 0xC4, 0x6A, 0x6A, 0x9D, 0xB5, 0x2, 0x49, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFD, 0xB7, 0x50, 0x38, 0x7, 0x44, 0x3C, 0x2D, 0x22, 0x61, 0x40, 0x2E, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x7D, 0x6, 0x59, 0x6, 0x15, 0x0, 0x2E, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x21, 0x15, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x5, 0x5, 0x43, 0x39, 0x1D, 0x23, 0x41, 0x5C, 0x62, 0x5D, 0x93, 0x48, 0xF2, 0xFE, 0xEC, 0xF4, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0x2, 0x6, 0x76, 0xB7, 0xA0, 0xC0, 0xD6, 0xFE, 0x7D, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x2, 0xD9, 0x83, 0x6F, 0x83, 0xFC, 0xFB, 0x3, 0x87, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0x77, 0x8B, 0xD0, 0xEA, 0xFD, 0x29, 0xB3, 0x8D, 0x0, 0x1, 0x0, 0x8C, 0xFF, 0xEC, 0x5, 0x1E, 0x6, 0x0, 0x0, 0x27, 0x0, 0x0, 0x5, 0x20, 0x27, 0x15, 0x23, 0x11, 0x33, 0x11, 0x16, 0x4, 0x33, 0x32, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x3, 0x5D, 0xFE, 0xF7, 0xD5, 0xF3, 0xF3, 0x8A, 0x1, 0x4, 0x4F, 0xD3, 0x5D, 0x84, 0xB2, 0xD8, 0xE0, 0xC1, 0xCB, 0xE6, 0xF2, 0x60, 0x5F, 0x5C, 0x58, 0x6E, 0x76, 0xC1, 0xC8, 0xF1, 0x14, 0x6E, 0x5A, 0x6, 0x0, 0xFB, 0x3D, 0x5C, 0x3D, 0x82, 0x3B, 0x46, 0x1D, 0x27, 0x93, 0x88, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x36, 0x3C, 0x3F, 0x18, 0x27, 0x99, 0x89, 0x90, 0xB8, 0x0, 0x2, 0x0, 0x8C, 0x0, 0x0, 0x4, 0xEE, 0x6, 0x0, 0x0, 0x2, 0x0, 0xB, 0x0, 0x0, 0x25, 0x1, 0x21, 0x3, 0x11, 0x33, 0x11, 0x21, 0x15, 0x1, 0x21, 0x15, 0x1, 0x7F, 0x2, 0x22, 0xFD, 0xDE, 0xF3, 0xF3, 0x3, 0x5A, 0xFD, 0xAC, 0x2, 0x69, 0xD2, 0x2, 0xA4, 0xFC, 0x8A, 0x6, 0x0, 0xFE, 0x3A, 0x99, 0xFD, 0x22, 0xC3, 0x0, 0x2, 0x0, 0x36, 0x0, 0x0, 0x3, 0x90, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x19, 0x0, 0x0, 0x13, 0x3, 0x33, 0x13, 0x13, 0x33, 0x13, 0x13, 0x33, 0x3, 0x23, 0xB, 0x3, 0x33, 0x13, 0x13, 0x33, 0x13, 0x13, 0x33, 0x3, 0x23, 0x3, 0x3, 0xDB, 0xA5, 0xB0, 0x49, 0x6E, 0x8C, 0x70, 0x47, 0xB0, 0xA5, 0x90, 0x77, 0x78, 0x91, 0xA5, 0xB0, 0x49, 0x6E, 0x8C, 0x70, 0x47, 0xB0, 0xA5, 0x90, 0x77, 0x78, 0x3, 0x67, 0x2, 0x49, 0xFE, 0xA3, 0x1, 0x5D, 0xFE, 0xA3, 0x1, 0x5D, 0xFD, 0xB7, 0x1, 0x6D, 0xFE, 0x93, 0xFC, 0x99, 0x2, 0x49, 0xFE, 0xA3, 0x1, 0x5D, 0xFE, 0xA3, 0x1, 0x5D, 0xFD, 0xB7, 0x1, 0x6D, 0xFE, 0x93, 0x0, 0x2, 0x0, 0x57, 0x0, 0x0, 0x3, 0x86, 0x5, 0xAF, 0x0, 0x7, 0x0, 0xF, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x2, 0xD2, 0xFE, 0x39, 0xB4, 0x3, 0x2F, 0xB4, 0xFE, 0x39, 0xB4, 0x3, 0x2F, 0x3, 0x69, 0x1, 0xB6, 0xFE, 0x4A, 0x2, 0x46, 0xFD, 0xBA, 0xFC, 0x97, 0x1, 0xB6, 0xFE, 0x4A, 0x2, 0x46, 0xFD, 0xBA, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x60, 0x4, 0x8E, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x16, 0x16, 0x33, 0x32, 0x37, 0x11, 0x4, 0x8E, 0xF3, 0x6B, 0xBD, 0xA0, 0xC5, 0x65, 0x48, 0x26, 0x20, 0x3F, 0x48, 0x8B, 0xD4, 0x1, 0x6B, 0x46, 0xAF, 0x39, 0x4, 0x3A, 0xFA, 0x26, 0x2, 0x10, 0x84, 0xDB, 0xFA, 0x1, 0x2D, 0x5F, 0x46, 0x7, 0xB1, 0x11, 0x9E, 0xC2, 0xFE, 0xCA, 0x9D, 0x68, 0x98, 0x2, 0xEF, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x5, 0x56, 0x4, 0x4E, 0x0, 0x27, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x16, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x5, 0x56, 0x37, 0x45, 0x7E, 0xD6, 0x6B, 0xBD, 0xA0, 0xC5, 0x1, 0x5C, 0x41, 0x1D, 0x23, 0x37, 0x45, 0x7E, 0xD7, 0x1, 0x6A, 0x47, 0xB1, 0x37, 0xF3, 0x5D, 0x40, 0x22, 0x1E, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0xE6, 0x85, 0xDB, 0xFA, 0x7A, 0xD4, 0x56, 0x40, 0x7, 0xA3, 0xD, 0x8D, 0xB2, 0xFE, 0xA9, 0x9D, 0x68, 0x9A, 0x2, 0xED, 0xFB, 0x51, 0x56, 0x40, 0x6, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x2, 0xFA, 0x7, 0x2E, 0x0, 0x10, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x1, 0xB3, 0x62, 0x28, 0xC5, 0xC5, 0x4C, 0x82, 0x78, 0x8B, 0xC5, 0x4, 0x5, 0x13, 0x59, 0xFD, 0xD2, 0x4, 0xA2, 0xFE, 0x1B, 0x71, 0x91, 0xA2, 0xFE, 0x5, 0x1, 0xD9, 0xAE, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x2, 0xFA, 0x7, 0xE, 0x0, 0x17, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x36, 0x33, 0x32, 0x17, 0x15, 0x27, 0x22, 0x15, 0x15, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x1, 0xB3, 0x62, 0x28, 0xC5, 0x2, 0xBA, 0x40, 0x55, 0x44, 0x48, 0x4C, 0x82, 0x78, 0x8B, 0xC5, 0x4, 0x5, 0x13, 0x59, 0xFD, 0xD2, 0x3, 0x8D, 0xF5, 0x10, 0xB4, 0x8, 0x4F, 0xBA, 0x71, 0x91, 0xA2, 0xFE, 0x5, 0x1, 0xD9, 0xAE, 0x0, 0x2, 0x0, 0x22, 0x1, 0x4C, 0x1, 0x8B, 0x6, 0xED, 0x0, 0x9, 0x0, 0x16, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0xA5, 0x3C, 0x36, 0x38, 0x3C, 0x3C, 0x38, 0x36, 0x3C, 0x14, 0xC5, 0x79, 0x83, 0x31, 0x2F, 0x16, 0x21, 0x60, 0x6, 0xAF, 0x3E, 0x3E, 0x5C, 0x3D, 0x3D, 0xA3, 0xFC, 0xC9, 0x86, 0xA7, 0xD, 0xA6, 0x6, 0x80, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x2, 0x12, 0x5, 0xBA, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x1, 0xAE, 0x5E, 0x27, 0xC5, 0x98, 0x1E, 0x44, 0x74, 0x2F, 0x11, 0x2E, 0x4, 0xFB, 0x4F, 0xFD, 0xE0, 0x3, 0x21, 0x73, 0x80, 0x7, 0xCE, 0x16, 0x0, 0x1, 0x0, 0x28, 0x2, 0x7F, 0x1, 0xD6, 0x5, 0xAD, 0x0, 0xD, 0x0, 0x0, 0x1, 0x27, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x1, 0x3E, 0x1E, 0x44, 0x73, 0x2F, 0x12, 0x33, 0x31, 0x5E, 0x27, 0xC5, 0x2, 0x8C, 0x73, 0x80, 0x7, 0xCE, 0x16, 0x4F, 0x2, 0x20, 0xFC, 0xDF, 0x0, 0x1, 0x0, 0x28, 0x1, 0x4C, 0x2, 0x62, 0x5, 0xAD, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0xCD, 0xB7, 0x5, 0x42, 0x66, 0x2F, 0x12, 0x33, 0x31, 0x5E, 0x27, 0xC5, 0x48, 0x1D, 0x27, 0x52, 0x1, 0x4C, 0xED, 0xAD, 0x67, 0x7, 0xCE, 0x16, 0x4F, 0x2, 0x20, 0xFC, 0xAB, 0x50, 0x9, 0xB4, 0x11, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x3E, 0x5, 0xAD, 0x0, 0xC, 0x0, 0x15, 0x0, 0x0, 0x13, 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x3, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x64, 0xC5, 0x99, 0x9C, 0xE0, 0xB7, 0x88, 0xAC, 0x98, 0xA2, 0x91, 0x4C, 0x44, 0x40, 0x46, 0x9B, 0x2, 0x8C, 0x3, 0x21, 0xFE, 0xFF, 0x1, 0x1, 0xFE, 0xD3, 0x4E, 0x99, 0x6D, 0xA0, 0xA7, 0x3D, 0x2E, 0x2C, 0x3B, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x4, 0x52, 0x5, 0xAD, 0x0, 0xF, 0x0, 0x0, 0x13, 0x3, 0x33, 0x13, 0x35, 0x13, 0x33, 0x13, 0x15, 0x37, 0x13, 0x33, 0x3, 0x23, 0x3, 0x3, 0xF6, 0xCE, 0xD0, 0x67, 0x91, 0x9A, 0x91, 0x1, 0x66, 0xD0, 0xCD, 0xB5, 0x93, 0x93, 0x2, 0x8C, 0x3, 0x21, 0xFE, 0x2, 0x3, 0x1, 0xFB, 0xFE, 0x6, 0x2, 0x7, 0x1, 0xF5, 0xFC, 0xDF, 0x1, 0xDE, 0xFE, 0x22, 0x0, 0x1, 0x0, 0x2F, 0x1, 0x4C, 0x3, 0x1D, 0x5, 0xAD, 0x0, 0x10, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x1, 0x33, 0x13, 0x13, 0x33, 0x1, 0x6, 0x6, 0xE6, 0x2F, 0x2C, 0x30, 0x38, 0x34, 0x10, 0x12, 0xFE, 0xE6, 0xDE, 0x9A, 0x9E, 0xD8, 0xFE, 0xC3, 0x17, 0x71, 0x1, 0x4C, 0xD, 0x9D, 0x2, 0x30, 0x31, 0x37, 0x3, 0x21, 0xFE, 0x6, 0x1, 0xFA, 0xFC, 0x69, 0x43, 0x87, 0x0, 0x1, 0x0, 0x23, 0x4, 0xBC, 0x1, 0x72, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x0, 0x13, 0x13, 0x33, 0x3, 0x23, 0x6E, 0xE1, 0xC8, 0x4, 0xBC, 0x1, 0x5E, 0xFE, 0xA2, 0xFF, 0xFF, 0x0, 0x23, 0x4, 0xBC, 0x2, 0xC1, 0x6, 0x1A, 0x0, 0x26, 0x1, 0x6B, 0x0, 0x0, 0x0, 0x7, 0x1, 0x6B, 0x1, 0x4F, 0x0, 0x0, 0x0, 0x1, 0x0, 0x50, 0x3, 0xE1, 0x1, 0x86, 0x6, 0x25, 0x0, 0x8, 0x0, 0x0, 0x13, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x7, 0x15, 0x50, 0x65, 0x51, 0x80, 0x58, 0x2, 0x3, 0xE1, 0xBE, 0x64, 0xDC, 0x46, 0x4D, 0x88, 0xA4, 0xCB, 0x0, 0x1, 0x0, 0x50, 0x3, 0xE1, 0x1, 0x86, 0x6, 0x25, 0x0, 0x8, 0x0, 0x0, 0x13, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x50, 0xDC, 0x2, 0x58, 0x80, 0x51, 0x65, 0x6, 0x25, 0xCB, 0xA2, 0x8A, 0x4D, 0x47, 0xDC, 0x63, 0x0, 0x1, 0x0, 0x36, 0x4, 0x62, 0x1, 0x6, 0x5, 0xEB, 0x0, 0xC, 0x0, 0x0, 0x13, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x14, 0x6, 0x36, 0x2A, 0x38, 0x38, 0x2A, 0x56, 0x7A, 0x7A, 0x4, 0x62, 0x5D, 0x3A, 0x2B, 0x2E, 0x3A, 0x5F, 0x71, 0xAC, 0x6C, 0x0, 0x1, 0x0, 0x36, 0x4, 0x62, 0x1, 0x6, 0x5, 0xEB, 0x0, 0xC, 0x0, 0x0, 0x1, 0x15, 0x22, 0x26, 0x34, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x6, 0x56, 0x7A, 0x7A, 0x56, 0x2B, 0x37, 0x37, 0x4, 0xBF, 0x5D, 0x6C, 0xAC, 0x71, 0x5F, 0x3A, 0x2E, 0x2B, 0x3A, 0x0, 0x1, 0x0, 0x1B, 0x2, 0x8C, 0x2, 0xC1, 0x7, 0xE, 0x0, 0x18, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x7, 0x1, 0xD1, 0xC9, 0x46, 0x6B, 0x40, 0x3F, 0x5E, 0x46, 0x3D, 0x8, 0xB6, 0x4, 0xAD, 0x8F, 0xB3, 0xB3, 0x78, 0x78, 0x2, 0x8C, 0x1, 0x7D, 0x93, 0x5E, 0x87, 0x67, 0x80, 0x45, 0x35, 0x7E, 0xA2, 0xE1, 0xAA, 0x85, 0x9A, 0xCE, 0x22, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x8C, 0x2, 0xE2, 0x7, 0xE, 0x0, 0x16, 0x0, 0x0, 0x1, 0x11, 0x23, 0x35, 0x26, 0x11, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x1, 0xF5, 0xC9, 0xF0, 0xB4, 0xB3, 0x8F, 0xAD, 0x3, 0xB6, 0x10, 0x7B, 0x5E, 0x3E, 0x40, 0x6A, 0x4, 0x9, 0xFE, 0x83, 0xE8, 0x44, 0x1, 0x54, 0x77, 0xAA, 0xE1, 0xA2, 0x7E, 0x7A, 0x80, 0x67, 0x87, 0x5E, 0x93, 0x0, 0x1, 0x0, 0x3D, 0x2, 0x4F, 0x3, 0x23, 0x5, 0x35, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x35, 0x1, 0x15, 0x5, 0x7, 0x17, 0x5, 0x3, 0x23, 0xFD, 0x1A, 0x2, 0xE6, 0xFE, 0x40, 0x3F, 0x3F, 0x1, 0xC0, 0x2, 0x4F, 0x1, 0x21, 0xA4, 0x1, 0x21, 0xC0, 0xA6, 0xE, 0xF, 0xA3, 0x0, 0x1, 0x0, 0x3D, 0x2, 0x4F, 0x3, 0x23, 0x5, 0x35, 0x0, 0x8, 0x0, 0x0, 0x13, 0x35, 0x25, 0x37, 0x27, 0x25, 0x35, 0x1, 0x15, 0x3D, 0x1, 0xC0, 0x3F, 0x3F, 0xFE, 0x40, 0x2, 0xE6, 0x2, 0x4F, 0xC0, 0xA3, 0xF, 0xE, 0xA6, 0xC0, 0xFE, 0xDF, 0xA4, 0x0, 0x1, 0x0, 0x30, 0x2, 0x44, 0x3, 0x15, 0x5, 0x2B, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x23, 0x1, 0x33, 0x1, 0x23, 0x3, 0x27, 0x1, 0x93, 0xA4, 0xBF, 0x1, 0x21, 0xA3, 0x1, 0x21, 0xBF, 0xA6, 0xE, 0x4, 0x4, 0xFE, 0x40, 0x2, 0xE7, 0xFD, 0x19, 0x1, 0xC0, 0x3F, 0x0, 0x1, 0x0, 0x30, 0x2, 0x44, 0x3, 0x15, 0x5, 0x2B, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x1, 0x51, 0xFE, 0xDF, 0xBF, 0xA4, 0xF, 0xE, 0xA6, 0xBF, 0xFE, 0xDF, 0x2, 0x44, 0x2, 0xE7, 0xFE, 0x40, 0x3F, 0x3F, 0x1, 0xC0, 0xFD, 0x19, 0x0, 0x1, 0x0, 0x95, 0x4, 0xE1, 0x3, 0x44, 0x6, 0x1, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x15, 0x23, 0x27, 0x7, 0x23, 0x35, 0x1, 0x2, 0x32, 0x1, 0x12, 0xC3, 0x96, 0x96, 0xC0, 0x1, 0xE, 0x6, 0x1, 0xFE, 0xEB, 0xB, 0x9C, 0x9C, 0xD, 0x1, 0x13, 0x0, 0x1, 0x0, 0x72, 0x4, 0xE1, 0x3, 0x35, 0x6, 0x2, 0x0, 0x8, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0x1, 0x40, 0x93, 0x92, 0xD0, 0xFE, 0xE9, 0x96, 0xFE, 0xEA, 0x6, 0x2, 0x9B, 0x9B, 0xB, 0xFE, 0xEA, 0x1, 0x17, 0xA, 0x0, 0x1, 0x0, 0x3D, 0x4, 0x7A, 0x0, 0xE4, 0x6, 0x1F, 0x0, 0x3, 0x0, 0x0, 0x13, 0x11, 0x23, 0x11, 0xE4, 0xA7, 0x6, 0x1F, 0xFE, 0x5B, 0x1, 0xA5, 0xFF, 0xFF, 0x0, 0x9C, 0x5, 0xC, 0x3, 0x4A, 0x5, 0xAA, 0x0, 0x6, 0x0, 0x71, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x48, 0x4, 0xD2, 0x2, 0x20, 0x6, 0x0, 0x0, 0x6, 0x0, 0x76, 0xD7, 0x0, 0xFF, 0xFF, 0x0, 0x37, 0x4, 0xD2, 0x2, 0x10, 0x6, 0x0, 0x0, 0x6, 0x0, 0x45, 0x6, 0x0, 0x0, 0x1, 0x0, 0x3D, 0xFE, 0x2, 0x0, 0xE4, 0xFF, 0xA2, 0x0, 0x3, 0x0, 0x0, 0x17, 0x11, 0x23, 0x11, 0xE4, 0xA7, 0x5E, 0xFE, 0x60, 0x1, 0xA0, 0xFF, 0xFF, 0x0, 0x51, 0xFE, 0xC1, 0x2, 0xFF, 0xFF, 0x5F, 0x0, 0x7, 0x0, 0x71, 0xFF, 0xB5, 0xF9, 0xB5, 0xFF, 0xFF, 0x0, 0x37, 0xFE, 0x92, 0x2, 0x10, 0xFF, 0xC0, 0x0, 0x7, 0x0, 0x45, 0x0, 0x6, 0xF9, 0xC0, 0xFF, 0xFF, 0x0, 0x48, 0xFE, 0x92, 0x2, 0x20, 0xFF, 0xC0, 0x0, 0x7, 0x0, 0x76, 0xFF, 0xD7, 0xF9, 0xC0, 0x0, 0x2, 0x0, 0x5F, 0x0, 0x0, 0x1, 0x95, 0x4, 0x3A, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x13, 0x21, 0x7, 0x23, 0x3, 0x37, 0x33, 0x17, 0x5F, 0x1, 0x36, 0x91, 0x15, 0x90, 0x90, 0x15, 0x91, 0x4, 0x3A, 0xF2, 0xFC, 0xB8, 0xF2, 0xF2, 0x0, 0x1, 0x0, 0x5F, 0x3, 0x48, 0x1, 0x95, 0x4, 0x3A, 0x0, 0x3, 0x0, 0x0, 0x13, 0x21, 0x7, 0x23, 0x5F, 0x1, 0x36, 0x91, 0x15, 0x4, 0x3A, 0xF2, 0xFF, 0xFF, 0x0, 0x36, 0x0, 0x90, 0x1, 0x6, 0x2, 0x19, 0x0, 0x7, 0x1, 0x6F, 0x0, 0x0, 0xFC, 0x2E, 0x0, 0x1, 0x0, 0x36, 0x0, 0x90, 0x1, 0x6, 0x2, 0x19, 0x0, 0xD, 0x0, 0x0, 0x25, 0x15, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x6, 0x56, 0x7A, 0x7A, 0x56, 0x2B, 0x37, 0x37, 0xEE, 0x5E, 0x6C, 0x57, 0x56, 0x70, 0x5F, 0x3A, 0x2D, 0x2C, 0x39, 0x0, 0x1, 0x0, 0x50, 0x0, 0xA3, 0x2, 0x8, 0x2, 0x18, 0x0, 0x7, 0x0, 0x0, 0x25, 0x21, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x2, 0x8, 0xFE, 0x48, 0x88, 0xA8, 0x88, 0xA3, 0x9F, 0xD6, 0xD6, 0x0, 0x1, 0x0, 0x50, 0x0, 0xA3, 0x2, 0x8, 0x2, 0x2C, 0x0, 0x7, 0x0, 0x0, 0x37, 0x35, 0x23, 0x35, 0x21, 0x15, 0x23, 0x15, 0xD8, 0x88, 0x1, 0xB8, 0x88, 0xA3, 0xEA, 0x9F, 0x9F, 0xEA, 0x0, 0x1, 0x0, 0x50, 0x0, 0x81, 0x2, 0x8, 0x2, 0x47, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x2, 0x8, 0x88, 0xA8, 0x88, 0x88, 0xA8, 0x88, 0x1, 0x14, 0x93, 0x93, 0x9F, 0x94, 0x94, 0x0, 0x1, 0x0, 0x3D, 0x1, 0x14, 0x2, 0x1C, 0x1, 0xB3, 0x0, 0x3, 0x0, 0x0, 0x13, 0x21, 0x15, 0x21, 0x3D, 0x1, 0xDF, 0xFE, 0x21, 0x1, 0xB3, 0x9F, 0x0, 0x1, 0x0, 0x76, 0x4, 0xCC, 0x2, 0xFB, 0x5, 0xE7, 0x0, 0xC, 0x0, 0x0, 0x1, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x2, 0x45, 0xB6, 0xAD, 0xFE, 0xD6, 0xAE, 0xB6, 0x40, 0x4D, 0x4C, 0x40, 0x5, 0xE7, 0x7C, 0x9F, 0x9F, 0x7C, 0x37, 0x54, 0x54, 0x0, 0x1, 0x0, 0x82, 0x4, 0xE0, 0x1, 0x88, 0x5, 0xD5, 0x0, 0x9, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x82, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x5, 0x5A, 0x35, 0x46, 0x46, 0x35, 0x34, 0x46, 0x46, 0x0, 0x2, 0x0, 0x79, 0x4, 0x8E, 0x2, 0x34, 0x6, 0x2A, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x79, 0x7F, 0x5E, 0x5F, 0x7F, 0x7F, 0x5F, 0x5E, 0x7F, 0x6D, 0x3E, 0x64, 0x3F, 0x3F, 0x64, 0x3E, 0x5, 0xB0, 0x7A, 0x7A, 0xAC, 0x76, 0x76, 0x56, 0x2B, 0x44, 0x43, 0x2C, 0x2E, 0x44, 0x44, 0x0, 0x1, 0x0, 0x29, 0xFE, 0x52, 0x1, 0xA1, 0x0, 0x3C, 0x0, 0x10, 0x0, 0x0, 0x25, 0x17, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x1, 0x1D, 0x70, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0x15, 0x49, 0x5C, 0x58, 0x7B, 0x6C, 0x3C, 0x3C, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0x8E, 0x2C, 0x66, 0x63, 0x4E, 0x96, 0x0, 0x1, 0x0, 0x7A, 0x4, 0xDB, 0x3, 0x58, 0x5, 0xF5, 0x0, 0x14, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x2, 0xC3, 0x95, 0x81, 0x5F, 0x40, 0x51, 0x47, 0x36, 0x26, 0x34, 0x96, 0x7F, 0x60, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x5, 0xF5, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x2, 0x0, 0x4A, 0x4, 0xD1, 0x3, 0x57, 0x5, 0xFF, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x13, 0x13, 0x33, 0x3, 0x33, 0x13, 0x33, 0x1, 0x4A, 0xAE, 0xE8, 0xDE, 0x85, 0xE1, 0xEF, 0xFE, 0xF6, 0x4, 0xD1, 0x1, 0x2E, 0xFE, 0xD2, 0x1, 0x2E, 0xFE, 0xD2, 0x0, 0x1, 0xFF, 0x3A, 0x1, 0x48, 0x1, 0x9C, 0x3, 0x32, 0x0, 0xC, 0x0, 0x0, 0x3, 0x35, 0x25, 0x16, 0x16, 0x33, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x27, 0xC6, 0x1, 0x85, 0x13, 0x22, 0x52, 0x31, 0x25, 0x43, 0x4B, 0x82, 0x5C, 0x20, 0x2, 0x1D, 0xC6, 0x4F, 0x7E, 0x97, 0x3, 0xB4, 0x24, 0x92, 0x71, 0x0, 0x1, 0x0, 0x50, 0x4, 0x82, 0x2, 0x55, 0x6, 0x8F, 0x0, 0xB, 0x0, 0x0, 0x1, 0x27, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x37, 0x17, 0x7, 0x17, 0x1, 0xE5, 0x93, 0x94, 0x6E, 0x94, 0x92, 0x6E, 0x93, 0x94, 0x6E, 0x94, 0x92, 0x4, 0x82, 0x97, 0x95, 0x70, 0x95, 0x95, 0x71, 0x96, 0x95, 0x71, 0x95, 0x96, 0x0, 0x2, 0x0, 0x35, 0x0, 0xD7, 0x3, 0x36, 0x5, 0xAD, 0x0, 0x12, 0x0, 0x1A, 0x0, 0x0, 0x24, 0x26, 0x35, 0x34, 0x37, 0x37, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x17, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x34, 0x27, 0x6, 0x15, 0x14, 0x1, 0x52, 0x79, 0x1F, 0x50, 0xFE, 0xED, 0xE2, 0x96, 0x9, 0x9, 0x96, 0xE1, 0xFE, 0xE9, 0x42, 0x25, 0x76, 0x5F, 0x26, 0x24, 0x29, 0xD7, 0x5F, 0x5B, 0x27, 0x48, 0xB8, 0x2, 0xF5, 0xFE, 0xC, 0x30, 0x30, 0x1, 0xF4, 0xFD, 0x0, 0x97, 0x51, 0x34, 0x5B, 0x5F, 0x98, 0x30, 0x1F, 0x57, 0x5B, 0x1B, 0x30, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x1, 0x29, 0x7, 0x2E, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x29, 0xC5, 0x7, 0x2E, 0xFB, 0x5E, 0x4, 0xA2, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x7C, 0x2, 0xDF, 0x5, 0xBA, 0x0, 0x21, 0x0, 0x0, 0x1, 0x34, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x2, 0x1B, 0xAD, 0x86, 0x92, 0xAC, 0x87, 0x9D, 0xB3, 0xC3, 0x1, 0x40, 0x46, 0x76, 0x4E, 0x56, 0x8E, 0x94, 0xA7, 0x9C, 0xB0, 0xB0, 0xBE, 0x10, 0x98, 0x79, 0x3, 0x62, 0x47, 0x27, 0x1E, 0x73, 0x6A, 0x6E, 0x81, 0x93, 0x6B, 0x28, 0x3D, 0x4E, 0x28, 0x2A, 0x13, 0x1F, 0x74, 0x6D, 0x72, 0x80, 0xA9, 0x63, 0x72, 0x0, 0x1, 0x0, 0x2F, 0x2, 0x8C, 0x3, 0x19, 0x5, 0xAD, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x13, 0x33, 0x3, 0x13, 0x23, 0x3, 0x3, 0x23, 0x13, 0x3, 0x1, 0x19, 0x89, 0x8D, 0xE1, 0xE8, 0xF1, 0xE1, 0x94, 0x92, 0xE3, 0xF0, 0xE8, 0x5, 0xAD, 0xFE, 0xFB, 0x1, 0x5, 0xFE, 0x77, 0xFE, 0x68, 0x1, 0x10, 0xFE, 0xF0, 0x1, 0x98, 0x1, 0x89, 0x0, 0x1, 0x0, 0x51, 0x2, 0x8C, 0x3, 0xE, 0x5, 0xBA, 0x0, 0x15, 0x0, 0x0, 0x1, 0x15, 0x23, 0x35, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x2, 0xF, 0xC5, 0x70, 0x89, 0xC8, 0x98, 0x94, 0xC9, 0xC3, 0x3, 0x50, 0x43, 0x54, 0x4C, 0x93, 0x3, 0x8A, 0xFE, 0x6B, 0x19, 0xB2, 0x8B, 0xB0, 0xBD, 0xA4, 0x89, 0x3B, 0x4B, 0x6D, 0x5B, 0xBC, 0x5, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x2, 0x19, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x2, 0x19, 0xF4, 0xFE, 0xF5, 0x1, 0xFF, 0x4, 0xED, 0xC3, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x2, 0x19, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x2, 0x19, 0xF4, 0xFE, 0xF5, 0x1, 0xB, 0xF4, 0x3, 0xE2, 0xC3, 0x1, 0xB, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x2, 0x19, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x2, 0x19, 0xF4, 0xFE, 0xF5, 0x1, 0xB, 0xF4, 0x2, 0x77, 0xC3, 0x2, 0x76, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x2, 0x19, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x2, 0x19, 0xF4, 0xFE, 0xF5, 0x1, 0xB, 0xF4, 0x1, 0xB, 0xC3, 0x3, 0xE2, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x2, 0x19, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x33, 0x35, 0x21, 0x11, 0x33, 0x11, 0x1A, 0x1, 0xB, 0xF4, 0xC3, 0x4, 0xED, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x2, 0xEE, 0x3, 0x8C, 0x0, 0x5, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x84, 0xF2, 0x1, 0x78, 0x3, 0x8C, 0xFD, 0x37, 0xC3, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x2, 0xC7, 0x3, 0x8C, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x2, 0xC7, 0xFE, 0xAF, 0xF2, 0xF2, 0x1, 0x51, 0x1, 0x67, 0xFE, 0x99, 0x3, 0x8C, 0xFE, 0x9E, 0x0, 0x1, 0x0, 0x49, 0xFE, 0x5C, 0x3, 0xB, 0xFF, 0x7D, 0x0, 0x8, 0x0, 0x0, 0x5, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0x1, 0x17, 0x92, 0x93, 0xCF, 0xFE, 0xE9, 0x96, 0xFE, 0xEB, 0x83, 0x9B, 0x9B, 0xA, 0xFE, 0xE9, 0x1, 0x18, 0x9, 0x0, 0x2, 0x0, 0x43, 0x4, 0x8A, 0x2, 0xD9, 0x6, 0x10, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x5, 0x15, 0x21, 0x35, 0x2, 0xD9, 0xFD, 0x6A, 0x2, 0x96, 0xFD, 0x6A, 0x6, 0x10, 0x99, 0x99, 0xEE, 0x98, 0x98, 0x0, 0x2, 0x0, 0x50, 0x3, 0xD6, 0x2, 0xD9, 0x6, 0x18, 0x0, 0x8, 0x0, 0x11, 0x0, 0x0, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x23, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x2, 0xD9, 0x65, 0x51, 0x80, 0x58, 0x2, 0x77, 0x65, 0x52, 0x7F, 0x57, 0x3, 0x6, 0x18, 0xBB, 0x64, 0xDC, 0x47, 0x4E, 0x8A, 0xA2, 0xC8, 0xBB, 0x64, 0xDC, 0x47, 0x4E, 0x8C, 0x9C, 0xCC, 0x0, 0x1, 0x0, 0x3D, 0xFD, 0xDD, 0x2, 0x43, 0xFF, 0xB8, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x3, 0x1, 0x7, 0xCA, 0x85, 0x73, 0xB, 0xA, 0x74, 0x85, 0xCA, 0xFD, 0xDD, 0x1, 0xDB, 0xFE, 0xE2, 0x2A, 0x2A, 0x1, 0x1E, 0xFE, 0x25, 0x0, 0x1, 0x0, 0x3D, 0xFD, 0xDD, 0x2, 0x43, 0xFF, 0xB8, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x23, 0x13, 0x33, 0x13, 0x23, 0x3, 0x27, 0x1, 0x35, 0x73, 0x85, 0xCA, 0x72, 0xCA, 0x86, 0x74, 0xA, 0xFE, 0xFC, 0xFE, 0xE1, 0x1, 0xDB, 0xFE, 0x25, 0x1, 0x1F, 0x28, 0x0, 0x1, 0x0, 0x3D, 0xFD, 0xDB, 0x2, 0x44, 0xFF, 0xBC, 0x0, 0x8, 0x0, 0x0, 0x1, 0x25, 0x35, 0x25, 0x15, 0x5, 0x7, 0x17, 0x5, 0x2, 0x44, 0xFD, 0xF9, 0x2, 0x7, 0xFE, 0xC7, 0x2C, 0x2C, 0x1, 0x39, 0xFD, 0xDB, 0xBC, 0x6A, 0xBB, 0x7C, 0x6C, 0x9, 0xA, 0x6A, 0x0, 0x1, 0x0, 0x3D, 0xFD, 0xDB, 0x2, 0x44, 0xFF, 0xBC, 0x0, 0x8, 0x0, 0x0, 0x13, 0x35, 0x25, 0x37, 0x27, 0x25, 0x35, 0x5, 0x15, 0x3D, 0x1, 0x39, 0x2C, 0x2C, 0xFE, 0xC7, 0x2, 0x7, 0xFD, 0xDB, 0x7C, 0x6A, 0xA, 0x9, 0x6C, 0x7C, 0xBB, 0x6A, 0x0, 0x2, 0x0, 0x83, 0xFE, 0x6A, 0x1, 0xEC, 0xFF, 0xBE, 0x0, 0xA, 0x0, 0x14, 0x0, 0x0, 0x16, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x35, 0x34, 0x23, 0x22, 0x6, 0x83, 0x6B, 0x4C, 0x4A, 0x68, 0x68, 0x4A, 0x4C, 0x6B, 0x65, 0x30, 0x22, 0x4E, 0x4E, 0x22, 0x30, 0xA4, 0x62, 0x62, 0x4A, 0x4B, 0x5D, 0x5E, 0x4A, 0x22, 0x2E, 0x50, 0x53, 0x2F, 0xFF, 0xFF, 0x0, 0x37, 0x0, 0xD8, 0x2, 0x10, 0x2, 0x6, 0x0, 0x7, 0x0, 0x45, 0x0, 0x6, 0xFC, 0x6, 0xFF, 0xFF, 0x0, 0x37, 0x0, 0xD8, 0x3, 0xB6, 0x2, 0x6, 0x0, 0x27, 0x0, 0x45, 0x0, 0x6, 0xFC, 0x6, 0x0, 0x7, 0x0, 0x45, 0x1, 0xAC, 0xFC, 0x6, 0xFF, 0xFF, 0x0, 0x48, 0x0, 0xD8, 0x3, 0xC6, 0x2, 0x6, 0x0, 0x27, 0x0, 0x76, 0xFF, 0xD7, 0xFC, 0x6, 0x0, 0x7, 0x0, 0x76, 0x1, 0x7D, 0xFC, 0x6, 0x0, 0x1, 0x0, 0x4A, 0xFE, 0x4F, 0x3, 0x27, 0xFF, 0x69, 0x0, 0x14, 0x0, 0x0, 0x5, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x2, 0x92, 0x95, 0x81, 0x5F, 0x41, 0x50, 0x48, 0x35, 0x26, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x97, 0xC, 0x70, 0x90, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6D, 0x97, 0x5A, 0x39, 0xFF, 0xFF, 0x0, 0x51, 0x1, 0x7D, 0x1, 0x6C, 0x5, 0xDB, 0x0, 0x27, 0x0, 0x13, 0xFF, 0xC9, 0x1, 0x89, 0x0, 0x7, 0x0, 0x13, 0xFF, 0xC9, 0x4, 0xDA, 0x0, 0x1, 0x0, 0x50, 0x4, 0x77, 0x1, 0xE5, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x23, 0x15, 0x23, 0x11, 0x21, 0x1, 0xE5, 0xED, 0xA8, 0x1, 0x95, 0x5, 0x63, 0xEC, 0x1, 0x89, 0x0, 0x1, 0x0, 0x50, 0x4, 0x77, 0x1, 0xE5, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x35, 0x23, 0x35, 0x21, 0x11, 0x1, 0x3E, 0xEE, 0x1, 0x95, 0x4, 0x77, 0xEC, 0x9D, 0xFE, 0x77, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x2A, 0x1, 0xE5, 0xFF, 0xB3, 0x0, 0x5, 0x0, 0x0, 0x13, 0x11, 0x33, 0x15, 0x33, 0x15, 0x50, 0xA8, 0xED, 0xFE, 0x2A, 0x1, 0x89, 0xEB, 0x9E, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x2A, 0x1, 0xE5, 0xFF, 0xB3, 0x0, 0x5, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x35, 0x33, 0x1, 0xE5, 0xFE, 0x6B, 0xEE, 0xA7, 0xFE, 0x2A, 0x9E, 0xEB, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x3B, 0x3, 0x7, 0xFF, 0xA9, 0x0, 0x7, 0x0, 0x0, 0x13, 0x11, 0x33, 0x15, 0x21, 0x35, 0x33, 0x11, 0x50, 0xA9, 0x1, 0x66, 0xA8, 0xFE, 0x3B, 0x1, 0x6E, 0xDC, 0xDC, 0xFE, 0x92, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x2A, 0x2, 0xE9, 0xFF, 0xB3, 0x0, 0x5, 0x0, 0x0, 0x13, 0x11, 0x33, 0x15, 0x21, 0x15, 0x50, 0xA9, 0x1, 0xF0, 0xFE, 0x2A, 0x1, 0x89, 0xF6, 0x93, 0x0, 0x1, 0x0, 0x43, 0xFE, 0x4D, 0x3, 0x48, 0x0, 0xA9, 0x0, 0x8, 0x0, 0x0, 0x5, 0x21, 0x17, 0x23, 0x1, 0x1, 0x33, 0x7, 0x21, 0x3, 0x48, 0xFE, 0xA, 0xE1, 0xC3, 0xFE, 0xD3, 0x1, 0x2D, 0xC3, 0xE2, 0x1, 0xF7, 0xD1, 0xE2, 0x1, 0x2E, 0x1, 0x2E, 0xE3, 0x0, 0x1, 0xFC, 0x8D, 0x4, 0xD2, 0xFE, 0x66, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x13, 0x23, 0x1, 0xFD, 0xA2, 0xC4, 0xCA, 0xFE, 0xF1, 0x6, 0x0, 0xFE, 0xD2, 0x1, 0x2E, 0x0, 0x1, 0xFD, 0x5E, 0x4, 0xD2, 0xFF, 0x35, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0xFD, 0x5E, 0xC3, 0x1, 0x14, 0xFE, 0xEC, 0x4, 0xD2, 0x1, 0x2E, 0xFE, 0xD2, 0xFF, 0xFF, 0xFC, 0x60, 0x4, 0xE1, 0xFF, 0xF, 0x6, 0x1, 0x0, 0x7, 0x1, 0x77, 0xFB, 0xCB, 0x0, 0x0, 0xFF, 0xFF, 0xFC, 0x72, 0x4, 0xDB, 0xFF, 0x50, 0x5, 0xF5, 0x0, 0x7, 0x1, 0x8D, 0xFB, 0xF8, 0x0, 0x0, 0x0, 0x1, 0xFC, 0x60, 0x5, 0xC, 0xFF, 0xF, 0x5, 0xAA, 0x0, 0x3, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0xF1, 0xFD, 0x51, 0x5, 0xAA, 0x9E, 0x9E, 0xFF, 0xFF, 0xFB, 0xEE, 0x6, 0x2F, 0xFF, 0x84, 0x6, 0xEF, 0x0, 0x7, 0x0, 0x44, 0xFB, 0xEB, 0x6, 0xEF, 0x0, 0x1, 0xFC, 0x75, 0x4, 0xCC, 0xFE, 0xFB, 0x5, 0xE7, 0x0, 0xC, 0x0, 0x0, 0x1, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0xFE, 0x44, 0xB7, 0xAE, 0xFE, 0xD6, 0xAE, 0xB6, 0x40, 0x4D, 0x4C, 0x40, 0x5, 0xE7, 0x7C, 0x9F, 0x9F, 0x7C, 0x37, 0x54, 0x54, 0x0, 0x1, 0xFD, 0x2F, 0x4, 0xD3, 0xFE, 0x42, 0x5, 0xD5, 0x0, 0x9, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x2F, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0x54, 0x38, 0x49, 0x49, 0x38, 0x37, 0x4A, 0x4A, 0x0, 0x2, 0xFC, 0x4, 0x4, 0xE0, 0xFE, 0xCA, 0x5, 0xCD, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFC, 0x4, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x5, 0x56, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x1, 0xFD, 0x3D, 0x4, 0xE7, 0xFE, 0x99, 0x6, 0x80, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x27, 0x36, 0x35, 0x34, 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0xFE, 0x2, 0xB1, 0x8, 0x8B, 0x97, 0x7, 0xA8, 0xAD, 0x5F, 0x37, 0x4, 0xE7, 0x92, 0x7, 0x3D, 0x48, 0x7B, 0x69, 0x58, 0x48, 0x44, 0x8, 0xFF, 0xFF, 0xFC, 0xDC, 0x4, 0x8E, 0xFE, 0x97, 0x6, 0x2A, 0x0, 0x7, 0x1, 0x8B, 0xFC, 0x63, 0x0, 0x0, 0xFF, 0xFF, 0xFB, 0xEE, 0x4, 0xD2, 0xFF, 0x79, 0x6, 0x0, 0x0, 0x27, 0x0, 0x76, 0xFB, 0x7D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0xFD, 0x30, 0x0, 0x0, 0x0, 0x1, 0xFC, 0x60, 0x4, 0xE1, 0xFF, 0xE, 0x6, 0x1, 0x0, 0x8, 0x0, 0x0, 0x3, 0x1, 0x23, 0x1, 0x35, 0x33, 0x17, 0x37, 0x33, 0xF2, 0xFE, 0xEF, 0x8F, 0xFE, 0xF2, 0xC0, 0x95, 0x96, 0xC3, 0x5, 0xF6, 0xFE, 0xEB, 0x1, 0x13, 0xD, 0x9C, 0x9C, 0xFF, 0xFF, 0xFD, 0x65, 0x4, 0x7A, 0xFE, 0xC, 0x6, 0x1F, 0x0, 0x7, 0x1, 0x79, 0xFD, 0x28, 0x0, 0x0, 0xFF, 0xFF, 0xFC, 0xDD, 0x4, 0x7A, 0xFE, 0x8F, 0x6, 0x1F, 0x0, 0x27, 0x1, 0x79, 0xFC, 0xA0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x79, 0xFD, 0xAB, 0x0, 0x0, 0x0, 0x2, 0xFC, 0xB, 0x4, 0xE4, 0xFF, 0x33, 0x5, 0xEE, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x23, 0x13, 0x23, 0x1, 0xFE, 0x75, 0xBE, 0xC2, 0xF5, 0x6A, 0xF5, 0xD1, 0xFE, 0xD5, 0x5, 0xEE, 0xFE, 0xF6, 0x1, 0xA, 0xFE, 0xF6, 0x1, 0xA, 0x0, 0x2, 0xFC, 0x75, 0x4, 0xC6, 0xFE, 0xFB, 0x6, 0xBA, 0x0, 0x9, 0x0, 0x16, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0xFD, 0x2F, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x1, 0x15, 0xB7, 0xAE, 0xFE, 0xD6, 0xAE, 0xB6, 0x40, 0x4D, 0x4C, 0x40, 0x6, 0x3E, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x2A, 0x7C, 0x9E, 0x9E, 0x7C, 0x37, 0x53, 0x53, 0x0, 0x1, 0xFC, 0x75, 0x4, 0x96, 0xFE, 0xFB, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0xFE, 0xFB, 0xB7, 0x3F, 0x4C, 0x4D, 0x40, 0xB7, 0xAF, 0x95, 0x94, 0xAE, 0x4, 0x96, 0x37, 0x53, 0x53, 0x37, 0x7D, 0x9D, 0x9D, 0x0, 0x1, 0xFD, 0x47, 0x3, 0xE1, 0xFE, 0x7D, 0x6, 0x25, 0x0, 0x8, 0x0, 0x0, 0x1, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x7, 0x15, 0xFD, 0x47, 0x65, 0x52, 0x7F, 0x57, 0x3, 0x3, 0xE1, 0xBE, 0x64, 0xDC, 0x46, 0x4D, 0x8A, 0x9E, 0xCF, 0xFF, 0xFF, 0xFD, 0x1E, 0x3, 0xE1, 0xFE, 0x54, 0x6, 0x25, 0x0, 0xF, 0x1, 0xC3, 0xFB, 0x9B, 0xA, 0x6, 0xC0, 0x0, 0x0, 0x1, 0xFD, 0x1D, 0x3, 0xE1, 0xFE, 0x53, 0x6, 0x25, 0x0, 0x8, 0x0, 0x0, 0x1, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0xFD, 0x1D, 0xDD, 0x3, 0x56, 0x7F, 0x52, 0x65, 0x6, 0x25, 0xD0, 0x9D, 0x8A, 0x4D, 0x47, 0xDC, 0x63, 0xFF, 0xFF, 0xFF, 0x3A, 0x3, 0xE1, 0x0, 0x70, 0x6, 0x25, 0x0, 0xF, 0x1, 0xC3, 0xFD, 0xB7, 0xA, 0x6, 0xC0, 0x0, 0x0, 0x1, 0xFC, 0xB8, 0xFE, 0x7A, 0xFE, 0x91, 0xFF, 0xA8, 0x0, 0x3, 0x0, 0x0, 0x5, 0x13, 0x23, 0x1, 0xFD, 0xCD, 0xC4, 0xCA, 0xFE, 0xF1, 0x58, 0xFE, 0xD2, 0x1, 0x2E, 0x0, 0x1, 0xFC, 0xC7, 0xFE, 0x7A, 0xFE, 0x9F, 0xFF, 0xA8, 0x0, 0x3, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0xFC, 0xC7, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0xFE, 0x7A, 0x1, 0x2E, 0xFE, 0xD2, 0x0, 0x1, 0xFC, 0xD4, 0xFE, 0x24, 0xFE, 0x8D, 0xFF, 0xC2, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x35, 0x21, 0x35, 0x21, 0x35, 0x33, 0xFE, 0x8D, 0xA7, 0xFE, 0xEE, 0x1, 0x12, 0xA7, 0xFE, 0x24, 0x80, 0x9E, 0x80, 0x0, 0x1, 0xFC, 0xDC, 0xFE, 0x24, 0xFE, 0x95, 0xFF, 0xC2, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x33, 0x15, 0x21, 0x15, 0x21, 0x15, 0xFC, 0xDC, 0xA8, 0x1, 0x11, 0xFE, 0xEF, 0xFE, 0x24, 0x1, 0x9E, 0x80, 0x9E, 0x80, 0x0, 0x1, 0xFC, 0xF3, 0x5, 0x3, 0xFF, 0x9C, 0x6, 0x7B, 0x0, 0x5, 0x0, 0x0, 0x3, 0x23, 0x35, 0x21, 0x35, 0x21, 0x64, 0xA8, 0xFD, 0xFF, 0x2, 0xA9, 0x5, 0x3, 0xE6, 0x92, 0x0, 0x1, 0xFE, 0x65, 0x3, 0xE1, 0xFF, 0x9A, 0x6, 0x25, 0x0, 0x8, 0x0, 0x0, 0x3, 0x15, 0x6, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x66, 0x1, 0x64, 0x51, 0x7F, 0x35, 0x24, 0x6, 0x25, 0x4E, 0xB9, 0xF7, 0x46, 0x4D, 0x61, 0xD7, 0xBF, 0x0, 0x1, 0xFD, 0x71, 0xFE, 0x2B, 0xFE, 0x41, 0xFF, 0xB4, 0x0, 0xC, 0x0, 0x0, 0x1, 0x15, 0x22, 0x26, 0x34, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0xFE, 0x41, 0x56, 0x7A, 0x7A, 0x56, 0x2A, 0x38, 0x38, 0xFE, 0x88, 0x5D, 0x6C, 0xAC, 0x71, 0x5F, 0x3A, 0x2E, 0x2C, 0x39, 0x0, 0x1, 0xFC, 0xDB, 0xFE, 0x3D, 0xFE, 0x93, 0xFF, 0xB2, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0xFE, 0x93, 0xFE, 0x48, 0x88, 0xA8, 0x88, 0xFE, 0x3D, 0x9F, 0xD6, 0xD6, 0x0, 0x1, 0xFC, 0xDC, 0xFE, 0x32, 0xFE, 0x94, 0xFF, 0xA8, 0x0, 0x7, 0x0, 0x0, 0x1, 0x35, 0x23, 0x35, 0x21, 0x15, 0x23, 0x15, 0xFD, 0x63, 0x87, 0x1, 0xB8, 0x88, 0xFE, 0x32, 0xD7, 0x9F, 0x9F, 0xD7, 0x0, 0x1, 0xFC, 0xDC, 0xFE, 0x13, 0xFE, 0x94, 0xFF, 0xC8, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0xFE, 0x94, 0x88, 0xA8, 0x88, 0x88, 0xA8, 0x88, 0xFE, 0xA0, 0x8D, 0x8D, 0x99, 0x8F, 0x8F, 0x0, 0x1, 0xFC, 0xC2, 0xFE, 0xA4, 0xFE, 0xB0, 0xFF, 0x43, 0x0, 0x3, 0x0, 0x0, 0x5, 0x21, 0x15, 0x21, 0xFC, 0xC2, 0x1, 0xEE, 0xFE, 0x12, 0xBD, 0x9F, 0x0, 0x1, 0xFD, 0xBD, 0xFE, 0x52, 0xFF, 0x66, 0x0, 0xBE, 0x0, 0xC, 0x0, 0x0, 0x25, 0x33, 0x11, 0x10, 0x21, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0xFE, 0x96, 0xD0, 0xFE, 0xD1, 0x41, 0x39, 0x20, 0x26, 0x3E, 0x55, 0xBE, 0xFE, 0xF4, 0xFE, 0xA0, 0x11, 0xB1, 0x7, 0x46, 0x5F, 0x0, 0x1, 0xFE, 0xCE, 0xFE, 0x52, 0x0, 0x76, 0x0, 0xBE, 0x0, 0xC, 0x0, 0x0, 0x25, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x20, 0x3, 0xFE, 0xCE, 0xCF, 0x56, 0x3E, 0x26, 0x1F, 0x38, 0x41, 0xFE, 0xD9, 0x8, 0xBE, 0xFE, 0xF4, 0x5F, 0x46, 0x7, 0xB1, 0x11, 0x1, 0x4E, 0x0, 0x1, 0xFD, 0x1B, 0xFE, 0x93, 0xFE, 0x2F, 0xFF, 0x8B, 0x0, 0x7, 0x0, 0x0, 0x4, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x1B, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xBE, 0x49, 0x49, 0x68, 0x47, 0x47, 0x0, 0x2, 0xFC, 0x3, 0xFE, 0x98, 0xFE, 0xC9, 0xFF, 0x85, 0x0, 0x7, 0x0, 0xF, 0x0, 0x0, 0x4, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x24, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0xFC, 0x3, 0x43, 0x76, 0x44, 0x44, 0x76, 0x43, 0x1, 0xC9, 0x43, 0x76, 0x44, 0x44, 0x76, 0x43, 0xC0, 0x45, 0x45, 0x64, 0x43, 0x43, 0x63, 0x45, 0x45, 0x64, 0x43, 0x43, 0x0, 0x2, 0xFC, 0xDD, 0xFE, 0x26, 0xFE, 0x98, 0xFF, 0xC2, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x4, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0xFC, 0xDD, 0x7E, 0x5F, 0x5E, 0x80, 0x80, 0x5E, 0x5F, 0x7E, 0x6D, 0x3E, 0x64, 0x3F, 0x3F, 0x64, 0x3E, 0xB8, 0x7A, 0x7A, 0xAC, 0x76, 0x76, 0x56, 0x2C, 0x43, 0x43, 0x2C, 0x2E, 0x44, 0x44, 0x0, 0x1, 0xFD, 0x32, 0xFD, 0xD7, 0xFE, 0x46, 0xFF, 0x70, 0x0, 0x8, 0x0, 0x0, 0x5, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0xFE, 0x46, 0x4E, 0x46, 0x80, 0x4A, 0x2, 0x90, 0x4B, 0x55, 0xBC, 0x3D, 0x4C, 0x70, 0x7F, 0x5E, 0x0, 0x1, 0xFD, 0x28, 0xFE, 0x40, 0xFE, 0x83, 0x0, 0x4, 0x0, 0xE, 0x0, 0x0, 0x25, 0x33, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x32, 0x35, 0x34, 0x26, 0x27, 0xFD, 0x47, 0xB2, 0xC, 0x38, 0x5E, 0xA5, 0xA1, 0x7, 0x88, 0x47, 0x4F, 0x4, 0x37, 0xA, 0x4D, 0x56, 0x65, 0x7B, 0x8A, 0x59, 0x2D, 0x22, 0x6, 0x0, 0x1, 0xFC, 0xCA, 0xFE, 0x52, 0xFE, 0x42, 0x0, 0x3C, 0x0, 0x10, 0x0, 0x0, 0x25, 0x17, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0xFD, 0xCA, 0x64, 0x44, 0x5D, 0x47, 0x2B, 0x2E, 0x15, 0x49, 0x5B, 0x59, 0x7B, 0x78, 0x3C, 0x3C, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0x8E, 0x2C, 0x66, 0x63, 0x4E, 0x96, 0x0, 0x1, 0xFD, 0x65, 0xFE, 0xE, 0xFE, 0xC, 0xFF, 0xB3, 0x0, 0x3, 0x0, 0x0, 0x5, 0x11, 0x23, 0x11, 0xFE, 0xC, 0xA7, 0x4D, 0xFE, 0x5B, 0x1, 0xA5, 0x0, 0x1, 0xFC, 0x5B, 0xFE, 0x2B, 0xFF, 0x12, 0xFF, 0x9A, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x23, 0x35, 0x21, 0x15, 0xFC, 0x5B, 0x2, 0xB7, 0xA8, 0xFE, 0x9A, 0xFE, 0x2B, 0x1, 0x6F, 0xFE, 0x91, 0xDC, 0xDC, 0x0, 0x1, 0xFC, 0x2B, 0xFE, 0x9B, 0xFF, 0x49, 0xFF, 0x90, 0x0, 0x16, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x35, 0x33, 0x14, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0xFE, 0x68, 0x70, 0x3F, 0x3F, 0x71, 0x61, 0x7D, 0x67, 0x44, 0x33, 0x7D, 0x67, 0x7B, 0x34, 0x45, 0x68, 0x80, 0xFE, 0x9B, 0x50, 0x50, 0x8A, 0x6B, 0x37, 0x41, 0x78, 0x78, 0x41, 0x37, 0x6B, 0x8A, 0x0, 0x1, 0xFC, 0x61, 0xFE, 0x69, 0xFF, 0x10, 0xFF, 0x89, 0x0, 0x8, 0x0, 0x0, 0x7, 0x1, 0x23, 0x1, 0x35, 0x33, 0x17, 0x37, 0x33, 0xF0, 0xFE, 0xEE, 0x8F, 0xFE, 0xF2, 0xC0, 0x95, 0x97, 0xC3, 0x82, 0xFE, 0xEB, 0x1, 0x13, 0xD, 0x9C, 0x9C, 0x0, 0x1, 0xFC, 0x61, 0xFE, 0x76, 0xFF, 0x10, 0xFF, 0x96, 0x0, 0x8, 0x0, 0x0, 0x5, 0x1, 0x15, 0x23, 0x27, 0x7, 0x23, 0x35, 0x1, 0xFD, 0xFE, 0x1, 0x12, 0xC3, 0x96, 0x96, 0xC0, 0x1, 0xE, 0x6A, 0xFE, 0xEB, 0xB, 0x9C, 0x9C, 0xD, 0x1, 0x13, 0x0, 0x1, 0xFC, 0x75, 0xFE, 0x8B, 0xFE, 0xFB, 0xFF, 0xA5, 0x0, 0xC, 0x0, 0x0, 0x5, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0xFE, 0x44, 0xB7, 0xAE, 0xFE, 0xD6, 0xAE, 0xB6, 0x40, 0x4D, 0x4C, 0x40, 0x5B, 0x7D, 0x9D, 0x9D, 0x7D, 0x37, 0x54, 0x54, 0x0, 0x1, 0xFC, 0x75, 0xFE, 0x83, 0xFE, 0xFB, 0xFF, 0x9D, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x20, 0x16, 0xFE, 0xFB, 0xB7, 0x40, 0x4C, 0x4D, 0x40, 0xB6, 0xAE, 0x1, 0x2A, 0xAE, 0xFE, 0x83, 0x37, 0x53, 0x53, 0x37, 0x7C, 0x9E, 0x9E, 0x0, 0x1, 0xFC, 0x43, 0xFE, 0x79, 0xFF, 0x21, 0xFF, 0x93, 0x0, 0x14, 0x0, 0x0, 0x5, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFE, 0x8C, 0x95, 0x81, 0x5F, 0x41, 0x50, 0x47, 0x36, 0x26, 0x34, 0x96, 0x7F, 0x60, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x6D, 0xC, 0x6F, 0x91, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x1, 0xFC, 0x62, 0xFE, 0xC1, 0xFF, 0x10, 0xFF, 0x5F, 0x0, 0x3, 0x0, 0x0, 0x7, 0x15, 0x21, 0x35, 0xF0, 0xFD, 0x52, 0xA1, 0x9E, 0x9E, 0xFF, 0xFF, 0xFB, 0xED, 0xFE, 0xAD, 0xFF, 0x83, 0xFF, 0x6D, 0x0, 0x7, 0x0, 0x44, 0xFB, 0xEA, 0xFF, 0x6D, 0x0, 0x2, 0xFB, 0xED, 0xFD, 0xF9, 0xFF, 0x84, 0xFF, 0xAC, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x7, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x7D, 0xFC, 0x6A, 0x3, 0x97, 0xFC, 0x6A, 0x54, 0xAC, 0xAC, 0xFE, 0xF9, 0xAC, 0xAC, 0xFF, 0xFF, 0xFC, 0x49, 0x1, 0x8F, 0xFF, 0x27, 0x2, 0xA9, 0x0, 0x7, 0x1, 0x8D, 0xFB, 0xCF, 0xFC, 0xB4, 0xFF, 0xFF, 0xFC, 0x69, 0x1, 0xC2, 0xFF, 0x7, 0x2, 0x6D, 0x0, 0x7, 0x7, 0xA4, 0xFB, 0xD9, 0xFF, 0x3B, 0x0, 0x1, 0xFB, 0x44, 0x1, 0xC2, 0x0, 0x2C, 0x2, 0x6D, 0x0, 0x3, 0x0, 0x0, 0x13, 0x15, 0x21, 0x35, 0x2C, 0xFB, 0x18, 0x2, 0x6D, 0xAB, 0xAB, 0x0, 0x1, 0xFC, 0x1E, 0xFF, 0x76, 0xFF, 0x46, 0x4, 0xBC, 0x0, 0x3, 0x0, 0x0, 0x3, 0x1, 0x23, 0x1, 0xBA, 0xFD, 0x69, 0x91, 0x2, 0x97, 0x4, 0xBC, 0xFA, 0xBA, 0x5, 0x46, 0x0, 0x1, 0xFB, 0xA, 0xFF, 0xA1, 0xFF, 0x51, 0x5, 0xEE, 0x0, 0x3, 0x0, 0x0, 0x3, 0x1, 0x23, 0x1, 0xAF, 0xFC, 0x2C, 0x73, 0x3, 0xD4, 0x5, 0xEE, 0xF9, 0xB3, 0x6, 0x4D, 0x0, 0x1, 0xFD, 0x50, 0xFE, 0x2B, 0xFE, 0x20, 0xFF, 0xB4, 0x0, 0xC, 0x0, 0x0, 0x1, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x14, 0x6, 0xFD, 0x50, 0x2A, 0x38, 0x38, 0x2A, 0x56, 0x7A, 0x7A, 0xFE, 0x2B, 0x5D, 0x39, 0x2C, 0x2E, 0x3A, 0x5F, 0x71, 0xAC, 0x6C, 0x0, 0x1, 0xFC, 0x5C, 0xFE, 0x23, 0xFF, 0x13, 0xFF, 0x91, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x33, 0x15, 0x21, 0x35, 0x33, 0x11, 0xFC, 0x5C, 0xA9, 0x1, 0x66, 0xA8, 0xFE, 0x23, 0x1, 0x6E, 0xDC, 0xDC, 0xFE, 0x92, 0x0, 0x2, 0xFC, 0xE8, 0xFE, 0xE, 0xFE, 0x8A, 0xFF, 0xB0, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x1, 0x15, 0x33, 0x35, 0xFC, 0xE8, 0x1, 0xA2, 0xFE, 0xDC, 0xA7, 0xFE, 0xE, 0x1, 0xA2, 0xFE, 0x5E, 0x1, 0x24, 0xA7, 0xA7, 0x0, 0x1, 0xFC, 0x2B, 0xFE, 0x9E, 0xFF, 0x49, 0xFF, 0x93, 0x0, 0x16, 0x0, 0x0, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x15, 0x23, 0x34, 0x23, 0x22, 0x6, 0xFC, 0x92, 0x67, 0x7D, 0x61, 0x71, 0x3F, 0x3F, 0x70, 0x61, 0x80, 0x68, 0x45, 0x34, 0x7B, 0x67, 0x7D, 0x33, 0x44, 0xFE, 0x9E, 0x6A, 0x8B, 0x50, 0x50, 0x8B, 0x6A, 0x37, 0x41, 0x77, 0x77, 0x41, 0x0, 0x1, 0xFD, 0x4, 0x4, 0xDF, 0xFE, 0xE3, 0x6, 0xC6, 0x0, 0xB, 0x0, 0x0, 0x1, 0x27, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x37, 0x17, 0x7, 0x17, 0xFE, 0x7C, 0x89, 0x8A, 0x65, 0x8A, 0x88, 0x65, 0x89, 0x8A, 0x65, 0x8A, 0x89, 0x4, 0xDF, 0x8D, 0x8B, 0x68, 0x8A, 0x8B, 0x68, 0x8C, 0x8B, 0x68, 0x8A, 0x8C, 0x0, 0x1, 0xFD, 0x45, 0x4, 0x62, 0xFE, 0x2A, 0x6, 0x87, 0x0, 0x12, 0x0, 0x0, 0x1, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x36, 0x33, 0x15, 0x22, 0x15, 0x14, 0x16, 0x15, 0x14, 0x6, 0xFD, 0x45, 0x28, 0x20, 0x46, 0x80, 0x62, 0x40, 0x41, 0x7A, 0x4, 0x62, 0x83, 0x25, 0x13, 0x27, 0x75, 0x3F, 0x4A, 0x45, 0x82, 0x32, 0x2A, 0x72, 0x41, 0x49, 0x4B, 0x0, 0x2, 0xFB, 0xED, 0x5, 0xD4, 0xFF, 0x83, 0x7, 0x7F, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x7D, 0xFC, 0x6A, 0x3, 0x96, 0xFC, 0x6B, 0x7, 0x7F, 0x9D, 0x9D, 0xFE, 0xF2, 0x9D, 0x9D, 0xFF, 0xFF, 0xFF, 0x0, 0x4, 0xD2, 0x0, 0xD9, 0x6, 0x0, 0x0, 0x7, 0x0, 0x45, 0xFE, 0xCF, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xF, 0x4, 0xD2, 0x0, 0xE7, 0x6, 0x0, 0x0, 0x7, 0x0, 0x76, 0xFE, 0x9E, 0x0, 0x0, 0xFF, 0xFF, 0xFC, 0x49, 0x4, 0xDB, 0xFF, 0x27, 0x5, 0xF5, 0x0, 0x7, 0x1, 0x8D, 0xFB, 0xCF, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x30, 0x4, 0xC5, 0xFE, 0x44, 0x6, 0x65, 0x0, 0x7, 0x7, 0x25, 0xFC, 0xEA, 0x5, 0x5F, 0xFF, 0xFF, 0xFC, 0xB, 0x4, 0xE0, 0xFF, 0x5E, 0x6, 0xAF, 0x0, 0x7, 0x2, 0x2E, 0xFB, 0xA3, 0x0, 0x0, 0x0, 0x1, 0xFD, 0x60, 0xFD, 0xF2, 0xFE, 0x62, 0xFF, 0xBA, 0x0, 0xB, 0x0, 0x0, 0x5, 0x33, 0x11, 0x14, 0x33, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0xFD, 0x60, 0xA4, 0x33, 0x2B, 0x22, 0x30, 0x4D, 0x63, 0x46, 0xFE, 0xF6, 0x48, 0x4, 0x6E, 0xC, 0x57, 0x63, 0x0, 0x1, 0xFC, 0x5C, 0x4, 0xC0, 0xFF, 0x13, 0x6, 0x49, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x23, 0x35, 0x21, 0x15, 0xFC, 0x5C, 0x2, 0xB7, 0xA8, 0xFE, 0x9A, 0x4, 0xC0, 0x1, 0x89, 0xFE, 0x77, 0xF7, 0xF7, 0x0, 0x2, 0xFC, 0xC2, 0xFE, 0xE, 0xFE, 0xB0, 0xFF, 0x9D, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x5, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0xFC, 0xC2, 0x1, 0xEE, 0xFE, 0x12, 0x1, 0xEE, 0xFE, 0x12, 0x63, 0x9B, 0x59, 0x9B, 0xFF, 0xFF, 0xFC, 0xCE, 0xFE, 0xE, 0xFE, 0xA2, 0xFF, 0xB3, 0x0, 0x27, 0x1, 0x79, 0xFC, 0x91, 0xF9, 0x94, 0x0, 0x7, 0x1, 0x79, 0xFD, 0xBE, 0xF9, 0x94, 0x0, 0x1, 0xFD, 0x9, 0xFE, 0x6, 0xFE, 0x9E, 0xFF, 0x8F, 0x0, 0x5, 0x0, 0x0, 0x1, 0x35, 0x23, 0x35, 0x21, 0x11, 0xFD, 0xF7, 0xEE, 0x1, 0x95, 0xFE, 0x6, 0xEC, 0x9D, 0xFE, 0x77, 0x0, 0x1, 0xFC, 0x4A, 0x4, 0x99, 0xFF, 0x27, 0x6, 0x2F, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x27, 0x7, 0x27, 0x37, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x17, 0x7, 0x17, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0xFE, 0x47, 0x3D, 0x39, 0x39, 0x6A, 0x36, 0x14, 0x16, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x3A, 0x46, 0x3B, 0x68, 0x33, 0x1E, 0x26, 0x36, 0x95, 0x80, 0x4, 0xE9, 0x1E, 0x6E, 0x3D, 0x67, 0x5, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x28, 0x70, 0x3D, 0x61, 0x3, 0x39, 0x2E, 0xC, 0x6F, 0x91, 0x0, 0x3, 0xFC, 0x2A, 0x4, 0x79, 0xFF, 0x7, 0x7, 0x92, 0x0, 0x9, 0x0, 0x1E, 0x0, 0x28, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x12, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x1, 0x60, 0x95, 0x80, 0x5F, 0x41, 0x50, 0x48, 0x35, 0x26, 0x35, 0x95, 0x7F, 0x60, 0x51, 0x6F, 0x4D, 0x27, 0x35, 0xFE, 0xA0, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x7, 0x16, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x51, 0xC, 0x70, 0x90, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x5A, 0x3A, 0xFE, 0x91, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0xFC, 0x55, 0x4, 0xDC, 0xFF, 0x32, 0x6, 0x9E, 0x0, 0x13, 0x0, 0x28, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x15, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFE, 0x9D, 0x95, 0x80, 0x60, 0x42, 0x4F, 0x48, 0x34, 0x5B, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x95, 0x80, 0x60, 0x42, 0x4F, 0x48, 0x34, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x6, 0x9E, 0xA, 0x57, 0x73, 0x23, 0x23, 0x50, 0x7, 0x56, 0x76, 0x46, 0x2C, 0xBE, 0xA, 0x58, 0x72, 0x23, 0x23, 0x2D, 0x24, 0x7, 0x56, 0x76, 0x45, 0x2C, 0x0, 0x1, 0xFC, 0xD, 0xFD, 0xD9, 0xFF, 0x63, 0xFF, 0x89, 0x0, 0xD, 0x0, 0x0, 0x1, 0x37, 0x21, 0x17, 0x23, 0x27, 0x37, 0x33, 0x7, 0x21, 0x27, 0x33, 0x17, 0x7, 0xFE, 0x8, 0x9C, 0xFE, 0x29, 0x9C, 0x89, 0xD3, 0xD3, 0x89, 0x9A, 0x1, 0xD3, 0x9A, 0x89, 0xD2, 0xD2, 0xFD, 0xD9, 0xA0, 0xA0, 0xD8, 0xD8, 0x9E, 0x9E, 0xD8, 0xD8, 0x0, 0x1, 0xFC, 0xD1, 0xFD, 0xDA, 0xFE, 0x9F, 0xFF, 0xA8, 0x0, 0x8, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x17, 0xFE, 0x9F, 0xAD, 0x73, 0xAE, 0xE7, 0xE7, 0xFE, 0x56, 0x9A, 0xFE, 0xEA, 0x1, 0x17, 0x9B, 0x85, 0xCD, 0xCD, 0x0, 0x1, 0xFC, 0x7C, 0x4, 0xA8, 0xFF, 0x12, 0x7, 0x30, 0x0, 0x8, 0x0, 0x0, 0x1, 0x35, 0x25, 0x37, 0x27, 0x25, 0x35, 0x5, 0x15, 0xFC, 0x7C, 0x1, 0x92, 0x3D, 0x3D, 0xFE, 0x6E, 0x2, 0x96, 0x4, 0xA8, 0xA4, 0x91, 0xE, 0xE, 0x93, 0xA4, 0xFF, 0x89, 0x0, 0x1, 0xFD, 0x6F, 0x4, 0x62, 0xFE, 0x3F, 0x5, 0xEB, 0x0, 0xC, 0x0, 0x0, 0x1, 0x22, 0x26, 0x34, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0xFE, 0x3F, 0x56, 0x7A, 0x7A, 0x56, 0x2A, 0x38, 0x38, 0x2A, 0x4, 0x62, 0x6C, 0xAC, 0x71, 0x5F, 0x3A, 0x2E, 0x2B, 0x3A, 0x0, 0x2, 0xFC, 0x75, 0x4, 0x8F, 0xFE, 0xFB, 0x6, 0xBD, 0x0, 0xD, 0x0, 0x19, 0x0, 0x0, 0x1, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFE, 0xFB, 0xB7, 0x3F, 0x4C, 0x4D, 0x40, 0xB7, 0xAF, 0x95, 0x94, 0xAE, 0xFE, 0x33, 0x49, 0x41, 0x40, 0x4A, 0x4A, 0x40, 0x41, 0x49, 0x5, 0xA2, 0x37, 0x54, 0x54, 0x37, 0x7D, 0x9E, 0x9E, 0xFE, 0xEB, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0xFD, 0x4, 0xFD, 0xF0, 0xFE, 0xD3, 0xFF, 0xC7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x27, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x37, 0x17, 0x7, 0x17, 0xFE, 0x6F, 0x84, 0x85, 0x62, 0x85, 0x84, 0x63, 0x84, 0x85, 0x62, 0x85, 0x84, 0xFD, 0xF0, 0x88, 0x86, 0x64, 0x86, 0x87, 0x64, 0x87, 0x86, 0x64, 0x86, 0x88, 0xFF, 0xFF, 0xFC, 0xBE, 0xFD, 0xDB, 0xFE, 0xC5, 0xFF, 0xBC, 0x0, 0x7, 0x1, 0xA2, 0xFC, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0xFC, 0xCE, 0xFD, 0xDB, 0xFE, 0xD5, 0xFF, 0xBC, 0x0, 0x7, 0x1, 0xA3, 0xFC, 0x91, 0x0, 0x0, 0xFF, 0xFF, 0xFC, 0x17, 0xFD, 0xDB, 0x0, 0x1E, 0xFF, 0xBC, 0x0, 0x27, 0x1, 0xA3, 0xFB, 0xDA, 0x0, 0x0, 0x0, 0x7, 0x1, 0xA1, 0xFD, 0xDB, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x4F, 0x4, 0x62, 0xFE, 0x1F, 0x5, 0xEB, 0x0, 0x7, 0x1, 0x6F, 0xFD, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x49, 0x4, 0xA6, 0x1, 0x5D, 0x5, 0x9E, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x2E, 0x6, 0x13, 0x0, 0x1, 0xFC, 0xD9, 0xFD, 0xEB, 0xFE, 0x96, 0xFF, 0xB7, 0x0, 0xE, 0x0, 0x0, 0x1, 0x37, 0x27, 0x37, 0x17, 0x27, 0x33, 0x7, 0x37, 0x17, 0x7, 0x17, 0x7, 0x27, 0x7, 0xFD, 0xC, 0x6B, 0x9E, 0x1C, 0x9D, 0x7, 0x5D, 0x8, 0x9A, 0x1C, 0xA1, 0x68, 0x4C, 0x5D, 0x5D, 0xFE, 0x25, 0x91, 0x2E, 0x5A, 0x3E, 0xB7, 0xBB, 0x3D, 0x5A, 0x30, 0x8D, 0x37, 0x98, 0x94, 0x0, 0x3, 0xFC, 0x41, 0xFE, 0x1F, 0xFF, 0x50, 0xFF, 0xBC, 0x0, 0x13, 0x0, 0x1C, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x14, 0x16, 0x32, 0x36, 0x34, 0x26, 0x22, 0x6, 0x5, 0x14, 0x16, 0x32, 0x36, 0x34, 0x26, 0x22, 0x6, 0xFE, 0x73, 0x6A, 0x40, 0x41, 0x69, 0x5F, 0x7F, 0x7F, 0x5F, 0x68, 0x42, 0x41, 0x69, 0x5E, 0x7F, 0x7F, 0xCE, 0x3E, 0x64, 0x3E, 0x3E, 0x64, 0x3E, 0xFE, 0xAC, 0x3E, 0x64, 0x3E, 0x3E, 0x64, 0x3E, 0xFE, 0x1F, 0x47, 0x47, 0x76, 0x57, 0x55, 0x7B, 0x49, 0x49, 0x7B, 0x55, 0x57, 0x76, 0xCD, 0x2C, 0x44, 0x43, 0x5A, 0x44, 0x44, 0x2D, 0x2C, 0x44, 0x43, 0x5A, 0x44, 0x44, 0x0, 0x1, 0xFC, 0xFC, 0x4, 0x9D, 0xFE, 0x94, 0x6, 0x7D, 0x0, 0x7, 0x0, 0x0, 0x1, 0x33, 0x7, 0x33, 0x3, 0x23, 0x37, 0x23, 0xFD, 0x67, 0x86, 0x3C, 0xE3, 0x6B, 0x86, 0x3C, 0xE3, 0x6, 0x7D, 0xAD, 0xFE, 0xCD, 0xAD, 0xFF, 0xFF, 0xFD, 0x34, 0xFE, 0x52, 0x2, 0xCB, 0xFF, 0x98, 0x0, 0x7, 0x2, 0xE, 0x0, 0x0, 0xF9, 0xBC, 0x0, 0x1, 0xFD, 0x34, 0x4, 0x96, 0x2, 0xCB, 0x5, 0xDC, 0x0, 0xC, 0x0, 0x0, 0x1, 0x33, 0x6, 0x4, 0x20, 0x24, 0x27, 0x33, 0x16, 0x4, 0x33, 0x32, 0x24, 0x2, 0x15, 0xB6, 0x4A, 0xFE, 0x9F, 0xFD, 0xC0, 0xFE, 0x9E, 0x4A, 0xB6, 0x39, 0x1, 0xF, 0xCE, 0xCD, 0x1, 0x11, 0x5, 0xDC, 0x7C, 0xCA, 0xCA, 0x7C, 0x37, 0x80, 0x80, 0x0, 0x1, 0xFD, 0xB6, 0x5, 0x6, 0x2, 0x4B, 0x5, 0xA4, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x2, 0x4B, 0xFB, 0x6B, 0x5, 0xA4, 0x9E, 0x9E, 0xFF, 0xFF, 0xFD, 0xB6, 0xFE, 0xCF, 0x2, 0x4B, 0xFF, 0x6D, 0x0, 0x7, 0x2, 0xF, 0x0, 0x0, 0xF9, 0xC9, 0x0, 0x1, 0xFC, 0x2E, 0x4, 0xD7, 0x3, 0xD1, 0x5, 0xF8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x17, 0x6, 0x6, 0x23, 0x22, 0x2C, 0x2, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0xC, 0x2, 0x33, 0x32, 0x3, 0x4F, 0x82, 0xE, 0xAB, 0x83, 0x8E, 0xFE, 0xA7, 0xFE, 0x72, 0xFE, 0xC8, 0x6C, 0xA0, 0x2B, 0x83, 0x14, 0xA6, 0x85, 0x78, 0x1, 0x5E, 0x1, 0x8B, 0x1, 0x4E, 0x69, 0xAB, 0x5, 0xF8, 0x28, 0x6A, 0x7B, 0x1B, 0x28, 0x1A, 0x71, 0x23, 0x65, 0x84, 0x1C, 0x26, 0x1B, 0x0, 0x1, 0xFD, 0x34, 0x4, 0x88, 0x2, 0xCB, 0x5, 0xCE, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x26, 0x24, 0x23, 0x22, 0x4, 0x7, 0x23, 0x36, 0x24, 0x20, 0x4, 0x2, 0xCB, 0xB6, 0x37, 0xFE, 0xEF, 0xCD, 0xCE, 0xFE, 0xF1, 0x39, 0xB6, 0x4A, 0x1, 0x62, 0x2, 0x40, 0x1, 0x61, 0x4, 0x88, 0x37, 0x7F, 0x7F, 0x37, 0x7D, 0xC9, 0xC9, 0x0, 0x1, 0xFD, 0x27, 0xFD, 0xD7, 0x3, 0x6D, 0xFF, 0x89, 0x0, 0x8, 0x0, 0x0, 0x1, 0x23, 0x37, 0x21, 0x35, 0x21, 0x27, 0x33, 0x5, 0x2, 0x40, 0xC3, 0xE4, 0xFA, 0xC6, 0x5, 0x38, 0xE2, 0xC3, 0x1, 0x2D, 0xFD, 0xD7, 0xA4, 0x6B, 0xA3, 0xD8, 0x0, 0x2, 0xFC, 0xD0, 0x4, 0xA8, 0xFE, 0xC1, 0x6, 0xE0, 0x0, 0x9, 0x0, 0x23, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x17, 0xFD, 0xAC, 0x25, 0x41, 0xC, 0x53, 0x37, 0x35, 0xD3, 0xA, 0x6, 0x38, 0x63, 0x54, 0x63, 0xEF, 0x5F, 0x50, 0x58, 0x8A, 0x7D, 0x68, 0x60, 0x7C, 0x14, 0x5, 0x16, 0x26, 0x16, 0x50, 0x30, 0x20, 0x3C, 0x64, 0x1B, 0x22, 0x47, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x63, 0x63, 0xE3, 0x4C, 0x39, 0x0, 0x2, 0xFC, 0xCE, 0x4, 0xA3, 0xFE, 0xC0, 0x6, 0xDF, 0x0, 0x5, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x7, 0x33, 0x35, 0x26, 0x13, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x16, 0x33, 0x32, 0x37, 0xFD, 0xCD, 0x5E, 0xF, 0xD8, 0x5, 0x81, 0x1B, 0x6B, 0x52, 0x81, 0x8D, 0x8E, 0x71, 0x79, 0x7A, 0xFE, 0x9E, 0xB, 0x7A, 0x5A, 0x30, 0x6, 0x6B, 0x76, 0x9, 0x6D, 0xFE, 0xA0, 0x27, 0x41, 0x99, 0x72, 0x15, 0x85, 0x97, 0x99, 0x77, 0x37, 0x80, 0x3E, 0x0, 0x2, 0xFD, 0x79, 0x4, 0xB1, 0xFE, 0x1C, 0x7, 0xAD, 0x0, 0x5, 0x0, 0x9, 0x0, 0x0, 0x0, 0x33, 0x32, 0x14, 0x23, 0x22, 0x17, 0x11, 0x23, 0x11, 0xFD, 0x79, 0x51, 0x52, 0x52, 0x51, 0x9A, 0x90, 0x7, 0xAD, 0x98, 0x3C, 0xFD, 0xD8, 0x2, 0x28, 0x0, 0x2, 0xFC, 0xC2, 0x4, 0xA3, 0xFE, 0xD0, 0x6, 0xDF, 0x0, 0xA, 0x0, 0x12, 0x0, 0x0, 0x0, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0xFD, 0x50, 0x8E, 0x8E, 0x78, 0x7A, 0x8E, 0x8E, 0x79, 0x78, 0x79, 0x76, 0x4, 0xA3, 0x9C, 0x87, 0x7D, 0x9C, 0x9C, 0x88, 0x7C, 0x9C, 0x74, 0xAF, 0xA5, 0xB0, 0xA4, 0x0, 0x1, 0xFC, 0xD6, 0x4, 0xA7, 0xFE, 0xB3, 0x6, 0xD9, 0x0, 0x10, 0x0, 0x0, 0x1, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0xFE, 0x41, 0xF, 0x37, 0x68, 0x56, 0x67, 0x90, 0x56, 0x4B, 0x1C, 0x90, 0x4, 0xB1, 0x3F, 0x49, 0x6C, 0x7C, 0x1, 0x4A, 0xFE, 0xB5, 0x73, 0x38, 0x1, 0x86, 0xFD, 0xD8, 0x0, 0x1, 0xFC, 0xCC, 0x4, 0xA3, 0xFE, 0xB7, 0x6, 0xDF, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x33, 0x6, 0x6, 0xFD, 0xCE, 0x84, 0x7E, 0x7E, 0x84, 0x69, 0x7E, 0x2, 0x88, 0x2, 0x2E, 0x32, 0x72, 0x34, 0x3E, 0x59, 0x9, 0x88, 0x2, 0x86, 0x4, 0xA3, 0xA4, 0x71, 0x12, 0x71, 0xA4, 0x74, 0x5B, 0x22, 0x39, 0xB3, 0x43, 0x5E, 0x4D, 0x50, 0x71, 0x0, 0x2, 0xFC, 0xC0, 0x4, 0xA4, 0xFE, 0xBE, 0x7, 0xC8, 0x0, 0x9, 0x0, 0x18, 0x0, 0x0, 0x1, 0x32, 0x37, 0x35, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0xFD, 0xBF, 0x4F, 0x20, 0x20, 0x4E, 0x71, 0x37, 0xBB, 0x9, 0x37, 0x62, 0x68, 0x77, 0x76, 0x6A, 0x59, 0x35, 0x90, 0x5, 0x19, 0x48, 0xC5, 0x47, 0xB1, 0x49, 0x5A, 0x68, 0x35, 0x42, 0x9E, 0x85, 0x7D, 0x9B, 0x36, 0x1, 0x1F, 0xFC, 0xE9, 0x0, 0x1, 0xFC, 0xD6, 0x4, 0xB1, 0xFE, 0xB3, 0x7, 0xC8, 0x0, 0x10, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0xFD, 0xC9, 0x47, 0x1C, 0x90, 0x90, 0x36, 0x5A, 0x56, 0x67, 0x90, 0x6, 0x6B, 0x33, 0xFE, 0x79, 0x3, 0x17, 0xFE, 0xDB, 0x3C, 0x6F, 0x80, 0xFE, 0xC1, 0x1, 0x40, 0x7A, 0x0, 0x1, 0xFC, 0x33, 0x4, 0xB1, 0xFF, 0x5D, 0x6, 0xDF, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x23, 0x22, 0x7, 0x17, 0x11, 0x23, 0x11, 0x34, 0xFD, 0x2A, 0x4B, 0x1C, 0x90, 0x72, 0xF, 0x37, 0x68, 0x75, 0x2D, 0x36, 0x75, 0x56, 0x67, 0x8F, 0x57, 0x4F, 0x1B, 0x3, 0x90, 0x6, 0x6B, 0x38, 0xFE, 0x7E, 0x2, 0x28, 0x42, 0x48, 0x5B, 0x5B, 0x6C, 0x7C, 0xFE, 0xBA, 0x1, 0x47, 0x73, 0x3E, 0x26, 0xFE, 0xAA, 0x1, 0x47, 0x73, 0x0, 0x1, 0xFD, 0x46, 0x4, 0xB1, 0xFE, 0x79, 0x6, 0xDF, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0xFE, 0x3C, 0x4B, 0x1C, 0x8F, 0x72, 0xE, 0x31, 0x55, 0x1B, 0x12, 0x1C, 0x6, 0x5F, 0x38, 0xFE, 0x8A, 0x2, 0x28, 0x3F, 0x45, 0x5, 0x89, 0xE, 0x0, 0x1, 0xFC, 0xFB, 0x4, 0xAC, 0xFE, 0x46, 0x7, 0x64, 0x0, 0x12, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x27, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x33, 0x37, 0xFE, 0x43, 0x21, 0x31, 0x99, 0x3, 0x5A, 0x5A, 0x90, 0x61, 0x61, 0x33, 0x2B, 0x4, 0xB8, 0xC, 0xB3, 0x1, 0x11, 0x6F, 0x85, 0x85, 0x6F, 0xFE, 0xFA, 0x48, 0x4, 0x0, 0x1, 0xFC, 0xC5, 0x4, 0xB1, 0xFE, 0xCB, 0x6, 0xDB, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x3, 0xFD, 0x86, 0xC1, 0x9A, 0x62, 0x8, 0x9, 0x5F, 0x9A, 0xC0, 0x4, 0xB1, 0x2, 0x2A, 0xFE, 0xA7, 0x2F, 0x2F, 0x1, 0x59, 0xFD, 0xD6, 0x0, 0x1, 0xFC, 0xE6, 0x4, 0xB1, 0xFE, 0xEE, 0x6, 0xDB, 0x0, 0xB, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x3, 0x13, 0x23, 0x27, 0x7, 0x23, 0x13, 0x3, 0xFD, 0x8E, 0x5B, 0x5C, 0xA3, 0xA2, 0xA8, 0xA3, 0x61, 0x61, 0xA3, 0xA8, 0xA2, 0x6, 0xDB, 0xA4, 0xA4, 0xFE, 0xEF, 0xFE, 0xE7, 0xAC, 0xAC, 0x1, 0x19, 0x1, 0x11, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x50, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x4, 0x50, 0xFD, 0x41, 0xFC, 0xFC, 0x2, 0xBF, 0x2, 0x88, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x3, 0xD0, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x3, 0xD0, 0xFE, 0x1B, 0xF3, 0x5C, 0x41, 0x1D, 0x23, 0x37, 0x45, 0x7E, 0xD6, 0x1, 0xE5, 0x1, 0xB5, 0xFE, 0x4B, 0x3, 0xF, 0x56, 0x40, 0x7, 0xA3, 0xD, 0x8D, 0xB2, 0x98, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0xE5, 0xFA, 0xFC, 0xF7, 0xCB, 0x4, 0x83, 0x3, 0x84, 0x1, 0x61, 0xFB, 0x1B, 0x4, 0xE5, 0xFE, 0x9F, 0x2, 0x2C, 0xFD, 0xD4, 0x0, 0x1, 0x0, 0x36, 0x0, 0x0, 0x3, 0xF7, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0x34, 0xA5, 0xF1, 0xA5, 0xC3, 0x3, 0xC1, 0x3, 0xC5, 0x1, 0x28, 0xFB, 0x13, 0x4, 0xED, 0xFE, 0xD8, 0x1, 0xEB, 0xFE, 0x15, 0xFF, 0xFF, 0x0, 0x51, 0x4, 0xBC, 0x1, 0xA0, 0x6, 0x1A, 0x0, 0x6, 0x1, 0x6B, 0x2E, 0x0, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x56, 0x1, 0x9F, 0xFF, 0xB4, 0x0, 0x3, 0x0, 0x0, 0x5, 0x3, 0x23, 0x13, 0x1, 0x9F, 0x6E, 0xE1, 0xC8, 0x4C, 0xFE, 0xA2, 0x1, 0x5E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x5, 0xB0, 0x0, 0x6, 0x2, 0x72, 0x0, 0x0, 0x0, 0x1, 0x0, 0x86, 0xFF, 0xEB, 0x4, 0x8F, 0x4, 0x3A, 0x0, 0x12, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x1, 0x23, 0x11, 0x33, 0x11, 0x1, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x4, 0x10, 0x70, 0x80, 0xFE, 0x59, 0xF3, 0xF3, 0x1, 0xA7, 0xF3, 0x3, 0x46, 0x10, 0xA, 0x19, 0x33, 0x15, 0xA4, 0xB5, 0x1, 0x94, 0xFD, 0x28, 0x4, 0x3A, 0xFD, 0x29, 0x2, 0xD7, 0xFC, 0xFA, 0x7B, 0x4, 0xB3, 0x1F, 0x0, 0x1, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x3B, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x1, 0x66, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x23, 0x0, 0x0, 0x5, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x0, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x2, 0x3C, 0xFA, 0xF2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0x96, 0x58, 0x7A, 0x5, 0xE4, 0x4, 0xFF, 0x0, 0xFE, 0xC0, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x14, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x68, 0x4F, 0x9D, 0xDD, 0x2, 0x5E, 0x45, 0x45, 0x64, 0x44, 0x44, 0x0, 0x2, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x23, 0x0, 0x0, 0x0, 0x26, 0x34, 0x36, 0x32, 0x16, 0x14, 0x6, 0x5, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x1, 0xB7, 0x42, 0x42, 0x76, 0x42, 0x42, 0xFE, 0xE, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x1, 0xA2, 0x44, 0x64, 0x45, 0x45, 0x64, 0x44, 0x3C, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0xFF, 0xFF, 0x0, 0x47, 0xFE, 0xB8, 0x1, 0x9F, 0x4, 0x52, 0x0, 0x27, 0x0, 0x13, 0xFF, 0xFC, 0x3, 0x51, 0x0, 0x6, 0x0, 0x11, 0x2A, 0x0, 0x0, 0x1, 0x0, 0xC7, 0x4, 0xEA, 0x1, 0xE2, 0x6, 0x41, 0x0, 0x3, 0x0, 0x0, 0x13, 0x13, 0x33, 0x3, 0xC7, 0x3C, 0xDF, 0x8B, 0x4, 0xEA, 0x1, 0x57, 0xFE, 0xA9, 0x0, 0x3, 0x0, 0x68, 0x4, 0xE0, 0x3, 0xBB, 0x6, 0xAF, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x13, 0x33, 0x3, 0x5, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0xC0, 0x2F, 0xE4, 0x81, 0xFE, 0x16, 0x44, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x44, 0x2, 0x55, 0x45, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x45, 0x5, 0x86, 0x1, 0x29, 0xFE, 0xD7, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0xFF, 0xFF, 0x0, 0x8E, 0x2, 0x46, 0x1, 0xAA, 0x3, 0x52, 0x0, 0x6, 0x0, 0x79, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9B, 0x0, 0x0, 0x4, 0x38, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x21, 0x11, 0x23, 0x11, 0x4, 0x38, 0xFD, 0x5F, 0xFC, 0x5, 0xB0, 0xCB, 0xFB, 0x1B, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x19, 0x0, 0x0, 0x5, 0xA1, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x6, 0x0, 0x0, 0x25, 0x1, 0x1, 0x5, 0x1, 0x33, 0x1, 0x4, 0x4F, 0xFE, 0x98, 0xFE, 0x88, 0xFE, 0xAA, 0x2, 0x56, 0xF4, 0x2, 0x3E, 0xCA, 0x3, 0xBD, 0xFC, 0x43, 0xCA, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x5C, 0xFF, 0xEC, 0x5, 0x14, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x27, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x27, 0x15, 0x21, 0x35, 0x5, 0x14, 0xFE, 0xB5, 0xFE, 0xF0, 0xFE, 0xF6, 0xFE, 0xAD, 0x1, 0x51, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFD, 0xB9, 0xA7, 0xA2, 0xBC, 0xBE, 0xA2, 0xA8, 0xB6, 0x74, 0xFE, 0x40, 0x2, 0xB3, 0xFE, 0xB4, 0xFE, 0x85, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x2, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x89, 0xC3, 0xC3, 0x0, 0x1, 0x0, 0x20, 0x0, 0x0, 0x5, 0x12, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x1, 0x4, 0x2, 0xFE, 0x97, 0xFE, 0x97, 0xFE, 0xF0, 0x1, 0xFE, 0xF6, 0x1, 0xFE, 0x4, 0x44, 0xFB, 0xBC, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x6D, 0x0, 0x0, 0x4, 0x2F, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x13, 0x35, 0x21, 0x15, 0x1, 0x35, 0x21, 0x15, 0x1, 0x35, 0x21, 0x15, 0x79, 0x3, 0x9A, 0xFC, 0xBD, 0x2, 0xF7, 0xFC, 0xA6, 0x3, 0xC2, 0x4, 0xE5, 0xCB, 0xCB, 0xFD, 0xA2, 0xC6, 0xC6, 0xFD, 0x79, 0xCA, 0xCA, 0x0, 0x1, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x15, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x5, 0x15, 0xFD, 0xFD, 0x7F, 0xFC, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0xE5, 0xFB, 0x1B, 0x5, 0xB0, 0x0, 0x1, 0x0, 0x48, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x33, 0x35, 0x1, 0x1, 0x35, 0x21, 0x15, 0x21, 0x1, 0x15, 0x1, 0x21, 0x15, 0x48, 0x1, 0xC9, 0xFE, 0x37, 0x3, 0xE1, 0xFD, 0x6B, 0x1, 0x88, 0xFE, 0x77, 0x2, 0xBA, 0x98, 0x2, 0x42, 0x2, 0x3F, 0x97, 0xCB, 0xFD, 0xFE, 0x13, 0xFD, 0xFB, 0xCB, 0x0, 0x3, 0x0, 0x4A, 0x0, 0x0, 0x5, 0xAF, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x18, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x23, 0x35, 0x26, 0x0, 0x35, 0x34, 0x0, 0x37, 0x35, 0x33, 0x15, 0x16, 0x0, 0x15, 0x14, 0x0, 0x7, 0x1, 0x14, 0x16, 0x17, 0x11, 0x6, 0x6, 0x5, 0x34, 0x26, 0x27, 0x11, 0x36, 0x36, 0x3, 0x7C, 0xFC, 0xFE, 0xFE, 0xC8, 0x1, 0x3C, 0xFA, 0xFC, 0xF9, 0x1, 0x3A, 0xFE, 0xC9, 0xFC, 0xFD, 0xC7, 0xA1, 0x9C, 0x99, 0xA4, 0x3, 0x73, 0xA2, 0x98, 0x9C, 0x9E, 0xA9, 0x7, 0x1, 0x2C, 0xF3, 0xF8, 0x1, 0x33, 0x6, 0xB0, 0xB0, 0x7, 0xFE, 0xD0, 0xF8, 0xF3, 0xFE, 0xD3, 0x8, 0x2, 0x26, 0x9B, 0xB0, 0x6, 0x2, 0xAD, 0x5, 0xB6, 0x9F, 0xA0, 0xB4, 0x6, 0xFD, 0x53, 0x7, 0xB2, 0x0, 0x1, 0x0, 0x44, 0x0, 0x0, 0x5, 0x5D, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x21, 0x23, 0x11, 0x26, 0x0, 0x11, 0x11, 0x33, 0x11, 0x14, 0x16, 0x17, 0x11, 0x33, 0x11, 0x24, 0x13, 0x11, 0x33, 0x11, 0x6, 0x0, 0x7, 0x3, 0x4D, 0xFC, 0xEB, 0xFE, 0xDE, 0xFC, 0x94, 0x7D, 0xFC, 0x1, 0xD, 0x6, 0xFD, 0x3, 0xFE, 0xDE, 0xEB, 0x1, 0x75, 0x17, 0x1, 0x2E, 0x1, 0x6, 0x1, 0xF0, 0xFE, 0x10, 0xA4, 0xBF, 0x19, 0x3, 0x6C, 0xFC, 0x93, 0x2F, 0x1, 0x40, 0x1, 0xFE, 0xFE, 0x6, 0xFF, 0xFE, 0xD8, 0x19, 0x0, 0x1, 0x0, 0x6B, 0x0, 0x0, 0x4, 0xDD, 0x5, 0xC4, 0x0, 0x23, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x26, 0x2, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x11, 0x15, 0x14, 0x2, 0x7, 0x33, 0x15, 0x21, 0x35, 0x36, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x12, 0x17, 0x2, 0x6F, 0xFE, 0x8, 0xD7, 0x66, 0x7D, 0x1, 0x3B, 0xFD, 0xFE, 0x1, 0x3C, 0x7C, 0x65, 0xD3, 0xFE, 0x10, 0x6D, 0x81, 0x2, 0xA0, 0x8C, 0x89, 0xA1, 0x86, 0x70, 0xCC, 0x61, 0x1, 0x21, 0xA0, 0x64, 0x1, 0x15, 0x1, 0x5D, 0xFE, 0xA3, 0xFE, 0xEB, 0x64, 0xA0, 0xFE, 0xE0, 0x62, 0xCC, 0xD0, 0x1D, 0x1, 0x3, 0xEE, 0x76, 0xD0, 0xD4, 0xD4, 0xD0, 0x66, 0xFA, 0xFE, 0xF9, 0x1D, 0x0, 0x2, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x3, 0xFB, 0xA2, 0x35, 0x68, 0xC0, 0xCA, 0xDC, 0xDB, 0xCD, 0xB6, 0x66, 0x14, 0xD0, 0x3, 0x46, 0x10, 0xA, 0x19, 0x33, 0xFD, 0xF3, 0x8C, 0x45, 0x44, 0x8B, 0x84, 0x6E, 0x6D, 0x15, 0xA3, 0xA3, 0x1, 0x28, 0xE7, 0x15, 0xFC, 0x1, 0x43, 0x97, 0x83, 0xFC, 0xFA, 0x7B, 0x4, 0xB3, 0x1F, 0xC3, 0x87, 0x1, 0xCA, 0x8C, 0xE0, 0xB1, 0x8B, 0xC1, 0x0, 0x2, 0x0, 0x96, 0xFE, 0x76, 0x4, 0x6A, 0x5, 0xC4, 0x0, 0x14, 0x0, 0x26, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x34, 0x24, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x11, 0x14, 0x6, 0x2, 0x7D, 0x77, 0x84, 0x75, 0x6F, 0x79, 0x4A, 0x71, 0x62, 0x67, 0x68, 0x5F, 0x81, 0x5A, 0xC4, 0xA6, 0x78, 0xF3, 0x1, 0x14, 0xBF, 0xCD, 0xF5, 0xBB, 0xFA, 0xF9, 0xAF, 0x8C, 0x6A, 0x68, 0x98, 0xB9, 0x74, 0x60, 0x50, 0x7F, 0x7D, 0x65, 0xFC, 0xE1, 0x51, 0xC3, 0x53, 0xFE, 0x37, 0x5, 0xA9, 0xB6, 0xEF, 0xD5, 0xB5, 0xC5, 0x65, 0x5B, 0xFE, 0xF0, 0xD3, 0xE6, 0x0, 0x1, 0x0, 0x21, 0xFE, 0x5F, 0x3, 0xF5, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x0, 0x1, 0x23, 0x11, 0x1, 0x33, 0x13, 0x13, 0x33, 0x1, 0x2, 0x84, 0xF2, 0xFE, 0x8F, 0xFB, 0xF3, 0xEC, 0xFA, 0xFE, 0x8F, 0xFE, 0x5F, 0x1, 0xD1, 0x4, 0xA, 0xFD, 0x4, 0x2, 0xFC, 0xFB, 0xEE, 0x0, 0x2, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0x39, 0x6, 0x21, 0x0, 0x1E, 0x0, 0x2C, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x4, 0x13, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x36, 0x37, 0x27, 0x26, 0x26, 0x13, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x27, 0x22, 0x6, 0x15, 0xD0, 0xD3, 0xB8, 0x4F, 0x75, 0x46, 0x98, 0x68, 0xA8, 0x49, 0x79, 0x1, 0xB1, 0x9, 0xFE, 0xFB, 0xEC, 0xEE, 0xFE, 0xFA, 0xBF, 0x82, 0x2, 0x59, 0x6A, 0x77, 0x7C, 0x85, 0x84, 0x7A, 0x89, 0x75, 0x84, 0x7D, 0x4, 0xEA, 0x92, 0xA5, 0x19, 0x19, 0xC2, 0x34, 0x71, 0x22, 0x54, 0x2B, 0x9A, 0xFE, 0x74, 0x24, 0xE5, 0xFE, 0xCC, 0x1, 0x30, 0xE3, 0x13, 0xAC, 0xFA, 0x20, 0x5, 0x29, 0x89, 0xFD, 0x7C, 0x8E, 0xCF, 0xCF, 0x8E, 0x14, 0x71, 0xD2, 0x17, 0xCF, 0x8B, 0x0, 0x1, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x4, 0x4D, 0x0, 0x26, 0x0, 0x0, 0x1, 0x14, 0x6, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0xD, 0x89, 0xD4, 0x72, 0xCD, 0xFE, 0xF0, 0xCB, 0xB8, 0xFD, 0xCD, 0xB6, 0x1, 0x7, 0xF2, 0x79, 0x59, 0x6D, 0x64, 0x62, 0x68, 0xC7, 0xD2, 0xD1, 0x75, 0x6D, 0x6B, 0x7A, 0x1, 0x41, 0x76, 0x97, 0x48, 0xAC, 0x9A, 0xB9, 0x42, 0x4D, 0x98, 0x9A, 0xA1, 0xAE, 0x98, 0x3E, 0x4D, 0x57, 0x34, 0x3C, 0x4C, 0xAD, 0x4, 0x91, 0x3A, 0x5C, 0x5D, 0x3D, 0x0, 0x1, 0x0, 0x61, 0xFE, 0x7E, 0x3, 0xCA, 0x5, 0xB0, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x27, 0x36, 0x27, 0x36, 0x27, 0x27, 0x26, 0x26, 0x35, 0x10, 0x1, 0x13, 0x21, 0x35, 0x21, 0x15, 0x1, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x17, 0x16, 0x16, 0x7, 0x6, 0x6, 0x2, 0xD8, 0x7E, 0x5E, 0x1, 0x1, 0x82, 0x57, 0xAF, 0x94, 0x1, 0x10, 0xF3, 0xFD, 0xC2, 0x3, 0x69, 0xFE, 0xA3, 0x6B, 0x74, 0x4C, 0x50, 0x65, 0x78, 0x9E, 0x1, 0x1, 0x88, 0xFE, 0x7E, 0x64, 0x67, 0x46, 0x41, 0x24, 0x17, 0x2F, 0xAB, 0x9B, 0x1, 0x14, 0x1, 0x44, 0x1, 0x16, 0xC2, 0x91, 0xFE, 0x5B, 0x7D, 0xD3, 0x92, 0x60, 0x56, 0x17, 0x1D, 0x23, 0x52, 0x7D, 0x53, 0xB9, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x4, 0x6, 0xF3, 0x65, 0x60, 0x98, 0x45, 0xF2, 0xDE, 0xB, 0x76, 0xC3, 0xA1, 0xC3, 0x1, 0xFE, 0x61, 0x4, 0x53, 0x77, 0x60, 0x7B, 0xFC, 0xF0, 0x4, 0x3A, 0x83, 0x97, 0xAF, 0xE4, 0x0, 0x3, 0x0, 0x74, 0xFF, 0xEC, 0x4, 0x2D, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x14, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x3, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x13, 0x5, 0x21, 0x35, 0x10, 0x23, 0x22, 0x3, 0x13, 0x32, 0x13, 0x37, 0x21, 0x15, 0x10, 0x4, 0x2D, 0xFE, 0xFC, 0xD7, 0xD4, 0xFE, 0xF9, 0x3, 0x1, 0x6, 0xD6, 0xD5, 0x1, 0x5, 0x3, 0xFD, 0x3A, 0x1, 0xD3, 0xEA, 0xD9, 0xF, 0xEA, 0xD8, 0xF, 0x1, 0xFE, 0x2D, 0x2, 0x73, 0xFE, 0xB4, 0xFE, 0xC5, 0x1, 0x35, 0x1, 0x43, 0xE0, 0x1, 0x4C, 0x1, 0x34, 0xFE, 0xD2, 0xFE, 0xBD, 0x1B, 0x31, 0x1, 0x98, 0xFE, 0x9E, 0xFD, 0x10, 0x1, 0x6A, 0x61, 0x2A, 0xFE, 0x5F, 0x0, 0x1, 0x0, 0xAA, 0xFF, 0xF4, 0x2, 0x62, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x13, 0x33, 0x3, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0xAA, 0xF3, 0x1, 0x40, 0x31, 0x2A, 0x2B, 0x43, 0x5D, 0x79, 0x9F, 0x4, 0x3A, 0xFC, 0xF8, 0x49, 0x2C, 0xA, 0xBB, 0x18, 0x89, 0xA7, 0x0, 0x1, 0x0, 0x16, 0xFF, 0xEE, 0x4, 0x4A, 0x5, 0xFC, 0x0, 0x17, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x3, 0x3, 0x21, 0x1, 0x27, 0x26, 0x23, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x17, 0x1, 0x16, 0x33, 0x37, 0x17, 0x6, 0x3, 0xEC, 0x65, 0x79, 0x2D, 0xCA, 0xF8, 0xFE, 0xF7, 0x1, 0x82, 0x56, 0x26, 0x53, 0x35, 0x3, 0x31, 0x51, 0x6B, 0x78, 0x1F, 0x1, 0xAC, 0x26, 0x3D, 0x23, 0x3, 0x28, 0x12, 0x51, 0x73, 0x2, 0x18, 0xFD, 0x36, 0x4, 0x11, 0xCC, 0x5B, 0x2, 0xB5, 0x11, 0x55, 0x50, 0xFB, 0xBE, 0x5E, 0x2, 0xC2, 0x9, 0x0, 0x1, 0x0, 0x64, 0xFE, 0x75, 0x3, 0xD5, 0x5, 0xC4, 0x0, 0x2C, 0x0, 0x0, 0x5, 0x6, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x27, 0x2E, 0x2, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x4, 0x11, 0x14, 0x16, 0x17, 0x17, 0x16, 0x16, 0x3, 0xD4, 0x1, 0x88, 0x43, 0x84, 0x30, 0x33, 0x82, 0xBC, 0xD5, 0x70, 0xA3, 0x90, 0x6D, 0x7C, 0x1, 0x8, 0xDD, 0x9A, 0x7B, 0x25, 0x88, 0x58, 0x86, 0x7C, 0x7F, 0x93, 0x93, 0xA2, 0xFE, 0xB3, 0x9A, 0x64, 0x6A, 0x80, 0x96, 0x4D, 0x53, 0xB9, 0x32, 0x64, 0x34, 0x4F, 0x2F, 0x3F, 0x22, 0x31, 0x62, 0xAB, 0x96, 0x92, 0xC3, 0x2E, 0x27, 0x8F, 0x60, 0xAB, 0xC0, 0x2C, 0xBD, 0x24, 0x5F, 0x43, 0x51, 0x66, 0xC7, 0x8, 0xFE, 0xEC, 0x75, 0x7B, 0x18, 0x19, 0x1F, 0x5D, 0x0, 0x1, 0x0, 0x2E, 0xFF, 0xF4, 0x4, 0xCF, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x15, 0x23, 0x3, 0x14, 0x16, 0x33, 0x32, 0x37, 0x4, 0xCF, 0x43, 0x5C, 0x79, 0xA0, 0xFE, 0xB4, 0xF2, 0xAB, 0x4, 0x7C, 0x9F, 0x1, 0x3F, 0x32, 0x29, 0x2B, 0xC, 0x18, 0x89, 0xA7, 0x2, 0x59, 0xFC, 0x83, 0x3, 0x7D, 0xBD, 0xBD, 0xFD, 0xB5, 0x49, 0x2C, 0xA, 0x0, 0x2, 0x0, 0x81, 0xFE, 0x60, 0x4, 0x32, 0x4, 0x4E, 0x0, 0xC, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x34, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x4C, 0x83, 0x70, 0x6C, 0x83, 0x75, 0x68, 0x44, 0xD9, 0xB2, 0x6B, 0xF2, 0x1, 0xA, 0xCC, 0xEC, 0xEF, 0xD7, 0xAF, 0xC0, 0x8B, 0x15, 0x9B, 0xE1, 0xDC, 0x7C, 0xFE, 0xF3, 0x77, 0xC3, 0x78, 0xFD, 0xFC, 0x3, 0xE0, 0xF5, 0x1, 0x19, 0xFE, 0xBD, 0xFD, 0x14, 0xE7, 0xFE, 0xD9, 0x0, 0x1, 0x0, 0x52, 0xFE, 0x8A, 0x3, 0xEA, 0x4, 0x4E, 0x0, 0x20, 0x0, 0x0, 0x1, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x4, 0x16, 0x17, 0x17, 0x6, 0x6, 0x7, 0x27, 0x36, 0x36, 0x27, 0x34, 0x27, 0x26, 0x26, 0x35, 0x35, 0x34, 0x12, 0x2, 0x39, 0xBF, 0xF2, 0xE5, 0x64, 0x68, 0x86, 0x6E, 0x92, 0x1, 0x2E, 0x8B, 0x7, 0x1, 0x1, 0x86, 0x43, 0x7F, 0x30, 0x2D, 0x1, 0x82, 0xE9, 0xEE, 0xFB, 0x4, 0x4E, 0xD6, 0xC1, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0x9A, 0x57, 0x4F, 0x6B, 0x14, 0x53, 0xBA, 0x32, 0x65, 0x34, 0x4D, 0x2F, 0x45, 0x1F, 0x38, 0xFA, 0xD6, 0x24, 0xDE, 0x1, 0x41, 0x0, 0x2, 0x0, 0x53, 0xFF, 0xEC, 0x4, 0x7F, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x21, 0x15, 0x21, 0x16, 0x16, 0x5, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4, 0x2D, 0xFF, 0xEA, 0xED, 0xFE, 0xFC, 0x1, 0x4, 0xEB, 0x2, 0x3D, 0xFE, 0xF5, 0x54, 0x65, 0xFD, 0x19, 0x76, 0x88, 0x83, 0x73, 0x72, 0x85, 0x87, 0x76, 0x1, 0xE9, 0xCD, 0xFE, 0xD0, 0x1, 0x3B, 0xEB, 0x15, 0xE3, 0x1, 0x30, 0xC4, 0x42, 0xC1, 0x61, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x87, 0xC8, 0xC8, 0x87, 0x0, 0x1, 0x0, 0x40, 0xFF, 0xEC, 0x3, 0xED, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3, 0x66, 0x4F, 0x6D, 0x83, 0x95, 0xFE, 0xAE, 0x3, 0xAD, 0xFE, 0x98, 0x35, 0x28, 0x2A, 0x34, 0x19, 0x2D, 0x9A, 0xAB, 0x2, 0x48, 0xC1, 0xC1, 0xFD, 0xB1, 0x47, 0x30, 0x16, 0x0, 0x1, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x26, 0x3, 0x33, 0x16, 0x12, 0x15, 0x14, 0x2, 0x6, 0x23, 0x22, 0x26, 0x27, 0x80, 0xF3, 0x5D, 0x44, 0x7D, 0x85, 0x5, 0x6D, 0xF1, 0x2E, 0x45, 0x67, 0xD9, 0xAA, 0xBD, 0xE0, 0x1, 0x4, 0x3A, 0xFD, 0x6D, 0x89, 0x70, 0xFB, 0x8D, 0xEB, 0x1, 0x19, 0x5C, 0xFE, 0xFD, 0xA5, 0x9E, 0xFE, 0xF4, 0xA1, 0xD4, 0xE6, 0x0, 0x2, 0x0, 0x45, 0xFE, 0x22, 0x5, 0x85, 0x4, 0x41, 0x0, 0x1C, 0x0, 0x25, 0x0, 0x0, 0x1, 0x23, 0x11, 0x2E, 0x2, 0x35, 0x34, 0x12, 0x37, 0x17, 0x6, 0x6, 0x7, 0x14, 0x16, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x7, 0x35, 0x36, 0x36, 0x35, 0x26, 0x26, 0x23, 0x22, 0x15, 0x3, 0x59, 0xF3, 0xC8, 0xEF, 0x6A, 0x7F, 0x71, 0x98, 0x4D, 0x45, 0x4, 0x86, 0xA9, 0x9F, 0x7B, 0x9E, 0xE8, 0x7F, 0x6C, 0xF3, 0xCD, 0xAF, 0x8B, 0x3, 0x82, 0x7E, 0x37, 0xFE, 0x22, 0x1, 0xD0, 0x16, 0xAE, 0xFF, 0x8F, 0xA3, 0x1, 0x8, 0x52, 0x93, 0x4B, 0xC3, 0x5C, 0x87, 0xE2, 0x22, 0x2, 0x84, 0x74, 0x90, 0x96, 0xF5, 0x8F, 0x88, 0xF3, 0xA7, 0x14, 0xC7, 0x1E, 0xD6, 0x7B, 0x8A, 0xCD, 0x3E, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x22, 0x5, 0x7F, 0x4, 0x3A, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x0, 0x11, 0x11, 0x33, 0x11, 0x16, 0x16, 0x17, 0x11, 0x33, 0x11, 0x36, 0x36, 0x35, 0x26, 0x3, 0x33, 0x16, 0x16, 0x15, 0x14, 0x2, 0x6, 0x7, 0x3, 0x52, 0xF3, 0xF3, 0xFE, 0xE4, 0xF3, 0x2, 0x9F, 0x7B, 0xF3, 0xAE, 0x8C, 0x3, 0x71, 0xED, 0x30, 0x4A, 0x6A, 0xF4, 0xCF, 0xFE, 0x22, 0x1, 0xD0, 0x1D, 0x1, 0x25, 0x1, 0x1E, 0x1, 0xE8, 0xFE, 0xC, 0xBA, 0xB8, 0x1A, 0x3, 0x80, 0xFC, 0x7F, 0x20, 0xE3, 0x88, 0xDD, 0x1, 0x19, 0x59, 0xFC, 0xA1, 0x91, 0xFE, 0xFF, 0xAE, 0x14, 0x0, 0x1, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x2, 0x35, 0x34, 0x12, 0x37, 0x33, 0x2, 0x7, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x26, 0x3, 0x33, 0x16, 0x12, 0x15, 0x14, 0x2, 0x6, 0x4, 0x8D, 0xE7, 0x5C, 0x5C, 0xE7, 0x9B, 0xB7, 0x4F, 0x55, 0x39, 0xF1, 0x85, 0x7, 0x51, 0x67, 0x50, 0x6C, 0xFB, 0x1, 0x6B, 0x4F, 0x67, 0x52, 0x7, 0x86, 0xF1, 0x38, 0x56, 0x4F, 0xB6, 0x15, 0xDF, 0xDF, 0xA1, 0x1, 0xC, 0x9E, 0xA5, 0x1, 0x3, 0x5C, 0xFE, 0xE9, 0xED, 0x9A, 0xEE, 0x8A, 0xA9, 0x1, 0x45, 0xFE, 0xB5, 0xA5, 0x88, 0xEC, 0x9C, 0xEF, 0x1, 0x15, 0x5C, 0xFE, 0xFD, 0xA5, 0x9E, 0xFE, 0xF4, 0xA1, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x91, 0x5, 0x18, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x27, 0x37, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x3, 0x72, 0x84, 0xFC, 0xFE, 0x4D, 0xA6, 0xFC, 0xFC, 0x8D, 0x1, 0xAA, 0x1, 0x32, 0xFD, 0xE3, 0x2, 0x3B, 0xFE, 0x91, 0x98, 0xDB, 0x2, 0x72, 0xB0, 0xFE, 0x3A, 0x5, 0xB0, 0xFD, 0x54, 0xAE, 0x1, 0xFE, 0xFD, 0x7C, 0xFC, 0xD4, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEB, 0x4, 0x31, 0x6, 0x15, 0x0, 0x9, 0x0, 0x22, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x16, 0x1, 0x14, 0x0, 0x23, 0x22, 0x2, 0x3, 0x35, 0x10, 0x0, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x6, 0x15, 0x36, 0x33, 0x32, 0x16, 0x25, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x10, 0x2, 0x4F, 0x4A, 0x46, 0x3F, 0x48, 0x90, 0x54, 0x7A, 0x2, 0x43, 0xFE, 0xFF, 0xE8, 0xF8, 0xFC, 0x4, 0x1, 0x20, 0x1, 0x8, 0x97, 0xBB, 0xA8, 0xBB, 0x9C, 0x94, 0x1C, 0x8A, 0xD5, 0xC5, 0xF2, 0xFE, 0x15, 0x67, 0x96, 0x76, 0x82, 0x83, 0x7A, 0x4, 0x98, 0x3A, 0x21, 0x27, 0x40, 0x94, 0x2E, 0xFD, 0x3F, 0xD9, 0xFE, 0xED, 0x1, 0x55, 0x1, 0x56, 0x58, 0x1, 0x6F, 0x1, 0xB8, 0x94, 0x81, 0x67, 0xB1, 0x38, 0x7A, 0x99, 0x97, 0xF2, 0x2F, 0x86, 0x84, 0x85, 0xA4, 0xA4, 0x85, 0x1, 0xA, 0x0, 0x2, 0x0, 0x76, 0xFF, 0xEB, 0x4, 0x99, 0x5, 0xC5, 0x0, 0x9, 0x0, 0x28, 0x0, 0x0, 0x1, 0x14, 0x16, 0x17, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x13, 0x22, 0x0, 0x35, 0x11, 0x37, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x35, 0x26, 0x0, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x37, 0x17, 0x6, 0x7, 0x15, 0x6, 0x6, 0x2, 0x39, 0x77, 0x71, 0x2, 0x6E, 0x34, 0x44, 0x13, 0xD3, 0xFE, 0xFD, 0xEC, 0x81, 0x70, 0xCA, 0x4, 0xD1, 0xFE, 0xFE, 0xCC, 0x9E, 0xA4, 0xBE, 0x76, 0x9, 0x3D, 0x42, 0x1, 0xFE, 0x4, 0x42, 0x68, 0xA4, 0x21, 0x1, 0x3B, 0xA3, 0x49, 0x53, 0xFB, 0x94, 0x1, 0x6, 0xCE, 0x1, 0x24, 0x1, 0xFE, 0xDB, 0x77, 0x91, 0xFE, 0x87, 0x26, 0x1, 0x17, 0xC5, 0x11, 0xB0, 0xC6, 0xCE, 0xBC, 0xFE, 0xCD, 0x16, 0xC6, 0x14, 0xC, 0x7C, 0xD9, 0xF8, 0x0, 0x1, 0xFF, 0xE1, 0x0, 0x0, 0x4, 0x9E, 0x5, 0xC4, 0x0, 0x1A, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x17, 0x13, 0x13, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x1, 0x2, 0xBC, 0xFC, 0xFE, 0xDB, 0x1E, 0x43, 0x28, 0xC, 0x25, 0x43, 0x44, 0x56, 0x86, 0x33, 0xC9, 0xCA, 0x32, 0x7F, 0x5B, 0x48, 0x40, 0x26, 0xC, 0x28, 0x42, 0x1F, 0xFE, 0xD9, 0x2, 0x14, 0x2, 0x94, 0x45, 0x6, 0xC2, 0x1B, 0x54, 0x7D, 0xFE, 0x16, 0x1, 0xE6, 0x77, 0x5E, 0x1B, 0xC2, 0x6, 0x45, 0xFD, 0x69, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x60, 0x5, 0x7F, 0x6, 0x0, 0x0, 0x6, 0x2, 0x8D, 0x0, 0x0, 0x0, 0x2, 0x0, 0x33, 0xFF, 0xEB, 0x6, 0x55, 0x4, 0x3A, 0x0, 0x13, 0x0, 0x28, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x26, 0x27, 0x21, 0x6, 0x7, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x33, 0x15, 0x16, 0x16, 0x1, 0x14, 0x2, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x2, 0x35, 0x34, 0x37, 0x23, 0x35, 0x21, 0x15, 0x23, 0x16, 0x4, 0x7C, 0x58, 0x45, 0x4, 0x3D, 0xFC, 0xC8, 0x3D, 0x4, 0x46, 0x58, 0x52, 0x70, 0xFA, 0x1, 0x71, 0x1, 0xE0, 0x49, 0xAA, 0x92, 0xED, 0x5D, 0x5D, 0xED, 0x91, 0xAB, 0x4A, 0x38, 0x71, 0x6, 0x22, 0x81, 0x37, 0xAE, 0xEC, 0x9C, 0x9A, 0xB4, 0xB4, 0x9A, 0x9A, 0xEE, 0x8A, 0xA9, 0xE1, 0xE8, 0xA4, 0x88, 0x1, 0x88, 0x9E, 0xFE, 0xF4, 0xA1, 0xE2, 0xE2, 0xA1, 0x1, 0xC, 0x9E, 0xAF, 0x9F, 0xB6, 0xB6, 0x9C, 0x0, 0x1, 0x0, 0x23, 0xFE, 0x73, 0x5, 0x2F, 0x4, 0x4E, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x34, 0x26, 0x2, 0x27, 0x1, 0x23, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x1, 0x33, 0x7, 0x16, 0x12, 0x12, 0x16, 0x15, 0x14, 0x6, 0x3, 0xDC, 0x41, 0x3A, 0x16, 0x22, 0xB3, 0x64, 0x5B, 0x13, 0xFE, 0x7, 0xDC, 0x65, 0x5B, 0x47, 0x26, 0x1F, 0x3A, 0x4B, 0xA1, 0x9D, 0x1, 0xE1, 0xE5, 0x80, 0x10, 0x4D, 0x7D, 0x29, 0xA6, 0xFE, 0x73, 0xE, 0xB8, 0x6, 0xA3, 0x6F, 0xBD, 0x1, 0x12, 0x8D, 0xFD, 0x5F, 0x88, 0x2, 0x67, 0x5B, 0x44, 0x7, 0xB6, 0x11, 0xBC, 0xA3, 0xFE, 0xC2, 0x2, 0x89, 0xAA, 0xB5, 0xFE, 0xE6, 0xFE, 0xFA, 0x93, 0x60, 0x8C, 0xC9, 0x0, 0x2, 0x0, 0x66, 0xFE, 0x60, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x10, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x7, 0x13, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x3, 0x42, 0xFD, 0xD7, 0xFE, 0xF8, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFE, 0xFD, 0xDA, 0xE0, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0xA2, 0xA8, 0xB6, 0xFE, 0x60, 0x1, 0x98, 0x2B, 0x1, 0x6D, 0x1, 0x23, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xFE, 0xDC, 0xFE, 0x93, 0x2A, 0x3, 0x6, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x10, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x2, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x2, 0x7, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x2, 0xC1, 0xF3, 0xB6, 0xC8, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xC8, 0xB5, 0xFE, 0x81, 0x7D, 0x89, 0x86, 0x7D, 0x7C, 0x89, 0x87, 0x7D, 0xFE, 0x60, 0x1, 0x99, 0x27, 0x1, 0x27, 0xCB, 0x15, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xCC, 0xFE, 0xDA, 0x27, 0x2, 0x19, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x1, 0x0, 0x66, 0xFE, 0x78, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x20, 0x0, 0x0, 0x1, 0x27, 0x36, 0x35, 0x34, 0x27, 0x25, 0x26, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x5, 0x16, 0x15, 0x14, 0x6, 0x3, 0x3C, 0x1, 0x82, 0x55, 0xFE, 0xCB, 0xC2, 0xFE, 0xF5, 0x1, 0x4A, 0x1, 0xF, 0x1, 0x5, 0x1, 0x12, 0x16, 0xFC, 0xE, 0x7B, 0xA8, 0xB4, 0xA6, 0xA3, 0x7C, 0x1, 0x4F, 0xE8, 0xCE, 0xFE, 0x78, 0xC5, 0x9, 0x4D, 0x40, 0x1B, 0x60, 0x3D, 0x1, 0x20, 0x1, 0x1B, 0x68, 0x1, 0x28, 0x1, 0x6E, 0xFE, 0xE2, 0xD7, 0x7B, 0xAE, 0xFF, 0xC9, 0x6A, 0xBC, 0xBE, 0x2A, 0x71, 0x4E, 0xBC, 0x87, 0x9F, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x7C, 0x4, 0x3, 0x4, 0x4E, 0x0, 0x22, 0x0, 0x0, 0x1, 0x35, 0x32, 0x35, 0x34, 0x27, 0x27, 0x2E, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x2, 0x93, 0x7D, 0x5D, 0xF5, 0x60, 0xA7, 0x67, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x91, 0x66, 0x97, 0x6B, 0xF9, 0x5A, 0x6C, 0xC8, 0xFE, 0x7C, 0xC2, 0x55, 0x46, 0x14, 0x40, 0x1C, 0x67, 0xC2, 0xA3, 0x24, 0xD9, 0x1, 0x3C, 0xE4, 0xB3, 0x57, 0x7D, 0xCF, 0x81, 0x24, 0x96, 0x88, 0x1F, 0x48, 0x1D, 0x70, 0x6D, 0x92, 0x8A, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x31, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x35, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x11, 0x3, 0x11, 0xFE, 0x80, 0xFC, 0x3, 0x9C, 0xFD, 0x60, 0x2, 0x4A, 0x1, 0x95, 0xD4, 0xFD, 0x97, 0x5, 0xB0, 0xCB, 0xFE, 0x4E, 0xFE, 0x62, 0x0, 0x1, 0x0, 0x87, 0xFE, 0x60, 0x3, 0xD3, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x25, 0x35, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x11, 0x2, 0xBA, 0xFE, 0xC0, 0xF3, 0x3, 0x4C, 0xFD, 0xA7, 0x2, 0x2, 0xC4, 0xB8, 0xFC, 0xE4, 0x5, 0xDA, 0xC1, 0xFE, 0xC5, 0xFE, 0x86, 0x0, 0x1, 0x0, 0x23, 0xFF, 0xEB, 0x5, 0x8, 0x5, 0xCE, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x37, 0x13, 0x1, 0x27, 0x13, 0x37, 0x34, 0x23, 0x7, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x3, 0x1, 0x17, 0x3, 0x7, 0x14, 0x33, 0x37, 0x7, 0x6, 0x4, 0xA5, 0xA3, 0xAC, 0x3, 0x2A, 0xFD, 0x4C, 0x21, 0x4A, 0x2, 0xB2, 0x25, 0x11, 0x27, 0x2E, 0xA1, 0xAC, 0x6, 0x20, 0x2, 0xBE, 0x20, 0x5A, 0x3, 0xAC, 0x2B, 0x11, 0x27, 0x15, 0xA9, 0x8D, 0x4F, 0x1, 0xB0, 0xFD, 0xDA, 0x16, 0x3, 0x3D, 0x25, 0xA0, 0x1, 0xB7, 0x6, 0xB0, 0xA1, 0x28, 0x30, 0xFE, 0xAF, 0x2, 0x35, 0x18, 0xFC, 0x80, 0x32, 0x98, 0x2, 0xB8, 0x6, 0x0, 0x1, 0x0, 0x52, 0x0, 0x0, 0x4, 0x14, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x21, 0x13, 0x21, 0x35, 0x1, 0x21, 0x3, 0x21, 0x15, 0x2, 0xF9, 0xFE, 0xF9, 0xFA, 0xFD, 0x66, 0x1, 0x20, 0x1, 0x8, 0xFB, 0x2, 0x95, 0x2, 0x6E, 0x6C, 0x2, 0xD6, 0xFD, 0x81, 0x66, 0x0, 0x1, 0x0, 0x21, 0xFE, 0x4B, 0x5, 0x93, 0x5, 0xC4, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x35, 0x32, 0x12, 0x13, 0x1, 0x27, 0x1, 0x26, 0x27, 0x1, 0x27, 0x1, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x12, 0x24, 0x33, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x2, 0xC0, 0xD6, 0xEE, 0x13, 0xFD, 0xD8, 0x61, 0x2, 0x8D, 0x1, 0x28, 0xFD, 0x2F, 0x61, 0x2, 0xE2, 0x7F, 0xEC, 0xBB, 0xCD, 0x1B, 0xF3, 0x13, 0x95, 0x1, 0x1A, 0xD9, 0x1, 0x60, 0x1, 0x73, 0x4, 0xFE, 0x85, 0xFE, 0x4B, 0xEA, 0x1, 0x2A, 0x1, 0xA, 0xFE, 0xC1, 0xA9, 0x1, 0x7A, 0xB0, 0x89, 0xFE, 0x5E, 0xAA, 0x1, 0xAB, 0xBF, 0xE1, 0xC0, 0x9E, 0x1, 0x1C, 0xB3, 0xFE, 0x1F, 0xFE, 0x6B, 0x7C, 0xFE, 0x64, 0xFE, 0x15, 0x0, 0x1, 0x0, 0x21, 0xFE, 0x4B, 0x5, 0x3F, 0x6, 0x1F, 0x0, 0x12, 0x0, 0x0, 0x1, 0x34, 0x2, 0x27, 0x1, 0x27, 0x1, 0x26, 0x27, 0x1, 0x27, 0x1, 0x2, 0x25, 0x37, 0x4, 0x0, 0x12, 0x11, 0x4, 0x5F, 0x21, 0x28, 0xFD, 0x75, 0x62, 0x2, 0xB3, 0x36, 0x4F, 0xFD, 0x59, 0x61, 0x2, 0x91, 0xEF, 0xFE, 0x30, 0xDF, 0x1, 0xAA, 0x1, 0xD9, 0xBC, 0xFE, 0x4B, 0xE8, 0x1, 0x8A, 0xA8, 0xFE, 0x87, 0xA9, 0x1, 0x90, 0x91, 0x7A, 0xFE, 0x77, 0xA9, 0x1, 0x7C, 0x1, 0xB, 0xCF, 0x79, 0xB7, 0xFE, 0x2, 0xFD, 0x3B, 0xFE, 0x20, 0x0, 0x1, 0x0, 0x23, 0xFF, 0xEC, 0x5, 0x13, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x1, 0x23, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x1, 0x33, 0x7, 0x13, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x4, 0x8E, 0xA0, 0x9E, 0xFE, 0x31, 0xDC, 0x65, 0x5B, 0x47, 0x27, 0x1D, 0x1, 0x3A, 0x4B, 0xA1, 0x9D, 0x1, 0xE1, 0xE5, 0x80, 0x1, 0x5, 0x9D, 0x25, 0x1F, 0x3C, 0x14, 0xBC, 0xA3, 0x1, 0x1F, 0xFD, 0x96, 0x88, 0x2, 0x67, 0x5B, 0x44, 0x7, 0xB6, 0x11, 0xBC, 0xA3, 0xFE, 0xC2, 0x2, 0x89, 0xAB, 0xFD, 0xAF, 0x92, 0x7, 0xB7, 0x10, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x25, 0x4, 0x32, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x27, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x23, 0x34, 0x26, 0x27, 0x26, 0x0, 0x3, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x16, 0x16, 0x17, 0x16, 0x16, 0x2, 0x40, 0x89, 0x76, 0x76, 0x87, 0x88, 0x77, 0x76, 0x2, 0x24, 0xC4, 0x5B, 0x85, 0xDB, 0xFE, 0xF3, 0x1, 0x1, 0x4, 0xEE, 0xED, 0x1, 0x3, 0xEC, 0xD7, 0xC7, 0x8D, 0x1D, 0xB1, 0x80, 0xAF, 0xC5, 0xFE, 0xB6, 0x79, 0x15, 0x86, 0xC3, 0xC3, 0x86, 0x15, 0x79, 0xB6, 0xFD, 0x27, 0x3D, 0x39, 0x1C, 0x2E, 0x1, 0x7C, 0x1, 0x7D, 0x4F, 0xEA, 0x1, 0x37, 0xFE, 0xD4, 0xE0, 0x15, 0xD6, 0xFE, 0xE4, 0x96, 0xA4, 0x97, 0x1B, 0x25, 0x7C, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xF9, 0x3, 0x6D, 0x4, 0x41, 0x0, 0x15, 0x0, 0x0, 0x25, 0x15, 0x21, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x37, 0x21, 0x15, 0x21, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x3, 0x6D, 0xFE, 0xD0, 0xF9, 0xF4, 0xF2, 0xF3, 0x1, 0x37, 0xFE, 0xD3, 0x80, 0x6E, 0xA, 0x1, 0x7B, 0xFE, 0x84, 0xB, 0x6D, 0x7F, 0xBC, 0xC3, 0x1, 0x33, 0xDF, 0x24, 0xDC, 0x1, 0x34, 0x2, 0xC3, 0x9B, 0x6B, 0xB6, 0x6B, 0x9B, 0x0, 0x1, 0x0, 0x28, 0xFF, 0xF9, 0x3, 0x45, 0x4, 0x41, 0x0, 0x15, 0x0, 0x0, 0x17, 0x35, 0x21, 0x32, 0x36, 0x37, 0x21, 0x35, 0x21, 0x26, 0x26, 0x23, 0x21, 0x35, 0x21, 0x16, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x28, 0x1, 0x30, 0x7F, 0x6D, 0xB, 0xFE, 0x84, 0x1, 0x7B, 0xA, 0x6E, 0x80, 0xFE, 0xD3, 0x1, 0x33, 0xF5, 0xF3, 0x1, 0xF4, 0xF9, 0x7, 0xC3, 0x9B, 0x6B, 0xB6, 0x6B, 0x9B, 0xC3, 0x1, 0xFE, 0xCE, 0xDC, 0x27, 0xDF, 0xFE, 0xCD, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x5, 0x5D, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x1, 0x2, 0x9A, 0xFE, 0xD5, 0xF2, 0x1, 0x32, 0x1, 0x3E, 0x1, 0x40, 0x1, 0x30, 0xF3, 0xFE, 0xD5, 0x2, 0xD2, 0xFB, 0x8E, 0x5, 0xDA, 0xFC, 0xF1, 0x3, 0xF, 0xFB, 0xC6, 0x2, 0xCD, 0xFD, 0x33, 0xFF, 0xFF, 0x0, 0x14, 0xFE, 0x60, 0x4, 0x81, 0x4, 0x4E, 0x0, 0x26, 0x2, 0x46, 0x4F, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFC, 0x6A, 0x0, 0x1, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0xD3, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x21, 0x20, 0x0, 0x4D, 0xFC, 0x11, 0x86, 0x9D, 0xAB, 0xAC, 0x1, 0x9C, 0xB1, 0xA3, 0x89, 0x12, 0xFC, 0x14, 0x1, 0x1A, 0x1, 0xC, 0x1, 0xA, 0x1, 0x3D, 0x4, 0xFE, 0xBD, 0xFE, 0xED, 0xFE, 0xFA, 0xFE, 0xEC, 0x1, 0xE1, 0x8B, 0x9E, 0xFB, 0xE4, 0x7D, 0xDA, 0x1, 0xA, 0x96, 0x8C, 0xD4, 0x1, 0x1A, 0xFE, 0x92, 0xFE, 0xCD, 0x85, 0xFE, 0xC5, 0xFE, 0x89, 0x1, 0x1B, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x25, 0x0, 0x0, 0x1, 0x33, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x3, 0xEF, 0xFC, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x13, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x87, 0x9C, 0xAB, 0xAC, 0x1, 0x9B, 0xB1, 0xA3, 0x89, 0xFE, 0x4C, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xFA, 0xE4, 0x7D, 0xDA, 0xFE, 0xF5, 0x97, 0x1, 0x88, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0xD3, 0x5, 0xC4, 0x0, 0x9, 0x0, 0x25, 0x0, 0x0, 0x0, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x5, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x21, 0x20, 0x0, 0x2, 0x2C, 0x49, 0x49, 0x82, 0x49, 0x49, 0xFD, 0x9F, 0xFC, 0x11, 0x86, 0x9D, 0xAB, 0xAC, 0x1, 0x9C, 0xB1, 0xA3, 0x89, 0x12, 0xFC, 0x14, 0x1, 0x1A, 0x1, 0xC, 0x1, 0xA, 0x1, 0x3D, 0x4, 0xFE, 0xBD, 0xFE, 0xED, 0xFE, 0xFA, 0xFE, 0xEC, 0x2, 0x5C, 0x47, 0x34, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x7B, 0x8B, 0x9E, 0xFB, 0xE4, 0x7D, 0xDA, 0x1, 0xA, 0x96, 0x8C, 0xD4, 0x1, 0x1A, 0xFE, 0x92, 0xFE, 0xCD, 0x85, 0xFE, 0xC5, 0xFE, 0x89, 0x1, 0x1B, 0x0, 0x1, 0x0, 0x23, 0xFF, 0xF1, 0x5, 0xBC, 0x5, 0xB0, 0x0, 0x19, 0x0, 0x0, 0x1, 0x14, 0x2, 0x21, 0x27, 0x32, 0x36, 0x35, 0x26, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x4, 0x5, 0xBC, 0xF8, 0xFE, 0xE9, 0x2, 0xAB, 0x6A, 0x1, 0x8F, 0x8E, 0x85, 0x7A, 0xFC, 0xFE, 0x7C, 0x4, 0x6E, 0xFE, 0x12, 0x94, 0x72, 0xF5, 0x1, 0x1E, 0x1, 0xB7, 0xC1, 0xFE, 0xFB, 0xC1, 0x98, 0x64, 0x77, 0x88, 0x20, 0xFD, 0x73, 0x4, 0xE5, 0xCB, 0xCB, 0xFE, 0x73, 0x26, 0xE8, 0x0, 0x1, 0x0, 0x69, 0xFF, 0xEC, 0x4, 0xEF, 0x5, 0xC4, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0xEF, 0x14, 0xFE, 0xE4, 0xFE, 0xF5, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x43, 0x1, 0x14, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x86, 0x9D, 0xA4, 0xAC, 0x9, 0x1, 0xFA, 0xFE, 0x6, 0x6, 0x9E, 0xA9, 0xA3, 0x89, 0x11, 0x1, 0xDA, 0xD5, 0xFE, 0xE7, 0x1, 0x75, 0x1, 0x3B, 0x75, 0x1, 0x3C, 0x1, 0x77, 0xFE, 0xE5, 0xDA, 0x8B, 0x9F, 0xE6, 0xD1, 0xCB, 0xCA, 0xF7, 0x98, 0x8C, 0x0, 0x2, 0x0, 0x2D, 0x0, 0x0, 0x8, 0x41, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x1E, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x11, 0x21, 0x16, 0x0, 0x15, 0x14, 0x0, 0x23, 0x21, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x2D, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x3, 0xAC, 0x1, 0x30, 0xF3, 0x1, 0x10, 0xFE, 0xED, 0xF8, 0xFD, 0xDB, 0xFE, 0x43, 0x1B, 0x16, 0xC5, 0xE7, 0x4, 0x97, 0x1, 0x28, 0x8D, 0x83, 0x83, 0x8D, 0xFE, 0xD8, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xFD, 0xF1, 0x2, 0xFE, 0xFA, 0xC9, 0xC8, 0xFE, 0xF8, 0x4, 0xE5, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0xCA, 0xA3, 0xCA, 0x9F, 0x0, 0x2, 0x0, 0x9B, 0x0, 0x0, 0x8, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x3, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x0, 0x23, 0x5, 0x14, 0x1, 0x29, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD7, 0xFC, 0xFD, 0x7F, 0xFC, 0xFC, 0x2, 0x81, 0xFC, 0x1, 0x34, 0xF3, 0x1, 0xC, 0xFE, 0xEE, 0xF8, 0xD0, 0x96, 0x61, 0x5F, 0x93, 0xFD, 0x47, 0x2, 0x7B, 0xFD, 0x85, 0x5, 0xB0, 0xFD, 0x95, 0x2, 0x6B, 0xFD, 0xD3, 0x3, 0xF9, 0xC2, 0xC4, 0xFE, 0xFF, 0x0, 0x1, 0x0, 0x31, 0x0, 0x0, 0x5, 0xC8, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x3, 0xB6, 0x84, 0x8E, 0xFD, 0xFE, 0x8A, 0x4, 0x62, 0xFE, 0x11, 0x87, 0x8B, 0xF5, 0x1, 0x1D, 0xFC, 0x8A, 0x2, 0xD0, 0x1C, 0xFD, 0x4C, 0x4, 0xE5, 0xCB, 0xCB, 0xFE, 0x9B, 0x1B, 0xDA, 0xF9, 0xFE, 0x38, 0x1, 0xC8, 0x9B, 0x6D, 0x0, 0x1, 0x0, 0x93, 0xFE, 0x98, 0x5, 0xD, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x5, 0xD, 0xFE, 0x4B, 0xFC, 0xFE, 0x37, 0xFC, 0x2, 0x81, 0xFD, 0xFE, 0x98, 0x1, 0x68, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0x0, 0x2, 0x0, 0x90, 0x0, 0x0, 0x4, 0xC2, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x14, 0x0, 0x0, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x3, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x1, 0x8E, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0xFE, 0x3, 0x9D, 0xFD, 0x61, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFE, 0xEC, 0xF8, 0xCA, 0x99, 0xCA, 0x8B, 0xFD, 0x48, 0x5, 0xB0, 0xCB, 0xFE, 0x9E, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0x0, 0x2, 0x0, 0x24, 0xFE, 0x9A, 0x5, 0xDC, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x14, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x1, 0x11, 0x21, 0x11, 0x23, 0x3, 0x33, 0x36, 0x12, 0x13, 0x13, 0x21, 0x11, 0x33, 0x3, 0x1, 0xB7, 0x2, 0x70, 0xFE, 0x57, 0x18, 0x1D, 0x2, 0x96, 0xFC, 0x41, 0xF3, 0x9, 0x76, 0x36, 0x84, 0x14, 0x26, 0x3, 0x96, 0xB8, 0xD, 0xCA, 0x4, 0x1B, 0xFE, 0x55, 0xFE, 0x6F, 0xFC, 0xF1, 0x1, 0x66, 0xFE, 0x9A, 0x2, 0x30, 0x34, 0x1, 0x19, 0x1, 0x27, 0x2, 0x72, 0xFB, 0x1A, 0xFD, 0xD0, 0x0, 0x1, 0x0, 0x17, 0x0, 0x0, 0x7, 0x9C, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x21, 0x11, 0x23, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x11, 0x3, 0x61, 0xAB, 0xFE, 0x9B, 0xFE, 0xC6, 0x1, 0xD4, 0xFE, 0x4B, 0x1, 0x32, 0x1, 0x5C, 0x9D, 0xFB, 0x97, 0x1, 0x58, 0x1, 0x32, 0xFE, 0x4E, 0x1, 0xD1, 0xFE, 0xC6, 0xFE, 0x9E, 0xA4, 0x2, 0x74, 0xFD, 0x8C, 0x3, 0x8, 0x2, 0xA8, 0xFD, 0xA1, 0x2, 0x5F, 0xFD, 0xA1, 0x2, 0x5F, 0xFD, 0x59, 0xFC, 0xF7, 0x2, 0x74, 0xFD, 0x8C, 0x0, 0x1, 0x0, 0x49, 0xFF, 0xEC, 0x4, 0x7F, 0x5, 0xC4, 0x0, 0x27, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x25, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x14, 0x4, 0x2, 0x5A, 0x81, 0xF3, 0x9D, 0xFD, 0x98, 0x7C, 0x8E, 0x9A, 0xFE, 0xF6, 0xB9, 0xAB, 0x8A, 0x78, 0x83, 0x8F, 0x6C, 0x94, 0xFC, 0x1, 0x2D, 0xCF, 0xF0, 0x1, 0x1F, 0x79, 0x6B, 0xFA, 0xFE, 0xCB, 0x14, 0x58, 0xBB, 0x95, 0x5B, 0x83, 0x81, 0x61, 0xE5, 0x6, 0xC7, 0x79, 0x61, 0x56, 0x7F, 0x72, 0x5B, 0xBE, 0xDA, 0xD3, 0xCC, 0x63, 0xA6, 0x30, 0x57, 0xFD, 0xCD, 0xDF, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x33, 0x11, 0x23, 0x11, 0x1, 0x23, 0x11, 0x33, 0x1, 0x91, 0x2, 0x80, 0xFC, 0xFC, 0xFD, 0x80, 0xFC, 0xFC, 0x1, 0xA3, 0x4, 0xD, 0xFA, 0x50, 0x4, 0xE, 0xFB, 0xF2, 0x5, 0xB0, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x5, 0xE, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x2D, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x3, 0xAC, 0xFD, 0xFE, 0x43, 0x1B, 0x16, 0xC5, 0xE7, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xFA, 0x50, 0x4, 0xE5, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0x0, 0x1, 0x0, 0x3A, 0xFF, 0xEB, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x5, 0x27, 0x37, 0x17, 0x32, 0x36, 0x37, 0x37, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x6, 0x6, 0x1, 0x70, 0x67, 0x1, 0x55, 0x47, 0x45, 0x27, 0x19, 0xFE, 0xF, 0x1, 0x14, 0x1, 0x53, 0x1, 0x24, 0x1, 0x19, 0xFE, 0xA, 0x31, 0x99, 0x15, 0x6, 0xC8, 0x4, 0x3B, 0x60, 0x3E, 0x4, 0x22, 0xFD, 0x9, 0x2, 0xF7, 0xFB, 0x57, 0x71, 0xAB, 0x0, 0x3, 0x0, 0x4F, 0xFF, 0xC4, 0x6, 0x19, 0x5, 0xEC, 0x0, 0x8, 0x0, 0x11, 0x0, 0x27, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x15, 0x23, 0x35, 0x23, 0x26, 0x0, 0x11, 0x10, 0x0, 0x33, 0x33, 0x35, 0x33, 0x15, 0x33, 0x16, 0x0, 0x11, 0x10, 0x0, 0x7, 0x2, 0xBC, 0x18, 0xA8, 0xBD, 0xBE, 0xA7, 0x1, 0xB, 0x18, 0xA6, 0xBC, 0xBC, 0xA6, 0x18, 0xF3, 0x1E, 0xFC, 0xFE, 0xAD, 0x1, 0x58, 0xFD, 0x18, 0xF3, 0x1C, 0xFB, 0x1, 0x53, 0xFE, 0xAC, 0xFA, 0x1, 0x4D, 0x3, 0xF, 0xD1, 0xBB, 0xB7, 0xCC, 0x3, 0xF, 0xFC, 0xF1, 0xCF, 0xB6, 0xBA, 0xD0, 0xFC, 0x27, 0xBF, 0xBF, 0x2, 0x1, 0x44, 0x1, 0x7, 0x1, 0xD, 0x1, 0x49, 0xC6, 0xC6, 0x2, 0xFE, 0xB9, 0xFE, 0xF5, 0xFE, 0xF8, 0xFE, 0xBB, 0x2, 0x0, 0x1, 0x0, 0x93, 0xFE, 0xA1, 0x5, 0xBD, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x5, 0xA9, 0xE7, 0xFB, 0xD1, 0xFC, 0x2, 0x81, 0xFD, 0xB0, 0xFE, 0xA1, 0x1, 0x5F, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1D, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0xEF, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x4, 0xEF, 0xFD, 0x9E, 0xB4, 0xF5, 0xFE, 0xE3, 0xFD, 0x1, 0x89, 0x8B, 0xA9, 0xA9, 0xFD, 0x2, 0x3E, 0x29, 0xD9, 0xF9, 0x1, 0xC9, 0xFE, 0x32, 0x96, 0x6C, 0x29, 0x2, 0xA7, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x7, 0x4, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x99, 0xFD, 0x1, 0xBD, 0xFB, 0x1, 0xBA, 0xFC, 0xF9, 0x95, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1A, 0x4, 0xE6, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xA1, 0x7, 0xAD, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x7, 0x99, 0xDD, 0xF9, 0xDD, 0xFD, 0x1, 0xBD, 0xFB, 0x1, 0xBA, 0xFC, 0xA9, 0xFE, 0xA1, 0x1, 0x5F, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x13, 0x0, 0x2, 0x0, 0x18, 0x0, 0x0, 0x5, 0xD4, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x14, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x1, 0xA3, 0xFE, 0x75, 0x2, 0x88, 0x1, 0x2D, 0xF6, 0x1, 0x11, 0xFE, 0xED, 0xF8, 0xFE, 0xD7, 0x1, 0x29, 0x8C, 0x83, 0x83, 0x8C, 0xFE, 0xD7, 0x4, 0xED, 0xC3, 0xFD, 0xD3, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x3, 0x0, 0x9C, 0x0, 0x0, 0x6, 0x59, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xE, 0x0, 0x16, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x11, 0x33, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x6, 0x59, 0xFC, 0xFB, 0x3F, 0xFD, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFE, 0xEC, 0xF8, 0xFE, 0xD8, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x5, 0xB0, 0xFA, 0x50, 0x5, 0xB0, 0xFA, 0x50, 0x5, 0xB0, 0xFD, 0xD3, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x2, 0x0, 0x91, 0x0, 0x0, 0x4, 0xC2, 0x5, 0xB0, 0x0, 0xA, 0x0, 0x12, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x91, 0xFD, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFE, 0xEC, 0xF8, 0xFE, 0xD8, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x5, 0xB0, 0xFD, 0xD3, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x1, 0x0, 0x6B, 0xFF, 0xEC, 0x4, 0xF1, 0x5, 0xC4, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x20, 0x0, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x21, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x2, 0xA6, 0xFE, 0xF5, 0xFE, 0xE5, 0x14, 0xFC, 0x12, 0x89, 0xA3, 0xA8, 0x9F, 0x7, 0xFD, 0xFE, 0x2, 0x2, 0x7, 0xAE, 0xA4, 0x9D, 0x86, 0x11, 0xFC, 0x17, 0x1, 0x13, 0x1, 0x6, 0x1, 0x10, 0x1, 0x42, 0x4, 0xFE, 0xC2, 0x14, 0x1, 0x19, 0xD5, 0x8C, 0x98, 0xF3, 0xC8, 0xCB, 0xD4, 0xE9, 0x9F, 0x8B, 0xDA, 0x1, 0x1B, 0xFE, 0x91, 0xFE, 0xCB, 0x84, 0xFE, 0xC5, 0xFE, 0x8B, 0x0, 0x2, 0x0, 0xA0, 0xFF, 0xEC, 0x7, 0x8, 0x5, 0xC4, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x0, 0x3, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x12, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x13, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x4, 0xAD, 0xF9, 0xFE, 0xB5, 0x17, 0xB6, 0xFC, 0xFC, 0xB4, 0xA, 0x1, 0x4E, 0x1, 0x3, 0x1, 0x10, 0x1, 0x4D, 0xFE, 0xB5, 0x4E, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0xA2, 0xA8, 0xB6, 0x14, 0x1, 0x4C, 0x1, 0x26, 0xFD, 0xA2, 0x5, 0xB0, 0xFD, 0x71, 0x1, 0x3C, 0x1, 0x67, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xFE, 0xB4, 0xFE, 0x85, 0x3, 0x12, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x2, 0x0, 0x21, 0x0, 0x0, 0x4, 0x5F, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x13, 0x11, 0x21, 0x1, 0x21, 0x1, 0x26, 0x11, 0x34, 0x24, 0x33, 0x21, 0x11, 0x3, 0x63, 0xEC, 0x8B, 0x88, 0x8A, 0x89, 0xEC, 0xFE, 0xE6, 0xFE, 0xE7, 0xFE, 0xF1, 0x1, 0x45, 0xFE, 0x1, 0x1B, 0xF4, 0x1, 0xE8, 0x2, 0xE4, 0x2, 0x1, 0x87, 0x75, 0x7A, 0x8B, 0xFD, 0x1C, 0x2, 0x21, 0xFD, 0xDF, 0x2, 0x6C, 0x77, 0x1, 0x11, 0xD8, 0xE4, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x5C, 0xFF, 0xEB, 0x4, 0x3D, 0x6, 0x13, 0x0, 0x19, 0x0, 0x27, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x35, 0x10, 0x0, 0x37, 0x36, 0x36, 0x35, 0x33, 0x14, 0x6, 0x7, 0x6, 0x6, 0x7, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x0, 0x3, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x2, 0x4D, 0xEC, 0xFE, 0xFE, 0x3, 0x1, 0xA, 0xDA, 0x71, 0x73, 0xC5, 0xC8, 0xAE, 0x7E, 0xB1, 0x1E, 0x90, 0xC4, 0xD8, 0xEB, 0xFE, 0xFD, 0xEF, 0x87, 0x76, 0x77, 0x88, 0x87, 0x76, 0x76, 0x15, 0x1, 0x31, 0xE6, 0x57, 0x1, 0x7D, 0x1, 0x7C, 0x2E, 0x18, 0x36, 0x45, 0xB5, 0x7C, 0x25, 0x1B, 0x96, 0xA4, 0x96, 0xFE, 0xE4, 0xD6, 0x15, 0xE0, 0xFE, 0xD4, 0x3, 0x50, 0xB5, 0x7A, 0x15, 0x86, 0xC3, 0xC3, 0x86, 0x15, 0x7A, 0xB5, 0x0, 0x3, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x3B, 0x4, 0x3A, 0x0, 0x6, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x15, 0x33, 0x32, 0x35, 0x34, 0x27, 0x3, 0x11, 0x21, 0x32, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x82, 0xC9, 0xCF, 0xCA, 0xCE, 0x1, 0xA, 0xBC, 0xB4, 0xFD, 0xFB, 0x1, 0xB8, 0xD1, 0xF4, 0xB7, 0x73, 0x73, 0xE3, 0xCC, 0x3, 0x79, 0xFE, 0x7B, 0x80, 0x3, 0xFE, 0x54, 0xFE, 0xF4, 0x85, 0x84, 0x3, 0xFE, 0x33, 0x4, 0x3A, 0x92, 0x9A, 0x9F, 0x42, 0x19, 0x89, 0x56, 0x9A, 0x9B, 0x0, 0x1, 0x0, 0x85, 0x0, 0x0, 0x3, 0x4D, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x21, 0x11, 0x23, 0x11, 0x3, 0x4D, 0xFE, 0x2B, 0xF3, 0x4, 0x3A, 0xC4, 0xFC, 0x8A, 0x4, 0x3A, 0x0, 0x2, 0x0, 0x27, 0xFE, 0xBE, 0x4, 0xC6, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x14, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x7, 0x2, 0x3, 0x11, 0x23, 0x13, 0x33, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x1, 0x9F, 0x1, 0x9E, 0xFE, 0xEF, 0x5, 0xC, 0xFD, 0xF7, 0x1, 0x59, 0x54, 0x58, 0x7, 0xC, 0x2, 0xF0, 0x96, 0xF3, 0xC3, 0x2, 0xA6, 0xB6, 0xFE, 0xC5, 0xFE, 0x88, 0xFE, 0xBE, 0x2, 0x5, 0x5E, 0xC9, 0xCD, 0x1, 0x83, 0xFC, 0x89, 0xFD, 0xFB, 0x1, 0x42, 0x0, 0x1, 0x0, 0x1E, 0x0, 0x0, 0x6, 0x5C, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x21, 0x11, 0x23, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x33, 0x11, 0x33, 0x11, 0x33, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x23, 0x11, 0x2, 0xC2, 0x80, 0xFA, 0xFE, 0xD6, 0x1, 0x68, 0xFE, 0xAB, 0x1, 0x29, 0xF6, 0x72, 0xF2, 0x74, 0xF5, 0x1, 0x29, 0xFE, 0xAE, 0x1, 0x68, 0xFE, 0xD2, 0xF9, 0x81, 0x1, 0xB3, 0xFE, 0x4D, 0x2, 0x33, 0x2, 0x7, 0xFE, 0x58, 0x1, 0xA8, 0xFE, 0x58, 0x1, 0xA8, 0xFD, 0xFD, 0xFD, 0xC9, 0x1, 0xB3, 0xFE, 0x4D, 0x0, 0x1, 0x0, 0x4E, 0xFF, 0xEC, 0x3, 0xC4, 0x4, 0x4D, 0x0, 0x25, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x2, 0x8, 0x6D, 0xCB, 0x82, 0xF2, 0x6E, 0x61, 0x64, 0x5E, 0xB7, 0xB3, 0xBB, 0x9C, 0x4D, 0x62, 0x52, 0x6C, 0xF2, 0xFA, 0xAF, 0xC4, 0xE5, 0xA6, 0xB9, 0xF7, 0x14, 0x48, 0x97, 0x76, 0x3D, 0x5E, 0x5D, 0x3A, 0x92, 0x2, 0xB0, 0x4, 0x82, 0x34, 0x57, 0x4D, 0x3E, 0x98, 0xAE, 0xA1, 0x9A, 0x99, 0x4C, 0x41, 0xBA, 0x9A, 0xAC, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x33, 0x11, 0x23, 0x11, 0x1, 0x23, 0x11, 0x33, 0x1, 0x79, 0x1, 0xA7, 0xF3, 0xF3, 0xFE, 0x59, 0xF3, 0xF3, 0x1, 0x68, 0x2, 0xD2, 0xFB, 0xC6, 0x2, 0xD2, 0xFD, 0x2E, 0x4, 0x3A, 0x0, 0x1, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x65, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x2A, 0xFE, 0xD3, 0x7B, 0xF3, 0xF3, 0x6C, 0x1, 0x2A, 0x1, 0x2D, 0xFE, 0x78, 0x1, 0xA8, 0x1, 0xAD, 0xFE, 0x53, 0x4, 0x3A, 0xFE, 0x51, 0x1, 0xAF, 0xFD, 0xFA, 0xFD, 0xCC, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x4, 0x14, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x33, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x23, 0x1, 0x27, 0x5F, 0x44, 0xA, 0x14, 0x3, 0xA, 0xF3, 0xFE, 0xCF, 0x15, 0x13, 0xAA, 0xAC, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xFB, 0xC6, 0x3, 0x76, 0xFE, 0x8B, 0xFE, 0xEB, 0xEA, 0x2, 0x0, 0x1, 0x0, 0x8F, 0x0, 0x0, 0x5, 0x6F, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x1, 0x2, 0xAD, 0xFE, 0xD5, 0xF3, 0x1, 0x33, 0x1, 0x3D, 0x1, 0x41, 0x1, 0x2F, 0xF2, 0xFE, 0xD5, 0x2, 0xD2, 0xFD, 0x2E, 0x4, 0x3A, 0xFC, 0xF1, 0x3, 0xF, 0xFB, 0xC6, 0x2, 0xCF, 0xFD, 0x31, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x4, 0x11, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x3, 0x1E, 0xFE, 0x5B, 0xF3, 0xF3, 0x1, 0xA5, 0xF3, 0x1, 0xB5, 0xFE, 0x4B, 0x4, 0x3A, 0xFE, 0x3D, 0x1, 0xC3, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0x20, 0xFE, 0x59, 0xF3, 0x3, 0x8D, 0x3, 0x76, 0xFC, 0x8A, 0x4, 0x3A, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x24, 0x0, 0x0, 0x3, 0xD1, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x3, 0xD1, 0xFE, 0xA0, 0xF3, 0xFE, 0xA6, 0x3, 0xAD, 0x3, 0x79, 0xFC, 0x87, 0x3, 0x79, 0xC1, 0x0, 0x3, 0x0, 0x54, 0xFE, 0x60, 0x5, 0x7F, 0x6, 0x0, 0x0, 0xA, 0x0, 0x15, 0x0, 0x31, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x5, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x2, 0x1D, 0x2B, 0x22, 0x21, 0x2A, 0x79, 0x5F, 0x5D, 0x2, 0xC, 0x78, 0x64, 0x65, 0x79, 0x2D, 0x24, 0x24, 0x73, 0x55, 0x42, 0xF3, 0x3D, 0x4E, 0xC1, 0xCA, 0xC9, 0xC4, 0x4C, 0x3D, 0xF3, 0x41, 0x54, 0xC3, 0xC9, 0x1, 0xC9, 0xAF, 0xA, 0x2, 0xC8, 0xA, 0xE0, 0xB1, 0x8B, 0xC0, 0x1, 0xC0, 0xA1, 0x9B, 0xE1, 0xC, 0xFD, 0x39, 0xA, 0xC3, 0x1E, 0xFE, 0x57, 0x1, 0xA6, 0x1B, 0x1, 0x28, 0xE7, 0x15, 0xFC, 0x1, 0x43, 0x1B, 0x1, 0xCD, 0xFE, 0x2F, 0x1F, 0xFE, 0xC0, 0xFA, 0x1A, 0xE7, 0xFE, 0xD8, 0x0, 0x1, 0x0, 0x86, 0xFE, 0xBF, 0x4, 0xA6, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x4, 0x92, 0xDE, 0xFC, 0xD2, 0xF3, 0x1, 0xA7, 0xF3, 0x93, 0xFE, 0xBF, 0x1, 0x41, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x88, 0x0, 0x1, 0x0, 0x5F, 0x0, 0x0, 0x3, 0xE1, 0x4, 0x3B, 0x0, 0x11, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x3, 0xE1, 0xF3, 0x64, 0x63, 0xD1, 0xF7, 0xF3, 0x6B, 0x6A, 0x65, 0x62, 0xF3, 0x1, 0x6A, 0x16, 0xC9, 0xD2, 0x1, 0x4C, 0xFE, 0xB4, 0x76, 0x62, 0x17, 0x2, 0xC, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x6, 0x4, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x86, 0xF3, 0x1, 0x53, 0xF3, 0x1, 0x52, 0xF3, 0xFA, 0x82, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x89, 0x3, 0x77, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0xBF, 0x6, 0xB5, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x6, 0xA1, 0xDD, 0xFA, 0xBB, 0xF2, 0x1, 0x53, 0xF3, 0x1, 0x52, 0xF3, 0xB9, 0xFE, 0xBF, 0x1, 0x41, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x88, 0x0, 0x2, 0x0, 0x1F, 0x0, 0x0, 0x4, 0xEB, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x14, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x23, 0x1, 0x58, 0xFE, 0xC7, 0x2, 0x2C, 0xF1, 0xCF, 0xE0, 0xE2, 0xD1, 0xED, 0xED, 0x69, 0x57, 0x57, 0x69, 0xED, 0x3, 0x77, 0xC3, 0xFE, 0xA8, 0x1, 0xCE, 0xA1, 0x9D, 0xD5, 0xC2, 0x6A, 0x84, 0x70, 0x0, 0x3, 0x0, 0x8F, 0x0, 0x0, 0x5, 0xCA, 0x4, 0x3A, 0x0, 0x3, 0x0, 0xE, 0x0, 0x16, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x23, 0x5, 0xCA, 0xF3, 0xFB, 0xB8, 0xF4, 0xF1, 0xCF, 0xE0, 0xE2, 0xD1, 0xED, 0xED, 0x69, 0x57, 0x57, 0x69, 0xED, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0xFE, 0xA8, 0x1, 0xCE, 0xA1, 0x9D, 0xD5, 0xC2, 0x6A, 0x84, 0x70, 0x0, 0x2, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x23, 0x4, 0x3A, 0x0, 0xA, 0x0, 0x12, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x23, 0x8F, 0xF4, 0xF1, 0xCF, 0xE0, 0xE2, 0xD1, 0xED, 0xED, 0x69, 0x57, 0x57, 0x69, 0xED, 0x4, 0x3A, 0xFE, 0xA8, 0x1, 0xCE, 0xA1, 0x9D, 0xD5, 0xC2, 0x6A, 0x84, 0x70, 0x0, 0x1, 0x0, 0x52, 0xFF, 0xEB, 0x3, 0xE9, 0x4, 0x4E, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x21, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x2, 0xBE, 0xF2, 0xE5, 0x70, 0x5B, 0x77, 0x70, 0xA, 0xFE, 0xAB, 0x1, 0x54, 0xC, 0x70, 0x74, 0x53, 0x78, 0xE5, 0x1, 0x1, 0xAF, 0xED, 0xFA, 0xFB, 0x15, 0xE5, 0xB3, 0x57, 0x7E, 0xB1, 0x72, 0xA8, 0x6E, 0xA4, 0x67, 0x50, 0x9D, 0xDD, 0xFE, 0xBF, 0xDF, 0x23, 0xDF, 0xFE, 0xBF, 0x0, 0x2, 0x0, 0x91, 0xFF, 0xEC, 0x6, 0x39, 0x4, 0x4E, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x36, 0x0, 0x33, 0x32, 0x0, 0x17, 0x15, 0x14, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4, 0x42, 0xD9, 0xFE, 0xFB, 0x16, 0xCA, 0xF3, 0xF3, 0xCC, 0x1B, 0x1, 0x2, 0xD3, 0xEC, 0x1, 0x9, 0x4, 0xFE, 0xF6, 0xFE, 0xE, 0x7D, 0x88, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0x14, 0x1, 0xA, 0xCE, 0xFE, 0x3C, 0x4, 0x3A, 0xFE, 0x4E, 0xC6, 0x1, 0x0, 0xFE, 0xCD, 0xE7, 0x22, 0xEB, 0xFE, 0xC5, 0x2, 0x26, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x2, 0x0, 0x27, 0x0, 0x0, 0x3, 0xE0, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x13, 0x11, 0x23, 0x3, 0x23, 0x13, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x11, 0x2, 0xEE, 0xE1, 0x65, 0x5D, 0x57, 0x5E, 0xEE, 0xE2, 0xE8, 0xFD, 0xFF, 0xCF, 0xE8, 0xCE, 0x1, 0xD3, 0x2, 0x42, 0x1, 0x37, 0x65, 0x39, 0x38, 0x61, 0xFD, 0xBE, 0x1, 0x8E, 0xFE, 0x72, 0x1, 0xB6, 0x57, 0xD3, 0x95, 0xC5, 0xFB, 0xC6, 0x0, 0x1, 0xFF, 0xDA, 0xFE, 0x4B, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x15, 0x21, 0x15, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x2, 0x99, 0x45, 0x3B, 0xF, 0x29, 0x3A, 0x7A, 0x1, 0x62, 0x5D, 0x93, 0x48, 0xF2, 0xA0, 0xA0, 0xF2, 0x1, 0xC, 0xFE, 0xF4, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xBB, 0xFE, 0x4B, 0x11, 0xBF, 0xD, 0xB0, 0x2, 0xFD, 0x71, 0x5C, 0x83, 0xFC, 0xFB, 0x4, 0xAE, 0xAB, 0xA7, 0xA7, 0xAB, 0xEB, 0x8B, 0xB6, 0xDA, 0xFD, 0x3, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x54, 0xFF, 0xEC, 0x3, 0xFA, 0x4, 0x4E, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x6, 0x4, 0x23, 0x22, 0x2, 0x27, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x3, 0xFA, 0x5, 0xFF, 0x0, 0xB4, 0xF8, 0xF3, 0x2, 0xF3, 0xF9, 0xC5, 0xF0, 0x5, 0xE5, 0x4, 0x70, 0x63, 0x83, 0x69, 0x9, 0x1, 0x5A, 0xFE, 0xA7, 0xA, 0x69, 0x81, 0x59, 0x7A, 0x4, 0x1, 0x66, 0x9D, 0xDD, 0x1, 0x3B, 0xDE, 0x2A, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xAF, 0x71, 0xA8, 0x6F, 0xA5, 0x68, 0x4F, 0x0, 0x2, 0x0, 0x1F, 0x0, 0x0, 0x6, 0x9B, 0x4, 0x3A, 0x0, 0x17, 0x0, 0x20, 0x0, 0x0, 0x33, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x16, 0x17, 0x16, 0x15, 0x14, 0x6, 0x23, 0x21, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x20, 0x1, 0x27, 0x5F, 0x45, 0xA, 0x14, 0x2, 0xF2, 0xF2, 0xCE, 0x70, 0x71, 0xE2, 0xD1, 0xFE, 0x1F, 0xFE, 0xE6, 0x13, 0x12, 0xAD, 0xAE, 0x3, 0x8D, 0xEE, 0x69, 0x57, 0x57, 0x69, 0xEE, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xFE, 0x88, 0x1, 0x62, 0x63, 0x98, 0x99, 0xCB, 0x3, 0x76, 0xFE, 0x9A, 0xFE, 0xE0, 0xEF, 0x1, 0xC1, 0x68, 0x3D, 0x3B, 0x5E, 0x0, 0x2, 0x0, 0x86, 0x0, 0x0, 0x6, 0xB1, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x3, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x4, 0x11, 0xED, 0x6A, 0x56, 0x56, 0x6A, 0xED, 0xF3, 0xFE, 0x5B, 0xF3, 0xF3, 0x1, 0xA5, 0xF3, 0xF2, 0xCE, 0xE0, 0xE2, 0xD1, 0xC1, 0x68, 0x3D, 0x3B, 0x5E, 0xFE, 0x1, 0x1, 0xDD, 0xFE, 0x23, 0x4, 0x3A, 0xFE, 0x65, 0x1, 0x9B, 0xFE, 0x87, 0x1, 0xC5, 0x97, 0x99, 0xCB, 0x0, 0x1, 0xFF, 0xEE, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x15, 0x21, 0x15, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x47, 0x93, 0x48, 0xF2, 0x8C, 0x8C, 0xF2, 0x1, 0x20, 0xFE, 0xE0, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xF3, 0x62, 0x3, 0x88, 0x83, 0xFC, 0xFB, 0x4, 0xB5, 0xAB, 0xA0, 0xA0, 0xAB, 0xF2, 0x8B, 0xB6, 0xDA, 0xFD, 0x42, 0x2, 0xBB, 0x71, 0x5C, 0x0, 0x1, 0x0, 0x86, 0xFE, 0x9A, 0x4, 0x13, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x4, 0x13, 0xFE, 0xB4, 0xF2, 0xFE, 0xB1, 0xF3, 0x1, 0xA7, 0xF3, 0xFE, 0x9A, 0x1, 0x66, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0x0, 0x1, 0x0, 0x89, 0xFF, 0xEB, 0x6, 0xC2, 0x5, 0xB0, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x4, 0x4, 0xF7, 0xE4, 0x6E, 0x71, 0xE9, 0xC2, 0xFF, 0x0, 0xFD, 0x6E, 0x57, 0x62, 0x78, 0x1, 0x1, 0x75, 0xB8, 0x72, 0xFD, 0xFE, 0xFB, 0x15, 0xA6, 0xA6, 0xE3, 0xDF, 0x4, 0x3, 0xFB, 0xFD, 0x7F, 0x79, 0x79, 0x7F, 0x4, 0x3, 0xFB, 0xFD, 0x7F, 0x79, 0x79, 0x7F, 0x4, 0x3, 0xFB, 0xFD, 0xDF, 0xE3, 0x0, 0x1, 0x0, 0x70, 0xFF, 0xEB, 0x5, 0xEE, 0x4, 0x3A, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x6, 0x4, 0x55, 0xC5, 0x61, 0x66, 0xCC, 0xAC, 0xE1, 0xF3, 0x54, 0x46, 0x53, 0x67, 0xF4, 0x2, 0xA8, 0x4B, 0x5B, 0xF3, 0xE7, 0x15, 0x8F, 0x8F, 0xD1, 0xD0, 0x2, 0xAE, 0xFD, 0x52, 0x72, 0x6C, 0x6C, 0x72, 0x2, 0xAE, 0xFD, 0x4D, 0xD9, 0x6C, 0x72, 0x2, 0xAE, 0xFD, 0x52, 0xD0, 0xD1, 0x0, 0x2, 0xFF, 0xDF, 0x0, 0x0, 0x4, 0x22, 0x6, 0x19, 0x0, 0x11, 0x0, 0x1A, 0x0, 0x0, 0x24, 0x6, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x16, 0x16, 0x1, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x4, 0x22, 0xE2, 0xD2, 0xFE, 0x20, 0xAF, 0xAF, 0xF3, 0x1, 0x22, 0xFE, 0xDE, 0xF1, 0xD0, 0xE0, 0xFD, 0x5F, 0xED, 0x6A, 0x57, 0x57, 0x6A, 0xED, 0xDF, 0xDF, 0x4, 0x3A, 0xAB, 0x1, 0x34, 0xFE, 0xCC, 0xAB, 0xFE, 0xC9, 0x1, 0xD7, 0xFE, 0x97, 0x75, 0x49, 0x47, 0x7A, 0x0, 0x1, 0x0, 0x99, 0xFF, 0xED, 0x6, 0xCE, 0x5, 0xC5, 0x0, 0x23, 0x0, 0x0, 0x1, 0x6, 0x0, 0x21, 0x20, 0x0, 0x3, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x12, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x16, 0x12, 0x33, 0x32, 0x36, 0x37, 0x6, 0xCD, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF7, 0xFE, 0xC3, 0x5, 0xB3, 0xFC, 0xFC, 0xB5, 0x10, 0x1, 0x3F, 0x1, 0x6, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x87, 0x9C, 0xA1, 0xAC, 0xB, 0x1, 0xE9, 0xFE, 0x16, 0x3, 0x9D, 0xAD, 0xA3, 0x89, 0x12, 0x1, 0xDB, 0xD4, 0xFE, 0xE6, 0x1, 0x6C, 0x1, 0x33, 0xFD, 0x74, 0x5, 0xB0, 0xFD, 0xA0, 0x1, 0x20, 0x1, 0x55, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xDE, 0xCB, 0xC4, 0xD3, 0xFF, 0x0, 0x97, 0x8B, 0x0, 0x1, 0x0, 0x87, 0xFF, 0xEC, 0x5, 0xBB, 0x4, 0x4E, 0x0, 0x23, 0x0, 0x0, 0x1, 0x6, 0x4, 0x23, 0x22, 0x2, 0x27, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x36, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x5, 0xBB, 0x5, 0xFF, 0x0, 0xB4, 0xE7, 0xF2, 0x11, 0x9E, 0xF3, 0xF3, 0x9E, 0x11, 0xF2, 0xE6, 0xC5, 0xF0, 0x5, 0xE5, 0x4, 0x71, 0x63, 0x81, 0x69, 0x9, 0x1, 0x7B, 0xFE, 0x85, 0x9, 0x69, 0x82, 0x59, 0x7A, 0x4, 0x1, 0x66, 0x9D, 0xDD, 0x1, 0x14, 0xC7, 0xFE, 0x39, 0x4, 0x3A, 0xFE, 0x38, 0xC7, 0x1, 0x15, 0xE4, 0xB3, 0x57, 0x7D, 0xAA, 0x6F, 0xAB, 0x70, 0xA8, 0x68, 0x4F, 0x0, 0x2, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xE, 0x0, 0x0, 0x1, 0x3, 0x3, 0x13, 0x11, 0x23, 0x3, 0x21, 0x1, 0x33, 0x1, 0x21, 0x3, 0x23, 0x11, 0x3, 0x45, 0xA8, 0xAA, 0x31, 0x72, 0x8F, 0xFE, 0xFA, 0x2, 0x6, 0xF5, 0x2, 0x0, 0xFE, 0xFA, 0x8E, 0x7E, 0x2, 0x69, 0x1, 0xFA, 0xFE, 0x6, 0xFD, 0x97, 0x1, 0xAA, 0xFE, 0x56, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xAA, 0xFE, 0x56, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x4, 0x46, 0x4, 0x3A, 0x0, 0x4, 0x0, 0x10, 0x0, 0x0, 0x1, 0x3, 0x33, 0x3, 0x27, 0x3, 0x11, 0x23, 0x3, 0x23, 0x1, 0x33, 0x1, 0x23, 0x3, 0x23, 0x11, 0x2, 0xC, 0x61, 0xF7, 0x63, 0x19, 0x61, 0x5B, 0x68, 0xF8, 0x1, 0xAA, 0xE7, 0x1, 0xAB, 0xF8, 0x6A, 0x5C, 0x2, 0xCA, 0xFE, 0xFB, 0x1, 0x5, 0x67, 0xFC, 0xCF, 0x1, 0x18, 0xFE, 0xE8, 0x4, 0x3A, 0xFB, 0xC6, 0x1, 0x18, 0xFE, 0xE8, 0x0, 0x2, 0x0, 0xAD, 0x0, 0x0, 0x7, 0x30, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x16, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x13, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x33, 0x1, 0x21, 0x3, 0x23, 0x11, 0x23, 0x11, 0x23, 0x3, 0x5, 0x5D, 0xA8, 0xAA, 0xFE, 0x2A, 0x99, 0xFE, 0xDB, 0xFC, 0xFC, 0x1, 0x67, 0x1, 0x2C, 0xF5, 0x1, 0xFF, 0xFE, 0xFA, 0x8D, 0x7F, 0xE1, 0x72, 0x90, 0x2, 0x69, 0x1, 0xFA, 0xFE, 0x6, 0xFD, 0x97, 0x1, 0xAC, 0xFE, 0x54, 0x5, 0xB0, 0xFC, 0xB7, 0x3, 0x49, 0xFA, 0x50, 0x1, 0xAA, 0xFE, 0x56, 0x1, 0xAA, 0xFE, 0x56, 0x0, 0x2, 0x0, 0x9E, 0x0, 0x0, 0x6, 0x19, 0x4, 0x3A, 0x0, 0x4, 0x0, 0x18, 0x0, 0x0, 0x1, 0x3, 0x33, 0x3, 0x27, 0x1, 0x13, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x1, 0x23, 0x3, 0x23, 0x11, 0x23, 0x11, 0x23, 0x3, 0x3, 0xDF, 0x61, 0xF6, 0x63, 0x18, 0xFD, 0xE4, 0x6E, 0xBA, 0xF3, 0xF3, 0xFE, 0xF7, 0xE8, 0x1, 0xAB, 0xF8, 0x6B, 0x5B, 0xC3, 0x5B, 0x68, 0x2, 0xCA, 0xFE, 0xFB, 0x1, 0x5, 0x65, 0xFC, 0xD1, 0x1, 0x17, 0xFE, 0xE9, 0x4, 0x3A, 0xFD, 0x8B, 0x2, 0x75, 0xFB, 0xC6, 0x1, 0x18, 0xFE, 0xE8, 0x1, 0x18, 0xFE, 0xE8, 0x0, 0x2, 0x0, 0x80, 0x0, 0x0, 0x6, 0x6E, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x23, 0x11, 0x36, 0x24, 0x33, 0x1, 0x21, 0x1, 0x16, 0x4, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x23, 0x7, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x3, 0x84, 0xE9, 0xFE, 0x2E, 0xFE, 0xE1, 0xFC, 0x3, 0x1, 0x10, 0xFA, 0xFE, 0x85, 0x4, 0xE4, 0xFE, 0x85, 0xEC, 0x1, 0x7, 0xFC, 0x82, 0x86, 0x66, 0x6, 0xFC, 0x7E, 0x85, 0x83, 0x3, 0x3A, 0x1, 0xA9, 0xFB, 0x1D, 0x1, 0x6C, 0xF4, 0xC9, 0x2, 0x87, 0xFD, 0x79, 0x3, 0xCF, 0xF6, 0xFE, 0x9F, 0x1, 0x61, 0x93, 0x68, 0xA, 0xFD, 0xAE, 0x2, 0x5C, 0x68, 0x93, 0x0, 0x2, 0x0, 0x83, 0x0, 0x0, 0x5, 0x64, 0x4, 0x3B, 0x0, 0x2, 0x0, 0x21, 0x0, 0x0, 0x1, 0x13, 0x21, 0x3, 0x23, 0x35, 0x36, 0x36, 0x37, 0x1, 0x33, 0x35, 0x21, 0x15, 0x33, 0x1, 0x16, 0x16, 0x15, 0x15, 0x23, 0x35, 0x26, 0x26, 0x27, 0x23, 0x7, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x2, 0xFB, 0x95, 0xFE, 0xD5, 0xEF, 0xF3, 0x2, 0xD4, 0xBC, 0xFE, 0xEB, 0xA9, 0x2, 0xC6, 0x86, 0xFE, 0xEA, 0xB7, 0xCE, 0xF3, 0x1, 0x6A, 0x6D, 0x27, 0x1, 0xF3, 0x2C, 0x70, 0x6C, 0x2, 0x69, 0x1, 0x22, 0xFC, 0x75, 0xB2, 0xDB, 0xC7, 0xC, 0x1, 0xDA, 0x1, 0x1, 0xFE, 0x25, 0xF, 0xCB, 0xDB, 0xAA, 0xAF, 0x8F, 0x65, 0x1, 0x1, 0xFE, 0x5D, 0x1, 0xA4, 0x67, 0x93, 0x0, 0x2, 0x0, 0xA4, 0x0, 0x0, 0x8, 0xB4, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x23, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x21, 0x1, 0x16, 0x4, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x23, 0x7, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x11, 0x23, 0x11, 0x34, 0x5, 0xC9, 0xE9, 0xFE, 0x2E, 0xFE, 0x21, 0xFE, 0x9F, 0xFC, 0xFC, 0x3, 0x31, 0xFE, 0x86, 0x4, 0xE4, 0xFE, 0x85, 0xEC, 0x1, 0x8, 0xFC, 0x82, 0x86, 0x67, 0x6, 0xFC, 0x7E, 0x85, 0x82, 0xFC, 0x3, 0x3B, 0x1, 0xA8, 0xFD, 0x84, 0xFD, 0x99, 0x5, 0xB0, 0xFD, 0x7B, 0x2, 0x85, 0xFD, 0x79, 0x3, 0xCF, 0xF6, 0xFE, 0x9F, 0x1, 0x61, 0x93, 0x68, 0xA, 0xFD, 0xAE, 0x2, 0x5C, 0x68, 0x93, 0xFE, 0x9F, 0x1, 0x61, 0xA0, 0x0, 0x2, 0x0, 0x90, 0x0, 0x0, 0x7, 0x77, 0x4, 0x3B, 0x0, 0x2, 0x0, 0x27, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x33, 0x35, 0x21, 0x15, 0x33, 0x1, 0x16, 0x16, 0x15, 0x15, 0x23, 0x35, 0x26, 0x26, 0x27, 0x23, 0x7, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x35, 0x34, 0x5, 0xD, 0x95, 0xFE, 0xD6, 0xFE, 0x54, 0xFE, 0xB7, 0xF3, 0xF3, 0x2, 0xA4, 0xFE, 0xEC, 0xA9, 0x2, 0xC5, 0x86, 0xFE, 0xEB, 0xB7, 0xCE, 0xF3, 0x1, 0x6A, 0x6D, 0x27, 0x1, 0xF3, 0x2C, 0x70, 0x6D, 0xF2, 0x2, 0x69, 0x1, 0x22, 0xFE, 0x1D, 0xFE, 0x58, 0x4, 0x3A, 0xFE, 0x28, 0x1, 0xD8, 0x1, 0x1, 0xFE, 0x25, 0xF, 0xCB, 0xDB, 0xAA, 0xAF, 0x8F, 0x65, 0x1, 0x1, 0xFE, 0x5D, 0x1, 0xA4, 0x67, 0x93, 0xAA, 0xAA, 0x9B, 0x0, 0x2, 0x0, 0x29, 0xFE, 0x40, 0x3, 0xAA, 0x7, 0x89, 0x0, 0x8, 0x0, 0x32, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0x13, 0x26, 0x26, 0x27, 0x34, 0x36, 0x33, 0x33, 0x32, 0x36, 0x35, 0x34, 0x25, 0x23, 0x35, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x4, 0x11, 0x14, 0x4, 0x23, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x1, 0x71, 0x92, 0x92, 0xD0, 0xFE, 0xE9, 0x96, 0xFE, 0xEB, 0xAE, 0x7D, 0xA9, 0x2, 0xBD, 0xA0, 0x33, 0x79, 0x85, 0xFE, 0xE3, 0x9D, 0x98, 0x89, 0x78, 0x7C, 0x83, 0xFE, 0xE5, 0x1, 0x1B, 0xDC, 0x1, 0x16, 0x7D, 0x6F, 0x1, 0xD, 0xFE, 0xEF, 0xD8, 0x32, 0x85, 0x6F, 0x29, 0x7, 0x89, 0x9B, 0x9B, 0xB, 0xFE, 0xEA, 0x1, 0x17, 0xA, 0xF6, 0xB7, 0x26, 0xB3, 0x84, 0x8F, 0x86, 0x81, 0x61, 0xED, 0x6, 0xC7, 0x1, 0x77, 0x5B, 0x56, 0x73, 0xC6, 0xC5, 0xBF, 0x6F, 0xA4, 0x2C, 0x55, 0xFF, 0x0, 0xCD, 0xE0, 0x67, 0x4A, 0x4E, 0x13, 0x0, 0x2, 0x0, 0x33, 0xFE, 0x47, 0x3, 0x88, 0x6, 0x1C, 0x0, 0x8, 0x0, 0x31, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0x13, 0x26, 0x26, 0x27, 0x34, 0x36, 0x33, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x21, 0x32, 0x4, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x1, 0x42, 0x92, 0x93, 0xCF, 0xFE, 0xE9, 0x96, 0xFE, 0xEB, 0xD9, 0x6C, 0xAC, 0x2, 0xB7, 0x98, 0x30, 0x6B, 0x78, 0xF0, 0xA8, 0x9A, 0x77, 0x67, 0x6D, 0x71, 0xFE, 0xE5, 0x1, 0x1B, 0xCD, 0x1, 0x3, 0xB8, 0xD9, 0xFA, 0xC6, 0x2E, 0x8C, 0x69, 0x28, 0x6, 0x1C, 0x9B, 0x9B, 0xA, 0xFE, 0xE9, 0x1, 0x17, 0xA, 0xF8, 0x2B, 0x29, 0xAD, 0x80, 0x87, 0x7F, 0x52, 0x3E, 0x8E, 0x5, 0xAA, 0x4F, 0x3F, 0x38, 0x4B, 0xB9, 0x9C, 0x95, 0x9F, 0x4B, 0x44, 0xAB, 0x9A, 0xAB, 0x67, 0x4A, 0x4E, 0x13, 0x0, 0x3, 0x0, 0x5F, 0xFF, 0xEC, 0x5, 0x18, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x1, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x3, 0x20, 0x13, 0x21, 0x16, 0x16, 0x5, 0x18, 0xFE, 0xB5, 0xFE, 0xF0, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFD, 0xA3, 0x9B, 0xBA, 0x9, 0x2, 0xBD, 0x8, 0xB7, 0x9E, 0x1, 0x49, 0x14, 0xFD, 0x43, 0xB, 0xBC, 0x2, 0xB3, 0xFE, 0xB4, 0xFE, 0x85, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x1, 0xF7, 0xE9, 0xE0, 0xE0, 0xE9, 0xFB, 0xC9, 0x1, 0xC3, 0xDC, 0xE7, 0x0, 0x3, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0x3D, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x14, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x27, 0x1, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x3, 0x32, 0x36, 0x37, 0x21, 0x16, 0x16, 0x4F, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xF6, 0x74, 0x7C, 0xE, 0x1, 0xFF, 0xE, 0x7D, 0x74, 0x76, 0x7C, 0xE, 0xFD, 0xFF, 0xE, 0x7C, 0x2, 0x27, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x1, 0x33, 0xE6, 0x1, 0x86, 0xA2, 0x75, 0x75, 0xA2, 0xFD, 0x24, 0xA2, 0x78, 0x78, 0xA2, 0x0, 0x1, 0x0, 0x10, 0x0, 0x0, 0x4, 0xF4, 0x5, 0xC3, 0x0, 0xF, 0x0, 0x0, 0x21, 0x1, 0x21, 0x1, 0x17, 0x37, 0x13, 0x36, 0x36, 0x33, 0x17, 0x7, 0x23, 0x6, 0x7, 0x1, 0x2, 0x2, 0xFE, 0xE, 0x1, 0xE, 0x1, 0x43, 0x1B, 0x1B, 0xE4, 0x34, 0x96, 0x82, 0x2D, 0x2, 0x17, 0x55, 0x29, 0xFE, 0x99, 0x5, 0xB0, 0xFB, 0xDB, 0x72, 0x70, 0x2, 0xF7, 0xA3, 0xA0, 0x1, 0xD7, 0x2, 0x80, 0xFB, 0x97, 0x0, 0x1, 0x0, 0x21, 0x0, 0x0, 0x4, 0x19, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x12, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x1, 0x1, 0x8E, 0xFE, 0x93, 0xFB, 0xC8, 0x14, 0x14, 0x7A, 0x58, 0xD1, 0x44, 0x26, 0x17, 0x8, 0x24, 0x22, 0x3B, 0xD, 0xFE, 0xF5, 0x4, 0x3A, 0xFD, 0x35, 0x61, 0x61, 0x1, 0xBD, 0x1, 0x22, 0x15, 0xC0, 0x5, 0x35, 0x27, 0xFC, 0xDE, 0x0, 0x2, 0x0, 0x5F, 0xFF, 0x76, 0x5, 0x18, 0x6, 0x2E, 0x0, 0x13, 0x0, 0x25, 0x0, 0x0, 0x5, 0x23, 0x35, 0x26, 0x0, 0x3, 0x35, 0x10, 0x0, 0x37, 0x35, 0x33, 0x15, 0x16, 0x0, 0x13, 0x15, 0x10, 0x0, 0x7, 0x3, 0x33, 0x15, 0x36, 0x13, 0x35, 0x10, 0x27, 0x15, 0x23, 0x35, 0x6, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x3, 0x21, 0xC5, 0xE2, 0xFE, 0xE7, 0x2, 0x1, 0x19, 0xE3, 0xC5, 0xE4, 0x1, 0x12, 0x2, 0xFE, 0xEE, 0xE5, 0xC5, 0xC5, 0xF4, 0x6, 0xFB, 0xC5, 0x77, 0x88, 0x89, 0x77, 0x8A, 0x7D, 0x22, 0x1, 0x6D, 0x1, 0x28, 0x52, 0x1, 0x2D, 0x1, 0x73, 0x21, 0x71, 0x71, 0x23, 0xFE, 0x92, 0xFE, 0xD9, 0x52, 0xFE, 0xD3, 0xFE, 0x8F, 0x22, 0x1, 0x37, 0x61, 0x47, 0x1, 0x90, 0x5E, 0x1, 0x9E, 0x49, 0x61, 0x62, 0x22, 0xF7, 0xCF, 0x4B, 0xCE, 0xF9, 0x23, 0x0, 0x2, 0x0, 0x50, 0xFF, 0x88, 0x4, 0x3E, 0x4, 0xB4, 0x0, 0x13, 0x0, 0x23, 0x0, 0x0, 0x5, 0x23, 0x35, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x37, 0x35, 0x33, 0x15, 0x16, 0x12, 0x15, 0x15, 0x14, 0x2, 0x7, 0x11, 0x15, 0x36, 0x11, 0x34, 0x26, 0x27, 0x15, 0x23, 0x35, 0x6, 0x11, 0x14, 0x16, 0x17, 0x35, 0x2, 0x9F, 0xB7, 0xC2, 0xD6, 0xD8, 0xC2, 0xB8, 0xC4, 0xD8, 0xDA, 0xC5, 0xAC, 0x51, 0x58, 0xB8, 0xA8, 0x50, 0x56, 0x78, 0x6C, 0x20, 0x1, 0x2B, 0xD3, 0x15, 0xD4, 0x1, 0x2C, 0x20, 0x6D, 0x6D, 0x1F, 0xFE, 0xD3, 0xD4, 0x15, 0xD5, 0xFE, 0xD3, 0x1E, 0x1, 0x36, 0x6A, 0x40, 0x1, 0x29, 0x74, 0xBD, 0x22, 0x5F, 0x5F, 0x44, 0xFE, 0xDC, 0x75, 0xB9, 0x23, 0x67, 0x0, 0x3, 0x0, 0x89, 0xFF, 0xEB, 0x6, 0xB6, 0x7, 0x3F, 0x0, 0x11, 0x0, 0x1A, 0x0, 0x45, 0x0, 0x0, 0x1, 0x15, 0x22, 0x26, 0x26, 0x23, 0x22, 0x7, 0x15, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x33, 0x1, 0x27, 0x36, 0x35, 0x35, 0x33, 0x15, 0x14, 0x6, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x24, 0x35, 0x11, 0x34, 0x24, 0x33, 0x15, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x5, 0x5F, 0x94, 0xAD, 0x88, 0x38, 0x67, 0x1, 0x86, 0x7D, 0x6D, 0x4E, 0x8E, 0xA1, 0x68, 0xFE, 0x39, 0x52, 0x44, 0xA9, 0x69, 0x1, 0x4B, 0xE4, 0x71, 0x72, 0xE3, 0xC2, 0xFF, 0x0, 0x1, 0x0, 0xC2, 0x57, 0x6E, 0x6E, 0x57, 0x62, 0x78, 0xF5, 0x79, 0x62, 0x56, 0x6F, 0x6F, 0x56, 0xC2, 0xFF, 0xFF, 0x6, 0xC7, 0x86, 0x3C, 0x3C, 0x64, 0x14, 0x25, 0x70, 0x69, 0x3C, 0x3C, 0xFE, 0x4F, 0x39, 0x55, 0x42, 0x5F, 0x66, 0x3A, 0x74, 0xFA, 0xBA, 0x9E, 0x9E, 0xEE, 0xEA, 0x2, 0x14, 0xEA, 0xEF, 0xCB, 0x83, 0x8B, 0xFD, 0xEC, 0x8B, 0x83, 0x79, 0x7F, 0x1, 0x83, 0xFE, 0x7D, 0x7F, 0x79, 0x83, 0x8B, 0x2, 0x14, 0x8B, 0x83, 0xCB, 0xEF, 0xEA, 0xFD, 0xEC, 0xEA, 0xEE, 0x0, 0x3, 0x0, 0x74, 0xFF, 0xEB, 0x5, 0xD2, 0x5, 0xE3, 0x0, 0x12, 0x0, 0x1B, 0x0, 0x46, 0x0, 0x0, 0x1, 0x15, 0x22, 0x26, 0x27, 0x26, 0x23, 0x22, 0x7, 0x15, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x33, 0x1, 0x27, 0x36, 0x35, 0x35, 0x33, 0x15, 0x14, 0x6, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x33, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x4, 0xF7, 0x75, 0x84, 0x95, 0x3F, 0x35, 0x68, 0x1, 0x87, 0x7E, 0x6E, 0x4E, 0x8D, 0xA1, 0x68, 0xFE, 0x3E, 0x52, 0x44, 0xA9, 0x69, 0x1, 0x3, 0xC4, 0x61, 0x62, 0xC3, 0xAB, 0xDF, 0xE8, 0xB0, 0x49, 0x5C, 0x54, 0x43, 0x4D, 0x62, 0xEC, 0x63, 0x4C, 0x43, 0x54, 0x5C, 0x49, 0xB0, 0xE8, 0xE0, 0x5, 0x6B, 0x86, 0x1D, 0x40, 0x1B, 0x64, 0x14, 0x25, 0x70, 0x69, 0x3C, 0x3C, 0xFE, 0x4D, 0x39, 0x55, 0x42, 0x5F, 0x66, 0x3A, 0x74, 0xFC, 0x18, 0x92, 0x92, 0xDB, 0xD9, 0xF5, 0xD9, 0xDB, 0xC3, 0x75, 0x7C, 0xF5, 0x7C, 0x75, 0x6C, 0x72, 0xC6, 0xC6, 0x72, 0x6C, 0x75, 0x7C, 0xF5, 0x7C, 0x75, 0xC3, 0xDB, 0xD9, 0xF5, 0xD9, 0xDB, 0x0, 0x2, 0x0, 0x89, 0xFF, 0xEB, 0x6, 0xC2, 0x7, 0x12, 0x0, 0x7, 0x0, 0x25, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x17, 0x21, 0x15, 0x23, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x4, 0x3, 0x46, 0xFE, 0xB9, 0x3, 0x54, 0x2, 0xFE, 0xA6, 0xB5, 0x1, 0xB1, 0xE4, 0x6E, 0x71, 0xE9, 0xC2, 0xFF, 0x0, 0xFD, 0x6E, 0x57, 0x62, 0x78, 0x1, 0x1, 0x75, 0xB8, 0x72, 0xFD, 0xFE, 0xFB, 0x6, 0x97, 0x7B, 0x7B, 0x7F, 0xF9, 0xD3, 0xA6, 0xA6, 0xE3, 0xDF, 0x4, 0x3, 0xFB, 0xFD, 0x7F, 0x79, 0x79, 0x7F, 0x4, 0x3, 0xFB, 0xFD, 0x7F, 0x79, 0x79, 0x7F, 0x4, 0x3, 0xFB, 0xFD, 0xDF, 0xE3, 0x0, 0x2, 0x0, 0x70, 0xFF, 0xEB, 0x5, 0xEE, 0x5, 0xB1, 0x0, 0x7, 0x0, 0x25, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x17, 0x21, 0x15, 0x23, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x6, 0x2, 0xD0, 0xFE, 0xC7, 0x3, 0x38, 0x5, 0xFE, 0xB1, 0xB5, 0x1, 0x85, 0xC5, 0x61, 0x66, 0xCC, 0xAC, 0xE1, 0xF3, 0x54, 0x46, 0x53, 0x67, 0xF4, 0x2, 0xA8, 0x4B, 0x5B, 0xF3, 0xE7, 0x5, 0x37, 0x7A, 0x7A, 0x7F, 0xFB, 0x33, 0x8F, 0x8F, 0xD1, 0xD0, 0x2, 0xAE, 0xFD, 0x52, 0x72, 0x6C, 0x6C, 0x72, 0x2, 0xAE, 0xFD, 0x4D, 0xD9, 0x6C, 0x72, 0x2, 0xAE, 0xFD, 0x52, 0xD0, 0xD1, 0x0, 0x1, 0x0, 0x67, 0xFE, 0x8B, 0x4, 0xB6, 0x5, 0xC5, 0x0, 0x17, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x26, 0x2, 0x35, 0x11, 0x10, 0x0, 0x33, 0x32, 0x0, 0x15, 0x23, 0x10, 0x21, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x33, 0x3, 0x35, 0xFC, 0xD5, 0xFD, 0x1, 0x33, 0xFD, 0xFE, 0x1, 0x21, 0xFC, 0xFE, 0xDD, 0x94, 0xA0, 0xA0, 0x94, 0xB5, 0xFD, 0xD6, 0x1, 0x67, 0x20, 0x1, 0x4A, 0xEF, 0x1, 0x19, 0x1, 0x9, 0x1, 0x58, 0xFE, 0xFB, 0xEC, 0x1, 0x26, 0xEA, 0xAA, 0xFE, 0xE5, 0xAB, 0xEB, 0x0, 0x1, 0x0, 0x5C, 0xFE, 0x88, 0x3, 0xF3, 0x4, 0x4E, 0x0, 0x18, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x2, 0xD5, 0xF2, 0xBF, 0xC8, 0xFB, 0xEC, 0xBF, 0xF1, 0xE4, 0x70, 0x5C, 0x86, 0x6E, 0x6D, 0x88, 0xAE, 0xFD, 0xDA, 0x1, 0x6B, 0x22, 0x1, 0x2F, 0xC8, 0x23, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xDA, 0x0, 0x1, 0x0, 0x6E, 0x0, 0x0, 0x4, 0x94, 0x5, 0x3E, 0x0, 0x13, 0x0, 0x0, 0x1, 0x3, 0x5, 0x7, 0x25, 0x3, 0x23, 0x13, 0x25, 0x37, 0x5, 0x13, 0x25, 0x37, 0x5, 0x13, 0x33, 0x3, 0x5, 0x7, 0x3, 0x28, 0xCC, 0x1, 0x21, 0x48, 0xFE, 0xDD, 0xB5, 0xAF, 0xE1, 0xFE, 0xDF, 0x47, 0x1, 0x25, 0xCA, 0xFE, 0xDE, 0x49, 0x1, 0x23, 0xB9, 0xAC, 0xE4, 0x1, 0x25, 0x4C, 0x3, 0x29, 0xFE, 0x98, 0xAC, 0x80, 0xAA, 0xFE, 0xC1, 0x1, 0x8E, 0xAB, 0x80, 0xAB, 0x1, 0x68, 0xAB, 0x82, 0xAB, 0x1, 0x46, 0xFE, 0x6B, 0xAB, 0x7F, 0x0, 0x1, 0xFC, 0x65, 0x4, 0xA2, 0xFF, 0x38, 0x5, 0xFD, 0x0, 0x7, 0x0, 0x0, 0x3, 0x21, 0x15, 0x27, 0x37, 0x21, 0x27, 0x17, 0xC8, 0xFD, 0xDF, 0xB2, 0x1, 0x2, 0x22, 0x1, 0xB1, 0x5, 0x20, 0x7E, 0x1, 0xEE, 0x6C, 0x1, 0x0, 0x1, 0xFC, 0x72, 0x5, 0x17, 0xFF, 0x6C, 0x6, 0x15, 0x0, 0x12, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x23, 0x35, 0x26, 0x23, 0x22, 0x6, 0x6, 0x23, 0x23, 0xFC, 0x72, 0x66, 0x72, 0x9B, 0x4A, 0x4F, 0x6F, 0x7F, 0x88, 0x1, 0x69, 0x39, 0x87, 0xB0, 0x74, 0x24, 0x5, 0x9D, 0x18, 0x41, 0x1F, 0x69, 0x70, 0x25, 0x14, 0x64, 0x3C, 0x3C, 0x0, 0x1, 0xFD, 0x7A, 0x5, 0x17, 0xFE, 0x71, 0x6, 0x61, 0x0, 0x5, 0x0, 0x0, 0x1, 0x27, 0x35, 0x33, 0x7, 0x17, 0xFE, 0x20, 0xA6, 0xBE, 0x1, 0x3A, 0x5, 0x17, 0xC5, 0x85, 0x97, 0x6F, 0x0, 0x1, 0xFD, 0xA5, 0x5, 0x17, 0xFE, 0x9C, 0x6, 0x61, 0x0, 0x5, 0x0, 0x0, 0x1, 0x7, 0x27, 0x37, 0x27, 0x33, 0xFE, 0x9C, 0xA6, 0x51, 0x3A, 0x1, 0xBE, 0x5, 0xDC, 0xC5, 0x44, 0x6F, 0x97, 0x0, 0x1, 0xFC, 0x2D, 0x5, 0x17, 0xFF, 0x63, 0x6, 0x15, 0x0, 0x13, 0x0, 0x0, 0x3, 0x15, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x33, 0x9D, 0xB1, 0x44, 0x62, 0x75, 0x5F, 0x30, 0x53, 0x88, 0x93, 0x85, 0x67, 0x82, 0x5F, 0x34, 0x5, 0x9D, 0x86, 0x3C, 0x3C, 0x30, 0x36, 0x12, 0x25, 0x63, 0x76, 0x3C, 0x3C, 0x0, 0x8, 0xFA, 0x24, 0xFE, 0xC4, 0x1, 0xC0, 0x5, 0xAF, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x45, 0x0, 0x53, 0x0, 0x61, 0x0, 0x6F, 0x0, 0x0, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0xFD, 0x82, 0x71, 0x70, 0x62, 0x61, 0x72, 0x70, 0x2D, 0x36, 0x35, 0x2C, 0xFD, 0xC4, 0x72, 0x71, 0x62, 0x61, 0x72, 0x70, 0x2D, 0x36, 0x35, 0x2C, 0x4, 0x8C, 0x72, 0x71, 0x61, 0x62, 0x72, 0x71, 0x2C, 0x37, 0x35, 0x2B, 0xFA, 0xC3, 0x71, 0x71, 0x61, 0x62, 0x71, 0x70, 0x2C, 0x37, 0x35, 0x2C, 0x5, 0xF7, 0x71, 0x71, 0x61, 0x62, 0x71, 0x70, 0x2C, 0x37, 0x34, 0x2D, 0xFA, 0xB0, 0x72, 0x71, 0x61, 0x62, 0x72, 0x71, 0x2C, 0x37, 0x35, 0x2B, 0x4, 0x8B, 0x71, 0x71, 0x61, 0x62, 0x71, 0x70, 0x2C, 0x37, 0x35, 0x2C, 0xFD, 0xC0, 0x71, 0x70, 0x62, 0x61, 0x72, 0x70, 0x2D, 0x36, 0x35, 0x2C, 0x4, 0xF3, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0xFE, 0xC3, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0x28, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0xFD, 0xE1, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0x28, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0xFD, 0xD1, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0x28, 0x53, 0x69, 0x69, 0x53, 0x28, 0x3D, 0x3D, 0xFE, 0xBC, 0x52, 0x6A, 0x6A, 0x52, 0x28, 0x3D, 0x3D, 0x0, 0x8, 0xFA, 0x4C, 0xFE, 0x63, 0x1, 0x8C, 0x5, 0xC6, 0x0, 0x4, 0x0, 0x9, 0x0, 0xE, 0x0, 0x13, 0x0, 0x18, 0x0, 0x1D, 0x0, 0x22, 0x0, 0x27, 0x0, 0x0, 0x1, 0x23, 0x27, 0x13, 0x33, 0x1, 0x7, 0x27, 0x3, 0x37, 0x1, 0x27, 0x37, 0x25, 0x17, 0x1, 0x15, 0x7, 0x25, 0x35, 0x5, 0x35, 0x37, 0x5, 0x15, 0x1, 0x37, 0x17, 0x13, 0x7, 0x1, 0x17, 0x7, 0x5, 0x27, 0x25, 0x33, 0x17, 0x3, 0x23, 0xFE, 0x14, 0x88, 0xC, 0x7A, 0x60, 0xFE, 0x12, 0x62, 0x11, 0x94, 0x41, 0x3, 0xFD, 0x61, 0x2, 0x1, 0x41, 0x44, 0xFA, 0xDD, 0xD, 0xFE, 0xB3, 0x5, 0xE6, 0xD, 0x1, 0x4D, 0xFD, 0xDF, 0x61, 0x11, 0x95, 0x42, 0xFC, 0x5, 0x61, 0x2, 0xFE, 0xC0, 0x45, 0x2, 0xB7, 0x89, 0xB, 0x7A, 0x60, 0x4, 0x66, 0xE, 0x1, 0x52, 0xFD, 0xF8, 0x62, 0x2, 0x1, 0x46, 0x45, 0xFE, 0x9E, 0x63, 0x10, 0x99, 0x44, 0xFD, 0xED, 0x8B, 0xC, 0x7C, 0x62, 0x97, 0x8B, 0xC, 0x7C, 0x62, 0xFE, 0x99, 0x63, 0x2, 0xFE, 0xBB, 0x47, 0x1, 0x65, 0x63, 0x11, 0x99, 0x45, 0x14, 0xE, 0xFE, 0xAD, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x7D, 0x5, 0xDD, 0x7, 0x25, 0x0, 0x26, 0x2, 0x72, 0x0, 0x0, 0x0, 0x27, 0x1, 0x89, 0x1, 0x1C, 0x1, 0x3E, 0x0, 0x7, 0x0, 0x11, 0x4, 0x80, 0xFF, 0xC5, 0xFF, 0xFF, 0x0, 0x86, 0xFE, 0x7D, 0x4, 0xE4, 0x5, 0xD9, 0x0, 0x26, 0x2, 0x86, 0x0, 0x0, 0x0, 0x27, 0x1, 0x89, 0x0, 0x97, 0xFF, 0xF2, 0x0, 0x7, 0x0, 0x11, 0x3, 0x87, 0xFF, 0xC5, 0x0, 0x2, 0xFF, 0xDF, 0x0, 0x0, 0x4, 0x22, 0x6, 0x63, 0x0, 0x11, 0x0, 0x1A, 0x0, 0x0, 0x24, 0x6, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x15, 0x21, 0x11, 0x33, 0x16, 0x16, 0x1, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x4, 0x22, 0xE2, 0xD2, 0xFE, 0x20, 0xAF, 0xAF, 0xF3, 0x1, 0x22, 0xFE, 0xDE, 0xF1, 0xD0, 0xE0, 0xFD, 0x5F, 0xED, 0x6A, 0x57, 0x57, 0x6A, 0xED, 0xDF, 0xDF, 0x5, 0x5, 0xAB, 0xB3, 0xB3, 0xAB, 0xFD, 0xFE, 0x1, 0xD7, 0xFE, 0x97, 0x75, 0x49, 0x47, 0x7A, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDA, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x32, 0x37, 0x27, 0x37, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x11, 0x15, 0x11, 0x23, 0x11, 0x21, 0x32, 0x0, 0x15, 0x14, 0x7, 0x17, 0x7, 0x27, 0x6, 0x23, 0x2, 0xC2, 0x50, 0x39, 0x73, 0x6E, 0x75, 0x1B, 0x81, 0x93, 0xFE, 0xCF, 0xFC, 0x2, 0x2D, 0xFD, 0x1, 0x15, 0x74, 0x7A, 0x6E, 0x88, 0x79, 0xA9, 0x2, 0xE8, 0x16, 0x80, 0x64, 0x81, 0x35, 0x49, 0x66, 0xA0, 0xFE, 0x3, 0xCB, 0xFD, 0xE3, 0x5, 0xB0, 0xFE, 0xFA, 0xC9, 0xC2, 0x75, 0x87, 0x64, 0x96, 0x38, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x4, 0x4E, 0x0, 0xE, 0x0, 0x22, 0x0, 0x0, 0x25, 0x32, 0x37, 0x27, 0x37, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x7, 0x17, 0x7, 0x27, 0x6, 0x2, 0x48, 0x44, 0x33, 0x6A, 0x6F, 0x58, 0x22, 0x75, 0x83, 0x96, 0x41, 0x43, 0xDA, 0xB1, 0x6C, 0xF2, 0xDF, 0xA, 0x6D, 0xB7, 0xCE, 0xD9, 0x6E, 0x6A, 0x6F, 0x68, 0x58, 0xAF, 0x21, 0x7B, 0x64, 0x66, 0x54, 0x8A, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0xC3, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xF5, 0x95, 0x7B, 0x63, 0x78, 0x36, 0x0, 0x1, 0x0, 0x90, 0x0, 0x0, 0x4, 0x34, 0x7, 0x10, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x23, 0x15, 0x1, 0x8C, 0xFC, 0x2, 0xB1, 0xF3, 0x7, 0x4, 0xE5, 0xFB, 0x1B, 0x5, 0xB0, 0x1, 0x60, 0xFD, 0xDD, 0x8, 0x0, 0x1, 0x0, 0x7F, 0x0, 0x0, 0x3, 0x5C, 0x5, 0x74, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x1, 0x71, 0xF2, 0x1, 0xEA, 0xF3, 0xFE, 0x15, 0x4, 0x3A, 0x1, 0x3A, 0xFE, 0x2, 0x0, 0x1, 0x0, 0x9B, 0xFE, 0xC5, 0x4, 0x9E, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x1, 0x27, 0x32, 0x36, 0x35, 0x2, 0x25, 0x23, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x16, 0x4, 0x12, 0x15, 0x14, 0x2, 0x2, 0xA1, 0x2, 0xA3, 0x69, 0x2, 0xFE, 0xAB, 0xBD, 0xFC, 0x3, 0x9D, 0xFD, 0x5F, 0xB3, 0xBC, 0x1, 0xD, 0x8B, 0xF3, 0xFE, 0xC5, 0xBB, 0xE5, 0x91, 0x1, 0x7A, 0x9, 0xFD, 0x87, 0x5, 0xB0, 0xCB, 0xFE, 0x5E, 0x1, 0x8D, 0xFF, 0x0, 0xB8, 0xF4, 0xFE, 0xBC, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0xE2, 0x3, 0xDC, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x1, 0x27, 0x36, 0x27, 0x34, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x15, 0x33, 0x16, 0x4, 0x15, 0x16, 0x6, 0x6, 0x2, 0x60, 0x55, 0xDF, 0x2, 0xA1, 0x84, 0x52, 0xF2, 0x2, 0xC8, 0xFE, 0x2A, 0x5A, 0xE7, 0x1, 0x29, 0x1, 0x4D, 0xA7, 0xFE, 0xE2, 0xAD, 0x4C, 0xD4, 0x89, 0x8F, 0xFE, 0x39, 0x4, 0x3A, 0xC4, 0xE5, 0x2, 0xF9, 0xE7, 0x4D, 0xBD, 0xA1, 0xFF, 0xFF, 0x0, 0x17, 0xFE, 0x99, 0x8, 0x6, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x70, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x6, 0xB6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1E, 0xFE, 0x99, 0x6, 0xB5, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x84, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x5, 0x65, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9B, 0xFE, 0x99, 0x5, 0x80, 0x5, 0xB0, 0x0, 0x26, 0x7, 0xAA, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x4, 0x30, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8F, 0xFE, 0x99, 0x4, 0xC3, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x87, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0x73, 0x0, 0x0, 0x0, 0x1, 0x0, 0x91, 0x0, 0x0, 0x5, 0x36, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x1, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x15, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x15, 0x1, 0xE6, 0x58, 0xFD, 0xFD, 0x58, 0xA3, 0x38, 0x1, 0x1B, 0x1, 0x32, 0xFE, 0x7D, 0x1, 0xAB, 0xFE, 0xC1, 0xFE, 0xD5, 0x43, 0x1, 0x85, 0xE8, 0xFD, 0x93, 0x5, 0xB0, 0xFD, 0x9A, 0xFF, 0xFF, 0x2, 0x66, 0xFD, 0x5B, 0xFC, 0xF5, 0x2, 0x6D, 0xE8, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0xAF, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x25, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x15, 0x33, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x23, 0x15, 0x1, 0xD7, 0x56, 0xF3, 0xF3, 0x56, 0x9C, 0x27, 0xCF, 0x1, 0x2C, 0xFE, 0xC3, 0x1, 0x57, 0xFE, 0xCB, 0xD9, 0x2E, 0xFA, 0xB3, 0xFE, 0x53, 0x4, 0x3A, 0xFE, 0x51, 0xC7, 0xC7, 0x1, 0xAF, 0xFD, 0xFE, 0xFD, 0xC8, 0x1, 0xAD, 0xB3, 0x0, 0x1, 0x0, 0x34, 0x0, 0x0, 0x6, 0xA3, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x5, 0x73, 0xFE, 0x43, 0xAC, 0xFD, 0xFE, 0x27, 0x2, 0xD6, 0x8A, 0x1, 0xAD, 0x1, 0x36, 0xFE, 0xD, 0x2, 0x1F, 0x2, 0x70, 0xFD, 0x90, 0x4, 0xED, 0xC3, 0xFD, 0x9D, 0x2, 0x63, 0xFD, 0x47, 0xFD, 0x9, 0x0, 0x1, 0x0, 0x3E, 0x0, 0x0, 0x5, 0xA9, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x4, 0x6D, 0xFE, 0xD4, 0x7B, 0xF3, 0xFE, 0x6B, 0x2, 0x88, 0x6B, 0x1, 0x2B, 0x1, 0x2C, 0xFE, 0x79, 0x1, 0xA8, 0x1, 0xAD, 0xFE, 0x53, 0x3, 0x76, 0xC4, 0xFE, 0x51, 0x1, 0xAF, 0xFD, 0xFA, 0xFD, 0xCC, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x99, 0x5, 0xDC, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x4, 0x8C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x86, 0xFE, 0x99, 0x4, 0xD6, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x8A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0x86, 0x0, 0x0, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x7, 0x84, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x4, 0x1C, 0xFD, 0x75, 0xFC, 0xFC, 0x2, 0x8B, 0x3, 0x68, 0xFD, 0x95, 0x2, 0x88, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x2, 0x5E, 0xC3, 0xFB, 0x13, 0x0, 0x1, 0x0, 0x7F, 0x0, 0x0, 0x5, 0x67, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x3, 0x16, 0xFE, 0x5B, 0xF2, 0xF2, 0x1, 0xA5, 0x2, 0x51, 0xFE, 0xA2, 0x1, 0xB5, 0xFE, 0x4B, 0x4, 0x3A, 0xFE, 0x3D, 0x1, 0xC3, 0xC4, 0xFC, 0x8A, 0x0, 0x1, 0x0, 0x9B, 0xFE, 0xC3, 0x7, 0xF0, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x1, 0x27, 0x32, 0x36, 0x35, 0x2, 0x25, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x4, 0x0, 0x11, 0x14, 0x2, 0x5, 0xF3, 0x2, 0xA3, 0x69, 0x2, 0xFE, 0xAB, 0x91, 0xFD, 0xFD, 0x7F, 0xFC, 0x4, 0x7A, 0x88, 0x1, 0x14, 0x1, 0x3F, 0xF3, 0xFE, 0xC3, 0xBB, 0xE5, 0x91, 0x1, 0x7A, 0x9, 0xFD, 0x89, 0x4, 0xE5, 0xFB, 0x1B, 0x5, 0xB0, 0xFD, 0x91, 0x2, 0xFE, 0xD3, 0xFE, 0xE9, 0xF4, 0xFE, 0xBC, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0xE5, 0x6, 0xBB, 0x4, 0x3A, 0x0, 0x17, 0x0, 0x0, 0x1, 0x27, 0x36, 0x35, 0x26, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x16, 0x4, 0x15, 0x14, 0x6, 0x6, 0x5, 0x3F, 0x55, 0xDE, 0x1, 0xAB, 0x8E, 0x83, 0xF3, 0xFE, 0x59, 0xF2, 0x3, 0x8C, 0x8E, 0xF0, 0x1, 0x32, 0x4C, 0xA7, 0xFE, 0xE5, 0xAE, 0x4A, 0xD5, 0x89, 0x8F, 0xFE, 0x36, 0x3, 0x76, 0xFC, 0x8A, 0x4, 0x3A, 0xFE, 0x5B, 0x3, 0xF9, 0xE7, 0x4D, 0xBD, 0xA1, 0x0, 0x2, 0x0, 0x67, 0xFF, 0xEA, 0x5, 0xD8, 0x5, 0xC5, 0x0, 0x23, 0x0, 0x2E, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x37, 0x26, 0x11, 0x35, 0x34, 0x12, 0x33, 0x32, 0x12, 0x15, 0x15, 0x10, 0x7, 0x16, 0x33, 0x1, 0x10, 0x17, 0x36, 0x37, 0x35, 0x10, 0x23, 0x22, 0x6, 0x15, 0x5, 0xD8, 0xDE, 0xB6, 0x96, 0xB4, 0xFE, 0xE0, 0xFE, 0x8D, 0x1, 0xE, 0xDC, 0x6B, 0x79, 0xD4, 0xB9, 0x2E, 0x2B, 0xE1, 0xE8, 0xBD, 0xC4, 0xF1, 0xBA, 0x5C, 0x6A, 0xFD, 0x8E, 0xC8, 0xA1, 0x1, 0xB9, 0x53, 0x5E, 0x16, 0x48, 0x47, 0x1, 0x86, 0x1, 0x35, 0xB2, 0x1, 0x7, 0x1, 0x66, 0xD4, 0xE9, 0xAE, 0xBE, 0xCD, 0xFE, 0xEF, 0x7, 0xCB, 0x1, 0x3E, 0xD0, 0xE9, 0x1, 0x3D, 0xFE, 0xBD, 0xFD, 0xCD, 0xFE, 0xD8, 0xC8, 0x14, 0x2, 0x19, 0xFE, 0xF0, 0x92, 0x8D, 0xFD, 0xE4, 0x1, 0x59, 0xB0, 0xA0, 0x0, 0x2, 0x0, 0x61, 0xFF, 0xEB, 0x4, 0xC9, 0x4, 0x4F, 0x0, 0xA, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x14, 0x17, 0x36, 0x35, 0x35, 0x34, 0x26, 0x22, 0x6, 0x15, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x12, 0x33, 0x15, 0x6, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x37, 0x26, 0x27, 0x35, 0x34, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x7, 0x16, 0x33, 0x2, 0xD8, 0x78, 0x62, 0x38, 0x6A, 0x38, 0x1, 0xF1, 0xBA, 0x93, 0x78, 0x91, 0xEE, 0xFE, 0xDC, 0xD7, 0xAF, 0x41, 0x4B, 0x96, 0x82, 0x25, 0x8E, 0x1, 0xB3, 0x97, 0x9B, 0xB7, 0x80, 0x4C, 0x58, 0x2, 0x22, 0xAA, 0x6C, 0x62, 0xA5, 0x80, 0x65, 0x8D, 0x7E, 0x61, 0xFD, 0x47, 0x37, 0x39, 0x1, 0x4A, 0xF3, 0x4B, 0xCB, 0x1, 0x10, 0xCA, 0x4, 0x96, 0x75, 0x4D, 0x9E, 0xD4, 0x2, 0x95, 0xDA, 0x83, 0xB6, 0xEF, 0xFE, 0xFB, 0xC1, 0x7D, 0xD3, 0x95, 0x11, 0xFF, 0xFF, 0x0, 0x29, 0xFE, 0x99, 0x5, 0x23, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0xD3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1F, 0xFE, 0x99, 0x4, 0x28, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x2, 0xD8, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2E, 0xFE, 0xA1, 0x6, 0xB8, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x25, 0x3, 0x23, 0x11, 0x21, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x21, 0x11, 0x33, 0x11, 0x6, 0xB8, 0x14, 0xE7, 0xFB, 0xD1, 0xFE, 0xA0, 0x3, 0xBD, 0xFE, 0x9F, 0x2, 0x81, 0xFD, 0xCD, 0xFD, 0xD4, 0x1, 0x5F, 0x4, 0xED, 0xC3, 0xC3, 0xFB, 0xDD, 0x4, 0xE6, 0xFB, 0x1D, 0x0, 0x1, 0x0, 0x26, 0xFE, 0xBF, 0x5, 0x3B, 0x4, 0x3B, 0x0, 0xF, 0x0, 0x0, 0x25, 0x3, 0x23, 0x11, 0x21, 0x11, 0x23, 0x35, 0x21, 0x15, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x5, 0x3B, 0x14, 0xDD, 0xFC, 0xD2, 0xF6, 0x2, 0xC4, 0xDC, 0x1, 0xA7, 0xF3, 0xC2, 0xFD, 0xFD, 0x1, 0x41, 0x3, 0x77, 0xC4, 0xC4, 0xFD, 0x4C, 0x3, 0x77, 0xFC, 0x88, 0xFF, 0xFF, 0x0, 0x8E, 0xFE, 0x99, 0x5, 0xAE, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x77, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x4, 0x5E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFE, 0x99, 0x4, 0xA6, 0x4, 0x3B, 0x0, 0x26, 0x2, 0x8F, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0x56, 0x0, 0x0, 0x0, 0x1, 0x0, 0x81, 0x0, 0x0, 0x4, 0xE1, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x7, 0x15, 0x23, 0x35, 0x26, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x17, 0x11, 0x33, 0x11, 0x36, 0x37, 0x11, 0x33, 0x4, 0xE1, 0xFC, 0x61, 0x6F, 0xA3, 0xE7, 0xFE, 0xF6, 0xFC, 0x7A, 0x7B, 0xA3, 0x6E, 0x62, 0xFC, 0x2, 0x3E, 0x19, 0xA, 0xEB, 0xE5, 0x7, 0xDA, 0xF1, 0x1, 0xC9, 0xFE, 0x37, 0x91, 0x70, 0x5, 0x1, 0x2A, 0xFE, 0xDC, 0xB, 0x17, 0x2, 0xA7, 0x0, 0x1, 0x0, 0x74, 0x0, 0x0, 0x3, 0xF6, 0x4, 0x3B, 0x0, 0x16, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x7, 0x15, 0x23, 0x35, 0x26, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17, 0x11, 0x33, 0x11, 0x36, 0x37, 0x11, 0x33, 0x3, 0xF6, 0xF4, 0x3A, 0x3B, 0xA4, 0xAD, 0xC8, 0xF3, 0x82, 0xA4, 0x3A, 0x3B, 0xF4, 0x1, 0x6A, 0xD, 0x5, 0x8C, 0x8C, 0x13, 0xC8, 0xBC, 0x1, 0x4C, 0xFE, 0xB4, 0xAF, 0x20, 0x1, 0xB, 0xFE, 0xF0, 0x5, 0xE, 0x2, 0xC, 0x0, 0x1, 0x0, 0x85, 0x0, 0x0, 0x4, 0xE5, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x23, 0x11, 0x26, 0x26, 0x2, 0xD3, 0xA9, 0xA9, 0xFC, 0xFC, 0x9E, 0xB4, 0xF6, 0x1, 0x1C, 0xFC, 0x1, 0x89, 0x2, 0xD0, 0x29, 0xFD, 0x59, 0x5, 0xB0, 0xFD, 0xC2, 0x29, 0xD9, 0xF9, 0xFE, 0x37, 0x1, 0xCE, 0x97, 0x6B, 0x0, 0x2, 0x0, 0x17, 0xFF, 0xE9, 0x5, 0xBD, 0x5, 0xC4, 0x0, 0x7, 0x0, 0x25, 0x0, 0x0, 0x1, 0x21, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x26, 0x26, 0x35, 0x33, 0x14, 0x17, 0x36, 0x12, 0x24, 0x17, 0x20, 0x0, 0x11, 0x15, 0x21, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x2, 0x55, 0x2, 0x6C, 0x85, 0xA9, 0x9B, 0xA3, 0x3, 0x16, 0x1F, 0xC9, 0xA7, 0xFE, 0xC5, 0xFE, 0xB7, 0x9D, 0xA4, 0xB5, 0x8C, 0x1, 0x99, 0x1, 0x2, 0x9F, 0x1, 0x13, 0x1, 0x17, 0xFC, 0x98, 0xB1, 0xD6, 0x7C, 0xAC, 0x36, 0x3, 0x55, 0x1F, 0x9E, 0xDB, 0xED, 0xFC, 0x3F, 0x12, 0x44, 0x1, 0x62, 0x1, 0x14, 0x45, 0x18, 0xD7, 0xA7, 0xB4, 0x2A, 0xB5, 0x1, 0x16, 0x9D, 0x1, 0xFE, 0x91, 0xFE, 0xC9, 0x88, 0x36, 0xAC, 0xF5, 0x31, 0x16, 0x0, 0x2, 0xFF, 0xCA, 0xFF, 0xEC, 0x4, 0x8B, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x21, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x0, 0x27, 0x26, 0x26, 0x35, 0x33, 0x14, 0x17, 0x36, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x2, 0xBC, 0x63, 0x7B, 0x11, 0x1, 0xCE, 0x4, 0x61, 0x1, 0x44, 0x34, 0xCC, 0xA1, 0xED, 0xFE, 0xEC, 0x4, 0x83, 0x87, 0xAA, 0x69, 0x21, 0x1, 0xA, 0xB5, 0xEC, 0xE2, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA8, 0x68, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFD, 0x2D, 0x4C, 0x80, 0x1, 0x25, 0xDA, 0x1E, 0xBF, 0x93, 0x95, 0x30, 0xCD, 0xEB, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x0, 0x1, 0x0, 0x91, 0xFE, 0xBE, 0x4, 0xEE, 0x5, 0xB0, 0x0, 0x18, 0x0, 0x0, 0x1, 0x27, 0x32, 0x36, 0x36, 0x27, 0x10, 0x25, 0x21, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x16, 0x0, 0x15, 0x14, 0x2, 0x2, 0xEA, 0x1, 0x6D, 0x72, 0x2A, 0x1, 0xFE, 0xB0, 0xFE, 0xF5, 0x8, 0xFD, 0xFD, 0x70, 0x1, 0xB3, 0x1, 0x31, 0xFE, 0x23, 0xE4, 0x1, 0x5, 0xF3, 0xFE, 0xBE, 0xC2, 0x6D, 0xA9, 0x5B, 0x1, 0x78, 0x8, 0x1, 0xFD, 0x8E, 0x5, 0xB0, 0xFD, 0xA5, 0x2, 0x5B, 0xFD, 0x8B, 0x1D, 0xFE, 0xDA, 0xFE, 0xEE, 0xFE, 0xB2, 0x0, 0x1, 0x0, 0x8E, 0xFE, 0xE9, 0x4, 0x43, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x1, 0x27, 0x36, 0x35, 0x2, 0x21, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x2, 0xBE, 0x55, 0xDE, 0x2, 0xFE, 0xBE, 0x82, 0xF3, 0xF3, 0x54, 0x1, 0x42, 0x1, 0x2C, 0xFE, 0x8B, 0xA5, 0xC6, 0x4C, 0xA7, 0xFE, 0xE9, 0xAD, 0x49, 0xC9, 0x1, 0x5, 0xFE, 0x53, 0x4, 0x3A, 0xFE, 0x51, 0x1, 0xAF, 0xFE, 0x28, 0x26, 0xDC, 0xB8, 0x4B, 0xB7, 0x9B, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x7D, 0x5, 0xDB, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x73, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x4, 0x7E, 0xFF, 0xC5, 0xFF, 0xFF, 0x0, 0x22, 0xFE, 0x7D, 0x4, 0xE5, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x88, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x3, 0x88, 0xFF, 0xC5, 0x0, 0x1, 0x0, 0x9B, 0xFE, 0x4B, 0x5, 0x13, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x11, 0x23, 0x9B, 0xFC, 0x2, 0x80, 0xFC, 0xBF, 0xA7, 0x46, 0x3C, 0xE, 0x2A, 0x39, 0x7A, 0x1, 0xFD, 0x80, 0xFC, 0x5, 0xB0, 0xFD, 0x83, 0x2, 0x7D, 0xFA, 0x17, 0xB9, 0xC3, 0x11, 0xC7, 0xD, 0xAE, 0x2, 0xA5, 0xFD, 0x97, 0x0, 0x1, 0x0, 0x7F, 0xFE, 0x4B, 0x4, 0x9, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x11, 0x23, 0x7F, 0xF2, 0x1, 0xA5, 0xF3, 0xBC, 0xA4, 0x45, 0x3A, 0xE, 0x29, 0x39, 0x7B, 0x1, 0xFE, 0x5B, 0xF2, 0x4, 0x3A, 0xFE, 0x3D, 0x1, 0xC3, 0xFB, 0x87, 0xB6, 0xC0, 0x11, 0xBF, 0xD, 0xB0, 0x1, 0xF7, 0xFE, 0x4B, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x7D, 0x5, 0xE8, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x4, 0x8B, 0xFF, 0xC5, 0xFF, 0xFF, 0x0, 0x86, 0xFE, 0x7D, 0x4, 0xE2, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x8A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x3, 0x85, 0xFF, 0xC5, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x7D, 0x7, 0x31, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x32, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x5, 0xD4, 0xFF, 0xC5, 0xFF, 0xFF, 0x0, 0x8F, 0xFE, 0x7D, 0x6, 0x41, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x89, 0x0, 0x0, 0x0, 0x7, 0x0, 0x11, 0x4, 0xE4, 0xFF, 0xC5, 0x0, 0x2, 0x0, 0x51, 0xFF, 0xEB, 0x5, 0x1E, 0x5, 0xC4, 0x0, 0x16, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x14, 0x2, 0x4, 0x27, 0x20, 0x0, 0x11, 0x35, 0x21, 0x26, 0x2, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x20, 0x0, 0x11, 0x1, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x1E, 0xA4, 0xFE, 0xEA, 0xAC, 0xFE, 0xD0, 0xFE, 0xC9, 0x3, 0xD1, 0x3, 0xC6, 0xE7, 0x83, 0xB6, 0x39, 0x31, 0x20, 0xD4, 0xAF, 0x1, 0x4F, 0x1, 0x5D, 0xFD, 0x9A, 0xA1, 0xB7, 0xF, 0xFD, 0x2F, 0xA0, 0x2, 0x9B, 0xCB, 0xFE, 0xCA, 0xAF, 0x1, 0x1, 0x6E, 0x1, 0x36, 0x8E, 0xC1, 0x1, 0xF, 0x30, 0x16, 0xC5, 0x13, 0x44, 0xFE, 0x7D, 0xFE, 0xCF, 0xFD, 0xB1, 0xEB, 0xAC, 0x1F, 0x9D, 0xDB, 0x0, 0x1, 0x0, 0x5C, 0xFF, 0xEB, 0x4, 0x4B, 0x5, 0xB0, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x47, 0x78, 0xE2, 0x91, 0xFC, 0x82, 0x6D, 0x7E, 0x8A, 0x98, 0x92, 0x8C, 0x1, 0x66, 0xFD, 0x93, 0x3, 0x91, 0x1, 0xFE, 0x86, 0xC7, 0xDA, 0xFE, 0xDD, 0x15, 0x58, 0xBC, 0x95, 0x5B, 0x84, 0x82, 0x61, 0x95, 0x84, 0xAD, 0x1, 0x87, 0xCB, 0xA3, 0xFE, 0x51, 0x19, 0xE9, 0xC4, 0xCD, 0xE0, 0x0, 0x1, 0x0, 0x5E, 0xFE, 0x75, 0x4, 0x46, 0x4, 0x3A, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x46, 0x77, 0xE1, 0x90, 0xF3, 0x85, 0x70, 0x80, 0x8E, 0x9B, 0x93, 0x8E, 0x1, 0x5C, 0xFD, 0x9B, 0x3, 0x8D, 0x1, 0xFE, 0x89, 0xC7, 0xD9, 0xFE, 0xDF, 0xFE, 0x75, 0x58, 0xBB, 0x95, 0x5E, 0x87, 0x85, 0x64, 0x97, 0x82, 0xAB, 0x1, 0x91, 0xC4, 0x9B, 0xFE, 0x44, 0x18, 0xE7, 0xC3, 0xCC, 0xE0, 0xFF, 0xFF, 0x0, 0x32, 0xFE, 0x4B, 0x4, 0x8A, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x30, 0x52, 0x0, 0x0, 0x26, 0x7, 0xA4, 0xA2, 0x29, 0x0, 0x7, 0x7, 0xE3, 0x1, 0x35, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2C, 0xFE, 0x47, 0x3, 0xA2, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x82, 0x55, 0x0, 0x0, 0x27, 0x7, 0xA4, 0xFF, 0x9C, 0xFF, 0x79, 0x0, 0x7, 0x7, 0xE3, 0x1, 0xB, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x29, 0xFE, 0x4B, 0x5, 0x51, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xE3, 0x3, 0xC3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1F, 0xFE, 0x4B, 0x4, 0x55, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xE3, 0x2, 0xC7, 0x0, 0x0, 0x0, 0x2, 0x0, 0x52, 0x0, 0x0, 0x4, 0x83, 0x5, 0xB0, 0x0, 0xA, 0x0, 0x12, 0x0, 0x0, 0x21, 0x21, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x21, 0x11, 0x33, 0x3, 0x11, 0x21, 0x22, 0x6, 0x14, 0x16, 0x33, 0x4, 0x83, 0xFD, 0xDA, 0xF7, 0xFE, 0xEC, 0x1, 0x14, 0xF7, 0x1, 0x29, 0xFD, 0xFD, 0xFE, 0xD7, 0x8D, 0x81, 0x81, 0x8D, 0x1, 0x8, 0xC8, 0xCA, 0x1, 0x2, 0x2, 0x14, 0xFB, 0x1A, 0x2, 0x7, 0x9A, 0xCA, 0xA3, 0x0, 0x2, 0x0, 0x68, 0x0, 0x0, 0x6, 0xB0, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x20, 0x0, 0x0, 0x25, 0x11, 0x21, 0x22, 0x6, 0x14, 0x16, 0x33, 0x15, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x21, 0x11, 0x33, 0x11, 0x37, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x7, 0x6, 0x6, 0x23, 0x3, 0x9C, 0xFE, 0xD7, 0x8D, 0x81, 0x81, 0x8D, 0xF7, 0xFE, 0xEC, 0x1, 0x14, 0xF7, 0x1, 0x29, 0xFD, 0x4A, 0x6C, 0x60, 0x3, 0x2, 0x20, 0x1E, 0xF5, 0x1A, 0x2B, 0x2, 0x4, 0xF8, 0xCF, 0xCA, 0x2, 0x7, 0x9A, 0xCA, 0xA3, 0xCA, 0x1, 0x8, 0xC8, 0xCA, 0x1, 0x2, 0x2, 0x14, 0xFB, 0x1A, 0x1, 0x2, 0xA0, 0x66, 0x4D, 0xD5, 0x4D, 0x4D, 0xD2, 0x50, 0xD7, 0xFC, 0x0, 0x2, 0x0, 0x5F, 0xFF, 0xE7, 0x6, 0x7E, 0x6, 0x18, 0x0, 0x1E, 0x0, 0x2A, 0x0, 0x0, 0x5, 0x6, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x0, 0x25, 0x32, 0x37, 0x27, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x4, 0x90, 0xFF, 0x57, 0x69, 0xCD, 0xCA, 0xDB, 0xDA, 0xCD, 0xA2, 0x65, 0xF3, 0x4E, 0x42, 0x77, 0x7F, 0x3, 0x3, 0x3F, 0xEC, 0x1B, 0x2A, 0x2, 0x4, 0xFE, 0xDB, 0xFC, 0xEF, 0x8A, 0x48, 0x7, 0x47, 0x82, 0x84, 0x6F, 0x6E, 0x15, 0x4, 0xB7, 0xB3, 0x1, 0x28, 0xE8, 0x14, 0xFC, 0x1, 0x43, 0x77, 0x2, 0x41, 0xFB, 0x4C, 0x4F, 0x66, 0x2, 0xBE, 0xA2, 0xC2, 0xD1, 0x61, 0xCB, 0x67, 0xFE, 0xEA, 0xFE, 0xF0, 0xC7, 0x71, 0x45, 0x1, 0xB8, 0x68, 0xDD, 0xB1, 0x8B, 0xBD, 0x0, 0x1, 0x0, 0x3C, 0xFF, 0xE8, 0x5, 0xE4, 0x5, 0xB0, 0x0, 0x2A, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x21, 0x16, 0x4, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x15, 0x6, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x0, 0x4, 0x2, 0x9F, 0xBA, 0x8, 0x79, 0x68, 0xD9, 0xA6, 0x97, 0x81, 0x7B, 0x8F, 0xFE, 0xA1, 0x1, 0x68, 0xF7, 0x1, 0x6, 0xFF, 0x8D, 0x6E, 0x1, 0x3B, 0x34, 0x68, 0x6F, 0x4, 0x4, 0x41, 0xF6, 0x1A, 0x2B, 0x2, 0x4, 0xFE, 0xE1, 0x15, 0x3, 0x9D, 0xB3, 0x42, 0x68, 0x81, 0xCD, 0x1, 0x72, 0x6F, 0x5F, 0x72, 0xCD, 0x2, 0xD4, 0xCA, 0xE5, 0x64, 0x26, 0xAF, 0x76, 0x44, 0x37, 0x4A, 0x2, 0xBA, 0x9E, 0xBB, 0xD8, 0x61, 0xCB, 0x67, 0xFE, 0xE9, 0xFE, 0xF1, 0x0, 0x1, 0x0, 0x30, 0xFF, 0xE2, 0x4, 0xFF, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x35, 0x26, 0x27, 0x23, 0x27, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x27, 0x21, 0x16, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x15, 0x6, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x6, 0x6, 0x3, 0x54, 0x9D, 0xA0, 0x9, 0x2, 0x98, 0xED, 0x2, 0xC2, 0xB8, 0x5A, 0x69, 0xFE, 0xFA, 0x6, 0x1, 0x1A, 0xCB, 0xDE, 0xB0, 0xBE, 0x2, 0x4E, 0x59, 0x61, 0x3, 0x3, 0x3F, 0xEB, 0x1B, 0x2B, 0x2, 0x4, 0xFE, 0x1B, 0x3, 0x72, 0x82, 0x4E, 0x78, 0x2, 0xBC, 0x4, 0x83, 0x41, 0x56, 0xC2, 0x3, 0xA9, 0x97, 0x9B, 0x4A, 0x30, 0xBA, 0x3C, 0x58, 0x2, 0x90, 0x7D, 0x9D, 0xA2, 0x50, 0xA1, 0x4E, 0xE1, 0xDD, 0x0, 0x1, 0x0, 0x49, 0xFE, 0xB9, 0x4, 0x38, 0x5, 0xB0, 0x0, 0x25, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x37, 0x23, 0x26, 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, 0x23, 0x27, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x27, 0x21, 0x16, 0x4, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x15, 0x33, 0x7, 0x14, 0x6, 0x3, 0x7A, 0x83, 0x23, 0x37, 0x9, 0xA3, 0x2E, 0x11, 0x7E, 0x71, 0xF2, 0x1, 0xCE, 0x92, 0x81, 0x7F, 0x8C, 0xFE, 0xE0, 0x3, 0x1, 0x30, 0xEC, 0x1, 0x4, 0xE5, 0x82, 0x65, 0xCD, 0x1, 0x67, 0xFE, 0xB9, 0x4E, 0x38, 0x78, 0x49, 0x28, 0xAA, 0x23, 0x73, 0x71, 0x83, 0xC3, 0x1, 0x74, 0x6F, 0x69, 0x81, 0xC3, 0x3, 0xDB, 0xC9, 0xE0, 0x65, 0x29, 0xB7, 0x7A, 0x7D, 0xAD, 0x65, 0xDA, 0x0, 0x1, 0x0, 0x75, 0xFE, 0xA8, 0x4, 0x1B, 0x4, 0x3A, 0x0, 0x21, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x37, 0x23, 0x26, 0x26, 0x2, 0x27, 0x21, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x27, 0x21, 0x16, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x15, 0x33, 0x15, 0x14, 0x6, 0x3, 0x5D, 0x83, 0x26, 0x38, 0x7, 0xA7, 0x18, 0x12, 0x2, 0xB7, 0xFE, 0xFE, 0xF0, 0xC2, 0x62, 0x6B, 0xFE, 0xE1, 0x4, 0x1, 0x2C, 0xCF, 0xE9, 0xAE, 0x65, 0x4F, 0xBC, 0x67, 0xFE, 0xA8, 0x4E, 0x3C, 0x7E, 0x50, 0x12, 0x4B, 0x1, 0x3B, 0x4, 0xB3, 0x4, 0x8A, 0x42, 0x5A, 0xC1, 0x2, 0xB2, 0x9B, 0x9E, 0x4F, 0x21, 0x89, 0x5A, 0x1E, 0xAD, 0x65, 0xDA, 0x0, 0x1, 0x0, 0x43, 0xFF, 0xEB, 0x7, 0x80, 0x5, 0xB0, 0x0, 0x20, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x23, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x11, 0x14, 0x16, 0x37, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x0, 0x5, 0x90, 0xB1, 0xD7, 0xFE, 0x61, 0x1A, 0x16, 0xC6, 0xE7, 0x49, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x3, 0x8D, 0x4A, 0x41, 0x73, 0x7B, 0x3, 0x4, 0x40, 0xF6, 0x1A, 0x2B, 0x2, 0x4, 0xFE, 0xD9, 0x15, 0xB2, 0xCD, 0x3, 0x79, 0xFD, 0xCD, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xFB, 0xBA, 0x4E, 0x66, 0x1, 0x1, 0xBB, 0x9E, 0xBE, 0xD5, 0x61, 0xCB, 0x67, 0xFE, 0xEA, 0xFE, 0xF0, 0x0, 0x1, 0x0, 0x41, 0xFF, 0xEB, 0x6, 0x59, 0x4, 0x3A, 0x0, 0x20, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x23, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x14, 0x16, 0x37, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x4, 0x4, 0xA1, 0xB1, 0xD9, 0xFE, 0xF8, 0x15, 0x13, 0xAA, 0xAC, 0x4F, 0x1, 0x27, 0x5F, 0x45, 0xA, 0x14, 0x2, 0xE0, 0x51, 0x46, 0x5D, 0x64, 0x2, 0x4, 0x40, 0xEC, 0x1A, 0x2B, 0x2, 0x4, 0xFE, 0xFB, 0x15, 0xB1, 0xCC, 0x2, 0xD, 0xFE, 0x8C, 0xFE, 0xEB, 0xEA, 0x2, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xFD, 0x2E, 0x50, 0x6A, 0x1, 0x1, 0xA9, 0x8F, 0xB5, 0xC8, 0x5C, 0xC0, 0x61, 0xFE, 0xFF, 0xFC, 0x0, 0x1, 0x0, 0x94, 0xFF, 0xE8, 0x7, 0x86, 0x5, 0xB0, 0x0, 0x1C, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x35, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x0, 0x5, 0x95, 0xB0, 0xCC, 0xB, 0xFD, 0x83, 0xFD, 0xFD, 0x2, 0x7D, 0xFD, 0x4B, 0x3F, 0x74, 0x7B, 0x3, 0x4, 0x41, 0xF6, 0x1C, 0x2A, 0x2, 0x4, 0xFE, 0xD9, 0x15, 0x3, 0xB5, 0xCD, 0xFF, 0xFD, 0x97, 0x5, 0xB0, 0xFD, 0x83, 0x2, 0x7D, 0xFB, 0xB6, 0x4D, 0x62, 0x2, 0xBA, 0x9E, 0xBB, 0xD8, 0x65, 0xC8, 0x66, 0xFE, 0xEA, 0xFE, 0xF0, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xE8, 0x6, 0x5D, 0x4, 0x3A, 0x0, 0x1C, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x35, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x4, 0x4, 0xA4, 0xB1, 0xCE, 0xB, 0xFE, 0x50, 0xF3, 0xF3, 0x1, 0xB0, 0xF3, 0x52, 0x45, 0x5D, 0x64, 0x3, 0x4, 0x40, 0xEB, 0x28, 0x1E, 0x2, 0x4, 0xFE, 0xFA, 0x15, 0x3, 0xB4, 0xCC, 0x52, 0xFE, 0x46, 0x4, 0x3A, 0xFE, 0x44, 0x1, 0xBC, 0xFD, 0x2A, 0x4E, 0x67, 0x2, 0xA8, 0x8F, 0xAF, 0xCE, 0x8F, 0x9F, 0x4F, 0xFE, 0xFF, 0xFC, 0x0, 0x1, 0x0, 0x5D, 0xFF, 0xEB, 0x4, 0xBC, 0x5, 0xC5, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x20, 0x0, 0x11, 0x11, 0x10, 0x0, 0x21, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x17, 0x16, 0x7, 0x6, 0x4, 0x2, 0xBB, 0xFE, 0xF1, 0xFE, 0xB1, 0x1, 0x4F, 0x1, 0xF, 0xDE, 0x89, 0x3E, 0x86, 0xA3, 0xA6, 0xBB, 0xBB, 0xA6, 0x7C, 0x84, 0x3, 0x3, 0x35, 0xF5, 0x27, 0x14, 0x2, 0x4, 0xFE, 0xD0, 0x15, 0x1, 0x61, 0x1, 0x9, 0x1, 0x6, 0x1, 0xA, 0x1, 0x60, 0x59, 0xB8, 0x44, 0xF2, 0xA9, 0xFE, 0xF8, 0xAB, 0xF3, 0x2, 0x86, 0x73, 0x96, 0xCA, 0xAC, 0x5B, 0x59, 0xE7, 0xE0, 0x0, 0x1, 0x0, 0x55, 0xFF, 0xEB, 0x3, 0xE6, 0x4, 0x4E, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x36, 0x36, 0x37, 0x34, 0x27, 0x33, 0x16, 0x7, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x2, 0x5A, 0x57, 0x3F, 0x2, 0x13, 0xEB, 0x1C, 0x1, 0x4, 0xDF, 0xA8, 0xF9, 0xFE, 0xF4, 0x1, 0x3, 0xEE, 0xBB, 0x5F, 0x2E, 0x62, 0x8A, 0x87, 0x77, 0x7F, 0xAF, 0x2, 0x49, 0x41, 0x76, 0x68, 0x8C, 0x52, 0xAA, 0xA6, 0x1, 0x45, 0xD8, 0x2A, 0xD8, 0x1, 0x44, 0x42, 0xBC, 0x3A, 0xDD, 0x7B, 0x2A, 0x7C, 0xDD, 0x0, 0x1, 0x0, 0x22, 0xFF, 0xE8, 0x5, 0x5A, 0x5, 0xB0, 0x0, 0x18, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x6, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x2, 0x0, 0x3, 0x6A, 0xB0, 0xCD, 0xA, 0xFE, 0x3F, 0x4, 0x80, 0xFE, 0x3D, 0x1, 0x4C, 0x40, 0x74, 0x7B, 0x3, 0x4, 0x40, 0xF5, 0x1B, 0x2A, 0x2, 0x4, 0xFE, 0xDA, 0x15, 0x3, 0xB5, 0xCD, 0x3, 0x79, 0xCD, 0xCD, 0xFC, 0x87, 0x4E, 0x65, 0x2, 0xBA, 0x9E, 0xB7, 0xDC, 0x61, 0xCB, 0x67, 0xFE, 0xEA, 0xFE, 0xF0, 0x0, 0x1, 0x0, 0x45, 0xFF, 0xE8, 0x4, 0xCD, 0x4, 0x3A, 0x0, 0x18, 0x0, 0x0, 0x5, 0x6, 0x26, 0x27, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x6, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x27, 0x33, 0x16, 0x16, 0x7, 0x6, 0x4, 0x3, 0x13, 0xB1, 0xCE, 0xA, 0xFE, 0xBB, 0x3, 0x8B, 0xFE, 0xAD, 0x1, 0x51, 0x46, 0x5E, 0x64, 0x3, 0x3, 0x3F, 0xEB, 0x1B, 0x2B, 0x2, 0x4, 0xFE, 0xF9, 0x15, 0x3, 0xB4, 0xCC, 0x2, 0x10, 0xC2, 0xC2, 0xFD, 0xF0, 0x50, 0x69, 0x2, 0x85, 0x73, 0x93, 0x9E, 0x4C, 0x99, 0x4C, 0xE1, 0xDD, 0x0, 0x1, 0x0, 0x82, 0xFF, 0xEB, 0x4, 0xFF, 0x5, 0xC5, 0x0, 0x27, 0x0, 0x0, 0x1, 0x14, 0x6, 0x4, 0x23, 0x20, 0x24, 0x35, 0x34, 0x25, 0x26, 0x26, 0x35, 0x34, 0x24, 0x21, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x4, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0xFF, 0xA5, 0xFE, 0xFF, 0x8A, 0xFF, 0x0, 0xFE, 0xB3, 0x1, 0xD, 0x73, 0x84, 0x1, 0x37, 0x1, 0x0, 0xDD, 0x1, 0x3F, 0xFC, 0xA7, 0x79, 0xA3, 0x97, 0x8C, 0x9E, 0xC0, 0xD2, 0xFE, 0xD2, 0xB0, 0xA0, 0x8A, 0xAA, 0x1, 0x94, 0x95, 0xBC, 0x58, 0xE0, 0xCD, 0xFD, 0x57, 0x30, 0xA5, 0x64, 0xCC, 0xD4, 0xDB, 0xBE, 0x5B, 0x73, 0x80, 0x56, 0x61, 0x79, 0xC7, 0x7, 0xE4, 0x61, 0x82, 0x84, 0x5B, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x4B, 0x5, 0xFC, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x73, 0x0, 0x0, 0x0, 0x7, 0x7, 0xE3, 0x4, 0x6E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x22, 0xFE, 0x4B, 0x5, 0x6, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x88, 0x0, 0x0, 0x0, 0x7, 0x7, 0xE3, 0x3, 0x78, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x7, 0x88, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x1, 0x23, 0x3, 0x2, 0x2, 0x7, 0x2D, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x2, 0x94, 0x1, 0x32, 0x1, 0x31, 0x1, 0x24, 0xFE, 0x48, 0x1, 0xC3, 0xFE, 0xD9, 0xFE, 0xC7, 0xFE, 0xC6, 0xFE, 0xD9, 0x1, 0xC3, 0xFE, 0xC4, 0xFA, 0x1B, 0x16, 0xC5, 0xE7, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xFD, 0xF2, 0x2, 0xE, 0xFD, 0x2E, 0xFD, 0x22, 0x2, 0x17, 0xFD, 0xE9, 0x2, 0xDE, 0x2, 0x7, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x5, 0xFE, 0x4, 0x3A, 0x0, 0x17, 0x0, 0x0, 0x33, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x3, 0x21, 0x1, 0x3, 0x23, 0x3, 0x2, 0x6, 0x7, 0x23, 0x1, 0x27, 0x5F, 0x44, 0xA, 0x14, 0x2, 0x43, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0x1, 0x56, 0xFE, 0xF3, 0xD8, 0xD7, 0xFE, 0xF2, 0x1, 0x56, 0xD0, 0xCA, 0x15, 0x13, 0xAA, 0xAC, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0xFD, 0xDA, 0x1, 0x72, 0xFE, 0x8E, 0x2, 0x26, 0x1, 0x50, 0xFE, 0x8B, 0xFE, 0xEB, 0xEA, 0x2, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x6, 0xF8, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x18, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x21, 0x32, 0x4, 0x17, 0x13, 0x21, 0x1, 0x1, 0x21, 0x1, 0x6, 0x23, 0x1, 0x91, 0x1, 0x31, 0x93, 0x81, 0x81, 0x93, 0xFE, 0xCF, 0xFC, 0x2, 0x2D, 0xC6, 0x1, 0x1, 0x30, 0xF2, 0x1, 0x2F, 0xFD, 0xE9, 0x2, 0x35, 0xFE, 0xD4, 0xFE, 0x4D, 0x85, 0xD2, 0x4, 0xE5, 0xFE, 0x3, 0x8A, 0x6D, 0x66, 0xA0, 0xFD, 0x38, 0xFD, 0xE3, 0x5, 0xB0, 0xA4, 0x87, 0x1, 0x2B, 0xFD, 0x74, 0xFC, 0xDC, 0x2, 0x72, 0x55, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x6, 0x2D, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x20, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x6, 0x6, 0x2, 0x48, 0x83, 0x73, 0x75, 0x83, 0x96, 0x41, 0x43, 0xDA, 0xB1, 0x6C, 0xF2, 0xDF, 0xA, 0x6D, 0xB7, 0x98, 0xC7, 0x2A, 0xCD, 0x1, 0x2D, 0xFE, 0x89, 0x1, 0x97, 0xFE, 0xC5, 0xDC, 0x28, 0xC8, 0xAF, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0xC3, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0x6D, 0x81, 0xAB, 0x93, 0x1, 0x2A, 0xFD, 0xE8, 0xFD, 0xDE, 0x1, 0x3B, 0x97, 0xB8, 0x0, 0x2, 0x0, 0x43, 0x0, 0x0, 0x7, 0x3C, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x13, 0x11, 0x21, 0x1, 0x21, 0x1, 0x26, 0x11, 0x34, 0x24, 0x33, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x3, 0x85, 0xEC, 0x8B, 0x88, 0x8A, 0x89, 0xEC, 0xFE, 0xE6, 0xFE, 0xE7, 0xFE, 0xF1, 0x1, 0x45, 0xFE, 0x1, 0x1B, 0xF4, 0x4, 0x9C, 0xFD, 0x4C, 0x2, 0x56, 0xFD, 0xAA, 0x2, 0xBB, 0x2, 0xE4, 0x2, 0x1, 0x87, 0x75, 0x7A, 0x8B, 0xFD, 0x1C, 0x2, 0x21, 0xFD, 0xDF, 0x2, 0x6C, 0x77, 0x1, 0x11, 0xD8, 0xE4, 0xCB, 0xFE, 0x6D, 0xC7, 0xFE, 0x3F, 0xCA, 0x0, 0x3, 0x0, 0x27, 0xFF, 0xEC, 0x6, 0xA5, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x10, 0x0, 0x2E, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x1, 0x6, 0x6, 0x23, 0x22, 0x24, 0x27, 0x23, 0x3, 0x23, 0x13, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x15, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x4, 0xD6, 0x63, 0x7B, 0x11, 0x1, 0xCE, 0x4, 0x62, 0xFD, 0x9F, 0xE1, 0x65, 0x5D, 0x57, 0x5E, 0x4, 0x94, 0x34, 0xCC, 0xA1, 0xD3, 0xFE, 0xF5, 0x1E, 0xEB, 0xE8, 0xFD, 0xFF, 0xCF, 0xE8, 0xCE, 0x1, 0xB7, 0x78, 0x9B, 0xEC, 0xE2, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA8, 0x68, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFE, 0xB7, 0x1, 0x37, 0x65, 0x39, 0x38, 0x61, 0xFE, 0x76, 0x4C, 0x80, 0xEB, 0xB7, 0xFE, 0x72, 0x1, 0xB6, 0x57, 0xD3, 0x95, 0xC5, 0x42, 0x56, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x0, 0x1, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x26, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x13, 0x27, 0x37, 0x17, 0x37, 0x21, 0x1, 0x17, 0x7, 0x27, 0x7, 0x1, 0x3, 0xEE, 0xFE, 0x12, 0x69, 0xFC, 0xFC, 0x5A, 0xE8, 0x96, 0x6F, 0x8D, 0x8A, 0x1, 0x39, 0xFE, 0xF8, 0xA9, 0x6E, 0xA2, 0xAC, 0x2, 0x3F, 0x2, 0x8B, 0xFD, 0x75, 0x5, 0xB0, 0xFD, 0x82, 0x1, 0x3A, 0x80, 0x82, 0x79, 0xBB, 0xFE, 0xA5, 0x91, 0x81, 0x8A, 0xE3, 0xFD, 0x16, 0x0, 0x1, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x5E, 0x4, 0x3B, 0x0, 0x14, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x37, 0x27, 0x37, 0x17, 0x37, 0x21, 0x7, 0x17, 0x7, 0x27, 0x7, 0x1, 0x3, 0x2D, 0xFE, 0xCF, 0x7A, 0xF3, 0xF3, 0x6F, 0x89, 0x88, 0x6B, 0x81, 0x4C, 0x1, 0x1B, 0xB7, 0x9C, 0x6A, 0x96, 0x6B, 0x1, 0x9F, 0x1, 0xAD, 0xFE, 0x53, 0x4, 0x3A, 0xFE, 0x51, 0xBD, 0x70, 0x83, 0x6A, 0x69, 0xFA, 0x80, 0x84, 0x7B, 0x92, 0xFD, 0xDB, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x4B, 0x8, 0x32, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x23, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x11, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x14, 0x6, 0x6, 0xCD, 0x45, 0x3A, 0xF, 0x32, 0x2D, 0x7A, 0x8F, 0x8C, 0x7A, 0x93, 0xFD, 0xFE, 0x43, 0x1B, 0x16, 0xC5, 0xE7, 0x4A, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x3, 0xAC, 0x95, 0xA4, 0xE4, 0x1, 0x7, 0xC0, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x2, 0x7, 0x9B, 0x6D, 0x1D, 0xFD, 0x4D, 0x4, 0xE5, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xFD, 0xCF, 0x1C, 0xDA, 0xF9, 0xFD, 0xF9, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x22, 0xFE, 0x4B, 0x6, 0xA3, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x23, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x5, 0x44, 0x45, 0x3B, 0xF, 0x27, 0x3C, 0x7A, 0x1, 0x6D, 0x68, 0x5F, 0x69, 0xF3, 0xFE, 0xCF, 0x15, 0x13, 0xAA, 0xAC, 0x4F, 0x1, 0x27, 0x5F, 0x44, 0xA, 0x14, 0x3, 0xA, 0x75, 0x79, 0xBD, 0xE4, 0xBA, 0xFE, 0x4B, 0x11, 0xBF, 0xD, 0xB0, 0x1, 0x8D, 0x76, 0x62, 0x19, 0xFD, 0xF6, 0x3, 0x76, 0xFE, 0x8B, 0xFE, 0xEB, 0xEA, 0x2, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xFE, 0x92, 0x1A, 0xC8, 0xD3, 0xFE, 0x76, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x9B, 0xFE, 0x4B, 0x8, 0x44, 0x5, 0xB0, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x14, 0x6, 0x6, 0xDF, 0x45, 0x3A, 0xE, 0x32, 0x2D, 0x7B, 0x8A, 0x8C, 0x85, 0x8E, 0xFC, 0xFD, 0x74, 0xFC, 0xFC, 0x2, 0x8C, 0xFC, 0x87, 0x8C, 0xF5, 0x1, 0x1D, 0xC0, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x2, 0x7, 0x9B, 0x6D, 0x1C, 0xFD, 0x4C, 0x2, 0x88, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x2, 0x5E, 0xFD, 0xD0, 0x1B, 0xDA, 0xF9, 0xFD, 0xF9, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x86, 0xFE, 0x4B, 0x6, 0xA0, 0x4, 0x3A, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x5, 0x41, 0x45, 0x3B, 0xF, 0x27, 0x3C, 0x7A, 0x1, 0x6A, 0x6B, 0x65, 0x63, 0xF3, 0xFE, 0x5B, 0xF3, 0xF3, 0x1, 0xA5, 0xF3, 0x64, 0x64, 0xD1, 0xF6, 0xBA, 0xFE, 0x4B, 0x11, 0xBF, 0xD, 0xB0, 0x1, 0x8D, 0x76, 0x62, 0x18, 0xFD, 0xF5, 0x1, 0xB5, 0xFE, 0x4B, 0x4, 0x3A, 0xFE, 0x3D, 0x1, 0xC3, 0xFE, 0x96, 0x16, 0xC8, 0xD3, 0xFE, 0x76, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x9B, 0xFE, 0x99, 0x5, 0xD6, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x5, 0xD6, 0xF2, 0xCC, 0xFD, 0x7F, 0xFC, 0x4, 0x7A, 0xB5, 0xFD, 0xE4, 0x1, 0x67, 0x4, 0xE5, 0xFB, 0x1B, 0x5, 0xB0, 0xFB, 0x5, 0x0, 0x1, 0x0, 0x86, 0xFE, 0x99, 0x4, 0xD7, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x4, 0xD7, 0xF3, 0xC4, 0xFE, 0x59, 0xF3, 0x3, 0x8D, 0xB5, 0xFD, 0xE4, 0x1, 0x67, 0x3, 0x76, 0xFC, 0x8A, 0x4, 0x3A, 0xFC, 0x7B, 0x0, 0x1, 0x0, 0x85, 0xFE, 0x99, 0x5, 0xB0, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x4, 0x17, 0x11, 0x33, 0x11, 0x23, 0x11, 0x23, 0x11, 0x26, 0x26, 0x23, 0x22, 0x7, 0x1, 0x81, 0xFC, 0xFC, 0xA2, 0xB0, 0xF4, 0x1, 0x1C, 0x2, 0xCB, 0xF3, 0xD4, 0x1, 0x89, 0x8C, 0xA7, 0xAB, 0x5, 0xB0, 0xFD, 0xC1, 0x2A, 0xD6, 0xF5, 0xFE, 0xE5, 0xFD, 0xE4, 0x1, 0x67, 0x1, 0xCE, 0x97, 0x6B, 0x2A, 0x0, 0x1, 0x0, 0x7A, 0xFE, 0x99, 0x4, 0xBD, 0x6, 0x0, 0x0, 0x15, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x4, 0xBD, 0xF2, 0xC5, 0x62, 0x5D, 0x91, 0x4A, 0xF2, 0xF2, 0x78, 0xB5, 0x9F, 0xC0, 0x1, 0xB5, 0xFD, 0xE4, 0x1, 0x67, 0x2, 0xBB, 0x71, 0x5C, 0x81, 0xFC, 0xF9, 0x6, 0x0, 0xFD, 0xC3, 0x8B, 0xB6, 0xDA, 0xFD, 0xF7, 0x0, 0x1, 0x0, 0xD, 0xFE, 0x4B, 0x5, 0x78, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x11, 0x14, 0x6, 0x8C, 0x45, 0x3A, 0xE, 0x32, 0x2D, 0x7B, 0xFC, 0x2, 0x8B, 0xFC, 0xFC, 0xFD, 0x75, 0xC1, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x5, 0xEF, 0xFD, 0xA2, 0x2, 0x5E, 0xFA, 0x50, 0x2, 0x88, 0xFD, 0x39, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0xD, 0xFE, 0x4B, 0x4, 0x84, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x11, 0x6, 0x6, 0x8C, 0x45, 0x3A, 0xE, 0x26, 0x3D, 0x7A, 0x1, 0xF3, 0x1, 0xA5, 0xF3, 0xF3, 0xFE, 0x5B, 0x1, 0xBB, 0xFE, 0x4B, 0x11, 0xC5, 0xC, 0xA9, 0x4, 0x7C, 0xFE, 0x3D, 0x1, 0xC3, 0xFB, 0xC6, 0x1, 0xB5, 0xFE, 0x8, 0xB4, 0xBE, 0x0, 0x2, 0x0, 0x24, 0xFE, 0x9A, 0xA, 0xCF, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x25, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x1, 0x11, 0x21, 0x11, 0x23, 0x3, 0x33, 0x36, 0x12, 0x13, 0x13, 0x21, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x3, 0x1, 0xB7, 0x2, 0x70, 0xFE, 0x57, 0x18, 0x1D, 0x2, 0x96, 0xFC, 0x41, 0xF3, 0x9, 0x76, 0x36, 0x84, 0x14, 0x26, 0x3, 0x96, 0x1, 0x27, 0xFD, 0x8A, 0x1, 0xAC, 0x1, 0x32, 0xFE, 0x6, 0x2, 0x19, 0xFE, 0xD4, 0xFE, 0x4A, 0xA5, 0xFD, 0xFE, 0xD9, 0xB8, 0xD, 0xCA, 0x4, 0x1B, 0xFE, 0x55, 0xFE, 0x6F, 0xFC, 0xF1, 0x1, 0x66, 0xFE, 0x9A, 0x2, 0x30, 0x34, 0x1, 0x19, 0x1, 0x27, 0x2, 0x72, 0xFD, 0x98, 0x2, 0x68, 0xFD, 0x98, 0x2, 0x68, 0xFD, 0x4C, 0xFD, 0x4, 0x2, 0x76, 0xFD, 0x8A, 0x2, 0x76, 0xFE, 0x54, 0xFD, 0xD0, 0x0, 0x2, 0x0, 0x27, 0xFE, 0xBE, 0x8, 0xFC, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x25, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x7, 0x2, 0x3, 0x11, 0x23, 0x11, 0x33, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x15, 0x33, 0x11, 0x23, 0x11, 0x1, 0x9E, 0x1, 0x9F, 0xFE, 0xEF, 0x5, 0xE, 0xFB, 0xF7, 0x5A, 0x54, 0x58, 0x7, 0xC, 0x2, 0xF0, 0xF6, 0xF3, 0x6B, 0x1, 0x2B, 0x1, 0x2C, 0xFE, 0x79, 0x1, 0xA8, 0xFE, 0xC4, 0xFE, 0xD4, 0x7B, 0xF3, 0xF6, 0x96, 0xF3, 0xC3, 0x2, 0xA6, 0xB6, 0xFE, 0xC4, 0xFE, 0x89, 0xFE, 0xBE, 0x2, 0x5, 0x5E, 0xC9, 0xCD, 0x1, 0x83, 0xFE, 0x51, 0x1, 0xAF, 0xFE, 0x51, 0x1, 0xAF, 0xFD, 0xFA, 0xFD, 0xCC, 0x1, 0xAD, 0xFE, 0x53, 0x1, 0xAD, 0xEA, 0xFD, 0xFB, 0x1, 0x42, 0x0, 0x3, 0x0, 0x3A, 0xFE, 0x9A, 0x5, 0xF2, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x7, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x7, 0x3, 0x21, 0x11, 0x13, 0x11, 0x21, 0x11, 0x23, 0x3, 0x33, 0x13, 0x26, 0x3, 0x11, 0x33, 0x11, 0x14, 0x17, 0x1, 0x21, 0x11, 0x33, 0x3, 0x4, 0x3D, 0x66, 0xFE, 0xEB, 0x6C, 0xB1, 0x2, 0x98, 0xB8, 0xFC, 0x41, 0xF4, 0x8, 0x51, 0xD6, 0xEC, 0x7, 0xFD, 0x61, 0x1, 0x82, 0x1, 0xEB, 0xB9, 0xD, 0x2, 0xE0, 0x2, 0x5, 0xFD, 0xFB, 0xCA, 0xFE, 0xB4, 0x1, 0x4B, 0xFC, 0x85, 0x1, 0x66, 0xFE, 0x9A, 0x2, 0x30, 0x1, 0x7C, 0x62, 0x1, 0x2C, 0x1, 0xDC, 0xFE, 0x37, 0xAE, 0x36, 0x2, 0xAD, 0xFB, 0x1A, 0xFD, 0xD0, 0x0, 0x3, 0x0, 0x2B, 0xFE, 0xBE, 0x4, 0xC9, 0x4, 0x3A, 0x0, 0x3, 0x0, 0x8, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x23, 0x3, 0x33, 0x5, 0x7, 0x21, 0x35, 0x21, 0x3, 0x11, 0x23, 0x11, 0x33, 0x37, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x17, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x3, 0x41, 0x1F, 0xD1, 0xF0, 0xFE, 0x9B, 0x6A, 0x1, 0xCF, 0xFE, 0xC2, 0xE2, 0xF6, 0x3A, 0x97, 0xA4, 0x2, 0xE8, 0x31, 0x1, 0x3F, 0x1, 0x85, 0x96, 0xF2, 0x3, 0x69, 0xFE, 0xB8, 0xB8, 0xA6, 0xA4, 0xFE, 0x99, 0xFE, 0xBE, 0x2, 0x5, 0xE6, 0x64, 0xF0, 0x1, 0x3D, 0xFE, 0xC9, 0x76, 0x36, 0x1, 0xE3, 0xFC, 0x89, 0xFD, 0xFB, 0x1, 0x42, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x99, 0x5, 0xCF, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x23, 0x35, 0x37, 0x36, 0x36, 0x13, 0x1, 0x62, 0x3, 0xAC, 0xC1, 0xF3, 0xCB, 0xFE, 0x42, 0x1A, 0x16, 0xC5, 0xE7, 0x4A, 0x31, 0x7B, 0x61, 0xD, 0x5, 0xB0, 0xFB, 0x5, 0xFD, 0xE4, 0x1, 0x67, 0x4, 0xE5, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x0, 0x1, 0x0, 0x22, 0xFE, 0x99, 0x4, 0xD8, 0x4, 0x3A, 0x0, 0x13, 0x0, 0x0, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x23, 0x27, 0x37, 0x36, 0x36, 0x37, 0x1, 0xA, 0x3, 0xA, 0xC4, 0xF2, 0xC5, 0xFE, 0xCF, 0x15, 0x13, 0xAA, 0xAC, 0x4F, 0x1, 0x27, 0x5F, 0x44, 0xA, 0x4, 0x3A, 0xFC, 0x7B, 0xFD, 0xE4, 0x1, 0x67, 0x3, 0x76, 0xFE, 0x8B, 0xFE, 0xEB, 0xEA, 0x2, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x0, 0x1, 0xFB, 0x6C, 0x4, 0xE1, 0x0, 0x1D, 0x6, 0x1, 0x0, 0xE, 0x0, 0x0, 0x1, 0x7, 0x23, 0x35, 0x1, 0x33, 0x17, 0x37, 0x33, 0x1, 0x15, 0x23, 0x27, 0x7, 0x23, 0xFC, 0xC2, 0x95, 0xC1, 0x1, 0xF, 0x8F, 0xB9, 0xBA, 0x8F, 0x1, 0x11, 0xC3, 0x96, 0x95, 0xD7, 0x5, 0x7D, 0x9C, 0xD, 0x1, 0x13, 0xBE, 0xBE, 0xFE, 0xEB, 0xB, 0x9C, 0x9C, 0x0, 0x4, 0xFB, 0xAF, 0x4, 0xC4, 0xFF, 0xC1, 0x6, 0x60, 0x0, 0x9, 0x0, 0x15, 0x0, 0x1F, 0x0, 0x2B, 0x0, 0x0, 0x0, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFC, 0xDB, 0x7F, 0x5F, 0x5E, 0x7F, 0x7F, 0x5E, 0x5F, 0x7F, 0x6D, 0x3F, 0x32, 0x31, 0x3F, 0x3F, 0x31, 0x32, 0x3F, 0xFE, 0x67, 0x43, 0x7C, 0x45, 0x45, 0x7C, 0x43, 0x3, 0xE, 0x44, 0x3E, 0x3D, 0x45, 0x45, 0x3D, 0x3E, 0x44, 0x5, 0xE6, 0x7A, 0x7A, 0xAC, 0x76, 0x76, 0x56, 0x2B, 0x44, 0x43, 0x2C, 0x2E, 0x44, 0x44, 0x6F, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0x2F, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x3, 0xFB, 0xD1, 0x4, 0x60, 0xFF, 0x9F, 0x6, 0x9D, 0x0, 0x19, 0x0, 0x25, 0x0, 0x31, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x37, 0x35, 0x34, 0x23, 0x22, 0x6, 0x7, 0x15, 0x16, 0x16, 0x21, 0x32, 0x36, 0x37, 0x35, 0x26, 0x26, 0x23, 0x22, 0x7, 0x15, 0x14, 0xFE, 0xA7, 0x52, 0x7A, 0x23, 0x23, 0x79, 0x52, 0x74, 0x85, 0x85, 0x73, 0x52, 0x7A, 0x23, 0x23, 0x7B, 0x52, 0x72, 0x85, 0x85, 0x73, 0x6F, 0x3, 0x71, 0x4E, 0x5B, 0x7, 0x6, 0x5C, 0xFE, 0x70, 0x4C, 0x5C, 0x6, 0x6, 0x5B, 0x4E, 0x73, 0x2, 0x4, 0x60, 0x60, 0x3B, 0x3B, 0x60, 0x9D, 0x73, 0x1D, 0x73, 0x9D, 0x5E, 0x3A, 0x3A, 0x5E, 0x9D, 0x73, 0x1D, 0x73, 0x9D, 0x71, 0x97, 0x25, 0x9F, 0x86, 0x1D, 0x11, 0x1D, 0x8A, 0x8A, 0x1D, 0x11, 0x1D, 0x86, 0x9A, 0x22, 0x9F, 0x0, 0x1, 0xFC, 0x8A, 0x4, 0x86, 0xFE, 0xE6, 0x7, 0x2E, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x35, 0x17, 0x11, 0x33, 0x11, 0x37, 0x15, 0xFD, 0xB8, 0xFE, 0xD2, 0xE3, 0x97, 0xE2, 0x4, 0x86, 0x1, 0x2D, 0xC3, 0xE2, 0x1, 0x9A, 0xFE, 0x67, 0xE1, 0xC3, 0xFF, 0xFF, 0xFC, 0x25, 0x4, 0xA7, 0xFF, 0x14, 0x6, 0xCB, 0x0, 0x27, 0x1, 0xD4, 0xFF, 0xA, 0x6, 0x14, 0x0, 0x27, 0x1, 0xD4, 0x0, 0xE5, 0x6, 0x14, 0x0, 0x7, 0x1, 0xD4, 0xFF, 0xF7, 0x7, 0x40, 0x0, 0x2, 0xFB, 0xA6, 0xFD, 0xD8, 0x0, 0x6, 0xFF, 0x7F, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x5, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x21, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0xFE, 0xA6, 0x5B, 0x5C, 0xA3, 0xA2, 0xA8, 0xA3, 0x61, 0x61, 0xA3, 0xA8, 0xA2, 0xFE, 0x4A, 0x5B, 0x5C, 0xA3, 0xA2, 0xA8, 0xA3, 0x61, 0x61, 0xA3, 0xA8, 0xA2, 0x81, 0x7D, 0x7D, 0xD0, 0xD7, 0x84, 0x84, 0xD7, 0xD0, 0x7D, 0x7D, 0xD0, 0xD7, 0x84, 0x84, 0xD7, 0xD0, 0x0, 0x1, 0xFB, 0x4C, 0xFE, 0x94, 0x0, 0x25, 0xFF, 0x8B, 0x0, 0x26, 0x0, 0x0, 0x5, 0x32, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x6, 0x23, 0x22, 0x26, 0x26, 0x27, 0x23, 0x22, 0x6, 0x6, 0x22, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x32, 0x36, 0x33, 0x32, 0x16, 0xFE, 0x86, 0x37, 0x50, 0x55, 0x45, 0x6B, 0x13, 0x7D, 0x1A, 0x3B, 0x2B, 0x34, 0x3C, 0x32, 0x34, 0x3B, 0x33, 0x27, 0x4, 0x2B, 0x34, 0x3C, 0x66, 0x3B, 0x35, 0x2A, 0x39, 0x1C, 0x7D, 0x13, 0x6E, 0x47, 0x51, 0x4F, 0x6E, 0x4B, 0x4C, 0x4B, 0x4A, 0xCF, 0x5A, 0x6A, 0x4E, 0x33, 0x4D, 0x2D, 0x2C, 0x2C, 0x2C, 0x1, 0x2D, 0x2C, 0x2C, 0x2D, 0x4B, 0x33, 0x4D, 0x69, 0x5A, 0x5A, 0x5A, 0x0, 0x1, 0xFD, 0x5B, 0xFD, 0xD5, 0xFE, 0xBD, 0xFF, 0x9C, 0x0, 0xB, 0x0, 0x0, 0x5, 0x33, 0x15, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x3, 0xFD, 0x5B, 0xB4, 0x4, 0x70, 0x1F, 0x1B, 0x30, 0x36, 0xF7, 0x5, 0x64, 0xC5, 0x68, 0x7, 0x93, 0xE, 0x1, 0x2, 0xFF, 0xFF, 0xFC, 0x76, 0xFD, 0xD5, 0xFF, 0x3D, 0xFF, 0x9C, 0x0, 0x27, 0x3, 0x27, 0xFF, 0x1B, 0x0, 0x0, 0x0, 0x7, 0x3, 0x27, 0x0, 0x80, 0x0, 0x0, 0x0, 0x1, 0xFD, 0x5B, 0xFE, 0x18, 0xFF, 0x38, 0x0, 0x96, 0x0, 0x3, 0x0, 0x0, 0x27, 0x1, 0x27, 0x1, 0xC8, 0xFE, 0xA1, 0x7E, 0x1, 0x64, 0x4B, 0xFD, 0xCD, 0x49, 0x2, 0x35, 0x0, 0x1, 0xFD, 0x57, 0xFE, 0x10, 0xFF, 0x3F, 0x0, 0x96, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x13, 0x17, 0x3, 0x16, 0x15, 0x14, 0x6, 0xFD, 0xD2, 0x33, 0x48, 0x43, 0x31, 0xFC, 0x78, 0xFA, 0x9, 0x48, 0xFE, 0x10, 0x48, 0x33, 0x32, 0x47, 0x3, 0x1, 0x8F, 0x4B, 0xFE, 0x70, 0x17, 0x19, 0x33, 0x48, 0x0, 0x2, 0xFB, 0xAA, 0x5, 0x2, 0xFF, 0xDD, 0x6, 0xAF, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xDE, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x8, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x5, 0x2, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x4, 0xFA, 0xED, 0x5, 0x2, 0x0, 0xB0, 0x6, 0xAF, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xB, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFE, 0xFE, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x9, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0xD6, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x5, 0x2, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x4A, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x2, 0xFB, 0x9D, 0xFD, 0xE3, 0xFF, 0xD0, 0xFF, 0x90, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xEB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x8, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xFD, 0xE3, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0x0, 0x2, 0xFA, 0xEF, 0x1, 0x77, 0x0, 0xA0, 0x3, 0x25, 0x0, 0xC, 0x0, 0x19, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1A, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x81, 0x81, 0xFB, 0x8B, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x62, 0x3F, 0x23, 0x1, 0x77, 0x4A, 0x11, 0x3E, 0x40, 0x3B, 0x3E, 0x10, 0x4C, 0xF, 0x6B, 0xB8, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6D, 0xF, 0x4C, 0x2D, 0x5C, 0x3F, 0x3F, 0x11, 0x0, 0x2, 0x0, 0x8, 0x0, 0x0, 0x4, 0x98, 0x4, 0x3A, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x23, 0x1, 0x33, 0x1, 0x2, 0xF6, 0xA6, 0xA5, 0x1, 0xF0, 0x59, 0xFE, 0x1D, 0x59, 0xFE, 0x1, 0xCD, 0xF7, 0x1, 0xCC, 0x1, 0x99, 0x1, 0x9A, 0xFE, 0x66, 0xFE, 0x67, 0xDC, 0xDC, 0x4, 0x3A, 0xFB, 0xC6, 0x0, 0x2, 0xFF, 0xF0, 0x0, 0x0, 0x6, 0x4, 0x4, 0x3A, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x1, 0x1, 0x27, 0x21, 0x7, 0x21, 0x1, 0x21, 0x15, 0x21, 0x17, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x2, 0xEF, 0x14, 0xFE, 0xFA, 0x1, 0x2B, 0x9, 0xFE, 0x76, 0x78, 0xFE, 0xFB, 0x2, 0x6F, 0x3, 0x77, 0xFD, 0xF6, 0xA, 0x1, 0xC3, 0xFE, 0x45, 0xC, 0x2, 0x1A, 0x1, 0x9D, 0x1, 0xE1, 0xFE, 0x1F, 0xFE, 0x63, 0xDC, 0xDC, 0x4, 0x3A, 0xC1, 0xE4, 0xC1, 0xFE, 0xED, 0xC1, 0x0, 0x3, 0x0, 0x3D, 0xFF, 0xEC, 0x6, 0x79, 0x4, 0x50, 0x0, 0xA, 0x0, 0x12, 0x0, 0x3C, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x15, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x1, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x22, 0x27, 0x6, 0x27, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x4, 0xD2, 0x3F, 0x85, 0x2B, 0xBD, 0x71, 0x76, 0x58, 0xFC, 0xD0, 0x6C, 0x77, 0xE, 0xFE, 0x3D, 0x60, 0x3, 0xB, 0xE1, 0x6D, 0x82, 0xC9, 0xD9, 0xE9, 0x2, 0xB7, 0x9, 0x8D, 0x92, 0x70, 0x8B, 0x36, 0x48, 0x29, 0xC7, 0x98, 0xFC, 0x8D, 0x35, 0xCC, 0x9C, 0xB6, 0xC2, 0xEF, 0xE8, 0xBF, 0x5F, 0x58, 0x5F, 0x6F, 0xF2, 0xF7, 0x3, 0x97, 0x3E, 0x29, 0xD0, 0x65, 0x42, 0x3E, 0x52, 0xFD, 0x19, 0x96, 0x73, 0x1E, 0x62, 0x89, 0xC3, 0x84, 0x85, 0x1, 0x1, 0x8, 0xE2, 0x8D, 0x7F, 0xAA, 0x3D, 0x1F, 0xA6, 0x20, 0x59, 0xA2, 0x3E, 0x64, 0xB5, 0x98, 0x9D, 0xAD, 0x47, 0x5A, 0x68, 0x5C, 0x3F, 0x13, 0x8F, 0xBC, 0x0, 0x3, 0x0, 0x1B, 0x0, 0x0, 0x4, 0xF3, 0x4, 0x3A, 0x0, 0x6, 0x0, 0xD, 0x0, 0x21, 0x0, 0x0, 0x1, 0x15, 0x33, 0x32, 0x35, 0x34, 0x27, 0x3, 0x11, 0x21, 0x32, 0x35, 0x34, 0x27, 0x1, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x15, 0x23, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0xCA, 0xC9, 0xCF, 0xCA, 0xCE, 0x1, 0xA, 0xBC, 0xB4, 0xFD, 0xFB, 0xBC, 0xBC, 0x1, 0xB8, 0xD1, 0xF4, 0x3B, 0xDA, 0xA7, 0x37, 0xE3, 0xCC, 0x3, 0x79, 0xFE, 0x7B, 0x80, 0x3, 0xFE, 0x54, 0xFE, 0xF4, 0x85, 0x84, 0x3, 0xFE, 0x33, 0x1, 0xCD, 0xAE, 0x1, 0xBF, 0x92, 0x9A, 0x54, 0x3F, 0xAE, 0x40, 0x58, 0x9A, 0x9B, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEF, 0x4, 0x1A, 0x4, 0x4E, 0x0, 0x19, 0x0, 0x0, 0x1, 0x33, 0x6, 0x4, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x32, 0x36, 0x3, 0x26, 0xF3, 0xF, 0xFF, 0x0, 0xCD, 0xD5, 0xFE, 0xE8, 0x1, 0x18, 0xD5, 0xD2, 0xFC, 0xF, 0xF3, 0x1D, 0xCD, 0x71, 0x8A, 0x8A, 0xE2, 0x69, 0x1, 0x94, 0xD3, 0xD2, 0x1, 0x12, 0xE0, 0x7C, 0xE0, 0x1, 0x11, 0xD1, 0xD1, 0xE1, 0xAA, 0x85, 0x7D, 0x85, 0xAC, 0x6E, 0x0, 0x2, 0x0, 0x86, 0x0, 0x0, 0x4, 0x3A, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x21, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x1, 0x78, 0xC5, 0x72, 0x98, 0x98, 0x72, 0xFE, 0x49, 0x1, 0xB7, 0xD7, 0x1, 0x26, 0xFE, 0xDA, 0xD7, 0x3, 0x79, 0xFD, 0x48, 0xA3, 0x79, 0x80, 0x7A, 0xA2, 0xFC, 0x87, 0x4, 0x3A, 0xFE, 0xF6, 0xD4, 0x7F, 0xD4, 0xFE, 0xF7, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x4, 0x9E, 0x4, 0x3A, 0x0, 0x26, 0x3, 0x34, 0x64, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x9D, 0xFF, 0x38, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x3, 0xC6, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x33, 0x11, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x86, 0x3, 0x40, 0xFD, 0xB2, 0x1, 0xF8, 0xFE, 0x8, 0x2, 0x4E, 0x4, 0x3A, 0xC1, 0xE2, 0xC2, 0xFE, 0xEC, 0xC1, 0xFF, 0xFF, 0x0, 0x4E, 0xFF, 0xEC, 0x3, 0xC4, 0x4, 0x4D, 0x0, 0x6, 0x2, 0x85, 0x0, 0x0, 0x0, 0x2, 0x0, 0x7A, 0xFE, 0x65, 0x1, 0x8D, 0x4, 0x3A, 0x0, 0x3, 0x0, 0xF, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x7C, 0xF3, 0xF, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0xFA, 0xAE, 0x37, 0x4B, 0x4B, 0x37, 0x38, 0x4B, 0x4B, 0x0, 0x1, 0x0, 0x1A, 0xFF, 0xEE, 0x3, 0x78, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x2, 0x86, 0xF2, 0xEF, 0xB6, 0xC4, 0xF5, 0xF3, 0x70, 0x56, 0x4D, 0x66, 0x4, 0x3A, 0xFD, 0x38, 0xB2, 0xD2, 0xB9, 0xBB, 0x5D, 0x56, 0x6B, 0x58, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x4, 0x53, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x1E, 0xFE, 0xC6, 0x6E, 0xF2, 0xF2, 0x55, 0x1, 0x42, 0x1, 0x2C, 0xFE, 0x69, 0x1, 0xB1, 0x1, 0xAE, 0xFE, 0x52, 0x4, 0x3A, 0xFE, 0x4C, 0x1, 0xB4, 0xFD, 0xFF, 0xFD, 0xC7, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x3, 0x92, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x33, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x15, 0x7, 0x11, 0x21, 0x15, 0xA7, 0x7A, 0x7A, 0xF2, 0xFE, 0xFE, 0x1, 0xF9, 0x1, 0xF2, 0x25, 0xB8, 0x25, 0x1, 0x90, 0xFE, 0xB9, 0x4D, 0xB8, 0x4D, 0xFE, 0x86, 0xC1, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x5, 0x66, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x1, 0x2, 0xA3, 0xFE, 0xD5, 0xF2, 0x1, 0x32, 0x1, 0x3E, 0x1, 0x40, 0x1, 0x30, 0xF3, 0xFE, 0xD5, 0x2, 0xD2, 0xFD, 0x2E, 0x4, 0x3A, 0xFC, 0xF1, 0x3, 0xF, 0xFB, 0xC6, 0x2, 0xCF, 0xFD, 0x31, 0xFF, 0xFF, 0x0, 0x85, 0x0, 0x0, 0x4, 0x12, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x86, 0xFF, 0x0, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEE, 0x4, 0x4E, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x14, 0x0, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x27, 0x34, 0x26, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x4E, 0xFE, 0xE5, 0xE3, 0xE2, 0xFE, 0xE2, 0x1, 0x1C, 0xE2, 0xE3, 0x1, 0x1D, 0xF3, 0x8F, 0xFC, 0x8D, 0x8E, 0x7F, 0x7E, 0x8D, 0x1, 0xE7, 0xE0, 0xFE, 0xE7, 0x1, 0x19, 0xE0, 0x70, 0xE0, 0x1, 0x17, 0xFE, 0xE9, 0xE0, 0x1, 0x8B, 0xAA, 0xAA, 0x8B, 0x71, 0x8B, 0xAD, 0xAD, 0x8B, 0x0, 0x1, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x3B, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x1, 0x66, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0x0, 0x2, 0x0, 0x50, 0x0, 0x26, 0x4, 0xB2, 0x4, 0x14, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x33, 0x32, 0x0, 0x15, 0x14, 0x0, 0x7, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x2, 0x77, 0xEB, 0xFE, 0xC4, 0x1, 0x3C, 0xEC, 0x14, 0xEC, 0x1, 0x3A, 0xFE, 0xCE, 0xE7, 0xD, 0x92, 0xD1, 0xCE, 0x91, 0x19, 0x8F, 0xD5, 0xD5, 0x8F, 0x26, 0x1, 0xB, 0xEB, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0xEA, 0xFE, 0xF6, 0x4, 0xF3, 0x7D, 0x88, 0x86, 0x7D, 0x1, 0x7D, 0x89, 0x87, 0x7C, 0x0, 0x1, 0x0, 0x50, 0x0, 0x4A, 0x4, 0xB2, 0x3, 0xF0, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x14, 0x16, 0x17, 0x15, 0x26, 0x2, 0x35, 0x34, 0x24, 0x37, 0x33, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x35, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x22, 0x6, 0x1, 0x13, 0x68, 0x4F, 0x9D, 0xDD, 0x1, 0x3C, 0xDD, 0x2A, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x2, 0x5, 0x58, 0x79, 0x5, 0xE5, 0x5, 0x1, 0x0, 0xB4, 0xF8, 0xF3, 0x2, 0xF4, 0xF8, 0xC4, 0xF1, 0x5, 0xE5, 0x5, 0x6F, 0x63, 0x95, 0x62, 0x62, 0x0, 0x3, 0x0, 0x25, 0x0, 0x26, 0x5, 0x6A, 0x4, 0x14, 0x0, 0x8, 0x0, 0x11, 0x0, 0x27, 0x0, 0x0, 0x1, 0x22, 0x7, 0x1, 0x36, 0x35, 0x34, 0x26, 0x27, 0x3, 0x32, 0x37, 0x1, 0x6, 0x15, 0x14, 0x16, 0x33, 0x5, 0x27, 0x6, 0x5, 0x23, 0x22, 0x0, 0x35, 0x34, 0x37, 0x27, 0x35, 0x17, 0x36, 0x25, 0x33, 0x32, 0x0, 0x15, 0x14, 0x7, 0x17, 0x2, 0xB7, 0x99, 0x60, 0x2, 0x5E, 0x13, 0xCE, 0x91, 0x4, 0x99, 0x5E, 0xFD, 0xA3, 0x13, 0xD5, 0x8F, 0x2, 0xB3, 0xD7, 0x94, 0xFE, 0xD9, 0x21, 0xEB, 0xFE, 0xC4, 0x20, 0x8B, 0xC9, 0x94, 0x1, 0x29, 0x21, 0xEC, 0x1, 0x3A, 0x20, 0x98, 0x3, 0x22, 0x3E, 0xFE, 0xD6, 0x2D, 0x37, 0x86, 0x7D, 0x1, 0xFD, 0xF7, 0x3C, 0x1, 0x29, 0x2C, 0x36, 0x87, 0x7C, 0x94, 0x6A, 0xC5, 0x4, 0x1, 0xB, 0xEB, 0x66, 0x56, 0x44, 0x91, 0x63, 0xC6, 0x4, 0xFE, 0xF7, 0xED, 0x66, 0x57, 0x4B, 0x0, 0x3, 0x0, 0x4C, 0xFF, 0xEC, 0x6, 0xE3, 0x4, 0x50, 0x0, 0xD, 0x0, 0x15, 0x0, 0x37, 0x0, 0x0, 0x1, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x1, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x22, 0x26, 0x27, 0x6, 0x6, 0x27, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x5, 0xF1, 0x76, 0x89, 0x87, 0x76, 0x77, 0x88, 0x87, 0x76, 0xFC, 0x1F, 0x5B, 0x74, 0x12, 0xFE, 0x4B, 0x64, 0x3, 0x54, 0x7F, 0xC1, 0x3F, 0x40, 0xB8, 0x6D, 0xE2, 0xE2, 0x2, 0xAA, 0xA, 0x87, 0x80, 0x6B, 0x8D, 0x37, 0x4F, 0x35, 0xC6, 0x91, 0x7E, 0xC4, 0x41, 0x3F, 0xC0, 0x7D, 0xEE, 0x1, 0x3, 0xFE, 0xFD, 0x2, 0x29, 0x92, 0xD2, 0xD2, 0x93, 0x14, 0x8F, 0xD5, 0xD5, 0x8F, 0xFE, 0x9C, 0x93, 0x6F, 0x19, 0x60, 0x89, 0xC3, 0x5E, 0x52, 0x53, 0x5E, 0x1, 0x1, 0xF, 0xD9, 0x8F, 0x7C, 0xAD, 0x36, 0x26, 0x9E, 0x2F, 0x52, 0x5D, 0x52, 0x52, 0x5D, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC4, 0x0, 0x2, 0x0, 0x4F, 0xFF, 0xEC, 0x3, 0x97, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x20, 0x0, 0x0, 0x4, 0x26, 0x35, 0x35, 0x34, 0x37, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x7, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0x14, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x1, 0x3F, 0xF0, 0x9B, 0x9B, 0xF3, 0x49, 0x68, 0x66, 0x4A, 0xF4, 0x9B, 0x9B, 0xEE, 0xFE, 0x9A, 0xB1, 0x5F, 0x51, 0x52, 0xBE, 0x51, 0x14, 0xD9, 0xC9, 0x10, 0xD1, 0x7D, 0x8B, 0xD7, 0x6E, 0x98, 0x98, 0x6E, 0xD6, 0x8B, 0x7D, 0xD2, 0x10, 0xC9, 0xD9, 0x1, 0xA2, 0xDF, 0x77, 0x78, 0x65, 0x82, 0x7E, 0x0, 0x1, 0x0, 0x4F, 0x2, 0x1D, 0x4, 0x4D, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x35, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x35, 0x36, 0x0, 0x33, 0x32, 0x0, 0x15, 0x4, 0x4D, 0xF3, 0x2, 0x8E, 0x7D, 0x7F, 0x8C, 0xF3, 0x1, 0x1, 0x1B, 0xE2, 0xE3, 0x1, 0x1D, 0x2, 0x1D, 0x42, 0x88, 0xA4, 0xA8, 0x8B, 0x3B, 0x3D, 0xDE, 0x1, 0x16, 0xFE, 0xE9, 0xE0, 0x0, 0x1, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0x4D, 0x2, 0x1E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x33, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x35, 0x35, 0x33, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x3, 0x5A, 0xF3, 0xFE, 0xE3, 0xE3, 0xE2, 0xFE, 0xE4, 0xF3, 0x8C, 0x7F, 0x7E, 0x8F, 0x2, 0x1E, 0x3B, 0xE0, 0xFE, 0xE9, 0x1, 0x17, 0xE0, 0x3B, 0x3C, 0x8B, 0xA8, 0xA8, 0x8B, 0x0, 0x2, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x3E, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x82, 0xEE, 0x70, 0x6B, 0x6B, 0x70, 0xEE, 0xF3, 0x1, 0xE1, 0xD8, 0xF6, 0xF6, 0xD8, 0x3, 0x79, 0xFE, 0x8A, 0x70, 0x49, 0x4B, 0x72, 0xFD, 0xC8, 0xFE, 0xBF, 0x4, 0x3A, 0xD5, 0xA7, 0xA8, 0xD5, 0x0, 0x2, 0x0, 0x31, 0x0, 0x0, 0x3, 0xEA, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x13, 0x11, 0x23, 0x3, 0x23, 0x1, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x11, 0x2, 0xF8, 0xE0, 0x66, 0x5D, 0x57, 0x5F, 0xED, 0xE2, 0xE8, 0xFD, 0x1, 0x0, 0xD0, 0xE9, 0xCE, 0x1, 0xD2, 0x2, 0x42, 0x1, 0x37, 0x65, 0x39, 0x38, 0x61, 0xFD, 0xBE, 0x1, 0x8E, 0xFE, 0x72, 0x1, 0xB6, 0x56, 0xD4, 0x95, 0xC5, 0xFB, 0xC6, 0x0, 0x2, 0x0, 0x31, 0x0, 0x0, 0x3, 0xEA, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x15, 0x0, 0x0, 0x21, 0x21, 0x22, 0x26, 0x35, 0x34, 0x37, 0x1, 0x33, 0x13, 0x33, 0x11, 0x33, 0x3, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x3, 0xEA, 0xFE, 0x2E, 0xCE, 0xE9, 0xD0, 0xFF, 0x0, 0xFD, 0xE8, 0xE2, 0xF2, 0xF2, 0xED, 0x5F, 0x57, 0x5D, 0x66, 0xC5, 0x95, 0xD4, 0x56, 0x1, 0xB6, 0xFE, 0x72, 0x1, 0x8E, 0xFC, 0x87, 0x1, 0x37, 0x5F, 0x3A, 0x3B, 0x63, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x3, 0xD2, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x8C, 0x1, 0x0, 0x0, 0x1, 0x0, 0x7A, 0xFF, 0xEE, 0x4, 0x78, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x4, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x3, 0x85, 0xF3, 0xFE, 0xE2, 0xE1, 0xDF, 0xFE, 0xE0, 0xF2, 0x94, 0x79, 0x7D, 0x8F, 0x4, 0x3A, 0xFD, 0x5D, 0xCB, 0xDE, 0xDE, 0xCB, 0x2, 0xA3, 0xFD, 0x5D, 0x70, 0x78, 0x78, 0x70, 0x0, 0x1, 0x0, 0x5B, 0x0, 0x53, 0x4, 0xA9, 0x3, 0xD3, 0x0, 0x11, 0x0, 0x0, 0x37, 0x35, 0x21, 0x36, 0x36, 0x35, 0x34, 0x27, 0x21, 0x35, 0x21, 0x15, 0x7, 0x16, 0x15, 0x14, 0x6, 0x23, 0x5B, 0x2, 0x8E, 0x91, 0x69, 0xA3, 0xFD, 0x1B, 0x4, 0x3A, 0x79, 0x8D, 0xD4, 0xF3, 0x53, 0xF3, 0x1, 0x66, 0x44, 0xB8, 0x37, 0xF3, 0xD7, 0xD, 0x6D, 0xCA, 0x9F, 0xC6, 0x0, 0x3, 0x0, 0x5B, 0x0, 0x53, 0x6, 0x10, 0x3, 0xD3, 0x0, 0x11, 0x0, 0x1B, 0x0, 0x25, 0x0, 0x0, 0x25, 0x35, 0x21, 0x36, 0x36, 0x35, 0x34, 0x27, 0x21, 0x35, 0x21, 0x15, 0x7, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x3, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x1, 0xC2, 0x2, 0x8D, 0x91, 0x69, 0xA3, 0xFD, 0x1C, 0x4, 0x3A, 0x79, 0x8D, 0xD5, 0xF3, 0xFC, 0x8B, 0x31, 0x45, 0x45, 0x31, 0x32, 0x44, 0x44, 0x33, 0x31, 0x46, 0x46, 0x31, 0x32, 0x44, 0x44, 0x53, 0xF3, 0x1, 0x66, 0x44, 0xB8, 0x37, 0xF3, 0xD7, 0xD, 0x6D, 0xCA, 0x9F, 0xC6, 0x2, 0x32, 0x44, 0x7C, 0x44, 0x44, 0x7C, 0x44, 0xFE, 0x1D, 0x44, 0x7C, 0x44, 0x44, 0x7C, 0x44, 0x0, 0x1, 0x0, 0x5B, 0xFF, 0x28, 0x4, 0xA9, 0x5, 0x25, 0x0, 0x1F, 0x0, 0x0, 0x17, 0x35, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x21, 0x35, 0x21, 0x32, 0x36, 0x35, 0x34, 0x27, 0x21, 0x35, 0x21, 0x15, 0x7, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x5B, 0x2, 0x8E, 0x92, 0x68, 0x63, 0x4D, 0xFD, 0x28, 0x2, 0x8E, 0x8A, 0x70, 0x77, 0xFC, 0xEF, 0x4, 0x3A, 0x74, 0x88, 0xAE, 0x4F, 0x5F, 0xD5, 0xEC, 0xD8, 0xF3, 0x69, 0x5A, 0x53, 0x69, 0x14, 0xF2, 0x69, 0x5A, 0x92, 0x3D, 0xF3, 0xDE, 0xB, 0x73, 0xC8, 0xD5, 0x53, 0x35, 0xA7, 0x71, 0x9D, 0xC7, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x3, 0xDE, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5B, 0x3, 0x0, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x5, 0xD0, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5C, 0x3, 0x0, 0xFF, 0xFF, 0x0, 0x56, 0x0, 0x0, 0x3, 0xC4, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5F, 0x4, 0x0, 0x0, 0x1, 0x0, 0x4E, 0xFF, 0xEC, 0x3, 0xC4, 0x4, 0x3A, 0x0, 0x1A, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x16, 0x16, 0x15, 0x14, 0x6, 0x2, 0x8, 0x6D, 0xCB, 0x82, 0xF2, 0x6E, 0x61, 0x64, 0x5E, 0xBB, 0xB6, 0x1, 0x22, 0xFD, 0xDF, 0x3, 0x4C, 0xFE, 0xC0, 0xA7, 0xB0, 0xF2, 0x14, 0x48, 0x97, 0x76, 0x3D, 0x5E, 0x60, 0x47, 0xA4, 0x4, 0x7C, 0x1, 0x5, 0xC4, 0x9B, 0xFE, 0xCF, 0xB, 0xA2, 0x7E, 0xA6, 0xB1, 0x0, 0x1, 0x0, 0x57, 0xFF, 0xEC, 0x3, 0xD6, 0x4, 0x4E, 0x0, 0x27, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x35, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x3, 0xD6, 0xEA, 0xDF, 0xC7, 0xEF, 0xC0, 0xA8, 0x8C, 0x7A, 0x58, 0x5C, 0x5F, 0x60, 0xF3, 0xE7, 0xCA, 0xC1, 0xE1, 0x9E, 0x94, 0xB8, 0x82, 0x64, 0x60, 0x52, 0x89, 0x5, 0x1, 0x56, 0x86, 0xE4, 0xAD, 0x91, 0x85, 0x86, 0x16, 0x4E, 0x9, 0x41, 0x3B, 0x34, 0x46, 0x63, 0x3F, 0x92, 0xC6, 0xB2, 0x85, 0x7F, 0x81, 0x1B, 0x55, 0x54, 0x39, 0x31, 0x47, 0x4F, 0x65, 0x0, 0x1, 0x0, 0x39, 0xFF, 0xEC, 0x4, 0x93, 0x4, 0x4D, 0x0, 0x20, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x26, 0x27, 0x26, 0xEF, 0xC8, 0xAF, 0xB0, 0xC8, 0xA0, 0x56, 0x3E, 0x77, 0x63, 0x78, 0x1B, 0x77, 0x7F, 0x72, 0x8C, 0x39, 0x3A, 0x8C, 0x71, 0x7F, 0x77, 0x1B, 0x78, 0x63, 0x77, 0x3E, 0x9F, 0x3B, 0x1B, 0x2, 0xF7, 0x8B, 0xCB, 0xCB, 0x8B, 0xAC, 0xE5, 0x64, 0x53, 0x2B, 0xC3, 0x2B, 0x48, 0x3D, 0x3D, 0x48, 0x2B, 0xC3, 0x2B, 0x53, 0xAA, 0xA2, 0x4B, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x3, 0x57, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x82, 0xA, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x4, 0x98, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x0, 0x21, 0x1, 0x1, 0x23, 0x1, 0x33, 0x1, 0x3, 0x9B, 0xFE, 0xB5, 0xFE, 0xB6, 0xFE, 0x1, 0xCD, 0xF7, 0x1, 0xCC, 0x3, 0x33, 0xFC, 0xCD, 0x4, 0x3A, 0xFB, 0xC6, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x1C, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x8B, 0x9, 0x0, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x3E, 0x4, 0x3A, 0x0, 0x6, 0x3, 0x47, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2E, 0x0, 0x0, 0x5, 0x24, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x21, 0x23, 0x11, 0x26, 0x0, 0x3, 0x35, 0x33, 0x15, 0x12, 0x5, 0x11, 0x33, 0x11, 0x24, 0x13, 0x35, 0x33, 0x15, 0x2, 0x2, 0x7, 0x3, 0x26, 0xF3, 0xFF, 0xFE, 0xFD, 0x3, 0xF3, 0x6, 0x1, 0xC, 0xF3, 0x1, 0x5, 0x7, 0xF2, 0x3, 0xFE, 0xFD, 0x1, 0xB, 0x1A, 0x1, 0x2B, 0x1, 0x12, 0xD8, 0xE0, 0xFE, 0xAF, 0x36, 0x2, 0x67, 0xFD, 0x9A, 0x39, 0x1, 0x4A, 0xE3, 0xD9, 0xFE, 0xF2, 0xFE, 0xD5, 0x1C, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x4, 0x14, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x88, 0x0, 0x0, 0x0, 0x2, 0x0, 0x1B, 0x2, 0x8C, 0x4, 0x14, 0x6, 0xC1, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x23, 0x1, 0x33, 0x1, 0x2, 0xB1, 0x98, 0x99, 0x1, 0xBE, 0x52, 0xFE, 0x59, 0x53, 0xD7, 0x1, 0xA2, 0xBA, 0x1, 0x9D, 0x4, 0x1E, 0x1, 0xB1, 0xFE, 0x4F, 0xFE, 0x6E, 0xEB, 0xEB, 0x4, 0x35, 0xFB, 0xCB, 0x0, 0x2, 0x0, 0x1B, 0x2, 0x8C, 0x5, 0x8A, 0x6, 0xC1, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x23, 0x1, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x2, 0xE6, 0x13, 0xF4, 0x1, 0x19, 0xA, 0xFE, 0x99, 0x84, 0xE8, 0x2, 0x5F, 0x2, 0xE2, 0xFE, 0x3E, 0xB, 0x1, 0x7C, 0xFE, 0x8B, 0xD, 0x1, 0xD1, 0x4, 0x30, 0x1, 0xD1, 0xFE, 0x2F, 0xFE, 0x5C, 0xFB, 0xFB, 0x4, 0x35, 0xA8, 0xFE, 0xF2, 0xA7, 0xFE, 0xD0, 0xA8, 0x0, 0x3, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x88, 0x6, 0xC1, 0x0, 0x8, 0x0, 0xF, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x33, 0x32, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x29, 0xC0, 0x56, 0x6A, 0x69, 0x62, 0xB5, 0xD7, 0xC3, 0xB5, 0xFE, 0x56, 0x1, 0x91, 0xAE, 0xCC, 0x9E, 0x5C, 0x5B, 0xC6, 0xAC, 0x6, 0x19, 0xFE, 0xEB, 0x47, 0x49, 0x4D, 0x38, 0xFE, 0x4E, 0xFE, 0xCC, 0x9B, 0x96, 0x3, 0xFE, 0x25, 0x4, 0x35, 0x8E, 0x97, 0x9C, 0x41, 0x19, 0x8C, 0x52, 0x9E, 0x9E, 0x0, 0x3, 0x0, 0x1B, 0x2, 0x8C, 0x4, 0x88, 0x6, 0xC1, 0x0, 0x8, 0x0, 0xF, 0x0, 0x23, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x33, 0x32, 0x35, 0x34, 0x27, 0x1, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x15, 0x23, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0xB0, 0xC0, 0x57, 0x6A, 0x6A, 0x61, 0xB6, 0xD7, 0xC3, 0xB5, 0xFE, 0x56, 0xD0, 0xD0, 0x1, 0x91, 0xAE, 0xCC, 0x39, 0xCB, 0xAB, 0x32, 0xC6, 0xAB, 0x6, 0x19, 0xFE, 0xEB, 0x47, 0x49, 0x4D, 0x38, 0xFE, 0x4E, 0xFE, 0xCC, 0x9B, 0x96, 0x3, 0xFE, 0x25, 0x1, 0xDB, 0x9D, 0x1, 0xBD, 0x8E, 0x97, 0x59, 0x3F, 0x9D, 0x43, 0x5C, 0x9E, 0x9E, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xA7, 0x6, 0xC1, 0x0, 0x7, 0x0, 0x11, 0x0, 0x0, 0x1, 0x11, 0x33, 0x20, 0x13, 0x35, 0x10, 0x25, 0x1, 0x11, 0x21, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x1, 0x28, 0x91, 0x1, 0x21, 0x8, 0xFE, 0xEE, 0xFE, 0x94, 0x1, 0x5F, 0xDD, 0x1, 0x7, 0xFE, 0xF8, 0xE6, 0x6, 0x1B, 0xFD, 0x18, 0x1, 0x47, 0x4A, 0x1, 0x4F, 0x8, 0xFC, 0x71, 0x4, 0x35, 0xFE, 0xEC, 0xEB, 0x36, 0xEA, 0xFE, 0xEA, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x30, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x13, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x64, 0x2, 0xC7, 0xFD, 0xFD, 0x1, 0xBD, 0xFE, 0x43, 0x2, 0x8, 0x2, 0x8C, 0x4, 0x35, 0xA6, 0xFE, 0xEA, 0xA7, 0xFE, 0xD5, 0xA7, 0x0, 0x1, 0x0, 0x35, 0x2, 0x8C, 0x3, 0x1, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x13, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x3A, 0x2, 0x4, 0xFE, 0x42, 0x1, 0xBE, 0xFD, 0xF7, 0x2, 0xCC, 0x2, 0x8C, 0xA7, 0x1, 0x16, 0xA7, 0x1, 0x2B, 0xA6, 0xFB, 0xCB, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x7B, 0x3, 0xA3, 0x6, 0xCE, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x11, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x20, 0x3, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x23, 0x35, 0x3, 0xA3, 0x22, 0xB1, 0xB6, 0xCA, 0xFE, 0xEC, 0xFD, 0xD1, 0xC2, 0xC4, 0x13, 0xAD, 0xE, 0x6C, 0x70, 0xFE, 0xFD, 0x8, 0x9C, 0x82, 0x65, 0x5D, 0x14, 0xE9, 0x4, 0xB1, 0xFE, 0x66, 0x2C, 0x70, 0x1, 0xB, 0xFA, 0x49, 0xF5, 0x1, 0x10, 0xC0, 0x95, 0x54, 0x5B, 0xFE, 0xB6, 0x5E, 0xAE, 0xB3, 0x2F, 0x15, 0xAE, 0xA0, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xDC, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x3, 0x19, 0xFE, 0xF, 0xC4, 0xC4, 0x1, 0xF1, 0xC3, 0x2, 0x8C, 0x1, 0xC9, 0xFE, 0x37, 0x4, 0x35, 0xFE, 0x3A, 0x1, 0xC6, 0xFB, 0xCB, 0x0, 0x1, 0x0, 0x7F, 0x2, 0x8C, 0x1, 0x42, 0x6, 0xC1, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x42, 0xC3, 0x6, 0xC1, 0xFB, 0xCB, 0x4, 0x35, 0x0, 0x1, 0x0, 0x28, 0x2, 0x78, 0x2, 0xF1, 0x6, 0xBC, 0x0, 0xE, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x2D, 0xC4, 0xCD, 0x92, 0x93, 0xD7, 0xBD, 0x64, 0x49, 0x96, 0x5, 0x6, 0xBC, 0xFD, 0x18, 0xB3, 0xA9, 0xA8, 0xAD, 0x56, 0x58, 0xA7, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xCD, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x1, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x1, 0x33, 0x1, 0x1, 0x2, 0xE2, 0xFE, 0xCF, 0x89, 0xC4, 0xC4, 0x1, 0x8F, 0xF7, 0xFE, 0x87, 0x1, 0x98, 0x2, 0x8C, 0x1, 0xD0, 0x99, 0xFE, 0xC9, 0x4, 0x35, 0xFE, 0xF, 0x1, 0xF1, 0xFE, 0x34, 0xFD, 0x97, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x18, 0x6, 0xC1, 0x0, 0x5, 0x0, 0x0, 0x13, 0x11, 0x33, 0x11, 0x21, 0x15, 0x64, 0xC4, 0x1, 0xF0, 0x2, 0x8C, 0x4, 0x35, 0xFC, 0x72, 0xA7, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x4, 0xD4, 0x6, 0xC1, 0x0, 0xE, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x1, 0x33, 0x11, 0x23, 0x11, 0x13, 0x1, 0x23, 0x1, 0x1, 0x29, 0xC5, 0xEA, 0x1, 0x4D, 0x1, 0x50, 0xE9, 0xC5, 0xE, 0xFE, 0xCC, 0x9C, 0xFE, 0xCD, 0x3, 0xFC, 0xFE, 0x90, 0x4, 0x35, 0xFC, 0xD2, 0x3, 0x2E, 0xFB, 0xCB, 0x1, 0x70, 0x1, 0x7D, 0xFD, 0x13, 0x2, 0xEE, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xD9, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x1, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x23, 0x35, 0x3, 0x13, 0xFE, 0x16, 0xC5, 0xC5, 0x1, 0xEC, 0xC4, 0xC4, 0x2, 0x8C, 0x2, 0xEC, 0xFD, 0x14, 0x4, 0x35, 0xFD, 0x9, 0x2, 0xF7, 0xFB, 0xCB, 0x2, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xD9, 0x6, 0xC1, 0x0, 0xB, 0x0, 0x0, 0x1, 0x27, 0x15, 0x23, 0x11, 0x33, 0x11, 0x1, 0x33, 0x11, 0x23, 0x11, 0x1, 0x2A, 0x2, 0xC4, 0xC4, 0x1, 0xEC, 0xC5, 0xC5, 0x2, 0x8C, 0x2, 0x2, 0x4, 0x35, 0xFD, 0x9, 0x2, 0xF7, 0xFB, 0xCB, 0x2, 0xEC, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7B, 0x3, 0xD0, 0x6, 0xCE, 0x0, 0xD, 0x0, 0x19, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x12, 0x15, 0x27, 0x10, 0x21, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x13, 0x3, 0xD0, 0xFC, 0xCD, 0xC9, 0xFE, 0xFE, 0x1, 0x0, 0xC9, 0xCE, 0xFD, 0xC5, 0xFE, 0xFA, 0x79, 0x8B, 0x8C, 0x7A, 0xFE, 0x6, 0x4, 0x89, 0xFA, 0xFE, 0xEC, 0x1, 0x14, 0xFA, 0x38, 0xFA, 0x1, 0x13, 0xFE, 0xED, 0xFA, 0x1, 0x1, 0x66, 0xB0, 0xB6, 0x39, 0xB5, 0xB2, 0x1, 0x57, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7E, 0x3, 0x3C, 0x6, 0xC1, 0x0, 0x17, 0x0, 0x23, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x37, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x7, 0x16, 0x17, 0x15, 0x14, 0x6, 0x1, 0x14, 0x33, 0x32, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0xBC, 0xB4, 0xCC, 0x7F, 0x7F, 0xC5, 0x5D, 0x5E, 0x5C, 0x5F, 0xC5, 0x7F, 0x7E, 0x1, 0xCB, 0xFE, 0x90, 0xBB, 0xB7, 0x4, 0x61, 0x5B, 0x59, 0x61, 0x2, 0x7E, 0xE6, 0xAB, 0x23, 0xCB, 0x70, 0x67, 0xED, 0x8E, 0x6C, 0x6C, 0x8E, 0xED, 0x67, 0x6E, 0xCA, 0x26, 0xAB, 0xE6, 0x1, 0x96, 0xEF, 0xE5, 0x26, 0x6F, 0x81, 0x81, 0x6F, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x8B, 0x6, 0xC1, 0x0, 0x7, 0x0, 0x12, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x28, 0xC8, 0xD7, 0x68, 0x6F, 0xC8, 0xC4, 0x1, 0xA2, 0xBF, 0xC6, 0xC6, 0xBF, 0x6, 0x1B, 0xFE, 0xA0, 0xAC, 0x4D, 0x67, 0xFD, 0xF9, 0xFE, 0x78, 0x4, 0x35, 0xC5, 0x94, 0x9D, 0xB7, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x9E, 0x6, 0xC1, 0x0, 0x6, 0x0, 0x14, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x35, 0x34, 0x27, 0x13, 0x3, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x13, 0x15, 0x1, 0x29, 0xA9, 0xD4, 0xCE, 0xF1, 0xE4, 0xBC, 0xC5, 0x1, 0x84, 0xB9, 0xCA, 0xC8, 0xFB, 0x6, 0x1B, 0xFE, 0xAB, 0xA5, 0xAD, 0x3, 0xFC, 0x71, 0x1, 0x93, 0xFE, 0x6D, 0x4, 0x35, 0xAB, 0xA4, 0xD9, 0x51, 0xFE, 0x4E, 0xA, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x3, 0x7A, 0x6, 0xC1, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x3, 0x7A, 0xFE, 0xB9, 0xC6, 0xFE, 0xBB, 0x3, 0x52, 0x6, 0x1B, 0xFC, 0x71, 0x3, 0x8F, 0xA6, 0x0, 0x1, 0x0, 0x64, 0x2, 0x7B, 0x3, 0x91, 0x6, 0xBF, 0x0, 0xF, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x2, 0xCC, 0xC5, 0xE7, 0xAF, 0xB5, 0xE2, 0xC5, 0x2, 0xD0, 0xCF, 0x2, 0x6, 0xBF, 0xFD, 0x3C, 0xC2, 0xBE, 0xBE, 0xC2, 0x2, 0xC4, 0xFD, 0x3F, 0xDD, 0xDD, 0x0, 0x1, 0x0, 0x35, 0x2, 0x8C, 0x5, 0x3F, 0x6, 0xC1, 0x0, 0xC, 0x0, 0x0, 0x1, 0x3, 0x33, 0x13, 0x13, 0x33, 0x13, 0x13, 0x33, 0x3, 0x23, 0x3, 0x3, 0x1, 0x30, 0xFB, 0xC7, 0x9D, 0xCB, 0xB1, 0xC8, 0x9B, 0xC7, 0xFB, 0xB1, 0xD6, 0xDB, 0x2, 0x8C, 0x4, 0x35, 0xFC, 0xFF, 0x3, 0x1, 0xFC, 0xFF, 0x3, 0x1, 0xFB, 0xCB, 0x3, 0x7, 0xFC, 0xF9, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7D, 0x3, 0x0, 0x5, 0xBA, 0x0, 0x8, 0x0, 0x24, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x1, 0x78, 0x34, 0x59, 0x18, 0x61, 0xBB, 0x1, 0x37, 0xD, 0x7, 0x5A, 0x7F, 0x7A, 0x95, 0xC2, 0xAF, 0x70, 0x86, 0x77, 0xF, 0xBE, 0xBA, 0x97, 0x87, 0xB7, 0x1E, 0x3, 0x1F, 0x2A, 0x1D, 0x93, 0x3, 0x75, 0x62, 0x93, 0x1A, 0x2C, 0x55, 0x82, 0x6B, 0x84, 0x8D, 0x18, 0x87, 0x5C, 0x5F, 0x9D, 0x8B, 0x93, 0xFE, 0xAA, 0x6D, 0x41, 0xC, 0x0, 0x2, 0x0, 0x56, 0x2, 0x7D, 0x3, 0x1A, 0x5, 0xBA, 0x0, 0x8, 0x0, 0x24, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x15, 0x33, 0x36, 0x35, 0x34, 0x13, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x27, 0x35, 0x33, 0x16, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x15, 0x14, 0x33, 0x32, 0x37, 0x1, 0xDF, 0x34, 0x5A, 0x18, 0x62, 0xBA, 0xAE, 0xB9, 0x98, 0x87, 0xB7, 0x1E, 0xC9, 0xC, 0x7, 0x5A, 0x80, 0x7A, 0x94, 0xC1, 0xAF, 0x71, 0x86, 0x78, 0xF, 0x5, 0x19, 0x2A, 0x1E, 0x92, 0x3, 0x74, 0x63, 0xFE, 0x61, 0x5E, 0x9F, 0x8B, 0x94, 0x1, 0x56, 0x6D, 0x40, 0xC, 0x1A, 0x2C, 0x55, 0x82, 0x6B, 0x83, 0x8E, 0x18, 0x86, 0x5C, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7D, 0x3, 0x6A, 0x5, 0xBC, 0x0, 0x15, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x16, 0x33, 0x37, 0x17, 0x6, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x3, 0xD, 0x8E, 0x26, 0x4C, 0x8C, 0x96, 0xAF, 0xAF, 0x98, 0x87, 0x4B, 0xE, 0xAC, 0x2, 0x34, 0x14, 0x11, 0x3B, 0xFE, 0x7F, 0x69, 0x33, 0x32, 0x68, 0x61, 0x4E, 0x4C, 0x2, 0x7D, 0x75, 0x74, 0xDB, 0xAA, 0xF, 0xBC, 0xEE, 0x70, 0x61, 0xFD, 0xD2, 0x5C, 0x3, 0x91, 0x18, 0x95, 0x63, 0x1, 0x4D, 0x66, 0xA1, 0x84, 0x67, 0x8A, 0x0, 0x3, 0x0, 0x3C, 0x2, 0x7D, 0x4, 0xF7, 0x5, 0xBC, 0x0, 0x8, 0x0, 0xF, 0x0, 0x36, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x15, 0x33, 0x36, 0x35, 0x34, 0x1, 0x32, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x15, 0x14, 0x33, 0x32, 0x37, 0x33, 0x14, 0x6, 0x3, 0xBC, 0x34, 0x5A, 0x18, 0x61, 0xBB, 0xFD, 0x6E, 0x91, 0x1B, 0xFE, 0xB5, 0x50, 0x2, 0x3E, 0xA5, 0x55, 0x67, 0x8F, 0xAF, 0xB4, 0x2, 0x11, 0xE, 0x6F, 0x50, 0x6B, 0x53, 0x73, 0x27, 0x9D, 0x78, 0xB1, 0x6F, 0x3E, 0x8B, 0x67, 0x85, 0x97, 0xC1, 0xAF, 0x71, 0x86, 0x78, 0xF, 0xBD, 0xBA, 0x5, 0x1B, 0x2A, 0x1E, 0x93, 0x3, 0x75, 0x63, 0xFE, 0x9, 0xAD, 0xD, 0x46, 0x5A, 0xA5, 0x5C, 0x5E, 0xDE, 0xAD, 0x63, 0x50, 0x5A, 0x61, 0x73, 0x39, 0x5B, 0x71, 0x39, 0x39, 0x82, 0x6B, 0x84, 0x8D, 0x18, 0x86, 0x5C, 0x5F, 0x9E, 0x0, 0x2, 0x0, 0x64, 0x2, 0x7D, 0x3, 0x3D, 0x7, 0xE, 0x0, 0xF, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x27, 0x7, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x1, 0xFC, 0x8F, 0x50, 0xD, 0xAC, 0xC4, 0x4E, 0x84, 0x9B, 0xA8, 0xA9, 0xC6, 0x5A, 0x50, 0x4E, 0x5D, 0x72, 0x33, 0x34, 0x2, 0x7D, 0x6A, 0x5B, 0x4, 0x82, 0xFE, 0x50, 0x5C, 0xDE, 0xB9, 0x10, 0xB6, 0xE0, 0xA8, 0x80, 0x7E, 0x69, 0x87, 0x62, 0xFE, 0xD7, 0x63, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7D, 0x3, 0x15, 0x7, 0xE, 0x0, 0x9, 0x0, 0x19, 0x0, 0x0, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x5, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x1, 0xAB, 0x72, 0x34, 0x33, 0x72, 0x5D, 0x4E, 0x1, 0x68, 0xD, 0x50, 0x8F, 0x98, 0xA9, 0xA9, 0x9A, 0x84, 0x4E, 0xC4, 0x3, 0x25, 0x63, 0x1, 0x29, 0x62, 0x86, 0x7A, 0xEE, 0x99, 0x5A, 0x69, 0xE0, 0xB6, 0x10, 0xB9, 0xDE, 0x5B, 0x1, 0xAF, 0xFB, 0x7E, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7E, 0x3, 0x16, 0x5, 0xBC, 0x0, 0x6, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x1, 0xB2, 0x91, 0x1B, 0x1, 0x4B, 0x4F, 0x1, 0x1, 0x26, 0x9E, 0x77, 0xB2, 0xDA, 0xDF, 0x98, 0xAF, 0xB4, 0xFD, 0xEF, 0xE, 0x6F, 0x50, 0x40, 0x5B, 0x24, 0x5, 0x15, 0xAD, 0xD, 0x47, 0x59, 0xFD, 0xFD, 0x39, 0x5B, 0xDE, 0xA4, 0x1F, 0xBE, 0xDF, 0xDE, 0xAD, 0x63, 0x50, 0x5A, 0x39, 0x28, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7C, 0x3, 0x16, 0x5, 0xBA, 0x0, 0x14, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x37, 0x21, 0x15, 0x14, 0x16, 0x1, 0x9F, 0xAF, 0xB4, 0x2, 0x11, 0xE, 0x6F, 0x50, 0x6B, 0x53, 0x73, 0x27, 0x9D, 0x78, 0xB2, 0xD9, 0xDE, 0x98, 0x91, 0x1B, 0xFE, 0xB5, 0x50, 0x2, 0x7C, 0xDE, 0xAD, 0x63, 0x50, 0x5A, 0x61, 0x73, 0x39, 0x5B, 0xDE, 0xA4, 0x1F, 0xBE, 0xDF, 0xA7, 0xAD, 0xD, 0x46, 0x5A, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x7C, 0x2, 0xE8, 0x5, 0xBA, 0x0, 0x20, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x23, 0x22, 0x15, 0x14, 0x17, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0xE8, 0xD9, 0x7A, 0x93, 0xC6, 0x94, 0x85, 0xB7, 0x93, 0x83, 0xC4, 0xB9, 0x4, 0x8F, 0x80, 0x78, 0x93, 0x93, 0x86, 0x8E, 0x95, 0xB, 0x3, 0x79, 0x83, 0x7A, 0x80, 0x71, 0x89, 0x31, 0x39, 0x70, 0x72, 0x78, 0x81, 0x71, 0x50, 0x55, 0x52, 0x1, 0x97, 0x1, 0x5B, 0x61, 0x5D, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x7C, 0x2, 0xE8, 0x5, 0xBA, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0x8F, 0x7A, 0xD9, 0xB9, 0x9, 0x97, 0x8E, 0x87, 0x93, 0x93, 0x79, 0x81, 0x8F, 0x3, 0xBA, 0xC4, 0x83, 0x94, 0xB7, 0x85, 0x93, 0xC5, 0x2, 0x7C, 0x7A, 0x83, 0x5D, 0x61, 0x5B, 0x1, 0x97, 0x1, 0x52, 0x55, 0x50, 0x71, 0x81, 0x78, 0x72, 0x70, 0x39, 0x31, 0x89, 0x71, 0x80, 0x0, 0x2, 0x0, 0x3C, 0x1, 0x4C, 0x3, 0x16, 0x5, 0xBA, 0x0, 0xA, 0x0, 0x24, 0x0, 0x0, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x6, 0x1, 0xB0, 0x70, 0x31, 0x31, 0x6F, 0x5E, 0x52, 0x50, 0x60, 0x53, 0xBD, 0x3E, 0x61, 0x5C, 0x7A, 0xB1, 0x6, 0x4F, 0x80, 0x92, 0xB4, 0xB3, 0x94, 0x8D, 0x4E, 0xD, 0xAB, 0xC7, 0x3, 0x22, 0x55, 0x1, 0x4A, 0x52, 0x85, 0x7C, 0x6B, 0x85, 0xFE, 0x2A, 0x44, 0x49, 0x7B, 0x64, 0x9B, 0x4A, 0x5A, 0xE8, 0xAF, 0xF, 0xB7, 0xE2, 0x66, 0x57, 0xFC, 0xF0, 0xA2, 0xAD, 0x0, 0x2, 0x0, 0x78, 0x1, 0x4F, 0x1, 0x5C, 0x5, 0xAD, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x2, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x4D, 0xC5, 0x10, 0x3B, 0x37, 0x36, 0x3C, 0x3C, 0x36, 0x37, 0x3B, 0x5, 0xAD, 0xFC, 0xDF, 0x3, 0x21, 0xFC, 0x3C, 0x3D, 0x3D, 0x5C, 0x3E, 0x3E, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x3E, 0x7, 0xE, 0x0, 0xC, 0x0, 0x0, 0x1, 0x3, 0x7, 0x15, 0x23, 0x11, 0x33, 0x11, 0x37, 0x37, 0x33, 0x1, 0x1, 0x2, 0x54, 0xD8, 0x53, 0xC5, 0xC5, 0x36, 0xDA, 0xE4, 0xFE, 0xDD, 0x1, 0x44, 0x2, 0x8C, 0x1, 0x54, 0x58, 0xFC, 0x4, 0x82, 0xFD, 0x5E, 0x45, 0xFC, 0xFE, 0xBB, 0xFE, 0x24, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x4, 0xCC, 0x5, 0xBA, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x17, 0x11, 0x23, 0x11, 0x26, 0x1, 0xB3, 0x62, 0x28, 0xC5, 0x98, 0x20, 0x4C, 0x8F, 0xB6, 0x37, 0x4B, 0x9A, 0x78, 0x8B, 0xC5, 0x4, 0x7F, 0x64, 0x28, 0x2, 0xC5, 0x4, 0x5, 0x13, 0x59, 0xFD, 0xD2, 0x3, 0x21, 0x7A, 0x87, 0x9A, 0x9A, 0x91, 0xA2, 0xFE, 0x5, 0x1, 0xD9, 0xAE, 0x5F, 0x1F, 0xFD, 0xF7, 0x1, 0xD9, 0xAE, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x2, 0xFA, 0x5, 0xBA, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x2, 0x3F, 0x46, 0x4F, 0x27, 0x1D, 0x47, 0x45, 0x3D, 0x62, 0x28, 0xC5, 0xAB, 0x11, 0x4C, 0x8B, 0x78, 0x8B, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x1, 0xFE, 0x69, 0x54, 0x59, 0xFD, 0xD2, 0x3, 0x21, 0x73, 0x80, 0x91, 0xA2, 0xFD, 0xBF, 0xFA, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7C, 0x3, 0x32, 0x5, 0xBA, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x11, 0x34, 0x26, 0x23, 0x22, 0x3C, 0xCB, 0xAF, 0xB1, 0xCB, 0xCB, 0xB0, 0xAF, 0xCC, 0xC5, 0x5B, 0x5B, 0xB6, 0x5B, 0x5C, 0xB5, 0x4, 0x23, 0xB3, 0xE4, 0xE4, 0xB3, 0x10, 0xB3, 0xE4, 0xE4, 0xB3, 0x6E, 0x82, 0x1, 0x0, 0x6C, 0x84, 0x0, 0x1, 0x0, 0x28, 0x2, 0x7C, 0x2, 0x83, 0x5, 0xBA, 0x0, 0x15, 0x0, 0x0, 0x13, 0x37, 0x16, 0x33, 0x32, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x30, 0x54, 0x38, 0x4D, 0xB5, 0x5B, 0x5B, 0x43, 0x38, 0x65, 0x5D, 0x83, 0xB0, 0xCB, 0xCA, 0xB0, 0x7F, 0x2, 0xB9, 0x8F, 0x25, 0x1, 0x0, 0x6C, 0x84, 0x24, 0x88, 0x43, 0xE4, 0xB3, 0x10, 0xB3, 0xE4, 0x0, 0x1, 0x0, 0x28, 0x4, 0x13, 0x3, 0x1E, 0x5, 0xBA, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x10, 0x23, 0x22, 0x11, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x3, 0x1E, 0xC5, 0xB7, 0xB5, 0xC5, 0xCB, 0xAF, 0xB1, 0xCB, 0x4, 0x13, 0x1, 0x0, 0xFF, 0x0, 0x10, 0xB3, 0xE4, 0xE4, 0xB3, 0x0, 0x1, 0x0, 0x28, 0x2, 0x83, 0x3, 0x1E, 0x4, 0x2A, 0x0, 0xE, 0x0, 0x0, 0x1, 0x33, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x2, 0x59, 0xC5, 0xCB, 0xB1, 0xAF, 0xCB, 0xC5, 0x5B, 0x5A, 0xB7, 0x4, 0x2A, 0x10, 0xB2, 0xE5, 0xE5, 0xB2, 0x10, 0x7D, 0x83, 0x0, 0x2, 0x0, 0x64, 0x1, 0x29, 0x3, 0x3D, 0x5, 0xBA, 0x0, 0x9, 0x0, 0x19, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0xCD, 0x5D, 0x4E, 0xAA, 0x72, 0x34, 0x33, 0x9F, 0x84, 0x4E, 0xC4, 0xAC, 0xD, 0x50, 0x8F, 0x98, 0xA9, 0xA8, 0x3, 0x24, 0x86, 0x7B, 0xED, 0x63, 0xFE, 0xD7, 0x62, 0xA7, 0x5C, 0xFE, 0x50, 0x4, 0x82, 0x5A, 0x69, 0xDF, 0xB6, 0x10, 0xB9, 0xDF, 0x0, 0x1, 0x0, 0x28, 0x2, 0x7D, 0x2, 0x2, 0x6, 0x70, 0x0, 0x15, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0xFE, 0x32, 0x56, 0x57, 0x73, 0x84, 0x84, 0xC5, 0x91, 0x91, 0x27, 0x25, 0x23, 0x1E, 0x2, 0x8F, 0x12, 0x74, 0x86, 0x1, 0x95, 0xA0, 0xC4, 0xC4, 0xA0, 0xFE, 0x7E, 0x3B, 0x2A, 0x7, 0x0, 0x1, 0x0, 0x64, 0x2, 0x7F, 0x2, 0xFA, 0x5, 0xAD, 0x0, 0x10, 0x0, 0x0, 0x1, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x2, 0x51, 0x12, 0x4C, 0x8B, 0x79, 0x8B, 0xC5, 0x4, 0x7F, 0x61, 0x28, 0xC5, 0x2, 0x8C, 0x74, 0x81, 0x91, 0xA2, 0x1, 0xFB, 0xFE, 0x28, 0xAF, 0x58, 0x2, 0x2F, 0xFC, 0xDF, 0x0, 0x1, 0x0, 0x3C, 0x2, 0xCB, 0x3, 0x6A, 0x5, 0x61, 0x0, 0x10, 0x0, 0x0, 0x13, 0x35, 0x21, 0x36, 0x35, 0x34, 0x27, 0x21, 0x35, 0x21, 0x15, 0x7, 0x16, 0x15, 0x14, 0x6, 0x23, 0x3C, 0x1, 0xD8, 0xAF, 0x59, 0xFD, 0xD2, 0x3, 0x20, 0x74, 0x82, 0x91, 0xA2, 0x2, 0xCB, 0xC5, 0x4, 0x7E, 0x62, 0x28, 0xC5, 0xA8, 0x13, 0x4C, 0x8C, 0x78, 0x8B, 0x0, 0x1, 0x0, 0x64, 0x2, 0x7F, 0x4, 0xCC, 0x5, 0xAD, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x27, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x4, 0x34, 0x20, 0x4C, 0x8F, 0xB6, 0x36, 0x4B, 0x9A, 0x79, 0x8B, 0xC5, 0x4, 0x7F, 0x65, 0x27, 0x2, 0xC5, 0x4, 0x7F, 0x61, 0x28, 0xC5, 0x2, 0x8C, 0x79, 0x86, 0x9A, 0x9A, 0x91, 0xA2, 0x1, 0xFB, 0xFE, 0x28, 0xAF, 0x5E, 0x20, 0x2, 0x9, 0xFE, 0x28, 0xAF, 0x59, 0x2, 0x2E, 0xFC, 0xDF, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x3, 0xB, 0x5, 0xAD, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x1, 0x40, 0xFE, 0xE8, 0xD4, 0x96, 0x9, 0xA, 0x93, 0xD3, 0xFE, 0xEB, 0x2, 0x8C, 0x3, 0x21, 0xFD, 0xF3, 0x32, 0x32, 0x2, 0xD, 0xFC, 0xDF, 0x0, 0x1, 0x0, 0x35, 0x2, 0x7D, 0x3, 0x6D, 0x5, 0xBA, 0x0, 0x1E, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x26, 0x27, 0xBB, 0x97, 0xFE, 0x97, 0x6F, 0x40, 0x2D, 0x52, 0x4A, 0x58, 0x14, 0x5B, 0x5B, 0x54, 0x68, 0x2A, 0x2B, 0x67, 0x54, 0x5B, 0x5B, 0x14, 0x58, 0x4A, 0x52, 0x2D, 0x9E, 0xF, 0x4, 0xBC, 0x65, 0x99, 0x99, 0x65, 0x73, 0xA0, 0x47, 0x3E, 0x20, 0xA7, 0x20, 0x35, 0x2D, 0x2D, 0x35, 0x20, 0xA7, 0x20, 0x3E, 0xAA, 0x86, 0x0, 0x2, 0x0, 0x64, 0x1, 0x66, 0x3, 0x45, 0x6, 0xCF, 0x0, 0x10, 0x0, 0x22, 0x0, 0x0, 0x1, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x15, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0xD1, 0xAF, 0xB3, 0x48, 0x38, 0x93, 0x42, 0x4C, 0x9A, 0x3C, 0x89, 0x6F, 0x56, 0xC4, 0xCD, 0x8E, 0x98, 0xBF, 0x92, 0xC1, 0xC3, 0x3, 0x23, 0xA9, 0xA1, 0x5, 0x9F, 0x2, 0x92, 0x34, 0x4F, 0xA7, 0xFD, 0xCE, 0x2C, 0xA7, 0x34, 0xFE, 0xB6, 0x4, 0x31, 0x87, 0xB1, 0x9E, 0x86, 0x91, 0x4C, 0x44, 0xC8, 0x9C, 0xAA, 0x0, 0x1, 0x0, 0x28, 0x1, 0x4C, 0x3, 0x32, 0x5, 0xAB, 0x0, 0xA, 0x0, 0x0, 0x1, 0x23, 0x11, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x2, 0x11, 0xC5, 0xFE, 0xDC, 0xD8, 0xA6, 0x9, 0xA, 0xA2, 0xD7, 0xFE, 0xDF, 0x1, 0x4C, 0x1, 0x47, 0x3, 0x18, 0xFD, 0xEF, 0x32, 0x32, 0x2, 0x11, 0xFC, 0xEE, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7C, 0x3, 0x24, 0x7, 0x14, 0x0, 0x1C, 0x0, 0x26, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x14, 0x17, 0x4, 0x13, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x37, 0x37, 0x26, 0x26, 0x13, 0x14, 0x16, 0x33, 0x32, 0x35, 0x34, 0x26, 0x27, 0x6, 0x96, 0xA1, 0x82, 0x7C, 0x89, 0x26, 0x84, 0x56, 0x65, 0x84, 0x1, 0x44, 0x3, 0xC4, 0xAE, 0xB0, 0xC6, 0x8F, 0x60, 0x3, 0x42, 0x56, 0x6C, 0x56, 0x5A, 0xAC, 0x56, 0x56, 0xB0, 0x6, 0x35, 0x69, 0x76, 0x46, 0x8F, 0x33, 0x47, 0x42, 0x2F, 0x73, 0xFE, 0xD6, 0x14, 0xA9, 0xE4, 0xE2, 0xA6, 0xF, 0x7F, 0xB4, 0x18, 0x8, 0x1F, 0x67, 0xFE, 0x22, 0x69, 0x83, 0xFB, 0x53, 0x92, 0x11, 0x7, 0x0, 0x2, 0x0, 0x3C, 0x1, 0x4C, 0x4, 0x2C, 0x5, 0xC4, 0x0, 0x18, 0x0, 0x21, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x2, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x15, 0x14, 0x16, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x35, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x15, 0x2, 0x90, 0xC5, 0xD9, 0xB6, 0x64, 0x55, 0x71, 0x66, 0x57, 0x74, 0x78, 0x63, 0xB0, 0xD6, 0xBC, 0xE0, 0x7C, 0x5B, 0x5C, 0x44, 0x37, 0x1, 0x4C, 0x1, 0x3F, 0x1D, 0x1, 0x7, 0x9D, 0x78, 0xC2, 0x3D, 0x72, 0x74, 0x91, 0x62, 0x9B, 0x19, 0x1, 0xA2, 0x7F, 0x6D, 0xF0, 0x9E, 0x96, 0xFD, 0x19, 0xAA, 0x15, 0x93, 0x5A, 0x66, 0x84, 0x48, 0x0, 0x1, 0x0, 0x35, 0x1, 0x4A, 0x3, 0x4E, 0x5, 0xBA, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x6, 0x27, 0x26, 0x26, 0x27, 0x27, 0x3, 0x23, 0x1, 0x3, 0x26, 0x26, 0x23, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x17, 0x17, 0x13, 0x33, 0x1, 0x13, 0x16, 0x17, 0x16, 0x37, 0x3, 0x3C, 0x22, 0x30, 0x5B, 0x69, 0x25, 0x42, 0xAD, 0xBE, 0x1, 0x11, 0x87, 0x14, 0x33, 0x2F, 0x31, 0x2, 0x3B, 0x2F, 0x6F, 0x60, 0x1B, 0x46, 0xA1, 0xBC, 0xFE, 0xFD, 0x90, 0x2D, 0x32, 0x18, 0x1E, 0x1, 0x57, 0xD, 0x3, 0x5, 0x86, 0x53, 0x94, 0xFE, 0x9C, 0x2, 0x2E, 0x1, 0x2E, 0x2E, 0x34, 0x4, 0x97, 0xE, 0x80, 0x3C, 0x9C, 0x1, 0x4A, 0xFD, 0xEC, 0xFE, 0xBE, 0x5F, 0x3, 0x2, 0x4, 0x0, 0x2, 0x0, 0x78, 0xFF, 0x38, 0x1, 0x5C, 0x3, 0x96, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x11, 0x23, 0x11, 0x78, 0x3B, 0x37, 0x36, 0x3C, 0x3C, 0x36, 0x37, 0x3B, 0xD5, 0xC5, 0x3, 0x2A, 0x2F, 0x3D, 0x3D, 0x2F, 0x2D, 0x3D, 0x3D, 0xA4, 0xFC, 0xDF, 0x3, 0x21, 0xFF, 0xFF, 0x0, 0x64, 0xFF, 0x38, 0x2, 0x12, 0x2, 0x66, 0x0, 0x7, 0x1, 0x65, 0x0, 0x0, 0xFC, 0xAC, 0xFF, 0xFF, 0x0, 0x64, 0xFF, 0x2B, 0x2, 0xFA, 0x2, 0x59, 0x0, 0x7, 0x3, 0x87, 0x0, 0x0, 0xFC, 0xAC, 0xFF, 0xFF, 0x0, 0x28, 0xFF, 0x38, 0x3, 0xB, 0x2, 0x59, 0x0, 0x7, 0x3, 0x8A, 0x0, 0x0, 0xFC, 0xAC, 0xFF, 0xFF, 0x0, 0x64, 0xFE, 0x17, 0x3, 0x45, 0x3, 0x80, 0x0, 0x7, 0x3, 0x8C, 0x0, 0x0, 0xFC, 0xB1, 0xFF, 0xFF, 0x0, 0x28, 0xFD, 0xFA, 0x3, 0x32, 0x2, 0x59, 0x0, 0x7, 0x3, 0x8D, 0x0, 0x0, 0xFC, 0xAE, 0x0, 0x2, 0x0, 0x64, 0xFE, 0x8, 0x3, 0x39, 0x2, 0x6C, 0x0, 0xB, 0x0, 0x1A, 0x0, 0x0, 0x5, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x14, 0x6, 0x1, 0xC9, 0x5C, 0x4F, 0x4E, 0x59, 0x57, 0x4D, 0x33, 0xA0, 0x84, 0x4F, 0xC5, 0xD7, 0x97, 0xAC, 0xB9, 0x2, 0xA7, 0x2C, 0x76, 0x78, 0x73, 0x90, 0x8C, 0x5C, 0xBD, 0x4C, 0xA7, 0x59, 0xFE, 0x82, 0x2, 0xDE, 0xB6, 0xD0, 0xEA, 0xB9, 0x17, 0xAA, 0xDB, 0xFF, 0xFF, 0x0, 0x3C, 0xFD, 0xEB, 0x4, 0x2C, 0x2, 0x63, 0x0, 0x7, 0x3, 0x8F, 0x0, 0x0, 0xFC, 0x9F, 0xFF, 0xFF, 0x0, 0x42, 0xFD, 0xF4, 0x3, 0x5B, 0x2, 0x64, 0x0, 0x7, 0x3, 0x90, 0x0, 0xD, 0xFC, 0xAA, 0x0, 0x2, 0x0, 0x77, 0xFF, 0xEC, 0x6, 0xBC, 0x4, 0x4E, 0x0, 0x23, 0x0, 0x2B, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x6, 0x3, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x5, 0xA, 0x9B, 0xE5, 0x3F, 0x2D, 0xB5, 0x8D, 0x9F, 0xC6, 0xF3, 0x1, 0x66, 0x45, 0xB7, 0x37, 0xE5, 0x74, 0x91, 0xEC, 0xE2, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA8, 0x68, 0x83, 0x34, 0xCC, 0xBE, 0x63, 0x7B, 0x11, 0x1, 0xCE, 0x5, 0x61, 0x14, 0x83, 0x6E, 0x6F, 0x82, 0xD5, 0xF3, 0x2, 0x86, 0xFD, 0x72, 0x8F, 0x6A, 0xA3, 0x2, 0xE4, 0x38, 0x4C, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x7D, 0x4C, 0x80, 0x3, 0x9F, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0x0, 0x2, 0xFF, 0xEC, 0xFF, 0xEC, 0x4, 0xBF, 0x6, 0x0, 0x0, 0x24, 0x0, 0x2F, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x35, 0x33, 0x15, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x27, 0x15, 0x36, 0x33, 0x32, 0x12, 0x17, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x4, 0xBF, 0xD8, 0xCE, 0xBC, 0x6C, 0xC, 0xDC, 0x19, 0x29, 0x38, 0xA3, 0x89, 0x67, 0x17, 0x16, 0xF3, 0x3, 0x29, 0x3A, 0xA3, 0x8A, 0x68, 0x17, 0x6A, 0xB1, 0xD0, 0xD7, 0x1, 0xFE, 0x1D, 0x87, 0x69, 0x66, 0x8C, 0x9C, 0x42, 0x43, 0x2, 0x12, 0xEF, 0xFE, 0xC9, 0x89, 0x75, 0x4, 0xDC, 0x2, 0x3B, 0x2F, 0x8, 0x72, 0x9C, 0x5, 0x7B, 0xD2, 0x3B, 0x2F, 0xC, 0x73, 0x97, 0x1, 0xB0, 0x7B, 0xFE, 0xD0, 0xF3, 0xFE, 0x88, 0xCA, 0xAA, 0x8F, 0xD2, 0x8B, 0xFE, 0x43, 0x8D, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x5, 0x9, 0x6, 0x0, 0x0, 0xB, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x35, 0x33, 0x15, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x27, 0x11, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x73, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0x1D, 0x29, 0x38, 0xA3, 0x89, 0x67, 0x19, 0x18, 0xF3, 0x29, 0x39, 0xA3, 0x8A, 0x68, 0x13, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x1, 0x9, 0x2, 0x3B, 0x30, 0x9, 0x71, 0x9C, 0x6, 0x79, 0xCF, 0x3B, 0x30, 0xD, 0x73, 0x97, 0x1, 0xFB, 0x7A, 0x0, 0x1, 0x0, 0x13, 0x0, 0x0, 0x3, 0x33, 0x6, 0x15, 0x0, 0x27, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x35, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x11, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x2, 0x3A, 0x18, 0xF3, 0x18, 0x29, 0x38, 0xA3, 0x89, 0x67, 0x2C, 0xA5, 0xA5, 0xCC, 0xB0, 0x42, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0xDC, 0xDC, 0x2E, 0x39, 0xA3, 0x8A, 0x1, 0x8A, 0x1, 0xFE, 0x75, 0x1, 0xE5, 0x1, 0x3B, 0x2F, 0x8, 0x72, 0x9C, 0x4, 0xF9, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0xB3, 0xFE, 0xAF, 0x3B, 0x2F, 0xC, 0x73, 0x97, 0x0, 0x3, 0x0, 0x14, 0x0, 0x0, 0x7, 0xC3, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x12, 0x0, 0x37, 0x0, 0x0, 0x1, 0x16, 0x17, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x25, 0x22, 0x7, 0x15, 0x16, 0x17, 0x35, 0x26, 0x26, 0x13, 0x11, 0x26, 0x27, 0x11, 0x23, 0x11, 0x6, 0x7, 0x27, 0x36, 0x37, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x36, 0x37, 0x17, 0x6, 0x7, 0x11, 0x23, 0x11, 0x26, 0x27, 0x11, 0x4, 0x65, 0xFA, 0x98, 0x69, 0x59, 0x52, 0x69, 0x15, 0xFE, 0x4A, 0x93, 0x3C, 0x9C, 0xF6, 0x1, 0x68, 0x69, 0xFC, 0x96, 0xF3, 0x34, 0x25, 0x80, 0x3B, 0x9E, 0xE5, 0x7, 0x73, 0xC5, 0xD8, 0x51, 0x35, 0xA7, 0x70, 0xA5, 0xBD, 0x2, 0x33, 0x28, 0x7E, 0x3F, 0x9A, 0xF3, 0xA2, 0xF0, 0x2, 0x67, 0x19, 0x3, 0x73, 0x78, 0x52, 0x58, 0x47, 0x9F, 0x78, 0x6E, 0x5, 0x1C, 0x40, 0x6E, 0x59, 0xFC, 0x78, 0x1, 0xE4, 0x1D, 0x3, 0xFD, 0xFC, 0x1, 0xE5, 0x1B, 0x42, 0x32, 0x92, 0x3A, 0x1, 0xB4, 0x71, 0x85, 0xA5, 0x4B, 0x5A, 0xB6, 0xD2, 0x54, 0x1E, 0x3D, 0x3C, 0x95, 0x33, 0xFE, 0x37, 0x1, 0xAC, 0x3, 0x1A, 0xFE, 0x37, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x5, 0x39, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x24, 0x0, 0x0, 0x1, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x15, 0x16, 0x7, 0x11, 0x23, 0x11, 0x6, 0x7, 0x27, 0x34, 0x36, 0x37, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x36, 0x37, 0x17, 0x14, 0x6, 0x7, 0x11, 0x23, 0x11, 0x3, 0x71, 0x62, 0x5D, 0x92, 0x49, 0xA8, 0xA8, 0xF2, 0x44, 0xA, 0x83, 0x6B, 0x66, 0xE4, 0x8, 0x77, 0xC3, 0x9C, 0xBC, 0x1, 0x47, 0xC, 0x82, 0x6D, 0x68, 0xF3, 0x2, 0x4D, 0x71, 0x70, 0x5A, 0x86, 0x7C, 0x14, 0x8D, 0xFE, 0x1B, 0x1, 0xF0, 0x14, 0x54, 0x23, 0x51, 0x84, 0x10, 0x1, 0xAA, 0x7D, 0x91, 0xB3, 0xDA, 0x82, 0x12, 0x58, 0x28, 0x54, 0x81, 0xD, 0xFE, 0x61, 0x1, 0xAB, 0x0, 0x2, 0xFF, 0xE6, 0xFE, 0x60, 0x4, 0xA0, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x3, 0x27, 0x15, 0x23, 0x35, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x11, 0x17, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x2, 0xB7, 0x83, 0x74, 0x76, 0x83, 0x94, 0x42, 0x43, 0x14, 0x2F, 0xF3, 0x2, 0x28, 0x38, 0xA4, 0x8A, 0x67, 0x15, 0xE0, 0xA, 0x6C, 0xB7, 0xCE, 0xD9, 0xD9, 0xCB, 0xB1, 0x6C, 0x1B, 0x29, 0x3A, 0xA2, 0x89, 0xAF, 0xD3, 0x91, 0x14, 0x92, 0xCF, 0x7B, 0xFE, 0x20, 0x7E, 0xFD, 0xFF, 0x4, 0x52, 0xAB, 0x3B, 0x30, 0x9, 0x71, 0x9C, 0x1, 0x4, 0x85, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x75, 0xFE, 0xFB, 0x2, 0x3B, 0x30, 0xD, 0x74, 0x96, 0x0, 0x1, 0xFF, 0xDD, 0x0, 0x0, 0x3, 0x34, 0x4, 0x4E, 0x0, 0x21, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x2, 0x5, 0x17, 0xF2, 0x1B, 0x29, 0x38, 0xA3, 0x89, 0x67, 0x18, 0x17, 0xE7, 0x7, 0x57, 0x9D, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA9, 0x39, 0x2C, 0x39, 0xA3, 0x8A, 0x1, 0x74, 0x1, 0xFE, 0x8B, 0x1, 0xCF, 0x2, 0x3B, 0x30, 0x9, 0x71, 0x9C, 0x5, 0x1, 0xC3, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x80, 0xC4, 0x3B, 0x30, 0xD, 0x73, 0x97, 0x0, 0x1, 0xFF, 0xFC, 0x0, 0x0, 0x3, 0x15, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x27, 0x11, 0x23, 0x11, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x17, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x2, 0x23, 0x1E, 0x1B, 0xF3, 0x58, 0xA3, 0x89, 0x72, 0xCC, 0xB0, 0x42, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0x26, 0x29, 0x39, 0xA3, 0x8A, 0x1, 0x74, 0x6, 0xFE, 0x86, 0x1, 0xD1, 0x8, 0x63, 0x9, 0x72, 0x9B, 0x5E, 0xB4, 0xC0, 0x12, 0xBE, 0x8, 0xA8, 0xBA, 0x4, 0x3B, 0x30, 0xD, 0x73, 0x97, 0x0, 0x1, 0x0, 0x28, 0xFF, 0xEC, 0x4, 0x29, 0x4, 0x4E, 0x0, 0x35, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x24, 0x27, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x17, 0x17, 0x32, 0x37, 0x17, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x2, 0x32, 0xDF, 0xEA, 0xEC, 0x5, 0x8A, 0x51, 0x5F, 0x65, 0x4F, 0xFF, 0x0, 0x3E, 0x2F, 0x18, 0x3D, 0x38, 0x5, 0x83, 0x43, 0x43, 0x21, 0xE1, 0xC0, 0xCB, 0xE7, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x5C, 0x82, 0x6B, 0x49, 0x23, 0x6D, 0xB, 0x82, 0x6A, 0x28, 0xEE, 0x14, 0xE4, 0x86, 0x64, 0x50, 0x4A, 0x3A, 0x33, 0x4B, 0x39, 0x19, 0x8, 0x41, 0x2D, 0x23, 0x40, 0x72, 0x20, 0x38, 0x49, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x36, 0x35, 0x40, 0x1C, 0x17, 0x1D, 0x2, 0x68, 0x27, 0x81, 0x40, 0x3F, 0x56, 0x90, 0xB8, 0x0, 0x1, 0xFF, 0xE2, 0xFF, 0xEC, 0x2, 0xD1, 0x5, 0x41, 0x0, 0x29, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x27, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0xA5, 0x43, 0x5C, 0x79, 0xA0, 0x1B, 0x26, 0x35, 0x95, 0x7F, 0x5F, 0x16, 0x17, 0xB2, 0xB2, 0xF3, 0xBF, 0xBF, 0x26, 0x36, 0x95, 0x81, 0x5F, 0x11, 0x3F, 0x32, 0x29, 0x2B, 0x4, 0x18, 0x89, 0xA7, 0xD6, 0x2, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x5, 0xF3, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFE, 0xB8, 0x3A, 0x2E, 0xC, 0x70, 0x90, 0x1, 0x72, 0x49, 0x2B, 0xA, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x3, 0xE8, 0x4, 0x3A, 0x0, 0x21, 0x0, 0x0, 0x33, 0x35, 0x13, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x21, 0x35, 0x21, 0x15, 0x1, 0x16, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x22, 0x27, 0x7, 0x21, 0x15, 0x67, 0xFE, 0x2E, 0x21, 0x2E, 0x39, 0x82, 0x7D, 0x63, 0x3A, 0x85, 0xC0, 0xFD, 0xE5, 0x3, 0x4F, 0xFE, 0xF8, 0x29, 0x1D, 0x2E, 0x39, 0x83, 0x7C, 0x65, 0x47, 0x71, 0xB9, 0x2, 0x3F, 0x9F, 0x1, 0x50, 0x8, 0x40, 0x2E, 0x24, 0x5C, 0x8D, 0x1E, 0xFE, 0xC4, 0x99, 0xFE, 0xA2, 0x7, 0x41, 0x2E, 0x28, 0x5C, 0x89, 0x1A, 0xF5, 0xC3, 0x0, 0x2, 0x0, 0x7C, 0xFE, 0x55, 0x4, 0x37, 0x4, 0x4D, 0x0, 0x1A, 0x0, 0x26, 0x0, 0x0, 0x25, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x34, 0x24, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x36, 0x33, 0x32, 0x12, 0x17, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x4, 0x37, 0xE9, 0xC9, 0xBA, 0x69, 0xA, 0xDC, 0x1, 0x12, 0xD9, 0x59, 0xF4, 0x48, 0x73, 0x70, 0xA4, 0x79, 0x8D, 0x6A, 0xAE, 0xC6, 0xE8, 0x2, 0xFE, 0x11, 0x83, 0x79, 0x77, 0x83, 0x96, 0x45, 0x43, 0x7E, 0xF7, 0xFE, 0xCE, 0x7F, 0x6B, 0x4, 0x1C, 0xDB, 0xED, 0x51, 0x62, 0x91, 0x85, 0x85, 0x7E, 0x4A, 0x76, 0xFE, 0xCC, 0xE8, 0xFE, 0x81, 0xD0, 0x92, 0x15, 0x90, 0xCD, 0x7F, 0xFE, 0x27, 0x7C, 0xFF, 0xFF, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xDC, 0x6, 0xC1, 0x0, 0x6, 0x3, 0x63, 0x0, 0x0, 0x0, 0x2, 0x0, 0x3E, 0xFE, 0x60, 0x4, 0x3, 0x4, 0x3A, 0x0, 0x18, 0x0, 0x24, 0x0, 0x0, 0x1, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, 0x21, 0x35, 0x21, 0x15, 0x6, 0x6, 0x15, 0x14, 0x1E, 0x2, 0x15, 0x14, 0x4, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x6, 0x6, 0x15, 0x14, 0x16, 0x2, 0x21, 0xBE, 0xFE, 0xDB, 0xF3, 0xDC, 0x4D, 0x8A, 0xFE, 0x1C, 0x3, 0x72, 0x90, 0x9B, 0x66, 0x8A, 0x66, 0xFE, 0xE6, 0xC5, 0x67, 0x85, 0x50, 0x35, 0xB4, 0xA6, 0x87, 0xFE, 0x60, 0xDC, 0xD5, 0xC7, 0xEE, 0x17, 0x64, 0x5B, 0x80, 0x5A, 0xC4, 0x9B, 0x3D, 0x71, 0x4D, 0x3E, 0x73, 0x8C, 0xC1, 0x8C, 0xD7, 0xE3, 0xC3, 0x88, 0x6C, 0x65, 0x94, 0x3E, 0x13, 0x9A, 0x83, 0x77, 0x84, 0x0, 0x1, 0x0, 0x22, 0xFF, 0x83, 0x6, 0x64, 0x6, 0x0, 0x0, 0x2F, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x13, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x1, 0x11, 0x33, 0x11, 0x1, 0x33, 0x1, 0x37, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x3, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x2, 0x4, 0x56, 0x3C, 0x6B, 0xE5, 0xDB, 0x12, 0xB2, 0xB2, 0xF3, 0xBF, 0xBF, 0x1, 0x6, 0xF3, 0x1, 0x31, 0xE5, 0xFE, 0xE5, 0x32, 0x9F, 0xC0, 0x1, 0xF3, 0x62, 0x5D, 0x94, 0x47, 0xF3, 0xDE, 0x19, 0x30, 0x29, 0x2B, 0x43, 0x14, 0x1E, 0x87, 0x1, 0x14, 0x39, 0x4C, 0x2, 0x6B, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFE, 0x2C, 0x1, 0x4A, 0x3, 0x3, 0xFE, 0x2F, 0x1, 0x81, 0xFE, 0x9B, 0x3, 0xB6, 0xDA, 0xFD, 0x42, 0x2, 0xBB, 0x71, 0x5C, 0x82, 0xFC, 0xFA, 0x1, 0xDC, 0xFE, 0xE9, 0xF, 0xA, 0xBC, 0x18, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x4, 0x3A, 0x0, 0x26, 0x1, 0x1F, 0xF9, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFF, 0x5A, 0xFF, 0xFF, 0x0, 0x14, 0xFF, 0xF4, 0x2, 0xB2, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x42, 0x3B, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFF, 0x5E, 0x0, 0x3, 0x0, 0x18, 0xFE, 0x60, 0x4, 0xFF, 0x4, 0x4E, 0x0, 0x6, 0x0, 0xD, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x7, 0x15, 0x21, 0x26, 0x26, 0x3, 0x32, 0x36, 0x37, 0x21, 0x15, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x17, 0x36, 0x20, 0x16, 0x17, 0x33, 0x15, 0x23, 0x6, 0x2, 0x2, 0x87, 0x95, 0x41, 0x1, 0xC7, 0x11, 0x75, 0x69, 0x79, 0x75, 0x8, 0xFE, 0x32, 0x43, 0xDA, 0xB1, 0x6C, 0xF2, 0xA7, 0xA7, 0xDF, 0xA, 0x6C, 0x1, 0x6E, 0xD6, 0x16, 0x91, 0x8D, 0xA, 0xD9, 0x3, 0x88, 0x7C, 0x7C, 0x6C, 0x8C, 0xFD, 0x27, 0xB5, 0x81, 0xB8, 0x7E, 0xC3, 0x75, 0xFD, 0xFF, 0x3, 0x85, 0xAB, 0x1, 0xAA, 0x6D, 0x81, 0xF3, 0xCB, 0xAB, 0xDB, 0xFE, 0xE2, 0x0, 0x2, 0x0, 0x18, 0xFF, 0xEE, 0x5, 0x48, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x21, 0x15, 0x14, 0x16, 0x17, 0x22, 0x24, 0x35, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x4, 0x2, 0xB0, 0x7D, 0x8F, 0xFD, 0xE7, 0x94, 0x79, 0xDF, 0xFE, 0xE0, 0x99, 0x99, 0xF2, 0x2, 0x19, 0xF3, 0x99, 0x99, 0xFE, 0xE2, 0xAF, 0x78, 0x70, 0x4E, 0x4E, 0x70, 0x78, 0xC1, 0xDE, 0xCB, 0x4E, 0xAB, 0x1, 0xAA, 0xFE, 0x56, 0x1, 0xAA, 0xFE, 0x56, 0xAB, 0x4E, 0xCB, 0xDE, 0x0, 0x2, 0x0, 0x18, 0xFF, 0xEB, 0x4, 0xD9, 0x4, 0x4E, 0x0, 0xA, 0x0, 0x39, 0x0, 0x0, 0x25, 0x32, 0x36, 0x36, 0x35, 0x27, 0x21, 0x7, 0x14, 0x16, 0x16, 0x25, 0x14, 0x6, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x34, 0x37, 0x23, 0x35, 0x33, 0x37, 0x36, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x21, 0x27, 0x26, 0x35, 0x34, 0x36, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x33, 0x15, 0x23, 0x16, 0x2, 0x78, 0x7A, 0x7D, 0x2D, 0x3, 0xFD, 0xBF, 0x3, 0x2D, 0x7D, 0x2, 0x90, 0x59, 0xE7, 0xD7, 0xD6, 0xE7, 0x59, 0x8, 0x52, 0x88, 0x28, 0x10, 0x4F, 0x22, 0x9D, 0x99, 0x30, 0x29, 0x18, 0x1, 0xD9, 0x2D, 0x15, 0x31, 0x99, 0x9C, 0x22, 0x4E, 0x23, 0x15, 0x88, 0x52, 0x8, 0xAE, 0x57, 0x7C, 0x36, 0x2E, 0x2E, 0x36, 0x7C, 0x57, 0xD1, 0x5C, 0xBB, 0x7D, 0x7D, 0xBB, 0x5C, 0x35, 0x31, 0xAB, 0x5B, 0x26, 0x26, 0x39, 0x21, 0xBD, 0x4E, 0x6E, 0x2F, 0x35, 0x67, 0x37, 0x6A, 0x34, 0x35, 0x2F, 0x6E, 0x4E, 0xBD, 0x21, 0x39, 0x28, 0x4F, 0x30, 0xAB, 0x31, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x52, 0x4, 0x32, 0x6, 0x0, 0x0, 0xA, 0x0, 0x28, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x7, 0x11, 0x14, 0x6, 0x2, 0x4F, 0x87, 0x6A, 0x67, 0x8C, 0x9B, 0x43, 0x44, 0xE7, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x3A, 0x42, 0xBD, 0x6C, 0xB, 0xDC, 0xF2, 0x6A, 0xB2, 0xD1, 0xD6, 0x5A, 0xB6, 0xB3, 0xCA, 0xAA, 0x8F, 0xD2, 0x8C, 0xFE, 0x44, 0x8D, 0xFD, 0x9F, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6C, 0x12, 0x8A, 0x76, 0x6, 0x0, 0xFD, 0xD2, 0x7C, 0xFE, 0xCD, 0xF4, 0x15, 0xE0, 0x91, 0xFE, 0xF1, 0x9B, 0xA5, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x52, 0x4, 0xA4, 0x6, 0x0, 0x0, 0xB, 0x0, 0x29, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x33, 0x11, 0x14, 0x6, 0x2, 0x37, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0xB2, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0xAE, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0xA0, 0xB6, 0xB3, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0x9F, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFA, 0xC3, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x52, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x11, 0x33, 0x11, 0x14, 0x6, 0x1, 0x28, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0xC5, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0xDB, 0xDB, 0xA0, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x3, 0x87, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0xB3, 0xFD, 0x3C, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x2, 0x0, 0x51, 0xFE, 0x52, 0x5, 0xA1, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x35, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x6, 0x4, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x27, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x21, 0x11, 0x14, 0x6, 0x2, 0x3E, 0x97, 0x44, 0x43, 0x96, 0x83, 0x79, 0x77, 0x2, 0xA8, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5D, 0xC7, 0xA, 0xFE, 0xF2, 0xD2, 0x59, 0xF4, 0x48, 0x73, 0x6F, 0xA5, 0x79, 0x8D, 0x6A, 0xAF, 0xC5, 0xE8, 0x2, 0xE9, 0xC8, 0xBB, 0x69, 0xA, 0xDC, 0x1, 0x95, 0xB6, 0xB3, 0x80, 0x1, 0xD9, 0x7C, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0x9F, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0xCD, 0xDD, 0x51, 0x62, 0x91, 0x85, 0x85, 0x7F, 0x49, 0x76, 0x1, 0x35, 0xE8, 0x1D, 0xF7, 0x1, 0x31, 0x80, 0x6C, 0xFC, 0x89, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x52, 0x4, 0x4C, 0x6, 0x0, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x33, 0x11, 0x14, 0x6, 0x3, 0xE, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x5F, 0xFE, 0xBF, 0x6D, 0xF3, 0xF3, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6D, 0x1, 0x34, 0x9F, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x1, 0xD2, 0x70, 0xFE, 0x9E, 0x6, 0x0, 0xFC, 0x8A, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xFE, 0x4B, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x82, 0xFE, 0x52, 0x2, 0x2E, 0x6, 0x0, 0x0, 0x11, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x14, 0x6, 0xF0, 0x3B, 0x33, 0x1C, 0x23, 0x41, 0x5D, 0xC4, 0xF3, 0xA0, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x6, 0x0, 0xFA, 0xC3, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x52, 0x7, 0x1B, 0x4, 0x4E, 0x0, 0x2C, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x14, 0x6, 0x5, 0xDD, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5D, 0xC5, 0x69, 0x59, 0x53, 0x69, 0x14, 0xF3, 0x69, 0x5A, 0x93, 0x3C, 0xF3, 0xE5, 0x7, 0x73, 0xC5, 0xD8, 0x51, 0x77, 0xD6, 0xA5, 0xBD, 0x2, 0xA0, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x2, 0xBE, 0x78, 0x52, 0x5A, 0x48, 0xFD, 0x1A, 0x2, 0xBC, 0x72, 0x5A, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0xA5, 0xA5, 0xB6, 0xD2, 0xFD, 0xFD, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x52, 0x4, 0x9E, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x14, 0x6, 0x3, 0x60, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5D, 0xC6, 0x61, 0x5D, 0x92, 0x49, 0xF3, 0xE5, 0x8, 0x77, 0xC3, 0x9B, 0xBC, 0x1, 0xA2, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x2, 0xBE, 0x70, 0x5A, 0x85, 0xFC, 0xFD, 0x4, 0x3A, 0x7D, 0x91, 0xB3, 0xDA, 0xFE, 0x2, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x52, 0x4, 0x31, 0x4, 0x4E, 0x0, 0x1D, 0x0, 0x29, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x7, 0x11, 0x14, 0x6, 0x3, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x2, 0x9A, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x3A, 0x43, 0xB1, 0x6C, 0xF2, 0xDF, 0xA, 0x6D, 0xB7, 0xCE, 0xD9, 0x59, 0xB6, 0xDA, 0x83, 0x73, 0x75, 0x83, 0x96, 0x41, 0x43, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6D, 0x13, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xDA, 0x91, 0xFE, 0xEB, 0x9B, 0xA5, 0x2, 0x5D, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7D, 0xFE, 0x23, 0x7F, 0x0, 0x1, 0x0, 0x64, 0xFE, 0x52, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x33, 0x11, 0x14, 0x6, 0xD2, 0x3B, 0x33, 0x1D, 0x22, 0x41, 0x5D, 0xC4, 0xE8, 0x6, 0x56, 0x9E, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA9, 0x39, 0xA1, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x4, 0x3A, 0x7A, 0x8E, 0xD, 0xE5, 0x8, 0x80, 0xFD, 0xDF, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x4C, 0xFE, 0x52, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x30, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x11, 0x14, 0x6, 0x2, 0x8C, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x64, 0x82, 0xDF, 0xEA, 0xEC, 0x5, 0x8A, 0x50, 0x60, 0x65, 0x55, 0x8E, 0xB0, 0xD9, 0xE0, 0xC1, 0xCB, 0xE7, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x5F, 0x7F, 0xBC, 0xD3, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x84, 0x2A, 0xE4, 0x86, 0x64, 0x50, 0x4A, 0x3A, 0x35, 0x4C, 0x1E, 0x25, 0x93, 0x89, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x6C, 0x40, 0x1B, 0x28, 0x92, 0x91, 0xFE, 0x5E, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0xDA, 0x6, 0x15, 0x0, 0x25, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x21, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x15, 0x14, 0x6, 0xA4, 0x43, 0x46, 0x7, 0x28, 0x35, 0xAD, 0xCD, 0xAF, 0x43, 0x46, 0x7, 0x28, 0x35, 0xAC, 0x1, 0x1, 0xBA, 0xB6, 0x88, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0xEB, 0xCC, 0xFE, 0x4B, 0x12, 0xBE, 0x8, 0xAC, 0x4, 0xE2, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAA, 0xFC, 0x20, 0xFE, 0xCF, 0x9B, 0xA5, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x41, 0xB4, 0xC0, 0x0, 0x1, 0x0, 0x17, 0xFE, 0x52, 0x3, 0xDB, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x21, 0x1, 0x33, 0x13, 0x13, 0x33, 0x1, 0x33, 0x11, 0x14, 0x6, 0x2, 0x47, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0xFE, 0xDB, 0xFE, 0x86, 0xFB, 0xEA, 0xE4, 0xFB, 0xFE, 0xCD, 0xDD, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x4, 0x3A, 0xFC, 0xFB, 0x3, 0x5, 0xFC, 0x89, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x1F, 0xFE, 0x52, 0x4, 0x7, 0x4, 0x3A, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x3, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x13, 0x33, 0x11, 0x14, 0x6, 0x2, 0xC9, 0x3C, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0x5B, 0xD8, 0xD7, 0xFE, 0xF2, 0x1, 0x56, 0xFE, 0xB6, 0x1, 0xD, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0xDD, 0x97, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x1, 0x72, 0xFE, 0x8E, 0x2, 0x26, 0x2, 0x14, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0xFE, 0x9D, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x52, 0xFE, 0x52, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x11, 0x14, 0x6, 0x2, 0x82, 0x3B, 0x33, 0x1D, 0x23, 0x41, 0x5C, 0xFD, 0x61, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x2, 0x3F, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x6E, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xFE, 0xCF, 0x9B, 0xA5, 0x0, 0x2, 0x0, 0x5B, 0xFE, 0x52, 0x5, 0x1F, 0x4, 0x4E, 0x0, 0x29, 0x0, 0x32, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x23, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x17, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x0, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x4, 0xB0, 0x88, 0xB6, 0x6E, 0x12, 0xA, 0x73, 0xAA, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB6, 0xED, 0x2, 0x6D, 0x5D, 0x40, 0x23, 0x1D, 0x33, 0xFD, 0x61, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0xFE, 0x52, 0xA5, 0x9B, 0x6E, 0x25, 0x41, 0x7A, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0xF, 0x26, 0xFE, 0xCF, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x2, 0x5D, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x52, 0x5, 0x69, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x2A, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x26, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x16, 0x17, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x4, 0xFB, 0x88, 0xB6, 0x76, 0x2B, 0x67, 0xC0, 0xCA, 0xDB, 0xDA, 0xCD, 0xB6, 0x66, 0x14, 0xD0, 0x3, 0x45, 0x4D, 0x5D, 0x40, 0x23, 0x1D, 0x33, 0xFC, 0xFD, 0x8D, 0x44, 0x44, 0x8B, 0x83, 0x6F, 0x6D, 0xFE, 0x52, 0xA5, 0x9B, 0x5E, 0x18, 0x85, 0xA2, 0x1, 0x28, 0xE8, 0x14, 0xFC, 0x1, 0x43, 0x97, 0x83, 0xFC, 0xF9, 0x76, 0x1, 0xFE, 0xD6, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x2, 0x5C, 0x88, 0x1, 0xCA, 0x8B, 0xE0, 0xB1, 0x8B, 0xC1, 0x0, 0x2, 0x0, 0x4E, 0xFE, 0x52, 0x4, 0xDF, 0x6, 0x1F, 0x0, 0xB, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x35, 0x94, 0x45, 0x43, 0x94, 0x84, 0x73, 0x72, 0x3, 0x2D, 0x2F, 0x4C, 0x88, 0xCD, 0x6B, 0xAD, 0xC3, 0xE6, 0xE5, 0xC6, 0xAB, 0x6A, 0xD7, 0x7D, 0x49, 0x33, 0x25, 0x1A, 0x41, 0x5C, 0x5D, 0x40, 0x23, 0x1D, 0xB3, 0x84, 0x1, 0xD1, 0x80, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xFD, 0xAE, 0xF, 0x95, 0xAB, 0xD2, 0x78, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x76, 0x1, 0x8, 0xB3, 0x8C, 0xF, 0xA2, 0x7, 0x3F, 0x56, 0xFA, 0xB2, 0x56, 0x3F, 0x7, 0x0, 0x2, 0x0, 0x54, 0xFE, 0x52, 0x4, 0xD7, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x28, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x17, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x3D, 0x64, 0x7A, 0x12, 0x1, 0xCE, 0x4, 0x61, 0x2, 0x21, 0x33, 0x3B, 0x88, 0xB6, 0x5F, 0x73, 0xF1, 0xFE, 0xEC, 0x1, 0x1B, 0xCE, 0xEC, 0xE3, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA7, 0x68, 0x83, 0x5D, 0x41, 0x23, 0x1C, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFA, 0xD6, 0xF, 0xA5, 0x9B, 0x80, 0x26, 0x1, 0x2C, 0xDF, 0x29, 0x1, 0x1, 0x1, 0x2D, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x7D, 0xFE, 0xDA, 0x56, 0x3F, 0x7, 0x0, 0x1, 0x0, 0x61, 0xFE, 0x52, 0x4, 0xEB, 0x4, 0x4D, 0x0, 0x31, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x4, 0xEB, 0x33, 0x3C, 0x88, 0xB6, 0x72, 0x8E, 0xCD, 0xFE, 0xF0, 0xCB, 0xB8, 0xFD, 0xCD, 0xB6, 0x1, 0x7, 0xF2, 0x79, 0x59, 0x6D, 0x64, 0x62, 0x68, 0xC7, 0xD2, 0xD1, 0x75, 0x6D, 0x6B, 0x7A, 0xF3, 0x5C, 0x41, 0x23, 0x1D, 0xFE, 0x61, 0xF, 0xA5, 0x9B, 0x8C, 0x32, 0xAC, 0x9A, 0xB9, 0x42, 0x4D, 0x98, 0x9A, 0xA1, 0xAE, 0x98, 0x3E, 0x4D, 0x57, 0x34, 0x3C, 0x4C, 0xAD, 0x4, 0x91, 0x3A, 0x5C, 0x5D, 0x3D, 0xFE, 0x51, 0x56, 0x3F, 0x7, 0x0, 0x1, 0x0, 0x4D, 0xFE, 0x52, 0x3, 0xFA, 0x4, 0x4D, 0x0, 0x31, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x4, 0x23, 0x22, 0x27, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0xFA, 0x33, 0x3C, 0x88, 0xB6, 0xF2, 0x7A, 0x6B, 0x6E, 0x75, 0xD4, 0xD0, 0xC7, 0x69, 0x61, 0x63, 0x6E, 0x58, 0x7A, 0xF2, 0x1, 0x8, 0xB5, 0xCE, 0xFD, 0xB8, 0xCB, 0xFE, 0xF0, 0xCE, 0x8E, 0x72, 0x5E, 0x40, 0x23, 0x1D, 0xFE, 0x61, 0xF, 0xA5, 0x9B, 0x1, 0xAF, 0x3D, 0x5D, 0x5C, 0x3A, 0x92, 0x3, 0xAD, 0x4C, 0x3C, 0x34, 0x57, 0x4D, 0x3E, 0x98, 0xAE, 0xA1, 0x9A, 0x98, 0x4D, 0x42, 0xB9, 0x9A, 0xAC, 0x32, 0x8C, 0x56, 0x3F, 0x7, 0x0, 0x2, 0x0, 0x47, 0xFE, 0x52, 0x5, 0xD6, 0x4, 0x4E, 0x0, 0x22, 0x0, 0x2A, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x11, 0x23, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x0, 0x17, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0x32, 0x36, 0x37, 0x21, 0x15, 0x16, 0x16, 0x5, 0x67, 0x87, 0xB6, 0x31, 0x1C, 0xFE, 0xF2, 0xBA, 0xEC, 0xE2, 0x2, 0xC3, 0xA, 0x95, 0x80, 0xA8, 0x68, 0x83, 0x34, 0xCC, 0xA1, 0xE6, 0x1, 0x13, 0xC, 0xFB, 0x5D, 0x40, 0x23, 0x1D, 0x33, 0xFC, 0x73, 0x63, 0x7B, 0x11, 0xFE, 0x32, 0x5, 0x61, 0xFE, 0x52, 0xA5, 0x9B, 0x2, 0x25, 0xD5, 0xF6, 0x1, 0x2C, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x7D, 0x4D, 0x7F, 0xFE, 0xEC, 0xD1, 0xFD, 0x29, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x2, 0x5D, 0x8C, 0x7C, 0x12, 0x5E, 0x98, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x52, 0x2, 0xD4, 0x5, 0xD5, 0x0, 0x9, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x22, 0x26, 0x35, 0x35, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x7D, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x1, 0xE8, 0x88, 0xB6, 0x9B, 0xF3, 0x78, 0x5D, 0x40, 0x23, 0x1D, 0x33, 0x5, 0x54, 0x38, 0x49, 0x49, 0x38, 0x37, 0x4A, 0x4A, 0xF9, 0x35, 0xA5, 0x9B, 0x6E, 0x4, 0x3A, 0xFC, 0x9E, 0xFE, 0xBA, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x0, 0x1, 0x0, 0x3B, 0xFE, 0x52, 0x3, 0xE8, 0x4, 0x4E, 0x0, 0x27, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0xE8, 0x33, 0x3C, 0x88, 0xB6, 0xEC, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0x84, 0x6D, 0x5D, 0x41, 0x23, 0x1D, 0xFE, 0x61, 0xF, 0xA5, 0x9B, 0x1, 0xD4, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0x42, 0x9C, 0x56, 0x3F, 0x7, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x3, 0x31, 0x6, 0x2D, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x14, 0x6, 0x7, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0x59, 0x88, 0xB6, 0x7, 0x27, 0x36, 0xAD, 0x1, 0xCC, 0xAF, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAC, 0x1, 0xA4, 0x91, 0x5D, 0x40, 0x23, 0x1D, 0x33, 0xFE, 0x4B, 0xA5, 0x9B, 0x25, 0xBF, 0x9, 0xAB, 0x3, 0xA8, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAA, 0xFC, 0x58, 0xA2, 0xBB, 0x13, 0x18, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x0, 0x1, 0x0, 0x77, 0xFE, 0x52, 0x5, 0x58, 0x4, 0x3A, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x23, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x4, 0xEA, 0x88, 0xB6, 0x9A, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xF3, 0x67, 0x45, 0xAE, 0x40, 0xF3, 0x84, 0x5D, 0x41, 0x23, 0x1C, 0x33, 0xFE, 0x52, 0xA5, 0x9B, 0x6E, 0x6A, 0x7E, 0xBA, 0xD5, 0x2, 0xBF, 0xFD, 0x43, 0x75, 0x55, 0x7D, 0x3, 0xA, 0xFC, 0x9E, 0xFE, 0xBA, 0x56, 0x3F, 0x7, 0xA3, 0xF, 0x0, 0x1, 0x0, 0x5E, 0xFD, 0xDA, 0x4, 0x46, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x22, 0x27, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0xA, 0x33, 0x3B, 0x88, 0xB6, 0xF3, 0x85, 0x70, 0x80, 0x8E, 0x9B, 0x93, 0x84, 0x1, 0x49, 0xFD, 0xA4, 0x3, 0x8D, 0x1, 0xFE, 0x87, 0xC8, 0xDA, 0xFE, 0xDF, 0xDF, 0xA7, 0x7F, 0x6A, 0x41, 0x22, 0x1D, 0xFD, 0xE9, 0xF, 0xA3, 0x9B, 0x1, 0x6E, 0x5E, 0x88, 0x88, 0x65, 0x7A, 0x69, 0xAB, 0x1, 0x5B, 0xC4, 0x9B, 0xFE, 0x7B, 0x15, 0xCC, 0xAC, 0xCE, 0xE2, 0x4A, 0xF, 0x56, 0x3D, 0x7, 0x0, 0x2, 0x0, 0x41, 0x2, 0x7D, 0x3, 0x70, 0x5, 0xBC, 0x0, 0x15, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x27, 0x7, 0x23, 0x11, 0x26, 0x23, 0x7, 0x27, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x2, 0x29, 0x86, 0x4C, 0xE, 0xAC, 0x2, 0x35, 0x13, 0x12, 0x38, 0x26, 0x8E, 0x26, 0x4C, 0x8C, 0x96, 0xAF, 0xAF, 0xC5, 0x61, 0x4E, 0x4C, 0x62, 0x68, 0x33, 0x32, 0x2, 0x7D, 0x70, 0x61, 0x2, 0x30, 0x5B, 0x3, 0x91, 0x17, 0x74, 0x74, 0xDB, 0xAA, 0xF, 0xBB, 0xF0, 0x95, 0xA2, 0x83, 0x67, 0x8A, 0x63, 0xFE, 0xB2, 0x65, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x7C, 0x2, 0xF5, 0x5, 0xBA, 0x0, 0x19, 0x0, 0x0, 0x1, 0x32, 0x37, 0x33, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0xAD, 0x88, 0x14, 0xAC, 0x4, 0xBC, 0x86, 0xB8, 0xBB, 0xBB, 0xB8, 0x92, 0xB0, 0x4, 0xAC, 0x15, 0x87, 0x5F, 0x4D, 0x4B, 0x3, 0x23, 0x71, 0x74, 0xA4, 0xED, 0xA5, 0x1A, 0xA5, 0xED, 0xA8, 0x85, 0x86, 0x8B, 0x60, 0x1A, 0x61, 0x8A, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x26, 0x3, 0x40, 0x5, 0xBA, 0x0, 0x8, 0x0, 0x27, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x16, 0x17, 0x22, 0x27, 0x7, 0x27, 0x37, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x2, 0x1, 0x32, 0x50, 0x39, 0x40, 0x68, 0x27, 0x34, 0x78, 0x57, 0x71, 0x81, 0x82, 0x3A, 0xBE, 0xB3, 0x92, 0xB3, 0x4, 0xAC, 0x15, 0x87, 0x61, 0x4C, 0x6, 0x86, 0x89, 0x77, 0x6B, 0xC2, 0x3, 0x1B, 0x26, 0x29, 0x31, 0x67, 0x19, 0x9F, 0x36, 0x8C, 0x5F, 0x9F, 0x63, 0x86, 0x1B, 0xAA, 0xE8, 0xA8, 0x85, 0x86, 0x8C, 0x5F, 0x1B, 0x2A, 0x23, 0x7A, 0x78, 0x4D, 0x72, 0x87, 0x0, 0x2, 0x0, 0x3C, 0x2, 0x7D, 0x3, 0x3A, 0x6, 0xEF, 0x0, 0x1A, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x26, 0x27, 0x7, 0x27, 0x37, 0x26, 0x27, 0x37, 0x16, 0x17, 0x37, 0x17, 0x7, 0x16, 0x13, 0x15, 0x14, 0x6, 0x27, 0x32, 0x11, 0x35, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0xBB, 0xAA, 0xD5, 0xC3, 0xAB, 0x62, 0x50, 0x20, 0x49, 0xAB, 0x40, 0x8B, 0x29, 0x2F, 0x3E, 0x6F, 0x5B, 0xA9, 0x40, 0x93, 0xA0, 0x1, 0xDA, 0xA2, 0xB7, 0x42, 0x79, 0x5B, 0x5E, 0x5F, 0x2, 0x7D, 0xD3, 0x97, 0xA9, 0xCD, 0x36, 0x6F, 0x4C, 0x60, 0x5C, 0x4E, 0x17, 0xF, 0x9D, 0x1B, 0x45, 0x5F, 0x5C, 0x53, 0xB6, 0xFE, 0xE5, 0x42, 0xBF, 0xF0, 0xA7, 0x1, 0x12, 0x4A, 0x3B, 0x71, 0x63, 0x54, 0x6F, 0x0, 0x1, 0x0, 0x32, 0x2, 0x7C, 0x2, 0xDE, 0x5, 0xBA, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0x85, 0x7A, 0xD9, 0xB8, 0xB, 0x95, 0x8E, 0x86, 0x93, 0x93, 0x78, 0x80, 0x8F, 0x4, 0xB9, 0xC4, 0x83, 0x93, 0xB7, 0x85, 0x94, 0xC6, 0x2, 0x7C, 0x7A, 0x83, 0x5D, 0x61, 0x5B, 0x1, 0x97, 0x1, 0x52, 0x55, 0x50, 0x71, 0x81, 0x78, 0x72, 0x6F, 0x3A, 0x30, 0x8A, 0x71, 0x80, 0x0, 0x1, 0x0, 0x35, 0x2, 0x8C, 0x2, 0x34, 0x7, 0x1E, 0x0, 0x14, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x2, 0x19, 0xA5, 0xC5, 0x7A, 0x7A, 0x9B, 0x82, 0x34, 0x34, 0x5, 0x1C, 0x2B, 0x73, 0x1, 0xA5, 0x5, 0xC, 0xFD, 0x80, 0x2, 0x80, 0xA0, 0x55, 0x8D, 0x90, 0xD, 0x9F, 0x6, 0x75, 0x57, 0x0, 0x1, 0x0, 0x33, 0x1, 0x4C, 0x2, 0x4D, 0x5, 0xAD, 0x0, 0x15, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x6, 0xAB, 0x36, 0x2A, 0x17, 0x20, 0x32, 0x2F, 0xB0, 0xB0, 0xC5, 0xA5, 0xA5, 0x7A, 0x1, 0x4C, 0xD, 0xA6, 0x6, 0x38, 0x49, 0x1, 0x91, 0xA0, 0x1, 0x2, 0xFE, 0xFE, 0xA0, 0xFE, 0x70, 0x87, 0xA8, 0xFF, 0xFF, 0x0, 0x3C, 0x1, 0x4C, 0x3, 0x16, 0x5, 0xBA, 0x0, 0x6, 0x3, 0x7C, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x1, 0xB, 0x2, 0xFA, 0x5, 0xAD, 0x0, 0x10, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x2, 0xFA, 0xC5, 0x4B, 0x82, 0x79, 0x8B, 0xC5, 0x4, 0x7F, 0x61, 0x28, 0xC5, 0x1, 0xB, 0x1, 0xE5, 0x71, 0x91, 0xA2, 0x1, 0xFB, 0xFE, 0x28, 0xAF, 0x58, 0x2, 0x2F, 0x0, 0x2, 0x0, 0x28, 0x2, 0x8C, 0x2, 0x42, 0x6, 0xEA, 0x0, 0x9, 0x0, 0x15, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0xC2, 0x3B, 0x37, 0x36, 0x3C, 0x3C, 0x36, 0x37, 0x3B, 0x1, 0x80, 0xAC, 0xC5, 0xA9, 0xA9, 0xC5, 0xAC, 0x6, 0xAC, 0x3E, 0x3E, 0x5C, 0x3D, 0x3D, 0xFD, 0xBB, 0xFE, 0x81, 0x1, 0x7F, 0xA0, 0x1, 0x2, 0xFE, 0xFE, 0x0, 0x1, 0x0, 0x64, 0x2, 0x82, 0x1, 0xCF, 0x5, 0xAD, 0x0, 0xC, 0x0, 0x0, 0x13, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x35, 0x64, 0xC4, 0x3, 0x43, 0x1C, 0x2A, 0x1B, 0x3A, 0x50, 0x62, 0x7F, 0x5, 0xAD, 0xFD, 0xC9, 0x4D, 0x10, 0x95, 0x22, 0x73, 0x7E, 0x0, 0x1, 0x0, 0x3F, 0x2, 0x8C, 0x2, 0x2B, 0x5, 0xEB, 0x0, 0xB, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x11, 0x23, 0x35, 0x21, 0x15, 0x23, 0x11, 0x33, 0x2, 0x2B, 0xFE, 0x14, 0x93, 0x93, 0x1, 0xEC, 0x94, 0x94, 0x2, 0x8C, 0xA0, 0x2, 0x1F, 0xA0, 0xA0, 0xFD, 0xE1, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x2, 0x42, 0x5, 0xEB, 0x0, 0x13, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x21, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x15, 0x33, 0x2, 0x2B, 0xFE, 0x14, 0x93, 0xAA, 0xAA, 0x93, 0x1, 0xEC, 0x94, 0xAB, 0xAB, 0x94, 0x2, 0x8C, 0xA0, 0xEC, 0xA0, 0x93, 0xA0, 0xA0, 0x93, 0xA0, 0xEC, 0x0, 0x3, 0x0, 0x0, 0x1, 0x3D, 0x2, 0x7D, 0x6, 0xEA, 0x0, 0x7, 0x0, 0x17, 0x0, 0x20, 0x0, 0x0, 0x0, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x3, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0x1, 0x1F, 0x3B, 0x6C, 0x3D, 0x3D, 0x6C, 0x3B, 0x24, 0x67, 0x94, 0x9D, 0x6A, 0x27, 0xC5, 0x8A, 0x8A, 0x70, 0x90, 0x24, 0x17, 0x21, 0x50, 0x6, 0xAC, 0x3E, 0x3E, 0x5C, 0x3D, 0x3D, 0xFA, 0xED, 0x6A, 0x67, 0x77, 0x7C, 0x2, 0xAC, 0xFD, 0x54, 0xA7, 0x83, 0x9A, 0xA3, 0x2C, 0x22, 0x2C, 0x40, 0x3A, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x1, 0xB5, 0x7, 0xE, 0x0, 0xB, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x27, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x1, 0xB5, 0x52, 0x43, 0xBA, 0x2, 0xC5, 0x48, 0x1D, 0x27, 0x1, 0x5D, 0x11, 0xF5, 0x4, 0xCD, 0xFB, 0x4A, 0x50, 0x9, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x1, 0xC3, 0x7, 0xE, 0x0, 0xF, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x35, 0x23, 0x11, 0x33, 0x11, 0x33, 0x15, 0x14, 0x1, 0x7, 0x43, 0x52, 0x27, 0x1D, 0x48, 0x9A, 0xC5, 0x9A, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x34, 0x4, 0x82, 0xFC, 0x25, 0xED, 0xFA, 0x0, 0x1, 0x0, 0x65, 0x2, 0x8C, 0x2, 0xC0, 0x5, 0xAD, 0x0, 0x5, 0x0, 0x0, 0x13, 0x11, 0x33, 0x11, 0x21, 0x15, 0x65, 0xC5, 0x1, 0x96, 0x2, 0x8C, 0x3, 0x21, 0xFD, 0x86, 0xA7, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x4, 0xCA, 0x5, 0xBA, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x17, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x4, 0xE, 0x45, 0x50, 0x2A, 0x1A, 0x48, 0x46, 0x3D, 0x63, 0x27, 0x2, 0xC5, 0x4, 0x7E, 0x62, 0x28, 0xC5, 0x98, 0x20, 0x4C, 0x8F, 0xB5, 0x37, 0x4A, 0x99, 0x79, 0x8B, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x1, 0xFE, 0x69, 0x54, 0x5A, 0x23, 0xFD, 0xF6, 0x1, 0xD9, 0xAE, 0x59, 0xFD, 0xD2, 0x3, 0x21, 0x7A, 0x87, 0x98, 0x98, 0x91, 0xA2, 0xFD, 0xBF, 0xFA, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x4, 0xCA, 0x5, 0xAD, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x27, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x4, 0xCA, 0xC5, 0x4C, 0x82, 0xB5, 0x37, 0x4A, 0x99, 0x79, 0x8B, 0xC5, 0x4, 0x7F, 0x63, 0x27, 0x2, 0xC5, 0x4, 0x7E, 0x62, 0x28, 0xC5, 0x1, 0x4C, 0x1, 0xA4, 0x71, 0x98, 0x98, 0x91, 0xA2, 0x1, 0xFB, 0xFE, 0x28, 0xAF, 0x5A, 0x23, 0x2, 0xA, 0xFE, 0x28, 0xAF, 0x59, 0x2, 0x2E, 0x0, 0x1, 0x0, 0x1A, 0x1, 0x4C, 0x3, 0x3C, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x11, 0x6, 0xAF, 0x46, 0x4F, 0x27, 0x1D, 0x47, 0xAB, 0x11, 0x4C, 0x8B, 0x79, 0x8B, 0xC5, 0x4, 0x7F, 0x61, 0x28, 0x3, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x3, 0x55, 0x73, 0x80, 0x91, 0xA2, 0xFE, 0x5, 0x1, 0xD9, 0xAE, 0x58, 0xFD, 0x83, 0xF2, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x3, 0x86, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x27, 0x11, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x33, 0x32, 0x37, 0x3, 0x86, 0x4F, 0x46, 0xB9, 0x3, 0x4, 0x7E, 0x62, 0x28, 0xC5, 0xAB, 0x12, 0x4C, 0x8A, 0x78, 0x8B, 0x48, 0x1D, 0x27, 0x1, 0x5D, 0x11, 0xF2, 0x2, 0x27, 0xAE, 0x59, 0xFD, 0xD2, 0x3, 0x21, 0x71, 0x7E, 0x91, 0xA2, 0xFD, 0xD1, 0x50, 0x9, 0x0, 0x1, 0x0, 0x64, 0x2, 0x8C, 0x3, 0x83, 0x5, 0xAD, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x2, 0xBD, 0xFE, 0x6C, 0xC5, 0xC5, 0x1, 0x94, 0xC6, 0x2, 0x8C, 0x1, 0xEA, 0xFE, 0x16, 0x3, 0x21, 0xFE, 0x17, 0x1, 0xE9, 0xFC, 0xDF, 0x0, 0x3, 0x0, 0x3C, 0x2, 0x7C, 0x3, 0x32, 0x5, 0xBA, 0x0, 0xD, 0x0, 0x12, 0x0, 0x17, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x1, 0x22, 0x7, 0x21, 0x26, 0x3, 0x32, 0x37, 0x21, 0x16, 0x3C, 0xCB, 0xAF, 0xB1, 0xCB, 0xCB, 0xB0, 0xAF, 0xCC, 0x1, 0x7A, 0x8E, 0x20, 0x1, 0x5E, 0x20, 0x8F, 0x93, 0x1D, 0xFE, 0xA0, 0x1C, 0x4, 0x23, 0xB3, 0xE4, 0xE4, 0xB3, 0x10, 0xB3, 0xE4, 0xE4, 0xB3, 0x1, 0x0, 0x9F, 0x9F, 0xFE, 0x10, 0xA7, 0xA7, 0x0, 0x3, 0x0, 0x3C, 0x1, 0x57, 0x4, 0x31, 0x7, 0xD, 0x0, 0x9, 0x0, 0x14, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x21, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x10, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x1, 0x95, 0x21, 0x1B, 0x1A, 0x21, 0x50, 0x45, 0x1, 0xD2, 0x98, 0x49, 0x50, 0x21, 0x1B, 0x1B, 0x55, 0x3F, 0x31, 0xC5, 0x2F, 0x3B, 0x8E, 0x9D, 0x9C, 0x91, 0x3A, 0x2E, 0xC5, 0x30, 0x3E, 0x91, 0x9C, 0x9C, 0x3, 0x20, 0xB, 0x1, 0xDF, 0xB, 0x90, 0x84, 0xE1, 0xE7, 0xA, 0x73, 0x91, 0xC, 0xFE, 0x21, 0xA, 0xA5, 0x16, 0xFE, 0xC6, 0x1, 0x39, 0x15, 0xDB, 0x1, 0x76, 0xEE, 0x15, 0x1, 0x68, 0xFE, 0x96, 0x17, 0xED, 0xCC, 0xAA, 0xDC, 0x0, 0x1, 0x0, 0x3C, 0x1, 0x4C, 0x2, 0xDF, 0x5, 0xBA, 0x0, 0x2C, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x15, 0x16, 0x33, 0x32, 0x37, 0x1, 0x8D, 0x4F, 0x46, 0x66, 0x56, 0xBE, 0x10, 0x98, 0x79, 0xAD, 0x86, 0x92, 0xAC, 0x87, 0x9D, 0xB3, 0xC3, 0x1, 0x40, 0x46, 0x76, 0x4E, 0x56, 0x8E, 0x94, 0xA7, 0x9C, 0x5C, 0x49, 0x3, 0x4F, 0x1D, 0x27, 0x1, 0x5D, 0x11, 0x81, 0x84, 0x1, 0x37, 0x72, 0x4C, 0x47, 0x27, 0x1E, 0x73, 0x6A, 0x6E, 0x81, 0x93, 0x6B, 0x28, 0x3D, 0x4E, 0x28, 0x2A, 0x13, 0x1F, 0x74, 0x6D, 0x72, 0x80, 0x1C, 0x48, 0x48, 0x9, 0x0, 0x1, 0x0, 0x1A, 0x1, 0x4C, 0x1, 0xF6, 0x7, 0xE, 0x0, 0x13, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x11, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x15, 0x11, 0x6, 0xAF, 0x43, 0x52, 0x27, 0x1D, 0x47, 0x2, 0xBA, 0x42, 0x53, 0x34, 0x10, 0x47, 0x2, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x3, 0xC1, 0xF5, 0x10, 0xB4, 0x8, 0x4F, 0xFC, 0x3E, 0xF5, 0x0, 0x1, 0x0, 0x28, 0x1, 0x4C, 0x2, 0x7, 0x6, 0x70, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x35, 0x26, 0x27, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0x47, 0x46, 0x4F, 0x27, 0x1D, 0x48, 0x90, 0x2, 0x84, 0x84, 0xC5, 0x96, 0x96, 0x51, 0x19, 0x28, 0x5, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x4A, 0x32, 0x24, 0xD2, 0x1, 0x8C, 0xA7, 0xC3, 0xC3, 0xA7, 0xFE, 0x8B, 0x6D, 0x8, 0xF3, 0xED, 0x0, 0x2, 0x0, 0x28, 0x2, 0x7F, 0x3, 0xA2, 0x5, 0xAD, 0x0, 0x6, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x32, 0x37, 0x35, 0x21, 0x14, 0x16, 0x17, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x1, 0xE2, 0x61, 0x28, 0xFE, 0xF4, 0x46, 0xE1, 0x12, 0x4B, 0x8C, 0x78, 0x8B, 0x72, 0x72, 0xC5, 0x1, 0xC, 0xC5, 0x72, 0x72, 0x3, 0x26, 0x59, 0x64, 0x69, 0x54, 0x9A, 0x73, 0x80, 0x91, 0xA2, 0x31, 0xA7, 0x1, 0x23, 0xFE, 0xDD, 0x1, 0x23, 0xFE, 0xDD, 0xA7, 0xFE, 0xA9, 0x0, 0x1, 0x0, 0x4C, 0x2, 0x7F, 0x3, 0x81, 0x5, 0xAD, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x36, 0x34, 0x26, 0x26, 0x27, 0x35, 0x34, 0x36, 0x36, 0x33, 0x15, 0x22, 0x6, 0x15, 0x14, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x14, 0x16, 0x2, 0x6A, 0x51, 0x3C, 0x3B, 0x2, 0x29, 0x84, 0x87, 0x22, 0x49, 0x3B, 0x3B, 0x44, 0xB2, 0xA5, 0xA4, 0xB2, 0x44, 0x3B, 0x1D, 0x1E, 0x48, 0x23, 0x88, 0x83, 0x29, 0x3C, 0x1D, 0x20, 0x50, 0x3, 0x26, 0x74, 0x68, 0x58, 0x5A, 0x36, 0x7, 0x25, 0x57, 0x40, 0xA1, 0x17, 0x29, 0x22, 0x47, 0x5F, 0x49, 0x47, 0x93, 0x62, 0x62, 0x93, 0x47, 0x49, 0x5F, 0x23, 0x24, 0x22, 0x29, 0x17, 0xA1, 0x40, 0x57, 0x25, 0x3A, 0x5D, 0x2A, 0x2E, 0x68, 0x74, 0x0, 0x1, 0x0, 0x5B, 0x2, 0x7E, 0x3, 0x50, 0x5, 0xAD, 0x0, 0xF, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x2, 0x8B, 0xC5, 0xD2, 0xA9, 0xA6, 0xD4, 0xC5, 0x1, 0xB4, 0xB5, 0x1, 0x5, 0xAD, 0xFE, 0x27, 0xAD, 0xA9, 0xA9, 0xAD, 0x1, 0xD9, 0xFE, 0x25, 0xAE, 0xAE, 0x0, 0x1, 0x0, 0x5B, 0x2, 0x7F, 0x3, 0x13, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x17, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x1, 0xB7, 0x41, 0x56, 0x41, 0x1C, 0x27, 0x4F, 0x3E, 0xB7, 0x5, 0xC1, 0xFE, 0xCA, 0xC1, 0xC5, 0x57, 0x3, 0x26, 0x54, 0x6A, 0xD0, 0x4A, 0x9, 0xB4, 0x11, 0xED, 0xFA, 0xBA, 0x9A, 0x9A, 0xBA, 0x1, 0xDA, 0xFE, 0x37, 0x6A, 0x54, 0x0, 0x1, 0x0, 0x1C, 0x2, 0x8C, 0x2, 0xFF, 0x5, 0xAD, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x23, 0x1, 0x33, 0x1, 0x23, 0x3, 0x27, 0x1, 0x87, 0x97, 0xD4, 0x1, 0x18, 0xB6, 0x1, 0x15, 0xD3, 0x93, 0x9, 0x4, 0x99, 0xFD, 0xF3, 0x3, 0x21, 0xFC, 0xDF, 0x2, 0xD, 0x30, 0x0, 0x1, 0x0, 0x2E, 0x2, 0x8C, 0x2, 0xB8, 0x5, 0xAD, 0x0, 0x9, 0x0, 0x0, 0x13, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x2E, 0x1, 0x7C, 0xFE, 0x8C, 0x2, 0x72, 0xFE, 0x82, 0x1, 0x8E, 0x2, 0x8C, 0x84, 0x1, 0xF6, 0xA7, 0x7F, 0xFE, 0x5, 0xA7, 0x0, 0x1, 0x0, 0x2E, 0x1, 0x4C, 0x3, 0x43, 0x5, 0xAD, 0x0, 0x13, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x27, 0x35, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x14, 0x33, 0x32, 0x37, 0x3, 0x43, 0x4F, 0x46, 0xB8, 0x4, 0xFE, 0x3C, 0x1, 0x7C, 0xFE, 0x8C, 0x2, 0x72, 0xFE, 0x82, 0x1, 0x8E, 0x47, 0x1D, 0x27, 0x1, 0x5D, 0x11, 0xF0, 0x50, 0x84, 0x1, 0xF6, 0xA7, 0x7F, 0xFE, 0x5, 0xE1, 0x4A, 0x9, 0x0, 0x2, 0x0, 0x2E, 0x1, 0xEA, 0x3, 0xA3, 0x5, 0xAD, 0x0, 0x6, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x7, 0x33, 0x36, 0x35, 0x34, 0x1, 0x7, 0x27, 0x37, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x2, 0xB1, 0x2B, 0x48, 0x15, 0x8B, 0xFE, 0xF7, 0x6C, 0x97, 0x29, 0xCD, 0x1, 0x7C, 0xFE, 0x8C, 0x2, 0x72, 0xFE, 0x82, 0x47, 0x63, 0x94, 0x6B, 0x62, 0x6E, 0xB6, 0xA2, 0x3, 0xA3, 0x70, 0x2, 0x43, 0x2B, 0xFE, 0xE9, 0xA2, 0x68, 0x3A, 0x84, 0x1, 0xF6, 0xA7, 0x7F, 0xFE, 0x5, 0x8D, 0x8D, 0x6C, 0x56, 0x74, 0x8B, 0x0, 0x1, 0x0, 0x33, 0x1, 0x54, 0x3, 0x2B, 0x5, 0xAD, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x13, 0x21, 0x35, 0x21, 0x17, 0x1, 0x4, 0x11, 0x14, 0x6, 0x1, 0xAE, 0x8E, 0xED, 0xC7, 0x4, 0x55, 0x5B, 0x56, 0x62, 0x7E, 0x63, 0x63, 0xF7, 0xFE, 0x45, 0x2, 0xAD, 0x1, 0xFE, 0xF4, 0x1, 0x2B, 0xE0, 0x1, 0x54, 0x96, 0xA7, 0x41, 0x57, 0x57, 0x49, 0x65, 0x4A, 0xA5, 0x1, 0x19, 0xA7, 0x80, 0xFE, 0xBA, 0x30, 0xFE, 0xE0, 0x97, 0xAC, 0x0, 0x3, 0x0, 0x58, 0x2, 0x7B, 0x3, 0x49, 0x6, 0xCE, 0x0, 0xD, 0x0, 0x15, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0x21, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x13, 0x32, 0x36, 0x35, 0x21, 0x15, 0x14, 0x16, 0x1, 0xD1, 0x9A, 0xDF, 0xDD, 0x9B, 0x9D, 0xDC, 0xDB, 0xFE, 0xAE, 0x1, 0x68, 0x58, 0x5C, 0x5A, 0x5A, 0xB5, 0x5E, 0x55, 0xFE, 0x98, 0x5B, 0x2, 0x7B, 0xEF, 0xFC, 0x84, 0xFD, 0xE7, 0xE7, 0xFD, 0x84, 0xFC, 0xEF, 0x2, 0x7F, 0x9, 0x9E, 0x87, 0x86, 0xFD, 0x80, 0x90, 0xA1, 0x4, 0x9D, 0x90, 0x0, 0x3, 0xFB, 0xCE, 0x4, 0x90, 0xFF, 0x6A, 0x6, 0x0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x13, 0x23, 0x1, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x9B, 0xC3, 0xCA, 0xFE, 0xF2, 0x1, 0xD0, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xFD, 0x78, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x6, 0x0, 0xFE, 0xD2, 0x1, 0x2E, 0x92, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x2F, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x3, 0xFB, 0xCB, 0x4, 0x90, 0xFF, 0x67, 0x6, 0x0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFC, 0xDE, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0xFE, 0x2A, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x2, 0x89, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x4, 0xD2, 0x1, 0x2E, 0xFE, 0xD2, 0x9C, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x2F, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0xFD, 0xA, 0xFD, 0xD5, 0xFE, 0x64, 0xFF, 0xAE, 0x0, 0x29, 0x0, 0x0, 0x5, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x7, 0x6, 0x14, 0x16, 0x16, 0x14, 0x6, 0x6, 0x7, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x34, 0x36, 0x36, 0x37, 0x35, 0x34, 0x26, 0x27, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0xFD, 0xA, 0x58, 0x6F, 0x43, 0x45, 0x46, 0x22, 0x23, 0x4B, 0x4B, 0x4C, 0x49, 0x2, 0x7C, 0x14, 0x6B, 0x82, 0x4A, 0x4A, 0x1, 0x4F, 0x22, 0x25, 0x4E, 0x28, 0x26, 0x23, 0x3F, 0x45, 0x88, 0x36, 0x3C, 0x50, 0x21, 0x8, 0x8, 0x18, 0xB, 0x1A, 0x44, 0x17, 0x9, 0xA, 0x1, 0x13, 0x8, 0x55, 0x8, 0x38, 0x2C, 0x22, 0x17, 0x9, 0xC, 0x1, 0xA, 0xC, 0xB, 0xC, 0x1F, 0x1C, 0x20, 0xB, 0xA, 0xC, 0x14, 0x24, 0x0, 0x1, 0xFC, 0xCB, 0x4, 0xAC, 0xFF, 0x6C, 0x6, 0x28, 0x0, 0x5, 0x0, 0x0, 0x1, 0x25, 0x37, 0x17, 0x25, 0x17, 0xFD, 0xCF, 0xFE, 0xFC, 0x54, 0xB0, 0x1, 0x48, 0x55, 0x4, 0xAC, 0x95, 0x90, 0x65, 0xBC, 0x90, 0x0, 0x1, 0xFC, 0xDE, 0x4, 0xD2, 0xFF, 0xBC, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x35, 0x21, 0x37, 0x21, 0x3, 0xFC, 0xDE, 0x1, 0x8D, 0x49, 0x1, 0x8, 0xEE, 0x4, 0xD2, 0x9E, 0x90, 0xFE, 0xD2, 0x0, 0x1, 0xFC, 0x3C, 0x4, 0xD2, 0xFF, 0x1A, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x3, 0x21, 0x17, 0x21, 0x15, 0xFD, 0x2A, 0xEE, 0x1, 0x4, 0x4A, 0x1, 0x90, 0x4, 0xD2, 0x1, 0x2E, 0x90, 0x9E, 0x0, 0x1, 0xFC, 0xA4, 0x4, 0xD2, 0xFF, 0x71, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x35, 0x21, 0x13, 0x23, 0x27, 0xFC, 0xA4, 0x2, 0x9, 0xC4, 0xCA, 0x81, 0x5, 0x62, 0x9E, 0xFE, 0xD2, 0x90, 0x0, 0x1, 0xFC, 0x6E, 0x4, 0xD2, 0xFF, 0x35, 0x6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x13, 0x21, 0x15, 0x21, 0x7, 0xFC, 0x6E, 0xC3, 0x2, 0x4, 0xFE, 0x84, 0x81, 0x4, 0xD2, 0x1, 0x2E, 0x9E, 0x90, 0x0, 0x1, 0xFC, 0x22, 0x4, 0xD2, 0xFF, 0x8F, 0x6, 0x0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x3, 0x33, 0x17, 0x37, 0x21, 0x13, 0x23, 0x27, 0x7, 0xFC, 0xED, 0xCB, 0xEF, 0x5C, 0x61, 0x1, 0x35, 0x8C, 0xB4, 0x7A, 0x7E, 0x4, 0xD2, 0x1, 0x2E, 0xA0, 0xA0, 0xFE, 0xD2, 0xA7, 0xA7, 0x0, 0x1, 0xFC, 0x60, 0x4, 0xD2, 0xFF, 0xCE, 0x6, 0x0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x13, 0x21, 0x17, 0x37, 0x33, 0x3, 0x23, 0x27, 0x7, 0xFC, 0x60, 0x8D, 0x1, 0x34, 0x61, 0x5C, 0xF0, 0xCC, 0xF6, 0x81, 0x7B, 0x4, 0xD2, 0x1, 0x2E, 0xA0, 0xA0, 0xFE, 0xD2, 0xA7, 0xA7, 0x0, 0x1, 0xFD, 0x44, 0xFD, 0xDA, 0xFE, 0x77, 0xFF, 0x87, 0x0, 0xD, 0x0, 0x0, 0x5, 0x22, 0x7, 0x15, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0xFE, 0x3A, 0x4B, 0x1C, 0x8F, 0x72, 0xE, 0x31, 0x55, 0x1B, 0x12, 0x1A, 0xFA, 0x37, 0xF5, 0x1, 0xA7, 0x3F, 0x45, 0x5, 0x89, 0xD, 0x0, 0x1, 0xFB, 0x61, 0x4, 0xCC, 0x0, 0x36, 0x5, 0xE7, 0x0, 0xE, 0x0, 0x0, 0x13, 0x21, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x21, 0x36, 0xFD, 0x83, 0x58, 0xBC, 0x95, 0xAF, 0xB7, 0x40, 0x4D, 0x4C, 0x3F, 0x3, 0x6, 0x5, 0x49, 0x7D, 0x9F, 0x7C, 0x37, 0x54, 0x54, 0x37, 0x0, 0x1, 0xFB, 0x3D, 0x4, 0xCC, 0x0, 0x10, 0x5, 0xE7, 0x0, 0xE, 0x0, 0x0, 0x1, 0x22, 0x27, 0x21, 0x35, 0x21, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0xFE, 0xCE, 0xBF, 0x56, 0xFD, 0x84, 0x3, 0x4, 0x40, 0x4D, 0x4C, 0x3F, 0xB7, 0xAE, 0x4, 0xCC, 0x7D, 0x9E, 0x37, 0x54, 0x54, 0x37, 0x7C, 0x9F, 0x0, 0x1, 0xFC, 0x9F, 0x4, 0xA1, 0x3, 0x63, 0x5, 0xEE, 0x0, 0x8, 0x0, 0x0, 0x13, 0x5, 0x15, 0x7, 0x25, 0x5, 0x27, 0x35, 0x25, 0x47, 0x3, 0x1C, 0xCD, 0xFD, 0x69, 0xFD, 0x6B, 0xCB, 0x3, 0x19, 0x5, 0xEE, 0xF1, 0x19, 0x43, 0xD2, 0xD2, 0x43, 0x1B, 0xEF, 0xFF, 0xFF, 0xFD, 0x2F, 0x3, 0xE6, 0xFE, 0xA7, 0x5, 0xD0, 0x0, 0xF, 0x1, 0x8C, 0xFE, 0xD0, 0x4, 0x22, 0xC0, 0x0, 0x0, 0x1, 0xFC, 0xD6, 0xFD, 0xD5, 0xFE, 0x9A, 0xFF, 0x90, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x37, 0x21, 0x13, 0x33, 0x7, 0x21, 0xFE, 0x47, 0x99, 0x31, 0xFE, 0xF7, 0x53, 0x99, 0x31, 0x1, 0x9, 0xFD, 0xD5, 0xA4, 0x1, 0x17, 0xA4, 0x0, 0x1, 0xFC, 0xC9, 0xFE, 0x14, 0xFF, 0xAE, 0xFF, 0xC0, 0x0, 0x13, 0x0, 0x0, 0x5, 0x33, 0x7, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x7, 0x27, 0xFD, 0x5A, 0x98, 0x60, 0x4C, 0x3B, 0x38, 0x57, 0x32, 0x46, 0x16, 0x78, 0x8, 0x57, 0x5C, 0x53, 0x84, 0x42, 0x47, 0x62, 0x68, 0x40, 0xF5, 0x2E, 0x40, 0x50, 0x27, 0x4E, 0x80, 0x4B, 0x3B, 0x30, 0x0, 0x1, 0xFC, 0x94, 0x4, 0x7A, 0xFE, 0xDB, 0x5, 0xDF, 0x0, 0x20, 0x0, 0x0, 0x1, 0x32, 0x35, 0x34, 0x26, 0x27, 0x35, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x17, 0x15, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x16, 0x16, 0xFE, 0x36, 0x3A, 0x23, 0x2E, 0x45, 0x77, 0x59, 0x51, 0x4C, 0x4C, 0x32, 0x2D, 0x3B, 0x48, 0x4C, 0x67, 0x5F, 0x4A, 0x4C, 0x4E, 0x13, 0x10, 0x22, 0x4, 0xE4, 0x42, 0x1F, 0x34, 0x2, 0x64, 0x5F, 0x58, 0x4A, 0x64, 0x50, 0x9D, 0x3B, 0x42, 0x6, 0x68, 0x62, 0x4E, 0x4A, 0x5C, 0x58, 0x3B, 0x36, 0x25, 0x0, 0x1, 0xFC, 0x9B, 0x4, 0x7E, 0xFE, 0xE0, 0x7, 0x7A, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x6, 0x7, 0x27, 0x3E, 0x2, 0x35, 0x34, 0x26, 0x22, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x17, 0x6, 0xFD, 0x95, 0x5F, 0x9B, 0xA3, 0x74, 0x83, 0xAB, 0x78, 0xB1, 0x57, 0x2D, 0x3E, 0x85, 0x5B, 0x57, 0x82, 0x4E, 0x7F, 0x39, 0x27, 0x19, 0x3A, 0x5, 0x91, 0x6B, 0x7D, 0x73, 0x8E, 0xA4, 0x92, 0x97, 0xB7, 0x61, 0x17, 0x70, 0x15, 0x44, 0x87, 0x77, 0x63, 0x61, 0x4A, 0x40, 0x84, 0x12, 0x56, 0x26, 0x0, 0x1, 0xFC, 0x3D, 0x4, 0xA8, 0xFF, 0x32, 0x5, 0x6C, 0x0, 0x14, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x33, 0x32, 0x35, 0x33, 0x14, 0x33, 0x32, 0x35, 0x33, 0x14, 0x6, 0xFE, 0x52, 0x61, 0x39, 0x32, 0x68, 0x65, 0x7C, 0x8A, 0x57, 0x51, 0x85, 0x5E, 0x51, 0x8F, 0x7D, 0x4, 0xA8, 0x34, 0x34, 0x6E, 0x56, 0x54, 0x54, 0x54, 0x54, 0x62, 0x62, 0x0, 0x3, 0xFC, 0x1F, 0x4, 0xA3, 0xFF, 0x60, 0x6, 0xE0, 0x0, 0x5, 0x0, 0xF, 0x0, 0x34, 0x0, 0x0, 0x1, 0x22, 0x7, 0x33, 0x35, 0x26, 0x1, 0x32, 0x37, 0x26, 0x27, 0x23, 0x22, 0x6, 0x15, 0x14, 0x5, 0x6, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x16, 0x33, 0x32, 0x37, 0xFE, 0x6D, 0x5E, 0xF, 0xD8, 0x5, 0xFE, 0x28, 0x59, 0x24, 0x9, 0x1, 0x54, 0x37, 0x35, 0x2, 0xA6, 0x1B, 0x6B, 0x52, 0xA3, 0x47, 0x16, 0x5D, 0x49, 0x54, 0x63, 0xEF, 0x5F, 0x50, 0x58, 0x8A, 0x7D, 0x68, 0x6D, 0x3B, 0x43, 0x62, 0x79, 0x7A, 0xFE, 0x9E, 0xB, 0x7A, 0x5A, 0x30, 0x6, 0x6B, 0x76, 0x9, 0x6D, 0xFE, 0xAB, 0x4A, 0x1F, 0x23, 0x30, 0x20, 0x3C, 0xB, 0x27, 0x41, 0x7A, 0x2E, 0x47, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x3B, 0x3A, 0x99, 0x77, 0x37, 0x80, 0x3E, 0x0, 0x3, 0xFC, 0x19, 0x4, 0xA3, 0xFF, 0x76, 0x6, 0xE0, 0x0, 0x7, 0x0, 0x25, 0x0, 0x2F, 0x0, 0x0, 0x1, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0x17, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x25, 0x32, 0x37, 0x26, 0x27, 0x23, 0x22, 0x6, 0x15, 0x14, 0xFE, 0x6F, 0x78, 0x79, 0x76, 0x77, 0x9D, 0x45, 0x16, 0x5D, 0x4A, 0x54, 0x63, 0xEE, 0x60, 0x50, 0x58, 0x8A, 0x7D, 0x68, 0x6E, 0x3B, 0x45, 0x66, 0x7A, 0x8E, 0x8E, 0xFE, 0xD, 0x5A, 0x24, 0x8, 0x2, 0x56, 0x36, 0x35, 0x5, 0x17, 0xAF, 0xA5, 0xB0, 0xA4, 0x74, 0x7D, 0x2F, 0x49, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x3C, 0x3B, 0x9C, 0x88, 0x7C, 0x9C, 0x73, 0x4C, 0x1E, 0x22, 0x30, 0x20, 0x3C, 0x0, 0x2, 0xFC, 0x13, 0x4, 0xA8, 0xFF, 0x1F, 0x6, 0xE0, 0x0, 0x9, 0x0, 0x25, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x37, 0x13, 0x33, 0x3, 0xFC, 0xEE, 0x25, 0x41, 0xC, 0x53, 0x36, 0x35, 0xD2, 0xA, 0x6, 0x38, 0x63, 0x53, 0x63, 0xEE, 0x5F, 0x50, 0x58, 0x8A, 0x7E, 0x68, 0x60, 0x7C, 0xB, 0x8A, 0x9A, 0xE5, 0x5, 0x16, 0x26, 0x16, 0x50, 0x30, 0x20, 0x3C, 0x64, 0x1B, 0x22, 0x47, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x63, 0x63, 0xC8, 0x25, 0x1, 0x65, 0xFD, 0xD6, 0x0, 0x1, 0xFC, 0xCC, 0x3, 0xC8, 0xFE, 0xB7, 0x6, 0xDF, 0x0, 0x23, 0x0, 0x0, 0x1, 0x14, 0x7, 0x27, 0x32, 0x35, 0x34, 0x27, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x33, 0x6, 0x6, 0x7, 0x7, 0x16, 0x16, 0xFE, 0x41, 0xB0, 0x4, 0x40, 0x48, 0x10, 0x66, 0x63, 0x7E, 0x84, 0x69, 0x7E, 0x2, 0x88, 0x2, 0x2E, 0x32, 0x72, 0x34, 0x3E, 0x59, 0x9, 0x88, 0x2, 0x6D, 0x52, 0x4, 0x21, 0x2E, 0x4, 0x3A, 0x70, 0x2, 0x4E, 0x28, 0x1E, 0x8, 0x44, 0x12, 0x99, 0x77, 0x71, 0xA4, 0x74, 0x5B, 0x22, 0x39, 0xB3, 0x43, 0x5E, 0x4D, 0x48, 0x6A, 0xC, 0x14, 0x7, 0x25, 0x0, 0x2, 0xFC, 0xAA, 0x4, 0xA8, 0xFE, 0xCA, 0x7, 0xC5, 0x0, 0x12, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x26, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x37, 0x35, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0xFD, 0xB8, 0x76, 0x98, 0x92, 0x71, 0x40, 0x39, 0x1E, 0x80, 0x44, 0x2F, 0x89, 0xCE, 0xA0, 0x71, 0x7F, 0x3, 0x25, 0x5E, 0x42, 0x3D, 0x41, 0x4, 0xA8, 0x92, 0x68, 0x74, 0x8E, 0x22, 0x59, 0x65, 0x16, 0x6F, 0x22, 0xF4, 0xB1, 0x2C, 0x84, 0xA6, 0x74, 0xAE, 0x40, 0x29, 0x51, 0x40, 0x3A, 0x4C, 0x0, 0x2, 0xFC, 0xAA, 0x4, 0xA8, 0xFE, 0xCA, 0x7, 0xC5, 0x0, 0x1A, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x26, 0x27, 0x7, 0x27, 0x37, 0x26, 0x27, 0x37, 0x16, 0x17, 0x37, 0x17, 0x7, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x37, 0x35, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0xFD, 0xB8, 0x76, 0x98, 0x92, 0x71, 0x40, 0x39, 0x18, 0x35, 0x70, 0x28, 0x5F, 0x2A, 0x32, 0x2F, 0x5C, 0x4D, 0x73, 0x27, 0x67, 0x7B, 0xA0, 0x71, 0x7F, 0x3, 0x25, 0x5E, 0x42, 0x3D, 0x41, 0x4, 0xA8, 0x92, 0x68, 0x74, 0x8E, 0x22, 0x47, 0x34, 0x3F, 0x38, 0x35, 0x1B, 0x10, 0x6F, 0x17, 0x3D, 0x40, 0x37, 0x3A, 0x86, 0xC2, 0x26, 0x84, 0xA6, 0x74, 0xAE, 0x40, 0x29, 0x51, 0x40, 0x3A, 0x4C, 0x0, 0x2, 0xFC, 0xB8, 0x3, 0xDA, 0xFE, 0xC0, 0x6, 0xE6, 0x0, 0x8, 0x0, 0x21, 0x0, 0x0, 0x1, 0x32, 0x37, 0x35, 0x26, 0x23, 0x22, 0x15, 0x14, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x6, 0xFD, 0xC1, 0x4E, 0x21, 0x21, 0x4D, 0x7B, 0x6B, 0x3A, 0x7C, 0x25, 0x41, 0x3A, 0x59, 0x80, 0x5, 0x36, 0x59, 0x65, 0x84, 0x83, 0x67, 0x62, 0x36, 0x8, 0x7E, 0xA0, 0x5, 0x1D, 0x38, 0xE7, 0x36, 0xB1, 0xA4, 0xFE, 0xBD, 0x2E, 0x2F, 0x5A, 0x45, 0x6A, 0x2F, 0x3C, 0xA0, 0x83, 0x7E, 0x9C, 0x45, 0x3A, 0xFD, 0xE8, 0x79, 0x70, 0x0, 0x1, 0xFC, 0xAA, 0x4, 0xA7, 0xFE, 0xC5, 0x7, 0x9, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x7, 0x15, 0x14, 0x33, 0x32, 0x37, 0x35, 0x23, 0x35, 0x21, 0x15, 0x6, 0x6, 0xFD, 0xBD, 0x77, 0x9C, 0x9A, 0xE8, 0x80, 0x9, 0x88, 0x11, 0x64, 0x7D, 0x1, 0x83, 0x54, 0x25, 0x76, 0x1, 0x5, 0x16, 0x88, 0x4, 0xA7, 0x87, 0x6C, 0x7C, 0x6D, 0x86, 0x66, 0x58, 0x4B, 0x90, 0x61, 0x8B, 0x1C, 0x50, 0x6B, 0xF0, 0x1C, 0x3E, 0x0, 0x1, 0xFC, 0xD2, 0x4, 0xB1, 0xFE, 0xDA, 0x7, 0xCD, 0x0, 0xC, 0x0, 0x0, 0x1, 0x27, 0x7, 0x15, 0x23, 0x11, 0x33, 0x11, 0x37, 0x37, 0x33, 0x7, 0x13, 0xFE, 0x36, 0x9A, 0x3A, 0x90, 0x90, 0x23, 0x92, 0x9F, 0xC1, 0xE5, 0x4, 0xB1, 0xE9, 0x3D, 0xAC, 0x3, 0x1C, 0xFE, 0x35, 0x2C, 0xAB, 0xDE, 0xFE, 0xB6, 0x0, 0x1, 0xFD, 0x71, 0x4, 0xB1, 0xFE, 0x0, 0x7, 0xC8, 0x0, 0x3, 0x0, 0x0, 0x1, 0x33, 0x11, 0x23, 0xFD, 0x71, 0x8F, 0x8F, 0x7, 0xC8, 0xFC, 0xE9, 0x0, 0x1, 0xFD, 0xB, 0x4, 0xB1, 0xFE, 0x9C, 0x7, 0x4, 0x0, 0x5, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x21, 0x15, 0xFD, 0xB, 0x8F, 0x1, 0x2, 0x4, 0xB1, 0x2, 0x53, 0xFE, 0x21, 0x74, 0x0, 0x1, 0xFC, 0x65, 0x4, 0xB1, 0xFF, 0x9, 0x7, 0x4, 0x0, 0xC, 0x0, 0x0, 0x1, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x23, 0x11, 0x3, 0xFD, 0x80, 0x8C, 0x8F, 0xB0, 0xA2, 0xA3, 0xAF, 0x8F, 0x8C, 0x4, 0xB1, 0x1, 0x6D, 0xFE, 0x93, 0x2, 0x53, 0xFE, 0x4C, 0x1, 0xB4, 0xFD, 0xAD, 0x1, 0x6C, 0xFE, 0x94, 0xFF, 0xFF, 0xFC, 0xC9, 0x4, 0xB1, 0xFE, 0xA6, 0x6, 0xE3, 0x0, 0xF, 0x2, 0x18, 0xFB, 0x7C, 0xB, 0x8A, 0xC0, 0x0, 0x0, 0x1, 0xFC, 0x97, 0x4, 0xB1, 0xFE, 0xC4, 0x7, 0x4, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0xFE, 0x35, 0xFE, 0xF1, 0x8F, 0x8F, 0x1, 0xF, 0x8F, 0x4, 0xB1, 0x1, 0x7B, 0xFE, 0x85, 0x2, 0x53, 0xFE, 0x85, 0x1, 0x7B, 0xFD, 0xAD, 0x0, 0x2, 0xFC, 0xBB, 0x4, 0xB1, 0xFE, 0xB5, 0x7, 0x4, 0x0, 0x6, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x15, 0x33, 0x32, 0x35, 0x34, 0x23, 0x3, 0x15, 0x23, 0x11, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x14, 0x17, 0x15, 0x23, 0x26, 0x26, 0x34, 0x26, 0x23, 0xFD, 0x4A, 0x6F, 0x56, 0x56, 0x6F, 0x8F, 0xFE, 0x6C, 0x79, 0x58, 0x5C, 0x13, 0x93, 0xB, 0x5, 0x32, 0x30, 0x6, 0x91, 0x99, 0x52, 0x47, 0xFE, 0xF3, 0xD3, 0x2, 0x53, 0x5E, 0x53, 0x5D, 0x2E, 0x20, 0xD6, 0x18, 0x9, 0xD, 0x3D, 0x6D, 0x1C, 0x0, 0x1, 0xFD, 0x1, 0x4, 0xB1, 0xFE, 0x91, 0x6, 0xDF, 0x0, 0x12, 0x0, 0x0, 0x1, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x17, 0xFE, 0x91, 0x96, 0x8D, 0x46, 0x44, 0x44, 0x2E, 0x43, 0x42, 0x5E, 0x64, 0x52, 0x72, 0x70, 0x7A, 0x4, 0xB1, 0xEE, 0x21, 0x3B, 0x2C, 0x44, 0x25, 0x56, 0x43, 0x5F, 0x53, 0x62, 0x47, 0xCD, 0x0, 0x1, 0xFC, 0xC3, 0x4, 0xA7, 0xFE, 0x9E, 0x6, 0xE3, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x34, 0x2E, 0x2, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0xFE, 0x11, 0x2D, 0xA0, 0x6F, 0x79, 0x62, 0x67, 0x84, 0x89, 0xA, 0x58, 0x4E, 0xCA, 0x72, 0x86, 0x62, 0x74, 0x7F, 0x85, 0x2, 0x46, 0x2A, 0x57, 0x5, 0x49, 0x18, 0x21, 0x26, 0x4D, 0x48, 0x4A, 0x5C, 0x65, 0x4A, 0x46, 0x39, 0x2D, 0x2E, 0x4B, 0x4D, 0x4F, 0x58, 0x74, 0x44, 0x2D, 0x22, 0x0, 0x1, 0xFD, 0x6B, 0x4, 0xB1, 0xFE, 0x81, 0x7, 0xD8, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0xFD, 0xFB, 0x90, 0x74, 0x56, 0x22, 0x2A, 0x8, 0x14, 0x1A, 0x50, 0x4, 0xB1, 0x2, 0x60, 0x63, 0x64, 0xB, 0x6F, 0x6, 0x53, 0x0, 0x1, 0xFC, 0xD8, 0x4, 0xB1, 0xFE, 0x98, 0x6, 0xD9, 0x0, 0x9, 0x0, 0x0, 0x1, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0xFC, 0xD8, 0x1, 0x9, 0xFE, 0xFD, 0x1, 0xAF, 0xFE, 0xFB, 0x1, 0x10, 0x4, 0xB1, 0x63, 0x1, 0x51, 0x74, 0x5E, 0xFE, 0xAB, 0x75, 0x0, 0x2, 0xFC, 0x9B, 0x4, 0xA7, 0xFE, 0xD6, 0x6, 0xE4, 0x0, 0x14, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x33, 0x37, 0x17, 0x6, 0x25, 0x32, 0x37, 0x35, 0x26, 0x23, 0x22, 0x15, 0x14, 0xFE, 0x88, 0x57, 0x1B, 0x35, 0x62, 0x6A, 0x7A, 0x79, 0x6C, 0x5C, 0x35, 0x9, 0x7E, 0x26, 0xD, 0xB, 0x19, 0xFE, 0xE1, 0x49, 0x22, 0x23, 0x47, 0x75, 0x4, 0xA7, 0x53, 0x53, 0x97, 0x80, 0x81, 0xA5, 0x4D, 0x43, 0xFE, 0x7D, 0x3E, 0x1, 0x64, 0xF, 0x74, 0x3C, 0xD9, 0x40, 0xBD, 0x98, 0x0, 0x2, 0xFC, 0xBA, 0x4, 0xA4, 0xFE, 0xB7, 0x7, 0xC8, 0x0, 0xE, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x27, 0x7, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x15, 0x16, 0xFD, 0xD8, 0x62, 0x37, 0x9, 0x7C, 0x8F, 0x35, 0x59, 0x6A, 0x76, 0x77, 0x88, 0x70, 0x37, 0x3A, 0x4E, 0x20, 0x20, 0x4, 0xA4, 0x43, 0x36, 0x3, 0x17, 0xFE, 0xE1, 0x36, 0x9A, 0x89, 0x79, 0x9F, 0x75, 0xAE, 0x4A, 0x5C, 0x47, 0xC5, 0x48, 0x0, 0x2, 0xFC, 0xAD, 0x3, 0xE8, 0xFE, 0xC4, 0x7, 0xA2, 0x0, 0x10, 0x0, 0x22, 0x0, 0x0, 0x1, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x11, 0x16, 0x17, 0x22, 0x27, 0x15, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0xFD, 0xB9, 0x7C, 0x74, 0x3A, 0x28, 0x66, 0x68, 0x2C, 0x45, 0x2F, 0x64, 0x55, 0x3E, 0x8F, 0xA0, 0x62, 0x68, 0x85, 0x60, 0x88, 0x85, 0x5, 0x16, 0x72, 0x7B, 0x1, 0x69, 0x1, 0x67, 0x5D, 0x36, 0x43, 0xFE, 0x88, 0x2B, 0x6F, 0x28, 0xE7, 0x2, 0xD0, 0x7A, 0x70, 0x66, 0x5C, 0x6D, 0x32, 0x2E, 0x8B, 0x6C, 0x75, 0x0, 0x2, 0xFC, 0xBF, 0x4, 0xA3, 0xFE, 0xB2, 0x6, 0xDF, 0x0, 0x13, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x21, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x27, 0x32, 0x37, 0x23, 0x15, 0x16, 0xFD, 0xB2, 0x79, 0x7A, 0x1, 0x62, 0xB, 0x7A, 0x5B, 0x2E, 0x48, 0x1B, 0x6B, 0x53, 0x80, 0x8E, 0x90, 0x70, 0x5E, 0xF, 0xD8, 0x5, 0x4, 0xA3, 0x99, 0x77, 0x37, 0x80, 0x3E, 0x4B, 0x27, 0x41, 0x99, 0x72, 0x15, 0x85, 0x97, 0x74, 0x76, 0x9, 0x6D, 0x0, 0x1, 0xFD, 0xD, 0x4, 0xB1, 0xFE, 0x81, 0x7, 0xD8, 0x0, 0x14, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0xFE, 0x58, 0x5D, 0x90, 0x5E, 0x5E, 0x74, 0x56, 0x22, 0x2A, 0x8, 0x14, 0x1A, 0x4F, 0x1, 0x5D, 0x6, 0x70, 0xFE, 0x41, 0x1, 0xBF, 0x6F, 0x32, 0x63, 0x64, 0xB, 0x6F, 0x6, 0x51, 0x34, 0x0, 0x1, 0xFC, 0xFB, 0x4, 0xB1, 0xFE, 0x72, 0x7, 0xC8, 0x0, 0x23, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x35, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x35, 0x33, 0x11, 0x32, 0x35, 0x17, 0x14, 0x6, 0x23, 0x15, 0x32, 0x35, 0x17, 0x14, 0x6, 0xFE, 0x0, 0x8F, 0x4, 0x2F, 0x43, 0x3C, 0x2F, 0xB, 0x4, 0x2F, 0x43, 0x3C, 0x2F, 0xB, 0x8F, 0x2F, 0x43, 0x3D, 0x35, 0x2F, 0x43, 0x3D, 0x5, 0xB4, 0xFE, 0xFD, 0x1, 0x30, 0x38, 0x12, 0x2F, 0x48, 0x1, 0x4A, 0x38, 0x12, 0x2F, 0x48, 0x1, 0xFD, 0xFE, 0xD6, 0x38, 0x14, 0x2F, 0x46, 0x49, 0x39, 0x14, 0x2F, 0x46, 0x0, 0x2, 0xFC, 0x75, 0x3, 0xED, 0xFE, 0xC1, 0x6, 0xDF, 0x0, 0x8, 0x0, 0x18, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0x17, 0x22, 0x27, 0x7, 0x27, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0xFD, 0xBA, 0x40, 0x37, 0x78, 0x77, 0x78, 0x30, 0x2A, 0x7A, 0x71, 0x7E, 0x40, 0x8E, 0x78, 0x7A, 0x8E, 0x8E, 0x5, 0x17, 0x59, 0x56, 0xA5, 0xB0, 0xA4, 0x74, 0xD, 0xC3, 0x41, 0xCA, 0x4C, 0x82, 0x7D, 0x9C, 0x9C, 0x88, 0x7C, 0x9C, 0xFF, 0xFF, 0xFC, 0xB9, 0x3, 0xBE, 0xFE, 0xB7, 0x6, 0xE2, 0x0, 0xF, 0x2, 0x1A, 0xFB, 0x77, 0xB, 0x86, 0xC0, 0x0, 0x0, 0x1, 0xFC, 0xE5, 0x3, 0xBC, 0xFE, 0x82, 0x7, 0xD8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x11, 0x14, 0x6, 0xFD, 0x31, 0x18, 0x34, 0x9, 0xF, 0x1E, 0x51, 0x74, 0x57, 0x21, 0x2A, 0x8, 0x14, 0x19, 0x51, 0x74, 0x3, 0xBC, 0xB, 0x6E, 0x5, 0x53, 0x2, 0x8E, 0x63, 0x64, 0xB, 0x6F, 0x6, 0x53, 0xFD, 0x72, 0x63, 0x64, 0x0, 0x1, 0xFC, 0x6E, 0x3, 0xED, 0xFE, 0xA6, 0x6, 0xD9, 0x0, 0x13, 0x0, 0x0, 0x1, 0x27, 0x7, 0x27, 0x37, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x23, 0x27, 0x6, 0xFD, 0x86, 0x30, 0x77, 0x71, 0x7D, 0x22, 0x90, 0x56, 0x4B, 0x1C, 0x90, 0x72, 0xF, 0x37, 0x4, 0xA7, 0x4, 0xBE, 0x41, 0xC7, 0x39, 0x61, 0x1, 0x4A, 0xFE, 0xB5, 0x73, 0x38, 0x1, 0x86, 0xFD, 0xD8, 0x3F, 0x49, 0x0, 0x1, 0xFC, 0x40, 0x4, 0xB1, 0xFF, 0x31, 0x6, 0xD9, 0x0, 0xF, 0x0, 0x0, 0x1, 0x3, 0x33, 0x13, 0x13, 0x33, 0x13, 0x35, 0x13, 0x33, 0x3, 0x23, 0x3, 0x27, 0x7, 0x3, 0xFC, 0xD3, 0x93, 0x8D, 0x4B, 0x65, 0x77, 0x67, 0x49, 0x8D, 0x93, 0x73, 0x66, 0xD, 0xC, 0x66, 0x4, 0xB1, 0x2, 0x28, 0xFE, 0x9E, 0x1, 0x62, 0xFE, 0x97, 0x3, 0x1, 0x66, 0xFD, 0xD8, 0x1, 0x4E, 0x2F, 0x2E, 0xFE, 0xB1, 0x0, 0x4, 0xFC, 0xD0, 0x4, 0xA8, 0xFE, 0xC1, 0x7, 0xAD, 0x0, 0x5, 0x0, 0xB, 0x0, 0x15, 0x0, 0x2F, 0x0, 0x0, 0x0, 0x33, 0x32, 0x14, 0x23, 0x22, 0x26, 0x33, 0x32, 0x14, 0x23, 0x22, 0x13, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x17, 0xFD, 0xF4, 0x52, 0x51, 0x51, 0x52, 0xFE, 0x52, 0x51, 0x51, 0x52, 0xB6, 0x25, 0x41, 0xC, 0x53, 0x37, 0x35, 0xD3, 0xA, 0x6, 0x38, 0x63, 0x54, 0x63, 0xEF, 0x5F, 0x50, 0x58, 0x8A, 0x7D, 0x68, 0x60, 0x7C, 0x14, 0x7, 0xAD, 0x98, 0x98, 0x98, 0xFE, 0x1, 0x26, 0x16, 0x50, 0x30, 0x20, 0x3C, 0x64, 0x1B, 0x22, 0x47, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x63, 0x63, 0xE3, 0x4C, 0x39, 0x0, 0x4, 0xFC, 0xB1, 0x4, 0xA3, 0xFE, 0xBF, 0x7, 0xAD, 0x0, 0x5, 0x0, 0xB, 0x0, 0x16, 0x0, 0x1F, 0x0, 0x0, 0x0, 0x33, 0x32, 0x14, 0x23, 0x22, 0x26, 0x33, 0x32, 0x14, 0x23, 0x22, 0x13, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0xFD, 0xE6, 0x51, 0x52, 0x52, 0x51, 0xFE, 0x51, 0x52, 0x52, 0x51, 0xD1, 0x7A, 0x8E, 0x8E, 0xF2, 0x8E, 0x8D, 0x79, 0x40, 0x37, 0x78, 0x77, 0x7, 0xAD, 0x98, 0x98, 0x98, 0xFD, 0x8E, 0x9C, 0x87, 0x7D, 0x9C, 0x9B, 0x89, 0x7C, 0x9C, 0x74, 0x59, 0x56, 0xA5, 0xB0, 0xA4, 0x0, 0x3, 0xFC, 0xC9, 0x4, 0xA7, 0xFE, 0xA6, 0x7, 0xAD, 0x0, 0x3, 0x0, 0x7, 0x0, 0x18, 0x0, 0x0, 0x0, 0x32, 0x14, 0x22, 0x26, 0x32, 0x14, 0x22, 0x1, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0xFD, 0xE4, 0xA2, 0xA2, 0xFE, 0xA2, 0xA2, 0x1, 0x4E, 0xF, 0x37, 0x68, 0x56, 0x67, 0x90, 0x56, 0x4B, 0x1C, 0x90, 0x7, 0xAD, 0x98, 0x98, 0x98, 0xFD, 0x9C, 0x3F, 0x49, 0x6C, 0x7C, 0x1, 0x4A, 0xFE, 0xB5, 0x73, 0x38, 0x1, 0x86, 0xFD, 0xD8, 0xFF, 0xFF, 0xFC, 0xDB, 0x4, 0x96, 0xFE, 0x93, 0x6, 0xB, 0x0, 0x7, 0x1, 0x85, 0xFC, 0x8B, 0x3, 0xF3, 0x0, 0x1, 0xFD, 0x23, 0xFE, 0x5A, 0x2, 0xBA, 0xFF, 0xA0, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x26, 0x24, 0x23, 0x22, 0x4, 0x7, 0x23, 0x36, 0x24, 0x20, 0x4, 0x2, 0xBA, 0xB6, 0x37, 0xFE, 0xEF, 0xCD, 0xCE, 0xFE, 0xF2, 0x3A, 0xB6, 0x4A, 0x1, 0x62, 0x2, 0x40, 0x1, 0x61, 0xFE, 0x5A, 0x37, 0x80, 0x80, 0x37, 0x7C, 0xCA, 0xCA, 0x0, 0x2, 0xFC, 0x55, 0xFE, 0x2, 0xFF, 0x32, 0xFF, 0xC4, 0x0, 0x13, 0x0, 0x28, 0x0, 0x0, 0x5, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x15, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFE, 0x9D, 0x95, 0x80, 0x60, 0x42, 0x4F, 0x48, 0x34, 0x5B, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x95, 0x80, 0x60, 0x42, 0x4F, 0x48, 0x34, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x3C, 0xA, 0x57, 0x73, 0x23, 0x23, 0x51, 0x8, 0x55, 0x77, 0x46, 0x2C, 0xBE, 0xA, 0x58, 0x72, 0x23, 0x23, 0x2D, 0x24, 0x7, 0x55, 0x77, 0x45, 0x2C, 0xFF, 0xFF, 0xFC, 0x46, 0x4, 0x9C, 0xFF, 0x2C, 0x7, 0x82, 0x0, 0x7, 0x1, 0x73, 0xFC, 0x9, 0x2, 0x4D, 0x0, 0x2, 0xFA, 0xEF, 0xFD, 0xDD, 0x0, 0xA2, 0xFF, 0xBC, 0x0, 0x6, 0x0, 0xF, 0x0, 0x0, 0x1, 0x35, 0x25, 0x25, 0x35, 0x5, 0x15, 0x5, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0xFA, 0xEF, 0x1, 0xBE, 0xFE, 0x42, 0x2, 0xE7, 0x1, 0x8, 0xFE, 0xDF, 0xB2, 0xA3, 0x1D, 0x1B, 0xA7, 0xB1, 0xFE, 0xE0, 0xFD, 0xE3, 0x84, 0x68, 0x6A, 0x83, 0xB8, 0x68, 0xBF, 0x1, 0xDA, 0xFE, 0xE2, 0x41, 0x41, 0x1, 0x1E, 0xFE, 0x26, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x40, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x6, 0x0, 0x7A, 0x30, 0x0, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x40, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x6, 0x0, 0x7A, 0xE, 0x0, 0xFF, 0xFF, 0x0, 0xA, 0xFE, 0x7F, 0x2, 0xE8, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x5E, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x90, 0xF9, 0xA4, 0xFF, 0xFF, 0x0, 0x6, 0xFE, 0x83, 0x2, 0xE4, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x76, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x8C, 0xF9, 0xA8, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xD2, 0x7, 0xBE, 0x0, 0x26, 0x0, 0x2E, 0x52, 0x0, 0x0, 0x7, 0x7, 0xB5, 0x3, 0xBA, 0x1, 0x59, 0xFF, 0xFF, 0x0, 0xE, 0x0, 0x0, 0x2, 0xD4, 0x7, 0x26, 0x0, 0x26, 0x0, 0x8E, 0x63, 0x0, 0x0, 0x7, 0x8, 0xBB, 0x3, 0xB7, 0xFF, 0xF9, 0x0, 0x2, 0x0, 0xD2, 0x0, 0x0, 0x2, 0xD7, 0x7, 0x86, 0x0, 0x9, 0x0, 0x16, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x13, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x1, 0x92, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x34, 0xF4, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAD, 0x7, 0xA, 0x35, 0x47, 0x47, 0x35, 0x34, 0x46, 0x46, 0xF9, 0x2A, 0x4, 0xA1, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAC, 0x0, 0x1, 0x0, 0x41, 0x0, 0x0, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x14, 0x0, 0x0, 0x1, 0x7, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x37, 0x2, 0x63, 0x9D, 0xF4, 0x91, 0x91, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAC, 0x1, 0x9D, 0x2, 0xD0, 0x37, 0xFD, 0x67, 0x2, 0x42, 0x33, 0xB7, 0x34, 0x1, 0xA7, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xAA, 0xFE, 0xAD, 0x38, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x12, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x33, 0x2, 0xA1, 0xDB, 0xF4, 0xA5, 0xA7, 0x10, 0xC7, 0xA3, 0x43, 0x46, 0x6, 0x2A, 0x34, 0x8C, 0x1B, 0xD5, 0x4, 0x31, 0xFB, 0xCF, 0x4, 0x31, 0xA5, 0x9B, 0xA4, 0x12, 0xBE, 0x8, 0x77, 0x0, 0x1, 0x0, 0x74, 0xFF, 0xEB, 0x4, 0xF3, 0x5, 0xC4, 0x0, 0x24, 0x0, 0x0, 0x5, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x23, 0x11, 0x31, 0x12, 0x12, 0x33, 0x32, 0x4, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x3, 0x2, 0x9F, 0x93, 0x45, 0x6E, 0x6F, 0x80, 0x8E, 0x9A, 0x93, 0x8E, 0x1, 0x1C, 0x31, 0x7F, 0x5E, 0x87, 0x66, 0xF2, 0x1, 0xEF, 0xEF, 0xAD, 0x1, 0xE, 0x78, 0xFE, 0xBB, 0xCF, 0xE3, 0xFE, 0xE3, 0x15, 0x36, 0xBE, 0x31, 0x84, 0x69, 0x91, 0x7B, 0xAB, 0x1, 0x53, 0x25, 0x37, 0xB4, 0x91, 0xFC, 0x44, 0x3, 0xBE, 0x1, 0x2, 0x1, 0x4, 0x85, 0x65, 0xFE, 0x77, 0x14, 0xDE, 0xC2, 0xD3, 0xDF, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0x39, 0x6, 0x21, 0x0, 0x6, 0x2, 0x3D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xEF, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x0, 0x31, 0x1, 0xC8, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x4, 0x50, 0x6, 0x0, 0x0, 0x13, 0x0, 0x0, 0x21, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x2, 0x87, 0xA6, 0xF3, 0xD3, 0xD3, 0xF3, 0xA6, 0xF3, 0xD6, 0xD6, 0x4, 0x9A, 0xFB, 0x66, 0x4, 0x9A, 0xAA, 0xBC, 0xBC, 0xBC, 0xBC, 0xAA, 0xFB, 0x66, 0x0, 0x1, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0x32, 0x5, 0xB7, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x37, 0x16, 0x12, 0x15, 0x14, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x25, 0x17, 0x6, 0x2, 0x11, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2, 0x54, 0x57, 0xAA, 0xDD, 0xF9, 0xE3, 0xDF, 0xFE, 0xEF, 0x1, 0x3B, 0x1, 0x69, 0x20, 0xE2, 0xE8, 0x90, 0x63, 0x6E, 0x7D, 0x8B, 0x3, 0x14, 0xB9, 0x34, 0xFE, 0xEB, 0xBC, 0xDD, 0xFF, 0x1, 0x44, 0x1, 0x6, 0x2C, 0x1, 0x4D, 0x1, 0xD0, 0x38, 0xC8, 0x2B, 0xFE, 0xD4, 0xFE, 0xF3, 0x79, 0xAD, 0xB1, 0x87, 0x7C, 0x92, 0xA7, 0x0, 0x1, 0x0, 0x4E, 0xFF, 0xEC, 0x4, 0x10, 0x6, 0x1F, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x37, 0x16, 0x12, 0x15, 0x14, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x25, 0x17, 0x6, 0x0, 0x11, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x2, 0x36, 0x57, 0xA8, 0xDB, 0xF7, 0xE1, 0xDC, 0xFE, 0xF2, 0x1, 0x4A, 0x1, 0x34, 0x52, 0xCF, 0xFE, 0xF3, 0x90, 0x63, 0x6E, 0x7D, 0x8B, 0x3, 0x14, 0xB9, 0x34, 0xFE, 0xEB, 0xBC, 0xDD, 0xFF, 0x1, 0x43, 0x1, 0x6, 0x2D, 0x1, 0x4D, 0x1, 0xED, 0x83, 0xB5, 0x62, 0xFE, 0x86, 0xFE, 0xD2, 0x4E, 0xAF, 0xB3, 0x8A, 0x7D, 0x92, 0xA7, 0x0, 0x2, 0x0, 0x1C, 0xFF, 0xEB, 0x5, 0x46, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x22, 0x26, 0x10, 0x36, 0x33, 0x32, 0x17, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x6, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x8D, 0x99, 0xD8, 0xD8, 0x99, 0x44, 0x3E, 0xFE, 0x72, 0x1, 0x11, 0x1, 0x5B, 0x1, 0x49, 0x1, 0x10, 0xFD, 0xA4, 0x27, 0xBE, 0x77, 0x3E, 0x56, 0x56, 0x3E, 0x3F, 0x58, 0x58, 0x15, 0xD8, 0x1, 0x32, 0xD9, 0x17, 0x2, 0xF9, 0xFD, 0x34, 0x2, 0xCC, 0xFB, 0x30, 0x6B, 0x8A, 0xD6, 0x4F, 0x4D, 0x4E, 0x51, 0x51, 0x4E, 0x4D, 0x4F, 0x0, 0x2, 0x0, 0x1B, 0xFE, 0x4B, 0x4, 0x99, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x1, 0x21, 0x13, 0x17, 0x13, 0x21, 0x1, 0x6, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x89, 0x97, 0xD7, 0xD8, 0x99, 0x2E, 0x2D, 0xFE, 0xE8, 0x1, 0xA, 0xCB, 0xC, 0xE0, 0x1, 0x9, 0xFE, 0x61, 0x33, 0xB0, 0x8A, 0x3E, 0x56, 0x56, 0x3E, 0x40, 0x57, 0x57, 0xFE, 0x4B, 0xD8, 0x99, 0x98, 0xDA, 0xC, 0x3, 0x18, 0xFD, 0x63, 0x36, 0x2, 0xD3, 0xFB, 0x3B, 0x96, 0x94, 0xD6, 0x4F, 0x4D, 0x4E, 0x50, 0x50, 0x4E, 0x4D, 0x4F, 0x0, 0x1, 0x0, 0x5B, 0x4, 0x6F, 0x1, 0x5B, 0x5, 0xD8, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x6, 0x7, 0x27, 0x36, 0x35, 0x35, 0x1, 0x5B, 0x2, 0xAE, 0x50, 0x4F, 0x5, 0xD8, 0x5D, 0xB3, 0x59, 0x49, 0x4B, 0x82, 0x53, 0x0, 0x1, 0x0, 0x73, 0xFD, 0xF2, 0x1, 0x75, 0xFF, 0x9C, 0x0, 0xB, 0x0, 0x0, 0x17, 0x33, 0x15, 0x14, 0x33, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x73, 0xA4, 0x33, 0x2B, 0x24, 0x2E, 0x4C, 0x64, 0x64, 0xEC, 0x48, 0x4, 0x6E, 0xC, 0x57, 0x63, 0x0, 0x1, 0x0, 0x5B, 0x4, 0x6F, 0x1, 0x5B, 0x5, 0xD8, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x6, 0x7, 0x27, 0x36, 0x35, 0x35, 0x1, 0x5B, 0x2, 0xAE, 0x50, 0x4F, 0x5, 0xD8, 0x5D, 0xB3, 0x59, 0x49, 0x4B, 0x82, 0x53, 0x0, 0x1, 0x0, 0x4B, 0x4, 0xDB, 0x3, 0x29, 0x5, 0xF5, 0x0, 0x14, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x2, 0x94, 0x95, 0x81, 0x5F, 0x40, 0x51, 0x47, 0x36, 0x26, 0x34, 0x96, 0x7F, 0x60, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x5, 0xF5, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0x0, 0x6F, 0x4, 0xC7, 0x3, 0x48, 0x6, 0xC7, 0x0, 0x13, 0x0, 0x1F, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x8B, 0x67, 0x5D, 0x49, 0x50, 0x52, 0x41, 0x1F, 0x2A, 0x68, 0x5C, 0x49, 0x42, 0x63, 0x3F, 0x1E, 0x2C, 0xFD, 0xE4, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x1, 0xD5, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x6, 0xC7, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x47, 0x71, 0x47, 0x32, 0xFE, 0x9C, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0x2F, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x2, 0x0, 0x5B, 0x4, 0x6F, 0x2, 0xC9, 0x5, 0xD8, 0x0, 0x7, 0x0, 0xD, 0x0, 0x0, 0x1, 0x15, 0x6, 0x7, 0x27, 0x36, 0x35, 0x35, 0x1, 0x15, 0x23, 0x3, 0x35, 0x33, 0x1, 0x5B, 0x2, 0xAE, 0x50, 0x4F, 0x2, 0x1F, 0x5D, 0xE6, 0xD3, 0x5, 0xD8, 0x5D, 0xB3, 0x59, 0x49, 0x4B, 0x82, 0x53, 0xFE, 0xC0, 0x14, 0x1, 0x3F, 0x15, 0x0, 0x2, 0x0, 0x5B, 0x4, 0x6F, 0x2, 0xB5, 0x5, 0xD8, 0x0, 0x7, 0x0, 0xD, 0x0, 0x0, 0x1, 0x15, 0x6, 0x7, 0x27, 0x36, 0x35, 0x35, 0x13, 0x35, 0x13, 0x33, 0x15, 0x3, 0x1, 0x5B, 0x2, 0xAE, 0x50, 0x4F, 0xC9, 0x6F, 0xD3, 0xE6, 0x5, 0xD8, 0x5D, 0xB3, 0x59, 0x49, 0x4B, 0x82, 0x53, 0xFE, 0xAC, 0x14, 0x1, 0x40, 0x15, 0xFE, 0xC1, 0x0, 0x2, 0x0, 0x6F, 0x4, 0x6F, 0x2, 0xA8, 0x6, 0x9F, 0x0, 0x13, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x7, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x35, 0x35, 0x2, 0x41, 0x67, 0x5C, 0x49, 0x50, 0x53, 0x41, 0x1F, 0x2A, 0x67, 0x5C, 0x49, 0x42, 0x62, 0x3F, 0x1E, 0x2C, 0x57, 0x45, 0x3E, 0x55, 0x3F, 0x6, 0x9F, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x48, 0x70, 0x46, 0x31, 0xE1, 0x4B, 0x40, 0x7A, 0x25, 0x3C, 0x3F, 0x65, 0x4A, 0x0, 0x2, 0x0, 0x68, 0x4, 0x6F, 0x2, 0xA4, 0x5, 0xD8, 0x0, 0x8, 0x0, 0xE, 0x0, 0x0, 0x13, 0x33, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x5, 0x15, 0x23, 0x3, 0x35, 0x33, 0x68, 0xB0, 0x50, 0x51, 0x51, 0x5E, 0x2, 0x3C, 0x5C, 0xE6, 0xD3, 0x5, 0xD8, 0x53, 0x83, 0x4A, 0x49, 0x2A, 0x8D, 0x59, 0xE7, 0x14, 0x1, 0x3F, 0x15, 0x0, 0x2, 0x0, 0x68, 0x4, 0x6F, 0x2, 0xD6, 0x5, 0xD8, 0x0, 0x8, 0x0, 0xE, 0x0, 0x0, 0x13, 0x33, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x5, 0x35, 0x13, 0x33, 0x15, 0x3, 0x68, 0xB0, 0x50, 0x51, 0x51, 0x5E, 0x1, 0x2C, 0x6F, 0xD3, 0xE6, 0x5, 0xD8, 0x53, 0x83, 0x4A, 0x49, 0x2A, 0x8D, 0x59, 0xFB, 0x14, 0x1, 0x40, 0x15, 0xFE, 0xC1, 0x0, 0x2, 0x0, 0x6F, 0x4, 0x6F, 0x2, 0xA8, 0x6, 0x9F, 0x0, 0x13, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x7, 0x33, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x2, 0x41, 0x67, 0x5C, 0x49, 0x50, 0x53, 0x41, 0x1F, 0x2A, 0x67, 0x5C, 0x49, 0x42, 0x62, 0x3F, 0x1E, 0x2C, 0xF6, 0x99, 0x3F, 0x56, 0x3D, 0x45, 0x6, 0x9F, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x48, 0x70, 0x46, 0x31, 0xE1, 0x4A, 0x65, 0x3F, 0x3C, 0x25, 0x7A, 0x40, 0x0, 0x3, 0x0, 0x6F, 0x4, 0xC7, 0x3, 0x48, 0x6, 0x65, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x17, 0x23, 0x27, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0xBB, 0x72, 0x8D, 0xA8, 0x89, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x1, 0xD5, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x6, 0x65, 0xD3, 0xD3, 0xFE, 0xD9, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0x2F, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x3, 0x0, 0x6F, 0x4, 0xC7, 0x3, 0x48, 0x6, 0x65, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x5, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x86, 0x71, 0xC3, 0xA7, 0xFE, 0x5C, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x1, 0xD5, 0x44, 0x3D, 0x3E, 0x45, 0x45, 0x3E, 0x3D, 0x44, 0x5, 0x92, 0xD3, 0xD3, 0x54, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0x2F, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x1, 0x0, 0x66, 0x4, 0x6F, 0x1, 0xA9, 0x5, 0xC3, 0x0, 0x5, 0x0, 0x0, 0x1, 0x23, 0x3, 0x35, 0x33, 0x13, 0x1, 0xA9, 0x5D, 0xE6, 0xD3, 0x70, 0x4, 0x6F, 0x1, 0x3F, 0x15, 0xFE, 0xC1, 0x0, 0x1, 0x0, 0x64, 0x4, 0x6F, 0x1, 0xA7, 0x5, 0xC3, 0x0, 0x5, 0x0, 0x0, 0x13, 0x35, 0x13, 0x33, 0x15, 0x3, 0x64, 0x70, 0xD3, 0xE6, 0x4, 0x6F, 0x15, 0x1, 0x3F, 0x15, 0xFE, 0xC1, 0x0, 0x1, 0x0, 0x69, 0x4, 0x6F, 0x1, 0x69, 0x5, 0xD8, 0x0, 0x8, 0x0, 0x0, 0x13, 0x33, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x69, 0xB0, 0x50, 0x51, 0x51, 0x5E, 0x5, 0xD8, 0x53, 0x83, 0x4A, 0x49, 0x2A, 0x8D, 0x59, 0x0, 0x1, 0xFD, 0x68, 0xFF, 0x38, 0xFE, 0x9, 0x4, 0xD8, 0x0, 0x3, 0x0, 0x0, 0x5, 0x11, 0x33, 0x11, 0xFD, 0x68, 0xA1, 0xC8, 0x5, 0xA0, 0xFA, 0x60, 0x0, 0x1, 0xFC, 0x94, 0xFF, 0x38, 0xFE, 0xDE, 0x5, 0xF1, 0x0, 0xE, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x37, 0x17, 0x7, 0x17, 0xFE, 0x67, 0x61, 0xA0, 0x5B, 0x77, 0xB0, 0xB0, 0x77, 0xAE, 0xAE, 0x77, 0xB0, 0xB0, 0x3, 0xA0, 0x63, 0xFB, 0x35, 0x4, 0xC5, 0x5D, 0x74, 0xB4, 0xB4, 0x75, 0xB2, 0xB2, 0x75, 0xB4, 0xB4, 0x0, 0x1, 0xFC, 0xAD, 0xFF, 0x38, 0xFF, 0x46, 0x5, 0xD1, 0x0, 0xA, 0x0, 0x0, 0x1, 0x37, 0x23, 0x11, 0x23, 0x11, 0x21, 0x27, 0x33, 0x17, 0x7, 0xFD, 0x98, 0xA8, 0xF2, 0xA1, 0x1, 0x9A, 0xA8, 0xC6, 0xE1, 0xE7, 0x3, 0xE9, 0xA1, 0xFA, 0xAE, 0x5, 0xEB, 0xAE, 0xFB, 0xED, 0x0, 0x1, 0xFC, 0x5E, 0xFF, 0x38, 0xFE, 0xF7, 0x5, 0xD1, 0x0, 0xA, 0x0, 0x0, 0x5, 0x11, 0x23, 0x17, 0x23, 0x27, 0x37, 0x33, 0x7, 0x21, 0x11, 0xFE, 0x57, 0xF3, 0xA8, 0xC6, 0xE8, 0xE1, 0xC7, 0xA9, 0x1, 0x9A, 0xC8, 0x5, 0x52, 0xA1, 0xED, 0xFB, 0xAE, 0xFA, 0x15, 0xFF, 0xFF, 0x0, 0x47, 0x2, 0xA, 0x2, 0x54, 0x2, 0xCD, 0x0, 0x6, 0x0, 0x12, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x47, 0x2, 0xA, 0x2, 0x54, 0x2, 0xCD, 0x0, 0x6, 0x0, 0x12, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9F, 0x2, 0x6E, 0x3, 0xEF, 0x3, 0x32, 0x0, 0x6, 0x5, 0x3A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9E, 0x2, 0x6E, 0x4, 0x97, 0x3, 0x32, 0x0, 0x46, 0x5, 0x3A, 0xDF, 0x0, 0x4C, 0xCD, 0x40, 0x0, 0xFF, 0xFF, 0x0, 0x82, 0x2, 0x6E, 0x5, 0xCF, 0x3, 0x32, 0x0, 0x46, 0x5, 0x3A, 0x84, 0x0, 0x66, 0x66, 0x40, 0x0, 0xFF, 0xFF, 0x0, 0xAB, 0xFE, 0xF2, 0x2, 0x8D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x61, 0xFD, 0x0, 0x0, 0x7, 0x0, 0x61, 0x1, 0x37, 0x0, 0x0, 0x0, 0x2, 0x0, 0x4, 0xFE, 0x60, 0x3, 0x9A, 0x0, 0x0, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x21, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x3, 0x9A, 0xFC, 0x6A, 0x3, 0x96, 0xFC, 0x6A, 0x9D, 0x9D, 0xFE, 0xFC, 0x9C, 0x9C, 0x0, 0x1, 0x0, 0x64, 0x4, 0x21, 0x1, 0x96, 0x6, 0x1B, 0x0, 0x8, 0x0, 0x0, 0x13, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x7, 0x15, 0x64, 0x65, 0x51, 0x7C, 0x59, 0x4, 0x4, 0x21, 0x88, 0x5F, 0xD0, 0x43, 0x4D, 0x87, 0x8B, 0x9B, 0x0, 0x1, 0x0, 0x34, 0x4, 0x0, 0x1, 0x66, 0x6, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x1, 0x66, 0x65, 0x51, 0x7C, 0x5A, 0x3, 0x6, 0x0, 0x8E, 0x5E, 0xD0, 0x44, 0x4D, 0x89, 0x8D, 0x9D, 0x0, 0x1, 0x0, 0x32, 0xFE, 0xD6, 0x1, 0x65, 0x0, 0xCB, 0x0, 0x8, 0x0, 0x0, 0x25, 0x7, 0x6, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x1, 0x65, 0x1, 0x1, 0x63, 0x52, 0x7C, 0x55, 0x3, 0xCB, 0x86, 0x5F, 0xCD, 0x43, 0x4D, 0x81, 0x93, 0x94, 0x0, 0x1, 0x0, 0x4B, 0x4, 0x0, 0x1, 0x7D, 0x6, 0x0, 0x0, 0x8, 0x0, 0x0, 0x13, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x4B, 0xD5, 0x3, 0x5A, 0x7C, 0x52, 0x64, 0x6, 0x0, 0x9D, 0x91, 0x85, 0x4D, 0x44, 0xD0, 0x5E, 0xFF, 0xFF, 0x0, 0x6D, 0x4, 0x21, 0x2, 0xEF, 0x6, 0x1B, 0x0, 0x26, 0x4, 0x62, 0x9, 0x0, 0x0, 0x7, 0x4, 0x62, 0x1, 0x59, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x41, 0x4, 0x0, 0x2, 0xC1, 0x6, 0x0, 0x0, 0x26, 0x4, 0x63, 0xD, 0x0, 0x0, 0x7, 0x4, 0x63, 0x1, 0x5B, 0x0, 0x0, 0x0, 0x2, 0x0, 0x32, 0xFE, 0xC2, 0x2, 0xAB, 0x0, 0xFF, 0x0, 0x8, 0x0, 0x11, 0x0, 0x0, 0x25, 0x7, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x23, 0x7, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x2, 0xAB, 0x1, 0x64, 0x52, 0x7F, 0x59, 0x3, 0x6C, 0x1, 0x61, 0x52, 0x7F, 0x55, 0x3, 0xFF, 0xB7, 0x64, 0xDC, 0x46, 0x4D, 0x8D, 0x9B, 0xC8, 0xB7, 0x64, 0xDC, 0x46, 0x4D, 0x87, 0xA0, 0xC9, 0x0, 0x2, 0x0, 0x4F, 0x3, 0xD6, 0x2, 0xE0, 0x6, 0x18, 0x0, 0x8, 0x0, 0x11, 0x0, 0x0, 0x1, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x25, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x1, 0xAA, 0xDC, 0x2, 0x58, 0x80, 0x51, 0x65, 0xFE, 0xA5, 0xDC, 0x3, 0x57, 0x7F, 0x52, 0x65, 0x6, 0x18, 0xC8, 0xA2, 0x8A, 0x4E, 0x47, 0xDC, 0x64, 0xBB, 0xCC, 0x9C, 0x8C, 0x4E, 0x47, 0xDC, 0x64, 0x0, 0x1, 0x0, 0x41, 0x0, 0x0, 0x4, 0x1E, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x4, 0x1E, 0xFE, 0x88, 0xF3, 0xFE, 0x8E, 0x1, 0x72, 0xF3, 0x1, 0x78, 0x3, 0x73, 0xFC, 0x8D, 0x3, 0x73, 0xC7, 0x1, 0x76, 0xFE, 0x8A, 0x0, 0x1, 0x0, 0x5D, 0xFE, 0x60, 0x4, 0x3A, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x4, 0x3A, 0xFE, 0x88, 0xF3, 0xFE, 0x8E, 0x1, 0x72, 0xFE, 0x8E, 0x1, 0x72, 0xF3, 0x1, 0x78, 0xFE, 0x88, 0x1, 0x78, 0xFE, 0x60, 0x1, 0xA0, 0xC3, 0x2, 0xB3, 0xC4, 0x1, 0x76, 0xFE, 0x8A, 0xC4, 0xFD, 0x4D, 0x0, 0x1, 0x0, 0x88, 0x2, 0x7, 0x2, 0x45, 0x3, 0xDB, 0x0, 0xC, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x22, 0x26, 0x35, 0x88, 0x78, 0x65, 0x68, 0x78, 0x77, 0xCE, 0x78, 0x3, 0x3, 0x5F, 0x79, 0x79, 0x5F, 0x27, 0x5E, 0x77, 0x77, 0x5E, 0x0, 0x1, 0x0, 0x98, 0x0, 0x87, 0x4, 0x9, 0x4, 0x90, 0x0, 0x2, 0x0, 0x0, 0x13, 0x1, 0x1, 0x98, 0x3, 0x71, 0xFC, 0x8F, 0x4, 0x90, 0xFD, 0xFB, 0xFD, 0xFC, 0xFF, 0xFF, 0x0, 0x85, 0xFF, 0xF4, 0x1, 0xA0, 0x1, 0x1, 0x0, 0x6, 0x0, 0x13, 0xFD, 0x0, 0xFF, 0xFF, 0x0, 0x8C, 0xFF, 0xF4, 0x3, 0x70, 0x1, 0x1, 0x0, 0x26, 0x0, 0x13, 0x4, 0x0, 0x0, 0x7, 0x0, 0x13, 0x1, 0xCD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8C, 0xFF, 0xF4, 0x5, 0x29, 0x1, 0x1, 0x0, 0x22, 0x0, 0x13, 0x4, 0x0, 0x0, 0x23, 0x0, 0x13, 0x1, 0xCD, 0x0, 0x0, 0x0, 0x3, 0x0, 0x13, 0x3, 0x86, 0x0, 0x0, 0x0, 0x1, 0x0, 0x5B, 0x1, 0xEC, 0x1, 0x6E, 0x2, 0xED, 0x0, 0x9, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5B, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2, 0x6C, 0x38, 0x49, 0x49, 0x38, 0x37, 0x49, 0x49, 0x0, 0x6, 0x0, 0x4B, 0xFF, 0xEB, 0x7, 0x60, 0x5, 0xC5, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x35, 0x0, 0x42, 0x0, 0x4F, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x25, 0x1, 0x27, 0x1, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4B, 0xA1, 0x8C, 0x92, 0xA3, 0xA3, 0x90, 0x8E, 0xA1, 0xA2, 0x45, 0x48, 0x46, 0x44, 0x45, 0x47, 0x46, 0x45, 0x3, 0x9C, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0x2, 0x21, 0x96, 0x50, 0x4E, 0x93, 0x91, 0xA5, 0xA4, 0x90, 0x94, 0x4F, 0x50, 0x94, 0x91, 0xA4, 0xA4, 0xFE, 0xE4, 0x49, 0x44, 0x89, 0x44, 0x47, 0x46, 0x45, 0xFE, 0x39, 0x48, 0x45, 0x89, 0x44, 0x47, 0x46, 0x45, 0x4, 0x98, 0x7C, 0xB1, 0xB1, 0x7C, 0x4D, 0x7A, 0xB1, 0xB1, 0x7A, 0x3B, 0x5E, 0x5D, 0x3C, 0x4D, 0x3D, 0x5E, 0x5E, 0x3D, 0x47, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFA, 0xC3, 0x6F, 0x6F, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0x6F, 0x6F, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0x1, 0x2C, 0x3C, 0x5E, 0xAA, 0x3E, 0x3C, 0x5E, 0x5E, 0x3C, 0x4E, 0x3C, 0x5E, 0xAA, 0x3E, 0x3C, 0x5E, 0x5E, 0x3C, 0x0, 0x7, 0x0, 0x4B, 0xFF, 0xEB, 0x9, 0x15, 0x5, 0xC5, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x3C, 0x0, 0x49, 0x0, 0x56, 0x0, 0x63, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x25, 0x1, 0x27, 0x1, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x20, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4B, 0xA1, 0x8C, 0x92, 0xA3, 0xA3, 0x90, 0x8E, 0xA1, 0xA2, 0x45, 0x48, 0x46, 0x44, 0x45, 0x47, 0x46, 0x45, 0x3, 0x8B, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0x3, 0xE7, 0x92, 0x50, 0x4D, 0x97, 0x95, 0x50, 0x4F, 0x93, 0x91, 0xA5, 0xA5, 0x8F, 0x95, 0x4F, 0x50, 0x93, 0x99, 0x4D, 0x4F, 0x1, 0x22, 0xA4, 0xA4, 0xFE, 0xE4, 0x49, 0x44, 0x89, 0x44, 0x47, 0x46, 0x45, 0xFE, 0x3B, 0x49, 0x43, 0x8A, 0x45, 0x47, 0x46, 0x44, 0xFE, 0x39, 0x48, 0x44, 0x8A, 0x45, 0x47, 0x46, 0x44, 0x4, 0x98, 0x7C, 0xB1, 0xB1, 0x7C, 0x4D, 0x7A, 0xB1, 0xB1, 0x7A, 0x3B, 0x5E, 0x5D, 0x3C, 0x4D, 0x3D, 0x5E, 0x5E, 0x3D, 0x47, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFA, 0xC3, 0x6A, 0x6A, 0x6F, 0x6F, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0x6F, 0x6F, 0x6A, 0x6A, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0x1, 0x2C, 0x3C, 0x5E, 0xAA, 0x3E, 0x3C, 0x5E, 0x5E, 0x3C, 0x4E, 0x3C, 0x5E, 0xAC, 0x3C, 0x3C, 0x5E, 0x5E, 0x3C, 0x4E, 0x3C, 0x5E, 0xA9, 0x3F, 0x3C, 0x5E, 0x5E, 0x3C, 0x0, 0x3, 0x0, 0x4C, 0x4, 0xBA, 0x4, 0xA4, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x33, 0x3, 0x21, 0x13, 0x33, 0x3, 0x21, 0x13, 0x33, 0x3, 0x3, 0x1B, 0x9A, 0xEF, 0xDE, 0xFD, 0xEE, 0x99, 0xF0, 0xDE, 0xFD, 0xED, 0x9A, 0xEF, 0xDE, 0x4, 0xBA, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x0, 0x1, 0x0, 0x4C, 0x4, 0xBA, 0x1, 0xD5, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x1, 0x3C, 0x99, 0xAB, 0xDE, 0x6, 0x1A, 0xFE, 0xA0, 0x1, 0x60, 0x0, 0x2, 0x0, 0x50, 0x4, 0xBA, 0x3, 0x41, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x21, 0x13, 0x23, 0x3, 0x1, 0x40, 0x99, 0xAB, 0xDE, 0x2, 0x57, 0x9A, 0xAB, 0xDE, 0x6, 0x1A, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0x0, 0x3, 0x0, 0x50, 0x4, 0xBA, 0x4, 0xA8, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x23, 0x3, 0x21, 0x13, 0x23, 0x3, 0x21, 0x13, 0x23, 0x3, 0x1, 0x40, 0x99, 0xAB, 0xDE, 0x2, 0x57, 0x9A, 0xAB, 0xDE, 0x2, 0x57, 0x99, 0xAB, 0xDE, 0x6, 0x1A, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0x0, 0x1, 0x0, 0x30, 0xFD, 0xDB, 0x3, 0x49, 0xFF, 0x9D, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x23, 0x1, 0x33, 0x1, 0x23, 0x3, 0x27, 0x1, 0xAB, 0xB5, 0xC6, 0x1, 0x39, 0xA4, 0x1, 0x3C, 0xC6, 0xBB, 0xE, 0xFE, 0xF5, 0xFE, 0xE6, 0x1, 0xC2, 0xFE, 0x3E, 0x1, 0x1A, 0x24, 0x0, 0x1, 0x0, 0x6C, 0x0, 0x8B, 0x2, 0x34, 0x3, 0xAA, 0x0, 0x6, 0x0, 0x0, 0x25, 0x23, 0x1, 0x35, 0x1, 0x33, 0x3, 0x2, 0x34, 0xA8, 0xFE, 0xE0, 0x1, 0x20, 0xA8, 0xF7, 0x8B, 0x1, 0x86, 0x13, 0x1, 0x86, 0xFE, 0x71, 0x0, 0x1, 0x0, 0x55, 0x0, 0x8A, 0x2, 0x1C, 0x3, 0xA9, 0x0, 0x6, 0x0, 0x0, 0x37, 0x23, 0x13, 0x3, 0x33, 0x1, 0x15, 0xFC, 0xA7, 0xF7, 0xF7, 0xA7, 0x1, 0x20, 0x8A, 0x1, 0x90, 0x1, 0x8F, 0xFE, 0x7A, 0x13, 0x0, 0x5, 0x0, 0x4A, 0x0, 0x6B, 0x4, 0xE1, 0x4, 0xF1, 0x0, 0x9, 0x0, 0x15, 0x0, 0x21, 0x0, 0x2B, 0x0, 0x35, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x9, 0x2, 0x27, 0x1, 0x1, 0x37, 0x1, 0x1, 0x17, 0x1, 0x1, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0xC, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x1, 0xC9, 0xFE, 0xC5, 0xFE, 0xC4, 0x94, 0x1, 0x3C, 0xFE, 0xC4, 0x94, 0x1, 0x3C, 0x1, 0x3B, 0x94, 0xFE, 0xC4, 0x1, 0x3C, 0x9C, 0x49, 0x40, 0x41, 0x4A, 0x4A, 0x41, 0x40, 0x49, 0xFC, 0x7D, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x1, 0xC2, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x4, 0x75, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0xFC, 0x96, 0x1, 0x42, 0xFE, 0xBE, 0x95, 0x1, 0x43, 0x1, 0x42, 0x95, 0xFE, 0xBE, 0x1, 0x42, 0x95, 0xFE, 0xBE, 0xFE, 0xBD, 0x1, 0x46, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x34, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xFE, 0x68, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x3, 0x0, 0x2C, 0xFF, 0xF4, 0x3, 0x88, 0x6, 0x78, 0x0, 0x5, 0x0, 0x19, 0x0, 0x23, 0x0, 0x0, 0x1, 0x34, 0x27, 0x3, 0x36, 0x36, 0x1, 0x3, 0x6, 0x15, 0x23, 0x36, 0x36, 0x37, 0x27, 0x21, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x6, 0x7, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0x95, 0x80, 0x8, 0x3A, 0x4E, 0xFE, 0x9F, 0xE, 0x7, 0xF3, 0x2, 0x86, 0x6C, 0x4, 0x1, 0x1, 0x4, 0xAF, 0xC0, 0x5B, 0xA1, 0x35, 0x25, 0x1, 0xF4, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x4, 0x39, 0x9E, 0x1D, 0xFE, 0x55, 0x38, 0x6A, 0xFD, 0xC2, 0x2, 0xCE, 0x19, 0x1D, 0x87, 0xB1, 0x28, 0xD3, 0xB6, 0xF, 0xC8, 0xA9, 0x65, 0xA4, 0x9A, 0x33, 0x76, 0x49, 0xFE, 0xC9, 0x38, 0x4B, 0x4B, 0x38, 0x37, 0x4B, 0x4B, 0xFF, 0xFF, 0x0, 0xD, 0x6, 0x13, 0x3, 0xA3, 0x6, 0xD3, 0x0, 0x7, 0x0, 0x44, 0x0, 0xA, 0x6, 0xD3, 0x0, 0x1, 0x0, 0xB, 0xFE, 0x1A, 0x6, 0x19, 0xFF, 0x8D, 0x0, 0xD, 0x0, 0x0, 0x1, 0x20, 0x24, 0x27, 0x37, 0x16, 0x4, 0x33, 0x32, 0x24, 0x37, 0x17, 0x6, 0x4, 0x3, 0x11, 0xFE, 0xD7, 0xFE, 0x94, 0x71, 0x71, 0x65, 0x1, 0x41, 0xEF, 0xF0, 0x1, 0x52, 0x65, 0x61, 0x5A, 0xFE, 0x7C, 0xFE, 0x1A, 0x9F, 0x7A, 0x58, 0x41, 0x5C, 0x62, 0x3D, 0x5A, 0x71, 0xA8, 0x0, 0x1, 0x0, 0xB, 0x4, 0x9E, 0x6, 0x19, 0x6, 0x10, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x4, 0x7, 0x27, 0x36, 0x24, 0x21, 0x20, 0x4, 0x17, 0x7, 0x26, 0x24, 0x3, 0x11, 0xEF, 0xFE, 0xBF, 0x65, 0x71, 0x71, 0x1, 0x6C, 0x1, 0x29, 0x1, 0x2A, 0x1, 0x84, 0x5A, 0x61, 0x65, 0xFE, 0xAE, 0x5, 0x3D, 0x5C, 0x41, 0x57, 0x7A, 0x9F, 0xA8, 0x71, 0x59, 0x3D, 0x62, 0x0, 0x1, 0x0, 0x3B, 0xFE, 0xE, 0x3, 0x3D, 0x2, 0x5A, 0x0, 0x7, 0x0, 0x0, 0x1, 0x3, 0x3, 0x27, 0x1, 0x17, 0x1, 0x13, 0x2, 0x60, 0xC8, 0xC4, 0x99, 0x2, 0x67, 0x9B, 0xFE, 0xC0, 0xFB, 0xFE, 0xE, 0x1, 0x42, 0xFE, 0xBF, 0x58, 0x3, 0xF3, 0x58, 0xFD, 0xF3, 0xFE, 0x6B, 0x0, 0x3, 0x0, 0x50, 0x0, 0x83, 0x5, 0x8, 0x5, 0x27, 0x0, 0x17, 0x0, 0x2F, 0x0, 0x47, 0x0, 0x0, 0x1, 0x27, 0x15, 0x23, 0x35, 0x7, 0x27, 0x37, 0x23, 0x35, 0x33, 0x27, 0x37, 0x17, 0x35, 0x33, 0x15, 0x37, 0x17, 0x7, 0x33, 0x15, 0x23, 0x17, 0x1, 0x27, 0x15, 0x23, 0x35, 0x7, 0x27, 0x37, 0x23, 0x35, 0x33, 0x27, 0x37, 0x17, 0x35, 0x33, 0x15, 0x37, 0x17, 0x7, 0x33, 0x15, 0x23, 0x17, 0x5, 0x27, 0x15, 0x23, 0x35, 0x7, 0x27, 0x37, 0x23, 0x35, 0x33, 0x27, 0x37, 0x17, 0x35, 0x33, 0x15, 0x37, 0x17, 0x7, 0x33, 0x15, 0x23, 0x17, 0x3, 0x4B, 0x65, 0x73, 0x66, 0x51, 0x68, 0x94, 0x91, 0x65, 0x51, 0x67, 0x72, 0x65, 0x50, 0x65, 0x92, 0x95, 0x68, 0xFE, 0x70, 0x65, 0x73, 0x66, 0x51, 0x68, 0x94, 0x91, 0x65, 0x51, 0x67, 0x72, 0x65, 0x50, 0x65, 0x92, 0x95, 0x68, 0x2, 0x30, 0x65, 0x73, 0x66, 0x51, 0x68, 0x94, 0x91, 0x65, 0x51, 0x67, 0x72, 0x65, 0x50, 0x65, 0x92, 0x95, 0x68, 0x3, 0x17, 0x66, 0x8E, 0x90, 0x68, 0x52, 0x69, 0x73, 0x66, 0x51, 0x68, 0x93, 0x91, 0x66, 0x51, 0x67, 0x72, 0x6A, 0xFD, 0x43, 0x66, 0x8E, 0x90, 0x68, 0x52, 0x69, 0x73, 0x66, 0x51, 0x68, 0x93, 0x91, 0x66, 0x51, 0x67, 0x72, 0x6A, 0x51, 0x66, 0x8E, 0x90, 0x68, 0x52, 0x69, 0x73, 0x66, 0x51, 0x68, 0x93, 0x91, 0x66, 0x51, 0x67, 0x72, 0x6A, 0x0, 0x1, 0x0, 0x54, 0x2, 0x17, 0x3, 0x1A, 0x3, 0xBB, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x3, 0x1A, 0xFD, 0x3A, 0x3, 0xBB, 0xFE, 0x5C, 0x1, 0xA4, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x6D, 0x3, 0x72, 0x5, 0x28, 0x0, 0x3, 0x0, 0x0, 0x1, 0x1, 0x27, 0x1, 0x3, 0x72, 0xFD, 0x39, 0x7E, 0x2, 0xC7, 0x4, 0xDF, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xBB, 0x2, 0x32, 0x6, 0x8F, 0x0, 0xB, 0x0, 0x0, 0x5, 0x15, 0x21, 0x11, 0x21, 0x15, 0x23, 0x11, 0x33, 0x15, 0x23, 0x11, 0x2, 0x32, 0xFE, 0x67, 0x1, 0x99, 0xA6, 0xA6, 0xA6, 0x87, 0xBE, 0x7, 0xD4, 0xBE, 0xFD, 0x3E, 0xBE, 0xFD, 0x28, 0x0, 0x1, 0x0, 0x5E, 0xFE, 0xBB, 0x1, 0xF7, 0x6, 0x8F, 0x0, 0xB, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x11, 0x23, 0x35, 0x33, 0x11, 0x23, 0x35, 0x21, 0x1, 0xF7, 0xFE, 0x67, 0xA6, 0xA6, 0xA6, 0xA6, 0x1, 0x99, 0xFE, 0xBB, 0xBE, 0x2, 0xD8, 0xBE, 0x2, 0xC2, 0xBE, 0x0, 0x1, 0x0, 0x3C, 0xFE, 0x60, 0x3, 0x1C, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x0, 0x13, 0x35, 0x21, 0x11, 0x23, 0x11, 0x3C, 0x2, 0xE0, 0xF2, 0x3, 0x76, 0xC4, 0xFA, 0x26, 0x5, 0x16, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x3, 0xB6, 0x5, 0xB0, 0x0, 0xA, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x32, 0x12, 0x15, 0x14, 0x2, 0x23, 0x23, 0x1, 0x77, 0xF3, 0x1, 0x46, 0xEF, 0xFD, 0xFD, 0xEF, 0x53, 0x5, 0xB0, 0xFE, 0xF5, 0xC9, 0xCA, 0xFE, 0xF6, 0x0, 0x2, 0x0, 0x66, 0x0, 0xCD, 0x4, 0x97, 0x3, 0xBD, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x21, 0x22, 0x26, 0x10, 0x36, 0x33, 0x5, 0x23, 0x11, 0x33, 0x4, 0x97, 0xFD, 0x66, 0xB5, 0xE2, 0xE2, 0xB5, 0x1, 0xD2, 0x6A, 0x6A, 0x3, 0xBD, 0xFD, 0x10, 0xCE, 0x1, 0x54, 0xCE, 0x7B, 0xFE, 0x6, 0x0, 0x2, 0x0, 0x66, 0x0, 0xCD, 0x4, 0x97, 0x3, 0xBD, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x13, 0x21, 0x32, 0x16, 0x10, 0x6, 0x23, 0x21, 0x1, 0x23, 0x11, 0x33, 0x66, 0x2, 0x9A, 0xB6, 0xE1, 0xE1, 0xB6, 0xFD, 0x66, 0x1, 0x32, 0x6A, 0x6A, 0x3, 0xBD, 0xCE, 0xFE, 0xAC, 0xCE, 0x2, 0x75, 0xFE, 0x6, 0xFF, 0xFF, 0x0, 0x3E, 0xFE, 0x4E, 0x3, 0x97, 0x1, 0xB1, 0x0, 0x7, 0x0, 0xF, 0x0, 0x22, 0xFC, 0x0, 0x0, 0x2, 0x0, 0x84, 0xFE, 0xAB, 0x1, 0xD9, 0x4, 0x52, 0x0, 0x9, 0x0, 0x12, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x13, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x84, 0x4A, 0x86, 0x4B, 0x4B, 0x86, 0x4A, 0x18, 0xE5, 0x3, 0x55, 0x7F, 0x55, 0x69, 0x3, 0xCA, 0x3A, 0x4E, 0x4E, 0x3A, 0x38, 0x4D, 0x4D, 0xFD, 0x59, 0xCC, 0xA0, 0x87, 0x4D, 0x48, 0xE0, 0x65, 0x0, 0x2, 0x0, 0xB, 0xFE, 0x1A, 0x6, 0x19, 0x6, 0x11, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x36, 0x24, 0x21, 0x20, 0x4, 0x17, 0x7, 0x26, 0x24, 0x23, 0x22, 0x4, 0x7, 0x1, 0x20, 0x24, 0x27, 0x37, 0x16, 0x4, 0x33, 0x32, 0x24, 0x37, 0x17, 0x6, 0x4, 0xB, 0x71, 0x1, 0x6C, 0x1, 0x29, 0x1, 0x2A, 0x1, 0x84, 0x5A, 0x61, 0x65, 0xFE, 0xAE, 0xF0, 0xEF, 0xFE, 0xBF, 0x65, 0x2, 0x95, 0xFE, 0xD7, 0xFE, 0x94, 0x71, 0x71, 0x65, 0x1, 0x41, 0xEF, 0xF0, 0x1, 0x52, 0x65, 0x61, 0x5A, 0xFE, 0x7C, 0x4, 0xF8, 0x7A, 0x9F, 0xA8, 0x71, 0x5A, 0x3D, 0x62, 0x5C, 0x41, 0xF9, 0x7A, 0x9F, 0x7A, 0x58, 0x41, 0x5C, 0x62, 0x3D, 0x5A, 0x71, 0xA8, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x4F, 0x3, 0xA9, 0x5, 0xB1, 0x0, 0x26, 0x0, 0xF, 0x34, 0x0, 0x0, 0x7, 0x0, 0xF, 0x0, 0x34, 0xFC, 0x1, 0x0, 0x3, 0x0, 0x43, 0xFF, 0x83, 0x3, 0x6C, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xF, 0x0, 0x19, 0x0, 0x0, 0x1, 0x1, 0x23, 0x1, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x3, 0x55, 0xFD, 0xC3, 0xBF, 0x2, 0x3D, 0xFD, 0xAD, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x2, 0x16, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xF9, 0xD3, 0x6, 0x2D, 0xFE, 0x7B, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xFD, 0x18, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0x0, 0x50, 0x1, 0xFB, 0x5, 0x2E, 0x3, 0x89, 0x0, 0x16, 0x0, 0x0, 0x1, 0x17, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x16, 0x33, 0x32, 0x36, 0x4, 0xCF, 0x5F, 0x36, 0xA7, 0x6A, 0x6E, 0xC5, 0x5A, 0x5E, 0x5D, 0x4E, 0x73, 0x37, 0x57, 0x41, 0xA9, 0x67, 0x6C, 0xC1, 0xB6, 0x59, 0x44, 0x74, 0x3, 0x1D, 0x98, 0x2E, 0x5C, 0x64, 0x31, 0x33, 0x35, 0x29, 0x9E, 0x31, 0x55, 0x65, 0x63, 0x33, 0x0, 0x1, 0x0, 0xB, 0xFE, 0x1A, 0x6, 0x19, 0xFF, 0x8D, 0x0, 0xD, 0x0, 0x0, 0x5, 0x20, 0x4, 0x17, 0x7, 0x26, 0x24, 0x23, 0x22, 0x4, 0x7, 0x27, 0x36, 0x24, 0x3, 0x11, 0x1, 0x2A, 0x1, 0x84, 0x5A, 0x61, 0x65, 0xFE, 0xAE, 0xF0, 0xEF, 0xFE, 0xBF, 0x65, 0x71, 0x71, 0x1, 0x6C, 0x73, 0xA9, 0x70, 0x5A, 0x3D, 0x62, 0x5D, 0x40, 0x58, 0x79, 0xA0, 0x0, 0x1, 0x0, 0xC0, 0x0, 0x49, 0x4, 0x63, 0x3, 0xEC, 0x0, 0x17, 0x0, 0x0, 0x25, 0x27, 0x15, 0x23, 0x35, 0x7, 0x27, 0x37, 0x23, 0x35, 0x33, 0x27, 0x37, 0x17, 0x35, 0x33, 0x15, 0x37, 0x17, 0x7, 0x33, 0x15, 0x23, 0x17, 0x3, 0x97, 0xAB, 0xB5, 0xAD, 0x7F, 0xB1, 0xFC, 0xF7, 0xAC, 0x7F, 0xAE, 0xB4, 0xAB, 0x80, 0xAD, 0xF9, 0xFD, 0xB1, 0x8B, 0xAF, 0xF1, 0xF3, 0xB1, 0x81, 0xB4, 0xB5, 0xB0, 0x7F, 0xB1, 0xF9, 0xF6, 0xAE, 0x7F, 0xB0, 0xB5, 0xB4, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x3, 0x6E, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x2, 0xD9, 0x0, 0x27, 0x1, 0xD4, 0x5, 0x3F, 0x1, 0x4F, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x3F, 0x4, 0x62, 0x0, 0x4, 0x0, 0x50, 0x4, 0xBA, 0x6, 0x13, 0x6, 0x1A, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x1, 0x13, 0x33, 0x3, 0x21, 0x13, 0x33, 0x3, 0x21, 0x13, 0x33, 0x3, 0x21, 0x13, 0x33, 0x3, 0x4, 0x8A, 0x9A, 0xEF, 0xDE, 0xFD, 0xEA, 0x9A, 0xEF, 0xDE, 0xFD, 0xEE, 0x99, 0xF0, 0xDE, 0xFD, 0xED, 0x9A, 0xEF, 0xDE, 0x4, 0xBA, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0x1, 0x60, 0xFE, 0xA0, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x4, 0xA0, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x2, 0xD9, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xCC, 0x1, 0x4F, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x71, 0x2, 0xD9, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xCC, 0x4, 0x62, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x4, 0x43, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x4, 0x62, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x1, 0x4F, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x4, 0x62, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9E, 0x2, 0xD9, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x1, 0x57, 0x5, 0x5C, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x28, 0x5, 0xD1, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x4, 0x37, 0x5, 0x5C, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x3, 0x9A, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x8, 0x3, 0x9A, 0x0, 0x27, 0x1, 0xD4, 0x4, 0x98, 0x1, 0x4F, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x98, 0x5, 0xD1, 0x0, 0x5, 0x0, 0x43, 0xFF, 0xD6, 0x4, 0x5B, 0x3, 0xFA, 0x0, 0xB, 0x0, 0x17, 0x0, 0x23, 0x0, 0x2F, 0x0, 0x39, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x3, 0x47, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0xFC, 0xFC, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x3, 0xFA, 0xFE, 0x84, 0xEC, 0xFE, 0x82, 0x1, 0x7E, 0xEC, 0x1, 0x7C, 0xFC, 0x6, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x3, 0x5, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x3, 0x70, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x34, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xFE, 0x4C, 0xFE, 0x4E, 0x1, 0xB2, 0xDD, 0x1, 0x95, 0xFE, 0x6B, 0xFD, 0xF9, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x34, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x1, 0x57, 0x5, 0x5C, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x5, 0xD1, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x3, 0x90, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x1, 0x57, 0x5, 0x5C, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x5, 0xD1, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x4, 0x4E, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x2, 0xCF, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0xFF, 0xFF, 0x0, 0x4C, 0x2, 0x90, 0x2, 0xAA, 0x5, 0xBB, 0x0, 0x7, 0x7, 0x43, 0x0, 0x0, 0x2, 0x9B, 0x0, 0x2, 0x0, 0x79, 0x2, 0x30, 0x1, 0x5F, 0x6, 0x91, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x11, 0x23, 0x11, 0x79, 0x3C, 0x36, 0x38, 0x3C, 0x3C, 0x38, 0x36, 0x3C, 0xD9, 0xC5, 0x6, 0x24, 0x2F, 0x3E, 0x3E, 0x2F, 0x2E, 0x3D, 0x3D, 0xA2, 0xFC, 0xDC, 0x3, 0x24, 0xFF, 0xFF, 0x0, 0x35, 0x2, 0x9B, 0x2, 0xBF, 0x5, 0xB0, 0x0, 0x7, 0x7, 0x9E, 0x0, 0x0, 0x2, 0x9B, 0xFF, 0xFF, 0x0, 0x4F, 0x2, 0x90, 0x2, 0xAE, 0x5, 0xB0, 0x0, 0x7, 0x7, 0x9F, 0x0, 0x0, 0x2, 0x9B, 0xFF, 0xFF, 0x0, 0x4E, 0x2, 0x90, 0x2, 0xB9, 0x5, 0xBD, 0x0, 0x7, 0x7, 0xA0, 0x0, 0x0, 0x2, 0x9B, 0xFF, 0xFF, 0x0, 0x37, 0x2, 0x9B, 0x2, 0xAE, 0x5, 0xB0, 0x0, 0x7, 0x7, 0xA1, 0x0, 0x0, 0x2, 0x9B, 0xFF, 0xFF, 0x0, 0x4C, 0x2, 0x90, 0x2, 0xAA, 0x5, 0xBB, 0x0, 0x7, 0x7, 0xA2, 0x0, 0x0, 0x2, 0x9B, 0xFF, 0xFF, 0x0, 0x47, 0x2, 0x92, 0x2, 0xA4, 0x5, 0xBB, 0x0, 0x7, 0x7, 0xA3, 0x0, 0x0, 0x2, 0x9B, 0x0, 0x1, 0x0, 0x50, 0x2, 0x8E, 0x2, 0xEC, 0x5, 0x53, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x2, 0xEC, 0xFD, 0xA1, 0xFE, 0xFE, 0xA1, 0xFD, 0x3, 0xA3, 0xFE, 0xEB, 0x1, 0x15, 0x9A, 0x1, 0x16, 0xFE, 0xEA, 0x0, 0x1, 0x0, 0x50, 0x3, 0xA3, 0x2, 0xA9, 0x4, 0x3D, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x2, 0xA9, 0xFD, 0xA7, 0x4, 0x3D, 0x9A, 0x9A, 0x0, 0x2, 0x0, 0x50, 0x3, 0x10, 0x2, 0xA9, 0x4, 0xD0, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x2, 0xA9, 0xFD, 0xA7, 0x2, 0x59, 0xFD, 0xA7, 0x4, 0xD0, 0x9A, 0x9A, 0xFE, 0xDA, 0x9A, 0x9A, 0x0, 0x1, 0x0, 0x50, 0x1, 0x87, 0x1, 0xB0, 0x6, 0x31, 0x0, 0xE, 0x0, 0x0, 0x13, 0x34, 0x12, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x2, 0x35, 0x50, 0xC5, 0x57, 0x44, 0x37, 0x65, 0x65, 0x37, 0x44, 0x57, 0xC5, 0x3, 0xE5, 0xF7, 0x1, 0x2A, 0x2B, 0x7F, 0x3A, 0xCF, 0xD6, 0xCC, 0xCA, 0x3A, 0x7C, 0x2C, 0x1, 0x2A, 0xF8, 0x0, 0x1, 0x0, 0x50, 0x1, 0x87, 0x1, 0xB0, 0x6, 0x31, 0x0, 0xE, 0x0, 0x0, 0x1, 0x14, 0x2, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x12, 0x15, 0x1, 0xB0, 0xC4, 0x58, 0x44, 0x37, 0x65, 0x64, 0x38, 0x44, 0x58, 0xC4, 0x3, 0xD4, 0xF7, 0xFE, 0xD6, 0x2C, 0x7C, 0x3A, 0xC9, 0xE0, 0xC2, 0xD0, 0x3A, 0x7F, 0x2B, 0xFE, 0xD6, 0xF7, 0x0, 0x1, 0x0, 0x6A, 0x2, 0x8C, 0x3, 0x0, 0x5, 0xBA, 0x0, 0x10, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x1, 0xB8, 0x61, 0x28, 0xC5, 0x98, 0x20, 0x4B, 0x8F, 0x79, 0x8B, 0xC5, 0x4, 0x5, 0x13, 0x58, 0xFD, 0xD1, 0x3, 0x21, 0x79, 0x86, 0x91, 0xA2, 0xFE, 0x5, 0x1, 0xD9, 0xAE, 0xFF, 0xFF, 0x0, 0x4C, 0xFE, 0x88, 0x2, 0xAA, 0x1, 0xB3, 0x0, 0x7, 0x7, 0x43, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x81, 0xFE, 0x93, 0x2, 0x3, 0x1, 0xA7, 0x0, 0x7, 0x7, 0x42, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x93, 0x2, 0xB2, 0x1, 0xB3, 0x0, 0x7, 0x7, 0x41, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x37, 0xFE, 0x88, 0x2, 0xA9, 0x1, 0xB3, 0x0, 0x7, 0x7, 0x9D, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x35, 0xFE, 0x93, 0x2, 0xBF, 0x1, 0xA8, 0x0, 0x7, 0x7, 0x9E, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x4F, 0xFE, 0x88, 0x2, 0xAE, 0x1, 0xA8, 0x0, 0x7, 0x7, 0x9F, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x4E, 0xFE, 0x88, 0x2, 0xB9, 0x1, 0xB5, 0x0, 0x7, 0x7, 0xA0, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x37, 0xFE, 0x93, 0x2, 0xAE, 0x1, 0xA8, 0x0, 0x7, 0x7, 0xA1, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x4C, 0xFE, 0x88, 0x2, 0xAA, 0x1, 0xB3, 0x0, 0x7, 0x7, 0xA2, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x47, 0xFE, 0x8A, 0x2, 0xA4, 0x1, 0xB3, 0x0, 0x7, 0x7, 0xA3, 0x0, 0x0, 0xFE, 0x93, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0xA6, 0x2, 0xEC, 0x1, 0x6B, 0x0, 0x7, 0x4, 0xA3, 0x0, 0x0, 0xFC, 0x18, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xBB, 0x2, 0xA9, 0x0, 0x55, 0x0, 0x7, 0x4, 0xA4, 0x0, 0x0, 0xFC, 0x18, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0x28, 0x2, 0xA9, 0x0, 0xE8, 0x0, 0x7, 0x4, 0xA5, 0x0, 0x0, 0xFC, 0x18, 0x0, 0x1, 0x0, 0x50, 0xFD, 0xEB, 0x1, 0xB0, 0x2, 0x53, 0x0, 0xE, 0x0, 0x0, 0x37, 0x34, 0x12, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x2, 0x35, 0x50, 0xC5, 0x57, 0x44, 0x37, 0x65, 0x65, 0x37, 0x44, 0x57, 0xC5, 0x25, 0xEB, 0x1, 0x1B, 0x28, 0x7F, 0x35, 0xC2, 0xCA, 0xBD, 0xBB, 0x35, 0x7B, 0x28, 0x1, 0x18, 0xE9, 0x0, 0x1, 0x0, 0x50, 0xFD, 0xEB, 0x1, 0xB0, 0x2, 0x53, 0x0, 0xE, 0x0, 0x0, 0x25, 0x14, 0x2, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x12, 0x15, 0x1, 0xB0, 0xC4, 0x58, 0x44, 0x37, 0x65, 0x64, 0x38, 0x44, 0x58, 0xC4, 0x1E, 0xED, 0xFE, 0xE3, 0x29, 0x7B, 0x37, 0xBD, 0xD6, 0xB2, 0xBE, 0x34, 0x7F, 0x28, 0xFE, 0xEA, 0xE6, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x50, 0x3, 0x0, 0x1, 0x8D, 0x0, 0x7, 0x3, 0x72, 0x0, 0x0, 0xFB, 0xD3, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x4B, 0x3, 0x16, 0x1, 0x89, 0x0, 0x7, 0x3, 0x78, 0x0, 0x0, 0xFB, 0xCD, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x4C, 0x3, 0x32, 0x1, 0x8A, 0x0, 0x7, 0x3, 0x81, 0x0, 0x0, 0xFB, 0xD0, 0xFF, 0xFF, 0x0, 0x28, 0xFE, 0x5F, 0x3, 0x12, 0x1, 0x80, 0x0, 0x7, 0x1, 0x94, 0xFF, 0xF9, 0xFB, 0xD3, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x4B, 0x3, 0x16, 0x1, 0x89, 0x0, 0xF, 0x3, 0x78, 0x3, 0x52, 0x4, 0x7, 0xC0, 0x0, 0xFF, 0xFF, 0x0, 0x64, 0xFE, 0x5F, 0x2, 0xFA, 0x3, 0x1, 0x0, 0x7, 0x1, 0x62, 0x0, 0x0, 0xFB, 0xD3, 0xFF, 0xFF, 0x0, 0x64, 0xFE, 0x5F, 0x3, 0x3E, 0x2, 0xE1, 0x0, 0x7, 0x3, 0x7E, 0x0, 0x0, 0xFB, 0xD3, 0xFF, 0xFF, 0x0, 0x78, 0xFE, 0x5F, 0x1, 0x3D, 0x3, 0x1, 0x0, 0x7, 0x1, 0x92, 0x0, 0x14, 0xFB, 0xD3, 0xFF, 0xFF, 0x0, 0x64, 0xFE, 0x5F, 0x4, 0xCC, 0x1, 0x8D, 0x0, 0x7, 0x3, 0x7F, 0x0, 0x0, 0xFB, 0xD3, 0x0, 0x1, 0x0, 0x64, 0xFE, 0x60, 0x2, 0xFA, 0x1, 0x8D, 0x0, 0x10, 0x0, 0x0, 0x25, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x26, 0x1, 0xB3, 0x62, 0x28, 0xC5, 0xA7, 0x14, 0x4C, 0x8C, 0x78, 0x8B, 0xC5, 0x4, 0xE7, 0x59, 0xFD, 0xD2, 0x3, 0x20, 0x74, 0x81, 0x91, 0xA2, 0xFE, 0x6, 0x1, 0xD8, 0xAF, 0x0, 0x2, 0x0, 0x64, 0xFD, 0xEE, 0x3, 0x3D, 0x1, 0x88, 0x0, 0x9, 0x0, 0x19, 0x0, 0x0, 0x5, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x15, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x1, 0xCD, 0x5D, 0x4E, 0xAA, 0x72, 0x34, 0x33, 0x9F, 0x84, 0x4E, 0xC4, 0xAC, 0xC, 0x50, 0x90, 0x98, 0xA9, 0xA8, 0xC8, 0x72, 0x6A, 0xCC, 0x57, 0xFE, 0xFF, 0x50, 0xA6, 0x52, 0xF6, 0x3, 0x8B, 0x55, 0x64, 0xCD, 0xA8, 0xF, 0xA9, 0xC9, 0xFF, 0xFF, 0x0, 0x3C, 0xFE, 0x4B, 0x2, 0xDF, 0x1, 0x89, 0x0, 0x7, 0x1, 0x93, 0x0, 0x0, 0xFB, 0xCF, 0xFF, 0xFF, 0x0, 0x28, 0xFE, 0x4B, 0x2, 0x2, 0x2, 0x3E, 0x0, 0x7, 0x3, 0x86, 0x0, 0x0, 0xFB, 0xCE, 0x0, 0x1, 0x0, 0x58, 0xFF, 0xFF, 0x5, 0x28, 0x6, 0x1, 0x0, 0x20, 0x0, 0x0, 0x5, 0x11, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x11, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x2, 0x22, 0xC6, 0xFE, 0xFC, 0x1, 0x3, 0xC7, 0xC4, 0xEA, 0xD, 0xE4, 0x1A, 0xBD, 0x68, 0x7E, 0x7F, 0x67, 0x3, 0x6, 0xFD, 0xDE, 0x1, 0xD2, 0xFE, 0x2E, 0x2, 0x22, 0x1, 0x1, 0xBE, 0x1, 0x3, 0xCF, 0xA0, 0xD0, 0x1, 0x2, 0xC2, 0xC2, 0xCE, 0xA1, 0x7A, 0xA1, 0x79, 0xA4, 0x1, 0x98, 0xB6, 0xE0, 0xB7, 0xFE, 0xF8, 0xB6, 0x0, 0x3, 0x0, 0x66, 0xFF, 0x83, 0x4, 0xEC, 0x6, 0x22, 0x0, 0x5, 0x0, 0xB, 0x0, 0x2C, 0x0, 0x0, 0x1, 0x14, 0x17, 0x13, 0x4, 0x11, 0x13, 0x1, 0x26, 0x27, 0x1, 0x16, 0x3, 0x37, 0x26, 0x27, 0x7, 0x23, 0x13, 0x26, 0x3, 0x35, 0x10, 0x0, 0x25, 0x37, 0x33, 0x7, 0x16, 0x17, 0x37, 0x33, 0x3, 0x16, 0x17, 0x23, 0x1, 0x36, 0x36, 0x37, 0x33, 0x6, 0x0, 0x21, 0x7, 0x1, 0x65, 0xD, 0xFA, 0xFE, 0xF9, 0xDB, 0x1, 0x48, 0x27, 0x37, 0xFE, 0xBA, 0x27, 0x36, 0x2A, 0x33, 0x2E, 0x37, 0xC0, 0x5F, 0x9E, 0x2, 0x1, 0x3D, 0x1, 0xE, 0x1F, 0xBF, 0x25, 0x34, 0x2F, 0x30, 0xBF, 0x55, 0x71, 0x14, 0xF1, 0xFF, 0x0, 0x79, 0x6B, 0x10, 0xFC, 0x13, 0xFE, 0xE6, 0xFE, 0xF9, 0x22, 0x2, 0x9D, 0x5E, 0x4D, 0x2, 0xFE, 0x3A, 0xFE, 0x55, 0xFD, 0xBF, 0x3, 0xF2, 0x20, 0xF, 0xFC, 0x17, 0x26, 0xFE, 0xA7, 0x82, 0xF, 0x18, 0xA9, 0x1, 0x23, 0xB9, 0x1, 0x36, 0x7E, 0x1, 0x37, 0x1, 0x76, 0x4, 0x5E, 0x72, 0xD, 0x16, 0x95, 0xFE, 0xF9, 0x80, 0xCC, 0xFC, 0xEE, 0x10, 0x93, 0x7A, 0xD4, 0xFE, 0xE6, 0x69, 0x0, 0x1, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x28, 0x0, 0x0, 0x1, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x16, 0x17, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x36, 0x36, 0x37, 0x4, 0xEB, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x13, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x87, 0x9C, 0xAB, 0xAC, 0x1, 0x5F, 0x6A, 0xE2, 0xA, 0x5A, 0x9C, 0x35, 0x22, 0x2, 0x32, 0x31, 0xA7, 0x3A, 0x64, 0x5C, 0xE, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xFA, 0xE4, 0x7D, 0xAC, 0xF2, 0x2E, 0x2, 0x9B, 0x78, 0x8C, 0xE, 0xE4, 0x8, 0x7F, 0xFE, 0xAD, 0x18, 0x8E, 0x70, 0x0, 0x1, 0x0, 0x60, 0x0, 0x0, 0x4, 0x7C, 0x5, 0xC4, 0x0, 0x28, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x36, 0x36, 0x35, 0x27, 0x23, 0x35, 0x33, 0x27, 0x23, 0x35, 0x33, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x17, 0x21, 0x15, 0x21, 0x17, 0x21, 0x15, 0x21, 0x17, 0x14, 0x7, 0x21, 0x4, 0x7C, 0xFB, 0xE7, 0x51, 0x32, 0x21, 0x2, 0xA5, 0xA0, 0x4, 0x9C, 0x97, 0x5, 0xFF, 0xC6, 0xD0, 0xE3, 0xF5, 0x7A, 0x4E, 0x51, 0x6E, 0x6, 0x1, 0x3E, 0xFE, 0xC7, 0x5, 0x1, 0x34, 0xFE, 0xD1, 0x2, 0x41, 0x2, 0xB8, 0xCA, 0xD, 0x8A, 0x3D, 0x37, 0x90, 0x79, 0x90, 0xA1, 0xCF, 0xE6, 0xDE, 0xB5, 0x6E, 0x5A, 0x78, 0x72, 0xA1, 0x90, 0x79, 0x90, 0x2F, 0x88, 0x54, 0x0, 0x1, 0x0, 0x7D, 0xFF, 0x83, 0x6, 0x7A, 0x5, 0x1, 0x0, 0x25, 0x0, 0x0, 0x21, 0x35, 0x3, 0x23, 0x1, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x13, 0x33, 0x7, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x3, 0x1, 0x80, 0xC0, 0x1, 0x40, 0x68, 0x5A, 0x93, 0x3D, 0xF2, 0xE4, 0x7, 0x73, 0xC6, 0x95, 0x56, 0x69, 0xBF, 0x58, 0x53, 0x67, 0xA6, 0xBD, 0x1, 0xF3, 0x69, 0x5A, 0x53, 0x69, 0x14, 0xC3, 0xFE, 0xC0, 0x3, 0x1E, 0x1B, 0x72, 0x5A, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0x52, 0x1, 0x5, 0xDB, 0x28, 0xB8, 0xD4, 0xFD, 0x3E, 0x2, 0xBE, 0x78, 0x52, 0x5A, 0x48, 0xFD, 0x1A, 0x0, 0x5, 0x0, 0x22, 0x0, 0x0, 0x6, 0x4F, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xA, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x1, 0x15, 0x33, 0x13, 0x27, 0x23, 0x15, 0x21, 0x35, 0x23, 0x17, 0x13, 0x1, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x1, 0x21, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x11, 0x3, 0x35, 0x23, 0x1, 0xF1, 0x2B, 0xC2, 0x5E, 0x8F, 0x2, 0x8B, 0xF2, 0x5E, 0x92, 0xFE, 0xC9, 0xFE, 0xAE, 0xFD, 0xD2, 0xD2, 0xD2, 0xD2, 0xFD, 0x1, 0x35, 0x1, 0x56, 0xFB, 0xD8, 0xD8, 0xD8, 0xD8, 0xFB, 0x2F, 0x4, 0x9, 0x44, 0xFE, 0xCA, 0x96, 0x96, 0x96, 0x96, 0xFD, 0x71, 0x1, 0xEF, 0xFE, 0x11, 0x1, 0xEF, 0xA0, 0x96, 0xA0, 0x1, 0xEB, 0xFE, 0x15, 0x1, 0xEB, 0xFE, 0x15, 0xA0, 0x96, 0xA0, 0xFE, 0x11, 0x1, 0xA4, 0x4B, 0x0, 0x2, 0x0, 0x99, 0xFF, 0xEC, 0x6, 0x3A, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x28, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x6, 0x6, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x17, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0x93, 0x92, 0x95, 0x5F, 0x5F, 0x95, 0x4, 0x15, 0x43, 0x5D, 0x79, 0x9F, 0x77, 0x1A, 0xED, 0xDF, 0x92, 0xFA, 0x1, 0x8C, 0xE5, 0xEE, 0x16, 0x74, 0xF3, 0xBF, 0xBF, 0x3F, 0x31, 0x2A, 0x2B, 0x4, 0xE4, 0xFE, 0x4, 0x9F, 0x61, 0x60, 0x9C, 0xFB, 0x20, 0x18, 0x89, 0xA7, 0x2, 0x6B, 0xA1, 0xCA, 0xFD, 0xE4, 0x5, 0xB0, 0xD1, 0xA5, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x8, 0x3C, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x0, 0x58, 0x4, 0x72, 0x0, 0x0, 0x0, 0x6, 0x0, 0x22, 0x0, 0x0, 0x6, 0x7, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0xE, 0x0, 0x11, 0x0, 0x31, 0x0, 0x0, 0x1, 0x37, 0x23, 0x17, 0x21, 0x27, 0x23, 0x7, 0x21, 0x37, 0x23, 0x17, 0x1, 0x37, 0x23, 0x5, 0x37, 0x23, 0x1, 0x3, 0x23, 0x35, 0x33, 0x27, 0x23, 0x35, 0x33, 0x3, 0x33, 0x13, 0x33, 0x13, 0x33, 0x13, 0x33, 0x13, 0x33, 0x3, 0x33, 0x15, 0x23, 0x7, 0x33, 0x15, 0x23, 0x3, 0x23, 0x3, 0x23, 0x3, 0x2, 0x34, 0x1A, 0xA6, 0x1A, 0x1, 0x74, 0x1A, 0x12, 0x1B, 0x1, 0x75, 0x19, 0xA1, 0x19, 0xFE, 0x7, 0x1F, 0x3F, 0x2, 0x50, 0x1E, 0x3C, 0xFD, 0x6E, 0x77, 0xE3, 0xC3, 0x21, 0xA2, 0x81, 0x4F, 0xFB, 0x3F, 0xD9, 0x3D, 0xE1, 0x3D, 0xD5, 0x3D, 0xFB, 0x4F, 0x87, 0xA7, 0x21, 0xC8, 0xE8, 0x77, 0xFA, 0x5E, 0x7B, 0x60, 0x2, 0xE9, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xFE, 0x9B, 0xC5, 0xBE, 0xBE, 0xFD, 0xB7, 0x2, 0x49, 0xA0, 0xA2, 0xA0, 0x1, 0x85, 0xFE, 0x7B, 0x1, 0x85, 0xFE, 0x7B, 0x1, 0x85, 0xFE, 0x7B, 0xA0, 0xA2, 0xA0, 0xFD, 0xB7, 0x2, 0x49, 0xFD, 0xB7, 0x0, 0x2, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x10, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x21, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x21, 0x11, 0x23, 0x21, 0x11, 0x33, 0x11, 0x21, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x4, 0x23, 0x7D, 0x2, 0x90, 0xB6, 0xB3, 0x1, 0xF3, 0x66, 0x5E, 0xFE, 0xAF, 0xF2, 0x1, 0x99, 0xF2, 0x1, 0x51, 0x5E, 0x66, 0xF3, 0xFE, 0xF2, 0xB7, 0x4, 0x3A, 0xBA, 0xD7, 0xFE, 0xBC, 0x1, 0x40, 0x7B, 0x56, 0xFC, 0x8A, 0x2, 0xD6, 0xFD, 0xEE, 0x56, 0x7B, 0x2, 0xA5, 0xFD, 0x5C, 0xD9, 0xBD, 0x0, 0x1, 0x0, 0x5E, 0xFF, 0xEC, 0x4, 0x31, 0x5, 0xC4, 0x0, 0x23, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x0, 0x3, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x12, 0x0, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x4, 0x31, 0x7A, 0x7F, 0xF0, 0xFE, 0xCA, 0x8, 0xAC, 0xAC, 0xAC, 0xAD, 0xE, 0x1, 0x38, 0xF0, 0x6B, 0x85, 0x1D, 0x63, 0x67, 0x8E, 0xA9, 0xB, 0x1, 0x63, 0xFE, 0x9C, 0x1, 0x64, 0xFE, 0x9C, 0x6, 0xAE, 0x8D, 0x6C, 0x60, 0xA, 0x1E, 0x1, 0x13, 0x1, 0x11, 0x8C, 0x81, 0x8C, 0x1, 0xC, 0x1, 0xF, 0x1F, 0xCD, 0x21, 0xA1, 0xAF, 0x8C, 0x81, 0x8C, 0xBA, 0xA0, 0x20, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x5, 0x90, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x21, 0x15, 0x21, 0x1, 0x4, 0x60, 0xFE, 0x43, 0xAC, 0xFD, 0xD8, 0xD8, 0xFD, 0x8A, 0x1, 0xAD, 0x1, 0x36, 0xFE, 0x44, 0x1, 0xCB, 0xFE, 0x57, 0x1, 0xC6, 0x2, 0x70, 0xFD, 0x90, 0x2, 0x7A, 0xCA, 0x2, 0x6C, 0xFD, 0x9D, 0x2, 0x63, 0xFD, 0x94, 0xCA, 0xFD, 0x86, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x1, 0x7, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x35, 0x7, 0x35, 0x37, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x37, 0x15, 0x7, 0x15, 0x37, 0x3, 0xC5, 0xDA, 0xFC, 0xE3, 0xE3, 0xE3, 0xE3, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0xDA, 0xDA, 0xDA, 0x2, 0x39, 0x56, 0xFE, 0x1D, 0x1, 0x7F, 0x5A, 0xBE, 0x5A, 0x92, 0x5A, 0xBE, 0x5A, 0x1, 0x58, 0xCB, 0xCB, 0xF4, 0x57, 0xBE, 0x57, 0x92, 0x57, 0x0, 0x5, 0x0, 0x35, 0xFE, 0x60, 0xA, 0x26, 0x6, 0x7E, 0x0, 0xC, 0x0, 0x18, 0x0, 0x22, 0x0, 0x31, 0x0, 0x50, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x11, 0x16, 0x21, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x7, 0x11, 0x16, 0x16, 0x5, 0x32, 0x35, 0x35, 0x26, 0x7, 0x6, 0x15, 0x14, 0x16, 0x5, 0x22, 0x27, 0x11, 0x23, 0x11, 0x34, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x21, 0x22, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x6, 0x7, 0x35, 0x36, 0x37, 0x35, 0x33, 0x15, 0x36, 0x33, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x8, 0x40, 0x83, 0x71, 0x6C, 0x83, 0x75, 0x68, 0x44, 0xFC, 0x42, 0xA7, 0x95, 0xD8, 0xED, 0x8D, 0x39, 0x82, 0xFD, 0xE6, 0x6C, 0x35, 0x32, 0x66, 0x38, 0x7, 0x35, 0xB2, 0x6B, 0xF2, 0x1, 0xA, 0xCC, 0xEC, 0xEE, 0xD6, 0xFA, 0x9E, 0x73, 0xA1, 0x3C, 0x57, 0xCB, 0x9A, 0xAD, 0xA9, 0x8A, 0x42, 0x3B, 0x83, 0x95, 0x93, 0x85, 0xF3, 0x4C, 0x4A, 0x1, 0x47, 0x1, 0x67, 0xFE, 0xD8, 0xAF, 0xC0, 0x8B, 0x15, 0x9B, 0xE1, 0xDC, 0x7C, 0xFE, 0xF1, 0x75, 0x1, 0x1E, 0xE6, 0x4C, 0xEF, 0x1, 0x13, 0x5, 0xFC, 0x3A, 0x36, 0x51, 0x15, 0x78, 0x18, 0x2D, 0x1, 0x2, 0x5B, 0x2B, 0x34, 0xAE, 0x78, 0xFD, 0xFC, 0x3, 0xE0, 0xF5, 0x1, 0x19, 0xFE, 0xBD, 0xFD, 0x14, 0xE7, 0xFE, 0xD9, 0x4B, 0x34, 0x7F, 0x98, 0x78, 0x80, 0x8E, 0x17, 0x2, 0xE9, 0x18, 0x2A, 0xC3, 0x29, 0x18, 0xE0, 0xC0, 0x6, 0xFE, 0x76, 0xFE, 0xC3, 0x4A, 0xFE, 0xB1, 0xFE, 0x88, 0x0, 0x2, 0x0, 0x22, 0xFE, 0x4B, 0x4, 0xC1, 0x6, 0x18, 0x0, 0xB, 0x0, 0x30, 0x0, 0x0, 0x1, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x7, 0x3, 0x3, 0x23, 0x1, 0x1, 0x37, 0x3, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x2, 0x3, 0x13, 0x16, 0x15, 0x14, 0x6, 0x3, 0x5A, 0x55, 0x3F, 0x47, 0x3D, 0x3F, 0x45, 0x1D, 0x3F, 0x6C, 0x6E, 0x5A, 0x62, 0x36, 0x32, 0x24, 0x45, 0x89, 0xFF, 0x99, 0xE0, 0x1, 0x58, 0x1, 0x4, 0x4F, 0x79, 0x29, 0x1F, 0xB2, 0xAA, 0xB3, 0xA6, 0x81, 0x8D, 0x8A, 0x39, 0xA5, 0x2, 0xFC, 0xAC, 0xBD, 0x51, 0x48, 0x57, 0x59, 0x49, 0x38, 0x7C, 0xFA, 0x4C, 0x2C, 0xC1, 0x2A, 0x39, 0x2B, 0x34, 0x7C, 0xC8, 0xFE, 0x1, 0x3B, 0xFE, 0xD9, 0x2, 0x93, 0xFE, 0xBB, 0x99, 0x1, 0x63, 0x8D, 0x72, 0x74, 0x95, 0xC6, 0xC9, 0x8E, 0x84, 0xFE, 0xC2, 0xFE, 0xF7, 0xFE, 0x69, 0xB3, 0x69, 0x71, 0x87, 0x0, 0x4, 0x0, 0x22, 0x0, 0x0, 0x5, 0xD5, 0x5, 0xB0, 0x0, 0x4, 0x0, 0x9, 0x0, 0xE, 0x0, 0x28, 0x0, 0x0, 0x1, 0x15, 0x21, 0x26, 0x23, 0x1, 0x27, 0x21, 0x15, 0x21, 0x7, 0x21, 0x15, 0x21, 0x32, 0x5, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x16, 0x17, 0x33, 0x15, 0x23, 0x17, 0x7, 0x33, 0x15, 0x23, 0x6, 0x5, 0x1, 0xD6, 0x1, 0xF2, 0x48, 0x79, 0x1, 0x14, 0x2, 0xFD, 0xBD, 0x2, 0x44, 0x4E, 0xFE, 0xA, 0x1, 0x31, 0x7F, 0xFE, 0x50, 0xFC, 0xB8, 0xB8, 0xB8, 0xB8, 0x2, 0x2D, 0xB9, 0xF9, 0x37, 0xE5, 0xBD, 0x1, 0x1, 0xBD, 0xE1, 0x6D, 0xFE, 0x94, 0x4, 0xE5, 0x3E, 0x3E, 0xFE, 0xFA, 0x28, 0x47, 0xA0, 0x38, 0xCB, 0xFD, 0xE3, 0x3, 0x20, 0xA0, 0x47, 0xA0, 0x1, 0x9, 0x90, 0x79, 0xA0, 0x26, 0x21, 0xA0, 0xFC, 0x7, 0x0, 0x3, 0x0, 0x6A, 0xFF, 0x83, 0x4, 0xF0, 0x6, 0x17, 0x0, 0x19, 0x0, 0x1F, 0x0, 0x25, 0x0, 0x0, 0x25, 0x6, 0x6, 0x7, 0x15, 0x23, 0x35, 0x26, 0x0, 0x3, 0x35, 0x10, 0x0, 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x17, 0x23, 0x26, 0x26, 0x27, 0x11, 0x21, 0x5, 0x10, 0x17, 0x11, 0x6, 0x11, 0x5, 0x23, 0x11, 0x36, 0x36, 0x37, 0x4, 0xF0, 0x2B, 0xDB, 0xD5, 0xC3, 0xDB, 0xFE, 0xF5, 0x2, 0x1, 0x1, 0xE7, 0xC3, 0xE0, 0xE3, 0x18, 0xF8, 0x10, 0x69, 0x6A, 0x1, 0xDB, 0xFC, 0x79, 0xE9, 0xE9, 0x2, 0x8B, 0xDF, 0x66, 0x62, 0x17, 0xBE, 0x3A, 0x8B, 0xB, 0x6B, 0x75, 0x2A, 0x1, 0x5F, 0x1, 0x1E, 0x68, 0x1, 0x2B, 0x1, 0x67, 0x23, 0x5B, 0x57, 0x15, 0xFD, 0xBB, 0x60, 0x8B, 0x14, 0xFD, 0xF9, 0x43, 0xFE, 0x88, 0x60, 0x4, 0x18, 0x4F, 0xFE, 0x6B, 0xD8, 0xFE, 0x8C, 0x7, 0x36, 0x19, 0x0, 0x3, 0x0, 0x22, 0x0, 0x0, 0x5, 0x64, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x6, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x27, 0x7, 0x1, 0x27, 0x21, 0x7, 0x1, 0x3, 0x21, 0x3, 0x21, 0x13, 0x23, 0x35, 0x33, 0x37, 0x21, 0x35, 0x21, 0x13, 0x33, 0x13, 0x21, 0x15, 0x21, 0x17, 0x33, 0x15, 0x23, 0x13, 0x3, 0x21, 0x55, 0x56, 0x1, 0x29, 0x3A, 0xFE, 0xCD, 0x3A, 0x2, 0x64, 0x77, 0xFD, 0xCD, 0x77, 0xFE, 0xF9, 0x83, 0x95, 0xDF, 0x3F, 0xFE, 0xE2, 0x1, 0x67, 0xD1, 0xE3, 0xD1, 0x1, 0x52, 0xFE, 0xF8, 0x3F, 0xC9, 0x80, 0x84, 0x3, 0x88, 0xF4, 0xF4, 0xFE, 0x97, 0xA6, 0xA6, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x1, 0x5C, 0xC3, 0xA6, 0xC3, 0x2, 0x28, 0xFD, 0xD8, 0xC3, 0xA6, 0xC3, 0xFE, 0xA4, 0x0, 0x2, 0x0, 0x43, 0xFF, 0xEC, 0x4, 0x8C, 0x5, 0xC4, 0x0, 0x14, 0x0, 0x29, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x3, 0x6, 0x4, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x23, 0x35, 0x21, 0x15, 0x21, 0x6, 0x15, 0x14, 0x33, 0x32, 0x36, 0x37, 0x4, 0x8C, 0xFB, 0xB7, 0x2, 0xB2, 0x37, 0xBD, 0x70, 0x5F, 0x2, 0xFD, 0x6, 0xD6, 0xF0, 0xD4, 0xE8, 0x38, 0x9B, 0x3E, 0x5, 0xFE, 0xF8, 0xD9, 0xE1, 0xF5, 0x40, 0x8F, 0x4, 0x49, 0xFD, 0x45, 0x43, 0xDA, 0x66, 0x80, 0x2, 0x3, 0x1E, 0xB2, 0x42, 0x58, 0x91, 0x5A, 0x50, 0x9F, 0xD4, 0xB0, 0xA2, 0x53, 0x4F, 0xFD, 0x97, 0xC5, 0xB6, 0xB4, 0xA4, 0x61, 0x4F, 0xB2, 0xB2, 0x43, 0x64, 0x99, 0x50, 0x63, 0x0, 0x2, 0x0, 0x66, 0xFF, 0x83, 0x4, 0xEC, 0x6, 0x17, 0x0, 0x1B, 0x0, 0x22, 0x0, 0x0, 0x1, 0x6, 0x2, 0x7, 0x15, 0x23, 0x35, 0x26, 0x0, 0x11, 0x35, 0x10, 0x0, 0x37, 0x35, 0x33, 0x15, 0x16, 0x12, 0x17, 0x23, 0x26, 0x26, 0x27, 0x11, 0x36, 0x36, 0x37, 0x25, 0x14, 0x16, 0x17, 0x11, 0x6, 0x11, 0x4, 0xEB, 0x11, 0xEA, 0xDB, 0xC3, 0xE4, 0xFE, 0xF8, 0x1, 0x8, 0xE4, 0xC3, 0xDA, 0xE9, 0x14, 0xFC, 0xE, 0x62, 0x6B, 0x6A, 0x61, 0xF, 0xFD, 0x76, 0x70, 0x7D, 0xED, 0x1, 0xDA, 0xBF, 0xFE, 0xF2, 0x1B, 0x6F, 0x70, 0x20, 0x1, 0x6C, 0x1, 0x1E, 0x76, 0x1, 0x1B, 0x1, 0x6A, 0x24, 0x5B, 0x58, 0x18, 0xFE, 0xEF, 0xC7, 0x76, 0x96, 0x15, 0xFB, 0xD1, 0x16, 0x8F, 0x74, 0xC3, 0xBA, 0xFC, 0x23, 0x4, 0x25, 0x4A, 0xFE, 0x6E, 0x0, 0x1, 0x0, 0x22, 0xFF, 0xEC, 0x4, 0x20, 0x6, 0x0, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x4, 0x20, 0x43, 0x5D, 0x97, 0x81, 0xA5, 0xF3, 0xAE, 0xAE, 0xF3, 0xA5, 0xF3, 0xBF, 0xBF, 0x27, 0x49, 0x2A, 0x2B, 0x4, 0x18, 0xAA, 0x91, 0x2, 0x60, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x1, 0xC6, 0xFE, 0x3A, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xFD, 0xB7, 0x43, 0x45, 0xA, 0x0, 0x3, 0x0, 0x35, 0xFF, 0x89, 0x4, 0xE2, 0x5, 0xC4, 0x0, 0x8, 0x0, 0xF, 0x0, 0x46, 0x0, 0x0, 0x25, 0x37, 0x35, 0x34, 0x23, 0x22, 0x7, 0x17, 0x16, 0x25, 0x22, 0x7, 0x16, 0x17, 0x34, 0x26, 0x13, 0x35, 0x26, 0x27, 0x15, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x15, 0x23, 0x35, 0x7, 0x22, 0x27, 0x15, 0x2, 0xC1, 0x38, 0x64, 0x47, 0x23, 0x2, 0x4A, 0xFE, 0xBC, 0x3A, 0x20, 0x46, 0x78, 0x35, 0x35, 0x7A, 0x52, 0x96, 0x74, 0x18, 0x3A, 0x6C, 0x8B, 0x29, 0x39, 0x75, 0xBF, 0x6, 0x57, 0x85, 0x9E, 0xE2, 0xFE, 0xEF, 0x1, 0x1B, 0xE6, 0xFC, 0x1, 0x14, 0xFC, 0x85, 0x91, 0x82, 0x80, 0xB1, 0x8B, 0xE8, 0xF2, 0xB3, 0xA1, 0x95, 0x38, 0x4C, 0x48, 0xB4, 0x2, 0x2F, 0x90, 0x3C, 0x7A, 0xB, 0xC1, 0x2B, 0x41, 0x28, 0x54, 0x40, 0xFE, 0x14, 0x8F, 0x27, 0x46, 0xFC, 0x2, 0x60, 0x5C, 0x66, 0x74, 0x74, 0xDB, 0x3B, 0x32, 0x68, 0x5F, 0x69, 0x30, 0x45, 0xCD, 0xB1, 0xB0, 0xE2, 0xFE, 0xF7, 0xB3, 0x68, 0x8B, 0x74, 0x54, 0x5C, 0x6A, 0x28, 0x43, 0xD6, 0xB3, 0x91, 0xC1, 0x25, 0x79, 0x64, 0x1, 0xA, 0x6D, 0x0, 0x2, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x4, 0xB0, 0xFB, 0x7D, 0x4, 0x83, 0xFE, 0x3B, 0xFC, 0xFE, 0x3E, 0x4, 0x83, 0x5, 0xB0, 0xCB, 0xCB, 0xFD, 0xF6, 0xFC, 0x5A, 0x3, 0xA6, 0xCC, 0x0, 0x1, 0x0, 0x28, 0x0, 0x0, 0x4, 0xC, 0x5, 0xB0, 0x0, 0x1A, 0x0, 0x0, 0x25, 0x15, 0x21, 0x1, 0x27, 0x33, 0x32, 0x36, 0x37, 0x21, 0x37, 0x21, 0x26, 0x27, 0x21, 0x37, 0x21, 0x7, 0x23, 0x16, 0x17, 0x33, 0x7, 0x23, 0x6, 0x6, 0x7, 0x3, 0x59, 0xFE, 0xE2, 0xFE, 0x3, 0x1, 0xFC, 0x70, 0x84, 0x16, 0xFD, 0xE6, 0x32, 0x1, 0xE3, 0x2F, 0xC8, 0xFE, 0xE1, 0x37, 0x3, 0xAD, 0x33, 0xD9, 0x33, 0xF, 0xCA, 0x33, 0x95, 0x15, 0xCF, 0xD9, 0xD, 0xD, 0x2, 0x52, 0x99, 0x5E, 0x4B, 0xB6, 0x96, 0x5, 0xCB, 0xB6, 0x4A, 0x66, 0xB6, 0x98, 0xBC, 0x12, 0x0, 0x1, 0x0, 0x22, 0xFF, 0xEC, 0x4, 0x52, 0x5, 0xB0, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x11, 0x7, 0x35, 0x37, 0x35, 0x7, 0x35, 0x37, 0x11, 0x33, 0x15, 0x37, 0x15, 0x7, 0x15, 0x37, 0x15, 0x7, 0x11, 0x36, 0x36, 0x37, 0x35, 0x33, 0x15, 0x2, 0x0, 0x1, 0xF4, 0x7A, 0x7C, 0xDC, 0xDC, 0xDC, 0xDC, 0xFB, 0xE2, 0xE2, 0xE2, 0xE2, 0xAC, 0xAE, 0x3, 0xFC, 0x4, 0xFE, 0xB3, 0x14, 0x14, 0x2, 0x5D, 0x57, 0xC8, 0x57, 0x89, 0x57, 0xC7, 0x57, 0x1, 0x3B, 0xD7, 0x5A, 0xC8, 0x59, 0x89, 0x5A, 0xC8, 0x5A, 0xFD, 0xFB, 0x2, 0xF4, 0xF0, 0x5E, 0x5C, 0xFE, 0xBB, 0xFE, 0x8D, 0x0, 0x3, 0x0, 0x28, 0x0, 0x0, 0x6, 0x62, 0x5, 0xA4, 0x0, 0x9, 0x0, 0x2D, 0x0, 0x39, 0x0, 0x0, 0x1, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x33, 0x1, 0x14, 0x6, 0x6, 0x23, 0x27, 0x7, 0x27, 0x7, 0x15, 0x14, 0x16, 0x33, 0x15, 0x20, 0x24, 0x27, 0x7, 0x27, 0x25, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x1E, 0x2, 0x25, 0x15, 0x37, 0x17, 0x37, 0x17, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0xD8, 0x34, 0x38, 0x29, 0x38, 0x6B, 0x4, 0xEC, 0x91, 0xCD, 0x5A, 0x81, 0xB1, 0x81, 0x2C, 0x98, 0xD6, 0xFE, 0xC3, 0xFE, 0xF3, 0x13, 0xA2, 0x6A, 0x1, 0x8, 0x7D, 0x8A, 0xA9, 0xAD, 0x9A, 0xC6, 0x96, 0x1, 0x8E, 0xC9, 0xE4, 0x5C, 0xFC, 0x69, 0x5D, 0x77, 0xC6, 0x94, 0x4D, 0x30, 0x84, 0xA1, 0x4, 0x3A, 0x4C, 0x31, 0x3F, 0x33, 0x2C, 0x5D, 0xFE, 0x99, 0x86, 0xA6, 0x4D, 0x82, 0x7A, 0x92, 0x10, 0xA, 0x98, 0x8E, 0xB4, 0xC6, 0xC8, 0x3A, 0xD4, 0x56, 0x1, 0x7, 0x8F, 0x80, 0x78, 0x98, 0xD1, 0x87, 0x12, 0x1, 0x6E, 0xA6, 0x60, 0xB8, 0x1E, 0x85, 0x78, 0xAB, 0xE, 0x63, 0x30, 0x52, 0x5F, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x5, 0x10, 0x4, 0x3A, 0x0, 0x17, 0x0, 0x0, 0x21, 0x23, 0x35, 0x12, 0x0, 0x37, 0x35, 0x33, 0x15, 0x16, 0x0, 0x11, 0x15, 0x23, 0x35, 0x26, 0x26, 0x27, 0x11, 0x23, 0x11, 0x6, 0x6, 0x15, 0x1, 0x42, 0xF2, 0x2, 0x1, 0xD, 0xD7, 0xF2, 0xDD, 0x1, 0xB, 0xF3, 0x1, 0x81, 0x73, 0xF2, 0x71, 0x83, 0xB8, 0x1, 0x1F, 0x1, 0x6B, 0x29, 0xCF, 0xCF, 0x28, 0xFE, 0x91, 0xFE, 0xDB, 0xAF, 0xB8, 0xC4, 0xF3, 0x29, 0xFD, 0x68, 0x2, 0x97, 0x2A, 0xF5, 0xC7, 0x0, 0x2, 0x0, 0x29, 0x0, 0x0, 0x5, 0x34, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x13, 0x21, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x0, 0x15, 0x14, 0x4, 0x23, 0x21, 0x15, 0x21, 0x1, 0xF2, 0x1, 0x2D, 0x94, 0x83, 0x81, 0x92, 0x11, 0xFE, 0xBE, 0xFC, 0xCD, 0xCD, 0xCD, 0xCD, 0x2, 0x2C, 0xFD, 0x1, 0x15, 0xFE, 0xE9, 0xFB, 0xFE, 0xD0, 0x1, 0x42, 0x4, 0xE4, 0xFE, 0x4, 0x8A, 0x72, 0x62, 0x9E, 0xFC, 0x3, 0xE7, 0xE7, 0xCB, 0x6B, 0xCB, 0x2, 0xC8, 0xFE, 0xFE, 0xC8, 0xD8, 0xF1, 0x6B, 0x0, 0x1, 0x0, 0x66, 0x0, 0x0, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x25, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x26, 0x26, 0x35, 0x34, 0x12, 0x37, 0x35, 0x33, 0x15, 0x37, 0x17, 0x35, 0x33, 0x15, 0x16, 0x12, 0x15, 0x23, 0x10, 0x27, 0x11, 0x23, 0x11, 0x27, 0x7, 0x11, 0x23, 0x11, 0x6, 0x11, 0x14, 0x16, 0x33, 0x21, 0x5, 0x15, 0xFB, 0x53, 0xB4, 0x56, 0x60, 0xCC, 0xAC, 0xA8, 0x3C, 0x3D, 0xA8, 0xAE, 0xCA, 0xF0, 0x88, 0xA8, 0x3D, 0x3C, 0xA8, 0x88, 0xC5, 0xA9, 0x2, 0x51, 0xC3, 0x57, 0xF1, 0x94, 0xE9, 0x1, 0x3B, 0x3F, 0xC2, 0x9D, 0x2, 0x2, 0x9D, 0xC1, 0x40, 0xFE, 0xC1, 0xEC, 0x1, 0xF, 0x6E, 0xFE, 0x83, 0x1, 0xC1, 0x4, 0x4, 0xFE, 0x3F, 0x1, 0x7E, 0x6E, 0xFE, 0xF8, 0xE3, 0xFA, 0xFF, 0xFF, 0xFB, 0x5B, 0x5, 0x8, 0xFF, 0xF9, 0x6, 0x15, 0x0, 0x27, 0x0, 0x13, 0xFA, 0xD3, 0x5, 0x14, 0x0, 0x27, 0x0, 0x13, 0xFC, 0x9D, 0x5, 0x14, 0x0, 0x7, 0x0, 0x13, 0xFE, 0x56, 0x5, 0x14, 0xFF, 0xFF, 0xFA, 0x85, 0x5, 0x8, 0x0, 0xD5, 0x6, 0x15, 0x0, 0x27, 0x0, 0x13, 0xF9, 0xFD, 0x5, 0x14, 0x0, 0x27, 0x0, 0x13, 0xFB, 0xC7, 0x5, 0x14, 0x0, 0x27, 0x0, 0x13, 0xFD, 0x80, 0x5, 0x14, 0x0, 0x7, 0x0, 0x13, 0xFF, 0x32, 0x5, 0x14, 0xFF, 0xFF, 0xFB, 0x5B, 0xFE, 0x0, 0xFF, 0xF9, 0xFF, 0xD, 0x0, 0x27, 0x0, 0x13, 0xFA, 0xD3, 0xFE, 0xC, 0x0, 0x27, 0x0, 0x13, 0xFC, 0x9D, 0xFE, 0xC, 0x0, 0x7, 0x0, 0x13, 0xFE, 0x56, 0xFE, 0xC, 0x0, 0x1, 0xFC, 0x54, 0x4, 0xDF, 0xFF, 0x3F, 0x7, 0xD7, 0x0, 0x11, 0x0, 0x0, 0x1, 0x37, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x27, 0x33, 0x7, 0x37, 0x17, 0x7, 0x17, 0x7, 0x27, 0x17, 0xFD, 0x73, 0x9, 0xD0, 0x57, 0xD9, 0xDA, 0x57, 0xD0, 0x9, 0xAF, 0xA, 0xD0, 0x58, 0xD9, 0xD9, 0x57, 0xD0, 0x9, 0x4, 0xDF, 0xF5, 0x83, 0x97, 0x72, 0x73, 0x97, 0x82, 0xF5, 0xF5, 0x83, 0x97, 0x72, 0x73, 0x98, 0x83, 0xF5, 0x0, 0x4, 0x0, 0x6A, 0xFF, 0xEC, 0x5, 0xB2, 0x5, 0xC0, 0x0, 0x3, 0x0, 0xB, 0x0, 0x27, 0x0, 0x42, 0x0, 0x0, 0x1, 0x1, 0x27, 0x1, 0x1, 0x32, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0x4, 0xCB, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0xFD, 0x20, 0x56, 0x2E, 0x4E, 0x95, 0xF9, 0xA, 0x6, 0x47, 0x6B, 0x63, 0x79, 0x9E, 0x8E, 0x5C, 0x6C, 0x61, 0xB, 0x9D, 0x97, 0x7B, 0x6E, 0x9A, 0x19, 0x1, 0xE4, 0x8B, 0x97, 0x97, 0x89, 0x8A, 0x96, 0xA9, 0x3A, 0x7A, 0x3A, 0x3C, 0x3D, 0x3C, 0x39, 0xA9, 0x94, 0x4, 0xDF, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFE, 0x77, 0x3A, 0x78, 0x2, 0x61, 0x4F, 0x77, 0x14, 0x25, 0x45, 0x69, 0x58, 0x6B, 0x73, 0x14, 0x6D, 0x4B, 0x4D, 0x82, 0x72, 0x78, 0xFE, 0xE9, 0x5A, 0x33, 0xA, 0xFC, 0xC4, 0xB1, 0x7A, 0x4D, 0x7C, 0xB1, 0x9C, 0x6B, 0x2D, 0x48, 0x5E, 0x3D, 0x4D, 0x3B, 0x5E, 0x4B, 0x29, 0x6A, 0x9C, 0x0, 0x4, 0x0, 0x6A, 0xFF, 0xEC, 0x5, 0xA6, 0x5, 0xC0, 0x0, 0x3, 0x0, 0xB, 0x0, 0x27, 0x0, 0x46, 0x0, 0x0, 0x1, 0x1, 0x27, 0x1, 0x1, 0x32, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x16, 0x15, 0x14, 0x6, 0x4, 0xCC, 0xFD, 0x39, 0x7E, 0x2, 0xC7, 0xFD, 0x20, 0x56, 0x2E, 0x4E, 0x95, 0xF9, 0xA, 0x6, 0x47, 0x6B, 0x63, 0x79, 0x9E, 0x8E, 0x5C, 0x6C, 0x61, 0xB, 0x9D, 0x97, 0x7B, 0x6E, 0x9A, 0x19, 0x1, 0xEF, 0x90, 0x8F, 0x9E, 0xC, 0x7A, 0x5F, 0x8B, 0x67, 0x78, 0x8D, 0x6E, 0x80, 0x92, 0xA3, 0x2, 0x66, 0x60, 0xF7, 0x74, 0x8B, 0x4, 0xDF, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFE, 0x77, 0x3A, 0x78, 0x2, 0x61, 0x4F, 0x77, 0x14, 0x25, 0x45, 0x69, 0x58, 0x6B, 0x73, 0x14, 0x6D, 0x4B, 0x4D, 0x82, 0x72, 0x78, 0xFE, 0xE9, 0x5A, 0x33, 0xA, 0xFC, 0xC4, 0x8A, 0x50, 0x5A, 0x3D, 0x3A, 0x1F, 0x17, 0x5F, 0x55, 0x57, 0x6C, 0x77, 0x58, 0x4F, 0x3F, 0x34, 0x37, 0x5C, 0x58, 0x5E, 0x68, 0x0, 0x3, 0x0, 0x28, 0xFF, 0xEC, 0x6, 0xD3, 0x5, 0xC5, 0x0, 0x9, 0x0, 0x15, 0x0, 0x31, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x33, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x28, 0x9C, 0x6C, 0x6B, 0x99, 0x99, 0x6B, 0x6C, 0x9C, 0x8B, 0x4A, 0x33, 0x34, 0x46, 0x46, 0x34, 0x33, 0x4A, 0x5, 0x23, 0xFC, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x12, 0x1, 0x6, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x87, 0x9D, 0xAB, 0xAC, 0x1, 0x9C, 0xB1, 0xA3, 0x89, 0x5, 0x26, 0x9F, 0x9F, 0xDC, 0x9B, 0x9B, 0x6E, 0x35, 0x47, 0x47, 0x35, 0x37, 0x49, 0x49, 0xFC, 0xEB, 0xD4, 0xFE, 0xE6, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xFA, 0xE4, 0x7D, 0xDA, 0xFE, 0xF5, 0x97, 0x0, 0x4, 0x0, 0x71, 0xFF, 0xEB, 0x5, 0x89, 0x5, 0xC5, 0x0, 0x1A, 0x0, 0x1E, 0x0, 0x2B, 0x0, 0x38, 0x0, 0x0, 0x1, 0x33, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x25, 0x1, 0x27, 0x1, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x2, 0x8, 0xA9, 0x94, 0x8A, 0x8B, 0x97, 0x97, 0x89, 0x8B, 0x95, 0xA9, 0x3A, 0x7A, 0x3A, 0x3C, 0x3D, 0x3C, 0x39, 0x2, 0x83, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0xEE, 0xA2, 0x92, 0x95, 0xA0, 0x9F, 0xFE, 0xD8, 0xA2, 0xA9, 0x49, 0x44, 0x8A, 0x45, 0x47, 0x46, 0x45, 0x4, 0x26, 0x6A, 0x9C, 0xB1, 0x7A, 0x4D, 0x7C, 0xB1, 0x9C, 0x6B, 0x2D, 0x48, 0x5E, 0x3D, 0x4D, 0x3B, 0x5E, 0x4B, 0xE2, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFC, 0x3D, 0x7B, 0xB1, 0xB1, 0x7B, 0x4E, 0x7B, 0xB1, 0xB1, 0x7B, 0x3C, 0x5E, 0xA9, 0x3F, 0x3C, 0x5E, 0x5E, 0x3C, 0x0, 0x3, 0x0, 0x6A, 0xFF, 0xF4, 0x5, 0x9F, 0x5, 0xC5, 0x0, 0x1A, 0x0, 0x1E, 0x0, 0x2F, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0x1, 0x1, 0x27, 0x1, 0x1, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x1, 0x8C, 0x8B, 0x97, 0x97, 0x89, 0x8B, 0x95, 0xA9, 0x3A, 0x7A, 0x3A, 0x3C, 0x3D, 0x3C, 0x39, 0xA9, 0x94, 0x2, 0x68, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0x1, 0x10, 0xD, 0x40, 0x70, 0x60, 0x73, 0xA4, 0x65, 0x50, 0x20, 0xA5, 0x3, 0x20, 0xB1, 0x7A, 0x4D, 0x7C, 0xB1, 0x9C, 0x6B, 0x2D, 0x48, 0x5E, 0x3D, 0x4D, 0x3B, 0x5E, 0x4B, 0x29, 0x6A, 0x9C, 0x1, 0xBF, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFA, 0xD8, 0x54, 0x60, 0x78, 0x88, 0x1, 0x98, 0xFE, 0x7A, 0x8B, 0x47, 0x1, 0xCA, 0xFD, 0x74, 0x0, 0x3, 0x0, 0x28, 0x0, 0x0, 0x6, 0x43, 0x5, 0xC5, 0x0, 0x9, 0x0, 0x15, 0x0, 0x1F, 0x0, 0x0, 0x12, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x28, 0x9C, 0x6C, 0x6B, 0x99, 0x99, 0x6B, 0x6C, 0x9C, 0x8B, 0x4A, 0x33, 0x34, 0x46, 0x46, 0x34, 0x33, 0x4A, 0x5, 0x3A, 0xFD, 0xB7, 0xFD, 0x3, 0x9C, 0xFD, 0x61, 0x2, 0x49, 0x5, 0x26, 0x9F, 0x9F, 0xDC, 0x9B, 0x9B, 0x6E, 0x35, 0x47, 0x47, 0x35, 0x37, 0x49, 0x49, 0xFD, 0x7A, 0xFD, 0x97, 0x5, 0xB0, 0xCB, 0xFE, 0x4E, 0x0, 0x2, 0x0, 0x4C, 0xFF, 0xEB, 0x3, 0x91, 0x5, 0xF9, 0x0, 0x18, 0x0, 0x20, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x35, 0x6, 0x23, 0x35, 0x32, 0x37, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x2, 0x7, 0x15, 0x14, 0x16, 0x33, 0x3, 0x36, 0x35, 0x35, 0x34, 0x23, 0x22, 0x7, 0x2, 0xDB, 0xEB, 0xE3, 0x5D, 0x64, 0x67, 0x5A, 0xB5, 0x9B, 0x86, 0xAE, 0xCB, 0xBF, 0x5B, 0x79, 0xD4, 0xA5, 0x4C, 0x56, 0x3, 0x15, 0xF7, 0xCD, 0xD, 0x13, 0xBB, 0x18, 0x1, 0xDE, 0xC3, 0xDC, 0xB1, 0x9A, 0x2A, 0x9E, 0xFE, 0xA2, 0x6D, 0x4F, 0x7D, 0x8A, 0x2, 0x43, 0xA1, 0xEE, 0x17, 0x80, 0xB2, 0x0, 0x4, 0x0, 0x90, 0x0, 0x0, 0x7, 0xC3, 0x5, 0xC0, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x24, 0x0, 0x28, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x11, 0x21, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x11, 0x1, 0x15, 0x21, 0x35, 0x5, 0xE, 0xBB, 0x9F, 0xA1, 0xBA, 0xB9, 0xFE, 0xC0, 0xBC, 0xAF, 0x55, 0x58, 0x56, 0x54, 0x55, 0x57, 0x56, 0x55, 0xFE, 0xC6, 0xFE, 0xF5, 0xFE, 0xC, 0xF4, 0x1, 0xC, 0x1, 0xF5, 0x4, 0x6, 0xFD, 0x9F, 0x4, 0x60, 0x9B, 0xC5, 0xC5, 0x9B, 0x53, 0x9B, 0xC4, 0xC4, 0x9B, 0x59, 0x74, 0x74, 0x59, 0x53, 0x58, 0x74, 0x74, 0x58, 0x1, 0x50, 0xFA, 0x50, 0x4, 0xB, 0xFB, 0xF5, 0x5, 0xB0, 0xFB, 0xF3, 0x4, 0xD, 0xFC, 0x82, 0x95, 0x95, 0x0, 0x4, 0x0, 0x57, 0xFF, 0xEB, 0x5, 0xE2, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x24, 0x0, 0x2E, 0x0, 0x0, 0x4, 0x24, 0x2, 0x35, 0x34, 0x12, 0x24, 0x20, 0x4, 0x12, 0x15, 0x14, 0x2, 0x4, 0x26, 0x24, 0x12, 0x35, 0x34, 0x2, 0x24, 0x20, 0x4, 0x2, 0x15, 0x14, 0x12, 0x4, 0x13, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x14, 0x6, 0x23, 0x2, 0x59, 0xFE, 0xBE, 0xC0, 0xC0, 0x1, 0x42, 0x1, 0x88, 0x1, 0x41, 0xC0, 0xC0, 0xFE, 0xBF, 0x22, 0x1, 0xB, 0x9E, 0x9E, 0xFE, 0xF5, 0xFE, 0xBC, 0xFE, 0xF5, 0x9F, 0x9F, 0x1, 0xB, 0x2B, 0xB7, 0x53, 0x4C, 0x4C, 0x53, 0xB7, 0x97, 0x1, 0x4E, 0x91, 0xA2, 0xA3, 0x90, 0x15, 0xC7, 0x1, 0x54, 0xD3, 0xD4, 0x1, 0x52, 0xC5, 0xC5, 0xFE, 0xAE, 0xD4, 0xD3, 0xFE, 0xAC, 0xC7, 0x7D, 0xA5, 0x1, 0x1C, 0xB0, 0xB1, 0x1, 0x19, 0xA4, 0xA4, 0xFE, 0xE7, 0xB1, 0xB0, 0xFE, 0xE4, 0xA5, 0x3, 0x8E, 0xFE, 0xF3, 0x4A, 0x38, 0x39, 0x52, 0xFE, 0x6C, 0xFE, 0xC7, 0x3, 0x52, 0x97, 0xF0, 0x92, 0x0, 0x2, 0x0, 0x95, 0x0, 0x0, 0x5, 0x4B, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x3, 0x13, 0x27, 0x21, 0x11, 0x23, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x17, 0x37, 0x5, 0x3, 0x13, 0x15, 0x21, 0x27, 0x7, 0x21, 0x1, 0x91, 0x1, 0x4, 0x88, 0x89, 0x80, 0x8D, 0x15, 0xDE, 0xA3, 0xFE, 0xD2, 0xFC, 0x2, 0x0, 0xFB, 0x1, 0x12, 0x8E, 0x7D, 0x4F, 0x64, 0x1, 0x1, 0xE1, 0xDE, 0xFE, 0xFA, 0x5C, 0x5D, 0xFE, 0xFB, 0x4, 0xE5, 0xFE, 0x17, 0x89, 0x68, 0x70, 0x87, 0x1, 0xFB, 0x28, 0x1, 0x38, 0xEC, 0xFD, 0xCF, 0x5, 0xB0, 0xE0, 0xD7, 0x92, 0xC6, 0x34, 0x6E, 0x8D, 0x1, 0xFE, 0xBA, 0xFE, 0xC8, 0xD, 0x86, 0x86, 0x0, 0x4, 0x0, 0x95, 0xFE, 0x98, 0x4, 0xDE, 0x6, 0xF4, 0x0, 0x5, 0x0, 0xB, 0x0, 0xE, 0x0, 0x24, 0x0, 0x0, 0x1, 0x11, 0x33, 0x13, 0x26, 0x23, 0x5, 0x34, 0x27, 0x3, 0x36, 0x36, 0x1, 0x13, 0x23, 0x9, 0x2, 0x23, 0x13, 0x23, 0x11, 0x21, 0x32, 0x17, 0x37, 0x27, 0x37, 0x5, 0x7, 0x16, 0x11, 0x14, 0x6, 0x7, 0x1, 0x15, 0x1, 0x91, 0xC1, 0xA2, 0x2B, 0x34, 0x1, 0x11, 0x21, 0x7D, 0x4F, 0x4F, 0xFD, 0xEB, 0x7D, 0x7D, 0x2, 0x3F, 0xFE, 0xE6, 0xFE, 0xCB, 0xAA, 0x79, 0xBB, 0x2, 0x0, 0x58, 0x4A, 0x1E, 0xC4, 0x4A, 0x1, 0x4F, 0x52, 0xCA, 0x8E, 0x7D, 0x1, 0x47, 0x4, 0xE5, 0xFE, 0x17, 0x1, 0xDF, 0xA, 0xF8, 0x53, 0x38, 0xFE, 0x95, 0x1A, 0x77, 0xFD, 0x21, 0x1, 0x72, 0xFD, 0xCF, 0x2, 0x1E, 0xFC, 0x7A, 0x1, 0x68, 0x5, 0xB0, 0xE, 0x59, 0x51, 0xA8, 0x9A, 0xEF, 0x6D, 0xFE, 0xFB, 0x92, 0xC6, 0x34, 0xFD, 0xA0, 0xD, 0x0, 0x2, 0x0, 0x65, 0x3, 0x8B, 0x4, 0xB3, 0x5, 0xB9, 0x0, 0xC, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x23, 0x11, 0x3, 0x25, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x15, 0x23, 0x34, 0x22, 0x15, 0x14, 0x1E, 0x2, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x3, 0x80, 0x8C, 0x6E, 0x88, 0x91, 0x91, 0x83, 0x6F, 0x87, 0xFD, 0xF7, 0x2E, 0x44, 0x61, 0x68, 0x6F, 0x62, 0xD1, 0x6E, 0xC6, 0x24, 0xB5, 0x62, 0x77, 0x65, 0x5F, 0x82, 0x6E, 0x2, 0x71, 0x6E, 0x3, 0x95, 0x1, 0x5A, 0xFE, 0xA6, 0x2, 0x1B, 0xFE, 0x83, 0x1, 0x7D, 0xFD, 0xE5, 0x1, 0x4B, 0xFE, 0xB5, 0x91, 0x1B, 0x24, 0xF, 0x16, 0x49, 0x4C, 0x44, 0x56, 0xAA, 0x4E, 0x3E, 0x19, 0x20, 0x2C, 0x4C, 0x47, 0x48, 0x54, 0x54, 0x58, 0x4F, 0x0, 0x3, 0x0, 0x65, 0x3, 0x96, 0x5, 0x4B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0xD, 0x0, 0x19, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x1, 0x11, 0x33, 0x11, 0x33, 0x15, 0x21, 0x11, 0x21, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x1, 0xEB, 0x89, 0x76, 0x87, 0x1, 0x86, 0x2, 0x17, 0x76, 0xD3, 0xFC, 0xF6, 0x1, 0x48, 0xD3, 0xB1, 0xB1, 0xD3, 0x5, 0x51, 0xFE, 0x45, 0x1, 0xBB, 0x5F, 0xFD, 0xE6, 0x2, 0x1A, 0xFE, 0x45, 0x5F, 0x2, 0x1A, 0x5F, 0x78, 0x5F, 0x85, 0x5F, 0x0, 0x2, 0x0, 0x6E, 0x3, 0x95, 0x4, 0x57, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x14, 0x0, 0x0, 0x1, 0x15, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x1, 0x11, 0x3, 0x23, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x1, 0xF9, 0x89, 0x76, 0x8C, 0x3, 0x7B, 0x7D, 0x3D, 0x7D, 0x6E, 0x88, 0x81, 0x85, 0x85, 0x5, 0xB0, 0x5F, 0xFE, 0x45, 0x1, 0xBB, 0x5F, 0xFD, 0xE5, 0x1, 0x74, 0xFE, 0x8C, 0x1, 0x74, 0xFE, 0x8C, 0x2, 0x1B, 0xFE, 0x83, 0x1, 0x7D, 0xFD, 0xE5, 0x0, 0x1, 0x0, 0x12, 0xFE, 0x98, 0x5, 0x1D, 0x6, 0xF4, 0x0, 0x10, 0x0, 0x0, 0x21, 0x27, 0x3, 0x23, 0x1, 0x1, 0x21, 0x13, 0x13, 0x27, 0x37, 0x5, 0x1, 0x17, 0x1, 0x21, 0x1, 0x2, 0x1C, 0x3D, 0xB7, 0xAA, 0x1, 0x8, 0xFE, 0x8C, 0x1, 0x15, 0xDA, 0xFE, 0xC3, 0x49, 0x1, 0x4F, 0xFE, 0x82, 0x40, 0x1, 0x71, 0x1, 0x16, 0xFD, 0xF4, 0xAB, 0xFD, 0xED, 0x3, 0xB, 0x4, 0xD, 0xFD, 0x5D, 0x2, 0xEE, 0x51, 0xA8, 0x9A, 0xFB, 0xAB, 0xC7, 0x4, 0x72, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x51, 0xFE, 0x75, 0x4, 0x42, 0x5, 0xB0, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x35, 0x33, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x3D, 0x77, 0xE3, 0x92, 0xFC, 0x82, 0x6E, 0x80, 0x88, 0x95, 0x93, 0x8E, 0x1, 0x30, 0xFE, 0xCF, 0x1, 0x1, 0x2D, 0xFD, 0xBE, 0x3, 0x99, 0x1, 0xFE, 0xAA, 0x1, 0x55, 0x1, 0xFE, 0xA3, 0xBB, 0xD0, 0xFE, 0xDA, 0xFE, 0x75, 0x58, 0xBB, 0x95, 0x58, 0x87, 0x81, 0x69, 0x92, 0x79, 0xAE, 0x1, 0x1D, 0xCA, 0x1, 0x1E, 0xCA, 0x9B, 0xFE, 0xB3, 0x9D, 0xFE, 0xAE, 0x1D, 0xDE, 0xBD, 0xCC, 0xE0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x30, 0x0, 0x0, 0x0, 0x3, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x6, 0xEF, 0x0, 0xB, 0x0, 0xE, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x14, 0x16, 0x17, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x1, 0x3, 0x3, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x7, 0x1, 0x2, 0x39, 0x35, 0x2C, 0x1F, 0x2B, 0x35, 0x3E, 0x64, 0x3E, 0x1, 0x45, 0xD4, 0xD3, 0x2, 0x64, 0x77, 0xFD, 0xCC, 0x76, 0xFE, 0xF8, 0x2, 0x11, 0x57, 0x7E, 0xBE, 0x7E, 0x57, 0x2, 0x14, 0x6, 0x1F, 0x28, 0x41, 0x6, 0x6, 0x40, 0x29, 0x2D, 0x44, 0x44, 0xFB, 0xD3, 0x2, 0x5E, 0xFD, 0xA2, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x5, 0x79, 0x3C, 0x6A, 0x56, 0x7A, 0x7A, 0x56, 0x69, 0x3C, 0xFA, 0x86, 0x0, 0x2, 0x0, 0x97, 0xFF, 0xEC, 0x4, 0x92, 0x4, 0x4E, 0x0, 0x13, 0x0, 0x1A, 0x0, 0x0, 0x25, 0x17, 0x6, 0x23, 0x22, 0x26, 0x26, 0x10, 0x36, 0x36, 0x33, 0x32, 0x0, 0x17, 0x15, 0x21, 0x11, 0x16, 0x33, 0x32, 0x3, 0x22, 0x7, 0x11, 0x21, 0x11, 0x26, 0x4, 0x13, 0x2, 0xB8, 0xBA, 0x91, 0xEE, 0x8D, 0x99, 0xF0, 0x83, 0xCC, 0x1, 0x1D, 0x6, 0xFD, 0x0, 0x76, 0x9B, 0xC6, 0xC6, 0x95, 0x7C, 0x2, 0x1C, 0x73, 0xC6, 0x68, 0x72, 0x98, 0xFF, 0x1, 0x34, 0xFF, 0x98, 0xFE, 0xD4, 0xDF, 0x41, 0xFE, 0xB8, 0x6E, 0x3, 0xA4, 0x7A, 0xFE, 0xEB, 0x1, 0x1E, 0x71, 0x0, 0x1, 0x0, 0x35, 0x0, 0x0, 0x3, 0xD1, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x33, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x35, 0x2, 0xA0, 0xFD, 0xB6, 0x2, 0x4A, 0xFC, 0xCB, 0x1, 0xB2, 0xCA, 0x2, 0x69, 0xFA, 0x50, 0x0, 0x4, 0x0, 0x65, 0x3, 0x96, 0x5, 0xE4, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xC, 0x0, 0x18, 0x0, 0x20, 0x0, 0x0, 0x1, 0x27, 0x7, 0x27, 0x23, 0x15, 0x23, 0x11, 0x21, 0x15, 0x23, 0x15, 0x33, 0x25, 0x17, 0x37, 0x33, 0x3, 0x13, 0x23, 0x27, 0x7, 0x23, 0x13, 0x3, 0x3, 0x27, 0x23, 0x7, 0x23, 0x13, 0x33, 0x13, 0x2, 0xFF, 0x50, 0x50, 0xD4, 0xB1, 0x75, 0x1, 0x48, 0xD3, 0xB1, 0x2, 0xF5, 0x6E, 0x6F, 0x83, 0xAD, 0xB1, 0x82, 0x73, 0x72, 0x82, 0xB0, 0xAC, 0xB6, 0x28, 0xE4, 0x28, 0x74, 0xD5, 0x72, 0xD4, 0x4, 0x5C, 0xD7, 0xD7, 0x11, 0xD7, 0x2, 0x1A, 0x5F, 0x85, 0xE3, 0xBA, 0xBA, 0xFE, 0xF6, 0xFE, 0xF1, 0xBF, 0xBF, 0x1, 0xF, 0x1, 0xA, 0xFD, 0xE7, 0x6B, 0x6B, 0x2, 0x19, 0xFD, 0xE7, 0x0, 0x4, 0x0, 0x6A, 0xFF, 0xEC, 0x7, 0xA0, 0x6, 0x88, 0x0, 0x2, 0x0, 0x6, 0x0, 0xE, 0x0, 0x32, 0x0, 0x0, 0x1, 0x3, 0x3, 0x25, 0x1, 0x27, 0x1, 0x1, 0x27, 0x21, 0x7, 0x23, 0x1, 0x33, 0x1, 0x1, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x2, 0x82, 0x7A, 0x7D, 0x4, 0x4E, 0xFD, 0x39, 0x7D, 0x2, 0xC7, 0xFD, 0x98, 0x43, 0xFE, 0xAA, 0x43, 0xAE, 0x1, 0x52, 0x97, 0x1, 0x4F, 0x3, 0x59, 0x4E, 0x66, 0x98, 0x9F, 0xA7, 0x8B, 0xA7, 0xA2, 0x8, 0xA2, 0x1, 0x54, 0x5B, 0x8C, 0x63, 0x53, 0xA3, 0x92, 0xA4, 0x9C, 0xA3, 0xC4, 0xA3, 0xB, 0x67, 0x52, 0x9B, 0x4, 0x66, 0x1, 0x60, 0xFE, 0xA0, 0x79, 0xFB, 0x8E, 0x49, 0x4, 0x72, 0xFD, 0xF8, 0xBF, 0xBF, 0x3, 0x68, 0xFC, 0x98, 0xFD, 0xBE, 0x30, 0x3B, 0x23, 0x34, 0x78, 0x71, 0x62, 0x88, 0xA3, 0x6F, 0x2D, 0x5E, 0x66, 0x32, 0x3F, 0x1C, 0x37, 0x76, 0x6C, 0x6A, 0x8A, 0xA7, 0x7D, 0x58, 0x45, 0x0, 0x4, 0x0, 0x57, 0xFF, 0xEC, 0x7, 0xB8, 0x3, 0x80, 0x0, 0x33, 0x0, 0x3D, 0x0, 0x47, 0x0, 0x51, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x20, 0x27, 0x6, 0x20, 0x27, 0x6, 0x23, 0x35, 0x32, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x32, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x32, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x33, 0x1, 0x14, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x14, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x5, 0x14, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0xB8, 0xAE, 0x8D, 0x8D, 0xFE, 0xA4, 0x8D, 0x8D, 0xFE, 0xA4, 0x8C, 0x8D, 0xAE, 0x55, 0x41, 0x7B, 0x75, 0xAA, 0xAB, 0x75, 0x7B, 0x41, 0xAA, 0x42, 0x7B, 0x75, 0xAA, 0xAB, 0x75, 0x7B, 0x41, 0xAA, 0x42, 0x7B, 0x75, 0xAA, 0xAB, 0x75, 0x7B, 0x41, 0x55, 0xF9, 0x91, 0x49, 0x48, 0x23, 0x26, 0x25, 0x23, 0x2, 0x76, 0x48, 0x49, 0x23, 0x26, 0x25, 0x23, 0x2, 0x76, 0x48, 0x49, 0x23, 0x26, 0x25, 0x23, 0x14, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0xC3, 0x11, 0x99, 0xDB, 0x88, 0xC4, 0xC4, 0x88, 0xDB, 0x99, 0x11, 0x11, 0x99, 0xDB, 0x88, 0xC4, 0xC4, 0x88, 0xDB, 0x99, 0x11, 0x11, 0x99, 0xDB, 0x88, 0xC4, 0xC4, 0x88, 0xDB, 0x99, 0x11, 0x1, 0x84, 0xB0, 0x5D, 0x5E, 0xAF, 0x3B, 0x4F, 0x4F, 0x3B, 0xAF, 0x5E, 0x5D, 0xB0, 0x3B, 0x4F, 0x4F, 0x3B, 0xAF, 0x5E, 0x5D, 0xB0, 0x3B, 0x4F, 0x4F, 0xFF, 0xFF, 0x0, 0x93, 0x0, 0x0, 0x6, 0xA6, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0xA1, 0x3, 0xF8, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFF, 0xF7, 0x6, 0x3B, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0xA3, 0x3, 0x97, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFF, 0xF5, 0x8, 0x23, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0x43, 0x5, 0x79, 0x0, 0x0, 0x0, 0x27, 0x4, 0x83, 0x1, 0x4B, 0x0, 0x0, 0x0, 0x7, 0x7, 0x42, 0x3, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFF, 0xF5, 0x6, 0x57, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0x9D, 0x3, 0xAE, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xF5, 0x7, 0x7, 0x5, 0xB8, 0x0, 0x27, 0x7, 0x41, 0x0, 0x1C, 0x2, 0x98, 0x0, 0x27, 0x4, 0x83, 0x1, 0xFD, 0x0, 0x0, 0x0, 0x7, 0x7, 0x9D, 0x4, 0x5E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFF, 0xF5, 0x6, 0x51, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0x9F, 0x3, 0xA3, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xF5, 0x7, 0x4, 0x5, 0xB8, 0x0, 0x27, 0x7, 0x41, 0x0, 0x1C, 0x2, 0x98, 0x0, 0x27, 0x4, 0x83, 0x1, 0xFC, 0x0, 0x0, 0x0, 0x7, 0x7, 0x9F, 0x4, 0x56, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xF5, 0x6, 0xD7, 0x5, 0xB8, 0x0, 0x27, 0x7, 0x9D, 0x0, 0x24, 0x2, 0x98, 0x0, 0x27, 0x4, 0x83, 0x1, 0xA6, 0x0, 0x0, 0x0, 0x7, 0x7, 0x9F, 0x4, 0x29, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x52, 0xFF, 0xF5, 0x7, 0x3A, 0x5, 0xAD, 0x0, 0x27, 0x7, 0x9E, 0x0, 0x1D, 0x2, 0x98, 0x0, 0x27, 0x4, 0x83, 0x2, 0xC, 0x0, 0x0, 0x0, 0x7, 0x7, 0x9F, 0x4, 0x8C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFF, 0xF5, 0x6, 0x29, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x27, 0x7, 0xA0, 0x3, 0x70, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x49, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x51, 0xFF, 0xF5, 0x6, 0x76, 0x5, 0xAD, 0x0, 0x27, 0x7, 0x9F, 0x0, 0x2, 0x2, 0x98, 0x0, 0x27, 0x7, 0xA0, 0x3, 0xBD, 0x0, 0x0, 0x0, 0x7, 0x4, 0x83, 0x1, 0x96, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x59, 0xFF, 0xF5, 0x5, 0xCB, 0x5, 0x9A, 0x0, 0x27, 0x7, 0x42, 0xFF, 0xD8, 0x2, 0x86, 0x0, 0x27, 0x4, 0x83, 0x0, 0xFB, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA2, 0x3, 0x21, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xF5, 0x6, 0x68, 0x5, 0xB4, 0x0, 0x27, 0x7, 0x9D, 0x0, 0x1D, 0x2, 0x94, 0x0, 0x27, 0x4, 0x83, 0x1, 0xA8, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA2, 0x3, 0xBE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xF5, 0x6, 0x5C, 0x5, 0xA8, 0x0, 0x27, 0x7, 0x9F, 0x0, 0xC, 0x2, 0x93, 0x0, 0x27, 0x4, 0x83, 0x1, 0x8C, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA2, 0x3, 0xB2, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x59, 0xFF, 0xF5, 0x6, 0x1A, 0x5, 0xA3, 0x0, 0x27, 0x7, 0xA1, 0x0, 0x22, 0x2, 0x8E, 0x0, 0x27, 0x4, 0x83, 0x1, 0x33, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA2, 0x3, 0x70, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0x0, 0x6D, 0x4, 0xBC, 0x5, 0xAC, 0x0, 0x27, 0x7, 0x42, 0x0, 0x12, 0x2, 0x98, 0x0, 0x7, 0x4, 0x83, 0x1, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x3, 0xBD, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x2, 0x1D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x5, 0xDB, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x27, 0x0, 0x2E, 0x2, 0x1D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x4, 0x3B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x7, 0x56, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x3B, 0x2, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x1D, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x6, 0xC5, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3B, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x5, 0x25, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x8, 0xE2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3B, 0x0, 0x0, 0x0, 0x27, 0x0, 0x2E, 0x5, 0x25, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x7, 0x42, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0xA, 0xFF, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3B, 0x0, 0x0, 0x0, 0x27, 0x0, 0x2E, 0x5, 0x25, 0x0, 0x0, 0x0, 0x27, 0x0, 0x2E, 0x7, 0x42, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x9, 0x5F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x7, 0x31, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x3D, 0x2, 0x47, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x28, 0x0, 0x0, 0x4, 0xE9, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3D, 0xFF, 0x0, 0xFF, 0xFF, 0x0, 0x28, 0x0, 0x0, 0x6, 0xBC, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3D, 0xFF, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x5, 0x1C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x28, 0x0, 0x0, 0x8, 0xD9, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3D, 0xFF, 0x0, 0x0, 0x27, 0x0, 0x2E, 0x5, 0x1C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2E, 0x7, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x4, 0x36, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x31, 0xF, 0x0, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEC, 0x4, 0xEB, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x28, 0xFF, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x4, 0xE1, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x29, 0xF, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x6, 0x7A, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x32, 0xF, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x1, 0x92, 0x5, 0xD5, 0x0, 0x6, 0x0, 0x4E, 0x1, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x3, 0x9E, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x1, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x2, 0xD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x5, 0xA9, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x1, 0x0, 0x0, 0x27, 0x0, 0x4E, 0x2, 0xD, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x4, 0x18, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x5, 0xE8, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x1, 0x0, 0x0, 0x7, 0x0, 0x5B, 0x2, 0xD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x3, 0xDE, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5B, 0x3, 0x0, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x5, 0x8A, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x5B, 0x3, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x3, 0xF9, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x7, 0x95, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x5B, 0x3, 0x0, 0x0, 0x27, 0x0, 0x4E, 0x3, 0xF9, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x6, 0x4, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x9, 0xA1, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x5B, 0x3, 0x0, 0x0, 0x27, 0x0, 0x4E, 0x3, 0xF9, 0x0, 0x0, 0x0, 0x27, 0x0, 0x4E, 0x6, 0x4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x8, 0x10, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x5, 0xF6, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x1, 0x0, 0x0, 0x7, 0x0, 0x5D, 0x2, 0xD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x3, 0xEC, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5D, 0x3, 0x0, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0x9B, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x5D, 0x3, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x4, 0xA, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x7, 0xA7, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x5D, 0x3, 0x0, 0x0, 0x27, 0x0, 0x4E, 0x4, 0xA, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4E, 0x6, 0x16, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x1, 0x71, 0x6, 0x0, 0x0, 0x6, 0x0, 0x51, 0xF2, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x48, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x4, 0x6, 0x0, 0x0, 0x6, 0x0, 0x49, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0x0, 0x0, 0x6, 0x7B, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x52, 0x1, 0x0, 0x0, 0x3, 0x0, 0x68, 0x0, 0x0, 0x6, 0xCC, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x13, 0x0, 0x23, 0x0, 0x0, 0x25, 0x11, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x17, 0x1, 0x11, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x1, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x3, 0x1F, 0x1D, 0xCD, 0xCE, 0x2, 0xCB, 0xD5, 0x1, 0xE, 0x17, 0xD2, 0xD2, 0xC6, 0xD1, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0x95, 0x1, 0x6A, 0x1, 0x24, 0x1, 0x48, 0x1, 0x24, 0x1, 0x6A, 0xFE, 0x95, 0xFE, 0xD0, 0xCA, 0x4, 0x1B, 0xEF, 0xED, 0x56, 0xE0, 0xFE, 0xFA, 0x3, 0x4, 0x1B, 0xFB, 0xE5, 0x1, 0x2, 0xE7, 0x4C, 0xE2, 0x1, 0x4, 0xFB, 0x1B, 0x1, 0x77, 0x1, 0x3C, 0x4A, 0x1, 0x3D, 0x1, 0x76, 0xFE, 0x8A, 0xFE, 0xC3, 0x4A, 0xFE, 0xC4, 0xFE, 0x89, 0x0, 0x3, 0x0, 0x99, 0x0, 0x0, 0x4, 0xF4, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1C, 0x0, 0x26, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x37, 0x35, 0x34, 0x26, 0x23, 0x3, 0x15, 0x33, 0x36, 0x12, 0x37, 0x35, 0x34, 0x26, 0x27, 0x23, 0x15, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x23, 0x1, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x1, 0x8C, 0x75, 0xDB, 0x4, 0x71, 0x65, 0x7E, 0xCF, 0xDA, 0xD9, 0x1, 0xD2, 0xD1, 0xE0, 0x88, 0xAE, 0xD7, 0x1, 0xDA, 0xB8, 0xFE, 0x91, 0x1, 0xCC, 0x1, 0x25, 0x1, 0x6A, 0xFE, 0x94, 0xFE, 0xD0, 0x3, 0xF3, 0xFD, 0xC6, 0xFD, 0x38, 0x8D, 0x78, 0xFD, 0x2B, 0x68, 0x1, 0x1, 0xB, 0xEC, 0x51, 0xFC, 0xFD, 0x2, 0x6C, 0x1, 0xE0, 0xBC, 0x32, 0xBF, 0xE2, 0xFE, 0xE2, 0x5, 0xB0, 0xFE, 0x8A, 0xFE, 0xC3, 0x4A, 0xFE, 0xC4, 0xFE, 0x89, 0x0, 0x5, 0x0, 0x6A, 0x0, 0x0, 0x7, 0x87, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x1C, 0x0, 0x24, 0x0, 0x38, 0x0, 0x48, 0x0, 0x0, 0x25, 0x35, 0x23, 0x26, 0x26, 0x27, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x23, 0x6, 0x6, 0x7, 0x15, 0x14, 0x12, 0x33, 0x1, 0x11, 0x33, 0x32, 0x37, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x22, 0x7, 0x15, 0x10, 0x17, 0x5, 0x15, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x26, 0x23, 0x23, 0x15, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x23, 0x1, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x3, 0x7F, 0x2C, 0xB6, 0xD9, 0x1, 0xDB, 0xAF, 0x32, 0x8D, 0xD0, 0xD1, 0x2, 0xDB, 0xDB, 0x1, 0x6D, 0x22, 0xDB, 0x4, 0x71, 0x65, 0xFE, 0xE2, 0x2B, 0xD0, 0x6, 0xD7, 0x1, 0x1D, 0x7A, 0xDB, 0xDB, 0xD4, 0xD6, 0x86, 0x35, 0xAE, 0xD8, 0x1, 0xDB, 0xB8, 0xFE, 0x6A, 0xFE, 0xD0, 0xFE, 0x95, 0x1, 0x6A, 0x1, 0x24, 0x2, 0x1, 0x1, 0x24, 0x1, 0x6A, 0xFE, 0x95, 0xFE, 0xD0, 0xB6, 0x68, 0x1, 0xE0, 0xBD, 0x31, 0xBF, 0xE2, 0x6C, 0x2, 0xF9, 0xF6, 0x56, 0xF0, 0xFE, 0xF3, 0x3, 0x3D, 0xFD, 0xC6, 0xFD, 0x38, 0x8D, 0x78, 0xFD, 0xC6, 0x2, 0x3A, 0xF4, 0x40, 0xFE, 0xFF, 0x5, 0x9B, 0x68, 0x1, 0xD, 0xF0, 0x4C, 0xFD, 0xFE, 0x6C, 0x1, 0xE0, 0xBD, 0x31, 0xBF, 0xE2, 0xFE, 0xE2, 0x1, 0x77, 0x1, 0x3C, 0x4A, 0x1, 0x3D, 0x1, 0x76, 0xFE, 0x8A, 0xFE, 0xC3, 0x4A, 0xFE, 0xC4, 0xFE, 0x89, 0x0, 0x1, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0xCD, 0x5, 0xC4, 0x0, 0x1A, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x20, 0x0, 0x4E, 0xF3, 0x13, 0x8B, 0xA6, 0xB4, 0xA1, 0xB2, 0xB0, 0x9E, 0x89, 0x11, 0xF3, 0x16, 0x1, 0x12, 0x1, 0x3, 0x1, 0x10, 0x1, 0x41, 0x4, 0xFE, 0xC3, 0xFD, 0xEA, 0xFE, 0xE8, 0x1, 0xD9, 0x8E, 0x9C, 0x1, 0x13, 0xD9, 0x7C, 0xE6, 0x1, 0x4, 0xA2, 0x8D, 0xDA, 0x1, 0x18, 0xFE, 0x93, 0xFE, 0xCD, 0x89, 0xFE, 0xC7, 0xFE, 0x8A, 0x1, 0x1A, 0x0, 0x1, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x3B, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x1, 0x66, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0x0, 0x1, 0x0, 0x66, 0xFE, 0x98, 0x4, 0xE6, 0x5, 0xC4, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x37, 0x35, 0x4, 0xD6, 0xF3, 0x80, 0xB5, 0xFE, 0xF5, 0xFE, 0xC3, 0x1, 0x43, 0x1, 0x12, 0x1, 0x3, 0x1, 0x12, 0x16, 0xF3, 0x11, 0x89, 0x9E, 0xB0, 0xB2, 0xA1, 0xB4, 0xC6, 0x6F, 0x1, 0xDC, 0xFC, 0xBC, 0x1, 0x9E, 0x4A, 0x1, 0x76, 0x1, 0x39, 0x7A, 0x1, 0x3A, 0x1, 0x75, 0xFE, 0xE8, 0xDA, 0x8D, 0xA2, 0xFE, 0xFC, 0xE6, 0x7C, 0xD9, 0xFE, 0xED, 0x7F, 0xAE, 0x0, 0x1, 0x0, 0x3C, 0x0, 0x0, 0x6, 0x10, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x1, 0x37, 0x1, 0x11, 0x33, 0x11, 0x1, 0x17, 0x1, 0x2, 0xB6, 0xFD, 0x86, 0xB0, 0x1, 0xBF, 0xF3, 0x1, 0xC8, 0xAA, 0xFD, 0x86, 0x2, 0xA4, 0xAD, 0xFE, 0x17, 0x4, 0x48, 0xFB, 0xB5, 0x1, 0xEC, 0xB4, 0xFD, 0x63, 0x0, 0x4, 0x0, 0x99, 0x0, 0x0, 0x4, 0xF9, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x18, 0x0, 0x2C, 0x0, 0x36, 0x0, 0x0, 0x1, 0x11, 0x36, 0x35, 0x35, 0x34, 0x26, 0x3, 0x15, 0x33, 0x36, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x23, 0x15, 0x33, 0x4, 0x17, 0x15, 0x14, 0x6, 0x7, 0x15, 0x33, 0x32, 0x12, 0x35, 0x35, 0x10, 0x2, 0x23, 0x23, 0x15, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x7, 0x5, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x1, 0x8C, 0x83, 0x40, 0x43, 0x6A, 0x88, 0x9D, 0x1, 0x9F, 0x82, 0x6F, 0x17, 0x1, 0x17, 0x5, 0x97, 0x9C, 0xD2, 0xDC, 0xF3, 0xE8, 0xDA, 0xDF, 0x8F, 0xC1, 0xEF, 0x1, 0xF0, 0xCA, 0xFE, 0x87, 0x1, 0xD2, 0x1, 0x29, 0x1, 0x65, 0xFE, 0x9A, 0xFE, 0xCB, 0x3, 0x62, 0xFE, 0xF6, 0x1, 0x71, 0x1E, 0x45, 0x35, 0xFE, 0x68, 0x50, 0x1, 0x90, 0xAF, 0x3A, 0xBC, 0x8B, 0x4B, 0x6, 0xF9, 0x27, 0x80, 0x80, 0xE0, 0x53, 0x1, 0x22, 0xFA, 0x4C, 0x1, 0x1, 0x1, 0x20, 0x55, 0x1, 0xF0, 0xE4, 0x39, 0xE6, 0xEC, 0x1, 0xEA, 0x5, 0xB0, 0xFE, 0x8A, 0xFE, 0xC3, 0x4A, 0xFE, 0xC4, 0xFE, 0x89, 0x0, 0x7, 0x0, 0x6A, 0x0, 0x0, 0x8, 0x37, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x25, 0x0, 0x2D, 0x0, 0x35, 0x0, 0x47, 0x0, 0x5B, 0x0, 0x6B, 0x0, 0x0, 0x25, 0x35, 0x23, 0x26, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x23, 0x6, 0x2, 0x7, 0x15, 0x14, 0x12, 0x33, 0x37, 0x35, 0x23, 0x24, 0x27, 0x35, 0x10, 0x25, 0x33, 0x35, 0x23, 0x6, 0x6, 0x7, 0x15, 0x14, 0x16, 0x33, 0x1, 0x11, 0x33, 0x32, 0x35, 0x35, 0x34, 0x26, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x5, 0x15, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x23, 0x15, 0x33, 0x4, 0x17, 0x15, 0x14, 0x5, 0x7, 0x15, 0x33, 0x32, 0x12, 0x35, 0x35, 0x10, 0x2, 0x23, 0x23, 0x15, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x7, 0x5, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x3, 0xD7, 0x86, 0xCA, 0xF0, 0xF1, 0xC3, 0x8C, 0xE2, 0xD5, 0xE7, 0x3, 0xF4, 0xDB, 0xD2, 0x1B, 0xFE, 0xE6, 0x6, 0x1, 0x1C, 0x1F, 0x71, 0x81, 0x9D, 0x1, 0xA0, 0x8B, 0x1, 0x58, 0x5, 0x88, 0x42, 0xFE, 0xC2, 0xB, 0x40, 0x44, 0x1, 0x82, 0x65, 0x8C, 0x9F, 0x9F, 0x82, 0x6F, 0x1D, 0x1, 0x18, 0x5, 0xFE, 0xE2, 0x1C, 0xD2, 0xDB, 0xF4, 0xE8, 0xDA, 0xDF, 0x8F, 0xC1, 0xEF, 0x1, 0xF0, 0xCA, 0xFD, 0xB5, 0xFE, 0xCB, 0xFE, 0x9A, 0x1, 0x65, 0x1, 0x29, 0x2, 0xB1, 0x1, 0x29, 0x1, 0x65, 0xFE, 0x9A, 0xFE, 0xCB, 0x97, 0x53, 0x1, 0xEC, 0xE6, 0x35, 0xE7, 0xF2, 0x55, 0x1, 0xFE, 0xE7, 0xFB, 0x58, 0xFA, 0xFE, 0xDE, 0xE3, 0x50, 0x6, 0xF0, 0x28, 0x1, 0x2, 0x6, 0x4B, 0x1, 0x8A, 0xB7, 0x3B, 0xB2, 0x92, 0x1, 0xE8, 0xFE, 0xF6, 0x72, 0x1E, 0x44, 0x36, 0xFE, 0xF6, 0x1, 0xA, 0x35, 0x45, 0x1E, 0x72, 0x8E, 0x50, 0x92, 0xB2, 0x36, 0xBC, 0x8B, 0x4B, 0x6, 0xF9, 0x27, 0xF9, 0x7, 0xE0, 0x53, 0x1, 0x22, 0xFA, 0x4C, 0x1, 0x1, 0x1, 0x20, 0x55, 0x1, 0xF0, 0xE4, 0x39, 0xE6, 0xEC, 0x1, 0xEA, 0x1, 0x77, 0x1, 0x3C, 0x4A, 0x1, 0x3D, 0x1, 0x76, 0xFE, 0x8A, 0xFE, 0xC3, 0x4A, 0xFE, 0xC4, 0xFE, 0x89, 0xFF, 0xFF, 0x0, 0x46, 0xFF, 0xF5, 0x6, 0x51, 0x5, 0xA8, 0x0, 0x27, 0x4, 0x83, 0x1, 0x65, 0x0, 0x0, 0x0, 0x27, 0x7, 0x9D, 0x3, 0xA8, 0x0, 0x0, 0x0, 0x7, 0x7, 0x43, 0xFF, 0xFA, 0x2, 0x88, 0x0, 0x2, 0x0, 0x62, 0xFF, 0xEB, 0x4, 0x43, 0x5, 0xF6, 0x0, 0x19, 0x0, 0x27, 0x0, 0x0, 0x1, 0x32, 0x17, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x12, 0x17, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x26, 0x26, 0x2, 0x39, 0xAC, 0x78, 0x19, 0xC5, 0x84, 0x4E, 0x74, 0x46, 0x1D, 0x38, 0x8E, 0x73, 0x1, 0x12, 0x1, 0x20, 0x2, 0xFE, 0xFD, 0xEE, 0xED, 0xFE, 0xFD, 0xF6, 0xFC, 0x88, 0x77, 0x76, 0x87, 0x89, 0x76, 0xF, 0x74, 0x4, 0x5, 0x7E, 0xC1, 0xE6, 0x1A, 0x1A, 0xB7, 0x19, 0x2C, 0xFE, 0x4B, 0xFE, 0x84, 0x44, 0xFE, 0xE8, 0xFE, 0x82, 0x1, 0x30, 0xE3, 0x15, 0xD6, 0x1, 0x1C, 0xC3, 0xB9, 0x7D, 0x15, 0x86, 0xC3, 0xE9, 0xA7, 0x5A, 0x2F, 0x7B, 0x0, 0x1, 0x0, 0xA6, 0xFF, 0x1A, 0x4, 0xF4, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x4, 0xF4, 0xF3, 0xFD, 0x99, 0xF4, 0x5, 0xB0, 0xF9, 0x6A, 0x5, 0xD6, 0xFA, 0x2A, 0x6, 0x96, 0x0, 0x1, 0x0, 0x41, 0xFE, 0xF3, 0x4, 0xC1, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x13, 0x35, 0x1, 0x1, 0x35, 0x21, 0x15, 0x21, 0x1, 0x15, 0x1, 0x21, 0x15, 0x41, 0x2, 0x4E, 0xFD, 0xB2, 0x4, 0x46, 0xFC, 0xF7, 0x2, 0x12, 0xFD, 0xEE, 0x3, 0x43, 0xFE, 0xF3, 0x97, 0x2, 0xC9, 0x2, 0xC6, 0x97, 0xC3, 0xFD, 0x74, 0x1E, 0xFD, 0x73, 0xC3, 0x0, 0x1, 0x0, 0x9F, 0x2, 0x6E, 0x3, 0xEF, 0x3, 0x32, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x3, 0xEF, 0xFC, 0xB0, 0x3, 0x32, 0xC4, 0xC4, 0x0, 0x1, 0x0, 0x3C, 0xFF, 0xFF, 0x4, 0x92, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x5, 0x3, 0x23, 0x35, 0x21, 0x13, 0x1, 0x33, 0x1, 0x1, 0xE5, 0xD9, 0xD0, 0x1, 0x66, 0xA0, 0x1, 0x78, 0xD8, 0xFE, 0x17, 0x1, 0x2, 0x42, 0xC6, 0xFE, 0x23, 0x4, 0x86, 0xFA, 0x4F, 0x0, 0x3, 0x0, 0x5E, 0xFF, 0xEB, 0x7, 0xE0, 0x4, 0x4E, 0x0, 0x19, 0x0, 0x29, 0x0, 0x39, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x13, 0x34, 0x26, 0x23, 0x22, 0x6, 0x6, 0x7, 0x15, 0x1E, 0x2, 0x33, 0x32, 0x36, 0x35, 0x21, 0x14, 0x16, 0x33, 0x32, 0x36, 0x36, 0x37, 0x35, 0x2E, 0x2, 0x23, 0x22, 0x6, 0x15, 0x5, 0xE9, 0xB1, 0xDC, 0x3E, 0x3D, 0xDC, 0xB1, 0xE3, 0xFE, 0xF0, 0x3, 0x1, 0x11, 0xE3, 0xB2, 0xDD, 0x3E, 0x3D, 0xDD, 0xB2, 0xDB, 0x1, 0x1A, 0xFE, 0xEE, 0x22, 0x8B, 0x81, 0x6B, 0x8B, 0x49, 0x9, 0x8, 0x4A, 0x8B, 0x69, 0x82, 0x8C, 0xFA, 0x5D, 0x8C, 0x82, 0x6A, 0x8A, 0x4A, 0x8, 0x8, 0x49, 0x8B, 0x6C, 0x81, 0x8B, 0x15, 0xD2, 0x7A, 0x7A, 0xD2, 0x1, 0x40, 0xDD, 0x20, 0xE0, 0x1, 0x46, 0xCE, 0x78, 0x78, 0xCE, 0xFE, 0xC4, 0xF2, 0xF, 0xE0, 0xFE, 0xBA, 0x2, 0x3D, 0x91, 0xCF, 0x8D, 0xA4, 0x25, 0x23, 0x26, 0xA8, 0x8F, 0xCC, 0x93, 0x93, 0xCC, 0x8F, 0xA8, 0x26, 0x23, 0x25, 0xA4, 0x8D, 0xCF, 0x91, 0x0, 0x1, 0xFF, 0xAF, 0xFE, 0x4B, 0x2, 0xA9, 0x6, 0x15, 0x0, 0x15, 0x0, 0x0, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x15, 0x11, 0x14, 0x6, 0x31, 0x46, 0x3C, 0x11, 0x2B, 0x27, 0x8C, 0xC5, 0xAE, 0x3D, 0x5B, 0x19, 0x2A, 0x32, 0xA3, 0xBB, 0xFE, 0x4B, 0x12, 0xBE, 0xD, 0xA2, 0x4, 0xF3, 0xB4, 0xBE, 0x15, 0xB8, 0xA, 0xAF, 0xFB, 0xD, 0xB5, 0xB0, 0x0, 0x2, 0x0, 0x65, 0x1, 0x1, 0x4, 0x16, 0x3, 0xFB, 0x0, 0x14, 0x0, 0x28, 0x0, 0x0, 0x13, 0x35, 0x36, 0x33, 0x36, 0x1E, 0x2, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x2E, 0x2, 0x7, 0x22, 0x6, 0x3, 0x35, 0x36, 0x33, 0x36, 0x1E, 0x2, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x2E, 0x2, 0x7, 0x22, 0x65, 0x65, 0x91, 0x4F, 0x63, 0x7A, 0x5D, 0x49, 0x85, 0x64, 0x65, 0x80, 0x30, 0x48, 0xDD, 0x4A, 0x33, 0x41, 0x8A, 0x2F, 0x65, 0x8E, 0x4F, 0x63, 0x7A, 0x5D, 0x49, 0x88, 0x64, 0x65, 0x84, 0x30, 0x48, 0xDD, 0x4A, 0x33, 0x92, 0x2, 0xB5, 0xDA, 0x6A, 0x2, 0x2B, 0x3E, 0x27, 0x7E, 0xDA, 0x6A, 0x10, 0x70, 0xF, 0x1, 0x43, 0xFE, 0x21, 0xDA, 0x6A, 0x2, 0x2B, 0x3E, 0x27, 0x7E, 0xDA, 0x6A, 0x10, 0x70, 0xF, 0x1, 0x0, 0x1, 0x0, 0x91, 0x0, 0x80, 0x3, 0xF0, 0x4, 0xC4, 0x0, 0x13, 0x0, 0x0, 0x1, 0x21, 0x7, 0x27, 0x37, 0x23, 0x35, 0x21, 0x37, 0x21, 0x35, 0x21, 0x37, 0x17, 0x7, 0x33, 0x15, 0x21, 0x7, 0x21, 0x3, 0xF0, 0xFD, 0xE2, 0x81, 0x6D, 0x5D, 0xB0, 0x1, 0x22, 0x7E, 0xFE, 0x60, 0x2, 0x11, 0x86, 0x6D, 0x63, 0xBE, 0xFE, 0xD1, 0x7E, 0x1, 0xAD, 0x1, 0x64, 0xE4, 0x3E, 0xA6, 0xCA, 0xDF, 0xC9, 0xEE, 0x3F, 0xAF, 0xC9, 0xDF, 0xFF, 0xFF, 0x0, 0x3C, 0x0, 0x0, 0x3, 0x8C, 0x4, 0x48, 0x0, 0x67, 0x0, 0x21, 0x0, 0x0, 0x0, 0x8B, 0x40, 0x0, 0x37, 0x96, 0x0, 0x47, 0x5, 0x3A, 0xFF, 0x9D, 0xFD, 0xA6, 0x40, 0x0, 0x3D, 0xFC, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xFF, 0x3, 0xE0, 0x4, 0x55, 0x0, 0x67, 0x0, 0x23, 0x0, 0x0, 0x0, 0x98, 0x40, 0x0, 0x37, 0x96, 0x0, 0x47, 0x5, 0x3A, 0xFF, 0xE1, 0xFD, 0xA5, 0x40, 0x0, 0x3D, 0xFC, 0x0, 0x1, 0x0, 0x45, 0xFE, 0xB8, 0x4, 0xFB, 0x0, 0x8C, 0x0, 0x7, 0x0, 0x0, 0x37, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x45, 0xC8, 0x3, 0x26, 0xC8, 0xFB, 0x4A, 0x8C, 0xFE, 0xEA, 0x1, 0x16, 0xFE, 0x2C, 0x0, 0x2, 0x0, 0x24, 0x0, 0x0, 0x3, 0xEB, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x9, 0x0, 0x0, 0x1, 0x13, 0x13, 0x3, 0x3, 0x1, 0x1, 0x33, 0x1, 0x1, 0x1, 0x18, 0xF2, 0xED, 0xF1, 0x5F, 0xFE, 0x7D, 0x1, 0x80, 0xC5, 0x1, 0x82, 0xFE, 0x81, 0x2, 0xD7, 0xFE, 0x2A, 0x1, 0xD6, 0x1, 0xD7, 0xFB, 0x52, 0x2, 0xD7, 0x2, 0xD9, 0xFD, 0x27, 0xFD, 0x29, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xBB, 0x3, 0xA8, 0x6, 0x8F, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x5, 0x33, 0x11, 0x23, 0x3, 0x11, 0x21, 0x15, 0x23, 0x11, 0x33, 0x15, 0x1, 0x6E, 0xA1, 0xA1, 0xD5, 0x3, 0xF, 0xC4, 0xC4, 0x9F, 0x6, 0x87, 0xF8, 0xD3, 0x7, 0xD4, 0xA7, 0xF9, 0x79, 0xA6, 0x0, 0x2, 0x0, 0x52, 0xFE, 0xBB, 0x3, 0x61, 0x6, 0x8F, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x5, 0x35, 0x33, 0x11, 0x23, 0x35, 0x21, 0x11, 0x2, 0x8D, 0xA2, 0xA2, 0xFD, 0xC5, 0xC5, 0xC5, 0x3, 0xF, 0x5, 0xE8, 0xF9, 0x79, 0xA6, 0xA6, 0x6, 0x87, 0xA7, 0xF8, 0x2C, 0x0, 0x1, 0x0, 0x40, 0xFE, 0xBE, 0x2, 0x98, 0x6, 0x8A, 0x0, 0x5, 0x0, 0x0, 0x1, 0x17, 0x1, 0x1, 0x7, 0x1, 0x1, 0xD0, 0xC8, 0xFE, 0x96, 0x1, 0x6A, 0xC8, 0xFE, 0x70, 0x6, 0x8A, 0x58, 0xFC, 0x72, 0xFC, 0x70, 0x56, 0x3, 0xE6, 0x0, 0x1, 0x0, 0x67, 0xFE, 0xBE, 0x2, 0xBF, 0x6, 0x8A, 0x0, 0x5, 0x0, 0x0, 0x13, 0x37, 0x1, 0x1, 0x27, 0x1, 0x67, 0xC8, 0x1, 0x90, 0xFE, 0x70, 0xC8, 0x1, 0x6A, 0x6, 0x32, 0x58, 0xFC, 0x1A, 0xFC, 0x1A, 0x56, 0x3, 0x90, 0xFF, 0xFF, 0x0, 0x40, 0xFE, 0xBE, 0x4, 0x4B, 0x6, 0x8A, 0x0, 0x26, 0x5, 0x46, 0x0, 0x0, 0x0, 0x7, 0x5, 0x46, 0x1, 0xB3, 0x0, 0x0, 0x0, 0x2, 0x0, 0x67, 0xFE, 0xBE, 0x4, 0x72, 0x6, 0x8A, 0x0, 0x5, 0x0, 0xB, 0x0, 0x0, 0x1, 0x37, 0x1, 0x1, 0x27, 0x1, 0x1, 0x37, 0x1, 0x1, 0x27, 0x1, 0x2, 0x1A, 0xC8, 0x1, 0x90, 0xFE, 0x70, 0xC8, 0x1, 0x6A, 0xFC, 0xE3, 0xC8, 0x1, 0x90, 0xFE, 0x70, 0xC8, 0x1, 0x6A, 0x6, 0x32, 0x58, 0xFC, 0x1A, 0xFC, 0x1A, 0x56, 0x3, 0x90, 0x3, 0x8E, 0x58, 0xFC, 0x1A, 0xFC, 0x1A, 0x56, 0x3, 0x90, 0x0, 0x2, 0x0, 0x99, 0xFE, 0x76, 0x3, 0x66, 0x6, 0xDC, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x1, 0x11, 0x1, 0x17, 0x7, 0x11, 0x17, 0x1, 0x17, 0x11, 0x7, 0x2, 0xFA, 0xFD, 0x9F, 0x2, 0x61, 0x6C, 0xA9, 0xA9, 0xFE, 0x8, 0x7A, 0x7A, 0xFE, 0x76, 0x1, 0x7B, 0x5, 0x70, 0x1, 0x7B, 0xA3, 0x6B, 0xF9, 0xB6, 0x6B, 0x1, 0x3F, 0x4D, 0x5, 0x3C, 0x4D, 0x0, 0x2, 0x0, 0x5A, 0xFE, 0x76, 0x3, 0x27, 0x6, 0xDC, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x13, 0x27, 0x37, 0x11, 0x27, 0x37, 0x1, 0x11, 0x3, 0x27, 0x11, 0x37, 0xC6, 0x6C, 0xA9, 0xA9, 0x6C, 0x2, 0x61, 0xD5, 0x7A, 0x7A, 0xFE, 0x76, 0xA3, 0x6B, 0x6, 0x4A, 0x6B, 0xA3, 0xFE, 0x85, 0xFA, 0x90, 0x5, 0x9, 0x4D, 0xFA, 0xC4, 0x4D, 0x0, 0x1, 0x0, 0x99, 0xFE, 0x76, 0x2, 0x3F, 0x6, 0xDC, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x17, 0x7, 0x1, 0x11, 0x1, 0x17, 0x1, 0x6E, 0xD1, 0x94, 0xFE, 0xEE, 0x1, 0x12, 0x94, 0x5, 0x77, 0xFA, 0x64, 0xD2, 0x93, 0x1, 0x12, 0x6, 0x42, 0x1, 0x12, 0x93, 0x0, 0x1, 0x0, 0x54, 0xFE, 0x76, 0x1, 0xFA, 0x6, 0xDC, 0x0, 0x7, 0x0, 0x0, 0x17, 0x37, 0x11, 0x27, 0x37, 0x1, 0x11, 0x1, 0x54, 0xD1, 0xD1, 0x94, 0x1, 0x12, 0xFE, 0xEE, 0xF7, 0xD2, 0x5, 0x9C, 0xD2, 0x93, 0xFE, 0xEE, 0xF9, 0xBE, 0xFE, 0xEE, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x2, 0xCA, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x0, 0x1, 0x3, 0x3, 0x23, 0x13, 0x5, 0x37, 0x25, 0x13, 0x2, 0x97, 0xA0, 0xDB, 0x9D, 0xE6, 0xFE, 0xEB, 0x32, 0x1, 0x72, 0xD6, 0x2, 0x20, 0x1, 0x15, 0xFC, 0xCB, 0x3, 0x5C, 0x9F, 0xBD, 0xD4, 0xFE, 0x8F, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xED, 0x2, 0xCA, 0x4, 0x3A, 0x0, 0x8, 0x0, 0x0, 0x5, 0x25, 0x27, 0x5, 0x3, 0x33, 0x13, 0x13, 0x17, 0x1, 0xF4, 0xFE, 0x8E, 0x32, 0x1, 0x15, 0xE6, 0x9D, 0xDB, 0xA0, 0x33, 0x13, 0xD4, 0xBC, 0x9F, 0x3, 0x5C, 0xFC, 0xCB, 0x1, 0x15, 0xBC, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x5, 0x2, 0x6, 0x18, 0x0, 0x17, 0x0, 0x0, 0x33, 0x23, 0x1, 0x3E, 0x2, 0x33, 0x32, 0x16, 0x7, 0x7, 0x25, 0x7, 0x5, 0x3, 0x37, 0x13, 0x37, 0x12, 0x23, 0x22, 0x6, 0x7, 0x7, 0xED, 0x9D, 0x1, 0x13, 0x2A, 0x5D, 0x96, 0x7F, 0xBF, 0x97, 0x35, 0x2A, 0x1, 0xC, 0x32, 0xFE, 0x8E, 0xD6, 0x33, 0xA4, 0x29, 0x47, 0xD4, 0x54, 0x5D, 0x1B, 0x30, 0x4, 0x4, 0x9B, 0xF0, 0x89, 0xED, 0xC7, 0x9E, 0x9A, 0xBC, 0xD4, 0x1, 0x71, 0xBC, 0xFE, 0xE5, 0x99, 0x1, 0x9, 0x7A, 0x5F, 0xAB, 0x0, 0x1, 0x0, 0x35, 0xFF, 0xEC, 0x4, 0xBF, 0x6, 0x18, 0x0, 0x16, 0x0, 0x0, 0x5, 0x25, 0x27, 0x5, 0x1, 0x26, 0x26, 0x23, 0x22, 0x6, 0x17, 0x13, 0x7, 0x3, 0x26, 0x12, 0x33, 0x32, 0x16, 0x17, 0x1, 0x13, 0x17, 0x3, 0xE9, 0xFE, 0x8E, 0x32, 0x1, 0x19, 0xFE, 0xF6, 0x16, 0x4F, 0x5F, 0x61, 0x55, 0x22, 0x46, 0x93, 0x4B, 0x2F, 0xA0, 0xBD, 0x96, 0x94, 0x2B, 0x1, 0x8, 0x9D, 0x33, 0x14, 0xD4, 0xBC, 0xA1, 0x3, 0xE0, 0x51, 0x78, 0x84, 0x7E, 0xFE, 0xFD, 0x28, 0x1, 0x12, 0xAF, 0x1, 0x0, 0x9A, 0x9E, 0xFC, 0x28, 0x1, 0x11, 0xBC, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x4, 0x7F, 0x6, 0x1F, 0x0, 0xA, 0x0, 0x0, 0x33, 0x35, 0x21, 0x1, 0x5, 0x37, 0x25, 0x13, 0x7, 0x3, 0x1, 0x50, 0x1, 0x8D, 0x1, 0x3D, 0xFE, 0xEB, 0x32, 0x1, 0x72, 0xD6, 0x33, 0xA0, 0xFE, 0xA6, 0x94, 0x4, 0x9A, 0x9F, 0xBC, 0xD4, 0xFE, 0x8F, 0xBC, 0x1, 0x15, 0xFA, 0xF9, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x7F, 0x6, 0xB, 0x0, 0xA, 0x0, 0x0, 0x5, 0x25, 0x27, 0x5, 0x1, 0x21, 0x35, 0x21, 0x1, 0x13, 0x17, 0x3, 0xA9, 0xFE, 0x8E, 0x32, 0x1, 0x15, 0xFE, 0xC3, 0xFE, 0x73, 0x2, 0x2, 0x1, 0x5A, 0xA0, 0x33, 0x14, 0xD4, 0xBC, 0x9F, 0x4, 0x9A, 0x94, 0xFA, 0xF9, 0x1, 0x15, 0xBC, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x6C, 0x6, 0x0, 0x0, 0xB, 0x0, 0x0, 0x25, 0x13, 0x1, 0x27, 0x1, 0x33, 0x1, 0x1, 0x25, 0x37, 0x5, 0x3, 0x3, 0x56, 0x53, 0xFD, 0x20, 0x79, 0x1, 0x80, 0x9A, 0xFE, 0x97, 0x2, 0x5B, 0xFE, 0xCD, 0xA8, 0x1, 0x9B, 0x6E, 0x61, 0x1, 0x35, 0xFE, 0x56, 0x86, 0x5, 0x8E, 0xFA, 0xBC, 0x1, 0x5D, 0x53, 0x62, 0x6F, 0xFE, 0x64, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x6C, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x25, 0x13, 0x1, 0x27, 0x1, 0x33, 0x3, 0x1, 0x25, 0x37, 0x5, 0x3, 0x3, 0x56, 0x53, 0xFD, 0x20, 0x79, 0x1, 0x8, 0x9B, 0xF2, 0x2, 0x5B, 0xFE, 0xCD, 0xA8, 0x1, 0x9B, 0x6E, 0x61, 0x1, 0x35, 0xFE, 0x56, 0x86, 0x3, 0xC8, 0xFC, 0x82, 0x1, 0x5D, 0x53, 0x62, 0x6F, 0xFE, 0x64, 0xFF, 0xFF, 0x0, 0x21, 0x0, 0x0, 0x4, 0x7A, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x53, 0x0, 0x0, 0x27, 0x7, 0xA4, 0xFF, 0x91, 0x0, 0xD5, 0x0, 0x6, 0x7, 0xA4, 0x91, 0xA8, 0xFF, 0xFF, 0x0, 0x21, 0x0, 0x0, 0x2, 0xBF, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x6A, 0x0, 0x0, 0x27, 0x7, 0xA4, 0xFF, 0x91, 0x0, 0xD5, 0x0, 0x6, 0x7, 0xA4, 0x91, 0xA8, 0x0, 0x1, 0x0, 0x5, 0x0, 0x0, 0x4, 0xA8, 0x5, 0xB0, 0x0, 0x19, 0x0, 0x0, 0x21, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x11, 0x33, 0x11, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x27, 0x11, 0x21, 0x15, 0x1, 0x17, 0x10, 0x29, 0x38, 0xA1, 0x87, 0x67, 0x24, 0xFC, 0x1, 0x29, 0x39, 0xA1, 0x89, 0x66, 0x15, 0x2, 0x95, 0x2, 0xE9, 0x1, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x3, 0x2, 0x24, 0xFD, 0x86, 0x39, 0x2E, 0xC, 0x6F, 0x91, 0x1, 0xFE, 0x38, 0xCA, 0xFF, 0xFF, 0x0, 0x21, 0x0, 0x0, 0x5, 0x15, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x35, 0x41, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x91, 0x0, 0xFF, 0x0, 0x2, 0x0, 0x95, 0xFE, 0x4B, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x21, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x3, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x6, 0x7, 0x1, 0x15, 0x21, 0x1, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0x91, 0x1, 0x4, 0x88, 0x89, 0x80, 0x8D, 0x26, 0x3E, 0x44, 0x9D, 0xBF, 0x2, 0xD, 0xF5, 0x1, 0xB, 0x8E, 0x7D, 0x1, 0x47, 0xFE, 0xF2, 0xFE, 0xDC, 0xFE, 0xE5, 0x57, 0x40, 0x2A, 0x21, 0x4, 0xE5, 0xFE, 0x17, 0x89, 0x68, 0x70, 0x87, 0x1, 0xF9, 0x77, 0x11, 0xC0, 0xB6, 0x5, 0xEF, 0x3, 0xE0, 0xD4, 0x92, 0xC6, 0x34, 0xFD, 0xA0, 0xD, 0x2, 0x31, 0xFD, 0x90, 0x62, 0x45, 0x8, 0x0, 0x4, 0x0, 0x5B, 0xFF, 0x76, 0x3, 0xFC, 0x4, 0xBC, 0x0, 0x2, 0x0, 0x9, 0x0, 0xE, 0x0, 0x32, 0x0, 0x0, 0x1, 0x35, 0x7, 0x3, 0x32, 0x36, 0x37, 0x35, 0x23, 0x3, 0x27, 0x14, 0x17, 0x13, 0x6, 0x13, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x35, 0x34, 0x36, 0x37, 0x37, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x23, 0x26, 0x27, 0x6, 0x2, 0xE0, 0x19, 0xCE, 0x54, 0x7A, 0x19, 0x63, 0xA3, 0x8D, 0x1B, 0x7F, 0x9A, 0x7E, 0x29, 0x26, 0x3D, 0x90, 0x52, 0xA6, 0xFA, 0xE2, 0x6C, 0x30, 0x51, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0x74, 0x5A, 0x48, 0x90, 0x6A, 0x67, 0x29, 0xF8, 0x12, 0xA, 0x73, 0x2, 0x95, 0x32, 0x32, 0xFE, 0x1A, 0x51, 0x31, 0xCC, 0xFE, 0xB4, 0x97, 0x34, 0x26, 0x1, 0x3, 0x25, 0xFE, 0x20, 0x7, 0x7D, 0xA7, 0x5B, 0xB8, 0xAA, 0xB8, 0x3, 0xDB, 0x26, 0x56, 0x3E, 0x80, 0xCC, 0x25, 0x93, 0xD8, 0x62, 0xA8, 0xFE, 0x20, 0x92, 0x57, 0x11, 0x25, 0x41, 0x7A, 0x0, 0x2, 0x0, 0x8, 0xFF, 0x76, 0x3, 0x34, 0x5, 0x41, 0x0, 0x2, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x37, 0x23, 0x13, 0x22, 0x27, 0x7, 0x23, 0x13, 0x27, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x37, 0x33, 0x1, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x1, 0xAD, 0x5E, 0x5E, 0x26, 0x8D, 0x47, 0x62, 0x91, 0xB2, 0x3, 0xB3, 0xB3, 0xF2, 0xB6, 0x40, 0x91, 0xFE, 0x79, 0x40, 0x31, 0x2A, 0x2B, 0x46, 0x2, 0xC7, 0xC0, 0xFC, 0x65, 0x51, 0xC7, 0x1, 0x6B, 0x2A, 0x2, 0x7C, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0x82, 0xFC, 0xE4, 0x76, 0x49, 0x2B, 0xA, 0xBC, 0x18, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x99, 0x5, 0xDC, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x4, 0x8C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x99, 0x4, 0xBE, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0x6E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x9A, 0x5, 0x4C, 0x5, 0xB0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x33, 0x5, 0x4C, 0xFB, 0x65, 0xFE, 0x4B, 0xA6, 0xFC, 0xFC, 0x8D, 0x1, 0xAA, 0x1, 0x32, 0xFD, 0xE3, 0x1, 0xAD, 0xC2, 0xFE, 0x9A, 0x1, 0x66, 0x2, 0x76, 0xB0, 0xFE, 0x3A, 0x5, 0xB0, 0xFD, 0x54, 0xAE, 0x1, 0xFE, 0xFD, 0x7C, 0xFD, 0x9E, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0xBE, 0x4, 0x7D, 0x6, 0x0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x33, 0x4, 0x7D, 0xF2, 0x6D, 0xFE, 0xBF, 0x6D, 0xF3, 0xF3, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6D, 0x1, 0x34, 0xD0, 0xFE, 0xBE, 0x1, 0x42, 0x1, 0xD2, 0x70, 0xFE, 0x9E, 0x6, 0x0, 0xFC, 0x8A, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xFE, 0x4B, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x9A, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x4, 0x8C, 0xFB, 0xFC, 0xBF, 0x2, 0xF2, 0xFD, 0x14, 0x4, 0x1E, 0xFD, 0xE, 0x3, 0xA, 0xFE, 0x9A, 0x1, 0x66, 0xA4, 0x4, 0x41, 0xCB, 0xA0, 0xFB, 0xBA, 0x0, 0x1, 0x0, 0x52, 0xFE, 0xBE, 0x3, 0xD9, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x3, 0xD9, 0xF3, 0xFD, 0x6C, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x2, 0x58, 0xFE, 0xBE, 0x1, 0x42, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xFD, 0x5, 0xC4, 0x0, 0xB, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x5, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0xDE, 0xB8, 0x5E, 0x5F, 0xB7, 0xD3, 0xA8, 0xB0, 0x3, 0xEA, 0x51, 0x5A, 0x9E, 0x52, 0x9F, 0xEC, 0xFE, 0xCE, 0xFE, 0xC1, 0x1, 0x49, 0x1, 0x28, 0xC1, 0x91, 0xA, 0xBD, 0x4F, 0x3A, 0x19, 0x26, 0xBC, 0x63, 0x3, 0x88, 0x4D, 0xFE, 0xDD, 0xC8, 0x61, 0xD6, 0xFE, 0xEA, 0xA3, 0x2D, 0x67, 0x67, 0x1, 0x92, 0x1, 0x2A, 0x61, 0x1, 0x32, 0x1, 0x89, 0x3D, 0x29, 0xFB, 0xAB, 0x5F, 0x3F, 0x9, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x4B, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x35, 0x11, 0x13, 0x1, 0x23, 0x1, 0x13, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x14, 0x6, 0x5, 0x6, 0x47, 0x38, 0xE, 0x32, 0x2D, 0x7B, 0x18, 0xFE, 0x53, 0xB5, 0xFE, 0x53, 0x19, 0xFC, 0x1, 0x47, 0x1, 0xA4, 0x1, 0xA3, 0x1, 0x48, 0xC1, 0xFE, 0x4B, 0x11, 0xCD, 0xD, 0xA5, 0x2, 0x1F, 0x2, 0x80, 0xFB, 0xA0, 0x4, 0x61, 0xFD, 0x7F, 0xFE, 0x20, 0x5, 0xB0, 0xFB, 0xA4, 0x4, 0x5C, 0xFA, 0x11, 0xB6, 0xC0, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x1, 0x13, 0x21, 0x13, 0x1, 0x21, 0x13, 0x21, 0x13, 0x21, 0x1, 0x2, 0xAA, 0xD3, 0xFE, 0x5A, 0x61, 0xFD, 0xDA, 0x1, 0x8, 0x76, 0x2, 0x34, 0x77, 0x1, 0x8, 0xFD, 0xD8, 0x1, 0x34, 0x2, 0x5D, 0xFC, 0x6F, 0x5, 0xB0, 0xFE, 0xAC, 0x1, 0x54, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x11, 0xFF, 0xEC, 0x5, 0xA7, 0x5, 0xC4, 0x0, 0x17, 0x0, 0x23, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x25, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x22, 0x7, 0x11, 0x16, 0x3, 0x36, 0xC5, 0x8C, 0xA, 0xBE, 0x4F, 0x39, 0x1B, 0x24, 0x45, 0x50, 0x5A, 0x9E, 0x52, 0x9F, 0xEC, 0x1, 0x32, 0x1, 0x3F, 0xFE, 0xB7, 0xFE, 0xD1, 0xD4, 0xA7, 0xB0, 0xCB, 0xB8, 0x5E, 0x61, 0x14, 0x3D, 0x29, 0x4, 0x55, 0x5F, 0x3F, 0x9, 0xAD, 0x2D, 0x67, 0x67, 0xFE, 0x6E, 0xFE, 0xD7, 0x61, 0xFE, 0xCD, 0xFE, 0x77, 0xD0, 0x1, 0x24, 0xC8, 0x61, 0xD5, 0x1, 0x16, 0x63, 0xFC, 0x78, 0x4D, 0x0, 0x1, 0x0, 0x17, 0x0, 0x0, 0x4, 0xA4, 0x4, 0x4D, 0x0, 0x11, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x1, 0x1, 0x91, 0xFE, 0x86, 0xFB, 0xD7, 0x12, 0x13, 0x83, 0x24, 0x86, 0x7C, 0x86, 0x67, 0x4E, 0x3D, 0x31, 0x4F, 0x2D, 0xFE, 0xF8, 0x4, 0x3A, 0xFD, 0x3B, 0x5B, 0x5B, 0x1, 0xB3, 0x7C, 0xA9, 0x54, 0xA4, 0x24, 0x81, 0xFD, 0x8, 0x0, 0x1, 0x0, 0x30, 0x0, 0x0, 0x7, 0xF4, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x17, 0x37, 0x1, 0x33, 0x1, 0x17, 0x37, 0x13, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x3, 0x23, 0x1, 0x1, 0x1, 0x82, 0xFE, 0xAE, 0xFC, 0xDC, 0x4, 0x7, 0x1, 0x12, 0xD3, 0x1, 0xC, 0x9, 0x4, 0x96, 0x24, 0x92, 0x7F, 0x56, 0x88, 0x3A, 0x67, 0x4E, 0x3D, 0x27, 0x34, 0x17, 0xFB, 0xF2, 0xFE, 0xEC, 0xFE, 0xE4, 0x5, 0xB0, 0xFB, 0xD5, 0x28, 0x2A, 0x4, 0x29, 0xFB, 0xD5, 0x30, 0x32, 0x2, 0xDE, 0xAD, 0xB2, 0x4F, 0x34, 0xA4, 0x40, 0x41, 0x62, 0xFB, 0xC6, 0x4, 0x26, 0xFB, 0xDA, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x6, 0xAA, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x13, 0x17, 0x37, 0x13, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x3, 0x23, 0x3, 0x27, 0x7, 0x3, 0x1, 0x4A, 0xFE, 0xD8, 0xED, 0xA4, 0x8, 0xB, 0xD5, 0xB8, 0xD6, 0xD, 0xC, 0x58, 0x2A, 0x91, 0x68, 0x7E, 0x6F, 0x4D, 0x38, 0x35, 0x5B, 0x28, 0xC8, 0xC8, 0xCF, 0x18, 0x17, 0xCE, 0x4, 0x3A, 0xFD, 0x3C, 0x3F, 0x3D, 0x2, 0xC6, 0xFD, 0x3B, 0x4B, 0x52, 0x1, 0x8B, 0xB5, 0x92, 0x54, 0xA2, 0x24, 0x94, 0xFD, 0x18, 0x2, 0x9C, 0x6E, 0x6D, 0xFD, 0x63, 0x0, 0x2, 0x0, 0x31, 0x0, 0x0, 0x3, 0xF4, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x6, 0x13, 0x3, 0x7, 0x27, 0x37, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x17, 0x17, 0x37, 0x13, 0x33, 0x1, 0x1, 0x6C, 0x48, 0x28, 0x23, 0x8, 0x9, 0x47, 0xB9, 0x72, 0x43, 0x7A, 0x4, 0x4C, 0x9F, 0x82, 0x77, 0x78, 0x57, 0x72, 0x50, 0x18, 0x1A, 0xD5, 0xFB, 0xFE, 0x7E, 0x3, 0x11, 0x31, 0x30, 0x28, 0x25, 0x25, 0xFC, 0xB0, 0x2, 0x1, 0x3B, 0xA5, 0x3C, 0xA, 0xD3, 0xCA, 0x77, 0x56, 0x54, 0x7B, 0x48, 0xF5, 0x72, 0x72, 0x2, 0xC5, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0x50, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x4, 0x50, 0xFD, 0x41, 0xFC, 0xFC, 0x2, 0xBF, 0x2, 0x88, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x3, 0x52, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x3, 0x52, 0xFE, 0x1B, 0xF3, 0xF3, 0x1, 0xE5, 0x1, 0xB5, 0xFE, 0x4B, 0x4, 0x3A, 0xFE, 0x3D, 0x0, 0x2, 0x0, 0x49, 0xFF, 0xEB, 0x5, 0x8A, 0x4, 0x41, 0x0, 0x19, 0x0, 0x22, 0x0, 0x0, 0x5, 0x22, 0x24, 0x2, 0x35, 0x34, 0x12, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x15, 0x14, 0x2, 0x4, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x15, 0x2, 0xE6, 0xF7, 0xFE, 0xDA, 0x80, 0x7F, 0x72, 0x97, 0x4D, 0x48, 0x85, 0xA9, 0x9F, 0x7B, 0x9E, 0xE9, 0x7F, 0x82, 0xFE, 0xD8, 0x83, 0xB0, 0x8A, 0x85, 0x7E, 0x37, 0x15, 0xAA, 0x1, 0x12, 0x9D, 0xA3, 0x1, 0x8, 0x52, 0x93, 0x4B, 0xC3, 0x5C, 0x87, 0xE2, 0x22, 0x2, 0x84, 0x74, 0x90, 0x96, 0xF5, 0x8F, 0x94, 0xFE, 0xFB, 0xA3, 0xCD, 0x1E, 0xD6, 0x7B, 0x8A, 0xCD, 0x3E, 0x0, 0x2, 0x0, 0x54, 0xFF, 0xEC, 0x5, 0x5A, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x17, 0x16, 0x16, 0x33, 0x32, 0x37, 0x2, 0x3D, 0x64, 0x7A, 0x12, 0x1, 0xCE, 0x4, 0x61, 0x2, 0xA4, 0x44, 0x95, 0x90, 0x47, 0x86, 0xCB, 0xF1, 0xFE, 0xEC, 0x1, 0x1B, 0xCE, 0xEC, 0xE3, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA7, 0x68, 0x88, 0x1A, 0x39, 0x26, 0x43, 0x20, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFD, 0x21, 0xC0, 0x73, 0x73, 0x1, 0x2C, 0xDF, 0x29, 0x1, 0x1, 0x1, 0x2D, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x23, 0x44, 0x32, 0x76, 0x0, 0x1, 0x0, 0x28, 0xFF, 0xEC, 0x2, 0x60, 0x6, 0x15, 0x0, 0x17, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x1, 0x78, 0x6, 0x55, 0x9F, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA9, 0x39, 0x5D, 0x41, 0x23, 0x1D, 0x39, 0x43, 0x7E, 0xD6, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x80, 0x3, 0x80, 0x56, 0x3E, 0x7, 0xA3, 0xF, 0x8D, 0xB2, 0xFB, 0x2A, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x1E, 0x0, 0x2B, 0x0, 0x0, 0x13, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x27, 0x37, 0x14, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x37, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x50, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0xEB, 0xFE, 0xF7, 0x4, 0xF2, 0x10, 0x1C, 0x87, 0x54, 0x53, 0x84, 0x1C, 0xF, 0x7C, 0x89, 0x87, 0x7D, 0x1, 0x6, 0x17, 0x64, 0x46, 0x34, 0x33, 0x4A, 0x3D, 0x2C, 0x2, 0x27, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x1, 0x33, 0xE6, 0xD, 0x4C, 0x3F, 0x4D, 0x63, 0x62, 0x4C, 0x3F, 0x5F, 0x8F, 0xD5, 0xD5, 0x8F, 0xFE, 0x88, 0x1, 0x11, 0x69, 0x37, 0x49, 0x49, 0x37, 0x30, 0x43, 0x7, 0x0, 0x1, 0x0, 0x56, 0x0, 0x0, 0x3, 0x97, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x33, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x56, 0x2, 0x4E, 0xFE, 0x9, 0x1, 0xF7, 0xFD, 0xB2, 0x3, 0x41, 0xC1, 0xE5, 0xC2, 0x1, 0x11, 0xC1, 0xFB, 0xC6, 0xFF, 0xFF, 0x0, 0x29, 0xFD, 0xF5, 0x1, 0x92, 0x3, 0x96, 0x0, 0x7, 0x1, 0x64, 0x0, 0x7, 0xFC, 0xA9, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x3, 0x25, 0x5, 0xD5, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x1, 0x1, 0x4D, 0xFE, 0xDB, 0xD4, 0xA3, 0x9, 0xA, 0xA0, 0xD3, 0xFE, 0xDE, 0x2, 0x8C, 0x3, 0x49, 0xFD, 0xCB, 0x32, 0x32, 0x2, 0x35, 0xFC, 0xB7, 0x0, 0x1, 0x0, 0x4A, 0xFE, 0x4B, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x2E, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x0, 0x3, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x24, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x27, 0x16, 0x33, 0x32, 0x37, 0x4, 0x24, 0x3D, 0x78, 0xCD, 0xFE, 0xA8, 0xAA, 0x56, 0xFD, 0xB8, 0x85, 0x84, 0x85, 0x72, 0xFE, 0x60, 0xFE, 0xFD, 0x1, 0x1D, 0xE7, 0xF7, 0x1, 0x16, 0xFC, 0x86, 0x8E, 0x85, 0x7F, 0x98, 0x99, 0xF7, 0xED, 0xFE, 0xE7, 0xED, 0x50, 0xA7, 0xC0, 0x47, 0x42, 0xFE, 0x66, 0x1B, 0x1, 0x61, 0x1, 0xC, 0x6D, 0x93, 0x8A, 0x7A, 0x6C, 0x58, 0x57, 0x69, 0x81, 0xCA, 0xAE, 0xB0, 0xE3, 0xFE, 0xF9, 0xB6, 0x6B, 0x89, 0x73, 0x56, 0x52, 0x6B, 0x2D, 0x48, 0xD8, 0xAE, 0xB8, 0xD6, 0x4, 0xD7, 0x10, 0x0, 0x1, 0x0, 0x4F, 0xFE, 0x4B, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x1, 0x22, 0x2E, 0x2, 0x23, 0x23, 0x27, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x1E, 0x3, 0x33, 0x32, 0x37, 0x15, 0x6, 0x3, 0xE3, 0x7B, 0xB5, 0xAA, 0xCB, 0x90, 0x5C, 0x3, 0x2, 0xF3, 0xFD, 0x14, 0x4, 0x1E, 0xFD, 0x1, 0x7C, 0xB3, 0x8D, 0x84, 0x4E, 0x43, 0x46, 0x42, 0xFE, 0x4B, 0x84, 0xAD, 0x84, 0xA3, 0x4, 0x42, 0xCB, 0x9F, 0xFB, 0xA5, 0x1F, 0x86, 0x92, 0x66, 0x12, 0xC3, 0x1D, 0x0, 0x2, 0xFC, 0xB4, 0x4, 0xA8, 0xFE, 0xBC, 0x7, 0xC7, 0x0, 0x18, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x36, 0x36, 0x37, 0x36, 0x36, 0x37, 0x33, 0x14, 0x6, 0x7, 0x6, 0x6, 0x7, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x15, 0x14, 0x16, 0xFD, 0xB9, 0x7F, 0x86, 0x1, 0x83, 0x70, 0x59, 0x20, 0x2, 0x76, 0x56, 0x67, 0x3F, 0x59, 0x10, 0x3D, 0x5F, 0x73, 0x79, 0x86, 0x7D, 0x73, 0x75, 0x73, 0x39, 0x4, 0xA8, 0xA3, 0x73, 0x27, 0xD0, 0xBF, 0x16, 0x13, 0x17, 0x13, 0x58, 0x43, 0x17, 0xE, 0x3B, 0x4A, 0x3A, 0x8F, 0x7A, 0x72, 0x99, 0x74, 0xA2, 0x8A, 0x8A, 0xB, 0x44, 0x53, 0x0, 0x3, 0xFC, 0xD1, 0x4, 0xB1, 0xFE, 0xC2, 0x6, 0xD9, 0x0, 0x6, 0x0, 0xD, 0x0, 0x19, 0x0, 0x0, 0x1, 0x15, 0x33, 0x32, 0x35, 0x34, 0x27, 0x7, 0x15, 0x33, 0x32, 0x35, 0x34, 0x27, 0x5, 0x11, 0x33, 0x32, 0x16, 0x14, 0x7, 0x16, 0x16, 0x15, 0x14, 0x23, 0xFD, 0x60, 0x5E, 0x5D, 0x5C, 0x5F, 0x80, 0x53, 0x4A, 0xFE, 0xE8, 0xEB, 0x6B, 0x83, 0x62, 0x3B, 0x3F, 0xF0, 0x6, 0x70, 0x76, 0x39, 0x3C, 0x1, 0xD6, 0x80, 0x42, 0x3B, 0x3, 0xE9, 0x2, 0x28, 0x4B, 0x9C, 0x20, 0xE, 0x4A, 0x2B, 0x9E, 0x0, 0x1, 0xFD, 0x3, 0x4, 0xB1, 0xFE, 0x7B, 0x6, 0xD9, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x23, 0x11, 0x23, 0x11, 0xFE, 0x7B, 0xE9, 0x8F, 0x6, 0xD9, 0x74, 0xFE, 0x4C, 0x2, 0x28, 0x0, 0x2, 0xFC, 0x87, 0x4, 0xC, 0xFE, 0xE9, 0x6, 0xD9, 0x0, 0x5, 0x0, 0x14, 0x0, 0x0, 0x1, 0x6, 0x7, 0x33, 0x11, 0x23, 0x3, 0x15, 0x23, 0x11, 0x33, 0x36, 0x36, 0x37, 0x37, 0x21, 0x11, 0x33, 0x11, 0x23, 0x35, 0xFD, 0x93, 0x7, 0x33, 0xB4, 0x78, 0x8E, 0x80, 0x33, 0x2B, 0x2A, 0x3, 0x4, 0x1, 0x86, 0x4D, 0x7F, 0x6, 0x15, 0x97, 0x59, 0x1, 0x40, 0xFE, 0x4C, 0xA5, 0x1, 0x19, 0x2F, 0x6E, 0x5F, 0xB8, 0xFE, 0x4C, 0xFE, 0xE7, 0xA5, 0x0, 0x1, 0xFC, 0x16, 0x4, 0xB1, 0xFF, 0x5E, 0x6, 0xD9, 0x0, 0x15, 0x0, 0x0, 0x1, 0x35, 0x23, 0x7, 0x23, 0x13, 0x3, 0x33, 0x17, 0x33, 0x35, 0x33, 0x15, 0x33, 0x37, 0x33, 0x3, 0x13, 0x23, 0x27, 0x23, 0x15, 0xFD, 0x72, 0x41, 0x77, 0xA4, 0xB5, 0xA4, 0x9C, 0x7C, 0x33, 0x8F, 0x35, 0x7B, 0x9D, 0xA4, 0xB4, 0xA4, 0x77, 0x42, 0x4, 0xB1, 0xD2, 0xD2, 0x1, 0x20, 0x1, 0x8, 0xD8, 0xD8, 0xD8, 0xD8, 0xFE, 0xF8, 0xFE, 0xE0, 0xD2, 0xD2, 0x0, 0x1, 0xFC, 0xD1, 0x4, 0xA8, 0xFE, 0x9F, 0x6, 0xE0, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x23, 0x23, 0x35, 0x33, 0x32, 0x34, 0x23, 0x22, 0x7, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0xFD, 0xB4, 0x52, 0x91, 0x83, 0x8, 0x5C, 0x58, 0x55, 0x5C, 0x5C, 0x4C, 0x4F, 0x58, 0x3, 0x84, 0x83, 0x58, 0x64, 0x7E, 0x56, 0x5F, 0x87, 0x4, 0xA8, 0x53, 0x5A, 0x40, 0x43, 0x3F, 0x66, 0x74, 0x36, 0x4D, 0x58, 0x52, 0x4E, 0x50, 0x24, 0x21, 0x5E, 0x4E, 0x57, 0x0, 0x1, 0xFC, 0xD4, 0x4, 0xB1, 0xFE, 0xC8, 0x6, 0xD9, 0x0, 0xC, 0x0, 0x0, 0x1, 0x27, 0x23, 0x15, 0x23, 0x11, 0x33, 0x15, 0x33, 0x37, 0x33, 0x3, 0x13, 0xFE, 0x20, 0x7D, 0x3F, 0x90, 0x90, 0x34, 0x80, 0x9F, 0xAA, 0xBB, 0x4, 0xB1, 0xD2, 0xD2, 0x2, 0x28, 0xD9, 0xD9, 0xFE, 0xF8, 0xFE, 0xE0, 0x0, 0x1, 0xFC, 0x9E, 0x4, 0xB1, 0xFE, 0xB2, 0x6, 0xD9, 0x0, 0xF, 0x0, 0x0, 0x1, 0x27, 0x37, 0x36, 0x36, 0x37, 0x37, 0x21, 0x11, 0x23, 0x11, 0x23, 0x7, 0x6, 0x6, 0x23, 0xFC, 0xA0, 0x2, 0x12, 0x31, 0x21, 0x5, 0xA, 0x1, 0xA1, 0x8F, 0x8E, 0x7, 0x9, 0x5E, 0x70, 0x4, 0xB1, 0x7D, 0x2, 0x6, 0x55, 0x61, 0xED, 0xFD, 0xD8, 0x1, 0xB4, 0x96, 0x92, 0x8C, 0x0, 0x1, 0xFC, 0x66, 0x4, 0xB1, 0xFF, 0xA, 0x6, 0xD8, 0x0, 0xC, 0x0, 0x0, 0x1, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x23, 0x11, 0x3, 0xFD, 0x81, 0x8B, 0x90, 0xB6, 0x9C, 0x9D, 0xB5, 0x8F, 0x8C, 0x4, 0xB1, 0x1, 0x4E, 0xFE, 0xB2, 0x2, 0x27, 0xFE, 0x8B, 0x1, 0x75, 0xFD, 0xD9, 0x1, 0x4F, 0xFE, 0xB1, 0x0, 0x1, 0xFC, 0xC1, 0x4, 0xB1, 0xFE, 0xAF, 0x6, 0xD9, 0x0, 0xB, 0x0, 0x0, 0x1, 0x35, 0x23, 0x15, 0x23, 0x11, 0x33, 0x15, 0x33, 0x35, 0x33, 0x11, 0xFE, 0x20, 0xD0, 0x8F, 0x8F, 0xD0, 0x8F, 0x4, 0xB1, 0xDB, 0xDB, 0x2, 0x28, 0xD9, 0xD9, 0xFD, 0xD8, 0xFF, 0xFF, 0xFC, 0xB1, 0x4, 0xA3, 0xFE, 0xBF, 0x6, 0xDF, 0x0, 0x6, 0x2, 0x17, 0xEF, 0x0, 0x0, 0x1, 0xFC, 0xC1, 0x4, 0xB1, 0xFE, 0xAF, 0x6, 0xD9, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0xFE, 0x20, 0xD0, 0x8F, 0x1, 0xEE, 0x4, 0xB1, 0x1, 0xB4, 0xFE, 0x4C, 0x2, 0x28, 0xFD, 0xD8, 0xFF, 0xFF, 0xFC, 0xBF, 0x3, 0xBC, 0xFE, 0xBD, 0x6, 0xE0, 0x0, 0xF, 0x2, 0x1A, 0xFB, 0x7D, 0xB, 0x84, 0xC0, 0x0, 0xFF, 0xFF, 0xFC, 0xC2, 0x4, 0xA3, 0xFE, 0xAD, 0x6, 0xDF, 0x0, 0x6, 0x2, 0x19, 0xF6, 0x0, 0x0, 0x1, 0xFC, 0xC5, 0x4, 0xB1, 0xFE, 0xAB, 0x6, 0xD9, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0xFE, 0xAB, 0xAC, 0x8F, 0xAB, 0x1, 0xE6, 0x6, 0x65, 0xFE, 0x4C, 0x1, 0xB4, 0x74, 0xFF, 0xFF, 0xFC, 0xD4, 0x4, 0xB1, 0xFE, 0xDC, 0x6, 0xDB, 0x0, 0x6, 0x2, 0x20, 0xEE, 0x0, 0x0, 0x1, 0xFC, 0xB1, 0x4, 0xE, 0xFE, 0xEF, 0x6, 0xD9, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x35, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0xFE, 0xEB, 0x7B, 0xFE, 0x41, 0x90, 0xD0, 0x8F, 0x4F, 0x4, 0xE, 0xA3, 0x2, 0x28, 0xFE, 0x4C, 0x1, 0xB4, 0xFE, 0x4C, 0x0, 0x1, 0xFC, 0xAB, 0x4, 0xB1, 0xFE, 0x7C, 0x6, 0xDA, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x35, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x33, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x35, 0x33, 0xFE, 0x7C, 0x90, 0x2D, 0x2B, 0x6B, 0x7E, 0x90, 0x2E, 0x37, 0x26, 0x26, 0x90, 0x4, 0xB1, 0xB6, 0x9, 0x69, 0x70, 0xA3, 0xA3, 0x3C, 0x29, 0x9, 0xFE, 0x0, 0x1, 0xFC, 0x49, 0x4, 0xB1, 0xFF, 0x27, 0x6, 0xD9, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0xFC, 0x49, 0x90, 0x97, 0x90, 0x97, 0x90, 0x4, 0xB1, 0x2, 0x28, 0xFE, 0x4C, 0x1, 0xB4, 0xFE, 0x4C, 0x1, 0xB4, 0xFD, 0xD8, 0x0, 0x1, 0xFC, 0x34, 0x4, 0xE, 0xFF, 0x60, 0x6, 0xD9, 0x0, 0xF, 0x0, 0x0, 0x3, 0x23, 0x35, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0xA4, 0x7B, 0xFD, 0x53, 0x8F, 0x97, 0x90, 0x97, 0x90, 0x4F, 0x4, 0xE, 0xA3, 0x2, 0x28, 0xFE, 0x4C, 0x1, 0xB4, 0xFE, 0x4C, 0x1, 0xB4, 0xFE, 0x4C, 0x0, 0x3, 0xFC, 0xB1, 0x4, 0xA3, 0xFE, 0xBF, 0x6, 0xDF, 0x0, 0xA, 0x0, 0xF, 0x0, 0x14, 0x0, 0x0, 0x0, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x3, 0x22, 0x7, 0x33, 0x26, 0x3, 0x32, 0x37, 0x23, 0x16, 0xFD, 0x3F, 0x8E, 0x8E, 0x78, 0x7A, 0x8E, 0x8E, 0x7A, 0x5F, 0x13, 0xE5, 0x13, 0x5F, 0x64, 0x10, 0xE9, 0x10, 0x4, 0xA3, 0x9C, 0x87, 0x7D, 0x9C, 0x9C, 0x88, 0x7C, 0x9C, 0x1, 0xC8, 0x6B, 0x6B, 0xFE, 0xAC, 0x75, 0x75, 0x0, 0x1, 0xFC, 0x19, 0x4, 0xA3, 0xFF, 0x8E, 0x6, 0xD9, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x21, 0x15, 0x23, 0x11, 0x23, 0x11, 0x21, 0x22, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x33, 0x6, 0x6, 0xFD, 0x1B, 0x85, 0x7D, 0x7E, 0x83, 0x2, 0x74, 0xAB, 0x90, 0xFE, 0xC6, 0x71, 0x33, 0x3E, 0x59, 0xA, 0x88, 0x3, 0x85, 0x4, 0xA3, 0xA4, 0x71, 0x12, 0x71, 0x9E, 0x74, 0xFE, 0x4C, 0x1, 0xB4, 0xA3, 0xA, 0x43, 0x5E, 0x4D, 0x50, 0x71, 0x0, 0x2, 0xFC, 0xBF, 0x4, 0xA8, 0xFE, 0xB1, 0x6, 0xE0, 0x0, 0x9, 0x0, 0x23, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x17, 0xFD, 0x9B, 0x25, 0x41, 0xC, 0x53, 0x37, 0x35, 0xD3, 0xA, 0x6, 0x38, 0x63, 0x54, 0x63, 0xEF, 0x5F, 0x50, 0x58, 0x8A, 0x7D, 0x68, 0x60, 0x7C, 0x15, 0x5, 0x16, 0x26, 0x16, 0x50, 0x30, 0x20, 0x3C, 0x64, 0x1B, 0x22, 0x47, 0x5A, 0x4B, 0xA8, 0x4, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x63, 0x63, 0xE3, 0x49, 0x3C, 0x0, 0x2, 0xFC, 0xBF, 0x4, 0xA3, 0xFE, 0xB1, 0x6, 0xDF, 0x0, 0x5, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x7, 0x33, 0x35, 0x26, 0x13, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x21, 0x16, 0x33, 0x32, 0x37, 0xFD, 0xBE, 0x5E, 0xF, 0xD8, 0x5, 0x81, 0x1B, 0x6B, 0x52, 0x81, 0x8D, 0x8F, 0x71, 0x78, 0x7A, 0xFE, 0x9E, 0xB, 0x7A, 0x5A, 0x30, 0x6, 0x6B, 0x76, 0x9, 0x6D, 0xFE, 0xA0, 0x27, 0x41, 0x99, 0x72, 0x15, 0x85, 0x97, 0x99, 0x77, 0x37, 0x80, 0x3E, 0x0, 0x1, 0xFC, 0x9C, 0x4, 0xB1, 0xFE, 0xD5, 0x6, 0xD9, 0x0, 0xE, 0x0, 0x0, 0x1, 0x3, 0x3, 0x23, 0x13, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x13, 0xFE, 0x40, 0x87, 0x88, 0x95, 0xBA, 0x69, 0x86, 0x89, 0x89, 0x6A, 0xBA, 0x4, 0xB1, 0x1, 0xA, 0xFE, 0xF6, 0x1, 0x49, 0x74, 0x6B, 0x6B, 0x74, 0xFE, 0xB7, 0x0, 0x2, 0xFC, 0x93, 0x4, 0xA8, 0xFE, 0xDD, 0x7, 0xC2, 0x0, 0x18, 0x0, 0x21, 0x0, 0x0, 0x0, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x27, 0x27, 0x33, 0x17, 0x16, 0x17, 0x36, 0x37, 0x37, 0x33, 0x7, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x26, 0x35, 0x34, 0x26, 0x27, 0x6, 0x6, 0x15, 0x14, 0xFD, 0x4D, 0x8B, 0x5E, 0x3D, 0x82, 0x25, 0x23, 0x92, 0x1A, 0x1A, 0x5F, 0x5F, 0x19, 0x1B, 0x92, 0x20, 0x24, 0x86, 0x3D, 0x5E, 0x8B, 0x4, 0x3B, 0x2C, 0x2C, 0x3B, 0x4, 0xA8, 0x67, 0x55, 0x49, 0x66, 0x31, 0x76, 0x7D, 0x8B, 0x75, 0x63, 0x5A, 0x5A, 0x5F, 0x79, 0x84, 0x80, 0x7A, 0x31, 0x66, 0x49, 0x55, 0x67, 0x74, 0x53, 0x21, 0x41, 0x25, 0x25, 0x41, 0x21, 0x53, 0x0, 0x2, 0xFC, 0x84, 0x4, 0xB1, 0xFE, 0xE3, 0x7, 0xEC, 0x0, 0x11, 0x0, 0x18, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x33, 0x20, 0x1, 0x33, 0x32, 0x35, 0x34, 0x23, 0x23, 0xFE, 0xE3, 0x86, 0x6B, 0xFE, 0xF8, 0x66, 0x66, 0x8F, 0x9B, 0x9B, 0x69, 0x1, 0x1, 0xFE, 0x96, 0x79, 0x62, 0x62, 0x79, 0x5, 0x77, 0x64, 0x62, 0x2, 0x5F, 0x67, 0x75, 0x75, 0x67, 0xD6, 0xFE, 0xE6, 0x57, 0x54, 0x0, 0x2, 0xFC, 0x78, 0x4, 0xA3, 0xFF, 0x71, 0x6, 0xDF, 0x0, 0x12, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x23, 0x15, 0x23, 0x11, 0x33, 0x15, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0xFE, 0x6A, 0x6D, 0x8A, 0xD, 0x5F, 0x8F, 0x8F, 0x60, 0x10, 0x88, 0x6A, 0x7A, 0x8E, 0x8E, 0x79, 0x78, 0x79, 0x76, 0x4, 0xA3, 0x80, 0x69, 0xDB, 0x2, 0x28, 0xD9, 0x65, 0x7A, 0x9C, 0x88, 0x7C, 0x9C, 0x74, 0xAF, 0xA5, 0xB0, 0xA4, 0x0, 0x2, 0xFC, 0x7F, 0x4, 0xA8, 0xFF, 0x69, 0x6, 0xE0, 0x0, 0x9, 0x0, 0x29, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x26, 0x27, 0x6, 0x23, 0x22, 0x27, 0x23, 0x15, 0x23, 0x11, 0x33, 0x11, 0x33, 0x36, 0x37, 0x33, 0x35, 0x34, 0x23, 0x22, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x17, 0xFE, 0x53, 0x25, 0x41, 0xC, 0x53, 0x36, 0x35, 0xD2, 0xA, 0x6, 0x38, 0x63, 0x9A, 0x19, 0x6D, 0x8F, 0x8F, 0x7E, 0x35, 0xA8, 0x5C, 0x50, 0x58, 0x8A, 0x7E, 0x68, 0x60, 0x7C, 0x14, 0x5, 0x16, 0x26, 0x16, 0x50, 0x30, 0x20, 0x3C, 0x64, 0x1B, 0x22, 0x47, 0x81, 0x78, 0x2, 0x28, 0xFE, 0xC4, 0x5A, 0x2, 0x22, 0x55, 0x42, 0x6, 0x4A, 0x62, 0x63, 0x63, 0xE3, 0x4C, 0x39, 0x0, 0x2, 0xFC, 0x92, 0x4, 0xB1, 0xFE, 0xE1, 0x6, 0xD9, 0x0, 0x4, 0x0, 0x10, 0x0, 0x0, 0x1, 0x7, 0x33, 0x27, 0x27, 0x3, 0x35, 0x23, 0x7, 0x23, 0x13, 0x33, 0x13, 0x23, 0x27, 0x23, 0x15, 0xFD, 0xAB, 0x31, 0x7D, 0x32, 0xD, 0x38, 0x2B, 0x31, 0x92, 0xDF, 0x90, 0xE0, 0x92, 0x32, 0x2C, 0x6, 0x1D, 0x85, 0x85, 0x29, 0xFE, 0x6B, 0x83, 0x83, 0x2, 0x28, 0xFD, 0xD8, 0x83, 0x83, 0x0, 0x2, 0xFC, 0x6C, 0x4, 0xB1, 0xFF, 0x4, 0x6, 0xD9, 0x0, 0x2, 0x0, 0x19, 0x0, 0x0, 0x1, 0x37, 0x23, 0x3, 0x23, 0x37, 0x36, 0x37, 0x27, 0x21, 0x7, 0x16, 0x17, 0x17, 0x23, 0x35, 0x34, 0x26, 0x23, 0x15, 0x23, 0x35, 0x23, 0x22, 0x6, 0x15, 0xFD, 0xB8, 0x47, 0x8E, 0x7C, 0x89, 0x1, 0xD, 0xBF, 0x9E, 0x2, 0x3A, 0x9F, 0xC0, 0xD, 0x1, 0x89, 0x35, 0x4B, 0x89, 0xD, 0x39, 0x37, 0x5, 0xEC, 0x83, 0xFE, 0x42, 0x76, 0xB1, 0xF, 0xF2, 0xF2, 0xF, 0xB1, 0x76, 0x57, 0x49, 0x2C, 0xCC, 0xCC, 0x2A, 0x4B, 0x0, 0x2, 0xFB, 0xCB, 0x4, 0xB1, 0xFF, 0x5F, 0x6, 0xD9, 0x0, 0x2, 0x0, 0x20, 0x0, 0x0, 0x1, 0x37, 0x23, 0x7, 0x23, 0x15, 0x23, 0x11, 0x33, 0x15, 0x21, 0x27, 0x21, 0x7, 0x16, 0x17, 0x17, 0x23, 0x35, 0x34, 0x26, 0x23, 0x15, 0x23, 0x35, 0x23, 0x22, 0x6, 0x15, 0x15, 0x23, 0x35, 0x34, 0xFE, 0x13, 0x47, 0x8E, 0xEF, 0x83, 0x8F, 0x8F, 0x1, 0x39, 0x9D, 0x2, 0x3A, 0x9F, 0xC0, 0xD, 0x1, 0x89, 0x35, 0x4B, 0x89, 0xD, 0x39, 0x37, 0x89, 0x5, 0xEC, 0x83, 0xF2, 0xCC, 0x2, 0x28, 0xF0, 0xF0, 0xF2, 0xF, 0xB1, 0x76, 0x57, 0x49, 0x2C, 0xCC, 0xCC, 0x2A, 0x4B, 0x57, 0x57, 0x46, 0x0, 0x1, 0x0, 0x50, 0x2, 0x8C, 0x2, 0xF9, 0x5, 0xAB, 0x0, 0x5, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x2, 0xF9, 0xFE, 0x1C, 0xC5, 0x2, 0xA9, 0x5, 0x4, 0xFD, 0x88, 0x3, 0x1F, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8C, 0x2, 0xF9, 0x5, 0xAB, 0x0, 0x5, 0x0, 0xF, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0xF9, 0xFE, 0x1C, 0xC5, 0x2, 0xA9, 0xFE, 0x81, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x5, 0x4, 0xFD, 0x88, 0x3, 0x1F, 0xFE, 0x3F, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0x0, 0x50, 0x2, 0x8B, 0x2, 0x33, 0x5, 0xBB, 0x0, 0x5, 0x0, 0x0, 0x1, 0x23, 0x11, 0x1, 0x17, 0x1, 0x1, 0x15, 0xC5, 0x1, 0x67, 0x7C, 0xFE, 0xE2, 0x2, 0x8B, 0x1, 0xCA, 0x1, 0x66, 0x7D, 0xFE, 0xE1, 0x0, 0x1, 0x0, 0x50, 0x2, 0x8B, 0x2, 0x33, 0x5, 0xBB, 0x0, 0x5, 0x0, 0x0, 0x1, 0x11, 0x1, 0x37, 0x1, 0x11, 0x1, 0x6E, 0xFE, 0xE2, 0x7D, 0x1, 0x66, 0x2, 0x8B, 0x1, 0x95, 0x1, 0x1E, 0x7D, 0xFE, 0x9A, 0xFE, 0x36, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8B, 0x2, 0x71, 0x5, 0xBB, 0x0, 0x5, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x11, 0x1, 0x17, 0x1, 0x17, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x15, 0xC5, 0x1, 0x67, 0x7C, 0xFE, 0xE2, 0x48, 0x49, 0x40, 0x41, 0x4A, 0x4A, 0x41, 0x40, 0x49, 0x2, 0x8B, 0x1, 0xCA, 0x1, 0x66, 0x7D, 0xFE, 0xE1, 0x53, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8B, 0x2, 0xE7, 0x5, 0xBB, 0x0, 0x5, 0x0, 0x11, 0x0, 0x0, 0x1, 0x11, 0x1, 0x37, 0x1, 0x11, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x22, 0xFE, 0xE2, 0x7D, 0x1, 0x66, 0xFD, 0x69, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x2, 0x8B, 0x1, 0x95, 0x1, 0x1E, 0x7D, 0xFE, 0x9A, 0xFE, 0x36, 0x1, 0x41, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0x0, 0x50, 0x2, 0x8C, 0x4, 0xC7, 0x5, 0xAB, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x4, 0xC7, 0xFE, 0x27, 0xC5, 0xFE, 0x27, 0x4, 0x77, 0x5, 0x4, 0xFD, 0x88, 0x2, 0x78, 0xA7, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8C, 0x4, 0xC7, 0x5, 0xAB, 0x0, 0x7, 0x0, 0x11, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x4, 0xC7, 0xFE, 0x27, 0xC5, 0xFE, 0x27, 0x4, 0x77, 0xFE, 0x8C, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0x4, 0xFD, 0x88, 0x2, 0x78, 0xA7, 0xFE, 0x3F, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x50, 0x2, 0x7E, 0x4, 0x35, 0x5, 0xBA, 0x0, 0x9, 0x0, 0x22, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x6, 0x6, 0x2, 0xE7, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0xFE, 0x7B, 0xA5, 0x6D, 0x5B, 0x4D, 0x55, 0x4F, 0x44, 0x2, 0xA9, 0x98, 0x5B, 0x80, 0x37, 0x5D, 0x4C, 0x52, 0x4F, 0x46, 0x2, 0xA8, 0x3, 0xEF, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0xFE, 0xC3, 0x53, 0x93, 0x39, 0x58, 0x65, 0x71, 0xB7, 0xAA, 0x2C, 0x26, 0x94, 0x39, 0x58, 0x65, 0x71, 0xB7, 0xAA, 0x0, 0x1, 0x0, 0x50, 0x2, 0x7E, 0x4, 0x35, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x6, 0x6, 0x1, 0x62, 0xA5, 0x6D, 0x5B, 0x4D, 0x55, 0x4F, 0x44, 0x2, 0xA9, 0x98, 0x5B, 0x80, 0x37, 0x5D, 0x4C, 0x52, 0x4F, 0x46, 0x2, 0xA8, 0x2, 0x7E, 0x53, 0x93, 0x39, 0x58, 0x65, 0x71, 0xB7, 0xAA, 0x2C, 0x26, 0x94, 0x39, 0x58, 0x65, 0x71, 0xB7, 0xAA, 0x0, 0x1, 0x0, 0x50, 0x2, 0x7E, 0x4, 0x35, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x3, 0x23, 0x9A, 0xA9, 0x46, 0x4F, 0x50, 0x4E, 0x5D, 0x37, 0x80, 0x5B, 0x9A, 0xA8, 0x1, 0x45, 0x4E, 0x55, 0x4D, 0x5B, 0x6B, 0x2, 0x7E, 0xAE, 0xBC, 0x68, 0x65, 0x58, 0x39, 0x94, 0x26, 0x2C, 0xAC, 0xB9, 0x6D, 0x65, 0x58, 0x39, 0x93, 0x53, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8C, 0x3, 0x5B, 0x5, 0xAB, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x21, 0x11, 0x7, 0x11, 0x21, 0x11, 0x2, 0x96, 0xFE, 0x7F, 0xC5, 0x3, 0xB, 0x3, 0x33, 0x1, 0xD1, 0xFE, 0x2F, 0xA7, 0x3, 0x1F, 0xFC, 0xE1, 0x0, 0x1, 0x0, 0x50, 0x2, 0x7B, 0x3, 0x92, 0x5, 0xBB, 0x0, 0x3, 0x0, 0x0, 0x13, 0x37, 0x1, 0x7, 0x50, 0x7D, 0x2, 0xC5, 0x7D, 0x5, 0x3E, 0x7D, 0xFD, 0x3D, 0x7D, 0xFF, 0xFF, 0x0, 0x50, 0x2, 0x7B, 0x3, 0x92, 0x5, 0xBB, 0x0, 0x47, 0x5, 0xA2, 0x3, 0xE2, 0x0, 0x0, 0xC0, 0x0, 0x40, 0x0, 0x0, 0x7, 0x0, 0x5F, 0xFD, 0xE7, 0x5, 0xAD, 0x7, 0xF9, 0x0, 0x8, 0x0, 0xC, 0x0, 0x10, 0x0, 0x1C, 0x0, 0x20, 0x0, 0x24, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x7, 0x15, 0x17, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x1, 0x21, 0x6, 0x22, 0x27, 0x21, 0x35, 0x21, 0x36, 0x32, 0x17, 0x21, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x2, 0x93, 0x4F, 0x46, 0x80, 0x4A, 0x2, 0xA5, 0xFD, 0xF4, 0x2, 0xB5, 0xFC, 0xAF, 0x4, 0x54, 0xFD, 0xB1, 0x20, 0xC0, 0x20, 0xFE, 0x1, 0x1, 0xFF, 0x20, 0xC0, 0x20, 0x2, 0x4F, 0xFE, 0xFD, 0xFC, 0xAF, 0x2, 0xA8, 0xFD, 0xF3, 0x1, 0x7F, 0x4E, 0x47, 0x7F, 0x48, 0x3, 0x6, 0x59, 0x4C, 0x57, 0xBF, 0x3E, 0x4D, 0x72, 0x82, 0x5F, 0x84, 0xB7, 0xB7, 0xFE, 0xC4, 0xBA, 0xBA, 0xFD, 0xFB, 0x49, 0x49, 0xB9, 0x4A, 0x4A, 0xFE, 0xB5, 0xBA, 0xBA, 0xFE, 0xC1, 0xB7, 0xB7, 0xFE, 0xC4, 0x4C, 0x56, 0xC0, 0x3E, 0x4D, 0x6F, 0x80, 0x64, 0x0, 0x1, 0x0, 0x47, 0xFE, 0xC8, 0x5, 0x73, 0xFF, 0x6D, 0x0, 0x3, 0x0, 0x0, 0x5, 0x15, 0x21, 0x35, 0x5, 0x73, 0xFA, 0xD4, 0x93, 0xA5, 0xA5, 0x0, 0x1, 0x0, 0x47, 0xFD, 0xEC, 0x5, 0x73, 0xFF, 0x6D, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x5, 0x27, 0x37, 0x23, 0x35, 0x21, 0x5, 0x73, 0xFC, 0xE7, 0xFE, 0x81, 0x50, 0x99, 0xDD, 0x5, 0x2C, 0xFE, 0xC8, 0xDC, 0x8A, 0x52, 0xA5, 0x0, 0x1, 0x0, 0x45, 0xFD, 0xED, 0x5, 0x71, 0xFF, 0x6D, 0x0, 0x7, 0x0, 0x0, 0x1, 0x25, 0x21, 0x35, 0x21, 0x15, 0x23, 0x17, 0x4, 0xD5, 0xFE, 0x83, 0xFC, 0xED, 0x5, 0x2C, 0xE3, 0x97, 0xFD, 0xED, 0xDB, 0xA5, 0xA5, 0x51, 0x0, 0x1, 0x0, 0x50, 0xFE, 0xC7, 0x1, 0x73, 0x0, 0xF4, 0x0, 0xB, 0x0, 0x0, 0x37, 0x35, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x35, 0x32, 0x35, 0x34, 0x50, 0x77, 0xAC, 0xAC, 0x77, 0x7D, 0x52, 0xA2, 0x89, 0x91, 0x90, 0x83, 0xA2, 0x71, 0x78, 0x0, 0x3, 0x0, 0x50, 0x0, 0x74, 0x4, 0x48, 0x6, 0x1F, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x1, 0x27, 0x1, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x4, 0x48, 0xFC, 0x84, 0x7C, 0x3, 0x7D, 0xFC, 0xAE, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2, 0x5D, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x5, 0xD4, 0xFA, 0xA0, 0x4B, 0x5, 0x60, 0xFE, 0x7, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0xFE, 0x80, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x1, 0x0, 0x37, 0xFF, 0xDD, 0x5, 0x16, 0x6, 0x1F, 0x0, 0xF, 0x0, 0x0, 0x25, 0x6, 0x7, 0x6, 0x24, 0x27, 0x26, 0x37, 0x17, 0x6, 0x17, 0x1, 0x17, 0x1, 0x16, 0x37, 0x2, 0xF4, 0x42, 0x80, 0x81, 0xFE, 0xD8, 0x29, 0x29, 0x42, 0x96, 0x3B, 0x5C, 0x3, 0x6B, 0x7B, 0xFC, 0x97, 0x7C, 0x3A, 0x6F, 0x6D, 0x13, 0x12, 0xB0, 0x79, 0x78, 0x70, 0x5B, 0x63, 0x55, 0x5, 0x44, 0x4B, 0xFA, 0xBD, 0x2C, 0x62, 0xFF, 0xFF, 0x0, 0x3B, 0xFF, 0xEC, 0x5, 0x1A, 0x6, 0x2E, 0x0, 0xF, 0x5, 0xAA, 0x5, 0x51, 0x6, 0xB, 0xC0, 0x0, 0x0, 0x3, 0x0, 0x50, 0x0, 0x5, 0x2, 0xA9, 0x4, 0x43, 0x0, 0x9, 0x0, 0x10, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x3, 0x23, 0x13, 0x3, 0x33, 0x1, 0x15, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x96, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x9E, 0xA8, 0xF7, 0xF7, 0xA8, 0x1, 0x20, 0x82, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x3, 0xC6, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xFD, 0x3, 0x1, 0x90, 0x1, 0x8F, 0xFE, 0x7A, 0x13, 0xFE, 0x65, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x50, 0x1, 0x28, 0x2, 0x7D, 0x3, 0xAF, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x17, 0x5, 0x27, 0x5, 0x17, 0x5, 0x27, 0x2, 0x4B, 0x32, 0xFE, 0x5, 0x32, 0x1, 0xFB, 0x32, 0xFE, 0x5, 0x32, 0x3, 0xAF, 0xBD, 0x88, 0xBD, 0xBA, 0xBD, 0x88, 0xBD, 0x0, 0x3, 0x0, 0x48, 0xFF, 0x2E, 0x3, 0xA4, 0x5, 0xBD, 0x0, 0x7, 0x0, 0x19, 0x0, 0x1F, 0x0, 0x0, 0x0, 0x6, 0x22, 0x26, 0x34, 0x36, 0x32, 0x16, 0x13, 0x21, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x37, 0x21, 0x13, 0x33, 0x6, 0x6, 0x7, 0x1, 0x14, 0x17, 0x13, 0x6, 0x6, 0x2, 0x92, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2B, 0xFE, 0xFF, 0x4, 0xB3, 0xC5, 0x9A, 0x5F, 0x37, 0x26, 0x1, 0x1, 0x6, 0xD, 0xF2, 0x2, 0x81, 0x68, 0xFE, 0x82, 0x89, 0x8, 0x3D, 0x54, 0x5, 0x4, 0x4D, 0x4D, 0x6E, 0x4B, 0x4B, 0xF9, 0xBC, 0xC1, 0xC, 0xC8, 0xAC, 0x85, 0xC2, 0x5A, 0x32, 0x77, 0x4B, 0xFD, 0x67, 0x84, 0xAF, 0x28, 0x1, 0x68, 0xA5, 0x18, 0x1, 0xB7, 0x3B, 0x6F, 0x0, 0x1, 0x0, 0x57, 0xFF, 0xE2, 0x5, 0xD, 0x6, 0x72, 0x0, 0x23, 0x0, 0x0, 0x5, 0x27, 0x37, 0x3, 0x37, 0x13, 0x37, 0x3, 0x37, 0x13, 0x37, 0x3, 0x37, 0x17, 0x37, 0x3, 0x37, 0x17, 0x37, 0x17, 0x7, 0x37, 0x17, 0x5, 0x7, 0x37, 0x17, 0x5, 0x7, 0x25, 0x17, 0x5, 0x7, 0x25, 0x17, 0x5, 0x1, 0x42, 0xB0, 0x63, 0x9E, 0xAE, 0x70, 0x3E, 0x85, 0xAE, 0x56, 0x3F, 0x6C, 0xAE, 0x3D, 0x40, 0x52, 0xAE, 0x23, 0x74, 0xB0, 0x74, 0x7F, 0x2F, 0xFE, 0xD3, 0x40, 0xE0, 0x2F, 0xFE, 0x72, 0x3E, 0x1, 0x45, 0x2F, 0xFE, 0xC, 0x3E, 0x1, 0xA3, 0x2F, 0xFD, 0xAE, 0x1E, 0x66, 0xAC, 0x2, 0x50, 0x2F, 0xFE, 0x5D, 0x6C, 0x1, 0xF3, 0x2F, 0xFE, 0xBA, 0x6C, 0x1, 0x8D, 0x2F, 0xE0, 0x6D, 0x1, 0x2D, 0x2E, 0x7F, 0xC9, 0x66, 0xC9, 0x21, 0xAD, 0x4F, 0x6F, 0x3B, 0xAD, 0x69, 0x6B, 0x57, 0xAE, 0x86, 0x6C, 0x70, 0xAE, 0x9E, 0x0, 0x3, 0x0, 0x64, 0x2, 0xA, 0x3, 0x2A, 0x5, 0xF, 0x0, 0xB, 0x0, 0x17, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x13, 0x15, 0x21, 0x35, 0x64, 0x44, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x44, 0x1, 0xC9, 0x44, 0x3A, 0x3B, 0x44, 0x44, 0x3B, 0x3A, 0x44, 0x9E, 0xFD, 0xF3, 0x4, 0x98, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0xFE, 0x67, 0xC3, 0xC3, 0x0, 0x3, 0x0, 0x46, 0x1, 0xFC, 0x3, 0x23, 0x4, 0xE3, 0x0, 0x7, 0x0, 0x11, 0x0, 0x26, 0x0, 0x0, 0x12, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x37, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xDB, 0x7F, 0xBE, 0x7E, 0x7E, 0xBE, 0x7F, 0x6D, 0x3F, 0x64, 0x3E, 0x3E, 0x64, 0x3F, 0x1, 0x46, 0x95, 0x80, 0x60, 0x3F, 0x50, 0x48, 0x36, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x4, 0x69, 0x7A, 0x7A, 0xAC, 0x76, 0x76, 0x56, 0x2B, 0x44, 0x43, 0x2C, 0x2E, 0x44, 0x44, 0xFE, 0xD5, 0xC, 0x6F, 0x91, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x1, 0x0, 0x50, 0xFE, 0xDD, 0x3, 0xC, 0x2, 0xBE, 0x0, 0x3, 0x0, 0x0, 0x13, 0x37, 0x1, 0x7, 0x50, 0x7D, 0x2, 0x3F, 0x7E, 0x2, 0x75, 0x49, 0xFC, 0x67, 0x48, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0xDD, 0x3, 0xC, 0x2, 0xBE, 0x0, 0x47, 0x5, 0xB2, 0x3, 0x5C, 0x0, 0x0, 0xC0, 0x0, 0x40, 0x0, 0x0, 0x2, 0x0, 0x4A, 0x2, 0x6E, 0x3, 0x27, 0x4, 0xAC, 0x0, 0x9, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x1, 0x2C, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x1, 0x66, 0x95, 0x81, 0x5F, 0x40, 0x51, 0x47, 0x36, 0x26, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x4, 0x30, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x74, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x2, 0x0, 0x4A, 0x1, 0xAF, 0x3, 0x27, 0x3, 0xF3, 0x0, 0x14, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0x92, 0x95, 0x81, 0x5F, 0x40, 0x51, 0x47, 0x36, 0x26, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0xFE, 0xAB, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x3, 0xF3, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0xFE, 0x65, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xFF, 0xFF, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x7B, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x61, 0xEB, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x0, 0x4D, 0xFF, 0x74, 0xFF, 0xFF, 0x0, 0x42, 0xFE, 0xF2, 0x3, 0x23, 0x5, 0xB0, 0x0, 0x27, 0x0, 0x61, 0x1, 0xCD, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0xB2, 0xFF, 0x74, 0x0, 0x1, 0x0, 0x50, 0x2, 0x51, 0x1, 0xE9, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x23, 0x11, 0x23, 0x11, 0x1, 0xE9, 0xD4, 0xC5, 0x5, 0xB0, 0xA7, 0xFD, 0x48, 0x3, 0x5F, 0x0, 0x1, 0x0, 0x50, 0x2, 0x51, 0x1, 0xE9, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x13, 0x35, 0x21, 0x11, 0x23, 0x11, 0x50, 0x1, 0x99, 0xC4, 0x5, 0x9, 0xA7, 0xFC, 0xA1, 0x2, 0xB8, 0x0, 0x1, 0x0, 0x50, 0xFE, 0xF2, 0x1, 0xE9, 0x2, 0x51, 0x0, 0x5, 0x0, 0x0, 0x5, 0x15, 0x21, 0x11, 0x33, 0x11, 0x1, 0xE9, 0xFE, 0x67, 0xC5, 0x67, 0xA7, 0x3, 0x5F, 0xFD, 0x48, 0x0, 0x1, 0x0, 0x50, 0xFE, 0xF2, 0x1, 0xE9, 0x2, 0x51, 0x0, 0x5, 0x0, 0x0, 0x13, 0x35, 0x33, 0x11, 0x33, 0x11, 0x50, 0xD5, 0xC4, 0xFE, 0xF2, 0xA7, 0x2, 0xB8, 0xFC, 0xA1, 0x0, 0x1, 0x0, 0x57, 0x0, 0x6D, 0x4, 0x63, 0x4, 0xE, 0x0, 0xF, 0x0, 0x0, 0x1, 0x15, 0x21, 0x22, 0x24, 0x35, 0x34, 0x24, 0x33, 0x21, 0x15, 0x21, 0x6, 0x11, 0x10, 0x17, 0x4, 0x63, 0xFD, 0xD2, 0xCA, 0xFE, 0xEC, 0x1, 0x14, 0xCA, 0x2, 0x2E, 0xFD, 0xCB, 0xF3, 0xF3, 0x1, 0x30, 0xC3, 0xF0, 0xE0, 0xDF, 0xF2, 0xC3, 0x4, 0xFE, 0xF6, 0xFE, 0xF7, 0x4, 0x0, 0x1, 0x0, 0x4E, 0x0, 0x6D, 0x4, 0x5A, 0x4, 0xE, 0x0, 0xF, 0x0, 0x0, 0x37, 0x35, 0x21, 0x36, 0x11, 0x10, 0x27, 0x21, 0x35, 0x21, 0x32, 0x4, 0x15, 0x14, 0x4, 0x23, 0x4E, 0x2, 0x35, 0xF3, 0xF3, 0xFD, 0xCB, 0x2, 0x2E, 0xCB, 0x1, 0x13, 0xFE, 0xED, 0xCB, 0x6D, 0xC3, 0x4, 0x1, 0x9, 0x1, 0xA, 0x4, 0xC3, 0xF2, 0xDF, 0xE0, 0xF0, 0xFF, 0xFF, 0x0, 0x81, 0xFE, 0x31, 0x4, 0x3A, 0x6, 0x5F, 0x0, 0x26, 0x0, 0xD, 0x0, 0x0, 0x0, 0x7, 0x0, 0xD, 0x1, 0x97, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x28, 0xFE, 0x31, 0x3, 0xE9, 0x6, 0x5F, 0x0, 0x26, 0x0, 0xE, 0x0, 0x0, 0x0, 0x7, 0x0, 0xE, 0x1, 0x97, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE3, 0x4, 0x43, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x4, 0x62, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x4, 0x62, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9E, 0x1, 0x50, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE4, 0x4, 0x43, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x51, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x1, 0x51, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9E, 0x4, 0x62, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x4, 0x43, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x4, 0x62, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x1, 0x4F, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x14, 0x4, 0x62, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0xFF, 0xFF, 0x0, 0x43, 0xFF, 0xE2, 0x4, 0x5E, 0x3, 0xED, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x2, 0xD9, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xAB, 0x4, 0x62, 0x0, 0x27, 0x1, 0xD4, 0x6, 0x2F, 0x2, 0xD9, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xAB, 0x1, 0x4F, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xAB, 0x2, 0xD9, 0x0, 0x2, 0x0, 0x3D, 0xFF, 0xF4, 0x3, 0x9F, 0x5, 0xC5, 0x0, 0x18, 0x0, 0x22, 0x0, 0x0, 0x1, 0x23, 0x26, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x13, 0x14, 0x6, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x2, 0x62, 0xE3, 0x1, 0x1C, 0x39, 0x59, 0x93, 0xE3, 0xCC, 0xB7, 0xFA, 0x2, 0xF3, 0x1, 0x77, 0x48, 0xBC, 0x66, 0x3A, 0x5D, 0x34, 0x16, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x1, 0xA6, 0x4D, 0x69, 0x38, 0x57, 0xC9, 0x87, 0xBE, 0xCC, 0xC3, 0xBC, 0x60, 0x55, 0xC9, 0x58, 0x88, 0x3E, 0x56, 0x8B, 0xFE, 0x43, 0x37, 0x4B, 0x4B, 0x37, 0x38, 0x4B, 0x4B, 0x0, 0x1, 0x0, 0x50, 0x3, 0xFF, 0x1, 0x71, 0x6, 0xCF, 0x0, 0x13, 0x0, 0x0, 0x13, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x36, 0x33, 0x17, 0x22, 0x6, 0x15, 0x14, 0x16, 0x15, 0x14, 0x6, 0x73, 0x23, 0x2E, 0x40, 0x59, 0x8A, 0x5B, 0x27, 0x2E, 0x40, 0x59, 0x8D, 0x3, 0xFF, 0x83, 0x37, 0x26, 0x51, 0x6F, 0x5F, 0x5C, 0x75, 0x82, 0x37, 0x27, 0x4F, 0x76, 0x59, 0x5D, 0x75, 0xFF, 0xFF, 0x0, 0x46, 0x2, 0x3B, 0x2, 0x1, 0x3, 0xD7, 0x0, 0x7, 0x1, 0x8B, 0xFF, 0xCD, 0xFD, 0xAD, 0xFF, 0xFF, 0x0, 0x5E, 0x2, 0xD7, 0x1, 0x79, 0x3, 0xE4, 0x0, 0x7, 0x0, 0x13, 0xFF, 0xD6, 0x2, 0xE3, 0xFF, 0xFF, 0x0, 0x57, 0xFE, 0xE1, 0x1, 0x97, 0x1, 0x14, 0x0, 0xF, 0x0, 0x11, 0x1, 0xB4, 0xFF, 0xCC, 0xC0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0x1, 0xE1, 0x1, 0x6B, 0x2, 0xEE, 0x0, 0x7, 0x0, 0x13, 0xFF, 0xC8, 0x1, 0xED, 0xFF, 0xFF, 0x0, 0x46, 0x0, 0xB3, 0x1, 0x86, 0x2, 0xE6, 0x0, 0x7, 0x0, 0x11, 0x0, 0x29, 0x1, 0xFB, 0x0, 0x2, 0x0, 0x84, 0xFF, 0xEB, 0x1, 0xE1, 0x5, 0x84, 0x0, 0x9, 0x0, 0x11, 0x0, 0x0, 0x13, 0x37, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x15, 0x2, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0xA0, 0x1, 0x66, 0x57, 0x83, 0x2B, 0x3B, 0xF7, 0x4A, 0x86, 0x4B, 0x4B, 0x86, 0x4A, 0x3, 0x51, 0xAC, 0x66, 0xDA, 0x47, 0x4D, 0x43, 0x8F, 0x5F, 0xB5, 0xFD, 0x59, 0x4E, 0x4E, 0x72, 0x4D, 0x4D, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x2, 0xB5, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x2, 0xB5, 0xF2, 0xFE, 0x8D, 0x1, 0x73, 0xF2, 0x3, 0x73, 0xC7, 0x1, 0x76, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x3, 0x4, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x3, 0x4, 0xFE, 0x88, 0xF3, 0xF3, 0x1, 0x78, 0x3, 0x73, 0xFC, 0x8D, 0x5, 0xB0, 0xFE, 0x8A, 0x0, 0x1, 0x0, 0x50, 0x0, 0x0, 0x4, 0x2E, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x1, 0xC3, 0xFE, 0x8D, 0x1, 0x73, 0xF2, 0x1, 0x79, 0xFE, 0x87, 0x1, 0x76, 0xC7, 0x3, 0x73, 0xFC, 0x8D, 0xC7, 0xFE, 0x8A, 0x0, 0x2, 0x0, 0x5B, 0x0, 0x76, 0x4, 0x8A, 0x5, 0xC5, 0x0, 0xB, 0x0, 0x27, 0x0, 0x0, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x27, 0x6, 0x15, 0x14, 0x16, 0x13, 0x26, 0x26, 0x10, 0x37, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x4, 0x17, 0x16, 0x15, 0x14, 0x4, 0x2, 0x8C, 0x64, 0xA9, 0x95, 0xC6, 0x85, 0x6B, 0x7D, 0x68, 0xDD, 0xFB, 0xAA, 0x85, 0x1, 0x13, 0xE6, 0xEC, 0x1, 0xF, 0xF2, 0x87, 0x82, 0x88, 0x7E, 0x76, 0x1, 0xAE, 0x77, 0x7C, 0xFE, 0xE6, 0x1, 0x44, 0x2C, 0x52, 0x4D, 0x60, 0x39, 0x2B, 0x2A, 0x7B, 0x58, 0x5B, 0xFE, 0xFB, 0x3E, 0xB3, 0x1, 0x70, 0x5A, 0x66, 0xB7, 0xAA, 0xCD, 0xDE, 0xCF, 0x61, 0x89, 0x69, 0x49, 0x53, 0x56, 0x77, 0x56, 0x5A, 0xB9, 0xA1, 0xB0, 0xFF, 0xFF, 0x0, 0xAE, 0x2, 0x6E, 0xB, 0x33, 0x3, 0x32, 0x0, 0x66, 0x5, 0x3A, 0xB0, 0x0, 0x66, 0x66, 0x40, 0x0, 0x0, 0x47, 0x5, 0x3A, 0x4, 0xE8, 0x0, 0x0, 0x66, 0x66, 0x40, 0x0, 0xFF, 0xFF, 0x0, 0xAE, 0x2, 0x6E, 0x10, 0x6A, 0x3, 0x32, 0x0, 0x66, 0x5, 0x3A, 0xB0, 0x0, 0x66, 0x66, 0x40, 0x0, 0x0, 0x67, 0x5, 0x3A, 0xA, 0x1F, 0x0, 0x0, 0x66, 0x66, 0x40, 0x0, 0x0, 0x47, 0x5, 0x3A, 0x4, 0xE8, 0x0, 0x0, 0x66, 0x66, 0x40, 0x0, 0x0, 0x1, 0x0, 0x50, 0xFF, 0x9E, 0x1, 0xF2, 0x1, 0x47, 0x0, 0xB, 0x0, 0x0, 0x5, 0x27, 0x7, 0x27, 0x37, 0x27, 0x37, 0x17, 0x37, 0x17, 0x7, 0x17, 0x1, 0xAF, 0x8E, 0x8E, 0x43, 0x8F, 0x8F, 0x43, 0x8E, 0x8E, 0x43, 0x8F, 0x8F, 0x62, 0x91, 0x91, 0x43, 0x92, 0x91, 0x43, 0x91, 0x91, 0x43, 0x91, 0x92, 0xFF, 0xFF, 0x0, 0x43, 0xFE, 0x5F, 0x1, 0x57, 0x6, 0xDF, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0xFF, 0xCC, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x2, 0xCF, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x7, 0x54, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x5, 0xD1, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x28, 0x4, 0x4E, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x28, 0x1, 0x4F, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x46, 0x1, 0x47, 0x6, 0x53, 0x0, 0x40, 0x0, 0x0, 0x36, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x36, 0x34, 0x26, 0x34, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x15, 0x14, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x6, 0x14, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x6, 0x14, 0x16, 0x16, 0x14, 0x6, 0x6, 0x15, 0x14, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x6, 0x15, 0x14, 0x17, 0x7, 0x26, 0x26, 0x35, 0x34, 0x36, 0xAA, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x6A, 0x4E, 0x33, 0x4D, 0x2D, 0x2B, 0x1, 0x2C, 0x2D, 0x2D, 0x2B, 0x1, 0x2C, 0x2D, 0x2D, 0x2C, 0x2C, 0x2D, 0x2D, 0x2B, 0x1, 0x2C, 0x2D, 0x4B, 0x33, 0x4D, 0x69, 0x5A, 0x1D, 0x4A, 0x4B, 0x4C, 0x4A, 0x37, 0x38, 0x4A, 0x4C, 0x4B, 0x4B, 0x6E, 0x4A, 0x98, 0x4A, 0x37, 0x38, 0x50, 0x55, 0x44, 0x6C, 0x12, 0x7C, 0x1D, 0x39, 0x2A, 0x35, 0x39, 0x30, 0x5, 0x32, 0x3C, 0x35, 0x54, 0x35, 0x39, 0x30, 0x5, 0x32, 0x3C, 0x35, 0x54, 0x35, 0x3C, 0x66, 0x3B, 0x34, 0x2B, 0x2A, 0x35, 0x39, 0x30, 0x5, 0x33, 0x3B, 0x35, 0x2A, 0x3B, 0x1A, 0x7D, 0x13, 0x6D, 0x48, 0x50, 0x4F, 0x0, 0x3, 0x0, 0x41, 0xFE, 0xF3, 0x4, 0x44, 0x5, 0xB0, 0x0, 0x5, 0x0, 0xB, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x37, 0x11, 0x27, 0x7, 0x11, 0x1, 0x14, 0x17, 0x11, 0x6, 0x15, 0x1, 0x27, 0x11, 0x23, 0x11, 0x26, 0x26, 0x35, 0x35, 0x34, 0x36, 0x37, 0x35, 0x33, 0x15, 0x37, 0x17, 0x35, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x27, 0x11, 0x36, 0x37, 0x17, 0x6, 0x7, 0x11, 0x23, 0x11, 0x2, 0x69, 0x2B, 0x2C, 0x1A, 0xFE, 0xE5, 0x74, 0x74, 0x1, 0x38, 0x1D, 0xA7, 0x9F, 0xC7, 0xC7, 0x9F, 0xA7, 0x1D, 0x29, 0xA7, 0xA1, 0x68, 0x8E, 0x2A, 0x51, 0x59, 0x28, 0x72, 0x55, 0x9E, 0xA7, 0x2, 0x64, 0x2, 0x2, 0x26, 0x1, 0x1, 0xFD, 0xD9, 0x1, 0x2, 0x87, 0x49, 0x1, 0xC0, 0x4B, 0x82, 0xFE, 0x17, 0x1, 0xFD, 0x51, 0x2, 0xC8, 0x2D, 0xE1, 0x9E, 0x23, 0x9E, 0xE1, 0x2D, 0x7A, 0x61, 0x1, 0x1, 0x61, 0x74, 0x24, 0x6C, 0x8C, 0x33, 0x1C, 0xFE, 0x14, 0x1A, 0x26, 0x93, 0x4F, 0x27, 0xFD, 0x39, 0x2, 0xAF, 0xFF, 0xFF, 0x0, 0x64, 0x1, 0x76, 0x2, 0x71, 0x3, 0x5A, 0x0, 0x27, 0x0, 0x12, 0x0, 0x1D, 0xFF, 0x6C, 0x0, 0x7, 0x0, 0x12, 0x0, 0x1D, 0x0, 0x8D, 0x0, 0x1, 0x0, 0x5B, 0xFE, 0xAB, 0x1, 0x98, 0x0, 0xEB, 0x0, 0x8, 0x0, 0x0, 0x37, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x27, 0x5B, 0xE5, 0x3, 0x55, 0x7F, 0x53, 0x69, 0x1, 0xEB, 0xCC, 0xA0, 0x87, 0x4D, 0x47, 0xDE, 0x64, 0x0, 0x2, 0x0, 0x5B, 0xFE, 0xAB, 0x2, 0xEE, 0x0, 0xEB, 0x0, 0x8, 0x0, 0x11, 0x0, 0x0, 0x25, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x25, 0x33, 0x15, 0x16, 0x17, 0x7, 0x26, 0x26, 0x27, 0x1, 0xB1, 0xE4, 0x2, 0x57, 0x80, 0x54, 0x69, 0xFE, 0xAA, 0xE5, 0x3, 0x55, 0x7F, 0x53, 0x69, 0x1, 0xEB, 0xC7, 0xA5, 0x87, 0x4D, 0x48, 0xE0, 0x65, 0xB3, 0xCC, 0xA0, 0x87, 0x4D, 0x47, 0xDE, 0x64, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x87, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x35, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x31, 0x6, 0x6, 0x23, 0x22, 0x26, 0x1, 0xE7, 0x3D, 0x56, 0x2B, 0x7D, 0x4D, 0x92, 0x58, 0x6E, 0xBC, 0x59, 0x6D, 0xFC, 0x7D, 0x2, 0xF2, 0xFD, 0x14, 0x4, 0x1E, 0xFD, 0xE, 0x3, 0xA, 0x1, 0x7A, 0xA0, 0x70, 0xBE, 0xFE, 0xFC, 0x46, 0x2F, 0x8B, 0x51, 0x55, 0x6B, 0xB3, 0xA4, 0x4, 0x41, 0xCB, 0xA0, 0xFB, 0xBA, 0xCA, 0x97, 0xD8, 0x6B, 0x0, 0x1, 0x0, 0x52, 0xFE, 0x8C, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x35, 0x21, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x31, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x6D, 0x20, 0x32, 0x47, 0x82, 0x48, 0x85, 0x4B, 0x60, 0xA5, 0x4C, 0x34, 0x18, 0xFD, 0x4B, 0x2, 0x26, 0xFD, 0xE5, 0x3, 0x4E, 0xFD, 0xD6, 0x2, 0x3F, 0x62, 0x87, 0x66, 0xB1, 0xFE, 0xFC, 0x1E, 0x52, 0x7C, 0x55, 0x5B, 0x6B, 0x5B, 0x58, 0x9F, 0x2, 0xD7, 0xC4, 0x99, 0xFD, 0x22, 0xC3, 0xA5, 0xCA, 0x6B, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x87, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x26, 0x5, 0xD9, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x0, 0x80, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x8C, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x26, 0x5, 0xDA, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x0, 0x15, 0xFF, 0x37, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x24, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x0, 0x33, 0x32, 0x4, 0x10, 0x4, 0x4, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x14, 0x6, 0x4, 0x2, 0x50, 0xEC, 0xFE, 0xE6, 0xEC, 0xFB, 0x9A, 0x95, 0x7F, 0x86, 0x8D, 0x86, 0xFC, 0x1, 0x16, 0xF7, 0xE7, 0x1, 0x1D, 0xFE, 0xF7, 0xFE, 0x66, 0x73, 0x86, 0x83, 0x86, 0xB7, 0xFD, 0xA8, 0xFE, 0xFA, 0x14, 0xD6, 0xB8, 0xAD, 0xD9, 0x49, 0x2D, 0x6B, 0x51, 0x56, 0x73, 0x89, 0x6B, 0xB6, 0x1, 0x7, 0xE3, 0xFE, 0xA0, 0xCA, 0x7F, 0x69, 0x57, 0x58, 0x6C, 0x7A, 0x8A, 0x99, 0xCD, 0x66, 0x0, 0x1, 0x0, 0x57, 0xFF, 0xEC, 0x3, 0xD6, 0x4, 0x4E, 0x0, 0x25, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x6, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x14, 0x6, 0x2, 0xD, 0xC7, 0xEF, 0xD4, 0xBC, 0x83, 0x5B, 0x58, 0x5C, 0x5F, 0x60, 0xF3, 0xE7, 0xCA, 0xC1, 0xE1, 0xD8, 0xB2, 0x8E, 0x54, 0x65, 0x5F, 0x51, 0x8A, 0x5, 0xEC, 0xEA, 0x14, 0xB8, 0x90, 0x91, 0x92, 0x28, 0x1C, 0x40, 0x35, 0x36, 0x52, 0x63, 0x3F, 0x92, 0xC6, 0xC3, 0x85, 0x88, 0x94, 0x25, 0x1E, 0x4C, 0x35, 0x3A, 0x4A, 0x50, 0x64, 0x86, 0xE4, 0x0, 0x1, 0x0, 0xA7, 0xFF, 0xEC, 0x2, 0x64, 0x5, 0xCC, 0x0, 0xD, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0xA7, 0xF8, 0x3F, 0x31, 0x2A, 0x2B, 0x43, 0x5D, 0x7C, 0xA1, 0x5, 0xCC, 0xFB, 0x5E, 0x49, 0x2B, 0xA, 0xBC, 0x18, 0x89, 0xA7, 0xFF, 0xFF, 0x0, 0xAA, 0xFF, 0xF4, 0x2, 0x62, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x42, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x1, 0x21, 0x1, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x1, 0x21, 0x2, 0x6F, 0xFE, 0xB2, 0xFE, 0xE7, 0x1, 0xE2, 0xE6, 0xEC, 0xFE, 0xEC, 0xE6, 0x1, 0xE2, 0xFE, 0xE8, 0x2, 0xB1, 0xFD, 0x4F, 0x3, 0x8D, 0xAF, 0x1, 0x74, 0xFE, 0x8C, 0xAF, 0xFC, 0x73, 0x0, 0x1, 0x0, 0x14, 0x0, 0x0, 0x4, 0x3D, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x0, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x1, 0x3, 0x32, 0xFE, 0xF6, 0xFE, 0xF7, 0xFE, 0xF5, 0x1, 0x8D, 0xCE, 0xD9, 0xF3, 0xE0, 0xD0, 0x1, 0x8E, 0x2, 0x4, 0xFD, 0xFC, 0x2, 0xBA, 0xAB, 0xD5, 0xD5, 0xAB, 0xFD, 0x46, 0x0, 0x2, 0x0, 0x47, 0xFF, 0xEC, 0x4, 0x84, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x27, 0x0, 0x0, 0x24, 0x36, 0x35, 0x34, 0x26, 0x27, 0x27, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x37, 0x26, 0x27, 0x3, 0x21, 0x13, 0x16, 0x17, 0x36, 0x37, 0x13, 0x21, 0x3, 0x6, 0x7, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0xD0, 0x68, 0x5C, 0x27, 0x4F, 0x83, 0x50, 0x69, 0x6A, 0xB7, 0xFE, 0xEC, 0x88, 0x49, 0x57, 0xB0, 0x5F, 0x6D, 0x1, 0xA, 0x5E, 0x42, 0x75, 0x79, 0x3D, 0x5E, 0x1, 0xA, 0x6F, 0x5C, 0xB0, 0x57, 0x50, 0x80, 0xFE, 0xEC, 0xB0, 0x63, 0x46, 0x3F, 0x59, 0x21, 0x43, 0x6E, 0x54, 0x3A, 0x46, 0x63, 0xC4, 0xB3, 0xB1, 0x6F, 0xA0, 0x3C, 0x48, 0xAC, 0xF9, 0x1, 0x28, 0xFE, 0xF4, 0xB8, 0x7B, 0x84, 0xAD, 0x1, 0xE, 0xFE, 0xD2, 0xEE, 0xB2, 0x48, 0x43, 0x9B, 0x6C, 0xB1, 0xB3, 0x0, 0x2, 0x0, 0x47, 0xFF, 0xEC, 0x4, 0x92, 0x6, 0x0, 0x0, 0xA, 0x0, 0x25, 0x0, 0x0, 0x24, 0x36, 0x35, 0x34, 0x27, 0x27, 0x7, 0x6, 0x15, 0x14, 0x16, 0x6, 0x24, 0x35, 0x34, 0x37, 0x37, 0x26, 0x2, 0x27, 0x27, 0x21, 0x17, 0x12, 0x17, 0x36, 0x13, 0x37, 0x21, 0x7, 0x6, 0x2, 0x7, 0x17, 0x16, 0x15, 0x14, 0x4, 0x2, 0xD6, 0x6A, 0x40, 0x94, 0x98, 0x3B, 0x69, 0x4C, 0xFE, 0xED, 0x83, 0xAB, 0x6B, 0xBE, 0x2B, 0x36, 0x1, 0x9, 0x2D, 0x36, 0xB9, 0xB9, 0x36, 0x2D, 0x1, 0xA, 0x37, 0x2B, 0xC0, 0x6A, 0xB3, 0x7C, 0xFE, 0xED, 0xB0, 0x63, 0x46, 0x40, 0x39, 0x80, 0x85, 0x33, 0x41, 0x46, 0x63, 0xC4, 0xB3, 0xB1, 0x8E, 0x6E, 0x8F, 0x67, 0x1, 0x1B, 0xC7, 0xDC, 0xCB, 0xFE, 0xEC, 0xBD, 0xBD, 0x1, 0x14, 0xCB, 0xDC, 0xC7, 0xFE, 0xE6, 0x67, 0x96, 0x69, 0x8D, 0xB1, 0xB3, 0x0, 0x1, 0x0, 0x68, 0xFF, 0xEB, 0x8, 0x29, 0x5, 0xC5, 0x0, 0x2C, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x11, 0x10, 0x0, 0x21, 0x15, 0x22, 0x6, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x35, 0x20, 0x0, 0x11, 0x11, 0x10, 0x0, 0x5, 0xCC, 0x70, 0xCB, 0x48, 0x49, 0xCB, 0x70, 0xFE, 0xF4, 0xFE, 0xAF, 0x1, 0x52, 0x1, 0x11, 0xA9, 0xBE, 0xBD, 0xA4, 0x7F, 0x87, 0xFC, 0x86, 0x7F, 0xA4, 0xBD, 0xBE, 0xA9, 0x1, 0x11, 0x1, 0x52, 0xFE, 0xB0, 0x15, 0x45, 0x45, 0x45, 0x45, 0x1, 0x61, 0x1, 0x9, 0x1, 0x6, 0x1, 0xA, 0x1, 0x60, 0xCD, 0xF1, 0xAA, 0xFE, 0xF8, 0xAB, 0xF5, 0x88, 0x73, 0x1, 0x62, 0xFE, 0x9E, 0x73, 0x88, 0xF5, 0xAB, 0x1, 0x8, 0xAA, 0xF1, 0xCD, 0xFE, 0xA0, 0xFE, 0xF6, 0xFE, 0xFA, 0xFE, 0xF7, 0xFE, 0x9F, 0x0, 0x1, 0x0, 0x4F, 0xFF, 0xEB, 0x6, 0x7C, 0x4, 0x4E, 0x0, 0x2A, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x0, 0x17, 0x15, 0x14, 0x0, 0x4, 0x77, 0xA9, 0x68, 0x69, 0xA9, 0xF9, 0xFE, 0xF4, 0x1, 0x3, 0xEE, 0x87, 0x77, 0x7F, 0x93, 0x56, 0x42, 0xF3, 0x41, 0x57, 0x93, 0x7F, 0x77, 0x87, 0xED, 0x1, 0x1, 0x3, 0xFE, 0xF4, 0x15, 0x4D, 0x4D, 0x1, 0x45, 0xD8, 0x2A, 0xD8, 0x1, 0x44, 0xC4, 0xDD, 0x7B, 0x2A, 0x7C, 0xDD, 0x4C, 0x40, 0x1, 0x8, 0xFE, 0xF8, 0x40, 0x4C, 0xDD, 0x7C, 0x2A, 0x7B, 0xDD, 0xC4, 0xFE, 0xC2, 0xD5, 0x33, 0xD8, 0xFE, 0xBB, 0x0, 0x2, 0x0, 0x18, 0x0, 0x0, 0x5, 0xD4, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x14, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x1, 0xA3, 0xFE, 0x75, 0x2, 0x88, 0x1, 0x2D, 0xF6, 0x1, 0x11, 0xFE, 0xED, 0xF8, 0xFE, 0xD7, 0x1, 0x29, 0x8C, 0x83, 0x83, 0x8C, 0xFE, 0xD7, 0x4, 0xED, 0xC3, 0xFD, 0xD3, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x2, 0x0, 0x1F, 0x0, 0x0, 0x4, 0xEB, 0x4, 0x3A, 0x0, 0xC, 0x0, 0x14, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x23, 0x1, 0x58, 0xFE, 0xC7, 0x2, 0x2C, 0xF1, 0xCF, 0xE0, 0xE2, 0xD1, 0xED, 0xED, 0x69, 0x57, 0x57, 0x69, 0xED, 0x3, 0x77, 0xC3, 0xFE, 0xA8, 0x1, 0xCE, 0xA1, 0x9D, 0xD5, 0xC2, 0x6A, 0x84, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x0, 0x0, 0x7, 0x17, 0x5, 0xB0, 0x0, 0x27, 0x0, 0x2E, 0x5, 0x77, 0x0, 0x0, 0x0, 0x6, 0x5, 0xE7, 0xB7, 0x0, 0xFF, 0xFF, 0x0, 0x1F, 0x0, 0x0, 0x6, 0x92, 0x4, 0x3A, 0x0, 0x27, 0x0, 0x8E, 0x5, 0xF, 0x0, 0x0, 0x0, 0x6, 0x5, 0xE8, 0x0, 0x0, 0x0, 0x2, 0x0, 0x96, 0x0, 0x0, 0x6, 0x3F, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x1E, 0x0, 0x0, 0x21, 0x11, 0x23, 0x11, 0x23, 0x11, 0x33, 0x15, 0x33, 0x35, 0x33, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x25, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x2, 0xE, 0x7C, 0xFC, 0xFC, 0x7C, 0xFD, 0x1, 0x4F, 0xFE, 0xB1, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFE, 0xEC, 0xF8, 0xFE, 0xD8, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x4, 0x2E, 0xFB, 0xD2, 0x5, 0xB0, 0xB9, 0xB9, 0xB9, 0xC9, 0xAB, 0x1, 0xF3, 0xC9, 0xC8, 0xFE, 0xCA, 0x99, 0xCA, 0x8B, 0x0, 0x2, 0x0, 0x7D, 0x0, 0x0, 0x5, 0x8B, 0x6, 0x18, 0x0, 0x16, 0x0, 0x1E, 0x0, 0x0, 0x21, 0x11, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x34, 0x26, 0x23, 0x23, 0x1, 0xF7, 0x87, 0xF3, 0xF3, 0x87, 0xF3, 0x1, 0x3E, 0xFE, 0xC2, 0xF2, 0xCF, 0xE0, 0xE2, 0xD1, 0xEE, 0xEE, 0x69, 0x57, 0x57, 0x69, 0xEE, 0x4, 0x2E, 0xFB, 0xD2, 0x6, 0x0, 0xFE, 0xF1, 0x1, 0x27, 0xFE, 0xD9, 0xC3, 0xFE, 0xB4, 0x1, 0xCE, 0xA1, 0x9D, 0xD5, 0xC2, 0x6A, 0x84, 0x70, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x6, 0xD1, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x21, 0x0, 0x0, 0x25, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x5, 0x11, 0x23, 0x2, 0x0, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x13, 0x33, 0x11, 0x33, 0x11, 0x2, 0xC4, 0xA8, 0xB6, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0x3, 0xB3, 0xB9, 0x16, 0xFE, 0xBB, 0xFD, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x8, 0x1, 0x4B, 0x9, 0xB7, 0xFC, 0xBC, 0x1, 0x2, 0xF5, 0x4B, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0xBC, 0x2, 0x5D, 0xFE, 0xDA, 0xFE, 0xB5, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x98, 0xFE, 0xC4, 0x2, 0x90, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x6, 0x47, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x21, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x11, 0x21, 0x6, 0x0, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x17, 0x21, 0x11, 0x33, 0x11, 0x1, 0x42, 0x7D, 0x89, 0x86, 0x7D, 0x7C, 0x89, 0x87, 0x7D, 0x4, 0x12, 0xFE, 0xE6, 0x15, 0xFE, 0xFC, 0xD9, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0xD5, 0x1, 0x3, 0x1A, 0x1, 0x1C, 0xF3, 0x2, 0x12, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0xFD, 0xD9, 0x1, 0xC4, 0xCE, 0xFE, 0xF6, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xFF, 0x0, 0xC6, 0x1, 0xB2, 0xFB, 0xC6, 0x0, 0x2, 0x0, 0x96, 0x0, 0x0, 0x7, 0x20, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x13, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x33, 0x1, 0x21, 0x3, 0x21, 0x3, 0x5, 0x5B, 0xD3, 0xD3, 0xFE, 0x3B, 0x80, 0xDE, 0xFC, 0xFC, 0x1, 0x2B, 0x1, 0x59, 0xE3, 0x2, 0x27, 0xFE, 0xF8, 0x77, 0xFD, 0xCD, 0x76, 0x2, 0x1F, 0x2, 0x5D, 0xFD, 0xA3, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x5, 0xB0, 0xFC, 0x6F, 0x3, 0x91, 0xFA, 0x50, 0x1, 0x54, 0xFE, 0xAC, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x5, 0xAC, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x2D, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x35, 0x23, 0x4, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x23, 0x15, 0x23, 0x11, 0x33, 0x11, 0x33, 0x12, 0x25, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x3, 0xA9, 0x54, 0x7A, 0x19, 0x91, 0xFE, 0xFF, 0x58, 0x1, 0x5E, 0x12, 0xA, 0x73, 0xAA, 0x83, 0xBD, 0x21, 0xAA, 0xF3, 0xF3, 0xA6, 0x3F, 0x1, 0x8A, 0xB1, 0x5F, 0x5F, 0x56, 0x67, 0xF3, 0xF2, 0xCC, 0xB6, 0xED, 0x29, 0xAF, 0x51, 0x31, 0xCC, 0x5, 0xB0, 0x41, 0x58, 0xAF, 0x25, 0x41, 0x7A, 0x7E, 0x64, 0xCE, 0x4, 0x3A, 0xFD, 0x51, 0x1, 0x2, 0x8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0x20, 0x92, 0x57, 0x11, 0x0, 0x3, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x5, 0x1, 0x33, 0x1, 0x3, 0x6B, 0xC1, 0xC1, 0x2, 0xC, 0x43, 0xFD, 0xF1, 0x43, 0xFE, 0xB2, 0x2, 0x26, 0xE3, 0x2, 0x28, 0x2, 0x54, 0x2, 0x29, 0xFD, 0xD7, 0xFE, 0x76, 0xC0, 0xC0, 0xCA, 0x5, 0xB0, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x1C, 0x0, 0x0, 0x4, 0xAC, 0x4, 0x3A, 0x0, 0x2, 0x0, 0x6, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x5, 0x1, 0x33, 0x1, 0x2, 0xF3, 0x8F, 0x8E, 0x1, 0x8F, 0x28, 0xFE, 0x4F, 0x28, 0xFE, 0xB8, 0x1, 0xCD, 0xF8, 0x1, 0xCB, 0x1, 0xD2, 0x1, 0x61, 0xFE, 0x9F, 0xFE, 0xE6, 0x63, 0x63, 0xB8, 0x4, 0x3A, 0xFB, 0xC6, 0x0, 0x3, 0x0, 0x80, 0x0, 0x0, 0x6, 0x6E, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xA, 0x0, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x3, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x23, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x36, 0x24, 0x37, 0x33, 0x1, 0x21, 0x1, 0x33, 0x32, 0x4, 0x15, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0x7F, 0xE9, 0xFE, 0x2E, 0x1D, 0x62, 0x77, 0x16, 0x3, 0xDA, 0x16, 0x77, 0x62, 0xFE, 0x8D, 0xFE, 0x7A, 0xFC, 0x2, 0x1, 0x4, 0xDF, 0x22, 0xFE, 0x85, 0x4, 0xE5, 0xFE, 0x85, 0x17, 0xD5, 0x1, 0xC, 0xFC, 0xFE, 0x8C, 0x3, 0x3A, 0x1, 0xA9, 0xFD, 0x79, 0x3A, 0x4D, 0x4D, 0x3A, 0xFD, 0xA4, 0x1, 0x11, 0xFE, 0xEF, 0x1, 0x68, 0xF4, 0xCA, 0x3, 0x2, 0x87, 0xFD, 0x79, 0xCD, 0xFB, 0xFE, 0x9F, 0x1, 0x11, 0xFE, 0xEF, 0x0, 0x3, 0x0, 0x5C, 0x0, 0x0, 0x5, 0x3E, 0x4, 0x3B, 0x0, 0x2, 0x0, 0xA, 0x0, 0x22, 0x0, 0x0, 0x1, 0x13, 0x21, 0x3, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x23, 0x1, 0x35, 0x21, 0x15, 0x23, 0x35, 0x36, 0x36, 0x37, 0x1, 0x33, 0x35, 0x21, 0x15, 0x33, 0x1, 0x16, 0x16, 0x17, 0x15, 0x23, 0x35, 0x21, 0x15, 0x2, 0xD4, 0x95, 0xFE, 0xD6, 0x14, 0x49, 0x61, 0x18, 0x2, 0xC8, 0x18, 0x61, 0x49, 0xFE, 0xE9, 0xFE, 0xF7, 0xF3, 0x2, 0xD5, 0xBE, 0xFE, 0xE9, 0xA8, 0x2, 0xC6, 0x86, 0xFE, 0xE9, 0xB7, 0xCF, 0x1, 0xF3, 0xFF, 0x0, 0x2, 0x69, 0x1, 0x22, 0xFE, 0x19, 0x29, 0x35, 0x35, 0x29, 0xFE, 0x5C, 0x96, 0x96, 0xB3, 0xDA, 0xC8, 0xB, 0x1, 0xDA, 0x1, 0x1, 0xFE, 0x25, 0xE, 0xC9, 0xDA, 0xAE, 0x96, 0x96, 0x0, 0x3, 0x0, 0x96, 0x0, 0x0, 0x7, 0x20, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x6, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x5, 0x13, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x33, 0x1, 0x5, 0x48, 0xC0, 0xC1, 0x2, 0xC, 0x44, 0xFD, 0xF2, 0x44, 0xFE, 0xB3, 0x95, 0xF3, 0xFC, 0xFC, 0x1, 0x3F, 0x1, 0x45, 0xE3, 0x2, 0x27, 0x2, 0x54, 0x2, 0x28, 0xFD, 0xD8, 0xFE, 0x71, 0xC5, 0xC5, 0xC5, 0x1, 0x8A, 0xFE, 0x76, 0x5, 0xB0, 0xFC, 0xA4, 0x3, 0x5C, 0xFA, 0x50, 0x0, 0x3, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x4B, 0x4, 0x3A, 0x0, 0x2, 0x0, 0x6, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x5, 0x13, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x1, 0x33, 0x1, 0x4, 0x92, 0x8F, 0x8E, 0x1, 0x8F, 0x28, 0xFE, 0x4F, 0x28, 0xFE, 0xB8, 0x79, 0xC4, 0xF3, 0xF3, 0x1, 0x12, 0x1, 0x6, 0xF8, 0x1, 0xCB, 0x1, 0xD2, 0x1, 0x61, 0xFE, 0x9F, 0xFE, 0xE6, 0x63, 0x63, 0xB8, 0x1, 0x1B, 0xFE, 0xE5, 0x4, 0x3A, 0xFD, 0x98, 0x2, 0x68, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x1E, 0xFE, 0x60, 0x5, 0x82, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x2, 0x7, 0x27, 0x36, 0x12, 0x12, 0x13, 0x33, 0x1, 0x23, 0x3, 0x3, 0x8D, 0xF2, 0x40, 0xD6, 0xAD, 0xBA, 0xBC, 0xE4, 0x8D, 0x39, 0xE7, 0x2, 0x17, 0xFB, 0xFA, 0xFE, 0x60, 0x4, 0x5E, 0xC6, 0xFE, 0xA2, 0xB8, 0x97, 0xC0, 0x1, 0x96, 0x1, 0xCF, 0x1, 0x12, 0xFA, 0x50, 0x2, 0xE7, 0x0, 0x1, 0x0, 0x22, 0xFE, 0x60, 0x4, 0xC0, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x6, 0x7, 0x27, 0x36, 0x12, 0x13, 0x33, 0x1, 0x23, 0x3, 0x3, 0x5, 0xF3, 0x35, 0xA0, 0x7B, 0xA0, 0xD9, 0xC7, 0x43, 0xEB, 0x1, 0xD0, 0xFC, 0xBF, 0xFE, 0x60, 0x3, 0x72, 0x84, 0xF0, 0x72, 0x9E, 0xDA, 0x1, 0xBF, 0x1, 0x17, 0xFB, 0xC6, 0x1, 0xF3, 0x0, 0x1, 0x0, 0x3B, 0xFE, 0xA1, 0x5, 0x65, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x13, 0x3, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x4F, 0x14, 0xB0, 0xFD, 0x2, 0x81, 0xFC, 0xFB, 0xD1, 0xFE, 0xA1, 0x2, 0x2C, 0x4, 0xE3, 0xFB, 0x1A, 0x4, 0xE6, 0xFA, 0x50, 0xFE, 0xA1, 0x0, 0x1, 0x0, 0x2E, 0xFE, 0xBF, 0x4, 0x4D, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x13, 0x3, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x42, 0x14, 0x93, 0xF3, 0x1, 0xA7, 0xF2, 0xFC, 0xD2, 0xFE, 0xBF, 0x2, 0x3, 0x3, 0x78, 0xFC, 0x89, 0x3, 0x77, 0xFB, 0xC6, 0xFE, 0xBF, 0x0, 0x2, 0x0, 0x24, 0xFE, 0x9A, 0x7, 0x4F, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x16, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x1, 0x11, 0x21, 0x11, 0x23, 0x3, 0x33, 0x36, 0x12, 0x13, 0x13, 0x21, 0x15, 0x21, 0x11, 0x33, 0x3, 0x1, 0xB7, 0x2, 0x70, 0xFE, 0x57, 0x18, 0x1D, 0x2, 0x96, 0xFC, 0x41, 0xF3, 0x9, 0x76, 0x36, 0x84, 0x14, 0x26, 0x5, 0xC1, 0xFD, 0xD5, 0xB8, 0xD, 0xCA, 0x4, 0x1B, 0xFE, 0x55, 0xFE, 0x6F, 0xFC, 0xF1, 0x1, 0x66, 0xFE, 0x9A, 0x2, 0x30, 0x34, 0x1, 0x19, 0x1, 0x27, 0x2, 0x72, 0xCB, 0xFB, 0xE5, 0xFD, 0xD0, 0x0, 0x2, 0x0, 0x27, 0xFE, 0xBE, 0x5, 0xFE, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x16, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x7, 0x2, 0x3, 0x11, 0x23, 0x13, 0x33, 0x36, 0x36, 0x37, 0x13, 0x21, 0x15, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x1, 0x9F, 0x1, 0x9E, 0xFE, 0xEF, 0x5, 0xC, 0xFD, 0xF7, 0x1, 0x59, 0x54, 0x58, 0x7, 0xC, 0x4, 0xBE, 0xFE, 0x32, 0x96, 0xF3, 0xC3, 0x2, 0xA6, 0xB6, 0xFE, 0xC5, 0xFE, 0x88, 0xFE, 0xBE, 0x2, 0x5, 0x5E, 0xC9, 0xCD, 0x1, 0x83, 0xD1, 0xFD, 0x5A, 0xFD, 0xFB, 0x1, 0x42, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x7, 0x3A, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x13, 0x13, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x2D, 0x31, 0x7B, 0x61, 0xD, 0x1B, 0x5, 0xD8, 0xFD, 0xD4, 0xFD, 0xFE, 0x43, 0x1B, 0x16, 0xC5, 0xE7, 0xCA, 0x5, 0xE, 0xF4, 0x1, 0x2E, 0x2, 0xB1, 0xCB, 0xFB, 0x1B, 0x4, 0xE5, 0xFD, 0xCB, 0xFE, 0x8C, 0xFE, 0xC7, 0x3, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x5, 0xE2, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x33, 0x27, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x6, 0x7, 0x23, 0x1, 0x27, 0x5F, 0x44, 0xA, 0x14, 0x4, 0xD8, 0xFE, 0x32, 0xF3, 0xFE, 0xCF, 0x15, 0x13, 0xAA, 0xAC, 0xCB, 0x3, 0x8, 0xC1, 0xD5, 0x1, 0xCE, 0xC4, 0xFC, 0x8A, 0x3, 0x76, 0xFE, 0x8B, 0xFE, 0xEB, 0xEA, 0x2, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x8, 0x98, 0x5, 0xB0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x13, 0x1, 0x23, 0x1, 0x1, 0x91, 0xFC, 0x1, 0x47, 0x1, 0xA4, 0x1, 0xA3, 0x3, 0x75, 0xFD, 0xD3, 0xFC, 0x18, 0xFE, 0x53, 0xB5, 0xFE, 0x53, 0x1, 0xE0, 0xFE, 0x20, 0x5, 0xB0, 0xFB, 0xA4, 0x4, 0x5C, 0xCB, 0xFB, 0x1B, 0x1, 0xE0, 0x2, 0x80, 0xFB, 0xA0, 0x4, 0x61, 0x0, 0x1, 0x0, 0x88, 0x0, 0x0, 0x7, 0x34, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x1, 0x2, 0xA6, 0xFE, 0xD5, 0xF3, 0x1, 0x33, 0x1, 0x3D, 0x1, 0x41, 0x2, 0xFB, 0xFE, 0x34, 0xF2, 0xFE, 0xD5, 0x2, 0xD2, 0xFD, 0x2E, 0x4, 0x3A, 0xFC, 0xF1, 0x3, 0xF, 0xC4, 0xFC, 0x8A, 0x2, 0xCF, 0xFD, 0x31, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0xB8, 0x5, 0xA, 0xFD, 0x86, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x25, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x27, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x2, 0x48, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0x7D, 0x6, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x14, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0xC3, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0x1, 0x6C, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x4, 0x0, 0x66, 0xFF, 0xEF, 0x5, 0x75, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x25, 0x0, 0x2F, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x3, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x27, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x5, 0x75, 0xFE, 0x9C, 0xFE, 0xDE, 0xFE, 0xE6, 0xFE, 0x94, 0x3, 0x1, 0x6B, 0x1, 0x1C, 0x1, 0x22, 0x1, 0x66, 0xFD, 0xD2, 0xB9, 0xB2, 0xD8, 0xDA, 0xB2, 0xB9, 0xD0, 0xFE, 0x9F, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xFE, 0x9A, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2, 0xB5, 0xFE, 0xAA, 0xFE, 0x90, 0x1, 0x6B, 0x1, 0x50, 0x53, 0x1, 0x56, 0x1, 0x71, 0xFE, 0x8F, 0xFE, 0xAA, 0x2, 0xFD, 0xF7, 0xF7, 0xFD, 0x4A, 0xFD, 0xF9, 0xF9, 0xFD, 0x22, 0x38, 0x4A, 0x4A, 0x38, 0x37, 0x49, 0x49, 0x37, 0x38, 0x4A, 0x4A, 0x38, 0x37, 0x49, 0x49, 0x0, 0x4, 0x0, 0x50, 0xFF, 0xEC, 0x5, 0x26, 0x4, 0x4E, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x24, 0x0, 0x2E, 0x0, 0x0, 0x13, 0x34, 0x0, 0x21, 0x20, 0x0, 0x15, 0x15, 0x14, 0x0, 0x20, 0x0, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x50, 0x1, 0x46, 0x1, 0x24, 0x1, 0x26, 0x1, 0x46, 0xFE, 0xBB, 0xFD, 0xB6, 0xFE, 0xB9, 0xF3, 0xB9, 0xC0, 0xBF, 0xB9, 0xBA, 0xC0, 0xBE, 0xB9, 0x1, 0x96, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0xFE, 0xB1, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0x2, 0x27, 0xF1, 0x1, 0x36, 0xFE, 0xCA, 0xF1, 0x15, 0xF1, 0xFE, 0xCB, 0x1, 0x35, 0xF1, 0x9C, 0xC7, 0xC7, 0x9C, 0x15, 0x9A, 0xCA, 0xCA, 0x9A, 0xE, 0x38, 0x4A, 0x4A, 0x38, 0x37, 0x49, 0x49, 0x37, 0x38, 0x4A, 0x4A, 0x38, 0x37, 0x49, 0x49, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x8, 0xDB, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x27, 0x1, 0xB8, 0x5, 0xA, 0xFD, 0x86, 0x0, 0x27, 0x1, 0xB8, 0x8, 0xC5, 0xFD, 0x86, 0x0, 0x7, 0x0, 0x34, 0x3, 0xBC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0x39, 0x4, 0x4E, 0x0, 0x27, 0x6, 0x2, 0x2, 0xFB, 0x0, 0x0, 0x0, 0x6, 0x6, 0x2, 0x0, 0x0, 0x0, 0xF, 0x0, 0x55, 0xFD, 0xE4, 0x9, 0x75, 0x6, 0x72, 0x0, 0x2B, 0x0, 0x39, 0x0, 0x47, 0x0, 0x53, 0x0, 0x5D, 0x0, 0x6B, 0x0, 0x79, 0x0, 0x87, 0x0, 0x91, 0x0, 0x9B, 0x0, 0xA7, 0x0, 0xB5, 0x0, 0xC3, 0x0, 0xCB, 0x0, 0xD5, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x37, 0x26, 0x26, 0x35, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x12, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x24, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x6, 0x45, 0xE2, 0x7E, 0x7C, 0xE3, 0xDC, 0xF6, 0x29, 0xBA, 0xCE, 0xCE, 0xB9, 0x28, 0xF6, 0xDB, 0xE2, 0x7E, 0x7E, 0xE0, 0xDD, 0xF6, 0x28, 0xBA, 0xCD, 0xCE, 0xBA, 0x29, 0xF6, 0xFC, 0x66, 0x7D, 0x77, 0x78, 0x7D, 0x7C, 0x77, 0x76, 0x3, 0x3D, 0x7D, 0x76, 0x77, 0x7E, 0x7C, 0x76, 0x76, 0xFD, 0x47, 0x3E, 0x39, 0x3A, 0x3F, 0x3F, 0x3A, 0x39, 0x3E, 0x2, 0xBE, 0x3F, 0x72, 0x3F, 0x3F, 0x72, 0x3F, 0xFC, 0x5B, 0x7D, 0x76, 0x77, 0x7E, 0x7C, 0x77, 0x77, 0x3, 0x3D, 0x7C, 0x77, 0x77, 0x7E, 0x7C, 0x77, 0x76, 0x3, 0x3D, 0x7D, 0x76, 0x77, 0x7E, 0x7C, 0x76, 0x76, 0xFA, 0x88, 0x3E, 0x74, 0x3E, 0x3E, 0x74, 0x3E, 0x2, 0xBF, 0x3F, 0x72, 0x3F, 0x3F, 0x72, 0x3F, 0x2, 0xBE, 0x3F, 0x39, 0x3A, 0x3F, 0x3F, 0x3A, 0x39, 0x3F, 0xFC, 0x5B, 0x7D, 0x77, 0x78, 0x7D, 0x7C, 0x77, 0x76, 0x3, 0x3D, 0x7D, 0x76, 0x77, 0x7E, 0x7C, 0x76, 0x76, 0x5, 0x3F, 0x72, 0x3F, 0x3F, 0x72, 0x3F, 0xFD, 0x42, 0x3E, 0x39, 0x3A, 0x3F, 0x3F, 0x3A, 0x39, 0x3E, 0xFD, 0xE4, 0x8F, 0x8F, 0xFC, 0xBC, 0x15, 0x6B, 0x58, 0x16, 0xED, 0xAA, 0x15, 0xAA, 0xEF, 0x16, 0x57, 0x7D, 0xBD, 0xFC, 0x8F, 0x8F, 0xFC, 0xBD, 0x15, 0x68, 0x57, 0x17, 0xEF, 0xA9, 0x15, 0xAA, 0xEE, 0x15, 0x58, 0x80, 0xBC, 0xFC, 0x5, 0xC3, 0x98, 0x64, 0x16, 0x63, 0x9A, 0x9A, 0x63, 0x16, 0x64, 0x98, 0x98, 0x64, 0x16, 0x63, 0x9A, 0x9A, 0x63, 0x16, 0x64, 0x98, 0x1, 0x6, 0x32, 0x45, 0x45, 0x32, 0x31, 0x45, 0x45, 0x31, 0x32, 0x45, 0x45, 0x32, 0x31, 0x45, 0x45, 0xFC, 0xA8, 0x99, 0x64, 0x15, 0x63, 0x9B, 0x9B, 0x63, 0x15, 0x64, 0x99, 0x99, 0x64, 0x15, 0x63, 0x9B, 0x9B, 0x63, 0x15, 0x64, 0x99, 0x99, 0x64, 0x15, 0x63, 0x9B, 0x9B, 0x63, 0x15, 0x64, 0x99, 0x1, 0x6, 0x33, 0x44, 0x44, 0x33, 0x31, 0x44, 0x44, 0x31, 0x33, 0x44, 0x44, 0x33, 0x31, 0x44, 0x44, 0x31, 0x33, 0x44, 0x44, 0x33, 0x31, 0x44, 0x44, 0xFC, 0xA7, 0x97, 0x65, 0x16, 0x63, 0x9A, 0x9A, 0x63, 0x16, 0x65, 0x97, 0x97, 0x65, 0x16, 0x63, 0x9A, 0x9A, 0x63, 0x16, 0x65, 0x97, 0x1, 0x38, 0x45, 0x45, 0x64, 0x44, 0x44, 0x64, 0x45, 0x45, 0x64, 0x44, 0x44, 0x0, 0x1, 0xFB, 0x5D, 0x3, 0xD8, 0x0, 0x13, 0x5, 0xAC, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0xFC, 0x25, 0xC8, 0x4, 0xB6, 0xC8, 0xFC, 0xDA, 0x3, 0xD8, 0x1, 0xD4, 0xFE, 0x2C, 0x1, 0x16, 0x0, 0x8, 0xF9, 0x94, 0xFE, 0x4, 0x1, 0xDC, 0x6, 0x35, 0x0, 0xB, 0x0, 0x17, 0x0, 0x23, 0x0, 0x2F, 0x0, 0x3B, 0x0, 0x47, 0x0, 0x53, 0x0, 0x5F, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x5, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x21, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x1, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x21, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x1, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x21, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0x5, 0x17, 0x37, 0x33, 0x7, 0x17, 0x23, 0x27, 0x7, 0x23, 0x37, 0x27, 0xFD, 0x88, 0x30, 0x31, 0x8C, 0x6D, 0x70, 0x8A, 0x34, 0x34, 0x8C, 0x71, 0x6E, 0x2, 0xF7, 0x30, 0x31, 0x8A, 0x6E, 0x71, 0x8B, 0x35, 0x33, 0x8B, 0x70, 0x6D, 0xFB, 0xB5, 0x30, 0x2D, 0x90, 0x6D, 0x70, 0x8E, 0x30, 0x34, 0x8C, 0x71, 0x6E, 0x6, 0x5D, 0x30, 0x31, 0x8A, 0x6E, 0x71, 0x8B, 0x35, 0x33, 0x8B, 0x70, 0x6D, 0xF9, 0xC1, 0x30, 0x31, 0x8C, 0x6D, 0x70, 0x8A, 0x34, 0x34, 0x8C, 0x71, 0x6E, 0x6, 0x67, 0x30, 0x31, 0x8A, 0x6E, 0x71, 0x8B, 0x35, 0x33, 0x8B, 0x70, 0x6D, 0xFB, 0xA1, 0x30, 0x31, 0x8C, 0x6D, 0x70, 0x8A, 0x34, 0x34, 0x8C, 0x71, 0x6E, 0x3, 0x1, 0x30, 0x31, 0x8C, 0x6D, 0x70, 0x8A, 0x34, 0x34, 0x8C, 0x71, 0x6E, 0x6, 0x35, 0x60, 0x60, 0xB1, 0xB4, 0x65, 0x65, 0xB4, 0xB1, 0xDC, 0x60, 0x60, 0xB1, 0xB4, 0x65, 0x65, 0xB4, 0xB1, 0x60, 0x60, 0xB1, 0xB4, 0x65, 0x65, 0xB4, 0xB1, 0xFD, 0x81, 0x60, 0x60, 0xB1, 0xB4, 0x65, 0x65, 0xB4, 0xB1, 0x60, 0x60, 0xB1, 0xB4, 0x65, 0x65, 0xB4, 0xB1, 0xFD, 0x81, 0x61, 0x61, 0xB1, 0xB4, 0x64, 0x64, 0xB4, 0xB1, 0x61, 0x61, 0xB1, 0xB4, 0x64, 0x64, 0xB4, 0xB1, 0xF2, 0x61, 0x61, 0xB1, 0xB4, 0x64, 0x64, 0xB4, 0xB1, 0x0, 0x2, 0xFB, 0x5D, 0xFE, 0xB8, 0x0, 0x13, 0x5, 0xAC, 0x0, 0x7, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0xFC, 0x25, 0xC8, 0x4, 0xB6, 0xC8, 0xFC, 0xDA, 0xC8, 0xC8, 0x3, 0x26, 0xC8, 0xFB, 0x4A, 0x3, 0xD8, 0x1, 0xD4, 0xFE, 0x2C, 0x1, 0x16, 0xFB, 0x9E, 0xFE, 0xEA, 0x1, 0x16, 0xFE, 0x2C, 0x0, 0xA, 0xF9, 0x7A, 0xFE, 0x23, 0x1, 0xF9, 0x6, 0x3A, 0x0, 0xB, 0x0, 0xF, 0x0, 0x13, 0x0, 0x17, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x23, 0x0, 0x27, 0x0, 0x2B, 0x0, 0x2F, 0x0, 0x0, 0x1, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x1, 0x15, 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x1, 0x23, 0x11, 0x33, 0x1, 0x23, 0x11, 0x33, 0x1, 0x23, 0x11, 0x33, 0xFE, 0x90, 0x77, 0xC3, 0x78, 0x78, 0xC3, 0x77, 0x3, 0x69, 0xFE, 0x14, 0xFB, 0x59, 0xFE, 0x14, 0x8, 0x7F, 0xFE, 0x14, 0xFB, 0x59, 0xFE, 0x14, 0x8, 0x7F, 0xFE, 0x14, 0xFB, 0x59, 0xFE, 0x14, 0x4, 0x9F, 0xC3, 0xC3, 0xFE, 0xA2, 0xC3, 0xC3, 0x2, 0xBC, 0xC3, 0xC3, 0x5, 0x7, 0x71, 0x71, 0xC3, 0x70, 0x70, 0xFE, 0x31, 0xC3, 0xC3, 0xC3, 0xC3, 0xFE, 0xA2, 0xC3, 0xC3, 0xC3, 0xC3, 0xFE, 0xA2, 0xC3, 0xC3, 0xC3, 0xC3, 0xFC, 0xE4, 0x1, 0x88, 0xFE, 0x78, 0x1, 0x88, 0xFE, 0x78, 0x1, 0x88, 0x0, 0x2, 0x0, 0x50, 0x1, 0x8D, 0x3, 0x66, 0x5, 0x20, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x13, 0x21, 0x37, 0x17, 0x21, 0x7, 0x17, 0x21, 0x7, 0x27, 0x21, 0x37, 0x33, 0x7, 0x33, 0x17, 0x37, 0x33, 0x27, 0x37, 0x23, 0x27, 0x7, 0x23, 0x50, 0x1, 0x7, 0x85, 0x84, 0x1, 0x6, 0x84, 0x84, 0xFE, 0xFA, 0x84, 0x85, 0xFE, 0xF9, 0x84, 0x8A, 0x3C, 0x7B, 0x3F, 0x40, 0x7B, 0x3E, 0x3E, 0x7B, 0x40, 0x3F, 0x7B, 0x4, 0x3A, 0xE6, 0xE6, 0xE5, 0xE2, 0xE6, 0xE6, 0xE2, 0x6C, 0x6C, 0x6C, 0x6C, 0x6D, 0x6E, 0x6E, 0x0, 0x1, 0xFC, 0xB8, 0x4, 0xA4, 0xFE, 0xA0, 0x6, 0xE0, 0x0, 0x19, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x23, 0x22, 0x7, 0x33, 0x15, 0x23, 0x16, 0x33, 0x32, 0x37, 0xFE, 0xA0, 0x82, 0x61, 0x78, 0x8D, 0x8D, 0x78, 0x59, 0x8A, 0x81, 0x8, 0x5A, 0x65, 0xE, 0xA6, 0xA6, 0xD, 0x66, 0x5C, 0x6, 0x5, 0x74, 0x5E, 0x72, 0x9A, 0x7B, 0x12, 0x7B, 0x9A, 0x63, 0x5E, 0x4E, 0x78, 0x62, 0x7B, 0x5C, 0x0, 0x1, 0xFC, 0xBC, 0x4, 0xB1, 0xFE, 0xB3, 0x6, 0xD9, 0x0, 0x9, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x11, 0x13, 0x33, 0x11, 0x23, 0x11, 0xFD, 0x4C, 0x90, 0x90, 0xD8, 0x8F, 0x8F, 0x4, 0xB1, 0x2, 0x28, 0xFE, 0xA8, 0x1, 0x58, 0xFD, 0xD8, 0x1, 0x54, 0x0, 0x3, 0xFC, 0xF9, 0x4, 0xB1, 0xFE, 0x80, 0x7, 0xAD, 0x0, 0x5, 0x0, 0xB, 0x0, 0xF, 0x0, 0x0, 0x0, 0x33, 0x32, 0x14, 0x23, 0x22, 0x26, 0x33, 0x32, 0x14, 0x23, 0x22, 0x5, 0x11, 0x23, 0x11, 0xFD, 0xDD, 0x51, 0x52, 0x52, 0x51, 0xE4, 0x51, 0x52, 0x52, 0x51, 0x1, 0xC, 0x8F, 0x7, 0xAD, 0x98, 0x98, 0x98, 0x3C, 0xFD, 0xD8, 0x2, 0x28, 0x0, 0x1, 0xFC, 0xA5, 0x3, 0xCC, 0xFE, 0xA8, 0x6, 0xDA, 0x0, 0x10, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x3, 0x33, 0x13, 0x17, 0x13, 0x33, 0x3, 0x6, 0x6, 0xFD, 0x21, 0x1B, 0x27, 0x1F, 0x27, 0x2D, 0x18, 0xC5, 0x92, 0x66, 0x8, 0x75, 0x8E, 0xDE, 0x15, 0x48, 0x3, 0xCC, 0x9, 0x6D, 0x2, 0x22, 0x49, 0x2, 0x2F, 0xFE, 0xAA, 0x24, 0x1, 0x7A, 0xFD, 0x7F, 0x39, 0x54, 0x0, 0x2, 0xFC, 0x2E, 0x4, 0xB1, 0xFE, 0xD9, 0x6, 0xD9, 0x0, 0xB, 0x0, 0x12, 0x0, 0x0, 0x1, 0x11, 0x23, 0x35, 0x21, 0x15, 0x33, 0x20, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x35, 0x34, 0x23, 0x23, 0xFC, 0xE0, 0xB2, 0x1, 0x41, 0x67, 0x1, 0x3, 0x87, 0x6A, 0x79, 0x79, 0x62, 0x62, 0x79, 0x4, 0xB1, 0x1, 0xBA, 0x6E, 0xA2, 0xC3, 0x62, 0x61, 0x6F, 0x55, 0x52, 0x0, 0x3, 0xFC, 0x67, 0x4, 0xB1, 0xFF, 0x31, 0x6, 0xD9, 0x0, 0x9, 0x0, 0xD, 0x0, 0x14, 0x0, 0x0, 0x1, 0x11, 0x33, 0x15, 0x33, 0x20, 0x15, 0x14, 0x6, 0x23, 0x1, 0x11, 0x23, 0x11, 0x1, 0x33, 0x32, 0x35, 0x34, 0x23, 0x23, 0xFC, 0x67, 0x8F, 0x69, 0x1, 0x1, 0x86, 0x6B, 0x1, 0xC2, 0x8F, 0xFE, 0x54, 0x79, 0x62, 0x62, 0x79, 0x4, 0xB1, 0x2, 0x28, 0xA2, 0xC3, 0x62, 0x61, 0x2, 0x28, 0xFD, 0xD8, 0x2, 0x28, 0xFE, 0x47, 0x55, 0x52, 0x0, 0x2, 0xFC, 0xE0, 0x4, 0xB1, 0xFE, 0xD9, 0x6, 0xD9, 0x0, 0x9, 0x0, 0x10, 0x0, 0x0, 0x1, 0x11, 0x33, 0x15, 0x33, 0x20, 0x15, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x35, 0x34, 0x23, 0x23, 0xFC, 0xE0, 0x8F, 0x67, 0x1, 0x3, 0x87, 0x6A, 0x79, 0x79, 0x62, 0x62, 0x79, 0x4, 0xB1, 0x2, 0x28, 0xA2, 0xC3, 0x62, 0x61, 0x6F, 0x55, 0x52, 0x0, 0x1, 0xFC, 0x32, 0x4, 0xA7, 0xFF, 0x3B, 0x6, 0xD9, 0x0, 0x17, 0x0, 0x0, 0x1, 0x22, 0x27, 0x6, 0x23, 0x22, 0x27, 0x11, 0x33, 0x11, 0x14, 0x32, 0x35, 0x11, 0x33, 0x11, 0x14, 0x32, 0x35, 0x11, 0x33, 0x11, 0x14, 0x6, 0xFE, 0x55, 0x60, 0x3D, 0x3B, 0x65, 0xE0, 0x6, 0x8F, 0xAE, 0x8F, 0xAE, 0x8F, 0x73, 0x4, 0xA7, 0x4B, 0x4B, 0xDA, 0x1, 0x58, 0xFE, 0xB5, 0x73, 0x73, 0x1, 0x4B, 0xFE, 0xB5, 0x73, 0x73, 0x1, 0x4B, 0xFE, 0xB6, 0x7C, 0x6C, 0xFF, 0xFF, 0xFC, 0x75, 0x4, 0xCC, 0xFE, 0xFA, 0x5, 0xE7, 0x0, 0x7, 0x1, 0x89, 0xFB, 0xFF, 0x0, 0x0, 0x0, 0x1, 0xFC, 0x99, 0x4, 0x69, 0xFE, 0xD9, 0x5, 0xE4, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x37, 0x6, 0x23, 0x22, 0x26, 0x37, 0x33, 0x6, 0x16, 0x33, 0x32, 0x37, 0x37, 0x33, 0xFE, 0x82, 0x99, 0x1E, 0x23, 0x25, 0x7A, 0xAC, 0xB, 0x9B, 0x2, 0x3D, 0x4E, 0x39, 0x2C, 0x13, 0x99, 0x4, 0x69, 0x6F, 0xA, 0x91, 0x85, 0x3A, 0x5E, 0x16, 0x47, 0xFF, 0xFF, 0x0, 0x50, 0x4, 0xCC, 0x2, 0xD5, 0x5, 0xE7, 0x0, 0x6, 0x1, 0x89, 0xDA, 0x0, 0xFF, 0xFF, 0x0, 0x47, 0x4, 0x69, 0x2, 0x87, 0x5, 0xE4, 0x0, 0x7, 0x6, 0x16, 0x3, 0xAE, 0x0, 0x0, 0x0, 0x2, 0x0, 0x24, 0xFE, 0x9A, 0x5, 0xDC, 0x6, 0xCE, 0x0, 0x5, 0x0, 0x16, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x1, 0x11, 0x21, 0x11, 0x23, 0x3, 0x33, 0x36, 0x12, 0x13, 0x13, 0x33, 0x3, 0x21, 0x11, 0x33, 0x3, 0x1, 0xB6, 0x2, 0x71, 0xFE, 0x57, 0x1B, 0x1E, 0x2, 0x9A, 0xFC, 0x41, 0xF3, 0x9, 0x76, 0x37, 0x83, 0x14, 0x37, 0xFC, 0x11, 0x2, 0x9A, 0xB8, 0xD, 0xCA, 0x4, 0x1B, 0xFE, 0x4A, 0xFE, 0x79, 0xFC, 0xF2, 0x1, 0x66, 0xFE, 0x9A, 0x2, 0x30, 0x35, 0x1, 0x1D, 0x1, 0x30, 0x3, 0x82, 0xFE, 0xE2, 0xFB, 0x1A, 0xFD, 0xD0, 0x0, 0x2, 0x0, 0x27, 0xFE, 0xBE, 0x4, 0xC6, 0x5, 0x7A, 0x0, 0x5, 0x0, 0x16, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x7, 0x2, 0x3, 0x11, 0x23, 0x11, 0x33, 0x36, 0x36, 0x37, 0x13, 0x33, 0x3, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x1, 0x9F, 0x1, 0x9E, 0xFE, 0xEE, 0x6, 0xE, 0xF9, 0xF7, 0x5A, 0x55, 0x56, 0x7, 0x15, 0xF2, 0x9, 0x1, 0xFF, 0x96, 0xF3, 0xC3, 0x2, 0xA6, 0xCF, 0xFE, 0xD8, 0xFE, 0x8E, 0xFE, 0xBE, 0x2, 0x5, 0x5F, 0xCA, 0xCA, 0x2, 0xC4, 0xFE, 0xC0, 0xFC, 0x89, 0xFD, 0xFB, 0x1, 0x42, 0x0, 0x1, 0x0, 0x4D, 0xFE, 0x4B, 0x4, 0x86, 0x5, 0xC4, 0x0, 0x25, 0x0, 0x0, 0x25, 0x34, 0x26, 0x24, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x0, 0x23, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x20, 0x3, 0x8A, 0x91, 0xFE, 0xA5, 0xC2, 0x62, 0x1, 0x1A, 0xE6, 0xF8, 0x1, 0x13, 0xFC, 0x84, 0x8D, 0x85, 0x7C, 0xB0, 0x8F, 0xEE, 0xE2, 0xFE, 0xDF, 0xF1, 0x8D, 0xFC, 0x9E, 0xFC, 0xB9, 0x7A, 0x1, 0xE, 0x38, 0x79, 0xAD, 0xC1, 0xA0, 0xB8, 0x7B, 0xDE, 0xF4, 0xFE, 0xF8, 0xB3, 0x6B, 0x87, 0x8C, 0x7D, 0x83, 0x9C, 0x51, 0x86, 0xFD, 0xC7, 0xEA, 0xFE, 0xFD, 0x66, 0xCB, 0x98, 0x87, 0x78, 0x0, 0x1, 0x0, 0x4D, 0xFE, 0x4B, 0x3, 0xCC, 0x4, 0x4E, 0x0, 0x24, 0x0, 0x0, 0x5, 0x34, 0x26, 0x24, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x2, 0xDD, 0x7C, 0xFE, 0xE2, 0x67, 0x6B, 0xE1, 0xC1, 0xCB, 0xE6, 0xF3, 0x60, 0x5F, 0xB4, 0x66, 0x83, 0xC1, 0xC4, 0xEB, 0xCB, 0xDF, 0xEA, 0xEC, 0x5, 0x89, 0x52, 0x60, 0x64, 0x29, 0x6C, 0x83, 0x91, 0x63, 0x67, 0xB4, 0xAF, 0xCA, 0xC6, 0x92, 0x3F, 0x63, 0xC2, 0x50, 0x84, 0x42, 0x61, 0xEA, 0xA0, 0xB3, 0xD7, 0xE4, 0x86, 0x65, 0x4F, 0x72, 0x0, 0x1, 0x0, 0x49, 0xFF, 0xEC, 0x9, 0x90, 0x5, 0xC4, 0x0, 0x36, 0x0, 0x0, 0x1, 0x14, 0x4, 0x23, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x25, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x14, 0x7, 0x33, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x16, 0x4, 0x7F, 0xFE, 0xCB, 0xF0, 0x81, 0xF3, 0x9D, 0xFD, 0x98, 0x7C, 0x8E, 0x9A, 0xFE, 0xF6, 0xB9, 0xAB, 0x8A, 0x78, 0x83, 0x8F, 0x6C, 0x94, 0xFC, 0x1, 0x2D, 0xCF, 0xF0, 0x1, 0x1F, 0x59, 0xEA, 0xFD, 0x8A, 0x1, 0xAD, 0x1, 0x36, 0xFE, 0xD, 0x2, 0x1F, 0xFE, 0xD0, 0xFE, 0x43, 0xAC, 0xFD, 0xBF, 0x44, 0x1, 0x98, 0xCD, 0xDF, 0x58, 0xBB, 0x95, 0x5B, 0x83, 0x81, 0x61, 0xE5, 0x6, 0xC7, 0x79, 0x61, 0x56, 0x7F, 0x72, 0x5B, 0xBE, 0xDA, 0xD3, 0xCC, 0x7A, 0x5E, 0x2, 0x63, 0xFD, 0x9D, 0x2, 0x63, 0xFD, 0x47, 0xFD, 0x9, 0x2, 0x70, 0xFD, 0x90, 0x2, 0x70, 0x58, 0x0, 0x1, 0x0, 0x4E, 0xFF, 0xEC, 0x7, 0xFE, 0x4, 0x4D, 0x0, 0x35, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x16, 0x3, 0xC4, 0xF7, 0xC5, 0x6D, 0xCB, 0x82, 0xF2, 0x6E, 0x61, 0x64, 0x5E, 0xB7, 0xB3, 0xBB, 0x9C, 0x4D, 0x62, 0x52, 0x6C, 0xF2, 0xFA, 0xAF, 0xC4, 0xE5, 0x2E, 0xA5, 0xF3, 0x6C, 0x1, 0x2A, 0x1, 0x2D, 0xFE, 0x78, 0x1, 0xA8, 0xFE, 0xC5, 0xFE, 0xD3, 0x7B, 0xF3, 0x7F, 0x1B, 0x1, 0x32, 0x9A, 0xAC, 0x48, 0x97, 0x76, 0x3D, 0x5E, 0x5D, 0x3A, 0x92, 0x2, 0xB0, 0x4, 0x82, 0x34, 0x57, 0x4D, 0x3E, 0x98, 0xAE, 0xA1, 0x9A, 0x4A, 0x3D, 0x1, 0xAF, 0xFE, 0x51, 0x1, 0xAF, 0xFD, 0xFA, 0xFD, 0xCC, 0x1, 0xAD, 0xFE, 0x53, 0x1, 0xAD, 0x36, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x5, 0xD0, 0x5, 0xB0, 0x0, 0x20, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x5, 0xD0, 0xFD, 0x4A, 0x3F, 0x9D, 0x62, 0x3B, 0x96, 0x31, 0xDD, 0xE7, 0x1, 0xFC, 0x64, 0x6F, 0x33, 0x31, 0x2B, 0xFC, 0x5D, 0x6F, 0x40, 0x3F, 0xFD, 0x2, 0x24, 0x11, 0x32, 0x18, 0x1A, 0xD4, 0xFB, 0x1, 0xCE, 0xFE, 0x36, 0x90, 0x78, 0x9, 0x65, 0x9A, 0x1, 0xCA, 0xFE, 0x36, 0x90, 0x78, 0xF, 0x2, 0xC3, 0x0, 0x1, 0x0, 0x36, 0x0, 0x0, 0x4, 0xEB, 0x4, 0x3B, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x4, 0xEB, 0xF3, 0x36, 0x33, 0x83, 0x57, 0x79, 0x70, 0xC3, 0xD3, 0xF3, 0x48, 0x5A, 0x2A, 0x2A, 0x22, 0xF2, 0x46, 0x59, 0x35, 0x35, 0xF3, 0x1, 0x5D, 0x9, 0x29, 0x29, 0xC0, 0xDB, 0x1, 0x4C, 0xFE, 0xB4, 0x6E, 0x6A, 0x8, 0x55, 0x7B, 0x1, 0x4C, 0xFE, 0xB4, 0x6E, 0x6A, 0x9, 0x2, 0x1A, 0x0, 0x2, 0x0, 0x24, 0xFE, 0x4B, 0x6, 0xF2, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x23, 0x31, 0x21, 0x11, 0x23, 0x3, 0x33, 0x36, 0x12, 0x13, 0x13, 0x21, 0x11, 0x33, 0x20, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0xB6, 0x2, 0x71, 0xFE, 0x57, 0x1A, 0x1E, 0x3, 0xB0, 0x64, 0xA8, 0x8E, 0x6, 0x72, 0x6C, 0x66, 0x61, 0x61, 0x5B, 0x54, 0x40, 0x4C, 0x4D, 0xFB, 0xFC, 0xF3, 0x9, 0x76, 0x36, 0x82, 0x14, 0x28, 0x3, 0x96, 0xBD, 0x1, 0x6, 0x6B, 0x76, 0x94, 0xCA, 0x4, 0x1B, 0xFE, 0x57, 0xFE, 0x6D, 0xFC, 0xA2, 0x5C, 0x64, 0x46, 0x49, 0x44, 0x1, 0x77, 0x1, 0x3E, 0x3C, 0x45, 0xFE, 0x9A, 0x2, 0x30, 0x34, 0x1, 0x19, 0x1, 0x27, 0x2, 0x72, 0xFB, 0x1A, 0xB5, 0x5A, 0x2A, 0x25, 0x6B, 0x55, 0x61, 0x0, 0x2, 0x0, 0x27, 0xFE, 0x4B, 0x5, 0xDD, 0x4, 0x3A, 0x0, 0x5, 0x0, 0x2F, 0x0, 0x0, 0x25, 0x5, 0x11, 0x21, 0x7, 0x2, 0x1, 0x22, 0x26, 0x35, 0x33, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x23, 0x21, 0x11, 0x23, 0x13, 0x33, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0xA1, 0x1, 0x9C, 0xFE, 0xF0, 0x6, 0xD, 0x2, 0xC4, 0x5D, 0xAC, 0x8E, 0x6, 0x72, 0x6C, 0x66, 0x61, 0x61, 0x5B, 0x54, 0x3D, 0x46, 0x35, 0xFC, 0xEE, 0xF7, 0x1, 0x5A, 0x53, 0x5B, 0x6, 0xA, 0x2, 0xF0, 0xA7, 0x70, 0x8B, 0x6A, 0x75, 0x8E, 0xC4, 0x1, 0x2, 0xA6, 0xD3, 0xFE, 0xDC, 0xFC, 0xD9, 0x5C, 0x64, 0x46, 0x49, 0x44, 0x1, 0x77, 0x1, 0x3E, 0x3C, 0x45, 0xFE, 0xBE, 0x2, 0x6, 0x5D, 0xC9, 0xCD, 0x1, 0x83, 0xFC, 0x89, 0x5A, 0x56, 0x58, 0x2A, 0x25, 0x6B, 0x55, 0x61, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x4B, 0x5, 0x7A, 0x5, 0xB0, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x4, 0x19, 0x44, 0x3B, 0xE, 0x26, 0x3D, 0x7B, 0x1, 0x66, 0x60, 0x92, 0x4B, 0xF3, 0xFE, 0x3C, 0x4, 0x7D, 0xFE, 0x3A, 0x71, 0xBF, 0xA1, 0xC4, 0x1, 0xBC, 0xFE, 0x4B, 0x11, 0xC5, 0xC, 0xA9, 0x2, 0xE2, 0x83, 0x65, 0x69, 0xFC, 0xE1, 0x4, 0xED, 0xC3, 0xC3, 0xFE, 0xC2, 0x9F, 0xC4, 0xE3, 0xFD, 0x1A, 0xB6, 0xC0, 0x0, 0x1, 0x0, 0x24, 0xFE, 0x4B, 0x4, 0xFD, 0x4, 0x3A, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x6, 0x3, 0x9C, 0x49, 0x3C, 0xA, 0x25, 0x37, 0x3B, 0x52, 0x62, 0x5D, 0x92, 0x48, 0xF3, 0xFE, 0xA6, 0x3, 0xAD, 0xFE, 0xA0, 0x76, 0xB6, 0xA0, 0xC0, 0xCF, 0xFE, 0x4B, 0x11, 0xB1, 0xB, 0x53, 0x56, 0x1, 0x90, 0x83, 0x6F, 0x81, 0xFE, 0x54, 0x3, 0x79, 0xC1, 0xC1, 0xFE, 0xF0, 0x8A, 0xD0, 0xEA, 0xFE, 0x72, 0xC2, 0x9E, 0x0, 0x1, 0x0, 0x2D, 0xFF, 0xEC, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x21, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3, 0xD3, 0x46, 0x53, 0x84, 0xC7, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0x5C, 0x34, 0x1D, 0x3B, 0x14, 0x9F, 0xB1, 0x3, 0xA9, 0xCB, 0xCB, 0xFC, 0x57, 0x55, 0x32, 0xB, 0x0, 0x1, 0x0, 0x24, 0xFF, 0xEC, 0x3, 0xD1, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x21, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3, 0x5B, 0x46, 0x4F, 0x84, 0xC4, 0xFE, 0xA6, 0x3, 0xAD, 0xFE, 0xA0, 0x5E, 0x34, 0x1D, 0x3B, 0x14, 0xAC, 0xB8, 0x2, 0x29, 0xC1, 0xC1, 0xFD, 0xD6, 0x5C, 0x3E, 0xB, 0x0, 0x1, 0x0, 0x93, 0xFE, 0x65, 0x5, 0xF5, 0x5, 0xB0, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x20, 0x25, 0x37, 0x16, 0x4, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x4, 0x3, 0x63, 0xFE, 0x90, 0xFE, 0xC2, 0x54, 0x75, 0x1, 0x38, 0xB8, 0x94, 0xFF, 0x18, 0xFB, 0xAA, 0xFC, 0x2, 0x81, 0xFD, 0x8F, 0x27, 0x32, 0xB6, 0xFE, 0xD4, 0xFE, 0x65, 0x8F, 0xC1, 0x34, 0x4B, 0x3D, 0x44, 0x25, 0x24, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1A, 0x3E, 0x78, 0x44, 0x8A, 0x9F, 0x42, 0x0, 0x1, 0x0, 0x87, 0xFE, 0x6D, 0x4, 0xE6, 0x4, 0x3A, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x20, 0x25, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x2, 0xC5, 0xFE, 0xDB, 0xFE, 0xF9, 0x4B, 0x68, 0xE1, 0x94, 0x8B, 0xAE, 0x18, 0xFC, 0xA5, 0xF3, 0x1, 0xA7, 0xF3, 0x7F, 0x24, 0x2F, 0x9B, 0xF9, 0xFE, 0x6D, 0x7C, 0xB4, 0x32, 0x39, 0x44, 0x41, 0x25, 0x24, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x8C, 0x3E, 0x74, 0x44, 0x81, 0x9C, 0x46, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0xCA, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x97, 0x3E, 0x5E, 0x6C, 0x9E, 0x73, 0x8B, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0xF8, 0x51, 0x41, 0x2C, 0x42, 0x2B, 0xFE, 0xF8, 0x2E, 0x6C, 0x75, 0x5E, 0x8E, 0x4, 0x4E, 0xCB, 0xCB, 0xFB, 0x1B, 0x56, 0x32, 0x28, 0x1C, 0x0, 0x1, 0x0, 0x24, 0xFE, 0xCA, 0x3, 0xD1, 0x4, 0x3A, 0x0, 0x18, 0x0, 0x0, 0x25, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x1, 0x7E, 0xFE, 0xA6, 0x3, 0xAD, 0xFE, 0xA0, 0xF3, 0x51, 0x41, 0x2C, 0x44, 0x29, 0x1B, 0x3E, 0x5E, 0x6C, 0x9E, 0x73, 0x7F, 0x97, 0x2, 0xE2, 0xC1, 0xC1, 0xFC, 0x87, 0x56, 0x32, 0x28, 0x1C, 0x74, 0x2E, 0x6C, 0x75, 0x5D, 0x8F, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x6, 0x38, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x24, 0x27, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x6, 0x38, 0xFD, 0x9E, 0xB4, 0xF3, 0xFE, 0xE3, 0x2, 0xFE, 0x44, 0x4, 0x58, 0xFE, 0x61, 0x8A, 0x8B, 0xA9, 0xA9, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x3E, 0x29, 0xD6, 0xF5, 0x1, 0x5, 0xCB, 0xCB, 0xFE, 0x9A, 0x6D, 0x29, 0x2, 0xA7, 0x0, 0x1, 0x0, 0x11, 0x0, 0x0, 0x4, 0xEC, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x4, 0xEC, 0xF3, 0x63, 0x63, 0xD2, 0xF6, 0xFE, 0xA6, 0x3, 0x84, 0xFE, 0xC9, 0x6A, 0x6B, 0x64, 0x62, 0x4, 0x3A, 0xFB, 0xC6, 0x1, 0x6A, 0x16, 0xC9, 0xD2, 0x89, 0xC2, 0xC2, 0x89, 0x76, 0x62, 0x17, 0x2, 0xC, 0x0, 0x1, 0x0, 0x85, 0x0, 0x0, 0x4, 0xE8, 0x5, 0xC4, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x36, 0x33, 0x32, 0x4, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0xDE, 0xB2, 0xAB, 0xFC, 0xD6, 0xA9, 0x45, 0x3B, 0xA, 0x32, 0x2F, 0x3D, 0x5B, 0xAC, 0xB1, 0xF0, 0x1, 0x18, 0x2, 0xFC, 0x87, 0x3, 0x33, 0x2B, 0xFC, 0xF8, 0x4, 0x4E, 0xB6, 0xC0, 0x11, 0xC2, 0xC, 0x53, 0x5C, 0x7C, 0x2B, 0xCC, 0xFC, 0xFD, 0xCB, 0x2, 0x2E, 0x97, 0x6E, 0x0, 0x1, 0x0, 0x7E, 0x0, 0x0, 0x3, 0xFD, 0x6, 0x1F, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x4B, 0x93, 0x48, 0xF2, 0xCF, 0x91, 0x4E, 0x37, 0x9, 0x2A, 0x32, 0x3A, 0x54, 0x76, 0xB7, 0xA0, 0xC0, 0xF3, 0x62, 0x3, 0x88, 0x83, 0xFC, 0xFB, 0x4, 0xC0, 0xC2, 0x9D, 0x10, 0xB1, 0xB, 0x53, 0x56, 0xFC, 0x8A, 0xD0, 0xEA, 0xFD, 0x6C, 0x2, 0x96, 0x83, 0x6F, 0x0, 0x1, 0x0, 0x93, 0xFE, 0x65, 0x7, 0xC6, 0x5, 0xB0, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x20, 0x25, 0x37, 0x16, 0x4, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x4, 0x5, 0x34, 0xFE, 0x92, 0xFE, 0xC0, 0x54, 0x75, 0x1, 0x39, 0xB8, 0x94, 0xFF, 0x19, 0xF9, 0xD9, 0xFD, 0x1, 0xBD, 0xFC, 0x1, 0xB9, 0xFC, 0x6F, 0x27, 0x32, 0xB6, 0xFE, 0xD4, 0xFE, 0x65, 0x8F, 0xC1, 0x34, 0x4B, 0x3D, 0x44, 0x25, 0x24, 0x5, 0xB0, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1A, 0x4, 0xE6, 0xFB, 0x1A, 0x3E, 0x78, 0x44, 0x8A, 0x9F, 0x42, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x6D, 0x6, 0xD0, 0x4, 0x3A, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x20, 0x25, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x6, 0x4, 0xB0, 0xFE, 0xDA, 0xFE, 0xF9, 0x4C, 0x68, 0xE0, 0x94, 0x8B, 0xAE, 0x18, 0xFA, 0xB1, 0xF2, 0x1, 0x53, 0xF3, 0x1, 0x53, 0xF2, 0x83, 0x25, 0x2E, 0x9B, 0xF9, 0xFE, 0x6D, 0x7C, 0xB4, 0x32, 0x39, 0x44, 0x41, 0x27, 0x22, 0x4, 0x3A, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x89, 0x3, 0x77, 0xFC, 0x89, 0x3F, 0x70, 0x44, 0x81, 0x9C, 0x46, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x8, 0xE0, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x34, 0x3, 0xC1, 0x0, 0x0, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0x3D, 0x4, 0x4E, 0x0, 0x16, 0x0, 0x24, 0x0, 0x32, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x0, 0x17, 0x15, 0x14, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x5, 0x46, 0xF4, 0x8B, 0x8B, 0xF4, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0xF5, 0x8C, 0x40, 0xC1, 0x7C, 0xEC, 0x1, 0x9, 0x4, 0xFE, 0xF6, 0xFE, 0xE, 0x7D, 0x88, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0xFD, 0x2, 0x7D, 0x88, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0x14, 0xAD, 0xAD, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xAE, 0x51, 0x5D, 0xFE, 0xCD, 0xE7, 0x22, 0xEB, 0xFE, 0xC5, 0x2, 0x26, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x5, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x12, 0x0, 0x16, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x25, 0x11, 0x6, 0x6, 0x7, 0x21, 0x2, 0x27, 0x11, 0x3, 0x11, 0x21, 0x16, 0x16, 0x5, 0x36, 0x13, 0x21, 0x5, 0x1F, 0xFE, 0xB5, 0xFE, 0xF0, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0xFD, 0x51, 0x75, 0x8D, 0xA, 0x2, 0xBD, 0x12, 0xF8, 0xA7, 0xFE, 0xF4, 0x6, 0x8E, 0x1, 0x1F, 0xFE, 0xC, 0xFE, 0xF6, 0x2, 0xB3, 0xFE, 0xB4, 0xFE, 0x85, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x39, 0x1, 0xB5, 0x1C, 0xDD, 0xBC, 0x1, 0x7A, 0x3A, 0xFE, 0x4C, 0xFD, 0x91, 0x1, 0xC8, 0xC3, 0xE8, 0x1E, 0x3B, 0x1, 0x8E, 0x0, 0x5, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x12, 0x0, 0x17, 0x0, 0x1C, 0x0, 0x21, 0x0, 0x0, 0x13, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x23, 0x22, 0x0, 0x27, 0x25, 0x11, 0x6, 0x6, 0x7, 0x21, 0x26, 0x26, 0x27, 0x11, 0x3, 0x11, 0x23, 0x16, 0x16, 0x17, 0x36, 0x36, 0x37, 0x23, 0x50, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xED, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA3, 0x4D, 0x54, 0xB, 0x2, 0x1, 0xC, 0x55, 0x4D, 0xA7, 0xAC, 0xB, 0x54, 0xF4, 0x4E, 0x55, 0xB, 0xAE, 0x2, 0x27, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x1, 0x33, 0xE6, 0x6C, 0x1, 0xC, 0x1B, 0x92, 0x5F, 0x5F, 0x92, 0x1B, 0xFE, 0xF4, 0xFE, 0x4C, 0x1, 0xC, 0x60, 0x91, 0x1C, 0x1A, 0x92, 0x61, 0x0, 0x2, 0x0, 0x28, 0x2, 0x8C, 0x3, 0xA0, 0x5, 0xAD, 0x0, 0xB, 0x0, 0x14, 0x0, 0x0, 0x13, 0x11, 0x23, 0x35, 0x21, 0x11, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0xF6, 0xCE, 0x1, 0x93, 0xAB, 0x94, 0xA6, 0xAC, 0x98, 0xA1, 0x91, 0x4B, 0x45, 0x40, 0x47, 0x9A, 0x2, 0x8C, 0x2, 0x7A, 0xA7, 0xFE, 0xFF, 0xA6, 0xDA, 0xA0, 0xA7, 0x3D, 0x2E, 0x2C, 0x3B, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x3, 0xF, 0x5, 0xAD, 0x0, 0x9, 0x0, 0x12, 0x0, 0x0, 0x13, 0x11, 0x33, 0x11, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x64, 0xC5, 0xAB, 0x95, 0xA6, 0xAC, 0x98, 0xA2, 0x91, 0x4C, 0x44, 0x40, 0x46, 0x9B, 0x2, 0x8C, 0x3, 0x21, 0xFE, 0xFF, 0xA6, 0xDA, 0xA0, 0xA7, 0x3D, 0x2E, 0x2C, 0x3B, 0x0, 0x1, 0xFC, 0x78, 0x4, 0xA4, 0xFF, 0x51, 0x6, 0xE0, 0x0, 0x1F, 0x0, 0x0, 0x3, 0x14, 0x6, 0x23, 0x22, 0x26, 0x27, 0x23, 0x15, 0x23, 0x11, 0x33, 0x15, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x23, 0x22, 0x7, 0x33, 0x15, 0x23, 0x16, 0x33, 0x32, 0x37, 0xAF, 0x83, 0x61, 0x6E, 0x89, 0xC, 0x62, 0x90, 0x90, 0x64, 0xE, 0x89, 0x6B, 0x58, 0x8B, 0x82, 0x8, 0x59, 0x66, 0xE, 0xA7, 0xA7, 0xD, 0x66, 0x5C, 0x6, 0x5, 0x74, 0x5E, 0x72, 0x82, 0x6A, 0xDF, 0x2, 0x28, 0xD9, 0x65, 0x7B, 0x63, 0x5E, 0x4E, 0x78, 0x62, 0x7B, 0x5C, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x60, 0x2, 0x8, 0x0, 0x9C, 0x0, 0x11, 0x0, 0x0, 0x1, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x33, 0x15, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x33, 0x2, 0x8, 0xAF, 0x85, 0x84, 0x85, 0x84, 0xAF, 0xAE, 0x7B, 0x3B, 0x3E, 0xB0, 0xFE, 0x60, 0xA3, 0x71, 0x13, 0x71, 0xA4, 0x74, 0xB4, 0x43, 0x5D, 0x0, 0x2, 0x0, 0x50, 0xFD, 0xD5, 0x2, 0x8, 0x0, 0x9C, 0x0, 0x10, 0x0, 0x14, 0x0, 0x0, 0x1, 0x23, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x15, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x15, 0x21, 0x35, 0x2, 0x8, 0xB3, 0x82, 0x83, 0x85, 0x84, 0xAF, 0xAD, 0x7C, 0x3B, 0x3E, 0xB0, 0xFE, 0x6B, 0xFE, 0x84, 0x1, 0x99, 0x78, 0x6C, 0x9A, 0x73, 0xA0, 0x3D, 0x56, 0xAF, 0x72, 0x72, 0xFF, 0xFF, 0x0, 0x50, 0x3, 0x9A, 0x2, 0x8, 0x5, 0xD6, 0x0, 0x7, 0x6, 0x38, 0x0, 0x0, 0x5, 0x3A, 0x0, 0x2, 0x0, 0x50, 0x2, 0xEA, 0x2, 0x8, 0x5, 0xD5, 0x0, 0x11, 0x0, 0x15, 0x0, 0x0, 0x1, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x33, 0x15, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x15, 0x21, 0x35, 0x2, 0x8, 0xAF, 0x85, 0x84, 0x85, 0x84, 0xAF, 0xAE, 0x7B, 0x3B, 0x3E, 0xB0, 0xFE, 0x6B, 0x3, 0x99, 0xA4, 0x71, 0x13, 0x71, 0xA3, 0x73, 0xB4, 0x43, 0x5E, 0xAF, 0x74, 0x74, 0x0, 0x1, 0x0, 0x50, 0x3, 0x9A, 0x2, 0x8, 0x5, 0xD6, 0x0, 0x11, 0x0, 0x0, 0x13, 0x35, 0x33, 0x32, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x50, 0xAF, 0x7A, 0x3B, 0x3D, 0xB1, 0xAF, 0x84, 0x85, 0x84, 0x85, 0x3, 0x9A, 0x74, 0xB3, 0x42, 0x5F, 0x74, 0xA4, 0x71, 0x12, 0x71, 0xA4, 0x0, 0x2, 0x0, 0x50, 0x2, 0xEA, 0x2, 0xE, 0x5, 0xD6, 0x0, 0x11, 0x0, 0x15, 0x0, 0x0, 0x13, 0x35, 0x33, 0x32, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x17, 0x15, 0x21, 0x35, 0x56, 0xAF, 0x7A, 0x3B, 0x3D, 0xB1, 0xAF, 0x84, 0x85, 0x84, 0x85, 0xE0, 0xFE, 0x6B, 0x3, 0x9A, 0x74, 0xB3, 0x42, 0x5F, 0x74, 0xA4, 0x71, 0x12, 0x71, 0xA4, 0x3C, 0x74, 0x74, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x60, 0x2, 0x8, 0x0, 0x9C, 0x0, 0x11, 0x0, 0x0, 0x13, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x50, 0xB1, 0x78, 0x3B, 0x3D, 0xB1, 0xAF, 0x84, 0x85, 0x84, 0x85, 0xFE, 0x60, 0x74, 0x1, 0xB2, 0x41, 0x60, 0x74, 0xA4, 0x71, 0x13, 0x71, 0xA3, 0x0, 0x2, 0x0, 0x50, 0xFD, 0xD5, 0x2, 0xE, 0x0, 0x9C, 0x0, 0x11, 0x0, 0x15, 0x0, 0x0, 0x13, 0x35, 0x33, 0x32, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x17, 0x15, 0x21, 0x35, 0x56, 0xAD, 0x7C, 0x3B, 0x3D, 0xB1, 0xAF, 0x84, 0x85, 0x84, 0x85, 0xE0, 0xFE, 0x6B, 0xFE, 0x85, 0x74, 0x9F, 0x3B, 0x55, 0x74, 0x99, 0x6B, 0xF, 0x6A, 0x9A, 0x3C, 0x74, 0x74, 0x0, 0x2, 0x0, 0x32, 0xFE, 0xF2, 0x2, 0x6C, 0x5, 0xC4, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x11, 0x23, 0x11, 0x32, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2, 0x3A, 0xA8, 0x5, 0x48, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x9C, 0xF9, 0x42, 0x6, 0xBE, 0x0, 0x2, 0x0, 0x3C, 0xFE, 0xF2, 0x2, 0x76, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xF, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x76, 0xA7, 0xFE, 0x6D, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFE, 0x1C, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x3C, 0xFE, 0xF2, 0x2, 0x76, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xF, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x76, 0xA7, 0xFE, 0x6D, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFC, 0xA1, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x3C, 0xFE, 0xF2, 0x2, 0x76, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xF, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x76, 0xA7, 0xFE, 0x6D, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFB, 0x25, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x3C, 0xFE, 0xE5, 0x2, 0x76, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x0, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x2, 0x76, 0xA7, 0xFE, 0x6D, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xF9, 0xE4, 0x48, 0x48, 0x68, 0x47, 0x47, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xF2, 0x2, 0x9C, 0x5, 0xC4, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x1, 0x89, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x48, 0xA8, 0x5, 0x48, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x9C, 0xF9, 0x42, 0x6, 0xBE, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xF2, 0x2, 0x9C, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x41, 0xA8, 0xF0, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFE, 0x1C, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xF2, 0x2, 0x9C, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x41, 0xA8, 0xF0, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFC, 0xA1, 0x35, 0x47, 0x47, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xF2, 0x2, 0x9C, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x41, 0xA8, 0xF0, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xFB, 0x25, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0x0, 0x2, 0x0, 0x99, 0xFE, 0xE5, 0x2, 0x9C, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x12, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x1, 0x41, 0xA8, 0xF0, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x5, 0xB0, 0xF9, 0x42, 0x6, 0xBE, 0xF9, 0xE4, 0x48, 0x48, 0x68, 0x47, 0x47, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x4A, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x4A, 0xFD, 0xF7, 0xA8, 0x2, 0xB1, 0x5, 0x12, 0xF9, 0xE0, 0x6, 0xBE, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x4A, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x3, 0x4A, 0xFD, 0xF7, 0xA8, 0xA8, 0x2, 0x9, 0x3, 0x8A, 0xFB, 0x68, 0x6, 0xBE, 0xFE, 0x78, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x4A, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x3, 0x4A, 0xFD, 0xF7, 0xA8, 0xA8, 0x2, 0x9, 0x2, 0x2, 0xFC, 0xF0, 0x6, 0xBE, 0xFC, 0xF0, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x4A, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x25, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x3, 0x4A, 0xFD, 0xF7, 0xA8, 0xA8, 0x2, 0x9, 0x7A, 0xFE, 0x78, 0x6, 0xBE, 0xFB, 0x68, 0x0, 0x1, 0x0, 0x99, 0xFE, 0xF2, 0x3, 0x4A, 0x5, 0xB0, 0x0, 0x5, 0x0, 0x0, 0x13, 0x11, 0x33, 0x11, 0x21, 0x15, 0x99, 0xA8, 0x2, 0x9, 0xFE, 0xF2, 0x6, 0xBE, 0xF9, 0xE0, 0x9E, 0x0, 0x2, 0x0, 0x50, 0x2, 0x8C, 0x2, 0x67, 0x5, 0xB1, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x33, 0x11, 0x23, 0x0, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x1, 0xB2, 0xB5, 0xB5, 0xFE, 0x9E, 0x3B, 0x37, 0x36, 0x3D, 0x3D, 0x36, 0x37, 0x3B, 0x5, 0xB1, 0xFC, 0xDB, 0x1, 0xC0, 0x3E, 0x3E, 0x5C, 0x3D, 0x3D, 0x0, 0x2, 0x0, 0x55, 0x2, 0x80, 0x3, 0xF, 0x5, 0x3B, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x1, 0x17, 0x1, 0x27, 0x12, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x2, 0x8D, 0x82, 0xFD, 0xC7, 0x81, 0xB, 0x3C, 0x6C, 0x3D, 0x3D, 0x6C, 0x3C, 0x5, 0x3B, 0x82, 0xFD, 0xC7, 0x82, 0x1, 0xBF, 0x3D, 0x3D, 0x5C, 0x3D, 0x3D, 0x0, 0x2, 0x0, 0x50, 0x3, 0x54, 0x3, 0x75, 0x5, 0x56, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x0, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x5, 0x15, 0x21, 0x35, 0x1, 0x6F, 0x3B, 0x37, 0x36, 0x3D, 0x3D, 0x36, 0x37, 0x3B, 0x2, 0x6, 0xFC, 0xDB, 0x5, 0x19, 0x3D, 0x3D, 0x5C, 0x3D, 0x3D, 0xB3, 0xB6, 0xB6, 0x0, 0x1, 0x0, 0x50, 0x3, 0x5E, 0x2, 0xF9, 0x4, 0xD6, 0x0, 0x5, 0x0, 0x0, 0x13, 0x35, 0x21, 0x35, 0x33, 0x11, 0x50, 0x2, 0x1, 0xA8, 0x3, 0x5E, 0x92, 0xE6, 0xFE, 0x88, 0x0, 0x1, 0x0, 0x50, 0x2, 0xB8, 0x2, 0xAC, 0x5, 0xBD, 0x0, 0x8, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x7, 0x35, 0x1, 0x1, 0x2, 0xAC, 0xE3, 0x97, 0xE2, 0x1, 0x2E, 0x1, 0x2E, 0x3, 0xCD, 0xE2, 0xFE, 0x9, 0x1, 0xF6, 0xE1, 0xC3, 0x1, 0x2D, 0xFE, 0xD3, 0x0, 0x1, 0x0, 0x50, 0x2, 0xB8, 0x2, 0xAC, 0x5, 0xBD, 0x0, 0x8, 0x0, 0x0, 0x1, 0x1, 0x35, 0x17, 0x11, 0x33, 0x11, 0x37, 0x15, 0x1, 0x7E, 0xFE, 0xD2, 0xE2, 0x97, 0xE3, 0x2, 0xB8, 0x1, 0x2D, 0xC3, 0xE1, 0x1, 0xF6, 0xFE, 0x9, 0xE2, 0xC3, 0x0, 0x2, 0x0, 0x64, 0x2, 0x7D, 0x1, 0x42, 0x6, 0xBB, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x1, 0x3, 0x23, 0x3, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x3B, 0x11, 0xAD, 0x12, 0x7, 0x3B, 0x68, 0x3B, 0x3B, 0x68, 0x3B, 0x6, 0xBB, 0xFD, 0x3, 0x2, 0xFD, 0xFC, 0x2A, 0x2D, 0x3E, 0x3E, 0x2D, 0x2B, 0x3D, 0x3D, 0x0, 0x2, 0x0, 0x64, 0x2, 0x8C, 0x1, 0x42, 0x6, 0xCA, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x12, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x17, 0x13, 0x23, 0x13, 0x9F, 0x3B, 0x3B, 0x68, 0x3B, 0x3B, 0x23, 0x11, 0xD0, 0x12, 0x5, 0xF7, 0x3E, 0x2D, 0x2C, 0x3C, 0x3C, 0x2C, 0x2D, 0x3E, 0x6E, 0xFD, 0x3, 0x2, 0xFD, 0x0, 0x2, 0x0, 0x64, 0x1, 0x4C, 0x1, 0x42, 0x5, 0x8A, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x12, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x17, 0x13, 0x23, 0x13, 0x9F, 0x3B, 0x3B, 0x68, 0x3B, 0x3B, 0x23, 0x11, 0xD0, 0x12, 0x4, 0xB7, 0x3E, 0x2D, 0x2C, 0x3C, 0x3C, 0x2C, 0x2D, 0x3E, 0x6E, 0xFD, 0x3, 0x2, 0xFD, 0x0, 0x1, 0x0, 0x50, 0x3, 0xF4, 0x4, 0xAE, 0x6, 0x99, 0x0, 0x9, 0x0, 0x0, 0x1, 0x35, 0x27, 0x11, 0x23, 0x11, 0x1, 0x7, 0x25, 0x15, 0x1, 0xE0, 0xD2, 0xBE, 0x4, 0x5E, 0x34, 0xFE, 0x24, 0x4, 0x83, 0xDD, 0x39, 0xFE, 0x5B, 0x2, 0xA5, 0xFE, 0xCF, 0xBD, 0x81, 0xA9, 0x0, 0x1, 0x0, 0x50, 0xFD, 0xEF, 0x4, 0xAE, 0x1, 0x56, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x11, 0x33, 0x11, 0x17, 0x35, 0x33, 0x11, 0x5, 0x4, 0x7A, 0xFB, 0xD6, 0xBE, 0xD2, 0xBE, 0x2, 0x10, 0xFD, 0xEF, 0x1, 0x22, 0x2, 0x45, 0xFE, 0x53, 0x39, 0xEC, 0xFE, 0xE0, 0x90, 0x0, 0x2, 0x0, 0x65, 0x0, 0x60, 0x2, 0x65, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x1F, 0x0, 0x0, 0x13, 0x27, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x27, 0x3, 0x27, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x27, 0x66, 0x1, 0x57, 0xD9, 0xCF, 0x1, 0xF4, 0xD3, 0x36, 0x86, 0x85, 0xAE, 0x5F, 0x1, 0x57, 0xD9, 0xCF, 0x1, 0xF4, 0xD3, 0x36, 0x86, 0x85, 0xAE, 0x4, 0xEE, 0xC2, 0x2, 0x97, 0x7E, 0x2, 0x91, 0x97, 0x49, 0xB5, 0x29, 0x4C, 0x34, 0x66, 0x4, 0xFD, 0x3A, 0xC2, 0x2, 0x97, 0x7E, 0x2, 0x91, 0x97, 0x49, 0xB5, 0x29, 0x4C, 0x34, 0x66, 0x4, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x1, 0xEF, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x1D, 0x0, 0x0, 0x13, 0x27, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x27, 0x3, 0x27, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x36, 0x35, 0x34, 0x27, 0x55, 0x1, 0x4B, 0xAF, 0xA1, 0xBA, 0xB3, 0x32, 0x6E, 0x51, 0x58, 0x62, 0x1, 0x4B, 0xAF, 0xA1, 0xBA, 0xB3, 0x32, 0x6E, 0x51, 0x58, 0x3, 0x93, 0xA7, 0x2, 0x7E, 0x65, 0x68, 0x7D, 0x41, 0xA6, 0x26, 0x32, 0x28, 0x37, 0x6, 0xFD, 0xBE, 0xA7, 0x2, 0x7E, 0x65, 0x68, 0x7D, 0x41, 0xA6, 0x26, 0x32, 0x28, 0x37, 0x6, 0x0, 0x1, 0x0, 0x57, 0x2, 0x4D, 0x2, 0x5A, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x2, 0x35, 0x34, 0x36, 0x33, 0x2, 0x57, 0x5D, 0xB0, 0x91, 0x7F, 0x81, 0xAD, 0xD5, 0xD5, 0xDF, 0x5, 0xB0, 0xC2, 0x4, 0x71, 0x58, 0xA9, 0x76, 0xB5, 0xA1, 0x1, 0x2, 0x9A, 0x89, 0x9D, 0x0, 0x1, 0x0, 0x50, 0x1, 0x9F, 0x1, 0xF4, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x0, 0x1, 0x7, 0x23, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x1, 0xEB, 0x1, 0x42, 0x79, 0x61, 0x64, 0x86, 0x80, 0x9E, 0xA7, 0xB5, 0x4, 0x3A, 0xA7, 0x1, 0x41, 0x2D, 0x86, 0x6F, 0x90, 0x86, 0xC7, 0x69, 0x67, 0x7E, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x4B, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x6, 0x3, 0x83, 0x7B, 0x4A, 0x4B, 0x42, 0x68, 0x69, 0xFD, 0x75, 0xFC, 0xFC, 0x2, 0x8B, 0xFD, 0xCA, 0xFE, 0x4B, 0x1C, 0xBC, 0x10, 0x4A, 0x64, 0x2, 0xC7, 0xFD, 0x78, 0x5, 0xB0, 0xFD, 0xA2, 0x2, 0x5E, 0xFA, 0x11, 0xC5, 0xB1, 0x0, 0x1, 0x0, 0x7E, 0xFE, 0x4B, 0x3, 0xFD, 0x6, 0x0, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x2, 0x68, 0x7B, 0x4A, 0x4B, 0x42, 0x6C, 0x6E, 0x62, 0x5D, 0x93, 0x48, 0xF2, 0xF2, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xC9, 0xFE, 0x4B, 0x1C, 0xBC, 0x10, 0x4A, 0x64, 0x2, 0xFA, 0x71, 0x5C, 0x83, 0xFC, 0xFB, 0x6, 0x0, 0xFD, 0xC4, 0x8A, 0xB6, 0xDA, 0xFD, 0x3, 0xC5, 0xB1, 0x0, 0x1, 0x0, 0x2D, 0xFE, 0x4D, 0x5, 0xF1, 0x5, 0xB0, 0x0, 0x24, 0x0, 0x0, 0x1, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x21, 0x17, 0x1, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x3, 0xDD, 0x7F, 0xE1, 0x8D, 0xF7, 0x7E, 0x7B, 0x86, 0x94, 0x9A, 0x92, 0x8E, 0x1, 0x5B, 0xFE, 0x50, 0xFC, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0x2, 0xDC, 0x1, 0xFE, 0x87, 0xA, 0xB9, 0xDF, 0xFE, 0xD4, 0xFE, 0x4D, 0x48, 0x9A, 0x7A, 0x3E, 0x58, 0x91, 0x6E, 0x90, 0x7E, 0xAC, 0x1, 0xA7, 0xFC, 0x8D, 0x4, 0xE5, 0xCB, 0xCB, 0xAB, 0x9E, 0xFE, 0x2C, 0x1, 0xE, 0xE0, 0xC8, 0xD7, 0xED, 0x0, 0x1, 0x0, 0x8, 0xFE, 0x4D, 0x5, 0x88, 0x5, 0x41, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x22, 0x24, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x17, 0x1, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x3, 0x81, 0xBA, 0xFE, 0xD8, 0xF1, 0x7B, 0x76, 0x84, 0x93, 0x9D, 0x93, 0x8F, 0x1, 0x6F, 0xFD, 0x65, 0x40, 0x31, 0x2A, 0x2B, 0x46, 0x5A, 0x79, 0x9F, 0xB3, 0xB3, 0xF2, 0x3, 0xB0, 0x1, 0xFE, 0x81, 0x3, 0xCA, 0xDC, 0xFE, 0xDC, 0xFE, 0x4D, 0xA3, 0xB5, 0x3D, 0x58, 0x91, 0x6D, 0x93, 0x85, 0xA5, 0x1, 0xBC, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0xBC, 0x18, 0x89, 0xA7, 0x2, 0x6B, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0x9B, 0xFE, 0x29, 0x1, 0xC, 0xEC, 0xC1, 0xD6, 0xEB, 0x0, 0x1, 0x0, 0x59, 0xFF, 0xEC, 0x4, 0x20, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x0, 0x1, 0x14, 0x4, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x4, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x20, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x20, 0xFE, 0xE0, 0xBE, 0xD0, 0xFE, 0xE7, 0x6E, 0x87, 0x71, 0x6E, 0x1, 0x3, 0xD0, 0xCA, 0x1, 0x6, 0xF3, 0x7F, 0x61, 0xDD, 0x7A, 0x7D, 0x90, 0x89, 0xFE, 0xEC, 0x83, 0x70, 0x6C, 0x82, 0x1, 0x87, 0xCB, 0xD0, 0xDF, 0xCD, 0x6B, 0xBC, 0x2D, 0x33, 0xB2, 0x55, 0xCD, 0xD1, 0xE2, 0xAD, 0x5E, 0x6E, 0xDB, 0x62, 0x7D, 0xC0, 0xEF, 0x70, 0x79, 0x78, 0x60, 0x0, 0x1, 0x0, 0x54, 0xFE, 0xA3, 0x4, 0x3A, 0x4, 0x8D, 0x0, 0x17, 0x0, 0x0, 0x1, 0x15, 0x23, 0x4, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x20, 0x0, 0x11, 0x34, 0x36, 0x37, 0x1, 0x37, 0x21, 0x15, 0x21, 0x2, 0xE9, 0x5A, 0xFE, 0xBE, 0xC6, 0xAD, 0xA7, 0x96, 0x3D, 0xCA, 0xC0, 0xFE, 0xFA, 0xFE, 0xAA, 0xDF, 0x99, 0xFE, 0xAB, 0x1, 0x3, 0x77, 0xFD, 0xBA, 0x2, 0x55, 0x7B, 0x8, 0xFE, 0xE1, 0x90, 0xB6, 0x58, 0xBA, 0x68, 0x1, 0x17, 0x1, 0x3, 0xBE, 0xEA, 0x19, 0x1, 0x80, 0x8F, 0xC4, 0x0, 0x2, 0x0, 0x35, 0xFF, 0xEC, 0x3, 0xA3, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x13, 0x0, 0x0, 0x1, 0x21, 0x11, 0x7, 0x3, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x14, 0x6, 0x1, 0x33, 0x1, 0x7D, 0x11, 0x53, 0x5F, 0x41, 0x2D, 0x2B, 0x50, 0x5C, 0xFD, 0x8B, 0x6, 0x2, 0x74, 0xFA, 0xC8, 0x2, 0x8, 0x2, 0x5D, 0x1E, 0xFB, 0xA5, 0x12, 0xBF, 0x9, 0x3E, 0x52, 0x94, 0x3, 0xD8, 0xFB, 0x96, 0xBB, 0x9F, 0x0, 0x2, 0x0, 0x35, 0xFE, 0x4B, 0x3, 0xA3, 0x4, 0x3B, 0x0, 0x3, 0x0, 0x14, 0x0, 0x0, 0x25, 0x21, 0x11, 0x7, 0x3, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x14, 0x6, 0x1, 0x30, 0x1, 0x80, 0x17, 0x6B, 0x44, 0x3E, 0x26, 0x25, 0x4C, 0x6D, 0xFD, 0x8B, 0x6, 0x2, 0x74, 0xFA, 0xD7, 0xC4, 0x2, 0x3A, 0x28, 0xFB, 0x75, 0x11, 0xC0, 0x9, 0x4A, 0x64, 0x3F, 0x94, 0x3, 0xA7, 0xFB, 0x86, 0xB6, 0xC0, 0x0, 0x3, 0x0, 0x35, 0xFF, 0x2C, 0x4, 0xDA, 0x5, 0xB0, 0x0, 0x3, 0x0, 0xC, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x21, 0x11, 0x7, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x5, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0x15, 0x23, 0x6, 0x6, 0x1, 0x33, 0x1, 0x7D, 0x11, 0x2, 0x3B, 0x4F, 0x46, 0x80, 0x4A, 0x2, 0xFE, 0x3B, 0x5F, 0x41, 0x2D, 0x2B, 0x50, 0x5C, 0xFD, 0x8B, 0x6, 0x2, 0x74, 0xFA, 0xD1, 0xD1, 0x1, 0xC7, 0x2, 0x8, 0x2, 0x5D, 0x1E, 0xFC, 0x85, 0x4B, 0x57, 0xBF, 0x3F, 0x4E, 0x70, 0x83, 0x5F, 0xE0, 0x12, 0xBF, 0x9, 0x3E, 0x52, 0x94, 0x3, 0xD8, 0xFC, 0x58, 0xC4, 0xBA, 0x9E, 0x0, 0x3, 0x0, 0x35, 0xFD, 0xE8, 0x4, 0xDA, 0x4, 0x3B, 0x0, 0x3, 0x0, 0xC, 0x0, 0x21, 0x0, 0x0, 0x25, 0x21, 0x11, 0x7, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x6, 0x6, 0x1, 0x30, 0x1, 0x80, 0x17, 0x2, 0x41, 0x4F, 0x46, 0x80, 0x4A, 0x2, 0xFE, 0x1D, 0x44, 0x3E, 0x26, 0x25, 0x4C, 0x6D, 0xFD, 0x8B, 0x6, 0x2, 0x74, 0xFA, 0xD2, 0xD2, 0x2, 0xD7, 0xC4, 0x2, 0x3A, 0x28, 0xFC, 0xB2, 0x4C, 0x56, 0xC0, 0x3E, 0x4D, 0x72, 0x82, 0x5F, 0xFE, 0xC3, 0x11, 0xC0, 0x9, 0x4A, 0x64, 0x3F, 0x94, 0x3, 0xA7, 0xFC, 0x89, 0xC4, 0x46, 0xB2, 0xBD, 0x0, 0x1, 0x0, 0x85, 0x0, 0x0, 0x3, 0x4D, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x3, 0xE, 0xFE, 0x6A, 0xF3, 0x2, 0xC8, 0xFE, 0x2B, 0x1, 0x96, 0x1, 0x89, 0xFE, 0x77, 0x4, 0x3A, 0xC4, 0xFE, 0xC9, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x58, 0x0, 0x0, 0x0, 0x3, 0x0, 0x12, 0x0, 0x0, 0x8, 0x6C, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x5, 0x0, 0x14, 0x0, 0x0, 0x1, 0x3, 0x3, 0x21, 0xB, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x1, 0x33, 0x1, 0x21, 0x3, 0x21, 0x13, 0x3, 0x7E, 0xD4, 0xD3, 0x4, 0xCF, 0xD3, 0xD3, 0xC5, 0x77, 0xFD, 0xCC, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xE3, 0x1, 0x24, 0x1, 0x22, 0xE3, 0x2, 0x28, 0xFE, 0xF8, 0x77, 0xFD, 0xD5, 0x81, 0x2, 0x1F, 0x2, 0x5E, 0xFD, 0xA2, 0x2, 0x5D, 0xFD, 0xA3, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x5, 0xB0, 0xFC, 0xFD, 0x3, 0x3, 0xFA, 0x50, 0x1, 0x54, 0xFE, 0xAC, 0x0, 0x4, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0x81, 0x4, 0x4E, 0x0, 0xA, 0x0, 0x14, 0x0, 0x1D, 0x0, 0x45, 0x0, 0x0, 0x1, 0x36, 0x37, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x13, 0x32, 0x36, 0x37, 0x35, 0x23, 0x4, 0x15, 0x14, 0x16, 0x20, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x3, 0xD3, 0x66, 0x8B, 0xA1, 0x64, 0x65, 0x5C, 0x6D, 0xAB, 0x54, 0x7A, 0x19, 0x91, 0xFE, 0xFF, 0x58, 0xFE, 0x22, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0x3, 0xE4, 0x12, 0xA, 0x72, 0xAB, 0x6E, 0xA9, 0x2D, 0x2E, 0xA0, 0x73, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xC7, 0x71, 0x7F, 0xC7, 0xB9, 0xF1, 0x29, 0x2, 0x72, 0x22, 0x1, 0x47, 0x55, 0x65, 0x62, 0x60, 0xFD, 0xDB, 0x51, 0x31, 0xCC, 0x5, 0xB0, 0x41, 0x58, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0xAF, 0x25, 0x40, 0x79, 0x5A, 0x4B, 0x40, 0x65, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0x67, 0x67, 0xBA, 0xBA, 0xFE, 0x20, 0x92, 0x57, 0x11, 0x0, 0x3, 0x0, 0x12, 0xFF, 0xEC, 0x8, 0x44, 0x5, 0xC4, 0x0, 0x12, 0x0, 0x20, 0x0, 0x23, 0x0, 0x0, 0x5, 0x22, 0x24, 0x27, 0x21, 0x3, 0x21, 0x1, 0x33, 0x13, 0x36, 0x24, 0x33, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x13, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x5, 0x3, 0x3, 0x5, 0xE9, 0xBA, 0xFE, 0xE6, 0x49, 0xFD, 0xC4, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xE3, 0x98, 0x3E, 0x1, 0x2A, 0xCC, 0x1, 0x10, 0x1, 0x4D, 0xFE, 0xB5, 0x4E, 0xB9, 0xA7, 0xA2, 0xBC, 0xBE, 0xA2, 0xA8, 0xB6, 0xFC, 0x36, 0xD3, 0xD3, 0x14, 0xBC, 0xAC, 0xFE, 0xAC, 0x5, 0xB0, 0xFE, 0x64, 0xCD, 0xE3, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xFE, 0xB4, 0xFE, 0x85, 0x3, 0x12, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x94, 0x2, 0x5E, 0xFD, 0xA2, 0x0, 0x3, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0xCE, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x30, 0x0, 0x3B, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x22, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x25, 0x32, 0x36, 0x37, 0x26, 0x27, 0x23, 0x20, 0x15, 0x14, 0x16, 0x3, 0xD3, 0x7D, 0x88, 0x87, 0x7C, 0x7C, 0x89, 0x87, 0x7C, 0x1, 0x5, 0x87, 0xCD, 0x40, 0x29, 0xC2, 0x8E, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xE1, 0x70, 0x86, 0xCF, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xFC, 0x38, 0x66, 0x85, 0xC, 0x12, 0x2, 0x83, 0xFE, 0xF0, 0x59, 0x2, 0x12, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0xFD, 0xC5, 0x6B, 0x5D, 0x4A, 0x7E, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0x80, 0x80, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0xC3, 0x75, 0x43, 0x47, 0x4F, 0xB5, 0x41, 0x58, 0x0, 0x2, 0xFF, 0xF6, 0xFF, 0xEC, 0x7, 0xE8, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x17, 0x0, 0x0, 0x5, 0x22, 0x24, 0x27, 0x21, 0x3, 0x21, 0x1, 0x21, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x4, 0x1, 0x11, 0x1, 0x5, 0xC7, 0xC5, 0xFE, 0xE1, 0x2B, 0xFE, 0x18, 0xB8, 0xFE, 0xDE, 0x3, 0x43, 0x1, 0x6A, 0x9F, 0x85, 0x87, 0x9D, 0xFD, 0xFE, 0xC2, 0xFC, 0xFE, 0xFE, 0x9C, 0x14, 0xB6, 0xB3, 0xFE, 0xAB, 0x5, 0xB0, 0xFC, 0x33, 0x9C, 0x91, 0x91, 0x9C, 0x3, 0xCD, 0xFC, 0x33, 0xFA, 0xFD, 0x2, 0x3F, 0x2, 0x92, 0xFD, 0x6E, 0x0, 0x2, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0x60, 0x4, 0x4E, 0x0, 0xA, 0x0, 0x31, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x26, 0x35, 0x23, 0x20, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x1, 0xFD, 0x54, 0x78, 0x1A, 0x3, 0x83, 0xFE, 0xF0, 0x59, 0x3, 0xD5, 0x6, 0x6A, 0xC6, 0xD1, 0x58, 0x32, 0xAD, 0x72, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB6, 0xEC, 0x68, 0x44, 0xAF, 0x40, 0xF3, 0xAF, 0x51, 0x36, 0x23, 0xA4, 0xB5, 0x41, 0x58, 0xAF, 0x6B, 0x7F, 0x90, 0x3B, 0x55, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0xA3, 0x75, 0x55, 0x7F, 0x3, 0x8, 0xFB, 0xC6, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x7, 0x53, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xD, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x1, 0x21, 0x1, 0x3, 0x84, 0xD6, 0xD7, 0x2, 0x69, 0x76, 0xFD, 0xC6, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xFD, 0x1, 0x96, 0x1, 0x72, 0x1, 0x16, 0xFD, 0xF4, 0x2, 0x1F, 0x2, 0x6A, 0xFD, 0x96, 0xFD, 0xE1, 0x1, 0x54, 0xFE, 0xAC, 0x5, 0xB0, 0xFB, 0x8B, 0x4, 0x75, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0x43, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x27, 0x0, 0x0, 0x24, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x37, 0x1, 0x33, 0x1, 0x2, 0x4D, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0x1, 0x5F, 0x12, 0xA, 0x73, 0xAA, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB5, 0xE7, 0x5A, 0x1, 0x1F, 0xFE, 0xFD, 0xE8, 0xAF, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0xAF, 0x25, 0x41, 0x7A, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFD, 0xF3, 0xF7, 0x2, 0x76, 0xFB, 0xC6, 0x0, 0x3, 0x0, 0x12, 0x0, 0x0, 0x7, 0x53, 0x5, 0xB0, 0x0, 0x2, 0x0, 0xE, 0x0, 0x11, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x21, 0x13, 0x21, 0x1, 0x3, 0x37, 0x23, 0x3, 0x42, 0x94, 0x95, 0x2, 0x27, 0xBB, 0xFE, 0x51, 0xBC, 0xFE, 0xF8, 0x2, 0x26, 0xFD, 0x1, 0x1, 0x1, 0x1D, 0xEA, 0x1, 0x16, 0xFD, 0xF4, 0x7C, 0x49, 0x99, 0x2, 0xDD, 0x1, 0xAC, 0xFE, 0x54, 0xFD, 0x23, 0x2, 0x1D, 0xFD, 0xE3, 0x5, 0xB0, 0xFD, 0x2D, 0x2, 0xD3, 0xFA, 0x50, 0x1, 0x3B, 0xE2, 0x0, 0x3, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0x43, 0x4, 0x4E, 0x0, 0x3, 0x0, 0xC, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x37, 0x23, 0x11, 0x4, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x33, 0x13, 0x33, 0x1, 0x4, 0x2B, 0x1A, 0x79, 0xFE, 0x81, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0x1, 0x5F, 0x12, 0xA, 0x73, 0xAA, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB5, 0xE7, 0xBD, 0xBC, 0xFE, 0xFD, 0xE8, 0x1, 0xC4, 0x39, 0xFE, 0xCA, 0x18, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0xAF, 0x25, 0x41, 0x7A, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0x45, 0x1, 0xA5, 0xFB, 0xC6, 0x0, 0x2, 0x0, 0x12, 0xFE, 0x4B, 0x7, 0x5D, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x17, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x1, 0x21, 0x1, 0x6, 0x6, 0x3, 0x7E, 0xD4, 0xD3, 0x1, 0xD7, 0x2C, 0x55, 0x2E, 0x54, 0x55, 0x26, 0x16, 0x7B, 0xFD, 0xCB, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xE3, 0x1, 0xA6, 0x1, 0x95, 0x1, 0x7, 0xFD, 0xB2, 0x2E, 0xA7, 0x2, 0x1F, 0x2, 0x5E, 0xFD, 0xA2, 0xFC, 0x2C, 0x11, 0xBD, 0x4, 0x42, 0x63, 0x3B, 0x1, 0x5F, 0xFE, 0xAC, 0x5, 0xB0, 0xFB, 0xA8, 0x4, 0x58, 0xF9, 0xB7, 0x7F, 0x9D, 0x0, 0x2, 0x0, 0x5B, 0xFE, 0x4B, 0x6, 0x4D, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x2D, 0x0, 0x0, 0x24, 0x36, 0x37, 0x35, 0x23, 0x4, 0x15, 0x14, 0x16, 0x13, 0x22, 0x27, 0x35, 0x17, 0x32, 0x37, 0x37, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x1, 0x33, 0x1, 0x2, 0x2, 0x4D, 0x7A, 0x19, 0x91, 0xFF, 0x0, 0x56, 0x8A, 0x2C, 0x55, 0x2E, 0xAA, 0x5A, 0x9, 0x9, 0x70, 0xA5, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB5, 0xE7, 0x1, 0x84, 0xFD, 0xFD, 0x8A, 0x92, 0xAF, 0x51, 0x31, 0xCC, 0x5, 0xB2, 0x41, 0x56, 0xFD, 0x9C, 0x11, 0xBC, 0x3, 0x72, 0xC, 0xCB, 0x72, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0x16, 0x3, 0x4A, 0xFB, 0x2F, 0xFE, 0xE2, 0x0, 0x2, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0xD3, 0x5, 0xC4, 0x0, 0xB, 0x0, 0x27, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x5, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x20, 0x0, 0x1, 0xE9, 0x49, 0x40, 0x41, 0x49, 0x49, 0x41, 0x40, 0x49, 0xFE, 0x64, 0xFC, 0x11, 0x86, 0x9D, 0xAB, 0xAC, 0x1, 0x9C, 0xB1, 0xA3, 0x89, 0x12, 0xFC, 0x14, 0x1, 0x1A, 0x1, 0xC, 0x1, 0xD, 0x1, 0x3E, 0xFE, 0xBD, 0xFE, 0xED, 0xFE, 0xFA, 0xFE, 0xEC, 0x2, 0xD6, 0x35, 0x48, 0x48, 0x35, 0x34, 0x47, 0x47, 0xC1, 0x8B, 0x9D, 0xFA, 0xE4, 0x7D, 0xDA, 0x1, 0xA, 0x96, 0x8C, 0xD5, 0x1, 0x19, 0xFE, 0x8B, 0xFE, 0xC5, 0x76, 0xFE, 0xC5, 0xFE, 0x89, 0x1, 0x1B, 0x0, 0x2, 0x0, 0x3B, 0xFF, 0xEC, 0x3, 0xE1, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x27, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x5, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x23, 0x22, 0x24, 0x1, 0x72, 0x42, 0x3B, 0x3C, 0x42, 0x42, 0x3C, 0x3B, 0x42, 0xFE, 0xC9, 0xE5, 0x5, 0x7A, 0x58, 0x95, 0x62, 0x62, 0x95, 0x63, 0x6F, 0x5, 0xE5, 0x5, 0xF1, 0xC4, 0xF7, 0xF3, 0x2, 0xF3, 0xFA, 0xB4, 0xFF, 0x0, 0x2, 0x19, 0x32, 0x45, 0x45, 0x32, 0x31, 0x45, 0x45, 0x82, 0x4F, 0x68, 0xD9, 0x83, 0x24, 0x81, 0xDB, 0x7D, 0x57, 0xB3, 0xE4, 0xFE, 0xC4, 0xDD, 0x2A, 0xDF, 0xFE, 0xC0, 0xDD, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x5, 0x65, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x30, 0x4D, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0x1, 0xE1, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x4, 0x99, 0x6, 0x0, 0x0, 0x26, 0x0, 0x50, 0x62, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0x2, 0x6, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x1, 0x37, 0x27, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x17, 0x37, 0x17, 0x7, 0x1, 0x21, 0x3, 0x7, 0x2, 0x2B, 0x9F, 0x93, 0xA6, 0xFC, 0xFC, 0x8D, 0x1, 0xAA, 0x1, 0x32, 0xFD, 0xE3, 0xA8, 0x9A, 0x6C, 0xA4, 0x1, 0x31, 0xFE, 0xD4, 0xC1, 0x94, 0x1, 0x1E, 0x84, 0xD4, 0xB0, 0xFE, 0x3A, 0x5, 0xB0, 0xFD, 0x54, 0xAE, 0x1, 0xFE, 0xFD, 0x7C, 0xEE, 0x80, 0x83, 0x89, 0xFE, 0x4E, 0x1, 0x16, 0x7C, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x36, 0x6, 0x0, 0x0, 0x14, 0x0, 0x0, 0x25, 0x37, 0x27, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x17, 0x37, 0x17, 0x7, 0x13, 0x21, 0x27, 0x7, 0x1, 0xB5, 0x8C, 0x64, 0x6E, 0xF2, 0xF2, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6E, 0x75, 0xBB, 0x6C, 0xC5, 0xE6, 0xFE, 0xE7, 0x7C, 0x80, 0xCC, 0x74, 0x92, 0x71, 0xFE, 0x9F, 0x6, 0x0, 0xFC, 0x8A, 0x60, 0x1, 0x50, 0xFE, 0x3D, 0xA6, 0x9C, 0x84, 0xA4, 0xFE, 0xBB, 0xB4, 0x6B, 0x0, 0x1, 0x0, 0x14, 0x0, 0x0, 0x5, 0x66, 0x5, 0xB0, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x37, 0x27, 0x7, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x37, 0x1, 0x21, 0x1, 0x17, 0x37, 0x17, 0x7, 0x1, 0x21, 0x3, 0x7, 0x2, 0x78, 0x9F, 0x93, 0xA5, 0xFD, 0xCE, 0xCE, 0xFD, 0xD3, 0xD3, 0x8C, 0x1, 0xAA, 0x1, 0x32, 0xFD, 0xE3, 0xA8, 0x9A, 0x6C, 0xA4, 0x1, 0x32, 0xFE, 0xD3, 0xC1, 0x94, 0x1, 0x1E, 0x84, 0xD4, 0xAF, 0xFE, 0x39, 0x4, 0x68, 0xAA, 0x9E, 0x9E, 0xAA, 0xFE, 0x9E, 0xAC, 0x1, 0xFE, 0xFD, 0x7D, 0xEF, 0x80, 0x83, 0x88, 0xFE, 0x4D, 0x1, 0x16, 0x7C, 0x0, 0x1, 0x0, 0x14, 0x0, 0x0, 0x4, 0x99, 0x6, 0x0, 0x0, 0x1C, 0x0, 0x0, 0x25, 0x37, 0x27, 0x7, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x37, 0x1, 0x21, 0x1, 0x17, 0x37, 0x17, 0x7, 0x13, 0x21, 0x27, 0x7, 0x2, 0x18, 0x8C, 0x65, 0x6D, 0xF2, 0xCC, 0xCC, 0xF2, 0xE0, 0xE0, 0x4D, 0x1, 0x2B, 0x1, 0x24, 0xFE, 0x6D, 0x76, 0xBB, 0x6C, 0xC5, 0xE6, 0xFE, 0xE7, 0x7C, 0x80, 0xCC, 0x74, 0x92, 0x70, 0xFE, 0x9E, 0x4, 0x8D, 0xAA, 0xC9, 0xC9, 0xAA, 0xFD, 0xFD, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xA7, 0x9C, 0x84, 0xA4, 0xFE, 0xBB, 0xB4, 0x6B, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x4, 0xC0, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x21, 0x1, 0x5B, 0xC6, 0xFC, 0xC6, 0x2, 0x69, 0xFC, 0x9B, 0x2, 0x8F, 0x3, 0x21, 0xFD, 0xAA, 0xFD, 0x70, 0xCA, 0x0, 0x1, 0x0, 0x64, 0x0, 0x0, 0x2, 0x17, 0x6, 0x1, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x23, 0x1, 0x24, 0xC0, 0xF3, 0xC0, 0xF3, 0x2, 0xB4, 0x3, 0x4D, 0xFD, 0x76, 0xFC, 0x89, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x4, 0x76, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x4F, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0x2, 0x8, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x2, 0xB2, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x5D, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0x2, 0x19, 0x0, 0x3, 0x0, 0x14, 0xFF, 0xEC, 0x6, 0x56, 0x5, 0xC4, 0x0, 0x6, 0x0, 0xC, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x3, 0x20, 0x13, 0x21, 0x16, 0x16, 0x1, 0x23, 0x2, 0x0, 0x21, 0x22, 0x0, 0x3, 0x23, 0x35, 0x33, 0x12, 0x0, 0x33, 0x20, 0x0, 0x13, 0x33, 0x3, 0x34, 0x98, 0xBA, 0xB, 0x2, 0xBB, 0xB, 0xB7, 0x9A, 0x1, 0x43, 0x19, 0xFD, 0x45, 0xD, 0xBB, 0x3, 0xB7, 0xC7, 0x11, 0xFE, 0xBA, 0xFE, 0xFE, 0xFD, 0xFE, 0xB3, 0x12, 0xC6, 0xC6, 0x10, 0x1, 0x4C, 0xFE, 0x1, 0x3, 0x1, 0x48, 0x10, 0xC7, 0x4, 0xF3, 0xE1, 0xD8, 0xD8, 0xE1, 0xFB, 0xC9, 0x1, 0xB4, 0xD5, 0xDF, 0x1, 0xB4, 0xFE, 0xD2, 0xFE, 0xAA, 0x1, 0x56, 0x1, 0x2E, 0xCA, 0x1, 0x31, 0x1, 0x59, 0xFE, 0xA7, 0xFE, 0xCF, 0x0, 0x3, 0x0, 0x1B, 0xFF, 0xEC, 0x5, 0x2F, 0x4, 0x4E, 0x0, 0x6, 0x0, 0xD, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x3, 0x32, 0x36, 0x37, 0x21, 0x16, 0x16, 0x1, 0x23, 0x6, 0x0, 0x23, 0x22, 0x0, 0x27, 0x23, 0x35, 0x33, 0x36, 0x0, 0x33, 0x32, 0x0, 0x17, 0x33, 0x2, 0xA4, 0x71, 0x7B, 0x10, 0x1, 0xFA, 0x10, 0x7C, 0x70, 0x73, 0x7C, 0xF, 0xFE, 0x2, 0xF, 0x7C, 0x2, 0xFE, 0x97, 0x17, 0xFE, 0xFD, 0xD8, 0xD9, 0xFE, 0xFC, 0x17, 0x97, 0x99, 0x19, 0x1, 0x2, 0xD5, 0xD7, 0x1, 0x3, 0x18, 0x99, 0x3, 0x8B, 0x98, 0x70, 0x70, 0x98, 0xFD, 0x24, 0x9C, 0x75, 0x75, 0x9C, 0x1, 0x11, 0xCC, 0xFE, 0xF8, 0x1, 0x8, 0xCC, 0xC3, 0xC8, 0x1, 0x3, 0xFE, 0xFD, 0xC8, 0x0, 0x3, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xCC, 0x5, 0xC5, 0x0, 0x16, 0x0, 0x1F, 0x0, 0x2D, 0x0, 0x0, 0x5, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x15, 0x10, 0x0, 0x13, 0x22, 0x7, 0x16, 0x17, 0x36, 0x35, 0x34, 0x26, 0x3, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x2, 0xC4, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0xB2, 0x88, 0x4E, 0x72, 0x74, 0x9C, 0x6E, 0x50, 0x11, 0xFE, 0xB5, 0xE8, 0x30, 0x24, 0x52, 0x2F, 0x4B, 0x45, 0xCD, 0xB9, 0xA7, 0xA2, 0xBD, 0xBF, 0xA2, 0xA8, 0xB6, 0x14, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0x54, 0x55, 0x94, 0x73, 0x59, 0x8D, 0x1A, 0x5C, 0x66, 0x49, 0xFE, 0xB4, 0xFE, 0x85, 0x5, 0x4D, 0x21, 0x57, 0x7C, 0x1E, 0x56, 0x37, 0x49, 0xFD, 0xC5, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0xF5, 0x4, 0x9A, 0x0, 0x15, 0x0, 0x1E, 0x0, 0x2C, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x14, 0x0, 0x13, 0x22, 0x7, 0x16, 0x17, 0x36, 0x35, 0x34, 0x26, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x2, 0x48, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0x6F, 0x5D, 0x4F, 0x88, 0x6E, 0x9E, 0x6E, 0x50, 0x7, 0xFE, 0xF7, 0xB4, 0x3B, 0x25, 0x5B, 0x2F, 0x4E, 0x45, 0xFE, 0x2C, 0x86, 0x7D, 0x7C, 0x89, 0x87, 0x7D, 0x7D, 0x14, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0x26, 0x72, 0x87, 0x85, 0x5E, 0x88, 0x18, 0x33, 0x4B, 0xEB, 0xFE, 0xC5, 0x4, 0x22, 0x2E, 0x4D, 0x7A, 0x1D, 0x58, 0x37, 0x49, 0xFC, 0xA1, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x8, 0xDB, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x34, 0x3, 0xBC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0x39, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x54, 0x2, 0xFB, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x5, 0x20, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x35, 0x4C, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x84, 0xFE, 0x75, 0xFF, 0xFF, 0x0, 0xD, 0xFE, 0x60, 0x4, 0x94, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x55, 0x63, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x7D, 0xFC, 0x75, 0x0, 0x2, 0x0, 0x28, 0x0, 0x0, 0x5, 0xEA, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x33, 0x11, 0x21, 0x32, 0x0, 0x15, 0x14, 0x4, 0x23, 0x2, 0xA8, 0x1, 0x30, 0x93, 0x82, 0x82, 0x93, 0xFE, 0xD0, 0xFD, 0xD, 0x67, 0x44, 0x11, 0xC0, 0x1C, 0xD9, 0xAA, 0x2, 0x2D, 0xFE, 0x1, 0x14, 0xFE, 0xEC, 0xFE, 0x4, 0xE5, 0xFE, 0x3, 0x8A, 0x6D, 0x66, 0xA0, 0xFD, 0x38, 0xFD, 0xE3, 0x2, 0x1D, 0x62, 0x5B, 0x53, 0x44, 0x4A, 0x79, 0xBF, 0x9D, 0x2, 0xC8, 0xFE, 0xFA, 0xC9, 0xD3, 0xF1, 0x0, 0x2, 0x0, 0x22, 0xFE, 0x60, 0x5, 0x6C, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x2B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x3, 0x78, 0x8B, 0x76, 0x76, 0x83, 0x94, 0x42, 0x5F, 0x90, 0x7F, 0x70, 0xF3, 0x34, 0x23, 0x3D, 0x3A, 0x10, 0xBC, 0x1B, 0xAB, 0x6D, 0x3B, 0x42, 0xE0, 0xA, 0x6C, 0xB7, 0xCE, 0xDA, 0xE1, 0xAE, 0xD4, 0x90, 0x15, 0x92, 0xCF, 0x7B, 0xFD, 0xC7, 0x26, 0xC2, 0x20, 0xFE, 0x54, 0x2, 0x11, 0x16, 0x6C, 0x54, 0x4D, 0x4B, 0x47, 0x7D, 0xAA, 0xB8, 0x17, 0x2, 0xFC, 0x6D, 0x81, 0xFE, 0xD0, 0xF7, 0x15, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x28, 0x0, 0x0, 0x5, 0xF1, 0x6, 0xF, 0x0, 0x8, 0x0, 0x26, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x26, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x15, 0x14, 0x33, 0x11, 0x21, 0x32, 0x0, 0x15, 0x14, 0x4, 0x23, 0x2, 0xAE, 0x1, 0x30, 0x93, 0x82, 0x82, 0x93, 0xFE, 0xD0, 0xFD, 0x9F, 0xDC, 0x68, 0x47, 0x2F, 0x93, 0x51, 0x57, 0x65, 0xB3, 0x2, 0x2D, 0xFE, 0x1, 0x15, 0xFE, 0xEB, 0xFE, 0x4, 0xE5, 0xFE, 0x3, 0x8A, 0x6D, 0x66, 0xA0, 0xFD, 0x38, 0xFD, 0xE3, 0x2, 0x1D, 0x1, 0x7F, 0xA7, 0x76, 0xB7, 0x55, 0x44, 0x54, 0x2A, 0x87, 0x4D, 0x92, 0x59, 0x6D, 0xBC, 0x59, 0x6D, 0x2, 0xC8, 0xFE, 0xFA, 0xC9, 0xD3, 0xF1, 0x0, 0x2, 0x0, 0x2B, 0xFE, 0x60, 0x5, 0x57, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x30, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x2E, 0x2, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x15, 0x14, 0x16, 0x17, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x3, 0x64, 0x8B, 0x76, 0x76, 0x83, 0x94, 0x42, 0x6F, 0x8F, 0x82, 0x7C, 0xF3, 0x56, 0xAB, 0x71, 0x66, 0x3D, 0x2F, 0x90, 0x52, 0x55, 0x5E, 0x5C, 0x43, 0xDF, 0xB, 0x6C, 0xB7, 0xCE, 0xD9, 0xDA, 0xAF, 0xD3, 0x90, 0x15, 0x92, 0xCF, 0x7B, 0xFD, 0xC2, 0x20, 0xC3, 0x1C, 0xFE, 0x58, 0x1, 0xF3, 0x1C, 0x49, 0x76, 0x61, 0x6B, 0xB2, 0x5C, 0x36, 0x47, 0x2B, 0x88, 0x4C, 0x87, 0x53, 0x60, 0xB6, 0x50, 0x36, 0x47, 0x19, 0x3, 0x24, 0x6D, 0x81, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x60, 0xFE, 0x75, 0x5, 0x9A, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x28, 0x0, 0x0, 0x1, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x13, 0x27, 0x7, 0x27, 0x37, 0x27, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x14, 0x2, 0x7, 0x17, 0x37, 0x17, 0x7, 0x17, 0x4, 0x1C, 0xB9, 0xA7, 0xA2, 0xBC, 0xBE, 0xA2, 0xA8, 0xB6, 0xDF, 0x94, 0x94, 0x7C, 0x89, 0x9F, 0x3F, 0x44, 0xFE, 0xF6, 0xFE, 0xAC, 0x1, 0x52, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4D, 0x84, 0x76, 0x57, 0xA9, 0x7B, 0x9C, 0x9A, 0x2, 0xFE, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0xFB, 0xE5, 0x76, 0x99, 0x77, 0x8E, 0x7F, 0xD, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xCE, 0xFE, 0xCE, 0x58, 0x45, 0xAE, 0x78, 0xA1, 0x7A, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x60, 0x4, 0xD7, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x56, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x1, 0xA9, 0xFC, 0x75, 0x0, 0x2, 0x0, 0x60, 0xFE, 0x82, 0x6, 0xCD, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x31, 0x0, 0x0, 0x1, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x13, 0x27, 0x7, 0x27, 0x37, 0x27, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x11, 0x15, 0x14, 0x2, 0x7, 0x17, 0x1, 0x36, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x17, 0x14, 0x7, 0x1, 0x17, 0x4, 0x1B, 0xB9, 0xA7, 0xA1, 0xBD, 0xBF, 0xA1, 0xA8, 0xB6, 0xDF, 0x93, 0x8B, 0x7F, 0x7E, 0x9B, 0x3F, 0x44, 0xFE, 0xF6, 0xFE, 0xAD, 0x1, 0x51, 0x1, 0xA, 0x1, 0x10, 0x1, 0x4E, 0x84, 0x76, 0x55, 0x1, 0x19, 0x6F, 0xB, 0xA, 0x52, 0x2E, 0x9D, 0x9E, 0x1, 0xBF, 0xFE, 0xF3, 0x96, 0x2, 0xFE, 0xF5, 0x1, 0x0, 0xFF, 0x0, 0xF5, 0x4B, 0xF5, 0xFE, 0xFE, 0x1, 0x2, 0xF5, 0xFB, 0xE5, 0x75, 0x8B, 0x7E, 0x7E, 0x7B, 0xD, 0x1, 0x7B, 0x1, 0x4C, 0x49, 0x1, 0x4C, 0x1, 0x7C, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xCE, 0xFE, 0xCE, 0x58, 0x44, 0x1, 0x19, 0x6F, 0x58, 0x58, 0x8F, 0x3C, 0x73, 0xC4, 0xAA, 0xA6, 0xC4, 0xFE, 0xF3, 0x77, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x5, 0x9B, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x23, 0x35, 0x7, 0x27, 0x37, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x37, 0x36, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x12, 0x7, 0x7, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x4, 0x3, 0xF3, 0x80, 0x7E, 0xFE, 0x6A, 0xAA, 0xCA, 0xE2, 0xE1, 0xCD, 0xB4, 0x6B, 0xD, 0xD9, 0x58, 0x6C, 0xA, 0xA, 0x52, 0x2E, 0x9E, 0x9E, 0x4, 0xCF, 0xC9, 0xFE, 0x36, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0xFE, 0x60, 0xA3, 0x7A, 0x7E, 0xF4, 0x62, 0x71, 0x1, 0x3A, 0xED, 0x14, 0xF7, 0x1, 0x30, 0x7E, 0x6A, 0xFC, 0xAA, 0x54, 0x68, 0x57, 0x56, 0x91, 0x3C, 0x73, 0xC4, 0xFE, 0xA8, 0xC6, 0xC0, 0xC4, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0x0, 0x1, 0x0, 0x14, 0x0, 0x0, 0x3, 0xF9, 0x5, 0xC4, 0x0, 0x15, 0x0, 0x0, 0x21, 0x21, 0x1, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x1, 0x3, 0xF9, 0xFE, 0xFC, 0xFE, 0x52, 0xAF, 0xE5, 0x76, 0x88, 0x65, 0x8B, 0x59, 0x80, 0xCB, 0x1, 0x10, 0xE6, 0xFD, 0xC6, 0x8C, 0x1, 0x79, 0x2, 0x6F, 0x56, 0xA8, 0x91, 0x66, 0x94, 0x44, 0x4A, 0x93, 0xC7, 0xEC, 0xCA, 0xA9, 0xE0, 0x55, 0xFD, 0xDD, 0x0, 0x1, 0x0, 0xD, 0x0, 0x0, 0x3, 0x1E, 0x4, 0x46, 0x0, 0x16, 0x0, 0x0, 0x21, 0x21, 0x1, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x1, 0x3, 0x1E, 0xFE, 0xFB, 0xFE, 0xC4, 0x86, 0x9D, 0x58, 0x43, 0x42, 0x62, 0x3D, 0x77, 0x4B, 0xAB, 0x73, 0xAB, 0xD3, 0x8C, 0x64, 0x1, 0x1A, 0x1, 0xD4, 0x36, 0x7F, 0x5E, 0x4D, 0x4D, 0x2A, 0x29, 0x92, 0x3C, 0x4A, 0xBA, 0xA1, 0x7B, 0x99, 0x35, 0xFE, 0x67, 0x0, 0x1, 0x0, 0x22, 0xFE, 0x60, 0x4, 0xE2, 0x5, 0xC5, 0x0, 0x1D, 0x0, 0x0, 0x21, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x36, 0x12, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x4, 0x15, 0x14, 0x0, 0x7, 0x21, 0x11, 0x33, 0x11, 0x33, 0x4, 0xE2, 0xAE, 0xFC, 0xFC, 0xFA, 0xBD, 0xFC, 0x7D, 0x86, 0x7A, 0x7F, 0x6B, 0x5C, 0x93, 0xD2, 0xCC, 0x1, 0x13, 0xFE, 0xEC, 0xDC, 0x1, 0xC2, 0xFC, 0xAE, 0xFE, 0x60, 0x1, 0xA0, 0xAF, 0xB7, 0x1, 0x10, 0xF3, 0x8D, 0x74, 0x89, 0x3E, 0xAF, 0x61, 0xDB, 0xE3, 0xD9, 0xFE, 0x6D, 0xD1, 0x1, 0x8E, 0xFE, 0x72, 0x0, 0x1, 0x0, 0x22, 0xFE, 0x60, 0x4, 0xE2, 0x6, 0x1F, 0x0, 0x1B, 0x0, 0x0, 0x21, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x0, 0x0, 0x35, 0x10, 0x21, 0x22, 0x7, 0x27, 0x36, 0x33, 0x32, 0x4, 0x15, 0x14, 0x0, 0x7, 0x21, 0x11, 0x33, 0x11, 0x33, 0x4, 0xE2, 0xB7, 0xF3, 0xFC, 0xFA, 0x1, 0x21, 0x1, 0x1B, 0xFE, 0xFF, 0x7A, 0x69, 0x68, 0x95, 0xC2, 0xD4, 0x1, 0x14, 0xFE, 0xE6, 0xDF, 0x1, 0xD0, 0xF3, 0xB7, 0xFE, 0x60, 0x1, 0xA0, 0xA8, 0x1, 0x14, 0x1, 0xC0, 0xD5, 0x1, 0xB, 0x40, 0xA3, 0x60, 0xD6, 0xE8, 0xDC, 0xFE, 0x22, 0xE4, 0x1, 0x95, 0xFE, 0x6B, 0x0, 0x1, 0x0, 0x12, 0xFF, 0x83, 0x5, 0x1D, 0x6, 0x1D, 0x0, 0xE, 0x0, 0x0, 0x21, 0x27, 0x7, 0x23, 0x13, 0x1, 0x21, 0x13, 0x1, 0x33, 0x1, 0x17, 0x1, 0x21, 0x1, 0x2, 0x1C, 0x21, 0x46, 0xC0, 0xA1, 0xFE, 0x7C, 0x1, 0x15, 0xE7, 0x1, 0xB, 0xBF, 0xFE, 0x95, 0x29, 0x1, 0x71, 0x1, 0x16, 0xFD, 0xF4, 0x5C, 0xD9, 0x1, 0xF2, 0x4, 0x3B, 0xFD, 0x35, 0x3, 0x38, 0xFB, 0x9F, 0x7E, 0x4, 0x72, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x17, 0xFF, 0x83, 0x3, 0xDB, 0x5, 0x1, 0x0, 0xE, 0x0, 0x0, 0x21, 0x27, 0x7, 0x23, 0x13, 0x3, 0x33, 0x13, 0x13, 0x33, 0x3, 0x17, 0x13, 0x33, 0x1, 0x1, 0x91, 0x1F, 0x3F, 0xB7, 0x94, 0xF9, 0xFB, 0x6A, 0xA3, 0xB6, 0xFD, 0x24, 0xE4, 0xFB, 0xFE, 0x89, 0x58, 0xD5, 0x1, 0xEF, 0x2, 0xC8, 0xFE, 0xA3, 0x2, 0x24, 0xFC, 0xAB, 0x77, 0x3, 0x5, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x31, 0xFE, 0x4B, 0x6, 0xE5, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x23, 0x1, 0x1, 0x23, 0x1, 0x33, 0x13, 0x1, 0x33, 0x1, 0x13, 0x33, 0x1, 0x2, 0x4, 0x27, 0x2C, 0x55, 0x2E, 0x59, 0x68, 0x17, 0xE, 0x17, 0xFE, 0xEB, 0xFE, 0xE5, 0xF2, 0xFE, 0xB0, 0xFB, 0xE2, 0x1, 0x16, 0xD4, 0x1, 0x10, 0xE2, 0xFB, 0xFE, 0x90, 0x49, 0xFE, 0x4B, 0x11, 0xBD, 0x4, 0x44, 0x67, 0x40, 0x4, 0x26, 0xFB, 0xDA, 0x5, 0xB0, 0xFB, 0xBD, 0x4, 0x43, 0xFB, 0xC5, 0x4, 0x3B, 0xF9, 0xD4, 0xFE, 0xC7, 0xFF, 0xFF, 0x0, 0x17, 0xFE, 0x4B, 0x6, 0xAB, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5B, 0x0, 0x0, 0x0, 0x7, 0x0, 0x5E, 0x2, 0xD4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEB, 0x4, 0x3D, 0x7, 0x8C, 0x0, 0x2E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x25, 0x23, 0x26, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x3D, 0x77, 0xE1, 0x90, 0xFA, 0x83, 0x6B, 0x7A, 0x89, 0x96, 0x8D, 0x8D, 0x1, 0x2D, 0x71, 0xF6, 0xFE, 0xF4, 0x1, 0x1E, 0xE2, 0x7D, 0xE1, 0x8E, 0xFA, 0x88, 0x6A, 0x7C, 0x87, 0x89, 0x84, 0x1, 0xBF, 0x1, 0xFE, 0xAE, 0xB5, 0xC6, 0xFE, 0xDF, 0x15, 0x58, 0xBC, 0x95, 0x59, 0x7F, 0x81, 0x64, 0x86, 0x73, 0xAE, 0xED, 0x2, 0xD4, 0xD4, 0xD0, 0xDD, 0x5C, 0xBB, 0x8F, 0x5A, 0x7B, 0x7D, 0x5F, 0x7E, 0x6D, 0x9B, 0xFE, 0xEC, 0x1C, 0xD1, 0xBC, 0xD0, 0xE1, 0x0, 0x1, 0x0, 0x51, 0xFE, 0x4B, 0x4, 0x4A, 0x6, 0x9E, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x1, 0x23, 0x26, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x5, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x4A, 0x77, 0xE1, 0x90, 0xF3, 0x85, 0x70, 0x80, 0x8E, 0x9B, 0x93, 0x8E, 0x1, 0x61, 0xAE, 0xF4, 0xFE, 0xF6, 0x1, 0x1E, 0xE2, 0x7D, 0xE1, 0x8E, 0xF3, 0x8B, 0x6E, 0x83, 0x8A, 0x1, 0xC, 0x1, 0xC9, 0x1, 0xFE, 0x89, 0xCA, 0xDD, 0xFE, 0xDF, 0xFE, 0x4B, 0x58, 0xBB, 0x95, 0x5E, 0x87, 0x85, 0x64, 0x97, 0x82, 0xAB, 0x1, 0x84, 0x3, 0xE0, 0xD0, 0xCF, 0xDD, 0x5D, 0xBB, 0x8E, 0x60, 0x83, 0x85, 0x65, 0xF3, 0x5, 0x9B, 0xFE, 0x5C, 0x17, 0xE7, 0xC5, 0xCC, 0xE0, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x4, 0xCE, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x21, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x1, 0xD7, 0xF6, 0x91, 0x7D, 0x7D, 0x91, 0xF6, 0xF3, 0xD0, 0xD0, 0xF3, 0xDB, 0xDB, 0x1, 0x2, 0xF3, 0x1, 0x2, 0xFE, 0xF8, 0xF9, 0x3, 0xA3, 0xFE, 0x4C, 0x8A, 0x52, 0x53, 0x85, 0xFD, 0x89, 0xFE, 0xD4, 0x4, 0xB6, 0xAB, 0x4F, 0x4F, 0xAB, 0x50, 0x3, 0xE7, 0xAF, 0xB3, 0xEE, 0x0, 0x2, 0x0, 0x14, 0xFE, 0x60, 0x4, 0x99, 0x6, 0x0, 0x0, 0xB, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x3, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x2, 0xB0, 0x83, 0x74, 0x76, 0x83, 0x94, 0x42, 0x43, 0x43, 0xF3, 0xD1, 0xD1, 0xF3, 0xDA, 0xDA, 0x6B, 0xAF, 0xCE, 0xD9, 0xD9, 0xCB, 0xB1, 0x6C, 0xAF, 0xD3, 0x91, 0x14, 0x92, 0xCF, 0x7B, 0xFE, 0x20, 0x7E, 0xFD, 0xB1, 0x6, 0x60, 0xAB, 0x95, 0x95, 0xAB, 0xE8, 0x76, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x75, 0x0, 0x2, 0x0, 0x14, 0xFF, 0x38, 0x4, 0xCE, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x16, 0x4, 0x15, 0x14, 0x4, 0x23, 0x23, 0x15, 0x33, 0x1, 0xD7, 0xF6, 0x91, 0x7D, 0x7D, 0x91, 0x1B, 0xDB, 0xF3, 0xD0, 0xD0, 0xF3, 0xFE, 0xF5, 0x1, 0x4, 0xFE, 0xF8, 0xF9, 0xF6, 0xDB, 0x3, 0xD6, 0xFE, 0x19, 0x95, 0x5C, 0x5F, 0x97, 0xFC, 0x2A, 0xC8, 0xC8, 0xAB, 0x5, 0x5, 0xFE, 0xE9, 0x2, 0xF8, 0xBD, 0xBE, 0xF8, 0x81, 0x0, 0x2, 0x0, 0x14, 0xFE, 0x60, 0x4, 0x99, 0x6, 0x0, 0x0, 0xB, 0x0, 0x23, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x13, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x15, 0x33, 0x2, 0xB0, 0x83, 0x74, 0x76, 0x83, 0x95, 0x41, 0x43, 0x97, 0xDA, 0xF3, 0xD1, 0xD1, 0xF3, 0x6B, 0xAF, 0xCE, 0xD9, 0xD9, 0xCB, 0xB1, 0x6C, 0xDA, 0xAF, 0xD3, 0x91, 0x14, 0x92, 0xCF, 0x7E, 0xFE, 0x25, 0x80, 0xFE, 0x46, 0x95, 0x95, 0xAB, 0x6, 0x60, 0xFD, 0xD8, 0x76, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x75, 0xC1, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x60, 0x4, 0x6E, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x11, 0x1, 0x21, 0x1, 0x1, 0x91, 0xFC, 0xFC, 0x1, 0xCF, 0x1, 0xE, 0xFD, 0x23, 0xFE, 0x60, 0x7, 0x50, 0xFC, 0x7, 0x3, 0xF9, 0xF9, 0xFB, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x3, 0xCB, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x0, 0x1, 0x23, 0x11, 0x33, 0x11, 0x1, 0x33, 0x1, 0x1, 0x70, 0xF3, 0xF3, 0x1, 0x60, 0xFB, 0xFD, 0xA5, 0xFE, 0x60, 0x5, 0xDA, 0xFC, 0xE9, 0x3, 0x17, 0xFB, 0x29, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x3, 0xC9, 0x5, 0xC5, 0x0, 0x22, 0x0, 0x0, 0x33, 0x35, 0x21, 0x32, 0x36, 0x35, 0x34, 0x25, 0x23, 0x35, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x14, 0x4, 0x23, 0x73, 0x1, 0x30, 0x8D, 0x9C, 0xFE, 0xF5, 0x8A, 0x81, 0x86, 0x78, 0x5A, 0x71, 0x5D, 0x6F, 0xFA, 0x1, 0x8, 0xBB, 0xDC, 0xEF, 0x7B, 0x6D, 0xFE, 0xFE, 0xCB, 0xF1, 0xCB, 0x72, 0x6B, 0xE1, 0x6, 0xC9, 0x1, 0x72, 0x60, 0x56, 0x72, 0x6C, 0x59, 0xBD, 0xDA, 0xDB, 0xB7, 0x67, 0xA5, 0x2F, 0x5C, 0xFC, 0xD3, 0xCD, 0x0, 0x1, 0x0, 0x21, 0xFE, 0x6D, 0x3, 0x6C, 0x4, 0x4D, 0x0, 0x23, 0x0, 0x0, 0x13, 0x35, 0x33, 0x36, 0x36, 0x35, 0x10, 0x25, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x6E, 0xF6, 0x91, 0x85, 0xFE, 0xEF, 0x76, 0x90, 0x69, 0x67, 0x4D, 0x5A, 0x45, 0x54, 0xF2, 0xE4, 0xA5, 0xC4, 0xD7, 0x65, 0x55, 0x70, 0x71, 0xFE, 0xFE, 0xEC, 0xFE, 0x6D, 0xBC, 0x1, 0x8E, 0x6A, 0x1, 0x1, 0x6, 0xA9, 0x8A, 0x6B, 0x56, 0x75, 0x58, 0x3B, 0x98, 0xB6, 0xD4, 0xAA, 0x69, 0xA9, 0x30, 0x33, 0xC1, 0x80, 0xBB, 0xF1, 0x0, 0x2, 0x0, 0x46, 0xFF, 0xEC, 0x4, 0x1C, 0x5, 0xC5, 0x0, 0x7, 0x0, 0x20, 0x0, 0x0, 0x1, 0x33, 0x32, 0x35, 0x34, 0x23, 0x22, 0x7, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x35, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x10, 0x5, 0x23, 0x11, 0x14, 0x6, 0x2, 0x60, 0x39, 0x9A, 0x67, 0x6A, 0x2, 0xFE, 0x7D, 0x50, 0x47, 0x7, 0x34, 0x3A, 0xA8, 0x1, 0xFE, 0xE9, 0x1, 0x17, 0x9B, 0xCA, 0xA7, 0xAC, 0xFE, 0x94, 0x50, 0xCC, 0x4, 0x17, 0x8A, 0x69, 0x86, 0xFB, 0x68, 0x15, 0xBD, 0x9, 0xB5, 0x1, 0xF2, 0xBB, 0x2F, 0x94, 0xEB, 0xAD, 0x7F, 0xFE, 0xCC, 0x9, 0xFE, 0x10, 0xC3, 0xBD, 0x0, 0x2, 0x0, 0x49, 0xFE, 0x4B, 0x4, 0x18, 0x5, 0xFB, 0x0, 0xA, 0x0, 0x24, 0x0, 0x0, 0x1, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x35, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x11, 0x14, 0x6, 0x2, 0x57, 0x3F, 0x53, 0x4C, 0x3D, 0x2F, 0x36, 0x3C, 0xFE, 0x88, 0x46, 0x43, 0x6, 0x2E, 0x33, 0xA6, 0x1, 0xFE, 0xE5, 0x1, 0x1B, 0x9A, 0xC7, 0xA7, 0xAC, 0xC4, 0xBF, 0x3E, 0xC8, 0x4, 0x3E, 0x57, 0x40, 0x38, 0x40, 0x53, 0x44, 0xF9, 0x95, 0x10, 0xC1, 0x8, 0xB5, 0x3, 0xC1, 0xB4, 0x3E, 0x95, 0xEA, 0xAF, 0x7F, 0x99, 0xAA, 0xFC, 0x41, 0xBA, 0xC6, 0x0, 0x2, 0x0, 0x4D, 0xFF, 0xEC, 0x4, 0x4D, 0x5, 0xC4, 0x0, 0x14, 0x0, 0x21, 0x0, 0x0, 0x5, 0x27, 0x3E, 0x2, 0x37, 0x6, 0x23, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x11, 0x15, 0x10, 0x2, 0x4, 0x3, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0xA0, 0x3E, 0x63, 0xC1, 0x95, 0x20, 0x7C, 0xA6, 0xCC, 0xFF, 0x0, 0x1, 0x18, 0xE5, 0xD7, 0x1, 0x2C, 0xBE, 0xFE, 0xC9, 0xF, 0x61, 0x84, 0x21, 0x94, 0x6E, 0x7B, 0x87, 0x83, 0x14, 0xC9, 0x17, 0x4C, 0x98, 0x88, 0x60, 0x1, 0x10, 0xE9, 0xCF, 0x1, 0x24, 0xFE, 0xCD, 0xFE, 0xF9, 0x69, 0xFE, 0xE4, 0xFE, 0xAD, 0xA9, 0x2, 0x95, 0x35, 0x27, 0x9E, 0xB0, 0xAB, 0xA6, 0x82, 0x7A, 0xB3, 0x0, 0x2, 0x0, 0x40, 0xFE, 0x4B, 0x4, 0x40, 0x4, 0x4E, 0x0, 0x13, 0x0, 0x20, 0x0, 0x0, 0x1, 0x27, 0x36, 0x24, 0x37, 0x6, 0x23, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x11, 0x15, 0x10, 0x2, 0x4, 0x3, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x94, 0x3F, 0x99, 0x1, 0x1A, 0x32, 0x7C, 0x9F, 0xCE, 0xFE, 0xEF, 0x1, 0x19, 0xE5, 0xD7, 0x1, 0x2B, 0xBD, 0xFE, 0xC9, 0xF, 0x6A, 0x8A, 0x1D, 0x99, 0x74, 0x82, 0x8C, 0x93, 0xFE, 0x4B, 0xC9, 0x27, 0xC0, 0xCC, 0x66, 0x1, 0x10, 0xE9, 0xCF, 0x1, 0x25, 0xFE, 0xCD, 0xFE, 0xF9, 0x6A, 0xFE, 0xF9, 0xFE, 0x94, 0xCF, 0x2, 0xB6, 0x41, 0x2D, 0x95, 0xAA, 0xC0, 0xB7, 0x7A, 0x82, 0xBA, 0x0, 0x2, 0x0, 0x56, 0x1, 0x4C, 0x3, 0x4C, 0x5, 0xBE, 0x0, 0x12, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x37, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x10, 0x0, 0x3, 0x32, 0x37, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x57, 0x38, 0x7D, 0xB2, 0x24, 0x54, 0x65, 0xA1, 0xC2, 0xD0, 0xA9, 0x9F, 0xDE, 0xFE, 0xF6, 0x73, 0x73, 0x45, 0xB6, 0x5B, 0x5B, 0x5B, 0x1, 0x4C, 0x9D, 0x25, 0x8B, 0x78, 0x3A, 0xC9, 0xAC, 0x9A, 0xD8, 0xE3, 0xC2, 0x4E, 0xFE, 0xF1, 0xFE, 0xBA, 0x2, 0x3, 0x37, 0x73, 0xF4, 0x70, 0x5B, 0x60, 0x73, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x5, 0x86, 0x6, 0x0, 0x0, 0xD, 0x0, 0x2A, 0x0, 0x0, 0x25, 0x32, 0x37, 0x26, 0x35, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x14, 0x17, 0x13, 0x33, 0x3, 0x16, 0x37, 0x2, 0x37, 0x9E, 0x44, 0x8, 0x44, 0x94, 0x84, 0x73, 0x72, 0x3, 0x61, 0x54, 0x44, 0x85, 0xBF, 0x96, 0x58, 0x2F, 0x6E, 0xE1, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xF3, 0x1D, 0xA6, 0xBF, 0xC8, 0x26, 0x31, 0xB3, 0x97, 0x36, 0x41, 0x1, 0x45, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xC7, 0xA, 0xFE, 0x6A, 0x1, 0xCB, 0x30, 0x56, 0xC5, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0x2, 0x29, 0xFB, 0xC2, 0x60, 0x3C, 0x1, 0xFA, 0xFD, 0x9C, 0x6, 0x2, 0x0, 0x1, 0x0, 0x8C, 0xFE, 0x60, 0x3, 0x0, 0x6, 0x0, 0x0, 0x11, 0x0, 0x0, 0x5, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x3, 0x11, 0x33, 0x11, 0x14, 0x17, 0x13, 0x33, 0x3, 0x16, 0x37, 0x2, 0x90, 0x54, 0x44, 0x85, 0xBF, 0x96, 0xBC, 0x2, 0xF3, 0x1D, 0xA5, 0xBF, 0xC8, 0x27, 0x31, 0x14, 0xA, 0xFE, 0x6A, 0x1, 0xCB, 0x66, 0x1, 0x2A, 0x4, 0x45, 0xFB, 0xC2, 0x60, 0x3B, 0x1, 0xF9, 0xFD, 0x9C, 0x6, 0x2, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x7, 0xFB, 0x4, 0x4E, 0x0, 0x2C, 0x0, 0x0, 0x5, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x3, 0x11, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x17, 0x13, 0x33, 0x3, 0x16, 0x37, 0x7, 0x8B, 0x54, 0x44, 0x85, 0xC0, 0x97, 0xBA, 0x4, 0x1, 0x68, 0x5A, 0x53, 0x69, 0x14, 0xF3, 0x68, 0x5A, 0x93, 0x3D, 0xF2, 0xE4, 0x7, 0x73, 0xC6, 0xD7, 0x51, 0x77, 0xD6, 0xA5, 0xBD, 0x2, 0x1C, 0xA6, 0xBF, 0xC8, 0x27, 0x31, 0x14, 0xA, 0xFE, 0x6A, 0x1, 0xCC, 0x64, 0x1, 0x23, 0x1, 0xB, 0x77, 0x53, 0x5A, 0x48, 0xFD, 0x1A, 0x2, 0xBC, 0x72, 0x5A, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0xA5, 0xA5, 0xB6, 0xD2, 0xFE, 0xFA, 0x5F, 0x3B, 0x1, 0xFA, 0xFD, 0x9D, 0x6, 0x2, 0x0, 0x1, 0x0, 0x7A, 0xFE, 0x60, 0x5, 0x79, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x0, 0x5, 0x22, 0x27, 0x3, 0x23, 0x13, 0x26, 0x3, 0x11, 0x26, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x17, 0x13, 0x33, 0x3, 0x16, 0x37, 0x5, 0xA, 0x55, 0x44, 0x85, 0xBF, 0x96, 0xB8, 0x5, 0x1, 0x60, 0x5E, 0x91, 0x49, 0xF3, 0xE5, 0x8, 0x77, 0xC2, 0x9C, 0xBC, 0x1, 0x1C, 0xA5, 0xBF, 0xC8, 0x28, 0x31, 0x14, 0xA, 0xFE, 0x6A, 0x1, 0xCC, 0x64, 0x1, 0x21, 0x1, 0xD, 0x70, 0x5A, 0x84, 0xFC, 0xFC, 0x4, 0x3A, 0x7C, 0x90, 0xB3, 0xDA, 0xFE, 0xFF, 0x5F, 0x3A, 0x1, 0xF9, 0xFD, 0x9D, 0x6, 0x2, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x3, 0x83, 0x5, 0xB, 0x0, 0x13, 0x0, 0x0, 0x1, 0x13, 0x6, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x37, 0x37, 0x33, 0x7, 0x16, 0x17, 0x7, 0x26, 0x27, 0x3, 0x1, 0xC7, 0x65, 0x8B, 0x32, 0xF2, 0xE8, 0x7, 0x5A, 0xB4, 0x3E, 0xBE, 0x44, 0x2D, 0x24, 0x1, 0x60, 0x38, 0x63, 0x2, 0x2B, 0x1, 0x34, 0x14, 0x6B, 0xFD, 0x20, 0x4, 0x3A, 0x86, 0x92, 0x8, 0xBD, 0xD2, 0xB, 0xE, 0xE5, 0x19, 0x7, 0xFE, 0xD0, 0x0, 0x2, 0x0, 0x76, 0xFE, 0x60, 0x5, 0x64, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x21, 0x3, 0x23, 0x13, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x17, 0x13, 0x33, 0x1, 0x33, 0x1, 0x69, 0xC1, 0x6B, 0x6C, 0xCF, 0x3, 0xD, 0xFE, 0xC8, 0xB6, 0xC3, 0xD7, 0xFE, 0xFD, 0xF9, 0xF3, 0x1, 0xB3, 0xD8, 0xF3, 0xD0, 0x98, 0xE9, 0xBF, 0xFE, 0xF7, 0xE4, 0x3, 0x76, 0xFE, 0xD3, 0x58, 0x48, 0x8A, 0x3, 0xFC, 0x8A, 0xFE, 0x60, 0x1, 0xE8, 0x1, 0x3E, 0xFE, 0x7A, 0x4, 0x3A, 0xA3, 0x9B, 0xD8, 0x5A, 0xBD, 0x2, 0x13, 0xFD, 0xA1, 0x0, 0x1, 0x0, 0x8, 0xFF, 0xEC, 0x3, 0xBB, 0x5, 0x41, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x37, 0x33, 0x7, 0x33, 0x15, 0x23, 0x3, 0x23, 0x13, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x73, 0x46, 0x5A, 0x79, 0x9F, 0xB3, 0xB3, 0xF2, 0xE5, 0x44, 0xBE, 0x44, 0x6B, 0xA5, 0x71, 0xC0, 0x72, 0xAA, 0x40, 0x31, 0x2A, 0x2B, 0x4, 0x18, 0x89, 0xA7, 0x2, 0x6B, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xD1, 0xD1, 0xB3, 0xFE, 0xA4, 0x1, 0x5C, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0x0, 0x2, 0x0, 0x1B, 0x0, 0x0, 0x4, 0x1F, 0x5, 0xC4, 0x0, 0x1F, 0x0, 0x2A, 0x0, 0x0, 0x33, 0x35, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x27, 0x1, 0x21, 0x1, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x13, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x1B, 0x2, 0x22, 0x74, 0x7B, 0x24, 0x50, 0x15, 0xFE, 0xF8, 0xFE, 0xE6, 0x1, 0x75, 0x75, 0x56, 0x6E, 0xC3, 0xA3, 0xAD, 0xD0, 0x4B, 0x40, 0x76, 0x94, 0xFF, 0xDC, 0x20, 0x57, 0x4B, 0x4D, 0x49, 0x52, 0x51, 0xBC, 0x76, 0x60, 0x23, 0x6E, 0x3C, 0xF, 0xFE, 0x9D, 0x1, 0xE1, 0x54, 0x3E, 0x9A, 0x68, 0x83, 0xC1, 0xC2, 0xAD, 0x55, 0x9C, 0x5B, 0x52, 0xAE, 0x7F, 0xB5, 0xD5, 0x3, 0x7E, 0x7F, 0x5B, 0x45, 0x64, 0x56, 0x34, 0x5F, 0x3D, 0x0, 0x2, 0x0, 0x6A, 0xFF, 0xEC, 0x5, 0x1C, 0x6, 0xA3, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x5, 0x20, 0x0, 0x11, 0x34, 0x12, 0x24, 0x33, 0x32, 0x17, 0x26, 0x27, 0x37, 0x16, 0x4, 0x12, 0x11, 0x15, 0x10, 0x0, 0x25, 0x32, 0x12, 0x35, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x2, 0xC4, 0xFE, 0xF7, 0xFE, 0xAF, 0xA3, 0x1, 0xE, 0xA0, 0x31, 0x36, 0x91, 0xE8, 0x52, 0xDB, 0x1, 0x6C, 0xDA, 0xFE, 0xB7, 0xFE, 0xF1, 0xA5, 0xB5, 0x40, 0x76, 0x92, 0x9A, 0xD4, 0xBF, 0x14, 0x1, 0x66, 0x1, 0x33, 0xDE, 0x1, 0x34, 0xA1, 0x9, 0x75, 0x44, 0xBB, 0x3A, 0xE5, 0xFE, 0x8B, 0xFE, 0xEF, 0x4B, 0xFE, 0xB4, 0xFE, 0x85, 0xD1, 0x1, 0x2, 0xF4, 0x4D, 0xB4, 0x8C, 0x2B, 0xEA, 0xFB, 0xDC, 0xED, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEB, 0x4, 0x62, 0x5, 0x51, 0x0, 0x13, 0x0, 0x20, 0x0, 0x0, 0x5, 0x22, 0x0, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x26, 0x24, 0x27, 0x37, 0x16, 0x4, 0x12, 0x15, 0x15, 0x10, 0x0, 0x27, 0x32, 0x36, 0x35, 0x35, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x2, 0x55, 0xE6, 0xFE, 0xE1, 0x1, 0x13, 0xDC, 0x8D, 0x71, 0x49, 0xFE, 0xDB, 0x94, 0x4C, 0xD2, 0x1, 0x4A, 0xBF, 0xFE, 0xD3, 0xDC, 0x80, 0x96, 0x20, 0x8D, 0x6E, 0x80, 0x91, 0x91, 0x15, 0x1, 0x1D, 0xCC, 0xE4, 0x1, 0x15, 0x51, 0x90, 0x67, 0x1B, 0xC3, 0x2A, 0xA1, 0xFE, 0xE0, 0xEB, 0x57, 0xFE, 0xFD, 0xFE, 0xCA, 0xC3, 0xDF, 0xA5, 0x70, 0x2C, 0x43, 0xB7, 0x86, 0x70, 0xB6, 0x0, 0x1, 0x0, 0x99, 0xFE, 0x60, 0x4, 0x8B, 0x5, 0xC4, 0x0, 0x12, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x20, 0x17, 0x7, 0x26, 0x26, 0x23, 0x22, 0x7, 0x11, 0x21, 0x3, 0xB8, 0xFD, 0xDD, 0xFC, 0xFC, 0xBB, 0xAE, 0x1, 0xA, 0x83, 0x95, 0x30, 0x79, 0x5F, 0xA9, 0xB0, 0x2, 0x23, 0xFE, 0x60, 0x7, 0x50, 0x30, 0x44, 0x92, 0xA1, 0x2F, 0x33, 0x42, 0xFC, 0x19, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x3, 0x37, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x21, 0x3, 0x13, 0xFE, 0x5C, 0xF2, 0xDE, 0xB, 0x6D, 0xB7, 0x62, 0x4B, 0x2, 0x62, 0x59, 0xBF, 0x4C, 0x1, 0xA4, 0xFE, 0x60, 0x5, 0xDA, 0x83, 0x97, 0x1A, 0xE0, 0x20, 0x8E, 0xFD, 0xDD, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0xB6, 0x5, 0xB0, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x24, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x24, 0x24, 0x35, 0x34, 0x37, 0x23, 0x35, 0x21, 0x15, 0x21, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0xB0, 0x8C, 0xFE, 0xFA, 0xA8, 0xFD, 0xB7, 0x86, 0x83, 0x86, 0x73, 0xFE, 0x61, 0xFE, 0xFC, 0x3E, 0x97, 0x4, 0x63, 0xFD, 0x4D, 0x5A, 0x95, 0x9A, 0xFB, 0xEC, 0xFE, 0xE6, 0x14, 0x66, 0xCD, 0x99, 0x8A, 0x7A, 0x6C, 0x58, 0x57, 0x69, 0x81, 0xCA, 0xAE, 0x60, 0x54, 0xCB, 0xCB, 0x3B, 0x78, 0x51, 0x6B, 0x2D, 0x49, 0xD9, 0xAD, 0xB8, 0xD6, 0x0, 0x1, 0x0, 0x30, 0xFF, 0xF3, 0x4, 0x9B, 0x5, 0xB7, 0x0, 0x21, 0x0, 0x0, 0x5, 0x21, 0x35, 0x21, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x4, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x4, 0x16, 0x15, 0x14, 0x7, 0x33, 0x4, 0x9B, 0xFB, 0x9D, 0x2, 0xB3, 0x5A, 0x98, 0x99, 0xF7, 0xED, 0x1, 0x19, 0xED, 0x8C, 0x1, 0x5, 0xA8, 0xFC, 0xB7, 0x86, 0x84, 0x85, 0x72, 0x1, 0xA7, 0xFC, 0x3D, 0x96, 0xD, 0xCB, 0x3B, 0x78, 0x52, 0x6B, 0x2D, 0x48, 0xD8, 0xAE, 0xB9, 0xD5, 0x66, 0xCC, 0x9A, 0x8A, 0x7A, 0x6C, 0x58, 0x56, 0x6A, 0x84, 0xC8, 0xAD, 0x60, 0x54, 0x0, 0x1, 0x0, 0x42, 0xFE, 0x60, 0x3, 0xE6, 0x4, 0x4E, 0x0, 0x20, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x36, 0x35, 0x34, 0x26, 0x24, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x7, 0x33, 0x3, 0xE6, 0xFC, 0x67, 0x2, 0x19, 0x47, 0x7B, 0xFE, 0xE2, 0x67, 0x6B, 0xE0, 0xC1, 0xCB, 0xE6, 0xF2, 0x60, 0x5F, 0xB4, 0x64, 0x81, 0xC3, 0xC5, 0x33, 0x7D, 0xFE, 0x60, 0xC1, 0x43, 0x73, 0x6C, 0x83, 0x91, 0x63, 0x67, 0xB4, 0xAF, 0xCA, 0xC6, 0x92, 0x3F, 0x63, 0xC2, 0x50, 0x83, 0x41, 0x62, 0xE9, 0x99, 0x66, 0x57, 0xFF, 0xFF, 0x0, 0x2E, 0x0, 0x0, 0x3, 0xC0, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x31, 0x4, 0x55, 0x5, 0xB0, 0xC0, 0x0, 0xFF, 0xFF, 0x0, 0x83, 0xFE, 0x3A, 0x1, 0x76, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x51, 0xFF, 0xF7, 0xFE, 0x3A, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x60, 0x4, 0xF3, 0x5, 0xC4, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0xEA, 0xA9, 0xB0, 0xFC, 0xFC, 0xBD, 0xAC, 0xE4, 0x1, 0x15, 0xFC, 0x84, 0x4, 0xF3, 0x42, 0xF9, 0xAF, 0x7, 0x50, 0x30, 0x44, 0xD7, 0xF8, 0xFC, 0xB, 0x3, 0xF5, 0x93, 0x6B, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x4A, 0x92, 0x49, 0xF2, 0xE4, 0x8, 0x77, 0xC3, 0x9C, 0xBC, 0x1, 0xF3, 0x62, 0x3, 0x88, 0x86, 0xFB, 0x5E, 0x5, 0xDA, 0x7D, 0x91, 0xB3, 0xDA, 0xFD, 0x3F, 0x2, 0xBE, 0x70, 0x5A, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x60, 0x3, 0x6C, 0x5, 0xC4, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x2, 0xEA, 0xA9, 0xB0, 0xFC, 0xFC, 0xBB, 0xA7, 0x52, 0x27, 0x38, 0x4, 0xF3, 0x42, 0xF9, 0xAF, 0x7, 0x50, 0x30, 0x44, 0xC, 0xD2, 0xD, 0x0, 0x1, 0x0, 0x7D, 0xFE, 0x60, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x2, 0x51, 0xA9, 0x39, 0xF2, 0xE8, 0x6, 0x56, 0x9E, 0x31, 0x25, 0x2, 0x32, 0x3, 0x64, 0x80, 0xFB, 0x7C, 0x5, 0xDA, 0x7A, 0x8E, 0xD, 0xE5, 0x8, 0x0, 0x1, 0x0, 0x86, 0xFF, 0xEC, 0x5, 0x10, 0x5, 0xB0, 0x0, 0x18, 0x0, 0x0, 0x1, 0x6, 0x0, 0x20, 0x0, 0x11, 0x35, 0x34, 0x12, 0x37, 0x23, 0x35, 0x21, 0x15, 0x21, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x5, 0xB, 0x13, 0xFE, 0xE4, 0xFD, 0xE8, 0xFE, 0xC2, 0x7F, 0x69, 0xE8, 0x4, 0x8A, 0xFE, 0x13, 0xC1, 0xDE, 0x9C, 0xB0, 0xA3, 0x89, 0x13, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x6B, 0x1, 0x31, 0x47, 0xA7, 0x1, 0x16, 0x5A, 0xCA, 0xCA, 0xFE, 0xE1, 0xFE, 0x41, 0xD0, 0xFF, 0x0, 0x97, 0x8B, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x6, 0x4, 0x3A, 0x0, 0x19, 0x0, 0x0, 0x1, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x36, 0x37, 0x23, 0x35, 0x21, 0x15, 0x21, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0x4, 0x5, 0xFF, 0x0, 0xB4, 0xFA, 0xF2, 0x54, 0x53, 0xB6, 0x3, 0xB6, 0xFE, 0x6E, 0x82, 0xA1, 0x62, 0x95, 0x59, 0x7A, 0x4, 0x1, 0x66, 0x9D, 0xDD, 0x1, 0x26, 0xC5, 0x23, 0x6E, 0xC7, 0x4A, 0xC1, 0xC1, 0xDD, 0xA4, 0x1C, 0x70, 0xBD, 0x68, 0x4F, 0xFF, 0xFF, 0x0, 0x49, 0xFE, 0x98, 0x2, 0xF8, 0xFF, 0xB8, 0x0, 0x7, 0x1, 0x77, 0xFF, 0xB4, 0xF9, 0xB7, 0x0, 0x2, 0x0, 0x6B, 0x1, 0x7, 0x1, 0x51, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x6B, 0x3C, 0x36, 0x38, 0x3C, 0x3C, 0x38, 0x36, 0x3C, 0x3C, 0x36, 0x38, 0x3C, 0x3C, 0x38, 0x36, 0x3C, 0x3, 0xE1, 0x2F, 0x3E, 0x3E, 0x2F, 0x2E, 0x3D, 0x3D, 0xFD, 0xBF, 0x2F, 0x3E, 0x3E, 0x2F, 0x2E, 0x3D, 0x3D, 0x0, 0x2, 0x0, 0x57, 0x1, 0xC9, 0x2, 0x7A, 0x3, 0x95, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x2, 0x7A, 0xFD, 0xDD, 0x2, 0x23, 0xFD, 0xDD, 0x3, 0x95, 0xA3, 0xA3, 0xFE, 0xD8, 0xA4, 0xA4, 0x0, 0x1, 0x0, 0x50, 0x3, 0x4D, 0x1, 0xD, 0x6, 0x18, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x3, 0x23, 0x3, 0x35, 0x1, 0xD, 0x1D, 0x83, 0x1D, 0x6, 0x18, 0x91, 0xFD, 0xC6, 0x2, 0x3A, 0x91, 0x0, 0x1, 0x0, 0x50, 0x2, 0x93, 0x1, 0xD, 0x4, 0xEC, 0x0, 0x5, 0x0, 0x0, 0x1, 0x15, 0x3, 0x23, 0x3, 0x35, 0x1, 0xD, 0x1D, 0x83, 0x1D, 0x4, 0xEC, 0x91, 0xFE, 0x38, 0x1, 0xC8, 0x91, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x4, 0xF1, 0xFC, 0xFC, 0x99, 0xFC, 0x2, 0x6B, 0xFC, 0x2, 0x3B, 0x3, 0x75, 0xFD, 0x56, 0x2, 0xAA, 0x0, 0x2, 0x0, 0x28, 0xFF, 0xEC, 0x3, 0xAB, 0x6, 0x0, 0x0, 0x9, 0x0, 0x25, 0x0, 0x0, 0x1, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x33, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x1, 0xD8, 0x34, 0x38, 0x29, 0x38, 0x6B, 0x2, 0x35, 0x4A, 0x63, 0x7F, 0xA7, 0x7D, 0x8A, 0xA9, 0xAD, 0x9A, 0x39, 0x30, 0xF3, 0xE0, 0xE0, 0x45, 0x39, 0x30, 0x32, 0x2, 0xE3, 0x4D, 0x30, 0x3F, 0x32, 0x2C, 0x5E, 0xFD, 0x21, 0x18, 0x89, 0xA7, 0x1, 0x13, 0x8E, 0x80, 0x78, 0x99, 0xA, 0x1, 0xBC, 0xFC, 0xE3, 0xB4, 0xFE, 0xFB, 0x49, 0x2B, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x99, 0x5, 0xDB, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x4, 0x8B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x99, 0x4, 0xBE, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x3, 0x6E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x5, 0x60, 0x5, 0xC4, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x6, 0x0, 0x21, 0x20, 0x0, 0x3, 0x23, 0x35, 0x33, 0x12, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x33, 0x15, 0x23, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x5, 0x5F, 0x13, 0xFE, 0xE5, 0xFE, 0xF4, 0xFE, 0xF8, 0xFE, 0xC3, 0x6, 0xC6, 0xC6, 0x9, 0x1, 0x42, 0x1, 0xC, 0x1, 0x5, 0x1, 0x14, 0x16, 0xFC, 0x10, 0x86, 0x9D, 0xA7, 0xAB, 0x6, 0xD9, 0xD9, 0x4, 0x9C, 0xAC, 0xA3, 0x89, 0x12, 0x1, 0xDA, 0xD4, 0xFE, 0xE6, 0x1, 0x69, 0x1, 0x32, 0xAB, 0x1, 0x2D, 0x1, 0x65, 0xFE, 0xE5, 0xDA, 0x8C, 0x9D, 0xEE, 0xD8, 0xAB, 0xD1, 0xFE, 0x97, 0x8B, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x4, 0x72, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x6, 0x4, 0x23, 0x22, 0x2, 0x27, 0x23, 0x35, 0x33, 0x36, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x33, 0x15, 0x23, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0x72, 0x5, 0xFF, 0x0, 0xB4, 0xEA, 0xF2, 0xF, 0xBA, 0xBC, 0x13, 0xF2, 0xE3, 0xC5, 0xF0, 0x5, 0xE5, 0x5, 0x70, 0x63, 0x7E, 0x6A, 0xA, 0xEF, 0xF1, 0x8, 0x68, 0x85, 0x59, 0x79, 0x5, 0x1, 0x66, 0x9D, 0xDD, 0x1, 0x1A, 0xCA, 0xAB, 0xC4, 0x1, 0xF, 0xE4, 0xB3, 0x57, 0x7D, 0xA4, 0x6C, 0xAB, 0x73, 0xAE, 0x68, 0x4F, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x52, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x27, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x33, 0x11, 0x14, 0x6, 0x2, 0xB8, 0x3C, 0x33, 0x1D, 0x23, 0x44, 0x60, 0x6D, 0x84, 0xFA, 0xF2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0x96, 0x58, 0x7A, 0x5, 0xE4, 0xB6, 0xFE, 0x52, 0xF, 0xA3, 0x7, 0x3F, 0x56, 0x99, 0x3F, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x68, 0x4F, 0xFE, 0x2C, 0x9B, 0xA5, 0x0, 0x1, 0x0, 0x7A, 0xFE, 0x4B, 0x4, 0xB2, 0x6, 0x0, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37, 0x35, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x14, 0x6, 0x3, 0x5F, 0x40, 0x36, 0x23, 0x21, 0x90, 0x2, 0xB9, 0x62, 0x5D, 0x93, 0x48, 0xF2, 0xF2, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xB9, 0xC1, 0xFE, 0x4B, 0x10, 0xB0, 0x8, 0x99, 0x64, 0x2, 0xBB, 0x71, 0x5C, 0x83, 0xFC, 0xFB, 0x6, 0x0, 0xFD, 0xC3, 0x8B, 0xB6, 0xDA, 0xFE, 0xD, 0xFE, 0xD5, 0xA5, 0xB0, 0x0, 0x3, 0x0, 0x28, 0x0, 0x0, 0x5, 0xB9, 0x5, 0xB0, 0x0, 0x7, 0x0, 0xF, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x33, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x2, 0xA8, 0xF8, 0x76, 0x85, 0xF2, 0xFE, 0xFF, 0x1, 0x19, 0x7D, 0x7F, 0xE7, 0xFD, 0xD5, 0xD, 0x67, 0x44, 0x10, 0xBF, 0x1C, 0xD9, 0xAA, 0x1, 0xF2, 0xEE, 0x1, 0xC, 0x6C, 0x67, 0x7D, 0x78, 0xFE, 0xF4, 0xEC, 0x4, 0xE5, 0xFE, 0x67, 0x6B, 0x61, 0xC8, 0x5, 0xFD, 0xAC, 0xFE, 0x39, 0x7C, 0x64, 0xE2, 0x5, 0xFD, 0x6F, 0x2, 0x92, 0x70, 0x5D, 0x4D, 0x4B, 0x4A, 0x7A, 0xBF, 0x9C, 0x2, 0x64, 0xBE, 0xCC, 0x63, 0xA1, 0x2B, 0x21, 0xBB, 0x72, 0xD0, 0xD9, 0x0, 0x2, 0x0, 0x42, 0xFF, 0x7F, 0x5, 0x54, 0x6, 0x0, 0x0, 0xA, 0x0, 0x27, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x5, 0x14, 0x17, 0x23, 0x26, 0x26, 0x35, 0x34, 0x12, 0x37, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x6, 0x6, 0x3, 0x71, 0x87, 0x69, 0x66, 0x8C, 0x7C, 0x62, 0x44, 0xFE, 0x3B, 0x1F, 0xC9, 0xC, 0x18, 0xD6, 0x86, 0xF3, 0x7B, 0xA1, 0xD1, 0xD6, 0xD7, 0xCE, 0xBD, 0x6C, 0xC, 0xDC, 0x55, 0x39, 0xB3, 0xCA, 0xAA, 0x8F, 0xD2, 0x50, 0xFE, 0x8, 0x8D, 0x44, 0x6B, 0x85, 0x1F, 0x90, 0x4A, 0xFA, 0x1, 0x69, 0x7A, 0x2, 0xAB, 0xFE, 0x0, 0x4E, 0xFE, 0xCD, 0xF4, 0x15, 0xEF, 0xFE, 0xC9, 0x89, 0x75, 0x2, 0x50, 0x76, 0xF6, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0x4B, 0x4, 0xE5, 0x5, 0xB0, 0x0, 0x16, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x6, 0xF2, 0x46, 0x3A, 0x23, 0x21, 0x91, 0x1, 0xFE, 0xD3, 0x1, 0x2D, 0x3, 0x9D, 0xFD, 0x60, 0x2, 0x49, 0xFD, 0xB7, 0xC1, 0xFE, 0x4B, 0x10, 0xB0, 0x8, 0x9B, 0x2, 0xCB, 0xCA, 0x2, 0x7D, 0xCB, 0xFE, 0x4E, 0xCA, 0xFD, 0x37, 0xAD, 0xA8, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x15, 0x33, 0x2, 0xA1, 0xDB, 0xF4, 0xA5, 0xA5, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0xDB, 0xDB, 0xDB, 0x2, 0x0, 0xFE, 0x0, 0x2, 0x0, 0xB4, 0xD3, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0xB3, 0xD3, 0x0, 0x2, 0x0, 0x58, 0xFF, 0xEB, 0x4, 0xFC, 0x5, 0xC3, 0x0, 0x19, 0x0, 0x2E, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x17, 0x35, 0x33, 0x11, 0x16, 0x33, 0x37, 0x17, 0x6, 0x25, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x4, 0x15, 0x14, 0x16, 0x4, 0x79, 0x80, 0x3B, 0x78, 0xC8, 0xF0, 0xFE, 0xCA, 0xFC, 0x6B, 0x7A, 0x1, 0x1F, 0xF0, 0x96, 0x70, 0xFC, 0x3, 0x46, 0x1B, 0x18, 0x38, 0xFD, 0xBA, 0x7F, 0x87, 0x98, 0x6E, 0x8E, 0x85, 0x79, 0x8A, 0x44, 0x52, 0xFE, 0xF5, 0x9B, 0x15, 0x62, 0x62, 0xDF, 0xCD, 0xFE, 0x56, 0x31, 0xA6, 0x62, 0xCE, 0xD1, 0x42, 0x2F, 0xFB, 0x84, 0x7B, 0x4, 0xB3, 0x1F, 0xC7, 0x84, 0x5E, 0x2, 0x9A, 0x5C, 0x6E, 0x7C, 0x59, 0x5E, 0x7C, 0xC7, 0x6, 0xE5, 0x61, 0x84, 0x0, 0x2, 0x0, 0x53, 0xFF, 0xEB, 0x4, 0x39, 0x4, 0x4D, 0x0, 0x19, 0x0, 0x2D, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x35, 0x33, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x25, 0x32, 0x36, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x3, 0xBA, 0x73, 0x3C, 0x5F, 0xA4, 0xBF, 0xF6, 0xB9, 0xA6, 0xDD, 0xAC, 0x7B, 0x60, 0xF3, 0x3, 0x46, 0x14, 0x6, 0x19, 0x33, 0xFE, 0x2, 0x59, 0x61, 0x8, 0x74, 0x5C, 0x58, 0x49, 0x9F, 0x35, 0x30, 0xB7, 0x5E, 0x15, 0x50, 0x4F, 0xAC, 0x9A, 0xBA, 0x41, 0x4C, 0x99, 0x9A, 0xA1, 0x2E, 0x1B, 0xFC, 0xFA, 0x7B, 0x5, 0xB4, 0x1F, 0xBB, 0x4F, 0x36, 0x1, 0xDC, 0x3E, 0x4D, 0x57, 0x34, 0x83, 0x3, 0xB0, 0x2, 0x92, 0x3A, 0x5D, 0x0, 0x2, 0x0, 0x58, 0xFF, 0xEC, 0x4, 0xDA, 0x5, 0xC4, 0x0, 0x11, 0x0, 0x26, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x34, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x25, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x23, 0x4, 0x15, 0x14, 0x16, 0x2, 0x77, 0xEE, 0xFE, 0xCF, 0xF9, 0x6A, 0x79, 0x1, 0x1E, 0xF1, 0x1, 0xD, 0x1, 0x50, 0xFE, 0xB0, 0xFE, 0xEA, 0xAD, 0xBB, 0xBC, 0xA7, 0x8E, 0x80, 0x78, 0x8A, 0x3A, 0x47, 0xFE, 0xF5, 0x96, 0x14, 0xDF, 0xCD, 0xFC, 0x57, 0x30, 0xA5, 0x64, 0xCC, 0xD4, 0xFE, 0x84, 0xFE, 0xB4, 0x49, 0xFE, 0xB4, 0xFE, 0x85, 0xCB, 0x1, 0x7, 0xF5, 0x4B, 0xF5, 0x1, 0x5, 0x7F, 0x57, 0x61, 0x78, 0xC6, 0x6, 0xE5, 0x61, 0x80, 0x0, 0x2, 0x0, 0x4F, 0xFF, 0xEC, 0x3, 0xEF, 0x4, 0x4E, 0x0, 0x13, 0x0, 0x24, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x33, 0x15, 0x23, 0x6, 0x15, 0x14, 0x16, 0x17, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x1, 0xF9, 0x87, 0x7D, 0x7D, 0x89, 0x52, 0x50, 0x9F, 0x35, 0x30, 0xB7, 0x59, 0x5E, 0xBE, 0xEC, 0xB9, 0xA6, 0xE1, 0xB4, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xAF, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0x50, 0x34, 0x83, 0x3, 0xB0, 0x2, 0x8E, 0x3D, 0x55, 0xC3, 0xAC, 0x9A, 0xBA, 0x41, 0x4C, 0x99, 0x9A, 0xA2, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x0, 0x1, 0x0, 0x44, 0xFF, 0xEC, 0x4, 0x86, 0x5, 0xB0, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x1, 0x35, 0x21, 0x1, 0x33, 0x17, 0x23, 0x6, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x2, 0x2, 0x8C, 0xFA, 0xFE, 0xEF, 0x8E, 0x7E, 0xFE, 0xB7, 0x1, 0xE, 0x1, 0x28, 0x6C, 0x2, 0x61, 0x84, 0x86, 0x81, 0x8E, 0x90, 0x6E, 0xFC, 0xFB, 0x14, 0xEE, 0xD6, 0x8F, 0xC7, 0x34, 0x2, 0x69, 0xD, 0xFD, 0xC2, 0xCC, 0x1, 0x87, 0x65, 0x6F, 0x8E, 0xB3, 0x8B, 0x3, 0xB6, 0xFC, 0x4A, 0xEB, 0xFE, 0xDD, 0x0, 0x1, 0x0, 0x27, 0xFF, 0xEC, 0x3, 0xE0, 0x4, 0x3A, 0x0, 0x19, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x37, 0x1, 0x33, 0x13, 0x33, 0x15, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x6, 0x2, 0xD, 0xCE, 0xE8, 0xD0, 0xFF, 0x0, 0xFD, 0xEB, 0x68, 0x77, 0x5E, 0x57, 0x5C, 0x61, 0x77, 0x6F, 0xF2, 0xED, 0x14, 0xC5, 0x95, 0xD4, 0x57, 0x1, 0xC9, 0xFE, 0x5E, 0xB4, 0x61, 0x38, 0x39, 0x65, 0x8C, 0x5B, 0x2, 0xA6, 0xFD, 0x5A, 0xB6, 0xF2, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x6, 0x5, 0x5, 0xC4, 0x0, 0x25, 0x0, 0x0, 0x25, 0x6, 0x6, 0x23, 0x22, 0x0, 0x3, 0x7, 0x35, 0x37, 0x35, 0x12, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x2, 0x7, 0x15, 0x25, 0x15, 0x5, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x21, 0x35, 0x21, 0x5, 0x40, 0x2E, 0xF5, 0xF5, 0xF3, 0xFE, 0xB5, 0x26, 0xB0, 0xA6, 0x4, 0x1, 0x3E, 0x1, 0x16, 0x1, 0xB, 0x1, 0x9, 0x1A, 0xF8, 0x13, 0x89, 0x95, 0xB1, 0xAC, 0x1, 0x4, 0x4C, 0xFB, 0xB8, 0x12, 0xC3, 0x9F, 0x83, 0x76, 0x1B, 0xFE, 0xD4, 0x2, 0x27, 0xBE, 0x3D, 0x95, 0x1, 0x20, 0x1, 0xA, 0x28, 0x90, 0x26, 0x73, 0x1, 0x46, 0x1, 0x67, 0xFE, 0xFA, 0xCB, 0x71, 0x95, 0xFE, 0xFF, 0xEA, 0x30, 0xFC, 0x90, 0xFB, 0xC6, 0xD3, 0x3C, 0x1C, 0x80, 0xBF, 0x0, 0x3, 0x0, 0x14, 0xFE, 0x56, 0x5, 0x2D, 0x4, 0x4E, 0x0, 0x7, 0x0, 0xE, 0x0, 0x31, 0x0, 0x0, 0x1, 0x25, 0x35, 0x26, 0x23, 0x22, 0x6, 0x15, 0x13, 0x32, 0x37, 0x35, 0x5, 0x16, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x6, 0x23, 0x22, 0x26, 0x27, 0x7, 0x35, 0x37, 0x26, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x37, 0x15, 0x7, 0x11, 0x14, 0x4, 0x1, 0xA3, 0x1, 0xD5, 0x43, 0x95, 0x84, 0x79, 0xFB, 0x95, 0x45, 0xFE, 0x3F, 0x19, 0x71, 0x3F, 0x59, 0xF3, 0x48, 0x73, 0x6F, 0xA4, 0x79, 0x8D, 0x6A, 0xAE, 0x95, 0xD0, 0x2D, 0xBA, 0xA0, 0x4, 0xE9, 0xC9, 0xBA, 0x69, 0xA, 0xDC, 0xC2, 0xC2, 0xFE, 0xEF, 0x2, 0x0, 0x7C, 0x90, 0x7C, 0xD0, 0x92, 0xFE, 0x8D, 0x7F, 0xB9, 0x77, 0x56, 0x6B, 0xFD, 0xA3, 0x51, 0x62, 0x91, 0x85, 0x85, 0x7F, 0x49, 0x76, 0xB5, 0x95, 0x31, 0x91, 0x2A, 0x28, 0x3E, 0xF7, 0x1, 0x31, 0x7F, 0x6B, 0xFE, 0x83, 0x33, 0x91, 0x33, 0xFD, 0xF2, 0xDB, 0xED, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x5, 0x4B, 0x5, 0xB0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x0, 0x1, 0x25, 0x27, 0x7, 0x1, 0x3, 0x5, 0x15, 0x23, 0x35, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x13, 0x25, 0x15, 0x5, 0x1, 0x1, 0xC4, 0x1, 0x15, 0x6F, 0xA6, 0x2, 0x5B, 0xF2, 0xFE, 0x97, 0xFC, 0xB4, 0xB4, 0xFC, 0x8D, 0x1, 0xA9, 0x1, 0x33, 0xFD, 0xE3, 0xC2, 0x1, 0x66, 0xFE, 0xEF, 0x1, 0x24, 0x1, 0x8B, 0x4A, 0xA1, 0xB0, 0xFE, 0x3A, 0x1, 0x5D, 0x61, 0xFC, 0xB9, 0x30, 0x8F, 0x30, 0x4, 0x68, 0xFD, 0x54, 0xAE, 0x1, 0xFE, 0xFD, 0x7C, 0xFE, 0xEC, 0x5F, 0x8F, 0x49, 0xFE, 0x61, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x4, 0x84, 0x6, 0x0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x0, 0x1, 0x37, 0x27, 0x7, 0x1, 0x27, 0x5, 0x15, 0x23, 0x35, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x17, 0x25, 0x15, 0x7, 0x13, 0x1, 0xBD, 0xAC, 0x3F, 0x6D, 0x1, 0xAD, 0xAD, 0xFF, 0x0, 0xF3, 0xB6, 0xB6, 0xF3, 0x4D, 0x1, 0x2A, 0x1, 0x25, 0xFE, 0x6D, 0x8B, 0x1, 0x27, 0xD1, 0xDD, 0x1, 0x48, 0x2D, 0x5D, 0x70, 0xFE, 0x9E, 0xFB, 0x44, 0xB7, 0x76, 0x30, 0x91, 0x30, 0x4, 0xF9, 0xFC, 0x8A, 0x60, 0x1, 0x50, 0xFE, 0x3E, 0xC5, 0x4E, 0x90, 0x38, 0xFE, 0xC7, 0x0, 0x3, 0x0, 0x14, 0x0, 0x0, 0x6, 0xD, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x5, 0x0, 0x19, 0x0, 0x0, 0x1, 0x11, 0x37, 0x1, 0x11, 0x7, 0x13, 0x1, 0x5, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x1, 0x37, 0x11, 0x33, 0x11, 0x37, 0x15, 0x7, 0x11, 0x1, 0xC6, 0xC4, 0x1, 0xC7, 0x96, 0x94, 0xFE, 0x89, 0xFE, 0xEE, 0xFD, 0xB5, 0xB5, 0xFD, 0x1, 0xA8, 0xE3, 0xFB, 0xC1, 0xC1, 0x4, 0x9, 0xFE, 0x93, 0x35, 0xFE, 0xD3, 0x1, 0x16, 0x28, 0xFD, 0x6E, 0x2, 0x55, 0x49, 0xFD, 0xF4, 0x1, 0xC8, 0x30, 0x90, 0x30, 0x3, 0x58, 0xFD, 0x5D, 0x3D, 0x2, 0x66, 0xFD, 0xDD, 0x34, 0x90, 0x34, 0xFD, 0x3, 0x0, 0x2, 0x0, 0x14, 0x0, 0x0, 0x5, 0x2D, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x22, 0x7, 0x15, 0x25, 0x35, 0x34, 0x26, 0x13, 0x11, 0x5, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x37, 0x15, 0x7, 0x11, 0x2, 0xA5, 0x91, 0x49, 0x1, 0x99, 0x61, 0x61, 0xFE, 0x67, 0xF3, 0xC4, 0xC4, 0xE5, 0x8, 0x77, 0xC3, 0x9A, 0xBC, 0x2, 0xD6, 0xD6, 0x3, 0x88, 0x84, 0xED, 0x6D, 0x3A, 0x70, 0x5A, 0xFC, 0x78, 0x1, 0xF6, 0x6C, 0xFE, 0x76, 0x1, 0x49, 0x34, 0x8E, 0x34, 0x2, 0x63, 0x7D, 0x91, 0xB2, 0xD8, 0x39, 0x8D, 0x39, 0xFD, 0xC9, 0x0, 0x3, 0x0, 0x14, 0x0, 0x0, 0x5, 0x73, 0x5, 0xB0, 0x0, 0x4, 0x0, 0xA, 0x0, 0x20, 0x0, 0x0, 0x1, 0x15, 0x25, 0x26, 0x27, 0x5, 0x5, 0x15, 0x21, 0x32, 0x36, 0x13, 0x1, 0x21, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x21, 0x20, 0x17, 0x37, 0x15, 0x7, 0x17, 0x14, 0x6, 0x7, 0x1, 0x15, 0x1, 0xC8, 0x1, 0xF8, 0x3D, 0xB2, 0x1, 0xB, 0xFD, 0xEC, 0x1, 0x3, 0x89, 0x88, 0x2A, 0xFE, 0xDC, 0xFE, 0xE6, 0xFD, 0xB7, 0xB7, 0x2, 0x0, 0x1, 0x84, 0x68, 0xBC, 0x9D, 0x2, 0x8E, 0x7D, 0x1, 0x47, 0x4, 0xE5, 0xFC, 0x86, 0x74, 0x2, 0xFA, 0x8E, 0x61, 0x88, 0xFC, 0x7C, 0x2, 0x31, 0xFD, 0xCF, 0x3, 0x19, 0x31, 0x8C, 0x31, 0x2, 0xB, 0xFE, 0x32, 0x8C, 0x2A, 0x35, 0x92, 0xC6, 0x34, 0xFD, 0xA0, 0xD, 0x0, 0x1, 0x0, 0x15, 0x0, 0x0, 0x3, 0x13, 0x4, 0x4E, 0x0, 0x15, 0x0, 0x0, 0x1, 0x5, 0x11, 0x23, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x25, 0x3, 0x7, 0xFE, 0xC7, 0xF3, 0xC6, 0xC6, 0xE8, 0x7, 0x57, 0x9C, 0x31, 0x25, 0x1, 0x33, 0x30, 0xA7, 0x3A, 0x1, 0x39, 0x1, 0xDE, 0x53, 0xFE, 0x75, 0x1, 0x4A, 0x35, 0x8C, 0x35, 0x2, 0x64, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x7F, 0xCE, 0x53, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x5, 0x7F, 0x5, 0xC4, 0x0, 0x2D, 0x0, 0x0, 0x5, 0x22, 0x24, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x27, 0x5, 0x35, 0x25, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x17, 0x25, 0x15, 0x5, 0x4, 0x15, 0x14, 0x4, 0x2, 0xE0, 0x8B, 0xFE, 0xFA, 0xA8, 0xFC, 0xB8, 0x85, 0x84, 0x85, 0x7A, 0xC0, 0x48, 0xFD, 0xAD, 0x1, 0x91, 0x61, 0x70, 0x1, 0x1D, 0xE7, 0xF7, 0x1, 0x16, 0xFC, 0x86, 0x8E, 0x85, 0x7F, 0x99, 0x9C, 0x5, 0x2, 0x74, 0xFE, 0x63, 0x1, 0x4, 0xFE, 0xE7, 0x14, 0x66, 0xCD, 0x99, 0x8A, 0x7A, 0x6C, 0x58, 0x5A, 0x6A, 0x3A, 0x18, 0xA0, 0x8C, 0x6C, 0x3A, 0xA0, 0x71, 0xB0, 0xE3, 0xFE, 0xF9, 0xB6, 0x6B, 0x89, 0x73, 0x56, 0x52, 0x6C, 0x2D, 0x1, 0xA8, 0x8C, 0x6F, 0x82, 0xF7, 0xB8, 0xD6, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x4, 0xBF, 0x4, 0x4E, 0x0, 0x2A, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x27, 0x5, 0x35, 0x25, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x25, 0x15, 0x5, 0x16, 0x15, 0x14, 0x6, 0x2, 0x6D, 0xDE, 0xEA, 0xEB, 0x5, 0x8B, 0x50, 0x60, 0x64, 0x55, 0x96, 0x24, 0xFD, 0xEF, 0x1, 0x3D, 0x89, 0xE1, 0xC1, 0xCB, 0xE6, 0xF2, 0x60, 0x5F, 0x5C, 0x58, 0x55, 0x9B, 0x2, 0x19, 0xFE, 0xCA, 0x9A, 0xEE, 0x14, 0xE4, 0x86, 0x64, 0x50, 0x4A, 0x3A, 0x35, 0x4D, 0x1F, 0x8, 0x8C, 0x8A, 0x54, 0x54, 0x91, 0x85, 0xC3, 0xC6, 0x92, 0x3F, 0x63, 0x52, 0x36, 0x33, 0x40, 0x22, 0x8E, 0x8A, 0x52, 0x55, 0xA4, 0x90, 0xB8, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x5, 0xF4, 0x5, 0xB0, 0x0, 0x17, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x37, 0x21, 0x11, 0x21, 0x11, 0x33, 0x11, 0x4, 0xF8, 0xFD, 0x75, 0xFC, 0x17, 0x55, 0x40, 0x7, 0xA2, 0xF, 0x94, 0xA7, 0x1, 0x17, 0x2, 0x8B, 0xFC, 0x2, 0x88, 0xFD, 0x78, 0x4, 0xF4, 0x5C, 0x41, 0x1B, 0x25, 0x33, 0x4F, 0x79, 0x9D, 0x1, 0xFD, 0xA2, 0x2, 0x5E, 0xFA, 0x50, 0xFF, 0xFF, 0x0, 0x49, 0xFF, 0xEC, 0x4, 0x7F, 0x5, 0xC4, 0x0, 0x6, 0x2, 0x71, 0x0, 0x0, 0x0, 0x2, 0x0, 0x66, 0xFE, 0x4C, 0x4, 0xF6, 0x5, 0xC4, 0x0, 0xC, 0x0, 0x26, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x12, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x20, 0x37, 0x35, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x4, 0x2, 0xB1, 0x68, 0xAB, 0x36, 0x6F, 0xCE, 0xAB, 0xAC, 0x1, 0x9B, 0xC9, 0x81, 0xF6, 0x5E, 0x79, 0xA4, 0xB6, 0x1, 0x2D, 0x6, 0x88, 0xC1, 0xFE, 0xF3, 0xFE, 0xC2, 0x1, 0x44, 0x1, 0x13, 0xC8, 0x8D, 0xC, 0xD8, 0xFE, 0xDC, 0xB8, 0x4C, 0x39, 0x3, 0x4A, 0x71, 0xFA, 0xE4, 0x7D, 0xDA, 0xFE, 0xF5, 0xFD, 0x94, 0x55, 0x62, 0x98, 0x86, 0xFA, 0x3A, 0x5D, 0x1, 0x76, 0x1, 0x3B, 0x76, 0x1, 0x3A, 0x1, 0x77, 0x68, 0x54, 0xFA, 0x6E, 0xDD, 0xF5, 0x0, 0x2, 0x0, 0x28, 0x0, 0x0, 0x5, 0x65, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x14, 0x33, 0x13, 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x21, 0x15, 0x1, 0xD3, 0x67, 0x26, 0x3A, 0x68, 0x5F, 0x78, 0x8A, 0xA9, 0xAD, 0x9A, 0x36, 0x2E, 0xFD, 0xEE, 0xEE, 0x2, 0x95, 0x2, 0xE7, 0x49, 0x6C, 0x2F, 0x2C, 0x5A, 0xFD, 0x19, 0x2, 0x2B, 0x92, 0x80, 0x78, 0x99, 0x9, 0x1, 0x6B, 0xFD, 0x37, 0xBC, 0xFE, 0x9F, 0xCA, 0x0, 0x1, 0xFF, 0xF3, 0x0, 0x0, 0x4, 0x77, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x21, 0x1, 0x1, 0x21, 0x1, 0x37, 0x11, 0x33, 0x11, 0x23, 0x11, 0x7, 0x1, 0x44, 0xFE, 0xCE, 0x2, 0x1C, 0xFD, 0xC5, 0x1, 0x2C, 0x1, 0xB5, 0xA6, 0xFD, 0xFD, 0x8C, 0x2, 0x84, 0x3, 0x2C, 0xFD, 0x8A, 0xAF, 0x1, 0xC7, 0xFA, 0x50, 0x2, 0xAA, 0xAC, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x4, 0xB0, 0xFB, 0x7D, 0x1, 0xC2, 0xFC, 0x1, 0xC5, 0xCB, 0x4, 0xE5, 0xFB, 0x1B, 0x0, 0x1, 0x0, 0x3C, 0x2, 0x5F, 0x5, 0xEC, 0x3, 0x51, 0x0, 0x3, 0x0, 0x0, 0x13, 0x21, 0x15, 0x21, 0x3C, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x51, 0xF2, 0x0, 0x2, 0x0, 0x35, 0x2, 0x8C, 0x4, 0xC4, 0x6, 0xC1, 0x0, 0x3, 0x0, 0x17, 0x0, 0x0, 0x1, 0x35, 0x21, 0x15, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x3, 0x75, 0xFE, 0xF, 0x1, 0xF1, 0xFE, 0xF, 0xC4, 0x8B, 0x8B, 0xC4, 0x1, 0xF1, 0xC4, 0x8B, 0x8B, 0x4, 0xFB, 0x68, 0x68, 0xFD, 0x91, 0x1, 0xC9, 0xFE, 0x37, 0x2, 0xD7, 0xA7, 0xB7, 0xB7, 0xB7, 0xB7, 0xA7, 0xFD, 0x29, 0xFF, 0xFF, 0x0, 0x3C, 0x2, 0x7C, 0x5, 0x47, 0x5, 0xBC, 0x0, 0x26, 0x3, 0x81, 0x0, 0x0, 0x0, 0x7, 0x3, 0x78, 0x2, 0x31, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x16, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x25, 0x23, 0x15, 0x21, 0x35, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x6, 0x16, 0xB4, 0xFB, 0xAB, 0x90, 0xF3, 0x1, 0x5F, 0xF4, 0x1, 0x5F, 0xF4, 0x1, 0x1, 0x1, 0x4, 0x39, 0xFC, 0x88, 0x3, 0x78, 0xFC, 0x88, 0x3, 0x78, 0x0, 0x1, 0x0, 0x34, 0x0, 0x0, 0x3, 0xD1, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x2, 0xD4, 0xFD, 0xB6, 0x2, 0x4A, 0xFD, 0x60, 0x3, 0x9D, 0x2, 0x69, 0xCA, 0x1, 0xB2, 0xCB, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x4A, 0x0, 0x0, 0x4, 0x89, 0x5, 0xB0, 0x0, 0xA, 0x0, 0x13, 0x0, 0x0, 0x21, 0x23, 0x11, 0x21, 0x26, 0x24, 0x35, 0x34, 0x0, 0x33, 0x21, 0x3, 0x11, 0x21, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x4, 0x89, 0xFC, 0xFE, 0xCA, 0xFA, 0xFE, 0xED, 0x1, 0x15, 0xFD, 0x2, 0x2D, 0xFC, 0xFE, 0xCF, 0x93, 0x81, 0x81, 0x93, 0x2, 0x1D, 0x1, 0xF1, 0xD2, 0xC9, 0x1, 0x6, 0xFD, 0x38, 0x1, 0xFD, 0xA0, 0x66, 0x6D, 0x8A, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x3, 0x1, 0x33, 0x1, 0x3, 0x11, 0x33, 0x11, 0x21, 0x1, 0x1, 0x95, 0xFC, 0x19, 0x1, 0xAD, 0xB5, 0x1, 0xAD, 0x18, 0xFC, 0xFE, 0xB8, 0xFE, 0x5D, 0xFE, 0x5C, 0x5, 0xB0, 0xFE, 0x20, 0xFD, 0x7F, 0x4, 0x61, 0xFB, 0xA0, 0x2, 0x80, 0x1, 0xE0, 0xFA, 0x50, 0x4, 0x5C, 0xFB, 0xA4, 0x0, 0x1, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x6, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0xA0, 0xFC, 0x6, 0x0, 0xFA, 0x0, 0x6, 0x0, 0x0, 0x1, 0x0, 0x75, 0x0, 0x0, 0x9, 0x11, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x21, 0x1, 0x3, 0x23, 0x13, 0x33, 0x1, 0x13, 0x33, 0x1, 0x13, 0x33, 0x3, 0x23, 0x35, 0x7, 0x1, 0x3, 0x23, 0x35, 0x4, 0x1, 0xFD, 0xD6, 0x66, 0xFC, 0x8C, 0xFC, 0x2, 0x2C, 0x66, 0xF8, 0x2, 0x2C, 0x66, 0xF8, 0x8C, 0xF8, 0x2, 0xFD, 0xD6, 0x66, 0xF8, 0x4, 0x27, 0xFB, 0xD9, 0x5, 0xB0, 0xFB, 0xD9, 0x4, 0x27, 0xFB, 0xD9, 0x4, 0x27, 0xFA, 0x50, 0x2, 0x2, 0x4, 0x25, 0xFB, 0xDB, 0x2, 0x0, 0x1, 0x0, 0x18, 0x1, 0xE3, 0x4, 0x49, 0x3, 0x4A, 0x0, 0xC, 0x0, 0x0, 0x1, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x24, 0x20, 0x4, 0x4, 0x49, 0xB3, 0x24, 0x9D, 0xA4, 0xAE, 0x91, 0x26, 0xB4, 0x38, 0x1, 0x4, 0x1, 0xBA, 0x1, 0x4, 0x1, 0xE3, 0x3C, 0x8D, 0x8D, 0x3C, 0x89, 0xDE, 0xDE, 0x0, 0x3, 0x0, 0x1B, 0xFF, 0xEB, 0x5, 0x2E, 0x4, 0x4E, 0x0, 0x6, 0x0, 0xD, 0x0, 0x29, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x3, 0x32, 0x37, 0x35, 0x21, 0x16, 0x16, 0x5, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x2, 0x27, 0x23, 0x35, 0x33, 0x36, 0x12, 0x20, 0x17, 0x37, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0xA9, 0x6B, 0x6F, 0x11, 0x1, 0xBB, 0x45, 0x8D, 0x8D, 0x45, 0xFE, 0x3F, 0x6, 0x6F, 0x2, 0xBB, 0x33, 0x4C, 0xA3, 0x34, 0x68, 0xC0, 0xC3, 0xD9, 0x9, 0xAA, 0xAF, 0x17, 0xD5, 0x1, 0x6C, 0x66, 0x13, 0xD1, 0xC2, 0xC2, 0x49, 0xE, 0xC, 0x3, 0x8B, 0x99, 0x73, 0x80, 0x8C, 0xFD, 0x23, 0x89, 0x9D, 0x7E, 0xA8, 0xA4, 0x1F, 0xA3, 0xA3, 0x1, 0x11, 0xD8, 0xAB, 0xCF, 0x1, 0x0, 0x97, 0x83, 0xFE, 0x45, 0xAB, 0x90, 0x8B, 0x4, 0x0, 0x3, 0x0, 0x5B, 0xFF, 0xEC, 0x6, 0x8E, 0x4, 0x4E, 0x0, 0x28, 0x0, 0x31, 0x0, 0x39, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x15, 0x14, 0x2, 0x24, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x21, 0x32, 0x36, 0x35, 0x35, 0x21, 0x16, 0x16, 0x4, 0xBF, 0xE6, 0x89, 0x2D, 0xC6, 0x92, 0xA2, 0xCE, 0xFF, 0xE7, 0x9F, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xE0, 0x6F, 0x89, 0xD3, 0xA2, 0xCB, 0x34, 0x83, 0x66, 0xA9, 0x76, 0x8F, 0xE, 0x2, 0xB7, 0xE3, 0xFC, 0xA2, 0x79, 0x1A, 0x96, 0xFD, 0x58, 0x3, 0x1A, 0x79, 0x65, 0xFE, 0x39, 0xC, 0x79, 0x14, 0xB8, 0x49, 0x6F, 0xBA, 0x8A, 0xA9, 0xA4, 0x1, 0x5E, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0x81, 0x81, 0x7F, 0x4D, 0x7D, 0x86, 0x99, 0x74, 0x7C, 0xEA, 0xFE, 0xD4, 0xC3, 0x50, 0x31, 0xA0, 0x5, 0x83, 0x41, 0x58, 0x98, 0x5E, 0x2B, 0x89, 0x98, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x3, 0x50, 0x4, 0x4E, 0x0, 0x7, 0x0, 0xA, 0x0, 0x0, 0x5, 0x25, 0x11, 0x25, 0x1, 0x1, 0x15, 0x5, 0x1, 0x11, 0x37, 0x2, 0xA7, 0xFD, 0xD6, 0x1, 0x97, 0x1, 0x3C, 0xFE, 0x1F, 0x1, 0x83, 0xFE, 0x7D, 0xA1, 0x14, 0x55, 0x3, 0x2C, 0xE1, 0xFE, 0x3A, 0xFE, 0xF1, 0x7E, 0x44, 0x2, 0xE2, 0xFE, 0xBD, 0x5E, 0x0, 0x2, 0x0, 0x1B, 0xFF, 0xEC, 0x4, 0xFD, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x22, 0x0, 0x0, 0x1, 0x22, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x24, 0x27, 0x23, 0x35, 0x33, 0x35, 0x36, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x2, 0x9E, 0xB6, 0x36, 0x1, 0xC0, 0x5, 0x60, 0x1, 0x44, 0x34, 0xCC, 0xA2, 0xC6, 0xFE, 0xFD, 0x2A, 0xA1, 0x8F, 0x4, 0x1, 0x1F, 0xD0, 0xE8, 0xDD, 0xFD, 0x3B, 0x3, 0x60, 0xFC, 0xBB, 0x1F, 0x86, 0x61, 0xA9, 0x66, 0x3, 0x8B, 0xC2, 0xC, 0x44, 0x72, 0xFD, 0x2D, 0x4C, 0x80, 0xD0, 0xA5, 0x99, 0x33, 0xFB, 0x1, 0x26, 0xFE, 0xFB, 0xCB, 0x4F, 0x35, 0x99, 0x50, 0x62, 0x86, 0x0, 0x2, 0x0, 0x2F, 0xFF, 0xEC, 0x5, 0x3C, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x26, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x0, 0x27, 0x6, 0x6, 0x15, 0x14, 0x17, 0x23, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x3, 0x6D, 0x64, 0x7A, 0x12, 0x1, 0xCF, 0x5, 0x61, 0x1, 0x45, 0x34, 0xCC, 0xA2, 0xE6, 0xFE, 0xEE, 0xC, 0x57, 0x38, 0x10, 0xBC, 0x1B, 0xCA, 0x91, 0x1C, 0x1, 0xE, 0xBA, 0xEC, 0xE2, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA9, 0x66, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFD, 0x2D, 0x4C, 0x80, 0x1, 0x14, 0xD1, 0x5, 0x67, 0x58, 0x61, 0x37, 0x47, 0x7D, 0xB2, 0x95, 0x3, 0xD5, 0xF6, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x2, 0xD7, 0x6, 0x15, 0x0, 0x6, 0x0, 0x4B, 0x0, 0x0, 0x0, 0x3, 0x0, 0x50, 0xFE, 0x4B, 0x4, 0xDC, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x23, 0x0, 0x2A, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x22, 0x14, 0x2, 0x39, 0x92, 0x45, 0x46, 0x8F, 0x83, 0x76, 0x74, 0xF1, 0x99, 0xAE, 0x2F, 0x98, 0xA7, 0xE1, 0xCD, 0xB4, 0x6B, 0xD, 0xD9, 0xD9, 0xD9, 0x96, 0xC8, 0x6B, 0x61, 0x6B, 0xAF, 0x7C, 0x1, 0xEA, 0x76, 0xD2, 0x92, 0x15, 0x91, 0xD2, 0xFD, 0x9C, 0x99, 0x78, 0x5D, 0x41, 0x29, 0x1, 0x25, 0xCA, 0x15, 0xF7, 0x1, 0x30, 0x7E, 0x6A, 0xFC, 0x30, 0xB4, 0x13, 0x87, 0xD1, 0xAF, 0x77, 0x45, 0xBC, 0x0, 0x1, 0x0, 0x35, 0x0, 0x0, 0x3, 0x88, 0x6, 0x0, 0x0, 0x25, 0x0, 0x0, 0x1, 0x22, 0x27, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x15, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x35, 0x34, 0x26, 0x27, 0x35, 0x32, 0x16, 0x15, 0x14, 0x6, 0x2, 0x99, 0x20, 0x1D, 0xF3, 0x1F, 0x2F, 0x4C, 0x27, 0x3C, 0x60, 0x9D, 0x80, 0x72, 0x23, 0x1F, 0xF3, 0x1E, 0x27, 0x4E, 0x32, 0x23, 0x68, 0x86, 0x81, 0x1, 0xC7, 0xA, 0xFE, 0x2F, 0x3, 0x5D, 0x3E, 0x79, 0x43, 0x5C, 0x9, 0xB7, 0xAC, 0xAD, 0x9C, 0xA7, 0xA, 0x1, 0xAB, 0xFC, 0xC5, 0x3B, 0x76, 0x46, 0x3F, 0x1, 0xC4, 0xB3, 0x9D, 0x87, 0xAC, 0x0, 0x1, 0x0, 0x24, 0x0, 0x0, 0x3, 0x3D, 0x6, 0x0, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x27, 0x11, 0x23, 0x11, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x35, 0x27, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x11, 0x33, 0x11, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x23, 0x27, 0x15, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x2, 0x4C, 0x1C, 0xF3, 0x15, 0x28, 0x38, 0xA4, 0x89, 0x67, 0x29, 0x15, 0x28, 0x38, 0xA4, 0x89, 0x67, 0x29, 0xF3, 0x8, 0x29, 0x39, 0xA3, 0x8A, 0x67, 0x1C, 0x8, 0x29, 0x39, 0xA3, 0x8A, 0x1, 0xCB, 0x1, 0xFE, 0x34, 0x2, 0x26, 0x1, 0x3B, 0x2F, 0x8, 0x72, 0x9C, 0x4, 0x99, 0x1, 0x3B, 0x2F, 0x8, 0x72, 0x9C, 0x4, 0x1, 0xEF, 0xFD, 0xB9, 0x3B, 0x2F, 0xC, 0x73, 0x97, 0x1, 0x97, 0x3B, 0x2F, 0xC, 0x73, 0x97, 0x0, 0x3, 0x0, 0x35, 0x0, 0x0, 0x2, 0x6B, 0x6, 0x0, 0x0, 0x11, 0x0, 0x16, 0x0, 0x1A, 0x0, 0x0, 0x21, 0x23, 0x11, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x11, 0x33, 0x11, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x25, 0x14, 0x17, 0x35, 0x6, 0x4, 0x27, 0x15, 0x36, 0x1, 0xCC, 0xF3, 0x48, 0x5C, 0x5C, 0x48, 0xF3, 0x47, 0x58, 0x58, 0x47, 0xFE, 0xEE, 0x1F, 0x1F, 0x1, 0x2C, 0x1A, 0x1A, 0x1, 0xE0, 0x1E, 0x80, 0x57, 0x56, 0x82, 0x20, 0x2, 0x33, 0xFD, 0xCC, 0x1F, 0x82, 0x56, 0x57, 0x7F, 0x1E, 0xF4, 0x32, 0x28, 0xB7, 0x29, 0x2, 0x27, 0xB1, 0x26, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x7, 0x76, 0x4, 0x4E, 0x0, 0x2C, 0x0, 0x34, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0x5, 0x5D, 0x88, 0x9B, 0x9C, 0x75, 0x5F, 0x75, 0x5F, 0x5B, 0x72, 0x15, 0xF3, 0x68, 0x5A, 0x93, 0x3D, 0xF2, 0xE4, 0x7, 0x73, 0xC6, 0xDA, 0x50, 0x37, 0xAF, 0x76, 0xAB, 0xCA, 0x1, 0xD9, 0xD9, 0x8C, 0xB7, 0x50, 0x4A, 0x4D, 0x14, 0x98, 0x78, 0x80, 0x8F, 0xB3, 0x78, 0x52, 0x5C, 0x49, 0xFD, 0x1D, 0x2, 0xBC, 0x72, 0x5A, 0x78, 0xFC, 0xF0, 0x4, 0x3A, 0x71, 0x85, 0xA8, 0x4D, 0x5B, 0xB8, 0xD5, 0xB6, 0xB5, 0x12, 0x87, 0xD1, 0xAF, 0x71, 0x4A, 0x5E, 0x5D, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0xF4, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x27, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x15, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0x2, 0xDC, 0x88, 0x9B, 0x9C, 0x74, 0x60, 0x6B, 0x5F, 0x53, 0x7B, 0x22, 0xF2, 0xDE, 0xB, 0x7C, 0xCF, 0x9F, 0xCA, 0x2, 0xD8, 0xD8, 0x8D, 0xB7, 0x51, 0x4A, 0x4D, 0x14, 0x98, 0x78, 0x80, 0x8F, 0x9F, 0x78, 0x66, 0x52, 0x44, 0xFD, 0xE, 0x4, 0x3A, 0x83, 0x97, 0xBF, 0xDE, 0xA6, 0xB5, 0x12, 0x87, 0xD1, 0xAF, 0x72, 0x49, 0x5E, 0x5D, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x4B, 0x4, 0xEB, 0x4, 0x4E, 0x0, 0x1F, 0x0, 0x27, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x6, 0x15, 0x14, 0x2, 0xC5, 0x94, 0xA6, 0xA9, 0x7F, 0x6C, 0x6E, 0x5C, 0x4E, 0x76, 0x22, 0xF2, 0xE4, 0x8, 0x76, 0xC3, 0xA1, 0xCF, 0xD9, 0xD9, 0x92, 0xC4, 0x63, 0x59, 0x62, 0xFE, 0x4B, 0x99, 0x78, 0x80, 0x8E, 0x2, 0x4B, 0x76, 0x5D, 0x4E, 0x41, 0xFD, 0x7, 0x4, 0x3A, 0x7F, 0x93, 0xB9, 0xE1, 0xFD, 0xB6, 0xB4, 0x13, 0x87, 0xD1, 0xAF, 0x71, 0x4B, 0x1, 0x5E, 0x5D, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x3, 0x81, 0x4, 0x4E, 0x0, 0x5, 0x0, 0x9, 0x0, 0x0, 0x5, 0x25, 0x11, 0x37, 0x5, 0x11, 0x25, 0x5, 0x11, 0x25, 0x2, 0x8E, 0xFD, 0xEF, 0xF2, 0x2, 0x12, 0xFD, 0xEE, 0x1, 0x1F, 0xFE, 0xE1, 0x14, 0x55, 0x3, 0x2C, 0xE1, 0x55, 0xFC, 0xD4, 0x2E, 0x36, 0x2, 0x7A, 0x35, 0x0, 0x3, 0x0, 0x86, 0xFF, 0x76, 0x3, 0xAE, 0x4, 0xBC, 0x0, 0x2, 0x0, 0x5, 0x0, 0x13, 0x0, 0x0, 0x1, 0x27, 0x11, 0x17, 0x17, 0x11, 0x25, 0x37, 0x5, 0x37, 0x33, 0x7, 0x17, 0x11, 0x7, 0x25, 0x7, 0x23, 0x37, 0x27, 0x2, 0x68, 0xD7, 0x3E, 0xE1, 0xFD, 0xEF, 0xF2, 0x1, 0x3D, 0x4F, 0x91, 0x5B, 0x50, 0xF3, 0xFE, 0xBA, 0x53, 0x91, 0x5E, 0x45, 0x3, 0x4C, 0x28, 0xFE, 0x22, 0xA7, 0x2A, 0x1, 0xF2, 0xB6, 0xE1, 0x34, 0xA2, 0xB7, 0xC, 0xFC, 0xD4, 0xE1, 0x34, 0xAA, 0xC0, 0xB, 0x0, 0x2, 0x0, 0x25, 0xFF, 0x83, 0x3, 0xBB, 0x5, 0x1, 0x0, 0x9, 0x0, 0x1E, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x27, 0x3, 0x16, 0x17, 0x22, 0x27, 0x7, 0x23, 0x1, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x37, 0x33, 0x7, 0x16, 0x12, 0x15, 0x15, 0x14, 0x2, 0x1, 0xCA, 0x95, 0x69, 0x39, 0x4C, 0xED, 0x39, 0x3B, 0x61, 0x56, 0x31, 0xBD, 0x1, 0x69, 0x38, 0x38, 0x83, 0x3F, 0x90, 0x6B, 0x3F, 0xBD, 0x4A, 0x9A, 0x9A, 0xF8, 0xAF, 0xD9, 0x84, 0x22, 0x62, 0xB3, 0x2B, 0xFD, 0x5F, 0x1E, 0xC3, 0x23, 0x8C, 0x4, 0x1, 0xD, 0x29, 0x9D, 0x31, 0x32, 0xB3, 0xD3, 0x38, 0xFE, 0xE8, 0xB0, 0x22, 0xDF, 0xFE, 0xBF, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xEC, 0x7, 0xE, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x2C, 0x0, 0x34, 0x0, 0x0, 0x1, 0x14, 0x2, 0x23, 0x22, 0x27, 0x6, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x7, 0x26, 0x23, 0x22, 0x6, 0x7, 0x21, 0x5, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x32, 0x36, 0x37, 0x35, 0x21, 0x16, 0x16, 0x7, 0xE, 0xE3, 0xEC, 0xE8, 0x8B, 0x41, 0xC4, 0x7F, 0xEB, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0xF8, 0x8B, 0x43, 0xCC, 0x83, 0xA2, 0xCB, 0x34, 0x83, 0x68, 0xA7, 0x80, 0x95, 0xA, 0x2, 0xC3, 0xFA, 0x34, 0x7D, 0x89, 0x86, 0x7D, 0x7C, 0x89, 0x87, 0x7D, 0x3, 0xFD, 0x79, 0x61, 0x4, 0xFE, 0x32, 0x12, 0x7A, 0x2, 0x2, 0xEA, 0xFE, 0xD4, 0xB3, 0x53, 0x60, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xB1, 0x52, 0x5F, 0x7F, 0x4D, 0x7D, 0x86, 0xA5, 0x7D, 0x57, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0xFE, 0x88, 0x98, 0x5E, 0x12, 0x7C, 0x8C, 0x0, 0x4, 0x0, 0x5D, 0xFF, 0x83, 0x6, 0xF1, 0x5, 0x1, 0x0, 0x7, 0x0, 0xF, 0x0, 0x17, 0x0, 0x41, 0x0, 0x0, 0x1, 0x14, 0x17, 0x13, 0x27, 0x22, 0x6, 0x15, 0x13, 0x32, 0x36, 0x35, 0x35, 0x34, 0x27, 0x3, 0x5, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x27, 0x6, 0x6, 0x27, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x16, 0x15, 0x14, 0x0, 0x4, 0x3, 0x41, 0xE0, 0x24, 0x87, 0x76, 0xFF, 0x87, 0x76, 0x40, 0xDF, 0xFD, 0x41, 0x5B, 0x74, 0x12, 0xFE, 0x4B, 0x64, 0x3, 0x51, 0x34, 0x31, 0x28, 0xBD, 0x3F, 0x42, 0x31, 0x3F, 0xB7, 0x6D, 0xE2, 0xE2, 0x2, 0xAA, 0xA, 0x87, 0x80, 0x6B, 0x8C, 0x38, 0x4F, 0x35, 0xC6, 0x91, 0x7E, 0xC3, 0x41, 0x3E, 0xBF, 0x7D, 0x35, 0x31, 0x42, 0xBC, 0x58, 0x6F, 0x76, 0xFE, 0xFD, 0x2, 0x14, 0xA5, 0x5E, 0x2, 0x7A, 0x2, 0xD2, 0x93, 0xFE, 0x88, 0xD5, 0x8F, 0x15, 0xA4, 0x5F, 0xFD, 0x86, 0x2, 0x93, 0x6F, 0x19, 0x60, 0x89, 0xC3, 0x9, 0x73, 0xB3, 0x2B, 0x41, 0x55, 0x61, 0x1, 0x1, 0xF, 0xD9, 0x8F, 0x7C, 0xAD, 0x36, 0x26, 0x9E, 0x2F, 0x52, 0x60, 0x53, 0x53, 0x60, 0x9, 0xBA, 0xF9, 0x46, 0xFB, 0xB3, 0xEB, 0xFE, 0xC4, 0x0, 0x4, 0x0, 0x5D, 0xFF, 0xEC, 0x6, 0xF1, 0x4, 0x50, 0x0, 0x6, 0x0, 0xD, 0x0, 0x15, 0x0, 0x37, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x26, 0x26, 0x3, 0x32, 0x36, 0x37, 0x21, 0x16, 0x16, 0x21, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x5, 0x22, 0x26, 0x27, 0x6, 0x6, 0x27, 0x22, 0x2, 0x35, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x5, 0x0, 0x79, 0x77, 0xB, 0x1, 0xF8, 0xB, 0x78, 0x78, 0x71, 0x77, 0xF, 0xFE, 0x10, 0xF, 0x78, 0xFD, 0x91, 0x5B, 0x74, 0x12, 0xFE, 0x4B, 0x64, 0x3, 0x51, 0x7E, 0xC0, 0x3F, 0x41, 0xB7, 0x6C, 0xE2, 0xE2, 0x2, 0xAA, 0xA, 0x87, 0x80, 0x6B, 0x8C, 0x38, 0x4F, 0x35, 0xC6, 0x91, 0x7D, 0xC3, 0x42, 0x3F, 0xBF, 0x7C, 0xED, 0x1, 0x4, 0xFE, 0xFD, 0x3, 0x8D, 0xAB, 0x7D, 0x7D, 0xAB, 0xFD, 0x23, 0x99, 0x71, 0x71, 0x99, 0x93, 0x6F, 0x19, 0x60, 0x89, 0xC3, 0x5D, 0x51, 0x52, 0x5D, 0x1, 0x1, 0xF, 0xD9, 0x8F, 0x7C, 0xAD, 0x36, 0x26, 0x9E, 0x2F, 0x52, 0x5C, 0x50, 0x50, 0x5C, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC4, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x6, 0x74, 0x4, 0x4E, 0x0, 0x21, 0x0, 0x2F, 0x0, 0x0, 0x5, 0x22, 0x27, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x26, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4, 0x7E, 0xA5, 0x79, 0x79, 0xA0, 0xEA, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0x88, 0x7C, 0x7D, 0x88, 0x4B, 0x41, 0x4D, 0x1, 0xA, 0xEC, 0xEF, 0x1, 0x9, 0xFE, 0xF7, 0xFE, 0xE, 0x7D, 0x88, 0x87, 0x7D, 0x7D, 0x89, 0x87, 0x7C, 0x14, 0x52, 0x52, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xC3, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0x2A, 0x86, 0xB3, 0x15, 0xEC, 0x1, 0x3B, 0xFE, 0xC5, 0xEC, 0x15, 0xEB, 0xFE, 0xC5, 0x2, 0x26, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x3, 0x0, 0x50, 0xFF, 0x83, 0x6, 0x74, 0x5, 0x1, 0x0, 0x7, 0x0, 0xF, 0x0, 0x3A, 0x0, 0x0, 0x1, 0x14, 0x17, 0x13, 0x27, 0x22, 0x6, 0x15, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x27, 0x3, 0x17, 0x22, 0x27, 0x7, 0x23, 0x37, 0x27, 0x6, 0x23, 0x22, 0x0, 0x27, 0x35, 0x34, 0x0, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x26, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x12, 0x15, 0x15, 0x14, 0x0, 0x3, 0x79, 0x3E, 0xDD, 0x18, 0x87, 0x7C, 0x1, 0x5, 0x87, 0x7D, 0x4F, 0xE2, 0x2D, 0x3A, 0x35, 0x29, 0xBD, 0x40, 0x9, 0x79, 0xA0, 0xEA, 0xFE, 0xF7, 0x4, 0x1, 0xA, 0xEC, 0x88, 0x7C, 0x7D, 0x88, 0x4B, 0x41, 0x4D, 0x1, 0xA, 0xEC, 0x2F, 0x2C, 0x41, 0xBD, 0x56, 0x76, 0x7F, 0xFE, 0xF7, 0x2, 0x12, 0x9C, 0x5E, 0x2, 0x72, 0x1, 0xD5, 0x8F, 0xFE, 0x88, 0xD2, 0x91, 0x15, 0xB1, 0x5E, 0xFD, 0x7D, 0xC7, 0xA, 0x73, 0xB5, 0x6, 0x52, 0x1, 0x33, 0xE6, 0x22, 0xEC, 0x1, 0x3B, 0xC3, 0xD5, 0x8F, 0x15, 0x91, 0xD2, 0x2A, 0x86, 0xB3, 0x15, 0xEC, 0x1, 0x3B, 0x7, 0xBA, 0xF4, 0x45, 0xFF, 0x0, 0xA2, 0x14, 0xEB, 0xFE, 0xC5, 0x0, 0x1, 0x0, 0x35, 0x0, 0x0, 0x4, 0x23, 0x4, 0x3A, 0x0, 0x14, 0x0, 0x0, 0x21, 0x23, 0x35, 0x34, 0x12, 0x37, 0x11, 0x33, 0x11, 0x16, 0x12, 0x15, 0x15, 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x28, 0xF3, 0xC8, 0xB5, 0xF3, 0xB6, 0xC8, 0xF3, 0x7C, 0x89, 0x87, 0x7C, 0x15, 0xCC, 0x1, 0x27, 0x27, 0x2, 0xB, 0xFD, 0xF5, 0x27, 0xFE, 0xD9, 0xCC, 0x15, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x2, 0x0, 0x99, 0xFE, 0x60, 0x4, 0x55, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x23, 0x26, 0x35, 0x11, 0x26, 0x27, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x17, 0x11, 0x14, 0x17, 0x1, 0x11, 0x33, 0x32, 0x35, 0x34, 0x27, 0x4, 0x55, 0xFB, 0x1E, 0x1, 0xBC, 0xF3, 0xF3, 0x1, 0xBE, 0xD8, 0xF3, 0x9B, 0xA4, 0x3, 0x27, 0xFD, 0x37, 0xCC, 0xD8, 0xCE, 0xFE, 0x60, 0x23, 0x96, 0x1, 0xC0, 0xAB, 0x2, 0xFE, 0x7A, 0x4, 0x3A, 0xA4, 0x9E, 0xBB, 0x59, 0x3F, 0xC6, 0xFE, 0x52, 0x97, 0x2A, 0x5, 0x9, 0xFE, 0xC9, 0xA3, 0x90, 0x4, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x1, 0xED, 0x4, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x17, 0x36, 0x37, 0x15, 0x6, 0x7, 0x1, 0x6F, 0xF2, 0xE8, 0x6, 0x33, 0x4F, 0x58, 0x26, 0x4, 0x3A, 0x7A, 0x55, 0x22, 0xE3, 0x1D, 0x53, 0x0, 0x1, 0x0, 0x7D, 0x0, 0x0, 0x3, 0x7F, 0x4, 0x4E, 0x0, 0x17, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x7, 0x23, 0x26, 0x26, 0x2, 0x4, 0x6A, 0x2B, 0xF2, 0xE1, 0x7, 0x46, 0x70, 0x4F, 0x39, 0x2F, 0x4E, 0x3E, 0x21, 0x2D, 0x22, 0x37, 0x15, 0x7A, 0x16, 0x2A, 0x3, 0x64, 0x6E, 0xFD, 0xA, 0x4, 0x3A, 0x58, 0x6C, 0x42, 0x42, 0x1B, 0xDE, 0xF, 0x2F, 0x17, 0x18, 0x0, 0x2, 0x0, 0x28, 0xFF, 0xEC, 0x3, 0xF4, 0x4, 0x4E, 0x0, 0x1A, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x6, 0x14, 0x1, 0x62, 0x94, 0xA6, 0xA9, 0x7E, 0x6D, 0xE1, 0xA, 0x5D, 0x9A, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA8, 0x3A, 0xD9, 0xD9, 0x91, 0xC4, 0x63, 0x59, 0x62, 0x14, 0x98, 0x78, 0x80, 0x8F, 0x2, 0x2F, 0x77, 0x8B, 0xD, 0xE5, 0x8, 0x7F, 0xDA, 0xB5, 0x12, 0x87, 0xD1, 0xAF, 0x70, 0x4B, 0x1, 0xBA, 0x0, 0x2, 0x0, 0x28, 0xFF, 0xEC, 0x4, 0xBE, 0x4, 0x4E, 0x0, 0x24, 0x0, 0x2B, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26, 0x23, 0x22, 0x7, 0x23, 0x26, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x6, 0x14, 0x1, 0x62, 0x94, 0xA6, 0xA9, 0x7E, 0x6D, 0xE1, 0x7, 0x46, 0x70, 0x4F, 0x39, 0x2F, 0x4E, 0x3E, 0x21, 0x2D, 0x22, 0x37, 0x15, 0x7A, 0x16, 0x2A, 0x26, 0x6A, 0x2B, 0xD9, 0xD9, 0x91, 0xC4, 0x63, 0x59, 0x62, 0x14, 0x98, 0x78, 0x80, 0x8F, 0x2, 0x2F, 0x57, 0x6B, 0x42, 0x42, 0x1B, 0xDE, 0xF, 0x2F, 0x17, 0x18, 0x6D, 0xEC, 0xB5, 0x12, 0x87, 0xD1, 0xAF, 0x70, 0x4B, 0x1, 0xBA, 0x0, 0x1, 0x0, 0x1F, 0xFF, 0xEB, 0x4, 0x25, 0x4, 0x46, 0x0, 0x16, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x37, 0x33, 0x11, 0x16, 0x33, 0x37, 0x17, 0x6, 0x3, 0xA3, 0x70, 0x80, 0x75, 0xBA, 0xA0, 0xC5, 0xF7, 0x64, 0x43, 0xC5, 0x31, 0xF6, 0x3, 0x46, 0x1B, 0x18, 0x33, 0x15, 0xA4, 0xB5, 0x1, 0xE4, 0x72, 0xC6, 0xCA, 0x6F, 0x5A, 0xBD, 0xFC, 0xFA, 0x7B, 0x4, 0xB3, 0x1F, 0x0, 0x2, 0x0, 0x1F, 0xFF, 0xEB, 0x5, 0xC3, 0x4, 0x46, 0x0, 0x17, 0x0, 0x23, 0x0, 0x0, 0x4, 0x26, 0x35, 0x11, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x37, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x3, 0x9C, 0xE9, 0x75, 0xBA, 0xA0, 0xC5, 0xF7, 0x64, 0x43, 0xC5, 0x31, 0xF6, 0x46, 0x4E, 0xA1, 0xE5, 0xE5, 0xA0, 0x47, 0x64, 0x64, 0x47, 0x49, 0x69, 0x69, 0x15, 0xD6, 0xA5, 0x1, 0xC2, 0x72, 0xC6, 0xCA, 0x6F, 0x5A, 0xBD, 0xFE, 0x90, 0x1B, 0xDC, 0xA4, 0xA5, 0xD5, 0xC9, 0x63, 0x4F, 0x52, 0x64, 0x64, 0x52, 0x4E, 0x64, 0x0, 0x1, 0xFF, 0xD8, 0xFF, 0xEC, 0x2, 0xF4, 0x6, 0x15, 0x0, 0x15, 0x0, 0x0, 0x17, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x14, 0x6, 0x61, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAD, 0x1, 0xC5, 0xAD, 0x3F, 0x59, 0x19, 0x2A, 0x32, 0xA2, 0x1, 0xCB, 0x14, 0x12, 0xBE, 0x8, 0xAA, 0x3, 0x43, 0xB5, 0xBF, 0x15, 0xB9, 0xB, 0xAF, 0xFC, 0xBD, 0xB5, 0xBF, 0x0, 0x1, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x3, 0x12, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xF3, 0x67, 0x45, 0xAE, 0x40, 0xF3, 0x6A, 0x7E, 0xBA, 0xD5, 0x2, 0xBF, 0xFD, 0x43, 0x75, 0x55, 0x7D, 0x1, 0xDE, 0xFC, 0xF2, 0x0, 0x2, 0x0, 0x1B, 0xFF, 0xEC, 0x4, 0xEE, 0x4, 0x3A, 0x0, 0x7, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x32, 0x37, 0x35, 0x21, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x2, 0x61, 0xAE, 0x40, 0xFE, 0x66, 0x67, 0x1, 0x41, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xA7, 0xA7, 0xF3, 0x1, 0x9A, 0xF3, 0xAC, 0xAC, 0xB3, 0x7D, 0xC3, 0x76, 0x75, 0x55, 0xB3, 0x6A, 0x7E, 0xBA, 0xD5, 0x78, 0xAB, 0x1, 0x9C, 0xFE, 0x64, 0x70, 0x70, 0xAB, 0xFE, 0xD, 0x0, 0x2, 0x0, 0x77, 0xFF, 0xEC, 0x6, 0x74, 0x4, 0x4E, 0x0, 0x9, 0x0, 0x28, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x1, 0x27, 0x6, 0x23, 0x22, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x2, 0xEE, 0x48, 0x82, 0x49, 0x49, 0x82, 0x48, 0x2, 0xA2, 0x7, 0x73, 0xC5, 0xD8, 0x51, 0x77, 0xD6, 0xA5, 0xBE, 0x1, 0xF3, 0x6A, 0x59, 0x53, 0x69, 0x14, 0xF3, 0x69, 0x5A, 0x93, 0x3C, 0xF2, 0x3, 0xCD, 0x38, 0x49, 0x49, 0x38, 0x37, 0x49, 0x49, 0xFC, 0x6A, 0x71, 0x85, 0xA5, 0xA5, 0xB8, 0xD4, 0x2, 0xC2, 0xFD, 0x42, 0x78, 0x52, 0x5A, 0x48, 0x1, 0x84, 0xFE, 0xA6, 0x72, 0x5A, 0x78, 0x3, 0x10, 0xFB, 0xC6, 0xFF, 0xFF, 0x0, 0x7D, 0xFF, 0xEC, 0x6, 0x7A, 0x4, 0x4E, 0x0, 0xF, 0x7, 0x11, 0x6, 0xF1, 0x4, 0x3A, 0xC0, 0x0, 0x0, 0x1, 0x0, 0x14, 0xFF, 0xEC, 0x4, 0x67, 0x4, 0x4E, 0x0, 0x19, 0x0, 0x0, 0x21, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x26, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x20, 0x13, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x3, 0x81, 0x5, 0x6B, 0xC5, 0xA0, 0xC5, 0x4, 0x84, 0x25, 0x26, 0x3C, 0x46, 0x1, 0x3A, 0x9, 0x68, 0x44, 0xAF, 0x40, 0xF3, 0x6A, 0x7E, 0xBC, 0xD7, 0x1, 0x66, 0xA1, 0x9, 0xC0, 0x11, 0xFE, 0x9E, 0xFE, 0x91, 0x75, 0x55, 0x7F, 0x3, 0x8, 0xFB, 0xC6, 0x0, 0x1, 0x0, 0x1F, 0xFE, 0x60, 0x3, 0xEA, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x3, 0x21, 0x1, 0x1, 0x1, 0x38, 0xCA, 0xCF, 0x1, 0xE, 0xFE, 0xB5, 0x1, 0x56, 0xFE, 0xF4, 0xD8, 0xD9, 0xFE, 0xF2, 0x1, 0x57, 0xFE, 0xB5, 0x4, 0x3A, 0xFE, 0x4, 0x1, 0xFC, 0xFD, 0x1F, 0xFD, 0x7, 0x2, 0xD, 0xFD, 0xF3, 0x2, 0xF9, 0x2, 0xE1, 0x0, 0x2, 0x0, 0x1F, 0xFE, 0x4B, 0x4, 0xFA, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x26, 0x27, 0x27, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x13, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x26, 0x36, 0x34, 0x26, 0x22, 0x6, 0x14, 0x16, 0x3, 0xE8, 0x91, 0xA6, 0x46, 0x65, 0xD9, 0xFE, 0xF2, 0x1, 0x57, 0xFE, 0xB5, 0x1, 0xD, 0xCA, 0xCF, 0x1, 0xE, 0xFE, 0xB5, 0x92, 0x50, 0x72, 0x71, 0xA1, 0xA1, 0x42, 0x3F, 0x3F, 0x5C, 0x41, 0x41, 0xFE, 0x4B, 0x8D, 0xA4, 0xF1, 0xFD, 0xF3, 0x2, 0xF9, 0x2, 0xE1, 0xFE, 0x4, 0x1, 0xFC, 0xFD, 0x1F, 0xFE, 0xC2, 0x52, 0xA1, 0x70, 0x71, 0xA0, 0x9F, 0x3A, 0x72, 0x3B, 0x3B, 0x72, 0x3A, 0x0, 0x1, 0x0, 0xA, 0xFE, 0x60, 0x3, 0xED, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x5, 0x15, 0x21, 0x35, 0x33, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x3, 0x1, 0xC0, 0xFE, 0x4A, 0x65, 0x1, 0xA, 0xFE, 0xB5, 0x1, 0xC, 0xCB, 0xCF, 0x1, 0xE, 0xFE, 0xB4, 0x1, 0x57, 0xFE, 0xF4, 0xD9, 0x92, 0xF6, 0xAA, 0xAA, 0x2, 0x4F, 0x2, 0xE1, 0xFE, 0x4, 0x1, 0xFC, 0xFD, 0x1F, 0xFD, 0x7, 0x2, 0xD, 0xFE, 0x9D, 0x0, 0x2, 0x0, 0x1F, 0xFF, 0xEC, 0x4, 0xD7, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x27, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x3, 0xC5, 0x8B, 0x9B, 0x40, 0x5B, 0xD7, 0xFE, 0xF2, 0x1, 0x56, 0xFE, 0xB6, 0x1, 0xD, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0x56, 0x51, 0x8B, 0x71, 0xA1, 0xA1, 0x6F, 0x2D, 0x40, 0x40, 0x2D, 0x2F, 0x41, 0x41, 0x14, 0x80, 0x6C, 0x9A, 0xFE, 0x8E, 0x2, 0x26, 0x2, 0x14, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0x8A, 0x72, 0xA1, 0x71, 0x70, 0xA0, 0x9E, 0x3A, 0x3A, 0x39, 0x3B, 0x3B, 0x39, 0x3A, 0x3A, 0x0, 0x1, 0xFF, 0xDE, 0xFE, 0x60, 0x4, 0x9E, 0x4, 0x3A, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x1, 0x21, 0x1, 0x1, 0x1, 0xED, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0x1, 0x56, 0xFE, 0xF3, 0xD8, 0xFE, 0x36, 0xFE, 0xEF, 0x2, 0x4C, 0xFE, 0xB6, 0x4, 0x3A, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0xFD, 0xDA, 0x1, 0x72, 0xFC, 0xEE, 0x3, 0xC6, 0x2, 0x14, 0x0, 0x2, 0xFF, 0xDE, 0xFE, 0x60, 0x5, 0x8C, 0x4, 0x3A, 0x0, 0x15, 0x0, 0x21, 0x0, 0x0, 0x1, 0x1, 0x21, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x27, 0x5, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x2, 0xB9, 0xFE, 0x36, 0xFE, 0xEF, 0x2, 0x4C, 0xFE, 0xB6, 0x1, 0xD, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xB6, 0x56, 0x52, 0x8A, 0x71, 0xA1, 0xA2, 0x74, 0x8B, 0x97, 0x40, 0x1, 0x68, 0x2D, 0x40, 0x40, 0x2D, 0x2F, 0x41, 0x41, 0x1, 0x72, 0xFC, 0xEE, 0x3, 0xC6, 0x2, 0x14, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0x89, 0x71, 0xA1, 0x71, 0x70, 0xA0, 0x80, 0x6C, 0x4E, 0x3A, 0x3A, 0x39, 0x3B, 0x3B, 0x39, 0x3A, 0x3A, 0x0, 0x1, 0xFF, 0xBE, 0xFE, 0x60, 0x4, 0x88, 0x4, 0x3A, 0x0, 0xF, 0x0, 0x0, 0x1, 0x21, 0x35, 0x33, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x1, 0x33, 0x1, 0xB0, 0xFE, 0xE, 0x72, 0x1, 0xE5, 0xFE, 0xB6, 0x1, 0xC, 0xCA, 0xCE, 0x1, 0xE, 0xFE, 0xB5, 0x1, 0x56, 0xFE, 0xF4, 0xD8, 0xFE, 0x99, 0x73, 0xFE, 0x60, 0xAA, 0x3, 0x1C, 0x2, 0x14, 0xFE, 0x9C, 0x1, 0x64, 0xFD, 0xEC, 0xFD, 0xDA, 0x1, 0x72, 0xFD, 0x98, 0x0, 0x1, 0x0, 0xD, 0xFE, 0x4B, 0x3, 0x76, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x13, 0x22, 0x27, 0x35, 0x17, 0x32, 0x36, 0x37, 0x37, 0x1, 0x21, 0x13, 0x17, 0x13, 0x21, 0x1, 0x2, 0x7, 0xDA, 0x23, 0x52, 0x2D, 0x58, 0x55, 0x1C, 0x28, 0xFE, 0x8A, 0x1, 0xA, 0xCB, 0xC, 0x82, 0x1, 0x6, 0xFE, 0xB8, 0x5C, 0xCB, 0xFE, 0x4B, 0x11, 0xBC, 0x3, 0x41, 0x4F, 0x72, 0x4, 0x23, 0xFD, 0x63, 0x34, 0x1, 0xAB, 0xFC, 0x56, 0xFE, 0xF8, 0x15, 0x0, 0x2, 0x0, 0x50, 0x2, 0xEE, 0x2, 0xD6, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x17, 0x0, 0x0, 0x1, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x32, 0x36, 0x11, 0x34, 0x26, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x20, 0x16, 0x15, 0x2, 0x1F, 0xB7, 0xAE, 0xFE, 0xD6, 0xAE, 0xB6, 0x40, 0x9A, 0x3F, 0x3F, 0x9A, 0x40, 0xB6, 0xAE, 0x1, 0x2A, 0xAE, 0x5, 0xB0, 0x7C, 0x9E, 0x9E, 0x7C, 0x37, 0x54, 0x54, 0xFD, 0x75, 0x37, 0x54, 0x54, 0x37, 0x7D, 0x9E, 0x9E, 0x7D, 0x0, 0x1, 0x0, 0x64, 0x1, 0x4C, 0x2, 0xFA, 0x7, 0x2E, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x2, 0x3F, 0x46, 0x4F, 0x27, 0x1D, 0x47, 0x45, 0x3D, 0x62, 0x28, 0xC5, 0xC5, 0x4C, 0x82, 0x78, 0x8B, 0x1, 0x4C, 0x11, 0xB4, 0x9, 0x50, 0x1, 0xFE, 0x69, 0x54, 0x59, 0xFD, 0xD2, 0x4, 0xA2, 0xFE, 0x1B, 0x71, 0x91, 0xA2, 0xFD, 0xBF, 0xFA, 0x0, 0x1, 0x0, 0x35, 0x2, 0x8C, 0x2, 0xA9, 0x7, 0x2E, 0x0, 0x23, 0x0, 0x0, 0x1, 0x22, 0x27, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x17, 0x15, 0x22, 0x26, 0x35, 0x34, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x35, 0x32, 0x16, 0x15, 0x14, 0x6, 0x1, 0xF9, 0x11, 0x11, 0xC5, 0x15, 0x1E, 0x38, 0x18, 0x25, 0x46, 0x69, 0xB3, 0x16, 0x14, 0xC5, 0xF, 0x18, 0x3A, 0x34, 0x4B, 0x5A, 0x60, 0x3, 0xEE, 0x5, 0xFE, 0x99, 0x2, 0x95, 0x2C, 0x59, 0x31, 0x46, 0x5, 0x88, 0x80, 0x80, 0xEF, 0x7, 0x1, 0x56, 0xFD, 0x67, 0x16, 0x5D, 0x5B, 0x2, 0x91, 0x85, 0x74, 0x63, 0x80, 0x0, 0x1, 0x0, 0x35, 0x2, 0x8C, 0x2, 0x4A, 0x7, 0x2E, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x11, 0x33, 0x11, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x1, 0xA4, 0xC6, 0x3, 0x1D, 0x28, 0x61, 0x56, 0x45, 0xE, 0xC6, 0x1D, 0x28, 0x61, 0x57, 0x4, 0xA6, 0xFD, 0xE6, 0x2, 0x5D, 0x30, 0x22, 0x19, 0x44, 0x69, 0x1, 0x1, 0xD2, 0xFD, 0xED, 0x30, 0x22, 0x1E, 0x44, 0x65, 0x0, 0x1, 0x0, 0x28, 0x2, 0x7F, 0x3, 0x4A, 0x5, 0xBA, 0x0, 0x18, 0x0, 0x0, 0x1, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x23, 0x22, 0x7, 0x35, 0x36, 0x33, 0x32, 0x17, 0x15, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x2, 0xA8, 0x17, 0x4C, 0x8E, 0x78, 0x8C, 0x47, 0x1D, 0x27, 0x4F, 0x46, 0xB6, 0x5, 0x4, 0x7F, 0x61, 0x28, 0xC6, 0x2, 0x8C, 0x79, 0x86, 0x91, 0xA2, 0xFC, 0x50, 0x9, 0xB4, 0x11, 0xED, 0xF8, 0xAF, 0x58, 0x2, 0x2F, 0xFC, 0xDF, 0x0, 0x2, 0x0, 0x56, 0xFF, 0xEC, 0x4, 0x7A, 0x4, 0x4F, 0x0, 0xA, 0x0, 0x21, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x2, 0x3C, 0x8B, 0x44, 0x44, 0x8D, 0x83, 0x6D, 0x6E, 0x1, 0x76, 0x14, 0x66, 0xB6, 0xCD, 0xDB, 0xDC, 0xCA, 0xBF, 0x68, 0x35, 0xA3, 0x4C, 0x33, 0x19, 0xA, 0x10, 0x46, 0x3, 0xAF, 0x8C, 0x1, 0xC9, 0x88, 0xBF, 0xA2, 0x9B, 0xE1, 0xAF, 0x83, 0x97, 0x1, 0x43, 0xFC, 0x15, 0xE7, 0x1, 0x28, 0xA1, 0xA1, 0x1F, 0xB3, 0x4, 0x7B, 0xFC, 0xFA, 0x0, 0x1, 0x0, 0x68, 0x0, 0x0, 0x4, 0x8E, 0x4, 0x4E, 0x0, 0x1E, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x26, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x15, 0x15, 0x14, 0x7, 0x33, 0x15, 0x21, 0x35, 0x36, 0x13, 0x35, 0x34, 0x26, 0x23, 0x20, 0x11, 0x15, 0x10, 0x17, 0x2, 0x45, 0xFE, 0x31, 0xA6, 0xB4, 0x1, 0x16, 0xFC, 0xFD, 0x1, 0x17, 0xB3, 0xAC, 0xFE, 0x2F, 0xD1, 0x6, 0x83, 0x90, 0xFE, 0xEF, 0xDC, 0xC4, 0x91, 0xFE, 0x18, 0xC4, 0x1, 0x1F, 0xFE, 0xE1, 0xC3, 0x19, 0xFE, 0x91, 0xC4, 0xC8, 0x41, 0x1, 0x24, 0x30, 0x88, 0xA4, 0xFE, 0xC7, 0x13, 0xFE, 0xD3, 0x48, 0xFF, 0xFF, 0x0, 0xA2, 0x0, 0xAB, 0x1, 0xBD, 0x5, 0x8, 0x0, 0x27, 0x0, 0x13, 0x0, 0x1A, 0x0, 0xB7, 0x0, 0x7, 0x0, 0x13, 0x0, 0x1A, 0x4, 0x7, 0x0, 0x2, 0x0, 0x64, 0x2, 0x80, 0x2, 0x3E, 0x4, 0x3A, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x2, 0x3E, 0x9C, 0xA1, 0x9D, 0x4, 0x3A, 0xFE, 0x46, 0x1, 0xBA, 0xFE, 0x46, 0x1, 0xBA, 0x0, 0x1, 0x0, 0x46, 0xFF, 0x66, 0x1, 0x5A, 0x1, 0x6, 0x0, 0x8, 0x0, 0x0, 0x1, 0x15, 0x14, 0x6, 0x7, 0x27, 0x36, 0x37, 0x35, 0x1, 0x5A, 0x4E, 0x47, 0x7F, 0x49, 0x2, 0x1, 0x6, 0x4B, 0x57, 0xBF, 0x3F, 0x4E, 0x6F, 0x84, 0x5F, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x5, 0x1B, 0x6, 0x15, 0x0, 0x26, 0x0, 0x4B, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4B, 0x2, 0x44, 0x0, 0x0, 0x0, 0x2, 0x0, 0x19, 0x0, 0x0, 0x4, 0x18, 0x6, 0x15, 0x0, 0x3, 0x0, 0x18, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x4, 0x18, 0xF3, 0x9F, 0xD5, 0xF3, 0xA5, 0xA5, 0x1, 0xE8, 0xCC, 0x7C, 0xB6, 0x26, 0x8A, 0x71, 0xCF, 0x4, 0xD5, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0xB3, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x48, 0xC4, 0xCF, 0x3C, 0xC8, 0x30, 0xBB, 0x4C, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0x2D, 0x6, 0x15, 0x0, 0x16, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x36, 0x36, 0x33, 0x32, 0x5, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x2, 0xA1, 0xDB, 0xF4, 0xA5, 0xA5, 0x2, 0xD8, 0xC2, 0x92, 0x1, 0x2D, 0xF3, 0x67, 0x49, 0xC0, 0x4, 0xDB, 0x3, 0x87, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x67, 0xB4, 0xC0, 0x2F, 0xFA, 0x1A, 0x5, 0x40, 0xD, 0xAC, 0x67, 0x0, 0x2, 0x0, 0x2D, 0x0, 0x0, 0x6, 0x94, 0x6, 0x15, 0x0, 0x3, 0x0, 0x29, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x21, 0x35, 0x36, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x11, 0x6, 0x94, 0xF3, 0xFD, 0x99, 0xFE, 0x8C, 0xF4, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0x1, 0x74, 0x1, 0xE8, 0xCC, 0x7C, 0xB6, 0x26, 0x8A, 0x71, 0xCF, 0x4, 0xD5, 0xD5, 0x4, 0x3A, 0xFB, 0xC6, 0x4, 0x3A, 0xFB, 0xC6, 0x3, 0x87, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0x48, 0xC4, 0xCF, 0x3C, 0xC8, 0x30, 0xBB, 0x4C, 0xB3, 0xFC, 0x79, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x6, 0x94, 0x6, 0x15, 0x0, 0x27, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x15, 0x21, 0x35, 0x36, 0x36, 0x33, 0x32, 0x5, 0x11, 0x23, 0x11, 0x26, 0x23, 0x22, 0x7, 0x15, 0x33, 0x15, 0x23, 0x11, 0x3, 0x3A, 0xFE, 0x8C, 0xF4, 0xA5, 0xA5, 0xCC, 0xB0, 0x43, 0x46, 0x6, 0x2A, 0x34, 0xAB, 0x2, 0x1, 0x74, 0x1, 0xD7, 0xC3, 0x92, 0x1, 0x2D, 0xF3, 0x67, 0x49, 0xC0, 0x4, 0xDB, 0xDB, 0x3, 0x87, 0xFC, 0x79, 0x3, 0x87, 0xB3, 0x67, 0xB5, 0xBF, 0x12, 0xBE, 0x8, 0xA8, 0x6B, 0x63, 0xB7, 0xC1, 0x2F, 0xFA, 0x1A, 0x5, 0x40, 0xD, 0xAC, 0x67, 0xB3, 0xFC, 0x79, 0x0, 0x1, 0x0, 0x2D, 0xFF, 0xEC, 0x4, 0xD1, 0x6, 0x15, 0x0, 0x25, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x26, 0x23, 0x22, 0x15, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x4, 0xD1, 0x43, 0x5C, 0x79, 0x9F, 0xB3, 0xB3, 0x42, 0x70, 0xA3, 0xF3, 0xA5, 0xA5, 0x1, 0xC5, 0xAD, 0x73, 0xF3, 0x61, 0xBF, 0xBF, 0x3F, 0x32, 0x29, 0x2B, 0x4, 0x18, 0x89, 0xA7, 0x2, 0x6B, 0xB3, 0xF9, 0x1F, 0xB1, 0xFB, 0x5F, 0x3, 0x87, 0xB3, 0x6B, 0xB2, 0xBE, 0x3E, 0x2B, 0xFE, 0x8E, 0xB3, 0xFD, 0xA3, 0x49, 0x2B, 0xA, 0x0, 0x1, 0x0, 0x4C, 0xFF, 0xEC, 0x6, 0x80, 0x6, 0x18, 0x0, 0x4B, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x16, 0x15, 0x31, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x5, 0xE0, 0x79, 0x9F, 0xAC, 0xAC, 0xB8, 0x56, 0x50, 0x2E, 0x2B, 0xF3, 0x60, 0x5F, 0x5C, 0x58, 0x5F, 0x7F, 0xBC, 0xD3, 0xEE, 0xC7, 0xDF, 0xEA, 0xEC, 0x5, 0x8A, 0x50, 0x60, 0x65, 0x55, 0x8E, 0xB0, 0xD9, 0xE0, 0xC1, 0x5C, 0x4D, 0x2D, 0xCF, 0xB8, 0xA8, 0xB7, 0x48, 0xBF, 0xBF, 0x3F, 0x31, 0x2A, 0x2B, 0x43, 0x14, 0x9D, 0xB5, 0x2, 0x49, 0xB3, 0x59, 0xCA, 0x5A, 0x3E, 0x4D, 0x89, 0x94, 0x65, 0x3F, 0x63, 0x52, 0x6C, 0x40, 0x1B, 0x28, 0x92, 0x91, 0x90, 0xB8, 0xE4, 0x86, 0x64, 0x50, 0x4A, 0x3A, 0x35, 0x4C, 0x1E, 0x25, 0x93, 0x89, 0x85, 0xC3, 0x17, 0x6C, 0x4F, 0x7A, 0xAC, 0x77, 0xB2, 0x5B, 0x5A, 0xB3, 0xFD, 0xB7, 0x50, 0x38, 0xA, 0xBC, 0x18, 0x0, 0x1, 0xFC, 0xF4, 0x4, 0x84, 0x0, 0x0, 0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x11, 0x15, 0x20, 0x4, 0x7, 0x23, 0x36, 0x24, 0xFF, 0x0, 0xFE, 0xE9, 0x25, 0xD0, 0x28, 0x1, 0x8D, 0x6, 0x0, 0xA7, 0x76, 0x5F, 0xB2, 0xCA, 0x0, 0x1, 0x0, 0x0, 0x4, 0x84, 0x3, 0xC, 0x6, 0x0, 0x0, 0x7, 0x0, 0x0, 0x11, 0x35, 0x20, 0x4, 0x17, 0x23, 0x26, 0x24, 0x1, 0x57, 0x1, 0x8D, 0x28, 0xD1, 0x23, 0xFE, 0xE7, 0x5, 0x59, 0xA7, 0xCA, 0xB2, 0x5F, 0x76, 0xFF, 0xFF, 0xFB, 0xC3, 0x4, 0x8E, 0x0, 0x0, 0x5, 0xAB, 0x0, 0x7, 0x7, 0x36, 0x0, 0x0, 0x6, 0x40, 0xFF, 0xFF, 0x0, 0x0, 0x4, 0xA6, 0x4, 0x3D, 0x5, 0xC3, 0x0, 0x7, 0x7, 0x37, 0x0, 0x0, 0x6, 0x40, 0x0, 0x1, 0xFD, 0xB8, 0x5, 0x13, 0xFF, 0xD3, 0x5, 0xB1, 0x0, 0x3, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x2D, 0xFD, 0xE5, 0x5, 0xB1, 0x9E, 0x9E, 0x0, 0x1, 0xFB, 0x9C, 0x5, 0x13, 0xFD, 0xB8, 0x5, 0xB1, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0xFD, 0xB8, 0xFD, 0xE4, 0x5, 0xB1, 0x9E, 0x9E, 0x0, 0x1, 0xFB, 0x9C, 0x5, 0x13, 0xFF, 0xD3, 0x5, 0xB1, 0x0, 0x3, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x2D, 0xFB, 0xC9, 0x5, 0xB1, 0x9E, 0x9E, 0x0, 0x1, 0xFC, 0xEE, 0xFE, 0x5C, 0x0, 0x0, 0xFF, 0xA2, 0x0, 0x7, 0x0, 0x0, 0x11, 0x15, 0x20, 0x24, 0x27, 0x33, 0x16, 0x4, 0xFE, 0xBD, 0xFE, 0x7B, 0x4A, 0xB6, 0x39, 0x1, 0x32, 0xFE, 0xEC, 0x90, 0xC9, 0x7D, 0x37, 0x7F, 0x0, 0x1, 0x0, 0x0, 0xFE, 0x5C, 0x3, 0x11, 0xFF, 0xA2, 0x0, 0x7, 0x0, 0x0, 0x5, 0x33, 0x6, 0x4, 0x21, 0x35, 0x32, 0x24, 0x2, 0x5B, 0xB6, 0x4A, 0xFE, 0x7C, 0xFE, 0xBD, 0xEF, 0x1, 0x35, 0x5E, 0x7D, 0xC9, 0x90, 0x7F, 0x0, 0x1, 0xFB, 0xC3, 0xFE, 0x4E, 0x0, 0x0, 0xFF, 0x6B, 0x0, 0xD, 0x0, 0x0, 0x15, 0x15, 0x25, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x32, 0x17, 0xFE, 0x8A, 0x98, 0x70, 0x87, 0x96, 0x2A, 0x78, 0x2E, 0xD7, 0xAC, 0x66, 0x9C, 0xC9, 0x9E, 0x25, 0xF, 0x4B, 0x34, 0x31, 0x5B, 0x91, 0xE, 0x0, 0x1, 0x0, 0x0, 0xFE, 0x66, 0x4, 0x3D, 0xFF, 0x83, 0x0, 0xD, 0x0, 0x0, 0x11, 0x35, 0x16, 0x4, 0x33, 0x32, 0x36, 0x37, 0x17, 0x6, 0x6, 0x23, 0x22, 0x24, 0xB6, 0x1, 0x72, 0x54, 0x88, 0x96, 0x2B, 0x78, 0x2E, 0xD9, 0xAB, 0x74, 0xFE, 0xD1, 0xFE, 0x99, 0x9E, 0x1A, 0x1A, 0x4C, 0x34, 0x35, 0x5C, 0x8C, 0x1B, 0xFF, 0xFF, 0xFD, 0xB8, 0xFE, 0xCF, 0xFF, 0xD3, 0xFF, 0x6D, 0x0, 0x7, 0x7, 0x31, 0x0, 0x0, 0xF9, 0xBC, 0xFF, 0xFF, 0xFB, 0x9C, 0xFE, 0xCF, 0xFD, 0xB8, 0xFF, 0x6D, 0x0, 0x7, 0x7, 0x32, 0x0, 0x0, 0xF9, 0xBC, 0xFF, 0xFF, 0xFB, 0x9C, 0xFE, 0xD0, 0xFF, 0xD3, 0xFF, 0x6E, 0x0, 0x7, 0x7, 0x33, 0x0, 0x0, 0xF9, 0xBD, 0x0, 0x16, 0x0, 0x5A, 0xFE, 0x72, 0x7, 0xED, 0x5, 0xAE, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0x11, 0x0, 0x17, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x2D, 0x0, 0x37, 0x0, 0x3E, 0x0, 0x42, 0x0, 0x46, 0x0, 0x4D, 0x0, 0x5C, 0x0, 0x60, 0x0, 0x64, 0x0, 0x70, 0x0, 0x76, 0x0, 0x7C, 0x0, 0x80, 0x0, 0x84, 0x0, 0x88, 0x0, 0x0, 0x1, 0x21, 0x35, 0x21, 0x5, 0x21, 0x35, 0x21, 0x5, 0x21, 0x35, 0x21, 0x5, 0x23, 0x35, 0x21, 0x11, 0x23, 0x21, 0x23, 0x11, 0x21, 0x15, 0x23, 0x11, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x33, 0x32, 0x37, 0x37, 0x15, 0x33, 0x32, 0x35, 0x34, 0x27, 0x5, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x5, 0x15, 0x33, 0x32, 0x35, 0x34, 0x23, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x33, 0x32, 0x36, 0x35, 0x5, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x5, 0x11, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x23, 0x1, 0x21, 0x35, 0x33, 0x35, 0x33, 0x1, 0x21, 0x11, 0x33, 0x15, 0x33, 0x5, 0x21, 0x35, 0x21, 0x5, 0x21, 0x35, 0x21, 0x5, 0x21, 0x35, 0x21, 0x6, 0x3E, 0xFE, 0xEA, 0x1, 0x16, 0xFE, 0x70, 0xFE, 0xEB, 0x1, 0x15, 0xFE, 0x70, 0xFE, 0xEC, 0x1, 0x14, 0x4, 0x60, 0xC7, 0x1, 0x36, 0x6F, 0xF9, 0x4D, 0x71, 0x1, 0x35, 0xC4, 0x71, 0x7, 0x93, 0x6F, 0xFB, 0xBA, 0x7F, 0x66, 0x67, 0x81, 0x80, 0x66, 0x67, 0x80, 0x5C, 0x8B, 0x88, 0x2, 0x8C, 0x87, 0x2, 0xFE, 0x5D, 0x76, 0x73, 0x3, 0xB3, 0x6F, 0xF9, 0x4D, 0x71, 0x3, 0x80, 0x7E, 0x67, 0x67, 0x2, 0x3E, 0x5C, 0x6B, 0x50, 0x58, 0x6D, 0x5D, 0x68, 0x29, 0x36, 0xFA, 0x35, 0x71, 0x7, 0x93, 0x6F, 0xFB, 0xFD, 0xBC, 0x62, 0x72, 0x54, 0x66, 0xD2, 0x3, 0xA2, 0xFE, 0xCA, 0xC7, 0x6F, 0xF9, 0xA2, 0xFE, 0xCB, 0x71, 0xC4, 0x3, 0x1F, 0xFE, 0xEB, 0x1, 0x15, 0xFE, 0x70, 0xFE, 0xEC, 0x1, 0x14, 0x3, 0x20, 0xFE, 0xEA, 0x1, 0x16, 0x5, 0x3A, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0xFE, 0xE3, 0x1, 0x1D, 0x74, 0xFE, 0xDA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFD, 0xC0, 0x61, 0x7A, 0x7A, 0x61, 0x70, 0x61, 0x7A, 0x7A, 0x61, 0x93, 0x8F, 0x74, 0x93, 0x8F, 0xFD, 0x97, 0x50, 0x46, 0x1, 0x31, 0xFC, 0xFC, 0xFC, 0xFC, 0xAC, 0xA9, 0x53, 0x56, 0x1, 0x33, 0xFE, 0x86, 0x4F, 0x5C, 0x51, 0x53, 0x5B, 0x37, 0x2B, 0x87, 0xF9, 0xF9, 0xF9, 0xF9, 0x26, 0x2, 0x25, 0x49, 0x4D, 0x53, 0x21, 0x1A, 0x66, 0x9B, 0xFD, 0x76, 0x71, 0xCA, 0xFE, 0xC5, 0x1, 0x3B, 0xCA, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x0, 0x5, 0x0, 0x5C, 0xFD, 0xD5, 0x7, 0xD7, 0x8, 0x73, 0x0, 0x3, 0x0, 0x7, 0x0, 0x1F, 0x0, 0x23, 0x0, 0x27, 0x0, 0x0, 0x1, 0x35, 0x33, 0x15, 0x9, 0x3, 0x3, 0x33, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x33, 0x36, 0x36, 0x33, 0x32, 0x15, 0x14, 0x7, 0x6, 0x6, 0x13, 0x35, 0x23, 0x15, 0x13, 0x35, 0x33, 0x15, 0x4, 0x1E, 0x4, 0xFC, 0x3A, 0x3, 0xBC, 0x3, 0xBF, 0xFC, 0x41, 0x77, 0xCA, 0x19, 0x29, 0x44, 0x62, 0xA7, 0x95, 0x7F, 0xB1, 0x2, 0xCB, 0x2, 0x3E, 0x27, 0x71, 0x5D, 0x46, 0x43, 0xC9, 0xCA, 0x7F, 0x4, 0x8, 0x6F, 0x4, 0x4, 0xFA, 0x14, 0x3, 0xCF, 0xFC, 0x31, 0xFC, 0x31, 0x2, 0xDE, 0x33, 0x3E, 0x1B, 0x25, 0x81, 0x52, 0x80, 0x97, 0x7D, 0x8D, 0x37, 0x30, 0x74, 0x5F, 0x3C, 0x31, 0x59, 0xFE, 0x9C, 0xAA, 0xAA, 0xFD, 0x48, 0x4, 0x4, 0x0, 0x2, 0x0, 0x74, 0x3, 0x89, 0x4, 0xC5, 0x5, 0xB9, 0x0, 0x1A, 0x0, 0x27, 0x0, 0x0, 0x1, 0x32, 0x37, 0x33, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x23, 0x11, 0x3, 0x3, 0xE9, 0x60, 0xC, 0x6F, 0x4, 0x7B, 0x5C, 0x77, 0x77, 0x77, 0x77, 0x62, 0x75, 0x5, 0x70, 0x4, 0x37, 0x31, 0x46, 0x39, 0x38, 0xFD, 0xCC, 0x8C, 0x6E, 0x88, 0x90, 0x92, 0x83, 0x6F, 0x87, 0x3, 0xE4, 0x61, 0x52, 0x6A, 0x95, 0x69, 0x35, 0x69, 0x94, 0x6B, 0x59, 0x2C, 0x3E, 0x67, 0x3C, 0x35, 0x3D, 0x66, 0x4F, 0x1, 0x5A, 0xFE, 0xA6, 0x2, 0x1B, 0xFE, 0x83, 0x1, 0x7D, 0xFD, 0xE5, 0x1, 0x4B, 0xFE, 0xB5, 0x0, 0x3, 0x0, 0x74, 0x3, 0x95, 0x4, 0xCC, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x16, 0x0, 0x20, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x1, 0x3, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, 0x23, 0x11, 0x3, 0x21, 0x11, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x3, 0x87, 0x5D, 0x35, 0x44, 0x44, 0x35, 0xFD, 0x8A, 0x8C, 0x6E, 0x88, 0x90, 0x92, 0x83, 0x6F, 0x87, 0x1, 0x6E, 0xCB, 0x64, 0x84, 0x84, 0x64, 0x5, 0x57, 0xFE, 0x97, 0x4B, 0x39, 0x61, 0x39, 0x4B, 0xFE, 0x3E, 0x1, 0x5A, 0xFE, 0xA6, 0x2, 0x1B, 0xFE, 0x83, 0x1, 0x7D, 0xFD, 0xE5, 0x1, 0x4B, 0xFE, 0xB5, 0x2, 0x1B, 0x7B, 0x62, 0x61, 0x62, 0x7B, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x17, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x6C, 0xFE, 0x65, 0xA8, 0x1, 0x99, 0xEE, 0xF3, 0x1, 0x1F, 0x1, 0x74, 0x2, 0xB7, 0x66, 0xFD, 0x4E, 0xDC, 0x3, 0x8E, 0x0, 0x1, 0x0, 0x3C, 0x0, 0x0, 0x2, 0xB2, 0x3, 0x20, 0x0, 0x15, 0x0, 0x0, 0x25, 0x15, 0x21, 0x35, 0x1, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x20, 0x16, 0x15, 0x14, 0x6, 0x7, 0x7, 0x2, 0xB2, 0xFD, 0x9C, 0x1, 0x2C, 0x63, 0x6A, 0x40, 0x3C, 0xBB, 0xA2, 0x1, 0x1C, 0x9E, 0x67, 0x61, 0x91, 0x95, 0x95, 0x7E, 0x1, 0x13, 0x5C, 0x3F, 0x5F, 0x45, 0x32, 0x6E, 0x9E, 0x81, 0x72, 0x52, 0x80, 0x51, 0x75, 0x0, 0x1, 0x0, 0x81, 0x0, 0x0, 0x2, 0x3, 0x3, 0x14, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x35, 0x25, 0x2, 0x3, 0xBA, 0xC8, 0x1, 0x6F, 0x3, 0x14, 0xFC, 0xEC, 0x2, 0x3B, 0x31, 0x93, 0x77, 0x0, 0x2, 0x0, 0x4C, 0xFF, 0xF5, 0x2, 0xAA, 0x3, 0x20, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x27, 0x34, 0x23, 0x22, 0x7, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0xAA, 0xA8, 0x86, 0x87, 0xA9, 0xA8, 0x86, 0x87, 0xA9, 0xBA, 0x76, 0x72, 0x2, 0x76, 0x70, 0x4, 0x1, 0x3E, 0xA9, 0xA0, 0xA0, 0xA9, 0x98, 0xA8, 0xA2, 0xA2, 0xA8, 0xB, 0xA9, 0xA3, 0xB4, 0xA9, 0x9B, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xF5, 0x3, 0xB7, 0x4, 0x9D, 0x0, 0x13, 0x0, 0x20, 0x0, 0x0, 0x5, 0x35, 0x32, 0x36, 0x37, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x10, 0x0, 0x21, 0x13, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x1, 0x18, 0xDB, 0xC0, 0xF, 0x63, 0x92, 0xBC, 0xC1, 0xE7, 0xCA, 0xD0, 0xE6, 0xFE, 0xCA, 0xFE, 0xAA, 0xD9, 0x44, 0x65, 0x18, 0x72, 0x52, 0x5B, 0x65, 0x61, 0xB, 0xC3, 0x8E, 0x90, 0x5C, 0xDA, 0xAC, 0xAA, 0xF3, 0xFF, 0xDD, 0x47, 0xFE, 0xD0, 0xFE, 0xAB, 0x2, 0x3D, 0x3C, 0x29, 0x58, 0x77, 0x74, 0x81, 0x59, 0x56, 0x78, 0x0, 0x3, 0x0, 0x59, 0xFF, 0xF0, 0x3, 0xC4, 0x4, 0x9D, 0x0, 0x14, 0x0, 0x1F, 0x0, 0x2A, 0x0, 0x0, 0x4, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x3, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x13, 0x34, 0x26, 0x22, 0x6, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x1, 0x55, 0xFC, 0x6C, 0x5C, 0xAC, 0xE6, 0xB2, 0xB3, 0xE7, 0xAC, 0x5C, 0x6D, 0xFB, 0x15, 0x5A, 0x4D, 0xA4, 0x58, 0x4E, 0x4D, 0x58, 0x1D, 0x6C, 0xB0, 0x69, 0x69, 0x5A, 0x58, 0x6A, 0x10, 0xAA, 0xA6, 0x61, 0x90, 0x28, 0x54, 0xAA, 0x9E, 0xA8, 0xA8, 0x9E, 0xAA, 0x55, 0x27, 0x90, 0x61, 0xA6, 0xAA, 0x3, 0x5A, 0x41, 0x4F, 0x90, 0x43, 0x51, 0x51, 0xFE, 0x4C, 0x4A, 0x56, 0x56, 0x4A, 0x4B, 0x55, 0x55, 0x0, 0x1, 0x0, 0x3A, 0x0, 0x0, 0x3, 0xD0, 0x4, 0x8D, 0x0, 0x6, 0x0, 0x0, 0x1, 0x15, 0x1, 0x21, 0x1, 0x21, 0x35, 0x3, 0xD0, 0xFD, 0xFF, 0xFF, 0x0, 0x2, 0x2, 0xFD, 0x69, 0x4, 0x8D, 0x87, 0xFB, 0xFA, 0x3, 0xC9, 0xC4, 0x0, 0x2, 0x0, 0x61, 0xFF, 0xF0, 0x3, 0xD7, 0x4, 0x9A, 0x0, 0x13, 0x0, 0x1F, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x35, 0x10, 0x0, 0x21, 0x33, 0x15, 0x7, 0x4, 0x3, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x16, 0x2, 0x25, 0xD3, 0xF1, 0x1, 0x46, 0x1, 0x4D, 0x20, 0x3C, 0xFE, 0x9F, 0x21, 0x6B, 0xA1, 0xBD, 0xB8, 0xE8, 0xCE, 0x5B, 0x6A, 0x65, 0x60, 0x47, 0x6E, 0x19, 0x76, 0x10, 0xFE, 0xD4, 0x4E, 0x1, 0x2C, 0x1, 0x5E, 0xC7, 0x1, 0x11, 0xFE, 0xD8, 0x6D, 0xE4, 0xA2, 0xAA, 0xE6, 0xC3, 0x74, 0xB0, 0x6E, 0x40, 0x2C, 0x2D, 0x7D, 0x7C, 0x0, 0x1, 0x0, 0x67, 0xFF, 0xF0, 0x3, 0xD2, 0x4, 0x8D, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x27, 0x13, 0x21, 0x15, 0x21, 0x7, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x24, 0x27, 0x33, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x4A, 0xC2, 0x49, 0x2, 0xC4, 0xFE, 0x5, 0x21, 0x68, 0x62, 0xBC, 0xD3, 0xD5, 0xDF, 0xA8, 0xFE, 0xFB, 0xA, 0xEF, 0xF, 0xB9, 0x66, 0x5B, 0x70, 0x69, 0x4E, 0x4E, 0x2, 0xC, 0x2F, 0x2, 0x52, 0xC7, 0xF3, 0x2B, 0xCC, 0xB5, 0x9E, 0xEF, 0xAF, 0xA1, 0x8D, 0x77, 0x57, 0x59, 0x71, 0x28, 0x0, 0x2, 0x0, 0x31, 0x0, 0x0, 0x3, 0xED, 0x4, 0x8D, 0x0, 0x3, 0x0, 0xE, 0x0, 0x0, 0x1, 0x21, 0x11, 0x7, 0x1, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0x1, 0x24, 0x1, 0x3B, 0x14, 0x1, 0xA2, 0x9B, 0xF3, 0xFD, 0xDB, 0x9, 0x2, 0x2A, 0xF7, 0x9B, 0x1, 0xBD, 0x1, 0x9A, 0x21, 0xFD, 0xC3, 0xF9, 0xF9, 0x9A, 0x2, 0xFA, 0xFD, 0x30, 0x0, 0x1, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xBD, 0x4, 0x9D, 0x0, 0x26, 0x0, 0x0, 0x5, 0x22, 0x24, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x15, 0x14, 0x4, 0x1, 0xF6, 0xA8, 0xFE, 0xF1, 0xF3, 0x6E, 0x5E, 0x62, 0x69, 0xDE, 0x83, 0x7F, 0x69, 0x66, 0x5A, 0x61, 0x51, 0x6A, 0xF2, 0xF4, 0xB4, 0xC2, 0xF0, 0x62, 0x5F, 0xD6, 0xFE, 0xFB, 0x10, 0xA5, 0xB3, 0x40, 0x55, 0x57, 0x49, 0xA5, 0x2, 0xAF, 0x58, 0x46, 0x40, 0x53, 0x45, 0x3C, 0x95, 0xAF, 0xA9, 0xA3, 0x4F, 0x86, 0x26, 0x3E, 0xD2, 0xA3, 0xB3, 0x0, 0x1, 0x0, 0x43, 0x0, 0x0, 0x3, 0xD8, 0x4, 0x9D, 0x0, 0x17, 0x0, 0x0, 0x25, 0x15, 0x21, 0x35, 0x1, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x5, 0x3, 0xD8, 0xFC, 0x85, 0x1, 0xA9, 0xB1, 0x5C, 0x54, 0x6C, 0x65, 0xF3, 0xEC, 0xD3, 0xC8, 0xE0, 0x97, 0x82, 0xFF, 0x0, 0xC3, 0xC3, 0xA6, 0x1, 0x8E, 0x9E, 0x6C, 0x44, 0x58, 0x6C, 0x53, 0x9F, 0xE3, 0xBD, 0x9F, 0x76, 0xBF, 0x77, 0xD2, 0x0, 0x1, 0x0, 0x96, 0x0, 0x0, 0x2, 0xC4, 0x4, 0x8D, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x35, 0x25, 0x2, 0xC4, 0xF3, 0xFE, 0xC5, 0x2, 0x12, 0x4, 0x8D, 0xFB, 0x73, 0x3, 0x70, 0x53, 0xC3, 0xAD, 0x0, 0x2, 0x0, 0x59, 0xFF, 0xF0, 0x3, 0xC3, 0x4, 0x9D, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x10, 0x6, 0x23, 0x22, 0x26, 0x27, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x27, 0x10, 0x23, 0x22, 0x3, 0x11, 0x10, 0x33, 0x32, 0x13, 0x3, 0xC3, 0xEF, 0xC5, 0xC2, 0xF3, 0x1, 0xF1, 0xC3, 0xC4, 0xF1, 0x1, 0xF3, 0xC3, 0xBC, 0x5, 0xC3, 0xBB, 0x6, 0x1, 0xE2, 0xFF, 0x0, 0xF2, 0xF0, 0xFE, 0xCE, 0xFE, 0xF3, 0xF1, 0xFC, 0x12, 0x1, 0x17, 0xFE, 0xF7, 0xFE, 0xFD, 0xFE, 0xE6, 0x1, 0x6, 0x0, 0x1, 0x0, 0x41, 0x0, 0x0, 0x3, 0xF3, 0x4, 0x8D, 0x0, 0x9, 0x0, 0x0, 0x33, 0x35, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x21, 0x15, 0x41, 0x2, 0x6D, 0xFD, 0x95, 0x3, 0x9F, 0xFD, 0x97, 0x2, 0x7A, 0x8E, 0x3, 0x3B, 0xC4, 0x89, 0xFC, 0xBF, 0xC3, 0x0, 0x1, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x2, 0x94, 0xF3, 0xFE, 0x64, 0x1, 0xB, 0x1, 0xE, 0x1, 0xE, 0x1, 0xB, 0xFE, 0x5D, 0x1, 0xA3, 0x2, 0xEA, 0xFD, 0xEE, 0x2, 0x12, 0xFD, 0x9, 0x0, 0x1, 0x0, 0x16, 0x0, 0x0, 0x4, 0x4A, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x1, 0x13, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x3, 0x21, 0x1, 0x1, 0x1, 0x38, 0xF0, 0xF2, 0x1, 0x1B, 0xFE, 0x89, 0x1, 0x8C, 0xFE, 0xE0, 0xFF, 0xFA, 0xFE, 0xE5, 0x1, 0x81, 0xFE, 0x87, 0x4, 0x8D, 0xFE, 0x6E, 0x1, 0x92, 0xFD, 0xBE, 0xFD, 0xB5, 0x1, 0x99, 0xFE, 0x67, 0x2, 0x4B, 0x2, 0x42, 0x0, 0x1, 0x0, 0x29, 0x0, 0x0, 0x5, 0xE6, 0x4, 0x8D, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x33, 0x13, 0x13, 0x33, 0x13, 0x13, 0x33, 0x1, 0x23, 0x3, 0x3, 0x1, 0x42, 0xFE, 0xE7, 0xEC, 0xB0, 0xD8, 0xD6, 0xD7, 0xAF, 0xED, 0xFE, 0xE6, 0xEB, 0xD9, 0xDB, 0x4, 0x8D, 0xFC, 0x9D, 0x3, 0x63, 0xFC, 0x9F, 0x3, 0x61, 0xFB, 0x73, 0x3, 0x42, 0xFC, 0xBE, 0x0, 0x1, 0x0, 0x9, 0x0, 0x0, 0x4, 0x72, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x0, 0x21, 0x1, 0x21, 0x1, 0x17, 0x37, 0x1, 0x21, 0x1, 0x1, 0xC2, 0xFE, 0x47, 0x1, 0x2, 0x1, 0x1F, 0x14, 0x12, 0x1, 0x21, 0x1, 0x1, 0xFE, 0x47, 0x4, 0x8D, 0xFC, 0xAC, 0x4F, 0x4C, 0x3, 0x57, 0xFB, 0x73, 0x0, 0x1, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x4, 0x8D, 0x0, 0x10, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x4, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3, 0x2B, 0xF3, 0xFE, 0xF0, 0xCB, 0xD0, 0xFE, 0xF4, 0xF2, 0x7E, 0x6C, 0xE4, 0x4, 0x4, 0x8D, 0xFD, 0x0, 0xCA, 0xD3, 0xD3, 0xCA, 0x3, 0x0, 0xFD, 0x0, 0x73, 0x67, 0xD2, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x4, 0x16, 0xFE, 0x7E, 0xF2, 0xFE, 0x83, 0x3, 0xF1, 0x3, 0xC9, 0xFC, 0x37, 0x3, 0xC9, 0xC4, 0x0, 0x1, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xEF, 0x4, 0x9D, 0x0, 0x26, 0x0, 0x0, 0x1, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x3, 0x2, 0x5F, 0x92, 0xCE, 0xDC, 0xF5, 0xC4, 0xD5, 0xFA, 0xF3, 0x6D, 0x70, 0x6A, 0x63, 0x7B, 0x8A, 0xCB, 0xCD, 0xF6, 0xCD, 0x79, 0xE3, 0x91, 0xF3, 0x8C, 0x75, 0x6D, 0x62, 0x1, 0x32, 0x3F, 0x51, 0x23, 0x32, 0xA2, 0x97, 0x93, 0xBA, 0xCA, 0x9D, 0x49, 0x65, 0x56, 0x38, 0x3C, 0x4C, 0x22, 0x32, 0xAC, 0x97, 0x99, 0xAE, 0x50, 0xA7, 0x82, 0x67, 0x5A, 0x53, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x4, 0x3A, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x17, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x13, 0x3, 0x23, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x1, 0x15, 0x1, 0x69, 0xD6, 0x6B, 0x6C, 0x69, 0x6F, 0xF7, 0xEC, 0xE0, 0xF3, 0x1, 0xC8, 0xD8, 0xF3, 0x78, 0x68, 0x1, 0x11, 0x3, 0xC9, 0xFE, 0xA3, 0x5E, 0x4F, 0x50, 0x60, 0xFC, 0x37, 0x1, 0xA9, 0xFE, 0x57, 0x4, 0x8D, 0xB5, 0xAC, 0x7F, 0x9B, 0x2C, 0xFE, 0x25, 0xB, 0x0, 0x2, 0x0, 0x4D, 0xFF, 0x2F, 0x4, 0x6D, 0x4, 0x9D, 0x0, 0x12, 0x0, 0x20, 0x0, 0x0, 0x5, 0x25, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x11, 0x15, 0x14, 0x6, 0x7, 0x17, 0x3, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x3, 0xCE, 0xFE, 0xF7, 0x31, 0x36, 0xE9, 0xFE, 0xD8, 0x1, 0x26, 0xE9, 0xEC, 0x1, 0x25, 0x6F, 0x62, 0xCE, 0xEF, 0x97, 0x88, 0x85, 0x98, 0x9A, 0x85, 0x87, 0x96, 0xD1, 0xC9, 0x8, 0x1, 0x32, 0x1, 0xA, 0x34, 0x1, 0xA, 0x1, 0x33, 0xFE, 0xCD, 0xFE, 0xF6, 0x34, 0xA1, 0xF2, 0x49, 0x99, 0x2, 0xAB, 0xB5, 0xC1, 0xC1, 0xB5, 0x36, 0xB5, 0xC3, 0xC3, 0xB5, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x4, 0x2C, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x69, 0xF3, 0x74, 0x6A, 0x6A, 0x74, 0xF3, 0xF3, 0x1, 0xE6, 0xDC, 0xF4, 0xF4, 0xDC, 0x3, 0xC9, 0xFE, 0x95, 0x60, 0x4C, 0x4B, 0x74, 0xFD, 0xD1, 0xFE, 0x66, 0x4, 0x8D, 0xDA, 0xA7, 0xA9, 0xC9, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x11, 0x27, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x6F, 0xFE, 0xDE, 0xEC, 0xE9, 0xFE, 0xD8, 0x1, 0x26, 0xE9, 0xEC, 0x1, 0x24, 0xF2, 0x97, 0x87, 0x85, 0x98, 0x9A, 0x85, 0x87, 0x95, 0x2, 0x2C, 0xFE, 0xF6, 0xFE, 0xCE, 0x1, 0x32, 0x1, 0xA, 0x34, 0x1, 0xA, 0x1, 0x33, 0xFE, 0xCD, 0xFE, 0xF6, 0x2, 0xB5, 0xC1, 0xC1, 0xB5, 0x36, 0xB5, 0xC3, 0xC3, 0xB5, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x67, 0x4, 0x8D, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x4, 0x67, 0xF2, 0xFD, 0xF4, 0xF3, 0xF3, 0x2, 0xC, 0x4, 0x8D, 0xFB, 0x73, 0x3, 0x1C, 0xFC, 0xE4, 0x4, 0x8D, 0xFC, 0xE4, 0x3, 0x1C, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x5, 0x90, 0x4, 0x8D, 0x0, 0xE, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x1, 0x21, 0x11, 0x23, 0x11, 0x13, 0x1, 0x23, 0x1, 0x1, 0x69, 0xF3, 0x1, 0x3D, 0x1, 0x50, 0x1, 0x4F, 0x1, 0x3E, 0xF3, 0x19, 0xFE, 0xA1, 0xA9, 0xFE, 0xA2, 0x1, 0x3C, 0xFE, 0xC4, 0x4, 0x8D, 0xFC, 0xB6, 0x3, 0x4A, 0xFB, 0x73, 0x1, 0x3C, 0x2, 0x36, 0xFC, 0x8E, 0x3, 0x71, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x3, 0x94, 0x4, 0x8D, 0x0, 0x5, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x15, 0x76, 0xF3, 0x2, 0x2B, 0x4, 0x8D, 0xFC, 0x36, 0xC3, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x69, 0x4, 0x8D, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x37, 0x1, 0x21, 0x1, 0x1, 0x3, 0x47, 0xFE, 0xAA, 0x88, 0xF3, 0xF3, 0x6F, 0x1, 0x4E, 0x1, 0x2D, 0xFE, 0x42, 0x1, 0xD4, 0x1, 0xDB, 0x84, 0xFE, 0xA9, 0x4, 0x8D, 0xFD, 0xFD, 0x87, 0x1, 0x7C, 0xFD, 0xF7, 0xFD, 0x7C, 0x0, 0x1, 0x0, 0x25, 0xFF, 0xF0, 0x3, 0x65, 0x4, 0x8D, 0x0, 0xD, 0x0, 0x0, 0x1, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x33, 0x32, 0x37, 0x2, 0x71, 0xF4, 0xEA, 0xAB, 0xBB, 0xF0, 0xF3, 0xB8, 0xA0, 0x1, 0x4, 0x8D, 0xFC, 0xE1, 0xB5, 0xC9, 0xB3, 0xBD, 0xAD, 0xB9, 0x0, 0x1, 0x0, 0x85, 0x0, 0x0, 0x1, 0x78, 0x4, 0x8D, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x78, 0xF3, 0x4, 0x8D, 0xFB, 0x73, 0x4, 0x8D, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x68, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x3, 0x76, 0xFD, 0xF3, 0xF3, 0xF3, 0x2, 0xD, 0xF2, 0x1, 0xDB, 0xFE, 0x25, 0x4, 0x8D, 0xFE, 0x12, 0x1, 0xEE, 0xFB, 0x73, 0x0, 0x1, 0x0, 0x55, 0xFF, 0xF0, 0x4, 0x49, 0x4, 0x9D, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x11, 0x6, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x20, 0x3, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x23, 0x35, 0x4, 0x49, 0x2B, 0xDD, 0xD0, 0xF0, 0xFE, 0xD4, 0x1, 0x1A, 0xF0, 0xEF, 0xE5, 0x15, 0xEC, 0x10, 0x6F, 0x79, 0xFE, 0xEC, 0x8, 0xA2, 0x92, 0x65, 0x60, 0x15, 0xF8, 0x2, 0x65, 0xFE, 0x2E, 0x31, 0x72, 0x1, 0x26, 0x1, 0xE, 0x45, 0x1, 0xD, 0x1, 0x27, 0xD9, 0xAA, 0x58, 0x68, 0xFE, 0xA5, 0x5B, 0xB5, 0xBC, 0x27, 0x12, 0xC7, 0xB2, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x3, 0x9E, 0x4, 0x8D, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x3, 0x5C, 0xFE, 0xD, 0xF3, 0x3, 0x28, 0xFD, 0xCB, 0x1, 0xF3, 0x1, 0xDB, 0xFE, 0x25, 0x4, 0x8D, 0xC4, 0xFE, 0xD6, 0x0, 0x1, 0x0, 0x3F, 0xFF, 0x13, 0x3, 0xEF, 0x5, 0x73, 0x0, 0x2B, 0x0, 0x0, 0x5, 0x23, 0x35, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x2, 0x7F, 0xA0, 0xA2, 0xFE, 0xF3, 0x8C, 0x75, 0x6D, 0x62, 0x5F, 0x92, 0xCE, 0xDC, 0xCF, 0xA9, 0xA0, 0xAB, 0xC5, 0xF3, 0x6D, 0x70, 0x6A, 0x63, 0x7B, 0x8A, 0xCB, 0xCD, 0xC7, 0xA9, 0xED, 0xE1, 0x11, 0xB6, 0xAE, 0x67, 0x5A, 0x53, 0x37, 0x3F, 0x51, 0x23, 0x32, 0xA2, 0x97, 0x86, 0xB4, 0x10, 0xD9, 0xDC, 0x16, 0xC1, 0x8A, 0x49, 0x65, 0x56, 0x38, 0x3C, 0x4C, 0x22, 0x32, 0xAC, 0x97, 0x89, 0xA9, 0x11, 0x0, 0x1, 0x0, 0x39, 0x0, 0x0, 0x4, 0x1A, 0x4, 0x9D, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x36, 0x36, 0x27, 0x35, 0x23, 0x35, 0x33, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x17, 0x17, 0x21, 0x15, 0x21, 0x16, 0x7, 0x21, 0x4, 0x1A, 0xFC, 0x64, 0xA, 0x35, 0x1F, 0x3, 0xA0, 0x9B, 0x3, 0x7, 0xDD, 0xBA, 0xCD, 0xCE, 0xF3, 0x62, 0x45, 0x4C, 0x57, 0x4, 0x4, 0x1, 0x81, 0xFE, 0x85, 0x7, 0x50, 0x2, 0x96, 0xC4, 0xE, 0xBA, 0x53, 0x7, 0x93, 0x69, 0xD2, 0xE9, 0xDD, 0xB3, 0x71, 0x5A, 0x7E, 0x78, 0x69, 0x93, 0xB0, 0x72, 0x0, 0x1, 0x0, 0xA, 0x0, 0x0, 0x3, 0x9A, 0x4, 0x8D, 0x0, 0x18, 0x0, 0x0, 0x25, 0x21, 0x15, 0x23, 0x35, 0x21, 0x35, 0x21, 0x35, 0x27, 0x21, 0x35, 0x33, 0x1, 0x21, 0x13, 0x13, 0x33, 0x1, 0x33, 0x15, 0x21, 0x7, 0x15, 0x21, 0x3, 0x53, 0xFE, 0xF4, 0xF2, 0xFE, 0xF5, 0x1, 0xB, 0x4, 0xFE, 0xF9, 0xC5, 0xFE, 0xFB, 0x1, 0x1, 0xC7, 0xC9, 0xFF, 0xFE, 0xFA, 0xBF, 0xFF, 0x0, 0xC, 0x1, 0xC, 0xD9, 0xD9, 0xD9, 0x92, 0x3D, 0xA, 0x93, 0x2, 0x48, 0xFE, 0x1, 0x1, 0xFF, 0xFD, 0xB8, 0x93, 0x1A, 0x2D, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x3, 0x97, 0x4, 0x8D, 0x0, 0x5, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x97, 0xFD, 0xD2, 0xF3, 0x3, 0x21, 0x3, 0xC9, 0xFC, 0x37, 0x4, 0x8D, 0x0, 0x2, 0x0, 0x9, 0x0, 0x0, 0x4, 0x72, 0x4, 0x8D, 0x0, 0x3, 0x0, 0x8, 0x0, 0x0, 0x33, 0x1, 0x33, 0x1, 0x1, 0x3, 0x21, 0x3, 0x27, 0x9, 0x1, 0xB9, 0xF7, 0x1, 0xB9, 0xFD, 0xB8, 0xDD, 0x1, 0xE2, 0xDF, 0x12, 0x4, 0x8D, 0xFB, 0x73, 0x3, 0x54, 0xFD, 0x70, 0x2, 0x93, 0x4C, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x11, 0x27, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x27, 0x15, 0x21, 0x35, 0x4, 0x6F, 0xFE, 0xDE, 0xEC, 0xE9, 0xFE, 0xD8, 0x1, 0x26, 0xE9, 0xEC, 0x1, 0x24, 0xF2, 0x97, 0x87, 0x85, 0x98, 0x9A, 0x85, 0x87, 0x95, 0x45, 0xFE, 0x5A, 0x2, 0x2C, 0xFE, 0xF6, 0xFE, 0xCE, 0x1, 0x32, 0x1, 0xA, 0x34, 0x1, 0xA, 0x1, 0x33, 0xFE, 0xCD, 0xFE, 0xF6, 0x2, 0xB5, 0xC1, 0xC1, 0xB5, 0x36, 0xB5, 0xC3, 0xC3, 0xB5, 0x77, 0xC4, 0xC4, 0x0, 0x1, 0x0, 0x9, 0x0, 0x0, 0x4, 0x72, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x0, 0x21, 0x21, 0x1, 0x33, 0x1, 0x21, 0x1, 0x27, 0x7, 0x1, 0xB, 0xFE, 0xFE, 0x1, 0xB9, 0xF7, 0x1, 0xB9, 0xFE, 0xFF, 0xFE, 0xDF, 0x12, 0x14, 0x4, 0x8D, 0xFB, 0x73, 0x3, 0x57, 0x4C, 0x4F, 0x0, 0x3, 0x0, 0x43, 0x0, 0x0, 0x3, 0x56, 0x4, 0x8D, 0x0, 0x3, 0x0, 0x7, 0x0, 0xB, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x1, 0x15, 0x21, 0x35, 0x3, 0x56, 0xFC, 0xED, 0x2, 0xC9, 0xFD, 0x7E, 0x2, 0xCC, 0xFC, 0xED, 0x4, 0x8D, 0xC4, 0xC4, 0xFE, 0x32, 0xC3, 0xC3, 0xFE, 0x5, 0xC4, 0xC4, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x62, 0x4, 0x8D, 0x0, 0x7, 0x0, 0x0, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x3, 0x6E, 0xFD, 0xFB, 0xF3, 0x3, 0xEC, 0x3, 0xC9, 0xFC, 0x37, 0x4, 0x8D, 0xFB, 0x73, 0x0, 0x1, 0x0, 0x45, 0x0, 0x1, 0x3, 0xE7, 0x4, 0x8D, 0x0, 0xC, 0x0, 0x0, 0x37, 0x35, 0x1, 0x1, 0x35, 0x21, 0x15, 0x21, 0x1, 0x15, 0x1, 0x21, 0x15, 0x45, 0x1, 0x3E, 0xFE, 0xC2, 0x3, 0x7B, 0xFD, 0xBB, 0x1, 0x16, 0xFE, 0xE5, 0x2, 0x71, 0x1, 0x98, 0x1, 0xB6, 0x1, 0xA7, 0x97, 0xC4, 0xFE, 0x90, 0x14, 0xFE, 0x7F, 0xC3, 0x0, 0x3, 0x0, 0x51, 0x0, 0x0, 0x5, 0x4D, 0x4, 0x8D, 0x0, 0x11, 0x0, 0x18, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x23, 0x35, 0x26, 0x24, 0x35, 0x34, 0x24, 0x37, 0x35, 0x33, 0x15, 0x16, 0x4, 0x15, 0x14, 0x4, 0x7, 0x1, 0x6, 0x16, 0x17, 0x11, 0x6, 0x6, 0x5, 0x34, 0x26, 0x27, 0x11, 0x36, 0x36, 0x3, 0x49, 0xF2, 0xDF, 0xFE, 0xD9, 0x1, 0x27, 0xDF, 0xF2, 0xDE, 0x1, 0x26, 0xFE, 0xDA, 0xDE, 0xFD, 0xF9, 0x1, 0x93, 0x83, 0x83, 0x91, 0x3, 0x18, 0x90, 0x82, 0x82, 0x90, 0x6D, 0xD, 0xED, 0xDD, 0xDB, 0xEA, 0xD, 0x77, 0x77, 0xE, 0xE8, 0xDA, 0xDD, 0xEE, 0xE, 0x1, 0xD7, 0x8A, 0x84, 0x9, 0x2, 0x29, 0x9, 0x82, 0x85, 0x86, 0x81, 0x9, 0xFD, 0xD7, 0xA, 0x85, 0x0, 0x1, 0x0, 0x51, 0x0, 0x0, 0x5, 0x4, 0x4, 0x8D, 0x0, 0x16, 0x0, 0x0, 0x21, 0x23, 0x11, 0x26, 0x2, 0x11, 0x11, 0x33, 0x11, 0x12, 0x17, 0x11, 0x33, 0x11, 0x36, 0x36, 0x35, 0x11, 0x33, 0x11, 0x6, 0x2, 0x7, 0x3, 0x24, 0xF3, 0xE5, 0xFB, 0xF3, 0x6, 0xE7, 0xF3, 0x80, 0x6D, 0xF3, 0x3, 0xFB, 0xE2, 0x1, 0x18, 0x17, 0x1, 0x2B, 0x1, 0x5, 0x1, 0x2E, 0xFE, 0xC1, 0xFE, 0xBD, 0x2C, 0x2, 0xAE, 0xFD, 0x52, 0x18, 0xC2, 0xA6, 0x1, 0x2E, 0xFE, 0xC6, 0xFB, 0xFE, 0xDB, 0x1A, 0x0, 0x1, 0x0, 0x5F, 0x0, 0x0, 0x4, 0x84, 0x4, 0x9D, 0x0, 0x1F, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x26, 0x26, 0x35, 0x35, 0x34, 0x0, 0x20, 0x0, 0x15, 0x15, 0x10, 0x7, 0x33, 0x15, 0x21, 0x35, 0x36, 0x13, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x10, 0x17, 0x2, 0x3C, 0xFE, 0x30, 0xB1, 0x59, 0x65, 0x1, 0x15, 0x1, 0xFA, 0x1, 0x16, 0xBC, 0xB6, 0xFE, 0x2F, 0xDE, 0x6, 0x88, 0x98, 0x96, 0x89, 0xEA, 0xC4, 0x4A, 0xE0, 0x8C, 0x22, 0xD3, 0x1, 0x2E, 0xFE, 0xD2, 0xD2, 0x23, 0xFE, 0xE7, 0x9D, 0xC4, 0xC8, 0x41, 0x1, 0x4A, 0x3B, 0x92, 0xB8, 0xB8, 0x92, 0x2A, 0xFE, 0xAB, 0x47, 0x0, 0x1, 0x0, 0x25, 0xFF, 0xEC, 0x5, 0x53, 0x4, 0x8D, 0x0, 0x18, 0x0, 0x0, 0x1, 0x14, 0x4, 0x23, 0x35, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x36, 0x33, 0x32, 0x16, 0x5, 0x53, 0xFE, 0xFE, 0xD9, 0x72, 0x76, 0xE9, 0x81, 0x85, 0xF3, 0xFE, 0xA7, 0x3, 0xAC, 0xFE, 0xA0, 0x86, 0x91, 0xCE, 0xFD, 0x1, 0x69, 0xCA, 0xB3, 0xBD, 0x54, 0x69, 0xD9, 0x26, 0xFD, 0xE7, 0x3, 0xC9, 0xC4, 0xC4, 0xEC, 0x26, 0xC9, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x4, 0x9D, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x6, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x3, 0x21, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0x43, 0xF, 0xFD, 0xE7, 0xED, 0xFE, 0xED, 0x1, 0x19, 0xEC, 0xE8, 0xF4, 0x13, 0xF3, 0xA, 0x6F, 0x83, 0xFA, 0x17, 0x1, 0x80, 0xFE, 0x80, 0x9, 0x80, 0x83, 0x80, 0x75, 0xB, 0x1, 0x85, 0xB2, 0xE3, 0x1, 0x2D, 0x1, 0x3, 0x4C, 0x1, 0x3, 0x1, 0x2E, 0xE9, 0xB3, 0x61, 0x78, 0xFE, 0xCF, 0xC3, 0x93, 0xA0, 0x6A, 0x68, 0x0, 0x2, 0x0, 0x25, 0x0, 0x0, 0x7, 0x15, 0x4, 0x8D, 0x0, 0x17, 0x0, 0x20, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x16, 0x17, 0x16, 0x15, 0x14, 0x6, 0x23, 0x21, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x25, 0x27, 0x6B, 0x47, 0xA, 0x13, 0x3, 0x3B, 0xF9, 0xD0, 0x78, 0x7E, 0xF6, 0xD8, 0xFE, 0x1C, 0xFE, 0xA4, 0xE, 0xF, 0xA7, 0xDE, 0x3, 0xF1, 0xF1, 0x70, 0x6B, 0x6B, 0x70, 0xF1, 0xCD, 0x3, 0x8, 0xC3, 0xF6, 0x1, 0xFC, 0xFE, 0x6C, 0x2, 0x64, 0x69, 0xAA, 0xA8, 0xD8, 0x3, 0xC9, 0xFE, 0xA0, 0xFE, 0xC4, 0xFE, 0xD7, 0x4, 0xC4, 0x73, 0x4B, 0x49, 0x6A, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x7, 0x19, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x1C, 0x0, 0x0, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x3, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x16, 0x17, 0x16, 0x15, 0x14, 0x6, 0x23, 0x4, 0x5A, 0xF1, 0x70, 0x6B, 0x6B, 0x70, 0xF1, 0xF3, 0xFE, 0x2, 0xF3, 0xF3, 0x1, 0xFE, 0xF3, 0xF9, 0xD0, 0x78, 0x7E, 0xF6, 0xD8, 0xC4, 0x73, 0x4B, 0x49, 0x6A, 0xFD, 0xCB, 0x1, 0xDB, 0xFE, 0x25, 0x4, 0x8D, 0xFE, 0x12, 0x1, 0xEE, 0xFE, 0x6C, 0x2, 0x64, 0x69, 0xAA, 0xA8, 0xD8, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x5, 0x53, 0x4, 0x8D, 0x0, 0x15, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x15, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x3, 0x77, 0x81, 0x85, 0xF3, 0xFE, 0xA7, 0x3, 0xAC, 0xFE, 0xA0, 0x86, 0x8F, 0xD0, 0xFD, 0xF3, 0x74, 0x2, 0x3F, 0x26, 0xFD, 0xE7, 0x3, 0xC9, 0xC4, 0xC4, 0xEC, 0x26, 0xC6, 0xE2, 0xFE, 0xA5, 0x1, 0x5B, 0x7D, 0x67, 0x0, 0x1, 0x0, 0x76, 0xFE, 0x9F, 0x4, 0x62, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x21, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x4, 0x62, 0xFE, 0x8A, 0xF3, 0xFE, 0x7D, 0xF3, 0x2, 0x5, 0xF4, 0xFE, 0x9F, 0x1, 0x61, 0x4, 0x8D, 0xFC, 0x37, 0x3, 0xC9, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x4, 0x29, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x14, 0x0, 0x0, 0x33, 0x11, 0x21, 0x15, 0x21, 0x15, 0x33, 0x16, 0x16, 0x10, 0x6, 0x23, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x76, 0x3, 0x3C, 0xFD, 0xB7, 0xF9, 0xD4, 0xF3, 0xF7, 0xD8, 0x71, 0x6B, 0x6B, 0x71, 0xF1, 0x4, 0x8D, 0xC2, 0xE0, 0x2, 0xC5, 0xFE, 0xAA, 0xCE, 0xC4, 0x69, 0x4E, 0x4A, 0x62, 0xFE, 0x9D, 0x0, 0x2, 0x0, 0x27, 0xFE, 0xAE, 0x5, 0x16, 0x4, 0x8D, 0x0, 0x5, 0x0, 0x14, 0x0, 0x0, 0x25, 0x21, 0x11, 0x21, 0x3, 0x2, 0x3, 0x11, 0x23, 0x13, 0x33, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x11, 0x23, 0x11, 0x1, 0x9D, 0x1, 0xF0, 0xFE, 0xA1, 0x8, 0x11, 0xFA, 0xF4, 0x1, 0x5C, 0x67, 0x47, 0x6, 0xA, 0x3, 0x3E, 0x96, 0xF3, 0xC4, 0x3, 0x5, 0xFE, 0xEC, 0xFE, 0xC3, 0xFE, 0x88, 0xFE, 0xAE, 0x2, 0x16, 0x72, 0xEE, 0xCD, 0x1, 0x9C, 0xFC, 0x37, 0xFD, 0xEA, 0x1, 0x52, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x6, 0x20, 0x4, 0x8D, 0x0, 0x15, 0x0, 0x0, 0x21, 0x11, 0x23, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x33, 0x11, 0x33, 0x11, 0x33, 0x13, 0x21, 0x1, 0x1, 0x21, 0x3, 0x23, 0x11, 0x2, 0xA4, 0x60, 0xFC, 0xFE, 0xD3, 0x1, 0x5C, 0xFE, 0xC3, 0x1, 0x1F, 0xF6, 0x55, 0xF3, 0x54, 0xF6, 0x1, 0x1F, 0xFE, 0xC3, 0x1, 0x5D, 0xFE, 0xD3, 0xFD, 0x5F, 0x1, 0xD6, 0xFE, 0x2A, 0x2, 0x55, 0x2, 0x38, 0xFE, 0x20, 0x1, 0xE0, 0xFE, 0x20, 0x1, 0xE0, 0xFD, 0xD1, 0xFD, 0xA2, 0x1, 0xD6, 0xFE, 0x2A, 0x0, 0x1, 0x0, 0x43, 0xFF, 0xF0, 0x3, 0xE8, 0x4, 0x9D, 0x0, 0x27, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x9, 0x69, 0xD2, 0x8B, 0xF3, 0x5, 0x7A, 0x56, 0x77, 0x73, 0xE0, 0x94, 0x9D, 0xC5, 0x65, 0x76, 0x4F, 0x72, 0xF3, 0xFB, 0xBA, 0xCD, 0xFF, 0x6E, 0x5C, 0x6F, 0x6E, 0xFE, 0xEC, 0x10, 0x40, 0x97, 0x80, 0x50, 0x43, 0x57, 0x47, 0xA7, 0x3, 0xB0, 0x5, 0x93, 0x3E, 0x56, 0x3E, 0x43, 0x9B, 0xAB, 0x9F, 0x9E, 0x59, 0x8C, 0x26, 0x25, 0x90, 0x5C, 0xAA, 0xAA, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x6E, 0x4, 0x8D, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x33, 0x11, 0x1, 0x33, 0x11, 0x23, 0x11, 0x1, 0x69, 0xF3, 0xF3, 0x2, 0x12, 0xF3, 0xF3, 0x4, 0x8D, 0xFC, 0xDF, 0x3, 0x21, 0xFB, 0x73, 0x3, 0x22, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x40, 0x4, 0x8D, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x12, 0xFE, 0xC1, 0x6A, 0xF3, 0xF3, 0x64, 0x1, 0x38, 0x1, 0x1C, 0xFE, 0x72, 0x1, 0xAD, 0x1, 0xD6, 0xFE, 0x2A, 0x4, 0x8D, 0xFE, 0x20, 0x1, 0xE0, 0xFD, 0xC5, 0xFD, 0xAE, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x4, 0x56, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x33, 0x35, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x3, 0x2, 0x2, 0x7, 0x25, 0x27, 0x6A, 0x47, 0xA, 0x14, 0x3, 0x3B, 0xF3, 0xFE, 0xA3, 0xE, 0x10, 0xA7, 0xDA, 0xCD, 0x4, 0xC, 0xBB, 0xFB, 0x1, 0xFA, 0xFB, 0x73, 0x3, 0xC9, 0xFE, 0xA0, 0xFE, 0xC6, 0xFE, 0xD6, 0x5, 0x0, 0x1, 0x0, 0x20, 0xFF, 0xEC, 0x4, 0x3A, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x5, 0x27, 0x37, 0x17, 0x32, 0x36, 0x37, 0x1, 0x21, 0x13, 0x17, 0x13, 0x21, 0x1, 0x6, 0x6, 0x1, 0x40, 0x67, 0x2, 0x57, 0x3B, 0x41, 0x16, 0xFE, 0x5C, 0x1, 0xE, 0xFB, 0x13, 0xF4, 0x1, 0xA, 0xFE, 0x6C, 0x34, 0x8E, 0x14, 0x5, 0xC1, 0x4, 0x38, 0x29, 0x3, 0x7E, 0xFD, 0xBE, 0x37, 0x2, 0x79, 0xFC, 0x76, 0x73, 0xA4, 0x0, 0x1, 0x0, 0x76, 0xFE, 0xAE, 0x5, 0x25, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x5, 0x11, 0xDE, 0xFC, 0x43, 0xF3, 0x2, 0x5, 0xF4, 0xC3, 0xFE, 0xAE, 0x1, 0x52, 0x4, 0x8D, 0xFC, 0x37, 0x3, 0xC9, 0xFC, 0x37, 0x0, 0x1, 0x0, 0x41, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x11, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x4, 0x16, 0xF3, 0x84, 0x82, 0xDB, 0xFE, 0xFF, 0xF3, 0x75, 0x74, 0x81, 0x85, 0xF3, 0x1, 0xAB, 0x26, 0xC5, 0xE2, 0x1, 0x61, 0xFE, 0xA0, 0x7C, 0x69, 0x26, 0x2, 0x1F, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x6, 0xF, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x76, 0xF3, 0x1, 0x60, 0xF3, 0x1, 0x60, 0xF3, 0x4, 0x8D, 0xFC, 0x37, 0x3, 0xC9, 0xFC, 0x37, 0x3, 0xC9, 0xFB, 0x73, 0x0, 0x1, 0x0, 0x76, 0xFE, 0xAE, 0x6, 0xD2, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x6, 0xBE, 0xDE, 0xFA, 0x96, 0xF3, 0x1, 0x60, 0xF3, 0x1, 0x60, 0xF3, 0xC3, 0xFE, 0xAE, 0x1, 0x52, 0x4, 0x8D, 0xFC, 0x37, 0x3, 0xC9, 0xFC, 0x37, 0x3, 0xC9, 0xFC, 0x37, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x5, 0x1B, 0x4, 0x8D, 0x0, 0xD, 0x0, 0x16, 0x0, 0x0, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x16, 0x17, 0x16, 0x15, 0x14, 0x6, 0x23, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x1, 0x69, 0xFE, 0xA1, 0x2, 0x52, 0xF9, 0xD0, 0x78, 0x7E, 0xF6, 0xD8, 0x71, 0x6B, 0x6B, 0x71, 0xF1, 0x3, 0xC9, 0xC4, 0xFE, 0x6C, 0x2, 0x64, 0x69, 0xAA, 0xA8, 0xD8, 0xC4, 0x73, 0x4B, 0x49, 0x6A, 0xFE, 0x8F, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x5, 0xAA, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x84, 0x0, 0x0, 0x0, 0x7, 0x7, 0x5F, 0x4, 0x32, 0x0, 0x0, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x4, 0x29, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x14, 0x0, 0x0, 0x33, 0x11, 0x33, 0x11, 0x33, 0x16, 0x16, 0x17, 0x15, 0x14, 0x6, 0x23, 0x35, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x76, 0xF3, 0xF5, 0xD5, 0xF5, 0x1, 0xF7, 0xD8, 0x71, 0x6B, 0x6B, 0x71, 0xF1, 0x4, 0x8D, 0xFE, 0x6C, 0x1, 0xCF, 0xA7, 0x2, 0xA8, 0xD8, 0xC4, 0x73, 0x4B, 0x49, 0x6A, 0xFE, 0x8F, 0x0, 0x1, 0x0, 0x3D, 0xFF, 0xF0, 0x4, 0x31, 0x4, 0x9D, 0x0, 0x1C, 0x0, 0x0, 0x5, 0x22, 0x26, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x21, 0x35, 0x21, 0x2, 0x23, 0x22, 0x6, 0x7, 0x23, 0x36, 0x36, 0x33, 0x32, 0x0, 0x11, 0x15, 0x10, 0x0, 0x2, 0x30, 0xE7, 0xFD, 0xF, 0xF3, 0xC, 0x74, 0x80, 0x83, 0x80, 0x9, 0xFE, 0x80, 0x1, 0x80, 0x17, 0xFA, 0x82, 0x6F, 0xB, 0xF2, 0x12, 0xF4, 0xE8, 0xED, 0x1, 0x19, 0xFE, 0xED, 0x10, 0xE3, 0xB2, 0x68, 0x6A, 0xA0, 0x93, 0xC3, 0x1, 0x31, 0x78, 0x61, 0xB3, 0xE9, 0xFE, 0xD2, 0xFE, 0xFD, 0x4C, 0xFE, 0xFD, 0xFE, 0xD3, 0x0, 0x2, 0x0, 0x76, 0xFF, 0xF0, 0x6, 0x42, 0x4, 0x9D, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x5, 0x22, 0x0, 0x27, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x36, 0x0, 0x33, 0x32, 0x0, 0x11, 0x15, 0x10, 0x0, 0x13, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x33, 0xD9, 0xFE, 0xE1, 0x16, 0xBC, 0xF3, 0xF3, 0xBC, 0x14, 0x1, 0x1F, 0xD9, 0xEC, 0x1, 0x25, 0xFE, 0xDD, 0x30, 0x97, 0x87, 0x85, 0x98, 0x9A, 0x85, 0x87, 0x95, 0x10, 0x1, 0x9, 0xE9, 0xFE, 0x1E, 0x4, 0x8D, 0xFE, 0x19, 0xEB, 0x1, 0xC, 0xFE, 0xCD, 0xFE, 0xF6, 0x34, 0xFE, 0xF6, 0xFE, 0xCE, 0x2, 0x72, 0xB5, 0xC1, 0xC1, 0xB5, 0x36, 0xB5, 0xC3, 0xC3, 0xB5, 0x0, 0x2, 0x0, 0x44, 0x0, 0x0, 0x4, 0x12, 0x4, 0x8D, 0x0, 0x7, 0x0, 0x14, 0x0, 0x0, 0x1, 0x11, 0x23, 0x22, 0x6, 0x14, 0x16, 0x33, 0x13, 0x11, 0x23, 0x3, 0x21, 0x1, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, 0x11, 0x3, 0x1F, 0xDC, 0x6A, 0x63, 0x63, 0x6A, 0xDC, 0xF1, 0xE6, 0xFE, 0xFC, 0x1, 0x16, 0xD7, 0xEE, 0xD3, 0x1, 0xCE, 0x2, 0x80, 0x1, 0x49, 0x5E, 0x92, 0x59, 0xFD, 0x80, 0x1, 0xBD, 0xFE, 0x43, 0x2, 0xC, 0x55, 0xD0, 0xA3, 0xB9, 0xFB, 0x73, 0x0, 0x1, 0x0, 0xA, 0x0, 0x0, 0x4, 0x0, 0x4, 0x8D, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x2, 0xA8, 0xD6, 0xF3, 0xD5, 0xD5, 0x3, 0x21, 0xFD, 0xD2, 0xD6, 0x1, 0xE6, 0xFE, 0x1A, 0x1, 0xE6, 0xAB, 0x1, 0xFC, 0xC4, 0xFE, 0xC8, 0x0, 0x1, 0x0, 0x1B, 0xFE, 0xAE, 0x6, 0x6D, 0x4, 0x8D, 0x0, 0x19, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x3, 0x23, 0x11, 0x23, 0x11, 0x23, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x33, 0x11, 0x33, 0x11, 0x33, 0x13, 0x21, 0x1, 0x13, 0x33, 0x6, 0x6D, 0xD0, 0xAA, 0xFD, 0x5F, 0xF3, 0x60, 0xFC, 0xFE, 0xD3, 0x1, 0x5C, 0xFE, 0xC3, 0x1, 0x1F, 0xF6, 0x55, 0xF3, 0x54, 0xF6, 0x1, 0x1F, 0xFE, 0xC3, 0xED, 0xBD, 0xFE, 0xAE, 0x1, 0x52, 0x1, 0xD6, 0xFE, 0x2A, 0x1, 0xD6, 0xFE, 0x2A, 0x2, 0x55, 0x2, 0x38, 0xFE, 0x20, 0x1, 0xE0, 0xFE, 0x20, 0x1, 0xE0, 0xFD, 0xD1, 0xFE, 0x64, 0x0, 0x1, 0x0, 0x76, 0xFE, 0xAE, 0x4, 0x7D, 0x4, 0x8D, 0x0, 0x10, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x33, 0x4, 0x7D, 0xD0, 0x9B, 0xFE, 0xC1, 0x6A, 0xF3, 0xF3, 0x64, 0x1, 0x38, 0x1, 0x1C, 0xFE, 0x72, 0x1, 0x21, 0xC9, 0xFE, 0xAE, 0x1, 0x52, 0x1, 0xD6, 0xFE, 0x2A, 0x4, 0x8D, 0xFE, 0x20, 0x1, 0xE0, 0xFD, 0xC5, 0xFE, 0x70, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0xFE, 0x4, 0x8D, 0x0, 0x14, 0x0, 0x0, 0x1, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x15, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x23, 0x15, 0x1, 0xB1, 0x48, 0xF3, 0xF3, 0x48, 0xA2, 0x37, 0x1, 0x38, 0x1, 0x1D, 0xFE, 0x72, 0x1, 0xAD, 0xFE, 0xD1, 0xFE, 0xC2, 0x3E, 0x1, 0xB, 0xCB, 0xFE, 0x2A, 0x4, 0x8D, 0xFE, 0x20, 0xDE, 0xDE, 0x1, 0xE0, 0xFD, 0xC5, 0xFD, 0xAE, 0x1, 0xD6, 0xCB, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x5, 0x4F, 0x4, 0x8D, 0x0, 0xE, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x4, 0x20, 0xFE, 0xC2, 0x6A, 0xF3, 0xFE, 0xA0, 0x2, 0x53, 0x63, 0x1, 0x38, 0x1, 0x1D, 0xFE, 0x72, 0x1, 0xAD, 0x1, 0xD6, 0xFE, 0x2A, 0x3, 0xCA, 0xC3, 0xFE, 0x20, 0x1, 0xE0, 0xFD, 0xC6, 0xFD, 0xAD, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEB, 0x5, 0x99, 0x4, 0xA5, 0x0, 0xA, 0x0, 0x2D, 0x0, 0x0, 0x1, 0x10, 0x17, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x3, 0x1, 0x22, 0x27, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x15, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x37, 0x26, 0x3, 0x35, 0x34, 0x12, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x7, 0x16, 0x33, 0x3, 0x2D, 0xBE, 0xA0, 0x3, 0x56, 0x58, 0xAE, 0x5, 0x2, 0x6C, 0xE3, 0xAF, 0x8F, 0xAB, 0xFE, 0xDC, 0xFE, 0xA7, 0x1, 0xA, 0xD9, 0x70, 0x80, 0xCC, 0xBE, 0x36, 0xC0, 0x2, 0xE0, 0xBC, 0xC2, 0xE2, 0xA3, 0x54, 0x67, 0x2, 0x85, 0xFE, 0xF2, 0x6E, 0x73, 0xF1, 0x3D, 0xA2, 0x8E, 0xFE, 0xE6, 0xFD, 0x2F, 0x3A, 0x3E, 0x1, 0x3E, 0x1, 0x22, 0x2E, 0x1, 0x2, 0x1, 0x2A, 0xCB, 0xB5, 0xB1, 0x26, 0xCA, 0xCE, 0x2, 0xAB, 0x1, 0x1E, 0x2C, 0xED, 0x1, 0xA, 0xFE, 0xFE, 0xF2, 0x44, 0xFF, 0xAF, 0xB, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0x0, 0x3B, 0xFE, 0xD4, 0x0, 0x1, 0x0, 0x16, 0xFE, 0xAE, 0x4, 0x8C, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x3, 0x3, 0x21, 0x1, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x1, 0x33, 0x4, 0x8C, 0xD0, 0x92, 0xFF, 0xFA, 0xFE, 0xE5, 0x1, 0x81, 0xFE, 0x87, 0x1, 0x1A, 0xF0, 0xF2, 0x1, 0x1B, 0xFE, 0x89, 0x1, 0x9, 0xC5, 0xFE, 0xAE, 0x1, 0x52, 0x1, 0x99, 0xFE, 0x67, 0x2, 0x4B, 0x2, 0x42, 0xFE, 0x6E, 0x1, 0x92, 0xFD, 0xBE, 0xFE, 0x77, 0x0, 0x1, 0x0, 0x25, 0xFE, 0xAE, 0x6, 0x2E, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x25, 0x3, 0x23, 0x11, 0x21, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x21, 0x11, 0x33, 0x11, 0x6, 0x2E, 0x14, 0xDD, 0xFC, 0x43, 0xFE, 0xA5, 0x3, 0xA2, 0xFE, 0xAC, 0x2, 0x5, 0xF3, 0xC4, 0xFD, 0xEA, 0x1, 0x52, 0x3, 0xC9, 0xC4, 0xC4, 0xFC, 0xFB, 0x3, 0xC9, 0xFC, 0x37, 0x0, 0x1, 0x0, 0x41, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x16, 0x0, 0x0, 0x21, 0x23, 0x11, 0x6, 0x7, 0x15, 0x23, 0x35, 0x26, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17, 0x35, 0x33, 0x15, 0x36, 0x37, 0x11, 0x33, 0x4, 0x16, 0xF3, 0x50, 0x52, 0xA3, 0xBF, 0xDE, 0xF3, 0xAA, 0xA3, 0x4F, 0x53, 0xF3, 0x1, 0xAB, 0x17, 0x9, 0xCC, 0xC8, 0xD, 0xC7, 0xD1, 0x1, 0x61, 0xFE, 0xA0, 0xC8, 0x19, 0xF3, 0xF1, 0x8, 0x18, 0x2, 0x1F, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x4, 0x4B, 0x4, 0x8D, 0x0, 0x11, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x4, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x6F, 0x81, 0x85, 0xF3, 0xF3, 0x84, 0x82, 0xDC, 0x1, 0x0, 0xF3, 0x74, 0x2, 0x46, 0x26, 0xFD, 0xE0, 0x4, 0x8D, 0xFE, 0x57, 0x26, 0xC6, 0xE2, 0xFE, 0x9E, 0x1, 0x62, 0x7D, 0x67, 0x0, 0x2, 0x0, 0xB, 0xFF, 0xF0, 0x5, 0xA8, 0x4, 0xA4, 0x0, 0x7, 0x0, 0x23, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x6, 0x6, 0x23, 0x20, 0x0, 0x27, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x17, 0x36, 0x0, 0x33, 0x32, 0x0, 0x13, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x3, 0x92, 0x82, 0x9D, 0x9, 0x2, 0x4B, 0x95, 0x1, 0x13, 0x20, 0xBD, 0x8D, 0xFE, 0xF8, 0xFE, 0xC3, 0xD, 0xB8, 0xB4, 0xC1, 0x54, 0x57, 0xF, 0x1, 0x33, 0xD8, 0xFF, 0x1, 0x16, 0x2, 0xFC, 0xC2, 0x7, 0xA3, 0xB5, 0x6A, 0x91, 0x2E, 0x3, 0xDE, 0xA5, 0x8C, 0x17, 0x85, 0x95, 0xFC, 0x5F, 0x12, 0x3B, 0x1, 0x12, 0xE9, 0xD, 0xE6, 0xB0, 0x5C, 0x76, 0xC, 0xE4, 0x1, 0x10, 0xFE, 0xE8, 0xFE, 0xFF, 0xA1, 0x88, 0xA7, 0x29, 0x13, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x82, 0x4, 0xA4, 0x0, 0x15, 0x0, 0x1D, 0x0, 0x0, 0x5, 0x22, 0x0, 0x3, 0x35, 0x21, 0x26, 0x26, 0x23, 0x22, 0x6, 0x7, 0x27, 0x36, 0x36, 0x33, 0x20, 0x0, 0x15, 0x15, 0x14, 0x0, 0x27, 0x32, 0x36, 0x37, 0x21, 0x15, 0x14, 0x16, 0x2, 0x66, 0xFE, 0xFE, 0xEA, 0x2, 0x3, 0x3E, 0x7, 0xA4, 0xB5, 0x69, 0x90, 0x2F, 0x41, 0x22, 0xC1, 0x92, 0x1, 0xD, 0x1, 0x3B, 0xFE, 0xC7, 0xE3, 0x82, 0x9D, 0x9, 0xFD, 0xB4, 0x96, 0x10, 0x1, 0x18, 0x1, 0x1, 0xA1, 0x89, 0xA7, 0x2A, 0x13, 0xBA, 0x12, 0x3B, 0xFE, 0xD9, 0xFB, 0x75, 0xF5, 0xFE, 0xD8, 0xC6, 0xA5, 0x8C, 0x17, 0x85, 0x95, 0x0, 0x1, 0x0, 0x43, 0xFF, 0xEC, 0x3, 0xE9, 0x4, 0x8D, 0x0, 0x19, 0x0, 0x0, 0x5, 0x22, 0x26, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x35, 0x34, 0x27, 0x23, 0x35, 0x1, 0x21, 0x35, 0x21, 0x17, 0x1, 0x16, 0x16, 0x15, 0x14, 0x4, 0x2, 0x9, 0x69, 0xD2, 0x8B, 0xF2, 0x5, 0x7A, 0x5B, 0xE6, 0xDE, 0x8F, 0x1, 0x6, 0xFD, 0xDD, 0x3, 0x53, 0x1, 0xFE, 0xC6, 0xB3, 0xB1, 0xFE, 0xEB, 0x14, 0x42, 0x98, 0x81, 0x50, 0x49, 0xAD, 0xAC, 0x4, 0xBB, 0x1, 0x3, 0xC4, 0x9B, 0xFE, 0xC0, 0x16, 0xCC, 0x7C, 0xB6, 0xB2, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0xD, 0x0, 0x12, 0x0, 0x18, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x11, 0x1, 0x22, 0x3, 0x21, 0x2, 0x3, 0x32, 0x13, 0x21, 0x16, 0x16, 0x4, 0x6F, 0xFE, 0xDE, 0xEC, 0xE9, 0xFE, 0xD8, 0x1, 0x26, 0xE9, 0xEC, 0x1, 0x24, 0xFD, 0xF0, 0xFD, 0x1D, 0x2, 0x35, 0x1D, 0xFC, 0xFA, 0x1F, 0xFD, 0xCC, 0xF, 0x95, 0x2, 0x2C, 0xFE, 0xF6, 0xFE, 0xCE, 0x1, 0x32, 0x1, 0xA, 0x34, 0x1, 0xA, 0x1, 0x33, 0xFE, 0xCD, 0xFE, 0xF6, 0x1, 0x78, 0xFE, 0xCF, 0x1, 0x31, 0xFC, 0xDC, 0x1, 0x2F, 0x92, 0x9D, 0x0, 0x1, 0x0, 0x39, 0x0, 0x0, 0x4, 0x1A, 0x4, 0x9D, 0x0, 0x27, 0x0, 0x0, 0x21, 0x21, 0x35, 0x33, 0x36, 0x37, 0x23, 0x35, 0x33, 0x35, 0x27, 0x23, 0x35, 0x33, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x17, 0x17, 0x21, 0x15, 0x21, 0x17, 0x17, 0x21, 0x15, 0x21, 0x6, 0x7, 0x21, 0x4, 0x1A, 0xFC, 0x64, 0xA, 0x35, 0x12, 0x96, 0xA0, 0x2, 0x9E, 0x99, 0x1, 0x7, 0xDD, 0xBA, 0xCD, 0xCE, 0xF3, 0x62, 0x45, 0x4C, 0x57, 0x4, 0x2, 0x1, 0x83, 0xFE, 0x82, 0x3, 0x1, 0x1, 0x7A, 0xFE, 0x74, 0x13, 0x25, 0x2, 0x96, 0xC4, 0xF, 0x6A, 0x93, 0xF, 0x49, 0x93, 0x27, 0xD2, 0xE9, 0xD7, 0xAE, 0x6B, 0x55, 0x7E, 0x78, 0x27, 0x93, 0x42, 0x16, 0x93, 0x45, 0x34, 0x0, 0x1, 0x0, 0x47, 0xFF, 0xF0, 0x3, 0xB1, 0x4, 0x9E, 0x0, 0x21, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x24, 0x27, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x36, 0x24, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x16, 0x33, 0x32, 0x37, 0x3, 0xB0, 0x72, 0x71, 0xD3, 0xFE, 0xFD, 0x19, 0x97, 0x91, 0x91, 0x97, 0x1A, 0x1, 0x1, 0xD2, 0x6C, 0x7A, 0x17, 0x5E, 0x71, 0xD6, 0x23, 0x1, 0x7D, 0xFE, 0x7C, 0x1, 0x84, 0xFE, 0x83, 0x22, 0xD9, 0x55, 0x73, 0xF, 0x1F, 0xD1, 0xC3, 0x93, 0x5B, 0x93, 0xC5, 0xD4, 0x20, 0xBE, 0x1B, 0xD6, 0x93, 0x5B, 0x93, 0xD1, 0x1B, 0x0, 0x4, 0x0, 0x76, 0x0, 0x0, 0x7, 0xC7, 0x4, 0x9E, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x24, 0x0, 0x28, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x11, 0x23, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x1, 0x15, 0x21, 0x35, 0x5, 0x12, 0xBB, 0x9F, 0xA1, 0xBA, 0xB9, 0xFE, 0xC0, 0xBC, 0xAF, 0x55, 0x58, 0x56, 0x54, 0x55, 0x57, 0x56, 0x55, 0xFE, 0xA6, 0xF2, 0xFD, 0xF4, 0xF3, 0xF3, 0x2, 0xC, 0x4, 0x13, 0xFD, 0xC6, 0x3, 0x4F, 0x92, 0xBD, 0xBD, 0x92, 0x4C, 0x92, 0xBC, 0xBC, 0x92, 0x51, 0x6B, 0x6B, 0x51, 0x4C, 0x50, 0x6B, 0x6B, 0x50, 0x1, 0x3E, 0xFB, 0x73, 0x3, 0x1C, 0xFC, 0xE4, 0x4, 0x8D, 0xFC, 0xE4, 0x3, 0x1C, 0xFC, 0xD1, 0x95, 0x95, 0x0, 0x2, 0x0, 0x4D, 0xFF, 0xEE, 0x4, 0x50, 0x4, 0x9D, 0x0, 0x13, 0x0, 0x28, 0x0, 0x0, 0x13, 0x35, 0x21, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x23, 0x10, 0x21, 0x32, 0x16, 0x15, 0x14, 0x7, 0x33, 0x15, 0x1, 0x22, 0x26, 0x35, 0x34, 0x37, 0x23, 0x35, 0x21, 0x15, 0x21, 0x6, 0x15, 0x14, 0x33, 0x32, 0x36, 0x37, 0x33, 0x14, 0x6, 0x4E, 0x2, 0x87, 0x2B, 0x4E, 0x57, 0xAB, 0x3, 0xF2, 0x1, 0xA1, 0xD2, 0xC4, 0x2D, 0x8B, 0xFE, 0x13, 0xEB, 0xD6, 0x2E, 0x83, 0x4, 0x2, 0xFD, 0x76, 0x2A, 0xC4, 0x4C, 0x73, 0x2, 0xF2, 0xED, 0x2, 0x72, 0x93, 0x29, 0x41, 0x2D, 0x3F, 0x7A, 0x1, 0x3C, 0xA0, 0x74, 0x45, 0x3F, 0x93, 0xFD, 0x7C, 0xA0, 0x7B, 0x48, 0x3B, 0x93, 0x93, 0x28, 0x48, 0x6B, 0x32, 0x47, 0xA6, 0x96, 0x0, 0x2, 0x0, 0x28, 0x0, 0x0, 0x4, 0xAA, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x13, 0x21, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x23, 0x15, 0x21, 0x1, 0xEB, 0xF8, 0x6D, 0x67, 0x67, 0x6D, 0x14, 0xFE, 0xF4, 0xF3, 0xD0, 0xD0, 0xD0, 0xD0, 0x1, 0xEB, 0xD5, 0xF2, 0xF2, 0xD5, 0xF8, 0x1, 0xC, 0x3, 0xCA, 0xFE, 0x89, 0x73, 0x49, 0x4A, 0x71, 0xFC, 0xCF, 0x99, 0x99, 0xB7, 0x4D, 0xB6, 0x2, 0x3A, 0xD4, 0xA5, 0xA6, 0xD1, 0x4D, 0x0, 0x2, 0x0, 0x25, 0x0, 0x0, 0x3, 0xD1, 0x4, 0x8D, 0x0, 0x3, 0x0, 0xB, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x3, 0xD1, 0xFC, 0x54, 0x3, 0xAC, 0xFE, 0xA1, 0xF3, 0xFE, 0xA6, 0x3, 0xAC, 0x4, 0x8D, 0xC3, 0xC3, 0xFE, 0x18, 0xFD, 0x5B, 0x2, 0xA5, 0xC3, 0x0, 0x1, 0x0, 0x37, 0xFF, 0xF5, 0x2, 0xA9, 0x3, 0x20, 0x0, 0x24, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x1, 0x69, 0x70, 0xC2, 0xBB, 0x45, 0x3B, 0x3F, 0x3E, 0x86, 0x5C, 0x5C, 0x78, 0x36, 0x3E, 0x2F, 0x41, 0xBA, 0xAD, 0x79, 0x89, 0xAA, 0x87, 0x94, 0xB7, 0xB, 0x70, 0x80, 0x25, 0x36, 0x38, 0x2A, 0x64, 0x2, 0x80, 0x2, 0x5F, 0x23, 0x35, 0x27, 0x23, 0x6B, 0x74, 0x73, 0x6E, 0x77, 0x33, 0x29, 0x8F, 0x6F, 0x79, 0x0, 0x2, 0x0, 0x35, 0x0, 0x0, 0x2, 0xBF, 0x3, 0x15, 0x0, 0x3, 0x0, 0xE, 0x0, 0x0, 0x13, 0x33, 0x35, 0x7, 0x1, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0xEB, 0xBA, 0xE, 0x1, 0x28, 0x60, 0xBA, 0xFE, 0x9A, 0xA, 0x1, 0x6E, 0xBC, 0x60, 0x1, 0x3B, 0xF3, 0x17, 0xFE, 0x8D, 0xA4, 0xA4, 0x78, 0x1, 0xF9, 0xFE, 0x26, 0x0, 0x1, 0x0, 0x4F, 0xFF, 0xF5, 0x2, 0xAE, 0x3, 0x15, 0x0, 0x1B, 0x0, 0x0, 0x13, 0x27, 0x13, 0x21, 0x15, 0x21, 0x7, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x27, 0x33, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0xF7, 0x94, 0x34, 0x1, 0xEC, 0xFE, 0xAC, 0x15, 0x44, 0x42, 0x82, 0x8C, 0x93, 0x9B, 0x74, 0xB9, 0x4, 0xB9, 0x7, 0x71, 0x41, 0x33, 0x84, 0x34, 0x34, 0x1, 0x5B, 0x25, 0x1, 0x95, 0x95, 0x95, 0x1C, 0x87, 0x7A, 0x6A, 0xA7, 0x7A, 0x6D, 0x52, 0x4A, 0x33, 0x7C, 0x1B, 0x0, 0x2, 0x0, 0x4E, 0xFF, 0xF5, 0x2, 0xB9, 0x3, 0x22, 0x0, 0x13, 0x0, 0x1E, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x33, 0x15, 0x22, 0x6, 0x7, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x7, 0x15, 0x14, 0x1, 0x8B, 0x8E, 0xAF, 0xFC, 0xCC, 0x1C, 0x84, 0x94, 0xF, 0x46, 0x6C, 0x7D, 0x7F, 0xA5, 0x8E, 0x37, 0x43, 0x7A, 0x2D, 0x43, 0xF, 0xB, 0xA2, 0x9D, 0x34, 0xDF, 0xDB, 0x98, 0x55, 0x6E, 0x46, 0x95, 0x73, 0x74, 0x9C, 0x95, 0x48, 0x34, 0x73, 0x24, 0x18, 0x23, 0x90, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x2, 0xAE, 0x3, 0x15, 0x0, 0x6, 0x0, 0x0, 0x1, 0x15, 0x1, 0x23, 0x1, 0x21, 0x35, 0x2, 0xAE, 0xFE, 0xAD, 0xC4, 0x1, 0x53, 0xFE, 0x4D, 0x3, 0x15, 0x68, 0xFD, 0x53, 0x2, 0x7F, 0x96, 0x0, 0x3, 0x0, 0x4C, 0xFF, 0xF5, 0x2, 0xAA, 0x3, 0x20, 0x0, 0x13, 0x0, 0x1A, 0x0, 0x23, 0x0, 0x0, 0x5, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x16, 0x15, 0x14, 0x6, 0x3, 0x34, 0x23, 0x22, 0x15, 0x14, 0x32, 0x17, 0x34, 0x26, 0x23, 0x22, 0x15, 0x14, 0x33, 0x32, 0x1, 0x7B, 0x81, 0xAE, 0x85, 0x73, 0xA0, 0x7C, 0x7D, 0xA0, 0x72, 0x85, 0xAC, 0x21, 0x63, 0x61, 0xC4, 0x14, 0x42, 0x35, 0x74, 0x75, 0x76, 0xB, 0x72, 0x73, 0x82, 0x3B, 0x39, 0x72, 0x6D, 0x71, 0x71, 0x6D, 0x73, 0x38, 0x3B, 0x82, 0x73, 0x72, 0x2, 0x41, 0x55, 0x55, 0x58, 0xF4, 0x2E, 0x30, 0x5E, 0x60, 0x0, 0x2, 0x0, 0x47, 0xFF, 0xF7, 0x2, 0xA4, 0x3, 0x20, 0x0, 0x13, 0x0, 0x1D, 0x0, 0x0, 0x17, 0x35, 0x32, 0x36, 0x37, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x6, 0x7, 0x13, 0x32, 0x37, 0x35, 0x34, 0x23, 0x22, 0x6, 0x15, 0x14, 0xD5, 0x85, 0x81, 0xC, 0x43, 0x59, 0x7C, 0x88, 0xA5, 0x88, 0x87, 0xA9, 0xEA, 0xD2, 0x92, 0x4D, 0x23, 0x76, 0x36, 0x3E, 0x9, 0x94, 0x49, 0x62, 0x39, 0x8C, 0x7C, 0x74, 0xA7, 0xA1, 0xA2, 0x34, 0xE4, 0xCD, 0x1, 0x1, 0x92, 0x34, 0x45, 0x88, 0x4F, 0x38, 0x7A, 0x0, 0x1, 0x0, 0x90, 0x2, 0x87, 0x3, 0x2E, 0x3, 0x32, 0x0, 0x3, 0x0, 0x0, 0x1, 0x15, 0x21, 0x35, 0x3, 0x2E, 0xFD, 0x62, 0x3, 0x32, 0xAB, 0xAB, 0x0, 0x3, 0x0, 0x96, 0x4, 0x48, 0x2, 0xA2, 0x6, 0x96, 0x0, 0x3, 0x0, 0xC, 0x0, 0x17, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x5, 0x34, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x23, 0x22, 0x6, 0x1, 0x18, 0xA5, 0xE5, 0xF5, 0xFE, 0xE9, 0x6F, 0x9A, 0x6B, 0x6B, 0x9A, 0x6F, 0x64, 0x33, 0x25, 0x24, 0x30, 0x54, 0x25, 0x33, 0x5, 0xD3, 0xC3, 0xC3, 0xDD, 0x4D, 0x64, 0x64, 0x9A, 0x61, 0x62, 0x4C, 0x25, 0x31, 0x31, 0x25, 0x59, 0x32, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x4, 0x8D, 0x0, 0xB, 0x0, 0x0, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x76, 0x3, 0x3C, 0xFD, 0xB7, 0x1, 0xF6, 0xFE, 0xA, 0x2, 0x4D, 0x4, 0x8D, 0xC4, 0xFE, 0xF3, 0xC3, 0xFE, 0xCA, 0xC3, 0x0, 0x3, 0x0, 0xA, 0xFE, 0x4A, 0x4, 0x1C, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x37, 0x0, 0x44, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x14, 0x6, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x27, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x21, 0x17, 0x23, 0x16, 0x15, 0x15, 0x14, 0x6, 0x23, 0x22, 0x27, 0x6, 0x15, 0x14, 0x33, 0x33, 0x16, 0x16, 0x1, 0x32, 0x36, 0x35, 0x34, 0x27, 0x25, 0x27, 0x6, 0x6, 0x15, 0x14, 0x16, 0x1, 0x38, 0x71, 0x61, 0x5F, 0x71, 0x73, 0x5F, 0x5E, 0x72, 0x2, 0xDA, 0x81, 0xF4, 0xAF, 0xEB, 0xF9, 0x6D, 0x4A, 0x33, 0x49, 0x2D, 0xBC, 0x2, 0xF8, 0xCA, 0x57, 0x4B, 0x1, 0x70, 0x2, 0x89, 0x39, 0xF7, 0xCB, 0x4F, 0x47, 0x24, 0x7E, 0xB6, 0xBD, 0xD1, 0xFD, 0xDC, 0x99, 0x99, 0x91, 0xFE, 0xEC, 0x31, 0x24, 0x31, 0x7A, 0x2, 0xCD, 0x44, 0x6D, 0x6D, 0x44, 0x16, 0x48, 0x67, 0x67, 0x48, 0xFC, 0xC6, 0x50, 0xA2, 0x6D, 0xA6, 0x6E, 0x5D, 0x7F, 0x23, 0x30, 0x4A, 0x49, 0x60, 0x1F, 0x67, 0xC3, 0x1A, 0xA0, 0xCB, 0x14, 0x9A, 0x53, 0x6A, 0x16, 0x97, 0xD6, 0x12, 0x22, 0x2F, 0x4D, 0x1, 0x95, 0xFE, 0xC7, 0x68, 0x35, 0x6C, 0x9, 0x2, 0x6, 0x12, 0x49, 0x30, 0x3A, 0x55, 0x0, 0x2, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x5F, 0x4, 0x4E, 0x0, 0xC, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x35, 0x26, 0x26, 0x23, 0x22, 0x6, 0x1, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x3, 0x13, 0x1, 0x4A, 0x6D, 0x83, 0x74, 0x6C, 0x12, 0xD, 0x70, 0x73, 0x84, 0x6E, 0x2, 0x38, 0x1F, 0x6F, 0xF1, 0xCE, 0xDF, 0xDF, 0xD0, 0xEC, 0x6E, 0x1C, 0xDD, 0x6C, 0x73, 0x1, 0xFA, 0x8B, 0xC1, 0xCF, 0x82, 0x2E, 0x88, 0xD6, 0xE0, 0xFD, 0x55, 0xC4, 0xD9, 0x1, 0x28, 0xE8, 0x14, 0xFC, 0x1, 0x43, 0xD6, 0xC2, 0xFD, 0xE2, 0xFD, 0xE4, 0x0, 0x2, 0x0, 0x9B, 0x0, 0x0, 0x4, 0xF2, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x1, 0x11, 0x23, 0x11, 0x21, 0x32, 0x4, 0x15, 0x14, 0x7, 0x16, 0x16, 0x15, 0x15, 0x14, 0x17, 0x15, 0x21, 0x26, 0x26, 0x35, 0x34, 0x23, 0x1, 0x97, 0x1, 0x14, 0x90, 0x81, 0x78, 0x89, 0xFE, 0xDC, 0xFC, 0x2, 0x29, 0xF5, 0x1, 0x0, 0xF6, 0x83, 0x66, 0x46, 0xFE, 0xFD, 0x27, 0x18, 0xF1, 0x4, 0xE5, 0xFE, 0x3C, 0x71, 0x6D, 0x67, 0x7F, 0xFD, 0x71, 0xFD, 0xAA, 0x5, 0xB0, 0xDA, 0xCC, 0xE1, 0x66, 0x28, 0xB8, 0x7B, 0x68, 0xA9, 0x3C, 0x1B, 0x21, 0x85, 0xB3, 0xFD, 0x0, 0x1, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x30, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x4, 0x0, 0xFE, 0x44, 0xAD, 0xFC, 0xFC, 0x8B, 0x1, 0xAD, 0x1, 0x36, 0xFE, 0xC, 0x2, 0x1F, 0x2, 0x70, 0xFD, 0x90, 0x5, 0xB0, 0xFD, 0x9D, 0x2, 0x63, 0xFD, 0x46, 0xFD, 0xA, 0x0, 0x1, 0x0, 0x81, 0x0, 0x0, 0x4, 0x36, 0x6, 0x0, 0x0, 0xC, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x1B, 0xFE, 0xC8, 0x6F, 0xF3, 0xF3, 0x68, 0x1, 0x10, 0x1, 0x1B, 0xFE, 0x9F, 0x1, 0x90, 0x1, 0xDA, 0xFE, 0x26, 0x6, 0x0, 0xFC, 0x9C, 0x1, 0x9E, 0xFE, 0x13, 0xFD, 0xB3, 0x0, 0x1, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x12, 0x5, 0xB0, 0x0, 0xB, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0xDA, 0xFD, 0xBD, 0xFC, 0xFC, 0x6, 0x2, 0x19, 0x1, 0x39, 0xFD, 0xA5, 0x2, 0x7E, 0x2, 0x9D, 0xFD, 0x63, 0x5, 0xB0, 0xFD, 0x7F, 0x2, 0x81, 0xFD, 0x35, 0xFD, 0x1B, 0x0, 0x1, 0x0, 0x81, 0x0, 0x0, 0x4, 0x22, 0x6, 0x18, 0x0, 0xA, 0x0, 0x0, 0x21, 0x1, 0x11, 0x23, 0x11, 0x33, 0x11, 0x1, 0x21, 0x1, 0x1, 0x2, 0xFE, 0xFE, 0x76, 0xF3, 0xF3, 0x1, 0x58, 0x1, 0x2B, 0xFE, 0x4F, 0x1, 0xDC, 0x1, 0xEA, 0xFE, 0x16, 0x6, 0x18, 0xFC, 0x85, 0x1, 0x9D, 0xFE, 0xE, 0xFD, 0xB8, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x4, 0x2B, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x12, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x10, 0x25, 0x1, 0x11, 0x21, 0x32, 0x0, 0x15, 0x15, 0x14, 0x0, 0x21, 0x1, 0x69, 0x83, 0xAE, 0x9E, 0xFE, 0xC7, 0xFE, 0x77, 0x1, 0x7B, 0xFD, 0x1, 0x3D, 0xFE, 0xC2, 0xFE, 0xFF, 0x3, 0xC9, 0xFC, 0xFA, 0xBB, 0xAE, 0x36, 0x1, 0x5F, 0x8, 0xFC, 0x37, 0x4, 0x8D, 0xFE, 0xCD, 0xFA, 0x34, 0xFA, 0xFE, 0xCE, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x4, 0x9D, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x33, 0x6, 0x6, 0x23, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x20, 0x3, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x3, 0x50, 0xF3, 0xF, 0xFD, 0xE7, 0xED, 0xFE, 0xED, 0x1, 0x19, 0xEC, 0xE8, 0xF4, 0x13, 0xF3, 0xA, 0x6F, 0x83, 0xFE, 0xF4, 0x7, 0x7F, 0x8F, 0x80, 0x75, 0x1, 0x85, 0xB2, 0xE3, 0x1, 0x2D, 0x1, 0x3, 0x4C, 0x1, 0x3, 0x1, 0x2E, 0xE9, 0xB3, 0x61, 0x78, 0xFE, 0xA5, 0x5F, 0xAE, 0xBF, 0x6A, 0x0, 0x3, 0x0, 0x76, 0x0, 0x0, 0x4, 0xA, 0x4, 0x8D, 0x0, 0x6, 0x0, 0xE, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x35, 0x34, 0x27, 0x3, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x1, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x69, 0xCC, 0xC6, 0xC3, 0xCF, 0xE5, 0x65, 0x65, 0xB8, 0xFE, 0x16, 0x1, 0xAF, 0xD4, 0xF5, 0x57, 0x5A, 0x6B, 0x62, 0xE9, 0xD3, 0x3, 0xC9, 0xFE, 0xDD, 0x8F, 0x91, 0x3, 0xFE, 0x32, 0xFE, 0xC8, 0x54, 0x42, 0x9E, 0x4, 0xFE, 0x5, 0x4, 0x8D, 0x9D, 0xA3, 0x4E, 0x84, 0x23, 0x1A, 0x9A, 0x55, 0xAA, 0xA5, 0x0, 0x2, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x4, 0x8D, 0x0, 0x2, 0x0, 0xA, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x27, 0x21, 0x7, 0x23, 0x1, 0x33, 0x1, 0x2, 0xF8, 0xAA, 0xA9, 0x1, 0xFA, 0x60, 0xFE, 0x20, 0x60, 0xF6, 0x1, 0xD7, 0xDF, 0x1, 0xD5, 0x1, 0xB2, 0x1, 0xBA, 0xFE, 0x46, 0xFE, 0x4E, 0xFA, 0xFA, 0x4, 0x8D, 0xFB, 0x73, 0x0, 0x1, 0x0, 0x94, 0x4, 0x6A, 0x1, 0xA9, 0x6, 0x2B, 0x0, 0x8, 0x0, 0x0, 0x13, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x7, 0x15, 0x94, 0x5B, 0x38, 0x82, 0x3F, 0x2, 0x4, 0x6A, 0x85, 0x62, 0xB0, 0x2A, 0x53, 0x6D, 0x7C, 0x85, 0x0, 0x2, 0x0, 0x76, 0x4, 0xD5, 0x3, 0x0, 0x6, 0x7F, 0x0, 0x3, 0x0, 0x10, 0x0, 0x0, 0x1, 0x27, 0x33, 0x17, 0x17, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x1, 0x8C, 0xA9, 0xB6, 0x73, 0x42, 0xB2, 0xAF, 0xFE, 0xD4, 0xAF, 0xB0, 0x43, 0x52, 0x50, 0x43, 0x5, 0xBF, 0xC0, 0xC0, 0xE, 0x61, 0x7B, 0x7B, 0x61, 0x2C, 0x43, 0x43, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xCB, 0xFF, 0x18, 0x6, 0xA2, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xF0, 0xFD, 0x51, 0x7, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x6, 0xA2, 0x9E, 0x9E, 0xFE, 0x9C, 0x2F, 0x43, 0x43, 0x2F, 0x30, 0x41, 0x41, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xCB, 0xFF, 0x18, 0x6, 0x65, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x5, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x67, 0x7F, 0xC4, 0xB6, 0xFE, 0x66, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x5, 0x92, 0xD3, 0xD3, 0x54, 0x2F, 0x43, 0x43, 0x2F, 0x30, 0x41, 0x41, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xCB, 0xFF, 0x18, 0x6, 0xA1, 0x0, 0x8, 0x0, 0x12, 0x0, 0x1C, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x2C, 0x8B, 0x8C, 0xCF, 0xFE, 0xF4, 0x9D, 0xFE, 0xF5, 0x4, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x6, 0xA1, 0x78, 0x78, 0x12, 0xDF, 0xDE, 0x13, 0xFE, 0x9D, 0x2F, 0x43, 0x43, 0x2F, 0x30, 0x41, 0x41, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xCB, 0xFF, 0x18, 0x6, 0x65, 0x0, 0x3, 0x0, 0xD, 0x0, 0x17, 0x0, 0x0, 0x1, 0x17, 0x23, 0x27, 0x3, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xFD, 0x8B, 0x7F, 0x8D, 0xB5, 0x6E, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x6, 0x65, 0xD3, 0xD3, 0xFE, 0xD9, 0x2F, 0x43, 0x43, 0x2F, 0x30, 0x41, 0x41, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x0, 0x2, 0xFC, 0x61, 0x4, 0xCB, 0xFF, 0x10, 0x6, 0x9E, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xF0, 0xFD, 0x51, 0xDB, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x6, 0x9E, 0x9E, 0x9E, 0xFE, 0x9E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x0, 0x2, 0xFC, 0x9C, 0x4, 0xBD, 0xFE, 0xD6, 0x6, 0x8C, 0x0, 0x3, 0x0, 0x17, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x17, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFD, 0x67, 0x7F, 0xC4, 0xB6, 0x7B, 0x67, 0x5D, 0x49, 0x50, 0x52, 0x41, 0x1F, 0x2A, 0x68, 0x5B, 0x4A, 0x42, 0x63, 0x3F, 0x1E, 0x2C, 0x5, 0xB9, 0xD3, 0xD3, 0x18, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x47, 0x71, 0x47, 0x32, 0x0, 0x2, 0xFC, 0x61, 0x4, 0xBF, 0xFF, 0x10, 0x6, 0x5F, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x17, 0x23, 0x27, 0x1, 0x15, 0x21, 0x35, 0xFD, 0x7A, 0x8A, 0x89, 0xCA, 0x2, 0x5F, 0xFD, 0x51, 0x6, 0x5F, 0xC0, 0xC0, 0xFE, 0xFE, 0x9E, 0x9E, 0x0, 0x2, 0xFC, 0x61, 0x4, 0xBF, 0xFF, 0x10, 0x6, 0x5F, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x5, 0x15, 0x21, 0x35, 0xFD, 0x67, 0x7F, 0xC4, 0xB6, 0x1, 0x1C, 0xFD, 0x51, 0x5, 0x9F, 0xC0, 0xC0, 0x42, 0x9E, 0x9E, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xBF, 0xFF, 0x18, 0x6, 0xA0, 0x0, 0x9, 0x0, 0x13, 0x0, 0x17, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x17, 0x15, 0x21, 0x35, 0xFC, 0x5A, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0xF2, 0xFD, 0x51, 0x6, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0x2E, 0x30, 0x42, 0x42, 0x30, 0x2F, 0x42, 0x42, 0xA1, 0x9E, 0x9E, 0x0, 0x2, 0xFC, 0xAA, 0x4, 0xED, 0xFE, 0xEA, 0x6, 0x79, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x0, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x13, 0x33, 0x3, 0xFC, 0xAA, 0x41, 0x3C, 0x3A, 0x42, 0x42, 0x3A, 0x3C, 0x41, 0xDB, 0x8E, 0xD7, 0xC9, 0x6, 0x37, 0x42, 0x42, 0x60, 0x41, 0x41, 0xEA, 0x1, 0x4, 0xFE, 0xFC, 0x0, 0x2, 0xFC, 0x5E, 0x4, 0xC3, 0xFF, 0x12, 0x6, 0xC1, 0x0, 0x7, 0x0, 0x10, 0x0, 0x0, 0x0, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x7, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0xFD, 0x3C, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x10, 0x8B, 0x8C, 0xCF, 0xFE, 0xF4, 0x9D, 0xFE, 0xF5, 0x6, 0x7F, 0x42, 0x42, 0x60, 0x41, 0x41, 0x6C, 0x78, 0x78, 0x11, 0xDF, 0xDE, 0x12, 0x0, 0x2, 0x0, 0x7B, 0x4, 0xE8, 0x4, 0x8C, 0x6, 0x91, 0x0, 0x3, 0x0, 0xA, 0x0, 0x0, 0x1, 0x13, 0x33, 0x3, 0x5, 0x25, 0x33, 0x5, 0x23, 0x27, 0x7, 0x3, 0x16, 0x97, 0xDF, 0xD8, 0xFC, 0xC7, 0x1, 0x22, 0xA2, 0x1, 0x22, 0xD4, 0x9F, 0x9F, 0x5, 0x86, 0x1, 0xB, 0xFE, 0xF5, 0x9E, 0xF9, 0xF9, 0x8E, 0x8E, 0x0, 0x2, 0xFF, 0x4B, 0x4, 0xDB, 0x3, 0x5C, 0x6, 0x84, 0x0, 0x3, 0x0, 0xA, 0x0, 0x0, 0x13, 0x13, 0x23, 0x3, 0x5, 0x5, 0x23, 0x27, 0x7, 0x23, 0x25, 0x2A, 0x97, 0x9E, 0xD8, 0x2, 0xEF, 0x1, 0x22, 0xD4, 0x9F, 0x9F, 0xD4, 0x1, 0x22, 0x6, 0x84, 0xFE, 0xF5, 0x1, 0xB, 0xB0, 0xF9, 0x8E, 0x8E, 0xF9, 0x0, 0x2, 0x0, 0x76, 0x4, 0xE8, 0x4, 0xA, 0x6, 0xCB, 0x0, 0xC, 0x0, 0x13, 0x0, 0x0, 0x1, 0x23, 0x27, 0x36, 0x35, 0x34, 0x23, 0x37, 0x20, 0x15, 0x14, 0x6, 0x7, 0x25, 0x5, 0x23, 0x27, 0x7, 0x23, 0x25, 0x3, 0x89, 0x89, 0x7, 0x77, 0x81, 0x6, 0x1, 0x15, 0x50, 0x31, 0xFE, 0xBE, 0x1, 0x15, 0xC1, 0xB2, 0xB3, 0xC0, 0x1, 0x15, 0x5, 0x6E, 0x7D, 0x7, 0x33, 0x3E, 0x68, 0xA4, 0x3E, 0x3A, 0x7, 0x39, 0xF9, 0xA1, 0xA1, 0xF9, 0x0, 0x2, 0x0, 0x76, 0x4, 0xE8, 0x3, 0x5C, 0x6, 0xD2, 0x0, 0x13, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x7, 0x5, 0x23, 0x27, 0x7, 0x23, 0x25, 0x2, 0x92, 0x5B, 0x56, 0x41, 0x46, 0x4F, 0x3A, 0x1B, 0x2A, 0x5A, 0x55, 0x40, 0x3B, 0x5E, 0x37, 0x1B, 0x2A, 0x5F, 0x1, 0x29, 0xC1, 0xB2, 0xB3, 0xC0, 0x1, 0x29, 0x6, 0xD2, 0x1F, 0x3B, 0x62, 0x43, 0x2C, 0x1B, 0x18, 0x3B, 0x64, 0x41, 0x2E, 0xE2, 0xEC, 0x8E, 0x8E, 0xEC, 0x0, 0x2, 0xFC, 0x61, 0x4, 0xBD, 0xFF, 0x10, 0x6, 0xA2, 0x0, 0x3, 0x0, 0x17, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xF0, 0xFD, 0x51, 0x2, 0xE, 0x67, 0x5D, 0x49, 0x50, 0x52, 0x41, 0x1F, 0x2A, 0x68, 0x5B, 0x4A, 0x42, 0x63, 0x3F, 0x1E, 0x2C, 0x6, 0xA2, 0x9E, 0x9E, 0xFE, 0xFF, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x47, 0x71, 0x47, 0x32, 0x0, 0x1, 0x0, 0x76, 0x0, 0x0, 0x3, 0x97, 0x5, 0xC4, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x3, 0x97, 0xFD, 0xD2, 0xF3, 0x2, 0x2E, 0xF3, 0x3, 0xC9, 0xFC, 0x37, 0x4, 0x8D, 0x1, 0x37, 0x0, 0x2, 0x0, 0x76, 0x4, 0xD3, 0x3, 0x0, 0x6, 0x7F, 0x0, 0x3, 0x0, 0x10, 0x0, 0x0, 0x1, 0x37, 0x33, 0x7, 0x17, 0x33, 0x14, 0x6, 0x20, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x1, 0x77, 0x72, 0xB7, 0xA9, 0x57, 0xB2, 0xAF, 0xFE, 0xD4, 0xAF, 0xB0, 0x43, 0x52, 0x50, 0x43, 0x5, 0xBF, 0xC0, 0xC0, 0xF, 0x61, 0x7C, 0x7C, 0x61, 0x2C, 0x43, 0x43, 0x0, 0x2, 0x0, 0x76, 0x4, 0xD5, 0x2, 0xF6, 0x7, 0x8, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x23, 0x27, 0x36, 0x35, 0x34, 0x23, 0x37, 0x20, 0x15, 0x14, 0x6, 0x7, 0x17, 0x33, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x2, 0x8, 0x9E, 0x8, 0x87, 0x93, 0x7, 0x1, 0x3D, 0x5B, 0x36, 0x3F, 0xAE, 0xAB, 0x95, 0x94, 0xAC, 0xAD, 0x43, 0x50, 0x4F, 0x43, 0x5, 0xC9, 0x76, 0x6, 0x2D, 0x37, 0x5F, 0x93, 0x37, 0x34, 0x6, 0x54, 0x61, 0x7A, 0x7A, 0x61, 0x2B, 0x42, 0x42, 0x0, 0x3, 0xFC, 0x5A, 0x4, 0xBD, 0xFF, 0x18, 0x6, 0xC1, 0x0, 0x7, 0x0, 0x11, 0x0, 0x25, 0x0, 0x0, 0x0, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x25, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x17, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFC, 0x5A, 0x41, 0x76, 0x42, 0x42, 0x76, 0x41, 0x1, 0xC4, 0x42, 0x76, 0x42, 0x42, 0x76, 0x42, 0x51, 0x67, 0x5D, 0x49, 0x50, 0x52, 0x41, 0x1F, 0x2A, 0x68, 0x5B, 0x4A, 0x42, 0x63, 0x3F, 0x1E, 0x2C, 0x6, 0x7F, 0x42, 0x42, 0x60, 0x41, 0x41, 0x2E, 0x30, 0x43, 0x43, 0x30, 0x2F, 0x41, 0x41, 0x7D, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x47, 0x71, 0x47, 0x32, 0xFF, 0xFF, 0x0, 0x4C, 0x2, 0x8D, 0x2, 0xAA, 0x5, 0xB8, 0x0, 0x7, 0x7, 0x43, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x35, 0x2, 0x98, 0x2, 0xBF, 0x5, 0xAD, 0x0, 0x7, 0x7, 0x9E, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x4F, 0x2, 0x8D, 0x2, 0xAE, 0x5, 0xAD, 0x0, 0x7, 0x7, 0x9F, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x4E, 0x2, 0x8D, 0x2, 0xB9, 0x5, 0xBA, 0x0, 0x7, 0x7, 0xA0, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x37, 0x2, 0x98, 0x2, 0xAE, 0x5, 0xAD, 0x0, 0x7, 0x7, 0xA1, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x4C, 0x2, 0x8D, 0x2, 0xAA, 0x5, 0xB8, 0x0, 0x7, 0x7, 0xA2, 0x0, 0x0, 0x2, 0x98, 0xFF, 0xFF, 0x0, 0x47, 0x2, 0x8F, 0x2, 0xA4, 0x5, 0xB8, 0x0, 0x7, 0x7, 0xA3, 0x0, 0x0, 0x2, 0x98, 0x0, 0x1, 0x0, 0x6C, 0xFF, 0xEB, 0x5, 0x26, 0x5, 0xC5, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x33, 0x6, 0x0, 0x21, 0x20, 0x0, 0x11, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x4, 0x29, 0xFC, 0x16, 0xFE, 0xDE, 0xFE, 0xF9, 0xFE, 0xEE, 0xFE, 0x98, 0x1, 0x62, 0x1, 0x12, 0x1, 0x6, 0x1, 0x2A, 0x16, 0xFD, 0x13, 0x99, 0x9D, 0xAC, 0xCC, 0xD2, 0xAC, 0x9D, 0x92, 0x1, 0xDA, 0xDD, 0xFE, 0xEE, 0x1, 0x87, 0x1, 0x4A, 0x37, 0x1, 0x4A, 0x1, 0x88, 0xFE, 0xEA, 0xE0, 0x8C, 0x9F, 0xFE, 0xE7, 0xEC, 0x39, 0xEC, 0xFE, 0xE5, 0x9D, 0x0, 0x1, 0x0, 0x6C, 0xFF, 0xEB, 0x5, 0x26, 0x5, 0xC5, 0x0, 0x20, 0x0, 0x0, 0x1, 0x11, 0x6, 0x4, 0x23, 0x22, 0x24, 0x2, 0x35, 0x35, 0x10, 0x0, 0x21, 0x20, 0x0, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x11, 0x21, 0x35, 0x5, 0x26, 0x2C, 0xFE, 0xFB, 0xE8, 0xBF, 0xFE, 0xCF, 0xB1, 0x1, 0x66, 0x1, 0x13, 0x1, 0x11, 0x1, 0x14, 0x1C, 0xF9, 0x13, 0x95, 0x9D, 0xA9, 0xD7, 0xED, 0xB8, 0x7A, 0x8A, 0x19, 0xFE, 0xDD, 0x2, 0xE4, 0xFD, 0xD9, 0x3D, 0x95, 0xB1, 0x1, 0x47, 0xE0, 0x25, 0x1, 0x54, 0x1, 0x89, 0xFE, 0xF9, 0xCB, 0x71, 0x96, 0xFE, 0xE2, 0xF2, 0x27, 0xF3, 0xFE, 0xE5, 0x39, 0x1C, 0x1, 0x1B, 0xBF, 0x0, 0x2, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x13, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x2, 0x23, 0x1, 0x11, 0x21, 0x20, 0x0, 0x13, 0x15, 0x10, 0x0, 0x21, 0x1, 0x97, 0xAE, 0xE9, 0xEC, 0xEC, 0xDD, 0xFE, 0x4A, 0x1, 0xBE, 0x1, 0x35, 0x1, 0x89, 0x1, 0xFE, 0x73, 0xFE, 0xC2, 0x4, 0xE5, 0xFB, 0xE5, 0x1, 0x1C, 0xDD, 0x2B, 0xE6, 0x1, 0x11, 0xFB, 0x1B, 0x5, 0xB0, 0xFE, 0x77, 0xFE, 0xC6, 0x2A, 0xFE, 0xC4, 0xFE, 0x79, 0x0, 0x2, 0x0, 0x6C, 0xFF, 0xEB, 0x5, 0x72, 0x5, 0xC5, 0x0, 0x10, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x14, 0x2, 0x4, 0x23, 0x22, 0x24, 0x2, 0x35, 0x35, 0x34, 0x12, 0x24, 0x33, 0x20, 0x0, 0x13, 0x7, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x5, 0x72, 0xA6, 0xFE, 0xDF, 0xBB, 0xB6, 0xFE, 0xDC, 0xAA, 0xA9, 0x1, 0x23, 0xB6, 0x1, 0x15, 0x1, 0x6B, 0x4, 0xFA, 0xDA, 0xB0, 0xA9, 0xDE, 0xE0, 0xA9, 0xB1, 0xD7, 0x2, 0xC3, 0xD2, 0xFE, 0xB7, 0xBD, 0xBD, 0x1, 0x49, 0xD2, 0x2A, 0xD2, 0x1, 0x49, 0xBD, 0xFE, 0x69, 0xFE, 0xCB, 0xA, 0xE2, 0x1, 0x24, 0xFE, 0xDC, 0xE2, 0x2C, 0xE4, 0xFE, 0xDB, 0x1, 0x25, 0xE4, 0x0, 0x2, 0x0, 0x6C, 0xFF, 0x3, 0x5, 0x72, 0x5, 0xC5, 0x0, 0x14, 0x0, 0x22, 0x0, 0x0, 0x5, 0x25, 0x6, 0x23, 0x22, 0x24, 0x2, 0x35, 0x35, 0x34, 0x12, 0x24, 0x33, 0x20, 0x0, 0x13, 0x15, 0x14, 0x2, 0x7, 0x17, 0x3, 0x34, 0x2, 0x23, 0x22, 0x2, 0x15, 0x15, 0x14, 0x12, 0x33, 0x32, 0x12, 0x35, 0x4, 0x9C, 0xFE, 0xD6, 0x3F, 0x43, 0xB6, 0xFE, 0xDC, 0xAA, 0xA9, 0x1, 0x23, 0xB6, 0x1, 0x17, 0x1, 0x6A, 0x3, 0x9A, 0x85, 0xEE, 0xC9, 0xDA, 0xB0, 0xA9, 0xDE, 0xE0, 0xA9, 0xB1, 0xD7, 0xFD, 0xF5, 0xD, 0xBA, 0x1, 0x4B, 0xD7, 0x21, 0xD8, 0x1, 0x4A, 0xBB, 0xFE, 0x69, 0xFE, 0xC3, 0x2A, 0xCF, 0xFE, 0xBD, 0x5D, 0xC1, 0x3, 0x53, 0xEB, 0x1, 0x20, 0xFE, 0xE0, 0xEB, 0x23, 0xEB, 0xFE, 0xDE, 0x1, 0x22, 0xEB, 0x0, 0x1, 0x0, 0x98, 0x0, 0x0, 0x2, 0xEF, 0x4, 0x8D, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x35, 0x25, 0x2, 0xEF, 0xF2, 0xFE, 0x9B, 0x2, 0x38, 0x4, 0x8D, 0xFB, 0x73, 0x3, 0x69, 0x7A, 0xCD, 0xD1, 0x0, 0x1, 0x0, 0x6F, 0x0, 0x0, 0x4, 0x2D, 0x4, 0x9F, 0x0, 0x18, 0x0, 0x0, 0x25, 0x15, 0x21, 0x35, 0x1, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x1, 0x4, 0x2D, 0xFC, 0x5F, 0x1, 0xF3, 0x53, 0x35, 0x5B, 0x69, 0x64, 0x7D, 0xF3, 0x1, 0x5, 0xCF, 0xD6, 0xDF, 0x7B, 0x7A, 0xFE, 0xE1, 0xC2, 0xC2, 0xA0, 0x1, 0xB2, 0x49, 0x68, 0x39, 0x3B, 0x66, 0x74, 0x64, 0xAD, 0xED, 0xBF, 0x94, 0x6E, 0xB2, 0x6A, 0xFF, 0x0, 0x0, 0x1, 0x0, 0xF, 0xFE, 0xA3, 0x3, 0xF3, 0x4, 0x8D, 0x0, 0x17, 0x0, 0x0, 0x1, 0x1, 0x21, 0x35, 0x21, 0x15, 0x1, 0x16, 0x16, 0x15, 0x10, 0x0, 0x21, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x10, 0x25, 0x23, 0x1, 0x51, 0x1, 0x4D, 0xFD, 0xBA, 0x3, 0x77, 0xFE, 0x9D, 0x9E, 0xE9, 0xFE, 0xB2, 0xFE, 0xFF, 0xC6, 0xCF, 0x39, 0x9F, 0xAB, 0xA8, 0xC0, 0xFE, 0xAF, 0x58, 0x2, 0x55, 0x1, 0x74, 0xC4, 0x8F, 0xFE, 0x80, 0x19, 0xEA, 0xBE, 0xFE, 0xFD, 0xFE, 0xE9, 0x67, 0xB6, 0x58, 0xBB, 0x90, 0x1, 0x20, 0x7, 0x0, 0x2, 0x0, 0x36, 0xFE, 0xC3, 0x4, 0x8B, 0x4, 0x8D, 0x0, 0x3, 0x0, 0xE, 0x0, 0x0, 0x25, 0x21, 0x11, 0x7, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x27, 0x1, 0x33, 0x11, 0x33, 0x1, 0x3A, 0x1, 0xA9, 0x17, 0x1, 0xBF, 0xB5, 0xF3, 0xFD, 0x59, 0x6, 0x2, 0xA5, 0xFB, 0xB5, 0xC3, 0x2, 0x7F, 0x2A, 0xFC, 0xE7, 0xFE, 0xC4, 0x1, 0x3C, 0x94, 0x3, 0xFA, 0xFC, 0x36, 0x0, 0x1, 0x0, 0x67, 0xFE, 0xA0, 0x4, 0x1E, 0x4, 0x8C, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x27, 0x13, 0x21, 0x15, 0x21, 0x3, 0x36, 0x37, 0x36, 0x12, 0x15, 0x14, 0x0, 0x21, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x1, 0x52, 0xCA, 0x5A, 0x3, 0x29, 0xFD, 0x9A, 0x2D, 0x60, 0x8B, 0xD1, 0xEA, 0xFE, 0xF2, 0xFE, 0xF0, 0xE6, 0xB3, 0x4A, 0x82, 0xBF, 0x9B, 0x9F, 0x87, 0x80, 0x5E, 0x5D, 0x1, 0x64, 0x11, 0x3, 0x17, 0xD1, 0xFE, 0xA9, 0x32, 0x2, 0x2, 0xFE, 0xF7, 0xE3, 0xD6, 0xFE, 0xC8, 0x75, 0xB1, 0x63, 0xC1, 0x88, 0x7F, 0xA9, 0x3C, 0x0, 0x1, 0x0, 0x43, 0xFE, 0xC3, 0x4, 0x11, 0x4, 0x8D, 0x0, 0x6, 0x0, 0x0, 0x1, 0x15, 0x1, 0x23, 0x1, 0x21, 0x35, 0x4, 0x11, 0xFD, 0xB5, 0xF3, 0x2, 0x3E, 0xFD, 0x32, 0x4, 0x8D, 0x87, 0xFA, 0xBD, 0x5, 0x7, 0xC3, 0x0, 0x2, 0x0, 0x76, 0x4, 0xD0, 0x2, 0xF8, 0x6, 0xDD, 0x0, 0x13, 0x0, 0x21, 0x0, 0x0, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x3, 0x33, 0x14, 0x6, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x2, 0x72, 0x67, 0x5D, 0x49, 0x50, 0x53, 0x41, 0x1E, 0x2B, 0x67, 0x5C, 0x49, 0x42, 0x63, 0x3F, 0x1E, 0x2C, 0x29, 0xAF, 0xAC, 0x95, 0x94, 0xAD, 0xAE, 0x42, 0x51, 0x50, 0x42, 0x6, 0xDD, 0x1E, 0x49, 0x6D, 0x47, 0x32, 0x25, 0x1C, 0x48, 0x70, 0x46, 0x31, 0xFE, 0xF8, 0x63, 0x7D, 0x7D, 0x63, 0x2C, 0x43, 0x43, 0x0, 0x1, 0x0, 0x5D, 0xFE, 0x99, 0x1, 0x50, 0x0, 0xB5, 0x0, 0x3, 0x0, 0x0, 0x25, 0x11, 0x23, 0x11, 0x1, 0x50, 0xF3, 0xB5, 0xFD, 0xE4, 0x2, 0x1C, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xF0, 0x6, 0x6D, 0x4, 0x9D, 0x0, 0x9, 0x0, 0x21, 0x0, 0x0, 0x25, 0x37, 0x11, 0x27, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x17, 0x22, 0x0, 0x11, 0x35, 0x10, 0x0, 0x33, 0x32, 0x16, 0x33, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x22, 0x6, 0x2, 0x61, 0xCD, 0xCF, 0x85, 0x98, 0x9A, 0x85, 0xE9, 0xFE, 0xD8, 0x1, 0x26, 0xE9, 0x40, 0xD9, 0x74, 0x2, 0x7E, 0xFD, 0xB7, 0x1, 0xF6, 0xFE, 0xA, 0x2, 0x4C, 0xFD, 0x81, 0x77, 0xD5, 0xB4, 0x8, 0x3, 0x13, 0x9, 0xC1, 0xB5, 0x36, 0xB5, 0xC3, 0xC4, 0x1, 0x32, 0x1, 0xA, 0x34, 0x1, 0xA, 0x1, 0x33, 0x10, 0xC4, 0xFE, 0xF3, 0xC3, 0xFE, 0xCA, 0xC3, 0x10, 0x0, 0x2, 0x0, 0x74, 0xFE, 0xB3, 0x4, 0x54, 0x4, 0xA1, 0x0, 0xC, 0x0, 0x23, 0x0, 0x0, 0x1, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x13, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x37, 0x6, 0x23, 0x22, 0x2, 0x35, 0x34, 0x0, 0x33, 0x32, 0x0, 0x13, 0x15, 0x10, 0x0, 0x2, 0x5F, 0x61, 0x80, 0x21, 0x8D, 0x7A, 0x6A, 0x89, 0x82, 0x1B, 0x9B, 0x87, 0x2F, 0x7D, 0x5B, 0x93, 0xC1, 0x1B, 0x74, 0xA9, 0xD4, 0xF3, 0x1, 0x11, 0xCA, 0xE0, 0x1, 0x22, 0x3, 0xFE, 0xAC, 0x1, 0x61, 0x46, 0x31, 0xAD, 0xAD, 0xAC, 0xAB, 0x98, 0x81, 0xB9, 0xFD, 0x52, 0x3D, 0xB5, 0x2F, 0xC0, 0xC8, 0x5A, 0x1, 0x15, 0xE2, 0xEF, 0x1, 0x17, 0xFE, 0xE8, 0xFE, 0xEB, 0xDA, 0xFE, 0x8E, 0xFE, 0x8B, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x5, 0xC4, 0x0, 0x13, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x13, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0xFE, 0x81, 0xC4, 0x28, 0xFC, 0xEE, 0xB, 0x4D, 0xE6, 0x8C, 0xD3, 0xF8, 0x1, 0xFD, 0x94, 0x4, 0xF1, 0x97, 0x77, 0xFC, 0x1D, 0x5, 0xB0, 0xB6, 0x5C, 0x6E, 0xE8, 0xFE, 0xED, 0xFC, 0x37, 0x3, 0xB5, 0xAC, 0x90, 0x0, 0x1, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x13, 0x0, 0x0, 0x21, 0x27, 0x6, 0x6, 0x23, 0x22, 0x26, 0x3, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x4, 0x2A, 0xA, 0x4E, 0xE5, 0x87, 0xD3, 0xFD, 0x1, 0xFC, 0x9C, 0x85, 0x73, 0xCD, 0x2A, 0xFD, 0xA1, 0x55, 0x60, 0xEC, 0x1, 0x17, 0x3, 0xC1, 0xFC, 0x52, 0xAF, 0x91, 0x87, 0x6D, 0x3, 0xFA, 0xFA, 0x50, 0x0, 0x2, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x5, 0xC4, 0x0, 0xA, 0x0, 0x29, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x11, 0x23, 0x6, 0x6, 0x15, 0x14, 0x16, 0x5, 0x26, 0x27, 0x6, 0x6, 0x23, 0x22, 0x24, 0x35, 0x34, 0x24, 0x25, 0x21, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x24, 0x21, 0x32, 0x4, 0x15, 0x11, 0x14, 0x17, 0x15, 0x2, 0x70, 0x8A, 0xCC, 0x23, 0xF6, 0xD4, 0xBE, 0x8C, 0x2, 0x20, 0x14, 0xA, 0x41, 0xD5, 0x95, 0xD0, 0xFE, 0xF2, 0x1, 0x3D, 0x1, 0x3F, 0x1, 0x7, 0x96, 0x9E, 0x91, 0xA5, 0xF9, 0x1, 0x2D, 0x1, 0xE, 0xEF, 0x1, 0x34, 0x29, 0xBC, 0x6D, 0x3C, 0x1, 0x27, 0x2, 0x6E, 0x78, 0x68, 0x80, 0xBC, 0x2E, 0x52, 0x3B, 0x59, 0xEA, 0xC4, 0xDA, 0xDD, 0x2, 0x7E, 0x85, 0x9F, 0x78, 0x80, 0xC8, 0xFF, 0xFA, 0xFB, 0xFD, 0x3D, 0x9E, 0x5D, 0x11, 0x0, 0x2, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x5, 0xC4, 0x0, 0x7, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x6, 0x6, 0x23, 0x20, 0x0, 0x11, 0x35, 0x34, 0x12, 0x24, 0x17, 0x4, 0x0, 0x13, 0x15, 0x21, 0x16, 0x12, 0x33, 0x32, 0x36, 0x37, 0x2, 0xD3, 0xA9, 0xB9, 0xE, 0x2, 0xD1, 0xA0, 0x1, 0x5F, 0x6D, 0xEE, 0xA9, 0xFE, 0xC4, 0xFE, 0xB2, 0xA4, 0x1, 0x1A, 0xB0, 0x1, 0x29, 0x1, 0x31, 0x3, 0xFC, 0x31, 0x5, 0xC2, 0xCF, 0x80, 0xB5, 0x3C, 0x4, 0xEB, 0xEC, 0xAF, 0x26, 0x9E, 0xD7, 0xFB, 0xD4, 0x61, 0x74, 0x1, 0x85, 0x1, 0x30, 0x74, 0xCB, 0x1, 0x37, 0xAF, 0x1, 0x1, 0xFE, 0xA3, 0xFE, 0xC6, 0xA2, 0xBE, 0xFE, 0xF7, 0x62, 0x35, 0x0, 0x1, 0x0, 0x95, 0x0, 0x0, 0x8, 0x15, 0x5, 0xC4, 0x0, 0x21, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x33, 0x20, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x13, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x6, 0x7, 0x13, 0x23, 0x11, 0x34, 0x26, 0x2, 0xD9, 0x73, 0xB0, 0x25, 0xFC, 0xEE, 0xA, 0x49, 0xD2, 0x80, 0x1, 0x16, 0x63, 0x4C, 0xEB, 0x8F, 0xC6, 0xE7, 0x1, 0xFC, 0x84, 0x7A, 0x73, 0xB1, 0x25, 0x1, 0xFC, 0x84, 0x4, 0xF1, 0x8B, 0x6F, 0xFC, 0x9, 0x5, 0xB0, 0xA7, 0x56, 0x65, 0xDB, 0x63, 0x78, 0xE2, 0xFE, 0xF4, 0xFC, 0x2A, 0x3, 0xC2, 0xA5, 0x8A, 0x8C, 0x70, 0xFC, 0xB, 0x3, 0xC2, 0xA5, 0x8A, 0x0, 0x1, 0xFF, 0xAF, 0xFE, 0x4B, 0x1, 0x8E, 0x0, 0xCD, 0x0, 0xC, 0x0, 0x0, 0x37, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x9B, 0xF3, 0xBB, 0xA5, 0x45, 0x3A, 0xE, 0x26, 0x3D, 0x78, 0x3, 0xCD, 0xFE, 0xF4, 0xB6, 0xC0, 0x11, 0xC5, 0xC, 0xA4, 0xFF, 0xFF, 0x0, 0x39, 0xFE, 0xA3, 0x4, 0x1D, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xD6, 0x2A, 0x0, 0xFF, 0xFF, 0x0, 0x6B, 0xFE, 0xA0, 0x4, 0x22, 0x4, 0x8C, 0x0, 0x6, 0x7, 0xD8, 0x4, 0x0, 0xFF, 0xFF, 0x0, 0x2C, 0xFE, 0xC3, 0x4, 0x81, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xD7, 0xF6, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0x0, 0x0, 0x4, 0x24, 0x4, 0x9F, 0x0, 0x6, 0x7, 0xD5, 0xF7, 0x0, 0xFF, 0xFF, 0x0, 0x63, 0xFE, 0xC3, 0x4, 0x31, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xD9, 0x20, 0x0, 0xFF, 0xFF, 0x0, 0x35, 0xFF, 0xEB, 0x4, 0x58, 0x4, 0xA0, 0x0, 0x6, 0x8, 0x99, 0xD2, 0x0, 0xFF, 0xFF, 0x0, 0x6F, 0xFF, 0xEC, 0x4, 0x30, 0x5, 0xB7, 0x0, 0x6, 0x0, 0x1B, 0xF9, 0x0, 0xFF, 0xFF, 0x0, 0x59, 0xFE, 0xB3, 0x4, 0x39, 0x4, 0xA1, 0x0, 0x6, 0x7, 0xDD, 0xE5, 0x0, 0xFF, 0xFF, 0x0, 0x69, 0xFF, 0xEC, 0x4, 0x23, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x1D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xE4, 0x0, 0x0, 0x3, 0x3B, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xD4, 0x4C, 0x0, 0xFF, 0xFF, 0xFF, 0xB5, 0xFE, 0x4B, 0x1, 0x94, 0x4, 0x3A, 0x0, 0x6, 0x0, 0xEC, 0x0, 0x0, 0x0, 0x1, 0x0, 0x90, 0xFE, 0x52, 0x2, 0x91, 0x4, 0x3A, 0x0, 0x10, 0x0, 0x0, 0x1, 0x20, 0x3, 0x35, 0x23, 0x11, 0x33, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x15, 0x6, 0x2, 0x17, 0xFE, 0xD9, 0x8, 0x58, 0xF3, 0x35, 0x55, 0x3E, 0x26, 0x20, 0x39, 0xFE, 0x52, 0x1, 0x4E, 0x60, 0x4, 0x3A, 0xFC, 0x84, 0xFE, 0xF4, 0x5F, 0x46, 0x7, 0xB1, 0x11, 0xFF, 0xFF, 0x0, 0x1E, 0xFE, 0x4B, 0x2, 0xCE, 0x4, 0x3A, 0x0, 0x26, 0x0, 0xEC, 0x69, 0x0, 0x0, 0x6, 0x7, 0xA4, 0xA0, 0x89, 0xFF, 0xFF, 0x0, 0x1A, 0x0, 0x0, 0x2, 0xB8, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x8E, 0x64, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x8A, 0x89, 0xFF, 0xFF, 0xFF, 0xB5, 0xFE, 0x4B, 0x1, 0x94, 0x4, 0x3A, 0x0, 0x6, 0x0, 0xEC, 0x0, 0x0, 0x0, 0x2, 0x0, 0x1E, 0xFE, 0x4B, 0x3, 0x99, 0x4, 0x3A, 0x0, 0x10, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x14, 0x6, 0x27, 0x32, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0x16, 0x1, 0x65, 0x9A, 0xAD, 0xA9, 0x8A, 0x7D, 0xF3, 0xD8, 0xD8, 0x96, 0xC9, 0x6C, 0x62, 0x6B, 0x38, 0xFE, 0x4B, 0x99, 0x78, 0x80, 0x8E, 0x3, 0xD0, 0xFC, 0x30, 0xB4, 0x13, 0x87, 0xD1, 0xAF, 0x77, 0x45, 0x5E, 0x2C, 0x32, 0x0, 0x1, 0x0, 0x8D, 0x2, 0x30, 0x1, 0x52, 0x5, 0x54, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x52, 0xC5, 0x5, 0x54, 0xFC, 0xDC, 0x3, 0x24, 0xFF, 0xFF, 0x0, 0x90, 0x0, 0x0, 0x1, 0x83, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x28, 0x2, 0x8C, 0x2, 0x42, 0x5, 0xAD, 0x0, 0xB, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x2, 0x42, 0xAC, 0xC5, 0xA9, 0xA9, 0xC5, 0xAC, 0x4, 0xB, 0xFE, 0x81, 0x1, 0x7F, 0xA0, 0x1, 0x2, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFA, 0xFE, 0x5C, 0x1, 0x83, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8C, 0xD1, 0xA, 0xFF, 0xFF, 0x0, 0x90, 0x0, 0x0, 0x1, 0x83, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x88, 0xFF, 0x38, 0x1, 0x4D, 0x2, 0x59, 0x0, 0x3, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x4D, 0xC5, 0x2, 0x59, 0xFC, 0xDF, 0x3, 0x21, 0xFF, 0xFF, 0xFF, 0xB5, 0xFE, 0x4B, 0x1, 0x94, 0x4, 0x3A, 0x0, 0x6, 0x0, 0xEC, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x1, 0x3D, 0x2, 0x7D, 0x5, 0xAD, 0x0, 0xF, 0x0, 0x18, 0x0, 0x0, 0x13, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x14, 0x6, 0x27, 0x32, 0x36, 0x35, 0x35, 0x23, 0x22, 0x15, 0x14, 0xFB, 0x67, 0x94, 0x9D, 0x6A, 0x27, 0xC5, 0x8A, 0x8A, 0x70, 0x90, 0x24, 0x17, 0x21, 0x50, 0x1, 0x3D, 0x6A, 0x67, 0x77, 0x7C, 0x2, 0xAC, 0xFD, 0x54, 0xA7, 0x83, 0x9A, 0xA3, 0x2C, 0x22, 0x2C, 0x40, 0x3A, 0x0, 0x1, 0x0, 0x22, 0x1, 0x4C, 0x1, 0x7E, 0x5, 0xB0, 0x0, 0xC, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0xB9, 0xC5, 0x79, 0x83, 0x31, 0x2F, 0x16, 0x21, 0x60, 0x5, 0xB0, 0xFC, 0xC9, 0x86, 0xA7, 0xD, 0xA6, 0x6, 0x80, 0x0, 0x1, 0x0, 0x22, 0xFD, 0xF5, 0x1, 0x7E, 0x2, 0x59, 0x0, 0xC, 0x0, 0x0, 0x13, 0x33, 0x11, 0x14, 0x6, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x35, 0xB9, 0xC5, 0x79, 0x83, 0x36, 0x2A, 0x1B, 0x1C, 0x60, 0x2, 0x59, 0xFC, 0xC9, 0x86, 0xA7, 0xD, 0xA5, 0x6, 0x81, 0x0, 0x1, 0x0, 0x76, 0xFF, 0xEB, 0x4, 0x16, 0x4, 0x9D, 0x0, 0x22, 0x0, 0x0, 0x5, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x13, 0x26, 0x23, 0x22, 0x15, 0x11, 0x23, 0x11, 0x31, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x3, 0x16, 0x16, 0x15, 0x14, 0x6, 0x2, 0x8E, 0x7B, 0x6C, 0x45, 0x4B, 0x48, 0x50, 0x58, 0x7C, 0x74, 0x54, 0xCA, 0x43, 0x54, 0xB1, 0xEF, 0x1, 0xD1, 0xD0, 0x89, 0xCE, 0x55, 0xF8, 0x9A, 0xB0, 0xE1, 0x15, 0x36, 0xBB, 0x31, 0x66, 0x51, 0x57, 0x48, 0xA2, 0x1, 0x1, 0x39, 0xFC, 0xFD, 0x1F, 0x2, 0xED, 0xD8, 0xD8, 0x74, 0x5D, 0xFE, 0xD5, 0x15, 0xA1, 0x87, 0xB7, 0xC2, 0x0, 0x1, 0x0, 0x25, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xEE, 0xFE, 0x67, 0xA8, 0x1, 0x9B, 0x1, 0x94, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x8F, 0xDD, 0xFD, 0x4E, 0x66, 0x2, 0xB7, 0x1, 0x74, 0x1, 0x1F, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x23, 0x1, 0x37, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFC, 0xD9, 0xA8, 0x2, 0x7F, 0xF3, 0x5, 0x4A, 0x66, 0xFB, 0xD0, 0x4, 0x30, 0x0, 0x1, 0x0, 0xA, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xFA, 0xFE, 0x76, 0xBA, 0x1, 0xB7, 0x2, 0x86, 0xF3, 0x4, 0xE9, 0xFB, 0x17, 0x3A, 0x5, 0x76, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x37, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x4F, 0xA8, 0x1, 0x35, 0xEA, 0xF3, 0x3, 0x76, 0xFE, 0xFE, 0x2, 0xD6, 0x66, 0xFD, 0xEB, 0xDA, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0x74, 0xFE, 0x50, 0xA8, 0x1, 0x78, 0x3, 0x3B, 0x2, 0x75, 0xFA, 0x50, 0x2, 0x75, 0x2, 0xD5, 0x66, 0xFD, 0x8B, 0x0, 0x1, 0x0, 0x9D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF6, 0xFE, 0x53, 0xA8, 0x1, 0x5, 0x1, 0x9, 0xF4, 0x4, 0x37, 0xFE, 0x41, 0x2, 0xD2, 0x66, 0xFE, 0x3C, 0x1, 0xC4, 0x0, 0x1, 0x0, 0x87, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x1, 0x37, 0x1, 0x37, 0x11, 0x33, 0x11, 0x23, 0x11, 0x2, 0x3E, 0xFE, 0x49, 0xB9, 0x1, 0x5D, 0xB7, 0xF3, 0xF3, 0x5, 0x76, 0x3A, 0xFB, 0xA5, 0xAC, 0x3, 0xAF, 0xFA, 0x50, 0x1, 0x1, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x27, 0x1, 0x4, 0x47, 0xF3, 0xFD, 0x81, 0xA8, 0x3, 0x27, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0x30, 0xFB, 0xD0, 0x66, 0x5, 0x4A, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF8, 0xFE, 0x5B, 0xB7, 0x1, 0x11, 0xE5, 0xF3, 0x1, 0xC3, 0xFE, 0x3D, 0x4, 0x2A, 0x4B, 0xFD, 0x3F, 0x1, 0x87, 0x2, 0x75, 0x0, 0x1, 0x0, 0x98, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xE9, 0xFE, 0x5B, 0xB7, 0xFC, 0x1, 0x9, 0xF3, 0x2, 0xAC, 0xFD, 0x54, 0x4, 0x2A, 0x4B, 0xFD, 0x75, 0x2, 0x8B, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x90, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xDC, 0xFE, 0x60, 0xB7, 0xE3, 0x1, 0x2A, 0xF3, 0x3, 0x66, 0xFC, 0x9A, 0x4, 0x2A, 0x4B, 0xFD, 0xB2, 0x3, 0x89, 0x0, 0x1, 0x0, 0x24, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x25, 0x11, 0x33, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xFD, 0x81, 0xFE, 0x5C, 0xB6, 0x1, 0x7A, 0xC7, 0x4, 0xE9, 0xFA, 0x50, 0x4, 0x2A, 0x4B, 0xFC, 0x52, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x11, 0x1, 0x1, 0x37, 0x1, 0x37, 0x11, 0x33, 0x11, 0x3, 0x54, 0xFE, 0xEA, 0xFE, 0x5B, 0xB7, 0x1, 0x3B, 0xC9, 0xF3, 0x1, 0x1, 0xFE, 0xFF, 0x4, 0x2A, 0x4B, 0xFC, 0xD1, 0xBB, 0x3, 0xAF, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x27, 0x1, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xE7, 0xFE, 0xC9, 0xA8, 0x1, 0xAF, 0x1, 0x17, 0xF3, 0x3, 0xAF, 0xD6, 0xFD, 0xF0, 0x65, 0x2, 0xD6, 0xFE, 0xFF, 0x1, 0x1, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xDB, 0xFE, 0xF3, 0xA8, 0x1, 0xAE, 0x1, 0x2C, 0xF3, 0x2, 0x73, 0x1, 0xD5, 0xFE, 0x2D, 0x65, 0x2, 0xD6, 0xFE, 0x1B, 0x1, 0xE5, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x27, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xE4, 0xFE, 0x88, 0xA8, 0x1, 0xB0, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0xE9, 0xFD, 0x8C, 0x65, 0x2, 0xD6, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xD2, 0xF1, 0xA8, 0x1, 0xA9, 0x1, 0x1E, 0xF3, 0x1, 0x3B, 0x2, 0xDB, 0xFE, 0x5F, 0x65, 0x2, 0xD6, 0xFD, 0x56, 0x2, 0xAA, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xB6, 0xDE, 0xA8, 0x1, 0xAC, 0x1, 0x24, 0xF3, 0x3, 0xEF, 0xFE, 0x86, 0x65, 0x2, 0xD6, 0xFC, 0x8E, 0x3, 0x72, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x48, 0xB9, 0x1, 0x1F, 0xF6, 0xF3, 0x2, 0xAC, 0xFD, 0x54, 0x5, 0x76, 0x3A, 0xFC, 0x6A, 0x2, 0x5B, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x96, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xFA, 0xFE, 0x48, 0xB9, 0x1, 0x34, 0xD1, 0xF3, 0x1, 0xC3, 0xFE, 0x3E, 0x5, 0x75, 0x3A, 0xFC, 0x24, 0x1, 0x67, 0x2, 0x75, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x27, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xEA, 0xFE, 0xCB, 0xA8, 0x1, 0xB1, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0xDA, 0xFD, 0xEB, 0x66, 0x2, 0xD6, 0xFE, 0xFF, 0x3, 0x75, 0x0, 0x1, 0x0, 0x9D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF4, 0xFE, 0xF7, 0xFE, 0xFB, 0xA8, 0x1, 0xAD, 0x1, 0xA, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xC4, 0xFE, 0x3C, 0x66, 0x2, 0xD2, 0xFE, 0x41, 0x4, 0x37, 0x0, 0x1, 0x0, 0x31, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x1, 0x27, 0x1, 0x1, 0x4, 0x47, 0xF3, 0xDF, 0xFE, 0x73, 0xB7, 0x1, 0x8E, 0x1, 0x95, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0xAE, 0xCD, 0xFC, 0x1F, 0x4B, 0x3, 0xF1, 0x1, 0x74, 0x0, 0x1, 0x0, 0x7E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xE1, 0xFE, 0x49, 0xB9, 0x1, 0x8, 0x1, 0x15, 0xF3, 0x3, 0x66, 0xFC, 0x9A, 0x5, 0x76, 0x3A, 0xFC, 0xB5, 0x3, 0x4B, 0x0, 0x1, 0x0, 0x9E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x8E, 0xC5, 0x7F, 0x1, 0x96, 0x1, 0x20, 0xF3, 0x4, 0x66, 0xB7, 0x8D, 0x1, 0x74, 0xFC, 0x8E, 0x3, 0x72, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xAD, 0xDC, 0x7E, 0x1, 0x95, 0x1, 0x18, 0xF3, 0x1, 0x3B, 0x3, 0x3E, 0xCA, 0x8D, 0x1, 0x74, 0xFD, 0x56, 0x2, 0xAA, 0x0, 0x1, 0x0, 0xB7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF8, 0xFE, 0x6B, 0x7E, 0xE8, 0x1, 0x36, 0xF4, 0x4, 0x37, 0xFE, 0x3E, 0x1, 0x74, 0x8D, 0xD6, 0x2, 0x10, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x37, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xE9, 0xFE, 0x51, 0xA8, 0x1, 0x37, 0xE7, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x1, 0xFE, 0xFF, 0x2, 0xD6, 0x65, 0xFD, 0xF0, 0xD7, 0x3, 0xAE, 0x0, 0x1, 0x0, 0x33, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0x74, 0xFE, 0x6B, 0x7F, 0x1, 0x58, 0x3, 0x3B, 0x2, 0x75, 0xFA, 0x50, 0x2, 0x75, 0x1, 0x74, 0x8D, 0xFE, 0xC5, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6A, 0x7F, 0x1, 0x17, 0x1, 0x16, 0xF3, 0x3, 0x76, 0xFE, 0xFE, 0x1, 0x74, 0x8D, 0xFE, 0xFF, 0x1, 0x1, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x38, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x1, 0x37, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x55, 0xFE, 0x8F, 0x7F, 0x1, 0x96, 0x1, 0x7, 0xF3, 0x2, 0xCE, 0x1, 0x53, 0x8D, 0xFE, 0x8D, 0xFE, 0x45, 0x4, 0x30, 0x0, 0x1, 0x0, 0x39, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x1, 0x37, 0x1, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFC, 0xE5, 0x7E, 0x2, 0x9D, 0xF3, 0xF3, 0x1, 0x1F, 0x2, 0xDC, 0x8D, 0xFD, 0x9A, 0x3, 0x8E, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x94, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xB3, 0xF4, 0x7F, 0x1, 0x95, 0x1, 0x2B, 0xF3, 0x2, 0x75, 0x2, 0x1C, 0xE2, 0x8D, 0x1, 0x74, 0xFE, 0x1B, 0x1, 0xE5, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x5, 0x35, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEB, 0xFE, 0xE8, 0x7F, 0x1, 0x95, 0x1, 0x17, 0xF3, 0x3, 0xAF, 0x1, 0x0, 0xFF, 0x0, 0x8D, 0x1, 0x74, 0xFF, 0xFF, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x21, 0x1, 0x27, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xBA, 0xFE, 0xA7, 0x7E, 0x1, 0x95, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0xE9, 0xFE, 0xC6, 0x8D, 0x1, 0x74, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x1, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x50, 0xA8, 0x1, 0x8, 0xF3, 0x2, 0x75, 0x2, 0xD5, 0x66, 0xFE, 0x44, 0x1, 0xBC, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x5, 0x35, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x6B, 0x7F, 0x1, 0x16, 0xF3, 0x3, 0xAF, 0x1, 0x74, 0x8D, 0xFF, 0xFF, 0x0, 0x1, 0x0, 0xBA, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0x8B, 0xFE, 0xDB, 0x1, 0x93, 0x1, 0x7, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x75, 0xC6, 0xFE, 0x45, 0x4, 0x30, 0x0, 0x1, 0x0, 0x71, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x23, 0x1, 0x37, 0x13, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x49, 0xBA, 0xFD, 0xF3, 0x5, 0x76, 0x3A, 0xFC, 0xD8, 0x3, 0x28, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x13, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x5C, 0xB6, 0xEE, 0xF3, 0x1, 0x3B, 0x4, 0x2A, 0x4B, 0xFD, 0xAB, 0x2, 0x55, 0x0, 0x1, 0x0, 0x33, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xB6, 0xFE, 0xA8, 0x7F, 0x1, 0x95, 0x1, 0x8C, 0xF3, 0xF3, 0x2, 0x75, 0xFE, 0xC5, 0x8D, 0x1, 0x74, 0x2, 0x75, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x39, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x1, 0x27, 0x3, 0x54, 0xF3, 0xF3, 0xFD, 0x63, 0x7E, 0x4, 0x91, 0x1, 0x1F, 0xFA, 0x50, 0x3, 0x8F, 0xFD, 0x99, 0x8D, 0x0, 0x1, 0x0, 0x38, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xF9, 0xFE, 0x6A, 0x7F, 0x1, 0x71, 0x1, 0xAB, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0x30, 0xFE, 0x45, 0xFE, 0x8D, 0x8D, 0x1, 0x53, 0x2, 0xCE, 0x0, 0x1, 0x0, 0x90, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xD6, 0xE3, 0xB7, 0x1, 0xA0, 0x1, 0x24, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x89, 0xFD, 0xB2, 0x4B, 0x4, 0x2A, 0xFC, 0x9A, 0x3, 0x66, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x5, 0x21, 0x35, 0x21, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6D, 0x1, 0x54, 0x1, 0x55, 0xF3, 0x4, 0xAE, 0xFF, 0xC6, 0x1, 0x3B, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x5, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xAB, 0xFE, 0xAC, 0x1, 0x93, 0x1, 0x16, 0xF3, 0x2, 0x75, 0x1, 0x3A, 0xC7, 0xFF, 0x2, 0x39, 0x0, 0x1, 0x0, 0xB2, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x8B, 0xFE, 0xD3, 0x1, 0x9B, 0x1, 0x7, 0xF3, 0x1, 0x3B, 0x2, 0x74, 0xC7, 0xFE, 0x44, 0x2, 0xF6, 0x0, 0x1, 0x0, 0xBC, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x21, 0x35, 0x21, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x8D, 0xFE, 0xDB, 0x1, 0xAA, 0xEE, 0xF3, 0x3, 0xAF, 0xC6, 0xFD, 0xAB, 0x3, 0x90, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xE5, 0xFE, 0xEF, 0xB7, 0x1, 0xA5, 0x1, 0x8, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x75, 0x1, 0x87, 0xFD, 0x3F, 0x4B, 0x4, 0x2A, 0xFE, 0x3E, 0x1, 0xC2, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x33, 0x11, 0x23, 0x11, 0x27, 0x1, 0x27, 0x1, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xC9, 0xFE, 0xC5, 0xB7, 0x1, 0xA5, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0xAF, 0xBB, 0xFC, 0xD1, 0x4B, 0x4, 0x2A, 0xFE, 0xFF, 0x0, 0x1, 0x0, 0xB7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF4, 0xFE, 0xCA, 0xE8, 0x7E, 0x1, 0x95, 0x1, 0x8, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x10, 0xD6, 0x8D, 0x1, 0x74, 0xFE, 0x3E, 0x4, 0x37, 0x0, 0x1, 0x0, 0xA, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x25, 0x11, 0x33, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xFD, 0x7A, 0xFE, 0x49, 0xBA, 0x1, 0x8A, 0xC7, 0x4, 0xE9, 0xFA, 0x50, 0x5, 0x76, 0x3A, 0xFB, 0x17, 0x0, 0x1, 0x0, 0xBC, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x8D, 0xFE, 0xDB, 0x1, 0xAA, 0xEE, 0xF3, 0x1, 0x3B, 0x3, 0xAE, 0xC7, 0xFD, 0xAB, 0x2, 0x55, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x21, 0x35, 0x21, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x76, 0xFE, 0xE1, 0x1, 0xAC, 0xFD, 0xF3, 0x4, 0xE9, 0xC7, 0xFC, 0xD8, 0x3, 0x28, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x5, 0x35, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xAB, 0xFE, 0xAC, 0x1, 0x93, 0x1, 0x16, 0xF3, 0x3, 0xAF, 0x1, 0x3A, 0xC7, 0xFF, 0xFF, 0x0, 0x1, 0x0, 0xB2, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x8B, 0xFE, 0xD3, 0x1, 0x9B, 0x1, 0x7, 0xF3, 0x2, 0x75, 0x2, 0x74, 0xC7, 0xFE, 0x44, 0x1, 0xBC, 0x0, 0x1, 0x0, 0x47, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFC, 0xF3, 0x7F, 0x2, 0x8E, 0xF3, 0x2, 0x59, 0x2, 0xCA, 0x8D, 0xFD, 0xAB, 0x2, 0x55, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0x78, 0xFE, 0x6B, 0x7E, 0x1, 0x59, 0x4, 0x75, 0x1, 0x3B, 0xFA, 0x50, 0x3, 0xAF, 0x1, 0x74, 0x8D, 0xFE, 0xC5, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6A, 0x7F, 0x1, 0x17, 0x1, 0x16, 0xF3, 0x4, 0xB0, 0xFE, 0xFF, 0x1, 0x74, 0x8D, 0xFE, 0xFE, 0x1, 0x2, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xE5, 0xFE, 0xEF, 0xB7, 0x1, 0xA5, 0x1, 0x8, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x1, 0x86, 0xFD, 0x3F, 0x4B, 0x4, 0x2B, 0xFE, 0x3E, 0x2, 0xFC, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x27, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xC9, 0xFE, 0xC5, 0xB7, 0x1, 0xA5, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x75, 0xBB, 0xFC, 0xD0, 0x4B, 0x4, 0x2A, 0xFE, 0xFF, 0x2, 0x3C, 0x0, 0x1, 0x0, 0x1D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xF9, 0xFE, 0x86, 0xB6, 0x1, 0xA4, 0x1, 0x93, 0xF3, 0xF3, 0x3, 0xAF, 0xFC, 0x51, 0x4B, 0x4, 0x2B, 0x1, 0x3A, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x67, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x7B, 0xFE, 0x98, 0x7F, 0x1, 0x96, 0xD8, 0xF3, 0x3, 0xD8, 0x1, 0x4B, 0x8D, 0xFE, 0x8E, 0xFD, 0xE2, 0x3, 0x90, 0x0, 0x1, 0x0, 0x49, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x64, 0xFE, 0x91, 0x7D, 0x1, 0x95, 0xF9, 0xF3, 0x1, 0x1F, 0x2, 0xB2, 0x1, 0x52, 0x8D, 0xFE, 0x8E, 0xFE, 0x61, 0x3, 0x11, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x27, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0xF8, 0xA8, 0x1, 0xB0, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xF6, 0xFE, 0x44, 0x66, 0x2, 0xD5, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x27, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0xEA, 0x7F, 0x1, 0x95, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x39, 0xFF, 0x8D, 0x1, 0x74, 0x2, 0x75, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x27, 0x1, 0x3, 0x1B, 0xF3, 0xEE, 0xB6, 0x1, 0xA4, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x90, 0xFD, 0xAB, 0x4B, 0x4, 0x2A, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x37, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0x6B, 0x7F, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x74, 0x8E, 0xFF, 0x0, 0x4, 0xAE, 0x0, 0x1, 0x0, 0xBC, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x21, 0x35, 0x21, 0x1, 0x4, 0x47, 0xF3, 0xEE, 0xFE, 0x56, 0x1, 0x25, 0x1, 0x73, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x90, 0xFD, 0xAB, 0xC7, 0x3, 0xAE, 0x0, 0x1, 0x0, 0x9D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xF6, 0xFE, 0xFB, 0xA8, 0x1, 0xAE, 0x1, 0x9, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x1, 0xC4, 0xFE, 0x3C, 0x65, 0x2, 0xD2, 0xFE, 0x42, 0x2, 0xFC, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xD4, 0xF3, 0xA8, 0x1, 0xAC, 0x1, 0x1B, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xDE, 0xFE, 0x5C, 0x66, 0x2, 0xD5, 0xFD, 0x55, 0x3, 0xE6, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xE4, 0xFE, 0x88, 0xA8, 0x1, 0xB0, 0x1, 0x8C, 0xF3, 0xF3, 0x3, 0xAF, 0xFD, 0x8B, 0x66, 0x2, 0xD6, 0x1, 0x3A, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x27, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xEA, 0xFE, 0xCC, 0xA8, 0x1, 0xB0, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x75, 0xDA, 0xFD, 0xEC, 0x65, 0x2, 0xD6, 0xFE, 0xFE, 0x2, 0x3C, 0x0, 0x1, 0x0, 0x23, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x7, 0x1, 0x27, 0x1, 0x1, 0x4, 0x47, 0xF3, 0xEE, 0xFE, 0x65, 0xA8, 0x1, 0x9D, 0x1, 0x94, 0x5, 0xB0, 0xFA, 0x50, 0x4, 0xAE, 0xDC, 0xFD, 0x4F, 0x66, 0x2, 0xB5, 0x1, 0x74, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x1, 0x37, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xE9, 0xFE, 0x6B, 0x7F, 0x1, 0x18, 0x1, 0x15, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x39, 0xFF, 0x1, 0x74, 0x8D, 0xFF, 0x0, 0x1, 0x0, 0x2, 0x75, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xE4, 0xFE, 0x88, 0xA8, 0x1, 0xB0, 0x1, 0x8C, 0xF3, 0xF3, 0x2, 0x75, 0xFD, 0x8B, 0x66, 0x2, 0xD5, 0x2, 0x75, 0xFA, 0x50, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xE8, 0xFE, 0x6B, 0x7E, 0xDC, 0x1, 0x53, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0xE5, 0xFD, 0x56, 0x1, 0x74, 0x8D, 0xCA, 0x3, 0x3E, 0x0, 0x1, 0x0, 0x96, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xD1, 0xFE, 0xCC, 0xB9, 0x1, 0xB8, 0x1, 0x6, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x75, 0x1, 0x67, 0xFC, 0x24, 0x3A, 0x5, 0x75, 0xFE, 0x3F, 0x1, 0xC2, 0x0, 0x1, 0x0, 0x86, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xF6, 0xFE, 0xE1, 0xB9, 0x1, 0xB8, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x2, 0x5C, 0xFC, 0x69, 0x3A, 0x5, 0x76, 0xFD, 0x54, 0x2, 0xAC, 0x0, 0x1, 0x0, 0x7E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xEB, 0xFE, 0xF8, 0xB9, 0x1, 0xB7, 0x1, 0x1F, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x4B, 0xFC, 0xB5, 0x3A, 0x5, 0x76, 0xFC, 0x9A, 0x3, 0x66, 0x0, 0x1, 0x0, 0x3C, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x1, 0x37, 0x3, 0x54, 0xF3, 0xF3, 0xFC, 0xE8, 0x7F, 0x1, 0x2, 0x4, 0xAE, 0xFA, 0x50, 0x2, 0xD9, 0x8D, 0x0, 0x1, 0x0, 0x2C, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x37, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0x6D, 0xFE, 0x6B, 0x7F, 0x1, 0x58, 0x1, 0x51, 0xF3, 0xF3, 0x1, 0x3B, 0x1, 0x74, 0x8D, 0xFE, 0xC6, 0x3, 0xAE, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x98, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xF7, 0xFC, 0xB7, 0x1, 0xA5, 0x1, 0x17, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x2, 0x8B, 0xFD, 0x75, 0x4B, 0x4, 0x2A, 0xFD, 0x54, 0x2, 0xAC, 0x0, 0x1, 0x0, 0x24, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x23, 0x3, 0x54, 0xFF, 0x0, 0xFE, 0x86, 0xB6, 0x1, 0xA4, 0x2, 0x7F, 0xF3, 0x4, 0xE9, 0xFC, 0x52, 0x4B, 0x4, 0x2A, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x37, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0x50, 0xA8, 0x1, 0x8, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xD6, 0x65, 0xFE, 0x45, 0x4, 0x30, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x37, 0x5, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0x6B, 0x7F, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x1, 0x74, 0x8D, 0xFF, 0x3, 0x73, 0x0, 0x1, 0x0, 0x94, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xD5, 0xFE, 0x6B, 0x7F, 0xF4, 0x1, 0x4D, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xE5, 0xFE, 0x1B, 0x1, 0x74, 0x8E, 0xE3, 0x2, 0x1C, 0x2, 0x75, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xE8, 0xFE, 0x6B, 0x7E, 0xDC, 0x1, 0x53, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xAA, 0xFD, 0x56, 0x1, 0x74, 0x8E, 0xCB, 0x3, 0x3E, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x27, 0x1, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0xF8, 0xA8, 0x1, 0xB0, 0xF3, 0x4, 0x30, 0xFE, 0x45, 0x65, 0x2, 0xD6, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x35, 0x5, 0x1, 0x37, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xE9, 0xFE, 0x6B, 0x7F, 0x1, 0x18, 0x1, 0x15, 0x5, 0xB0, 0xFA, 0x50, 0xFF, 0xFF, 0x1, 0x74, 0x8E, 0xFE, 0xFF, 0x1, 0x1, 0x3, 0xAE, 0x0, 0x1, 0x0, 0x87, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x27, 0x1, 0x27, 0x2, 0x3E, 0x1, 0x16, 0xF3, 0xF3, 0xB7, 0xFE, 0xA3, 0xB9, 0x5, 0xB0, 0xFE, 0xFF, 0x1, 0x1, 0xFA, 0x50, 0x3, 0xAF, 0xAC, 0xFB, 0xA5, 0x3A, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x5, 0x27, 0x1, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0xEA, 0x7F, 0x1, 0x95, 0xF3, 0x3, 0x73, 0xFF, 0x8D, 0x1, 0x74, 0x1, 0x3B, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x5, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6D, 0x1, 0x54, 0x1, 0x55, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x39, 0xFF, 0xC7, 0x1, 0x3A, 0x2, 0x75, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0xE9, 0x7F, 0x1, 0x96, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x1, 0x2, 0xFE, 0xFE, 0x8D, 0x1, 0x74, 0xFE, 0xFF, 0x3, 0x75, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x5, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xAB, 0xFE, 0xAC, 0x1, 0x93, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0x1, 0x3A, 0xC7, 0xFF, 0x3, 0x73, 0x0, 0x1, 0x0, 0xBA, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF9, 0xFE, 0x6D, 0x1, 0x25, 0x1, 0x75, 0xF3, 0x4, 0x30, 0xFE, 0x45, 0xC6, 0x2, 0x75, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x5, 0x21, 0x35, 0x21, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6D, 0x1, 0x54, 0x1, 0x55, 0xF3, 0x3, 0x73, 0xFF, 0xC7, 0x1, 0x3A, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x21, 0x1, 0x37, 0x1, 0x21, 0x11, 0x33, 0x4, 0x47, 0xFD, 0x81, 0xFE, 0x50, 0xA8, 0x1, 0x78, 0x1, 0x1C, 0xF3, 0x2, 0xD6, 0x65, 0xFD, 0x8C, 0x4, 0xE9, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xE2, 0xFE, 0x57, 0xA8, 0xF1, 0x1, 0x2E, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xAA, 0xFD, 0x56, 0x2, 0xD6, 0x65, 0xFE, 0x5F, 0x2, 0xDB, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xD4, 0xFE, 0x52, 0xA8, 0x1, 0xD, 0x1, 0x25, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xE5, 0xFE, 0x1B, 0x2, 0xD6, 0x65, 0xFE, 0x2D, 0x1, 0xD5, 0x2, 0x73, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xDC, 0xFE, 0x54, 0xA8, 0xDE, 0x1, 0x4A, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x72, 0xFC, 0x8E, 0x2, 0xD6, 0x65, 0xFE, 0x86, 0x3, 0xEF, 0x0, 0x1, 0x0, 0x94, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xD5, 0xFE, 0x6B, 0x7F, 0xF4, 0x1, 0x4D, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x1F, 0xFE, 0x1B, 0x1, 0x74, 0x8D, 0xE2, 0x2, 0x1C, 0x1, 0x3B, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xAB, 0xFE, 0xAC, 0x1, 0x93, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x3B, 0xC7, 0xFF, 0x0, 0x4, 0xAE, 0x0, 0x1, 0x0, 0x98, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xE9, 0xFE, 0x5B, 0xB7, 0xFC, 0x1, 0x9, 0xF3, 0x3, 0xE6, 0xFD, 0x55, 0x4, 0x2A, 0x4B, 0xFD, 0x75, 0x2, 0x8B, 0x0, 0x1, 0x0, 0x99, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x37, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x5B, 0xB7, 0x1, 0x3B, 0xC9, 0xF3, 0x2, 0x3C, 0xFE, 0xFF, 0x4, 0x2A, 0x4B, 0xFC, 0xD0, 0xBB, 0x2, 0x75, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x13, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF8, 0xFE, 0x5B, 0xB7, 0x1, 0x11, 0xE5, 0xF3, 0x2, 0xFC, 0xFE, 0x3E, 0x4, 0x2B, 0x4B, 0xFD, 0x3F, 0x1, 0x86, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0x74, 0xFE, 0x50, 0xA8, 0x1, 0x78, 0x2, 0x1, 0x3, 0xAF, 0xFA, 0x50, 0x1, 0x3A, 0x2, 0xD6, 0x66, 0xFD, 0x8B, 0x0, 0x1, 0x0, 0x23, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x1, 0x37, 0x1, 0x17, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x6C, 0xFE, 0x63, 0xA8, 0x1, 0x9B, 0xEE, 0xF3, 0x1, 0x74, 0x2, 0xB5, 0x66, 0xFD, 0x4F, 0xDC, 0x4, 0xAE, 0x0, 0x1, 0x0, 0x9D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xF7, 0xFE, 0x52, 0xA8, 0x1, 0x5, 0x1, 0xA, 0xF3, 0x2, 0xFC, 0xFE, 0x42, 0x2, 0xD2, 0x65, 0xFE, 0x3C, 0x1, 0xC4, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x1, 0x37, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x50, 0xA8, 0x1, 0x34, 0xEA, 0xF3, 0x2, 0x3C, 0xFE, 0xFE, 0x2, 0xD6, 0x65, 0xFD, 0xEC, 0xDA, 0x2, 0x75, 0x0, 0x1, 0x0, 0x8D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x37, 0x13, 0x1, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xE5, 0xFE, 0x54, 0xA8, 0xF3, 0x1, 0x2C, 0xF3, 0x3, 0xE6, 0xFD, 0x55, 0x2, 0xD5, 0x66, 0xFE, 0x5C, 0x2, 0xDE, 0x0, 0x1, 0x0, 0x31, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x1, 0x37, 0x1, 0x17, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0x6B, 0xFE, 0x72, 0xB7, 0x1, 0x8D, 0xDF, 0xF3, 0x1, 0x74, 0x3, 0xF1, 0x4B, 0xFC, 0x1F, 0xCD, 0x4, 0xAE, 0x0, 0x1, 0x0, 0x1D, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x37, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0x6D, 0xFE, 0x5C, 0xB6, 0x1, 0x7A, 0x2, 0x1, 0x3, 0xAF, 0xFA, 0x50, 0x1, 0x3A, 0x4, 0x2B, 0x4B, 0xFC, 0x51, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x35, 0x5, 0x27, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0xEA, 0x7F, 0x1, 0x95, 0x5, 0xB0, 0xFA, 0x50, 0xFF, 0xFF, 0x8D, 0x1, 0x75, 0x3, 0xAE, 0x0, 0x1, 0x0, 0x9E, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x1, 0x37, 0x17, 0x1, 0x4, 0x47, 0xF3, 0xFE, 0xE0, 0xFE, 0x6A, 0x7F, 0xC5, 0x1, 0x72, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x72, 0xFC, 0x8E, 0x1, 0x74, 0x8E, 0xB8, 0x4, 0x66, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x27, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xFE, 0xF8, 0xA8, 0x1, 0xB0, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xBC, 0xFE, 0x44, 0x66, 0x2, 0xD5, 0x2, 0x75, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x27, 0x1, 0x11, 0x3, 0x1B, 0xF3, 0xEE, 0xB6, 0x1, 0xA4, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x55, 0xFD, 0xAB, 0x4B, 0x4, 0x2A, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x71, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x27, 0x1, 0x3, 0x1B, 0xF3, 0xFD, 0xBA, 0x1, 0xB7, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x28, 0xFC, 0xD8, 0x3A, 0x5, 0x76, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0xE9, 0x7F, 0x1, 0x96, 0x1, 0x16, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0x2, 0xFE, 0xFE, 0x8D, 0x1, 0x75, 0xFE, 0xFE, 0x4, 0xB0, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x21, 0x1, 0x27, 0x1, 0x21, 0x11, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFE, 0xBA, 0xFE, 0xA7, 0x7E, 0x1, 0x95, 0x1, 0x88, 0xF3, 0xF3, 0x1, 0x3B, 0xFE, 0xC5, 0x8D, 0x1, 0x75, 0x3, 0xAE, 0xFA, 0x50, 0x0, 0x1, 0x0, 0x67, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x4, 0x47, 0xF3, 0xD8, 0xFE, 0x6A, 0x7F, 0x1, 0x68, 0x1, 0x85, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x90, 0xFD, 0xE2, 0xFE, 0x8E, 0x8D, 0x1, 0x4B, 0x3, 0xD8, 0x0, 0x1, 0x0, 0x47, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x27, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFD, 0x72, 0x7F, 0x3, 0xD, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x55, 0xFD, 0xAB, 0x8D, 0x2, 0xCA, 0x2, 0x59, 0x0, 0x1, 0x0, 0x49, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x1, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xF9, 0xFE, 0x6B, 0x7D, 0x1, 0x6F, 0x1, 0x9C, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x11, 0xFE, 0x61, 0xFE, 0x8E, 0x8D, 0x1, 0x52, 0x2, 0xB2, 0x1, 0x1F, 0x0, 0x1, 0x0, 0x37, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x21, 0x1, 0x37, 0x1, 0x21, 0x11, 0x33, 0x4, 0x47, 0xFD, 0x85, 0xFE, 0x6B, 0x7E, 0x1, 0x59, 0x1, 0x46, 0xF3, 0x1, 0x74, 0x8E, 0xFE, 0xC5, 0x4, 0xE9, 0x0, 0x1, 0x0, 0x98, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x1, 0x3, 0x27, 0x1, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xF7, 0xFC, 0xB7, 0x1, 0xA5, 0x1, 0x17, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x8B, 0xFD, 0x75, 0x4B, 0x4, 0x2A, 0xFD, 0x55, 0x3, 0xE6, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x35, 0x5, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xEA, 0xFE, 0x6D, 0x1, 0x54, 0x1, 0x55, 0x5, 0xB0, 0xFA, 0x50, 0xFF, 0xFF, 0xC7, 0x1, 0x3B, 0x3, 0xAE, 0x0, 0x1, 0x0, 0x3C, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x1, 0x27, 0x1, 0x33, 0x11, 0x23, 0x3, 0x54, 0xFD, 0x67, 0x7F, 0x3, 0x18, 0xF3, 0xF3, 0x4, 0xAE, 0xFD, 0x9C, 0x8D, 0x2, 0xD9, 0xFA, 0x50, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x1, 0x27, 0x1, 0x5, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xEB, 0xFE, 0xE8, 0x7F, 0x1, 0x95, 0x1, 0x17, 0xF3, 0x2, 0x75, 0x1, 0x0, 0xFF, 0x0, 0x8D, 0x1, 0x74, 0xFF, 0x2, 0x39, 0x0, 0x1, 0x0, 0x2C, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x1, 0x27, 0x1, 0x3, 0x54, 0xF3, 0xF3, 0xFE, 0xAF, 0xFE, 0xA8, 0x7F, 0x1, 0x95, 0x4, 0x75, 0x1, 0x3B, 0xFA, 0x50, 0x3, 0xAF, 0xFE, 0xC5, 0x8D, 0x1, 0x74, 0x0, 0x1, 0x0, 0xA7, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x21, 0x23, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xAD, 0xDC, 0x7E, 0x1, 0x95, 0x1, 0x18, 0xF3, 0x3, 0x3F, 0xCB, 0x8D, 0x1, 0x74, 0xFD, 0x56, 0x3, 0xE5, 0x0, 0x1, 0x0, 0x94, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x7, 0x27, 0x1, 0x1, 0x11, 0x33, 0x4, 0x47, 0xF3, 0xFE, 0xB3, 0xF4, 0x7F, 0x1, 0x95, 0x1, 0x2B, 0xF3, 0x1, 0x3B, 0x2, 0x1C, 0xE2, 0x8D, 0x1, 0x74, 0xFE, 0x1C, 0x3, 0x1E, 0x0, 0x1, 0x0, 0xAB, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x21, 0x35, 0x21, 0x1, 0x4, 0x47, 0xF3, 0xFD, 0xFE, 0x54, 0x1, 0x1F, 0x1, 0x8A, 0x5, 0xB0, 0xFA, 0x50, 0x3, 0x28, 0xFC, 0xD8, 0xC7, 0x4, 0xE9, 0x0, 0x1, 0x0, 0xBC, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x3, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xEE, 0xFE, 0x56, 0x1, 0x25, 0x1, 0x73, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0x55, 0xFD, 0xAB, 0xC7, 0x3, 0xAE, 0x1, 0x3B, 0x0, 0x1, 0x0, 0xB2, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xF9, 0xFE, 0x65, 0x1, 0x2D, 0x1, 0x75, 0x5, 0xB0, 0xFA, 0x50, 0x1, 0xBC, 0xFE, 0x44, 0xC7, 0x2, 0x74, 0x2, 0x75, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x1, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x50, 0xA8, 0x1, 0x8, 0xF3, 0x1, 0x3B, 0x2, 0xD5, 0x66, 0xFE, 0x44, 0x2, 0xF6, 0x0, 0x1, 0x0, 0x84, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x23, 0x1, 0x37, 0x13, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x5C, 0xB6, 0xEE, 0xF3, 0x4, 0x2A, 0x4B, 0xFD, 0xAB, 0x3, 0x90, 0x0, 0x1, 0x0, 0xB2, 0x0, 0x0, 0x4, 0x47, 0x5, 0xB0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x11, 0x23, 0x11, 0x1, 0x21, 0x35, 0x21, 0x1, 0x11, 0x4, 0x47, 0xF3, 0xFE, 0xF9, 0xFE, 0x65, 0x1, 0x2D, 0x1, 0x75, 0x5, 0xB0, 0xFA, 0x50, 0x2, 0xF6, 0xFE, 0x44, 0xC7, 0x2, 0x74, 0x1, 0x3B, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x21, 0x23, 0x11, 0x5, 0x27, 0x1, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0xEA, 0x7F, 0x1, 0x95, 0xF3, 0x4, 0xAE, 0xFF, 0x8D, 0x1, 0x74, 0x0, 0x1, 0x0, 0x93, 0x0, 0x0, 0x3, 0x1B, 0x5, 0xB0, 0x0, 0x7, 0x0, 0x0, 0x21, 0x23, 0x11, 0x1, 0x37, 0x5, 0x11, 0x33, 0x3, 0x1B, 0xF3, 0xFE, 0x6B, 0x7F, 0x1, 0x16, 0xF3, 0x2, 0x75, 0x1, 0x74, 0x8D, 0xFF, 0x2, 0x39, 0x0, 0x3, 0xFB, 0x8F, 0x4, 0x94, 0x0, 0x31, 0x6, 0x41, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x30, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x8A, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x9A, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x2, 0x63, 0x95, 0x81, 0x5F, 0x40, 0x50, 0x48, 0x36, 0x26, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x4, 0x94, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x1, 0x17, 0xC, 0x6F, 0x91, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x5, 0xFA, 0xC2, 0x4, 0x94, 0x0, 0xFE, 0x6, 0x41, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x4C, 0x0, 0x0, 0x13, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x7, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x44, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x81, 0x81, 0xFE, 0xFF, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x81, 0x81, 0xFC, 0x8F, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xD6, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x3, 0x31, 0x95, 0x81, 0x5F, 0x40, 0x50, 0x48, 0x36, 0x26, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x4, 0x94, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x4A, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x1, 0x17, 0xC, 0x6F, 0x91, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0xFB, 0x5E, 0x4, 0x94, 0x0, 0xC, 0x6, 0x41, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x25, 0x15, 0x21, 0x35, 0xAF, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x8E, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x2, 0xE8, 0xFD, 0x51, 0x4, 0x94, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0xD3, 0x9E, 0x9E, 0x0, 0x4, 0xFB, 0x1B, 0x4, 0x94, 0xFF, 0xB4, 0x6, 0x41, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x27, 0x0, 0x33, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x37, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFE, 0xF9, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0xA3, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x20, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x4, 0x94, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x78, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x3, 0xFB, 0x6A, 0x4, 0x94, 0x0, 0xD, 0x6, 0x41, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x24, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x13, 0x17, 0x37, 0x33, 0x15, 0x5, 0x23, 0x25, 0x35, 0xAE, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x98, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xFB, 0x8C, 0x8B, 0xD0, 0xFE, 0xF3, 0x9D, 0xFE, 0xF6, 0x4, 0x94, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6C, 0x10, 0x10, 0x6C, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x1, 0x14, 0x8F, 0x8F, 0x12, 0xFC, 0xFB, 0x13, 0x0, 0x3, 0xFB, 0xD6, 0xFD, 0xF2, 0xFF, 0xD5, 0xFF, 0xBA, 0x0, 0xB, 0x0, 0x19, 0x0, 0x27, 0x0, 0x0, 0x5, 0x33, 0x11, 0x14, 0x33, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xFD, 0x60, 0xA4, 0x33, 0x2B, 0x22, 0x30, 0x4D, 0x63, 0x1, 0xBA, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x3D, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x46, 0xFE, 0xF6, 0x48, 0x4, 0x6E, 0xC, 0x57, 0x63, 0xB5, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0x0, 0x4, 0xFB, 0xE, 0xFE, 0x30, 0xFF, 0xC3, 0xFF, 0xDD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x23, 0x0, 0x2B, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x36, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0x24, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0xF8, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x87, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x2C, 0x43, 0x76, 0x44, 0x44, 0x76, 0x43, 0x1, 0xC9, 0x43, 0x76, 0x44, 0x44, 0x76, 0x43, 0xFE, 0x30, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0xC7, 0x45, 0x45, 0x64, 0x43, 0x43, 0x63, 0x45, 0x45, 0x64, 0x43, 0x43, 0x0, 0x3, 0xFB, 0x9A, 0xFE, 0x29, 0xFF, 0xC9, 0xFF, 0xD6, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x23, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x36, 0x36, 0x32, 0x16, 0x14, 0x6, 0x22, 0x26, 0xF2, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0xC, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xB9, 0x49, 0x82, 0x49, 0x49, 0x82, 0x49, 0xFE, 0x29, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0xD0, 0x49, 0x49, 0x68, 0x47, 0x47, 0x0, 0x4, 0xFB, 0xA0, 0xFE, 0x22, 0xFF, 0xD3, 0xFF, 0xCF, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x25, 0x0, 0x2F, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x14, 0x6, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0xE8, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x9, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0x74, 0x7E, 0x5F, 0x5E, 0x80, 0x80, 0x5E, 0x5F, 0x7E, 0x6D, 0x3E, 0x64, 0x3E, 0x3E, 0x64, 0x3E, 0xFE, 0x22, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0xDD, 0x7A, 0x7A, 0xAC, 0x76, 0x76, 0x56, 0x2C, 0x43, 0x43, 0x2C, 0x2E, 0x44, 0x44, 0x0, 0x3, 0xFB, 0xA6, 0xFE, 0xE, 0xFF, 0xD9, 0xFF, 0xC2, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x1F, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1, 0x11, 0x23, 0x11, 0xE1, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x81, 0x81, 0xFD, 0x9, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x40, 0x22, 0x1, 0x9C, 0xA7, 0xFE, 0x15, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0x1, 0x55, 0xFE, 0x5B, 0x1, 0xA5, 0x0, 0x3, 0xFB, 0x78, 0xFE, 0x1B, 0x0, 0x0, 0xFF, 0xC8, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x28, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x25, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x20, 0x16, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0xB3, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x2, 0xBB, 0xB7, 0x40, 0x4C, 0x4D, 0x40, 0xB6, 0xAE, 0x1, 0x2A, 0xAE, 0xFE, 0x1B, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3D, 0x11, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x11, 0x3F, 0x3A, 0x3E, 0x3F, 0x11, 0x1E, 0x37, 0x53, 0x53, 0x37, 0x7C, 0x9E, 0x9E, 0x0, 0x3, 0xFB, 0x50, 0xFE, 0x15, 0x0, 0x20, 0xFF, 0xC2, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x30, 0x0, 0x0, 0x3, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x9A, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x81, 0x81, 0xFC, 0x6C, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x40, 0x22, 0x2, 0x73, 0x94, 0x80, 0x5F, 0x41, 0x50, 0x47, 0x36, 0x26, 0x35, 0x95, 0x7F, 0x60, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0xFE, 0x15, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3F, 0x39, 0x3F, 0x3F, 0x11, 0x1, 0x35, 0xC, 0x6F, 0x91, 0x2C, 0x2D, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0xFC, 0x2C, 0xFE, 0x18, 0x0, 0x4D, 0x0, 0x96, 0x0, 0x3, 0x0, 0x11, 0x0, 0x1F, 0x0, 0x0, 0x27, 0x1, 0x27, 0x1, 0x13, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xC8, 0xFE, 0xA1, 0x7E, 0x1, 0x64, 0xD3, 0xD, 0x22, 0x3F, 0x3F, 0x22, 0xD, 0x3A, 0x81, 0x81, 0xFD, 0x1B, 0x3A, 0x81, 0x81, 0x3A, 0xD, 0x23, 0x3E, 0x3F, 0x22, 0x4B, 0xFD, 0xCD, 0x49, 0x2, 0x35, 0xFD, 0x9D, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3D, 0x11, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x11, 0x3F, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x3, 0xFC, 0x19, 0xFE, 0x10, 0x0, 0x3E, 0x0, 0x96, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x13, 0x17, 0x3, 0x16, 0x15, 0x14, 0x6, 0x25, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xFD, 0xD2, 0x33, 0x48, 0x43, 0x31, 0xFC, 0x78, 0xFA, 0x9, 0x48, 0x1, 0x7D, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x16, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xFE, 0x10, 0x48, 0x33, 0x32, 0x47, 0x3, 0x1, 0x8F, 0x4B, 0xFE, 0x70, 0x17, 0x19, 0x33, 0x48, 0x2C, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3D, 0x11, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x11, 0x3F, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x4, 0xFB, 0x6D, 0xFD, 0xF2, 0xFF, 0xF0, 0xFF, 0xBA, 0x0, 0xB, 0x0, 0x17, 0x0, 0x25, 0x0, 0x33, 0x0, 0x0, 0x5, 0x33, 0x11, 0x14, 0x33, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x1, 0x33, 0x11, 0x14, 0x33, 0x37, 0x15, 0x6, 0x23, 0x22, 0x26, 0x35, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xFD, 0xDD, 0xA4, 0x33, 0x2B, 0x22, 0x30, 0x4D, 0x63, 0xFE, 0xAC, 0xA3, 0x34, 0x2B, 0x24, 0x2E, 0x4D, 0x63, 0x2, 0xAC, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0xB8, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x46, 0xFE, 0xF6, 0x48, 0x4, 0x6E, 0xC, 0x57, 0x63, 0x1, 0xE, 0xFE, 0xF6, 0x48, 0x4, 0x6E, 0xC, 0x57, 0x63, 0xB4, 0x49, 0x11, 0x3F, 0x3F, 0x3B, 0x3D, 0x11, 0x4C, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x59, 0x6D, 0xF, 0x4C, 0x11, 0x3E, 0x3A, 0x3F, 0x3F, 0x11, 0x0, 0x2, 0x0, 0x63, 0xFF, 0xEB, 0x4, 0x86, 0x4, 0xA0, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x10, 0x0, 0x23, 0x22, 0x0, 0x3, 0x35, 0x10, 0x0, 0x33, 0x32, 0x0, 0x13, 0x27, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x4, 0x86, 0xFE, 0xD3, 0xE3, 0xE1, 0xFE, 0xD0, 0x2, 0x1, 0x2F, 0xE2, 0xE1, 0x1, 0x2E, 0x3, 0xF3, 0xA2, 0x7D, 0x7C, 0xA3, 0xA5, 0x7C, 0x7D, 0xA0, 0x2, 0x3E, 0xFE, 0xD8, 0xFE, 0xD5, 0x1, 0x28, 0x1, 0x23, 0x17, 0x1, 0x29, 0x1, 0x2A, 0xFE, 0xDB, 0xFE, 0xDE, 0x5, 0xC4, 0xBB, 0xBB, 0xC4, 0x2F, 0xC4, 0xBD, 0xBD, 0xC4, 0x0, 0x2, 0xFC, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x4D, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x2, 0xFB, 0x5E, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x9A, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x2, 0xFA, 0x4E, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFB, 0x8A, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x4, 0xFA, 0x81, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFB, 0xBD, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x3, 0x33, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x4D, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x4A, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x4, 0xF9, 0xCE, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFB, 0xA, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x3, 0xE6, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x9A, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x4A, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x4, 0xF8, 0xBE, 0x0, 0x0, 0x0, 0x0, 0x1, 0xAD, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x29, 0x0, 0x37, 0x0, 0x0, 0x23, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x5, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0xBB, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xF9, 0xFA, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4, 0xF6, 0xE, 0x22, 0x40, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFB, 0x8A, 0x39, 0x82, 0x82, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x4A, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x1, 0x0, 0x3A, 0x0, 0x0, 0x3, 0xEB, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x0, 0x1, 0x15, 0x1, 0x23, 0x1, 0x21, 0x35, 0x3, 0xEB, 0xFD, 0xD3, 0xF3, 0x2, 0x2C, 0xFD, 0x43, 0x5, 0xB0, 0x86, 0xFA, 0xD6, 0x4, 0xED, 0xC3, 0x0, 0x2, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x46, 0x6, 0x0, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x5, 0x22, 0x27, 0x7, 0x23, 0x11, 0x33, 0x11, 0x36, 0x33, 0x32, 0x12, 0x17, 0x15, 0x14, 0x2, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x2, 0x8D, 0xC0, 0x6D, 0x11, 0xD2, 0xF2, 0x6A, 0xB2, 0xCF, 0xEA, 0x2, 0xEB, 0xFE, 0xF4, 0x87, 0x7E, 0x7F, 0x88, 0x9A, 0x44, 0x47, 0x14, 0x8F, 0x7B, 0x6, 0x0, 0xFD, 0xD2, 0x7C, 0xFE, 0xD5, 0xF4, 0x1D, 0xEC, 0xFE, 0xC6, 0xC7, 0xCE, 0x91, 0x15, 0x96, 0xCB, 0x87, 0xFE, 0x3B, 0x89, 0x0, 0x1, 0x0, 0x51, 0xFF, 0xEC, 0x4, 0x1, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x2, 0x42, 0x59, 0x7C, 0x5, 0xE5, 0x7, 0xFE, 0xFF, 0xB5, 0xFA, 0xF9, 0xFA, 0xF9, 0xC5, 0xF1, 0x7, 0xE5, 0x5, 0x73, 0x63, 0x94, 0x69, 0x68, 0xAF, 0x68, 0x4F, 0x9D, 0xDD, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0x0, 0x2, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x17, 0x6, 0x0, 0x0, 0xB, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x11, 0x33, 0x11, 0x2, 0x4B, 0x92, 0x47, 0x46, 0x91, 0x84, 0x87, 0x86, 0x1, 0x7D, 0x11, 0x6E, 0xB9, 0xC4, 0xF9, 0xF9, 0xC6, 0xAB, 0x6A, 0xF3, 0xB3, 0x80, 0x1, 0xD9, 0x7C, 0xCC, 0x96, 0x15, 0x90, 0xCE, 0xB3, 0x75, 0x89, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x76, 0x2, 0x28, 0xFA, 0x0, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x56, 0x4, 0x17, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x26, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x20, 0x13, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x6, 0x0, 0x7, 0x2, 0x4A, 0x95, 0x45, 0x44, 0x94, 0x84, 0x86, 0x85, 0x5D, 0x4C, 0xBE, 0x4D, 0x35, 0x80, 0x92, 0x1, 0xA, 0x6, 0x6A, 0xAE, 0xC6, 0xF6, 0xF6, 0xC8, 0xBF, 0x6A, 0x10, 0xD0, 0x1, 0xFE, 0xFE, 0xE9, 0xB3, 0x7F, 0x1, 0xDB, 0x7B, 0xCB, 0x96, 0x15, 0x91, 0xCE, 0xFD, 0xA3, 0x2B, 0x31, 0xAF, 0x4C, 0x1, 0x2C, 0x21, 0x76, 0x1, 0x3A, 0xEC, 0x15, 0xF7, 0x1, 0x30, 0x86, 0x72, 0xFC, 0x15, 0xF1, 0xFE, 0xFA, 0x2, 0x0, 0x2, 0x0, 0x4C, 0xFF, 0xEC, 0x4, 0x55, 0x4, 0x4E, 0x0, 0xC, 0x0, 0x1A, 0x0, 0x0, 0x13, 0x34, 0x0, 0x33, 0x32, 0x0, 0x17, 0x15, 0x14, 0x0, 0x20, 0x0, 0x35, 0x17, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x4C, 0x1, 0x18, 0xEB, 0xEE, 0x1, 0x17, 0x1, 0xFE, 0xE9, 0xFE, 0x26, 0xFE, 0xE8, 0xF3, 0x8A, 0x88, 0x87, 0x8A, 0x8A, 0x89, 0x87, 0x89, 0x2, 0x27, 0xEC, 0x1, 0x3B, 0xFE, 0xC7, 0xEB, 0x18, 0xEB, 0xFE, 0xC5, 0x1, 0x3B, 0xEC, 0x1, 0x91, 0xD2, 0xD2, 0x91, 0x15, 0x8F, 0xD5, 0xD5, 0x8F, 0x0, 0x2, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x45, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x17, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x2, 0x2, 0x48, 0x83, 0x87, 0x89, 0x83, 0x94, 0x43, 0x45, 0xD8, 0xB1, 0x6C, 0xF2, 0xD9, 0xD, 0x6E, 0xB9, 0xCE, 0xED, 0xEE, 0xAF, 0xD2, 0x91, 0x15, 0x96, 0xCB, 0x79, 0xFE, 0x1A, 0x7A, 0xC3, 0x75, 0xFD, 0xFF, 0x5, 0xDA, 0x70, 0x84, 0xFE, 0xD0, 0xF8, 0x14, 0xEC, 0xFE, 0xC6, 0x0, 0x2, 0x0, 0x50, 0xFE, 0x60, 0x4, 0x17, 0x4, 0x4E, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x23, 0x11, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x1, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x4, 0x17, 0xF3, 0x6A, 0xAB, 0xCA, 0xF5, 0xF4, 0xCD, 0xB7, 0x6C, 0x10, 0xD3, 0xFE, 0x36, 0x90, 0x47, 0x48, 0x8D, 0x83, 0x8A, 0x88, 0xFE, 0x60, 0x1, 0xFD, 0x71, 0x1, 0x39, 0xED, 0x14, 0xF7, 0x1, 0x31, 0x82, 0x6E, 0xFC, 0x75, 0x77, 0x1, 0xF3, 0x72, 0xCF, 0x96, 0x15, 0x90, 0xD2, 0x0, 0x2, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x34, 0x26, 0x1, 0x6, 0x6, 0x23, 0x22, 0x0, 0x35, 0x35, 0x34, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x2, 0x3D, 0x65, 0x7C, 0x10, 0x1, 0xCF, 0x64, 0x1, 0x2A, 0x31, 0xB4, 0x85, 0xFC, 0xFE, 0xD9, 0x1, 0x1B, 0xCE, 0xEC, 0xE3, 0xFD, 0x3E, 0xD, 0xA3, 0x95, 0x54, 0x93, 0x31, 0x3, 0x8B, 0x8C, 0x7C, 0x19, 0x60, 0x8F, 0xFC, 0xCD, 0x25, 0x47, 0x1, 0x31, 0xE7, 0x29, 0xFA, 0x1, 0x27, 0xFE, 0xE4, 0xE0, 0x81, 0x7E, 0xA4, 0x30, 0x1F, 0x0, 0x2, 0x0, 0x51, 0xFE, 0x56, 0x4, 0x5, 0x4, 0x4E, 0x0, 0xB, 0x0, 0x25, 0x0, 0x0, 0x25, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x13, 0x22, 0x26, 0x27, 0x37, 0x16, 0x33, 0x20, 0x13, 0x35, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x37, 0x33, 0x11, 0x14, 0x0, 0x2, 0x37, 0x98, 0x43, 0x42, 0x97, 0x83, 0x72, 0x70, 0x5E, 0x46, 0xB1, 0x47, 0x35, 0x77, 0x82, 0x1, 0xA, 0x6, 0x6A, 0xAE, 0xC7, 0xE2, 0xE2, 0xC9, 0xBF, 0x69, 0x10, 0xD1, 0xFE, 0xFA, 0xB3, 0x85, 0x1, 0xD0, 0x80, 0xCB, 0x96, 0x15, 0x91, 0xCE, 0xFD, 0xA3, 0x25, 0x2A, 0xAF, 0x3F, 0x1, 0x1F, 0x2F, 0x77, 0x1, 0x3A, 0xEC, 0x15, 0xF7, 0x1, 0x30, 0x85, 0x71, 0xFC, 0xC, 0xEF, 0xFE, 0xFF, 0x0, 0x1, 0x0, 0x3E, 0xFE, 0x4A, 0x4, 0x66, 0x4, 0x4A, 0x0, 0x1E, 0x0, 0x0, 0x1, 0x6, 0x27, 0x26, 0x26, 0x27, 0x27, 0x3, 0x23, 0x1, 0x3, 0x26, 0x26, 0x23, 0x7, 0x27, 0x36, 0x33, 0x32, 0x16, 0x16, 0x17, 0x17, 0x13, 0x33, 0x1, 0x13, 0x16, 0x17, 0x16, 0x37, 0x4, 0x3E, 0x2B, 0x36, 0x7B, 0x7C, 0x32, 0x64, 0xF9, 0xF7, 0x1, 0x7C, 0xA8, 0x19, 0x59, 0x3E, 0x43, 0x3, 0x48, 0x3C, 0x6A, 0x77, 0x44, 0x15, 0x5D, 0xE0, 0xF5, 0xFE, 0x9F, 0xC6, 0x34, 0x4E, 0x2B, 0x26, 0xFE, 0x59, 0xF, 0x3, 0x6, 0xB5, 0x73, 0xE6, 0xFD, 0xFF, 0x3, 0xC, 0x1, 0x81, 0x3F, 0x56, 0x5, 0xBB, 0x12, 0x5B, 0x7F, 0x30, 0xD3, 0x1, 0xCD, 0xFD, 0x2A, 0xFE, 0x3F, 0x7F, 0x7, 0x4, 0x5, 0xFF, 0xFF, 0x0, 0x5A, 0x0, 0x0, 0x2, 0xB2, 0x5, 0xB5, 0x0, 0x6, 0x0, 0x16, 0xB2, 0x0, 0x0, 0x3, 0x0, 0x5, 0x0, 0x0, 0x4, 0xC1, 0x6, 0x0, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x32, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x25, 0x27, 0x11, 0x23, 0x11, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x17, 0x11, 0x33, 0x11, 0x33, 0x32, 0x36, 0x35, 0x17, 0x14, 0x6, 0x4, 0x6, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFC, 0x80, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x40, 0x22, 0x2, 0x20, 0x1A, 0xF3, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x12, 0xF3, 0x9, 0x26, 0x36, 0x95, 0x80, 0x2, 0x42, 0x4A, 0x11, 0x3E, 0x3F, 0x3C, 0x3E, 0x10, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x10, 0x40, 0x3A, 0x3E, 0x3F, 0x11, 0x17, 0x1, 0xFD, 0x5C, 0x2, 0xFC, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x1, 0x2, 0x60, 0xFD, 0x47, 0x3A, 0x2E, 0xC, 0x70, 0x90, 0x0, 0x4, 0x0, 0x50, 0xFF, 0xEC, 0x5, 0x8B, 0x6, 0x0, 0x0, 0xC, 0x0, 0x19, 0x0, 0x25, 0x0, 0x3D, 0x0, 0x0, 0x1, 0x36, 0x36, 0x35, 0x34, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x21, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x15, 0x14, 0x16, 0x17, 0x13, 0x32, 0x37, 0x11, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x5, 0x27, 0x6, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x17, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x4, 0xD7, 0x1B, 0x32, 0x4D, 0xD, 0x34, 0x73, 0x73, 0x34, 0xFC, 0xF7, 0x34, 0x73, 0x73, 0x34, 0xE, 0x4E, 0x33, 0x1B, 0x4E, 0x95, 0x45, 0x44, 0x94, 0x84, 0x73, 0x72, 0x1, 0x73, 0xB, 0x6C, 0xB7, 0xC3, 0xE6, 0xE5, 0xC6, 0xAC, 0x6A, 0xFC, 0xFC, 0xF3, 0xAF, 0xAF, 0x4, 0xA8, 0xE, 0x33, 0x33, 0x50, 0x26, 0x4B, 0xD, 0x62, 0x52, 0x51, 0x5F, 0xE, 0xE, 0x5F, 0x51, 0x52, 0x62, 0xD, 0x4B, 0x27, 0x4F, 0x33, 0x33, 0xE, 0xFC, 0xB, 0x86, 0x1, 0xCD, 0x82, 0xD0, 0x92, 0x15, 0x91, 0xCD, 0xB3, 0x70, 0x84, 0x1, 0x39, 0xEC, 0x15, 0xF7, 0x1, 0x31, 0x77, 0xF1, 0xAB, 0x8D, 0x8D, 0xAB, 0xFB, 0x38, 0x0, 0x3, 0x0, 0x7A, 0xFD, 0xF6, 0x5, 0x5, 0x4, 0x4E, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x36, 0x0, 0x0, 0x1, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x37, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x11, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x14, 0x6, 0x4, 0x4A, 0xE, 0x23, 0x3F, 0x3F, 0x23, 0xE, 0x3A, 0x81, 0x81, 0xFD, 0x54, 0x39, 0x81, 0x81, 0x39, 0xE, 0x23, 0x3E, 0x3F, 0x22, 0xBB, 0x44, 0x3B, 0xE, 0x26, 0x3D, 0x7B, 0x1, 0x66, 0x60, 0x91, 0x4B, 0xF3, 0xDE, 0xE, 0x71, 0xC5, 0xA1, 0xC4, 0x1, 0xBC, 0xFD, 0xF6, 0x4A, 0x11, 0x3E, 0x3F, 0x3B, 0x3E, 0x11, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x11, 0x3F, 0x3A, 0x3E, 0x3F, 0x11, 0xB, 0x11, 0xC5, 0xC, 0xA9, 0x2, 0xE2, 0x83, 0x65, 0x67, 0xFC, 0xDF, 0x4, 0x3A, 0x95, 0xA9, 0xC4, 0xE3, 0xFD, 0x1A, 0xB6, 0xC0, 0xFF, 0xFF, 0x0, 0x5, 0xFD, 0xFF, 0x5, 0xB6, 0x4, 0x4E, 0x0, 0x27, 0x0, 0xDC, 0x0, 0x91, 0x0, 0x0, 0x0, 0x7, 0x3, 0x2E, 0x5, 0x16, 0xFD, 0x3A, 0x0, 0x4, 0x0, 0x5, 0xFF, 0xEC, 0x5, 0x4E, 0x6, 0x0, 0x0, 0xC, 0x0, 0x19, 0x0, 0x31, 0x0, 0x3C, 0x0, 0x0, 0x1, 0x36, 0x36, 0x35, 0x34, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x21, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x15, 0x14, 0x16, 0x17, 0x1, 0x14, 0x2, 0x23, 0x22, 0x27, 0x7, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x36, 0x33, 0x32, 0x12, 0x17, 0x1, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x7, 0x11, 0x16, 0x3, 0xA7, 0x1C, 0x32, 0x4E, 0xE, 0x34, 0x73, 0x73, 0x34, 0xFC, 0xF7, 0x34, 0x73, 0x73, 0x34, 0xE, 0x4E, 0x33, 0x1B, 0x4, 0x94, 0xD8, 0xCE, 0xBC, 0x6C, 0xC, 0xDC, 0xBB, 0xBB, 0xF3, 0xF0, 0xF0, 0x6A, 0xB1, 0xD0, 0xD7, 0x1, 0xFE, 0x1D, 0x87, 0x69, 0x66, 0x8C, 0x9C, 0x42, 0x43, 0x4, 0xA8, 0xE, 0x33, 0x33, 0x50, 0x26, 0x4B, 0xD, 0x62, 0x52, 0x51, 0x5F, 0xE, 0xE, 0x5F, 0x51, 0x52, 0x62, 0xD, 0x4B, 0x27, 0x4F, 0x33, 0x33, 0xE, 0xFD, 0x6A, 0xEF, 0xFE, 0xC9, 0x89, 0x75, 0x4, 0xC0, 0xAB, 0x95, 0x95, 0xAB, 0xED, 0x7B, 0xFE, 0xD0, 0xF3, 0xFE, 0x88, 0xCA, 0xAA, 0x8F, 0xD2, 0x8B, 0xFE, 0x43, 0x8D, 0x0, 0x3, 0x0, 0x5, 0xFD, 0xF6, 0x3, 0xF4, 0x4, 0x4E, 0x0, 0x17, 0x0, 0x25, 0x0, 0x33, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x17, 0x36, 0x33, 0x32, 0x17, 0x7, 0x26, 0x23, 0x22, 0x7, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x13, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x14, 0x6, 0x5, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x17, 0x6, 0x6, 0x15, 0x14, 0x16, 0x17, 0x2, 0xDF, 0x36, 0x46, 0x7D, 0xD6, 0xE8, 0x7, 0x57, 0x9C, 0x31, 0x25, 0x2, 0x32, 0x30, 0xA7, 0x3A, 0x5C, 0x41, 0x23, 0x1C, 0x5A, 0xE, 0x22, 0x3F, 0x3E, 0x23, 0xE, 0x39, 0x82, 0x82, 0xFD, 0x4E, 0x3A, 0x81, 0x81, 0x3A, 0xE, 0x23, 0x3F, 0x40, 0x22, 0xFE, 0x58, 0xD, 0x8D, 0xB3, 0x4, 0xAF, 0x79, 0x8D, 0xD, 0xE5, 0x8, 0x7E, 0xFC, 0xA5, 0x56, 0x40, 0x6, 0xFE, 0xFB, 0x4A, 0x11, 0x3E, 0x3F, 0x3B, 0x3E, 0x11, 0x4B, 0xF, 0x6B, 0x5B, 0x5C, 0x6D, 0xF, 0xF, 0x6D, 0x5C, 0x5A, 0x6C, 0xF, 0x4B, 0x11, 0x3F, 0x3A, 0x3E, 0x3F, 0x11, 0x0, 0x3, 0x0, 0x5D, 0xFF, 0xEE, 0x4, 0xB7, 0x4, 0x9D, 0x0, 0xA, 0x0, 0x12, 0x0, 0x30, 0x0, 0x0, 0x1, 0x14, 0x16, 0x17, 0x37, 0x36, 0x35, 0x34, 0x26, 0x22, 0x6, 0x13, 0x32, 0x37, 0x3, 0x7, 0x6, 0x15, 0x14, 0x5, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x7, 0x7, 0x17, 0x36, 0x35, 0x33, 0x14, 0x7, 0x17, 0x1, 0x94, 0x39, 0x2A, 0x41, 0x48, 0x40, 0x72, 0x3A, 0x74, 0x74, 0x57, 0xFC, 0x48, 0x40, 0x2, 0x5C, 0x4A, 0x9A, 0xCC, 0xBF, 0xDF, 0x67, 0x5A, 0x36, 0x45, 0x58, 0xB6, 0x9D, 0x9B, 0xB9, 0xA4, 0x40, 0xE7, 0x39, 0xD5, 0x80, 0xC8, 0x3, 0x75, 0x29, 0x49, 0x2A, 0x2C, 0x34, 0x40, 0x2A, 0x3C, 0x42, 0xFD, 0x15, 0x2D, 0x1, 0x4, 0x31, 0x31, 0x45, 0x8A, 0xB2, 0x4C, 0x5E, 0xAF, 0x82, 0x64, 0x84, 0x3E, 0x25, 0x48, 0x7F, 0x5A, 0x73, 0x9F, 0xA2, 0x78, 0x93, 0x71, 0x2C, 0xF0, 0x62, 0x86, 0xDD, 0x9E, 0xD0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x3, 0x9F, 0x4, 0x8D, 0x0, 0xD, 0x0, 0x0, 0x33, 0x11, 0x7, 0x35, 0x37, 0x11, 0x33, 0x11, 0x37, 0x15, 0x7, 0x11, 0x21, 0x15, 0x81, 0x7D, 0x7D, 0xF3, 0xF9, 0xF9, 0x2, 0x2B, 0x2, 0x9, 0x26, 0x93, 0x26, 0x1, 0xF1, 0xFE, 0x59, 0x4B, 0x93, 0x4B, 0xFE, 0x70, 0xC3, 0x0, 0x2, 0xFF, 0xF0, 0x0, 0x0, 0x6, 0x4, 0x4, 0x8D, 0x0, 0x2, 0x0, 0x12, 0x0, 0x0, 0x1, 0x3, 0x1, 0x1, 0x3, 0x21, 0x3, 0x21, 0x1, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x2, 0xEE, 0x13, 0xFE, 0xFE, 0x1, 0x27, 0xA, 0xFE, 0x83, 0x84, 0xFE, 0xFB, 0x2, 0x6F, 0x3, 0x77, 0xFD, 0xF6, 0xA, 0x1, 0xC3, 0xFE, 0x45, 0xC, 0x2, 0x1A, 0x1, 0xC8, 0x2, 0x2, 0xFD, 0xFE, 0xFE, 0x38, 0x1, 0x7, 0xFE, 0xF9, 0x4, 0x8D, 0xC1, 0xFE, 0xF4, 0xC1, 0xFE, 0xC2, 0xC1, 0x0, 0x2, 0x0, 0x76, 0x0, 0x0, 0x3, 0xD3, 0x4, 0x8D, 0x0, 0x8, 0x0, 0x15, 0x0, 0x0, 0x1, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x3, 0x15, 0x23, 0x11, 0x33, 0x15, 0x33, 0x16, 0x16, 0x15, 0x14, 0x6, 0x23, 0x1, 0x69, 0x99, 0x74, 0x6B, 0x6B, 0x74, 0x99, 0xF3, 0xF3, 0x9D, 0xDB, 0xF2, 0xF4, 0xDD, 0x3, 0x13, 0xFE, 0x94, 0x65, 0x4E, 0x49, 0x70, 0xFD, 0xD0, 0xE3, 0x4, 0x8D, 0xB6, 0x1, 0xD7, 0xA3, 0xAC, 0xCD, 0x0, 0x3, 0x0, 0x50, 0xFF, 0xC8, 0x4, 0x6F, 0x4, 0xBB, 0x0, 0x8, 0x0, 0x11, 0x0, 0x27, 0x0, 0x0, 0x1, 0x14, 0x17, 0x1, 0x26, 0x23, 0x22, 0x6, 0x15, 0x1, 0x32, 0x36, 0x35, 0x35, 0x34, 0x27, 0x1, 0x16, 0x17, 0x22, 0x27, 0x7, 0x23, 0x37, 0x26, 0x27, 0x35, 0x10, 0x0, 0x33, 0x32, 0x17, 0x37, 0x33, 0x7, 0x16, 0x17, 0x15, 0x10, 0x0, 0x1, 0x42, 0x28, 0x1, 0x9B, 0x43, 0x63, 0x85, 0x98, 0x1, 0x1F, 0x87, 0x95, 0x23, 0xFE, 0x68, 0x42, 0x5D, 0x9D, 0x79, 0x4D, 0xA5, 0x88, 0x8F, 0x2, 0x1, 0x26, 0xE9, 0xA3, 0x7B, 0x49, 0xA4, 0x85, 0x89, 0x1, 0xFE, 0xDE, 0x2, 0x2C, 0x80, 0x59, 0x2, 0x51, 0x34, 0xC1, 0xB5, 0xFE, 0x52, 0xC3, 0xB5, 0x36, 0x7A, 0x55, 0xFD, 0xB3, 0x30, 0xC4, 0x47, 0x6F, 0xC4, 0x9A, 0xFF, 0x3B, 0x1, 0xA, 0x1, 0x33, 0x4B, 0x69, 0xC0, 0x9A, 0xFD, 0x38, 0xFE, 0xF6, 0xFE, 0xCE, 0x0, 0x2, 0x0, 0x32, 0x0, 0x0, 0x4, 0xD8, 0x4, 0x8D, 0x0, 0x3, 0x0, 0x17, 0x0, 0x0, 0x1, 0x35, 0x21, 0x15, 0x1, 0x11, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x3, 0x8B, 0xFD, 0xF4, 0x2, 0xC, 0xFD, 0xF4, 0xF3, 0x5A, 0x5A, 0xF3, 0x2, 0xC, 0xF3, 0x5A, 0x5A, 0x2, 0x9F, 0xB0, 0xB0, 0xFD, 0x61, 0x1, 0xDB, 0xFE, 0x25, 0x3, 0x4F, 0xAB, 0x93, 0x93, 0x93, 0x93, 0xAB, 0xFC, 0xB1, 0x0, 0x1, 0x0, 0x76, 0xFE, 0x4B, 0x4, 0x67, 0x4, 0x8D, 0x0, 0x13, 0x0, 0x0, 0x1, 0x22, 0x27, 0x37, 0x16, 0x33, 0x32, 0x37, 0x35, 0x1, 0x11, 0x23, 0x11, 0x33, 0x1, 0x11, 0x33, 0x11, 0x14, 0x6, 0x3, 0x7, 0x45, 0x3A, 0xE, 0x26, 0x3D, 0x78, 0x3, 0xFD, 0xF5, 0xF3, 0xF3, 0x2, 0xC, 0xF2, 0xBB, 0xFE, 0x4B, 0x11, 0xC5, 0xC, 0xA4, 0x49, 0x3, 0x1A, 0xFC, 0xE4, 0x4, 0x8D, 0xFC, 0xE4, 0x3, 0x1C, 0xFB, 0x34, 0xB6, 0xC0, 0x0, 0x2, 0xFD, 0x40, 0x4, 0xD2, 0xFF, 0x20, 0x7, 0x4C, 0x0, 0x9, 0x0, 0xD, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x13, 0x13, 0x21, 0x1, 0xFD, 0x40, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x8, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0x6, 0xD1, 0x35, 0x46, 0x46, 0x35, 0x34, 0x46, 0x46, 0xFE, 0x35, 0x1, 0x2E, 0xFE, 0xD2, 0x0, 0x3, 0xFC, 0x4A, 0x4, 0xDB, 0xFF, 0x27, 0x7, 0x22, 0x0, 0xB, 0x0, 0x17, 0x0, 0x2C, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFC, 0x57, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x72, 0x95, 0x80, 0x60, 0x41, 0x50, 0x47, 0x35, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x6, 0xAB, 0x32, 0x45, 0x45, 0x32, 0x31, 0x45, 0x45, 0x30, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0x84, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0xFC, 0x57, 0x4, 0xE0, 0xFF, 0x1D, 0x7, 0x2D, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x5, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFD, 0x3D, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0xFE, 0x57, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x5, 0xFE, 0x1, 0x2F, 0xFE, 0xD1, 0xA8, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x2, 0xFC, 0x57, 0x4, 0xE1, 0xFF, 0x1A, 0x7, 0x3B, 0x0, 0x9, 0x0, 0x12, 0x0, 0x0, 0x1, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0x7, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0xFD, 0x35, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x10, 0x93, 0x92, 0xD0, 0xFE, 0xE9, 0x97, 0xFE, 0xEB, 0x6, 0xC0, 0x35, 0x46, 0x46, 0x35, 0x34, 0x46, 0x46, 0x8A, 0x9B, 0x9B, 0xB, 0xFE, 0xEA, 0x1, 0x17, 0xA, 0x0, 0x2, 0xFC, 0x65, 0x4, 0xE0, 0xFF, 0x13, 0x6, 0xE4, 0x0, 0x3, 0x0, 0xD, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x13, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x6, 0x22, 0x26, 0xED, 0xFD, 0x52, 0xD0, 0x45, 0x7C, 0x45, 0x45, 0x7C, 0x45, 0x6, 0xE4, 0x9E, 0x9E, 0xFE, 0x76, 0x35, 0x46, 0x46, 0x35, 0x34, 0x46, 0x46, 0x0, 0x2, 0xFC, 0x5F, 0x5, 0xC, 0xFF, 0x13, 0x7, 0x2D, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x13, 0x23, 0x1, 0x1, 0x15, 0x21, 0x35, 0xFD, 0x73, 0xC4, 0xCA, 0xFE, 0xF2, 0x2, 0xB4, 0xFD, 0x52, 0x7, 0x2D, 0xFE, 0xD1, 0x1, 0x2F, 0xFE, 0x7D, 0x9E, 0x9E, 0x0, 0x3, 0xFC, 0x57, 0x4, 0xE0, 0xFF, 0x1D, 0x6, 0xDA, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xED, 0xFD, 0x52, 0xE, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x6, 0xDA, 0x9E, 0x9E, 0xFE, 0x7C, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x3, 0xFC, 0x57, 0x4, 0xE0, 0xFF, 0x1D, 0x7, 0x2D, 0x0, 0x3, 0x0, 0xF, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x13, 0x23, 0x1, 0x3, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFD, 0x73, 0xC4, 0xCA, 0xFE, 0xF2, 0x8, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x7, 0x2D, 0xFE, 0xD1, 0x1, 0x2F, 0xFE, 0x29, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x0, 0x2, 0xFC, 0x65, 0x5, 0xC, 0xFF, 0x15, 0x7, 0x2D, 0x0, 0x3, 0x0, 0x7, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x5, 0x15, 0x21, 0x35, 0xFD, 0x3D, 0xC3, 0x1, 0x15, 0xFE, 0xEB, 0x1, 0x13, 0xFD, 0x52, 0x5, 0xFE, 0x1, 0x2F, 0xFE, 0xD1, 0x54, 0x9E, 0x9E, 0x0, 0x2, 0xFC, 0x4A, 0x4, 0xDB, 0xFF, 0x27, 0x7, 0x2, 0x0, 0x3, 0x0, 0x18, 0x0, 0x0, 0x3, 0x15, 0x21, 0x35, 0x1, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xED, 0xFD, 0x52, 0x2, 0x2D, 0x95, 0x80, 0x60, 0x41, 0x50, 0x47, 0x35, 0x27, 0x34, 0x95, 0x7F, 0x5F, 0x52, 0x6F, 0x4D, 0x26, 0x36, 0x7, 0x2, 0x9E, 0x9E, 0xFE, 0xF3, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0xFC, 0x57, 0x5, 0xC, 0xFF, 0x1D, 0x6, 0xFA, 0x0, 0xB, 0x0, 0x17, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x17, 0x15, 0x21, 0x35, 0xFC, 0x57, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0xF3, 0xFD, 0x52, 0x6, 0x83, 0x32, 0x45, 0x45, 0x32, 0x31, 0x45, 0x45, 0x30, 0x32, 0x44, 0x44, 0x32, 0x31, 0x45, 0x45, 0xA7, 0x9E, 0x9E, 0x0, 0x2, 0xFC, 0x50, 0x4, 0xDB, 0xFF, 0x2D, 0x7, 0x55, 0x0, 0x3, 0x0, 0x18, 0x0, 0x0, 0x1, 0x13, 0x21, 0x1, 0x17, 0x17, 0x14, 0x6, 0x23, 0x22, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0xFD, 0x43, 0xC4, 0x1, 0x14, 0xFE, 0xEC, 0x91, 0x95, 0x80, 0x5F, 0x41, 0x50, 0x48, 0x35, 0x26, 0x35, 0x95, 0x7F, 0x60, 0x51, 0x6F, 0x4D, 0x27, 0x35, 0x6, 0x26, 0x1, 0x2F, 0xFE, 0xD1, 0x31, 0xC, 0x6F, 0x91, 0x2D, 0x2C, 0x39, 0x2E, 0x8, 0x6E, 0x96, 0x59, 0x39, 0x0, 0x3, 0xFC, 0x57, 0x4, 0xE0, 0xFF, 0x1D, 0x7, 0x2E, 0x0, 0x8, 0x0, 0x14, 0x0, 0x20, 0x0, 0x0, 0x1, 0x17, 0x37, 0x33, 0x15, 0x1, 0x23, 0x1, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x23, 0x22, 0x26, 0xFD, 0x25, 0x93, 0x92, 0xD0, 0xFE, 0xE9, 0x97, 0xFE, 0xEB, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x1, 0xC9, 0x43, 0x3B, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x43, 0x7, 0x2E, 0x9B, 0x9B, 0xA, 0xFE, 0xE9, 0x1, 0x18, 0x9, 0xFE, 0x28, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0x30, 0x32, 0x45, 0x45, 0x32, 0x31, 0x44, 0x44, 0xFF, 0xFF, 0x0, 0x47, 0x2, 0xA, 0x2, 0x54, 0x2, 0xCD, 0x0, 0x6, 0x0, 0x12, 0x0, 0x0, 0x0, 0x2, 0x0, 0x15, 0x0, 0x0, 0x4, 0xF0, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x21, 0x11, 0x33, 0x32, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x21, 0x1, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x2, 0xB3, 0xFE, 0xFC, 0xA6, 0xCC, 0xD0, 0x2, 0xCF, 0xC4, 0xB1, 0x1, 0x4, 0xFE, 0x0, 0x9E, 0x9E, 0x1, 0xAD, 0x1, 0x25, 0x1, 0x6B, 0xFE, 0x93, 0xFE, 0xD2, 0x2, 0x8C, 0xFE, 0x3E, 0x1, 0x0, 0xE1, 0x53, 0xEC, 0xFB, 0xFE, 0x52, 0xFC, 0xC9, 0x2, 0x8C, 0xAB, 0x2, 0x79, 0xFE, 0x87, 0xFE, 0xC5, 0x49, 0xFE, 0xC5, 0xFE, 0x88, 0x0, 0x2, 0x0, 0x15, 0x0, 0x0, 0x4, 0xF0, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x21, 0x11, 0x33, 0x32, 0x12, 0x37, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x21, 0x1, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x20, 0x0, 0x11, 0x15, 0x10, 0x0, 0x21, 0x2, 0xB3, 0xFE, 0xFC, 0xA6, 0xCC, 0xD0, 0x2, 0xCF, 0xC4, 0xB1, 0x1, 0x4, 0xFE, 0x0, 0x9E, 0x9E, 0x1, 0xAD, 0x1, 0x25, 0x1, 0x6B, 0xFE, 0x93, 0xFE, 0xD2, 0x2, 0x8C, 0xFE, 0x3E, 0x1, 0x0, 0xE1, 0x53, 0xEC, 0xFB, 0xFE, 0x52, 0xFC, 0xC9, 0x2, 0x8C, 0xAB, 0x2, 0x79, 0xFE, 0x87, 0xFE, 0xC5, 0x49, 0xFE, 0xC5, 0xFE, 0x88, 0x0, 0x1, 0xFF, 0xF2, 0x0, 0x0, 0x4, 0x17, 0x6, 0x0, 0x0, 0x19, 0x0, 0x0, 0x1, 0x22, 0x7, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x15, 0x21, 0x11, 0x36, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x11, 0x34, 0x26, 0x2, 0x65, 0x93, 0x48, 0xF2, 0xA6, 0xA6, 0xF2, 0x1, 0x6, 0xFE, 0xFA, 0x76, 0xB7, 0x9F, 0xC0, 0x1, 0xF3, 0x62, 0x3, 0x88, 0x83, 0xFC, 0xFB, 0x4, 0xC7, 0xAB, 0x8E, 0x8E, 0xAB, 0xFE, 0xFC, 0x8B, 0xB6, 0xDA, 0xFD, 0x42, 0x2, 0xBB, 0x71, 0x5C, 0x0, 0x1, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x33, 0x3, 0xBA, 0xCF, 0xFC, 0xD3, 0xD3, 0xFE, 0x3E, 0x4, 0x83, 0xFE, 0x3B, 0xCF, 0x3, 0x12, 0xFC, 0xEE, 0x3, 0x12, 0xAB, 0x1, 0x28, 0xCB, 0xCB, 0xFE, 0xD8, 0x0, 0x1, 0xFF, 0xE8, 0xFF, 0xEC, 0x2, 0x86, 0x5, 0x41, 0x0, 0x1D, 0x0, 0x0, 0x25, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x2, 0x73, 0x46, 0x5A, 0x79, 0x9F, 0xD3, 0xD3, 0xB3, 0xB3, 0xF2, 0xBF, 0xBF, 0xD9, 0xD9, 0x40, 0x31, 0x2A, 0x2B, 0x4, 0x18, 0x89, 0xA7, 0x1, 0x1B, 0xAB, 0xA5, 0xB3, 0x1, 0x7, 0xFE, 0xF9, 0xB3, 0xA5, 0xAB, 0xFE, 0xF3, 0x49, 0x2B, 0xA, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x36, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x22, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x36, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xC1, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x37, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xC2, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xC4, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x3, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xEE, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x94, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x1, 0x57, 0x1, 0x6A, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xB1, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA5, 0x1, 0x5D, 0x1, 0x1B, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x39, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0xC9, 0xFF, 0xF9, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xE8, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x87, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x3F, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0x88, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xB4, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xC7, 0x0, 0x0, 0x1, 0xA0, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0xFF, 0x96, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x2, 0x7E, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x0, 0x35, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xCB, 0x0, 0x0, 0x2, 0x7A, 0x7, 0x3F, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0xFF, 0x36, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xC0, 0x0, 0x0, 0x2, 0x86, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x62, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xED, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x36, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x39, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x36, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xD8, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x37, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xD9, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xDB, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x3, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x5, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x10, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xAF, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x37, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xB0, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x3, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xDC, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x87, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xAC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x4B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x1, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x4C, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x4E, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x78, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x5E, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x0, 0xE1, 0x0, 0x34, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x7B, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA5, 0x0, 0xE7, 0xFF, 0xE5, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x39, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x3D, 0xFF, 0xF9, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xA0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x3F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x1, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x40, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x6C, 0x0, 0xFF, 0xFF, 0xFF, 0xB2, 0x0, 0x0, 0x1, 0x8B, 0x5, 0xF9, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x45, 0x81, 0xF9, 0xFF, 0xFF, 0x0, 0x90, 0x0, 0x0, 0x2, 0x69, 0x5, 0xF9, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x76, 0x20, 0xF9, 0xFF, 0xFF, 0xFF, 0xB6, 0x0, 0x0, 0x2, 0x65, 0x5, 0xFA, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0xFF, 0x21, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xAB, 0x0, 0x0, 0x2, 0x71, 0x5, 0xC6, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x4D, 0xFF, 0xF9, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x55, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x0, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xB5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x0, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x54, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x1, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x55, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x57, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xAE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x4D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x1, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x4E, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x7A, 0x0, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x16, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x43, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xBE, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x48, 0x3, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xF5, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x7F, 0x0, 0x0, 0x2, 0x0, 0x12, 0xFE, 0x52, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x2, 0x0, 0x19, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x3, 0x21, 0x3, 0x21, 0x1, 0x33, 0x1, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x3, 0x7E, 0xD4, 0xD3, 0x3, 0x42, 0x49, 0x5C, 0x58, 0x7B, 0x97, 0x74, 0xFD, 0xCC, 0x76, 0xFE, 0xF8, 0x2, 0x26, 0xE3, 0x2, 0x28, 0x3E, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0x2, 0x1F, 0x2, 0x5E, 0xFD, 0xA2, 0xFC, 0x5F, 0x2C, 0x66, 0x63, 0x8D, 0x62, 0x1, 0x4A, 0xFE, 0xAC, 0x5, 0xB0, 0xFA, 0x50, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0x0, 0x2, 0x0, 0x5B, 0xFE, 0x52, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x8, 0x0, 0x35, 0x0, 0x0, 0x24, 0x36, 0x37, 0x35, 0x23, 0x6, 0x15, 0x14, 0x16, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x24, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x15, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0x4D, 0x7A, 0x19, 0x94, 0xFF, 0x58, 0x2, 0x41, 0x49, 0x5C, 0x58, 0x7B, 0x93, 0x10, 0x9, 0x73, 0xAA, 0xA2, 0xCE, 0x1, 0x2, 0xEA, 0x99, 0x5F, 0x5F, 0x57, 0x67, 0xF2, 0xF1, 0xCD, 0xB6, 0xED, 0x29, 0x2A, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0xAF, 0x51, 0x31, 0xCC, 0x6, 0xAF, 0x41, 0x58, 0xFD, 0xCF, 0x2C, 0x66, 0x63, 0x8C, 0x60, 0x25, 0x3A, 0x7A, 0xBA, 0x8A, 0xAD, 0xB8, 0x47, 0x55, 0x65, 0x56, 0x3E, 0x80, 0xCC, 0xBA, 0xBA, 0xFE, 0x20, 0x92, 0x57, 0x11, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x7, 0x4B, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xC0, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x6, 0x0, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x29, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x7, 0x4C, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xC1, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x6, 0x1, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x2A, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x7, 0x28, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xA7, 0x1, 0x53, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x10, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x7, 0x4D, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xD9, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x6, 0x2, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x42, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD2, 0x7, 0x40, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x68, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x5, 0x5B, 0x6, 0x1, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x4, 0x1, 0x4, 0xFB, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x6, 0xEB, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0x84, 0x1, 0x41, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x3C, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x25, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xBB, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x73, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x1B, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x6E, 0x1, 0x46, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x26, 0x0, 0x8, 0x0, 0x1, 0x0, 0x95, 0xFE, 0x52, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x3, 0xF1, 0x49, 0x5C, 0x58, 0x7B, 0x88, 0xFD, 0x94, 0x3, 0xB1, 0xFD, 0x4B, 0x2, 0x56, 0xFD, 0xAA, 0x2, 0xBC, 0x70, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0xFE, 0x7E, 0x2C, 0x66, 0x63, 0x85, 0x60, 0x5, 0xB0, 0xCB, 0xFE, 0x6D, 0xC7, 0xFE, 0x3F, 0xCA, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0x0, 0x2, 0x0, 0x54, 0xFE, 0x6D, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x7, 0x0, 0x2B, 0x0, 0x0, 0x1, 0x22, 0x6, 0x7, 0x21, 0x35, 0x26, 0x26, 0x13, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x2, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x16, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x7, 0x31, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0x3D, 0x64, 0x7A, 0x12, 0x1, 0xCE, 0x4, 0x61, 0x9E, 0x49, 0x5C, 0x58, 0x7B, 0x51, 0xDD, 0xFC, 0x1, 0x1B, 0xCE, 0xEC, 0xE3, 0xFD, 0x3D, 0xA, 0x95, 0x80, 0xA7, 0x68, 0x83, 0x46, 0x74, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0x3, 0x8B, 0x8C, 0x7C, 0x12, 0x5F, 0x97, 0xFB, 0xE, 0x2C, 0x66, 0x63, 0x67, 0x50, 0xF, 0x1, 0x27, 0xD4, 0x29, 0x1, 0x1, 0x1, 0x2D, 0xFE, 0xD4, 0xEA, 0x67, 0x7D, 0xA5, 0x86, 0x7D, 0x67, 0x36, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x40, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xA0, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x2, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x58, 0x0, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x7, 0x4C, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xBE, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x6, 0x1, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x40, 0x0, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x7, 0x32, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xF1, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x73, 0x0, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x7, 0x28, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xA4, 0x1, 0x53, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x26, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x6A, 0xFD, 0xF0, 0x4, 0xF0, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0xE4, 0xFE, 0x8A, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x6, 0xA8, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB2, 0x1, 0x28, 0x0, 0x7D, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x3F, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xE2, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x7, 0x5F, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0x17, 0x1, 0x5E, 0xFF, 0xFF, 0xFF, 0xB2, 0x0, 0x0, 0x2, 0x90, 0x7, 0x33, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x38, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0x9D, 0x0, 0x0, 0x2, 0x7B, 0x5, 0xEE, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x23, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xCE, 0x0, 0x0, 0x2, 0x7C, 0x6, 0xEB, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x32, 0x1, 0x41, 0xFF, 0xFF, 0xFF, 0xB9, 0x0, 0x0, 0x2, 0x67, 0x5, 0xA6, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x1D, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xDF, 0x0, 0x0, 0x2, 0x64, 0x7, 0x25, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0xFF, 0x69, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xCA, 0x0, 0x0, 0x2, 0x4F, 0x5, 0xE0, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0xFF, 0x54, 0xFF, 0xF9, 0xFF, 0xFF, 0x0, 0x15, 0xFE, 0x59, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8C, 0xEC, 0x7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x52, 0x1, 0x91, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8C, 0xD5, 0x0, 0xFF, 0xFF, 0x0, 0x9E, 0x0, 0x0, 0x1, 0xA4, 0x7, 0x1B, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0x1C, 0x1, 0x46, 0xFF, 0xFF, 0x0, 0xA4, 0xFF, 0xEC, 0x6, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2F, 0x2, 0x42, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x4B, 0x3, 0x92, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4F, 0x2, 0xC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0xFF, 0xEC, 0x4, 0xAB, 0x7, 0x38, 0x0, 0x26, 0x0, 0x2F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x1, 0x67, 0x1, 0x37, 0xFF, 0xFF, 0xFF, 0xB5, 0xFE, 0x4B, 0x2, 0x6A, 0x5, 0xDF, 0x0, 0x26, 0x0, 0xEC, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0xFF, 0x26, 0xFF, 0xDE, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x43, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x9D, 0xFE, 0xDD, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x2D, 0x4, 0x37, 0x6, 0x0, 0x0, 0x26, 0x0, 0x50, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x2D, 0xFE, 0xC7, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x27, 0x7, 0x36, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x0, 0x28, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x8B, 0x0, 0x0, 0x2, 0x63, 0x7, 0x91, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x0, 0x1A, 0x1, 0x91, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x1, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x6E, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x57, 0xFE, 0x1, 0x1, 0x7F, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x0, 0x11, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x2, 0x9, 0x4, 0xAA, 0xFF, 0xFF, 0x0, 0x8C, 0x0, 0x0, 0x2, 0xE6, 0x6, 0x1, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x8C, 0x4, 0xFB, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xCA, 0xFD, 0xD4, 0xFF, 0xFF, 0x0, 0x8C, 0x0, 0x0, 0x2, 0xEC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x64, 0xFD, 0xAF, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x36, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xEA, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x52, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFD, 0xFE, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0xDC, 0xFE, 0x98, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x1, 0x3, 0xF9, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x42, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x38, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x1, 0x3, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x2, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x6B, 0x0, 0xFF, 0xFF, 0xFF, 0xA4, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x2, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0xFF, 0x5E, 0x4, 0xFC, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xD5, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x51, 0x3, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0xC, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x88, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x35, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x1, 0x63, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xFF, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x0, 0xDF, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDE, 0x7, 0x36, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x70, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x2, 0xF6, 0x6, 0x0, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x0, 0xAD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x1, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x6F, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x51, 0xFE, 0x1, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x0, 0xB, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDE, 0x7, 0x38, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x89, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x38, 0x0, 0x0, 0x2, 0xFB, 0x6, 0x2, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0xC6, 0x0, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x7, 0x36, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x8E, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x6, 0x0, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x7, 0x37, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0x8F, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x6, 0x1, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x3A, 0x0, 0xFF, 0xFF, 0x0, 0x4A, 0xFE, 0x40, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x9E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4C, 0xFE, 0x36, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x44, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x4A, 0xFD, 0xF7, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x8A, 0xFE, 0x91, 0xFF, 0xFF, 0x0, 0x4C, 0xFD, 0xED, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x30, 0xFE, 0x87, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x7, 0x38, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xA7, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x6, 0x2, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x52, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0xFD, 0xFB, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x78, 0xFE, 0x95, 0xFF, 0xFF, 0x0, 0x8, 0xFD, 0xF7, 0x2, 0x73, 0x5, 0x41, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x0, 0xC9, 0xFE, 0x91, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x44, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x8C, 0x0, 0x4, 0xFF, 0xFF, 0x0, 0x8, 0xFE, 0x40, 0x2, 0xA6, 0x5, 0x41, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x0, 0xDD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x7, 0x38, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x99, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x8, 0xFF, 0xEC, 0x3, 0x27, 0x6, 0x82, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0xCD, 0x5, 0x7C, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xB2, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x50, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xAC, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x4A, 0x3, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xE3, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x94, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x1, 0x45, 0x1, 0x6A, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x5E, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x0, 0xE3, 0x0, 0x34, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x35, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x1, 0x3A, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x4, 0x2F, 0x5, 0xFF, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x0, 0xD8, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7E, 0xFE, 0x8A, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x20, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x37, 0x22, 0x24, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x6, 0x7, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x17, 0x6, 0x3, 0x3E, 0x58, 0x7B, 0x36, 0xED, 0xFE, 0xCB, 0x1, 0xFB, 0x9F, 0x85, 0x87, 0x9D, 0xFD, 0x92, 0x77, 0x3B, 0x4D, 0x47, 0x2C, 0x2E, 0x15, 0x49, 0xFE, 0x8A, 0x66, 0x63, 0x54, 0x45, 0xFC, 0xF8, 0x3, 0xD0, 0xFC, 0x33, 0x9C, 0x91, 0x91, 0x9C, 0x3, 0xCD, 0xFC, 0x33, 0xA5, 0xDF, 0x39, 0x28, 0x58, 0x35, 0x44, 0x17, 0x8E, 0x2C, 0x0, 0x1, 0x0, 0x77, 0xFE, 0x52, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x20, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x27, 0x6, 0x23, 0x22, 0x26, 0x27, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x3, 0xF7, 0x49, 0x5C, 0x58, 0x7B, 0x93, 0x6, 0x6A, 0xC6, 0x9E, 0xC6, 0x1, 0xF3, 0x67, 0x45, 0xAE, 0x40, 0xF3, 0x14, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0xFE, 0x7E, 0x2C, 0x66, 0x63, 0x8C, 0x60, 0x63, 0x7E, 0xBA, 0xD5, 0x2, 0xBF, 0xFD, 0x43, 0x75, 0x55, 0x7D, 0x3, 0xA, 0xFB, 0xC6, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x7, 0x37, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x1, 0xA7, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x6, 0x1, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x1, 0xA, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x37, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0x88, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x6, 0x1, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x17, 0x0, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x3, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xB4, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x83, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x52, 0x0, 0x0, 0x3, 0xC0, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x1B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x7, 0x13, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x6A, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x52, 0x0, 0x0, 0x3, 0xC0, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x2, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x7, 0x38, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x9C, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x52, 0x0, 0x0, 0x3, 0xC0, 0x6, 0x2, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x34, 0x0, 0xFF, 0xFF, 0xFF, 0xF6, 0x0, 0x0, 0x7, 0x57, 0x7, 0x42, 0x0, 0x26, 0x0, 0x82, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0xBB, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x48, 0xFF, 0xEB, 0x6, 0x85, 0x6, 0x1, 0x0, 0x26, 0x0, 0x87, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0x70, 0x0, 0x1, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xA1, 0x5, 0x22, 0x7, 0x80, 0x0, 0x26, 0x0, 0x84, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xDF, 0x1, 0x80, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0x76, 0x4, 0x3E, 0x5, 0xFD, 0x0, 0x26, 0x0, 0x8A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x30, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xA6, 0x0, 0x0, 0x4, 0x2B, 0x4, 0x8D, 0x0, 0x26, 0x7, 0xAE, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x16, 0xFF, 0x6D, 0xFF, 0xFF, 0xFF, 0xA6, 0x0, 0x0, 0x4, 0x2B, 0x4, 0x8D, 0x0, 0x26, 0x7, 0xAE, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x16, 0xFF, 0x6D, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x54, 0x0, 0x0, 0x0, 0x6, 0x7, 0xA4, 0x32, 0xBC, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x1E, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xC6, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x1E, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x65, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x1F, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x66, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x13, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x68, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x5, 0xEB, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x92, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x7C, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x0, 0xFB, 0x0, 0x52, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x99, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA5, 0x1, 0x1, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x3F, 0x4, 0x44, 0x4, 0x9D, 0x0, 0x26, 0x7, 0xAF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x6, 0x1E, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0x96, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x6, 0x1E, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x35, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x6, 0x1F, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x36, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x5, 0xEB, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x62, 0x1E, 0xFF, 0xFF, 0xFF, 0xA5, 0x0, 0x0, 0x1, 0x7E, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0xFF, 0x74, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x84, 0x0, 0x0, 0x2, 0x5C, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x6, 0x0, 0x76, 0x13, 0x1E, 0xFF, 0xFF, 0xFF, 0xA9, 0x0, 0x0, 0x2, 0x58, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0xFF, 0x14, 0x0, 0x1E, 0xFF, 0xFF, 0xFF, 0x9E, 0x0, 0x0, 0x2, 0x64, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x40, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x67, 0x6, 0x13, 0x0, 0x26, 0x7, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0x87, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xD4, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x73, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x74, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x13, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x76, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xA0, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xB5, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x54, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x55, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x81, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x2D, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x5, 0xCB, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x62, 0x21, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x6, 0x5, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x99, 0x0, 0x1E, 0x0, 0x2, 0x0, 0x9, 0xFE, 0x52, 0x4, 0x94, 0x4, 0x8D, 0x0, 0x2, 0x0, 0x19, 0x0, 0x0, 0x1, 0x3, 0x3, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x27, 0x21, 0x7, 0x23, 0x1, 0x33, 0x1, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x2, 0xF8, 0xAA, 0xA9, 0x2, 0xCE, 0x49, 0x5C, 0x58, 0x7B, 0x9E, 0x5A, 0xFE, 0x20, 0x60, 0xF6, 0x1, 0xD7, 0xDF, 0x1, 0xD5, 0x35, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0x1, 0xB2, 0x1, 0xBA, 0xFE, 0x46, 0xFC, 0xCC, 0x2C, 0x66, 0x63, 0x8F, 0x65, 0xEB, 0xFA, 0x4, 0x8D, 0xFB, 0x73, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x6, 0x1E, 0x0, 0x26, 0x7, 0xAF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x63, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x6, 0x1F, 0x0, 0x26, 0x7, 0xAF, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x64, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x5, 0xFB, 0x0, 0x26, 0x7, 0xAF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x4A, 0x0, 0x26, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x6, 0x20, 0x0, 0x26, 0x7, 0xAF, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x7C, 0x1E, 0xFF, 0xFF, 0x0, 0x6A, 0x0, 0x0, 0x4, 0x2B, 0x6, 0x20, 0x0, 0x26, 0x7, 0xAE, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0xF8, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x5, 0xCB, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x32, 0x21, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x6, 0x5, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x69, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x5, 0xFB, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x1C, 0x0, 0x26, 0x0, 0x1, 0x0, 0x76, 0xFE, 0x52, 0x3, 0xB6, 0x4, 0x8D, 0x0, 0x1B, 0x0, 0x0, 0x1, 0x6, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x23, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x3, 0x6B, 0x49, 0x5C, 0x58, 0x7B, 0x88, 0xFD, 0xFB, 0x3, 0x3C, 0xFD, 0xB7, 0x1, 0xF6, 0xFE, 0xA, 0x2, 0x4D, 0x5F, 0x45, 0x5D, 0x47, 0x2C, 0x2E, 0xFE, 0x7E, 0x2C, 0x66, 0x63, 0x85, 0x60, 0x4, 0x8D, 0xC4, 0xFE, 0xF3, 0xC3, 0xFE, 0xCA, 0xC3, 0x2D, 0x5F, 0x3B, 0x44, 0x17, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x6, 0x20, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x4E, 0x1E, 0xFF, 0xFF, 0x0, 0x55, 0xFF, 0xF0, 0x4, 0x49, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x61, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x68, 0x1E, 0xFF, 0xFF, 0x0, 0x55, 0xFF, 0xF0, 0x4, 0x49, 0x6, 0x5, 0x0, 0x26, 0x7, 0x61, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x9B, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x55, 0xFF, 0xF0, 0x4, 0x49, 0x5, 0xFB, 0x0, 0x26, 0x7, 0x61, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x4E, 0x0, 0x26, 0xFF, 0xFF, 0x0, 0x55, 0xFD, 0xF6, 0x4, 0x49, 0x4, 0x9D, 0x0, 0x26, 0x7, 0x61, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x6A, 0xFE, 0x90, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x68, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x60, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x7A, 0x1E, 0xFF, 0xFF, 0xFF, 0x90, 0x0, 0x0, 0x2, 0x6E, 0x6, 0x13, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0xFF, 0x16, 0x0, 0x1E, 0xFF, 0xFF, 0xFF, 0xAC, 0x0, 0x0, 0x2, 0x5A, 0x5, 0xCB, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x10, 0x0, 0x21, 0xFF, 0xFF, 0xFF, 0xBD, 0x0, 0x0, 0x2, 0x42, 0x6, 0x5, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0xFF, 0x47, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x14, 0xFE, 0x52, 0x1, 0x8C, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8C, 0xEB, 0x0, 0xFF, 0xFF, 0x0, 0x7C, 0x0, 0x0, 0x1, 0x82, 0x5, 0xFB, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8A, 0xFA, 0x26, 0xFF, 0xFF, 0x0, 0x25, 0xFF, 0xF0, 0x4, 0x37, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xF3, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0xFD, 0xFE, 0x4, 0x69, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5D, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x13, 0xFE, 0x98, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0x94, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x5C, 0x0, 0x0, 0x0, 0x6, 0x0, 0x76, 0x9, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0xFD, 0xFF, 0x3, 0x94, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x11, 0xFE, 0x99, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0x94, 0x4, 0x8F, 0x0, 0x26, 0x7, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x94, 0x3, 0x89, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0x94, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x72, 0xFD, 0x46, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x67, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x84, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0xFD, 0xF8, 0x4, 0x67, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x79, 0xFE, 0x92, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x67, 0x6, 0x20, 0x0, 0x26, 0x7, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x9D, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x5, 0xCB, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x70, 0x21, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x5, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xA7, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x6, 0x1D, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x0, 0xFE, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x52, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x3A, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x56, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x17, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0xFD, 0xFF, 0x4, 0x3A, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x56, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x19, 0xFE, 0x99, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x3A, 0x6, 0x20, 0x0, 0x26, 0x7, 0x56, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x30, 0x1E, 0xFF, 0xFF, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xEF, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x55, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x40, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xEF, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x55, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x41, 0x1E, 0xFF, 0xFF, 0x0, 0x3F, 0xFE, 0x40, 0x3, 0xEF, 0x4, 0x9D, 0x0, 0x26, 0x7, 0x55, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x50, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xEF, 0x6, 0x20, 0x0, 0x26, 0x7, 0x55, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x59, 0x1E, 0xFF, 0xFF, 0x0, 0x25, 0xFD, 0xFE, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x54, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x26, 0xFE, 0x98, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x4, 0x16, 0x6, 0x20, 0x0, 0x26, 0x7, 0x54, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x48, 0x1E, 0xFF, 0xFF, 0x0, 0x25, 0xFE, 0x47, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x3A, 0x0, 0x7, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x13, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x57, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x5, 0xCB, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x51, 0x21, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x5, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x88, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x1E, 0x6, 0x7C, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x0, 0xEA, 0x0, 0x52, 0xFF, 0xFF, 0x0, 0x67, 0xFF, 0xF0, 0x4, 0x36, 0x6, 0x1D, 0x0, 0x26, 0x7, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x0, 0xDF, 0x0, 0x1E, 0x0, 0x1, 0x0, 0x67, 0xFE, 0x83, 0x4, 0x1E, 0x4, 0x8D, 0x0, 0x1F, 0x0, 0x0, 0x1, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x37, 0x11, 0x33, 0x11, 0x14, 0x6, 0x7, 0x6, 0x6, 0x15, 0x14, 0x33, 0x32, 0x37, 0x17, 0x6, 0x2, 0xBA, 0x58, 0x7B, 0x3F, 0xC4, 0xFB, 0xF2, 0x7E, 0x6C, 0xE4, 0x4, 0xF3, 0x87, 0x70, 0x37, 0x47, 0x47, 0x2C, 0x2E, 0x15, 0x49, 0xFE, 0x83, 0x66, 0x63, 0x5B, 0x4A, 0x7, 0xD2, 0xC3, 0x3, 0x0, 0xFD, 0x0, 0x73, 0x67, 0xD2, 0x3, 0x8, 0xFD, 0x0, 0x8C, 0xBC, 0x2D, 0x27, 0x54, 0x33, 0x44, 0x17, 0x8E, 0x2C, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x5, 0xE6, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x51, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x1, 0x18, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x6, 0x1F, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x2E, 0x1E, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x5A, 0x1E, 0xFF, 0xFF, 0x0, 0x41, 0x0, 0x0, 0x3, 0xF3, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x4E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x30, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x41, 0x0, 0x0, 0x3, 0xF3, 0x5, 0xFB, 0x0, 0x26, 0x7, 0x4E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x17, 0x0, 0x26, 0xFF, 0xFF, 0x0, 0x41, 0x0, 0x0, 0x3, 0xF3, 0x6, 0x20, 0x0, 0x26, 0x7, 0x4E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x49, 0x1E, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x6, 0x40, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x6, 0x2, 0x2D, 0xBE, 0xFF, 0xFF, 0xFF, 0xFE, 0xE7, 0x0, 0x0, 0x4, 0x4D, 0x6, 0x42, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x20, 0x0, 0x1, 0xFF, 0xFF, 0xFE, 0xF0, 0x0, 0x0, 0x5, 0x19, 0x6, 0x41, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x29, 0x0, 0x0, 0xFF, 0xFF, 0xFE, 0xF2, 0x0, 0x0, 0x1, 0xA0, 0x6, 0x43, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x2B, 0x0, 0x2, 0xFF, 0xFF, 0xFF, 0xBC, 0xFF, 0xEC, 0x5, 0x33, 0x6, 0x40, 0x0, 0x26, 0x0, 0x34, 0x14, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x45, 0x0, 0x0, 0x5, 0x3A, 0x6, 0x40, 0x0, 0x26, 0x0, 0x3E, 0x64, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x0, 0x0, 0x4, 0xF1, 0x6, 0x40, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xF4, 0x2, 0xDA, 0x6, 0x9A, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2E, 0xFF, 0x1F, 0xFF, 0xEB, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x26, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xA3, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x27, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x30, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x32, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x33, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x34, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD4, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x35, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3D, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xC0, 0x0, 0x0, 0x2, 0x86, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x62, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x3, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xB4, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x41, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x1, 0x50, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x40, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x1, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x41, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x1, 0x23, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xAA, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x2C, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x2, 0x2D, 0xF, 0xEB, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0xA1, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x2, 0x2E, 0x1C, 0xF2, 0xFF, 0xFF, 0x0, 0x8E, 0x0, 0x0, 0x4, 0x6B, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x8F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x54, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x93, 0xFE, 0x60, 0x4, 0x1F, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x77, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x17, 0x0, 0x0, 0x3, 0xDB, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x3E, 0xFE, 0x4A, 0x4, 0x66, 0x4, 0x4A, 0x0, 0x6, 0x8, 0xAA, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xCD, 0xFF, 0xF4, 0x2, 0x93, 0x5, 0xB8, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x6F, 0xFF, 0xEB, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x5, 0xBF, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x6C, 0xF2, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x41, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x1, 0x21, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x33, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x1, 0xC, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x31, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0x2, 0x2B, 0xFF, 0xF0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xB4, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x9B, 0x0, 0x0, 0x4, 0x38, 0x7, 0x3E, 0x0, 0x26, 0x2, 0x30, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x82, 0x1, 0x3E, 0x0, 0x1, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x25, 0x0, 0x0, 0x1, 0x34, 0x26, 0x24, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x0, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x4, 0x23, 0x22, 0x24, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x3, 0x8D, 0x72, 0xFE, 0x60, 0xFE, 0xFD, 0x1, 0x1D, 0xE7, 0xF7, 0x1, 0x16, 0xFC, 0x86, 0x8E, 0x85, 0x7F, 0x98, 0x99, 0xF7, 0xED, 0xFE, 0xE7, 0xED, 0x8B, 0xFE, 0xFA, 0xA9, 0xFD, 0xB8, 0x85, 0x84, 0x85, 0x1, 0x78, 0x57, 0x69, 0x81, 0xCA, 0xAE, 0xB0, 0xE3, 0xFE, 0xF9, 0xB6, 0x6B, 0x89, 0x73, 0x56, 0x52, 0x6B, 0x2D, 0x48, 0xD8, 0xAE, 0xB8, 0xD6, 0x66, 0xCD, 0x99, 0x8A, 0x7A, 0x6C, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2E, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xC0, 0x0, 0x0, 0x2, 0x86, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x62, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x2D, 0xFF, 0xEC, 0x3, 0xE5, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x30, 0x5, 0xB0, 0x0, 0x6, 0x7, 0xAA, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x37, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x6D, 0x1, 0x37, 0xFF, 0xFF, 0x0, 0x3A, 0xFF, 0xEB, 0x4, 0xDE, 0x7, 0x25, 0x0, 0x26, 0x2, 0x74, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xD9, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x26, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xA3, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x27, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9B, 0x0, 0x0, 0x4, 0x38, 0x5, 0xB0, 0x0, 0x6, 0x2, 0x30, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x7, 0x25, 0x0, 0x26, 0x2, 0x72, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0x1C, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x32, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x34, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9B, 0x0, 0x0, 0x5, 0x15, 0x5, 0xB0, 0x0, 0x6, 0x2, 0x35, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD4, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x35, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x28, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x46, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x4A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x5, 0xD9, 0x0, 0x26, 0x2, 0x86, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0x97, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x54, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x55, 0x0, 0x0, 0x0, 0x1, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x1B, 0x0, 0x0, 0x25, 0x32, 0x36, 0x37, 0x33, 0x6, 0x4, 0x23, 0x22, 0x2, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x6, 0x15, 0x15, 0x14, 0x16, 0x2, 0x3A, 0x58, 0x7A, 0x5, 0xE4, 0x4, 0xFF, 0x0, 0xB5, 0xFA, 0xF2, 0xF3, 0xF9, 0xC5, 0xF0, 0x4, 0xE4, 0x5, 0x70, 0x63, 0x94, 0x63, 0x62, 0xAF, 0x68, 0x4F, 0x9D, 0xDD, 0x1, 0x40, 0xDF, 0x24, 0xDE, 0x1, 0x41, 0xE4, 0xB3, 0x57, 0x7D, 0xDB, 0x81, 0x24, 0x83, 0xD9, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x1F, 0x0, 0x0, 0x3, 0xE9, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x6C, 0x0, 0xFF, 0xFF, 0x0, 0x85, 0x0, 0x0, 0x3, 0x4D, 0x5, 0xF2, 0x0, 0x26, 0x2, 0x82, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x0, 0xC1, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x1, 0x91, 0x5, 0xD5, 0x0, 0x6, 0x0, 0x4E, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xAB, 0x0, 0x0, 0x2, 0x71, 0x5, 0xC6, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x4D, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xB4, 0xFE, 0x4B, 0x1, 0x86, 0x5, 0xD5, 0x0, 0x6, 0x0, 0x4F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x65, 0x5, 0xF2, 0x0, 0x26, 0x2, 0x87, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x44, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x4A, 0x0, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x2, 0x7, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x6A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0xA6, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0x9, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x7, 0x3, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0xD3, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x36, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x36, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xE8, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x6, 0x0, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x45, 0x77, 0x0, 0xFF, 0xFF, 0x0, 0x53, 0x3, 0xFC, 0x1, 0xB, 0x6, 0x0, 0x0, 0x6, 0x0, 0xC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x65, 0x3, 0xF5, 0x2, 0x41, 0x6, 0x0, 0x0, 0x6, 0x0, 0x7, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x90, 0xFF, 0xF2, 0x3, 0xC8, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6, 0x2, 0x25, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xB0, 0xFE, 0x4B, 0x2, 0x73, 0x5, 0xE0, 0x0, 0x26, 0x0, 0xEC, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0xFF, 0x3E, 0xFF, 0xDE, 0xFF, 0xFF, 0x0, 0x34, 0x4, 0x0, 0x1, 0x66, 0x6, 0x0, 0x0, 0x6, 0x4, 0x63, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x7, 0x36, 0x0, 0x26, 0x0, 0x32, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0x8F, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x7A, 0x6, 0x0, 0x0, 0x26, 0x0, 0x52, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0xA0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x6D, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0xA4, 0x1, 0x7B, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x5B, 0xFE, 0x72, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0xA4, 0x0, 0xAD, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xE8, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x7, 0x3E, 0x0, 0x26, 0x2, 0x72, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x49, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xA0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x5, 0xF2, 0x0, 0x26, 0x2, 0x86, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xC4, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x44, 0x0, 0x0, 0x5, 0x5D, 0x5, 0xB0, 0x0, 0x6, 0x2, 0x38, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x22, 0x5, 0x7F, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x4C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x10, 0x0, 0x0, 0x4, 0xF4, 0x6, 0xFD, 0x0, 0x26, 0x2, 0xAF, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x4B, 0x1, 0xF, 0xFF, 0xFF, 0xFF, 0xF2, 0x0, 0x0, 0x4, 0x19, 0x5, 0xD0, 0x0, 0x26, 0x2, 0xB0, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x3, 0xE7, 0xFF, 0xE2, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x4B, 0x8, 0x65, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x5E, 0x4, 0x8E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x4B, 0x9, 0x5D, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x5E, 0x5, 0x86, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x49, 0xFE, 0x37, 0x4, 0x7F, 0x5, 0xC4, 0x0, 0x26, 0x2, 0x71, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0x92, 0xFF, 0x9E, 0xFF, 0xFF, 0x0, 0x4E, 0xFE, 0x38, 0x3, 0xC4, 0x4, 0x4D, 0x0, 0x26, 0x2, 0x85, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0x39, 0xFF, 0x9F, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x3A, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0xD5, 0xFF, 0xA1, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x3A, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0x49, 0xFF, 0xA1, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x21, 0xFE, 0x5F, 0x3, 0xF5, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x3C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x17, 0x0, 0x0, 0x7, 0x9C, 0x7, 0x25, 0x0, 0x26, 0x2, 0x70, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x2, 0x1D, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x1E, 0x0, 0x0, 0x6, 0x5C, 0x5, 0xD9, 0x0, 0x26, 0x2, 0x84, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0x86, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xF5, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x7F, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x3, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xEE, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x78, 0x0, 0xFF, 0xFF, 0xFF, 0xF6, 0x0, 0x0, 0x7, 0x57, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x82, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x48, 0xFF, 0xEB, 0x6, 0x85, 0x4, 0x4F, 0x0, 0x6, 0x0, 0x87, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x25, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xBB, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x73, 0x0, 0xFF, 0xFF, 0x0, 0x51, 0xFF, 0xEB, 0x5, 0x1E, 0x6, 0xDC, 0x0, 0x26, 0x2, 0xEF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xC2, 0x1, 0xF, 0xFF, 0xFF, 0x0, 0x5A, 0xFF, 0xEB, 0x3, 0xF8, 0x4, 0x50, 0x0, 0x6, 0x1, 0xE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5A, 0xFF, 0xEB, 0x3, 0xF8, 0x5, 0xCE, 0x0, 0x26, 0x1, 0xE, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x69, 0x1, 0xFF, 0xFF, 0x0, 0x17, 0x0, 0x0, 0x7, 0x9C, 0x7, 0xB, 0x0, 0x26, 0x2, 0x70, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x2, 0x16, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x1E, 0x0, 0x0, 0x6, 0x5C, 0x5, 0xBF, 0x0, 0x26, 0x2, 0x84, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x7F, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x49, 0xFF, 0xEC, 0x4, 0x7F, 0x7, 0x18, 0x0, 0x26, 0x2, 0x71, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xA4, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x4E, 0xFF, 0xEC, 0x3, 0xC4, 0x5, 0xCC, 0x0, 0x26, 0x2, 0x85, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x4F, 0xFF, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x6, 0xEB, 0x0, 0x26, 0x2, 0x72, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xE5, 0x1, 0x41, 0xFF, 0xFF, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x5, 0x9F, 0x0, 0x26, 0x2, 0x86, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x60, 0xF5, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0xD, 0x7, 0xB, 0x0, 0x26, 0x2, 0x72, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x15, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x86, 0x0, 0x0, 0x4, 0x13, 0x5, 0xBF, 0x0, 0x26, 0x2, 0x86, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x90, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x3, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x5, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFF, 0xEC, 0x5, 0x18, 0x5, 0xC4, 0x0, 0x6, 0x2, 0xAD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0x3D, 0x4, 0x4E, 0x0, 0x6, 0x2, 0xAE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFF, 0xEC, 0x5, 0x18, 0x5, 0xC4, 0x0, 0x6, 0x2, 0xAD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFF, 0xEC, 0x5, 0x18, 0x7, 0x8, 0x0, 0x26, 0x2, 0xAD, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x13, 0x1, 0x3B, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0x3D, 0x5, 0xCD, 0x0, 0x26, 0x2, 0xAE, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x74, 0x0, 0xFF, 0xFF, 0x0, 0x6B, 0xFF, 0xEC, 0x4, 0xF1, 0x7, 0x19, 0x0, 0x26, 0x2, 0x7D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xE4, 0x1, 0x4C, 0xFF, 0xFF, 0x0, 0x52, 0xFF, 0xEB, 0x3, 0xE9, 0x5, 0xCD, 0x0, 0x26, 0x2, 0x95, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x59, 0x0, 0xFF, 0xFF, 0x0, 0x3A, 0xFF, 0xEB, 0x4, 0xDE, 0x6, 0xEB, 0x0, 0x26, 0x2, 0x74, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xA2, 0x1, 0x41, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x13, 0x3, 0xFF, 0xFF, 0x0, 0x3A, 0xFF, 0xEB, 0x4, 0xDE, 0x7, 0xB, 0x0, 0x26, 0x2, 0x74, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xD2, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xCD, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x43, 0x0, 0xFF, 0xFF, 0x0, 0x3A, 0xFF, 0xEB, 0x4, 0xDE, 0x7, 0x3D, 0x0, 0x26, 0x2, 0x74, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x1, 0x30, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xF8, 0x5, 0xFF, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x0, 0xA1, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8E, 0x0, 0x0, 0x4, 0xEF, 0x7, 0xB, 0x0, 0x26, 0x2, 0x77, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x10, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x5F, 0x0, 0x0, 0x3, 0xE1, 0x5, 0xBF, 0x0, 0x26, 0x2, 0x8F, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x67, 0xF2, 0xFF, 0xFF, 0x0, 0x9C, 0x0, 0x0, 0x6, 0x59, 0x7, 0xB, 0x0, 0x26, 0x2, 0x7B, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0xC2, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x5, 0xCA, 0x5, 0xBF, 0x0, 0x26, 0x2, 0x93, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x74, 0xFF, 0xF2, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x4, 0x6, 0x0, 0x0, 0x6, 0x0, 0x49, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x96, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xF, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x5B, 0xFE, 0x9B, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x41, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xBC, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x5, 0x5, 0x1, 0x3C, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x86, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x8F, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x4A, 0x7, 0xB1, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBF, 0x0, 0xBE, 0x1, 0x20, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x4, 0xD4, 0x6, 0x7B, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xBF, 0x48, 0xEA, 0xFF, 0xFF, 0x0, 0xE, 0x0, 0x0, 0x5, 0x43, 0x7, 0xAF, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC0, 0x0, 0xC3, 0x1, 0x2B, 0xFF, 0xFF, 0xFF, 0x98, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x79, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC0, 0x4D, 0xF5, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xDD, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC1, 0x0, 0xC2, 0x1, 0x12, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x4, 0x56, 0x6, 0xA7, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC1, 0x4C, 0xDC, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xD6, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC2, 0x0, 0xC3, 0x1, 0x4, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0xA0, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC2, 0x4D, 0xCE, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x96, 0x5, 0x43, 0x7, 0x37, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x1, 0x77, 0x0, 0xC2, 0x1, 0x36, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xF, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x5B, 0xFE, 0x9B, 0x3, 0xFC, 0x6, 0x1, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x26, 0x1, 0x77, 0x4C, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x41, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xAF, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC5, 0x0, 0xEF, 0x1, 0x30, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x79, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC5, 0x79, 0xFA, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xAF, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB3, 0x0, 0xEF, 0x1, 0x30, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x79, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xB3, 0x79, 0xFA, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x8, 0x3E, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC6, 0x0, 0xEE, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x7, 0x8, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC6, 0x78, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x8, 0x19, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDA, 0x0, 0xF0, 0x1, 0x3C, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x7, 0xDA, 0x7A, 0x6, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x96, 0x5, 0x43, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x1, 0x89, 0x0, 0xF5, 0x1, 0x36, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xF, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x5B, 0xFE, 0x9B, 0x3, 0xFC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x26, 0x1, 0x89, 0x7F, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x41, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xCC, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x93, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x91, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xC4, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0xCB, 0x1, 0x44, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x86, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x83, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x33, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0x8A, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x42, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x10, 0x7, 0xB9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBF, 0x0, 0x84, 0x1, 0x28, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC8, 0x6, 0x7B, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x7, 0xBF, 0x3C, 0xEA, 0xFF, 0xFF, 0xFF, 0xD4, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xB7, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC0, 0x0, 0x89, 0x1, 0x33, 0xFF, 0xFF, 0xFF, 0x8C, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x79, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC0, 0x41, 0xF5, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x92, 0x7, 0xE5, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC1, 0x0, 0x88, 0x1, 0x1A, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0x4A, 0x6, 0xA7, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC1, 0x40, 0xDC, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xDE, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC2, 0x0, 0x89, 0x1, 0xC, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0xA0, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC2, 0x41, 0xCE, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0x4D, 0x7, 0x3F, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x27, 0x1, 0x77, 0x0, 0x88, 0x1, 0x3E, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xCC, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x93, 0x4, 0xC, 0x6, 0x1, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x26, 0x1, 0x77, 0x40, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x91, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x2, 0x12, 0x7, 0xC4, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x3, 0x79, 0x1, 0x44, 0xFF, 0xFF, 0x0, 0x90, 0x0, 0x0, 0x1, 0xFD, 0x6, 0x7F, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x3, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x94, 0xFE, 0x9A, 0x1, 0xA8, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x79, 0x0, 0x7, 0xFF, 0xFF, 0x0, 0x79, 0xFE, 0x9D, 0x1, 0x91, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x4E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x5E, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x93, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x1F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x8F, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xBC, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x5, 0x1C, 0x1, 0x3C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x86, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x98, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x61, 0x7, 0xB1, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBF, 0x0, 0xD5, 0x1, 0x20, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0xDD, 0x6, 0x7B, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x7, 0xBF, 0x51, 0xEA, 0xFF, 0xFF, 0x0, 0x25, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xAF, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC0, 0x0, 0xDA, 0x1, 0x2B, 0xFF, 0xFF, 0xFF, 0xA1, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x79, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC0, 0x56, 0xF5, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xDD, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC1, 0x0, 0xD9, 0x1, 0x12, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x5F, 0x6, 0xA7, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC1, 0x55, 0xDC, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xD6, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC2, 0x0, 0xDA, 0x1, 0x4, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0xA0, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x7, 0xC2, 0x56, 0xCE, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x93, 0x5, 0x1F, 0x7, 0x37, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x27, 0x1, 0x77, 0x0, 0xD9, 0x1, 0x36, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x1F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x8F, 0x4, 0x3E, 0x6, 0x1, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x26, 0x1, 0x77, 0x55, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xEC, 0x5, 0xAA, 0x7, 0x34, 0x0, 0x26, 0x0, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xD3, 0x1, 0x34, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xBC, 0x6, 0x0, 0x0, 0x26, 0x0, 0xB5, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xEC, 0x5, 0xAA, 0x7, 0x34, 0x0, 0x26, 0x0, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x34, 0x1, 0x34, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xBC, 0x6, 0x0, 0x0, 0x26, 0x0, 0xB5, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xB9, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xEC, 0x5, 0xAA, 0x7, 0xBA, 0x0, 0x26, 0x0, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x5, 0x17, 0x1, 0x3A, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xBC, 0x6, 0x86, 0x0, 0x26, 0x0, 0xB5, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x9C, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x58, 0xFF, 0xEC, 0x5, 0xAA, 0x7, 0x29, 0x0, 0x26, 0x0, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xD6, 0x1, 0x34, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0xBC, 0x5, 0xF5, 0x0, 0x26, 0x0, 0xB5, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x5B, 0x0, 0xFF, 0xFF, 0x0, 0x58, 0xFE, 0x93, 0x5, 0xAA, 0x6, 0x2E, 0x0, 0x26, 0x0, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x8, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4F, 0xFE, 0x89, 0x4, 0xBC, 0x4, 0xA9, 0x0, 0x26, 0x0, 0xB5, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x9C, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x7E, 0xFE, 0x93, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xF3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFE, 0x93, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x43, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xBC, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0xF3, 0x1, 0x3C, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x86, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x91, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x6, 0x3D, 0x7, 0x42, 0x0, 0x26, 0x0, 0xC3, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xD6, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x5, 0x29, 0x5, 0xEB, 0x0, 0x26, 0x0, 0xC4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x56, 0xFF, 0xEB, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x6, 0x3D, 0x7, 0x42, 0x0, 0x26, 0x0, 0xC3, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x37, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x5, 0x29, 0x5, 0xEB, 0x0, 0x26, 0x0, 0xC4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xB7, 0xFF, 0xEB, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x6, 0x3D, 0x7, 0xC8, 0x0, 0x26, 0x0, 0xC3, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x5, 0x1A, 0x1, 0x48, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x5, 0x29, 0x6, 0x71, 0x0, 0x26, 0x0, 0xC4, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x9A, 0xFF, 0xF1, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x6, 0x3D, 0x7, 0x37, 0x0, 0x26, 0x0, 0xC3, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xD9, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x5, 0x29, 0x5, 0xE0, 0x0, 0x26, 0x0, 0xC4, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x59, 0xEB, 0xFF, 0xFF, 0x0, 0x7E, 0xFE, 0x89, 0x6, 0x3D, 0x6, 0x1, 0x0, 0x26, 0x0, 0xC3, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x1A, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x77, 0xFE, 0x93, 0x5, 0x29, 0x4, 0x94, 0x0, 0x26, 0x0, 0xC4, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x8F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8, 0xFE, 0xA3, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xC7, 0x0, 0x10, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0xC, 0x3, 0xD7, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x48, 0xFF, 0x79, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0xBC, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0xCB, 0x1, 0x3C, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x6, 0x86, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xBA, 0x4, 0x5A, 0x0, 0x6, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0x8A, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xF5, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x19, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0xAC, 0x4, 0xB3, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x27, 0x7, 0xA4, 0x1, 0x85, 0x2, 0x41, 0x0, 0x7, 0x0, 0x44, 0x0, 0x98, 0xFF, 0x6C, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x99, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x2, 0x4E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x24, 0xFE, 0x99, 0x3, 0xD1, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x8C, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0xE6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8E, 0xFE, 0x99, 0x4, 0xEF, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x77, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x2, 0xD0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFE, 0x99, 0x3, 0xE1, 0x4, 0x3B, 0x0, 0x26, 0x2, 0x8F, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0xC6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9B, 0xFE, 0x99, 0x4, 0x38, 0x5, 0xB0, 0x0, 0x26, 0x2, 0x30, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0x8, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x85, 0xFE, 0x99, 0x3, 0x4D, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x82, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x0, 0xED, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x17, 0xFE, 0x3F, 0x5, 0xBD, 0x5, 0xC4, 0x0, 0x26, 0x2, 0xE3, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x2, 0xEC, 0xFF, 0xA6, 0xFF, 0xFF, 0xFF, 0xCA, 0xFE, 0x44, 0x4, 0x8B, 0x4, 0x4E, 0x0, 0x26, 0x2, 0xE4, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x1, 0xF4, 0xFF, 0xAB, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x6, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x2, 0xFF, 0xD0, 0x0, 0x0, 0x4, 0xC2, 0x5, 0xB0, 0x0, 0x12, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x14, 0x4, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x21, 0x16, 0x4, 0x1, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x4, 0xC2, 0xFE, 0xEC, 0xF8, 0xFD, 0xDB, 0xC1, 0xC1, 0xFD, 0xE0, 0xE0, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFC, 0xCC, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x1, 0xC6, 0xC8, 0xFE, 0x4, 0x46, 0xAB, 0xBF, 0xBF, 0xAB, 0xC3, 0x1, 0xF3, 0xFE, 0x3B, 0x99, 0xCA, 0x8B, 0x0, 0x2, 0xFF, 0xD0, 0x0, 0x0, 0x4, 0xC2, 0x5, 0xB0, 0x0, 0x12, 0x0, 0x1A, 0x0, 0x0, 0x1, 0x14, 0x4, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x21, 0x16, 0x4, 0x1, 0x21, 0x32, 0x36, 0x34, 0x26, 0x23, 0x21, 0x4, 0xC2, 0xFE, 0xEC, 0xF8, 0xFD, 0xDB, 0xC1, 0xC1, 0xFD, 0xE0, 0xE0, 0x1, 0x2C, 0xF6, 0x1, 0x12, 0xFC, 0xCC, 0x1, 0x28, 0x8D, 0x82, 0x82, 0x8D, 0xFE, 0xD8, 0x1, 0xC6, 0xC8, 0xFE, 0x4, 0x46, 0xAB, 0xBF, 0xBF, 0xAB, 0xC3, 0x1, 0xF3, 0xFE, 0x3B, 0x99, 0xCA, 0x8B, 0x0, 0x1, 0xFF, 0xF0, 0x0, 0x0, 0x4, 0x38, 0x5, 0xB0, 0x0, 0xD, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x2, 0x8E, 0xF7, 0xFC, 0xAB, 0xAB, 0x3, 0x9D, 0xFD, 0x5F, 0xF7, 0x2, 0x9F, 0xFD, 0x61, 0x2, 0x9F, 0xAB, 0x2, 0x66, 0xCB, 0xFE, 0x65, 0x0, 0x1, 0xFF, 0xE2, 0x0, 0x0, 0x3, 0x4D, 0x4, 0x3A, 0x0, 0xD, 0x0, 0x0, 0x1, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x15, 0x21, 0x15, 0x21, 0x2, 0x80, 0xFE, 0xF8, 0xF3, 0xA3, 0xA3, 0x2, 0xC8, 0xFE, 0x2B, 0x1, 0x8, 0x1, 0xD0, 0xFE, 0x30, 0x1, 0xD0, 0xAB, 0x1, 0xBF, 0xC4, 0xFB, 0x0, 0x1, 0xFF, 0xF7, 0x0, 0x0, 0x5, 0x44, 0x5, 0xB0, 0x0, 0x14, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x15, 0x33, 0x1, 0x21, 0x1, 0x1, 0x4, 0x14, 0xFE, 0x44, 0xAD, 0xFC, 0xB8, 0xB8, 0xFC, 0xEA, 0xEA, 0x8B, 0x1, 0xAD, 0x1, 0x36, 0xFE, 0xC, 0x2, 0x1F, 0x2, 0x70, 0xFD, 0x90, 0x4, 0x3E, 0xAB, 0xC7, 0xC7, 0xAB, 0xF1, 0x2, 0x63, 0xFD, 0x46, 0xFD, 0xA, 0x0, 0x1, 0xFF, 0xC2, 0x0, 0x0, 0x4, 0x4A, 0x6, 0x0, 0x0, 0x14, 0x0, 0x0, 0x21, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x33, 0x1, 0x21, 0x1, 0x1, 0x3, 0x2F, 0xFE, 0xC8, 0x6F, 0xF3, 0xD3, 0xD3, 0xF3, 0xD8, 0xD8, 0x68, 0x1, 0x10, 0x1, 0x1B, 0xFE, 0x9F, 0x1, 0x90, 0x1, 0xDA, 0xFE, 0x26, 0x4, 0xBA, 0xAB, 0x9B, 0x9B, 0xAB, 0xFD, 0xE2, 0x1, 0x9E, 0xFE, 0x13, 0xFD, 0xB3, 0x0, 0x1, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xB0, 0x0, 0xE, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x3, 0xC5, 0xD7, 0xFE, 0xC9, 0x79, 0xFE, 0x68, 0x1, 0x19, 0x1, 0x4E, 0x1, 0x4F, 0x1, 0x18, 0xFE, 0x68, 0x87, 0x2, 0x4, 0xFD, 0xFC, 0x2, 0x4, 0xAB, 0x3, 0x1, 0xFD, 0x4F, 0x2, 0xB1, 0xFC, 0xFF, 0x0, 0x1, 0x0, 0x21, 0xFE, 0x5F, 0x3, 0xF5, 0x4, 0x3A, 0x0, 0xE, 0x0, 0x0, 0x5, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x1, 0x33, 0x13, 0x13, 0x33, 0x1, 0x33, 0x3, 0x61, 0xDD, 0xF2, 0xCF, 0xA4, 0xFE, 0xBA, 0xFB, 0xF3, 0xEC, 0xFA, 0xFE, 0xBD, 0xAF, 0x2, 0xFE, 0x61, 0x1, 0x9F, 0xAB, 0x3, 0x91, 0xFD, 0x4, 0x2, 0xFC, 0xFC, 0x6F, 0x0, 0x1, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x5, 0xB0, 0x0, 0x11, 0x0, 0x0, 0x1, 0x1, 0x21, 0x1, 0x23, 0x35, 0x33, 0x1, 0x21, 0x1, 0x1, 0x21, 0x1, 0x33, 0x15, 0x23, 0x1, 0x21, 0x2, 0x8A, 0xFE, 0xC6, 0xFE, 0xD9, 0x1, 0x96, 0x81, 0x73, 0xFE, 0x83, 0x1, 0x24, 0x1, 0x32, 0x1, 0x31, 0x1, 0x24, 0xFE, 0x83, 0x7A, 0x88, 0x1, 0x96, 0xFE, 0xD9, 0x2, 0x17, 0xFD, 0xE9, 0x2, 0x94, 0xAB, 0x2, 0x71, 0xFD, 0xF2, 0x2, 0xE, 0xFD, 0x8F, 0xAB, 0xFD, 0x6C, 0x0, 0x1, 0x0, 0x1F, 0x0, 0x0, 0x3, 0xE9, 0x4, 0x3A, 0x0, 0x11, 0x0, 0x0, 0x1, 0x3, 0x21, 0x1, 0x23, 0x35, 0x33, 0x1, 0x21, 0x13, 0x13, 0x21, 0x1, 0x33, 0x15, 0x23, 0x1, 0x21, 0x2, 0x4, 0xD7, 0xFE, 0xF2, 0x1, 0x24, 0x89, 0x83, 0xFE, 0xEE, 0x1, 0xD, 0xCA, 0xCE, 0x1, 0xD, 0xFE, 0xEE, 0x8D, 0x93, 0x1, 0x24, 0xFE, 0xF3, 0x1, 0x72, 0xFE, 0x8E, 0x1, 0xD6, 0xAB, 0x1, 0xB9, 0xFE, 0x9C, 0x1, 0x64, 0xFE, 0x47, 0xAB, 0xFE, 0x2A, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x4, 0x4D, 0x0, 0x6, 0x2, 0x3E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2, 0x0, 0x0, 0x4, 0x31, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2B, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA4, 0xFF, 0x72, 0xFE, 0x68, 0xFF, 0xFF, 0x0, 0x82, 0x2, 0x6E, 0x5, 0xCF, 0x3, 0x32, 0x0, 0x6, 0x4, 0x5F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x51, 0x0, 0x0, 0x4, 0x41, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x17, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x16, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x18, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x35, 0x0, 0x0, 0x4, 0x59, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x81, 0xFF, 0xEC, 0x4, 0x3A, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x1A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8A, 0xFF, 0xEC, 0x4, 0x4B, 0x5, 0xB7, 0x0, 0x6, 0x0, 0x1B, 0x14, 0x0, 0xFF, 0xFF, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x37, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x1D, 0x14, 0x0, 0xFF, 0xFF, 0x0, 0x5E, 0xFF, 0xF9, 0x4, 0x13, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x1E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x36, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x15, 0x14, 0x0, 0xFF, 0xFF, 0x0, 0x73, 0xFD, 0xF2, 0x1, 0x75, 0xFF, 0x9C, 0x0, 0x6, 0x4, 0x3B, 0x0, 0x0, 0x0, 0x1, 0x0, 0x90, 0xFF, 0xEC, 0x2, 0x9B, 0x6, 0x0, 0x0, 0xC, 0x0, 0x0, 0x1, 0x11, 0x16, 0x33, 0x32, 0x37, 0x17, 0x6, 0x23, 0x22, 0x26, 0x35, 0x11, 0x1, 0x83, 0x1, 0xA2, 0x28, 0x34, 0x19, 0x5B, 0x3D, 0xAD, 0xC6, 0x6, 0x0, 0xFB, 0x5E, 0xAF, 0xB, 0xB9, 0x15, 0xBF, 0xB5, 0x4, 0xA0, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x4, 0x4E, 0x0, 0x6, 0x2, 0x40, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x8, 0x3A, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2F, 0x4, 0x55, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x4B, 0x5, 0xDB, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4F, 0x4, 0x55, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8C, 0xFE, 0x4B, 0x3, 0x92, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4F, 0x2, 0xC, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x9, 0x94, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x0, 0x2F, 0x5, 0xAF, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x4B, 0x7, 0x35, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4F, 0x5, 0xAF, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x4B, 0x5, 0xF9, 0x5, 0xD5, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x4F, 0x4, 0x73, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x38, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xDA, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x2, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x64, 0x0, 0xFF, 0xFF, 0xFF, 0xC0, 0x0, 0x0, 0x2, 0x83, 0x7, 0x40, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0xFF, 0x4E, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xAB, 0x0, 0x0, 0x2, 0x6E, 0x5, 0xFB, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0xFF, 0x39, 0xFF, 0xF9, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x38, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xF1, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x2, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x6D, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x38, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xC8, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x2, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x66, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xF3, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB4, 0x4, 0xE3, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0xDA, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBF, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xB6, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB5, 0x4, 0xE3, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x7, 0x2D, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBB, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xF2, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB6, 0x4, 0xE3, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x7, 0x2E, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC5, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xB6, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB7, 0x4, 0xE3, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x7, 0x2D, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC0, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5A, 0xFF, 0xEB, 0x3, 0xF8, 0x4, 0x50, 0x0, 0x6, 0x1, 0xE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xF3, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB4, 0x4, 0xF5, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0xDA, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBF, 0x4, 0x7F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0xF2, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB8, 0x4, 0xF5, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0xEC, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBD, 0x4, 0x7F, 0x0, 0x8, 0xFF, 0xFF, 0xFF, 0xF6, 0x0, 0x0, 0x7, 0x57, 0x6, 0xEF, 0x0, 0x26, 0x0, 0x82, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x1, 0xB8, 0x1, 0x45, 0xFF, 0xFF, 0x0, 0x48, 0xFF, 0xEB, 0x6, 0x85, 0x5, 0xAE, 0x0, 0x26, 0x0, 0x87, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x1, 0x6D, 0x0, 0x4, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x7, 0x4D, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xD6, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x6, 0x2, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x6, 0x1, 0x78, 0x58, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x39, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x86, 0x1, 0x37, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x37, 0x7, 0x3F, 0x0, 0x26, 0x0, 0x50, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x84, 0x1, 0x3D, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x52, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x92, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x4E, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x12, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x52, 0x5, 0x1F, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x27, 0x1, 0x8C, 0x1, 0x92, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xD5, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x4E, 0x4, 0x3E, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x27, 0x1, 0x8C, 0x1, 0x12, 0xFF, 0xFC, 0x0, 0x6, 0x0, 0x71, 0x51, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x9, 0xC6, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x0, 0x3F, 0x5, 0x3A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x8, 0xFA, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x0, 0x5F, 0x5, 0x3A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x8, 0x45, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x0, 0x5F, 0x4, 0x85, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x7, 0x4B, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xBD, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x3F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x36, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x4B, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0xB3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x21, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x78, 0x1, 0x33, 0xFF, 0xFF, 0x0, 0xD, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x2, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x50, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0xF5, 0x1, 0xA0, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x6, 0x1A, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0x7F, 0x0, 0x6A, 0xFF, 0xFF, 0x0, 0x49, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x29, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x3E, 0x1, 0x3B, 0xFF, 0xFF, 0x0, 0x1, 0xFF, 0xEC, 0x4, 0xC, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x3, 0xF6, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0x58, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0xBB, 0x1, 0xA8, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x6, 0x1A, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0x73, 0x0, 0x6A, 0xFF, 0xFF, 0xFE, 0xF7, 0x0, 0x0, 0x2, 0x1F, 0x7, 0x29, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x2, 0xEC, 0x1, 0x3B, 0xFF, 0xFF, 0xFE, 0xE2, 0x0, 0x0, 0x2, 0xA, 0x5, 0xE4, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x2, 0xD7, 0xFF, 0xF6, 0xFF, 0xFF, 0xFF, 0xDE, 0x0, 0x0, 0x2, 0x64, 0x7, 0x58, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x3, 0x69, 0x1, 0xA8, 0xFF, 0xFF, 0xFF, 0xC9, 0x0, 0x0, 0x2, 0x4F, 0x6, 0x13, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x3, 0x54, 0x0, 0x63, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x21, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x8F, 0x1, 0x33, 0xFF, 0xFF, 0x0, 0x16, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0xB, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x50, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x5, 0xC, 0x1, 0xA0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x1A, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0x88, 0x0, 0x6A, 0xFF, 0xFF, 0x0, 0x32, 0x0, 0x0, 0x4, 0xDE, 0x7, 0x21, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x27, 0x1, 0x33, 0xFF, 0xFF, 0xFF, 0x6F, 0x0, 0x0, 0x2, 0xB5, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x3, 0x64, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDE, 0x7, 0x50, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0xA4, 0x1, 0xA0, 0xFF, 0xFF, 0x0, 0x56, 0x0, 0x0, 0x2, 0xDC, 0x6, 0x1A, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x3, 0xE1, 0x0, 0x6A, 0xFF, 0xFF, 0x0, 0x71, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x21, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x66, 0x1, 0x33, 0xFF, 0xFF, 0x0, 0xF, 0xFF, 0xEC, 0x3, 0xF7, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC0, 0x4, 0x4, 0xFF, 0xFD, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0x50, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0xE3, 0x1, 0xA0, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0x1A, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xC2, 0x4, 0x81, 0x0, 0x6A, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x40, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0xFA, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x7, 0x60, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x0, 0x2F, 0x1, 0x5E, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x13, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xA8, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x3, 0xFC, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x32, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x4A, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x93, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x40, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x7A, 0x1, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xF3, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB4, 0x5, 0xC, 0x1, 0x51, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0xDA, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBF, 0x4, 0x88, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xF6, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC3, 0x5, 0xC, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x7, 0x2, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC2, 0x4, 0x88, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0x13, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xBF, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x3B, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xF2, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB8, 0x5, 0xC, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0xEC, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBD, 0x4, 0x88, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0x84, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x13, 0x3, 0xFF, 0xFF, 0x0, 0x4F, 0xFF, 0xEC, 0x4, 0x3D, 0x4, 0x4E, 0x0, 0x6, 0x2, 0xAE, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x8F, 0x0, 0x0, 0x4, 0x3B, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x86, 0x0, 0x0, 0x4, 0x11, 0x4, 0x3A, 0x0, 0x6, 0x2, 0x8A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0xFF, 0xEC, 0x3, 0xE5, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x2F, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xF, 0x0, 0x0, 0x5, 0x2, 0x6, 0x40, 0x0, 0x26, 0x2, 0x51, 0x64, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x48, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x0, 0x0, 0x4, 0x9E, 0x7, 0xF, 0x0, 0x26, 0x2, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x78, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x3, 0xF5, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x48, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xB4, 0xFE, 0x4B, 0x1, 0x86, 0x5, 0xD5, 0x0, 0x6, 0x0, 0x4F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5F, 0xFF, 0xEC, 0x5, 0x18, 0x5, 0xC4, 0x0, 0x6, 0x2, 0xAD, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x7F, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x85, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x83, 0xFE, 0x60, 0x4, 0x37, 0x6, 0x0, 0x0, 0x6, 0x0, 0x8B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x4, 0xEC, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x28, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x32, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x60, 0xFF, 0x4, 0x5, 0x1B, 0x5, 0xC4, 0x0, 0x6, 0x0, 0x36, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x60, 0x4, 0x3, 0x4, 0x4E, 0x0, 0x6, 0x0, 0x56, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x5, 0xB0, 0x0, 0x6, 0x0, 0x3C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x4, 0x3A, 0x0, 0x6, 0x0, 0x5C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xA3, 0x7, 0x1F, 0x0, 0x26, 0x0, 0x27, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x59, 0x1, 0x4A, 0xFF, 0xFF, 0x0, 0x7D, 0xFF, 0xEC, 0x4, 0x32, 0x7, 0x1A, 0x0, 0x26, 0x0, 0x47, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x88, 0x1, 0x45, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0xA3, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x27, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xBB, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x89, 0x4, 0x32, 0x6, 0x0, 0x0, 0x26, 0x0, 0x47, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xCC, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xCB, 0x4, 0xA3, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x27, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xAB, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0xB7, 0x4, 0x32, 0x6, 0x0, 0x0, 0x26, 0x0, 0x47, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xBC, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x39, 0x4, 0xEC, 0x7, 0x4B, 0x0, 0x26, 0x0, 0x28, 0x0, 0x0, 0x0, 0x27, 0x0, 0x7A, 0x1, 0xC9, 0xFF, 0xF9, 0x0, 0x7, 0x0, 0x76, 0x1, 0xC0, 0x1, 0x4B, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x39, 0x3, 0xF5, 0x6, 0x0, 0x0, 0x26, 0x0, 0x48, 0x0, 0x0, 0x0, 0x27, 0x0, 0x7A, 0x1, 0x3D, 0xFF, 0xF9, 0x0, 0x7, 0x0, 0x76, 0x1, 0x29, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD2, 0x7, 0x1B, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x36, 0x1, 0x46, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x4, 0x7, 0x1A, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x8, 0x1, 0x45, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0xD2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x95, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x93, 0x4, 0x4, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xB5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xCB, 0x4, 0xD2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x85, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0xC1, 0x4, 0x4, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xA5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x1, 0x4, 0xD2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x48, 0xFE, 0x9B, 0xFF, 0xFF, 0x0, 0x50, 0xFD, 0xF7, 0x4, 0x4, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x68, 0xFE, 0x91, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x80, 0x4, 0xD2, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x29, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0x85, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x76, 0x4, 0x4, 0x6, 0x0, 0x0, 0x26, 0x0, 0x49, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0xA5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xBE, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBA, 0x4, 0xBB, 0x1, 0x5F, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x7, 0x30, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBE, 0x4, 0x73, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x4D, 0x7, 0xBE, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBB, 0x4, 0xBB, 0x1, 0x5F, 0xFF, 0xFF, 0x0, 0x54, 0xFF, 0xEC, 0x4, 0xC, 0x7, 0x30, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC1, 0x4, 0x73, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x80, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0xBC, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x76, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x83, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE1, 0x4, 0xBC, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x79, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE1, 0x4, 0x81, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x4A, 0x4, 0x4D, 0x7, 0x25, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x27, 0x0, 0x7A, 0x1, 0x93, 0x0, 0xA, 0x0, 0x7, 0x1, 0x89, 0x0, 0xBB, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x40, 0x4, 0xC, 0x5, 0xE7, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x27, 0x0, 0x7A, 0x1, 0x58, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x73, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0x31, 0x7, 0x1F, 0x0, 0x26, 0x0, 0x2B, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x6E, 0x1, 0x4A, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x2, 0xD7, 0x7, 0x91, 0x0, 0x26, 0x0, 0x4B, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0xDB, 0x1, 0xBC, 0xFF, 0xFF, 0x0, 0x6A, 0xFF, 0xEC, 0x4, 0xF0, 0x6, 0xF8, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xBA, 0x1, 0x4E, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x56, 0x4, 0xD, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x4C, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x3C, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x1B, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xC8, 0x1, 0x46, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x7, 0x3B, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0xFD, 0x1, 0x66, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x27, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x9D, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xA3, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0xB, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0xE, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x7, 0x2B, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0x43, 0x1, 0x5E, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x95, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDF, 0x5, 0x17, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x95, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDF, 0x4, 0x93, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x37, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x6D, 0x1, 0x37, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x4, 0x37, 0x7, 0x3D, 0x0, 0x26, 0x0, 0x50, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x6B, 0x1, 0x3D, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xDF, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xEA, 0x0, 0x4C, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0xC9, 0x4, 0x37, 0x6, 0x0, 0x0, 0x26, 0x0, 0x50, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x7A, 0x0, 0x36, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xD, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x30, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xDA, 0x0, 0x4C, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0xF7, 0x4, 0x37, 0x6, 0x0, 0x0, 0x26, 0x0, 0x50, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x6A, 0x0, 0x36, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xBB, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x79, 0xFE, 0x9D, 0x1, 0x8D, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x5E, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xC1, 0xFE, 0x9D, 0x4, 0x27, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xBB, 0x0, 0xA, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x25, 0x1, 0x39, 0xFF, 0xFF, 0xFF, 0xB3, 0xFE, 0x9D, 0x2, 0x61, 0x7, 0x3E, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x5E, 0x0, 0xA, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x17, 0x1, 0x94, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xCB, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xAB, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xB0, 0xFE, 0xCB, 0x2, 0x5E, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x3, 0x4E, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x80, 0x4, 0x27, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x31, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0xAB, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xAF, 0xFE, 0x80, 0x2, 0x5E, 0x6, 0x0, 0x0, 0x26, 0x0, 0x51, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x3, 0x4E, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x6, 0x6B, 0x7, 0x13, 0x0, 0x26, 0x0, 0x32, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x2, 0x76, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x6, 0x7A, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x52, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x2, 0x87, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x6, 0x6B, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x32, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xD7, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x9D, 0x6, 0x7A, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x52, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xDB, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x18, 0x7, 0x13, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xD1, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7A, 0x0, 0x0, 0x3, 0xF9, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x39, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9A, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x29, 0x0, 0x7, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x9D, 0x3, 0xF9, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x8F, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xC8, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x5, 0x19, 0x0, 0x7, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0xCB, 0x3, 0xF9, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x7F, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x7D, 0x5, 0x18, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x33, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x5, 0x19, 0x0, 0x7, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0x80, 0x3, 0xF9, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x53, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0x7F, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xDF, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB9, 0x5, 0x6, 0x1, 0x53, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x7, 0x55, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC4, 0x4, 0x82, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x8, 0xE, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xC7, 0x5, 0xC, 0x1, 0x4D, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x7, 0x22, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBA, 0x4, 0x88, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xB6, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBA, 0x5, 0xC, 0x1, 0x57, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x7, 0x30, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBE, 0x4, 0x88, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0x1F, 0x7, 0xB6, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBB, 0x5, 0xC, 0x1, 0x57, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x7, 0x30, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC1, 0x4, 0x88, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD4, 0x7, 0x42, 0x0, 0x26, 0x0, 0x35, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x72, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x5, 0xF6, 0x0, 0x26, 0x0, 0x55, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x9C, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xD4, 0x7, 0x1F, 0x0, 0x26, 0x0, 0x35, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x59, 0x1, 0x4A, 0xFF, 0xFF, 0x0, 0x7D, 0xFE, 0x60, 0x4, 0x31, 0x5, 0xD3, 0x0, 0x26, 0x0, 0x55, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x83, 0xFF, 0xFE, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x4, 0xDE, 0x7, 0x13, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x57, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x7D, 0x0, 0x0, 0x2, 0xB5, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0x94, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xBC, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x73, 0xFE, 0x9D, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x58, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x9D, 0x4, 0xDE, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xBC, 0x0, 0xA, 0x0, 0x7, 0x0, 0x71, 0x0, 0x6D, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x46, 0xFE, 0x9D, 0x2, 0xF4, 0x5, 0xAD, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x3, 0x58, 0x0, 0xA, 0x0, 0x6, 0x0, 0x71, 0xAA, 0x3, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0xCB, 0x4, 0xDE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x37, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xAC, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xAA, 0xFE, 0xCB, 0x2, 0xB5, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x57, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x3, 0x48, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x7, 0x13, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x75, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x20, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x4A, 0xFE, 0x93, 0x4, 0x8A, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xD7, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4C, 0xFE, 0x89, 0x3, 0xCA, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x7D, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x7, 0xAE, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBD, 0x4, 0xB7, 0x1, 0x35, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x7, 0x4C, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x8, 0xB9, 0x4, 0x62, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4A, 0xFF, 0xEC, 0x4, 0x8A, 0x8, 0x20, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBE, 0x4, 0xC2, 0x1, 0x5F, 0xFF, 0xFF, 0x0, 0x4C, 0xFF, 0xEC, 0x3, 0xCA, 0x7, 0x3B, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x7, 0x8, 0xBC, 0x4, 0x6D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4A, 0xFE, 0x93, 0x4, 0x8A, 0x7, 0x13, 0x0, 0x26, 0x0, 0x38, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x4, 0xD7, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x75, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x4C, 0xFE, 0x89, 0x3, 0xCA, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x58, 0x0, 0x0, 0x0, 0x27, 0x1, 0xD4, 0x4, 0x7D, 0xFF, 0xF6, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x20, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x4, 0xB0, 0x7, 0x13, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x67, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x8, 0xFF, 0xEC, 0x2, 0x73, 0x6, 0x97, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0x41, 0x0, 0xC2, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x97, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xC5, 0x0, 0x4, 0xFF, 0xFF, 0x0, 0x8, 0xFE, 0x93, 0x2, 0x73, 0x5, 0x41, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x16, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0xC5, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xB5, 0x0, 0x4, 0xFF, 0xFF, 0x0, 0x8, 0xFE, 0xC1, 0x3, 0x16, 0x5, 0x41, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x2D, 0xFE, 0x7A, 0x4, 0xB0, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x39, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0xB5, 0x0, 0x4, 0xFF, 0xFF, 0x0, 0x8, 0xFE, 0x76, 0x3, 0x16, 0x5, 0x41, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0x6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFE, 0x98, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD5, 0x5, 0x33, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFE, 0x98, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD5, 0x4, 0xCF, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFE, 0x79, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE1, 0x4, 0xE3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFE, 0x79, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE1, 0x4, 0x7F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFE, 0x76, 0x4, 0xBE, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0xE3, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x77, 0xFE, 0x76, 0x3, 0xF7, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x1, 0xDE, 0x4, 0x33, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x7, 0xDF, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xB9, 0x4, 0xDD, 0x1, 0x53, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x7, 0x55, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC4, 0x4, 0x7B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x7E, 0xFF, 0xEC, 0x4, 0xBE, 0x8, 0xE, 0x0, 0x26, 0x0, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x7, 0xBC, 0x4, 0xE3, 0x1, 0x6E, 0xFF, 0xFF, 0x0, 0x77, 0xFF, 0xEC, 0x3, 0xF7, 0x6, 0xFD, 0x0, 0x26, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x7, 0x8, 0xC3, 0x4, 0x81, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x1D, 0x7, 0x37, 0x0, 0x26, 0x0, 0x3B, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xB0, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x17, 0x0, 0x0, 0x3, 0xDB, 0x5, 0xEB, 0x0, 0x26, 0x0, 0x5B, 0x0, 0x0, 0x0, 0x6, 0x1, 0x8D, 0x18, 0xF6, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x9D, 0x5, 0x1D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3B, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xF1, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x17, 0xFE, 0x9D, 0x3, 0xDB, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5B, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x59, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x31, 0x0, 0x0, 0x6, 0xE5, 0x7, 0x13, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x2, 0x8D, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xF0, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x31, 0xFE, 0x9D, 0x6, 0xE5, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3C, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0xE7, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x22, 0xFE, 0x9D, 0x5, 0xCD, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x5, 0x50, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x7, 0x1F, 0x0, 0x26, 0x0, 0x3D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x82, 0x1, 0x4A, 0xFF, 0xFF, 0x0, 0x1F, 0x0, 0x0, 0x3, 0xE9, 0x5, 0xD3, 0x0, 0x26, 0x0, 0x5D, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x4, 0xEA, 0x7, 0xF, 0x0, 0x26, 0x0, 0x3D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x0, 0xC8, 0x1, 0x42, 0xFF, 0xFF, 0x0, 0x1F, 0x0, 0x0, 0x3, 0xE9, 0x5, 0xC3, 0x0, 0x26, 0x0, 0x5D, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x45, 0xF6, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x13, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0x6E, 0x1, 0x3E, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x5, 0xDD, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x0, 0xFD, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x50, 0x0, 0x0, 0x4, 0x8C, 0x7, 0x37, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0x84, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x52, 0x0, 0x0, 0x3, 0xC0, 0x6, 0x1, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x6, 0x1, 0x77, 0x1C, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x9D, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0xC2, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0x9D, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x4, 0x65, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0xCB, 0x4, 0x8C, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0xB2, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x52, 0xFE, 0xCB, 0x3, 0xC0, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x55, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x7A, 0xFE, 0xCB, 0x3, 0xF9, 0x6, 0x0, 0x0, 0x26, 0x0, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE2, 0x4, 0x93, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xE5, 0xFF, 0xEC, 0x2, 0xAB, 0x6, 0x87, 0x0, 0x26, 0x0, 0x59, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x87, 0x0, 0xBA, 0xFF, 0xFF, 0x0, 0x22, 0x0, 0x0, 0x5, 0xCD, 0x6, 0x5E, 0x0, 0x26, 0x0, 0x5C, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x1, 0x9F, 0x0, 0x34, 0xFF, 0xFF, 0x0, 0xC, 0xFE, 0x4B, 0x3, 0xD7, 0x6, 0x5E, 0x0, 0x26, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x0, 0xAC, 0x0, 0x34, 0xFF, 0xFF, 0x0, 0x5B, 0xFF, 0xEC, 0x4, 0x11, 0x6, 0x6B, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0x6F, 0x3, 0xB, 0x0, 0x80, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0xB4, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x7A, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xDB, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0x0, 0xC2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x1, 0x2F, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x0, 0xF9, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x7, 0xB, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0x0, 0xFF, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x7, 0xB, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0x0, 0xD8, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3A, 0xD9, 0xFF, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x6, 0x4, 0x49, 0xD2, 0xFF, 0xFF, 0xFF, 0xFE, 0xAF, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFE, 0x54, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE5, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFE, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFE, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0x0, 0x0, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFE, 0x91, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x67, 0x0, 0x0, 0x5, 0x43, 0x6, 0x9E, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0xFE, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x54, 0x0, 0x0, 0x5, 0x43, 0x6, 0x9E, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0xFE, 0xE5, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x7C, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x42, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xA3, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0x0, 0x8A, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x0, 0xF7, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x43, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x0, 0xC1, 0x0, 0x6B, 0xFF, 0xFF, 0xFE, 0x96, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0xFE, 0x3B, 0x0, 0x1, 0xFF, 0xFF, 0xFE, 0x9D, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x34, 0x0, 0x1, 0xFF, 0xFF, 0xFD, 0x11, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFC, 0xB6, 0x0, 0x1, 0xFF, 0xFF, 0xFD, 0x47, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFC, 0xDF, 0x0, 0x1, 0xFF, 0xFF, 0xFD, 0x6C, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFD, 0x11, 0x0, 0x1, 0xFF, 0xFF, 0xFD, 0x5B, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xD9, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFC, 0xF3, 0x0, 0x1, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x87, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x4D, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xAE, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0x0, 0x95, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x1, 0x2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x0, 0xCC, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x7, 0xB, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0x0, 0xD2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x7, 0xB, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0x0, 0xAB, 0x0, 0x6C, 0xFF, 0xFF, 0xFE, 0x9F, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0xFE, 0x44, 0x0, 0x0, 0xFF, 0xFF, 0xFE, 0xA6, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x3D, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x1A, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFC, 0xBF, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x50, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFC, 0xE8, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x75, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFD, 0x1A, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x64, 0x0, 0x0, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFC, 0xFC, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0xD2, 0x0, 0x0, 0x5, 0x19, 0x6, 0x9F, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0xFD, 0x63, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0xBF, 0x0, 0x0, 0x5, 0x19, 0x6, 0x9F, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0xFD, 0x50, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xAA, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3A, 0x73, 0x57, 0xFF, 0xFF, 0x0, 0xA2, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x49, 0x39, 0x57, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xF4, 0x2, 0x63, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3F, 0x9A, 0x57, 0xFF, 0xFF, 0xFF, 0xE9, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x42, 0x81, 0x57, 0xFF, 0xFF, 0x0, 0x49, 0xFF, 0xF4, 0x2, 0xA3, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x40, 0xEE, 0x57, 0xFF, 0xFF, 0x0, 0x20, 0xFF, 0xF4, 0x2, 0x8E, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x43, 0xB8, 0x57, 0xFF, 0xFF, 0x0, 0x2D, 0xFF, 0xF4, 0x2, 0x66, 0x6, 0xF6, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x41, 0xBE, 0x57, 0xFF, 0xFF, 0x0, 0x6, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0xF6, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x44, 0x97, 0x57, 0xFF, 0xFF, 0xFE, 0xA1, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0xFE, 0x46, 0x0, 0x2, 0xFF, 0xFF, 0xFE, 0xA8, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x3F, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0x1C, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFC, 0xC1, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0x52, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFC, 0xEA, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0x77, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFD, 0x1C, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0x66, 0x0, 0x0, 0x1, 0xA0, 0x5, 0xDA, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFC, 0xFE, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0xD4, 0x0, 0x0, 0x1, 0xA0, 0x6, 0xA1, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0xFD, 0x65, 0x0, 0x2, 0xFF, 0xFF, 0xFD, 0xC1, 0x0, 0x0, 0x1, 0xA0, 0x6, 0xA1, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0xFD, 0x52, 0x0, 0x2, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x85, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x4B, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xAC, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0x0, 0x93, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x1, 0x0, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x44, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x0, 0xCA, 0x0, 0x6C, 0xFF, 0xFF, 0xFF, 0x6B, 0xFF, 0xEC, 0x5, 0x33, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x14, 0x0, 0x0, 0x7, 0x4, 0x3A, 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x72, 0xFF, 0xEC, 0x5, 0x33, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x14, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFF, 0x9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x18, 0xFF, 0xEC, 0x5, 0x65, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x46, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFD, 0xBD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x4E, 0xFF, 0xEC, 0x5, 0x65, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x46, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFD, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x73, 0xFF, 0xEC, 0x5, 0x65, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x46, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFE, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x62, 0xFF, 0xEC, 0x5, 0x65, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x34, 0x46, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFD, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x70, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x36, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x0, 0x97, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x4, 0x42, 0x7E, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x0, 0xEB, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x36, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x0, 0xB5, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0xFD, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0x0, 0xBB, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0xFD, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0x0, 0x94, 0x0, 0x5E, 0xFF, 0xFF, 0xFE, 0x97, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x2E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x41, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFC, 0xD9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFC, 0xED, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xB0, 0x0, 0x0, 0x4, 0xD6, 0x6, 0x9E, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0xFD, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x2, 0x8F, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x2, 0x55, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3F, 0x1, 0xB6, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x42, 0x1, 0x9D, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x40, 0x2, 0xA, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x43, 0x1, 0xD4, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0xFB, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x41, 0x1, 0xDA, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0xFB, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x44, 0x1, 0xB3, 0x0, 0x5C, 0xFF, 0xFF, 0xFF, 0x75, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x7, 0x4, 0x3A, 0xFF, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFF, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x22, 0x0, 0x0, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x3F, 0xFD, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x58, 0x0, 0x0, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x42, 0xFD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7D, 0x0, 0x0, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x40, 0xFE, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x6C, 0x0, 0x0, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x43, 0xFE, 0x4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDA, 0x0, 0x0, 0x5, 0x23, 0x6, 0x9E, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x41, 0xFE, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xC7, 0x0, 0x0, 0x5, 0x23, 0x6, 0x9E, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x7, 0x4, 0x44, 0xFE, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x1, 0x15, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x1, 0xD7, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x2E, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x0, 0xDD, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x61, 0xFF, 0xEC, 0x4, 0xD, 0x6, 0x2E, 0x0, 0x26, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x1, 0x9F, 0x0, 0x6B, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x0, 0xE8, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x1, 0xAA, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x3A, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x1A, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x47, 0xD4, 0x57, 0xFF, 0xFF, 0x0, 0xAA, 0xFF, 0xF4, 0x2, 0x62, 0x6, 0x1A, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x0, 0x96, 0x0, 0x57, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x2F, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x0, 0xE6, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xEC, 0x4, 0x3E, 0x6, 0x2F, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x1, 0xA8, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x21, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x0, 0xD1, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x21, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x1, 0x93, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x1F, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0x1, 0xF0, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x1F, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x2, 0xB2, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3A, 0x1, 0xB4, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x49, 0x1, 0x7A, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xDB, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x42, 0x0, 0xC2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x40, 0x1, 0x2F, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x44, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x43, 0x0, 0xF9, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x7, 0xB, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x41, 0x0, 0xFF, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x7, 0xB, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x44, 0x0, 0xD8, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x12, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x6, 0x4, 0x3A, 0xD9, 0xFF, 0xFF, 0xFF, 0x0, 0x12, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x6, 0x4, 0x49, 0xD2, 0xFF, 0xFF, 0xFF, 0xFE, 0xAF, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x3F, 0xFE, 0x54, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE5, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x42, 0xFE, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x40, 0xFE, 0xAF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF9, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x43, 0xFE, 0x91, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x67, 0xFD, 0xF5, 0x5, 0x43, 0x6, 0x9E, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x41, 0xFE, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x54, 0xFD, 0xF5, 0x5, 0x43, 0x6, 0x9E, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0x0, 0x7, 0x4, 0x44, 0xFE, 0xE5, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x87, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x49, 0x1, 0x4D, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x3F, 0x0, 0xAE, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x42, 0x0, 0x95, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x40, 0x1, 0x2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x44, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x43, 0x0, 0xCC, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x7, 0xB, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x41, 0x0, 0xD2, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x7, 0xB, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x44, 0x0, 0xAB, 0x0, 0x6C, 0xFF, 0xFF, 0xFE, 0x9F, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x3A, 0xFE, 0x44, 0x0, 0x0, 0xFF, 0xFF, 0xFE, 0xA6, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x3D, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x1A, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x3F, 0xFC, 0xBF, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x50, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x42, 0xFC, 0xE8, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x75, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x40, 0xFD, 0x1A, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0x64, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xD8, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x43, 0xFC, 0xFC, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0xD2, 0xFD, 0xFC, 0x5, 0x19, 0x6, 0x9F, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x41, 0xFD, 0x63, 0x0, 0x0, 0xFF, 0xFF, 0xFD, 0xBF, 0xFD, 0xFC, 0x5, 0x19, 0x6, 0x9F, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0x0, 0x7, 0x4, 0x44, 0xFD, 0x50, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3A, 0x2, 0x8F, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x49, 0x2, 0x55, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3F, 0x1, 0xB6, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x42, 0x1, 0x9D, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x40, 0x2, 0xA, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x34, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x43, 0x1, 0xD4, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0xFB, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x41, 0x1, 0xDA, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0xFB, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x44, 0x1, 0xB3, 0x0, 0x5C, 0xFF, 0xFF, 0xFF, 0x75, 0xFD, 0xFC, 0x4, 0xF1, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF9, 0x0, 0xA, 0x0, 0x7, 0x4, 0x3A, 0xFF, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0xFD, 0xFC, 0x4, 0xF1, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0xF9, 0x0, 0xA, 0x0, 0x7, 0x4, 0x49, 0xFF, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x22, 0xFD, 0xFC, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x3F, 0xFD, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x58, 0xFD, 0xFC, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x42, 0xFD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7D, 0xFD, 0xFC, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x40, 0xFE, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x6C, 0xFD, 0xFC, 0x5, 0x23, 0x5, 0xD7, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x43, 0xFE, 0x4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDA, 0xFD, 0xFC, 0x5, 0x23, 0x6, 0x9E, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x41, 0xFE, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xC7, 0xFD, 0xFC, 0x5, 0x23, 0x6, 0x9E, 0x0, 0x26, 0x2, 0x39, 0x46, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x2B, 0x0, 0xA, 0x0, 0x7, 0x4, 0x44, 0xFE, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x5, 0xE7, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xB7, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x5, 0xAD, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0x80, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x47, 0x1, 0x15, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x4, 0x4E, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x48, 0x1, 0xD7, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFF, 0xEB, 0x4, 0x7A, 0x6, 0x61, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3D, 0x0, 0xE3, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x56, 0xFD, 0xE8, 0x4, 0x7A, 0x6, 0x61, 0x0, 0x26, 0x2, 0x3A, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x1, 0x4E, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3D, 0x0, 0xE3, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xF5, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xBE, 0x1, 0x39, 0xFF, 0xFF, 0xFF, 0xD7, 0x0, 0x0, 0x5, 0x43, 0x5, 0xC2, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFF, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x12, 0x0, 0x0, 0x5, 0x43, 0x5, 0xC2, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x6, 0x4, 0x48, 0xBC, 0xFF, 0xFF, 0xFF, 0x0, 0x12, 0xFD, 0xF5, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3B, 0x1, 0xF3, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x47, 0x0, 0xE8, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x4, 0x4E, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3B, 0x34, 0xA, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x2F, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x48, 0x1, 0xAA, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFE, 0x61, 0x4, 0x6, 0x6, 0x61, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3D, 0x0, 0xB6, 0x0, 0x6C, 0xFF, 0xFF, 0x0, 0x7F, 0xFD, 0xFC, 0x4, 0x6, 0x6, 0x61, 0x0, 0x26, 0x2, 0x40, 0x0, 0x0, 0x0, 0x26, 0x4, 0x3B, 0x34, 0xA, 0x0, 0x7, 0x4, 0x3D, 0x0, 0xB6, 0x0, 0x6C, 0xFF, 0xFF, 0xFE, 0x39, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFD, 0xD3, 0x0, 0x1, 0xFF, 0xFF, 0xFE, 0x82, 0x0, 0x0, 0x4, 0x4D, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0xFE, 0x1E, 0x0, 0x1, 0xFF, 0xFF, 0xFE, 0x42, 0x0, 0x0, 0x5, 0x19, 0x5, 0xC3, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFD, 0xDC, 0x0, 0x0, 0xFF, 0xFF, 0xFE, 0x8B, 0x0, 0x0, 0x5, 0x19, 0x5, 0xC3, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0xFE, 0x27, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x95, 0xFD, 0xFC, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3B, 0x2, 0xB, 0x0, 0xA, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xF4, 0x2, 0x71, 0x5, 0xD2, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0xFF, 0x76, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xDB, 0xFF, 0xF4, 0x2, 0x89, 0x5, 0x98, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x3F, 0xFF, 0xEE, 0xFF, 0xFF, 0xFF, 0xC2, 0xFF, 0xF4, 0x2, 0x9B, 0x6, 0xBC, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x4, 0x45, 0xFF, 0x53, 0x0, 0x57, 0xFF, 0xFF, 0xFF, 0xD0, 0xFF, 0xF4, 0x2, 0xA9, 0x6, 0xBC, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x4, 0x46, 0xFF, 0x61, 0x0, 0x57, 0xFF, 0xFF, 0xFF, 0xED, 0xFF, 0xF4, 0x2, 0xCB, 0x6, 0x4C, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3D, 0xA2, 0x57, 0xFF, 0xFF, 0xFF, 0xC6, 0xFF, 0xF4, 0x2, 0x9F, 0x7, 0x1E, 0x0, 0x26, 0x2, 0x42, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3E, 0xFF, 0x57, 0x0, 0x57, 0xFF, 0xFF, 0xFF, 0xDF, 0x0, 0x0, 0x2, 0x64, 0x7, 0x25, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0xFF, 0x69, 0x1, 0x3E, 0xFF, 0xFF, 0xFF, 0xCE, 0x0, 0x0, 0x2, 0x7C, 0x6, 0xEB, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0xFF, 0x32, 0x1, 0x41, 0xFF, 0xFF, 0x0, 0x2D, 0x0, 0x0, 0x1, 0xA0, 0x7, 0x6D, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFF, 0xC7, 0x1, 0xAA, 0xFF, 0xFF, 0x0, 0xA4, 0x0, 0x0, 0x2, 0x30, 0x7, 0x6D, 0x0, 0x26, 0x0, 0x2E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0x0, 0x89, 0x1, 0xAA, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x5, 0xD9, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x73, 0xF2, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x5, 0x9F, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x3C, 0xF5, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0xC3, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x4, 0x45, 0x50, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0xC3, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x4, 0x46, 0x5E, 0x5E, 0xFF, 0xFF, 0x0, 0x81, 0xFE, 0x60, 0x4, 0x32, 0x6, 0x3A, 0x0, 0x26, 0x2, 0x46, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3A, 0x1, 0x9C, 0x0, 0x62, 0xFF, 0xFF, 0x0, 0x81, 0xFE, 0x60, 0x4, 0x32, 0x6, 0x3A, 0x0, 0x26, 0x2, 0x46, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0x1, 0x62, 0x0, 0x62, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x6, 0x53, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3D, 0x0, 0x9F, 0x0, 0x5E, 0xFF, 0xFF, 0x0, 0x80, 0xFF, 0xEB, 0x4, 0x8, 0x7, 0x25, 0x0, 0x26, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x6, 0x4, 0x3E, 0x54, 0x5E, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x7, 0x1D, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xBB, 0x1, 0x36, 0xFF, 0xFF, 0x0, 0x8, 0x0, 0x0, 0x4, 0xD6, 0x6, 0xE3, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0x84, 0x1, 0x39, 0xFF, 0xFF, 0xFE, 0x33, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xC2, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFD, 0xCD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x0, 0x0, 0x4, 0xD6, 0x5, 0xC2, 0x0, 0x26, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x7, 0x4, 0x48, 0xFE, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xD8, 0x0, 0x0, 0x4, 0xD4, 0x5, 0xD7, 0x0, 0x26, 0x0, 0x35, 0x0, 0x0, 0x0, 0x7, 0x4, 0x49, 0xFE, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x1F, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x47, 0x1, 0xF0, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x4, 0x3A, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x1F, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x48, 0x2, 0xB2, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEB, 0x6, 0x2E, 0x6, 0x51, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3D, 0x1, 0xBE, 0x0, 0x5C, 0xFF, 0xFF, 0x0, 0x66, 0xFD, 0xE8, 0x6, 0x2E, 0x6, 0x51, 0x0, 0x26, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x27, 0x4, 0x3B, 0x2, 0x86, 0xFF, 0xF6, 0x0, 0x7, 0x4, 0x3D, 0x1, 0xBE, 0x0, 0x5C, 0xFF, 0xFF, 0xFF, 0xE, 0xFF, 0xEC, 0x5, 0x33, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x14, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFE, 0xA8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x57, 0xFF, 0xEC, 0x5, 0x33, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x14, 0x0, 0x0, 0x7, 0x4, 0x48, 0xFE, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xC4, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x7, 0x4, 0x47, 0xFE, 0xB2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x0, 0x0, 0x4, 0xF1, 0x5, 0xC4, 0x0, 0x26, 0x2, 0x39, 0x14, 0x0, 0x0, 0x7, 0x4, 0x48, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x6B, 0xFD, 0xFC, 0x4, 0xDD, 0x5, 0xC4, 0x0, 0x26, 0x2, 0x39, 0x0, 0x0, 0x0, 0x7, 0x4, 0x3B, 0x1, 0xE5, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x3C, 0xFF, 0xF4, 0x7, 0x7D, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x24, 0x0, 0x0, 0x0, 0x7, 0x0, 0x24, 0x3, 0xE5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x3C, 0xFF, 0xF2, 0x5, 0x88, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x24, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6, 0x3, 0xE5, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x90, 0xFF, 0xF2, 0x5, 0xBD, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x24, 0x2, 0x25, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x88, 0x2, 0x7, 0x2, 0x45, 0x3, 0xDB, 0x0, 0x6, 0x4, 0x6C, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x5, 0x1D, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFF, 0x75, 0xFE, 0xDC, 0xFF, 0xFF, 0xFF, 0x66, 0x0, 0x0, 0x3, 0xF2, 0x5, 0x20, 0x0, 0x26, 0x7, 0xA6, 0x3C, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x9F, 0xFE, 0xDF, 0xFF, 0xFF, 0xFF, 0x73, 0x0, 0x0, 0x4, 0xA4, 0x5, 0x1B, 0x0, 0x26, 0x7, 0x60, 0x3C, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xAC, 0xFE, 0xDA, 0xFF, 0xFF, 0xFF, 0x75, 0x0, 0x0, 0x1, 0xB4, 0x5, 0x20, 0x0, 0x26, 0x7, 0x5F, 0x3C, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xAE, 0xFE, 0xDF, 0xFF, 0xFF, 0xFF, 0x9E, 0xFF, 0xF0, 0x4, 0x79, 0x5, 0x1D, 0x0, 0x26, 0x7, 0x59, 0xA, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xD7, 0xFE, 0xDC, 0xFF, 0xFF, 0xFF, 0x24, 0x0, 0x0, 0x4, 0x73, 0x5, 0x1D, 0x0, 0x26, 0x7, 0x4F, 0x3C, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0x5D, 0xFE, 0xDC, 0xFF, 0xFF, 0xFF, 0xAE, 0x0, 0x0, 0x4, 0x8E, 0x5, 0x1D, 0x0, 0x26, 0x7, 0x6F, 0xA, 0x0, 0x0, 0x7, 0x2, 0x2D, 0xFE, 0xE7, 0xFE, 0xDC, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xB1, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0xA, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xB0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xA6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x41, 0x0, 0x0, 0x3, 0xF3, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x4E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x68, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x60, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x85, 0x0, 0x0, 0x1, 0x78, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x69, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x5, 0x90, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x67, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5A, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0x6, 0x7, 0x59, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x2C, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x54, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x4F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x16, 0x0, 0x0, 0x4, 0x4A, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x50, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x9E, 0x0, 0x0, 0x2, 0x64, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x40, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x5A, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x5, 0xEB, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x6B, 0x62, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0x97, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x66, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x23, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x3F, 0xFF, 0xF0, 0x3, 0xEF, 0x4, 0x9D, 0x0, 0x6, 0x7, 0x55, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x85, 0x0, 0x0, 0x1, 0x78, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5F, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x9E, 0x0, 0x0, 0x2, 0x64, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0xFF, 0x40, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x25, 0xFF, 0xF0, 0x3, 0x65, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x69, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x5D, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x16, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x20, 0xFF, 0xEC, 0x4, 0x3A, 0x6, 0x5, 0x0, 0x26, 0x7, 0x7D, 0x0, 0x0, 0x0, 0x6, 0x1, 0x89, 0x79, 0x1E, 0xFF, 0xFF, 0x0, 0x9, 0x0, 0x0, 0x4, 0x94, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xB1, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0xA, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xB0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0x97, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x66, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x3, 0xB6, 0x4, 0x8D, 0x0, 0x6, 0x7, 0xA6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x6E, 0x6, 0x5, 0x0, 0x26, 0x7, 0x7A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x0, 0xB9, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x5, 0x90, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x68, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x60, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0x6, 0x7, 0x59, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x62, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x6B, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x2C, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x58, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xF0, 0x4, 0x44, 0x4, 0x9D, 0x0, 0x6, 0x7, 0xAF, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x25, 0x0, 0x0, 0x4, 0x16, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x54, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x16, 0x0, 0x0, 0x4, 0x4A, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x50, 0x0, 0x0, 0x0, 0x1, 0x0, 0x43, 0xFE, 0x37, 0x3, 0xE8, 0x4, 0x9D, 0x0, 0x29, 0x0, 0x0, 0x1, 0x23, 0x11, 0x26, 0x26, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x6, 0x15, 0x23, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x6, 0x7, 0x16, 0x16, 0x15, 0x14, 0x6, 0x7, 0x2, 0x81, 0xF3, 0x81, 0xCA, 0xF3, 0x5, 0x7A, 0x56, 0x77, 0x73, 0xE0, 0x94, 0x9D, 0xC5, 0x65, 0x76, 0x4F, 0x72, 0xF3, 0xFB, 0xBA, 0xCD, 0xFF, 0x6E, 0x5C, 0x6F, 0x6E, 0xC9, 0x9E, 0xFE, 0x37, 0x1, 0xC3, 0x16, 0x9B, 0x9C, 0x50, 0x43, 0x57, 0x47, 0xA7, 0x3, 0xB0, 0x5, 0x93, 0x3E, 0x56, 0x3E, 0x43, 0x9B, 0xAB, 0x9F, 0x9E, 0x59, 0x8C, 0x26, 0x25, 0x90, 0x5C, 0x90, 0xA6, 0x16, 0x0, 0x1, 0x0, 0x76, 0xFE, 0x99, 0x5, 0x2D, 0x4, 0x8D, 0x0, 0xF, 0x0, 0x0, 0x1, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x5, 0x2D, 0xF3, 0xC4, 0xFD, 0xF3, 0xF3, 0xF3, 0x2, 0xD, 0xF2, 0xC5, 0xFE, 0x99, 0x1, 0x67, 0x1, 0xDB, 0xFE, 0x25, 0x4, 0x8D, 0xFE, 0x12, 0x1, 0xEE, 0xFC, 0x28, 0x0, 0x1, 0x0, 0x50, 0xFE, 0x40, 0x4, 0x44, 0x4, 0x9D, 0x0, 0x1D, 0x0, 0x0, 0x1, 0x6, 0x6, 0x7, 0x11, 0x23, 0x11, 0x26, 0x2, 0x35, 0x35, 0x10, 0x0, 0x33, 0x32, 0x16, 0x17, 0x23, 0x26, 0x26, 0x23, 0x20, 0x3, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x4, 0x43, 0xD, 0xC0, 0xAF, 0xF3, 0xB6, 0xCE, 0x1, 0x19, 0xEC, 0xE8, 0xF4, 0x13, 0xF3, 0xA, 0x6F, 0x83, 0xFE, 0xF4, 0x7, 0x7F, 0x8F, 0x80, 0x75, 0xB, 0x1, 0x85, 0x99, 0xD6, 0x1D, 0xFE, 0x47, 0x1, 0xBC, 0x25, 0x1, 0x20, 0xDF, 0x4C, 0x1, 0x3, 0x1, 0x2E, 0xE9, 0xB3, 0x61, 0x78, 0xFE, 0xA5, 0x5F, 0xAE, 0xBF, 0x6A, 0x68, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x4F, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xB, 0xFE, 0x37, 0x5, 0xA8, 0x4, 0xA4, 0x0, 0x26, 0x7, 0x93, 0x0, 0x0, 0x0, 0x7, 0x7, 0xDB, 0x2, 0xE5, 0xFF, 0x9E, 0xFF, 0xFF, 0x0, 0x76, 0x0, 0x0, 0x4, 0x6E, 0x5, 0xCB, 0x0, 0x26, 0x7, 0x7A, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0x82, 0x0, 0x21, 0xFF, 0xFF, 0x0, 0x20, 0xFF, 0xEC, 0x4, 0x3A, 0x5, 0xCB, 0x0, 0x26, 0x7, 0x7D, 0x0, 0x0, 0x0, 0x6, 0x0, 0x71, 0x42, 0x21, 0xFF, 0xFF, 0x0, 0x51, 0x0, 0x0, 0x5, 0x4D, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x6D, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x25, 0xFF, 0xF0, 0x3, 0x65, 0x4, 0x8D, 0x0, 0x6, 0x7, 0x5E, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x85, 0xFF, 0xF0, 0x5, 0x62, 0x4, 0x8D, 0x0, 0x26, 0x7, 0x5F, 0x0, 0x0, 0x0, 0x7, 0x7, 0x5E, 0x1, 0xFD, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xF0, 0x0, 0x0, 0x6, 0x4, 0x6, 0x0, 0x0, 0x26, 0x8, 0xB4, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0x82, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFF, 0xC8, 0x4, 0x6F, 0x6, 0x1E, 0x0, 0x26, 0x8, 0xB6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0x73, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x3F, 0xFD, 0xF7, 0x3, 0xEF, 0x4, 0x9D, 0x0, 0x26, 0x7, 0x55, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0x3C, 0xFE, 0x91, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x5, 0xE6, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x78, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x5, 0xE6, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x2, 0x17, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x29, 0x0, 0x0, 0x5, 0xE6, 0x5, 0xEB, 0x0, 0x26, 0x7, 0x51, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x44, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x5, 0x0, 0x0, 0x4, 0x37, 0x6, 0x1E, 0x0, 0x26, 0x7, 0x4F, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x0, 0x8E, 0x0, 0x1E, 0xFF, 0xFF, 0x0, 0x12, 0xFE, 0x55, 0x5, 0x43, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x26, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x82, 0x0, 0x3, 0xFF, 0xFF, 0x0, 0x5B, 0xFE, 0x5A, 0x3, 0xFC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x46, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x0, 0xB4, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x5C, 0x4, 0x4D, 0x5, 0xB0, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x3F, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x54, 0xFE, 0x52, 0x4, 0xC, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x4A, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x4, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x52, 0x5, 0x1F, 0x5, 0xC4, 0x0, 0x26, 0x0, 0x34, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x92, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x4E, 0x4, 0x3E, 0x4, 0x4E, 0x0, 0x26, 0x0, 0x54, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x12, 0xFF, 0xFC, 0xFF, 0xFF, 0x0, 0x9, 0xFE, 0x52, 0x4, 0x94, 0x4, 0x8D, 0x0, 0x26, 0x7, 0xB1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x23, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x76, 0xFE, 0x5A, 0x3, 0xB6, 0x4, 0x8D, 0x0, 0x26, 0x7, 0xA6, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x0, 0xED, 0x0, 0x8, 0xFF, 0xFF, 0x0, 0x50, 0xFE, 0x52, 0x4, 0x6F, 0x4, 0x9D, 0x0, 0x26, 0x7, 0x59, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x1, 0x39, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x54, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x35, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x54, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xD4, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x55, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xD5, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x49, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xD7, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x21, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x1, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0xB2, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x1, 0x6A, 0x1, 0x88, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x1, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xD1, 0x1, 0x57, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0x3B, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0x8, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x66, 0xFE, 0x52, 0x5, 0xD, 0x5, 0xC4, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x3, 0x17, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x66, 0xFF, 0xEC, 0x5, 0xD, 0x7, 0xCF, 0x0, 0x26, 0x7, 0xE0, 0x0, 0x0, 0x0, 0x7, 0x7, 0xA5, 0x1, 0x70, 0x1, 0x39, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x5C, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x4E, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x5C, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xED, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x5D, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x77, 0x0, 0xEE, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x29, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x1A, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x9, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xEA, 0x1, 0x5F, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x43, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0x21, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x39, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8A, 0x1, 0xD4, 0x1, 0x64, 0xFF, 0xFF, 0x0, 0x65, 0xFE, 0x52, 0x5, 0x30, 0x5, 0xC4, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x2, 0x6, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x65, 0xFF, 0xEA, 0x5, 0x30, 0x7, 0x5E, 0x0, 0x26, 0x7, 0xE1, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x1, 0x6, 0x1, 0x5C, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x49, 0x0, 0x26, 0x7, 0xDE, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xF5, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x54, 0x0, 0x26, 0x7, 0xDE, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xF2, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFD, 0xFE, 0x5, 0x19, 0x5, 0xC4, 0x0, 0x26, 0x7, 0xDE, 0x0, 0x0, 0x0, 0x7, 0x7, 0x25, 0x1, 0xE5, 0xFE, 0x98, 0xFF, 0xFF, 0x0, 0x95, 0x0, 0x0, 0x5, 0x19, 0x7, 0x56, 0x0, 0x26, 0x7, 0xDE, 0x0, 0x0, 0x0, 0x7, 0x1, 0x78, 0x1, 0xB, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x54, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x45, 0x1, 0x4A, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x54, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x76, 0x1, 0xE9, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x21, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x6B, 0x1, 0x16, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x49, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8D, 0x0, 0xEC, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x1, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x0, 0x71, 0x0, 0xE6, 0x1, 0x57, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x3B, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x89, 0x1, 0x1D, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0xB2, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8B, 0x1, 0x7F, 0x1, 0x88, 0xFF, 0xFF, 0x0, 0x95, 0xFF, 0xEC, 0x5, 0x19, 0x7, 0x53, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8E, 0x1, 0x74, 0x1, 0x54, 0xFF, 0xFF, 0x0, 0x95, 0xFE, 0x52, 0x5, 0x19, 0x5, 0xB0, 0x0, 0x26, 0x7, 0xDF, 0x0, 0x0, 0x0, 0x7, 0x1, 0x8C, 0x3, 0x35, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0x91, 0xFE, 0x83, 0x2, 0x6F, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xE1, 0x3, 0x4E, 0x0, 0xA, 0xFF, 0xFF, 0x0, 0x79, 0xFE, 0x9D, 0x1, 0x8D, 0x4, 0x3A, 0x0, 0x26, 0x0, 0x8E, 0x0, 0x0, 0x0, 0x7, 0x1, 0xD4, 0x3, 0x5E, 0x0, 0xA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0xC6, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x0, 0x0, 0x5E, 0x0, 0x0, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x5E, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x2, 0x0, 0xE, 0x0, 0x78, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x3, 0x0, 0x32, 0x0, 0x86, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x4, 0x0, 0x1A, 0x0, 0x5E, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x5, 0x0, 0x26, 0x0, 0xB8, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x6, 0x0, 0x1A, 0x0, 0xDE, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x7, 0x0, 0x40, 0x0, 0xF8, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x8, 0x0, 0xC, 0x1, 0x38, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x9, 0x0, 0x26, 0x1, 0x44, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0xB, 0x0, 0x14, 0x1, 0x6A, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0xC, 0x0, 0x14, 0x1, 0x6A, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0xD, 0x0, 0x5C, 0x1, 0x7E, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0xE, 0x0, 0x54, 0x1, 0xDA, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x10, 0x0, 0xC, 0x2, 0x2E, 0x0, 0x3, 0x0, 0x1, 0x4, 0x9, 0x0, 0x11, 0x0, 0xC, 0x2, 0x3A, 0x0, 0x43, 0x0, 0x6F, 0x0, 0x70, 0x0, 0x79, 0x0, 0x72, 0x0, 0x69, 0x0, 0x67, 0x0, 0x68, 0x0, 0x74, 0x0, 0x20, 0x0, 0x32, 0x0, 0x30, 0x0, 0x31, 0x0, 0x31, 0x0, 0x20, 0x0, 0x47, 0x0, 0x6F, 0x0, 0x6F, 0x0, 0x67, 0x0, 0x6C, 0x0, 0x65, 0x0, 0x20, 0x0, 0x49, 0x0, 0x6E, 0x0, 0x63, 0x0, 0x2E, 0x0, 0x20, 0x0, 0x41, 0x0, 0x6C, 0x0, 0x6C, 0x0, 0x20, 0x0, 0x52, 0x0, 0x69, 0x0, 0x67, 0x0, 0x68, 0x0, 0x74, 0x0, 0x73, 0x0, 0x20, 0x0, 0x52, 0x0, 0x65, 0x0, 0x73, 0x0, 0x65, 0x0, 0x72, 0x0, 0x76, 0x0, 0x65, 0x0, 0x64, 0x0, 0x2E, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x6F, 0x0, 0x74, 0x0, 0x6F, 0x0, 0x20, 0x0, 0x4D, 0x0, 0x65, 0x0, 0x64, 0x0, 0x69, 0x0, 0x75, 0x0, 0x6D, 0x0, 0x52, 0x0, 0x65, 0x0, 0x67, 0x0, 0x75, 0x0, 0x6C, 0x0, 0x61, 0x0, 0x72, 0x0, 0x47, 0x0, 0x6F, 0x0, 0x6F, 0x0, 0x67, 0x0, 0x6C, 0x0, 0x65, 0x0, 0x3A, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x6F, 0x0, 0x74, 0x0, 0x6F, 0x0, 0x20, 0x0, 0x4D, 0x0, 0x65, 0x0, 0x64, 0x0, 0x69, 0x0, 0x75, 0x0, 0x6D, 0x0, 0x3A, 0x0, 0x32, 0x0, 0x30, 0x0, 0x31, 0x0, 0x36, 0x0, 0x56, 0x0, 0x65, 0x0, 0x72, 0x0, 0x73, 0x0, 0x69, 0x0, 0x6F, 0x0, 0x6E, 0x0, 0x20, 0x0, 0x32, 0x0, 0x2E, 0x0, 0x31, 0x0, 0x33, 0x0, 0x34, 0x0, 0x3B, 0x0, 0x20, 0x0, 0x32, 0x0, 0x30, 0x0, 0x31, 0x0, 0x36, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x6F, 0x0, 0x74, 0x0, 0x6F, 0x0, 0x2D, 0x0, 0x4D, 0x0, 0x65, 0x0, 0x64, 0x0, 0x69, 0x0, 0x75, 0x0, 0x6D, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x6F, 0x0, 0x74, 0x0, 0x6F, 0x0, 0x20, 0x0, 0x69, 0x0, 0x73, 0x0, 0x20, 0x0, 0x61, 0x0, 0x20, 0x0, 0x74, 0x0, 0x72, 0x0, 0x61, 0x0, 0x64, 0x0, 0x65, 0x0, 0x6D, 0x0, 0x61, 0x0, 0x72, 0x0, 0x6B, 0x0, 0x20, 0x0, 0x6F, 0x0, 0x66, 0x0, 0x20, 0x0, 0x47, 0x0, 0x6F, 0x0, 0x6F, 0x0, 0x67, 0x0, 0x6C, 0x0, 0x65, 0x0, 0x2E, 0x0, 0x47, 0x0, 0x6F, 0x0, 0x6F, 0x0, 0x67, 0x0, 0x6C, 0x0, 0x65, 0x0, 0x43, 0x0, 0x68, 0x0, 0x72, 0x0, 0x69, 0x0, 0x73, 0x0, 0x74, 0x0, 0x69, 0x0, 0x61, 0x0, 0x6E, 0x0, 0x20, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x65, 0x0, 0x72, 0x0, 0x74, 0x0, 0x73, 0x0, 0x6F, 0x0, 0x6E, 0x0, 0x47, 0x0, 0x6F, 0x0, 0x6F, 0x0, 0x67, 0x0, 0x6C, 0x0, 0x65, 0x0, 0x2E, 0x0, 0x63, 0x0, 0x6F, 0x0, 0x6D, 0x0, 0x4C, 0x0, 0x69, 0x0, 0x63, 0x0, 0x65, 0x0, 0x6E, 0x0, 0x73, 0x0, 0x65, 0x0, 0x64, 0x0, 0x20, 0x0, 0x75, 0x0, 0x6E, 0x0, 0x64, 0x0, 0x65, 0x0, 0x72, 0x0, 0x20, 0x0, 0x74, 0x0, 0x68, 0x0, 0x65, 0x0, 0x20, 0x0, 0x41, 0x0, 0x70, 0x0, 0x61, 0x0, 0x63, 0x0, 0x68, 0x0, 0x65, 0x0, 0x20, 0x0, 0x4C, 0x0, 0x69, 0x0, 0x63, 0x0, 0x65, 0x0, 0x6E, 0x0, 0x73, 0x0, 0x65, 0x0, 0x2C, 0x0, 0x20, 0x0, 0x56, 0x0, 0x65, 0x0, 0x72, 0x0, 0x73, 0x0, 0x69, 0x0, 0x6F, 0x0, 0x6E, 0x0, 0x20, 0x0, 0x32, 0x0, 0x2E, 0x0, 0x30, 0x0, 0x68, 0x0, 0x74, 0x0, 0x74, 0x0, 0x70, 0x0, 0x3A, 0x0, 0x2F, 0x0, 0x2F, 0x0, 0x77, 0x0, 0x77, 0x0, 0x77, 0x0, 0x2E, 0x0, 0x61, 0x0, 0x70, 0x0, 0x61, 0x0, 0x63, 0x0, 0x68, 0x0, 0x65, 0x0, 0x2E, 0x0, 0x6F, 0x0, 0x72, 0x0, 0x67, 0x0, 0x2F, 0x0, 0x6C, 0x0, 0x69, 0x0, 0x63, 0x0, 0x65, 0x0, 0x6E, 0x0, 0x73, 0x0, 0x65, 0x0, 0x73, 0x0, 0x2F, 0x0, 0x4C, 0x0, 0x49, 0x0, 0x43, 0x0, 0x45, 0x0, 0x4E, 0x0, 0x53, 0x0, 0x45, 0x0, 0x2D, 0x0, 0x32, 0x0, 0x2E, 0x0, 0x30, 0x0, 0x52, 0x0, 0x6F, 0x0, 0x62, 0x0, 0x6F, 0x0, 0x74, 0x0, 0x6F, 0x0, 0x4D, 0x0, 0x65, 0x0, 0x64, 0x0, 0x69, 0x0, 0x75, 0x0, 0x6D, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x6A, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x91, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x1, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1, 0x0, 0x7A, 0x0, 0x7A, 0x0, 0x1, 0x0, 0x82, 0x0, 0x82, 0x0, 0x1, 0x0, 0x84, 0x0, 0x84, 0x0, 0x1, 0x0, 0x87, 0x0, 0x87, 0x0, 0x1, 0x0, 0x8A, 0x0, 0x8A, 0x0, 0x1, 0x0, 0x8C, 0x0, 0x97, 0x0, 0x1, 0x0, 0xA6, 0x0, 0xA7, 0x0, 0x1, 0x0, 0xAD, 0x0, 0xAD, 0x0, 0x1, 0x0, 0xB0, 0x0, 0xB0, 0x0, 0x1, 0x0, 0xB4, 0x0, 0xB5, 0x0, 0x1, 0x0, 0xBD, 0x0, 0xBD, 0x0, 0x1, 0x0, 0xC3, 0x0, 0xC4, 0x0, 0x1, 0x0, 0xC9, 0x0, 0xCA, 0x0, 0x1, 0x0, 0xDB, 0x0, 0xDC, 0x0, 0x1, 0x0, 0xEC, 0x0, 0xEC, 0x0, 0x1, 0x0, 0xF2, 0x0, 0xF2, 0x0, 0x1, 0x0, 0xF8, 0x0, 0xF9, 0x0, 0x1, 0x0, 0xFD, 0x0, 0xFE, 0x0, 0x1, 0x1, 0x1, 0x1, 0x61, 0x0, 0x1, 0x1, 0x8C, 0x1, 0x8C, 0x0, 0x1, 0x1, 0x8F, 0x1, 0x8F, 0x0, 0x1, 0x1, 0x96, 0x1, 0x9A, 0x0, 0x4, 0x1, 0xB1, 0x1, 0xCB, 0x0, 0x3, 0x1, 0xCD, 0x1, 0xD1, 0x0, 0x3, 0x1, 0xD4, 0x1, 0xE4, 0x0, 0x3, 0x1, 0xEA, 0x1, 0xFF, 0x0, 0x3, 0x2, 0x1, 0x2, 0x8, 0x0, 0x3, 0x2, 0xA, 0x2, 0x20, 0x0, 0x3, 0x2, 0x30, 0x2, 0x30, 0x0, 0x1, 0x2, 0x39, 0x2, 0x3A, 0x0, 0x1, 0x2, 0x3E, 0x2, 0x3E, 0x0, 0x1, 0x2, 0x40, 0x2, 0x40, 0x0, 0x1, 0x2, 0x42, 0x2, 0x42, 0x0, 0x1, 0x2, 0x46, 0x2, 0x46, 0x0, 0x1, 0x2, 0x4A, 0x2, 0x4A, 0x0, 0x1, 0x2, 0x4C, 0x2, 0x4D, 0x0, 0x1, 0x2, 0x51, 0x2, 0x51, 0x0, 0x1, 0x2, 0x53, 0x2, 0x53, 0x0, 0x1, 0x2, 0x69, 0x2, 0x69, 0x0, 0x1, 0x2, 0x70, 0x2, 0x74, 0x0, 0x1, 0x2, 0x77, 0x2, 0x77, 0x0, 0x1, 0x2, 0x7B, 0x2, 0x7B, 0x0, 0x1, 0x2, 0x7D, 0x2, 0x7F, 0x0, 0x1, 0x2, 0x81, 0x2, 0x91, 0x0, 0x1, 0x2, 0x93, 0x2, 0x93, 0x0, 0x1, 0x2, 0x95, 0x2, 0x97, 0x0, 0x1, 0x2, 0x99, 0x2, 0x99, 0x0, 0x1, 0x2, 0x9E, 0x2, 0x9F, 0x0, 0x1, 0x2, 0xAC, 0x2, 0xB0, 0x0, 0x1, 0x2, 0xB2, 0x2, 0xB2, 0x0, 0x1, 0x2, 0xB6, 0x2, 0xB8, 0x0, 0x1, 0x2, 0xBA, 0x2, 0xBB, 0x0, 0x3, 0x2, 0xC1, 0x2, 0xC2, 0x0, 0x1, 0x2, 0xCA, 0x2, 0xCB, 0x0, 0x1, 0x2, 0xCD, 0x2, 0xCD, 0x0, 0x1, 0x2, 0xD2, 0x2, 0xD3, 0x0, 0x1, 0x2, 0xD8, 0x2, 0xDB, 0x0, 0x1, 0x2, 0xDE, 0x2, 0xDF, 0x0, 0x1, 0x2, 0xE2, 0x2, 0xE4, 0x0, 0x1, 0x2, 0xE8, 0x2, 0xE8, 0x0, 0x1, 0x2, 0xEB, 0x2, 0xEF, 0x0, 0x1, 0x2, 0xF4, 0x2, 0xF5, 0x0, 0x1, 0x2, 0xF9, 0x2, 0xF9, 0x0, 0x1, 0x2, 0xFB, 0x2, 0xFB, 0x0, 0x1, 0x2, 0xFF, 0x2, 0xFF, 0x0, 0x1, 0x3, 0x1, 0x3, 0x3, 0x0, 0x1, 0x3, 0x5, 0x3, 0x5, 0x0, 0x1, 0x3, 0x7, 0x3, 0x7, 0x0, 0x1, 0x3, 0x15, 0x3, 0x17, 0x0, 0x1, 0x3, 0x1F, 0x3, 0x1F, 0x0, 0x1, 0x3, 0x20, 0x3, 0x28, 0x0, 0x3, 0x3, 0x29, 0x3, 0x2A, 0x0, 0x4, 0x3, 0x2B, 0x3, 0x2C, 0x0, 0x3, 0x3, 0x2D, 0x3, 0x2D, 0x0, 0x4, 0x3, 0x2F, 0x3, 0x3F, 0x0, 0x1, 0x3, 0x43, 0x3, 0x44, 0x0, 0x1, 0x3, 0x47, 0x3, 0x4B, 0x0, 0x1, 0x3, 0x4F, 0x3, 0x5A, 0x0, 0x1, 0x3, 0x9A, 0x3, 0xA6, 0x0, 0x1, 0x3, 0xA8, 0x3, 0xC9, 0x0, 0x1, 0x3, 0xEF, 0x4, 0x24, 0x0, 0x3, 0x4, 0x26, 0x4, 0x28, 0x0, 0x3, 0x4, 0x2B, 0x4, 0x2E, 0x0, 0x1, 0x4, 0x2F, 0x4, 0x2F, 0x0, 0x2, 0x5, 0x5D, 0x5, 0x5E, 0x0, 0x1, 0x6, 0xC7, 0x6, 0xC8, 0x0, 0x1, 0x7, 0x25, 0x7, 0x25, 0x0, 0x3, 0x7, 0x26, 0x7, 0x2C, 0x0, 0x2, 0x7, 0x40, 0x7, 0x40, 0x0, 0x2, 0x7, 0x4E, 0x7, 0x62, 0x0, 0x1, 0x7, 0x66, 0x7, 0x66, 0x0, 0x1, 0x7, 0x6F, 0x7, 0x6F, 0x0, 0x1, 0x7, 0x71, 0x7, 0x71, 0x0, 0x1, 0x7, 0x78, 0x7, 0x7A, 0x0, 0x1, 0x7, 0x7C, 0x7, 0x7D, 0x0, 0x1, 0x7, 0x7F, 0x7, 0x7F, 0x0, 0x1, 0x7, 0x83, 0x7, 0x83, 0x0, 0x1, 0x7, 0x85, 0x7, 0x87, 0x0, 0x1, 0x7, 0x8D, 0x7, 0x8D, 0x0, 0x1, 0x7, 0x92, 0x7, 0x94, 0x0, 0x1, 0x7, 0x96, 0x7, 0x96, 0x0, 0x1, 0x7, 0xA6, 0x7, 0xA6, 0x0, 0x1, 0x7, 0xA9, 0x7, 0xA9, 0x0, 0x1, 0x7, 0xAB, 0x7, 0xAB, 0x0, 0x1, 0x7, 0xAE, 0x7, 0xB1, 0x0, 0x1, 0x7, 0xDE, 0x7, 0xE2, 0x0, 0x1, 0x7, 0xEE, 0x7, 0xF3, 0x0, 0x1, 0x7, 0xF5, 0x7, 0xF5, 0x0, 0x1, 0x7, 0xF7, 0x7, 0xF8, 0x0, 0x1, 0x7, 0xFA, 0x7, 0xFA, 0x0, 0x1, 0x7, 0xFF, 0x8, 0x89, 0x0, 0x2, 0x8, 0x8A, 0x8, 0x95, 0x0, 0x3, 0x8, 0x96, 0x8, 0x97, 0x0, 0x2, 0x8, 0x98, 0x8, 0x98, 0x0, 0x3, 0x8, 0x9A, 0x8, 0x9F, 0x0, 0x3, 0x8, 0xC8, 0x9, 0x30, 0x0, 0x1, 0x9, 0x33, 0x9, 0xBD, 0x0, 0x1, 0x9, 0xBF, 0x9, 0xDA, 0x0, 0x1, 0x9, 0xDC, 0x9, 0xF3, 0x0, 0x1, 0x9, 0xF5, 0xA, 0x1, 0x0, 0x1, 0xA, 0x3, 0xA, 0xC, 0x0, 0x1, 0xA, 0xE, 0xA, 0x29, 0x0, 0x1, 0xA, 0x2D, 0xA, 0x2D, 0x0, 0x1, 0xA, 0x2F, 0xA, 0x36, 0x0, 0x1, 0xA, 0x38, 0xA, 0x3A, 0x0, 0x1, 0xA, 0x3D, 0xA, 0x41, 0x0, 0x1, 0xA, 0x43, 0xA, 0xCC, 0x0, 0x1, 0xA, 0xCF, 0xA, 0xCF, 0x0, 0x1, 0xA, 0xD2, 0xA, 0xD3, 0x0, 0x1, 0xA, 0xD5, 0xA, 0xD6, 0x0, 0x1, 0xA, 0xD8, 0xA, 0xDB, 0x0, 0x1, 0xA, 0xE6, 0xA, 0xE7, 0x0, 0x1, 0xA, 0xEE, 0xB, 0xC, 0x0, 0x1, 0xB, 0x10, 0xB, 0x44, 0x0, 0x1, 0xB, 0x47, 0xC, 0x33, 0x0, 0x1, 0xC, 0x3C, 0xC, 0x71, 0x0, 0x1, 0xC, 0x7A, 0xC, 0xAD, 0x0, 0x1, 0xC, 0xB7, 0xC, 0xBC, 0x0, 0x1, 0xC, 0xBE, 0xC, 0xDD, 0x0, 0x1, 0xC, 0xDF, 0xC, 0xE6, 0x0, 0x1, 0xC, 0xE8, 0xC, 0xE9, 0x0, 0x1, 0xC, 0xEB, 0xC, 0xEB, 0x0, 0x1, 0xC, 0xF4, 0xD, 0x1E, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x36, 0x0, 0x7C, 0x0, 0x4, 0x44, 0x46, 0x4C, 0x54, 0x0, 0x1A, 0x63, 0x79, 0x72, 0x6C, 0x0, 0x1A, 0x67, 0x72, 0x65, 0x6B, 0x0, 0x1A, 0x6C, 0x61, 0x74, 0x6E, 0x0, 0x1A, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x63, 0x70, 0x73, 0x70, 0x0, 0x1A, 0x6B, 0x65, 0x72, 0x6E, 0x0, 0x20, 0x6D, 0x61, 0x72, 0x6B, 0x0, 0x26, 0x6D, 0x6B, 0x6D, 0x6B, 0x0, 0x3E, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0, 0x9, 0x0, 0xA, 0x0, 0xB, 0x0, 0x0, 0x0, 0x2, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0x1E, 0x2, 0x34, 0x96, 0x86, 0xB9, 0x78, 0xCC, 0xB6, 0xD8, 0x44, 0xE4, 0x20, 0xE4, 0xFA, 0xFB, 0xA6, 0xFB, 0xB6, 0xFC, 0x2, 0xFC, 0x12, 0xFC, 0x22, 0xFC, 0x32, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xA, 0x0, 0x5, 0x0, 0x24, 0x0, 0x48, 0x0, 0x1, 0x1, 0x0, 0x0, 0x9, 0x0, 0xB, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1A, 0x0, 0x1B, 0x0, 0x1C, 0x0, 0x1D, 0x0, 0x1E, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2A, 0x0, 0x2B, 0x0, 0x2C, 0x0, 0x2D, 0x0, 0x2E, 0x0, 0x2F, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x3A, 0x0, 0x3B, 0x0, 0x3C, 0x0, 0x3D, 0x0, 0x3E, 0x0, 0x3F, 0x0, 0x66, 0x0, 0x68, 0x0, 0x82, 0x0, 0x84, 0x0, 0x85, 0x0, 0x8D, 0x0, 0x90, 0x0, 0x92, 0x0, 0x94, 0x2, 0x30, 0x2, 0x31, 0x2, 0x32, 0x2, 0x33, 0x2, 0x34, 0x2, 0x35, 0x2, 0x36, 0x2, 0x37, 0x2, 0x38, 0x2, 0x39, 0x2, 0x68, 0x2, 0x69, 0x2, 0x6A, 0x2, 0x6B, 0x2, 0x6C, 0x2, 0x6D, 0x2, 0x6E, 0x2, 0x6F, 0x2, 0x70, 0x2, 0x71, 0x2, 0x72, 0x2, 0x73, 0x2, 0x74, 0x2, 0x75, 0x2, 0x76, 0x2, 0x77, 0x2, 0x78, 0x2, 0x79, 0x2, 0x7A, 0x2, 0x7B, 0x2, 0x7C, 0x2, 0x7D, 0x2, 0x7E, 0x2, 0x7F, 0x2, 0xC6, 0x2, 0xCA, 0x2, 0xCC, 0x2, 0xCE, 0x2, 0xD0, 0x2, 0xD2, 0x2, 0xD8, 0x2, 0xDA, 0x2, 0xDC, 0x2, 0xE0, 0x2, 0xE2, 0x2, 0xE3, 0x2, 0xEF, 0x2, 0xF0, 0x4, 0x32, 0x4, 0xC8, 0x4, 0xCF, 0x4, 0xD7, 0x4, 0xDB, 0x4, 0xE0, 0x4, 0xED, 0x8, 0xC8, 0x8, 0xC9, 0x8, 0xCB, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x8, 0xD3, 0x8, 0xD4, 0x8, 0xD5, 0x8, 0xD6, 0x8, 0xD7, 0x8, 0xD8, 0x8, 0xD9, 0x8, 0xDA, 0x8, 0xDB, 0x8, 0xDC, 0x8, 0xDD, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0x8, 0xE3, 0x8, 0xE4, 0x8, 0xE5, 0x8, 0xE6, 0x8, 0xE7, 0x9, 0x4, 0x9, 0x6, 0x9, 0x8, 0x9, 0xA, 0x9, 0xC, 0x9, 0xE, 0x9, 0x10, 0x9, 0x12, 0x9, 0x14, 0x9, 0x16, 0x9, 0x18, 0x9, 0x1A, 0x9, 0x1C, 0x9, 0x1E, 0x9, 0x20, 0x9, 0x22, 0x9, 0x24, 0x9, 0x26, 0x9, 0x28, 0x9, 0x2A, 0x9, 0x2C, 0x9, 0x2E, 0x9, 0x30, 0x9, 0x31, 0x9, 0x33, 0x9, 0x35, 0x9, 0x37, 0x9, 0x39, 0x9, 0x3B, 0x9, 0x3D, 0x9, 0x3F, 0x9, 0x41, 0x9, 0x43, 0x9, 0x46, 0x9, 0x48, 0x9, 0x4A, 0x9, 0x4C, 0x9, 0x4E, 0x9, 0x50, 0x9, 0x52, 0x9, 0x54, 0x9, 0x56, 0x9, 0x58, 0x9, 0x5A, 0x9, 0x5C, 0x9, 0x5E, 0x9, 0x60, 0x9, 0x62, 0x9, 0x64, 0x9, 0x66, 0x9, 0x68, 0x9, 0x6A, 0x9, 0x6C, 0x9, 0x6E, 0x9, 0x70, 0x9, 0x72, 0x9, 0x73, 0x9, 0x75, 0x9, 0x77, 0x9, 0x79, 0x9, 0x7B, 0x9, 0xD5, 0x9, 0xD6, 0x9, 0xD7, 0x9, 0xD8, 0x9, 0xD9, 0x9, 0xDA, 0x9, 0xDB, 0x9, 0xDD, 0x9, 0xDE, 0x9, 0xDF, 0x9, 0xE0, 0x9, 0xE1, 0x9, 0xE2, 0x9, 0xE3, 0x9, 0xE4, 0x9, 0xE5, 0x9, 0xE6, 0x9, 0xE7, 0x9, 0xE8, 0x9, 0xE9, 0x9, 0xEA, 0x9, 0xEB, 0x9, 0xEC, 0x9, 0xFC, 0x9, 0xFD, 0x9, 0xFE, 0x9, 0xFF, 0xA, 0x0, 0xA, 0x1, 0xA, 0x2, 0xA, 0x3, 0xA, 0x4, 0xA, 0x5, 0xA, 0x6, 0xA, 0x7, 0xA, 0x8, 0xA, 0x9, 0xA, 0xA, 0xA, 0xB, 0xA, 0xC, 0xA, 0xD, 0xA, 0xE, 0xA, 0xF, 0xA, 0x10, 0xA, 0x11, 0xA, 0x22, 0xA, 0x24, 0xA, 0x26, 0xA, 0x28, 0xA, 0x3D, 0xA, 0x3F, 0xA, 0x41, 0xA, 0x56, 0xA, 0x5C, 0xA, 0x63, 0xA, 0xCD, 0xA, 0xD2, 0xA, 0xD6, 0xB, 0x9, 0xB, 0x3F, 0xC, 0xF4, 0xC, 0xF6, 0xC, 0xF8, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0xA, 0x65, 0x34, 0x0, 0x1, 0x6, 0x54, 0x0, 0x4, 0x0, 0x0, 0x3, 0x25, 0xC, 0xA2, 0x5F, 0xAE, 0x5F, 0xAE, 0xC, 0xEC, 0xD, 0x6E, 0x63, 0x96, 0x61, 0x1E, 0x61, 0x28, 0x64, 0xE8, 0x64, 0x2, 0xD, 0x74, 0x64, 0x10, 0x64, 0x10, 0x61, 0x44, 0x61, 0x92, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x64, 0xC6, 0x13, 0x7E, 0x14, 0x88, 0x61, 0xBE, 0x62, 0x94, 0x62, 0xB2, 0x62, 0xD0, 0x64, 0x4C, 0x63, 0x34, 0x15, 0xEE, 0x60, 0xFC, 0x64, 0x32, 0x61, 0x3A, 0x16, 0x5C, 0x18, 0x66, 0x18, 0x70, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0x6C, 0x64, 0x32, 0x61, 0xAC, 0x1B, 0x1E, 0x63, 0x4E, 0x1C, 0x0, 0x63, 0x2E, 0x63, 0x4E, 0x1C, 0x1A, 0x64, 0x32, 0x64, 0x32, 0x64, 0x32, 0x64, 0x32, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x61, 0x44, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0xC6, 0x61, 0xBE, 0x63, 0x34, 0x64, 0x32, 0x64, 0x32, 0x61, 0x92, 0x61, 0x1E, 0x63, 0x96, 0x61, 0xAC, 0x64, 0x4C, 0x1C, 0x88, 0x64, 0x10, 0x64, 0x32, 0x64, 0x32, 0x60, 0x36, 0x63, 0x96, 0x64, 0xE8, 0x63, 0x96, 0x1D, 0x1A, 0x1E, 0xA4, 0x20, 0x32, 0x21, 0x68, 0x22, 0x46, 0x63, 0x4E, 0x22, 0x4C, 0x22, 0x56, 0x63, 0xF8, 0x27, 0x50, 0x2A, 0x8A, 0x2B, 0xF0, 0x2D, 0xE2, 0x2D, 0xFC, 0x2E, 0x2, 0x2E, 0x8, 0x32, 0x66, 0x32, 0x6C, 0x32, 0xCA, 0x33, 0x24, 0x61, 0x44, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0x32, 0x64, 0x32, 0x64, 0x32, 0x64, 0xE8, 0x61, 0x28, 0x64, 0xE8, 0x33, 0xE2, 0x35, 0xC0, 0x38, 0x1E, 0x3A, 0x88, 0x64, 0x10, 0x3C, 0x52, 0x3E, 0x90, 0x62, 0xD0, 0x42, 0x2, 0x64, 0x10, 0x64, 0x10, 0x5F, 0xB8, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x43, 0x18, 0x46, 0x4A, 0x64, 0x10, 0x60, 0xC, 0x47, 0x68, 0x48, 0x72, 0x49, 0x38, 0x49, 0xC6, 0x4B, 0x4, 0x60, 0x2, 0x4C, 0x9E, 0x63, 0x2E, 0x4D, 0xC8, 0x4D, 0xF2, 0x51, 0x1C, 0x64, 0x32, 0x56, 0x4A, 0x56, 0x94, 0x58, 0xB2, 0x5E, 0xD4, 0x64, 0x32, 0x59, 0x50, 0x5A, 0xF6, 0x5B, 0x20, 0x5B, 0x82, 0x5E, 0xD4, 0x63, 0x96, 0x63, 0x6C, 0x62, 0x94, 0x63, 0x4E, 0x5B, 0xBC, 0x64, 0x32, 0x60, 0x36, 0x60, 0x2, 0x62, 0xD0, 0x63, 0x2E, 0x61, 0x44, 0x61, 0x44, 0x61, 0x44, 0x64, 0x10, 0x62, 0xD0, 0x63, 0x2E, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x60, 0x2, 0x62, 0xD0, 0x63, 0x2E, 0x62, 0xD0, 0x63, 0x2E, 0x62, 0xD0, 0x63, 0x2E, 0x64, 0x2, 0x61, 0x3A, 0x61, 0x44, 0x64, 0x10, 0x64, 0x10, 0x61, 0x44, 0x64, 0x10, 0x64, 0x10, 0x61, 0x92, 0x5F, 0xAE, 0x5B, 0xE6, 0x5F, 0xAE, 0x5F, 0xAE, 0x5F, 0xAE, 0x64, 0xC6, 0x60, 0xFC, 0x64, 0x10, 0x63, 0xF8, 0x61, 0x44, 0x63, 0x34, 0x64, 0x10, 0x64, 0xE8, 0x63, 0x4E, 0x63, 0x6C, 0x63, 0x34, 0x63, 0x34, 0x64, 0xE8, 0x60, 0xC, 0x5E, 0xD4, 0x60, 0xC, 0x5E, 0xD4, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x64, 0x10, 0x61, 0xBE, 0x60, 0x2, 0x61, 0xBE, 0x60, 0x2, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x61, 0xBE, 0x60, 0x2, 0x61, 0xBE, 0x60, 0x2, 0x63, 0xF8, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0xF8, 0x63, 0x96, 0x64, 0xE8, 0x62, 0x94, 0x63, 0x4E, 0x62, 0x94, 0x63, 0x4E, 0x63, 0x4E, 0x64, 0xE8, 0x61, 0x44, 0x61, 0x44, 0x61, 0x44, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xC6, 0x64, 0x32, 0x64, 0xC6, 0x64, 0x32, 0x64, 0xC6, 0x64, 0x32, 0x62, 0x94, 0x63, 0x4E, 0x64, 0x32, 0x64, 0x32, 0x63, 0xF8, 0x64, 0x10, 0x61, 0x28, 0x61, 0x1E, 0x64, 0x32, 0x64, 0x10, 0x65, 0x24, 0x5E, 0xFA, 0x5F, 0x48, 0x65, 0x1E, 0x5F, 0xA4, 0x65, 0x6, 0x65, 0xC, 0x65, 0x1E, 0x65, 0xC, 0x65, 0x6, 0x65, 0x6, 0x65, 0x6, 0x65, 0x6, 0x5F, 0x96, 0x65, 0xC, 0x61, 0x28, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x61, 0xBE, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x61, 0x28, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0x4C, 0x60, 0xFC, 0x60, 0xFC, 0x60, 0xFC, 0x60, 0xFC, 0x60, 0xFC, 0x60, 0xFC, 0x60, 0xFC, 0x61, 0x3A, 0x61, 0x3A, 0x61, 0x3A, 0x61, 0x3A, 0x63, 0xF8, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x4E, 0x63, 0x4E, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x61, 0x28, 0x61, 0x28, 0x61, 0x28, 0x61, 0x28, 0x64, 0xE8, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x61, 0x44, 0x61, 0x92, 0x61, 0x92, 0x61, 0x92, 0x61, 0x92, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x63, 0xF8, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x61, 0xAC, 0x61, 0xAC, 0x61, 0xAC, 0x61, 0xBE, 0x61, 0xBE, 0x61, 0xBE, 0x62, 0xB2, 0x64, 0x4C, 0x63, 0x4E, 0x64, 0x4C, 0x63, 0x34, 0x63, 0x34, 0x63, 0x34, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x24, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0xC, 0x65, 0xC, 0x65, 0xC, 0x65, 0x1E, 0x65, 0x6, 0x5F, 0xA4, 0x5F, 0xA4, 0x5F, 0xA4, 0x5F, 0xA4, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x1E, 0x65, 0x24, 0x63, 0x96, 0x64, 0x2, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x64, 0x4C, 0x63, 0x96, 0x61, 0x1E, 0x64, 0x2, 0x63, 0x34, 0x64, 0x10, 0x64, 0x10, 0x61, 0x44, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x64, 0xC6, 0x61, 0xBE, 0x64, 0x4C, 0x62, 0xD0, 0x64, 0x10, 0x64, 0x4C, 0x63, 0xF8, 0x63, 0x6C, 0x63, 0x4E, 0x63, 0x6C, 0x64, 0x2, 0x60, 0x36, 0x64, 0x10, 0x64, 0x10, 0x61, 0x44, 0x61, 0x44, 0x5F, 0xB8, 0x63, 0x96, 0x61, 0x1E, 0x60, 0x36, 0x64, 0x2, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x64, 0xC6, 0x61, 0x28, 0x61, 0xBE, 0x62, 0xD0, 0x60, 0xFC, 0x61, 0x3A, 0x63, 0x6C, 0x64, 0x32, 0x63, 0x4E, 0x63, 0x2E, 0x61, 0x3A, 0x60, 0x2, 0x63, 0x4E, 0x62, 0xB2, 0x62, 0xB2, 0x62, 0xB2, 0x64, 0x4C, 0x63, 0x4E, 0x5F, 0xAE, 0x5F, 0xAE, 0x5F, 0xAE, 0x64, 0x10, 0x63, 0xF8, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x2, 0x61, 0x3A, 0x62, 0x94, 0x63, 0x4E, 0x61, 0x28, 0x64, 0x4C, 0x63, 0x4E, 0x64, 0x10, 0x62, 0xD0, 0x63, 0x2E, 0x64, 0x10, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x2, 0x61, 0x3A, 0x61, 0x3A, 0x61, 0x3A, 0x62, 0xD0, 0x63, 0x2E, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0x32, 0x5F, 0xB8, 0x63, 0x4E, 0x5F, 0xB8, 0x63, 0x4E, 0x5F, 0xB8, 0x63, 0x4E, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x63, 0x6C, 0x64, 0x4C, 0x63, 0x4E, 0x64, 0x4C, 0x63, 0x4E, 0x64, 0x4C, 0x63, 0x4E, 0x61, 0xBE, 0x60, 0x36, 0x60, 0x2, 0x63, 0xF8, 0x60, 0xC, 0x60, 0x36, 0x61, 0x44, 0x64, 0x4C, 0x64, 0x10, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x10, 0x64, 0xE8, 0x63, 0x6C, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x61, 0x3A, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x63, 0x34, 0x64, 0x10, 0x63, 0xF8, 0x63, 0x96, 0x60, 0xFC, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x2, 0x64, 0x2, 0x64, 0x10, 0x64, 0x10, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x61, 0xAC, 0x61, 0xAC, 0x64, 0x10, 0x63, 0x96, 0x60, 0xFC, 0x64, 0x2, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x63, 0x4E, 0x63, 0x6C, 0x64, 0x32, 0x61, 0x28, 0x64, 0x10, 0x62, 0xB2, 0x61, 0x1E, 0x64, 0x32, 0x61, 0x1E, 0x64, 0x32, 0x61, 0x1E, 0x64, 0x32, 0x61, 0x28, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x2, 0x61, 0x3A, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x61, 0x44, 0x61, 0x44, 0x61, 0x44, 0x61, 0x92, 0x61, 0x92, 0x61, 0x92, 0x61, 0x92, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0x10, 0x63, 0xF8, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xE8, 0x63, 0x6C, 0x64, 0xC6, 0x64, 0x32, 0x64, 0xC6, 0x64, 0x32, 0x61, 0xAC, 0x61, 0xAC, 0x61, 0xAC, 0x61, 0xAC, 0x61, 0xBE, 0x61, 0xBE, 0x61, 0xBE, 0x61, 0xBE, 0x62, 0x94, 0x63, 0x4E, 0x62, 0x94, 0x63, 0x4E, 0x62, 0xB2, 0x62, 0xB2, 0x62, 0xD0, 0x63, 0x2E, 0x62, 0xD0, 0x63, 0x2E, 0x64, 0x4C, 0x63, 0x4E, 0x63, 0x34, 0x63, 0x34, 0x63, 0x34, 0x63, 0x4E, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x64, 0x2, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x6C, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x64, 0xE8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0x6C, 0x63, 0x6C, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0x96, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x63, 0xF8, 0x64, 0x2, 0x64, 0x2, 0x64, 0x10, 0x64, 0x10, 0x64, 0x10, 0x64, 0x32, 0x64, 0x32, 0x64, 0x4C, 0x64, 0x4C, 0x64, 0x4C, 0x64, 0x4C, 0x64, 0xC6, 0x64, 0xE8, 0x64, 0xE8, 0x65, 0xC, 0x65, 0x1E, 0x65, 0xC, 0x65, 0x6, 0x65, 0x24, 0x65, 0x6, 0x65, 0xC, 0x65, 0x1E, 0x65, 0x24, 0x0, 0x1, 0x3, 0x25, 0x0, 0x5, 0x0, 0x7, 0x0, 0xC, 0x0, 0xD, 0x0, 0x14, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2A, 0x0, 0x2B, 0x0, 0x2D, 0x0, 0x2E, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x39, 0x0, 0x3B, 0x0, 0x3C, 0x0, 0x3D, 0x0, 0x3E, 0x0, 0x3F, 0x0, 0x40, 0x0, 0x46, 0x0, 0x47, 0x0, 0x4A, 0x0, 0x4B, 0x0, 0x4D, 0x0, 0x50, 0x0, 0x52, 0x0, 0x53, 0x0, 0x54, 0x0, 0x55, 0x0, 0x57, 0x0, 0x59, 0x0, 0x5B, 0x0, 0x5C, 0x0, 0x5D, 0x0, 0x5E, 0x0, 0x60, 0x0, 0x8B, 0x0, 0x97, 0x0, 0x9A, 0x0, 0x9C, 0x0, 0x9D, 0x0, 0xA0, 0x0, 0xA1, 0x0, 0xA2, 0x0, 0xA5, 0x0, 0xA6, 0x0, 0xAE, 0x0, 0xB2, 0x0, 0xB3, 0x0, 0xB6, 0x0, 0xB8, 0x0, 0xC2, 0x0, 0xD8, 0x0, 0xED, 0x0, 0xEE, 0x0, 0xF2, 0x0, 0xF8, 0x0, 0xFA, 0x1, 0x2, 0x1, 0x3, 0x1, 0xE, 0x2, 0x27, 0x2, 0x29, 0x2, 0x2B, 0x2, 0x30, 0x2, 0x31, 0x2, 0x32, 0x2, 0x33, 0x2, 0x34, 0x2, 0x36, 0x2, 0x37, 0x2, 0x38, 0x2, 0x3A, 0x2, 0x3C, 0x2, 0x3D, 0x2, 0x3F, 0x2, 0x40, 0x2, 0x42, 0x2, 0x43, 0x2, 0x44, 0x2, 0x46, 0x2, 0x47, 0x2, 0x48, 0x2, 0x49, 0x2, 0x4A, 0x2, 0x4B, 0x2, 0x4C, 0x2, 0x4D, 0x2, 0x4E, 0x2, 0x55, 0x2, 0x56, 0x2, 0x60, 0x2, 0x62, 0x2, 0x64, 0x2, 0x65, 0x2, 0x66, 0x2, 0x67, 0x2, 0x68, 0x2, 0x6A, 0x2, 0x6B, 0x2, 0x6C, 0x2, 0x6D, 0x2, 0x6E, 0x2, 0x6F, 0x2, 0x70, 0x2, 0x71, 0x2, 0x72, 0x2, 0x73, 0x2, 0x74, 0x2, 0x76, 0x2, 0x77, 0x2, 0x78, 0x2, 0x79, 0x2, 0x7A, 0x2, 0x7B, 0x2, 0x7C, 0x2, 0x7D, 0x2, 0x7E, 0x2, 0x7F, 0x2, 0x80, 0x2, 0x81, 0x2, 0x82, 0x2, 0x83, 0x2, 0x84, 0x2, 0x85, 0x2, 0x87, 0x2, 0x8C, 0x2, 0x8D, 0x2, 0x8E, 0x2, 0x91, 0x2, 0x92, 0x2, 0x94, 0x2, 0x95, 0x2, 0x96, 0x2, 0x99, 0x2, 0x9A, 0x2, 0x9B, 0x2, 0xA0, 0x2, 0xA3, 0x2, 0xAE, 0x2, 0xAF, 0x2, 0xB0, 0x2, 0xB8, 0x2, 0xC5, 0x2, 0xC6, 0x2, 0xC7, 0x2, 0xCA, 0x2, 0xCB, 0x2, 0xCC, 0x2, 0xCE, 0x2, 0xD0, 0x2, 0xD2, 0x2, 0xDA, 0x2, 0xDB, 0x2, 0xEB, 0x2, 0xED, 0x2, 0xEF, 0x2, 0xF3, 0x2, 0xF4, 0x2, 0xF5, 0x3, 0x8, 0x3, 0x9, 0x3, 0xA, 0x3, 0xB, 0x3, 0xC, 0x3, 0xD, 0x3, 0xE, 0x3, 0x14, 0x3, 0x18, 0x3, 0x1A, 0x4, 0x2B, 0x4, 0x2D, 0x4, 0x34, 0x4, 0x62, 0x4, 0x63, 0x4, 0x65, 0x4, 0x66, 0x4, 0x67, 0x5, 0x59, 0x5, 0x5B, 0x5, 0x5D, 0x5, 0x5E, 0x5, 0x5F, 0x5, 0x61, 0x5, 0x64, 0x5, 0x66, 0x5, 0x6A, 0x5, 0x70, 0x5, 0xD9, 0x5, 0xDB, 0x5, 0xE5, 0x5, 0xE7, 0x5, 0xE8, 0x5, 0xEB, 0x5, 0xEC, 0x5, 0xEF, 0x5, 0xF0, 0x5, 0xF1, 0x5, 0xF9, 0x5, 0xFD, 0x5, 0xFE, 0x5, 0xFF, 0x6, 0x0, 0x6, 0x1, 0x6, 0x2, 0x6, 0x3, 0x6, 0x4, 0x6, 0x5, 0x6, 0x6, 0x6, 0x25, 0x6, 0x26, 0x6, 0x29, 0x6, 0x2A, 0x6, 0x2E, 0x6, 0x31, 0x6, 0x32, 0x6, 0x33, 0x6, 0x5F, 0x6, 0x6A, 0x6, 0x6C, 0x6, 0x70, 0x6, 0x71, 0x6, 0x72, 0x6, 0x73, 0x6, 0x75, 0x6, 0x76, 0x6, 0x78, 0x6, 0x7A, 0x6, 0x7C, 0x6, 0x86, 0x6, 0x87, 0x6, 0x88, 0x6, 0x89, 0x6, 0x8A, 0x6, 0x8B, 0x6, 0x8C, 0x6, 0x8D, 0x6, 0x96, 0x6, 0x97, 0x6, 0x9D, 0x6, 0x9F, 0x6, 0xBB, 0x6, 0xC7, 0x6, 0xC9, 0x6, 0xCD, 0x6, 0xCE, 0x6, 0xE1, 0x7, 0x54, 0x7, 0x56, 0x7, 0x57, 0x7, 0x59, 0x7, 0x5C, 0x7, 0x5D, 0x7, 0x67, 0x7, 0x68, 0x7, 0x69, 0x7, 0x7B, 0x7, 0x8A, 0x7, 0x8B, 0x7, 0x8C, 0x7, 0xAE, 0x7, 0xB1, 0x7, 0xCF, 0x7, 0xD1, 0x7, 0xD2, 0x8, 0xC8, 0x8, 0xC9, 0x8, 0xCB, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x8, 0xD3, 0x8, 0xD4, 0x8, 0xD5, 0x8, 0xD6, 0x8, 0xD7, 0x8, 0xD8, 0x8, 0xD9, 0x8, 0xDA, 0x8, 0xDB, 0x8, 0xDC, 0x8, 0xDD, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0x8, 0xE7, 0x8, 0xE8, 0x8, 0xE9, 0x8, 0xEA, 0x8, 0xEB, 0x8, 0xEC, 0x8, 0xED, 0x8, 0xEE, 0x8, 0xF0, 0x8, 0xF1, 0x8, 0xF2, 0x8, 0xF3, 0x8, 0xF8, 0x8, 0xF9, 0x8, 0xFA, 0x8, 0xFB, 0x8, 0xFC, 0x8, 0xFD, 0x9, 0x2, 0x9, 0x3, 0x9, 0x4, 0x9, 0x5, 0x9, 0x6, 0x9, 0x7, 0x9, 0x8, 0x9, 0x9, 0x9, 0xA, 0x9, 0xC, 0x9, 0xE, 0x9, 0x10, 0x9, 0x12, 0x9, 0x14, 0x9, 0x15, 0x9, 0x16, 0x9, 0x17, 0x9, 0x18, 0x9, 0x19, 0x9, 0x1A, 0x9, 0x1B, 0x9, 0x1C, 0x9, 0x1D, 0x9, 0x26, 0x9, 0x27, 0x9, 0x28, 0x9, 0x2A, 0x9, 0x2C, 0x9, 0x2E, 0x9, 0x30, 0x9, 0x35, 0x9, 0x37, 0x9, 0x39, 0x9, 0x3B, 0x9, 0x3D, 0x9, 0x3F, 0x9, 0x40, 0x9, 0x41, 0x9, 0x42, 0x9, 0x43, 0x9, 0x44, 0x9, 0x45, 0x9, 0x46, 0x9, 0x47, 0x9, 0x48, 0x9, 0x49, 0x9, 0x4A, 0x9, 0x4B, 0x9, 0x4D, 0x9, 0x4F, 0x9, 0x51, 0x9, 0x5C, 0x9, 0x5E, 0x9, 0x60, 0x9, 0x6E, 0x9, 0x70, 0x9, 0x71, 0x9, 0x72, 0x9, 0x73, 0x9, 0x75, 0x9, 0x77, 0x9, 0x7D, 0x9, 0x7E, 0x9, 0x7F, 0x9, 0x80, 0x9, 0x81, 0x9, 0x82, 0x9, 0x83, 0x9, 0x84, 0x9, 0x85, 0x9, 0x86, 0x9, 0x91, 0x9, 0x92, 0x9, 0x93, 0x9, 0x94, 0x9, 0x95, 0x9, 0x9B, 0x9, 0x9C, 0x9, 0x9D, 0x9, 0xA2, 0x9, 0xB3, 0x9, 0xB4, 0x9, 0xB5, 0x9, 0xB6, 0x9, 0xB7, 0x9, 0xBB, 0x9, 0xBC, 0x9, 0xBD, 0x9, 0xBE, 0x9, 0xC7, 0x9, 0xD5, 0x9, 0xD6, 0x9, 0xD7, 0x9, 0xD8, 0x9, 0xD9, 0x9, 0xDA, 0x9, 0xDD, 0x9, 0xDE, 0x9, 0xDF, 0x9, 0xE0, 0x9, 0xE1, 0x9, 0xE2, 0x9, 0xE3, 0x9, 0xE4, 0x9, 0xE5, 0x9, 0xE6, 0x9, 0xE7, 0x9, 0xE8, 0x9, 0xE9, 0x9, 0xEA, 0x9, 0xEB, 0x9, 0xEC, 0x9, 0xEF, 0x9, 0xF3, 0x9, 0xF5, 0x9, 0xF9, 0x9, 0xFC, 0x9, 0xFD, 0x9, 0xFF, 0xA, 0x0, 0xA, 0x2, 0xA, 0x3, 0xA, 0x4, 0xA, 0x5, 0xA, 0x6, 0xA, 0x7, 0xA, 0x8, 0xA, 0xA, 0xA, 0xB, 0xA, 0xC, 0xA, 0xE, 0xA, 0xF, 0xA, 0x10, 0xA, 0x11, 0xA, 0x12, 0xA, 0x13, 0xA, 0x15, 0xA, 0x16, 0xA, 0x18, 0xA, 0x19, 0xA, 0x1A, 0xA, 0x1B, 0xA, 0x21, 0xA, 0x22, 0xA, 0x24, 0xA, 0x26, 0xA, 0x28, 0xA, 0x29, 0xA, 0x2A, 0xA, 0x2B, 0xA, 0x2E, 0xA, 0x2F, 0xA, 0x30, 0xA, 0x31, 0xA, 0x32, 0xA, 0x33, 0xA, 0x35, 0xA, 0x39, 0xA, 0x3A, 0xA, 0x3F, 0xA, 0x41, 0xA, 0x42, 0xA, 0x43, 0xA, 0x44, 0xA, 0x45, 0xA, 0x46, 0xA, 0x47, 0xA, 0x48, 0xA, 0x49, 0xA, 0x4A, 0xA, 0x4D, 0xA, 0x4E, 0xA, 0x50, 0xA, 0x51, 0xA, 0x52, 0xA, 0x53, 0xA, 0x5A, 0xA, 0x5B, 0xA, 0x5E, 0xA, 0x60, 0xA, 0x62, 0xA, 0x63, 0xA, 0x64, 0xA, 0x65, 0xA, 0x66, 0xA, 0x67, 0xA, 0x68, 0xA, 0x6E, 0xA, 0x6F, 0xA, 0x70, 0xA, 0x71, 0xA, 0x72, 0xA, 0x73, 0xA, 0x74, 0xA, 0x75, 0xA, 0x76, 0xA, 0x77, 0xA, 0x78, 0xA, 0x79, 0xA, 0x7A, 0xA, 0x7B, 0xA, 0x7C, 0xA, 0x7D, 0xA, 0x7E, 0xA, 0x7F, 0xA, 0x80, 0xA, 0x81, 0xA, 0x82, 0xA, 0x83, 0xA, 0x84, 0xA, 0x85, 0xA, 0x86, 0xA, 0x87, 0xA, 0x88, 0xA, 0x89, 0xA, 0x8A, 0xA, 0x8B, 0xA, 0x8C, 0xA, 0x8D, 0xA, 0x8E, 0xA, 0x8F, 0xA, 0x90, 0xA, 0x91, 0xA, 0x92, 0xA, 0x93, 0xA, 0x94, 0xA, 0x95, 0xA, 0x96, 0xA, 0x98, 0xA, 0x9A, 0xA, 0x9B, 0xA, 0x9C, 0xA, 0x9D, 0xA, 0x9E, 0xA, 0x9F, 0xA, 0xA0, 0xA, 0xA1, 0xA, 0xA2, 0xA, 0xA3, 0xA, 0xA4, 0xA, 0xA5, 0xA, 0xA6, 0xA, 0xA7, 0xA, 0xAF, 0xA, 0xC0, 0xA, 0xC1, 0xA, 0xC2, 0xA, 0xC3, 0xA, 0xC4, 0xA, 0xC5, 0xA, 0xC7, 0xA, 0xCB, 0xA, 0xCC, 0xA, 0xCF, 0xA, 0xD1, 0xA, 0xD2, 0xA, 0xD4, 0xA, 0xD6, 0xA, 0xE6, 0xA, 0xEE, 0xA, 0xEF, 0xA, 0xF0, 0xA, 0xF2, 0xA, 0xF3, 0xA, 0xFF, 0xB, 0x0, 0xB, 0x1, 0xB, 0x2, 0xB, 0x4, 0xB, 0x9, 0xB, 0xA, 0xB, 0xB, 0xB, 0xC, 0xB, 0xD, 0xB, 0x12, 0xB, 0x13, 0xB, 0x14, 0xB, 0x15, 0xB, 0x16, 0xB, 0x17, 0xB, 0x18, 0xB, 0x1A, 0xB, 0x1C, 0xB, 0x1E, 0xB, 0x20, 0xB, 0x21, 0xB, 0x22, 0xB, 0x23, 0xB, 0x25, 0xB, 0x27, 0xB, 0x2C, 0xB, 0x2E, 0xB, 0x2F, 0xB, 0x30, 0xB, 0x32, 0xB, 0x33, 0xB, 0x34, 0xB, 0x35, 0xB, 0x36, 0xB, 0x37, 0xB, 0x38, 0xB, 0x39, 0xB, 0x3B, 0xB, 0x3C, 0xB, 0x46, 0xB, 0x47, 0xB, 0x48, 0xB, 0x4B, 0xB, 0x4D, 0xB, 0x4E, 0xB, 0x4F, 0xB, 0x50, 0xB, 0x51, 0xB, 0x52, 0xB, 0x53, 0xB, 0x55, 0xB, 0x57, 0xB, 0x59, 0xB, 0x5B, 0xB, 0x5D, 0xB, 0x5F, 0xB, 0x60, 0xB, 0x61, 0xB, 0x62, 0xB, 0x63, 0xB, 0x64, 0xB, 0x65, 0xB, 0x66, 0xB, 0x67, 0xB, 0x68, 0xB, 0x6D, 0xB, 0x6E, 0xB, 0x6F, 0xB, 0x70, 0xB, 0x71, 0xB, 0x72, 0xB, 0x73, 0xB, 0x74, 0xB, 0x75, 0xB, 0x77, 0xB, 0x79, 0xB, 0x7B, 0xB, 0x7D, 0xB, 0x7F, 0xB, 0x81, 0xB, 0x83, 0xB, 0x84, 0xB, 0x85, 0xB, 0x86, 0xB, 0x87, 0xB, 0x88, 0xB, 0x89, 0xB, 0x8A, 0xB, 0x8B, 0xB, 0x8C, 0xB, 0x8D, 0xB, 0x8E, 0xB, 0x8F, 0xB, 0x90, 0xB, 0x91, 0xB, 0x92, 0xB, 0x93, 0xB, 0x94, 0xB, 0x95, 0xB, 0x96, 0xB, 0x97, 0xB, 0x98, 0xB, 0x99, 0xB, 0x9A, 0xB, 0x9C, 0xB, 0x9E, 0xB, 0xA0, 0xB, 0xA2, 0xB, 0xAD, 0xB, 0xAF, 0xB, 0xB1, 0xB, 0xB3, 0xB, 0xBF, 0xB, 0xC0, 0xB, 0xC1, 0xB, 0xC2, 0xB, 0xC3, 0xB, 0xC5, 0xB, 0xC7, 0xB, 0xC8, 0xB, 0xC9, 0xB, 0xCA, 0xB, 0xCB, 0xB, 0xCC, 0xB, 0xCD, 0xB, 0xCF, 0xB, 0xD1, 0xB, 0xD6, 0xB, 0xE0, 0xB, 0xE1, 0xB, 0xE2, 0xB, 0xE3, 0xB, 0xE4, 0xB, 0xE5, 0xB, 0xE6, 0xB, 0xE7, 0xB, 0xEE, 0xB, 0xEF, 0xB, 0xF0, 0xB, 0xF1, 0xB, 0xF2, 0xB, 0xF3, 0xB, 0xF4, 0xB, 0xF5, 0xB, 0xF6, 0xB, 0xF7, 0xB, 0xF8, 0xB, 0xF9, 0xB, 0xFA, 0xB, 0xFB, 0xB, 0xFC, 0xB, 0xFD, 0xB, 0xFE, 0xB, 0xFF, 0xC, 0x0, 0xC, 0x1, 0xC, 0x2, 0xC, 0x3, 0xC, 0x14, 0xC, 0x15, 0xC, 0x16, 0xC, 0x17, 0xC, 0x18, 0xC, 0x19, 0xC, 0x1A, 0xC, 0x1B, 0xC, 0x1C, 0xC, 0x1D, 0xC, 0x1E, 0xC, 0x1F, 0xC, 0x40, 0xC, 0x41, 0xC, 0x44, 0xC, 0x45, 0xC, 0x52, 0xC, 0x53, 0xC, 0x54, 0xC, 0x55, 0xC, 0x56, 0xC, 0x57, 0xC, 0x58, 0xC, 0x59, 0xC, 0x62, 0xC, 0x63, 0xC, 0x64, 0xC, 0x65, 0xC, 0x66, 0xC, 0x67, 0xC, 0x68, 0xC, 0x69, 0xC, 0x81, 0xC, 0x82, 0xC, 0x83, 0xC, 0x84, 0xC, 0x85, 0xC, 0x86, 0xC, 0x87, 0xC, 0x88, 0xC, 0x89, 0xC, 0x8A, 0xC, 0x8B, 0xC, 0x8C, 0xC, 0x8D, 0xC, 0x8E, 0xC, 0x8F, 0xC, 0x9E, 0xC, 0x9F, 0xC, 0xA2, 0xC, 0xA3, 0xC, 0xA4, 0xC, 0xA5, 0xC, 0xA6, 0xC, 0xAC, 0xC, 0xAD, 0xC, 0xB7, 0xC, 0xBB, 0xC, 0xBE, 0xC, 0xC4, 0xC, 0xC9, 0xC, 0xD4, 0xC, 0xD6, 0xC, 0xDD, 0xC, 0xE1, 0x0, 0x12, 0x0, 0x39, 0xFF, 0xCE, 0x0, 0xC2, 0xFF, 0xCE, 0x2, 0x68, 0xFF, 0xCE, 0x2, 0x6C, 0xFF, 0xCE, 0x2, 0xD0, 0xFF, 0xCE, 0x2, 0xDC, 0xFF, 0xCE, 0x6, 0x23, 0xFF, 0xCE, 0x6, 0x25, 0xFF, 0xCE, 0x6, 0x29, 0xFF, 0xCE, 0x9, 0x5C, 0xFF, 0xCE, 0x9, 0x5E, 0xFF, 0xCE, 0x9, 0x60, 0xFF, 0xCE, 0xA, 0x10, 0xFF, 0xCE, 0xA, 0xC7, 0xFF, 0xCE, 0xB, 0xAD, 0xFF, 0xCE, 0xB, 0xAF, 0xFF, 0xCE, 0xB, 0xB1, 0xFF, 0xCE, 0xB, 0xB3, 0xFF, 0xCE, 0x0, 0x20, 0x0, 0x3B, 0x0, 0x16, 0x0, 0x3C, 0x0, 0x20, 0x0, 0x3E, 0x0, 0x18, 0x1, 0x3, 0x0, 0x18, 0x2, 0xAF, 0x0, 0x16, 0x5, 0x68, 0x0, 0x20, 0x6, 0x96, 0x0, 0x16, 0x8, 0xE7, 0x0, 0x18, 0x9, 0x6E, 0x0, 0x20, 0x9, 0x70, 0x0, 0x18, 0x9, 0x72, 0x0, 0x18, 0x9, 0xDA, 0x0, 0x18, 0x9, 0xE9, 0x0, 0x18, 0x9, 0xEC, 0x0, 0x18, 0xA, 0x22, 0x0, 0x20, 0xA, 0x24, 0x0, 0x20, 0xA, 0x26, 0x0, 0x20, 0xA, 0x28, 0x0, 0x18, 0xA, 0x39, 0x0, 0x16, 0xA, 0x41, 0x0, 0x18, 0xA, 0xC0, 0x0, 0x18, 0xA, 0xC2, 0x0, 0x18, 0xA, 0xC4, 0x0, 0x18, 0xA, 0xD6, 0x0, 0x18, 0xB, 0x4B, 0x0, 0x20, 0xB, 0xBF, 0x0, 0x16, 0xB, 0xC1, 0x0, 0x16, 0xB, 0xC3, 0x0, 0x20, 0xB, 0xC5, 0x0, 0x20, 0xB, 0xCB, 0x0, 0x18, 0xC, 0xA2, 0x0, 0x18, 0xC, 0xA3, 0x0, 0x18, 0x0, 0x1, 0x0, 0x14, 0xFF, 0x10, 0x1, 0x82, 0x0, 0x11, 0xFE, 0xD6, 0x0, 0x13, 0xFE, 0xD6, 0x0, 0x26, 0xFF, 0x3E, 0x0, 0x2F, 0xFF, 0x17, 0x0, 0x39, 0x0, 0x14, 0x0, 0x3B, 0x0, 0x4, 0x0, 0x46, 0xFF, 0xCE, 0x0, 0x48, 0xFF, 0xDC, 0x0, 0x49, 0xFF, 0xDC, 0x0, 0x4A, 0xFF, 0xDC, 0x0, 0x4C, 0xFF, 0xDC, 0x0, 0x54, 0xFF, 0xDB, 0x0, 0x56, 0xFF, 0xDC, 0x0, 0x57, 0xFF, 0xE4, 0x0, 0x5A, 0xFF, 0xE8, 0x0, 0x5B, 0xFF, 0xE6, 0x0, 0x5E, 0xFF, 0xE6, 0x0, 0x95, 0xFF, 0xDC, 0x0, 0x9F, 0xFF, 0xDC, 0x0, 0xB5, 0xFF, 0xDC, 0x0, 0xC2, 0x0, 0x14, 0x0, 0xC4, 0xFF, 0xE8, 0x0, 0xDA, 0xFF, 0xDC, 0x0, 0xDC, 0xFF, 0xDC, 0x0, 0xE4, 0xFF, 0xDC, 0x0, 0xFA, 0xFF, 0x3E, 0x1, 0x0, 0xFF, 0xDC, 0x2, 0x2A, 0xFF, 0xDC, 0x2, 0x31, 0xFF, 0x3E, 0x2, 0x33, 0xFF, 0x3E, 0x2, 0x3A, 0xFF, 0xDC, 0x2, 0x3C, 0xFF, 0xE6, 0x2, 0x47, 0xFF, 0xDC, 0x2, 0x48, 0xFF, 0xDC, 0x2, 0x4A, 0xFF, 0xE8, 0x2, 0x56, 0xFF, 0xDB, 0x2, 0x58, 0xFF, 0xDC, 0x2, 0x61, 0xFF, 0xDC, 0x2, 0x68, 0x0, 0x14, 0x2, 0x6C, 0x0, 0x14, 0x2, 0x8D, 0xFF, 0xDC, 0x2, 0x99, 0xFF, 0xDC, 0x2, 0xA3, 0xFF, 0x3E, 0x2, 0xAE, 0xFF, 0xDB, 0x2, 0xAF, 0x0, 0x4, 0x2, 0xB0, 0xFF, 0xE6, 0x2, 0xB4, 0xFF, 0xDC, 0x2, 0xB8, 0xFF, 0xDC, 0x2, 0xD0, 0x0, 0x14, 0x2, 0xD9, 0xFF, 0xDC, 0x2, 0xDC, 0x0, 0x14, 0x2, 0xF7, 0xFF, 0xDC, 0x2, 0xF8, 0xFF, 0xDC, 0x3, 0x2, 0xFF, 0xDC, 0x4, 0x64, 0xFE, 0xD6, 0x4, 0x68, 0xFE, 0xD6, 0x4, 0x6F, 0xFE, 0xD6, 0x4, 0x70, 0xFE, 0xD6, 0x5, 0x5B, 0xFF, 0xCE, 0x5, 0x67, 0xFF, 0xE6, 0x5, 0x6E, 0xFF, 0xDC, 0x5, 0x70, 0xFF, 0xDB, 0x5, 0xEE, 0xFF, 0xDB, 0x5, 0xF1, 0xFF, 0x3E, 0x6, 0x2, 0xFF, 0xDB, 0x6, 0x4, 0xFF, 0xDB, 0x6, 0x6, 0xFF, 0xDB, 0x6, 0x23, 0x0, 0x14, 0x6, 0x25, 0x0, 0x14, 0x6, 0x29, 0x0, 0x14, 0x6, 0x32, 0xFF, 0xDB, 0x6, 0x6A, 0xFF, 0x3E, 0x6, 0x6B, 0xFF, 0xCE, 0x6, 0x6C, 0xFF, 0x3E, 0x6, 0x6D, 0xFF, 0xCE, 0x6, 0x6F, 0xFF, 0xCE, 0x6, 0x70, 0xFF, 0x3E, 0x6, 0x71, 0xFF, 0xCE, 0x6, 0x72, 0xFF, 0x3E, 0x6, 0x73, 0xFF, 0xCE, 0x6, 0x74, 0xFF, 0x3E, 0x6, 0x75, 0xFF, 0xCE, 0x6, 0x85, 0xFF, 0xDB, 0x6, 0x87, 0xFF, 0xDB, 0x6, 0x8F, 0xFF, 0xDC, 0x6, 0x91, 0xFF, 0xDC, 0x6, 0x96, 0x0, 0x4, 0x6, 0xA9, 0xFF, 0xDC, 0x6, 0xCB, 0xFF, 0xDC, 0x6, 0xF7, 0xFF, 0xDC, 0x7, 0x67, 0xFF, 0xA5, 0x7, 0x69, 0xFF, 0xA5, 0x7, 0xB1, 0xFF, 0xA5, 0x8, 0xCD, 0xFF, 0x3E, 0x8, 0xCE, 0xFF, 0x3E, 0x8, 0xCF, 0xFF, 0x3E, 0x8, 0xD0, 0xFF, 0x3E, 0x8, 0xD1, 0xFF, 0x3E, 0x8, 0xD2, 0xFF, 0x3E, 0x8, 0xD3, 0xFF, 0x3E, 0x8, 0xE8, 0xFF, 0xCE, 0x8, 0xE9, 0xFF, 0xCE, 0x8, 0xEA, 0xFF, 0xCE, 0x8, 0xEB, 0xFF, 0xCE, 0x8, 0xEC, 0xFF, 0xCE, 0x8, 0xED, 0xFF, 0xCE, 0x8, 0xEE, 0xFF, 0xCE, 0x8, 0xEF, 0xFF, 0xDC, 0x8, 0xF0, 0xFF, 0xDC, 0x8, 0xF1, 0xFF, 0xDC, 0x8, 0xF2, 0xFF, 0xDC, 0x8, 0xF3, 0xFF, 0xDC, 0x8, 0xF9, 0xFF, 0xDB, 0x8, 0xFA, 0xFF, 0xDB, 0x8, 0xFB, 0xFF, 0xDB, 0x8, 0xFC, 0xFF, 0xDB, 0x8, 0xFD, 0xFF, 0xDB, 0x8, 0xFE, 0xFF, 0xE8, 0x8, 0xFF, 0xFF, 0xE8, 0x9, 0x0, 0xFF, 0xE8, 0x9, 0x1, 0xFF, 0xE8, 0x9, 0x2, 0xFF, 0xE6, 0x9, 0x3, 0xFF, 0xE6, 0x9, 0x4, 0xFF, 0x3E, 0x9, 0x5, 0xFF, 0xCE, 0x9, 0x6, 0xFF, 0x3E, 0x9, 0x7, 0xFF, 0xCE, 0x9, 0x8, 0xFF, 0x3E, 0x9, 0x9, 0xFF, 0xCE, 0x9, 0xB, 0xFF, 0xDC, 0x9, 0xD, 0xFF, 0xDC, 0x9, 0xF, 0xFF, 0xDC, 0x9, 0x11, 0xFF, 0xDC, 0x9, 0x13, 0xFF, 0xDC, 0x9, 0x15, 0xFF, 0xDC, 0x9, 0x17, 0xFF, 0xDC, 0x9, 0x19, 0xFF, 0xDC, 0x9, 0x1B, 0xFF, 0xDC, 0x9, 0x1D, 0xFF, 0xDC, 0x9, 0x1F, 0xFF, 0xDC, 0x9, 0x21, 0xFF, 0xDC, 0x9, 0x23, 0xFF, 0xDC, 0x9, 0x25, 0xFF, 0xDC, 0x9, 0x33, 0xFF, 0x17, 0x9, 0x47, 0xFF, 0xDB, 0x9, 0x49, 0xFF, 0xDB, 0x9, 0x4B, 0xFF, 0xDB, 0x9, 0x5C, 0x0, 0x14, 0x9, 0x5E, 0x0, 0x14, 0x9, 0x60, 0x0, 0x14, 0x9, 0x63, 0xFF, 0xE8, 0x9, 0x65, 0xFF, 0xE8, 0x9, 0x67, 0xFF, 0xE8, 0x9, 0x69, 0xFF, 0xE8, 0x9, 0x6B, 0xFF, 0xE8, 0x9, 0x6D, 0xFF, 0xE8, 0x9, 0x71, 0xFF, 0xE6, 0x9, 0x80, 0xFF, 0xA5, 0x9, 0x81, 0xFF, 0xA5, 0x9, 0x82, 0xFF, 0xA5, 0x9, 0x83, 0xFF, 0xA5, 0x9, 0x84, 0xFF, 0xA5, 0x9, 0x85, 0xFF, 0xA5, 0x9, 0x86, 0xFF, 0xA5, 0x9, 0x9B, 0xFF, 0xA5, 0x9, 0x9C, 0xFF, 0xA5, 0x9, 0x9D, 0xFF, 0xA5, 0x9, 0xD5, 0xFF, 0x3E, 0x9, 0xDD, 0xFF, 0x3E, 0x9, 0xED, 0xFF, 0xDC, 0x9, 0xF1, 0xFF, 0xE8, 0x9, 0xF3, 0xFF, 0xDB, 0x9, 0xF5, 0xFF, 0xE6, 0x9, 0xF8, 0xFF, 0xE8, 0x9, 0xF9, 0xFF, 0xDB, 0x9, 0xFA, 0xFF, 0xE8, 0xA, 0x1, 0xFF, 0x17, 0xA, 0x5, 0xFF, 0x3E, 0xA, 0x10, 0x0, 0x14, 0xA, 0x12, 0xFF, 0xCE, 0xA, 0x13, 0xFF, 0xDC, 0xA, 0x15, 0xFF, 0xDB, 0xA, 0x17, 0xFF, 0xDC, 0xA, 0x18, 0xFF, 0xE6, 0xA, 0x1A, 0xFF, 0xDC, 0xA, 0x21, 0xFF, 0xE6, 0xA, 0x29, 0xFF, 0xE6, 0xA, 0x31, 0xFF, 0x3E, 0xA, 0x32, 0xFF, 0xCE, 0xA, 0x35, 0xFF, 0xDC, 0xA, 0x39, 0x0, 0x4, 0xA, 0x3A, 0xFF, 0xE6, 0xA, 0x3B, 0xFF, 0xDC, 0xA, 0x40, 0xFF, 0xDC, 0xA, 0x42, 0xFF, 0xE6, 0xA, 0x47, 0xFF, 0x3E, 0xA, 0x48, 0xFF, 0xCE, 0xA, 0x49, 0xFF, 0x3E, 0xA, 0x4A, 0xFF, 0xCE, 0xA, 0x4E, 0xFF, 0xDC, 0xA, 0x50, 0xFF, 0xDC, 0xA, 0x51, 0xFF, 0xDC, 0xA, 0x5B, 0xFF, 0xDB, 0xA, 0x5D, 0xFF, 0xDC, 0xA, 0x60, 0xFF, 0xDB, 0xA, 0x64, 0xFF, 0xE6, 0xA, 0x66, 0xFF, 0xE6, 0xA, 0x68, 0xFF, 0xE6, 0xA, 0x6D, 0xFF, 0xDC, 0xA, 0x6E, 0xFF, 0x3E, 0xA, 0x6F, 0xFF, 0xCE, 0xA, 0x70, 0xFF, 0x3E, 0xA, 0x71, 0xFF, 0xCE, 0xA, 0x72, 0xFF, 0x3E, 0xA, 0x73, 0xFF, 0xCE, 0xA, 0x74, 0xFF, 0x3E, 0xA, 0x75, 0xFF, 0xCE, 0xA, 0x76, 0xFF, 0x3E, 0xA, 0x77, 0xFF, 0xCE, 0xA, 0x78, 0xFF, 0x3E, 0xA, 0x79, 0xFF, 0xCE, 0xA, 0x7A, 0xFF, 0x3E, 0xA, 0x7B, 0xFF, 0xCE, 0xA, 0x7C, 0xFF, 0x3E, 0xA, 0x7D, 0xFF, 0xCE, 0xA, 0x7E, 0xFF, 0x3E, 0xA, 0x7F, 0xFF, 0xCE, 0xA, 0x80, 0xFF, 0x3E, 0xA, 0x81, 0xFF, 0xCE, 0xA, 0x82, 0xFF, 0x3E, 0xA, 0x83, 0xFF, 0xCE, 0xA, 0x84, 0xFF, 0x3E, 0xA, 0x85, 0xFF, 0xCE, 0xA, 0x87, 0xFF, 0xDC, 0xA, 0x89, 0xFF, 0xDC, 0xA, 0x8B, 0xFF, 0xDC, 0xA, 0x8D, 0xFF, 0xDC, 0xA, 0x8F, 0xFF, 0xDC, 0xA, 0x91, 0xFF, 0xDC, 0xA, 0x93, 0xFF, 0xDC, 0xA, 0x95, 0xFF, 0xDC, 0xA, 0x9B, 0xFF, 0xDB, 0xA, 0x9D, 0xFF, 0xDB, 0xA, 0x9F, 0xFF, 0xDB, 0xA, 0xA1, 0xFF, 0xDB, 0xA, 0xA3, 0xFF, 0xDB, 0xA, 0xA5, 0xFF, 0xDB, 0xA, 0xA7, 0xFF, 0xDB, 0xA, 0xA9, 0xFF, 0xDC, 0xA, 0xAB, 0xFF, 0xDC, 0xA, 0xAD, 0xFF, 0xDC, 0xA, 0xAF, 0xFF, 0xDB, 0xA, 0xB1, 0xFF, 0xDC, 0xA, 0xB3, 0xFF, 0xE8, 0xA, 0xB5, 0xFF, 0xE8, 0xA, 0xB7, 0xFF, 0xE8, 0xA, 0xB9, 0xFF, 0xE8, 0xA, 0xBB, 0xFF, 0xE8, 0xA, 0xBD, 0xFF, 0xE8, 0xA, 0xBF, 0xFF, 0xE8, 0xA, 0xC1, 0xFF, 0xE6, 0xA, 0xC3, 0xFF, 0xE6, 0xA, 0xC5, 0xFF, 0xE6, 0xA, 0xC7, 0x0, 0x14, 0xA, 0xEE, 0xFF, 0x3E, 0xA, 0xEF, 0xFF, 0xCE, 0xA, 0xF3, 0xFF, 0xDB, 0xA, 0xF5, 0xFF, 0xE8, 0xA, 0xF7, 0xFF, 0xE8, 0xA, 0xF9, 0xFF, 0xE8, 0xA, 0xFB, 0xFF, 0xE8, 0xA, 0xFD, 0xFF, 0xE8, 0xA, 0xFE, 0xFF, 0xDC, 0xA, 0xFF, 0xFF, 0x3E, 0xB, 0x0, 0xFF, 0xCE, 0xB, 0x1, 0xFF, 0x3E, 0xB, 0x2, 0xFF, 0xCE, 0xB, 0x4, 0xFF, 0xCE, 0xB, 0x6, 0xFF, 0xDC, 0xB, 0xA, 0xFF, 0xDB, 0xB, 0xC, 0xFF, 0xDB, 0xB, 0xF, 0xFF, 0xDC, 0xB, 0x14, 0xFF, 0x3E, 0xB, 0x15, 0xFF, 0xCE, 0xB, 0x16, 0xFF, 0x3E, 0xB, 0x17, 0xFF, 0xCE, 0xB, 0x19, 0xFF, 0xDC, 0xB, 0x1B, 0xFF, 0xDC, 0xB, 0x21, 0xFF, 0xDB, 0xB, 0x23, 0xFF, 0xDB, 0xB, 0x29, 0xFF, 0xE8, 0xB, 0x2B, 0xFF, 0xE8, 0xB, 0x2E, 0xFF, 0x3E, 0xB, 0x2F, 0xFF, 0xCE, 0xB, 0x33, 0xFF, 0xDB, 0xB, 0x35, 0xFF, 0xDB, 0xB, 0x37, 0xFF, 0xDB, 0xB, 0x39, 0xFF, 0xDB, 0xB, 0x3B, 0xFF, 0xE6, 0xB, 0x3C, 0xFF, 0xDB, 0xB, 0x3F, 0xFF, 0x17, 0xB, 0x42, 0xFF, 0xDC, 0xB, 0x4A, 0xFF, 0xDC, 0xB, 0x54, 0xFF, 0xDC, 0xB, 0x56, 0xFF, 0xDC, 0xB, 0x58, 0xFF, 0xDC, 0xB, 0x5A, 0xFF, 0xDC, 0xB, 0x5C, 0xFF, 0xDC, 0xB, 0x5E, 0xFF, 0xDC, 0xB, 0x60, 0xFF, 0xDC, 0xB, 0x62, 0xFF, 0xDC, 0xB, 0x64, 0xFF, 0xDC, 0xB, 0x66, 0xFF, 0xDC, 0xB, 0x68, 0xFF, 0xDC, 0xB, 0x6C, 0xFF, 0xDC, 0xB, 0x90, 0xFF, 0xDB, 0xB, 0x92, 0xFF, 0xDB, 0xB, 0x94, 0xFF, 0xDB, 0xB, 0x96, 0xFF, 0xDB, 0xB, 0xAD, 0x0, 0x14, 0xB, 0xAF, 0x0, 0x14, 0xB, 0xB1, 0x0, 0x14, 0xB, 0xB3, 0x0, 0x14, 0xB, 0xB6, 0xFF, 0xE8, 0xB, 0xB8, 0xFF, 0xE8, 0xB, 0xBA, 0xFF, 0xE8, 0xB, 0xBC, 0xFF, 0xE8, 0xB, 0xBE, 0xFF, 0xE8, 0xB, 0xBF, 0x0, 0x4, 0xB, 0xC0, 0xFF, 0xE6, 0xB, 0xC1, 0x0, 0x4, 0xB, 0xC2, 0xFF, 0xE6, 0xB, 0xCC, 0xFF, 0xE6, 0xB, 0xD6, 0xFF, 0xE6, 0xB, 0xD7, 0xFF, 0xCE, 0xB, 0xD8, 0xFF, 0xDC, 0xB, 0xD9, 0xFF, 0xDC, 0xB, 0xDA, 0xFF, 0xDC, 0xB, 0xDB, 0xFF, 0xDC, 0xB, 0xDC, 0xFF, 0xDC, 0xB, 0xDD, 0xFF, 0xDC, 0xB, 0xDE, 0xFF, 0xDC, 0xB, 0xDF, 0xFF, 0xDC, 0xC, 0x14, 0xFF, 0xDB, 0xC, 0x15, 0xFF, 0xDB, 0xC, 0x16, 0xFF, 0xDB, 0xC, 0x17, 0xFF, 0xDB, 0xC, 0x18, 0xFF, 0xDB, 0xC, 0x19, 0xFF, 0xDB, 0xC, 0x20, 0xFF, 0xE8, 0xC, 0x21, 0xFF, 0xE8, 0xC, 0x22, 0xFF, 0xE8, 0xC, 0x23, 0xFF, 0xE8, 0xC, 0x24, 0xFF, 0xE8, 0xC, 0x25, 0xFF, 0xE8, 0xC, 0x26, 0xFF, 0xE8, 0xC, 0x27, 0xFF, 0xE8, 0xC, 0x44, 0xFF, 0xDB, 0xC, 0x45, 0xFF, 0xDB, 0xC, 0x46, 0xFF, 0xE8, 0xC, 0x47, 0xFF, 0xE8, 0xC, 0x4A, 0xFF, 0xDC, 0xC, 0x4B, 0xFF, 0xDC, 0xC, 0x4C, 0xFF, 0xDC, 0xC, 0x4D, 0xFF, 0xDC, 0xC, 0x4E, 0xFF, 0xDC, 0xC, 0x4F, 0xFF, 0xDC, 0xC, 0x50, 0xFF, 0xDC, 0xC, 0x51, 0xFF, 0xDC, 0xC, 0x7A, 0xFF, 0xDC, 0xC, 0x7B, 0xFF, 0xDC, 0xC, 0x7C, 0xFF, 0xDC, 0xC, 0x7D, 0xFF, 0xDC, 0xC, 0x7E, 0xFF, 0xDC, 0xC, 0x7F, 0xFF, 0xDC, 0xC, 0x80, 0xFF, 0xDC, 0xC, 0x81, 0xFF, 0x3E, 0xC, 0x82, 0xFF, 0x3E, 0xC, 0x85, 0xFF, 0x3E, 0xC, 0x9A, 0xFF, 0xE8, 0xC, 0x9B, 0xFF, 0xE8, 0xC, 0x9C, 0xFF, 0xE8, 0xC, 0x9D, 0xFF, 0xE8, 0xC, 0xB7, 0xFF, 0xA5, 0xC, 0xBE, 0xFF, 0xA5, 0xC, 0xD6, 0xFF, 0xA5, 0x0, 0x42, 0x0, 0x39, 0xFF, 0xDC, 0x0, 0x3B, 0xFF, 0xE2, 0x0, 0x3C, 0xFF, 0xEA, 0x0, 0x3E, 0xFF, 0xCC, 0x0, 0xC2, 0xFF, 0xDC, 0x1, 0x3, 0xFF, 0xCC, 0x2, 0x68, 0xFF, 0xDC, 0x2, 0x6C, 0xFF, 0xDC, 0x2, 0xAF, 0xFF, 0xE2, 0x2, 0xD0, 0xFF, 0xDC, 0x2, 0xDC, 0xFF, 0xDC, 0x5, 0x68, 0xFF, 0xEA, 0x6, 0x23, 0xFF, 0xDC, 0x6, 0x25, 0xFF, 0xDC, 0x6, 0x29, 0xFF, 0xDC, 0x6, 0x96, 0xFF, 0xE2, 0x7, 0x67, 0x0, 0xF, 0x7, 0x69, 0x0, 0xF, 0x7, 0xB1, 0x0, 0xF, 0x8, 0xE7, 0xFF, 0xCC, 0x9, 0x5C, 0xFF, 0xDC, 0x9, 0x5E, 0xFF, 0xDC, 0x9, 0x60, 0xFF, 0xDC, 0x9, 0x6E, 0xFF, 0xEA, 0x9, 0x70, 0xFF, 0xCC, 0x9, 0x72, 0xFF, 0xCC, 0x9, 0x80, 0x0, 0xF, 0x9, 0x81, 0x0, 0xF, 0x9, 0x82, 0x0, 0xF, 0x9, 0x83, 0x0, 0xF, 0x9, 0x84, 0x0, 0xF, 0x9, 0x85, 0x0, 0xF, 0x9, 0x86, 0x0, 0xF, 0x9, 0x9B, 0x0, 0xF, 0x9, 0x9C, 0x0, 0xF, 0x9, 0x9D, 0x0, 0xF, 0x9, 0xDA, 0xFF, 0xCC, 0x9, 0xE9, 0xFF, 0xCC, 0x9, 0xEC, 0xFF, 0xCC, 0xA, 0x10, 0xFF, 0xDC, 0xA, 0x22, 0xFF, 0xEA, 0xA, 0x24, 0xFF, 0xEA, 0xA, 0x26, 0xFF, 0xEA, 0xA, 0x28, 0xFF, 0xCC, 0xA, 0x39, 0xFF, 0xE2, 0xA, 0x41, 0xFF, 0xCC, 0xA, 0xC0, 0xFF, 0xCC, 0xA, 0xC2, 0xFF, 0xCC, 0xA, 0xC4, 0xFF, 0xCC, 0xA, 0xC7, 0xFF, 0xDC, 0xA, 0xD6, 0xFF, 0xCC, 0xB, 0x4B, 0xFF, 0xEA, 0xB, 0xAD, 0xFF, 0xDC, 0xB, 0xAF, 0xFF, 0xDC, 0xB, 0xB1, 0xFF, 0xDC, 0xB, 0xB3, 0xFF, 0xDC, 0xB, 0xBF, 0xFF, 0xE2, 0xB, 0xC1, 0xFF, 0xE2, 0xB, 0xC3, 0xFF, 0xEA, 0xB, 0xC5, 0xFF, 0xEA, 0xB, 0xCB, 0xFF, 0xCC, 0xC, 0xA2, 0xFF, 0xCC, 0xC, 0xA3, 0xFF, 0xCC, 0xC, 0xB7, 0x0, 0xF, 0xC, 0xBE, 0x0, 0xF, 0xC, 0xD6, 0x0, 0xF, 0x0, 0x59, 0x0, 0x26, 0x0, 0x4, 0x0, 0x39, 0xFF, 0xD7, 0x0, 0x3B, 0xFF, 0xEC, 0x0, 0x3E, 0xFF, 0xC2, 0x0, 0xC2, 0xFF, 0xD7, 0x0, 0xFA, 0x0, 0x4, 0x1, 0x3, 0xFF, 0xC2, 0x2, 0x31, 0x0, 0x4, 0x2, 0x33, 0x0, 0x4, 0x2, 0x68, 0xFF, 0xD7, 0x2, 0x6C, 0xFF, 0xD7, 0x2, 0xA3, 0x0, 0x4, 0x2, 0xAF, 0xFF, 0xEC, 0x2, 0xD0, 0xFF, 0xD7, 0x2, 0xDC, 0xFF, 0xD7, 0x5, 0xF1, 0x0, 0x4, 0x6, 0x23, 0xFF, 0xD7, 0x6, 0x25, 0xFF, 0xD7, 0x6, 0x29, 0xFF, 0xD7, 0x6, 0x6A, 0x0, 0x4, 0x6, 0x6C, 0x0, 0x4, 0x6, 0x70, 0x0, 0x4, 0x6, 0x72, 0x0, 0x4, 0x6, 0x74, 0x0, 0x4, 0x6, 0x96, 0xFF, 0xEC, 0x8, 0xCD, 0x0, 0x4, 0x8, 0xCE, 0x0, 0x4, 0x8, 0xCF, 0x0, 0x4, 0x8, 0xD0, 0x0, 0x4, 0x8, 0xD1, 0x0, 0x4, 0x8, 0xD2, 0x0, 0x4, 0x8, 0xD3, 0x0, 0x4, 0x8, 0xE7, 0xFF, 0xC2, 0x9, 0x4, 0x0, 0x4, 0x9, 0x6, 0x0, 0x4, 0x9, 0x8, 0x0, 0x4, 0x9, 0x5C, 0xFF, 0xD7, 0x9, 0x5E, 0xFF, 0xD7, 0x9, 0x60, 0xFF, 0xD7, 0x9, 0x70, 0xFF, 0xC2, 0x9, 0x72, 0xFF, 0xC2, 0x9, 0xD5, 0x0, 0x4, 0x9, 0xDA, 0xFF, 0xC2, 0x9, 0xDD, 0x0, 0x4, 0x9, 0xE9, 0xFF, 0xC2, 0x9, 0xEC, 0xFF, 0xC2, 0xA, 0x5, 0x0, 0x4, 0xA, 0x10, 0xFF, 0xD7, 0xA, 0x28, 0xFF, 0xC2, 0xA, 0x31, 0x0, 0x4, 0xA, 0x39, 0xFF, 0xEC, 0xA, 0x41, 0xFF, 0xC2, 0xA, 0x47, 0x0, 0x4, 0xA, 0x49, 0x0, 0x4, 0xA, 0x6E, 0x0, 0x4, 0xA, 0x70, 0x0, 0x4, 0xA, 0x72, 0x0, 0x4, 0xA, 0x74, 0x0, 0x4, 0xA, 0x76, 0x0, 0x4, 0xA, 0x78, 0x0, 0x4, 0xA, 0x7A, 0x0, 0x4, 0xA, 0x7C, 0x0, 0x4, 0xA, 0x7E, 0x0, 0x4, 0xA, 0x80, 0x0, 0x4, 0xA, 0x82, 0x0, 0x4, 0xA, 0x84, 0x0, 0x4, 0xA, 0xC0, 0xFF, 0xC2, 0xA, 0xC2, 0xFF, 0xC2, 0xA, 0xC4, 0xFF, 0xC2, 0xA, 0xC7, 0xFF, 0xD7, 0xA, 0xD6, 0xFF, 0xC2, 0xA, 0xEE, 0x0, 0x4, 0xA, 0xFF, 0x0, 0x4, 0xB, 0x1, 0x0, 0x4, 0xB, 0x14, 0x0, 0x4, 0xB, 0x16, 0x0, 0x4, 0xB, 0x2E, 0x0, 0x4, 0xB, 0xAD, 0xFF, 0xD7, 0xB, 0xAF, 0xFF, 0xD7, 0xB, 0xB1, 0xFF, 0xD7, 0xB, 0xB3, 0xFF, 0xD7, 0xB, 0xBF, 0xFF, 0xEC, 0xB, 0xC1, 0xFF, 0xEC, 0xB, 0xCB, 0xFF, 0xC2, 0xC, 0x81, 0x0, 0x4, 0xC, 0x82, 0x0, 0x4, 0xC, 0x85, 0x0, 0x4, 0xC, 0xA2, 0xFF, 0xC2, 0xC, 0xA3, 0xFF, 0xC2, 0x0, 0x1B, 0x0, 0x2F, 0xFF, 0xED, 0x0, 0x3A, 0xFF, 0xED, 0x8, 0xE3, 0xFF, 0xED, 0x8, 0xE4, 0xFF, 0xED, 0x8, 0xE5, 0xFF, 0xED, 0x8, 0xE6, 0xFF, 0xED, 0x9, 0x33, 0xFF, 0xED, 0x9, 0x62, 0xFF, 0xED, 0x9, 0x64, 0xFF, 0xED, 0x9, 0x66, 0xFF, 0xED, 0x9, 0x68, 0xFF, 0xED, 0x9, 0x6A, 0xFF, 0xED, 0x9, 0x6C, 0xFF, 0xED, 0xA, 0x1, 0xFF, 0xED, 0xA, 0xB2, 0xFF, 0xED, 0xA, 0xB4, 0xFF, 0xED, 0xA, 0xF4, 0xFF, 0xED, 0xA, 0xF6, 0xFF, 0xED, 0xA, 0xF8, 0xFF, 0xED, 0xA, 0xFA, 0xFF, 0xED, 0xA, 0xFC, 0xFF, 0xED, 0xB, 0x3F, 0xFF, 0xED, 0xB, 0xB5, 0xFF, 0xED, 0xB, 0xB7, 0xFF, 0xED, 0xB, 0xB9, 0xFF, 0xED, 0xB, 0xBB, 0xFF, 0xED, 0xB, 0xBD, 0xFF, 0xED, 0x0, 0x82, 0x0, 0x7, 0x0, 0x18, 0x0, 0xC, 0x0, 0x18, 0x0, 0xE, 0x0, 0x24, 0x0, 0x42, 0x0, 0x28, 0x0, 0x48, 0xFF, 0xF0, 0x0, 0x49, 0xFF, 0xF0, 0x0, 0x4A, 0xFF, 0xF0, 0x0, 0x4C, 0xFF, 0xF0, 0x0, 0x56, 0xFF, 0xF0, 0x0, 0x62, 0x0, 0x1B, 0x0, 0x95, 0xFF, 0xF0, 0x0, 0x9F, 0xFF, 0xF0, 0x0, 0xB5, 0xFF, 0xF0, 0x0, 0xDA, 0xFF, 0xF0, 0x0, 0xDC, 0xFF, 0xF0, 0x0, 0xE4, 0xFF, 0xF0, 0x1, 0x0, 0xFF, 0xF0, 0x2, 0x2A, 0xFF, 0xF0, 0x2, 0x3A, 0xFF, 0xF0, 0x2, 0x47, 0xFF, 0xF0, 0x2, 0x48, 0xFF, 0xF0, 0x2, 0x58, 0xFF, 0xF0, 0x2, 0x61, 0xFF, 0xF0, 0x2, 0x8D, 0xFF, 0xF0, 0x2, 0x99, 0xFF, 0xF0, 0x2, 0xB4, 0xFF, 0xF0, 0x2, 0xB8, 0xFF, 0xF0, 0x2, 0xD9, 0xFF, 0xF0, 0x2, 0xF7, 0xFF, 0xF0, 0x2, 0xF8, 0xFF, 0xF0, 0x3, 0x2, 0xFF, 0xF0, 0x4, 0x62, 0x0, 0x18, 0x4, 0x63, 0x0, 0x18, 0x4, 0x65, 0x0, 0x18, 0x4, 0x66, 0x0, 0x18, 0x4, 0x67, 0x0, 0x18, 0x5, 0x6E, 0xFF, 0xF0, 0x6, 0x8F, 0xFF, 0xF0, 0x6, 0x91, 0xFF, 0xF0, 0x6, 0xA9, 0xFF, 0xF0, 0x6, 0xCB, 0xFF, 0xF0, 0x6, 0xF7, 0xFF, 0xF0, 0x8, 0xEF, 0xFF, 0xF0, 0x8, 0xF0, 0xFF, 0xF0, 0x8, 0xF1, 0xFF, 0xF0, 0x8, 0xF2, 0xFF, 0xF0, 0x8, 0xF3, 0xFF, 0xF0, 0x9, 0xB, 0xFF, 0xF0, 0x9, 0xD, 0xFF, 0xF0, 0x9, 0xF, 0xFF, 0xF0, 0x9, 0x11, 0xFF, 0xF0, 0x9, 0x13, 0xFF, 0xF0, 0x9, 0x15, 0xFF, 0xF0, 0x9, 0x17, 0xFF, 0xF0, 0x9, 0x19, 0xFF, 0xF0, 0x9, 0x1B, 0xFF, 0xF0, 0x9, 0x1D, 0xFF, 0xF0, 0x9, 0x1F, 0xFF, 0xF0, 0x9, 0x21, 0xFF, 0xF0, 0x9, 0x23, 0xFF, 0xF0, 0x9, 0x25, 0xFF, 0xF0, 0x9, 0xED, 0xFF, 0xF0, 0xA, 0x13, 0xFF, 0xF0, 0xA, 0x17, 0xFF, 0xF0, 0xA, 0x1A, 0xFF, 0xF0, 0xA, 0x2A, 0x0, 0x18, 0xA, 0x2B, 0x0, 0x18, 0xA, 0x2E, 0x0, 0x18, 0xA, 0x35, 0xFF, 0xF0, 0xA, 0x3B, 0xFF, 0xF0, 0xA, 0x40, 0xFF, 0xF0, 0xA, 0x4E, 0xFF, 0xF0, 0xA, 0x50, 0xFF, 0xF0, 0xA, 0x51, 0xFF, 0xF0, 0xA, 0x5D, 0xFF, 0xF0, 0xA, 0x6D, 0xFF, 0xF0, 0xA, 0x87, 0xFF, 0xF0, 0xA, 0x89, 0xFF, 0xF0, 0xA, 0x8B, 0xFF, 0xF0, 0xA, 0x8D, 0xFF, 0xF0, 0xA, 0x8F, 0xFF, 0xF0, 0xA, 0x91, 0xFF, 0xF0, 0xA, 0x93, 0xFF, 0xF0, 0xA, 0x95, 0xFF, 0xF0, 0xA, 0xA9, 0xFF, 0xF0, 0xA, 0xAB, 0xFF, 0xF0, 0xA, 0xAD, 0xFF, 0xF0, 0xA, 0xB1, 0xFF, 0xF0, 0xA, 0xFE, 0xFF, 0xF0, 0xB, 0x6, 0xFF, 0xF0, 0xB, 0xF, 0xFF, 0xF0, 0xB, 0x19, 0xFF, 0xF0, 0xB, 0x1B, 0xFF, 0xF0, 0xB, 0x42, 0xFF, 0xF0, 0xB, 0x4A, 0xFF, 0xF0, 0xB, 0x54, 0xFF, 0xF0, 0xB, 0x56, 0xFF, 0xF0, 0xB, 0x58, 0xFF, 0xF0, 0xB, 0x5A, 0xFF, 0xF0, 0xB, 0x5C, 0xFF, 0xF0, 0xB, 0x5E, 0xFF, 0xF0, 0xB, 0x60, 0xFF, 0xF0, 0xB, 0x62, 0xFF, 0xF0, 0xB, 0x64, 0xFF, 0xF0, 0xB, 0x66, 0xFF, 0xF0, 0xB, 0x68, 0xFF, 0xF0, 0xB, 0x6C, 0xFF, 0xF0, 0xB, 0xD8, 0xFF, 0xF0, 0xB, 0xD9, 0xFF, 0xF0, 0xB, 0xDA, 0xFF, 0xF0, 0xB, 0xDB, 0xFF, 0xF0, 0xB, 0xDC, 0xFF, 0xF0, 0xB, 0xDD, 0xFF, 0xF0, 0xB, 0xDE, 0xFF, 0xF0, 0xB, 0xDF, 0xFF, 0xF0, 0xC, 0x4A, 0xFF, 0xF0, 0xC, 0x4B, 0xFF, 0xF0, 0xC, 0x4C, 0xFF, 0xF0, 0xC, 0x4D, 0xFF, 0xF0, 0xC, 0x4E, 0xFF, 0xF0, 0xC, 0x4F, 0xFF, 0xF0, 0xC, 0x50, 0xFF, 0xF0, 0xC, 0x51, 0xFF, 0xF0, 0xC, 0x7A, 0xFF, 0xF0, 0xC, 0x7B, 0xFF, 0xF0, 0xC, 0x7C, 0xFF, 0xF0, 0xC, 0x7D, 0xFF, 0xF0, 0xC, 0x7E, 0xFF, 0xF0, 0xC, 0x7F, 0xFF, 0xF0, 0xC, 0x80, 0xFF, 0xF0, 0x0, 0x2, 0x2, 0x8C, 0xFF, 0xDF, 0x4, 0x63, 0xFF, 0xBC, 0x0, 0xAB, 0x0, 0x48, 0xFF, 0xEA, 0x0, 0x49, 0xFF, 0xEA, 0x0, 0x4A, 0xFF, 0xEA, 0x0, 0x4C, 0xFF, 0xEA, 0x0, 0x54, 0xFF, 0xF5, 0x0, 0x56, 0xFF, 0xEA, 0x0, 0x95, 0xFF, 0xEA, 0x0, 0x9F, 0xFF, 0xEA, 0x0, 0xB5, 0xFF, 0xEA, 0x0, 0xDA, 0xFF, 0xEA, 0x0, 0xDC, 0xFF, 0xEA, 0x0, 0xE4, 0xFF, 0xEA, 0x1, 0x0, 0xFF, 0xEA, 0x2, 0x2A, 0xFF, 0xEA, 0x2, 0x3A, 0xFF, 0xEA, 0x2, 0x47, 0xFF, 0xEA, 0x2, 0x48, 0xFF, 0xEA, 0x2, 0x56, 0xFF, 0xF5, 0x2, 0x58, 0xFF, 0xEA, 0x2, 0x61, 0xFF, 0xEA, 0x2, 0x8D, 0xFF, 0xEA, 0x2, 0x99, 0xFF, 0xEA, 0x2, 0xAE, 0xFF, 0xF5, 0x2, 0xB4, 0xFF, 0xEA, 0x2, 0xB8, 0xFF, 0xEA, 0x2, 0xD9, 0xFF, 0xEA, 0x2, 0xF7, 0xFF, 0xEA, 0x2, 0xF8, 0xFF, 0xEA, 0x3, 0x2, 0xFF, 0xEA, 0x5, 0x6E, 0xFF, 0xEA, 0x5, 0x70, 0xFF, 0xF5, 0x5, 0xEE, 0xFF, 0xF5, 0x6, 0x2, 0xFF, 0xF5, 0x6, 0x4, 0xFF, 0xF5, 0x6, 0x6, 0xFF, 0xF5, 0x6, 0x32, 0xFF, 0xF5, 0x6, 0x85, 0xFF, 0xF5, 0x6, 0x87, 0xFF, 0xF5, 0x6, 0x8F, 0xFF, 0xEA, 0x6, 0x91, 0xFF, 0xEA, 0x6, 0xA9, 0xFF, 0xEA, 0x6, 0xCB, 0xFF, 0xEA, 0x6, 0xF7, 0xFF, 0xEA, 0x8, 0xEF, 0xFF, 0xEA, 0x8, 0xF0, 0xFF, 0xEA, 0x8, 0xF1, 0xFF, 0xEA, 0x8, 0xF2, 0xFF, 0xEA, 0x8, 0xF3, 0xFF, 0xEA, 0x8, 0xF9, 0xFF, 0xF5, 0x8, 0xFA, 0xFF, 0xF5, 0x8, 0xFB, 0xFF, 0xF5, 0x8, 0xFC, 0xFF, 0xF5, 0x8, 0xFD, 0xFF, 0xF5, 0x9, 0xB, 0xFF, 0xEA, 0x9, 0xD, 0xFF, 0xEA, 0x9, 0xF, 0xFF, 0xEA, 0x9, 0x11, 0xFF, 0xEA, 0x9, 0x13, 0xFF, 0xEA, 0x9, 0x15, 0xFF, 0xEA, 0x9, 0x17, 0xFF, 0xEA, 0x9, 0x19, 0xFF, 0xEA, 0x9, 0x1B, 0xFF, 0xEA, 0x9, 0x1D, 0xFF, 0xEA, 0x9, 0x1F, 0xFF, 0xEA, 0x9, 0x21, 0xFF, 0xEA, 0x9, 0x23, 0xFF, 0xEA, 0x9, 0x25, 0xFF, 0xEA, 0x9, 0x47, 0xFF, 0xF5, 0x9, 0x49, 0xFF, 0xF5, 0x9, 0x4B, 0xFF, 0xF5, 0x9, 0xED, 0xFF, 0xEA, 0x9, 0xF3, 0xFF, 0xF5, 0x9, 0xF9, 0xFF, 0xF5, 0xA, 0x13, 0xFF, 0xEA, 0xA, 0x15, 0xFF, 0xF5, 0xA, 0x17, 0xFF, 0xEA, 0xA, 0x1A, 0xFF, 0xEA, 0xA, 0x35, 0xFF, 0xEA, 0xA, 0x3B, 0xFF, 0xEA, 0xA, 0x40, 0xFF, 0xEA, 0xA, 0x4E, 0xFF, 0xEA, 0xA, 0x50, 0xFF, 0xEA, 0xA, 0x51, 0xFF, 0xEA, 0xA, 0x5B, 0xFF, 0xF5, 0xA, 0x5D, 0xFF, 0xEA, 0xA, 0x60, 0xFF, 0xF5, 0xA, 0x6D, 0xFF, 0xEA, 0xA, 0x87, 0xFF, 0xEA, 0xA, 0x89, 0xFF, 0xEA, 0xA, 0x8B, 0xFF, 0xEA, 0xA, 0x8D, 0xFF, 0xEA, 0xA, 0x8F, 0xFF, 0xEA, 0xA, 0x91, 0xFF, 0xEA, 0xA, 0x93, 0xFF, 0xEA, 0xA, 0x95, 0xFF, 0xEA, 0xA, 0x9B, 0xFF, 0xF5, 0xA, 0x9D, 0xFF, 0xF5, 0xA, 0x9F, 0xFF, 0xF5, 0xA, 0xA1, 0xFF, 0xF5, 0xA, 0xA3, 0xFF, 0xF5, 0xA, 0xA5, 0xFF, 0xF5, 0xA, 0xA7, 0xFF, 0xF5, 0xA, 0xA9, 0xFF, 0xEA, 0xA, 0xAB, 0xFF, 0xEA, 0xA, 0xAD, 0xFF, 0xEA, 0xA, 0xAF, 0xFF, 0xF5, 0xA, 0xB1, 0xFF, 0xEA, 0xA, 0xF3, 0xFF, 0xF5, 0xA, 0xFE, 0xFF, 0xEA, 0xB, 0x6, 0xFF, 0xEA, 0xB, 0xA, 0xFF, 0xF5, 0xB, 0xC, 0xFF, 0xF5, 0xB, 0xF, 0xFF, 0xEA, 0xB, 0x19, 0xFF, 0xEA, 0xB, 0x1B, 0xFF, 0xEA, 0xB, 0x21, 0xFF, 0xF5, 0xB, 0x23, 0xFF, 0xF5, 0xB, 0x33, 0xFF, 0xF5, 0xB, 0x35, 0xFF, 0xF5, 0xB, 0x37, 0xFF, 0xF5, 0xB, 0x39, 0xFF, 0xF5, 0xB, 0x3C, 0xFF, 0xF5, 0xB, 0x42, 0xFF, 0xEA, 0xB, 0x4A, 0xFF, 0xEA, 0xB, 0x54, 0xFF, 0xEA, 0xB, 0x56, 0xFF, 0xEA, 0xB, 0x58, 0xFF, 0xEA, 0xB, 0x5A, 0xFF, 0xEA, 0xB, 0x5C, 0xFF, 0xEA, 0xB, 0x5E, 0xFF, 0xEA, 0xB, 0x60, 0xFF, 0xEA, 0xB, 0x62, 0xFF, 0xEA, 0xB, 0x64, 0xFF, 0xEA, 0xB, 0x66, 0xFF, 0xEA, 0xB, 0x68, 0xFF, 0xEA, 0xB, 0x6C, 0xFF, 0xEA, 0xB, 0x90, 0xFF, 0xF5, 0xB, 0x92, 0xFF, 0xF5, 0xB, 0x94, 0xFF, 0xF5, 0xB, 0x96, 0xFF, 0xF5, 0xB, 0xD8, 0xFF, 0xEA, 0xB, 0xD9, 0xFF, 0xEA, 0xB, 0xDA, 0xFF, 0xEA, 0xB, 0xDB, 0xFF, 0xEA, 0xB, 0xDC, 0xFF, 0xEA, 0xB, 0xDD, 0xFF, 0xEA, 0xB, 0xDE, 0xFF, 0xEA, 0xB, 0xDF, 0xFF, 0xEA, 0xC, 0x14, 0xFF, 0xF5, 0xC, 0x15, 0xFF, 0xF5, 0xC, 0x16, 0xFF, 0xF5, 0xC, 0x17, 0xFF, 0xF5, 0xC, 0x18, 0xFF, 0xF5, 0xC, 0x19, 0xFF, 0xF5, 0xC, 0x44, 0xFF, 0xF5, 0xC, 0x45, 0xFF, 0xF5, 0xC, 0x4A, 0xFF, 0xEA, 0xC, 0x4B, 0xFF, 0xEA, 0xC, 0x4C, 0xFF, 0xEA, 0xC, 0x4D, 0xFF, 0xEA, 0xC, 0x4E, 0xFF, 0xEA, 0xC, 0x4F, 0xFF, 0xEA, 0xC, 0x50, 0xFF, 0xEA, 0xC, 0x51, 0xFF, 0xEA, 0xC, 0x7A, 0xFF, 0xEA, 0xC, 0x7B, 0xFF, 0xEA, 0xC, 0x7C, 0xFF, 0xEA, 0xC, 0x7D, 0xFF, 0xEA, 0xC, 0x7E, 0xFF, 0xEA, 0xC, 0x7F, 0xFF, 0xEA, 0xC, 0x80, 0xFF, 0xEA, 0x0, 0x38, 0x0, 0x54, 0xFF, 0xE5, 0x0, 0x59, 0x0, 0xF, 0x2, 0x56, 0xFF, 0xE5, 0x2, 0xAE, 0xFF, 0xE5, 0x4, 0x63, 0x0, 0x1E, 0x5, 0x70, 0xFF, 0xE5, 0x5, 0xEE, 0xFF, 0xE5, 0x6, 0x2, 0xFF, 0xE5, 0x6, 0x4, 0xFF, 0xE5, 0x6, 0x6, 0xFF, 0xE5, 0x6, 0x32, 0xFF, 0xE5, 0x6, 0x85, 0xFF, 0xE5, 0x6, 0x87, 0xFF, 0xE5, 0x8, 0xF9, 0xFF, 0xE5, 0x8, 0xFA, 0xFF, 0xE5, 0x8, 0xFB, 0xFF, 0xE5, 0x8, 0xFC, 0xFF, 0xE5, 0x8, 0xFD, 0xFF, 0xE5, 0x9, 0x47, 0xFF, 0xE5, 0x9, 0x49, 0xFF, 0xE5, 0x9, 0x4B, 0xFF, 0xE5, 0x9, 0xF3, 0xFF, 0xE5, 0x9, 0xF9, 0xFF, 0xE5, 0xA, 0x15, 0xFF, 0xE5, 0xA, 0x5B, 0xFF, 0xE5, 0xA, 0x60, 0xFF, 0xE5, 0xA, 0x9B, 0xFF, 0xE5, 0xA, 0x9D, 0xFF, 0xE5, 0xA, 0x9F, 0xFF, 0xE5, 0xA, 0xA1, 0xFF, 0xE5, 0xA, 0xA3, 0xFF, 0xE5, 0xA, 0xA5, 0xFF, 0xE5, 0xA, 0xA7, 0xFF, 0xE5, 0xA, 0xAF, 0xFF, 0xE5, 0xA, 0xF3, 0xFF, 0xE5, 0xB, 0xA, 0xFF, 0xE5, 0xB, 0xC, 0xFF, 0xE5, 0xB, 0x21, 0xFF, 0xE5, 0xB, 0x23, 0xFF, 0xE5, 0xB, 0x33, 0xFF, 0xE5, 0xB, 0x35, 0xFF, 0xE5, 0xB, 0x37, 0xFF, 0xE5, 0xB, 0x39, 0xFF, 0xE5, 0xB, 0x3C, 0xFF, 0xE5, 0xB, 0x90, 0xFF, 0xE5, 0xB, 0x92, 0xFF, 0xE5, 0xB, 0x94, 0xFF, 0xE5, 0xB, 0x96, 0xFF, 0xE5, 0xC, 0x14, 0xFF, 0xE5, 0xC, 0x15, 0xFF, 0xE5, 0xC, 0x16, 0xFF, 0xE5, 0xC, 0x17, 0xFF, 0xE5, 0xC, 0x18, 0xFF, 0xE5, 0xC, 0x19, 0xFF, 0xE5, 0xC, 0x44, 0xFF, 0xE5, 0xC, 0x45, 0xFF, 0xE5, 0x0, 0x6, 0x0, 0x11, 0xFF, 0x9C, 0x0, 0x13, 0xFF, 0x9C, 0x4, 0x64, 0xFF, 0x9C, 0x4, 0x68, 0xFF, 0x9C, 0x4, 0x6F, 0xFF, 0x9C, 0x4, 0x70, 0xFF, 0x9C, 0x0, 0x1B, 0x0, 0x2F, 0xFF, 0xEA, 0x0, 0x3A, 0xFF, 0xEA, 0x8, 0xE3, 0xFF, 0xEA, 0x8, 0xE4, 0xFF, 0xEA, 0x8, 0xE5, 0xFF, 0xEA, 0x8, 0xE6, 0xFF, 0xEA, 0x9, 0x33, 0xFF, 0xEA, 0x9, 0x62, 0xFF, 0xEA, 0x9, 0x64, 0xFF, 0xEA, 0x9, 0x66, 0xFF, 0xEA, 0x9, 0x68, 0xFF, 0xEA, 0x9, 0x6A, 0xFF, 0xEA, 0x9, 0x6C, 0xFF, 0xEA, 0xA, 0x1, 0xFF, 0xEA, 0xA, 0xB2, 0xFF, 0xEA, 0xA, 0xB4, 0xFF, 0xEA, 0xA, 0xF4, 0xFF, 0xEA, 0xA, 0xF6, 0xFF, 0xEA, 0xA, 0xF8, 0xFF, 0xEA, 0xA, 0xFA, 0xFF, 0xEA, 0xA, 0xFC, 0xFF, 0xEA, 0xB, 0x3F, 0xFF, 0xEA, 0xB, 0xB5, 0xFF, 0xEA, 0xB, 0xB7, 0xFF, 0xEA, 0xB, 0xB9, 0xFF, 0xEA, 0xB, 0xBB, 0xFF, 0xEA, 0xB, 0xBD, 0xFF, 0xEA, 0x0, 0x24, 0x0, 0x7, 0xFF, 0xE6, 0x0, 0xC, 0xFF, 0xE6, 0x0, 0x5B, 0xFF, 0xF2, 0x0, 0x5E, 0xFF, 0xF2, 0x2, 0x3C, 0xFF, 0xF2, 0x2, 0x8C, 0xFF, 0xF4, 0x2, 0xB0, 0xFF, 0xF2, 0x4, 0x62, 0xFF, 0xE6, 0x4, 0x63, 0xFF, 0xE6, 0x4, 0x65, 0xFF, 0xE6, 0x4, 0x66, 0xFF, 0xE6, 0x4, 0x67, 0xFF, 0xE6, 0x5, 0x67, 0xFF, 0xF2, 0x9, 0x2, 0xFF, 0xF2, 0x9, 0x3, 0xFF, 0xF2, 0x9, 0x71, 0xFF, 0xF2, 0x9, 0xF5, 0xFF, 0xF2, 0xA, 0x18, 0xFF, 0xF2, 0xA, 0x21, 0xFF, 0xF2, 0xA, 0x29, 0xFF, 0xF2, 0xA, 0x2A, 0xFF, 0xE6, 0xA, 0x2B, 0xFF, 0xE6, 0xA, 0x2E, 0xFF, 0xE6, 0xA, 0x3A, 0xFF, 0xF2, 0xA, 0x42, 0xFF, 0xF2, 0xA, 0x64, 0xFF, 0xF2, 0xA, 0x66, 0xFF, 0xF2, 0xA, 0x68, 0xFF, 0xF2, 0xA, 0xC1, 0xFF, 0xF2, 0xA, 0xC3, 0xFF, 0xF2, 0xA, 0xC5, 0xFF, 0xF2, 0xB, 0x3B, 0xFF, 0xF2, 0xB, 0xC0, 0xFF, 0xF2, 0xB, 0xC2, 0xFF, 0xF2, 0xB, 0xCC, 0xFF, 0xF2, 0xB, 0xD6, 0xFF, 0xF2, 0x0, 0x62, 0x0, 0x28, 0xFF, 0xF2, 0x0, 0x2C, 0xFF, 0xF2, 0x0, 0x34, 0xFF, 0xF2, 0x0, 0x36, 0xFF, 0xF2, 0x0, 0x84, 0xFF, 0xF2, 0x0, 0x94, 0xFF, 0xF2, 0x0, 0x9E, 0xFF, 0xF2, 0x0, 0xAA, 0xFF, 0xF2, 0x0, 0xB4, 0xFF, 0xF2, 0x0, 0xB6, 0xFF, 0xF2, 0x0, 0xFF, 0xFF, 0xF2, 0x2, 0x32, 0xFF, 0xF2, 0x2, 0x43, 0x0, 0xE, 0x2, 0x55, 0xFF, 0xF2, 0x2, 0x57, 0xFF, 0xF2, 0x2, 0x66, 0xFF, 0xF2, 0x2, 0x69, 0xFF, 0xF2, 0x2, 0x9E, 0xFF, 0xF2, 0x2, 0xAD, 0xFF, 0xF2, 0x2, 0xB1, 0xFF, 0xF2, 0x2, 0xB3, 0xFF, 0xF2, 0x2, 0xB5, 0xFF, 0xF2, 0x2, 0xB7, 0xFF, 0xF2, 0x2, 0xD8, 0xFF, 0xF2, 0x3, 0x1, 0xFF, 0xF2, 0x5, 0x63, 0xFF, 0xF2, 0x5, 0xE5, 0xFF, 0xF2, 0x5, 0xED, 0xFF, 0xF2, 0x6, 0x1, 0xFF, 0xF2, 0x6, 0x3, 0xFF, 0xF2, 0x6, 0x5, 0xFF, 0xF2, 0x6, 0x31, 0xFF, 0xF2, 0x6, 0x33, 0xFF, 0xF2, 0x6, 0x84, 0xFF, 0xF2, 0x6, 0x86, 0xFF, 0xF2, 0x6, 0x8E, 0xFF, 0xF2, 0x6, 0x90, 0xFF, 0xF2, 0x6, 0xE3, 0xFF, 0xF2, 0x7, 0xCF, 0xFF, 0xF2, 0x7, 0xD0, 0xFF, 0xF2, 0x7, 0xD2, 0xFF, 0xF2, 0x7, 0xD3, 0xFF, 0xF2, 0x8, 0xD4, 0xFF, 0xF2, 0x8, 0xDE, 0xFF, 0xF2, 0x8, 0xDF, 0xFF, 0xF2, 0x8, 0xE0, 0xFF, 0xF2, 0x8, 0xE1, 0xFF, 0xF2, 0x8, 0xE2, 0xFF, 0xF2, 0x9, 0xA, 0xFF, 0xF2, 0x9, 0xC, 0xFF, 0xF2, 0x9, 0xE, 0xFF, 0xF2, 0x9, 0x10, 0xFF, 0xF2, 0x9, 0x1E, 0xFF, 0xF2, 0x9, 0x20, 0xFF, 0xF2, 0x9, 0x22, 0xFF, 0xF2, 0x9, 0x24, 0xFF, 0xF2, 0x9, 0x46, 0xFF, 0xF2, 0x9, 0x48, 0xFF, 0xF2, 0x9, 0x4A, 0xFF, 0xF2, 0x9, 0x7B, 0xFF, 0xF2, 0x9, 0xD9, 0xFF, 0xF2, 0x9, 0xE6, 0xFF, 0xF2, 0xA, 0xC, 0xFF, 0xF2, 0xA, 0xF, 0xFF, 0xF2, 0xA, 0x3C, 0xFF, 0xF2, 0xA, 0x3F, 0xFF, 0xF2, 0xA, 0x5A, 0xFF, 0xF2, 0xA, 0x5C, 0xFF, 0xF2, 0xA, 0x5E, 0xFF, 0xF2, 0xA, 0x5F, 0xFF, 0xF2, 0xA, 0x9A, 0xFF, 0xF2, 0xA, 0x9C, 0xFF, 0xF2, 0xA, 0x9E, 0xFF, 0xF2, 0xA, 0xA0, 0xFF, 0xF2, 0xA, 0xA2, 0xFF, 0xF2, 0xA, 0xA4, 0xFF, 0xF2, 0xA, 0xA6, 0xFF, 0xF2, 0xA, 0xA8, 0xFF, 0xF2, 0xA, 0xAA, 0xFF, 0xF2, 0xA, 0xAC, 0xFF, 0xF2, 0xA, 0xAE, 0xFF, 0xF2, 0xA, 0xB0, 0xFF, 0xF2, 0xA, 0xF2, 0xFF, 0xF2, 0xB, 0x9, 0xFF, 0xF2, 0xB, 0xB, 0xFF, 0xF2, 0xB, 0x20, 0xFF, 0xF2, 0xB, 0x22, 0xFF, 0xF2, 0xB, 0x32, 0xFF, 0xF2, 0xB, 0x34, 0xFF, 0xF2, 0xB, 0x36, 0xFF, 0xF2, 0xB, 0x38, 0xFF, 0xF2, 0xB, 0x49, 0xFF, 0xF2, 0xB, 0x53, 0xFF, 0xF2, 0xB, 0x6B, 0xFF, 0xF2, 0xB, 0x8F, 0xFF, 0xF2, 0xB, 0x91, 0xFF, 0xF2, 0xB, 0x93, 0xFF, 0xF2, 0xB, 0x95, 0xFF, 0xF2, 0x0, 0x63, 0x0, 0x28, 0xFF, 0xE4, 0x0, 0x2C, 0xFF, 0xE4, 0x0, 0x34, 0xFF, 0xE4, 0x0, 0x36, 0xFF, 0xE4, 0x0, 0x84, 0xFF, 0xE4, 0x0, 0x94, 0xFF, 0xE4, 0x0, 0x9E, 0xFF, 0xE4, 0x0, 0xAA, 0xFF, 0xE4, 0x0, 0xB4, 0xFF, 0xE4, 0x0, 0xB6, 0xFF, 0xE4, 0x0, 0xFF, 0xFF, 0xE4, 0x2, 0x32, 0xFF, 0xE4, 0x2, 0x37, 0xFF, 0xBD, 0x2, 0x43, 0x0, 0x11, 0x2, 0x55, 0xFF, 0xE4, 0x2, 0x57, 0xFF, 0xE4, 0x2, 0x66, 0xFF, 0xE4, 0x2, 0x69, 0xFF, 0xE4, 0x2, 0x9E, 0xFF, 0xE4, 0x2, 0xAD, 0xFF, 0xE4, 0x2, 0xB1, 0xFF, 0xE4, 0x2, 0xB3, 0xFF, 0xE4, 0x2, 0xB5, 0xFF, 0xE4, 0x2, 0xB7, 0xFF, 0xE4, 0x2, 0xD8, 0xFF, 0xE4, 0x3, 0x1, 0xFF, 0xE4, 0x5, 0x63, 0xFF, 0xE4, 0x5, 0xE5, 0xFF, 0xE4, 0x5, 0xED, 0xFF, 0xE4, 0x6, 0x1, 0xFF, 0xE4, 0x6, 0x3, 0xFF, 0xE4, 0x6, 0x5, 0xFF, 0xE4, 0x6, 0x31, 0xFF, 0xE4, 0x6, 0x33, 0xFF, 0xE4, 0x6, 0x84, 0xFF, 0xE4, 0x6, 0x86, 0xFF, 0xE4, 0x6, 0x8E, 0xFF, 0xE4, 0x6, 0x90, 0xFF, 0xE4, 0x6, 0xE3, 0xFF, 0xE4, 0x7, 0xCF, 0xFF, 0xE4, 0x7, 0xD0, 0xFF, 0xE4, 0x7, 0xD2, 0xFF, 0xE4, 0x7, 0xD3, 0xFF, 0xE4, 0x8, 0xD4, 0xFF, 0xE4, 0x8, 0xDE, 0xFF, 0xE4, 0x8, 0xDF, 0xFF, 0xE4, 0x8, 0xE0, 0xFF, 0xE4, 0x8, 0xE1, 0xFF, 0xE4, 0x8, 0xE2, 0xFF, 0xE4, 0x9, 0xA, 0xFF, 0xE4, 0x9, 0xC, 0xFF, 0xE4, 0x9, 0xE, 0xFF, 0xE4, 0x9, 0x10, 0xFF, 0xE4, 0x9, 0x1E, 0xFF, 0xE4, 0x9, 0x20, 0xFF, 0xE4, 0x9, 0x22, 0xFF, 0xE4, 0x9, 0x24, 0xFF, 0xE4, 0x9, 0x46, 0xFF, 0xE4, 0x9, 0x48, 0xFF, 0xE4, 0x9, 0x4A, 0xFF, 0xE4, 0x9, 0x7B, 0xFF, 0xE4, 0x9, 0xD9, 0xFF, 0xE4, 0x9, 0xE6, 0xFF, 0xE4, 0xA, 0xC, 0xFF, 0xE4, 0xA, 0xF, 0xFF, 0xE4, 0xA, 0x3C, 0xFF, 0xE4, 0xA, 0x3F, 0xFF, 0xE4, 0xA, 0x5A, 0xFF, 0xE4, 0xA, 0x5C, 0xFF, 0xE4, 0xA, 0x5E, 0xFF, 0xE4, 0xA, 0x5F, 0xFF, 0xE4, 0xA, 0x9A, 0xFF, 0xE4, 0xA, 0x9C, 0xFF, 0xE4, 0xA, 0x9E, 0xFF, 0xE4, 0xA, 0xA0, 0xFF, 0xE4, 0xA, 0xA2, 0xFF, 0xE4, 0xA, 0xA4, 0xFF, 0xE4, 0xA, 0xA6, 0xFF, 0xE4, 0xA, 0xA8, 0xFF, 0xE4, 0xA, 0xAA, 0xFF, 0xE4, 0xA, 0xAC, 0xFF, 0xE4, 0xA, 0xAE, 0xFF, 0xE4, 0xA, 0xB0, 0xFF, 0xE4, 0xA, 0xF2, 0xFF, 0xE4, 0xB, 0x9, 0xFF, 0xE4, 0xB, 0xB, 0xFF, 0xE4, 0xB, 0x20, 0xFF, 0xE4, 0xB, 0x22, 0xFF, 0xE4, 0xB, 0x32, 0xFF, 0xE4, 0xB, 0x34, 0xFF, 0xE4, 0xB, 0x36, 0xFF, 0xE4, 0xB, 0x38, 0xFF, 0xE4, 0xB, 0x49, 0xFF, 0xE4, 0xB, 0x53, 0xFF, 0xE4, 0xB, 0x6B, 0xFF, 0xE4, 0xB, 0x8F, 0xFF, 0xE4, 0xB, 0x91, 0xFF, 0xE4, 0xB, 0x93, 0xFF, 0xE4, 0xB, 0x95, 0xFF, 0xE4, 0x0, 0x4D, 0x0, 0x26, 0xFF, 0xE2, 0x0, 0x3D, 0xFF, 0xCE, 0x0, 0x3E, 0xFF, 0xCF, 0x0, 0xFA, 0xFF, 0xE2, 0x1, 0x3, 0xFF, 0xCF, 0x2, 0x31, 0xFF, 0xE2, 0x2, 0x33, 0xFF, 0xE2, 0x2, 0x43, 0xFF, 0xE0, 0x2, 0x70, 0xFF, 0xCE, 0x2, 0xA3, 0xFF, 0xE2, 0x2, 0xCA, 0xFF, 0xCE, 0x2, 0xDA, 0xFF, 0xCE, 0x2, 0xF4, 0xFF, 0xCE, 0x5, 0xF1, 0xFF, 0xE2, 0x6, 0x6A, 0xFF, 0xE2, 0x6, 0x6C, 0xFF, 0xE2, 0x6, 0x70, 0xFF, 0xE2, 0x6, 0x72, 0xFF, 0xE2, 0x6, 0x74, 0xFF, 0xE2, 0x8, 0xCD, 0xFF, 0xE2, 0x8, 0xCE, 0xFF, 0xE2, 0x8, 0xCF, 0xFF, 0xE2, 0x8, 0xD0, 0xFF, 0xE2, 0x8, 0xD1, 0xFF, 0xE2, 0x8, 0xD2, 0xFF, 0xE2, 0x8, 0xD3, 0xFF, 0xE2, 0x8, 0xE7, 0xFF, 0xCF, 0x9, 0x4, 0xFF, 0xE2, 0x9, 0x6, 0xFF, 0xE2, 0x9, 0x8, 0xFF, 0xE2, 0x9, 0x70, 0xFF, 0xCF, 0x9, 0x72, 0xFF, 0xCF, 0x9, 0xD5, 0xFF, 0xE2, 0x9, 0xDA, 0xFF, 0xCF, 0x9, 0xDD, 0xFF, 0xE2, 0x9, 0xE9, 0xFF, 0xCF, 0x9, 0xEA, 0xFF, 0xCE, 0x9, 0xEC, 0xFF, 0xCF, 0xA, 0x5, 0xFF, 0xE2, 0xA, 0x11, 0xFF, 0xCE, 0xA, 0x28, 0xFF, 0xCF, 0xA, 0x31, 0xFF, 0xE2, 0xA, 0x41, 0xFF, 0xCF, 0xA, 0x44, 0xFF, 0xCE, 0xA, 0x47, 0xFF, 0xE2, 0xA, 0x49, 0xFF, 0xE2, 0xA, 0x52, 0xFF, 0xCE, 0xA, 0x6E, 0xFF, 0xE2, 0xA, 0x70, 0xFF, 0xE2, 0xA, 0x72, 0xFF, 0xE2, 0xA, 0x74, 0xFF, 0xE2, 0xA, 0x76, 0xFF, 0xE2, 0xA, 0x78, 0xFF, 0xE2, 0xA, 0x7A, 0xFF, 0xE2, 0xA, 0x7C, 0xFF, 0xE2, 0xA, 0x7E, 0xFF, 0xE2, 0xA, 0x80, 0xFF, 0xE2, 0xA, 0x82, 0xFF, 0xE2, 0xA, 0x84, 0xFF, 0xE2, 0xA, 0xC0, 0xFF, 0xCF, 0xA, 0xC2, 0xFF, 0xCF, 0xA, 0xC4, 0xFF, 0xCF, 0xA, 0xD6, 0xFF, 0xCF, 0xA, 0xEE, 0xFF, 0xE2, 0xA, 0xFF, 0xFF, 0xE2, 0xB, 0x1, 0xFF, 0xE2, 0xB, 0x14, 0xFF, 0xE2, 0xB, 0x16, 0xFF, 0xE2, 0xB, 0x2E, 0xFF, 0xE2, 0xB, 0xC7, 0xFF, 0xCE, 0xB, 0xC9, 0xFF, 0xCE, 0xB, 0xCB, 0xFF, 0xCF, 0xC, 0x81, 0xFF, 0xE2, 0xC, 0x82, 0xFF, 0xE2, 0xC, 0x85, 0xFF, 0xE2, 0xC, 0xA2, 0xFF, 0xCF, 0xC, 0xA3, 0xFF, 0xCF, 0x0, 0x37, 0x0, 0x11, 0xFF, 0x62, 0x0, 0x13, 0xFF, 0x62, 0x0, 0x26, 0xFF, 0xC9, 0x0, 0xFA, 0xFF, 0xC9, 0x2, 0x31, 0xFF, 0xC9, 0x2, 0x33, 0xFF, 0xC9, 0x2, 0x46, 0xFF, 0xF1, 0x2, 0xA3, 0xFF, 0xC9, 0x4, 0x64, 0xFF, 0x62, 0x4, 0x68, 0xFF, 0x62, 0x4, 0x6F, 0xFF, 0x62, 0x4, 0x70, 0xFF, 0x62, 0x5, 0xF1, 0xFF, 0xC9, 0x6, 0x6A, 0xFF, 0xC9, 0x6, 0x6C, 0xFF, 0xC9, 0x6, 0x70, 0xFF, 0xC9, 0x6, 0x72, 0xFF, 0xC9, 0x6, 0x74, 0xFF, 0xC9, 0x8, 0xCD, 0xFF, 0xC9, 0x8, 0xCE, 0xFF, 0xC9, 0x8, 0xCF, 0xFF, 0xC9, 0x8, 0xD0, 0xFF, 0xC9, 0x8, 0xD1, 0xFF, 0xC9, 0x8, 0xD2, 0xFF, 0xC9, 0x8, 0xD3, 0xFF, 0xC9, 0x9, 0x4, 0xFF, 0xC9, 0x9, 0x6, 0xFF, 0xC9, 0x9, 0x8, 0xFF, 0xC9, 0x9, 0xD5, 0xFF, 0xC9, 0x9, 0xDD, 0xFF, 0xC9, 0xA, 0x5, 0xFF, 0xC9, 0xA, 0x31, 0xFF, 0xC9, 0xA, 0x47, 0xFF, 0xC9, 0xA, 0x49, 0xFF, 0xC9, 0xA, 0x6E, 0xFF, 0xC9, 0xA, 0x70, 0xFF, 0xC9, 0xA, 0x72, 0xFF, 0xC9, 0xA, 0x74, 0xFF, 0xC9, 0xA, 0x76, 0xFF, 0xC9, 0xA, 0x78, 0xFF, 0xC9, 0xA, 0x7A, 0xFF, 0xC9, 0xA, 0x7C, 0xFF, 0xC9, 0xA, 0x7E, 0xFF, 0xC9, 0xA, 0x80, 0xFF, 0xC9, 0xA, 0x82, 0xFF, 0xC9, 0xA, 0x84, 0xFF, 0xC9, 0xA, 0xEE, 0xFF, 0xC9, 0xA, 0xFF, 0xFF, 0xC9, 0xB, 0x1, 0xFF, 0xC9, 0xB, 0x14, 0xFF, 0xC9, 0xB, 0x16, 0xFF, 0xC9, 0xB, 0x2E, 0xFF, 0xC9, 0xC, 0x81, 0xFF, 0xC9, 0xC, 0x82, 0xFF, 0xC9, 0xC, 0x85, 0xFF, 0xC9, 0x0, 0x1, 0x2, 0x43, 0x0, 0x1A, 0x0, 0x2, 0x2, 0x49, 0xFF, 0xF8, 0x2, 0x8C, 0xFF, 0xF5, 0x1, 0x3E, 0x0, 0x48, 0xFF, 0xD9, 0x0, 0x49, 0xFF, 0xD9, 0x0, 0x4A, 0xFF, 0xD9, 0x0, 0x4C, 0xFF, 0xD9, 0x0, 0x52, 0xFF, 0xD1, 0x0, 0x53, 0xFF, 0xD1, 0x0, 0x54, 0xFF, 0xD2, 0x0, 0x55, 0xFF, 0xD1, 0x0, 0x56, 0xFF, 0xD9, 0x0, 0x5A, 0xFF, 0xDA, 0x0, 0x5B, 0xFF, 0xDF, 0x0, 0x5E, 0xFF, 0xDF, 0x0, 0x95, 0xFF, 0xD9, 0x0, 0x9F, 0xFF, 0xD9, 0x0, 0xB5, 0xFF, 0xD9, 0x0, 0xC4, 0xFF, 0xDA, 0x0, 0xDA, 0xFF, 0xD9, 0x0, 0xDC, 0xFF, 0xD9, 0x0, 0xE4, 0xFF, 0xD9, 0x0, 0xEA, 0xFF, 0xD1, 0x1, 0x0, 0xFF, 0xD9, 0x2, 0x28, 0xFF, 0xD1, 0x2, 0x2A, 0xFF, 0xD9, 0x2, 0x3A, 0xFF, 0xD9, 0x2, 0x3C, 0xFF, 0xDF, 0x2, 0x3D, 0xFF, 0xF8, 0x2, 0x3E, 0xFF, 0xE4, 0x2, 0x40, 0xFF, 0xD1, 0x2, 0x41, 0xFF, 0xE9, 0x2, 0x42, 0xFF, 0xE7, 0x2, 0x44, 0xFF, 0xEF, 0x2, 0x45, 0xFF, 0xE5, 0x2, 0x47, 0xFF, 0xD9, 0x2, 0x48, 0xFF, 0xD9, 0x2, 0x49, 0xFF, 0xE1, 0x2, 0x4A, 0xFF, 0xDA, 0x2, 0x4B, 0xFF, 0xCA, 0x2, 0x4C, 0xFF, 0xD0, 0x2, 0x4D, 0xFF, 0xD8, 0x2, 0x56, 0xFF, 0xD2, 0x2, 0x58, 0xFF, 0xD9, 0x2, 0x61, 0xFF, 0xD9, 0x2, 0x82, 0xFF, 0xD1, 0x2, 0x86, 0xFF, 0xD1, 0x2, 0x87, 0xFF, 0xD1, 0x2, 0x89, 0xFF, 0xD1, 0x2, 0x8A, 0xFF, 0xD1, 0x2, 0x8B, 0xFF, 0xD1, 0x2, 0x8D, 0xFF, 0xD9, 0x2, 0x8E, 0xFF, 0xD1, 0x2, 0x90, 0xFF, 0xD1, 0x2, 0x91, 0xFF, 0xD1, 0x2, 0x94, 0xFF, 0xD1, 0x2, 0x96, 0xFF, 0xD1, 0x2, 0x99, 0xFF, 0xD9, 0x2, 0x9B, 0xFF, 0xD1, 0x2, 0xAE, 0xFF, 0xD2, 0x2, 0xB0, 0xFF, 0xDF, 0x2, 0xB4, 0xFF, 0xD9, 0x2, 0xB8, 0xFF, 0xD9, 0x2, 0xC2, 0xFF, 0xD1, 0x2, 0xCD, 0xFF, 0xD1, 0x2, 0xD3, 0xFF, 0xD1, 0x2, 0xD5, 0xFF, 0xD1, 0x2, 0xD9, 0xFF, 0xD9, 0x2, 0xEA, 0xFF, 0xD1, 0x2, 0xEC, 0xFF, 0xD1, 0x2, 0xEE, 0xFF, 0xD1, 0x2, 0xF3, 0xFF, 0xD1, 0x2, 0xF7, 0xFF, 0xD9, 0x2, 0xF8, 0xFF, 0xD9, 0x3, 0x2, 0xFF, 0xD9, 0x3, 0xF, 0xFF, 0xD1, 0x3, 0x13, 0xFF, 0xD1, 0x5, 0x67, 0xFF, 0xDF, 0x5, 0x6E, 0xFF, 0xD9, 0x5, 0x70, 0xFF, 0xD2, 0x5, 0xEE, 0xFF, 0xD2, 0x5, 0xF0, 0xFF, 0xD1, 0x6, 0x0, 0xFF, 0xD1, 0x6, 0x2, 0xFF, 0xD2, 0x6, 0x4, 0xFF, 0xD2, 0x6, 0x6, 0xFF, 0xD2, 0x6, 0x28, 0xFF, 0xD1, 0x6, 0x30, 0xFF, 0xD1, 0x6, 0x32, 0xFF, 0xD2, 0x6, 0x85, 0xFF, 0xD2, 0x6, 0x87, 0xFF, 0xD2, 0x6, 0x8F, 0xFF, 0xD9, 0x6, 0x91, 0xFF, 0xD9, 0x6, 0xA9, 0xFF, 0xD9, 0x6, 0xAB, 0xFF, 0xD1, 0x6, 0xAC, 0xFF, 0xD1, 0x6, 0xCB, 0xFF, 0xD9, 0x6, 0xF7, 0xFF, 0xD9, 0x6, 0xFB, 0xFF, 0xD1, 0x6, 0xFC, 0xFF, 0xD1, 0x6, 0xFD, 0xFF, 0xD1, 0x7, 0x12, 0xFF, 0xD1, 0x8, 0xEF, 0xFF, 0xD9, 0x8, 0xF0, 0xFF, 0xD9, 0x8, 0xF1, 0xFF, 0xD9, 0x8, 0xF2, 0xFF, 0xD9, 0x8, 0xF3, 0xFF, 0xD9, 0x8, 0xF8, 0xFF, 0xD1, 0x8, 0xF9, 0xFF, 0xD2, 0x8, 0xFA, 0xFF, 0xD2, 0x8, 0xFB, 0xFF, 0xD2, 0x8, 0xFC, 0xFF, 0xD2, 0x8, 0xFD, 0xFF, 0xD2, 0x8, 0xFE, 0xFF, 0xDA, 0x8, 0xFF, 0xFF, 0xDA, 0x9, 0x0, 0xFF, 0xDA, 0x9, 0x1, 0xFF, 0xDA, 0x9, 0x2, 0xFF, 0xDF, 0x9, 0x3, 0xFF, 0xDF, 0x9, 0xB, 0xFF, 0xD9, 0x9, 0xD, 0xFF, 0xD9, 0x9, 0xF, 0xFF, 0xD9, 0x9, 0x11, 0xFF, 0xD9, 0x9, 0x13, 0xFF, 0xD9, 0x9, 0x15, 0xFF, 0xD9, 0x9, 0x17, 0xFF, 0xD9, 0x9, 0x19, 0xFF, 0xD9, 0x9, 0x1B, 0xFF, 0xD9, 0x9, 0x1D, 0xFF, 0xD9, 0x9, 0x1F, 0xFF, 0xD9, 0x9, 0x21, 0xFF, 0xD9, 0x9, 0x23, 0xFF, 0xD9, 0x9, 0x25, 0xFF, 0xD9, 0x9, 0x40, 0xFF, 0xD1, 0x9, 0x42, 0xFF, 0xD1, 0x9, 0x44, 0xFF, 0xD1, 0x9, 0x45, 0xFF, 0xD1, 0x9, 0x47, 0xFF, 0xD2, 0x9, 0x49, 0xFF, 0xD2, 0x9, 0x4B, 0xFF, 0xD2, 0x9, 0x63, 0xFF, 0xDA, 0x9, 0x65, 0xFF, 0xDA, 0x9, 0x67, 0xFF, 0xDA, 0x9, 0x69, 0xFF, 0xDA, 0x9, 0x6B, 0xFF, 0xDA, 0x9, 0x6D, 0xFF, 0xDA, 0x9, 0x71, 0xFF, 0xDF, 0x9, 0xED, 0xFF, 0xD9, 0x9, 0xEF, 0xFF, 0xD1, 0x9, 0xF1, 0xFF, 0xDA, 0x9, 0xF3, 0xFF, 0xD2, 0x9, 0xF5, 0xFF, 0xDF, 0x9, 0xF8, 0xFF, 0xDA, 0x9, 0xF9, 0xFF, 0xD2, 0x9, 0xFA, 0xFF, 0xDA, 0xA, 0x13, 0xFF, 0xD9, 0xA, 0x14, 0xFF, 0xD1, 0xA, 0x15, 0xFF, 0xD2, 0xA, 0x16, 0xFF, 0xD1, 0xA, 0x17, 0xFF, 0xD9, 0xA, 0x18, 0xFF, 0xDF, 0xA, 0x1A, 0xFF, 0xD9, 0xA, 0x1B, 0xFF, 0xD1, 0xA, 0x20, 0xFF, 0xD1, 0xA, 0x21, 0xFF, 0xDF, 0xA, 0x29, 0xFF, 0xDF, 0xA, 0x30, 0xFF, 0xD1, 0xA, 0x35, 0xFF, 0xD9, 0xA, 0x36, 0xFF, 0xD1, 0xA, 0x3A, 0xFF, 0xDF, 0xA, 0x3B, 0xFF, 0xD9, 0xA, 0x40, 0xFF, 0xD9, 0xA, 0x42, 0xFF, 0xDF, 0xA, 0x4E, 0xFF, 0xD9, 0xA, 0x50, 0xFF, 0xD9, 0xA, 0x51, 0xFF, 0xD9, 0xA, 0x57, 0xFF, 0xD1, 0xA, 0x59, 0xFF, 0xD1, 0xA, 0x5B, 0xFF, 0xD2, 0xA, 0x5D, 0xFF, 0xD9, 0xA, 0x60, 0xFF, 0xD2, 0xA, 0x64, 0xFF, 0xDF, 0xA, 0x66, 0xFF, 0xDF, 0xA, 0x68, 0xFF, 0xDF, 0xA, 0x6C, 0xFF, 0xD1, 0xA, 0x6D, 0xFF, 0xD9, 0xA, 0x87, 0xFF, 0xD9, 0xA, 0x89, 0xFF, 0xD9, 0xA, 0x8B, 0xFF, 0xD9, 0xA, 0x8D, 0xFF, 0xD9, 0xA, 0x8F, 0xFF, 0xD9, 0xA, 0x91, 0xFF, 0xD9, 0xA, 0x93, 0xFF, 0xD9, 0xA, 0x95, 0xFF, 0xD9, 0xA, 0x9B, 0xFF, 0xD2, 0xA, 0x9D, 0xFF, 0xD2, 0xA, 0x9F, 0xFF, 0xD2, 0xA, 0xA1, 0xFF, 0xD2, 0xA, 0xA3, 0xFF, 0xD2, 0xA, 0xA5, 0xFF, 0xD2, 0xA, 0xA7, 0xFF, 0xD2, 0xA, 0xA9, 0xFF, 0xD9, 0xA, 0xAB, 0xFF, 0xD9, 0xA, 0xAD, 0xFF, 0xD9, 0xA, 0xAF, 0xFF, 0xD2, 0xA, 0xB1, 0xFF, 0xD9, 0xA, 0xB3, 0xFF, 0xDA, 0xA, 0xB5, 0xFF, 0xDA, 0xA, 0xB7, 0xFF, 0xDA, 0xA, 0xB9, 0xFF, 0xDA, 0xA, 0xBB, 0xFF, 0xDA, 0xA, 0xBD, 0xFF, 0xDA, 0xA, 0xBF, 0xFF, 0xDA, 0xA, 0xC1, 0xFF, 0xDF, 0xA, 0xC3, 0xFF, 0xDF, 0xA, 0xC5, 0xFF, 0xDF, 0xA, 0xCC, 0xFF, 0xD1, 0xA, 0xE7, 0xFF, 0xD1, 0xA, 0xED, 0xFF, 0xD1, 0xA, 0xF3, 0xFF, 0xD2, 0xA, 0xF5, 0xFF, 0xDA, 0xA, 0xF7, 0xFF, 0xDA, 0xA, 0xF9, 0xFF, 0xDA, 0xA, 0xFB, 0xFF, 0xDA, 0xA, 0xFD, 0xFF, 0xDA, 0xA, 0xFE, 0xFF, 0xD9, 0xB, 0x6, 0xFF, 0xD9, 0xB, 0xA, 0xFF, 0xD2, 0xB, 0xC, 0xFF, 0xD2, 0xB, 0xF, 0xFF, 0xD9, 0xB, 0x13, 0xFF, 0xD1, 0xB, 0x19, 0xFF, 0xD9, 0xB, 0x1B, 0xFF, 0xD9, 0xB, 0x21, 0xFF, 0xD2, 0xB, 0x23, 0xFF, 0xD2, 0xB, 0x29, 0xFF, 0xDA, 0xB, 0x2B, 0xFF, 0xDA, 0xB, 0x33, 0xFF, 0xD2, 0xB, 0x35, 0xFF, 0xD2, 0xB, 0x37, 0xFF, 0xD2, 0xB, 0x39, 0xFF, 0xD2, 0xB, 0x3B, 0xFF, 0xDF, 0xB, 0x3C, 0xFF, 0xD2, 0xB, 0x42, 0xFF, 0xD9, 0xB, 0x4A, 0xFF, 0xD9, 0xB, 0x54, 0xFF, 0xD9, 0xB, 0x56, 0xFF, 0xD9, 0xB, 0x58, 0xFF, 0xD9, 0xB, 0x5A, 0xFF, 0xD9, 0xB, 0x5C, 0xFF, 0xD9, 0xB, 0x5E, 0xFF, 0xD9, 0xB, 0x60, 0xFF, 0xD9, 0xB, 0x62, 0xFF, 0xD9, 0xB, 0x64, 0xFF, 0xD9, 0xB, 0x66, 0xFF, 0xD9, 0xB, 0x68, 0xFF, 0xD9, 0xB, 0x6C, 0xFF, 0xD9, 0xB, 0x84, 0xFF, 0xD1, 0xB, 0x86, 0xFF, 0xD1, 0xB, 0x88, 0xFF, 0xD1, 0xB, 0x8A, 0xFF, 0xD1, 0xB, 0x8C, 0xFF, 0xD1, 0xB, 0x8E, 0xFF, 0xD1, 0xB, 0x90, 0xFF, 0xD2, 0xB, 0x92, 0xFF, 0xD2, 0xB, 0x94, 0xFF, 0xD2, 0xB, 0x96, 0xFF, 0xD2, 0xB, 0xB6, 0xFF, 0xDA, 0xB, 0xB8, 0xFF, 0xDA, 0xB, 0xBA, 0xFF, 0xDA, 0xB, 0xBC, 0xFF, 0xDA, 0xB, 0xBE, 0xFF, 0xDA, 0xB, 0xC0, 0xFF, 0xDF, 0xB, 0xC2, 0xFF, 0xDF, 0xB, 0xCC, 0xFF, 0xDF, 0xB, 0xD6, 0xFF, 0xDF, 0xB, 0xD8, 0xFF, 0xD9, 0xB, 0xD9, 0xFF, 0xD9, 0xB, 0xDA, 0xFF, 0xD9, 0xB, 0xDB, 0xFF, 0xD9, 0xB, 0xDC, 0xFF, 0xD9, 0xB, 0xDD, 0xFF, 0xD9, 0xB, 0xDE, 0xFF, 0xD9, 0xB, 0xDF, 0xFF, 0xD9, 0xC, 0x14, 0xFF, 0xD2, 0xC, 0x15, 0xFF, 0xD2, 0xC, 0x16, 0xFF, 0xD2, 0xC, 0x17, 0xFF, 0xD2, 0xC, 0x18, 0xFF, 0xD2, 0xC, 0x19, 0xFF, 0xD2, 0xC, 0x20, 0xFF, 0xDA, 0xC, 0x21, 0xFF, 0xDA, 0xC, 0x22, 0xFF, 0xDA, 0xC, 0x23, 0xFF, 0xDA, 0xC, 0x24, 0xFF, 0xDA, 0xC, 0x25, 0xFF, 0xDA, 0xC, 0x26, 0xFF, 0xDA, 0xC, 0x27, 0xFF, 0xDA, 0xC, 0x44, 0xFF, 0xD2, 0xC, 0x45, 0xFF, 0xD2, 0xC, 0x46, 0xFF, 0xDA, 0xC, 0x47, 0xFF, 0xDA, 0xC, 0x4A, 0xFF, 0xD9, 0xC, 0x4B, 0xFF, 0xD9, 0xC, 0x4C, 0xFF, 0xD9, 0xC, 0x4D, 0xFF, 0xD9, 0xC, 0x4E, 0xFF, 0xD9, 0xC, 0x4F, 0xFF, 0xD9, 0xC, 0x50, 0xFF, 0xD9, 0xC, 0x51, 0xFF, 0xD9, 0xC, 0x7A, 0xFF, 0xD9, 0xC, 0x7B, 0xFF, 0xD9, 0xC, 0x7C, 0xFF, 0xD9, 0xC, 0x7D, 0xFF, 0xD9, 0xC, 0x7E, 0xFF, 0xD9, 0xC, 0x7F, 0xFF, 0xD9, 0xC, 0x80, 0xFF, 0xD9, 0xC, 0x9A, 0xFF, 0xDA, 0xC, 0x9B, 0xFF, 0xDA, 0xC, 0x9C, 0xFF, 0xDA, 0xC, 0x9D, 0xFF, 0xDA, 0x0, 0xCE, 0x0, 0x7, 0xFF, 0xD7, 0x0, 0xC, 0xFF, 0xD7, 0x0, 0x48, 0xFF, 0xEF, 0x0, 0x49, 0xFF, 0xEF, 0x0, 0x4A, 0xFF, 0xEF, 0x0, 0x4C, 0xFF, 0xEF, 0x0, 0x56, 0xFF, 0xEF, 0x0, 0x5A, 0xFF, 0xEE, 0x0, 0x5B, 0xFF, 0xD9, 0x0, 0x5E, 0xFF, 0xD9, 0x0, 0x95, 0xFF, 0xEF, 0x0, 0x9F, 0xFF, 0xEF, 0x0, 0xB5, 0xFF, 0xEF, 0x0, 0xC4, 0xFF, 0xEE, 0x0, 0xDA, 0xFF, 0xEF, 0x0, 0xDC, 0xFF, 0xEF, 0x0, 0xE4, 0xFF, 0xEF, 0x1, 0x0, 0xFF, 0xEF, 0x2, 0x2A, 0xFF, 0xEF, 0x2, 0x3A, 0xFF, 0xEF, 0x2, 0x3C, 0xFF, 0xD9, 0x2, 0x41, 0xFF, 0xEA, 0x2, 0x43, 0x0, 0x10, 0x2, 0x45, 0xFF, 0xE8, 0x2, 0x47, 0xFF, 0xEF, 0x2, 0x48, 0xFF, 0xEF, 0x2, 0x49, 0xFF, 0xD0, 0x2, 0x4A, 0xFF, 0xEE, 0x2, 0x4B, 0xFF, 0xE5, 0x2, 0x58, 0xFF, 0xEF, 0x2, 0x61, 0xFF, 0xEF, 0x2, 0x8D, 0xFF, 0xEF, 0x2, 0x99, 0xFF, 0xEF, 0x2, 0xB0, 0xFF, 0xD9, 0x2, 0xB4, 0xFF, 0xEF, 0x2, 0xB8, 0xFF, 0xEF, 0x2, 0xD9, 0xFF, 0xEF, 0x2, 0xF7, 0xFF, 0xEF, 0x2, 0xF8, 0xFF, 0xEF, 0x3, 0x2, 0xFF, 0xEF, 0x4, 0x62, 0xFF, 0xD7, 0x4, 0x63, 0xFF, 0xD7, 0x4, 0x65, 0xFF, 0xD7, 0x4, 0x66, 0xFF, 0xD7, 0x4, 0x67, 0xFF, 0xD7, 0x5, 0x67, 0xFF, 0xD9, 0x5, 0x6E, 0xFF, 0xEF, 0x6, 0x8F, 0xFF, 0xEF, 0x6, 0x91, 0xFF, 0xEF, 0x6, 0xA9, 0xFF, 0xEF, 0x6, 0xCB, 0xFF, 0xEF, 0x6, 0xF7, 0xFF, 0xEF, 0x8, 0xEF, 0xFF, 0xEF, 0x8, 0xF0, 0xFF, 0xEF, 0x8, 0xF1, 0xFF, 0xEF, 0x8, 0xF2, 0xFF, 0xEF, 0x8, 0xF3, 0xFF, 0xEF, 0x8, 0xFE, 0xFF, 0xEE, 0x8, 0xFF, 0xFF, 0xEE, 0x9, 0x0, 0xFF, 0xEE, 0x9, 0x1, 0xFF, 0xEE, 0x9, 0x2, 0xFF, 0xD9, 0x9, 0x3, 0xFF, 0xD9, 0x9, 0xB, 0xFF, 0xEF, 0x9, 0xD, 0xFF, 0xEF, 0x9, 0xF, 0xFF, 0xEF, 0x9, 0x11, 0xFF, 0xEF, 0x9, 0x13, 0xFF, 0xEF, 0x9, 0x15, 0xFF, 0xEF, 0x9, 0x17, 0xFF, 0xEF, 0x9, 0x19, 0xFF, 0xEF, 0x9, 0x1B, 0xFF, 0xEF, 0x9, 0x1D, 0xFF, 0xEF, 0x9, 0x1F, 0xFF, 0xEF, 0x9, 0x21, 0xFF, 0xEF, 0x9, 0x23, 0xFF, 0xEF, 0x9, 0x25, 0xFF, 0xEF, 0x9, 0x63, 0xFF, 0xEE, 0x9, 0x65, 0xFF, 0xEE, 0x9, 0x67, 0xFF, 0xEE, 0x9, 0x69, 0xFF, 0xEE, 0x9, 0x6B, 0xFF, 0xEE, 0x9, 0x6D, 0xFF, 0xEE, 0x9, 0x71, 0xFF, 0xD9, 0x9, 0xED, 0xFF, 0xEF, 0x9, 0xF1, 0xFF, 0xEE, 0x9, 0xF5, 0xFF, 0xD9, 0x9, 0xF8, 0xFF, 0xEE, 0x9, 0xFA, 0xFF, 0xEE, 0xA, 0x13, 0xFF, 0xEF, 0xA, 0x17, 0xFF, 0xEF, 0xA, 0x18, 0xFF, 0xD9, 0xA, 0x1A, 0xFF, 0xEF, 0xA, 0x21, 0xFF, 0xD9, 0xA, 0x29, 0xFF, 0xD9, 0xA, 0x2A, 0xFF, 0xD7, 0xA, 0x2B, 0xFF, 0xD7, 0xA, 0x2E, 0xFF, 0xD7, 0xA, 0x35, 0xFF, 0xEF, 0xA, 0x3A, 0xFF, 0xD9, 0xA, 0x3B, 0xFF, 0xEF, 0xA, 0x40, 0xFF, 0xEF, 0xA, 0x42, 0xFF, 0xD9, 0xA, 0x4E, 0xFF, 0xEF, 0xA, 0x50, 0xFF, 0xEF, 0xA, 0x51, 0xFF, 0xEF, 0xA, 0x5D, 0xFF, 0xEF, 0xA, 0x64, 0xFF, 0xD9, 0xA, 0x66, 0xFF, 0xD9, 0xA, 0x68, 0xFF, 0xD9, 0xA, 0x6D, 0xFF, 0xEF, 0xA, 0x87, 0xFF, 0xEF, 0xA, 0x89, 0xFF, 0xEF, 0xA, 0x8B, 0xFF, 0xEF, 0xA, 0x8D, 0xFF, 0xEF, 0xA, 0x8F, 0xFF, 0xEF, 0xA, 0x91, 0xFF, 0xEF, 0xA, 0x93, 0xFF, 0xEF, 0xA, 0x95, 0xFF, 0xEF, 0xA, 0xA9, 0xFF, 0xEF, 0xA, 0xAB, 0xFF, 0xEF, 0xA, 0xAD, 0xFF, 0xEF, 0xA, 0xB1, 0xFF, 0xEF, 0xA, 0xB3, 0xFF, 0xEE, 0xA, 0xB5, 0xFF, 0xEE, 0xA, 0xB7, 0xFF, 0xEE, 0xA, 0xB9, 0xFF, 0xEE, 0xA, 0xBB, 0xFF, 0xEE, 0xA, 0xBD, 0xFF, 0xEE, 0xA, 0xBF, 0xFF, 0xEE, 0xA, 0xC1, 0xFF, 0xD9, 0xA, 0xC3, 0xFF, 0xD9, 0xA, 0xC5, 0xFF, 0xD9, 0xA, 0xF5, 0xFF, 0xEE, 0xA, 0xF7, 0xFF, 0xEE, 0xA, 0xF9, 0xFF, 0xEE, 0xA, 0xFB, 0xFF, 0xEE, 0xA, 0xFD, 0xFF, 0xEE, 0xA, 0xFE, 0xFF, 0xEF, 0xB, 0x6, 0xFF, 0xEF, 0xB, 0xF, 0xFF, 0xEF, 0xB, 0x19, 0xFF, 0xEF, 0xB, 0x1B, 0xFF, 0xEF, 0xB, 0x29, 0xFF, 0xEE, 0xB, 0x2B, 0xFF, 0xEE, 0xB, 0x3B, 0xFF, 0xD9, 0xB, 0x42, 0xFF, 0xEF, 0xB, 0x4A, 0xFF, 0xEF, 0xB, 0x54, 0xFF, 0xEF, 0xB, 0x56, 0xFF, 0xEF, 0xB, 0x58, 0xFF, 0xEF, 0xB, 0x5A, 0xFF, 0xEF, 0xB, 0x5C, 0xFF, 0xEF, 0xB, 0x5E, 0xFF, 0xEF, 0xB, 0x60, 0xFF, 0xEF, 0xB, 0x62, 0xFF, 0xEF, 0xB, 0x64, 0xFF, 0xEF, 0xB, 0x66, 0xFF, 0xEF, 0xB, 0x68, 0xFF, 0xEF, 0xB, 0x6C, 0xFF, 0xEF, 0xB, 0xB6, 0xFF, 0xEE, 0xB, 0xB8, 0xFF, 0xEE, 0xB, 0xBA, 0xFF, 0xEE, 0xB, 0xBC, 0xFF, 0xEE, 0xB, 0xBE, 0xFF, 0xEE, 0xB, 0xC0, 0xFF, 0xD9, 0xB, 0xC2, 0xFF, 0xD9, 0xB, 0xCC, 0xFF, 0xD9, 0xB, 0xD6, 0xFF, 0xD9, 0xB, 0xD8, 0xFF, 0xEF, 0xB, 0xD9, 0xFF, 0xEF, 0xB, 0xDA, 0xFF, 0xEF, 0xB, 0xDB, 0xFF, 0xEF, 0xB, 0xDC, 0xFF, 0xEF, 0xB, 0xDD, 0xFF, 0xEF, 0xB, 0xDE, 0xFF, 0xEF, 0xB, 0xDF, 0xFF, 0xEF, 0xC, 0x20, 0xFF, 0xEE, 0xC, 0x21, 0xFF, 0xEE, 0xC, 0x22, 0xFF, 0xEE, 0xC, 0x23, 0xFF, 0xEE, 0xC, 0x24, 0xFF, 0xEE, 0xC, 0x25, 0xFF, 0xEE, 0xC, 0x26, 0xFF, 0xEE, 0xC, 0x27, 0xFF, 0xEE, 0xC, 0x46, 0xFF, 0xEE, 0xC, 0x47, 0xFF, 0xEE, 0xC, 0x4A, 0xFF, 0xEF, 0xC, 0x4B, 0xFF, 0xEF, 0xC, 0x4C, 0xFF, 0xEF, 0xC, 0x4D, 0xFF, 0xEF, 0xC, 0x4E, 0xFF, 0xEF, 0xC, 0x4F, 0xFF, 0xEF, 0xC, 0x50, 0xFF, 0xEF, 0xC, 0x51, 0xFF, 0xEF, 0xC, 0x7A, 0xFF, 0xEF, 0xC, 0x7B, 0xFF, 0xEF, 0xC, 0x7C, 0xFF, 0xEF, 0xC, 0x7D, 0xFF, 0xEF, 0xC, 0x7E, 0xFF, 0xEF, 0xC, 0x7F, 0xFF, 0xEF, 0xC, 0x80, 0xFF, 0xEF, 0xC, 0x9A, 0xFF, 0xEE, 0xC, 0x9B, 0xFF, 0xEE, 0xC, 0x9C, 0xFF, 0xEE, 0xC, 0x9D, 0xFF, 0xEE, 0x0, 0x59, 0x0, 0x7, 0xFF, 0xD6, 0x0, 0xC, 0xFF, 0xD6, 0x0, 0x4B, 0xFF, 0xF6, 0x0, 0x5A, 0xFF, 0xFA, 0x0, 0x5B, 0xFF, 0xE6, 0x0, 0x5E, 0xFF, 0xE6, 0x0, 0xC4, 0xFF, 0xFA, 0x2, 0x3C, 0xFF, 0xE6, 0x2, 0x41, 0xFF, 0xF8, 0x2, 0x43, 0x0, 0x7, 0x2, 0x45, 0xFF, 0xF7, 0x2, 0x49, 0xFF, 0xCE, 0x2, 0x4A, 0xFF, 0xFA, 0x2, 0xB0, 0xFF, 0xE6, 0x4, 0x62, 0xFF, 0xD6, 0x4, 0x63, 0xFF, 0xD6, 0x4, 0x65, 0xFF, 0xD6, 0x4, 0x66, 0xFF, 0xD6, 0x4, 0x67, 0xFF, 0xD6, 0x5, 0x67, 0xFF, 0xE6, 0x8, 0xFE, 0xFF, 0xFA, 0x8, 0xFF, 0xFF, 0xFA, 0x9, 0x0, 0xFF, 0xFA, 0x9, 0x1, 0xFF, 0xFA, 0x9, 0x2, 0xFF, 0xE6, 0x9, 0x3, 0xFF, 0xE6, 0x9, 0x63, 0xFF, 0xFA, 0x9, 0x65, 0xFF, 0xFA, 0x9, 0x67, 0xFF, 0xFA, 0x9, 0x69, 0xFF, 0xFA, 0x9, 0x6B, 0xFF, 0xFA, 0x9, 0x6D, 0xFF, 0xFA, 0x9, 0x71, 0xFF, 0xE6, 0x9, 0xF1, 0xFF, 0xFA, 0x9, 0xF5, 0xFF, 0xE6, 0x9, 0xF8, 0xFF, 0xFA, 0x9, 0xFA, 0xFF, 0xFA, 0xA, 0x18, 0xFF, 0xE6, 0xA, 0x21, 0xFF, 0xE6, 0xA, 0x29, 0xFF, 0xE6, 0xA, 0x2A, 0xFF, 0xD6, 0xA, 0x2B, 0xFF, 0xD6, 0xA, 0x2E, 0xFF, 0xD6, 0xA, 0x3A, 0xFF, 0xE6, 0xA, 0x42, 0xFF, 0xE6, 0xA, 0x64, 0xFF, 0xE6, 0xA, 0x66, 0xFF, 0xE6, 0xA, 0x68, 0xFF, 0xE6, 0xA, 0xB3, 0xFF, 0xFA, 0xA, 0xB5, 0xFF, 0xFA, 0xA, 0xB7, 0xFF, 0xFA, 0xA, 0xB9, 0xFF, 0xFA, 0xA, 0xBB, 0xFF, 0xFA, 0xA, 0xBD, 0xFF, 0xFA, 0xA, 0xBF, 0xFF, 0xFA, 0xA, 0xC1, 0xFF, 0xE6, 0xA, 0xC3, 0xFF, 0xE6, 0xA, 0xC5, 0xFF, 0xE6, 0xA, 0xF5, 0xFF, 0xFA, 0xA, 0xF7, 0xFF, 0xFA, 0xA, 0xF9, 0xFF, 0xFA, 0xA, 0xFB, 0xFF, 0xFA, 0xA, 0xFD, 0xFF, 0xFA, 0xB, 0x29, 0xFF, 0xFA, 0xB, 0x2B, 0xFF, 0xFA, 0xB, 0x3B, 0xFF, 0xE6, 0xB, 0xB6, 0xFF, 0xFA, 0xB, 0xB8, 0xFF, 0xFA, 0xB, 0xBA, 0xFF, 0xFA, 0xB, 0xBC, 0xFF, 0xFA, 0xB, 0xBE, 0xFF, 0xFA, 0xB, 0xC0, 0xFF, 0xE6, 0xB, 0xC2, 0xFF, 0xE6, 0xB, 0xCC, 0xFF, 0xE6, 0xB, 0xD6, 0xFF, 0xE6, 0xC, 0x20, 0xFF, 0xFA, 0xC, 0x21, 0xFF, 0xFA, 0xC, 0x22, 0xFF, 0xFA, 0xC, 0x23, 0xFF, 0xFA, 0xC, 0x24, 0xFF, 0xFA, 0xC, 0x25, 0xFF, 0xFA, 0xC, 0x26, 0xFF, 0xFA, 0xC, 0x27, 0xFF, 0xFA, 0xC, 0x46, 0xFF, 0xFA, 0xC, 0x47, 0xFF, 0xFA, 0xC, 0x9A, 0xFF, 0xFA, 0xC, 0x9B, 0xFF, 0xFA, 0xC, 0x9C, 0xFF, 0xFA, 0xC, 0x9D, 0xFF, 0xFA, 0x0, 0x7C, 0x0, 0x11, 0x0, 0x11, 0x0, 0x13, 0x0, 0x11, 0x0, 0x48, 0xFF, 0xE5, 0x0, 0x49, 0xFF, 0xE5, 0x0, 0x4A, 0xFF, 0xE5, 0x0, 0x4C, 0xFF, 0xE5, 0x0, 0x56, 0xFF, 0xE5, 0x0, 0x95, 0xFF, 0xE5, 0x0, 0x9F, 0xFF, 0xE5, 0x0, 0xB5, 0xFF, 0xE5, 0x0, 0xDA, 0xFF, 0xE5, 0x0, 0xDC, 0xFF, 0xE5, 0x0, 0xE4, 0xFF, 0xE5, 0x1, 0x0, 0xFF, 0xE5, 0x2, 0x2A, 0xFF, 0xE5, 0x2, 0x3A, 0xFF, 0xE5, 0x2, 0x43, 0x0, 0x10, 0x2, 0x47, 0xFF, 0xE5, 0x2, 0x48, 0xFF, 0xE5, 0x2, 0x58, 0xFF, 0xE5, 0x2, 0x61, 0xFF, 0xE5, 0x2, 0x8D, 0xFF, 0xE5, 0x2, 0x99, 0xFF, 0xE5, 0x2, 0xB4, 0xFF, 0xE5, 0x2, 0xB8, 0xFF, 0xE5, 0x2, 0xD9, 0xFF, 0xE5, 0x2, 0xF7, 0xFF, 0xE5, 0x2, 0xF8, 0xFF, 0xE5, 0x3, 0x2, 0xFF, 0xE5, 0x4, 0x64, 0x0, 0x11, 0x4, 0x68, 0x0, 0x11, 0x4, 0x6F, 0x0, 0x11, 0x4, 0x70, 0x0, 0x11, 0x5, 0x6E, 0xFF, 0xE5, 0x6, 0x8F, 0xFF, 0xE5, 0x6, 0x91, 0xFF, 0xE5, 0x6, 0xA9, 0xFF, 0xE5, 0x6, 0xCB, 0xFF, 0xE5, 0x6, 0xF7, 0xFF, 0xE5, 0x8, 0xEF, 0xFF, 0xE5, 0x8, 0xF0, 0xFF, 0xE5, 0x8, 0xF1, 0xFF, 0xE5, 0x8, 0xF2, 0xFF, 0xE5, 0x8, 0xF3, 0xFF, 0xE5, 0x9, 0xB, 0xFF, 0xE5, 0x9, 0xD, 0xFF, 0xE5, 0x9, 0xF, 0xFF, 0xE5, 0x9, 0x11, 0xFF, 0xE5, 0x9, 0x13, 0xFF, 0xE5, 0x9, 0x15, 0xFF, 0xE5, 0x9, 0x17, 0xFF, 0xE5, 0x9, 0x19, 0xFF, 0xE5, 0x9, 0x1B, 0xFF, 0xE5, 0x9, 0x1D, 0xFF, 0xE5, 0x9, 0x1F, 0xFF, 0xE5, 0x9, 0x21, 0xFF, 0xE5, 0x9, 0x23, 0xFF, 0xE5, 0x9, 0x25, 0xFF, 0xE5, 0x9, 0xED, 0xFF, 0xE5, 0xA, 0x13, 0xFF, 0xE5, 0xA, 0x17, 0xFF, 0xE5, 0xA, 0x1A, 0xFF, 0xE5, 0xA, 0x35, 0xFF, 0xE5, 0xA, 0x3B, 0xFF, 0xE5, 0xA, 0x40, 0xFF, 0xE5, 0xA, 0x4E, 0xFF, 0xE5, 0xA, 0x50, 0xFF, 0xE5, 0xA, 0x51, 0xFF, 0xE5, 0xA, 0x5D, 0xFF, 0xE5, 0xA, 0x6D, 0xFF, 0xE5, 0xA, 0x87, 0xFF, 0xE5, 0xA, 0x89, 0xFF, 0xE5, 0xA, 0x8B, 0xFF, 0xE5, 0xA, 0x8D, 0xFF, 0xE5, 0xA, 0x8F, 0xFF, 0xE5, 0xA, 0x91, 0xFF, 0xE5, 0xA, 0x93, 0xFF, 0xE5, 0xA, 0x95, 0xFF, 0xE5, 0xA, 0xA9, 0xFF, 0xE5, 0xA, 0xAB, 0xFF, 0xE5, 0xA, 0xAD, 0xFF, 0xE5, 0xA, 0xB1, 0xFF, 0xE5, 0xA, 0xFE, 0xFF, 0xE5, 0xB, 0x6, 0xFF, 0xE5, 0xB, 0xF, 0xFF, 0xE5, 0xB, 0x19, 0xFF, 0xE5, 0xB, 0x1B, 0xFF, 0xE5, 0xB, 0x42, 0xFF, 0xE5, 0xB, 0x4A, 0xFF, 0xE5, 0xB, 0x54, 0xFF, 0xE5, 0xB, 0x56, 0xFF, 0xE5, 0xB, 0x58, 0xFF, 0xE5, 0xB, 0x5A, 0xFF, 0xE5, 0xB, 0x5C, 0xFF, 0xE5, 0xB, 0x5E, 0xFF, 0xE5, 0xB, 0x60, 0xFF, 0xE5, 0xB, 0x62, 0xFF, 0xE5, 0xB, 0x64, 0xFF, 0xE5, 0xB, 0x66, 0xFF, 0xE5, 0xB, 0x68, 0xFF, 0xE5, 0xB, 0x6C, 0xFF, 0xE5, 0xB, 0xD8, 0xFF, 0xE5, 0xB, 0xD9, 0xFF, 0xE5, 0xB, 0xDA, 0xFF, 0xE5, 0xB, 0xDB, 0xFF, 0xE5, 0xB, 0xDC, 0xFF, 0xE5, 0xB, 0xDD, 0xFF, 0xE5, 0xB, 0xDE, 0xFF, 0xE5, 0xB, 0xDF, 0xFF, 0xE5, 0xC, 0x4A, 0xFF, 0xE5, 0xC, 0x4B, 0xFF, 0xE5, 0xC, 0x4C, 0xFF, 0xE5, 0xC, 0x4D, 0xFF, 0xE5, 0xC, 0x4E, 0xFF, 0xE5, 0xC, 0x4F, 0xFF, 0xE5, 0xC, 0x50, 0xFF, 0xE5, 0xC, 0x51, 0xFF, 0xE5, 0xC, 0x7A, 0xFF, 0xE5, 0xC, 0x7B, 0xFF, 0xE5, 0xC, 0x7C, 0xFF, 0xE5, 0xC, 0x7D, 0xFF, 0xE5, 0xC, 0x7E, 0xFF, 0xE5, 0xC, 0x7F, 0xFF, 0xE5, 0xC, 0x80, 0xFF, 0xE5, 0x0, 0x6, 0x2, 0x49, 0xFF, 0xE8, 0x2, 0x83, 0xFF, 0xDB, 0x2, 0x8C, 0xFF, 0xDD, 0x2, 0x94, 0xFF, 0xF4, 0x2, 0xD1, 0xFF, 0xEA, 0x3, 0x4, 0xFF, 0xEA, 0x0, 0x1, 0x2, 0x8C, 0xFF, 0xD6, 0x0, 0x1, 0x2, 0x49, 0x0, 0x19, 0x1, 0x17, 0x0, 0x7, 0x0, 0xD, 0x0, 0xC, 0x0, 0xD, 0x0, 0x48, 0xFF, 0xE6, 0x0, 0x49, 0xFF, 0xE6, 0x0, 0x4A, 0xFF, 0xE6, 0x0, 0x4B, 0x0, 0xD, 0x0, 0x4C, 0xFF, 0xE6, 0x0, 0x54, 0xFF, 0xE8, 0x0, 0x56, 0xFF, 0xE6, 0x0, 0x5B, 0x0, 0xC, 0x0, 0x5E, 0x0, 0xC, 0x0, 0x95, 0xFF, 0xE6, 0x0, 0x9F, 0xFF, 0xE6, 0x0, 0xB5, 0xFF, 0xE6, 0x0, 0xDA, 0xFF, 0xE6, 0x0, 0xDC, 0xFF, 0xE6, 0x0, 0xE4, 0xFF, 0xE6, 0x1, 0x0, 0xFF, 0xE6, 0x2, 0x2A, 0xFF, 0xE6, 0x2, 0x3A, 0xFF, 0xE6, 0x2, 0x3C, 0x0, 0xC, 0x2, 0x3D, 0xFF, 0xF8, 0x2, 0x43, 0xFF, 0xB7, 0x2, 0x45, 0x0, 0xC, 0x2, 0x47, 0xFF, 0xE6, 0x2, 0x48, 0xFF, 0xE6, 0x2, 0x49, 0x0, 0xD, 0x2, 0x56, 0xFF, 0xE8, 0x2, 0x58, 0xFF, 0xE6, 0x2, 0x61, 0xFF, 0xE6, 0x2, 0x8D, 0xFF, 0xE6, 0x2, 0x99, 0xFF, 0xE6, 0x2, 0xAE, 0xFF, 0xE8, 0x2, 0xB0, 0x0, 0xC, 0x2, 0xB4, 0xFF, 0xE6, 0x2, 0xB8, 0xFF, 0xE6, 0x2, 0xD9, 0xFF, 0xE6, 0x2, 0xF7, 0xFF, 0xE6, 0x2, 0xF8, 0xFF, 0xE6, 0x3, 0x2, 0xFF, 0xE6, 0x4, 0x62, 0x0, 0xD, 0x4, 0x63, 0x0, 0xD, 0x4, 0x65, 0x0, 0xD, 0x4, 0x66, 0x0, 0xD, 0x4, 0x67, 0x0, 0xD, 0x5, 0x67, 0x0, 0xC, 0x5, 0x6E, 0xFF, 0xE6, 0x5, 0x70, 0xFF, 0xE8, 0x5, 0xEE, 0xFF, 0xE8, 0x6, 0x2, 0xFF, 0xE8, 0x6, 0x4, 0xFF, 0xE8, 0x6, 0x6, 0xFF, 0xE8, 0x6, 0x32, 0xFF, 0xE8, 0x6, 0x85, 0xFF, 0xE8, 0x6, 0x87, 0xFF, 0xE8, 0x6, 0x8F, 0xFF, 0xE6, 0x6, 0x91, 0xFF, 0xE6, 0x6, 0xA9, 0xFF, 0xE6, 0x6, 0xCB, 0xFF, 0xE6, 0x6, 0xF7, 0xFF, 0xE6, 0x7, 0x4F, 0x0, 0xE, 0x7, 0x52, 0x0, 0xE, 0x7, 0x54, 0x0, 0xF, 0x7, 0x55, 0xFF, 0xF4, 0x7, 0x57, 0xFF, 0xEA, 0x7, 0x59, 0xFF, 0xEC, 0x7, 0x61, 0xFF, 0xEA, 0x7, 0x67, 0xFF, 0xB9, 0x7, 0x68, 0xFF, 0xEC, 0x7, 0x69, 0xFF, 0xB9, 0x7, 0x70, 0x0, 0xF, 0x7, 0x71, 0xFF, 0xEC, 0x7, 0x74, 0x0, 0xF, 0x7, 0x8C, 0x0, 0xF, 0x7, 0x8D, 0xFF, 0xEC, 0x7, 0x8E, 0x0, 0xE, 0x7, 0x90, 0x0, 0xF, 0x7, 0x96, 0xFF, 0xEC, 0x7, 0xAF, 0xFF, 0xED, 0x7, 0xB1, 0xFF, 0xB9, 0x8, 0xEF, 0xFF, 0xE6, 0x8, 0xF0, 0xFF, 0xE6, 0x8, 0xF1, 0xFF, 0xE6, 0x8, 0xF2, 0xFF, 0xE6, 0x8, 0xF3, 0xFF, 0xE6, 0x8, 0xF9, 0xFF, 0xE8, 0x8, 0xFA, 0xFF, 0xE8, 0x8, 0xFB, 0xFF, 0xE8, 0x8, 0xFC, 0xFF, 0xE8, 0x8, 0xFD, 0xFF, 0xE8, 0x9, 0x2, 0x0, 0xC, 0x9, 0x3, 0x0, 0xC, 0x9, 0xB, 0xFF, 0xE6, 0x9, 0xD, 0xFF, 0xE6, 0x9, 0xF, 0xFF, 0xE6, 0x9, 0x11, 0xFF, 0xE6, 0x9, 0x13, 0xFF, 0xE6, 0x9, 0x15, 0xFF, 0xE6, 0x9, 0x17, 0xFF, 0xE6, 0x9, 0x19, 0xFF, 0xE6, 0x9, 0x1B, 0xFF, 0xE6, 0x9, 0x1D, 0xFF, 0xE6, 0x9, 0x1F, 0xFF, 0xE6, 0x9, 0x21, 0xFF, 0xE6, 0x9, 0x23, 0xFF, 0xE6, 0x9, 0x25, 0xFF, 0xE6, 0x9, 0x47, 0xFF, 0xE8, 0x9, 0x49, 0xFF, 0xE8, 0x9, 0x4B, 0xFF, 0xE8, 0x9, 0x71, 0x0, 0xC, 0x9, 0x80, 0xFF, 0xB9, 0x9, 0x81, 0xFF, 0xB9, 0x9, 0x82, 0xFF, 0xB9, 0x9, 0x83, 0xFF, 0xB9, 0x9, 0x84, 0xFF, 0xB9, 0x9, 0x85, 0xFF, 0xB9, 0x9, 0x86, 0xFF, 0xB9, 0x9, 0x87, 0xFF, 0xEC, 0x9, 0x91, 0xFF, 0xEC, 0x9, 0x92, 0xFF, 0xEC, 0x9, 0x93, 0xFF, 0xEC, 0x9, 0x94, 0xFF, 0xEC, 0x9, 0x95, 0xFF, 0xEC, 0x9, 0x9A, 0x0, 0xE, 0x9, 0x9B, 0xFF, 0xB9, 0x9, 0x9C, 0xFF, 0xB9, 0x9, 0x9D, 0xFF, 0xB9, 0x9, 0x9E, 0xFF, 0xEC, 0x9, 0x9F, 0xFF, 0xEC, 0x9, 0xA0, 0xFF, 0xEC, 0x9, 0xA1, 0xFF, 0xEC, 0x9, 0xA8, 0xFF, 0xEC, 0x9, 0xA9, 0xFF, 0xEC, 0x9, 0xAA, 0xFF, 0xEC, 0x9, 0xAB, 0xFF, 0xEC, 0x9, 0xBB, 0xFF, 0xEC, 0x9, 0xBC, 0xFF, 0xEC, 0x9, 0xBD, 0xFF, 0xEC, 0x9, 0xBE, 0xFF, 0xEC, 0x9, 0xC2, 0xFF, 0xF4, 0x9, 0xC3, 0xFF, 0xF4, 0x9, 0xC4, 0xFF, 0xF4, 0x9, 0xC5, 0xFF, 0xF4, 0x9, 0xC7, 0x0, 0xF, 0x9, 0xD0, 0x0, 0xE, 0x9, 0xD1, 0x0, 0xE, 0x9, 0xED, 0xFF, 0xE6, 0x9, 0xF3, 0xFF, 0xE8, 0x9, 0xF5, 0x0, 0xC, 0x9, 0xF9, 0xFF, 0xE8, 0xA, 0x13, 0xFF, 0xE6, 0xA, 0x15, 0xFF, 0xE8, 0xA, 0x17, 0xFF, 0xE6, 0xA, 0x18, 0x0, 0xC, 0xA, 0x1A, 0xFF, 0xE6, 0xA, 0x21, 0x0, 0xC, 0xA, 0x29, 0x0, 0xC, 0xA, 0x2A, 0x0, 0xD, 0xA, 0x2B, 0x0, 0xD, 0xA, 0x2E, 0x0, 0xD, 0xA, 0x35, 0xFF, 0xE6, 0xA, 0x3A, 0x0, 0xC, 0xA, 0x3B, 0xFF, 0xE6, 0xA, 0x40, 0xFF, 0xE6, 0xA, 0x42, 0x0, 0xC, 0xA, 0x4E, 0xFF, 0xE6, 0xA, 0x50, 0xFF, 0xE6, 0xA, 0x51, 0xFF, 0xE6, 0xA, 0x5B, 0xFF, 0xE8, 0xA, 0x5D, 0xFF, 0xE6, 0xA, 0x60, 0xFF, 0xE8, 0xA, 0x64, 0x0, 0xC, 0xA, 0x66, 0x0, 0xC, 0xA, 0x68, 0x0, 0xC, 0xA, 0x6D, 0xFF, 0xE6, 0xA, 0x87, 0xFF, 0xE6, 0xA, 0x89, 0xFF, 0xE6, 0xA, 0x8B, 0xFF, 0xE6, 0xA, 0x8D, 0xFF, 0xE6, 0xA, 0x8F, 0xFF, 0xE6, 0xA, 0x91, 0xFF, 0xE6, 0xA, 0x93, 0xFF, 0xE6, 0xA, 0x95, 0xFF, 0xE6, 0xA, 0x9B, 0xFF, 0xE8, 0xA, 0x9D, 0xFF, 0xE8, 0xA, 0x9F, 0xFF, 0xE8, 0xA, 0xA1, 0xFF, 0xE8, 0xA, 0xA3, 0xFF, 0xE8, 0xA, 0xA5, 0xFF, 0xE8, 0xA, 0xA7, 0xFF, 0xE8, 0xA, 0xA9, 0xFF, 0xE6, 0xA, 0xAB, 0xFF, 0xE6, 0xA, 0xAD, 0xFF, 0xE6, 0xA, 0xAF, 0xFF, 0xE8, 0xA, 0xB1, 0xFF, 0xE6, 0xA, 0xC1, 0x0, 0xC, 0xA, 0xC3, 0x0, 0xC, 0xA, 0xC5, 0x0, 0xC, 0xA, 0xF3, 0xFF, 0xE8, 0xA, 0xFE, 0xFF, 0xE6, 0xB, 0x6, 0xFF, 0xE6, 0xB, 0xA, 0xFF, 0xE8, 0xB, 0xC, 0xFF, 0xE8, 0xB, 0xF, 0xFF, 0xE6, 0xB, 0x19, 0xFF, 0xE6, 0xB, 0x1B, 0xFF, 0xE6, 0xB, 0x21, 0xFF, 0xE8, 0xB, 0x23, 0xFF, 0xE8, 0xB, 0x33, 0xFF, 0xE8, 0xB, 0x35, 0xFF, 0xE8, 0xB, 0x37, 0xFF, 0xE8, 0xB, 0x39, 0xFF, 0xE8, 0xB, 0x3B, 0x0, 0xC, 0xB, 0x3C, 0xFF, 0xE8, 0xB, 0x42, 0xFF, 0xE6, 0xB, 0x4A, 0xFF, 0xE6, 0xB, 0x54, 0xFF, 0xE6, 0xB, 0x56, 0xFF, 0xE6, 0xB, 0x58, 0xFF, 0xE6, 0xB, 0x5A, 0xFF, 0xE6, 0xB, 0x5C, 0xFF, 0xE6, 0xB, 0x5E, 0xFF, 0xE6, 0xB, 0x60, 0xFF, 0xE6, 0xB, 0x62, 0xFF, 0xE6, 0xB, 0x64, 0xFF, 0xE6, 0xB, 0x66, 0xFF, 0xE6, 0xB, 0x68, 0xFF, 0xE6, 0xB, 0x6C, 0xFF, 0xE6, 0xB, 0x90, 0xFF, 0xE8, 0xB, 0x92, 0xFF, 0xE8, 0xB, 0x94, 0xFF, 0xE8, 0xB, 0x96, 0xFF, 0xE8, 0xB, 0xC0, 0x0, 0xC, 0xB, 0xC2, 0x0, 0xC, 0xB, 0xCC, 0x0, 0xC, 0xB, 0xD6, 0x0, 0xC, 0xB, 0xD8, 0xFF, 0xE6, 0xB, 0xD9, 0xFF, 0xE6, 0xB, 0xDA, 0xFF, 0xE6, 0xB, 0xDB, 0xFF, 0xE6, 0xB, 0xDC, 0xFF, 0xE6, 0xB, 0xDD, 0xFF, 0xE6, 0xB, 0xDE, 0xFF, 0xE6, 0xB, 0xDF, 0xFF, 0xE6, 0xC, 0x14, 0xFF, 0xE8, 0xC, 0x15, 0xFF, 0xE8, 0xC, 0x16, 0xFF, 0xE8, 0xC, 0x17, 0xFF, 0xE8, 0xC, 0x18, 0xFF, 0xE8, 0xC, 0x19, 0xFF, 0xE8, 0xC, 0x44, 0xFF, 0xE8, 0xC, 0x45, 0xFF, 0xE8, 0xC, 0x4A, 0xFF, 0xE6, 0xC, 0x4B, 0xFF, 0xE6, 0xC, 0x4C, 0xFF, 0xE6, 0xC, 0x4D, 0xFF, 0xE6, 0xC, 0x4E, 0xFF, 0xE6, 0xC, 0x4F, 0xFF, 0xE6, 0xC, 0x50, 0xFF, 0xE6, 0xC, 0x51, 0xFF, 0xE6, 0xC, 0x7A, 0xFF, 0xE6, 0xC, 0x7B, 0xFF, 0xE6, 0xC, 0x7C, 0xFF, 0xE6, 0xC, 0x7D, 0xFF, 0xE6, 0xC, 0x7E, 0xFF, 0xE6, 0xC, 0x7F, 0xFF, 0xE6, 0xC, 0x80, 0xFF, 0xE6, 0xC, 0xB7, 0xFF, 0xB9, 0xC, 0xBB, 0xFF, 0xEC, 0xC, 0xBC, 0x0, 0xE, 0xC, 0xBE, 0xFF, 0xB9, 0xC, 0xCA, 0x0, 0xE, 0xC, 0xCD, 0x0, 0xE, 0xC, 0xD6, 0xFF, 0xB9, 0xC, 0xDD, 0xFF, 0xEC, 0xC, 0xE0, 0xFF, 0xEC, 0xC, 0xE1, 0x0, 0xF, 0xC, 0xE5, 0xFF, 0xEC, 0xC, 0xE6, 0x0, 0xE, 0x0, 0x1, 0x2, 0x8C, 0xFF, 0xE5, 0x0, 0x17, 0x0, 0x5D, 0xFF, 0xEC, 0x0, 0x5F, 0xFF, 0xEC, 0x0, 0xCA, 0xFF, 0xEC, 0x0, 0xF5, 0xFF, 0xEC, 0x2, 0x84, 0xFF, 0xEC, 0x2, 0x8C, 0xFF, 0xC1, 0x2, 0xCB, 0xFF, 0xEC, 0x2, 0xDB, 0xFF, 0xEC, 0x2, 0xF5, 0xFF, 0xEC, 0x5, 0x62, 0xFF, 0xEC, 0x5, 0xDA, 0xFF, 0xEC, 0x5, 0xDC, 0xFF, 0xEC, 0x9, 0x74, 0xFF, 0xEC, 0x9, 0x76, 0xFF, 0xEC, 0x9, 0x78, 0xFF, 0xEC, 0xA, 0x19, 0xFF, 0xEC, 0xA, 0x45, 0xFF, 0xEC, 0xA, 0x53, 0xFF, 0xEC, 0xB, 0xC8, 0xFF, 0xEC, 0xB, 0xCA, 0xFF, 0xEC, 0xB, 0xCE, 0xFF, 0xEC, 0xB, 0xD0, 0xFF, 0xEC, 0xB, 0xD2, 0xFF, 0xEC, 0x0, 0x16, 0x0, 0x5D, 0xFF, 0xF1, 0x0, 0x5F, 0xFF, 0xF1, 0x0, 0xCA, 0xFF, 0xF1, 0x0, 0xF5, 0xFF, 0xF1, 0x2, 0x84, 0xFF, 0xF1, 0x2, 0xCB, 0xFF, 0xF1, 0x2, 0xDB, 0xFF, 0xF1, 0x2, 0xF5, 0xFF, 0xF1, 0x5, 0x62, 0xFF, 0xF1, 0x5, 0xDA, 0xFF, 0xF1, 0x5, 0xDC, 0xFF, 0xF1, 0x9, 0x74, 0xFF, 0xF1, 0x9, 0x76, 0xFF, 0xF1, 0x9, 0x78, 0xFF, 0xF1, 0xA, 0x19, 0xFF, 0xF1, 0xA, 0x45, 0xFF, 0xF1, 0xA, 0x53, 0xFF, 0xF1, 0xB, 0xC8, 0xFF, 0xF1, 0xB, 0xCA, 0xFF, 0xF1, 0xB, 0xCE, 0xFF, 0xF1, 0xB, 0xD0, 0xFF, 0xF1, 0xB, 0xD2, 0xFF, 0xF1, 0x0, 0x2F, 0x0, 0x5B, 0xFF, 0xF3, 0x0, 0x5D, 0xFF, 0xF1, 0x0, 0x5E, 0xFF, 0xF3, 0x0, 0x5F, 0xFF, 0xF2, 0x0, 0xCA, 0xFF, 0xF2, 0x0, 0xF5, 0xFF, 0xF2, 0x2, 0x3C, 0xFF, 0xF3, 0x2, 0x84, 0xFF, 0xF1, 0x2, 0xB0, 0xFF, 0xF3, 0x2, 0xCB, 0xFF, 0xF1, 0x2, 0xDB, 0xFF, 0xF1, 0x2, 0xF5, 0xFF, 0xF1, 0x5, 0x62, 0xFF, 0xF2, 0x5, 0x67, 0xFF, 0xF3, 0x5, 0xDA, 0xFF, 0xF2, 0x5, 0xDC, 0xFF, 0xF2, 0x9, 0x2, 0xFF, 0xF3, 0x9, 0x3, 0xFF, 0xF3, 0x9, 0x71, 0xFF, 0xF3, 0x9, 0x74, 0xFF, 0xF2, 0x9, 0x76, 0xFF, 0xF2, 0x9, 0x78, 0xFF, 0xF2, 0x9, 0xF5, 0xFF, 0xF3, 0xA, 0x18, 0xFF, 0xF3, 0xA, 0x19, 0xFF, 0xF1, 0xA, 0x21, 0xFF, 0xF3, 0xA, 0x29, 0xFF, 0xF3, 0xA, 0x3A, 0xFF, 0xF3, 0xA, 0x42, 0xFF, 0xF3, 0xA, 0x45, 0xFF, 0xF1, 0xA, 0x53, 0xFF, 0xF1, 0xA, 0x64, 0xFF, 0xF3, 0xA, 0x66, 0xFF, 0xF3, 0xA, 0x68, 0xFF, 0xF3, 0xA, 0xC1, 0xFF, 0xF3, 0xA, 0xC3, 0xFF, 0xF3, 0xA, 0xC5, 0xFF, 0xF3, 0xB, 0x3B, 0xFF, 0xF3, 0xB, 0xC0, 0xFF, 0xF3, 0xB, 0xC2, 0xFF, 0xF3, 0xB, 0xC8, 0xFF, 0xF1, 0xB, 0xCA, 0xFF, 0xF1, 0xB, 0xCC, 0xFF, 0xF3, 0xB, 0xCE, 0xFF, 0xF2, 0xB, 0xD0, 0xFF, 0xF2, 0xB, 0xD2, 0xFF, 0xF2, 0xB, 0xD6, 0xFF, 0xF3, 0x0, 0x77, 0x0, 0x7, 0xFF, 0xBE, 0x0, 0xC, 0xFF, 0xBE, 0x0, 0x39, 0xFF, 0xAF, 0x0, 0x3B, 0xFF, 0xBB, 0x0, 0x3D, 0xFF, 0xEF, 0x0, 0x3E, 0xFF, 0xB3, 0x0, 0x5B, 0xFF, 0xE4, 0x0, 0x5D, 0xFF, 0xEE, 0x0, 0x5E, 0xFF, 0xE4, 0x0, 0xC2, 0xFF, 0xAF, 0x1, 0x3, 0xFF, 0xB3, 0x2, 0x3C, 0xFF, 0xE4, 0x2, 0x68, 0xFF, 0xAF, 0x2, 0x6C, 0xFF, 0xAF, 0x2, 0x70, 0xFF, 0xEF, 0x2, 0x74, 0xFF, 0xD3, 0x2, 0x77, 0xFF, 0xCD, 0x2, 0x7C, 0xFF, 0xE5, 0x2, 0x84, 0xFF, 0xEE, 0x2, 0x8C, 0xFF, 0xC4, 0x2, 0x94, 0xFF, 0xE1, 0x2, 0x9F, 0xFF, 0xE3, 0x2, 0xAF, 0xFF, 0xBB, 0x2, 0xB0, 0xFF, 0xE4, 0x2, 0xB6, 0xFF, 0xE1, 0x2, 0xCA, 0xFF, 0xEF, 0x2, 0xCB, 0xFF, 0xEE, 0x2, 0xD0, 0xFF, 0xAF, 0x2, 0xD1, 0xFF, 0xBF, 0x2, 0xDA, 0xFF, 0xEF, 0x2, 0xDB, 0xFF, 0xEE, 0x2, 0xDC, 0xFF, 0xAF, 0x2, 0xDE, 0xFF, 0xCD, 0x2, 0xE0, 0xFF, 0xD8, 0x2, 0xF4, 0xFF, 0xEF, 0x2, 0xF5, 0xFF, 0xEE, 0x2, 0xF9, 0xFF, 0xD0, 0x2, 0xFA, 0xFF, 0xF4, 0x2, 0xFB, 0xFF, 0xE1, 0x3, 0x3, 0xFF, 0x60, 0x3, 0x4, 0xFF, 0xBD, 0x4, 0x62, 0xFF, 0xBE, 0x4, 0x63, 0xFF, 0xBE, 0x4, 0x65, 0xFF, 0xBE, 0x4, 0x66, 0xFF, 0xBE, 0x4, 0x67, 0xFF, 0xBE, 0x5, 0x67, 0xFF, 0xE4, 0x6, 0x1F, 0xFF, 0xCD, 0x6, 0x23, 0xFF, 0xAF, 0x6, 0x25, 0xFF, 0xAF, 0x6, 0x29, 0xFF, 0xAF, 0x6, 0x96, 0xFF, 0xBB, 0x8, 0xE7, 0xFF, 0xB3, 0x9, 0x2, 0xFF, 0xE4, 0x9, 0x3, 0xFF, 0xE4, 0x9, 0x5C, 0xFF, 0xAF, 0x9, 0x5E, 0xFF, 0xAF, 0x9, 0x60, 0xFF, 0xAF, 0x9, 0x70, 0xFF, 0xB3, 0x9, 0x71, 0xFF, 0xE4, 0x9, 0x72, 0xFF, 0xB3, 0x9, 0xDA, 0xFF, 0xB3, 0x9, 0xE9, 0xFF, 0xB3, 0x9, 0xEA, 0xFF, 0xEF, 0x9, 0xEC, 0xFF, 0xB3, 0x9, 0xF5, 0xFF, 0xE4, 0xA, 0x4, 0xFF, 0xD3, 0xA, 0x10, 0xFF, 0xAF, 0xA, 0x11, 0xFF, 0xEF, 0xA, 0x18, 0xFF, 0xE4, 0xA, 0x19, 0xFF, 0xEE, 0xA, 0x21, 0xFF, 0xE4, 0xA, 0x28, 0xFF, 0xB3, 0xA, 0x29, 0xFF, 0xE4, 0xA, 0x2A, 0xFF, 0xBE, 0xA, 0x2B, 0xFF, 0xBE, 0xA, 0x2E, 0xFF, 0xBE, 0xA, 0x39, 0xFF, 0xBB, 0xA, 0x3A, 0xFF, 0xE4, 0xA, 0x41, 0xFF, 0xB3, 0xA, 0x42, 0xFF, 0xE4, 0xA, 0x44, 0xFF, 0xEF, 0xA, 0x45, 0xFF, 0xEE, 0xA, 0x52, 0xFF, 0xEF, 0xA, 0x53, 0xFF, 0xEE, 0xA, 0x63, 0xFF, 0xD3, 0xA, 0x64, 0xFF, 0xE4, 0xA, 0x65, 0xFF, 0xD3, 0xA, 0x66, 0xFF, 0xE4, 0xA, 0x67, 0xFF, 0xD3, 0xA, 0x68, 0xFF, 0xE4, 0xA, 0x69, 0xFF, 0xCD, 0xA, 0xC0, 0xFF, 0xB3, 0xA, 0xC1, 0xFF, 0xE4, 0xA, 0xC2, 0xFF, 0xB3, 0xA, 0xC3, 0xFF, 0xE4, 0xA, 0xC4, 0xFF, 0xB3, 0xA, 0xC5, 0xFF, 0xE4, 0xA, 0xC7, 0xFF, 0xAF, 0xA, 0xC9, 0xFF, 0xCD, 0xA, 0xD6, 0xFF, 0xB3, 0xB, 0x3B, 0xFF, 0xE4, 0xB, 0xAD, 0xFF, 0xAF, 0xB, 0xAF, 0xFF, 0xAF, 0xB, 0xB1, 0xFF, 0xAF, 0xB, 0xB3, 0xFF, 0xAF, 0xB, 0xBF, 0xFF, 0xBB, 0xB, 0xC0, 0xFF, 0xE4, 0xB, 0xC1, 0xFF, 0xBB, 0xB, 0xC2, 0xFF, 0xE4, 0xB, 0xC7, 0xFF, 0xEF, 0xB, 0xC8, 0xFF, 0xEE, 0xB, 0xC9, 0xFF, 0xEF, 0xB, 0xCA, 0xFF, 0xEE, 0xB, 0xCB, 0xFF, 0xB3, 0xB, 0xCC, 0xFF, 0xE4, 0xB, 0xD6, 0xFF, 0xE4, 0xC, 0xA2, 0xFF, 0xB3, 0xC, 0xA3, 0xFF, 0xB3, 0x0, 0x97, 0x0, 0x7, 0xFF, 0xD6, 0x0, 0xC, 0xFF, 0xD6, 0x0, 0x39, 0xFF, 0xC0, 0x0, 0x3B, 0xFF, 0xDB, 0x0, 0x3D, 0xFF, 0xF6, 0x0, 0x3E, 0xFF, 0xC9, 0x0, 0x52, 0xFF, 0xE2, 0x0, 0x53, 0xFF, 0xE2, 0x0, 0x55, 0xFF, 0xE2, 0x0, 0xC2, 0xFF, 0xC0, 0x0, 0xEA, 0xFF, 0xE2, 0x1, 0x3, 0xFF, 0xC9, 0x2, 0x28, 0xFF, 0xE2, 0x2, 0x40, 0xFF, 0xE2, 0x2, 0x68, 0xFF, 0xC0, 0x2, 0x6A, 0xFF, 0xF9, 0x2, 0x6C, 0xFF, 0xC0, 0x2, 0x70, 0xFF, 0xF6, 0x2, 0x73, 0xFF, 0xF9, 0x2, 0x74, 0xFF, 0xF2, 0x2, 0x77, 0xFF, 0xEE, 0x2, 0x7C, 0xFF, 0xD7, 0x2, 0x82, 0xFF, 0xE2, 0x2, 0x86, 0xFF, 0xE2, 0x2, 0x87, 0xFF, 0xE2, 0x2, 0x89, 0xFF, 0xE2, 0x2, 0x8A, 0xFF, 0xE2, 0x2, 0x8B, 0xFF, 0xE2, 0x2, 0x8C, 0xFF, 0xDF, 0x2, 0x8E, 0xFF, 0xE2, 0x2, 0x90, 0xFF, 0xE2, 0x2, 0x91, 0xFF, 0xE2, 0x2, 0x94, 0xFF, 0xE2, 0x2, 0x96, 0xFF, 0xE2, 0x2, 0x9B, 0xFF, 0xE2, 0x2, 0xAF, 0xFF, 0xDB, 0x2, 0xC2, 0xFF, 0xE2, 0x2, 0xCA, 0xFF, 0xF6, 0x2, 0xCD, 0xFF, 0xE2, 0x2, 0xD0, 0xFF, 0xC0, 0x2, 0xD1, 0xFF, 0xDE, 0x2, 0xD3, 0xFF, 0xE2, 0x2, 0xD5, 0xFF, 0xE2, 0x2, 0xDA, 0xFF, 0xF6, 0x2, 0xDC, 0xFF, 0xC0, 0x2, 0xDE, 0xFF, 0xEE, 0x2, 0xE0, 0xFF, 0xEE, 0x2, 0xE3, 0xFF, 0xDC, 0x2, 0xE7, 0xFF, 0xF9, 0x2, 0xEA, 0xFF, 0xE2, 0x2, 0xEC, 0xFF, 0xE2, 0x2, 0xEE, 0xFF, 0xE2, 0x2, 0xF3, 0xFF, 0xE2, 0x2, 0xF4, 0xFF, 0xF6, 0x2, 0xF9, 0xFF, 0xDF, 0x2, 0xFB, 0xFF, 0xF2, 0x2, 0xFD, 0xFF, 0xF9, 0x3, 0x3, 0xFF, 0xC0, 0x3, 0x4, 0xFF, 0xDF, 0x3, 0x6, 0xFF, 0xF9, 0x3, 0x8, 0xFF, 0xF9, 0x3, 0xF, 0xFF, 0xE2, 0x3, 0x10, 0xFF, 0xF9, 0x3, 0x13, 0xFF, 0xE2, 0x4, 0x62, 0xFF, 0xD6, 0x4, 0x63, 0xFF, 0xD6, 0x4, 0x65, 0xFF, 0xD6, 0x4, 0x66, 0xFF, 0xD6, 0x4, 0x67, 0xFF, 0xD6, 0x5, 0xF0, 0xFF, 0xE2, 0x6, 0x0, 0xFF, 0xE2, 0x6, 0x1F, 0xFF, 0xEE, 0x6, 0x23, 0xFF, 0xC0, 0x6, 0x25, 0xFF, 0xC0, 0x6, 0x28, 0xFF, 0xE2, 0x6, 0x29, 0xFF, 0xC0, 0x6, 0x30, 0xFF, 0xE2, 0x6, 0x96, 0xFF, 0xDB, 0x6, 0xAB, 0xFF, 0xE2, 0x6, 0xAC, 0xFF, 0xE2, 0x6, 0xFB, 0xFF, 0xE2, 0x6, 0xFC, 0xFF, 0xE2, 0x6, 0xFD, 0xFF, 0xE2, 0x7, 0x12, 0xFF, 0xE2, 0x8, 0xE7, 0xFF, 0xC9, 0x8, 0xF8, 0xFF, 0xE2, 0x9, 0x40, 0xFF, 0xE2, 0x9, 0x42, 0xFF, 0xE2, 0x9, 0x44, 0xFF, 0xE2, 0x9, 0x45, 0xFF, 0xE2, 0x9, 0x5C, 0xFF, 0xC0, 0x9, 0x5E, 0xFF, 0xC0, 0x9, 0x60, 0xFF, 0xC0, 0x9, 0x70, 0xFF, 0xC9, 0x9, 0x72, 0xFF, 0xC9, 0x9, 0xDA, 0xFF, 0xC9, 0x9, 0xE9, 0xFF, 0xC9, 0x9, 0xEA, 0xFF, 0xF6, 0x9, 0xEC, 0xFF, 0xC9, 0x9, 0xEF, 0xFF, 0xE2, 0xA, 0x4, 0xFF, 0xF2, 0xA, 0x10, 0xFF, 0xC0, 0xA, 0x11, 0xFF, 0xF6, 0xA, 0x14, 0xFF, 0xE2, 0xA, 0x16, 0xFF, 0xE2, 0xA, 0x1B, 0xFF, 0xE2, 0xA, 0x20, 0xFF, 0xE2, 0xA, 0x28, 0xFF, 0xC9, 0xA, 0x2A, 0xFF, 0xD6, 0xA, 0x2B, 0xFF, 0xD6, 0xA, 0x2E, 0xFF, 0xD6, 0xA, 0x30, 0xFF, 0xE2, 0xA, 0x36, 0xFF, 0xE2, 0xA, 0x39, 0xFF, 0xDB, 0xA, 0x41, 0xFF, 0xC9, 0xA, 0x44, 0xFF, 0xF6, 0xA, 0x52, 0xFF, 0xF6, 0xA, 0x57, 0xFF, 0xE2, 0xA, 0x59, 0xFF, 0xE2, 0xA, 0x63, 0xFF, 0xF2, 0xA, 0x65, 0xFF, 0xF2, 0xA, 0x67, 0xFF, 0xF2, 0xA, 0x69, 0xFF, 0xEE, 0xA, 0x6C, 0xFF, 0xE2, 0xA, 0xC0, 0xFF, 0xC9, 0xA, 0xC2, 0xFF, 0xC9, 0xA, 0xC4, 0xFF, 0xC9, 0xA, 0xC7, 0xFF, 0xC0, 0xA, 0xC9, 0xFF, 0xEE, 0xA, 0xCC, 0xFF, 0xE2, 0xA, 0xD6, 0xFF, 0xC9, 0xA, 0xE7, 0xFF, 0xE2, 0xA, 0xED, 0xFF, 0xE2, 0xB, 0x13, 0xFF, 0xE2, 0xB, 0x84, 0xFF, 0xE2, 0xB, 0x86, 0xFF, 0xE2, 0xB, 0x88, 0xFF, 0xE2, 0xB, 0x8A, 0xFF, 0xE2, 0xB, 0x8C, 0xFF, 0xE2, 0xB, 0x8E, 0xFF, 0xE2, 0xB, 0xAD, 0xFF, 0xC0, 0xB, 0xAF, 0xFF, 0xC0, 0xB, 0xB1, 0xFF, 0xC0, 0xB, 0xB3, 0xFF, 0xC0, 0xB, 0xBF, 0xFF, 0xDB, 0xB, 0xC1, 0xFF, 0xDB, 0xB, 0xC7, 0xFF, 0xF6, 0xB, 0xC9, 0xFF, 0xF6, 0xB, 0xCB, 0xFF, 0xC9, 0xC, 0xA2, 0xFF, 0xC9, 0xC, 0xA3, 0xFF, 0xC9, 0x0, 0x9A, 0x0, 0x7, 0xFF, 0xCD, 0x0, 0xC, 0xFF, 0xCD, 0x0, 0x39, 0xFF, 0xC0, 0x0, 0x3B, 0xFF, 0xDA, 0x0, 0x3D, 0xFF, 0xF7, 0x0, 0x3E, 0xFF, 0xC7, 0x0, 0x52, 0xFF, 0xE0, 0x0, 0x53, 0xFF, 0xE0, 0x0, 0x55, 0xFF, 0xE0, 0x0, 0x5D, 0xFF, 0xF5, 0x0, 0xC2, 0xFF, 0xC0, 0x0, 0xEA, 0xFF, 0xE0, 0x1, 0x3, 0xFF, 0xC7, 0x2, 0x28, 0xFF, 0xE0, 0x2, 0x40, 0xFF, 0xE0, 0x2, 0x68, 0xFF, 0xC0, 0x2, 0x6C, 0xFF, 0xC0, 0x2, 0x70, 0xFF, 0xF7, 0x2, 0x74, 0xFF, 0xF3, 0x2, 0x77, 0xFF, 0xEC, 0x2, 0x7C, 0xFF, 0xD8, 0x2, 0x82, 0xFF, 0xE0, 0x2, 0x84, 0xFF, 0xF5, 0x2, 0x86, 0xFF, 0xE0, 0x2, 0x87, 0xFF, 0xE0, 0x2, 0x89, 0xFF, 0xE0, 0x2, 0x8A, 0xFF, 0xE0, 0x2, 0x8B, 0xFF, 0xE0, 0x2, 0x8C, 0xFF, 0xDA, 0x2, 0x8E, 0xFF, 0xE0, 0x2, 0x90, 0xFF, 0xE0, 0x2, 0x91, 0xFF, 0xE0, 0x2, 0x94, 0xFF, 0xE0, 0x2, 0x96, 0xFF, 0xE0, 0x2, 0x9B, 0xFF, 0xE0, 0x2, 0xAF, 0xFF, 0xDA, 0x2, 0xC2, 0xFF, 0xE0, 0x2, 0xCA, 0xFF, 0xF7, 0x2, 0xCB, 0xFF, 0xF5, 0x2, 0xCD, 0xFF, 0xE0, 0x2, 0xD0, 0xFF, 0xC0, 0x2, 0xD1, 0xFF, 0xD6, 0x2, 0xD3, 0xFF, 0xE0, 0x2, 0xD5, 0xFF, 0xE0, 0x2, 0xDA, 0xFF, 0xF7, 0x2, 0xDB, 0xFF, 0xF5, 0x2, 0xDC, 0xFF, 0xC0, 0x2, 0xDE, 0xFF, 0xEC, 0x2, 0xE0, 0xFF, 0xEC, 0x2, 0xE3, 0xFF, 0xDC, 0x2, 0xEA, 0xFF, 0xE0, 0x2, 0xEC, 0xFF, 0xE0, 0x2, 0xEE, 0xFF, 0xE0, 0x2, 0xF3, 0xFF, 0xE0, 0x2, 0xF4, 0xFF, 0xF7, 0x2, 0xF5, 0xFF, 0xF5, 0x2, 0xF9, 0xFF, 0xDF, 0x2, 0xFB, 0xFF, 0xF0, 0x3, 0x3, 0xFF, 0xC1, 0x3, 0x4, 0xFF, 0xDA, 0x3, 0xF, 0xFF, 0xE0, 0x3, 0x13, 0xFF, 0xE0, 0x4, 0x62, 0xFF, 0xCD, 0x4, 0x63, 0xFF, 0xCD, 0x4, 0x65, 0xFF, 0xCD, 0x4, 0x66, 0xFF, 0xCD, 0x4, 0x67, 0xFF, 0xCD, 0x5, 0xF0, 0xFF, 0xE0, 0x6, 0x0, 0xFF, 0xE0, 0x6, 0x1F, 0xFF, 0xEC, 0x6, 0x23, 0xFF, 0xC0, 0x6, 0x25, 0xFF, 0xC0, 0x6, 0x28, 0xFF, 0xE0, 0x6, 0x29, 0xFF, 0xC0, 0x6, 0x30, 0xFF, 0xE0, 0x6, 0x96, 0xFF, 0xDA, 0x6, 0xAB, 0xFF, 0xE0, 0x6, 0xAC, 0xFF, 0xE0, 0x6, 0xFB, 0xFF, 0xE0, 0x6, 0xFC, 0xFF, 0xE0, 0x6, 0xFD, 0xFF, 0xE0, 0x7, 0x12, 0xFF, 0xE0, 0x8, 0xE7, 0xFF, 0xC7, 0x8, 0xF8, 0xFF, 0xE0, 0x9, 0x40, 0xFF, 0xE0, 0x9, 0x42, 0xFF, 0xE0, 0x9, 0x44, 0xFF, 0xE0, 0x9, 0x45, 0xFF, 0xE0, 0x9, 0x5C, 0xFF, 0xC0, 0x9, 0x5E, 0xFF, 0xC0, 0x9, 0x60, 0xFF, 0xC0, 0x9, 0x70, 0xFF, 0xC7, 0x9, 0x72, 0xFF, 0xC7, 0x9, 0xDA, 0xFF, 0xC7, 0x9, 0xE9, 0xFF, 0xC7, 0x9, 0xEA, 0xFF, 0xF7, 0x9, 0xEC, 0xFF, 0xC7, 0x9, 0xEF, 0xFF, 0xE0, 0xA, 0x4, 0xFF, 0xF3, 0xA, 0x10, 0xFF, 0xC0, 0xA, 0x11, 0xFF, 0xF7, 0xA, 0x14, 0xFF, 0xE0, 0xA, 0x16, 0xFF, 0xE0, 0xA, 0x19, 0xFF, 0xF5, 0xA, 0x1B, 0xFF, 0xE0, 0xA, 0x20, 0xFF, 0xE0, 0xA, 0x28, 0xFF, 0xC7, 0xA, 0x2A, 0xFF, 0xCD, 0xA, 0x2B, 0xFF, 0xCD, 0xA, 0x2E, 0xFF, 0xCD, 0xA, 0x30, 0xFF, 0xE0, 0xA, 0x36, 0xFF, 0xE0, 0xA, 0x39, 0xFF, 0xDA, 0xA, 0x41, 0xFF, 0xC7, 0xA, 0x44, 0xFF, 0xF7, 0xA, 0x45, 0xFF, 0xF5, 0xA, 0x52, 0xFF, 0xF7, 0xA, 0x53, 0xFF, 0xF5, 0xA, 0x57, 0xFF, 0xE0, 0xA, 0x59, 0xFF, 0xE0, 0xA, 0x63, 0xFF, 0xF3, 0xA, 0x65, 0xFF, 0xF3, 0xA, 0x67, 0xFF, 0xF3, 0xA, 0x69, 0xFF, 0xEC, 0xA, 0x6C, 0xFF, 0xE0, 0xA, 0xC0, 0xFF, 0xC7, 0xA, 0xC2, 0xFF, 0xC7, 0xA, 0xC4, 0xFF, 0xC7, 0xA, 0xC7, 0xFF, 0xC0, 0xA, 0xC9, 0xFF, 0xEC, 0xA, 0xCC, 0xFF, 0xE0, 0xA, 0xD6, 0xFF, 0xC7, 0xA, 0xE7, 0xFF, 0xE0, 0xA, 0xED, 0xFF, 0xE0, 0xB, 0x13, 0xFF, 0xE0, 0xB, 0x84, 0xFF, 0xE0, 0xB, 0x86, 0xFF, 0xE0, 0xB, 0x88, 0xFF, 0xE0, 0xB, 0x8A, 0xFF, 0xE0, 0xB, 0x8C, 0xFF, 0xE0, 0xB, 0x8E, 0xFF, 0xE0, 0xB, 0xAD, 0xFF, 0xC0, 0xB, 0xAF, 0xFF, 0xC0, 0xB, 0xB1, 0xFF, 0xC0, 0xB, 0xB3, 0xFF, 0xC0, 0xB, 0xBF, 0xFF, 0xDA, 0xB, 0xC1, 0xFF, 0xDA, 0xB, 0xC7, 0xFF, 0xF7, 0xB, 0xC8, 0xFF, 0xF5, 0xB, 0xC9, 0xFF, 0xF7, 0xB, 0xCA, 0xFF, 0xF5, 0xB, 0xCB, 0xFF, 0xC7, 0xC, 0xA2, 0xFF, 0xC7, 0xC, 0xA3, 0xFF, 0xC7, 0x0, 0x72, 0x0, 0x39, 0xFF, 0x95, 0x0, 0x52, 0xFF, 0xDF, 0x0, 0x53, 0xFF, 0xDF, 0x0, 0x55, 0xFF, 0xDF, 0x0, 0x5B, 0xFF, 0xEA, 0x0, 0x5E, 0xFF, 0xEA, 0x0, 0xC2, 0xFF, 0x95, 0x0, 0xEA, 0xFF, 0xDF, 0x2, 0x28, 0xFF, 0xDF, 0x2, 0x3C, 0xFF, 0xEA, 0x2, 0x40, 0xFF, 0xDF, 0x2, 0x68, 0xFF, 0x95, 0x2, 0x6C, 0xFF, 0x95, 0x2, 0x7C, 0xFF, 0xD6, 0x2, 0x82, 0xFF, 0xDF, 0x2, 0x86, 0xFF, 0xDF, 0x2, 0x87, 0xFF, 0xDF, 0x2, 0x89, 0xFF, 0xDF, 0x2, 0x8A, 0xFF, 0xDF, 0x2, 0x8B, 0xFF, 0xDF, 0x2, 0x8C, 0xFF, 0xD5, 0x2, 0x8E, 0xFF, 0xDF, 0x2, 0x90, 0xFF, 0xDF, 0x2, 0x91, 0xFF, 0xDF, 0x2, 0x94, 0xFF, 0xEC, 0x2, 0x96, 0xFF, 0xDF, 0x2, 0x9B, 0xFF, 0xDF, 0x2, 0x9F, 0xFF, 0xEC, 0x2, 0xB0, 0xFF, 0xEA, 0x2, 0xB6, 0xFF, 0xE9, 0x2, 0xC2, 0xFF, 0xDF, 0x2, 0xCD, 0xFF, 0xDF, 0x2, 0xD0, 0xFF, 0x95, 0x2, 0xD1, 0xFF, 0xCB, 0x2, 0xD3, 0xFF, 0xDF, 0x2, 0xD5, 0xFF, 0xDF, 0x2, 0xDC, 0xFF, 0x95, 0x2, 0xE3, 0xFF, 0xE4, 0x2, 0xEA, 0xFF, 0xDF, 0x2, 0xEC, 0xFF, 0xDF, 0x2, 0xEE, 0xFF, 0xDF, 0x2, 0xF3, 0xFF, 0xDF, 0x2, 0xFA, 0xFF, 0xF1, 0x3, 0x4, 0xFF, 0xCF, 0x3, 0xF, 0xFF, 0xDF, 0x3, 0x13, 0xFF, 0xDF, 0x5, 0x67, 0xFF, 0xEA, 0x5, 0xF0, 0xFF, 0xDF, 0x6, 0x0, 0xFF, 0xDF, 0x6, 0x23, 0xFF, 0x95, 0x6, 0x25, 0xFF, 0x95, 0x6, 0x28, 0xFF, 0xDF, 0x6, 0x29, 0xFF, 0x95, 0x6, 0x30, 0xFF, 0xDF, 0x6, 0xAB, 0xFF, 0xDF, 0x6, 0xAC, 0xFF, 0xDF, 0x6, 0xFB, 0xFF, 0xDF, 0x6, 0xFC, 0xFF, 0xDF, 0x6, 0xFD, 0xFF, 0xDF, 0x7, 0x12, 0xFF, 0xDF, 0x8, 0xF8, 0xFF, 0xDF, 0x9, 0x2, 0xFF, 0xEA, 0x9, 0x3, 0xFF, 0xEA, 0x9, 0x40, 0xFF, 0xDF, 0x9, 0x42, 0xFF, 0xDF, 0x9, 0x44, 0xFF, 0xDF, 0x9, 0x45, 0xFF, 0xDF, 0x9, 0x5C, 0xFF, 0x95, 0x9, 0x5E, 0xFF, 0x95, 0x9, 0x60, 0xFF, 0x95, 0x9, 0x71, 0xFF, 0xEA, 0x9, 0xEF, 0xFF, 0xDF, 0x9, 0xF5, 0xFF, 0xEA, 0xA, 0x10, 0xFF, 0x95, 0xA, 0x14, 0xFF, 0xDF, 0xA, 0x16, 0xFF, 0xDF, 0xA, 0x18, 0xFF, 0xEA, 0xA, 0x1B, 0xFF, 0xDF, 0xA, 0x20, 0xFF, 0xDF, 0xA, 0x21, 0xFF, 0xEA, 0xA, 0x29, 0xFF, 0xEA, 0xA, 0x30, 0xFF, 0xDF, 0xA, 0x36, 0xFF, 0xDF, 0xA, 0x3A, 0xFF, 0xEA, 0xA, 0x42, 0xFF, 0xEA, 0xA, 0x57, 0xFF, 0xDF, 0xA, 0x59, 0xFF, 0xDF, 0xA, 0x64, 0xFF, 0xEA, 0xA, 0x66, 0xFF, 0xEA, 0xA, 0x68, 0xFF, 0xEA, 0xA, 0x6C, 0xFF, 0xDF, 0xA, 0xC1, 0xFF, 0xEA, 0xA, 0xC3, 0xFF, 0xEA, 0xA, 0xC5, 0xFF, 0xEA, 0xA, 0xC7, 0xFF, 0x95, 0xA, 0xCC, 0xFF, 0xDF, 0xA, 0xE7, 0xFF, 0xDF, 0xA, 0xED, 0xFF, 0xDF, 0xB, 0x13, 0xFF, 0xDF, 0xB, 0x3B, 0xFF, 0xEA, 0xB, 0x84, 0xFF, 0xDF, 0xB, 0x86, 0xFF, 0xDF, 0xB, 0x88, 0xFF, 0xDF, 0xB, 0x8A, 0xFF, 0xDF, 0xB, 0x8C, 0xFF, 0xDF, 0xB, 0x8E, 0xFF, 0xDF, 0xB, 0xAD, 0xFF, 0x95, 0xB, 0xAF, 0xFF, 0x95, 0xB, 0xB1, 0xFF, 0x95, 0xB, 0xB3, 0xFF, 0x95, 0xB, 0xC0, 0xFF, 0xEA, 0xB, 0xC2, 0xFF, 0xEA, 0xB, 0xCC, 0xFF, 0xEA, 0xB, 0xD6, 0xFF, 0xEA, 0x0, 0x8F, 0x0, 0x39, 0xFF, 0xE4, 0x0, 0x3B, 0xFF, 0xE1, 0x0, 0x3D, 0xFF, 0xEA, 0x0, 0x3E, 0xFF, 0xE1, 0x0, 0x52, 0xFF, 0xE5, 0x0, 0x53, 0xFF, 0xE5, 0x0, 0x55, 0xFF, 0xE5, 0x0, 0x5D, 0xFF, 0xF0, 0x0, 0xC2, 0xFF, 0xE4, 0x0, 0xEA, 0xFF, 0xE5, 0x1, 0x3, 0xFF, 0xE1, 0x2, 0x28, 0xFF, 0xE5, 0x2, 0x40, 0xFF, 0xE5, 0x2, 0x68, 0xFF, 0xE4, 0x2, 0x6C, 0xFF, 0xE4, 0x2, 0x70, 0xFF, 0xEA, 0x2, 0x74, 0xFF, 0xE6, 0x2, 0x77, 0xFF, 0xE6, 0x2, 0x7C, 0xFF, 0xE4, 0x2, 0x82, 0xFF, 0xE5, 0x2, 0x84, 0xFF, 0xF0, 0x2, 0x86, 0xFF, 0xE5, 0x2, 0x87, 0xFF, 0xE5, 0x2, 0x89, 0xFF, 0xE5, 0x2, 0x8A, 0xFF, 0xE5, 0x2, 0x8B, 0xFF, 0xE5, 0x2, 0x8C, 0xFF, 0xC8, 0x2, 0x8E, 0xFF, 0xE5, 0x2, 0x90, 0xFF, 0xE5, 0x2, 0x91, 0xFF, 0xE5, 0x2, 0x94, 0xFF, 0xE5, 0x2, 0x96, 0xFF, 0xE5, 0x2, 0x9B, 0xFF, 0xE5, 0x2, 0xAF, 0xFF, 0xE1, 0x2, 0xC2, 0xFF, 0xE5, 0x2, 0xCA, 0xFF, 0xEA, 0x2, 0xCB, 0xFF, 0xF0, 0x2, 0xCD, 0xFF, 0xE5, 0x2, 0xD0, 0xFF, 0xE4, 0x2, 0xD1, 0xFF, 0xB8, 0x2, 0xD3, 0xFF, 0xE5, 0x2, 0xD5, 0xFF, 0xE5, 0x2, 0xDA, 0xFF, 0xEA, 0x2, 0xDB, 0xFF, 0xF0, 0x2, 0xDC, 0xFF, 0xE4, 0x2, 0xDE, 0xFF, 0xE6, 0x2, 0xE0, 0xFF, 0xE6, 0x2, 0xEA, 0xFF, 0xE5, 0x2, 0xEC, 0xFF, 0xE5, 0x2, 0xEE, 0xFF, 0xE5, 0x2, 0xF3, 0xFF, 0xE5, 0x2, 0xF4, 0xFF, 0xEA, 0x2, 0xF5, 0xFF, 0xF0, 0x2, 0xF9, 0xFF, 0xE5, 0x2, 0xFB, 0xFF, 0xEC, 0x3, 0x3, 0xFF, 0xE0, 0x3, 0x4, 0xFF, 0xCC, 0x3, 0xF, 0xFF, 0xE5, 0x3, 0x13, 0xFF, 0xE5, 0x5, 0xF0, 0xFF, 0xE5, 0x6, 0x0, 0xFF, 0xE5, 0x6, 0x1F, 0xFF, 0xE6, 0x6, 0x23, 0xFF, 0xE4, 0x6, 0x25, 0xFF, 0xE4, 0x6, 0x28, 0xFF, 0xE5, 0x6, 0x29, 0xFF, 0xE4, 0x6, 0x30, 0xFF, 0xE5, 0x6, 0x96, 0xFF, 0xE1, 0x6, 0xAB, 0xFF, 0xE5, 0x6, 0xAC, 0xFF, 0xE5, 0x6, 0xFB, 0xFF, 0xE5, 0x6, 0xFC, 0xFF, 0xE5, 0x6, 0xFD, 0xFF, 0xE5, 0x7, 0x12, 0xFF, 0xE5, 0x8, 0xE7, 0xFF, 0xE1, 0x8, 0xF8, 0xFF, 0xE5, 0x9, 0x40, 0xFF, 0xE5, 0x9, 0x42, 0xFF, 0xE5, 0x9, 0x44, 0xFF, 0xE5, 0x9, 0x45, 0xFF, 0xE5, 0x9, 0x5C, 0xFF, 0xE4, 0x9, 0x5E, 0xFF, 0xE4, 0x9, 0x60, 0xFF, 0xE4, 0x9, 0x70, 0xFF, 0xE1, 0x9, 0x72, 0xFF, 0xE1, 0x9, 0xDA, 0xFF, 0xE1, 0x9, 0xE9, 0xFF, 0xE1, 0x9, 0xEA, 0xFF, 0xEA, 0x9, 0xEC, 0xFF, 0xE1, 0x9, 0xEF, 0xFF, 0xE5, 0xA, 0x4, 0xFF, 0xE6, 0xA, 0x10, 0xFF, 0xE4, 0xA, 0x11, 0xFF, 0xEA, 0xA, 0x14, 0xFF, 0xE5, 0xA, 0x16, 0xFF, 0xE5, 0xA, 0x19, 0xFF, 0xF0, 0xA, 0x1B, 0xFF, 0xE5, 0xA, 0x20, 0xFF, 0xE5, 0xA, 0x28, 0xFF, 0xE1, 0xA, 0x30, 0xFF, 0xE5, 0xA, 0x36, 0xFF, 0xE5, 0xA, 0x39, 0xFF, 0xE1, 0xA, 0x41, 0xFF, 0xE1, 0xA, 0x44, 0xFF, 0xEA, 0xA, 0x45, 0xFF, 0xF0, 0xA, 0x52, 0xFF, 0xEA, 0xA, 0x53, 0xFF, 0xF0, 0xA, 0x57, 0xFF, 0xE5, 0xA, 0x59, 0xFF, 0xE5, 0xA, 0x63, 0xFF, 0xE6, 0xA, 0x65, 0xFF, 0xE6, 0xA, 0x67, 0xFF, 0xE6, 0xA, 0x69, 0xFF, 0xE6, 0xA, 0x6C, 0xFF, 0xE5, 0xA, 0xC0, 0xFF, 0xE1, 0xA, 0xC2, 0xFF, 0xE1, 0xA, 0xC4, 0xFF, 0xE1, 0xA, 0xC7, 0xFF, 0xE4, 0xA, 0xC9, 0xFF, 0xE6, 0xA, 0xCC, 0xFF, 0xE5, 0xA, 0xD6, 0xFF, 0xE1, 0xA, 0xE7, 0xFF, 0xE5, 0xA, 0xED, 0xFF, 0xE5, 0xB, 0x13, 0xFF, 0xE5, 0xB, 0x84, 0xFF, 0xE5, 0xB, 0x86, 0xFF, 0xE5, 0xB, 0x88, 0xFF, 0xE5, 0xB, 0x8A, 0xFF, 0xE5, 0xB, 0x8C, 0xFF, 0xE5, 0xB, 0x8E, 0xFF, 0xE5, 0xB, 0xAD, 0xFF, 0xE4, 0xB, 0xAF, 0xFF, 0xE4, 0xB, 0xB1, 0xFF, 0xE4, 0xB, 0xB3, 0xFF, 0xE4, 0xB, 0xBF, 0xFF, 0xE1, 0xB, 0xC1, 0xFF, 0xE1, 0xB, 0xC7, 0xFF, 0xEA, 0xB, 0xC8, 0xFF, 0xF0, 0xB, 0xC9, 0xFF, 0xEA, 0xB, 0xCA, 0xFF, 0xF0, 0xB, 0xCB, 0xFF, 0xE1, 0xC, 0xA2, 0xFF, 0xE1, 0xC, 0xA3, 0xFF, 0xE1, 0x0, 0xDC, 0x0, 0x26, 0x0, 0x18, 0x0, 0x28, 0xFF, 0xE6, 0x0, 0x2C, 0xFF, 0xE6, 0x0, 0x34, 0xFF, 0xE6, 0x0, 0x36, 0xFF, 0xE6, 0x0, 0x39, 0xFF, 0xDD, 0x0, 0x3B, 0xFF, 0xDD, 0x0, 0x3E, 0xFF, 0xDC, 0x0, 0x84, 0xFF, 0xE6, 0x0, 0x94, 0xFF, 0xE6, 0x0, 0x9E, 0xFF, 0xE6, 0x0, 0xAA, 0xFF, 0xE6, 0x0, 0xB4, 0xFF, 0xE6, 0x0, 0xB6, 0xFF, 0xE6, 0x0, 0xC2, 0xFF, 0xDD, 0x0, 0xFA, 0x0, 0x18, 0x0, 0xFF, 0xFF, 0xE6, 0x1, 0x3, 0xFF, 0xDC, 0x2, 0x31, 0x0, 0x18, 0x2, 0x32, 0xFF, 0xE6, 0x2, 0x33, 0x0, 0x18, 0x2, 0x55, 0xFF, 0xE6, 0x2, 0x57, 0xFF, 0xE6, 0x2, 0x66, 0xFF, 0xE6, 0x2, 0x68, 0xFF, 0xDD, 0x2, 0x69, 0xFF, 0xE6, 0x2, 0x6A, 0x0, 0x11, 0x2, 0x6C, 0xFF, 0xDD, 0x2, 0x6F, 0x0, 0x20, 0x2, 0x73, 0x0, 0x11, 0x2, 0x77, 0xFF, 0xD8, 0x2, 0x7C, 0xFF, 0xE8, 0x2, 0x83, 0x0, 0x1F, 0x2, 0x88, 0x0, 0x23, 0x2, 0x8F, 0xFF, 0xDD, 0x2, 0x9A, 0x0, 0x23, 0x2, 0x9E, 0xFF, 0xE6, 0x2, 0xA3, 0x0, 0x18, 0x2, 0xAD, 0xFF, 0xE6, 0x2, 0xAF, 0xFF, 0xDD, 0x2, 0xB1, 0xFF, 0xE6, 0x2, 0xB3, 0xFF, 0xE6, 0x2, 0xB5, 0xFF, 0xE6, 0x2, 0xB7, 0xFF, 0xE6, 0x2, 0xD0, 0xFF, 0xDD, 0x2, 0xD8, 0xFF, 0xE6, 0x2, 0xDC, 0xFF, 0xDD, 0x2, 0xDE, 0xFF, 0xD8, 0x2, 0xDF, 0xFF, 0xDD, 0x2, 0xE0, 0xFF, 0xDB, 0x2, 0xE1, 0xFF, 0xD6, 0x2, 0xE4, 0xFF, 0xED, 0x2, 0xE7, 0x0, 0x11, 0x2, 0xE8, 0x0, 0x23, 0x2, 0xEF, 0xFF, 0xEE, 0x2, 0xF9, 0xFF, 0xDC, 0x2, 0xFB, 0xFF, 0xDB, 0x2, 0xFD, 0x0, 0x11, 0x3, 0x1, 0xFF, 0xE6, 0x3, 0x3, 0xFF, 0xDC, 0x3, 0x5, 0xFF, 0xFB, 0x3, 0x6, 0x0, 0x11, 0x3, 0x7, 0x0, 0x23, 0x3, 0x8, 0x0, 0x11, 0x3, 0x9, 0x0, 0x23, 0x3, 0x10, 0x0, 0x11, 0x3, 0x11, 0x0, 0x23, 0x5, 0x63, 0xFF, 0xE6, 0x5, 0xE5, 0xFF, 0xE6, 0x5, 0xED, 0xFF, 0xE6, 0x5, 0xF1, 0x0, 0x18, 0x6, 0x1, 0xFF, 0xE6, 0x6, 0x3, 0xFF, 0xE6, 0x6, 0x5, 0xFF, 0xE6, 0x6, 0x1F, 0xFF, 0xD8, 0x6, 0x20, 0xFF, 0xDD, 0x6, 0x23, 0xFF, 0xDD, 0x6, 0x25, 0xFF, 0xDD, 0x6, 0x29, 0xFF, 0xDD, 0x6, 0x31, 0xFF, 0xE6, 0x6, 0x33, 0xFF, 0xE6, 0x6, 0x6A, 0x0, 0x18, 0x6, 0x6C, 0x0, 0x18, 0x6, 0x70, 0x0, 0x18, 0x6, 0x72, 0x0, 0x18, 0x6, 0x74, 0x0, 0x18, 0x6, 0x84, 0xFF, 0xE6, 0x6, 0x86, 0xFF, 0xE6, 0x6, 0x8E, 0xFF, 0xE6, 0x6, 0x90, 0xFF, 0xE6, 0x6, 0x96, 0xFF, 0xDD, 0x6, 0xE3, 0xFF, 0xE6, 0x7, 0xCF, 0xFF, 0xE6, 0x7, 0xD0, 0xFF, 0xE6, 0x7, 0xD2, 0xFF, 0xE6, 0x7, 0xD3, 0xFF, 0xE6, 0x8, 0xCD, 0x0, 0x18, 0x8, 0xCE, 0x0, 0x18, 0x8, 0xCF, 0x0, 0x18, 0x8, 0xD0, 0x0, 0x18, 0x8, 0xD1, 0x0, 0x18, 0x8, 0xD2, 0x0, 0x18, 0x8, 0xD3, 0x0, 0x18, 0x8, 0xD4, 0xFF, 0xE6, 0x8, 0xDE, 0xFF, 0xE6, 0x8, 0xDF, 0xFF, 0xE6, 0x8, 0xE0, 0xFF, 0xE6, 0x8, 0xE1, 0xFF, 0xE6, 0x8, 0xE2, 0xFF, 0xE6, 0x8, 0xE7, 0xFF, 0xDC, 0x9, 0x4, 0x0, 0x18, 0x9, 0x6, 0x0, 0x18, 0x9, 0x8, 0x0, 0x18, 0x9, 0xA, 0xFF, 0xE6, 0x9, 0xC, 0xFF, 0xE6, 0x9, 0xE, 0xFF, 0xE6, 0x9, 0x10, 0xFF, 0xE6, 0x9, 0x1E, 0xFF, 0xE6, 0x9, 0x20, 0xFF, 0xE6, 0x9, 0x22, 0xFF, 0xE6, 0x9, 0x24, 0xFF, 0xE6, 0x9, 0x46, 0xFF, 0xE6, 0x9, 0x48, 0xFF, 0xE6, 0x9, 0x4A, 0xFF, 0xE6, 0x9, 0x5C, 0xFF, 0xDD, 0x9, 0x5E, 0xFF, 0xDD, 0x9, 0x60, 0xFF, 0xDD, 0x9, 0x70, 0xFF, 0xDC, 0x9, 0x72, 0xFF, 0xDC, 0x9, 0x7B, 0xFF, 0xE6, 0x9, 0xD5, 0x0, 0x18, 0x9, 0xD9, 0xFF, 0xE6, 0x9, 0xDA, 0xFF, 0xDC, 0x9, 0xDD, 0x0, 0x18, 0x9, 0xE6, 0xFF, 0xE6, 0x9, 0xE9, 0xFF, 0xDC, 0x9, 0xEC, 0xFF, 0xDC, 0xA, 0x5, 0x0, 0x18, 0xA, 0xC, 0xFF, 0xE6, 0xA, 0xF, 0xFF, 0xE6, 0xA, 0x10, 0xFF, 0xDD, 0xA, 0x28, 0xFF, 0xDC, 0xA, 0x31, 0x0, 0x18, 0xA, 0x39, 0xFF, 0xDD, 0xA, 0x3C, 0xFF, 0xE6, 0xA, 0x3F, 0xFF, 0xE6, 0xA, 0x41, 0xFF, 0xDC, 0xA, 0x47, 0x0, 0x18, 0xA, 0x49, 0x0, 0x18, 0xA, 0x5A, 0xFF, 0xE6, 0xA, 0x5C, 0xFF, 0xE6, 0xA, 0x5E, 0xFF, 0xE6, 0xA, 0x5F, 0xFF, 0xE6, 0xA, 0x69, 0xFF, 0xD8, 0xA, 0x6A, 0xFF, 0xDD, 0xA, 0x6E, 0x0, 0x18, 0xA, 0x70, 0x0, 0x18, 0xA, 0x72, 0x0, 0x18, 0xA, 0x74, 0x0, 0x18, 0xA, 0x76, 0x0, 0x18, 0xA, 0x78, 0x0, 0x18, 0xA, 0x7A, 0x0, 0x18, 0xA, 0x7C, 0x0, 0x18, 0xA, 0x7E, 0x0, 0x18, 0xA, 0x80, 0x0, 0x18, 0xA, 0x82, 0x0, 0x18, 0xA, 0x84, 0x0, 0x18, 0xA, 0x9A, 0xFF, 0xE6, 0xA, 0x9C, 0xFF, 0xE6, 0xA, 0x9E, 0xFF, 0xE6, 0xA, 0xA0, 0xFF, 0xE6, 0xA, 0xA2, 0xFF, 0xE6, 0xA, 0xA4, 0xFF, 0xE6, 0xA, 0xA6, 0xFF, 0xE6, 0xA, 0xA8, 0xFF, 0xE6, 0xA, 0xAA, 0xFF, 0xE6, 0xA, 0xAC, 0xFF, 0xE6, 0xA, 0xAE, 0xFF, 0xE6, 0xA, 0xB0, 0xFF, 0xE6, 0xA, 0xC0, 0xFF, 0xDC, 0xA, 0xC2, 0xFF, 0xDC, 0xA, 0xC4, 0xFF, 0xDC, 0xA, 0xC7, 0xFF, 0xDD, 0xA, 0xC9, 0xFF, 0xD8, 0xA, 0xCA, 0xFF, 0xDD, 0xA, 0xD6, 0xFF, 0xDC, 0xA, 0xEE, 0x0, 0x18, 0xA, 0xF2, 0xFF, 0xE6, 0xA, 0xFF, 0x0, 0x18, 0xB, 0x1, 0x0, 0x18, 0xB, 0x9, 0xFF, 0xE6, 0xB, 0xB, 0xFF, 0xE6, 0xB, 0x14, 0x0, 0x18, 0xB, 0x16, 0x0, 0x18, 0xB, 0x20, 0xFF, 0xE6, 0xB, 0x22, 0xFF, 0xE6, 0xB, 0x2E, 0x0, 0x18, 0xB, 0x32, 0xFF, 0xE6, 0xB, 0x34, 0xFF, 0xE6, 0xB, 0x36, 0xFF, 0xE6, 0xB, 0x38, 0xFF, 0xE6, 0xB, 0x49, 0xFF, 0xE6, 0xB, 0x53, 0xFF, 0xE6, 0xB, 0x6B, 0xFF, 0xE6, 0xB, 0x8F, 0xFF, 0xE6, 0xB, 0x91, 0xFF, 0xE6, 0xB, 0x93, 0xFF, 0xE6, 0xB, 0x95, 0xFF, 0xE6, 0xB, 0xAD, 0xFF, 0xDD, 0xB, 0xAF, 0xFF, 0xDD, 0xB, 0xB1, 0xFF, 0xDD, 0xB, 0xB3, 0xFF, 0xDD, 0xB, 0xBF, 0xFF, 0xDD, 0xB, 0xC1, 0xFF, 0xDD, 0xB, 0xCB, 0xFF, 0xDC, 0xC, 0x81, 0x0, 0x18, 0xC, 0x82, 0x0, 0x18, 0xC, 0x85, 0x0, 0x18, 0xC, 0xA2, 0xFF, 0xDC, 0xC, 0xA3, 0xFF, 0xDC, 0x0, 0x45, 0x0, 0x1C, 0xFF, 0xF1, 0x0, 0x39, 0xFF, 0xF0, 0x0, 0x3B, 0xFF, 0xF3, 0x0, 0x3D, 0xFF, 0xF3, 0x0, 0x3E, 0xFF, 0xE8, 0x0, 0xC2, 0xFF, 0xF0, 0x1, 0x3, 0xFF, 0xE8, 0x2, 0x68, 0xFF, 0xF0, 0x2, 0x6A, 0xFF, 0xF4, 0x2, 0x6C, 0xFF, 0xF0, 0x2, 0x70, 0xFF, 0xF3, 0x2, 0x73, 0xFF, 0xF4, 0x2, 0x74, 0xFF, 0xF2, 0x2, 0x7C, 0xFF, 0xF0, 0x2, 0xAF, 0xFF, 0xF3, 0x2, 0xCA, 0xFF, 0xF3, 0x2, 0xD0, 0xFF, 0xF0, 0x2, 0xDA, 0xFF, 0xF3, 0x2, 0xDC, 0xFF, 0xF0, 0x2, 0xE7, 0xFF, 0xF4, 0x2, 0xF4, 0xFF, 0xF3, 0x2, 0xF9, 0xFF, 0xF1, 0x2, 0xFB, 0xFF, 0xF1, 0x2, 0xFD, 0xFF, 0xF4, 0x3, 0x3, 0xFF, 0xF4, 0x3, 0x6, 0xFF, 0xF4, 0x3, 0x8, 0xFF, 0xF4, 0x3, 0x10, 0xFF, 0xF4, 0x6, 0x23, 0xFF, 0xF0, 0x6, 0x25, 0xFF, 0xF0, 0x6, 0x29, 0xFF, 0xF0, 0x6, 0x96, 0xFF, 0xF3, 0x8, 0xE7, 0xFF, 0xE8, 0x9, 0x5C, 0xFF, 0xF0, 0x9, 0x5E, 0xFF, 0xF0, 0x9, 0x60, 0xFF, 0xF0, 0x9, 0x70, 0xFF, 0xE8, 0x9, 0x72, 0xFF, 0xE8, 0x9, 0xDA, 0xFF, 0xE8, 0x9, 0xE9, 0xFF, 0xE8, 0x9, 0xEA, 0xFF, 0xF3, 0x9, 0xEC, 0xFF, 0xE8, 0xA, 0x4, 0xFF, 0xF2, 0xA, 0x10, 0xFF, 0xF0, 0xA, 0x11, 0xFF, 0xF3, 0xA, 0x28, 0xFF, 0xE8, 0xA, 0x39, 0xFF, 0xF3, 0xA, 0x41, 0xFF, 0xE8, 0xA, 0x44, 0xFF, 0xF3, 0xA, 0x52, 0xFF, 0xF3, 0xA, 0x63, 0xFF, 0xF2, 0xA, 0x65, 0xFF, 0xF2, 0xA, 0x67, 0xFF, 0xF2, 0xA, 0xC0, 0xFF, 0xE8, 0xA, 0xC2, 0xFF, 0xE8, 0xA, 0xC4, 0xFF, 0xE8, 0xA, 0xC7, 0xFF, 0xF0, 0xA, 0xD6, 0xFF, 0xE8, 0xB, 0xAD, 0xFF, 0xF0, 0xB, 0xAF, 0xFF, 0xF0, 0xB, 0xB1, 0xFF, 0xF0, 0xB, 0xB3, 0xFF, 0xF0, 0xB, 0xBF, 0xFF, 0xF3, 0xB, 0xC1, 0xFF, 0xF3, 0xB, 0xC7, 0xFF, 0xF3, 0xB, 0xC9, 0xFF, 0xF3, 0xB, 0xCB, 0xFF, 0xE8, 0xC, 0xA2, 0xFF, 0xE8, 0xC, 0xA3, 0xFF, 0xE8, 0x0, 0xCC, 0x0, 0x26, 0x0, 0xD, 0x0, 0x39, 0xFF, 0xBD, 0x0, 0x3B, 0xFF, 0xD2, 0x0, 0x3D, 0x0, 0xF, 0x0, 0x3E, 0xFF, 0xDD, 0x0, 0x52, 0xFF, 0xF5, 0x0, 0x53, 0xFF, 0xF5, 0x0, 0x55, 0xFF, 0xF5, 0x0, 0xC2, 0xFF, 0xBD, 0x0, 0xEA, 0xFF, 0xF5, 0x0, 0xFA, 0x0, 0xD, 0x1, 0x3, 0xFF, 0xDD, 0x2, 0x28, 0xFF, 0xF5, 0x2, 0x31, 0x0, 0xD, 0x2, 0x33, 0x0, 0xD, 0x2, 0x40, 0xFF, 0xF5, 0x2, 0x68, 0xFF, 0xBD, 0x2, 0x6A, 0x0, 0xF, 0x2, 0x6C, 0xFF, 0xBD, 0x2, 0x6F, 0x0, 0x14, 0x2, 0x70, 0x0, 0xF, 0x2, 0x73, 0x0, 0xF, 0x2, 0x74, 0xFF, 0xF0, 0x2, 0x77, 0xFF, 0xC7, 0x2, 0x7C, 0xFF, 0xE4, 0x2, 0x7D, 0xFF, 0xF3, 0x2, 0x82, 0xFF, 0xF5, 0x2, 0x83, 0x0, 0x13, 0x2, 0x86, 0xFF, 0xF5, 0x2, 0x87, 0xFF, 0xF5, 0x2, 0x88, 0x0, 0x14, 0x2, 0x89, 0xFF, 0xF5, 0x2, 0x8A, 0xFF, 0xF5, 0x2, 0x8B, 0xFF, 0xF5, 0x2, 0x8C, 0xFF, 0xDE, 0x2, 0x8E, 0xFF, 0xF5, 0x2, 0x8F, 0xFF, 0xDB, 0x2, 0x90, 0xFF, 0xF5, 0x2, 0x91, 0xFF, 0xF5, 0x2, 0x94, 0xFF, 0xF0, 0x2, 0x96, 0xFF, 0xF5, 0x2, 0x9A, 0x0, 0x14, 0x2, 0x9B, 0xFF, 0xF5, 0x2, 0xA3, 0x0, 0xD, 0x2, 0xAF, 0xFF, 0xD2, 0x2, 0xC2, 0xFF, 0xF5, 0x2, 0xCA, 0x0, 0xF, 0x2, 0xCD, 0xFF, 0xF5, 0x2, 0xD0, 0xFF, 0xBD, 0x2, 0xD1, 0xFF, 0xD0, 0x2, 0xD3, 0xFF, 0xF5, 0x2, 0xD5, 0xFF, 0xF5, 0x2, 0xDA, 0x0, 0xF, 0x2, 0xDC, 0xFF, 0xBD, 0x2, 0xDE, 0xFF, 0xC7, 0x2, 0xDF, 0xFF, 0xDB, 0x2, 0xE0, 0xFF, 0xCE, 0x2, 0xE1, 0xFF, 0xDF, 0x2, 0xE3, 0xFF, 0xEE, 0x2, 0xE7, 0x0, 0xF, 0x2, 0xE8, 0x0, 0x14, 0x2, 0xEA, 0xFF, 0xF5, 0x2, 0xEC, 0xFF, 0xF5, 0x2, 0xEE, 0xFF, 0xF5, 0x2, 0xF3, 0xFF, 0xF5, 0x2, 0xF4, 0x0, 0xF, 0x2, 0xF9, 0xFF, 0xCB, 0x2, 0xFB, 0xFF, 0xCB, 0x2, 0xFD, 0x0, 0xF, 0x3, 0x3, 0xFF, 0xD6, 0x3, 0x4, 0xFF, 0xD7, 0x3, 0x6, 0x0, 0xF, 0x3, 0x7, 0x0, 0x14, 0x3, 0x8, 0x0, 0xF, 0x3, 0x9, 0x0, 0x14, 0x3, 0xF, 0xFF, 0xF5, 0x3, 0x10, 0x0, 0xF, 0x3, 0x11, 0x0, 0x14, 0x3, 0x13, 0xFF, 0xF5, 0x5, 0xF0, 0xFF, 0xF5, 0x5, 0xF1, 0x0, 0xD, 0x6, 0x0, 0xFF, 0xF5, 0x6, 0x1F, 0xFF, 0xC7, 0x6, 0x20, 0xFF, 0xDB, 0x6, 0x23, 0xFF, 0xBD, 0x6, 0x25, 0xFF, 0xBD, 0x6, 0x28, 0xFF, 0xF5, 0x6, 0x29, 0xFF, 0xBD, 0x6, 0x30, 0xFF, 0xF5, 0x6, 0x6A, 0x0, 0xD, 0x6, 0x6C, 0x0, 0xD, 0x6, 0x70, 0x0, 0xD, 0x6, 0x72, 0x0, 0xD, 0x6, 0x74, 0x0, 0xD, 0x6, 0x96, 0xFF, 0xD2, 0x6, 0xAB, 0xFF, 0xF5, 0x6, 0xAC, 0xFF, 0xF5, 0x6, 0xFB, 0xFF, 0xF5, 0x6, 0xFC, 0xFF, 0xF5, 0x6, 0xFD, 0xFF, 0xF5, 0x7, 0x12, 0xFF, 0xF5, 0x8, 0xCD, 0x0, 0xD, 0x8, 0xCE, 0x0, 0xD, 0x8, 0xCF, 0x0, 0xD, 0x8, 0xD0, 0x0, 0xD, 0x8, 0xD1, 0x0, 0xD, 0x8, 0xD2, 0x0, 0xD, 0x8, 0xD3, 0x0, 0xD, 0x8, 0xE7, 0xFF, 0xDD, 0x8, 0xF8, 0xFF, 0xF5, 0x9, 0x4, 0x0, 0xD, 0x9, 0x6, 0x0, 0xD, 0x9, 0x8, 0x0, 0xD, 0x9, 0x40, 0xFF, 0xF5, 0x9, 0x42, 0xFF, 0xF5, 0x9, 0x44, 0xFF, 0xF5, 0x9, 0x45, 0xFF, 0xF5, 0x9, 0x5C, 0xFF, 0xBD, 0x9, 0x5E, 0xFF, 0xBD, 0x9, 0x60, 0xFF, 0xBD, 0x9, 0x70, 0xFF, 0xDD, 0x9, 0x72, 0xFF, 0xDD, 0x9, 0xD5, 0x0, 0xD, 0x9, 0xDA, 0xFF, 0xDD, 0x9, 0xDD, 0x0, 0xD, 0x9, 0xE9, 0xFF, 0xDD, 0x9, 0xEA, 0x0, 0xF, 0x9, 0xEC, 0xFF, 0xDD, 0x9, 0xEF, 0xFF, 0xF5, 0xA, 0x4, 0xFF, 0xF0, 0xA, 0x5, 0x0, 0xD, 0xA, 0x10, 0xFF, 0xBD, 0xA, 0x11, 0x0, 0xF, 0xA, 0x14, 0xFF, 0xF5, 0xA, 0x16, 0xFF, 0xF5, 0xA, 0x1B, 0xFF, 0xF5, 0xA, 0x20, 0xFF, 0xF5, 0xA, 0x28, 0xFF, 0xDD, 0xA, 0x30, 0xFF, 0xF5, 0xA, 0x31, 0x0, 0xD, 0xA, 0x36, 0xFF, 0xF5, 0xA, 0x39, 0xFF, 0xD2, 0xA, 0x41, 0xFF, 0xDD, 0xA, 0x44, 0x0, 0xF, 0xA, 0x47, 0x0, 0xD, 0xA, 0x49, 0x0, 0xD, 0xA, 0x52, 0x0, 0xF, 0xA, 0x57, 0xFF, 0xF5, 0xA, 0x59, 0xFF, 0xF5, 0xA, 0x63, 0xFF, 0xF0, 0xA, 0x65, 0xFF, 0xF0, 0xA, 0x67, 0xFF, 0xF0, 0xA, 0x69, 0xFF, 0xC7, 0xA, 0x6A, 0xFF, 0xDB, 0xA, 0x6C, 0xFF, 0xF5, 0xA, 0x6E, 0x0, 0xD, 0xA, 0x70, 0x0, 0xD, 0xA, 0x72, 0x0, 0xD, 0xA, 0x74, 0x0, 0xD, 0xA, 0x76, 0x0, 0xD, 0xA, 0x78, 0x0, 0xD, 0xA, 0x7A, 0x0, 0xD, 0xA, 0x7C, 0x0, 0xD, 0xA, 0x7E, 0x0, 0xD, 0xA, 0x80, 0x0, 0xD, 0xA, 0x82, 0x0, 0xD, 0xA, 0x84, 0x0, 0xD, 0xA, 0xC0, 0xFF, 0xDD, 0xA, 0xC2, 0xFF, 0xDD, 0xA, 0xC4, 0xFF, 0xDD, 0xA, 0xC7, 0xFF, 0xBD, 0xA, 0xC9, 0xFF, 0xC7, 0xA, 0xCA, 0xFF, 0xDB, 0xA, 0xCC, 0xFF, 0xF5, 0xA, 0xD6, 0xFF, 0xDD, 0xA, 0xE7, 0xFF, 0xF5, 0xA, 0xED, 0xFF, 0xF5, 0xA, 0xEE, 0x0, 0xD, 0xA, 0xFF, 0x0, 0xD, 0xB, 0x1, 0x0, 0xD, 0xB, 0x13, 0xFF, 0xF5, 0xB, 0x14, 0x0, 0xD, 0xB, 0x16, 0x0, 0xD, 0xB, 0x2E, 0x0, 0xD, 0xB, 0x84, 0xFF, 0xF5, 0xB, 0x86, 0xFF, 0xF5, 0xB, 0x88, 0xFF, 0xF5, 0xB, 0x8A, 0xFF, 0xF5, 0xB, 0x8C, 0xFF, 0xF5, 0xB, 0x8E, 0xFF, 0xF5, 0xB, 0xAD, 0xFF, 0xBD, 0xB, 0xAF, 0xFF, 0xBD, 0xB, 0xB1, 0xFF, 0xBD, 0xB, 0xB3, 0xFF, 0xBD, 0xB, 0xBF, 0xFF, 0xD2, 0xB, 0xC1, 0xFF, 0xD2, 0xB, 0xC7, 0x0, 0xF, 0xB, 0xC9, 0x0, 0xF, 0xB, 0xCB, 0xFF, 0xDD, 0xC, 0x81, 0x0, 0xD, 0xC, 0x82, 0x0, 0xD, 0xC, 0x85, 0x0, 0xD, 0xC, 0xA2, 0xFF, 0xDD, 0xC, 0xA3, 0xFF, 0xDD, 0x0, 0x47, 0x0, 0x7, 0xFF, 0xD6, 0x0, 0xC, 0xFF, 0xD6, 0x0, 0x39, 0xFF, 0xC1, 0x0, 0x3B, 0xFF, 0xDC, 0x0, 0x3E, 0xFF, 0xCA, 0x0, 0xC2, 0xFF, 0xC1, 0x1, 0x3, 0xFF, 0xCA, 0x2, 0x68, 0xFF, 0xC1, 0x2, 0x6C, 0xFF, 0xC1, 0x2, 0x74, 0xFF, 0xF3, 0x2, 0x77, 0xFF, 0xEF, 0x2, 0x7C, 0xFF, 0xD9, 0x2, 0x8C, 0xFF, 0xDF, 0x2, 0x94, 0xFF, 0xE4, 0x2, 0xAF, 0xFF, 0xDC, 0x2, 0xD0, 0xFF, 0xC1, 0x2, 0xD1, 0xFF, 0xDE, 0x2, 0xDC, 0xFF, 0xC1, 0x2, 0xDE, 0xFF, 0xEF, 0x2, 0xE0, 0xFF, 0xEF, 0x2, 0xE3, 0xFF, 0xDC, 0x2, 0xF9, 0xFF, 0xE1, 0x2, 0xFB, 0xFF, 0xF3, 0x3, 0x3, 0xFF, 0xC2, 0x3, 0x4, 0xFF, 0xE0, 0x4, 0x62, 0xFF, 0xD6, 0x4, 0x63, 0xFF, 0xD6, 0x4, 0x65, 0xFF, 0xD6, 0x4, 0x66, 0xFF, 0xD6, 0x4, 0x67, 0xFF, 0xD6, 0x6, 0x1F, 0xFF, 0xEF, 0x6, 0x23, 0xFF, 0xC1, 0x6, 0x25, 0xFF, 0xC1, 0x6, 0x29, 0xFF, 0xC1, 0x6, 0x96, 0xFF, 0xDC, 0x8, 0xE7, 0xFF, 0xCA, 0x9, 0x5C, 0xFF, 0xC1, 0x9, 0x5E, 0xFF, 0xC1, 0x9, 0x60, 0xFF, 0xC1, 0x9, 0x70, 0xFF, 0xCA, 0x9, 0x72, 0xFF, 0xCA, 0x9, 0xDA, 0xFF, 0xCA, 0x9, 0xE9, 0xFF, 0xCA, 0x9, 0xEC, 0xFF, 0xCA, 0xA, 0x4, 0xFF, 0xF3, 0xA, 0x10, 0xFF, 0xC1, 0xA, 0x28, 0xFF, 0xCA, 0xA, 0x2A, 0xFF, 0xD6, 0xA, 0x2B, 0xFF, 0xD6, 0xA, 0x2E, 0xFF, 0xD6, 0xA, 0x39, 0xFF, 0xDC, 0xA, 0x41, 0xFF, 0xCA, 0xA, 0x63, 0xFF, 0xF3, 0xA, 0x65, 0xFF, 0xF3, 0xA, 0x67, 0xFF, 0xF3, 0xA, 0x69, 0xFF, 0xEF, 0xA, 0xC0, 0xFF, 0xCA, 0xA, 0xC2, 0xFF, 0xCA, 0xA, 0xC4, 0xFF, 0xCA, 0xA, 0xC7, 0xFF, 0xC1, 0xA, 0xC9, 0xFF, 0xEF, 0xA, 0xD6, 0xFF, 0xCA, 0xB, 0xAD, 0xFF, 0xC1, 0xB, 0xAF, 0xFF, 0xC1, 0xB, 0xB1, 0xFF, 0xC1, 0xB, 0xB3, 0xFF, 0xC1, 0xB, 0xBF, 0xFF, 0xDC, 0xB, 0xC1, 0xFF, 0xDC, 0xB, 0xCB, 0xFF, 0xCA, 0xC, 0xA2, 0xFF, 0xCA, 0xC, 0xA3, 0xFF, 0xCA, 0x0, 0x42, 0x0, 0x39, 0xFF, 0xE1, 0x0, 0x3D, 0xFF, 0xD8, 0x0, 0x3E, 0xFF, 0xD7, 0x0, 0xC2, 0xFF, 0xE1, 0x1, 0x3, 0xFF, 0xD7, 0x2, 0x68, 0xFF, 0xE1, 0x2, 0x6A, 0xFF, 0xE3, 0x2, 0x6C, 0xFF, 0xE1, 0x2, 0x6F, 0xFF, 0xE0, 0x2, 0x70, 0xFF, 0xD8, 0x2, 0x73, 0xFF, 0xE3, 0x2, 0x74, 0xFF, 0xDD, 0x2, 0x88, 0xFF, 0xEC, 0x2, 0x9A, 0xFF, 0xEC, 0x2, 0xCA, 0xFF, 0xD8, 0x2, 0xD0, 0xFF, 0xE1, 0x2, 0xDA, 0xFF, 0xD8, 0x2, 0xDC, 0xFF, 0xE1, 0x2, 0xE7, 0xFF, 0xE3, 0x2, 0xE8, 0xFF, 0xEC, 0x2, 0xF4, 0xFF, 0xD8, 0x2, 0xFD, 0xFF, 0xE3, 0x3, 0x3, 0xFF, 0xDE, 0x3, 0x6, 0xFF, 0xE3, 0x3, 0x7, 0xFF, 0xEC, 0x3, 0x8, 0xFF, 0xE3, 0x3, 0x9, 0xFF, 0xEC, 0x3, 0x10, 0xFF, 0xE3, 0x3, 0x11, 0xFF, 0xEC, 0x6, 0x23, 0xFF, 0xE1, 0x6, 0x25, 0xFF, 0xE1, 0x6, 0x29, 0xFF, 0xE1, 0x8, 0xE7, 0xFF, 0xD7, 0x9, 0x5C, 0xFF, 0xE1, 0x9, 0x5E, 0xFF, 0xE1, 0x9, 0x60, 0xFF, 0xE1, 0x9, 0x70, 0xFF, 0xD7, 0x9, 0x72, 0xFF, 0xD7, 0x9, 0xDA, 0xFF, 0xD7, 0x9, 0xE9, 0xFF, 0xD7, 0x9, 0xEA, 0xFF, 0xD8, 0x9, 0xEC, 0xFF, 0xD7, 0xA, 0x4, 0xFF, 0xDD, 0xA, 0x10, 0xFF, 0xE1, 0xA, 0x11, 0xFF, 0xD8, 0xA, 0x28, 0xFF, 0xD7, 0xA, 0x41, 0xFF, 0xD7, 0xA, 0x44, 0xFF, 0xD8, 0xA, 0x52, 0xFF, 0xD8, 0xA, 0x63, 0xFF, 0xDD, 0xA, 0x65, 0xFF, 0xDD, 0xA, 0x67, 0xFF, 0xDD, 0xA, 0xC0, 0xFF, 0xD7, 0xA, 0xC2, 0xFF, 0xD7, 0xA, 0xC4, 0xFF, 0xD7, 0xA, 0xC7, 0xFF, 0xE1, 0xA, 0xD6, 0xFF, 0xD7, 0xB, 0xAD, 0xFF, 0xE1, 0xB, 0xAF, 0xFF, 0xE1, 0xB, 0xB1, 0xFF, 0xE1, 0xB, 0xB3, 0xFF, 0xE1, 0xB, 0xC7, 0xFF, 0xD8, 0xB, 0xC9, 0xFF, 0xD8, 0xB, 0xCB, 0xFF, 0xD7, 0xC, 0xA2, 0xFF, 0xD7, 0xC, 0xA3, 0xFF, 0xD7, 0x0, 0x31, 0x0, 0x39, 0xFF, 0xE0, 0x0, 0x3D, 0xFF, 0xE2, 0x0, 0xC2, 0xFF, 0xE0, 0x2, 0x68, 0xFF, 0xE0, 0x2, 0x6A, 0xFF, 0xD7, 0x2, 0x6C, 0xFF, 0xE0, 0x2, 0x6F, 0xFF, 0xD8, 0x2, 0x70, 0xFF, 0xE2, 0x2, 0x73, 0xFF, 0xD7, 0x2, 0x74, 0xFF, 0xD2, 0x2, 0x83, 0xFF, 0xDB, 0x2, 0x88, 0xFF, 0xE9, 0x2, 0x9A, 0xFF, 0xE9, 0x2, 0xCA, 0xFF, 0xE2, 0x2, 0xD0, 0xFF, 0xE0, 0x2, 0xDA, 0xFF, 0xE2, 0x2, 0xDC, 0xFF, 0xE0, 0x2, 0xE7, 0xFF, 0xD7, 0x2, 0xE8, 0xFF, 0xE9, 0x2, 0xF4, 0xFF, 0xE2, 0x2, 0xFD, 0xFF, 0xD7, 0x3, 0x6, 0xFF, 0xD7, 0x3, 0x7, 0xFF, 0xE9, 0x3, 0x8, 0xFF, 0xD7, 0x3, 0x9, 0xFF, 0xE9, 0x3, 0x10, 0xFF, 0xD7, 0x3, 0x11, 0xFF, 0xE9, 0x6, 0x23, 0xFF, 0xE0, 0x6, 0x25, 0xFF, 0xE0, 0x6, 0x29, 0xFF, 0xE0, 0x9, 0x5C, 0xFF, 0xE0, 0x9, 0x5E, 0xFF, 0xE0, 0x9, 0x60, 0xFF, 0xE0, 0x9, 0xEA, 0xFF, 0xE2, 0xA, 0x4, 0xFF, 0xD2, 0xA, 0x10, 0xFF, 0xE0, 0xA, 0x11, 0xFF, 0xE2, 0xA, 0x44, 0xFF, 0xE2, 0xA, 0x52, 0xFF, 0xE2, 0xA, 0x63, 0xFF, 0xD2, 0xA, 0x65, 0xFF, 0xD2, 0xA, 0x67, 0xFF, 0xD2, 0xA, 0xC7, 0xFF, 0xE0, 0xB, 0xAD, 0xFF, 0xE0, 0xB, 0xAF, 0xFF, 0xE0, 0xB, 0xB1, 0xFF, 0xE0, 0xB, 0xB3, 0xFF, 0xE0, 0xB, 0xC7, 0xFF, 0xE2, 0xB, 0xC9, 0xFF, 0xE2, 0x0, 0x23, 0x0, 0x39, 0xFF, 0xE9, 0x0, 0x3E, 0xFF, 0xF2, 0x0, 0xC2, 0xFF, 0xE9, 0x1, 0x3, 0xFF, 0xF2, 0x2, 0x68, 0xFF, 0xE9, 0x2, 0x6C, 0xFF, 0xE9, 0x2, 0xD0, 0xFF, 0xE9, 0x2, 0xDC, 0xFF, 0xE9, 0x6, 0x23, 0xFF, 0xE9, 0x6, 0x25, 0xFF, 0xE9, 0x6, 0x29, 0xFF, 0xE9, 0x8, 0xE7, 0xFF, 0xF2, 0x9, 0x5C, 0xFF, 0xE9, 0x9, 0x5E, 0xFF, 0xE9, 0x9, 0x60, 0xFF, 0xE9, 0x9, 0x70, 0xFF, 0xF2, 0x9, 0x72, 0xFF, 0xF2, 0x9, 0xDA, 0xFF, 0xF2, 0x9, 0xE9, 0xFF, 0xF2, 0x9, 0xEC, 0xFF, 0xF2, 0xA, 0x10, 0xFF, 0xE9, 0xA, 0x28, 0xFF, 0xF2, 0xA, 0x41, 0xFF, 0xF2, 0xA, 0xC0, 0xFF, 0xF2, 0xA, 0xC2, 0xFF, 0xF2, 0xA, 0xC4, 0xFF, 0xF2, 0xA, 0xC7, 0xFF, 0xE9, 0xA, 0xD6, 0xFF, 0xF2, 0xB, 0xAD, 0xFF, 0xE9, 0xB, 0xAF, 0xFF, 0xE9, 0xB, 0xB1, 0xFF, 0xE9, 0xB, 0xB3, 0xFF, 0xE9, 0xB, 0xCB, 0xFF, 0xF2, 0xC, 0xA2, 0xFF, 0xF2, 0xC, 0xA3, 0xFF, 0xF2, 0x0, 0x4F, 0x0, 0x52, 0xFF, 0xEE, 0x0, 0x53, 0xFF, 0xEE, 0x0, 0x55, 0xFF, 0xEE, 0x0, 0x5D, 0xFF, 0xE4, 0x0, 0xEA, 0xFF, 0xEE, 0x2, 0x28, 0xFF, 0xEE, 0x2, 0x40, 0xFF, 0xEE, 0x2, 0x82, 0xFF, 0xEE, 0x2, 0x83, 0xFF, 0xED, 0x2, 0x84, 0xFF, 0xE4, 0x2, 0x86, 0xFF, 0xEE, 0x2, 0x87, 0xFF, 0xEE, 0x2, 0x89, 0xFF, 0xEE, 0x2, 0x8A, 0xFF, 0xEE, 0x2, 0x8B, 0xFF, 0xEE, 0x2, 0x8C, 0xFF, 0xE9, 0x2, 0x8E, 0xFF, 0xEE, 0x2, 0x90, 0xFF, 0xEE, 0x2, 0x91, 0xFF, 0xEE, 0x2, 0x94, 0xFF, 0xF5, 0x2, 0x96, 0xFF, 0xEE, 0x2, 0x9B, 0xFF, 0xEE, 0x2, 0x9F, 0xFF, 0xF3, 0x2, 0xB6, 0xFF, 0xF0, 0x2, 0xC2, 0xFF, 0xEE, 0x2, 0xCB, 0xFF, 0xE4, 0x2, 0xCD, 0xFF, 0xEE, 0x2, 0xD1, 0xFF, 0xDC, 0x2, 0xD3, 0xFF, 0xEE, 0x2, 0xD5, 0xFF, 0xEE, 0x2, 0xDB, 0xFF, 0xE4, 0x2, 0xEA, 0xFF, 0xEE, 0x2, 0xEC, 0xFF, 0xEE, 0x2, 0xEE, 0xFF, 0xEE, 0x2, 0xF3, 0xFF, 0xEE, 0x2, 0xF5, 0xFF, 0xE4, 0x3, 0x4, 0xFF, 0xE7, 0x3, 0xF, 0xFF, 0xEE, 0x3, 0x13, 0xFF, 0xEE, 0x5, 0xF0, 0xFF, 0xEE, 0x6, 0x0, 0xFF, 0xEE, 0x6, 0x28, 0xFF, 0xEE, 0x6, 0x30, 0xFF, 0xEE, 0x6, 0xAB, 0xFF, 0xEE, 0x6, 0xAC, 0xFF, 0xEE, 0x6, 0xFB, 0xFF, 0xEE, 0x6, 0xFC, 0xFF, 0xEE, 0x6, 0xFD, 0xFF, 0xEE, 0x7, 0x12, 0xFF, 0xEE, 0x8, 0xF8, 0xFF, 0xEE, 0x9, 0x40, 0xFF, 0xEE, 0x9, 0x42, 0xFF, 0xEE, 0x9, 0x44, 0xFF, 0xEE, 0x9, 0x45, 0xFF, 0xEE, 0x9, 0xEF, 0xFF, 0xEE, 0xA, 0x14, 0xFF, 0xEE, 0xA, 0x16, 0xFF, 0xEE, 0xA, 0x19, 0xFF, 0xE4, 0xA, 0x1B, 0xFF, 0xEE, 0xA, 0x20, 0xFF, 0xEE, 0xA, 0x30, 0xFF, 0xEE, 0xA, 0x36, 0xFF, 0xEE, 0xA, 0x45, 0xFF, 0xE4, 0xA, 0x53, 0xFF, 0xE4, 0xA, 0x57, 0xFF, 0xEE, 0xA, 0x59, 0xFF, 0xEE, 0xA, 0x6C, 0xFF, 0xEE, 0xA, 0xCC, 0xFF, 0xEE, 0xA, 0xE7, 0xFF, 0xEE, 0xA, 0xED, 0xFF, 0xEE, 0xB, 0x13, 0xFF, 0xEE, 0xB, 0x84, 0xFF, 0xEE, 0xB, 0x86, 0xFF, 0xEE, 0xB, 0x88, 0xFF, 0xEE, 0xB, 0x8A, 0xFF, 0xEE, 0xB, 0x8C, 0xFF, 0xEE, 0xB, 0x8E, 0xFF, 0xEE, 0xB, 0xC8, 0xFF, 0xE4, 0xB, 0xCA, 0xFF, 0xE4, 0x0, 0x66, 0x0, 0x7, 0xFF, 0xF1, 0x0, 0xC, 0xFF, 0xF1, 0x0, 0x52, 0xFF, 0xFB, 0x0, 0x53, 0xFF, 0xFB, 0x0, 0x55, 0xFF, 0xFB, 0x0, 0x5B, 0xFF, 0xED, 0x0, 0x5E, 0xFF, 0xED, 0x0, 0xEA, 0xFF, 0xFB, 0x2, 0x28, 0xFF, 0xFB, 0x2, 0x3C, 0xFF, 0xED, 0x2, 0x40, 0xFF, 0xFB, 0x2, 0x82, 0xFF, 0xFB, 0x2, 0x86, 0xFF, 0xFB, 0x2, 0x87, 0xFF, 0xFB, 0x2, 0x89, 0xFF, 0xFB, 0x2, 0x8A, 0xFF, 0xFB, 0x2, 0x8B, 0xFF, 0xFB, 0x2, 0x8C, 0xFF, 0xEC, 0x2, 0x8E, 0xFF, 0xFB, 0x2, 0x90, 0xFF, 0xFB, 0x2, 0x91, 0xFF, 0xFB, 0x2, 0x94, 0xFF, 0xF8, 0x2, 0x96, 0xFF, 0xFB, 0x2, 0x9B, 0xFF, 0xFB, 0x2, 0x9F, 0xFF, 0xF4, 0x2, 0xB0, 0xFF, 0xED, 0x2, 0xC2, 0xFF, 0xFB, 0x2, 0xCD, 0xFF, 0xFB, 0x2, 0xD1, 0xFF, 0xE3, 0x2, 0xD3, 0xFF, 0xFB, 0x2, 0xD5, 0xFF, 0xFB, 0x2, 0xEA, 0xFF, 0xFB, 0x2, 0xEC, 0xFF, 0xFB, 0x2, 0xEE, 0xFF, 0xFB, 0x2, 0xF3, 0xFF, 0xFB, 0x3, 0x4, 0xFF, 0xEA, 0x3, 0xF, 0xFF, 0xFB, 0x3, 0x13, 0xFF, 0xFB, 0x4, 0x62, 0xFF, 0xF1, 0x4, 0x63, 0xFF, 0xF1, 0x4, 0x65, 0xFF, 0xF1, 0x4, 0x66, 0xFF, 0xF1, 0x4, 0x67, 0xFF, 0xF1, 0x5, 0x67, 0xFF, 0xED, 0x5, 0xF0, 0xFF, 0xFB, 0x6, 0x0, 0xFF, 0xFB, 0x6, 0x28, 0xFF, 0xFB, 0x6, 0x30, 0xFF, 0xFB, 0x6, 0xAB, 0xFF, 0xFB, 0x6, 0xAC, 0xFF, 0xFB, 0x6, 0xFB, 0xFF, 0xFB, 0x6, 0xFC, 0xFF, 0xFB, 0x6, 0xFD, 0xFF, 0xFB, 0x7, 0x12, 0xFF, 0xFB, 0x8, 0xF8, 0xFF, 0xFB, 0x9, 0x2, 0xFF, 0xED, 0x9, 0x3, 0xFF, 0xED, 0x9, 0x40, 0xFF, 0xFB, 0x9, 0x42, 0xFF, 0xFB, 0x9, 0x44, 0xFF, 0xFB, 0x9, 0x45, 0xFF, 0xFB, 0x9, 0x71, 0xFF, 0xED, 0x9, 0xEF, 0xFF, 0xFB, 0x9, 0xF5, 0xFF, 0xED, 0xA, 0x14, 0xFF, 0xFB, 0xA, 0x16, 0xFF, 0xFB, 0xA, 0x18, 0xFF, 0xED, 0xA, 0x1B, 0xFF, 0xFB, 0xA, 0x20, 0xFF, 0xFB, 0xA, 0x21, 0xFF, 0xED, 0xA, 0x29, 0xFF, 0xED, 0xA, 0x2A, 0xFF, 0xF1, 0xA, 0x2B, 0xFF, 0xF1, 0xA, 0x2E, 0xFF, 0xF1, 0xA, 0x30, 0xFF, 0xFB, 0xA, 0x36, 0xFF, 0xFB, 0xA, 0x3A, 0xFF, 0xED, 0xA, 0x42, 0xFF, 0xED, 0xA, 0x57, 0xFF, 0xFB, 0xA, 0x59, 0xFF, 0xFB, 0xA, 0x64, 0xFF, 0xED, 0xA, 0x66, 0xFF, 0xED, 0xA, 0x68, 0xFF, 0xED, 0xA, 0x6C, 0xFF, 0xFB, 0xA, 0xC1, 0xFF, 0xED, 0xA, 0xC3, 0xFF, 0xED, 0xA, 0xC5, 0xFF, 0xED, 0xA, 0xCC, 0xFF, 0xFB, 0xA, 0xE7, 0xFF, 0xFB, 0xA, 0xED, 0xFF, 0xFB, 0xB, 0x13, 0xFF, 0xFB, 0xB, 0x3B, 0xFF, 0xED, 0xB, 0x84, 0xFF, 0xFB, 0xB, 0x86, 0xFF, 0xFB, 0xB, 0x88, 0xFF, 0xFB, 0xB, 0x8A, 0xFF, 0xFB, 0xB, 0x8C, 0xFF, 0xFB, 0xB, 0x8E, 0xFF, 0xFB, 0xB, 0xC0, 0xFF, 0xED, 0xB, 0xC2, 0xFF, 0xED, 0xB, 0xCC, 0xFF, 0xED, 0xB, 0xD6, 0xFF, 0xED, 0x0, 0x4A, 0x0, 0x52, 0xFF, 0xF4, 0x0, 0x53, 0xFF, 0xF4, 0x0, 0x55, 0xFF, 0xF4, 0x0, 0xEA, 0xFF, 0xF4, 0x2, 0x28, 0xFF, 0xF4, 0x2, 0x40, 0xFF, 0xF4, 0x2, 0x82, 0xFF, 0xF4, 0x2, 0x83, 0x0, 0x1D, 0x2, 0x86, 0xFF, 0xF4, 0x2, 0x87, 0xFF, 0xF4, 0x2, 0x89, 0xFF, 0xF4, 0x2, 0x8A, 0xFF, 0xF4, 0x2, 0x8B, 0xFF, 0xF4, 0x2, 0x8C, 0xFF, 0xE8, 0x2, 0x8E, 0xFF, 0xF4, 0x2, 0x8F, 0xFF, 0xE8, 0x2, 0x90, 0xFF, 0xF4, 0x2, 0x91, 0xFF, 0xF4, 0x2, 0x92, 0xFF, 0xD0, 0x2, 0x94, 0xFF, 0xF4, 0x2, 0x96, 0xFF, 0xF4, 0x2, 0x9B, 0xFF, 0xF4, 0x2, 0xC2, 0xFF, 0xF4, 0x2, 0xCD, 0xFF, 0xF4, 0x2, 0xD1, 0xFF, 0xEC, 0x2, 0xD3, 0xFF, 0xF4, 0x2, 0xD5, 0xFF, 0xF4, 0x2, 0xDF, 0xFF, 0xE8, 0x2, 0xE1, 0xFF, 0xEC, 0x2, 0xEA, 0xFF, 0xF4, 0x2, 0xEC, 0xFF, 0xF4, 0x2, 0xEE, 0xFF, 0xF4, 0x2, 0xF3, 0xFF, 0xF4, 0x3, 0x4, 0xFF, 0xEC, 0x3, 0xF, 0xFF, 0xF4, 0x3, 0x13, 0xFF, 0xF4, 0x5, 0xF0, 0xFF, 0xF4, 0x6, 0x0, 0xFF, 0xF4, 0x6, 0x20, 0xFF, 0xE8, 0x6, 0x28, 0xFF, 0xF4, 0x6, 0x30, 0xFF, 0xF4, 0x6, 0xAB, 0xFF, 0xF4, 0x6, 0xAC, 0xFF, 0xF4, 0x6, 0xFB, 0xFF, 0xF4, 0x6, 0xFC, 0xFF, 0xF4, 0x6, 0xFD, 0xFF, 0xF4, 0x7, 0x12, 0xFF, 0xF4, 0x8, 0xF8, 0xFF, 0xF4, 0x9, 0x40, 0xFF, 0xF4, 0x9, 0x42, 0xFF, 0xF4, 0x9, 0x44, 0xFF, 0xF4, 0x9, 0x45, 0xFF, 0xF4, 0x9, 0xEF, 0xFF, 0xF4, 0xA, 0x14, 0xFF, 0xF4, 0xA, 0x16, 0xFF, 0xF4, 0xA, 0x1B, 0xFF, 0xF4, 0xA, 0x20, 0xFF, 0xF4, 0xA, 0x30, 0xFF, 0xF4, 0xA, 0x36, 0xFF, 0xF4, 0xA, 0x57, 0xFF, 0xF4, 0xA, 0x59, 0xFF, 0xF4, 0xA, 0x6A, 0xFF, 0xE8, 0xA, 0x6C, 0xFF, 0xF4, 0xA, 0xCA, 0xFF, 0xE8, 0xA, 0xCC, 0xFF, 0xF4, 0xA, 0xE7, 0xFF, 0xF4, 0xA, 0xED, 0xFF, 0xF4, 0xB, 0x13, 0xFF, 0xF4, 0xB, 0x84, 0xFF, 0xF4, 0xB, 0x86, 0xFF, 0xF4, 0xB, 0x88, 0xFF, 0xF4, 0xB, 0x8A, 0xFF, 0xF4, 0xB, 0x8C, 0xFF, 0xF4, 0xB, 0x8E, 0xFF, 0xF4, 0x0, 0xA, 0x0, 0x7, 0xFF, 0xF1, 0x0, 0xC, 0xFF, 0xF1, 0x4, 0x62, 0xFF, 0xF1, 0x4, 0x63, 0xFF, 0xF1, 0x4, 0x65, 0xFF, 0xF1, 0x4, 0x66, 0xFF, 0xF1, 0x4, 0x67, 0xFF, 0xF1, 0xA, 0x2A, 0xFF, 0xF1, 0xA, 0x2B, 0xFF, 0xF1, 0xA, 0x2E, 0xFF, 0xF1, 0x0, 0xCA, 0x0, 0x48, 0xFF, 0xEF, 0x0, 0x49, 0xFF, 0xEF, 0x0, 0x4A, 0xFF, 0xEF, 0x0, 0x4C, 0xFF, 0xEF, 0x0, 0x54, 0xFF, 0xD2, 0x0, 0x56, 0xFF, 0xEF, 0x0, 0x95, 0xFF, 0xEF, 0x0, 0x9F, 0xFF, 0xEF, 0x0, 0xB5, 0xFF, 0xEF, 0x0, 0xDA, 0xFF, 0xEF, 0x0, 0xDC, 0xFF, 0xEF, 0x0, 0xE4, 0xFF, 0xEF, 0x1, 0x0, 0xFF, 0xEF, 0x2, 0x2A, 0xFF, 0xEF, 0x2, 0x3A, 0xFF, 0xEF, 0x2, 0x47, 0xFF, 0xEF, 0x2, 0x48, 0xFF, 0xEF, 0x2, 0x56, 0xFF, 0xD2, 0x2, 0x58, 0xFF, 0xEF, 0x2, 0x61, 0xFF, 0xEF, 0x2, 0x8D, 0xFF, 0xEF, 0x2, 0x99, 0xFF, 0xEF, 0x2, 0xAE, 0xFF, 0xD2, 0x2, 0xB2, 0xFF, 0xE9, 0x2, 0xB4, 0xFF, 0xEF, 0x2, 0xB8, 0xFF, 0xEF, 0x2, 0xD9, 0xFF, 0xEF, 0x2, 0xF7, 0xFF, 0xEF, 0x2, 0xF8, 0xFF, 0xEF, 0x3, 0x2, 0xFF, 0xEF, 0x5, 0x6E, 0xFF, 0xEF, 0x5, 0x70, 0xFF, 0xD2, 0x5, 0xEE, 0xFF, 0xD2, 0x6, 0x2, 0xFF, 0xD2, 0x6, 0x4, 0xFF, 0xD2, 0x6, 0x6, 0xFF, 0xD2, 0x6, 0x32, 0xFF, 0xD2, 0x6, 0x85, 0xFF, 0xD2, 0x6, 0x87, 0xFF, 0xD2, 0x6, 0x8F, 0xFF, 0xEF, 0x6, 0x91, 0xFF, 0xEF, 0x6, 0xA9, 0xFF, 0xEF, 0x6, 0xCB, 0xFF, 0xEF, 0x6, 0xF7, 0xFF, 0xEF, 0x7, 0x57, 0xFF, 0xE9, 0x7, 0x59, 0xFF, 0xE9, 0x7, 0x61, 0xFF, 0xE7, 0x7, 0x68, 0xFF, 0xE9, 0x7, 0x71, 0xFF, 0xE9, 0x7, 0x8D, 0xFF, 0xE9, 0x7, 0x96, 0xFF, 0xE9, 0x7, 0xAF, 0xFF, 0xE9, 0x8, 0xEF, 0xFF, 0xEF, 0x8, 0xF0, 0xFF, 0xEF, 0x8, 0xF1, 0xFF, 0xEF, 0x8, 0xF2, 0xFF, 0xEF, 0x8, 0xF3, 0xFF, 0xEF, 0x8, 0xF9, 0xFF, 0xD2, 0x8, 0xFA, 0xFF, 0xD2, 0x8, 0xFB, 0xFF, 0xD2, 0x8, 0xFC, 0xFF, 0xD2, 0x8, 0xFD, 0xFF, 0xD2, 0x9, 0xB, 0xFF, 0xEF, 0x9, 0xD, 0xFF, 0xEF, 0x9, 0xF, 0xFF, 0xEF, 0x9, 0x11, 0xFF, 0xEF, 0x9, 0x13, 0xFF, 0xEF, 0x9, 0x15, 0xFF, 0xEF, 0x9, 0x17, 0xFF, 0xEF, 0x9, 0x19, 0xFF, 0xEF, 0x9, 0x1B, 0xFF, 0xEF, 0x9, 0x1D, 0xFF, 0xEF, 0x9, 0x1F, 0xFF, 0xEF, 0x9, 0x21, 0xFF, 0xEF, 0x9, 0x23, 0xFF, 0xEF, 0x9, 0x25, 0xFF, 0xEF, 0x9, 0x47, 0xFF, 0xD2, 0x9, 0x49, 0xFF, 0xD2, 0x9, 0x4B, 0xFF, 0xD2, 0x9, 0x87, 0xFF, 0xE9, 0x9, 0x91, 0xFF, 0xE9, 0x9, 0x92, 0xFF, 0xE9, 0x9, 0x93, 0xFF, 0xE9, 0x9, 0x94, 0xFF, 0xE9, 0x9, 0x95, 0xFF, 0xE9, 0x9, 0x9E, 0xFF, 0xE9, 0x9, 0x9F, 0xFF, 0xE9, 0x9, 0xA0, 0xFF, 0xE9, 0x9, 0xA1, 0xFF, 0xE9, 0x9, 0xA8, 0xFF, 0xE9, 0x9, 0xA9, 0xFF, 0xE9, 0x9, 0xAA, 0xFF, 0xE9, 0x9, 0xAB, 0xFF, 0xE9, 0x9, 0xBB, 0xFF, 0xE9, 0x9, 0xBC, 0xFF, 0xE9, 0x9, 0xBD, 0xFF, 0xE9, 0x9, 0xBE, 0xFF, 0xE9, 0x9, 0xED, 0xFF, 0xEF, 0x9, 0xF3, 0xFF, 0xD2, 0x9, 0xF9, 0xFF, 0xD2, 0xA, 0x13, 0xFF, 0xEF, 0xA, 0x15, 0xFF, 0xD2, 0xA, 0x17, 0xFF, 0xEF, 0xA, 0x1A, 0xFF, 0xEF, 0xA, 0x35, 0xFF, 0xEF, 0xA, 0x3B, 0xFF, 0xEF, 0xA, 0x40, 0xFF, 0xEF, 0xA, 0x4E, 0xFF, 0xEF, 0xA, 0x50, 0xFF, 0xEF, 0xA, 0x51, 0xFF, 0xEF, 0xA, 0x5B, 0xFF, 0xD2, 0xA, 0x5D, 0xFF, 0xEF, 0xA, 0x60, 0xFF, 0xD2, 0xA, 0x6D, 0xFF, 0xEF, 0xA, 0x87, 0xFF, 0xEF, 0xA, 0x89, 0xFF, 0xEF, 0xA, 0x8B, 0xFF, 0xEF, 0xA, 0x8D, 0xFF, 0xEF, 0xA, 0x8F, 0xFF, 0xEF, 0xA, 0x91, 0xFF, 0xEF, 0xA, 0x93, 0xFF, 0xEF, 0xA, 0x95, 0xFF, 0xEF, 0xA, 0x9B, 0xFF, 0xD2, 0xA, 0x9D, 0xFF, 0xD2, 0xA, 0x9F, 0xFF, 0xD2, 0xA, 0xA1, 0xFF, 0xD2, 0xA, 0xA3, 0xFF, 0xD2, 0xA, 0xA5, 0xFF, 0xD2, 0xA, 0xA7, 0xFF, 0xD2, 0xA, 0xA9, 0xFF, 0xEF, 0xA, 0xAB, 0xFF, 0xEF, 0xA, 0xAD, 0xFF, 0xEF, 0xA, 0xAF, 0xFF, 0xD2, 0xA, 0xB1, 0xFF, 0xEF, 0xA, 0xF3, 0xFF, 0xD2, 0xA, 0xFE, 0xFF, 0xEF, 0xB, 0x6, 0xFF, 0xEF, 0xB, 0xA, 0xFF, 0xD2, 0xB, 0xC, 0xFF, 0xD2, 0xB, 0xF, 0xFF, 0xEF, 0xB, 0x19, 0xFF, 0xEF, 0xB, 0x1B, 0xFF, 0xEF, 0xB, 0x21, 0xFF, 0xD2, 0xB, 0x23, 0xFF, 0xD2, 0xB, 0x33, 0xFF, 0xD2, 0xB, 0x35, 0xFF, 0xD2, 0xB, 0x37, 0xFF, 0xD2, 0xB, 0x39, 0xFF, 0xD2, 0xB, 0x3C, 0xFF, 0xD2, 0xB, 0x42, 0xFF, 0xEF, 0xB, 0x4A, 0xFF, 0xEF, 0xB, 0x54, 0xFF, 0xEF, 0xB, 0x56, 0xFF, 0xEF, 0xB, 0x58, 0xFF, 0xEF, 0xB, 0x5A, 0xFF, 0xEF, 0xB, 0x5C, 0xFF, 0xEF, 0xB, 0x5E, 0xFF, 0xEF, 0xB, 0x60, 0xFF, 0xEF, 0xB, 0x62, 0xFF, 0xEF, 0xB, 0x64, 0xFF, 0xEF, 0xB, 0x66, 0xFF, 0xEF, 0xB, 0x68, 0xFF, 0xEF, 0xB, 0x6C, 0xFF, 0xEF, 0xB, 0x90, 0xFF, 0xD2, 0xB, 0x92, 0xFF, 0xD2, 0xB, 0x94, 0xFF, 0xD2, 0xB, 0x96, 0xFF, 0xD2, 0xB, 0xD8, 0xFF, 0xEF, 0xB, 0xD9, 0xFF, 0xEF, 0xB, 0xDA, 0xFF, 0xEF, 0xB, 0xDB, 0xFF, 0xEF, 0xB, 0xDC, 0xFF, 0xEF, 0xB, 0xDD, 0xFF, 0xEF, 0xB, 0xDE, 0xFF, 0xEF, 0xB, 0xDF, 0xFF, 0xEF, 0xC, 0x14, 0xFF, 0xD2, 0xC, 0x15, 0xFF, 0xD2, 0xC, 0x16, 0xFF, 0xD2, 0xC, 0x17, 0xFF, 0xD2, 0xC, 0x18, 0xFF, 0xD2, 0xC, 0x19, 0xFF, 0xD2, 0xC, 0x44, 0xFF, 0xD2, 0xC, 0x45, 0xFF, 0xD2, 0xC, 0x4A, 0xFF, 0xEF, 0xC, 0x4B, 0xFF, 0xEF, 0xC, 0x4C, 0xFF, 0xEF, 0xC, 0x4D, 0xFF, 0xEF, 0xC, 0x4E, 0xFF, 0xEF, 0xC, 0x4F, 0xFF, 0xEF, 0xC, 0x50, 0xFF, 0xEF, 0xC, 0x51, 0xFF, 0xEF, 0xC, 0x7A, 0xFF, 0xEF, 0xC, 0x7B, 0xFF, 0xEF, 0xC, 0x7C, 0xFF, 0xEF, 0xC, 0x7D, 0xFF, 0xEF, 0xC, 0x7E, 0xFF, 0xEF, 0xC, 0x7F, 0xFF, 0xEF, 0xC, 0x80, 0xFF, 0xEF, 0xC, 0xBB, 0xFF, 0xE9, 0xC, 0xDD, 0xFF, 0xE9, 0xC, 0xE0, 0xFF, 0xE9, 0xC, 0xE5, 0xFF, 0xE9, 0x1, 0x4B, 0x0, 0x7, 0x0, 0xE, 0x0, 0xC, 0x0, 0xE, 0x0, 0x46, 0xFF, 0xEF, 0x0, 0x48, 0xFF, 0xC8, 0x0, 0x49, 0xFF, 0xC8, 0x0, 0x4A, 0xFF, 0xC8, 0x0, 0x4B, 0x0, 0xE, 0x0, 0x4C, 0xFF, 0xC8, 0x0, 0x54, 0xFF, 0xE3, 0x0, 0x56, 0xFF, 0xC8, 0x0, 0x5B, 0x0, 0xC, 0x0, 0x5E, 0x0, 0xC, 0x0, 0x95, 0xFF, 0xC8, 0x0, 0x9F, 0xFF, 0xC8, 0x0, 0xB5, 0xFF, 0xC8, 0x0, 0xDA, 0xFF, 0xC8, 0x0, 0xDC, 0xFF, 0xC8, 0x0, 0xE4, 0xFF, 0xC8, 0x1, 0x0, 0xFF, 0xC8, 0x2, 0x2A, 0xFF, 0xC8, 0x2, 0x3A, 0xFF, 0xC8, 0x2, 0x3C, 0x0, 0xC, 0x2, 0x3D, 0xFF, 0xEA, 0x2, 0x46, 0xFF, 0xDA, 0x2, 0x47, 0xFF, 0xCB, 0x2, 0x48, 0xFF, 0xC8, 0x2, 0x4B, 0xFF, 0xE1, 0x2, 0x56, 0xFF, 0xE3, 0x2, 0x58, 0xFF, 0xC8, 0x2, 0x61, 0xFF, 0xC8, 0x2, 0x83, 0xFF, 0xC3, 0x2, 0x88, 0xFF, 0xD3, 0x2, 0x8D, 0xFF, 0xC8, 0x2, 0x99, 0xFF, 0xC8, 0x2, 0x9A, 0xFF, 0xD3, 0x2, 0xAE, 0xFF, 0xE3, 0x2, 0xB0, 0x0, 0xC, 0x2, 0xB2, 0xFF, 0xEA, 0x2, 0xB4, 0xFF, 0xC8, 0x2, 0xB6, 0x0, 0xD, 0x2, 0xB8, 0xFF, 0xC8, 0x2, 0xD9, 0xFF, 0xC8, 0x2, 0xE8, 0xFF, 0xD3, 0x2, 0xF7, 0xFF, 0xC8, 0x2, 0xF8, 0xFF, 0xC8, 0x2, 0xFA, 0x0, 0xC, 0x2, 0xFC, 0x0, 0xC, 0x3, 0x2, 0xFF, 0xC8, 0x3, 0x7, 0xFF, 0xD3, 0x3, 0x9, 0xFF, 0xD3, 0x3, 0x11, 0xFF, 0xD3, 0x4, 0x62, 0x0, 0xE, 0x4, 0x63, 0x0, 0xE, 0x4, 0x65, 0x0, 0xE, 0x4, 0x66, 0x0, 0xE, 0x4, 0x67, 0x0, 0xE, 0x5, 0x5B, 0xFF, 0xEF, 0x5, 0x67, 0x0, 0xC, 0x5, 0x6E, 0xFF, 0xC8, 0x5, 0x70, 0xFF, 0xE3, 0x5, 0xEE, 0xFF, 0xE3, 0x6, 0x2, 0xFF, 0xE3, 0x6, 0x4, 0xFF, 0xE3, 0x6, 0x6, 0xFF, 0xE3, 0x6, 0x32, 0xFF, 0xE3, 0x6, 0x6B, 0xFF, 0xEF, 0x6, 0x6D, 0xFF, 0xEF, 0x6, 0x6F, 0xFF, 0xEF, 0x6, 0x71, 0xFF, 0xEF, 0x6, 0x73, 0xFF, 0xEF, 0x6, 0x75, 0xFF, 0xEF, 0x6, 0x85, 0xFF, 0xE3, 0x6, 0x87, 0xFF, 0xE3, 0x6, 0x8F, 0xFF, 0xC8, 0x6, 0x91, 0xFF, 0xC8, 0x6, 0xA9, 0xFF, 0xC8, 0x6, 0xCB, 0xFF, 0xC8, 0x6, 0xF7, 0xFF, 0xC8, 0x7, 0x4F, 0x0, 0x8, 0x7, 0x52, 0x0, 0x8, 0x7, 0x54, 0x0, 0x9, 0x7, 0x55, 0xFF, 0xF9, 0x7, 0x57, 0xFF, 0xF3, 0x7, 0x59, 0xFF, 0xF4, 0x7, 0x61, 0xFF, 0xF3, 0x7, 0x67, 0xFF, 0xD6, 0x7, 0x68, 0xFF, 0xF4, 0x7, 0x69, 0xFF, 0xD6, 0x7, 0x70, 0x0, 0x9, 0x7, 0x71, 0xFF, 0xF4, 0x7, 0x74, 0x0, 0x9, 0x7, 0x8C, 0x0, 0x9, 0x7, 0x8D, 0xFF, 0xF4, 0x7, 0x8E, 0x0, 0x8, 0x7, 0x90, 0x0, 0x9, 0x7, 0x96, 0xFF, 0xF4, 0x7, 0xAF, 0xFF, 0xF4, 0x7, 0xB1, 0xFF, 0xD6, 0x8, 0xE8, 0xFF, 0xEF, 0x8, 0xE9, 0xFF, 0xEF, 0x8, 0xEA, 0xFF, 0xEF, 0x8, 0xEB, 0xFF, 0xEF, 0x8, 0xEC, 0xFF, 0xEF, 0x8, 0xED, 0xFF, 0xEF, 0x8, 0xEE, 0xFF, 0xEF, 0x8, 0xEF, 0xFF, 0xC8, 0x8, 0xF0, 0xFF, 0xC8, 0x8, 0xF1, 0xFF, 0xC8, 0x8, 0xF2, 0xFF, 0xC8, 0x8, 0xF3, 0xFF, 0xC8, 0x8, 0xF9, 0xFF, 0xE3, 0x8, 0xFA, 0xFF, 0xE3, 0x8, 0xFB, 0xFF, 0xE3, 0x8, 0xFC, 0xFF, 0xE3, 0x8, 0xFD, 0xFF, 0xE3, 0x9, 0x2, 0x0, 0xC, 0x9, 0x3, 0x0, 0xC, 0x9, 0x5, 0xFF, 0xEF, 0x9, 0x7, 0xFF, 0xEF, 0x9, 0x9, 0xFF, 0xEF, 0x9, 0xB, 0xFF, 0xC8, 0x9, 0xD, 0xFF, 0xC8, 0x9, 0xF, 0xFF, 0xC8, 0x9, 0x11, 0xFF, 0xC8, 0x9, 0x13, 0xFF, 0xC8, 0x9, 0x15, 0xFF, 0xC8, 0x9, 0x17, 0xFF, 0xC8, 0x9, 0x19, 0xFF, 0xC8, 0x9, 0x1B, 0xFF, 0xC8, 0x9, 0x1D, 0xFF, 0xC8, 0x9, 0x1F, 0xFF, 0xC8, 0x9, 0x21, 0xFF, 0xC8, 0x9, 0x23, 0xFF, 0xC8, 0x9, 0x25, 0xFF, 0xC8, 0x9, 0x47, 0xFF, 0xE3, 0x9, 0x49, 0xFF, 0xE3, 0x9, 0x4B, 0xFF, 0xE3, 0x9, 0x71, 0x0, 0xC, 0x9, 0x80, 0xFF, 0xD6, 0x9, 0x81, 0xFF, 0xD6, 0x9, 0x82, 0xFF, 0xD6, 0x9, 0x83, 0xFF, 0xD6, 0x9, 0x84, 0xFF, 0xD6, 0x9, 0x85, 0xFF, 0xD6, 0x9, 0x86, 0xFF, 0xD6, 0x9, 0x87, 0xFF, 0xF4, 0x9, 0x91, 0xFF, 0xF4, 0x9, 0x92, 0xFF, 0xF4, 0x9, 0x93, 0xFF, 0xF4, 0x9, 0x94, 0xFF, 0xF4, 0x9, 0x95, 0xFF, 0xF4, 0x9, 0x9A, 0x0, 0x8, 0x9, 0x9B, 0xFF, 0xD6, 0x9, 0x9C, 0xFF, 0xD6, 0x9, 0x9D, 0xFF, 0xD6, 0x9, 0x9E, 0xFF, 0xF4, 0x9, 0x9F, 0xFF, 0xF4, 0x9, 0xA0, 0xFF, 0xF4, 0x9, 0xA1, 0xFF, 0xF4, 0x9, 0xA8, 0xFF, 0xF4, 0x9, 0xA9, 0xFF, 0xF4, 0x9, 0xAA, 0xFF, 0xF4, 0x9, 0xAB, 0xFF, 0xF4, 0x9, 0xBB, 0xFF, 0xF4, 0x9, 0xBC, 0xFF, 0xF4, 0x9, 0xBD, 0xFF, 0xF4, 0x9, 0xBE, 0xFF, 0xF4, 0x9, 0xC2, 0xFF, 0xF9, 0x9, 0xC3, 0xFF, 0xF9, 0x9, 0xC4, 0xFF, 0xF9, 0x9, 0xC5, 0xFF, 0xF9, 0x9, 0xC7, 0x0, 0x9, 0x9, 0xD0, 0x0, 0x8, 0x9, 0xD1, 0x0, 0x8, 0x9, 0xED, 0xFF, 0xC8, 0x9, 0xF3, 0xFF, 0xE3, 0x9, 0xF5, 0x0, 0xC, 0x9, 0xF9, 0xFF, 0xE3, 0xA, 0x12, 0xFF, 0xEF, 0xA, 0x13, 0xFF, 0xC8, 0xA, 0x15, 0xFF, 0xE3, 0xA, 0x17, 0xFF, 0xC8, 0xA, 0x18, 0x0, 0xC, 0xA, 0x1A, 0xFF, 0xC8, 0xA, 0x21, 0x0, 0xC, 0xA, 0x29, 0x0, 0xC, 0xA, 0x2A, 0x0, 0xE, 0xA, 0x2B, 0x0, 0xE, 0xA, 0x2E, 0x0, 0xE, 0xA, 0x32, 0xFF, 0xEF, 0xA, 0x35, 0xFF, 0xC8, 0xA, 0x3A, 0x0, 0xC, 0xA, 0x3B, 0xFF, 0xC8, 0xA, 0x40, 0xFF, 0xC8, 0xA, 0x42, 0x0, 0xC, 0xA, 0x48, 0xFF, 0xEF, 0xA, 0x4A, 0xFF, 0xEF, 0xA, 0x4E, 0xFF, 0xC8, 0xA, 0x50, 0xFF, 0xC8, 0xA, 0x51, 0xFF, 0xC8, 0xA, 0x5B, 0xFF, 0xE3, 0xA, 0x5D, 0xFF, 0xC8, 0xA, 0x60, 0xFF, 0xE3, 0xA, 0x64, 0x0, 0xC, 0xA, 0x66, 0x0, 0xC, 0xA, 0x68, 0x0, 0xC, 0xA, 0x6D, 0xFF, 0xC8, 0xA, 0x6F, 0xFF, 0xEF, 0xA, 0x71, 0xFF, 0xEF, 0xA, 0x73, 0xFF, 0xEF, 0xA, 0x75, 0xFF, 0xEF, 0xA, 0x77, 0xFF, 0xEF, 0xA, 0x79, 0xFF, 0xEF, 0xA, 0x7B, 0xFF, 0xEF, 0xA, 0x7D, 0xFF, 0xEF, 0xA, 0x7F, 0xFF, 0xEF, 0xA, 0x81, 0xFF, 0xEF, 0xA, 0x83, 0xFF, 0xEF, 0xA, 0x85, 0xFF, 0xEF, 0xA, 0x87, 0xFF, 0xC8, 0xA, 0x89, 0xFF, 0xC8, 0xA, 0x8B, 0xFF, 0xC8, 0xA, 0x8D, 0xFF, 0xC8, 0xA, 0x8F, 0xFF, 0xC8, 0xA, 0x91, 0xFF, 0xC8, 0xA, 0x93, 0xFF, 0xC8, 0xA, 0x95, 0xFF, 0xC8, 0xA, 0x9B, 0xFF, 0xE3, 0xA, 0x9D, 0xFF, 0xE3, 0xA, 0x9F, 0xFF, 0xE3, 0xA, 0xA1, 0xFF, 0xE3, 0xA, 0xA3, 0xFF, 0xE3, 0xA, 0xA5, 0xFF, 0xE3, 0xA, 0xA7, 0xFF, 0xE3, 0xA, 0xA9, 0xFF, 0xC8, 0xA, 0xAB, 0xFF, 0xC8, 0xA, 0xAD, 0xFF, 0xC8, 0xA, 0xAF, 0xFF, 0xE3, 0xA, 0xB1, 0xFF, 0xC8, 0xA, 0xC1, 0x0, 0xC, 0xA, 0xC3, 0x0, 0xC, 0xA, 0xC5, 0x0, 0xC, 0xA, 0xEF, 0xFF, 0xEF, 0xA, 0xF3, 0xFF, 0xE3, 0xA, 0xFE, 0xFF, 0xC8, 0xB, 0x0, 0xFF, 0xEF, 0xB, 0x2, 0xFF, 0xEF, 0xB, 0x4, 0xFF, 0xEF, 0xB, 0x6, 0xFF, 0xC8, 0xB, 0xA, 0xFF, 0xE3, 0xB, 0xC, 0xFF, 0xE3, 0xB, 0xF, 0xFF, 0xC8, 0xB, 0x15, 0xFF, 0xEF, 0xB, 0x17, 0xFF, 0xEF, 0xB, 0x19, 0xFF, 0xC8, 0xB, 0x1B, 0xFF, 0xC8, 0xB, 0x21, 0xFF, 0xE3, 0xB, 0x23, 0xFF, 0xE3, 0xB, 0x2F, 0xFF, 0xEF, 0xB, 0x33, 0xFF, 0xE3, 0xB, 0x35, 0xFF, 0xE3, 0xB, 0x37, 0xFF, 0xE3, 0xB, 0x39, 0xFF, 0xE3, 0xB, 0x3B, 0x0, 0xC, 0xB, 0x3C, 0xFF, 0xE3, 0xB, 0x42, 0xFF, 0xC8, 0xB, 0x4A, 0xFF, 0xC8, 0xB, 0x54, 0xFF, 0xC8, 0xB, 0x56, 0xFF, 0xC8, 0xB, 0x58, 0xFF, 0xC8, 0xB, 0x5A, 0xFF, 0xC8, 0xB, 0x5C, 0xFF, 0xC8, 0xB, 0x5E, 0xFF, 0xC8, 0xB, 0x60, 0xFF, 0xC8, 0xB, 0x62, 0xFF, 0xC8, 0xB, 0x64, 0xFF, 0xC8, 0xB, 0x66, 0xFF, 0xC8, 0xB, 0x68, 0xFF, 0xC8, 0xB, 0x6C, 0xFF, 0xC8, 0xB, 0x90, 0xFF, 0xE3, 0xB, 0x92, 0xFF, 0xE3, 0xB, 0x94, 0xFF, 0xE3, 0xB, 0x96, 0xFF, 0xE3, 0xB, 0xC0, 0x0, 0xC, 0xB, 0xC2, 0x0, 0xC, 0xB, 0xCC, 0x0, 0xC, 0xB, 0xD6, 0x0, 0xC, 0xB, 0xD7, 0xFF, 0xEF, 0xB, 0xD8, 0xFF, 0xC8, 0xB, 0xD9, 0xFF, 0xC8, 0xB, 0xDA, 0xFF, 0xC8, 0xB, 0xDB, 0xFF, 0xC8, 0xB, 0xDC, 0xFF, 0xC8, 0xB, 0xDD, 0xFF, 0xC8, 0xB, 0xDE, 0xFF, 0xC8, 0xB, 0xDF, 0xFF, 0xC8, 0xC, 0x14, 0xFF, 0xE3, 0xC, 0x15, 0xFF, 0xE3, 0xC, 0x16, 0xFF, 0xE3, 0xC, 0x17, 0xFF, 0xE3, 0xC, 0x18, 0xFF, 0xE3, 0xC, 0x19, 0xFF, 0xE3, 0xC, 0x44, 0xFF, 0xE3, 0xC, 0x45, 0xFF, 0xE3, 0xC, 0x4A, 0xFF, 0xC8, 0xC, 0x4B, 0xFF, 0xC8, 0xC, 0x4C, 0xFF, 0xC8, 0xC, 0x4D, 0xFF, 0xC8, 0xC, 0x4E, 0xFF, 0xC8, 0xC, 0x4F, 0xFF, 0xC8, 0xC, 0x50, 0xFF, 0xC8, 0xC, 0x51, 0xFF, 0xC8, 0xC, 0x7A, 0xFF, 0xC8, 0xC, 0x7B, 0xFF, 0xC8, 0xC, 0x7C, 0xFF, 0xC8, 0xC, 0x7D, 0xFF, 0xC8, 0xC, 0x7E, 0xFF, 0xC8, 0xC, 0x7F, 0xFF, 0xC8, 0xC, 0x80, 0xFF, 0xC8, 0xC, 0xB7, 0xFF, 0xD6, 0xC, 0xBB, 0xFF, 0xF4, 0xC, 0xBC, 0x0, 0x8, 0xC, 0xBE, 0xFF, 0xD6, 0xC, 0xCA, 0x0, 0x8, 0xC, 0xCD, 0x0, 0x8, 0xC, 0xD6, 0xFF, 0xD6, 0xC, 0xDD, 0xFF, 0xF4, 0xC, 0xE0, 0xFF, 0xF4, 0xC, 0xE1, 0x0, 0x9, 0xC, 0xE5, 0xFF, 0xF4, 0xC, 0xE6, 0x0, 0x8, 0x0, 0x12, 0x2, 0x83, 0x0, 0x16, 0x2, 0x88, 0x0, 0x11, 0x2, 0x8C, 0xFF, 0xEF, 0x2, 0x8F, 0xFF, 0xEF, 0x2, 0x94, 0xFF, 0xF6, 0x2, 0x97, 0x0, 0x14, 0x2, 0x9A, 0x0, 0x11, 0x2, 0xD1, 0xFF, 0xE8, 0x2, 0xDF, 0xFF, 0xEF, 0x2, 0xE1, 0xFF, 0xE2, 0x2, 0xE8, 0x0, 0x11, 0x3, 0x4, 0xFF, 0xEF, 0x3, 0x7, 0x0, 0x11, 0x3, 0x9, 0x0, 0x11, 0x3, 0x11, 0x0, 0x11, 0x6, 0x20, 0xFF, 0xEF, 0xA, 0x6A, 0xFF, 0xEF, 0xA, 0xCA, 0xFF, 0xEF, 0x0, 0x87, 0x0, 0x48, 0xFF, 0xED, 0x0, 0x49, 0xFF, 0xED, 0x0, 0x4A, 0xFF, 0xED, 0x0, 0x4C, 0xFF, 0xED, 0x0, 0x56, 0xFF, 0xED, 0x0, 0x95, 0xFF, 0xED, 0x0, 0x9F, 0xFF, 0xED, 0x0, 0xB5, 0xFF, 0xED, 0x0, 0xDA, 0xFF, 0xED, 0x0, 0xDC, 0xFF, 0xED, 0x0, 0xE4, 0xFF, 0xED, 0x1, 0x0, 0xFF, 0xED, 0x2, 0x2A, 0xFF, 0xED, 0x2, 0x3A, 0xFF, 0xED, 0x2, 0x47, 0xFF, 0xED, 0x2, 0x48, 0xFF, 0xED, 0x2, 0x58, 0xFF, 0xED, 0x2, 0x61, 0xFF, 0xED, 0x2, 0x83, 0x0, 0x13, 0x2, 0x88, 0x0, 0xF, 0x2, 0x8C, 0xFF, 0xE1, 0x2, 0x8D, 0xFF, 0xED, 0x2, 0x8F, 0xFF, 0xE1, 0x2, 0x92, 0xFF, 0xD1, 0x2, 0x94, 0xFF, 0xED, 0x2, 0x99, 0xFF, 0xED, 0x2, 0x9A, 0x0, 0xF, 0x2, 0xB4, 0xFF, 0xED, 0x2, 0xB8, 0xFF, 0xED, 0x2, 0xD1, 0xFF, 0x9F, 0x2, 0xD9, 0xFF, 0xED, 0x2, 0xDF, 0xFF, 0xE1, 0x2, 0xE1, 0xFF, 0xDA, 0x2, 0xE8, 0x0, 0xF, 0x2, 0xF7, 0xFF, 0xED, 0x2, 0xF8, 0xFF, 0xED, 0x3, 0x2, 0xFF, 0xED, 0x3, 0x4, 0xFF, 0xE1, 0x3, 0x7, 0x0, 0xF, 0x3, 0x9, 0x0, 0xF, 0x3, 0x11, 0x0, 0xF, 0x5, 0x6E, 0xFF, 0xED, 0x6, 0x20, 0xFF, 0xE1, 0x6, 0x8F, 0xFF, 0xED, 0x6, 0x91, 0xFF, 0xED, 0x6, 0xA9, 0xFF, 0xED, 0x6, 0xCB, 0xFF, 0xED, 0x6, 0xF7, 0xFF, 0xED, 0x8, 0xEF, 0xFF, 0xED, 0x8, 0xF0, 0xFF, 0xED, 0x8, 0xF1, 0xFF, 0xED, 0x8, 0xF2, 0xFF, 0xED, 0x8, 0xF3, 0xFF, 0xED, 0x9, 0xB, 0xFF, 0xED, 0x9, 0xD, 0xFF, 0xED, 0x9, 0xF, 0xFF, 0xED, 0x9, 0x11, 0xFF, 0xED, 0x9, 0x13, 0xFF, 0xED, 0x9, 0x15, 0xFF, 0xED, 0x9, 0x17, 0xFF, 0xED, 0x9, 0x19, 0xFF, 0xED, 0x9, 0x1B, 0xFF, 0xED, 0x9, 0x1D, 0xFF, 0xED, 0x9, 0x1F, 0xFF, 0xED, 0x9, 0x21, 0xFF, 0xED, 0x9, 0x23, 0xFF, 0xED, 0x9, 0x25, 0xFF, 0xED, 0x9, 0xED, 0xFF, 0xED, 0xA, 0x13, 0xFF, 0xED, 0xA, 0x17, 0xFF, 0xED, 0xA, 0x1A, 0xFF, 0xED, 0xA, 0x35, 0xFF, 0xED, 0xA, 0x3B, 0xFF, 0xED, 0xA, 0x40, 0xFF, 0xED, 0xA, 0x4E, 0xFF, 0xED, 0xA, 0x50, 0xFF, 0xED, 0xA, 0x51, 0xFF, 0xED, 0xA, 0x5D, 0xFF, 0xED, 0xA, 0x6A, 0xFF, 0xE1, 0xA, 0x6D, 0xFF, 0xED, 0xA, 0x87, 0xFF, 0xED, 0xA, 0x89, 0xFF, 0xED, 0xA, 0x8B, 0xFF, 0xED, 0xA, 0x8D, 0xFF, 0xED, 0xA, 0x8F, 0xFF, 0xED, 0xA, 0x91, 0xFF, 0xED, 0xA, 0x93, 0xFF, 0xED, 0xA, 0x95, 0xFF, 0xED, 0xA, 0xA9, 0xFF, 0xED, 0xA, 0xAB, 0xFF, 0xED, 0xA, 0xAD, 0xFF, 0xED, 0xA, 0xB1, 0xFF, 0xED, 0xA, 0xCA, 0xFF, 0xE1, 0xA, 0xFE, 0xFF, 0xED, 0xB, 0x6, 0xFF, 0xED, 0xB, 0xF, 0xFF, 0xED, 0xB, 0x19, 0xFF, 0xED, 0xB, 0x1B, 0xFF, 0xED, 0xB, 0x42, 0xFF, 0xED, 0xB, 0x4A, 0xFF, 0xED, 0xB, 0x54, 0xFF, 0xED, 0xB, 0x56, 0xFF, 0xED, 0xB, 0x58, 0xFF, 0xED, 0xB, 0x5A, 0xFF, 0xED, 0xB, 0x5C, 0xFF, 0xED, 0xB, 0x5E, 0xFF, 0xED, 0xB, 0x60, 0xFF, 0xED, 0xB, 0x62, 0xFF, 0xED, 0xB, 0x64, 0xFF, 0xED, 0xB, 0x66, 0xFF, 0xED, 0xB, 0x68, 0xFF, 0xED, 0xB, 0x6C, 0xFF, 0xED, 0xB, 0xD8, 0xFF, 0xED, 0xB, 0xD9, 0xFF, 0xED, 0xB, 0xDA, 0xFF, 0xED, 0xB, 0xDB, 0xFF, 0xED, 0xB, 0xDC, 0xFF, 0xED, 0xB, 0xDD, 0xFF, 0xED, 0xB, 0xDE, 0xFF, 0xED, 0xB, 0xDF, 0xFF, 0xED, 0xC, 0x4A, 0xFF, 0xED, 0xC, 0x4B, 0xFF, 0xED, 0xC, 0x4C, 0xFF, 0xED, 0xC, 0x4D, 0xFF, 0xED, 0xC, 0x4E, 0xFF, 0xED, 0xC, 0x4F, 0xFF, 0xED, 0xC, 0x50, 0xFF, 0xED, 0xC, 0x51, 0xFF, 0xED, 0xC, 0x7A, 0xFF, 0xED, 0xC, 0x7B, 0xFF, 0xED, 0xC, 0x7C, 0xFF, 0xED, 0xC, 0x7D, 0xFF, 0xED, 0xC, 0x7E, 0xFF, 0xED, 0xC, 0x7F, 0xFF, 0xED, 0xC, 0x80, 0xFF, 0xED, 0x0, 0x27, 0x0, 0x5B, 0xFF, 0xD6, 0x0, 0x5E, 0xFF, 0xD6, 0x2, 0x3C, 0xFF, 0xD6, 0x2, 0x8C, 0xFF, 0xAD, 0x2, 0x8F, 0xFF, 0xF4, 0x2, 0x94, 0xFF, 0xF6, 0x2, 0x9F, 0xFF, 0xE8, 0x2, 0xB0, 0xFF, 0xD6, 0x2, 0xB6, 0xFF, 0xE9, 0x2, 0xD1, 0xFF, 0x88, 0x2, 0xDF, 0xFF, 0xF4, 0x2, 0xE1, 0xFF, 0xF4, 0x2, 0xFA, 0x0, 0x5, 0x2, 0xFC, 0xFF, 0xF8, 0x3, 0x4, 0xFF, 0xAC, 0x5, 0x67, 0xFF, 0xD6, 0x6, 0x20, 0xFF, 0xF4, 0x9, 0x2, 0xFF, 0xD6, 0x9, 0x3, 0xFF, 0xD6, 0x9, 0x71, 0xFF, 0xD6, 0x9, 0xF5, 0xFF, 0xD6, 0xA, 0x18, 0xFF, 0xD6, 0xA, 0x21, 0xFF, 0xD6, 0xA, 0x29, 0xFF, 0xD6, 0xA, 0x3A, 0xFF, 0xD6, 0xA, 0x42, 0xFF, 0xD6, 0xA, 0x64, 0xFF, 0xD6, 0xA, 0x66, 0xFF, 0xD6, 0xA, 0x68, 0xFF, 0xD6, 0xA, 0x6A, 0xFF, 0xF4, 0xA, 0xC1, 0xFF, 0xD6, 0xA, 0xC3, 0xFF, 0xD6, 0xA, 0xC5, 0xFF, 0xD6, 0xA, 0xCA, 0xFF, 0xF4, 0xB, 0x3B, 0xFF, 0xD6, 0xB, 0xC0, 0xFF, 0xD6, 0xB, 0xC2, 0xFF, 0xD6, 0xB, 0xCC, 0xFF, 0xD6, 0xB, 0xD6, 0xFF, 0xD6, 0x0, 0x69, 0x0, 0x52, 0xFF, 0xF8, 0x0, 0x53, 0xFF, 0xF8, 0x0, 0x55, 0xFF, 0xF8, 0x0, 0x5B, 0xFF, 0xF3, 0x0, 0x5D, 0xFF, 0xEF, 0x0, 0x5E, 0xFF, 0xF3, 0x0, 0xEA, 0xFF, 0xF8, 0x2, 0x28, 0xFF, 0xF8, 0x2, 0x3C, 0xFF, 0xF3, 0x2, 0x40, 0xFF, 0xF8, 0x2, 0x82, 0xFF, 0xF8, 0x2, 0x83, 0xFF, 0xEE, 0x2, 0x84, 0xFF, 0xEF, 0x2, 0x86, 0xFF, 0xF8, 0x2, 0x87, 0xFF, 0xF8, 0x2, 0x88, 0xFF, 0xF2, 0x2, 0x89, 0xFF, 0xF8, 0x2, 0x8A, 0xFF, 0xF8, 0x2, 0x8B, 0xFF, 0xF8, 0x2, 0x8E, 0xFF, 0xF8, 0x2, 0x90, 0xFF, 0xF8, 0x2, 0x91, 0xFF, 0xF8, 0x2, 0x94, 0xFF, 0xF4, 0x2, 0x96, 0xFF, 0xF8, 0x2, 0x9A, 0xFF, 0xF2, 0x2, 0x9B, 0xFF, 0xF8, 0x2, 0xB0, 0xFF, 0xF3, 0x2, 0xC2, 0xFF, 0xF8, 0x2, 0xCB, 0xFF, 0xEF, 0x2, 0xCD, 0xFF, 0xF8, 0x2, 0xD3, 0xFF, 0xF8, 0x2, 0xD5, 0xFF, 0xF8, 0x2, 0xDB, 0xFF, 0xEF, 0x2, 0xE8, 0xFF, 0xF2, 0x2, 0xEA, 0xFF, 0xF8, 0x2, 0xEC, 0xFF, 0xF8, 0x2, 0xEE, 0xFF, 0xF8, 0x2, 0xF3, 0xFF, 0xF8, 0x2, 0xF5, 0xFF, 0xEF, 0x3, 0x7, 0xFF, 0xF2, 0x3, 0x9, 0xFF, 0xF2, 0x3, 0xF, 0xFF, 0xF8, 0x3, 0x11, 0xFF, 0xF2, 0x3, 0x13, 0xFF, 0xF8, 0x5, 0x67, 0xFF, 0xF3, 0x5, 0xF0, 0xFF, 0xF8, 0x6, 0x0, 0xFF, 0xF8, 0x6, 0x28, 0xFF, 0xF8, 0x6, 0x30, 0xFF, 0xF8, 0x6, 0xAB, 0xFF, 0xF8, 0x6, 0xAC, 0xFF, 0xF8, 0x6, 0xFB, 0xFF, 0xF8, 0x6, 0xFC, 0xFF, 0xF8, 0x6, 0xFD, 0xFF, 0xF8, 0x7, 0x12, 0xFF, 0xF8, 0x8, 0xF8, 0xFF, 0xF8, 0x9, 0x2, 0xFF, 0xF3, 0x9, 0x3, 0xFF, 0xF3, 0x9, 0x40, 0xFF, 0xF8, 0x9, 0x42, 0xFF, 0xF8, 0x9, 0x44, 0xFF, 0xF8, 0x9, 0x45, 0xFF, 0xF8, 0x9, 0x71, 0xFF, 0xF3, 0x9, 0xEF, 0xFF, 0xF8, 0x9, 0xF5, 0xFF, 0xF3, 0xA, 0x14, 0xFF, 0xF8, 0xA, 0x16, 0xFF, 0xF8, 0xA, 0x18, 0xFF, 0xF3, 0xA, 0x19, 0xFF, 0xEF, 0xA, 0x1B, 0xFF, 0xF8, 0xA, 0x20, 0xFF, 0xF8, 0xA, 0x21, 0xFF, 0xF3, 0xA, 0x29, 0xFF, 0xF3, 0xA, 0x30, 0xFF, 0xF8, 0xA, 0x36, 0xFF, 0xF8, 0xA, 0x3A, 0xFF, 0xF3, 0xA, 0x42, 0xFF, 0xF3, 0xA, 0x45, 0xFF, 0xEF, 0xA, 0x53, 0xFF, 0xEF, 0xA, 0x57, 0xFF, 0xF8, 0xA, 0x59, 0xFF, 0xF8, 0xA, 0x64, 0xFF, 0xF3, 0xA, 0x66, 0xFF, 0xF3, 0xA, 0x68, 0xFF, 0xF3, 0xA, 0x6C, 0xFF, 0xF8, 0xA, 0xC1, 0xFF, 0xF3, 0xA, 0xC3, 0xFF, 0xF3, 0xA, 0xC5, 0xFF, 0xF3, 0xA, 0xCC, 0xFF, 0xF8, 0xA, 0xE7, 0xFF, 0xF8, 0xA, 0xED, 0xFF, 0xF8, 0xB, 0x13, 0xFF, 0xF8, 0xB, 0x3B, 0xFF, 0xF3, 0xB, 0x84, 0xFF, 0xF8, 0xB, 0x86, 0xFF, 0xF8, 0xB, 0x88, 0xFF, 0xF8, 0xB, 0x8A, 0xFF, 0xF8, 0xB, 0x8C, 0xFF, 0xF8, 0xB, 0x8E, 0xFF, 0xF8, 0xB, 0xC0, 0xFF, 0xF3, 0xB, 0xC2, 0xFF, 0xF3, 0xB, 0xC8, 0xFF, 0xEF, 0xB, 0xCA, 0xFF, 0xEF, 0xB, 0xCC, 0xFF, 0xF3, 0xB, 0xD6, 0xFF, 0xF3, 0x0, 0xA, 0x0, 0x7, 0xFF, 0xD6, 0x0, 0xC, 0xFF, 0xD6, 0x4, 0x62, 0xFF, 0xD6, 0x4, 0x63, 0xFF, 0xD6, 0x4, 0x65, 0xFF, 0xD6, 0x4, 0x66, 0xFF, 0xD6, 0x4, 0x67, 0xFF, 0xD6, 0xA, 0x2A, 0xFF, 0xD6, 0xA, 0x2B, 0xFF, 0xD6, 0xA, 0x2E, 0xFF, 0xD6, 0x0, 0x18, 0x0, 0x5D, 0xFF, 0xEB, 0x2, 0x84, 0xFF, 0xEB, 0x2, 0x8C, 0xFF, 0xA6, 0x2, 0x8F, 0xFF, 0xD8, 0x2, 0x94, 0xFF, 0xE3, 0x2, 0x9F, 0xFF, 0xD9, 0x2, 0xB6, 0xFF, 0xDB, 0x2, 0xCB, 0xFF, 0xEB, 0x2, 0xD1, 0xFF, 0x1D, 0x2, 0xDB, 0xFF, 0xEB, 0x2, 0xDF, 0xFF, 0xD8, 0x2, 0xE1, 0xFF, 0xDE, 0x2, 0xF5, 0xFF, 0xEB, 0x2, 0xFA, 0xFF, 0xEF, 0x2, 0xFC, 0xFF, 0xF1, 0x3, 0x4, 0xFF, 0x5E, 0x6, 0x20, 0xFF, 0xD8, 0xA, 0x19, 0xFF, 0xEB, 0xA, 0x45, 0xFF, 0xEB, 0xA, 0x53, 0xFF, 0xEB, 0xA, 0x6A, 0xFF, 0xD8, 0xA, 0xCA, 0xFF, 0xD8, 0xB, 0xC8, 0xFF, 0xEB, 0xB, 0xCA, 0xFF, 0xEB, 0x0, 0xE, 0x2, 0x8C, 0xFF, 0x9B, 0x2, 0x8F, 0xFF, 0xE2, 0x2, 0x94, 0xFF, 0xE7, 0x2, 0x9F, 0xFF, 0xD9, 0x2, 0xB6, 0xFF, 0xDB, 0x2, 0xD1, 0xFF, 0x1D, 0x2, 0xDF, 0xFF, 0xE2, 0x2, 0xE1, 0xFF, 0xDE, 0x2, 0xFA, 0xFF, 0xEF, 0x2, 0xFC, 0xFF, 0xF1, 0x3, 0x4, 0xFF, 0x5E, 0x6, 0x20, 0xFF, 0xE2, 0xA, 0x6A, 0xFF, 0xE2, 0xA, 0xCA, 0xFF, 0xE2, 0x0, 0xA, 0x0, 0x7, 0xFF, 0xDD, 0x0, 0xC, 0xFF, 0xDD, 0x4, 0x62, 0xFF, 0xDD, 0x4, 0x63, 0xFF, 0xDD, 0x4, 0x65, 0xFF, 0xDD, 0x4, 0x66, 0xFF, 0xDD, 0x4, 0x67, 0xFF, 0xDD, 0xA, 0x2A, 0xFF, 0xDD, 0xA, 0x2B, 0xFF, 0xDD, 0xA, 0x2E, 0xFF, 0xDD, 0x0, 0xBB, 0x0, 0x48, 0xFF, 0x79, 0x0, 0x49, 0xFF, 0x79, 0x0, 0x4A, 0xFF, 0x79, 0x0, 0x4C, 0xFF, 0x79, 0x0, 0x54, 0xFF, 0x6D, 0x0, 0x56, 0xFF, 0x79, 0x0, 0x58, 0xFF, 0x26, 0x0, 0x59, 0x0, 0x14, 0x0, 0x5C, 0x0, 0xC, 0x0, 0x95, 0xFF, 0x79, 0x0, 0x9F, 0xFF, 0x79, 0x0, 0xB5, 0xFF, 0x79, 0x0, 0xDA, 0xFF, 0x79, 0x0, 0xDC, 0xFF, 0x79, 0x0, 0xE4, 0xFF, 0x79, 0x0, 0xF4, 0xFF, 0x26, 0x1, 0x0, 0xFF, 0x79, 0x2, 0x2A, 0xFF, 0x79, 0x2, 0x3A, 0xFF, 0x79, 0x2, 0x47, 0xFF, 0x79, 0x2, 0x48, 0xFF, 0x79, 0x2, 0x56, 0xFF, 0x6D, 0x2, 0x58, 0xFF, 0x79, 0x2, 0x61, 0xFF, 0x79, 0x2, 0x8D, 0xFF, 0x79, 0x2, 0x99, 0xFF, 0x79, 0x2, 0xAE, 0xFF, 0x6D, 0x2, 0xB4, 0xFF, 0x79, 0x2, 0xB8, 0xFF, 0x79, 0x2, 0xD9, 0xFF, 0x79, 0x2, 0xF7, 0xFF, 0x79, 0x2, 0xF8, 0xFF, 0x79, 0x3, 0x2, 0xFF, 0x79, 0x5, 0x6E, 0xFF, 0x79, 0x5, 0x70, 0xFF, 0x6D, 0x5, 0xEE, 0xFF, 0x6D, 0x6, 0x2, 0xFF, 0x6D, 0x6, 0x4, 0xFF, 0x6D, 0x6, 0x6, 0xFF, 0x6D, 0x6, 0x32, 0xFF, 0x6D, 0x6, 0x85, 0xFF, 0x6D, 0x6, 0x87, 0xFF, 0x6D, 0x6, 0x8F, 0xFF, 0x79, 0x6, 0x91, 0xFF, 0x79, 0x6, 0xA9, 0xFF, 0x79, 0x6, 0xCB, 0xFF, 0x79, 0x6, 0xF7, 0xFF, 0x79, 0x7, 0x2C, 0xFF, 0x26, 0x8, 0xEF, 0xFF, 0x79, 0x8, 0xF0, 0xFF, 0x79, 0x8, 0xF1, 0xFF, 0x79, 0x8, 0xF2, 0xFF, 0x79, 0x8, 0xF3, 0xFF, 0x79, 0x8, 0xF9, 0xFF, 0x6D, 0x8, 0xFA, 0xFF, 0x6D, 0x8, 0xFB, 0xFF, 0x6D, 0x8, 0xFC, 0xFF, 0x6D, 0x8, 0xFD, 0xFF, 0x6D, 0x9, 0xB, 0xFF, 0x79, 0x9, 0xD, 0xFF, 0x79, 0x9, 0xF, 0xFF, 0x79, 0x9, 0x11, 0xFF, 0x79, 0x9, 0x13, 0xFF, 0x79, 0x9, 0x15, 0xFF, 0x79, 0x9, 0x17, 0xFF, 0x79, 0x9, 0x19, 0xFF, 0x79, 0x9, 0x1B, 0xFF, 0x79, 0x9, 0x1D, 0xFF, 0x79, 0x9, 0x1F, 0xFF, 0x79, 0x9, 0x21, 0xFF, 0x79, 0x9, 0x23, 0xFF, 0x79, 0x9, 0x25, 0xFF, 0x79, 0x9, 0x47, 0xFF, 0x6D, 0x9, 0x49, 0xFF, 0x6D, 0x9, 0x4B, 0xFF, 0x6D, 0x9, 0x53, 0xFF, 0x26, 0x9, 0x55, 0xFF, 0x26, 0x9, 0x57, 0xFF, 0x26, 0x9, 0x59, 0xFF, 0x26, 0x9, 0x5B, 0xFF, 0x26, 0x9, 0xED, 0xFF, 0x79, 0x9, 0xF3, 0xFF, 0x6D, 0x9, 0xF9, 0xFF, 0x6D, 0xA, 0x13, 0xFF, 0x79, 0xA, 0x15, 0xFF, 0x6D, 0xA, 0x17, 0xFF, 0x79, 0xA, 0x1A, 0xFF, 0x79, 0xA, 0x1C, 0xFF, 0x26, 0xA, 0x35, 0xFF, 0x79, 0xA, 0x3B, 0xFF, 0x79, 0xA, 0x40, 0xFF, 0x79, 0xA, 0x4E, 0xFF, 0x79, 0xA, 0x50, 0xFF, 0x79, 0xA, 0x51, 0xFF, 0x79, 0xA, 0x5B, 0xFF, 0x6D, 0xA, 0x5D, 0xFF, 0x79, 0xA, 0x60, 0xFF, 0x6D, 0xA, 0x6D, 0xFF, 0x79, 0xA, 0x87, 0xFF, 0x79, 0xA, 0x89, 0xFF, 0x79, 0xA, 0x8B, 0xFF, 0x79, 0xA, 0x8D, 0xFF, 0x79, 0xA, 0x8F, 0xFF, 0x79, 0xA, 0x91, 0xFF, 0x79, 0xA, 0x93, 0xFF, 0x79, 0xA, 0x95, 0xFF, 0x79, 0xA, 0x9B, 0xFF, 0x6D, 0xA, 0x9D, 0xFF, 0x6D, 0xA, 0x9F, 0xFF, 0x6D, 0xA, 0xA1, 0xFF, 0x6D, 0xA, 0xA3, 0xFF, 0x6D, 0xA, 0xA5, 0xFF, 0x6D, 0xA, 0xA7, 0xFF, 0x6D, 0xA, 0xA9, 0xFF, 0x79, 0xA, 0xAB, 0xFF, 0x79, 0xA, 0xAD, 0xFF, 0x79, 0xA, 0xAF, 0xFF, 0x6D, 0xA, 0xB1, 0xFF, 0x79, 0xA, 0xF3, 0xFF, 0x6D, 0xA, 0xFE, 0xFF, 0x79, 0xB, 0x6, 0xFF, 0x79, 0xB, 0xA, 0xFF, 0x6D, 0xB, 0xC, 0xFF, 0x6D, 0xB, 0xF, 0xFF, 0x79, 0xB, 0x19, 0xFF, 0x79, 0xB, 0x1B, 0xFF, 0x79, 0xB, 0x21, 0xFF, 0x6D, 0xB, 0x23, 0xFF, 0x6D, 0xB, 0x33, 0xFF, 0x6D, 0xB, 0x35, 0xFF, 0x6D, 0xB, 0x37, 0xFF, 0x6D, 0xB, 0x39, 0xFF, 0x6D, 0xB, 0x3C, 0xFF, 0x6D, 0xB, 0x42, 0xFF, 0x79, 0xB, 0x4A, 0xFF, 0x79, 0xB, 0x54, 0xFF, 0x79, 0xB, 0x56, 0xFF, 0x79, 0xB, 0x58, 0xFF, 0x79, 0xB, 0x5A, 0xFF, 0x79, 0xB, 0x5C, 0xFF, 0x79, 0xB, 0x5E, 0xFF, 0x79, 0xB, 0x60, 0xFF, 0x79, 0xB, 0x62, 0xFF, 0x79, 0xB, 0x64, 0xFF, 0x79, 0xB, 0x66, 0xFF, 0x79, 0xB, 0x68, 0xFF, 0x79, 0xB, 0x6C, 0xFF, 0x79, 0xB, 0x90, 0xFF, 0x6D, 0xB, 0x92, 0xFF, 0x6D, 0xB, 0x94, 0xFF, 0x6D, 0xB, 0x96, 0xFF, 0x6D, 0xB, 0xA4, 0xFF, 0x26, 0xB, 0xA6, 0xFF, 0x26, 0xB, 0xA8, 0xFF, 0x26, 0xB, 0xAA, 0xFF, 0x26, 0xB, 0xAC, 0xFF, 0x26, 0xB, 0xD8, 0xFF, 0x79, 0xB, 0xD9, 0xFF, 0x79, 0xB, 0xDA, 0xFF, 0x79, 0xB, 0xDB, 0xFF, 0x79, 0xB, 0xDC, 0xFF, 0x79, 0xB, 0xDD, 0xFF, 0x79, 0xB, 0xDE, 0xFF, 0x79, 0xB, 0xDF, 0xFF, 0x79, 0xC, 0x14, 0xFF, 0x6D, 0xC, 0x15, 0xFF, 0x6D, 0xC, 0x16, 0xFF, 0x6D, 0xC, 0x17, 0xFF, 0x6D, 0xC, 0x18, 0xFF, 0x6D, 0xC, 0x19, 0xFF, 0x6D, 0xC, 0x44, 0xFF, 0x6D, 0xC, 0x45, 0xFF, 0x6D, 0xC, 0x4A, 0xFF, 0x79, 0xC, 0x4B, 0xFF, 0x79, 0xC, 0x4C, 0xFF, 0x79, 0xC, 0x4D, 0xFF, 0x79, 0xC, 0x4E, 0xFF, 0x79, 0xC, 0x4F, 0xFF, 0x79, 0xC, 0x50, 0xFF, 0x79, 0xC, 0x51, 0xFF, 0x79, 0xC, 0x7A, 0xFF, 0x79, 0xC, 0x7B, 0xFF, 0x79, 0xC, 0x7C, 0xFF, 0x79, 0xC, 0x7D, 0xFF, 0x79, 0xC, 0x7E, 0xFF, 0x79, 0xC, 0x7F, 0xFF, 0x79, 0xC, 0x80, 0xFF, 0x79, 0x0, 0x9, 0x2, 0x8C, 0xFF, 0x6F, 0x2, 0x94, 0xFF, 0xDA, 0x2, 0x9F, 0xFF, 0xD9, 0x2, 0xB6, 0xFF, 0xDB, 0x2, 0xD1, 0xFF, 0x1D, 0x2, 0xE1, 0xFF, 0xDE, 0x2, 0xFA, 0xFF, 0xEF, 0x2, 0xFC, 0xFF, 0xF1, 0x3, 0x4, 0xFF, 0x5E, 0x0, 0x13, 0x7, 0x4F, 0xFF, 0xED, 0x7, 0x51, 0xFF, 0xF4, 0x7, 0x52, 0xFF, 0xF0, 0x7, 0x54, 0xFF, 0xF1, 0x7, 0x70, 0xFF, 0xF1, 0x7, 0x74, 0xFF, 0xF1, 0x7, 0x8C, 0xFF, 0xF1, 0x7, 0x8E, 0xFF, 0xED, 0x7, 0x90, 0xFF, 0xF1, 0x9, 0x9A, 0xFF, 0xED, 0x9, 0xC7, 0xFF, 0xF1, 0x9, 0xCF, 0xFF, 0xF4, 0x9, 0xD0, 0xFF, 0xED, 0x9, 0xD1, 0xFF, 0xED, 0xC, 0xBC, 0xFF, 0xED, 0xC, 0xCA, 0xFF, 0xED, 0xC, 0xCD, 0xFF, 0xED, 0xC, 0xE1, 0xFF, 0xF1, 0xC, 0xE6, 0xFF, 0xED, 0x0, 0x13, 0x7, 0x4F, 0xFF, 0xE3, 0x7, 0x51, 0xFF, 0xF0, 0x7, 0x52, 0xFF, 0xE9, 0x7, 0x54, 0xFF, 0xE7, 0x7, 0x70, 0xFF, 0xE7, 0x7, 0x74, 0xFF, 0xE7, 0x7, 0x8C, 0xFF, 0xE7, 0x7, 0x8E, 0xFF, 0xE3, 0x7, 0x90, 0xFF, 0xE7, 0x9, 0x9A, 0xFF, 0xE3, 0x9, 0xC7, 0xFF, 0xE7, 0x9, 0xCF, 0xFF, 0xF0, 0x9, 0xD0, 0xFF, 0xE3, 0x9, 0xD1, 0xFF, 0xE3, 0xC, 0xBC, 0xFF, 0xE3, 0xC, 0xCA, 0xFF, 0xE3, 0xC, 0xCD, 0xFF, 0xE3, 0xC, 0xE1, 0xFF, 0xE7, 0xC, 0xE6, 0xFF, 0xE3, 0x0, 0x3, 0x7, 0x51, 0xFF, 0xF4, 0x7, 0x52, 0xFF, 0xED, 0x9, 0xCF, 0xFF, 0xF4, 0x0, 0x2, 0x7, 0x52, 0xFF, 0xB1, 0x7, 0x57, 0xFF, 0xEF, 0x0, 0x2, 0x0, 0x59, 0x0, 0x14, 0x0, 0x5C, 0x0, 0xC, 0x0, 0x12, 0x2, 0x6F, 0xFF, 0xA7, 0x2, 0x7C, 0x0, 0x10, 0x2, 0x81, 0xFF, 0xD6, 0x2, 0x83, 0xFF, 0x83, 0x2, 0x85, 0xFF, 0xB6, 0x2, 0x93, 0xFF, 0xD9, 0x2, 0x97, 0xFF, 0xBD, 0x2, 0x9D, 0xFF, 0xCC, 0x2, 0xB2, 0xFF, 0xBC, 0x2, 0xC5, 0xFF, 0xCC, 0x2, 0xC7, 0xFF, 0xD5, 0x2, 0xCF, 0xFF, 0xD6, 0x2, 0xD7, 0xFF, 0xD6, 0x2, 0xE1, 0xFF, 0xDD, 0x2, 0xE4, 0xFF, 0xD7, 0x2, 0xF6, 0xFF, 0x91, 0x3, 0x0, 0xFF, 0xDC, 0x3, 0x3, 0x0, 0x16, 0x0, 0x2, 0x2, 0x83, 0xFF, 0x77, 0x2, 0xB2, 0xFF, 0xFB, 0x0, 0xA, 0x2, 0x7C, 0xFF, 0xCC, 0x2, 0x8C, 0xFF, 0xC7, 0x2, 0x94, 0xFF, 0xE3, 0x2, 0xD1, 0xFF, 0xBF, 0x2, 0xE0, 0xFF, 0xD7, 0x2, 0xE3, 0xFF, 0xDC, 0x2, 0xF9, 0xFF, 0xCA, 0x2, 0xFB, 0xFF, 0xEA, 0x3, 0x3, 0xFF, 0x75, 0x3, 0x4, 0xFF, 0xCA, 0x0, 0x31, 0x0, 0x57, 0xFF, 0x75, 0x0, 0x5C, 0xFF, 0x96, 0x0, 0x6E, 0xFE, 0xDB, 0x0, 0x7D, 0xFE, 0xDF, 0x0, 0x82, 0xFE, 0xA6, 0x0, 0x87, 0xFF, 0x51, 0x0, 0x8A, 0xFF, 0x3D, 0x2, 0x37, 0xFF, 0x67, 0x2, 0x3D, 0xFF, 0xEE, 0x2, 0x3E, 0xFE, 0xFC, 0x2, 0x42, 0xFF, 0x2E, 0x2, 0x45, 0xFF, 0x3C, 0x2, 0x46, 0xFE, 0xF3, 0x2, 0x49, 0xFF, 0x6B, 0x2, 0x4B, 0xFE, 0xFC, 0x2, 0x4C, 0xFE, 0xFB, 0x2, 0x4D, 0xFE, 0xF8, 0x2, 0x6F, 0xFF, 0x57, 0x2, 0x7C, 0x0, 0x7, 0x2, 0x80, 0xFF, 0xB9, 0x2, 0x81, 0xFF, 0x3B, 0x2, 0x83, 0xFE, 0xE9, 0x2, 0x85, 0xFF, 0x0, 0x2, 0x8C, 0xFF, 0x5D, 0x2, 0x93, 0xFE, 0xFB, 0x2, 0x94, 0xFF, 0x9D, 0x2, 0x95, 0xFF, 0x0, 0x2, 0x97, 0xFE, 0xF3, 0x2, 0x98, 0x0, 0x1F, 0x2, 0x9D, 0xFE, 0xFB, 0x2, 0x9F, 0xFE, 0xFE, 0x2, 0xB2, 0xFE, 0xF1, 0x2, 0xB6, 0xFF, 0xA7, 0x2, 0xC5, 0xFF, 0x2, 0x2, 0xC7, 0xFF, 0x2C, 0x2, 0xCF, 0xFE, 0xFB, 0x2, 0xD1, 0xFF, 0x5E, 0x2, 0xD7, 0xFF, 0x3B, 0x2, 0xE1, 0xFE, 0xF8, 0x2, 0xE3, 0xFF, 0x30, 0x2, 0xE4, 0xFE, 0xDB, 0x2, 0xEF, 0xFF, 0xBC, 0x2, 0xF6, 0xFE, 0xD9, 0x2, 0xFA, 0xFF, 0x21, 0x2, 0xFC, 0xFF, 0x53, 0x3, 0x0, 0xFE, 0xF6, 0x3, 0x3, 0x0, 0x7, 0x3, 0x4, 0xFF, 0x20, 0x3, 0x5, 0xFF, 0xD3, 0x0, 0x8, 0x2, 0x8C, 0xFF, 0xEF, 0x2, 0x94, 0xFF, 0xF6, 0x2, 0x9F, 0xFF, 0xF0, 0x2, 0xB6, 0xFF, 0xF2, 0x2, 0xD1, 0xFF, 0xE2, 0x2, 0xFA, 0xFF, 0xF2, 0x2, 0xFC, 0xFF, 0xF2, 0x3, 0x4, 0xFF, 0xF0, 0x0, 0x2, 0x2, 0xA7, 0x0, 0x7, 0x3, 0x3, 0xFF, 0xE4, 0x0, 0x4, 0x0, 0xE, 0xFF, 0xE4, 0x0, 0x42, 0xFF, 0xF8, 0x0, 0x62, 0xFF, 0xF5, 0x2, 0xE4, 0xFF, 0xEC, 0x0, 0x2, 0x2, 0x8C, 0xFF, 0xF4, 0x4, 0x63, 0xFF, 0xB5, 0x0, 0x13, 0x0, 0x5C, 0xFF, 0xBC, 0x2, 0x37, 0xFF, 0xC0, 0x2, 0x49, 0xFF, 0xAD, 0x2, 0x80, 0xFF, 0xD3, 0x2, 0x8C, 0xFF, 0xB3, 0x2, 0x94, 0xFF, 0xF1, 0x2, 0x9F, 0xFF, 0xAB, 0x2, 0xB2, 0xFF, 0xCE, 0x2, 0xB6, 0xFF, 0xC3, 0x2, 0xD1, 0xFF, 0x83, 0x2, 0xE1, 0xFF, 0xA8, 0x2, 0xEF, 0xFF, 0xDB, 0x2, 0xFA, 0xFF, 0xAB, 0x2, 0xFC, 0xFF, 0xA8, 0x3, 0x4, 0xFF, 0xAE, 0x3, 0x5, 0xFF, 0xEE, 0x7, 0x57, 0xFF, 0xE5, 0x7, 0x61, 0xFF, 0xE4, 0x7, 0xAF, 0xFF, 0xE6, 0x0, 0x6, 0x0, 0x5, 0xFF, 0xF5, 0x0, 0x5C, 0xFF, 0xB3, 0x7, 0x52, 0xFF, 0xB2, 0x7, 0x57, 0xFF, 0xF1, 0x7, 0x61, 0xFF, 0xF0, 0x7, 0xAF, 0xFF, 0xF2, 0x0, 0x4, 0x0, 0x4B, 0x0, 0x17, 0x0, 0x59, 0x0, 0x32, 0x0, 0x5C, 0x0, 0x16, 0x4, 0x63, 0x0, 0xA, 0x0, 0x35, 0x0, 0x5, 0xFF, 0xCE, 0x0, 0x57, 0xFF, 0xB9, 0x0, 0x5C, 0xFF, 0xCD, 0x0, 0x6E, 0xFF, 0x5F, 0x0, 0x7D, 0xFF, 0x61, 0x0, 0x82, 0xFF, 0x40, 0x0, 0x87, 0xFF, 0xA5, 0x0, 0x8A, 0xFF, 0x99, 0x2, 0x37, 0xFF, 0xB2, 0x2, 0x3D, 0xFF, 0xFA, 0x2, 0x3E, 0xFF, 0x73, 0x2, 0x42, 0xFF, 0x6F, 0x2, 0x45, 0xFF, 0x92, 0x2, 0x46, 0xFF, 0x6D, 0x2, 0x49, 0xFF, 0xAB, 0x2, 0x4B, 0xFF, 0x73, 0x2, 0x4C, 0xFF, 0x72, 0x2, 0x4D, 0xFF, 0x70, 0x2, 0x6F, 0xFF, 0xA8, 0x2, 0x7C, 0x0, 0x10, 0x2, 0x80, 0xFF, 0xE2, 0x2, 0x81, 0xFF, 0x98, 0x2, 0x83, 0xFF, 0x68, 0x2, 0x85, 0xFF, 0x75, 0x2, 0x8C, 0xFF, 0xAB, 0x2, 0x93, 0xFF, 0x72, 0x2, 0x94, 0xFF, 0xCD, 0x2, 0x95, 0xFF, 0x75, 0x2, 0x97, 0xFF, 0x6D, 0x2, 0x98, 0x0, 0x1A, 0x2, 0x9D, 0xFF, 0x72, 0x2, 0x9F, 0xFF, 0x74, 0x2, 0xB2, 0xFF, 0x6E, 0x2, 0xB6, 0xFF, 0xD7, 0x2, 0xC5, 0xFF, 0x76, 0x2, 0xC7, 0xFF, 0x8F, 0x2, 0xCF, 0xFF, 0x72, 0x2, 0xD1, 0xFF, 0xAC, 0x2, 0xD7, 0xFF, 0x98, 0x2, 0xE1, 0xFF, 0x70, 0x2, 0xE3, 0xFF, 0x91, 0x2, 0xE4, 0xFF, 0x5F, 0x2, 0xEF, 0xFF, 0xE4, 0x2, 0xF6, 0xFF, 0x5E, 0x2, 0xFA, 0xFF, 0x89, 0x2, 0xFC, 0xFF, 0xA6, 0x3, 0x0, 0xFF, 0x6F, 0x3, 0x3, 0x0, 0x10, 0x3, 0x4, 0xFF, 0x88, 0x3, 0x5, 0xFF, 0xF1, 0x7, 0x57, 0xFF, 0xB3, 0x7, 0x61, 0xFF, 0xB3, 0x7, 0xAF, 0xFF, 0xB3, 0x0, 0x7, 0x0, 0xE, 0x0, 0x16, 0x0, 0x42, 0x0, 0x12, 0x0, 0x57, 0xFF, 0xE0, 0x0, 0x62, 0x0, 0x14, 0x7, 0x57, 0xFF, 0xD6, 0x7, 0x61, 0xFF, 0xD6, 0x7, 0xAF, 0xFF, 0xD6, 0x0, 0x7, 0x0, 0xE, 0x0, 0x10, 0x0, 0x42, 0x0, 0xD, 0x0, 0x57, 0xFF, 0xE9, 0x0, 0x62, 0x0, 0xF, 0x7, 0x57, 0xFF, 0xE5, 0x7, 0x61, 0xFF, 0xE5, 0x7, 0xAF, 0xFF, 0xE7, 0x0, 0x17, 0x2, 0x37, 0xFF, 0xD0, 0x2, 0x3D, 0xFF, 0xF9, 0x2, 0x41, 0xFF, 0xEC, 0x2, 0x43, 0x0, 0x12, 0x2, 0x49, 0xFF, 0xBE, 0x2, 0x4B, 0xFF, 0xDA, 0x2, 0x4C, 0xFF, 0xDC, 0x2, 0x4D, 0xFF, 0xE2, 0x2, 0x6F, 0x0, 0x17, 0x2, 0x80, 0xFF, 0xE7, 0x2, 0x8C, 0xFF, 0xCC, 0x2, 0xD1, 0xFF, 0xB7, 0x2, 0xE1, 0xFF, 0xC1, 0x2, 0xE3, 0xFF, 0xD2, 0x2, 0xE4, 0xFF, 0xC0, 0x2, 0xEF, 0xFF, 0xE5, 0x2, 0xF9, 0x0, 0xE, 0x2, 0xFB, 0x0, 0xD, 0x3, 0x4, 0xFF, 0xBD, 0x3, 0x5, 0xFF, 0xF1, 0x7, 0x57, 0xFF, 0xE7, 0x7, 0x61, 0xFF, 0xE5, 0x7, 0xAF, 0xFF, 0xE7, 0x0, 0x1, 0x2, 0xB2, 0xFF, 0xF0, 0x0, 0x6, 0x0, 0x5C, 0xFF, 0xE3, 0x2, 0x37, 0xFF, 0xC6, 0x2, 0x4C, 0xFF, 0xE2, 0x7, 0x57, 0xFF, 0xEA, 0x7, 0x61, 0xFF, 0xE9, 0x7, 0xAF, 0xFF, 0xEC, 0x0, 0x7, 0x0, 0x4B, 0x0, 0xE, 0x2, 0x3D, 0xFF, 0xF8, 0x2, 0x45, 0x0, 0xC, 0x2, 0x46, 0xFF, 0xE8, 0x2, 0x49, 0x0, 0xD, 0x2, 0x83, 0xFF, 0xBC, 0x2, 0xB2, 0xFF, 0xF0, 0x0, 0xA, 0x0, 0x59, 0xFF, 0xFC, 0x2, 0x49, 0xFF, 0xE8, 0x2, 0x83, 0xFF, 0xC0, 0x2, 0x8C, 0xFF, 0xE3, 0x2, 0x9F, 0xFF, 0xEF, 0x2, 0xB6, 0xFF, 0xF0, 0x2, 0xD1, 0xFF, 0xE2, 0x2, 0xFA, 0xFF, 0xF4, 0x3, 0x4, 0xFF, 0xEA, 0x4, 0x63, 0xFF, 0x98, 0x0, 0x18, 0x0, 0x24, 0xFF, 0xB1, 0x0, 0x59, 0xFF, 0xEE, 0x0, 0x5C, 0xFF, 0xDC, 0x0, 0xC3, 0xFF, 0xED, 0x2, 0x37, 0xFF, 0xE3, 0x2, 0x38, 0xFF, 0xCD, 0x2, 0x43, 0x0, 0x1F, 0x2, 0x49, 0xFF, 0xC3, 0x2, 0x6F, 0x0, 0x14, 0x2, 0x7C, 0xFF, 0xDA, 0x2, 0x8C, 0xFF, 0xB8, 0x2, 0x94, 0xFF, 0xE1, 0x2, 0xD1, 0xFF, 0x87, 0x2, 0xE0, 0xFF, 0x5D, 0x2, 0xE1, 0xFF, 0x83, 0x2, 0xE3, 0xFF, 0x84, 0x2, 0xE4, 0xFF, 0xDA, 0x2, 0xEF, 0xFF, 0xF1, 0x2, 0xF9, 0xFF, 0xAA, 0x2, 0xFB, 0xFF, 0xC5, 0x3, 0x3, 0xFF, 0x81, 0x3, 0x4, 0xFF, 0xA6, 0x7, 0x52, 0xFF, 0xC9, 0x7, 0x61, 0xFF, 0xF4, 0x0, 0x2, 0x2, 0x8C, 0xFF, 0xDF, 0x4, 0x63, 0xFF, 0x90, 0x0, 0x3, 0x0, 0x4B, 0xFF, 0xF4, 0x0, 0x5C, 0xFF, 0xE8, 0x7, 0x52, 0xFF, 0xEF, 0x0, 0x8, 0x2, 0x6F, 0x0, 0xE, 0x2, 0x83, 0x0, 0xE, 0x2, 0xE0, 0xFF, 0xEE, 0x2, 0xE1, 0xFF, 0xEE, 0x2, 0xE3, 0xFF, 0xEE, 0x2, 0xF9, 0xFF, 0xED, 0x2, 0xFB, 0xFF, 0xEC, 0x3, 0x3, 0xFF, 0xEE, 0x0, 0x6, 0x2, 0x49, 0xFF, 0xE8, 0x2, 0x83, 0xFF, 0xDB, 0x2, 0x8C, 0xFF, 0xD7, 0x2, 0x94, 0xFF, 0xF4, 0x2, 0xD1, 0xFF, 0xEA, 0x3, 0x4, 0xFF, 0xEA, 0x0, 0x1E, 0x0, 0xB, 0xFF, 0xD5, 0x0, 0xE, 0x0, 0x16, 0x0, 0xF, 0xFF, 0xBD, 0x0, 0x42, 0x0, 0x13, 0x0, 0x4B, 0xFF, 0xE1, 0x0, 0x57, 0xFF, 0xCD, 0x0, 0x59, 0xFF, 0xE5, 0x0, 0x62, 0x0, 0x14, 0x0, 0x6E, 0xFF, 0x9C, 0x0, 0x7D, 0xFF, 0xC9, 0x0, 0x82, 0xFF, 0x8D, 0x0, 0x87, 0xFF, 0xB5, 0x0, 0x8A, 0xFF, 0xB3, 0x2, 0x37, 0xFF, 0xC8, 0x2, 0x3B, 0xFF, 0xE5, 0x2, 0x3D, 0xFF, 0xF8, 0x2, 0x3E, 0xFF, 0xB0, 0x2, 0x3F, 0x0, 0xE, 0x2, 0x41, 0xFF, 0xE7, 0x2, 0x42, 0xFF, 0xC8, 0x2, 0x45, 0xFF, 0xD4, 0x2, 0x46, 0xFF, 0x9F, 0x2, 0x49, 0xFF, 0xE0, 0x2, 0x4B, 0xFF, 0xC3, 0x2, 0x4C, 0xFF, 0xD3, 0x2, 0x4D, 0xFF, 0xB8, 0x4, 0x6C, 0xFF, 0xB7, 0x7, 0x57, 0xFF, 0xBC, 0x7, 0x61, 0xFF, 0xBC, 0x7, 0xAF, 0xFF, 0xBE, 0x0, 0x8, 0x0, 0x59, 0x0, 0xF, 0x0, 0x82, 0xFF, 0x15, 0x2, 0x3D, 0xFF, 0xFB, 0x2, 0x43, 0xFF, 0xAE, 0x2, 0x46, 0xFF, 0xBA, 0x2, 0x6F, 0xFF, 0x2A, 0x2, 0x83, 0xFF, 0x4D, 0x2, 0xF6, 0xFF, 0xD4, 0x0, 0x7, 0x0, 0x82, 0xFF, 0xD2, 0x2, 0x34, 0xFF, 0xF2, 0x2, 0x36, 0xFF, 0xEF, 0x2, 0x43, 0xFF, 0xE8, 0x2, 0x6F, 0xFF, 0xD2, 0x2, 0x7C, 0xFF, 0xEB, 0x3, 0x3, 0xFF, 0xDD, 0x0, 0x1, 0x7, 0x57, 0xFF, 0xE9, 0x0, 0x4, 0x7, 0x52, 0xFF, 0xBB, 0x7, 0x57, 0xFF, 0xF1, 0x7, 0x61, 0xFF, 0xF1, 0x7, 0xAF, 0xFF, 0xF1, 0x0, 0x1, 0x7, 0x52, 0xFF, 0xF0, 0x0, 0x1, 0x7, 0x52, 0x0, 0xE, 0x0, 0x2, 0xB, 0x56, 0x0, 0x4, 0x0, 0x0, 0x11, 0xBE, 0x1F, 0xD8, 0x0, 0x27, 0x0, 0x25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xED, 0xFF, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xB, 0x0, 0x0, 0x0, 0xB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEE, 0xFF, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB7, 0xFF, 0xD6, 0xFF, 0xEC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE0, 0x0, 0x0, 0xFF, 0xE7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD8, 0xFF, 0x96, 0x0, 0x0, 0xFF, 0xF4, 0xFF, 0xE7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE8, 0xFF, 0xE1, 0xFF, 0xF8, 0xFF, 0xF4, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF4, 0xFF, 0xCA, 0xFF, 0xEE, 0xFF, 0x84, 0xFF, 0x53, 0x0, 0x0, 0x0, 0x0, 0x0, 0xD, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0xFF, 0x6F, 0x0, 0x0, 0xFF, 0xD6, 0xFF, 0xA0, 0xFF, 0xC2, 0x0, 0x12, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0xFF, 0x9C, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x7A, 0xFF, 0xC6, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xDA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xA8, 0xFF, 0xE6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEC, 0xFF, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xDA, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x66, 0xFF, 0xD0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0xFF, 0xD4, 0xFF, 0xF6, 0xFF, 0xE3, 0xFF, 0xE7, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE5, 0xFF, 0xD4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x5A, 0x0, 0x0, 0xFF, 0x9B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xA1, 0xFF, 0xDF, 0xFF, 0xC6, 0xFF, 0x9A, 0xFF, 0xC8, 0xFF, 0x66, 0xFF, 0xB1, 0xFF, 0xBC, 0xFF, 0xEA, 0xFF, 0xB0, 0x0, 0x12, 0x0, 0x13, 0xFF, 0x8F, 0xFF, 0xA9, 0xFF, 0xDC, 0xFF, 0xEF, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0x0, 0x12, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0xFF, 0x11, 0x0, 0x0, 0xFF, 0xEE, 0x0, 0x13, 0x0, 0x0, 0xFF, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x83, 0xFF, 0xF2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE8, 0xFF, 0xED, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x9F, 0xFF, 0xDC, 0xFF, 0xAA, 0xFF, 0x56, 0xFF, 0xB9, 0xFF, 0x84, 0xFF, 0x6F, 0xFF, 0xB3, 0xFF, 0xA7, 0x0, 0x0, 0x0, 0x11, 0x0, 0x11, 0xFF, 0x8C, 0xFF, 0xAD, 0xFF, 0xBF, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xAC, 0x0, 0x10, 0x0, 0x0, 0xFF, 0xF0, 0xFF, 0xC6, 0xFE, 0xFC, 0xFF, 0x73, 0xFF, 0xEC, 0x0, 0x11, 0xFF, 0xB6, 0xFF, 0x11, 0x0, 0x0, 0xFF, 0x70, 0x0, 0x0, 0xFF, 0x28, 0xFF, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB2, 0xFF, 0xB3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD4, 0x0, 0x0, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE9, 0xFF, 0xE4, 0x0, 0x0, 0xFF, 0xE9, 0xFF, 0xEC, 0x0, 0xE, 0x0, 0x0, 0xFF, 0xEA, 0xFF, 0xE3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0xFF, 0xDE, 0x0, 0x0, 0xFF, 0xE6, 0xFF, 0xE9, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE5, 0xFF, 0xD8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0xF, 0x0, 0x0, 0xFF, 0x56, 0x0, 0x0, 0xFF, 0xC3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEA, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF4, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE9, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEC, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x5F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0xFF, 0x53, 0xFF, 0xF4, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xC1, 0x0, 0x0, 0xFF, 0xDB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x6A, 0xFE, 0x76, 0xFF, 0xA4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xBE, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF1, 0x0, 0x14, 0x0, 0x0, 0xFF, 0xF1, 0xFF, 0x7D, 0xFF, 0xE6, 0xFF, 0x2F, 0xFE, 0xEF, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xED, 0x0, 0x0, 0xFE, 0xE8, 0x0, 0x0, 0xFF, 0x97, 0xFF, 0xB1, 0xFF, 0xB7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD3, 0x0, 0x0, 0xFF, 0xB6, 0x0, 0x0, 0xFF, 0xEA, 0xFF, 0xA7, 0x0, 0x0, 0xFF, 0x6F, 0xFF, 0xBF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xA6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF1, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xDF, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xDF, 0xFF, 0xEC, 0xFF, 0xC7, 0xFF, 0xDC, 0xFF, 0xE5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xF, 0x0, 0x0, 0xFF, 0xB5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xF2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE3, 0xFF, 0xA6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xDC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD0, 0xFF, 0xED, 0x0, 0x0, 0xFF, 0xCE, 0xFF, 0xE2, 0xFF, 0x9D, 0xFF, 0xCE, 0xFF, 0xD6, 0xFF, 0xF4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x7E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x66, 0xFF, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x70, 0xFF, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB3, 0xFF, 0xC4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xA7, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xC9, 0x0, 0x0, 0xFF, 0xBC, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE, 0xE3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x48, 0xFF, 0xB9, 0xFF, 0x5A, 0xFF, 0x5B, 0xFF, 0x75, 0xFF, 0x3A, 0xFF, 0x53, 0x0, 0x0, 0xFF, 0x55, 0x0, 0x0, 0x0, 0x9, 0x0, 0x9, 0x0, 0x0, 0xFF, 0x60, 0xFF, 0x7D, 0xFF, 0xCF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x5E, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x8A, 0xFE, 0x61, 0xFE, 0xFC, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0xFE, 0x57, 0x0, 0x0, 0xFE, 0xF8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xEA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xAD, 0xFF, 0xB5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xD1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xC2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xE4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xB4, 0xFF, 0xE0, 0xFF, 0xB8, 0xFF, 0xAD, 0x0, 0x0, 0xFF, 0x85, 0xFF, 0xA4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x1E, 0x0, 0x0, 0xFF, 0xC4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xBB, 0xFE, 0xAB, 0xFF, 0xAE, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF, 0x44, 0x0, 0x0, 0xFF, 0xE0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x3, 0x32, 0x0, 0x7, 0x0, 0xC, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2A, 0x0, 0x2D, 0x0, 0x2E, 0x0, 0x2F, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x39, 0x0, 0x3A, 0x0, 0x3B, 0x0, 0x3C, 0x0, 0x3D, 0x0, 0x3E, 0x0, 0x3F, 0x0, 0x46, 0x0, 0x47, 0x0, 0x48, 0x0, 0x4A, 0x0, 0x4D, 0x0, 0x52, 0x0, 0x53, 0x0, 0x54, 0x0, 0x55, 0x0, 0x57, 0x0, 0x5B, 0x0, 0x5D, 0x0, 0x5E, 0x0, 0x5F, 0x0, 0x8B, 0x0, 0x97, 0x0, 0x9A, 0x0, 0x9C, 0x0, 0x9D, 0x0, 0xA0, 0x0, 0xA1, 0x0, 0xA2, 0x0, 0xA5, 0x0, 0xA6, 0x0, 0xAE, 0x0, 0xB2, 0x0, 0xB3, 0x0, 0xB6, 0x0, 0xB8, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD8, 0x0, 0xD9, 0x0, 0xDA, 0x0, 0xED, 0x0, 0xEE, 0x0, 0xF2, 0x0, 0xF8, 0x0, 0xFA, 0x1, 0x2, 0x1, 0x3, 0x2, 0x27, 0x2, 0x29, 0x2, 0x2A, 0x2, 0x2B, 0x2, 0x30, 0x2, 0x31, 0x2, 0x32, 0x2, 0x33, 0x2, 0x3C, 0x2, 0x40, 0x2, 0x46, 0x2, 0x4E, 0x2, 0x55, 0x2, 0x56, 0x2, 0x60, 0x2, 0x62, 0x2, 0x64, 0x2, 0x65, 0x2, 0x66, 0x2, 0x67, 0x2, 0x6A, 0x2, 0x6B, 0x2, 0x6D, 0x2, 0x70, 0x2, 0x72, 0x2, 0x73, 0x2, 0x74, 0x2, 0x76, 0x2, 0x77, 0x2, 0x78, 0x2, 0x79, 0x2, 0x7A, 0x2, 0x7B, 0x2, 0x7C, 0x2, 0x82, 0x2, 0x84, 0x2, 0x8D, 0x2, 0x92, 0x2, 0x94, 0x2, 0x95, 0x2, 0x9A, 0x2, 0x9B, 0x2, 0xA0, 0x2, 0xA3, 0x2, 0xAE, 0x2, 0xAF, 0x2, 0xB0, 0x2, 0xC5, 0x2, 0xC6, 0x2, 0xC7, 0x2, 0xCA, 0x2, 0xCB, 0x2, 0xCC, 0x2, 0xCE, 0x2, 0xD0, 0x2, 0xD2, 0x2, 0xDA, 0x2, 0xDB, 0x2, 0xEB, 0x2, 0xED, 0x2, 0xEF, 0x2, 0xF3, 0x2, 0xF4, 0x2, 0xF5, 0x3, 0x8, 0x3, 0x9, 0x3, 0xA, 0x3, 0xB, 0x3, 0xC, 0x3, 0xD, 0x3, 0xE, 0x3, 0x14, 0x3, 0x18, 0x3, 0x1A, 0x4, 0x2B, 0x4, 0x2D, 0x4, 0x34, 0x4, 0x5E, 0x4, 0x5F, 0x4, 0x62, 0x4, 0x63, 0x4, 0x64, 0x4, 0x65, 0x4, 0x66, 0x4, 0x67, 0x4, 0x68, 0x4, 0x6F, 0x4, 0x70, 0x5, 0x59, 0x5, 0x5B, 0x5, 0x5D, 0x5, 0x5E, 0x5, 0x5F, 0x5, 0x61, 0x5, 0x62, 0x5, 0x64, 0x5, 0x66, 0x5, 0x6A, 0x5, 0x70, 0x5, 0xD9, 0x5, 0xDA, 0x5, 0xDB, 0x5, 0xDC, 0x5, 0xE5, 0x5, 0xE7, 0x5, 0xE8, 0x5, 0xEB, 0x5, 0xEC, 0x5, 0xEF, 0x5, 0xF0, 0x5, 0xF1, 0x5, 0xF9, 0x5, 0xFD, 0x5, 0xFE, 0x5, 0xFF, 0x6, 0x0, 0x6, 0x1, 0x6, 0x2, 0x6, 0x3, 0x6, 0x4, 0x6, 0x5, 0x6, 0x6, 0x6, 0x25, 0x6, 0x26, 0x6, 0x29, 0x6, 0x2A, 0x6, 0x2E, 0x6, 0x31, 0x6, 0x32, 0x6, 0x33, 0x6, 0x5F, 0x6, 0x6A, 0x6, 0x6C, 0x6, 0x6E, 0x6, 0x70, 0x6, 0x71, 0x6, 0x72, 0x6, 0x73, 0x6, 0x75, 0x6, 0x76, 0x6, 0x78, 0x6, 0x7A, 0x6, 0x7C, 0x6, 0x86, 0x6, 0x87, 0x6, 0x88, 0x6, 0x89, 0x6, 0x8A, 0x6, 0x8B, 0x6, 0x8C, 0x6, 0x8D, 0x6, 0x96, 0x6, 0x97, 0x6, 0x9D, 0x6, 0x9F, 0x6, 0xBB, 0x6, 0xC7, 0x6, 0xC9, 0x6, 0xCD, 0x6, 0xCE, 0x6, 0xE1, 0x7, 0x54, 0x7, 0x59, 0x7, 0x5C, 0x7, 0x5D, 0x7, 0x67, 0x7, 0x68, 0x7, 0x69, 0x7, 0x7B, 0x7, 0x8A, 0x7, 0x8B, 0x7, 0x8C, 0x7, 0xAE, 0x7, 0xB1, 0x7, 0xCF, 0x7, 0xD1, 0x7, 0xD2, 0x8, 0xC7, 0x8, 0xC8, 0x8, 0xC9, 0x8, 0xCB, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x8, 0xD3, 0x8, 0xD4, 0x8, 0xD5, 0x8, 0xD6, 0x8, 0xD7, 0x8, 0xD8, 0x8, 0xD9, 0x8, 0xDA, 0x8, 0xDB, 0x8, 0xDC, 0x8, 0xDD, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0x8, 0xE3, 0x8, 0xE4, 0x8, 0xE5, 0x8, 0xE6, 0x8, 0xE7, 0x8, 0xE8, 0x8, 0xE9, 0x8, 0xEA, 0x8, 0xEB, 0x8, 0xEC, 0x8, 0xED, 0x8, 0xEE, 0x8, 0xEF, 0x8, 0xF0, 0x8, 0xF1, 0x8, 0xF2, 0x8, 0xF3, 0x8, 0xF8, 0x8, 0xF9, 0x8, 0xFA, 0x8, 0xFB, 0x8, 0xFC, 0x8, 0xFD, 0x9, 0x2, 0x9, 0x3, 0x9, 0x4, 0x9, 0x5, 0x9, 0x6, 0x9, 0x7, 0x9, 0x8, 0x9, 0x9, 0x9, 0xA, 0x9, 0xB, 0x9, 0xC, 0x9, 0xD, 0x9, 0xE, 0x9, 0xF, 0x9, 0x10, 0x9, 0x11, 0x9, 0x12, 0x9, 0x14, 0x9, 0x15, 0x9, 0x16, 0x9, 0x17, 0x9, 0x18, 0x9, 0x19, 0x9, 0x1A, 0x9, 0x1B, 0x9, 0x1C, 0x9, 0x1D, 0x9, 0x26, 0x9, 0x27, 0x9, 0x28, 0x9, 0x2A, 0x9, 0x2C, 0x9, 0x2E, 0x9, 0x30, 0x9, 0x33, 0x9, 0x35, 0x9, 0x37, 0x9, 0x39, 0x9, 0x3B, 0x9, 0x3D, 0x9, 0x3F, 0x9, 0x40, 0x9, 0x41, 0x9, 0x42, 0x9, 0x43, 0x9, 0x44, 0x9, 0x45, 0x9, 0x46, 0x9, 0x47, 0x9, 0x48, 0x9, 0x49, 0x9, 0x4A, 0x9, 0x4B, 0x9, 0x4D, 0x9, 0x4F, 0x9, 0x51, 0x9, 0x5C, 0x9, 0x5E, 0x9, 0x60, 0x9, 0x62, 0x9, 0x64, 0x9, 0x66, 0x9, 0x68, 0x9, 0x6A, 0x9, 0x6C, 0x9, 0x6E, 0x9, 0x70, 0x9, 0x71, 0x9, 0x72, 0x9, 0x73, 0x9, 0x74, 0x9, 0x75, 0x9, 0x76, 0x9, 0x77, 0x9, 0x78, 0x9, 0x7D, 0x9, 0x7E, 0x9, 0x7F, 0x9, 0x80, 0x9, 0x81, 0x9, 0x82, 0x9, 0x83, 0x9, 0x84, 0x9, 0x85, 0x9, 0x86, 0x9, 0x91, 0x9, 0x92, 0x9, 0x93, 0x9, 0x94, 0x9, 0x95, 0x9, 0x9B, 0x9, 0x9C, 0x9, 0x9D, 0x9, 0xA2, 0x9, 0xB3, 0x9, 0xB4, 0x9, 0xB5, 0x9, 0xB6, 0x9, 0xB7, 0x9, 0xBB, 0x9, 0xBC, 0x9, 0xBD, 0x9, 0xBE, 0x9, 0xC7, 0x9, 0xD5, 0x9, 0xD6, 0x9, 0xD7, 0x9, 0xD8, 0x9, 0xD9, 0x9, 0xDA, 0x9, 0xDD, 0x9, 0xDE, 0x9, 0xDF, 0x9, 0xE0, 0x9, 0xE1, 0x9, 0xE2, 0x9, 0xE3, 0x9, 0xE4, 0x9, 0xE5, 0x9, 0xE6, 0x9, 0xE7, 0x9, 0xE8, 0x9, 0xE9, 0x9, 0xEA, 0x9, 0xEB, 0x9, 0xEC, 0x9, 0xEF, 0x9, 0xF3, 0x9, 0xF5, 0x9, 0xF9, 0x9, 0xFC, 0x9, 0xFD, 0x9, 0xFF, 0xA, 0x0, 0xA, 0x1, 0xA, 0x2, 0xA, 0x3, 0xA, 0x4, 0xA, 0x5, 0xA, 0x6, 0xA, 0x7, 0xA, 0x8, 0xA, 0xA, 0xA, 0xB, 0xA, 0xC, 0xA, 0xE, 0xA, 0xF, 0xA, 0x10, 0xA, 0x11, 0xA, 0x12, 0xA, 0x13, 0xA, 0x15, 0xA, 0x16, 0xA, 0x17, 0xA, 0x18, 0xA, 0x19, 0xA, 0x1A, 0xA, 0x1B, 0xA, 0x21, 0xA, 0x22, 0xA, 0x24, 0xA, 0x26, 0xA, 0x28, 0xA, 0x29, 0xA, 0x2A, 0xA, 0x2B, 0xA, 0x2E, 0xA, 0x2F, 0xA, 0x30, 0xA, 0x31, 0xA, 0x32, 0xA, 0x33, 0xA, 0x35, 0xA, 0x39, 0xA, 0x3A, 0xA, 0x3F, 0xA, 0x40, 0xA, 0x41, 0xA, 0x42, 0xA, 0x43, 0xA, 0x44, 0xA, 0x45, 0xA, 0x46, 0xA, 0x47, 0xA, 0x48, 0xA, 0x49, 0xA, 0x4A, 0xA, 0x4D, 0xA, 0x4E, 0xA, 0x50, 0xA, 0x51, 0xA, 0x52, 0xA, 0x53, 0xA, 0x5A, 0xA, 0x5B, 0xA, 0x5E, 0xA, 0x60, 0xA, 0x62, 0xA, 0x63, 0xA, 0x64, 0xA, 0x65, 0xA, 0x66, 0xA, 0x67, 0xA, 0x68, 0xA, 0x6E, 0xA, 0x6F, 0xA, 0x70, 0xA, 0x71, 0xA, 0x72, 0xA, 0x73, 0xA, 0x74, 0xA, 0x75, 0xA, 0x76, 0xA, 0x77, 0xA, 0x78, 0xA, 0x79, 0xA, 0x7A, 0xA, 0x7B, 0xA, 0x7C, 0xA, 0x7D, 0xA, 0x7E, 0xA, 0x7F, 0xA, 0x80, 0xA, 0x81, 0xA, 0x82, 0xA, 0x83, 0xA, 0x84, 0xA, 0x85, 0xA, 0x86, 0xA, 0x87, 0xA, 0x88, 0xA, 0x89, 0xA, 0x8A, 0xA, 0x8B, 0xA, 0x8C, 0xA, 0x8D, 0xA, 0x8E, 0xA, 0x8F, 0xA, 0x90, 0xA, 0x91, 0xA, 0x92, 0xA, 0x93, 0xA, 0x94, 0xA, 0x95, 0xA, 0x96, 0xA, 0x98, 0xA, 0x9A, 0xA, 0x9B, 0xA, 0x9C, 0xA, 0x9D, 0xA, 0x9E, 0xA, 0x9F, 0xA, 0xA0, 0xA, 0xA1, 0xA, 0xA2, 0xA, 0xA3, 0xA, 0xA4, 0xA, 0xA5, 0xA, 0xA6, 0xA, 0xA7, 0xA, 0xAF, 0xA, 0xB2, 0xA, 0xB4, 0xA, 0xC0, 0xA, 0xC1, 0xA, 0xC2, 0xA, 0xC3, 0xA, 0xC4, 0xA, 0xC5, 0xA, 0xC7, 0xA, 0xCB, 0xA, 0xCC, 0xA, 0xCF, 0xA, 0xD1, 0xA, 0xD2, 0xA, 0xD4, 0xA, 0xD6, 0xA, 0xDC, 0xA, 0xE6, 0xA, 0xEE, 0xA, 0xEF, 0xA, 0xF0, 0xA, 0xF2, 0xA, 0xF3, 0xA, 0xF4, 0xA, 0xF6, 0xA, 0xF8, 0xA, 0xFA, 0xA, 0xFC, 0xA, 0xFF, 0xB, 0x0, 0xB, 0x1, 0xB, 0x2, 0xB, 0x4, 0xB, 0x9, 0xB, 0xA, 0xB, 0xB, 0xB, 0xC, 0xB, 0xD, 0xB, 0xE, 0xB, 0xF, 0xB, 0x12, 0xB, 0x13, 0xB, 0x14, 0xB, 0x15, 0xB, 0x16, 0xB, 0x17, 0xB, 0x18, 0xB, 0x1A, 0xB, 0x1C, 0xB, 0x1E, 0xB, 0x20, 0xB, 0x21, 0xB, 0x22, 0xB, 0x23, 0xB, 0x25, 0xB, 0x27, 0xB, 0x2C, 0xB, 0x2E, 0xB, 0x2F, 0xB, 0x30, 0xB, 0x32, 0xB, 0x33, 0xB, 0x34, 0xB, 0x35, 0xB, 0x36, 0xB, 0x37, 0xB, 0x38, 0xB, 0x39, 0xB, 0x3B, 0xB, 0x3C, 0xB, 0x42, 0xB, 0x46, 0xB, 0x47, 0xB, 0x48, 0xB, 0x4B, 0xB, 0x4D, 0xB, 0x4E, 0xB, 0x4F, 0xB, 0x50, 0xB, 0x51, 0xB, 0x52, 0xB, 0x53, 0xB, 0x54, 0xB, 0x55, 0xB, 0x57, 0xB, 0x59, 0xB, 0x5B, 0xB, 0x5D, 0xB, 0x5F, 0xB, 0x60, 0xB, 0x61, 0xB, 0x62, 0xB, 0x63, 0xB, 0x64, 0xB, 0x65, 0xB, 0x66, 0xB, 0x67, 0xB, 0x68, 0xB, 0x6D, 0xB, 0x6E, 0xB, 0x6F, 0xB, 0x70, 0xB, 0x71, 0xB, 0x72, 0xB, 0x73, 0xB, 0x74, 0xB, 0x75, 0xB, 0x77, 0xB, 0x79, 0xB, 0x7B, 0xB, 0x7D, 0xB, 0x7F, 0xB, 0x81, 0xB, 0x83, 0xB, 0x84, 0xB, 0x85, 0xB, 0x86, 0xB, 0x87, 0xB, 0x88, 0xB, 0x89, 0xB, 0x8A, 0xB, 0x8B, 0xB, 0x8C, 0xB, 0x8D, 0xB, 0x8E, 0xB, 0x8F, 0xB, 0x90, 0xB, 0x91, 0xB, 0x92, 0xB, 0x93, 0xB, 0x94, 0xB, 0x95, 0xB, 0x96, 0xB, 0x97, 0xB, 0x98, 0xB, 0x99, 0xB, 0x9A, 0xB, 0x9C, 0xB, 0x9E, 0xB, 0xA0, 0xB, 0xA2, 0xB, 0xAD, 0xB, 0xAF, 0xB, 0xB1, 0xB, 0xB3, 0xB, 0xB5, 0xB, 0xB7, 0xB, 0xB9, 0xB, 0xBB, 0xB, 0xBD, 0xB, 0xBF, 0xB, 0xC0, 0xB, 0xC1, 0xB, 0xC2, 0xB, 0xC3, 0xB, 0xC5, 0xB, 0xC7, 0xB, 0xC8, 0xB, 0xC9, 0xB, 0xCA, 0xB, 0xCB, 0xB, 0xCC, 0xB, 0xCD, 0xB, 0xCE, 0xB, 0xCF, 0xB, 0xD0, 0xB, 0xD1, 0xB, 0xD2, 0xB, 0xD6, 0xB, 0xE0, 0xB, 0xE1, 0xB, 0xE2, 0xB, 0xE3, 0xB, 0xE4, 0xB, 0xE5, 0xB, 0xE6, 0xB, 0xE7, 0xB, 0xEE, 0xB, 0xEF, 0xB, 0xF0, 0xB, 0xF1, 0xB, 0xF2, 0xB, 0xF3, 0xB, 0xF4, 0xB, 0xF5, 0xB, 0xF6, 0xB, 0xF7, 0xB, 0xF8, 0xB, 0xF9, 0xB, 0xFA, 0xB, 0xFB, 0xB, 0xFC, 0xB, 0xFD, 0xB, 0xFE, 0xB, 0xFF, 0xC, 0x0, 0xC, 0x1, 0xC, 0x2, 0xC, 0x3, 0xC, 0x14, 0xC, 0x15, 0xC, 0x16, 0xC, 0x17, 0xC, 0x18, 0xC, 0x19, 0xC, 0x1A, 0xC, 0x1B, 0xC, 0x1C, 0xC, 0x1D, 0xC, 0x1E, 0xC, 0x1F, 0xC, 0x40, 0xC, 0x41, 0xC, 0x44, 0xC, 0x45, 0xC, 0x52, 0xC, 0x53, 0xC, 0x54, 0xC, 0x55, 0xC, 0x56, 0xC, 0x57, 0xC, 0x58, 0xC, 0x59, 0xC, 0x62, 0xC, 0x63, 0xC, 0x64, 0xC, 0x65, 0xC, 0x66, 0xC, 0x67, 0xC, 0x68, 0xC, 0x69, 0xC, 0x81, 0xC, 0x82, 0xC, 0x83, 0xC, 0x84, 0xC, 0x85, 0xC, 0x86, 0xC, 0x87, 0xC, 0x88, 0xC, 0x89, 0xC, 0x8A, 0xC, 0x8B, 0xC, 0x8C, 0xC, 0x8D, 0xC, 0x8E, 0xC, 0x8F, 0xC, 0x9E, 0xC, 0x9F, 0xC, 0xA2, 0xC, 0xA3, 0xC, 0xA4, 0xC, 0xA5, 0xC, 0xA6, 0xC, 0xAC, 0xC, 0xAD, 0xC, 0xB7, 0xC, 0xBB, 0xC, 0xBE, 0xC, 0xC4, 0xC, 0xC9, 0xC, 0xD4, 0xC, 0xD6, 0xC, 0xDD, 0xC, 0xE1, 0x0, 0x2, 0x2, 0x59, 0x0, 0x7, 0x0, 0x7, 0x0, 0x19, 0x0, 0xC, 0x0, 0xC, 0x0, 0x19, 0x0, 0x11, 0x0, 0x11, 0x0, 0x21, 0x0, 0x12, 0x0, 0x12, 0x0, 0x25, 0x0, 0x13, 0x0, 0x13, 0x0, 0x21, 0x0, 0x26, 0x0, 0x26, 0x0, 0x2, 0x0, 0x27, 0x0, 0x27, 0x0, 0x1C, 0x0, 0x28, 0x0, 0x28, 0x0, 0x13, 0x0, 0x29, 0x0, 0x29, 0x0, 0x1, 0x0, 0x2A, 0x0, 0x2A, 0x0, 0x5, 0x0, 0x2F, 0x0, 0x2F, 0x0, 0xA, 0x0, 0x30, 0x0, 0x30, 0x0, 0xB, 0x0, 0x31, 0x0, 0x31, 0x0, 0x18, 0x0, 0x34, 0x0, 0x34, 0x0, 0x1, 0x0, 0x35, 0x0, 0x35, 0x0, 0x16, 0x0, 0x39, 0x0, 0x39, 0x0, 0xE, 0x0, 0x3A, 0x0, 0x3A, 0x0, 0xA, 0x0, 0x3B, 0x0, 0x3B, 0x0, 0x1D, 0x0, 0x3C, 0x0, 0x3C, 0x0, 0x1B, 0x0, 0x3D, 0x0, 0x3D, 0x0, 0x12, 0x0, 0x3E, 0x0, 0x3E, 0x0, 0xC, 0x0, 0x3F, 0x0, 0x3F, 0x0, 0x11, 0x0, 0x46, 0x0, 0x46, 0x0, 0x6, 0x0, 0x47, 0x0, 0x47, 0x0, 0x7, 0x0, 0x48, 0x0, 0x48, 0x0, 0x17, 0x0, 0x4A, 0x0, 0x4A, 0x0, 0x8, 0x0, 0x4D, 0x0, 0x4D, 0x0, 0x4, 0x0, 0x52, 0x0, 0x53, 0x0, 0x4, 0x0, 0x54, 0x0, 0x54, 0x0, 0x3, 0x0, 0x55, 0x0, 0x55, 0x0, 0x7, 0x0, 0x57, 0x0, 0x57, 0x0, 0x15, 0x0, 0x5B, 0x0, 0x5B, 0x0, 0x9, 0x0, 0x5D, 0x0, 0x5D, 0x0, 0x14, 0x0, 0x5E, 0x0, 0x5E, 0x0, 0x9, 0x0, 0x5F, 0x0, 0x5F, 0x0, 0x10, 0x0, 0x8B, 0x0, 0x8B, 0x0, 0x7, 0x0, 0x97, 0x0, 0x97, 0x0, 0x7, 0x0, 0x9A, 0x0, 0x9A, 0x0, 0x7, 0x0, 0x9C, 0x0, 0x9C, 0x0, 0x7, 0x0, 0x9D, 0x0, 0x9D, 0x0, 0x1, 0x0, 0xA0, 0x0, 0xA1, 0x0, 0x1, 0x0, 0xA6, 0x0, 0xA6, 0x0, 0x1, 0x0, 0xAE, 0x0, 0xAE, 0x0, 0xB, 0x0, 0xB8, 0x0, 0xB8, 0x0, 0x16, 0x0, 0xC2, 0x0, 0xC2, 0x0, 0xE, 0x0, 0xCA, 0x0, 0xCA, 0x0, 0x10, 0x0, 0xD8, 0x0, 0xD8, 0x0, 0x11, 0x0, 0xD9, 0x0, 0xDA, 0x0, 0x10, 0x0, 0xED, 0x0, 0xEE, 0x0, 0x7, 0x0, 0xF2, 0x0, 0xF2, 0x0, 0x18, 0x0, 0xF8, 0x0, 0xF8, 0x0, 0x1C, 0x0, 0xFA, 0x0, 0xFA, 0x0, 0x2, 0x1, 0x2, 0x1, 0x2, 0x0, 0x15, 0x1, 0x3, 0x1, 0x3, 0x0, 0xC, 0x2, 0x29, 0x2, 0x29, 0x0, 0x7, 0x2, 0x2A, 0x2, 0x2A, 0x0, 0x17, 0x2, 0x2B, 0x2, 0x2B, 0x0, 0x7, 0x2, 0x30, 0x2, 0x30, 0x0, 0x22, 0x2, 0x31, 0x2, 0x31, 0x0, 0x2, 0x2, 0x32, 0x2, 0x32, 0x0, 0x1, 0x2, 0x33, 0x2, 0x33, 0x0, 0x2, 0x2, 0x3C, 0x2, 0x3C, 0x0, 0x9, 0x2, 0x40, 0x2, 0x40, 0x0, 0x4, 0x2, 0x46, 0x2, 0x46, 0x0, 0x7, 0x2, 0x4E, 0x2, 0x4E, 0x0, 0xB, 0x2, 0x55, 0x2, 0x55, 0x0, 0x1, 0x2, 0x56, 0x2, 0x56, 0x0, 0x3, 0x2, 0x60, 0x2, 0x60, 0x0, 0x7, 0x2, 0x62, 0x2, 0x62, 0x0, 0x7, 0x2, 0x64, 0x2, 0x64, 0x0, 0x7, 0x2, 0x65, 0x2, 0x65, 0x0, 0x1, 0x2, 0x66, 0x2, 0x66, 0x0, 0x13, 0x2, 0x67, 0x2, 0x67, 0x0, 0x1, 0x2, 0x6A, 0x2, 0x6B, 0x0, 0x20, 0x2, 0x70, 0x2, 0x70, 0x0, 0x12, 0x2, 0x74, 0x2, 0x74, 0x0, 0x26, 0x2, 0x7A, 0x2, 0x7A, 0x0, 0x20, 0x2, 0x7C, 0x2, 0x7C, 0x0, 0x20, 0x2, 0x82, 0x2, 0x82, 0x0, 0x1A, 0x2, 0x84, 0x2, 0x84, 0x0, 0x14, 0x2, 0x8D, 0x2, 0x8D, 0x0, 0x7, 0x2, 0x92, 0x2, 0x92, 0x0, 0x1F, 0x2, 0x94, 0x2, 0x94, 0x0, 0x1F, 0x2, 0x95, 0x2, 0x95, 0x0, 0x7, 0x2, 0x9A, 0x2, 0x9B, 0x0, 0x1F, 0x2, 0xA0, 0x2, 0xA0, 0x0, 0x1F, 0x2, 0xA3, 0x2, 0xA3, 0x0, 0x2, 0x2, 0xAE, 0x2, 0xAE, 0x0, 0x3, 0x2, 0xAF, 0x2, 0xAF, 0x0, 0x1D, 0x2, 0xB0, 0x2, 0xB0, 0x0, 0x9, 0x2, 0xC5, 0x2, 0xC5, 0x0, 0x7, 0x2, 0xC6, 0x2, 0xC6, 0x0, 0x22, 0x2, 0xC7, 0x2, 0xC7, 0x0, 0x1A, 0x2, 0xCA, 0x2, 0xCA, 0x0, 0x12, 0x2, 0xCB, 0x2, 0xCB, 0x0, 0x14, 0x2, 0xCC, 0x2, 0xCC, 0x0, 0xB, 0x2, 0xCE, 0x2, 0xCE, 0x0, 0xB, 0x2, 0xD0, 0x2, 0xD0, 0x0, 0xB, 0x2, 0xDA, 0x2, 0xDA, 0x0, 0x12, 0x2, 0xDB, 0x2, 0xDB, 0x0, 0x14, 0x2, 0xEF, 0x2, 0xEF, 0x0, 0x1, 0x2, 0xF3, 0x2, 0xF3, 0x0, 0x1A, 0x2, 0xF4, 0x2, 0xF4, 0x0, 0x12, 0x2, 0xF5, 0x2, 0xF5, 0x0, 0x14, 0x3, 0x8, 0x3, 0x8, 0x0, 0x12, 0x3, 0x9, 0x3, 0x9, 0x0, 0x14, 0x3, 0xA, 0x3, 0xA, 0x0, 0x12, 0x3, 0xB, 0x3, 0xB, 0x0, 0x14, 0x3, 0xC, 0x3, 0xC, 0x0, 0x5, 0x3, 0xD, 0x3, 0xD, 0x0, 0x8, 0x3, 0xE, 0x3, 0xE, 0x0, 0xB, 0x3, 0x1A, 0x3, 0x1A, 0x0, 0xB, 0x4, 0x34, 0x4, 0x34, 0x0, 0x18, 0x4, 0x5E, 0x4, 0x5F, 0x0, 0x25, 0x4, 0x62, 0x4, 0x63, 0x0, 0x19, 0x4, 0x64, 0x4, 0x64, 0x0, 0x21, 0x4, 0x65, 0x4, 0x67, 0x0, 0x19, 0x4, 0x68, 0x4, 0x68, 0x0, 0x21, 0x4, 0x6F, 0x4, 0x70, 0x0, 0x21, 0x5, 0x59, 0x5, 0x59, 0x0, 0x16, 0x5, 0x5B, 0x5, 0x5B, 0x0, 0x6, 0x5, 0x5E, 0x5, 0x5E, 0x0, 0x4, 0x5, 0x5F, 0x5, 0x5F, 0x0, 0xB, 0x5, 0x61, 0x5, 0x61, 0x0, 0x11, 0x5, 0x62, 0x5, 0x62, 0x0, 0x10, 0x5, 0x66, 0x5, 0x66, 0x0, 0x1, 0x5, 0x6A, 0x5, 0x6A, 0x0, 0x9, 0x5, 0x70, 0x5, 0x70, 0x0, 0x3, 0x5, 0xD9, 0x5, 0xD9, 0x0, 0x11, 0x5, 0xDA, 0x5, 0xDA, 0x0, 0x10, 0x5, 0xDB, 0x5, 0xDB, 0x0, 0x11, 0x5, 0xDC, 0x5, 0xDC, 0x0, 0x10, 0x5, 0xE5, 0x5, 0xE5, 0x0, 0x1, 0x5, 0xE7, 0x5, 0xE7, 0x0, 0x20, 0x5, 0xE8, 0x5, 0xE8, 0x0, 0x1F, 0x5, 0xEB, 0x5, 0xEB, 0x0, 0x20, 0x5, 0xEC, 0x5, 0xEC, 0x0, 0x1F, 0x5, 0xEF, 0x5, 0xEF, 0x0, 0x2, 0x5, 0xF0, 0x5, 0xF0, 0x0, 0x6, 0x5, 0xF1, 0x5, 0xF1, 0x0, 0x2, 0x5, 0xFD, 0x5, 0xFD, 0x0, 0xE, 0x5, 0xFE, 0x5, 0xFE, 0x0, 0x1A, 0x5, 0xFF, 0x5, 0xFF, 0x0, 0xE, 0x6, 0x0, 0x6, 0x0, 0x0, 0x1A, 0x6, 0x1, 0x6, 0x1, 0x0, 0x1, 0x6, 0x2, 0x6, 0x2, 0x0, 0x3, 0x6, 0x3, 0x6, 0x3, 0x0, 0x1, 0x6, 0x4, 0x6, 0x4, 0x0, 0x3, 0x6, 0x5, 0x6, 0x5, 0x0, 0x1, 0x6, 0x6, 0x6, 0x6, 0x0, 0x3, 0x6, 0x25, 0x6, 0x25, 0x0, 0xE, 0x6, 0x26, 0x6, 0x26, 0x0, 0x1A, 0x6, 0x29, 0x6, 0x29, 0x0, 0xE, 0x6, 0x2A, 0x6, 0x2A, 0x0, 0x1A, 0x6, 0x2E, 0x6, 0x2E, 0x0, 0x4, 0x6, 0x31, 0x6, 0x31, 0x0, 0x1, 0x6, 0x32, 0x6, 0x32, 0x0, 0x3, 0x6, 0x33, 0x6, 0x33, 0x0, 0x1, 0x6, 0x5F, 0x6, 0x5F, 0x0, 0x4, 0x6, 0x6A, 0x6, 0x6A, 0x0, 0x2, 0x6, 0x6C, 0x6, 0x6C, 0x0, 0x1, 0x6, 0x6E, 0x6, 0x6E, 0x0, 0xA, 0x6, 0x70, 0x6, 0x70, 0x0, 0x1D, 0x6, 0x71, 0x6, 0x71, 0x0, 0x9, 0x6, 0x72, 0x6, 0x72, 0x0, 0x1D, 0x6, 0x73, 0x6, 0x73, 0x0, 0x9, 0x6, 0x75, 0x6, 0x75, 0x0, 0x9, 0x6, 0x76, 0x6, 0x76, 0x0, 0x1, 0x6, 0x78, 0x6, 0x78, 0x0, 0xB, 0x6, 0x7A, 0x6, 0x7A, 0x0, 0xB, 0x6, 0x7C, 0x6, 0x7C, 0x0, 0xB, 0x6, 0x86, 0x6, 0x86, 0x0, 0x1, 0x6, 0x87, 0x6, 0x87, 0x0, 0x3, 0x6, 0x88, 0x6, 0x88, 0x0, 0x16, 0x6, 0x89, 0x6, 0x89, 0x0, 0x7, 0x6, 0x8A, 0x6, 0x8A, 0x0, 0x16, 0x6, 0x8B, 0x6, 0x8B, 0x0, 0x7, 0x6, 0x8C, 0x6, 0x8C, 0x0, 0x16, 0x6, 0x8D, 0x6, 0x8D, 0x0, 0x7, 0x6, 0x96, 0x6, 0x96, 0x0, 0x1D, 0x6, 0x97, 0x6, 0x97, 0x0, 0x9, 0x6, 0x9D, 0x6, 0x9D, 0x0, 0x7, 0x6, 0x9F, 0x6, 0x9F, 0x0, 0x7, 0x6, 0xBB, 0x6, 0xBB, 0x0, 0x4, 0x6, 0xC9, 0x6, 0xC9, 0x0, 0x13, 0x6, 0xCD, 0x6, 0xCD, 0x0, 0x1C, 0x6, 0xCE, 0x6, 0xCE, 0x0, 0x7, 0x7, 0x54, 0x7, 0x54, 0x0, 0x23, 0x7, 0x59, 0x7, 0x59, 0x0, 0xD, 0x7, 0x5C, 0x7, 0x5C, 0x0, 0x24, 0x7, 0x5D, 0x7, 0x5D, 0x0, 0x1E, 0x7, 0x67, 0x7, 0x67, 0x0, 0xF, 0x7, 0x68, 0x7, 0x68, 0x0, 0xD, 0x7, 0x69, 0x7, 0x69, 0x0, 0xF, 0x7, 0x7B, 0x7, 0x7B, 0x0, 0x1E, 0x7, 0x8A, 0x7, 0x8C, 0x0, 0x1E, 0x7, 0xAE, 0x7, 0xAE, 0x0, 0xD, 0x7, 0xB1, 0x7, 0xB1, 0x0, 0xF, 0x7, 0xCF, 0x7, 0xCF, 0x0, 0x13, 0x7, 0xD1, 0x7, 0xD2, 0x0, 0x1, 0x8, 0xC7, 0x8, 0xC7, 0x0, 0x25, 0x8, 0xC8, 0x8, 0xC9, 0x0, 0x1, 0x8, 0xCB, 0x8, 0xCB, 0x0, 0xE, 0x8, 0xCD, 0x8, 0xD3, 0x0, 0x2, 0x8, 0xD4, 0x8, 0xD4, 0x0, 0x13, 0x8, 0xD5, 0x8, 0xD8, 0x0, 0x5, 0x8, 0xDE, 0x8, 0xE2, 0x0, 0x1, 0x8, 0xE3, 0x8, 0xE6, 0x0, 0xA, 0x8, 0xE7, 0x8, 0xE7, 0x0, 0xC, 0x8, 0xE8, 0x8, 0xEE, 0x0, 0x6, 0x8, 0xEF, 0x8, 0xEF, 0x0, 0x17, 0x8, 0xF0, 0x8, 0xF3, 0x0, 0x8, 0x8, 0xF8, 0x8, 0xF8, 0x0, 0x4, 0x8, 0xF9, 0x8, 0xFD, 0x0, 0x3, 0x9, 0x2, 0x9, 0x3, 0x0, 0x9, 0x9, 0x4, 0x9, 0x4, 0x0, 0x2, 0x9, 0x5, 0x9, 0x5, 0x0, 0x6, 0x9, 0x6, 0x9, 0x6, 0x0, 0x2, 0x9, 0x7, 0x9, 0x7, 0x0, 0x6, 0x9, 0x8, 0x9, 0x8, 0x0, 0x2, 0x9, 0x9, 0x9, 0x9, 0x0, 0x6, 0x9, 0xA, 0x9, 0xA, 0x0, 0x13, 0x9, 0xB, 0x9, 0xB, 0x0, 0x17, 0x9, 0xC, 0x9, 0xC, 0x0, 0x13, 0x9, 0xD, 0x9, 0xD, 0x0, 0x17, 0x9, 0xE, 0x9, 0xE, 0x0, 0x13, 0x9, 0xF, 0x9, 0xF, 0x0, 0x17, 0x9, 0x10, 0x9, 0x10, 0x0, 0x13, 0x9, 0x11, 0x9, 0x11, 0x0, 0x17, 0x9, 0x12, 0x9, 0x12, 0x0, 0x1, 0x9, 0x14, 0x9, 0x14, 0x0, 0x5, 0x9, 0x15, 0x9, 0x15, 0x0, 0x8, 0x9, 0x16, 0x9, 0x16, 0x0, 0x5, 0x9, 0x17, 0x9, 0x17, 0x0, 0x8, 0x9, 0x18, 0x9, 0x18, 0x0, 0x5, 0x9, 0x19, 0x9, 0x19, 0x0, 0x8, 0x9, 0x1A, 0x9, 0x1A, 0x0, 0x5, 0x9, 0x1B, 0x9, 0x1B, 0x0, 0x8, 0x9, 0x1C, 0x9, 0x1C, 0x0, 0x5, 0x9, 0x1D, 0x9, 0x1D, 0x0, 0x8, 0x9, 0x27, 0x9, 0x27, 0x0, 0x4, 0x9, 0x33, 0x9, 0x33, 0x0, 0xA, 0x9, 0x35, 0x9, 0x35, 0x0, 0xB, 0x9, 0x37, 0x9, 0x37, 0x0, 0x18, 0x9, 0x39, 0x9, 0x39, 0x0, 0x18, 0x9, 0x3B, 0x9, 0x3B, 0x0, 0x18, 0x9, 0x3D, 0x9, 0x3D, 0x0, 0x18, 0x9, 0x40, 0x9, 0x40, 0x0, 0x4, 0x9, 0x42, 0x9, 0x42, 0x0, 0x4, 0x9, 0x44, 0x9, 0x45, 0x0, 0x4, 0x9, 0x46, 0x9, 0x46, 0x0, 0x1, 0x9, 0x47, 0x9, 0x47, 0x0, 0x3, 0x9, 0x48, 0x9, 0x48, 0x0, 0x1, 0x9, 0x49, 0x9, 0x49, 0x0, 0x3, 0x9, 0x4A, 0x9, 0x4A, 0x0, 0x1, 0x9, 0x4B, 0x9, 0x4B, 0x0, 0x3, 0x9, 0x4D, 0x9, 0x4D, 0x0, 0x15, 0x9, 0x4F, 0x9, 0x4F, 0x0, 0x15, 0x9, 0x51, 0x9, 0x51, 0x0, 0x15, 0x9, 0x5C, 0x9, 0x5C, 0x0, 0xE, 0x9, 0x5E, 0x9, 0x5E, 0x0, 0xE, 0x9, 0x60, 0x9, 0x60, 0x0, 0xE, 0x9, 0x62, 0x9, 0x62, 0x0, 0xA, 0x9, 0x64, 0x9, 0x64, 0x0, 0xA, 0x9, 0x66, 0x9, 0x66, 0x0, 0xA, 0x9, 0x68, 0x9, 0x68, 0x0, 0xA, 0x9, 0x6A, 0x9, 0x6A, 0x0, 0xA, 0x9, 0x6C, 0x9, 0x6C, 0x0, 0xA, 0x9, 0x6E, 0x9, 0x6E, 0x0, 0x1B, 0x9, 0x70, 0x9, 0x70, 0x0, 0xC, 0x9, 0x71, 0x9, 0x71, 0x0, 0x9, 0x9, 0x72, 0x9, 0x72, 0x0, 0xC, 0x9, 0x73, 0x9, 0x73, 0x0, 0x11, 0x9, 0x74, 0x9, 0x74, 0x0, 0x10, 0x9, 0x75, 0x9, 0x75, 0x0, 0x11, 0x9, 0x76, 0x9, 0x76, 0x0, 0x10, 0x9, 0x77, 0x9, 0x77, 0x0, 0x11, 0x9, 0x78, 0x9, 0x78, 0x0, 0x10, 0x9, 0x7D, 0x9, 0x7E, 0x0, 0xD, 0x9, 0x7F, 0x9, 0x7F, 0x0, 0x23, 0x9, 0x80, 0x9, 0x86, 0x0, 0xF, 0x9, 0x91, 0x9, 0x95, 0x0, 0xD, 0x9, 0x9B, 0x9, 0x9D, 0x0, 0xF, 0x9, 0xA2, 0x9, 0xA2, 0x0, 0xD, 0x9, 0xB3, 0x9, 0xB3, 0x0, 0x1E, 0x9, 0xB4, 0x9, 0xB7, 0x0, 0x24, 0x9, 0xBB, 0x9, 0xBE, 0x0, 0xD, 0x9, 0xC7, 0x9, 0xC7, 0x0, 0x23, 0x9, 0xD5, 0x9, 0xD5, 0x0, 0x2, 0x9, 0xD6, 0x9, 0xD6, 0x0, 0x5, 0x9, 0xD9, 0x9, 0xD9, 0x0, 0x1, 0x9, 0xDA, 0x9, 0xDA, 0x0, 0xC, 0x9, 0xDD, 0x9, 0xDD, 0x0, 0x2, 0x9, 0xDE, 0x9, 0xDE, 0x0, 0x1C, 0x9, 0xDF, 0x9, 0xDF, 0x0, 0x5, 0x9, 0xE0, 0x9, 0xE0, 0x0, 0x11, 0x9, 0xE3, 0x9, 0xE3, 0x0, 0xB, 0x9, 0xE6, 0x9, 0xE6, 0x0, 0x1, 0x9, 0xE7, 0x9, 0xE7, 0x0, 0x16, 0x9, 0xE8, 0x9, 0xE8, 0x0, 0xE, 0x9, 0xE9, 0x9, 0xE9, 0x0, 0xC, 0x9, 0xEA, 0x9, 0xEA, 0x0, 0x12, 0x9, 0xEC, 0x9, 0xEC, 0x0, 0xC, 0x9, 0xEF, 0x9, 0xEF, 0x0, 0x4, 0x9, 0xF3, 0x9, 0xF3, 0x0, 0x3, 0x9, 0xF5, 0x9, 0xF5, 0x0, 0x9, 0x9, 0xF9, 0x9, 0xF9, 0x0, 0x3, 0x9, 0xFC, 0x9, 0xFC, 0x0, 0x5, 0x9, 0xFD, 0x9, 0xFD, 0x0, 0x22, 0xA, 0x1, 0xA, 0x1, 0x0, 0xA, 0xA, 0x2, 0xA, 0x3, 0x0, 0xB, 0xA, 0x4, 0xA, 0x4, 0x0, 0x26, 0xA, 0x5, 0xA, 0x5, 0x0, 0x2, 0xA, 0x6, 0xA, 0x6, 0x0, 0x1C, 0xA, 0x7, 0xA, 0x7, 0x0, 0x22, 0xA, 0x8, 0xA, 0x8, 0x0, 0x5, 0xA, 0xC, 0xA, 0xC, 0x0, 0x1, 0xA, 0xE, 0xA, 0xE, 0x0, 0x16, 0xA, 0xF, 0xA, 0xF, 0x0, 0x13, 0xA, 0x10, 0xA, 0x10, 0x0, 0xE, 0xA, 0x11, 0xA, 0x11, 0x0, 0x12, 0xA, 0x12, 0xA, 0x12, 0x0, 0x6, 0xA, 0x13, 0xA, 0x13, 0x0, 0x8, 0xA, 0x15, 0xA, 0x15, 0x0, 0x3, 0xA, 0x16, 0xA, 0x16, 0x0, 0x7, 0xA, 0x17, 0xA, 0x17, 0x0, 0x17, 0xA, 0x18, 0xA, 0x18, 0x0, 0x9, 0xA, 0x19, 0xA, 0x19, 0x0, 0x14, 0xA, 0x1A, 0xA, 0x1A, 0x0, 0x8, 0xA, 0x1B, 0xA, 0x1B, 0x0, 0x1A, 0xA, 0x21, 0xA, 0x21, 0x0, 0x9, 0xA, 0x22, 0xA, 0x22, 0x0, 0x1B, 0xA, 0x24, 0xA, 0x24, 0x0, 0x1B, 0xA, 0x26, 0xA, 0x26, 0x0, 0x1B, 0xA, 0x28, 0xA, 0x28, 0x0, 0xC, 0xA, 0x29, 0xA, 0x29, 0x0, 0x9, 0xA, 0x2A, 0xA, 0x2B, 0x0, 0x19, 0xA, 0x2E, 0xA, 0x2E, 0x0, 0x19, 0xA, 0x30, 0xA, 0x30, 0x0, 0x4, 0xA, 0x31, 0xA, 0x31, 0x0, 0x2, 0xA, 0x32, 0xA, 0x32, 0x0, 0x6, 0xA, 0x33, 0xA, 0x33, 0x0, 0x5, 0xA, 0x35, 0xA, 0x35, 0x0, 0x8, 0xA, 0x39, 0xA, 0x39, 0x0, 0x1D, 0xA, 0x3A, 0xA, 0x3A, 0x0, 0x9, 0xA, 0x3F, 0xA, 0x3F, 0x0, 0x13, 0xA, 0x40, 0xA, 0x40, 0x0, 0x17, 0xA, 0x41, 0xA, 0x41, 0x0, 0xC, 0xA, 0x42, 0xA, 0x42, 0x0, 0x9, 0xA, 0x44, 0xA, 0x44, 0x0, 0x12, 0xA, 0x45, 0xA, 0x45, 0x0, 0x14, 0xA, 0x47, 0xA, 0x47, 0x0, 0x2, 0xA, 0x48, 0xA, 0x48, 0x0, 0x6, 0xA, 0x49, 0xA, 0x49, 0x0, 0x2, 0xA, 0x4A, 0xA, 0x4A, 0x0, 0x6, 0xA, 0x4D, 0xA, 0x4D, 0x0, 0x5, 0xA, 0x4E, 0xA, 0x4E, 0x0, 0x8, 0xA, 0x50, 0xA, 0x51, 0x0, 0x8, 0xA, 0x52, 0xA, 0x52, 0x0, 0x12, 0xA, 0x53, 0xA, 0x53, 0x0, 0x14, 0xA, 0x5A, 0xA, 0x5A, 0x0, 0x1, 0xA, 0x5B, 0xA, 0x5B, 0x0, 0x3, 0xA, 0x5E, 0xA, 0x5E, 0x0, 0x1, 0xA, 0x60, 0xA, 0x60, 0x0, 0x3, 0xA, 0x62, 0xA, 0x62, 0x0, 0x7, 0xA, 0x63, 0xA, 0x63, 0x0, 0x26, 0xA, 0x64, 0xA, 0x64, 0x0, 0x9, 0xA, 0x65, 0xA, 0x65, 0x0, 0x26, 0xA, 0x66, 0xA, 0x66, 0x0, 0x9, 0xA, 0x67, 0xA, 0x67, 0x0, 0x26, 0xA, 0x68, 0xA, 0x68, 0x0, 0x9, 0xA, 0x6E, 0xA, 0x6E, 0x0, 0x2, 0xA, 0x6F, 0xA, 0x6F, 0x0, 0x6, 0xA, 0x70, 0xA, 0x70, 0x0, 0x2, 0xA, 0x71, 0xA, 0x71, 0x0, 0x6, 0xA, 0x72, 0xA, 0x72, 0x0, 0x2, 0xA, 0x73, 0xA, 0x73, 0x0, 0x6, 0xA, 0x74, 0xA, 0x74, 0x0, 0x2, 0xA, 0x75, 0xA, 0x75, 0x0, 0x6, 0xA, 0x76, 0xA, 0x76, 0x0, 0x2, 0xA, 0x77, 0xA, 0x77, 0x0, 0x6, 0xA, 0x78, 0xA, 0x78, 0x0, 0x2, 0xA, 0x79, 0xA, 0x79, 0x0, 0x6, 0xA, 0x7A, 0xA, 0x7A, 0x0, 0x2, 0xA, 0x7B, 0xA, 0x7B, 0x0, 0x6, 0xA, 0x7C, 0xA, 0x7C, 0x0, 0x2, 0xA, 0x7D, 0xA, 0x7D, 0x0, 0x6, 0xA, 0x7E, 0xA, 0x7E, 0x0, 0x2, 0xA, 0x7F, 0xA, 0x7F, 0x0, 0x6, 0xA, 0x80, 0xA, 0x80, 0x0, 0x2, 0xA, 0x81, 0xA, 0x81, 0x0, 0x6, 0xA, 0x82, 0xA, 0x82, 0x0, 0x2, 0xA, 0x83, 0xA, 0x83, 0x0, 0x6, 0xA, 0x84, 0xA, 0x84, 0x0, 0x2, 0xA, 0x85, 0xA, 0x85, 0x0, 0x6, 0xA, 0x86, 0xA, 0x86, 0x0, 0x5, 0xA, 0x87, 0xA, 0x87, 0x0, 0x8, 0xA, 0x88, 0xA, 0x88, 0x0, 0x5, 0xA, 0x89, 0xA, 0x89, 0x0, 0x8, 0xA, 0x8A, 0xA, 0x8A, 0x0, 0x5, 0xA, 0x8B, 0xA, 0x8B, 0x0, 0x8, 0xA, 0x8C, 0xA, 0x8C, 0x0, 0x5, 0xA, 0x8D, 0xA, 0x8D, 0x0, 0x8, 0xA, 0x8E, 0xA, 0x8E, 0x0, 0x5, 0xA, 0x8F, 0xA, 0x8F, 0x0, 0x8, 0xA, 0x90, 0xA, 0x90, 0x0, 0x5, 0xA, 0x91, 0xA, 0x91, 0x0, 0x8, 0xA, 0x92, 0xA, 0x92, 0x0, 0x5, 0xA, 0x93, 0xA, 0x93, 0x0, 0x8, 0xA, 0x94, 0xA, 0x94, 0x0, 0x5, 0xA, 0x95, 0xA, 0x95, 0x0, 0x8, 0xA, 0x9A, 0xA, 0x9A, 0x0, 0x1, 0xA, 0x9B, 0xA, 0x9B, 0x0, 0x3, 0xA, 0x9C, 0xA, 0x9C, 0x0, 0x1, 0xA, 0x9D, 0xA, 0x9D, 0x0, 0x3, 0xA, 0x9E, 0xA, 0x9E, 0x0, 0x1, 0xA, 0x9F, 0xA, 0x9F, 0x0, 0x3, 0xA, 0xA0, 0xA, 0xA0, 0x0, 0x1, 0xA, 0xA1, 0xA, 0xA1, 0x0, 0x3, 0xA, 0xA2, 0xA, 0xA2, 0x0, 0x1, 0xA, 0xA3, 0xA, 0xA3, 0x0, 0x3, 0xA, 0xA4, 0xA, 0xA4, 0x0, 0x1, 0xA, 0xA5, 0xA, 0xA5, 0x0, 0x3, 0xA, 0xA6, 0xA, 0xA6, 0x0, 0x1, 0xA, 0xA7, 0xA, 0xA7, 0x0, 0x3, 0xA, 0xAF, 0xA, 0xAF, 0x0, 0x3, 0xA, 0xB2, 0xA, 0xB2, 0x0, 0xA, 0xA, 0xB4, 0xA, 0xB4, 0x0, 0xA, 0xA, 0xC0, 0xA, 0xC0, 0x0, 0xC, 0xA, 0xC1, 0xA, 0xC1, 0x0, 0x9, 0xA, 0xC2, 0xA, 0xC2, 0x0, 0xC, 0xA, 0xC3, 0xA, 0xC3, 0x0, 0x9, 0xA, 0xC4, 0xA, 0xC4, 0x0, 0xC, 0xA, 0xC5, 0xA, 0xC5, 0x0, 0x9, 0xA, 0xC7, 0xA, 0xC7, 0x0, 0xE, 0xA, 0xCB, 0xA, 0xCB, 0x0, 0x22, 0xA, 0xCC, 0xA, 0xCC, 0x0, 0x1A, 0xA, 0xCF, 0xA, 0xCF, 0x0, 0x4, 0xA, 0xD1, 0xA, 0xD1, 0x0, 0x20, 0xA, 0xD2, 0xA, 0xD2, 0x0, 0x22, 0xA, 0xD4, 0xA, 0xD4, 0x0, 0xB, 0xA, 0xD6, 0xA, 0xD6, 0x0, 0xC, 0xA, 0xDC, 0xA, 0xDC, 0x0, 0x25, 0xA, 0xEE, 0xA, 0xEE, 0x0, 0x2, 0xA, 0xEF, 0xA, 0xEF, 0x0, 0x6, 0xA, 0xF2, 0xA, 0xF2, 0x0, 0x1, 0xA, 0xF3, 0xA, 0xF3, 0x0, 0x3, 0xA, 0xF4, 0xA, 0xF4, 0x0, 0xA, 0xA, 0xF6, 0xA, 0xF6, 0x0, 0xA, 0xA, 0xF8, 0xA, 0xF8, 0x0, 0xA, 0xA, 0xFA, 0xA, 0xFA, 0x0, 0xA, 0xA, 0xFC, 0xA, 0xFC, 0x0, 0xA, 0xA, 0xFF, 0xA, 0xFF, 0x0, 0x2, 0xB, 0x0, 0xB, 0x0, 0x0, 0x6, 0xB, 0x1, 0xB, 0x1, 0x0, 0x2, 0xB, 0x2, 0xB, 0x2, 0x0, 0x6, 0xB, 0x4, 0xB, 0x4, 0x0, 0x8, 0xB, 0x9, 0xB, 0x9, 0x0, 0x1, 0xB, 0xA, 0xB, 0xA, 0x0, 0x3, 0xB, 0xB, 0xB, 0xB, 0x0, 0x1, 0xB, 0xC, 0xB, 0xC, 0x0, 0x3, 0xB, 0xD, 0xB, 0xD, 0x0, 0x11, 0xB, 0xE, 0xB, 0xF, 0x0, 0x10, 0xB, 0x13, 0xB, 0x13, 0x0, 0x4, 0xB, 0x14, 0xB, 0x14, 0x0, 0x2, 0xB, 0x15, 0xB, 0x15, 0x0, 0x6, 0xB, 0x16, 0xB, 0x16, 0x0, 0x2, 0xB, 0x17, 0xB, 0x17, 0x0, 0x6, 0xB, 0x18, 0xB, 0x18, 0x0, 0x5, 0xB, 0x1A, 0xB, 0x1A, 0x0, 0x5, 0xB, 0x20, 0xB, 0x20, 0x0, 0x1, 0xB, 0x21, 0xB, 0x21, 0x0, 0x3, 0xB, 0x22, 0xB, 0x22, 0x0, 0x1, 0xB, 0x23, 0xB, 0x23, 0x0, 0x3, 0xB, 0x25, 0xB, 0x25, 0x0, 0x15, 0xB, 0x27, 0xB, 0x27, 0x0, 0x15, 0xB, 0x2E, 0xB, 0x2E, 0x0, 0x2, 0xB, 0x2F, 0xB, 0x2F, 0x0, 0x6, 0xB, 0x30, 0xB, 0x30, 0x0, 0x5, 0xB, 0x32, 0xB, 0x32, 0x0, 0x1, 0xB, 0x33, 0xB, 0x33, 0x0, 0x3, 0xB, 0x34, 0xB, 0x34, 0x0, 0x1, 0xB, 0x35, 0xB, 0x35, 0x0, 0x3, 0xB, 0x36, 0xB, 0x36, 0x0, 0x1, 0xB, 0x37, 0xB, 0x37, 0x0, 0x3, 0xB, 0x38, 0xB, 0x38, 0x0, 0x1, 0xB, 0x39, 0xB, 0x39, 0x0, 0x3, 0xB, 0x3B, 0xB, 0x3B, 0x0, 0x9, 0xB, 0x3C, 0xB, 0x3C, 0x0, 0x3, 0xB, 0x42, 0xB, 0x42, 0x0, 0x17, 0xB, 0x46, 0xB, 0x46, 0x0, 0x7, 0xB, 0x47, 0xB, 0x47, 0x0, 0x13, 0xB, 0x4B, 0xB, 0x4B, 0x0, 0x1B, 0xB, 0x4D, 0xB, 0x4D, 0x0, 0x1C, 0xB, 0x4E, 0xB, 0x4E, 0x0, 0x7, 0xB, 0x4F, 0xB, 0x4F, 0x0, 0x1C, 0xB, 0x50, 0xB, 0x50, 0x0, 0x7, 0xB, 0x51, 0xB, 0x51, 0x0, 0x1C, 0xB, 0x52, 0xB, 0x52, 0x0, 0x7, 0xB, 0x53, 0xB, 0x53, 0x0, 0x13, 0xB, 0x54, 0xB, 0x54, 0x0, 0x17, 0xB, 0x55, 0xB, 0x55, 0x0, 0x1, 0xB, 0x57, 0xB, 0x57, 0x0, 0x1, 0xB, 0x59, 0xB, 0x59, 0x0, 0x1, 0xB, 0x5B, 0xB, 0x5B, 0x0, 0x1, 0xB, 0x5D, 0xB, 0x5D, 0x0, 0x1, 0xB, 0x5F, 0xB, 0x5F, 0x0, 0x5, 0xB, 0x60, 0xB, 0x60, 0x0, 0x8, 0xB, 0x61, 0xB, 0x61, 0x0, 0x5, 0xB, 0x62, 0xB, 0x62, 0x0, 0x8, 0xB, 0x63, 0xB, 0x63, 0x0, 0x5, 0xB, 0x64, 0xB, 0x64, 0x0, 0x8, 0xB, 0x65, 0xB, 0x65, 0x0, 0x5, 0xB, 0x66, 0xB, 0x66, 0x0, 0x8, 0xB, 0x67, 0xB, 0x67, 0x0, 0x5, 0xB, 0x68, 0xB, 0x68, 0x0, 0x8, 0xB, 0x6E, 0xB, 0x6E, 0x0, 0x4, 0xB, 0x70, 0xB, 0x70, 0x0, 0x4, 0xB, 0x72, 0xB, 0x72, 0x0, 0x4, 0xB, 0x74, 0xB, 0x74, 0x0, 0x4, 0xB, 0x75, 0xB, 0x75, 0x0, 0xB, 0xB, 0x77, 0xB, 0x77, 0x0, 0xB, 0xB, 0x79, 0xB, 0x79, 0x0, 0xB, 0xB, 0x7B, 0xB, 0x7B, 0x0, 0x18, 0xB, 0x7D, 0xB, 0x7D, 0x0, 0x18, 0xB, 0x7F, 0xB, 0x7F, 0x0, 0x18, 0xB, 0x81, 0xB, 0x81, 0x0, 0x18, 0xB, 0x84, 0xB, 0x84, 0x0, 0x4, 0xB, 0x86, 0xB, 0x86, 0x0, 0x4, 0xB, 0x88, 0xB, 0x88, 0x0, 0x4, 0xB, 0x8A, 0xB, 0x8A, 0x0, 0x4, 0xB, 0x8C, 0xB, 0x8C, 0x0, 0x4, 0xB, 0x8E, 0xB, 0x8E, 0x0, 0x4, 0xB, 0x8F, 0xB, 0x8F, 0x0, 0x1, 0xB, 0x90, 0xB, 0x90, 0x0, 0x3, 0xB, 0x91, 0xB, 0x91, 0x0, 0x1, 0xB, 0x92, 0xB, 0x92, 0x0, 0x3, 0xB, 0x93, 0xB, 0x93, 0x0, 0x1, 0xB, 0x94, 0xB, 0x94, 0x0, 0x3, 0xB, 0x95, 0xB, 0x95, 0x0, 0x1, 0xB, 0x96, 0xB, 0x96, 0x0, 0x3, 0xB, 0x97, 0xB, 0x97, 0x0, 0x16, 0xB, 0x98, 0xB, 0x98, 0x0, 0x7, 0xB, 0x99, 0xB, 0x99, 0x0, 0x16, 0xB, 0x9A, 0xB, 0x9A, 0x0, 0x7, 0xB, 0x9C, 0xB, 0x9C, 0x0, 0x15, 0xB, 0x9E, 0xB, 0x9E, 0x0, 0x15, 0xB, 0xA0, 0xB, 0xA0, 0x0, 0x15, 0xB, 0xA2, 0xB, 0xA2, 0x0, 0x15, 0xB, 0xAD, 0xB, 0xAD, 0x0, 0xE, 0xB, 0xAF, 0xB, 0xAF, 0x0, 0xE, 0xB, 0xB1, 0xB, 0xB1, 0x0, 0xE, 0xB, 0xB3, 0xB, 0xB3, 0x0, 0xE, 0xB, 0xB5, 0xB, 0xB5, 0x0, 0xA, 0xB, 0xB7, 0xB, 0xB7, 0x0, 0xA, 0xB, 0xB9, 0xB, 0xB9, 0x0, 0xA, 0xB, 0xBB, 0xB, 0xBB, 0x0, 0xA, 0xB, 0xBD, 0xB, 0xBD, 0x0, 0xA, 0xB, 0xBF, 0xB, 0xBF, 0x0, 0x1D, 0xB, 0xC0, 0xB, 0xC0, 0x0, 0x9, 0xB, 0xC1, 0xB, 0xC1, 0x0, 0x1D, 0xB, 0xC2, 0xB, 0xC2, 0x0, 0x9, 0xB, 0xC3, 0xB, 0xC3, 0x0, 0x1B, 0xB, 0xC5, 0xB, 0xC5, 0x0, 0x1B, 0xB, 0xC7, 0xB, 0xC7, 0x0, 0x12, 0xB, 0xC8, 0xB, 0xC8, 0x0, 0x14, 0xB, 0xC9, 0xB, 0xC9, 0x0, 0x12, 0xB, 0xCA, 0xB, 0xCA, 0x0, 0x14, 0xB, 0xCB, 0xB, 0xCB, 0x0, 0xC, 0xB, 0xCC, 0xB, 0xCC, 0x0, 0x9, 0xB, 0xCD, 0xB, 0xCD, 0x0, 0x11, 0xB, 0xCE, 0xB, 0xCE, 0x0, 0x10, 0xB, 0xCF, 0xB, 0xCF, 0x0, 0x11, 0xB, 0xD0, 0xB, 0xD0, 0x0, 0x10, 0xB, 0xD1, 0xB, 0xD1, 0x0, 0x11, 0xB, 0xD2, 0xB, 0xD2, 0x0, 0x10, 0xB, 0xD6, 0xB, 0xD6, 0x0, 0x9, 0xB, 0xE0, 0xB, 0xE7, 0x0, 0x2, 0xB, 0xEE, 0xB, 0xF3, 0x0, 0x5, 0xB, 0xF4, 0xB, 0xFB, 0x0, 0x4, 0xC, 0x14, 0xC, 0x19, 0x0, 0x3, 0xC, 0x1A, 0xC, 0x1F, 0x0, 0x1, 0xC, 0x40, 0xC, 0x41, 0x0, 0x4, 0xC, 0x44, 0xC, 0x45, 0x0, 0x3, 0xC, 0x52, 0xC, 0x59, 0x0, 0x2, 0xC, 0x81, 0xC, 0x85, 0x0, 0x2, 0xC, 0x86, 0xC, 0x8A, 0x0, 0x4, 0xC, 0x8B, 0xC, 0x8C, 0x0, 0x5, 0xC, 0x9E, 0xC, 0x9F, 0x0, 0x7, 0xC, 0xA2, 0xC, 0xA5, 0x0, 0xC, 0xC, 0xA6, 0xC, 0xA6, 0x0, 0x16, 0xC, 0xAC, 0xC, 0xAD, 0x0, 0x1, 0xC, 0xB7, 0xC, 0xB7, 0x0, 0xF, 0xC, 0xBB, 0xC, 0xBB, 0x0, 0xD, 0xC, 0xBE, 0xC, 0xBE, 0x0, 0xF, 0xC, 0xC4, 0xC, 0xC4, 0x0, 0x1E, 0xC, 0xC9, 0xC, 0xC9, 0x0, 0x23, 0xC, 0xD4, 0xC, 0xD4, 0x0, 0x1E, 0xC, 0xD6, 0xC, 0xD6, 0x0, 0xF, 0xC, 0xDD, 0xC, 0xDD, 0x0, 0xD, 0xC, 0xE1, 0xC, 0xE1, 0x0, 0x23, 0x0, 0x2, 0x2, 0x8B, 0x0, 0x7, 0x0, 0x7, 0x0, 0x14, 0x0, 0xC, 0x0, 0xC, 0x0, 0x14, 0x0, 0x11, 0x0, 0x11, 0x0, 0x1A, 0x0, 0x12, 0x0, 0x12, 0x0, 0x1F, 0x0, 0x13, 0x0, 0x13, 0x0, 0x1A, 0x0, 0x26, 0x0, 0x26, 0x0, 0x6, 0x0, 0x28, 0x0, 0x28, 0x0, 0x2, 0x0, 0x2C, 0x0, 0x2C, 0x0, 0x2, 0x0, 0x2F, 0x0, 0x2F, 0x0, 0x23, 0x0, 0x34, 0x0, 0x34, 0x0, 0x2, 0x0, 0x36, 0x0, 0x36, 0x0, 0x2, 0x0, 0x38, 0x0, 0x38, 0x0, 0x10, 0x0, 0x39, 0x0, 0x39, 0x0, 0xB, 0x0, 0x3A, 0x0, 0x3A, 0x0, 0xA, 0x0, 0x3B, 0x0, 0x3B, 0x0, 0x1D, 0x0, 0x3C, 0x0, 0x3C, 0x0, 0x16, 0x0, 0x3D, 0x0, 0x3D, 0x0, 0x11, 0x0, 0x3E, 0x0, 0x3E, 0x0, 0xC, 0x0, 0x3F, 0x0, 0x3F, 0x0, 0x13, 0x0, 0x46, 0x0, 0x46, 0x0, 0x7, 0x0, 0x48, 0x0, 0x4A, 0x0, 0x1, 0x0, 0x4C, 0x0, 0x4C, 0x0, 0x1, 0x0, 0x52, 0x0, 0x53, 0x0, 0x3, 0x0, 0x54, 0x0, 0x54, 0x0, 0x4, 0x0, 0x55, 0x0, 0x55, 0x0, 0x3, 0x0, 0x56, 0x0, 0x56, 0x0, 0x1, 0x0, 0x58, 0x0, 0x58, 0x0, 0xE, 0x0, 0x5A, 0x0, 0x5A, 0x0, 0x5, 0x0, 0x5B, 0x0, 0x5B, 0x0, 0x9, 0x0, 0x5D, 0x0, 0x5D, 0x0, 0x15, 0x0, 0x5E, 0x0, 0x5E, 0x0, 0x9, 0x0, 0x5F, 0x0, 0x5F, 0x0, 0xF, 0x0, 0x84, 0x0, 0x84, 0x0, 0x2, 0x0, 0x94, 0x0, 0x94, 0x0, 0x2, 0x0, 0x95, 0x0, 0x95, 0x0, 0x1, 0x0, 0x9E, 0x0, 0x9E, 0x0, 0x2, 0x0, 0x9F, 0x0, 0x9F, 0x0, 0x1, 0x0, 0xAA, 0x0, 0xAA, 0x0, 0x2, 0x0, 0xB4, 0x0, 0xB4, 0x0, 0x2, 0x0, 0xB5, 0x0, 0xB5, 0x0, 0x1, 0x0, 0xB6, 0x0, 0xB6, 0x0, 0x2, 0x0, 0xC2, 0x0, 0xC2, 0x0, 0xB, 0x0, 0xC4, 0x0, 0xC4, 0x0, 0x5, 0x0, 0xCA, 0x0, 0xCA, 0x0, 0xF, 0x0, 0xDA, 0x0, 0xDA, 0x0, 0x1, 0x0, 0xDC, 0x0, 0xDC, 0x0, 0x1, 0x0, 0xE4, 0x0, 0xE4, 0x0, 0x1, 0x0, 0xEA, 0x0, 0xEA, 0x0, 0x3, 0x0, 0xF4, 0x0, 0xF4, 0x0, 0xE, 0x0, 0xF5, 0x0, 0xF5, 0x0, 0xF, 0x0, 0xFA, 0x0, 0xFA, 0x0, 0x6, 0x0, 0xFF, 0x0, 0xFF, 0x0, 0x2, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x3, 0x1, 0x3, 0x0, 0xC, 0x2, 0x28, 0x2, 0x28, 0x0, 0x3, 0x2, 0x2A, 0x2, 0x2A, 0x0, 0x1, 0x2, 0x31, 0x2, 0x31, 0x0, 0x6, 0x2, 0x32, 0x2, 0x32, 0x0, 0x2, 0x2, 0x33, 0x2, 0x33, 0x0, 0x6, 0x2, 0x3A, 0x2, 0x3A, 0x0, 0x1, 0x2, 0x3C, 0x2, 0x3C, 0x0, 0x9, 0x2, 0x40, 0x2, 0x40, 0x0, 0x3, 0x2, 0x47, 0x2, 0x48, 0x0, 0x1, 0x2, 0x4A, 0x2, 0x4A, 0x0, 0x5, 0x2, 0x55, 0x2, 0x55, 0x0, 0x2, 0x2, 0x56, 0x2, 0x56, 0x0, 0x4, 0x2, 0x57, 0x2, 0x57, 0x0, 0x2, 0x2, 0x58, 0x2, 0x58, 0x0, 0x1, 0x2, 0x61, 0x2, 0x61, 0x0, 0x1, 0x2, 0x66, 0x2, 0x66, 0x0, 0x2, 0x2, 0x68, 0x2, 0x68, 0x0, 0xB, 0x2, 0x69, 0x2, 0x69, 0x0, 0x2, 0x2, 0x6A, 0x2, 0x6A, 0x0, 0x19, 0x2, 0x6C, 0x2, 0x6C, 0x0, 0xB, 0x2, 0x70, 0x2, 0x70, 0x0, 0x11, 0x2, 0x73, 0x2, 0x73, 0x0, 0x19, 0x2, 0x74, 0x2, 0x74, 0x0, 0x22, 0x2, 0x77, 0x2, 0x77, 0x0, 0x20, 0x2, 0x82, 0x2, 0x82, 0x0, 0x3, 0x2, 0x84, 0x2, 0x84, 0x0, 0x15, 0x2, 0x86, 0x2, 0x87, 0x0, 0x3, 0x2, 0x88, 0x2, 0x88, 0x0, 0x1B, 0x2, 0x89, 0x2, 0x8B, 0x0, 0x3, 0x2, 0x8D, 0x2, 0x8D, 0x0, 0x1, 0x2, 0x8E, 0x2, 0x8E, 0x0, 0x3, 0x2, 0x8F, 0x2, 0x8F, 0x0, 0x21, 0x2, 0x90, 0x2, 0x91, 0x0, 0x3, 0x2, 0x94, 0x2, 0x94, 0x0, 0x3, 0x2, 0x96, 0x2, 0x96, 0x0, 0x3, 0x2, 0x99, 0x2, 0x99, 0x0, 0x1, 0x2, 0x9A, 0x2, 0x9A, 0x0, 0x1B, 0x2, 0x9B, 0x2, 0x9B, 0x0, 0x3, 0x2, 0x9E, 0x2, 0x9E, 0x0, 0x2, 0x2, 0xA3, 0x2, 0xA3, 0x0, 0x6, 0x2, 0xAD, 0x2, 0xAD, 0x0, 0x2, 0x2, 0xAE, 0x2, 0xAE, 0x0, 0x4, 0x2, 0xAF, 0x2, 0xAF, 0x0, 0x1D, 0x2, 0xB0, 0x2, 0xB0, 0x0, 0x9, 0x2, 0xB1, 0x2, 0xB1, 0x0, 0x2, 0x2, 0xB3, 0x2, 0xB3, 0x0, 0x2, 0x2, 0xB4, 0x2, 0xB4, 0x0, 0x1, 0x2, 0xB5, 0x2, 0xB5, 0x0, 0x2, 0x2, 0xB7, 0x2, 0xB7, 0x0, 0x2, 0x2, 0xB8, 0x2, 0xB8, 0x0, 0x1, 0x2, 0xC2, 0x2, 0xC2, 0x0, 0x3, 0x2, 0xCA, 0x2, 0xCA, 0x0, 0x11, 0x2, 0xCB, 0x2, 0xCB, 0x0, 0x15, 0x2, 0xCD, 0x2, 0xCD, 0x0, 0x3, 0x2, 0xD0, 0x2, 0xD0, 0x0, 0xB, 0x2, 0xD3, 0x2, 0xD3, 0x0, 0x3, 0x2, 0xD5, 0x2, 0xD5, 0x0, 0x3, 0x2, 0xD8, 0x2, 0xD8, 0x0, 0x2, 0x2, 0xD9, 0x2, 0xD9, 0x0, 0x1, 0x2, 0xDA, 0x2, 0xDA, 0x0, 0x11, 0x2, 0xDB, 0x2, 0xDB, 0x0, 0x15, 0x2, 0xDC, 0x2, 0xDC, 0x0, 0xB, 0x2, 0xDE, 0x2, 0xDE, 0x0, 0x20, 0x2, 0xDF, 0x2, 0xDF, 0x0, 0x21, 0x2, 0xE7, 0x2, 0xE7, 0x0, 0x19, 0x2, 0xE8, 0x2, 0xE8, 0x0, 0x1B, 0x2, 0xEA, 0x2, 0xEA, 0x0, 0x3, 0x2, 0xEC, 0x2, 0xEC, 0x0, 0x3, 0x2, 0xEE, 0x2, 0xEE, 0x0, 0x3, 0x2, 0xF3, 0x2, 0xF3, 0x0, 0x3, 0x2, 0xF4, 0x2, 0xF4, 0x0, 0x11, 0x2, 0xF5, 0x2, 0xF5, 0x0, 0x15, 0x2, 0xF7, 0x2, 0xF8, 0x0, 0x1, 0x2, 0xFD, 0x2, 0xFD, 0x0, 0x19, 0x3, 0x1, 0x3, 0x1, 0x0, 0x2, 0x3, 0x2, 0x3, 0x2, 0x0, 0x1, 0x3, 0x6, 0x3, 0x6, 0x0, 0x19, 0x3, 0x7, 0x3, 0x7, 0x0, 0x1B, 0x3, 0x8, 0x3, 0x8, 0x0, 0x19, 0x3, 0x9, 0x3, 0x9, 0x0, 0x1B, 0x3, 0xF, 0x3, 0xF, 0x0, 0x3, 0x3, 0x10, 0x3, 0x10, 0x0, 0x19, 0x3, 0x11, 0x3, 0x11, 0x0, 0x1B, 0x3, 0x13, 0x3, 0x13, 0x0, 0x3, 0x4, 0x5E, 0x4, 0x5F, 0x0, 0x1F, 0x4, 0x62, 0x4, 0x63, 0x0, 0x14, 0x4, 0x64, 0x4, 0x64, 0x0, 0x1A, 0x4, 0x65, 0x4, 0x67, 0x0, 0x14, 0x4, 0x68, 0x4, 0x68, 0x0, 0x1A, 0x4, 0x6F, 0x4, 0x70, 0x0, 0x1A, 0x5, 0x5B, 0x5, 0x5B, 0x0, 0x7, 0x5, 0x61, 0x5, 0x61, 0x0, 0x13, 0x5, 0x62, 0x5, 0x62, 0x0, 0xF, 0x5, 0x63, 0x5, 0x63, 0x0, 0x2, 0x5, 0x67, 0x5, 0x67, 0x0, 0x9, 0x5, 0x68, 0x5, 0x68, 0x0, 0x16, 0x5, 0x6E, 0x5, 0x6E, 0x0, 0x1, 0x5, 0x70, 0x5, 0x70, 0x0, 0x4, 0x5, 0x74, 0x5, 0x74, 0x0, 0x10, 0x5, 0xD9, 0x5, 0xD9, 0x0, 0x13, 0x5, 0xDA, 0x5, 0xDA, 0x0, 0xF, 0x5, 0xDB, 0x5, 0xDB, 0x0, 0x13, 0x5, 0xDC, 0x5, 0xDC, 0x0, 0xF, 0x5, 0xE5, 0x5, 0xE5, 0x0, 0x2, 0x5, 0xED, 0x5, 0xED, 0x0, 0x2, 0x5, 0xEE, 0x5, 0xEE, 0x0, 0x4, 0x5, 0xF0, 0x5, 0xF0, 0x0, 0x3, 0x5, 0xF1, 0x5, 0xF1, 0x0, 0x6, 0x6, 0x0, 0x6, 0x0, 0x0, 0x3, 0x6, 0x1, 0x6, 0x1, 0x0, 0x2, 0x6, 0x2, 0x6, 0x2, 0x0, 0x4, 0x6, 0x3, 0x6, 0x3, 0x0, 0x2, 0x6, 0x4, 0x6, 0x4, 0x0, 0x4, 0x6, 0x5, 0x6, 0x5, 0x0, 0x2, 0x6, 0x6, 0x6, 0x6, 0x0, 0x4, 0x6, 0x1F, 0x6, 0x1F, 0x0, 0x20, 0x6, 0x20, 0x6, 0x20, 0x0, 0x21, 0x6, 0x23, 0x6, 0x23, 0x0, 0xB, 0x6, 0x25, 0x6, 0x25, 0x0, 0xB, 0x6, 0x28, 0x6, 0x28, 0x0, 0x3, 0x6, 0x29, 0x6, 0x29, 0x0, 0xB, 0x6, 0x30, 0x6, 0x30, 0x0, 0x3, 0x6, 0x31, 0x6, 0x31, 0x0, 0x2, 0x6, 0x32, 0x6, 0x32, 0x0, 0x4, 0x6, 0x33, 0x6, 0x33, 0x0, 0x2, 0x6, 0x6A, 0x6, 0x6A, 0x0, 0x6, 0x6, 0x6B, 0x6, 0x6B, 0x0, 0x7, 0x6, 0x6C, 0x6, 0x6C, 0x0, 0x6, 0x6, 0x6D, 0x6, 0x6D, 0x0, 0x7, 0x6, 0x6F, 0x6, 0x6F, 0x0, 0x7, 0x6, 0x70, 0x6, 0x70, 0x0, 0x6, 0x6, 0x71, 0x6, 0x71, 0x0, 0x7, 0x6, 0x72, 0x6, 0x72, 0x0, 0x6, 0x6, 0x73, 0x6, 0x73, 0x0, 0x7, 0x6, 0x74, 0x6, 0x74, 0x0, 0x6, 0x6, 0x75, 0x6, 0x75, 0x0, 0x7, 0x6, 0x84, 0x6, 0x84, 0x0, 0x2, 0x6, 0x85, 0x6, 0x85, 0x0, 0x4, 0x6, 0x86, 0x6, 0x86, 0x0, 0x2, 0x6, 0x87, 0x6, 0x87, 0x0, 0x4, 0x6, 0x8E, 0x6, 0x8E, 0x0, 0x2, 0x6, 0x8F, 0x6, 0x8F, 0x0, 0x1, 0x6, 0x90, 0x6, 0x90, 0x0, 0x2, 0x6, 0x91, 0x6, 0x91, 0x0, 0x1, 0x6, 0x96, 0x6, 0x96, 0x0, 0x1D, 0x6, 0xA9, 0x6, 0xA9, 0x0, 0x1, 0x6, 0xAB, 0x6, 0xAC, 0x0, 0x3, 0x6, 0xCB, 0x6, 0xCB, 0x0, 0x1, 0x6, 0xE3, 0x6, 0xE3, 0x0, 0x2, 0x6, 0xF7, 0x6, 0xF7, 0x0, 0x1, 0x6, 0xFB, 0x6, 0xFD, 0x0, 0x3, 0x7, 0x12, 0x7, 0x12, 0x0, 0x3, 0x7, 0x2C, 0x7, 0x2C, 0x0, 0xE, 0x7, 0x4F, 0x7, 0x4F, 0x0, 0x17, 0x7, 0x50, 0x7, 0x50, 0x0, 0x1C, 0x7, 0x51, 0x7, 0x51, 0x0, 0x24, 0x7, 0x53, 0x7, 0x53, 0x0, 0x12, 0x7, 0x54, 0x7, 0x54, 0x0, 0x18, 0x7, 0x55, 0x7, 0x55, 0x0, 0x1E, 0x7, 0x57, 0x7, 0x57, 0x0, 0x8, 0x7, 0x59, 0x7, 0x59, 0x0, 0x8, 0x7, 0x61, 0x7, 0x61, 0x0, 0x8, 0x7, 0x67, 0x7, 0x67, 0x0, 0xD, 0x7, 0x68, 0x7, 0x68, 0x0, 0x8, 0x7, 0x69, 0x7, 0x69, 0x0, 0xD, 0x7, 0x70, 0x7, 0x70, 0x0, 0x18, 0x7, 0x71, 0x7, 0x71, 0x0, 0x8, 0x7, 0x74, 0x7, 0x74, 0x0, 0x18, 0x7, 0x78, 0x7, 0x78, 0x0, 0x1C, 0x7, 0x89, 0x7, 0x89, 0x0, 0x1C, 0x7, 0x8C, 0x7, 0x8C, 0x0, 0x18, 0x7, 0x8D, 0x7, 0x8D, 0x0, 0x8, 0x7, 0x8E, 0x7, 0x8E, 0x0, 0x17, 0x7, 0x8F, 0x7, 0x8F, 0x0, 0x1C, 0x7, 0x90, 0x7, 0x90, 0x0, 0x18, 0x7, 0x96, 0x7, 0x96, 0x0, 0x8, 0x7, 0xAF, 0x7, 0xAF, 0x0, 0x8, 0x7, 0xB1, 0x7, 0xB1, 0x0, 0xD, 0x7, 0xCF, 0x7, 0xD0, 0x0, 0x2, 0x7, 0xD2, 0x7, 0xD3, 0x0, 0x2, 0x8, 0xC7, 0x8, 0xC7, 0x0, 0x1F, 0x8, 0xCD, 0x8, 0xD3, 0x0, 0x6, 0x8, 0xD4, 0x8, 0xD4, 0x0, 0x2, 0x8, 0xDE, 0x8, 0xE2, 0x0, 0x2, 0x8, 0xE3, 0x8, 0xE6, 0x0, 0xA, 0x8, 0xE7, 0x8, 0xE7, 0x0, 0xC, 0x8, 0xE8, 0x8, 0xEE, 0x0, 0x7, 0x8, 0xEF, 0x8, 0xF3, 0x0, 0x1, 0x8, 0xF8, 0x8, 0xF8, 0x0, 0x3, 0x8, 0xF9, 0x8, 0xFD, 0x0, 0x4, 0x8, 0xFE, 0x9, 0x1, 0x0, 0x5, 0x9, 0x2, 0x9, 0x3, 0x0, 0x9, 0x9, 0x4, 0x9, 0x4, 0x0, 0x6, 0x9, 0x5, 0x9, 0x5, 0x0, 0x7, 0x9, 0x6, 0x9, 0x6, 0x0, 0x6, 0x9, 0x7, 0x9, 0x7, 0x0, 0x7, 0x9, 0x8, 0x9, 0x8, 0x0, 0x6, 0x9, 0x9, 0x9, 0x9, 0x0, 0x7, 0x9, 0xA, 0x9, 0xA, 0x0, 0x2, 0x9, 0xB, 0x9, 0xB, 0x0, 0x1, 0x9, 0xC, 0x9, 0xC, 0x0, 0x2, 0x9, 0xD, 0x9, 0xD, 0x0, 0x1, 0x9, 0xE, 0x9, 0xE, 0x0, 0x2, 0x9, 0xF, 0x9, 0xF, 0x0, 0x1, 0x9, 0x10, 0x9, 0x10, 0x0, 0x2, 0x9, 0x11, 0x9, 0x11, 0x0, 0x1, 0x9, 0x13, 0x9, 0x13, 0x0, 0x1, 0x9, 0x15, 0x9, 0x15, 0x0, 0x1, 0x9, 0x17, 0x9, 0x17, 0x0, 0x1, 0x9, 0x19, 0x9, 0x19, 0x0, 0x1, 0x9, 0x1B, 0x9, 0x1B, 0x0, 0x1, 0x9, 0x1D, 0x9, 0x1D, 0x0, 0x1, 0x9, 0x1E, 0x9, 0x1E, 0x0, 0x2, 0x9, 0x1F, 0x9, 0x1F, 0x0, 0x1, 0x9, 0x20, 0x9, 0x20, 0x0, 0x2, 0x9, 0x21, 0x9, 0x21, 0x0, 0x1, 0x9, 0x22, 0x9, 0x22, 0x0, 0x2, 0x9, 0x23, 0x9, 0x23, 0x0, 0x1, 0x9, 0x24, 0x9, 0x24, 0x0, 0x2, 0x9, 0x25, 0x9, 0x25, 0x0, 0x1, 0x9, 0x33, 0x9, 0x33, 0x0, 0x23, 0x9, 0x40, 0x9, 0x40, 0x0, 0x3, 0x9, 0x42, 0x9, 0x42, 0x0, 0x3, 0x9, 0x44, 0x9, 0x45, 0x0, 0x3, 0x9, 0x46, 0x9, 0x46, 0x0, 0x2, 0x9, 0x47, 0x9, 0x47, 0x0, 0x4, 0x9, 0x48, 0x9, 0x48, 0x0, 0x2, 0x9, 0x49, 0x9, 0x49, 0x0, 0x4, 0x9, 0x4A, 0x9, 0x4A, 0x0, 0x2, 0x9, 0x4B, 0x9, 0x4B, 0x0, 0x4, 0x9, 0x52, 0x9, 0x52, 0x0, 0x10, 0x9, 0x53, 0x9, 0x53, 0x0, 0xE, 0x9, 0x54, 0x9, 0x54, 0x0, 0x10, 0x9, 0x55, 0x9, 0x55, 0x0, 0xE, 0x9, 0x56, 0x9, 0x56, 0x0, 0x10, 0x9, 0x57, 0x9, 0x57, 0x0, 0xE, 0x9, 0x58, 0x9, 0x58, 0x0, 0x10, 0x9, 0x59, 0x9, 0x59, 0x0, 0xE, 0x9, 0x5A, 0x9, 0x5A, 0x0, 0x10, 0x9, 0x5B, 0x9, 0x5B, 0x0, 0xE, 0x9, 0x5C, 0x9, 0x5C, 0x0, 0xB, 0x9, 0x5E, 0x9, 0x5E, 0x0, 0xB, 0x9, 0x60, 0x9, 0x60, 0x0, 0xB, 0x9, 0x62, 0x9, 0x62, 0x0, 0xA, 0x9, 0x63, 0x9, 0x63, 0x0, 0x5, 0x9, 0x64, 0x9, 0x64, 0x0, 0xA, 0x9, 0x65, 0x9, 0x65, 0x0, 0x5, 0x9, 0x66, 0x9, 0x66, 0x0, 0xA, 0x9, 0x67, 0x9, 0x67, 0x0, 0x5, 0x9, 0x68, 0x9, 0x68, 0x0, 0xA, 0x9, 0x69, 0x9, 0x69, 0x0, 0x5, 0x9, 0x6A, 0x9, 0x6A, 0x0, 0xA, 0x9, 0x6B, 0x9, 0x6B, 0x0, 0x5, 0x9, 0x6C, 0x9, 0x6C, 0x0, 0xA, 0x9, 0x6D, 0x9, 0x6D, 0x0, 0x5, 0x9, 0x6E, 0x9, 0x6E, 0x0, 0x16, 0x9, 0x70, 0x9, 0x70, 0x0, 0xC, 0x9, 0x71, 0x9, 0x71, 0x0, 0x9, 0x9, 0x72, 0x9, 0x72, 0x0, 0xC, 0x9, 0x73, 0x9, 0x73, 0x0, 0x13, 0x9, 0x74, 0x9, 0x74, 0x0, 0xF, 0x9, 0x75, 0x9, 0x75, 0x0, 0x13, 0x9, 0x76, 0x9, 0x76, 0x0, 0xF, 0x9, 0x77, 0x9, 0x77, 0x0, 0x13, 0x9, 0x78, 0x9, 0x78, 0x0, 0xF, 0x9, 0x7B, 0x9, 0x7B, 0x0, 0x2, 0x9, 0x80, 0x9, 0x86, 0x0, 0xD, 0x9, 0x87, 0x9, 0x87, 0x0, 0x8, 0x9, 0x91, 0x9, 0x95, 0x0, 0x8, 0x9, 0x96, 0x9, 0x99, 0x0, 0x12, 0x9, 0x9A, 0x9, 0x9A, 0x0, 0x17, 0x9, 0x9B, 0x9, 0x9D, 0x0, 0xD, 0x9, 0x9E, 0x9, 0xA1, 0x0, 0x8, 0x9, 0xA8, 0x9, 0xAB, 0x0, 0x8, 0x9, 0xBB, 0x9, 0xBE, 0x0, 0x8, 0x9, 0xC2, 0x9, 0xC5, 0x0, 0x1E, 0x9, 0xC7, 0x9, 0xC7, 0x0, 0x18, 0x9, 0xC9, 0x9, 0xCE, 0x0, 0x12, 0x9, 0xCF, 0x9, 0xCF, 0x0, 0x24, 0x9, 0xD0, 0x9, 0xD1, 0x0, 0x17, 0x9, 0xD5, 0x9, 0xD5, 0x0, 0x6, 0x9, 0xD9, 0x9, 0xD9, 0x0, 0x2, 0x9, 0xDA, 0x9, 0xDA, 0x0, 0xC, 0x9, 0xDD, 0x9, 0xDD, 0x0, 0x6, 0x9, 0xE0, 0x9, 0xE0, 0x0, 0x13, 0x9, 0xE6, 0x9, 0xE6, 0x0, 0x2, 0x9, 0xE9, 0x9, 0xE9, 0x0, 0xC, 0x9, 0xEA, 0x9, 0xEA, 0x0, 0x11, 0x9, 0xEC, 0x9, 0xEC, 0x0, 0xC, 0x9, 0xED, 0x9, 0xED, 0x0, 0x1, 0x9, 0xEF, 0x9, 0xEF, 0x0, 0x3, 0x9, 0xF1, 0x9, 0xF1, 0x0, 0x5, 0x9, 0xF3, 0x9, 0xF3, 0x0, 0x4, 0x9, 0xF5, 0x9, 0xF5, 0x0, 0x9, 0x9, 0xF8, 0x9, 0xF8, 0x0, 0x5, 0x9, 0xF9, 0x9, 0xF9, 0x0, 0x4, 0x9, 0xFA, 0x9, 0xFA, 0x0, 0x5, 0xA, 0x1, 0xA, 0x1, 0x0, 0x23, 0xA, 0x4, 0xA, 0x4, 0x0, 0x22, 0xA, 0x5, 0xA, 0x5, 0x0, 0x6, 0xA, 0xC, 0xA, 0xC, 0x0, 0x2, 0xA, 0xF, 0xA, 0xF, 0x0, 0x2, 0xA, 0x10, 0xA, 0x10, 0x0, 0xB, 0xA, 0x11, 0xA, 0x11, 0x0, 0x11, 0xA, 0x12, 0xA, 0x12, 0x0, 0x7, 0xA, 0x13, 0xA, 0x13, 0x0, 0x1, 0xA, 0x14, 0xA, 0x14, 0x0, 0x3, 0xA, 0x15, 0xA, 0x15, 0x0, 0x4, 0xA, 0x16, 0xA, 0x16, 0x0, 0x3, 0xA, 0x17, 0xA, 0x17, 0x0, 0x1, 0xA, 0x18, 0xA, 0x18, 0x0, 0x9, 0xA, 0x19, 0xA, 0x19, 0x0, 0x15, 0xA, 0x1A, 0xA, 0x1A, 0x0, 0x1, 0xA, 0x1B, 0xA, 0x1B, 0x0, 0x3, 0xA, 0x1C, 0xA, 0x1C, 0x0, 0xE, 0xA, 0x20, 0xA, 0x20, 0x0, 0x3, 0xA, 0x21, 0xA, 0x21, 0x0, 0x9, 0xA, 0x22, 0xA, 0x22, 0x0, 0x16, 0xA, 0x24, 0xA, 0x24, 0x0, 0x16, 0xA, 0x26, 0xA, 0x26, 0x0, 0x16, 0xA, 0x28, 0xA, 0x28, 0x0, 0xC, 0xA, 0x29, 0xA, 0x29, 0x0, 0x9, 0xA, 0x2A, 0xA, 0x2B, 0x0, 0x14, 0xA, 0x2E, 0xA, 0x2E, 0x0, 0x14, 0xA, 0x30, 0xA, 0x30, 0x0, 0x3, 0xA, 0x31, 0xA, 0x31, 0x0, 0x6, 0xA, 0x32, 0xA, 0x32, 0x0, 0x7, 0xA, 0x35, 0xA, 0x35, 0x0, 0x1, 0xA, 0x36, 0xA, 0x36, 0x0, 0x3, 0xA, 0x39, 0xA, 0x39, 0x0, 0x1D, 0xA, 0x3A, 0xA, 0x3A, 0x0, 0x9, 0xA, 0x3B, 0xA, 0x3B, 0x0, 0x1, 0xA, 0x3C, 0xA, 0x3C, 0x0, 0x2, 0xA, 0x3F, 0xA, 0x3F, 0x0, 0x2, 0xA, 0x40, 0xA, 0x40, 0x0, 0x1, 0xA, 0x41, 0xA, 0x41, 0x0, 0xC, 0xA, 0x42, 0xA, 0x42, 0x0, 0x9, 0xA, 0x44, 0xA, 0x44, 0x0, 0x11, 0xA, 0x45, 0xA, 0x45, 0x0, 0x15, 0xA, 0x47, 0xA, 0x47, 0x0, 0x6, 0xA, 0x48, 0xA, 0x48, 0x0, 0x7, 0xA, 0x49, 0xA, 0x49, 0x0, 0x6, 0xA, 0x4A, 0xA, 0x4A, 0x0, 0x7, 0xA, 0x4E, 0xA, 0x4E, 0x0, 0x1, 0xA, 0x50, 0xA, 0x51, 0x0, 0x1, 0xA, 0x52, 0xA, 0x52, 0x0, 0x11, 0xA, 0x53, 0xA, 0x53, 0x0, 0x15, 0xA, 0x57, 0xA, 0x57, 0x0, 0x3, 0xA, 0x59, 0xA, 0x59, 0x0, 0x3, 0xA, 0x5A, 0xA, 0x5A, 0x0, 0x2, 0xA, 0x5B, 0xA, 0x5B, 0x0, 0x4, 0xA, 0x5C, 0xA, 0x5C, 0x0, 0x2, 0xA, 0x5D, 0xA, 0x5D, 0x0, 0x1, 0xA, 0x5E, 0xA, 0x5F, 0x0, 0x2, 0xA, 0x60, 0xA, 0x60, 0x0, 0x4, 0xA, 0x63, 0xA, 0x63, 0x0, 0x22, 0xA, 0x64, 0xA, 0x64, 0x0, 0x9, 0xA, 0x65, 0xA, 0x65, 0x0, 0x22, 0xA, 0x66, 0xA, 0x66, 0x0, 0x9, 0xA, 0x67, 0xA, 0x67, 0x0, 0x22, 0xA, 0x68, 0xA, 0x68, 0x0, 0x9, 0xA, 0x69, 0xA, 0x69, 0x0, 0x20, 0xA, 0x6A, 0xA, 0x6A, 0x0, 0x21, 0xA, 0x6C, 0xA, 0x6C, 0x0, 0x3, 0xA, 0x6D, 0xA, 0x6D, 0x0, 0x1, 0xA, 0x6E, 0xA, 0x6E, 0x0, 0x6, 0xA, 0x6F, 0xA, 0x6F, 0x0, 0x7, 0xA, 0x70, 0xA, 0x70, 0x0, 0x6, 0xA, 0x71, 0xA, 0x71, 0x0, 0x7, 0xA, 0x72, 0xA, 0x72, 0x0, 0x6, 0xA, 0x73, 0xA, 0x73, 0x0, 0x7, 0xA, 0x74, 0xA, 0x74, 0x0, 0x6, 0xA, 0x75, 0xA, 0x75, 0x0, 0x7, 0xA, 0x76, 0xA, 0x76, 0x0, 0x6, 0xA, 0x77, 0xA, 0x77, 0x0, 0x7, 0xA, 0x78, 0xA, 0x78, 0x0, 0x6, 0xA, 0x79, 0xA, 0x79, 0x0, 0x7, 0xA, 0x7A, 0xA, 0x7A, 0x0, 0x6, 0xA, 0x7B, 0xA, 0x7B, 0x0, 0x7, 0xA, 0x7C, 0xA, 0x7C, 0x0, 0x6, 0xA, 0x7D, 0xA, 0x7D, 0x0, 0x7, 0xA, 0x7E, 0xA, 0x7E, 0x0, 0x6, 0xA, 0x7F, 0xA, 0x7F, 0x0, 0x7, 0xA, 0x80, 0xA, 0x80, 0x0, 0x6, 0xA, 0x81, 0xA, 0x81, 0x0, 0x7, 0xA, 0x82, 0xA, 0x82, 0x0, 0x6, 0xA, 0x83, 0xA, 0x83, 0x0, 0x7, 0xA, 0x84, 0xA, 0x84, 0x0, 0x6, 0xA, 0x85, 0xA, 0x85, 0x0, 0x7, 0xA, 0x87, 0xA, 0x87, 0x0, 0x1, 0xA, 0x89, 0xA, 0x89, 0x0, 0x1, 0xA, 0x8B, 0xA, 0x8B, 0x0, 0x1, 0xA, 0x8D, 0xA, 0x8D, 0x0, 0x1, 0xA, 0x8F, 0xA, 0x8F, 0x0, 0x1, 0xA, 0x91, 0xA, 0x91, 0x0, 0x1, 0xA, 0x93, 0xA, 0x93, 0x0, 0x1, 0xA, 0x95, 0xA, 0x95, 0x0, 0x1, 0xA, 0x9A, 0xA, 0x9A, 0x0, 0x2, 0xA, 0x9B, 0xA, 0x9B, 0x0, 0x4, 0xA, 0x9C, 0xA, 0x9C, 0x0, 0x2, 0xA, 0x9D, 0xA, 0x9D, 0x0, 0x4, 0xA, 0x9E, 0xA, 0x9E, 0x0, 0x2, 0xA, 0x9F, 0xA, 0x9F, 0x0, 0x4, 0xA, 0xA0, 0xA, 0xA0, 0x0, 0x2, 0xA, 0xA1, 0xA, 0xA1, 0x0, 0x4, 0xA, 0xA2, 0xA, 0xA2, 0x0, 0x2, 0xA, 0xA3, 0xA, 0xA3, 0x0, 0x4, 0xA, 0xA4, 0xA, 0xA4, 0x0, 0x2, 0xA, 0xA5, 0xA, 0xA5, 0x0, 0x4, 0xA, 0xA6, 0xA, 0xA6, 0x0, 0x2, 0xA, 0xA7, 0xA, 0xA7, 0x0, 0x4, 0xA, 0xA8, 0xA, 0xA8, 0x0, 0x2, 0xA, 0xA9, 0xA, 0xA9, 0x0, 0x1, 0xA, 0xAA, 0xA, 0xAA, 0x0, 0x2, 0xA, 0xAB, 0xA, 0xAB, 0x0, 0x1, 0xA, 0xAC, 0xA, 0xAC, 0x0, 0x2, 0xA, 0xAD, 0xA, 0xAD, 0x0, 0x1, 0xA, 0xAE, 0xA, 0xAE, 0x0, 0x2, 0xA, 0xAF, 0xA, 0xAF, 0x0, 0x4, 0xA, 0xB0, 0xA, 0xB0, 0x0, 0x2, 0xA, 0xB1, 0xA, 0xB1, 0x0, 0x1, 0xA, 0xB2, 0xA, 0xB2, 0x0, 0xA, 0xA, 0xB3, 0xA, 0xB3, 0x0, 0x5, 0xA, 0xB4, 0xA, 0xB4, 0x0, 0xA, 0xA, 0xB5, 0xA, 0xB5, 0x0, 0x5, 0xA, 0xB7, 0xA, 0xB7, 0x0, 0x5, 0xA, 0xB9, 0xA, 0xB9, 0x0, 0x5, 0xA, 0xBB, 0xA, 0xBB, 0x0, 0x5, 0xA, 0xBD, 0xA, 0xBD, 0x0, 0x5, 0xA, 0xBF, 0xA, 0xBF, 0x0, 0x5, 0xA, 0xC0, 0xA, 0xC0, 0x0, 0xC, 0xA, 0xC1, 0xA, 0xC1, 0x0, 0x9, 0xA, 0xC2, 0xA, 0xC2, 0x0, 0xC, 0xA, 0xC3, 0xA, 0xC3, 0x0, 0x9, 0xA, 0xC4, 0xA, 0xC4, 0x0, 0xC, 0xA, 0xC5, 0xA, 0xC5, 0x0, 0x9, 0xA, 0xC7, 0xA, 0xC7, 0x0, 0xB, 0xA, 0xC9, 0xA, 0xC9, 0x0, 0x20, 0xA, 0xCA, 0xA, 0xCA, 0x0, 0x21, 0xA, 0xCC, 0xA, 0xCC, 0x0, 0x3, 0xA, 0xD6, 0xA, 0xD6, 0x0, 0xC, 0xA, 0xDC, 0xA, 0xDC, 0x0, 0x1F, 0xA, 0xE7, 0xA, 0xE7, 0x0, 0x3, 0xA, 0xED, 0xA, 0xED, 0x0, 0x3, 0xA, 0xEE, 0xA, 0xEE, 0x0, 0x6, 0xA, 0xEF, 0xA, 0xEF, 0x0, 0x7, 0xA, 0xF2, 0xA, 0xF2, 0x0, 0x2, 0xA, 0xF3, 0xA, 0xF3, 0x0, 0x4, 0xA, 0xF4, 0xA, 0xF4, 0x0, 0xA, 0xA, 0xF5, 0xA, 0xF5, 0x0, 0x5, 0xA, 0xF6, 0xA, 0xF6, 0x0, 0xA, 0xA, 0xF7, 0xA, 0xF7, 0x0, 0x5, 0xA, 0xF8, 0xA, 0xF8, 0x0, 0xA, 0xA, 0xF9, 0xA, 0xF9, 0x0, 0x5, 0xA, 0xFA, 0xA, 0xFA, 0x0, 0xA, 0xA, 0xFB, 0xA, 0xFB, 0x0, 0x5, 0xA, 0xFC, 0xA, 0xFC, 0x0, 0xA, 0xA, 0xFD, 0xA, 0xFD, 0x0, 0x5, 0xA, 0xFE, 0xA, 0xFE, 0x0, 0x1, 0xA, 0xFF, 0xA, 0xFF, 0x0, 0x6, 0xB, 0x0, 0xB, 0x0, 0x0, 0x7, 0xB, 0x1, 0xB, 0x1, 0x0, 0x6, 0xB, 0x2, 0xB, 0x2, 0x0, 0x7, 0xB, 0x4, 0xB, 0x4, 0x0, 0x7, 0xB, 0x6, 0xB, 0x6, 0x0, 0x1, 0xB, 0x9, 0xB, 0x9, 0x0, 0x2, 0xB, 0xA, 0xB, 0xA, 0x0, 0x4, 0xB, 0xB, 0xB, 0xB, 0x0, 0x2, 0xB, 0xC, 0xB, 0xC, 0x0, 0x4, 0xB, 0xF, 0xB, 0xF, 0x0, 0x1, 0xB, 0x13, 0xB, 0x13, 0x0, 0x3, 0xB, 0x14, 0xB, 0x14, 0x0, 0x6, 0xB, 0x15, 0xB, 0x15, 0x0, 0x7, 0xB, 0x16, 0xB, 0x16, 0x0, 0x6, 0xB, 0x17, 0xB, 0x17, 0x0, 0x7, 0xB, 0x19, 0xB, 0x19, 0x0, 0x1, 0xB, 0x1B, 0xB, 0x1B, 0x0, 0x1, 0xB, 0x20, 0xB, 0x20, 0x0, 0x2, 0xB, 0x21, 0xB, 0x21, 0x0, 0x4, 0xB, 0x22, 0xB, 0x22, 0x0, 0x2, 0xB, 0x23, 0xB, 0x23, 0x0, 0x4, 0xB, 0x29, 0xB, 0x29, 0x0, 0x5, 0xB, 0x2B, 0xB, 0x2B, 0x0, 0x5, 0xB, 0x2E, 0xB, 0x2E, 0x0, 0x6, 0xB, 0x2F, 0xB, 0x2F, 0x0, 0x7, 0xB, 0x32, 0xB, 0x32, 0x0, 0x2, 0xB, 0x33, 0xB, 0x33, 0x0, 0x4, 0xB, 0x34, 0xB, 0x34, 0x0, 0x2, 0xB, 0x35, 0xB, 0x35, 0x0, 0x4, 0xB, 0x36, 0xB, 0x36, 0x0, 0x2, 0xB, 0x37, 0xB, 0x37, 0x0, 0x4, 0xB, 0x38, 0xB, 0x38, 0x0, 0x2, 0xB, 0x39, 0xB, 0x39, 0x0, 0x4, 0xB, 0x3B, 0xB, 0x3B, 0x0, 0x9, 0xB, 0x3C, 0xB, 0x3C, 0x0, 0x4, 0xB, 0x3F, 0xB, 0x3F, 0x0, 0x23, 0xB, 0x42, 0xB, 0x42, 0x0, 0x1, 0xB, 0x49, 0xB, 0x49, 0x0, 0x2, 0xB, 0x4A, 0xB, 0x4A, 0x0, 0x1, 0xB, 0x4B, 0xB, 0x4B, 0x0, 0x16, 0xB, 0x53, 0xB, 0x53, 0x0, 0x2, 0xB, 0x54, 0xB, 0x54, 0x0, 0x1, 0xB, 0x56, 0xB, 0x56, 0x0, 0x1, 0xB, 0x58, 0xB, 0x58, 0x0, 0x1, 0xB, 0x5A, 0xB, 0x5A, 0x0, 0x1, 0xB, 0x5C, 0xB, 0x5C, 0x0, 0x1, 0xB, 0x5E, 0xB, 0x5E, 0x0, 0x1, 0xB, 0x60, 0xB, 0x60, 0x0, 0x1, 0xB, 0x62, 0xB, 0x62, 0x0, 0x1, 0xB, 0x64, 0xB, 0x64, 0x0, 0x1, 0xB, 0x66, 0xB, 0x66, 0x0, 0x1, 0xB, 0x68, 0xB, 0x68, 0x0, 0x1, 0xB, 0x6B, 0xB, 0x6B, 0x0, 0x2, 0xB, 0x6C, 0xB, 0x6C, 0x0, 0x1, 0xB, 0x84, 0xB, 0x84, 0x0, 0x3, 0xB, 0x86, 0xB, 0x86, 0x0, 0x3, 0xB, 0x88, 0xB, 0x88, 0x0, 0x3, 0xB, 0x8A, 0xB, 0x8A, 0x0, 0x3, 0xB, 0x8C, 0xB, 0x8C, 0x0, 0x3, 0xB, 0x8E, 0xB, 0x8E, 0x0, 0x3, 0xB, 0x8F, 0xB, 0x8F, 0x0, 0x2, 0xB, 0x90, 0xB, 0x90, 0x0, 0x4, 0xB, 0x91, 0xB, 0x91, 0x0, 0x2, 0xB, 0x92, 0xB, 0x92, 0x0, 0x4, 0xB, 0x93, 0xB, 0x93, 0x0, 0x2, 0xB, 0x94, 0xB, 0x94, 0x0, 0x4, 0xB, 0x95, 0xB, 0x95, 0x0, 0x2, 0xB, 0x96, 0xB, 0x96, 0x0, 0x4, 0xB, 0xA3, 0xB, 0xA3, 0x0, 0x10, 0xB, 0xA4, 0xB, 0xA4, 0x0, 0xE, 0xB, 0xA5, 0xB, 0xA5, 0x0, 0x10, 0xB, 0xA6, 0xB, 0xA6, 0x0, 0xE, 0xB, 0xA7, 0xB, 0xA7, 0x0, 0x10, 0xB, 0xA8, 0xB, 0xA8, 0x0, 0xE, 0xB, 0xA9, 0xB, 0xA9, 0x0, 0x10, 0xB, 0xAA, 0xB, 0xAA, 0x0, 0xE, 0xB, 0xAB, 0xB, 0xAB, 0x0, 0x10, 0xB, 0xAC, 0xB, 0xAC, 0x0, 0xE, 0xB, 0xAD, 0xB, 0xAD, 0x0, 0xB, 0xB, 0xAF, 0xB, 0xAF, 0x0, 0xB, 0xB, 0xB1, 0xB, 0xB1, 0x0, 0xB, 0xB, 0xB3, 0xB, 0xB3, 0x0, 0xB, 0xB, 0xB5, 0xB, 0xB5, 0x0, 0xA, 0xB, 0xB6, 0xB, 0xB6, 0x0, 0x5, 0xB, 0xB7, 0xB, 0xB7, 0x0, 0xA, 0xB, 0xB8, 0xB, 0xB8, 0x0, 0x5, 0xB, 0xB9, 0xB, 0xB9, 0x0, 0xA, 0xB, 0xBA, 0xB, 0xBA, 0x0, 0x5, 0xB, 0xBB, 0xB, 0xBB, 0x0, 0xA, 0xB, 0xBC, 0xB, 0xBC, 0x0, 0x5, 0xB, 0xBD, 0xB, 0xBD, 0x0, 0xA, 0xB, 0xBE, 0xB, 0xBE, 0x0, 0x5, 0xB, 0xBF, 0xB, 0xBF, 0x0, 0x1D, 0xB, 0xC0, 0xB, 0xC0, 0x0, 0x9, 0xB, 0xC1, 0xB, 0xC1, 0x0, 0x1D, 0xB, 0xC2, 0xB, 0xC2, 0x0, 0x9, 0xB, 0xC3, 0xB, 0xC3, 0x0, 0x16, 0xB, 0xC5, 0xB, 0xC5, 0x0, 0x16, 0xB, 0xC7, 0xB, 0xC7, 0x0, 0x11, 0xB, 0xC8, 0xB, 0xC8, 0x0, 0x15, 0xB, 0xC9, 0xB, 0xC9, 0x0, 0x11, 0xB, 0xCA, 0xB, 0xCA, 0x0, 0x15, 0xB, 0xCB, 0xB, 0xCB, 0x0, 0xC, 0xB, 0xCC, 0xB, 0xCC, 0x0, 0x9, 0xB, 0xCD, 0xB, 0xCD, 0x0, 0x13, 0xB, 0xCE, 0xB, 0xCE, 0x0, 0xF, 0xB, 0xCF, 0xB, 0xCF, 0x0, 0x13, 0xB, 0xD0, 0xB, 0xD0, 0x0, 0xF, 0xB, 0xD1, 0xB, 0xD1, 0x0, 0x13, 0xB, 0xD2, 0xB, 0xD2, 0x0, 0xF, 0xB, 0xD6, 0xB, 0xD6, 0x0, 0x9, 0xB, 0xD7, 0xB, 0xD7, 0x0, 0x7, 0xB, 0xD8, 0xB, 0xDF, 0x0, 0x1, 0xC, 0x14, 0xC, 0x19, 0x0, 0x4, 0xC, 0x20, 0xC, 0x27, 0x0, 0x5, 0xC, 0x44, 0xC, 0x45, 0x0, 0x4, 0xC, 0x46, 0xC, 0x47, 0x0, 0x5, 0xC, 0x4A, 0xC, 0x51, 0x0, 0x1, 0xC, 0x7A, 0xC, 0x80, 0x0, 0x1, 0xC, 0x81, 0xC, 0x82, 0x0, 0x6, 0xC, 0x85, 0xC, 0x85, 0x0, 0x6, 0xC, 0x9A, 0xC, 0x9D, 0x0, 0x5, 0xC, 0xA2, 0xC, 0xA3, 0x0, 0xC, 0xC, 0xB7, 0xC, 0xB7, 0x0, 0xD, 0xC, 0xBB, 0xC, 0xBB, 0x0, 0x8, 0xC, 0xBC, 0xC, 0xBC, 0x0, 0x17, 0xC, 0xBE, 0xC, 0xBE, 0x0, 0xD, 0xC, 0xCA, 0xC, 0xCA, 0x0, 0x17, 0xC, 0xCB, 0xC, 0xCB, 0x0, 0x1C, 0xC, 0xCD, 0xC, 0xCD, 0x0, 0x17, 0xC, 0xD6, 0xC, 0xD6, 0x0, 0xD, 0xC, 0xDD, 0xC, 0xDD, 0x0, 0x8, 0xC, 0xE0, 0xC, 0xE0, 0x0, 0x8, 0xC, 0xE1, 0xC, 0xE1, 0x0, 0x18, 0xC, 0xE2, 0xC, 0xE2, 0x0, 0x1C, 0xC, 0xE5, 0xC, 0xE5, 0x0, 0x8, 0xC, 0xE6, 0xC, 0xE6, 0x0, 0x17, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0xA6, 0x0, 0x1, 0x3, 0x8C, 0x9, 0xA, 0x0, 0x2, 0x0, 0x19, 0x1, 0xB1, 0x1, 0xC5, 0x0, 0x0, 0x1, 0xCB, 0x1, 0xCB, 0x0, 0x15, 0x1, 0xEE, 0x1, 0xF5, 0x0, 0x16, 0x1, 0xF7, 0x1, 0xF7, 0x0, 0x1E, 0x1, 0xFB, 0x1, 0xFD, 0x0, 0x1F, 0x2, 0x1, 0x2, 0x3, 0x0, 0x22, 0x2, 0x8, 0x2, 0x8, 0x0, 0x25, 0x2, 0xC, 0x2, 0xC, 0x0, 0x26, 0x2, 0x14, 0x2, 0x20, 0x0, 0x27, 0x2, 0xBA, 0x2, 0xBE, 0x0, 0x34, 0x3, 0x20, 0x3, 0x24, 0x0, 0x39, 0x3, 0x2B, 0x3, 0x2C, 0x0, 0x3E, 0x3, 0xEF, 0x3, 0xF0, 0x0, 0x40, 0x3, 0xF2, 0x3, 0xF8, 0x0, 0x42, 0x3, 0xFA, 0x3, 0xFD, 0x0, 0x49, 0x4, 0x0, 0x4, 0x24, 0x0, 0x4D, 0x4, 0x27, 0x4, 0x27, 0x0, 0x72, 0x4, 0xE2, 0x4, 0xE3, 0x0, 0x73, 0x4, 0xE5, 0x4, 0xE5, 0x0, 0x75, 0x5, 0x76, 0x5, 0x95, 0x0, 0x76, 0x6, 0x8, 0x6, 0x8, 0x0, 0x96, 0x6, 0xD, 0x6, 0x16, 0x0, 0x97, 0x6, 0x37, 0x6, 0x37, 0x0, 0xA1, 0x7, 0x2D, 0x7, 0x33, 0x0, 0xA2, 0x8, 0x8A, 0x8, 0x8E, 0x0, 0xA9, 0x0, 0x2, 0x0, 0x7B, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1A, 0x0, 0x82, 0x0, 0x82, 0x0, 0x34, 0x0, 0x84, 0x0, 0x84, 0x0, 0x35, 0x0, 0x87, 0x0, 0x87, 0x0, 0x36, 0x0, 0x8A, 0x0, 0x8A, 0x0, 0x37, 0x0, 0x8C, 0x0, 0x97, 0x0, 0x38, 0x0, 0xA6, 0x0, 0xA7, 0x0, 0x44, 0x0, 0xAD, 0x0, 0xAD, 0x0, 0x46, 0x0, 0xB0, 0x0, 0xB0, 0x0, 0x47, 0x0, 0xB4, 0x0, 0xB5, 0x0, 0x48, 0x0, 0xBD, 0x0, 0xBD, 0x0, 0x4A, 0x0, 0xC3, 0x0, 0xC4, 0x0, 0x4B, 0x0, 0xC9, 0x0, 0xCA, 0x0, 0x4D, 0x0, 0xDB, 0x0, 0xDC, 0x0, 0x4F, 0x0, 0xEC, 0x0, 0xEC, 0x0, 0x51, 0x0, 0xF2, 0x0, 0xF2, 0x0, 0x52, 0x0, 0xF8, 0x0, 0xF9, 0x0, 0x53, 0x0, 0xFD, 0x0, 0xFE, 0x0, 0x55, 0x1, 0x1, 0x1, 0x61, 0x0, 0x57, 0x2, 0x30, 0x2, 0x30, 0x0, 0xB8, 0x2, 0x3A, 0x2, 0x3A, 0x0, 0xB9, 0x2, 0x3E, 0x2, 0x3E, 0x0, 0xBA, 0x2, 0x40, 0x2, 0x40, 0x0, 0xBB, 0x2, 0x42, 0x2, 0x42, 0x0, 0xBC, 0x2, 0x46, 0x2, 0x46, 0x0, 0xBD, 0x2, 0x4A, 0x2, 0x4A, 0x0, 0xBE, 0x2, 0x4C, 0x2, 0x4D, 0x0, 0xBF, 0x2, 0x51, 0x2, 0x51, 0x0, 0xC1, 0x2, 0x53, 0x2, 0x53, 0x0, 0xC2, 0x2, 0x69, 0x2, 0x69, 0x0, 0xC3, 0x2, 0x70, 0x2, 0x72, 0x0, 0xC4, 0x2, 0x74, 0x2, 0x74, 0x0, 0xC7, 0x2, 0x77, 0x2, 0x77, 0x0, 0xC8, 0x2, 0x7B, 0x2, 0x7B, 0x0, 0xC9, 0x2, 0x7D, 0x2, 0x7F, 0x0, 0xCA, 0x2, 0x81, 0x2, 0x91, 0x0, 0xCD, 0x2, 0x93, 0x2, 0x93, 0x0, 0xDE, 0x2, 0x95, 0x2, 0x97, 0x0, 0xDF, 0x2, 0x99, 0x2, 0x99, 0x0, 0xE2, 0x2, 0x9E, 0x2, 0x9F, 0x0, 0xE3, 0x2, 0xAC, 0x2, 0xB0, 0x0, 0xE5, 0x2, 0xB2, 0x2, 0xB2, 0x0, 0xEA, 0x2, 0xB6, 0x2, 0xB8, 0x0, 0xEB, 0x2, 0xC1, 0x2, 0xC2, 0x0, 0xEE, 0x2, 0xD8, 0x2, 0xD9, 0x0, 0xF0, 0x2, 0xE2, 0x2, 0xE2, 0x0, 0xF2, 0x2, 0xEF, 0x2, 0xEF, 0x0, 0xF3, 0x2, 0xF9, 0x2, 0xF9, 0x0, 0xF4, 0x2, 0xFB, 0x2, 0xFB, 0x0, 0xF5, 0x2, 0xFF, 0x2, 0xFF, 0x0, 0xF6, 0x3, 0x1, 0x3, 0x3, 0x0, 0xF7, 0x3, 0x5, 0x3, 0x5, 0x0, 0xFA, 0x3, 0x2F, 0x3, 0x3F, 0x0, 0xFB, 0x3, 0x43, 0x3, 0x44, 0x1, 0xC, 0x3, 0x47, 0x3, 0x4B, 0x1, 0xE, 0x3, 0x4F, 0x3, 0x5A, 0x1, 0x13, 0x3, 0x9A, 0x3, 0xA6, 0x1, 0x1F, 0x3, 0xA8, 0x3, 0xA9, 0x1, 0x2C, 0x3, 0xAB, 0x3, 0xC9, 0x1, 0x2E, 0x4, 0x2B, 0x4, 0x2E, 0x1, 0x4D, 0x7, 0x4E, 0x7, 0x62, 0x1, 0x51, 0x7, 0x66, 0x7, 0x66, 0x1, 0x66, 0x7, 0x71, 0x7, 0x71, 0x1, 0x67, 0x7, 0x78, 0x7, 0x7A, 0x1, 0x68, 0x7, 0x7D, 0x7, 0x7D, 0x1, 0x6B, 0x7, 0x7F, 0x7, 0x7F, 0x1, 0x6C, 0x7, 0x83, 0x7, 0x83, 0x1, 0x6D, 0x7, 0x85, 0x7, 0x87, 0x1, 0x6E, 0x7, 0x8D, 0x7, 0x8D, 0x1, 0x71, 0x7, 0x92, 0x7, 0x92, 0x1, 0x72, 0x7, 0x94, 0x7, 0x94, 0x1, 0x73, 0x7, 0x96, 0x7, 0x96, 0x1, 0x74, 0x7, 0xA6, 0x7, 0xA6, 0x1, 0x75, 0x7, 0xA9, 0x7, 0xA9, 0x1, 0x76, 0x7, 0xAB, 0x7, 0xAB, 0x1, 0x77, 0x7, 0xAE, 0x7, 0xB1, 0x1, 0x78, 0x7, 0xDE, 0x7, 0xE2, 0x1, 0x7C, 0x7, 0xEE, 0x7, 0xFD, 0x1, 0x81, 0x8, 0xAD, 0x8, 0xB0, 0x1, 0x91, 0x8, 0xB3, 0x8, 0xB8, 0x1, 0x95, 0x8, 0xC8, 0x9, 0x30, 0x1, 0x9B, 0x9, 0x33, 0x9, 0xD4, 0x2, 0x4, 0x9, 0xEB, 0x9, 0xEC, 0x2, 0xA6, 0x9, 0xF7, 0x9, 0xF8, 0x2, 0xA8, 0x9, 0xFC, 0x9, 0xFD, 0x2, 0xAA, 0xA, 0x0, 0xA, 0x0, 0x2, 0xAC, 0xA, 0x3, 0xA, 0x4, 0x2, 0xAD, 0xA, 0x9, 0xA, 0x9, 0x2, 0xAF, 0xA, 0x12, 0xA, 0x14, 0x2, 0xB0, 0xA, 0x16, 0xA, 0x17, 0x2, 0xB3, 0xA, 0x19, 0xA, 0x1E, 0x2, 0xB5, 0xA, 0x20, 0xA, 0x29, 0x2, 0xBB, 0xA, 0x2D, 0xA, 0x2D, 0x2, 0xC5, 0xA, 0x2F, 0xA, 0x36, 0x2, 0xC6, 0xA, 0x38, 0xA, 0x3A, 0x2, 0xCE, 0xA, 0x44, 0xA, 0x45, 0x2, 0xD1, 0xA, 0x47, 0xA, 0x4A, 0x2, 0xD3, 0xA, 0x4D, 0xA, 0x4F, 0x2, 0xD7, 0xA, 0x51, 0xA, 0x5B, 0x2, 0xDA, 0xA, 0x5E, 0xA, 0x6C, 0x2, 0xE5, 0xA, 0x6E, 0xA, 0xC5, 0x2, 0xF4, 0xA, 0xE7, 0xA, 0xE7, 0x3, 0x4C, 0xA, 0xEE, 0xB, 0xC, 0x3, 0x4D, 0xB, 0x10, 0xB, 0x3E, 0x3, 0x6C, 0xB, 0x41, 0xB, 0x41, 0x3, 0x9B, 0xB, 0x4D, 0xB, 0xD7, 0x3, 0x9C, 0xC, 0x7A, 0xC, 0x7B, 0x4, 0x27, 0xC, 0x81, 0xC, 0x82, 0x4, 0x29, 0xC, 0x90, 0xC, 0x91, 0x4, 0x2B, 0xC, 0x96, 0xC, 0x97, 0x4, 0x2D, 0xC, 0x9A, 0xC, 0x9B, 0x4, 0x2F, 0xC, 0xA2, 0xC, 0xA3, 0x4, 0x31, 0xC, 0xB7, 0xC, 0xBC, 0x4, 0x33, 0xC, 0xBE, 0xC, 0xDD, 0x4, 0x39, 0xC, 0xDF, 0xC, 0xE6, 0x4, 0x59, 0xC, 0xE8, 0xC, 0xE9, 0x4, 0x61, 0xC, 0xEB, 0xC, 0xEB, 0x4, 0x63, 0xC, 0xED, 0xD, 0x4, 0x4, 0x64, 0xD, 0x7, 0xD, 0xD, 0x4, 0x7C, 0xD, 0xF, 0xD, 0x11, 0x4, 0x83, 0xD, 0x13, 0xD, 0x1B, 0x4, 0x86, 0xD, 0x1D, 0xD, 0x1E, 0x4, 0x8F, 0x0, 0xAE, 0x0, 0x0, 0x2, 0xBA, 0x0, 0x0, 0x2, 0xC0, 0x0, 0x0, 0x2, 0xC6, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x2, 0xCC, 0x0, 0x0, 0x2, 0xD2, 0x0, 0x0, 0x2, 0xD8, 0x0, 0x0, 0x5, 0x78, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0, 0x2, 0xDE, 0x0, 0x0, 0x2, 0xE4, 0x0, 0x0, 0x2, 0xEA, 0x0, 0x0, 0x5, 0x78, 0x0, 0x0, 0x2, 0xF0, 0x0, 0x0, 0x2, 0xF6, 0x0, 0x0, 0x2, 0xFC, 0x0, 0x0, 0x3, 0x2, 0x0, 0x0, 0x3, 0x2, 0x0, 0x0, 0x3, 0x8, 0x0, 0x0, 0x3, 0xE, 0x0, 0x0, 0x3, 0x14, 0x0, 0x0, 0x3, 0x1A, 0x0, 0x0, 0x3, 0x20, 0x0, 0x0, 0x3, 0x26, 0x0, 0x0, 0x3, 0x2C, 0x0, 0x0, 0x3, 0x32, 0x0, 0x0, 0x3, 0x38, 0x0, 0x0, 0x3, 0x3E, 0x0, 0x0, 0x3, 0x44, 0x0, 0x0, 0x3, 0x4A, 0x0, 0x0, 0x3, 0x50, 0x0, 0x0, 0x3, 0x56, 0x0, 0x0, 0x3, 0x5C, 0x0, 0x0, 0x3, 0x62, 0x0, 0x0, 0x3, 0x68, 0x0, 0x0, 0x3, 0x6E, 0x0, 0x0, 0x3, 0x74, 0x0, 0x0, 0x3, 0x7A, 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0x7C, 0x0, 0x0, 0x3, 0x86, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x3, 0x8C, 0x0, 0x0, 0x4, 0xA6, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x3, 0x92, 0x0, 0x0, 0x3, 0x98, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x3, 0x9E, 0x0, 0x0, 0x3, 0xA4, 0x0, 0x0, 0x3, 0xAA, 0x0, 0x0, 0x3, 0xB0, 0x0, 0x0, 0x3, 0xB6, 0x0, 0x0, 0x3, 0xBC, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x3, 0xC8, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x3, 0xCE, 0x0, 0x0, 0x3, 0xD4, 0x0, 0x0, 0x3, 0xDA, 0x0, 0x0, 0x3, 0xE0, 0x0, 0x0, 0x3, 0xE6, 0x0, 0x0, 0x3, 0xEC, 0x0, 0x0, 0x3, 0xF2, 0x0, 0x0, 0x3, 0xF8, 0x0, 0x0, 0x3, 0xFE, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x4, 0xA, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0x5, 0x1E, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0, 0x4, 0x1C, 0x0, 0x0, 0x4, 0x22, 0x0, 0x0, 0x4, 0x28, 0x0, 0x0, 0x4, 0x2E, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x34, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x4, 0x46, 0x0, 0x0, 0x4, 0x4C, 0x0, 0x0, 0x4, 0x4C, 0x0, 0x0, 0x4, 0x52, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x58, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x5E, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x64, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0x6A, 0x0, 0x0, 0x4, 0x70, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x76, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x7C, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x4, 0x82, 0x0, 0x0, 0x4, 0x88, 0x0, 0x0, 0x4, 0x8E, 0x0, 0x0, 0x4, 0x94, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x9A, 0x0, 0x0, 0x4, 0xA0, 0x0, 0x0, 0x4, 0xDC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xA6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xAC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xB2, 0x0, 0x0, 0x4, 0xB8, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xBE, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xC4, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xD0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xD6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xDC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xE2, 0x0, 0x0, 0x4, 0xE8, 0x0, 0x0, 0x4, 0xEE, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xFA, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x6, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0xC, 0x0, 0x0, 0x5, 0x12, 0x0, 0x0, 0x5, 0x18, 0x0, 0x0, 0x5, 0x1E, 0x0, 0x0, 0x5, 0x24, 0x0, 0x0, 0x5, 0x2A, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x30, 0x0, 0x0, 0x5, 0x36, 0x0, 0x0, 0x5, 0x3C, 0x0, 0x0, 0x5, 0x42, 0x0, 0x0, 0x5, 0x48, 0x0, 0x0, 0x5, 0x4E, 0x0, 0x0, 0x5, 0x54, 0x0, 0x0, 0x5, 0x5A, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x5, 0x6C, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0, 0x5, 0x78, 0x0, 0x1, 0xFD, 0xEA, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xD5, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB5, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xBB, 0x5, 0x5, 0x0, 0x1, 0xFD, 0xBA, 0x6, 0x28, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0xAA, 0x0, 0x1, 0xFD, 0xA8, 0x5, 0x4, 0x0, 0x1, 0xFD, 0xBA, 0x4, 0xCF, 0x0, 0x1, 0xFD, 0x6B, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0x9F, 0x0, 0x1, 0xFD, 0xB5, 0x4, 0x9F, 0x0, 0x1, 0xFE, 0x35, 0x5, 0xD, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xA0, 0x0, 0x1, 0xFD, 0xB7, 0x4, 0x2A, 0x0, 0x1, 0xFD, 0xA1, 0x4, 0x2A, 0x0, 0x1, 0xFD, 0xD0, 0x4, 0x2A, 0x0, 0x1, 0xFE, 0x48, 0x4, 0xEF, 0x0, 0x1, 0xFD, 0xF3, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x48, 0x0, 0x1, 0xFD, 0xB5, 0x5, 0xBE, 0x0, 0x1, 0x0, 0x20, 0x5, 0xA, 0x0, 0x1, 0xFF, 0x97, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xC3, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x9D, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB1, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0xAD, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xE6, 0x0, 0x1, 0xFD, 0x9B, 0x4, 0x6B, 0x0, 0x1, 0xFD, 0xC4, 0x4, 0xDC, 0x0, 0x1, 0xFD, 0xC2, 0x4, 0xA7, 0x0, 0x1, 0xFE, 0x3, 0x4, 0x58, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xC3, 0x0, 0x1, 0xFD, 0x85, 0x4, 0x5F, 0x0, 0x1, 0xFD, 0xA3, 0x4, 0xC4, 0x0, 0x1, 0xFD, 0xCA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE0, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xEA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE0, 0x4, 0xA6, 0x0, 0x1, 0xFE, 0x4D, 0x4, 0xA6, 0x0, 0x1, 0xFD, 0xF5, 0x5, 0x0, 0x0, 0x1, 0xFE, 0x20, 0x5, 0x0, 0x0, 0x1, 0xFD, 0xA7, 0x4, 0xA6, 0x0, 0x1, 0xFD, 0xC5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBD, 0x4, 0x59, 0x0, 0x1, 0xFD, 0x9D, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC3, 0x5, 0x46, 0x0, 0x1, 0xFD, 0xCF, 0x5, 0x46, 0x0, 0x1, 0xFD, 0xAA, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x87, 0x5, 0xA, 0x0, 0x1, 0xFE, 0x1B, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x4D, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAB, 0x4, 0x92, 0x0, 0x1, 0xFE, 0xB, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD9, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x17, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA7, 0x4, 0x92, 0x0, 0x1, 0x0, 0x1, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xEB, 0x3, 0xD8, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x84, 0x0, 0x1, 0xFD, 0xBD, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC0, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x99, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC2, 0x3, 0xBF, 0x0, 0x1, 0xFD, 0xBB, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBC, 0x3, 0xCC, 0x0, 0x1, 0xFD, 0xD6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD4, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB1, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x3, 0xE1, 0x0, 0x1, 0xFD, 0xC7, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x9B, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x3, 0xB3, 0x0, 0x1, 0xFD, 0xB4, 0x3, 0xAE, 0x0, 0x1, 0xFD, 0x8A, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAD, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBF, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xCE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBE, 0x3, 0xB0, 0x0, 0x1, 0xFD, 0xD8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC9, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x93, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB3, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF4, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x94, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA6, 0x3, 0xCE, 0x0, 0x1, 0xFD, 0x84, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xCC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xDC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD7, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x7A, 0x4, 0x92, 0x0, 0x1, 0x1, 0x86, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE1, 0x4, 0x92, 0x0, 0x1, 0x2, 0x1F, 0x4, 0x92, 0x0, 0x1, 0xFE, 0xC5, 0x4, 0x92, 0x0, 0x1, 0xFC, 0xAA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB7, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD4, 0x4, 0xE8, 0x0, 0x1, 0xFD, 0xBB, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x67, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB8, 0x5, 0xA, 0x4, 0x91, 0x19, 0x1A, 0x16, 0x2C, 0xF, 0x48, 0x16, 0x50, 0x19, 0x26, 0x9, 0x24, 0xF, 0xE4, 0x16, 0x9E, 0x13, 0xFE, 0x9, 0x2A, 0x16, 0xB0, 0x16, 0xC8, 0x16, 0xE0, 0x37, 0x92, 0x19, 0x32, 0x16, 0x2C, 0xB, 0x9A, 0x17, 0x40, 0x17, 0x58, 0x17, 0x7C, 0x17, 0x94, 0x17, 0xAC, 0x17, 0xC4, 0x9, 0x30, 0x14, 0x82, 0x18, 0x0, 0x19, 0x20, 0x16, 0x32, 0x12, 0x8A, 0x16, 0x56, 0x19, 0x2C, 0x9, 0x36, 0x19, 0x2C, 0x18, 0x6, 0x14, 0x4, 0x9, 0x3C, 0x16, 0xB6, 0x16, 0xCE, 0x16, 0xE6, 0x16, 0xF8, 0x19, 0x38, 0x12, 0x84, 0x9, 0x42, 0x17, 0x46, 0x17, 0x4C, 0x17, 0x82, 0x17, 0x88, 0x17, 0xB2, 0x17, 0xCA, 0x12, 0x90, 0x14, 0x88, 0x56, 0xB0, 0x9, 0x48, 0x9, 0x4E, 0x9, 0x54, 0x9, 0x5A, 0x16, 0x56, 0x9, 0x60, 0x19, 0xDA, 0xC, 0xFC, 0x9, 0x66, 0x9, 0x6C, 0x37, 0x92, 0x16, 0xF8, 0x9, 0x72, 0x9, 0x78, 0x9, 0x7E, 0x16, 0x32, 0x9, 0x84, 0x9, 0x8A, 0x9, 0x90, 0x9, 0x96, 0x14, 0x3A, 0x14, 0x40, 0x9, 0x9C, 0x14, 0x76, 0x14, 0x7C, 0x18, 0x0, 0x56, 0xB0, 0xF, 0xE4, 0xE, 0xA, 0xE, 0xFA, 0x9, 0xA2, 0x9, 0xA8, 0x9, 0xAE, 0x9, 0xB4, 0x9, 0xBA, 0x17, 0x40, 0x9, 0xC0, 0x9, 0xC6, 0xA, 0xC2, 0xD, 0xC2, 0x9, 0xCC, 0x9, 0xD2, 0x9, 0xD8, 0x9, 0xDE, 0x9, 0xE4, 0x9, 0xEA, 0x9, 0xF0, 0x9, 0xF6, 0x14, 0xE8, 0x9, 0xFC, 0x19, 0x20, 0xD, 0x8C, 0xD, 0x8C, 0x17, 0x4C, 0xA, 0x2, 0x19, 0x2C, 0x19, 0x2C, 0xA, 0x8, 0xC, 0xC6, 0xA, 0xE, 0xA, 0x14, 0xA, 0x1A, 0xA, 0x1A, 0xA, 0x20, 0xA, 0x26, 0xA, 0x2C, 0xA, 0x32, 0xA, 0x38, 0xA, 0x3E, 0xA, 0x44, 0xA, 0x4A, 0xA, 0x4A, 0xA, 0x50, 0xA, 0x56, 0x16, 0xF8, 0x14, 0xA6, 0xA, 0x5C, 0xA, 0x62, 0xA, 0x68, 0xA, 0x74, 0xA, 0x6E, 0xA, 0x74, 0xA, 0x7A, 0xA, 0x7A, 0xA, 0x80, 0xA, 0x86, 0xA, 0x8C, 0xA, 0x92, 0xA, 0xF8, 0xA, 0x98, 0xA, 0x98, 0xA, 0x9E, 0xA, 0xA4, 0xA, 0xAA, 0xA, 0xB0, 0xA, 0xB6, 0xD, 0x26, 0xD, 0xF8, 0xA, 0xBC, 0xC, 0xF6, 0xB, 0x58, 0xA, 0xC2, 0xA, 0xC8, 0xA, 0xCE, 0xA, 0xD4, 0xA, 0xD4, 0xA, 0xDA, 0xA, 0xE0, 0xA, 0xE6, 0xA, 0xEC, 0xA, 0xF2, 0xA, 0xF8, 0xA, 0xFE, 0xB, 0x4, 0xD, 0xEC, 0xB, 0xA, 0xB, 0x10, 0xB, 0x16, 0xB, 0x1C, 0xB, 0x22, 0x37, 0xA4, 0xB, 0x28, 0xB, 0x2E, 0xB, 0x34, 0xB, 0x3A, 0xB, 0x40, 0xB, 0x46, 0xB, 0x4C, 0xB, 0x52, 0xB, 0x58, 0xB, 0x5E, 0xB, 0x5E, 0xB, 0x64, 0xB, 0x6A, 0xB, 0x70, 0x14, 0xA6, 0xB, 0x76, 0xB, 0x7C, 0xB, 0x82, 0x12, 0xFC, 0xB, 0x88, 0xB, 0x8E, 0xB, 0x94, 0xB, 0x9A, 0xB, 0xA0, 0xB, 0xA6, 0xB, 0xAC, 0xB, 0xB2, 0xB, 0xB8, 0xB, 0xBE, 0xB, 0xC4, 0xB, 0xCA, 0xC, 0x8A, 0x16, 0x14, 0xB, 0xD0, 0xB, 0xD6, 0xB, 0xDC, 0xB, 0xE2, 0xB, 0xE8, 0xB, 0xEE, 0xB, 0xF4, 0xB, 0xFA, 0x16, 0x1A, 0xC, 0x0, 0xC, 0x6, 0xC, 0xC, 0xC, 0x12, 0xC, 0x18, 0xC, 0x30, 0xC, 0x1E, 0xC, 0x24, 0xC, 0x2A, 0xC, 0x30, 0xC, 0x36, 0xC, 0x3C, 0xC, 0x42, 0xC, 0x48, 0xC, 0x4E, 0x13, 0x6E, 0x16, 0xE, 0xC, 0x54, 0xC, 0x5A, 0xC, 0x60, 0xC, 0x66, 0xC, 0x6C, 0xC, 0x72, 0xC, 0x78, 0xC, 0x7E, 0xC, 0x84, 0xE, 0x4, 0xC, 0x8A, 0xC, 0x90, 0xC, 0x96, 0xC, 0x9C, 0xC, 0xA2, 0xC, 0xB4, 0xC, 0xA8, 0xC, 0xAE, 0xC, 0xB4, 0xD, 0x44, 0xF, 0x24, 0xC, 0xBA, 0xC, 0xC0, 0xC, 0xC6, 0x14, 0x40, 0xC, 0xCC, 0xC, 0xD2, 0xC, 0xD8, 0xC, 0xDE, 0xC, 0xE4, 0xC, 0xEA, 0xC, 0xF0, 0xC, 0xF6, 0xC, 0xFC, 0xE, 0x4, 0xD, 0x2, 0xD, 0x8, 0xD, 0xE, 0xD, 0x14, 0xE, 0xA, 0xD, 0x1A, 0xD, 0x20, 0xD, 0x26, 0xE, 0x22, 0xD, 0x2C, 0xD, 0x32, 0x56, 0xB0, 0xD, 0x38, 0xD, 0x3E, 0x56, 0xB0, 0xD, 0x44, 0xD, 0x4A, 0xD, 0x6E, 0xD, 0x50, 0x54, 0xCA, 0xD, 0x56, 0xD, 0x5C, 0x38, 0x2E, 0xD, 0x62, 0x56, 0xEC, 0xD, 0xA4, 0xD, 0x68, 0xD, 0x6E, 0xE, 0x34, 0xD, 0x74, 0xD, 0x7A, 0xD, 0x80, 0xD, 0x86, 0xD, 0x8C, 0xD, 0x92, 0xD, 0x98, 0xD, 0x9E, 0xD, 0xA4, 0xD, 0xAA, 0xD, 0xB0, 0xD, 0xB6, 0xD, 0xBC, 0xD, 0xC2, 0xD, 0xC8, 0xD, 0xCE, 0xD, 0xD4, 0x16, 0xF8, 0xD, 0xDA, 0x17, 0x46, 0xD, 0xE0, 0xD, 0xE6, 0xD, 0xEC, 0xD, 0xF2, 0x56, 0xB0, 0xD, 0xF8, 0x16, 0xE, 0xD, 0xFE, 0xE, 0x4, 0xE, 0xA, 0xE, 0x10, 0xE, 0x16, 0xE, 0x1C, 0xE, 0x22, 0xE, 0x28, 0xE, 0x2E, 0xE, 0x34, 0xE, 0x3A, 0xE, 0x40, 0xE, 0x46, 0xE, 0x4C, 0x18, 0x66, 0x18, 0xDE, 0x18, 0xC6, 0xE, 0x8E, 0xE, 0x52, 0x12, 0x2A, 0x18, 0xC0, 0x19, 0x2, 0x11, 0xF4, 0xE, 0x58, 0x18, 0xBA, 0x19, 0x4A, 0x18, 0x72, 0x18, 0xB4, 0x11, 0xCA, 0x18, 0x6C, 0x18, 0xF0, 0x18, 0x8A, 0x18, 0xD2, 0x11, 0x9A, 0xE, 0x5E, 0x18, 0xA8, 0xE, 0x64, 0xE, 0x6A, 0x18, 0xCC, 0xE, 0x70, 0xE, 0x76, 0xE, 0x7C, 0xE, 0x82, 0xE, 0x88, 0xE, 0x8E, 0xE, 0x94, 0xE, 0x9A, 0xE, 0xA0, 0xE, 0xA6, 0xE, 0xAC, 0x19, 0x44, 0xE, 0xB2, 0x16, 0xB6, 0x10, 0xEC, 0x18, 0xD8, 0x18, 0xA2, 0x19, 0x3E, 0xE, 0xB8, 0xE, 0xBE, 0xE, 0xC4, 0xE, 0xCA, 0xE, 0xD0, 0xE, 0xFA, 0x19, 0xDA, 0xE, 0xD6, 0xE, 0xDC, 0xE, 0xFA, 0xE, 0xE2, 0xE, 0xE8, 0x19, 0xDA, 0xE, 0xEE, 0x19, 0xDA, 0x19, 0xDA, 0xE, 0xF4, 0xE, 0xFA, 0xF, 0x0, 0xF, 0x6, 0xF, 0xC, 0x16, 0x56, 0x17, 0x88, 0xF, 0x12, 0xF, 0x18, 0xF, 0x1E, 0xF, 0x24, 0xF, 0x2A, 0x19, 0x4A, 0xF, 0x30, 0x18, 0x72, 0x16, 0x50, 0x16, 0x50, 0x18, 0x6, 0x17, 0x7C, 0x17, 0x82, 0xF, 0x36, 0xF, 0x36, 0x14, 0xAC, 0xF, 0x3C, 0x13, 0x1A, 0xF, 0x42, 0x19, 0x1A, 0xF, 0x48, 0x12, 0xEA, 0x12, 0xEA, 0x13, 0xEC, 0x12, 0x60, 0xF, 0x4E, 0xF, 0x4E, 0x14, 0xB8, 0x12, 0x6C, 0xF, 0x54, 0xF, 0x5A, 0xF, 0x5A, 0x14, 0xC4, 0xF, 0x60, 0x13, 0x62, 0xF, 0x66, 0xF, 0x66, 0x14, 0xD0, 0xF, 0x6C, 0x12, 0xCC, 0xF, 0x72, 0xF, 0x72, 0x14, 0xB2, 0xF, 0x78, 0x13, 0x20, 0xF, 0x7E, 0x19, 0x20, 0x12, 0x8A, 0x15, 0x30, 0x15, 0x30, 0x15, 0xC, 0x12, 0x96, 0xF, 0x84, 0xF, 0x84, 0x14, 0xBE, 0x12, 0xA2, 0xF, 0x8A, 0x12, 0x24, 0x12, 0x24, 0x14, 0xCA, 0xF, 0x90, 0x13, 0x68, 0xF, 0x96, 0xF, 0x96, 0x14, 0xD6, 0xF, 0x9C, 0x12, 0xD2, 0x13, 0x98, 0x18, 0x30, 0xF, 0xA2, 0x18, 0x2A, 0x13, 0xCE, 0x19, 0x1A, 0x19, 0x20, 0x16, 0x38, 0x16, 0x3E, 0xF, 0xB4, 0xF, 0xBA, 0xF, 0xA8, 0xF, 0xAE, 0xF, 0xB4, 0xF, 0xBA, 0xF, 0xC0, 0x16, 0x56, 0xF, 0xC6, 0x16, 0x80, 0x16, 0x62, 0x16, 0x68, 0xF, 0xCC, 0xF, 0xDE, 0x19, 0x26, 0x19, 0x2C, 0x13, 0xEC, 0x15, 0xC, 0x15, 0x6, 0x15, 0xC, 0xF, 0xD2, 0x16, 0x68, 0xF, 0xD8, 0xF, 0xDE, 0xF, 0xE4, 0x19, 0x2C, 0x15, 0xD2, 0x15, 0xD8, 0xF, 0xEA, 0xF, 0xF0, 0x18, 0x48, 0xF, 0xF6, 0x18, 0x42, 0xF, 0xFC, 0x13, 0xFE, 0x14, 0x4, 0x10, 0x2, 0x10, 0x8, 0x12, 0xD8, 0x16, 0xB0, 0x16, 0xB6, 0x10, 0xE, 0x10, 0x14, 0x16, 0xC8, 0x16, 0xCE, 0x16, 0xC8, 0x16, 0xCE, 0x16, 0xC8, 0x16, 0xCE, 0x15, 0x36, 0x15, 0x3C, 0x37, 0x92, 0x16, 0xF8, 0x10, 0x1A, 0x10, 0x20, 0x16, 0xF8, 0x15, 0x1E, 0x15, 0x24, 0x10, 0x26, 0x11, 0x46, 0x10, 0x2C, 0x10, 0x32, 0x10, 0x38, 0x10, 0x3E, 0x17, 0x40, 0x17, 0x46, 0x10, 0x44, 0x10, 0x4A, 0x10, 0x50, 0x10, 0x56, 0x10, 0x5C, 0x10, 0x62, 0x17, 0x58, 0x17, 0x4C, 0x17, 0x58, 0x17, 0x4C, 0x10, 0x5C, 0x10, 0x62, 0x17, 0x7C, 0x17, 0x82, 0x17, 0x7C, 0x17, 0x82, 0x10, 0x68, 0x17, 0x82, 0x10, 0x6E, 0x10, 0x74, 0x10, 0x7A, 0x10, 0x80, 0x10, 0x86, 0x10, 0x8C, 0x10, 0x92, 0x10, 0x98, 0x10, 0x9E, 0x10, 0xA4, 0x17, 0x94, 0x17, 0x88, 0x10, 0xAA, 0x10, 0xB0, 0x10, 0xB6, 0x18, 0x6, 0x12, 0x4E, 0x10, 0xBC, 0x10, 0xC2, 0x10, 0xC8, 0x10, 0xCE, 0x17, 0xF4, 0x17, 0xFA, 0x10, 0xD4, 0x10, 0xDA, 0x10, 0xE0, 0x10, 0xE6, 0x10, 0xEC, 0x10, 0xEC, 0x18, 0xC0, 0x10, 0xF2, 0x10, 0xF2, 0x10, 0xF8, 0x10, 0xFE, 0x11, 0x4, 0x11, 0xA, 0x19, 0x3E, 0x18, 0xD8, 0x11, 0x10, 0x11, 0x10, 0x11, 0x82, 0x18, 0x7E, 0x11, 0x16, 0x11, 0x16, 0x11, 0x1C, 0x18, 0x90, 0x11, 0x22, 0x18, 0xFC, 0x18, 0xFC, 0x11, 0x28, 0x11, 0x2E, 0x11, 0x34, 0x11, 0x3A, 0x11, 0x3A, 0x11, 0x40, 0x11, 0x46, 0x19, 0x14, 0x11, 0x4C, 0x11, 0x52, 0x19, 0x3E, 0x11, 0x58, 0x11, 0x64, 0x11, 0x5E, 0x11, 0x64, 0x11, 0x6A, 0x11, 0x70, 0x11, 0x76, 0x11, 0x7C, 0x19, 0x44, 0x11, 0x82, 0x11, 0x88, 0x11, 0x8E, 0x11, 0x94, 0x11, 0x9A, 0x11, 0xA0, 0x11, 0xA6, 0x11, 0xAC, 0x11, 0xB2, 0x18, 0x8A, 0x11, 0xB8, 0x11, 0xBE, 0x18, 0x6C, 0x11, 0xC4, 0x11, 0xCA, 0x11, 0xCA, 0x11, 0xCA, 0x11, 0xD0, 0x18, 0x72, 0x11, 0xD6, 0x11, 0xDC, 0x11, 0xE2, 0x11, 0xE8, 0x19, 0x4A, 0x11, 0xEE, 0x11, 0xF4, 0x11, 0xFA, 0x12, 0x0, 0x12, 0x6, 0x19, 0x2, 0x12, 0x6, 0x18, 0xC0, 0x12, 0xC, 0x18, 0xC0, 0x12, 0x12, 0x12, 0x18, 0x15, 0x9C, 0x12, 0x1E, 0x12, 0x24, 0x12, 0x2A, 0x12, 0x30, 0x12, 0x36, 0x18, 0x78, 0x12, 0x3C, 0x12, 0x42, 0x12, 0x48, 0x12, 0x6C, 0x12, 0x4E, 0x12, 0x54, 0x12, 0x5A, 0x12, 0x60, 0x12, 0x66, 0x12, 0x6C, 0x16, 0xA4, 0x12, 0x72, 0x12, 0x78, 0x19, 0x20, 0x19, 0x2C, 0x12, 0x7E, 0x12, 0x84, 0x12, 0x8A, 0x12, 0x90, 0x12, 0x96, 0x12, 0x9C, 0x17, 0x4C, 0x14, 0x4, 0x12, 0xA2, 0x12, 0xA8, 0x12, 0xAE, 0x12, 0xB4, 0x12, 0xBA, 0x12, 0xB4, 0x12, 0xBA, 0x12, 0xC0, 0x12, 0xC6, 0x12, 0xCC, 0x12, 0xD2, 0x12, 0xD8, 0x12, 0xDE, 0x12, 0xE4, 0x19, 0x1A, 0x19, 0x20, 0x12, 0xEA, 0x12, 0xF0, 0x15, 0x30, 0x12, 0xF6, 0x12, 0xFC, 0x13, 0x2, 0x13, 0x8, 0x13, 0xE, 0x13, 0x14, 0x18, 0x2A, 0x13, 0xCE, 0x13, 0x1A, 0x13, 0x20, 0x16, 0x62, 0x16, 0x68, 0x13, 0x26, 0x13, 0x2C, 0x13, 0x32, 0x13, 0x38, 0x13, 0x3E, 0x13, 0x44, 0x13, 0x4A, 0x13, 0x50, 0x13, 0x56, 0x13, 0x5C, 0x13, 0x62, 0x13, 0x68, 0x13, 0x6E, 0x13, 0x74, 0x13, 0x7A, 0x13, 0x80, 0x13, 0x86, 0x13, 0x8C, 0x16, 0x8, 0x13, 0x92, 0x13, 0x98, 0x13, 0x9E, 0x13, 0xA4, 0x13, 0xAA, 0x13, 0xB0, 0x13, 0xB6, 0x13, 0xBC, 0x19, 0x1A, 0x19, 0x20, 0x13, 0xC2, 0x13, 0xC8, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x14, 0xAC, 0x14, 0xB2, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x1A, 0x19, 0x20, 0x18, 0x2A, 0x13, 0xCE, 0x19, 0x26, 0x19, 0x2C, 0x13, 0xD4, 0x13, 0xDA, 0x13, 0xE0, 0x13, 0xE6, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x26, 0x19, 0x2C, 0x13, 0xEC, 0x15, 0xC, 0x13, 0xF2, 0x13, 0xF8, 0x13, 0xFE, 0x14, 0x4, 0x19, 0x32, 0x19, 0x38, 0x14, 0xA, 0x14, 0x10, 0x19, 0x32, 0x19, 0x38, 0x19, 0x32, 0x19, 0x38, 0x19, 0x32, 0x19, 0x38, 0x19, 0x32, 0x19, 0x38, 0x14, 0xC4, 0x14, 0xCA, 0x14, 0x16, 0x14, 0x1C, 0x14, 0x16, 0x14, 0x1C, 0x14, 0x22, 0x14, 0x28, 0x14, 0x2E, 0x14, 0x34, 0x14, 0x3A, 0x14, 0x40, 0x17, 0x94, 0x17, 0x88, 0x14, 0x46, 0x14, 0x4C, 0x14, 0x52, 0x14, 0x58, 0x14, 0x52, 0x14, 0x58, 0x14, 0x5E, 0x14, 0x64, 0x14, 0x6A, 0x14, 0x70, 0x14, 0x76, 0x14, 0x7C, 0x14, 0x82, 0x14, 0x88, 0x14, 0x8E, 0x14, 0x94, 0x14, 0x9A, 0x14, 0xA0, 0x14, 0xA6, 0x14, 0xAC, 0x14, 0xB2, 0x14, 0xB8, 0x14, 0xBE, 0x14, 0xC4, 0x14, 0xCA, 0x14, 0xD0, 0x14, 0xD6, 0x17, 0x94, 0x17, 0x9A, 0x17, 0x94, 0x14, 0xE2, 0x17, 0x94, 0x14, 0xDC, 0x17, 0x94, 0x14, 0xE2, 0x14, 0xE8, 0x19, 0x1A, 0x14, 0xEE, 0x19, 0x1A, 0x14, 0xF4, 0x14, 0xFA, 0x15, 0x0, 0x15, 0x6, 0x15, 0xC, 0x15, 0x12, 0x15, 0x18, 0x19, 0x32, 0x19, 0x38, 0x15, 0x1E, 0x15, 0x24, 0x15, 0x2A, 0x15, 0x30, 0x15, 0x36, 0x15, 0x3C, 0x15, 0x42, 0x15, 0x48, 0x15, 0x4E, 0x15, 0x54, 0x15, 0x5A, 0x15, 0x60, 0x15, 0x66, 0x15, 0x6C, 0x15, 0x72, 0x15, 0x78, 0x15, 0x7E, 0x15, 0x84, 0x15, 0x8A, 0x15, 0x90, 0x15, 0x96, 0x15, 0x9C, 0x15, 0xA2, 0x15, 0xA8, 0x15, 0xAE, 0x15, 0xB4, 0x15, 0xBA, 0x15, 0xC0, 0x15, 0xC6, 0x15, 0xCC, 0x15, 0xD2, 0x15, 0xD8, 0x15, 0xDE, 0x15, 0xE4, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x32, 0x15, 0xEA, 0x19, 0x32, 0x15, 0xF0, 0x15, 0xF6, 0x15, 0xFC, 0x19, 0x32, 0x16, 0x2, 0x18, 0x60, 0x16, 0x8, 0x16, 0xE, 0x16, 0x14, 0x16, 0x1A, 0x16, 0x20, 0x17, 0x1C, 0x16, 0x26, 0x16, 0x2C, 0x16, 0x32, 0x16, 0x2C, 0x16, 0x32, 0x16, 0x38, 0x16, 0x3E, 0x16, 0x44, 0x16, 0x4A, 0x16, 0x50, 0x16, 0x56, 0x16, 0x50, 0x16, 0x56, 0x16, 0x50, 0x16, 0x56, 0x16, 0x50, 0x16, 0x56, 0x19, 0x26, 0x16, 0x5C, 0x19, 0x26, 0x16, 0x5C, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x26, 0x19, 0x2C, 0x16, 0x62, 0x16, 0x68, 0x16, 0x6E, 0x16, 0x74, 0x16, 0x7A, 0x16, 0x80, 0x16, 0x86, 0x16, 0x8C, 0x16, 0x9E, 0x18, 0x6, 0x16, 0x92, 0x16, 0x98, 0x16, 0x9E, 0x18, 0x6, 0x16, 0xA4, 0x16, 0xAA, 0x16, 0xB0, 0x16, 0xB6, 0x16, 0xB0, 0x16, 0xB6, 0x16, 0xC8, 0x16, 0xCE, 0x16, 0xBC, 0x16, 0xC2, 0x16, 0xC8, 0x16, 0xCE, 0x16, 0xC8, 0x16, 0xCE, 0x16, 0xD4, 0x16, 0xDA, 0x16, 0xE0, 0x16, 0xE6, 0x16, 0xEC, 0x16, 0xF2, 0x37, 0x92, 0x16, 0xF8, 0x37, 0x92, 0x16, 0xF8, 0x37, 0x92, 0x16, 0xF8, 0x19, 0x32, 0x16, 0xFE, 0x19, 0x32, 0x17, 0x4, 0x19, 0x32, 0x17, 0xA, 0x19, 0x32, 0x17, 0xA, 0x17, 0x10, 0x17, 0x16, 0x17, 0x1C, 0x17, 0x22, 0x17, 0x28, 0x17, 0x2E, 0x17, 0x40, 0x17, 0x46, 0x17, 0x34, 0x17, 0x3A, 0x17, 0x40, 0x17, 0x46, 0x17, 0x64, 0x17, 0x6A, 0x17, 0x58, 0x17, 0x4C, 0x17, 0x58, 0x17, 0x52, 0x17, 0x58, 0x17, 0x5E, 0x17, 0x64, 0x17, 0x6A, 0x17, 0x70, 0x17, 0x76, 0x17, 0x7C, 0x17, 0x82, 0x17, 0x7C, 0x17, 0x82, 0x17, 0x7C, 0x17, 0x82, 0x17, 0x94, 0x17, 0x88, 0x17, 0x94, 0x17, 0x88, 0x17, 0x94, 0x17, 0x88, 0x17, 0x94, 0x17, 0x8E, 0x17, 0x94, 0x17, 0x9A, 0x17, 0xA0, 0x17, 0xA6, 0x17, 0xAC, 0x17, 0xB2, 0x17, 0xB8, 0x17, 0xBE, 0x17, 0xC4, 0x17, 0xCA, 0x17, 0xD0, 0x17, 0xD6, 0x17, 0xDC, 0x17, 0xE2, 0x17, 0xE8, 0x17, 0xEE, 0x17, 0xF4, 0x17, 0xFA, 0x18, 0x0, 0x56, 0xB0, 0x18, 0x0, 0x56, 0xB0, 0x18, 0x6, 0x18, 0xC, 0x18, 0x12, 0x18, 0x18, 0x19, 0x20, 0x18, 0x1E, 0x18, 0x24, 0x18, 0x2A, 0x18, 0x30, 0x18, 0x36, 0x18, 0x3C, 0x18, 0x42, 0x18, 0x48, 0x18, 0x4E, 0x18, 0x54, 0x18, 0x5A, 0x18, 0x60, 0x19, 0x3E, 0x19, 0x44, 0x18, 0xD2, 0x18, 0x8A, 0x19, 0x4A, 0x18, 0xDE, 0x19, 0x3E, 0x18, 0xA2, 0x19, 0x44, 0x18, 0x66, 0x18, 0xD2, 0x18, 0x8A, 0x18, 0x6C, 0x18, 0xB4, 0x18, 0x72, 0x19, 0x4A, 0x18, 0xBA, 0x18, 0xC0, 0x18, 0xDE, 0x18, 0xC6, 0x18, 0x90, 0x18, 0x78, 0x18, 0x7E, 0x18, 0x84, 0x19, 0x2, 0x18, 0x8A, 0x18, 0x90, 0x18, 0xF0, 0x18, 0x96, 0x18, 0x9C, 0x19, 0x3E, 0x18, 0xA2, 0x18, 0xA8, 0x19, 0x44, 0x18, 0xAE, 0x18, 0xB4, 0x18, 0xD2, 0x19, 0x4A, 0x18, 0xBA, 0x18, 0xD8, 0x18, 0xC0, 0x18, 0xC6, 0x18, 0xCC, 0x18, 0xD2, 0x18, 0xD8, 0x18, 0xDE, 0x18, 0xE4, 0x18, 0xEA, 0x18, 0xF0, 0x18, 0xF6, 0x18, 0xFC, 0x19, 0x2, 0x19, 0x8, 0x19, 0x8, 0x19, 0xE, 0x19, 0x14, 0x19, 0x1A, 0x19, 0x20, 0x19, 0x26, 0x19, 0x2C, 0x19, 0x32, 0x19, 0x38, 0x19, 0x3E, 0x19, 0x44, 0x19, 0x4A, 0x19, 0x50, 0x19, 0x50, 0x19, 0x56, 0x19, 0x5C, 0x19, 0x62, 0x19, 0x68, 0x19, 0x6E, 0x19, 0x74, 0x19, 0x7A, 0x19, 0x7A, 0x19, 0x98, 0x19, 0x80, 0x19, 0x86, 0x19, 0x8C, 0x19, 0x92, 0x19, 0x98, 0x19, 0x9E, 0x19, 0xA4, 0x19, 0xAA, 0x19, 0xB0, 0x19, 0xB0, 0x19, 0xB6, 0x19, 0xBC, 0x19, 0xC2, 0x19, 0xC8, 0x19, 0xCE, 0x19, 0xD4, 0x19, 0xDA, 0x19, 0xDA, 0x0, 0x1, 0x2, 0x73, 0x6, 0x4C, 0x0, 0x1, 0x3, 0x52, 0x6, 0x41, 0x0, 0x1, 0x2, 0x87, 0x6, 0x4C, 0x0, 0x1, 0x1, 0xE0, 0x6, 0xBE, 0x0, 0x1, 0x0, 0xDF, 0x6, 0x40, 0x0, 0x1, 0x2, 0x19, 0x5, 0xA, 0x0, 0x1, 0x3, 0xA7, 0x6, 0x4C, 0x0, 0x1, 0x2, 0xCB, 0x6, 0x8A, 0x0, 0x1, 0x3, 0x5C, 0x5, 0xB, 0x0, 0x1, 0x2, 0x1C, 0x5, 0x7, 0x0, 0x1, 0x2, 0xDF, 0x6, 0x48, 0x0, 0x1, 0x1, 0x1F, 0x6, 0x40, 0x0, 0x1, 0x1, 0x28, 0x6, 0x9B, 0x0, 0x1, 0x3, 0xC9, 0x6, 0x40, 0x0, 0x1, 0x3, 0xA7, 0x5, 0xA, 0x0, 0x1, 0x1, 0x9B, 0x6, 0xBE, 0x0, 0x1, 0x2, 0x9F, 0x6, 0x40, 0x0, 0x1, 0x2, 0x72, 0x6, 0x40, 0x0, 0x1, 0x1, 0x63, 0x6, 0x48, 0x0, 0x1, 0x1, 0x63, 0x6, 0x9B, 0x0, 0x1, 0x2, 0x4A, 0x6, 0x48, 0x0, 0x1, 0x1, 0x55, 0x6, 0x40, 0x0, 0x1, 0x2, 0x86, 0x6, 0x4C, 0x0, 0x1, 0x3, 0x22, 0x6, 0x40, 0x0, 0x1, 0x3, 0x5F, 0x6, 0x41, 0x0, 0x1, 0x1, 0x7B, 0x6, 0x40, 0x0, 0x1, 0x1, 0xAA, 0x5, 0xA, 0x0, 0x1, 0x2, 0xCB, 0x6, 0x40, 0x0, 0x1, 0x2, 0x1, 0x5, 0xA, 0x0, 0x1, 0x2, 0x65, 0x5, 0xA, 0x0, 0x1, 0x2, 0x85, 0x6, 0xA4, 0x0, 0x1, 0x1, 0xF5, 0x5, 0xA, 0x0, 0x1, 0x2, 0x4E, 0x5, 0xA, 0x0, 0x1, 0x2, 0x14, 0x6, 0x63, 0x0, 0x1, 0x2, 0x14, 0x6, 0x40, 0x0, 0x1, 0x2, 0xE, 0x5, 0xA, 0x0, 0x1, 0x2, 0x28, 0x5, 0xA, 0x0, 0x1, 0x1, 0x89, 0x5, 0xA, 0x0, 0x1, 0x2, 0x72, 0x5, 0xA, 0x0, 0x1, 0x2, 0x90, 0x5, 0xA, 0x0, 0x1, 0x2, 0x35, 0x5, 0xA, 0x0, 0x1, 0x2, 0x70, 0x6, 0xA4, 0x0, 0x1, 0x1, 0x63, 0x6, 0x40, 0x0, 0x1, 0x0, 0xF1, 0x5, 0xA, 0x0, 0x1, 0x1, 0x6A, 0x5, 0xA, 0x0, 0x1, 0x1, 0x7E, 0x6, 0x40, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x40, 0x0, 0x1, 0x1, 0x31, 0x6, 0x40, 0x0, 0x1, 0x2, 0x75, 0x5, 0xA, 0x0, 0x1, 0x3, 0x80, 0x5, 0xA, 0x0, 0x1, 0x3, 0x85, 0x5, 0xA, 0x0, 0x1, 0x2, 0xA2, 0x5, 0xA, 0x0, 0x1, 0x3, 0x8E, 0x5, 0xA, 0x0, 0x1, 0x3, 0x48, 0x5, 0xA, 0x0, 0x1, 0x2, 0x6A, 0x6, 0x40, 0x0, 0x1, 0x0, 0xE8, 0x6, 0x40, 0x0, 0x1, 0x0, 0xE8, 0x5, 0xA, 0x0, 0x1, 0x1, 0xED, 0x5, 0xA, 0x0, 0x1, 0x0, 0xFA, 0x5, 0xA, 0x0, 0x1, 0x1, 0x75, 0x5, 0xA, 0x0, 0x1, 0x2, 0x1B, 0x5, 0xA, 0x0, 0x1, 0x2, 0x50, 0x5, 0xA, 0x0, 0x1, 0x2, 0x54, 0x6, 0xA4, 0x0, 0x1, 0x0, 0xD8, 0x5, 0xA, 0x0, 0x1, 0x3, 0x13, 0x6, 0xA4, 0x0, 0x1, 0x0, 0xEE, 0x6, 0x40, 0x0, 0x1, 0x1, 0x38, 0x6, 0x40, 0x0, 0x1, 0x2, 0x9C, 0x5, 0xA, 0x0, 0x1, 0x1, 0xFA, 0x5, 0xA, 0x0, 0x1, 0x2, 0x1E, 0x5, 0xA, 0x0, 0x1, 0x1, 0xF4, 0x5, 0xA, 0x0, 0x1, 0x1, 0xEC, 0x5, 0xA, 0x0, 0x1, 0x2, 0x3A, 0x5, 0xA, 0x0, 0x1, 0x1, 0xF4, 0x6, 0x61, 0x0, 0x1, 0x2, 0x3A, 0x6, 0x61, 0x0, 0x1, 0x2, 0x0, 0x6, 0x61, 0x0, 0x1, 0x2, 0x3B, 0x6, 0x61, 0x0, 0x1, 0x2, 0xC2, 0x6, 0x61, 0x0, 0x1, 0x2, 0x17, 0x5, 0xA, 0x0, 0x1, 0x2, 0x5C, 0x5, 0xA, 0x0, 0x1, 0x2, 0x49, 0x6, 0x40, 0x0, 0x1, 0x0, 0xF6, 0x5, 0xA, 0x0, 0x1, 0x2, 0x31, 0x6, 0x40, 0x0, 0x1, 0x1, 0xF0, 0x6, 0x61, 0x0, 0x1, 0x2, 0x37, 0x6, 0x61, 0x0, 0x1, 0x5, 0xA4, 0x6, 0x40, 0x0, 0x1, 0x5, 0x84, 0x6, 0x40, 0x0, 0x1, 0x3, 0xCD, 0x6, 0x40, 0x0, 0x1, 0x2, 0x7, 0x6, 0xA4, 0x0, 0x1, 0x4, 0x47, 0x6, 0x40, 0x0, 0x1, 0x4, 0xA9, 0x6, 0xA4, 0x0, 0x1, 0x3, 0x66, 0x6, 0x40, 0x0, 0x1, 0x3, 0x19, 0x6, 0x40, 0x0, 0x1, 0x1, 0xE3, 0x6, 0x40, 0x0, 0x1, 0x1, 0xEE, 0x6, 0x40, 0x0, 0x1, 0x2, 0xAC, 0x5, 0xA, 0x0, 0x1, 0x2, 0x6E, 0x6, 0x48, 0x0, 0x1, 0x2, 0x6F, 0x5, 0xA, 0x0, 0x1, 0x2, 0x37, 0x5, 0x9, 0x0, 0x1, 0x1, 0x2E, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x57, 0x5, 0x0, 0x0, 0x1, 0x2, 0x2B, 0x4, 0xFC, 0x0, 0x1, 0x3, 0x4A, 0x4, 0xFA, 0x0, 0x1, 0x2, 0x37, 0x6, 0x4C, 0x0, 0x1, 0x3, 0x3C, 0x4, 0xFC, 0x0, 0x1, 0x2, 0xBC, 0x6, 0x40, 0x0, 0x1, 0x3, 0xD5, 0x6, 0x48, 0x0, 0x1, 0x2, 0x63, 0x6, 0x55, 0x0, 0x1, 0x2, 0xD4, 0x6, 0x48, 0x0, 0x1, 0x2, 0x91, 0x6, 0x48, 0x0, 0x1, 0x2, 0xCF, 0x6, 0x48, 0x0, 0x1, 0x3, 0x81, 0x6, 0x48, 0x0, 0x1, 0x2, 0xA3, 0x6, 0x56, 0x0, 0x1, 0x3, 0x94, 0x6, 0x40, 0x0, 0x1, 0x1, 0xAD, 0x4, 0xFC, 0x0, 0x1, 0x2, 0xBF, 0x4, 0xF5, 0x0, 0x1, 0x3, 0x3E, 0x4, 0xFC, 0x0, 0x1, 0x2, 0xE, 0x5, 0x9, 0x0, 0x1, 0x2, 0x4F, 0x4, 0xFC, 0x0, 0x1, 0x2, 0x30, 0x4, 0xFC, 0x0, 0x1, 0x2, 0x82, 0x4, 0xF5, 0x0, 0x1, 0x2, 0xF6, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x53, 0x4, 0xF5, 0x0, 0x1, 0x1, 0xFB, 0x4, 0xF5, 0x0, 0x1, 0x2, 0xE7, 0x6, 0xCC, 0x0, 0x1, 0x2, 0x67, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x26, 0x4, 0xFC, 0x0, 0x1, 0x3, 0x2C, 0x4, 0xF5, 0x0, 0x1, 0x3, 0x33, 0x4, 0xFC, 0x0, 0x1, 0x2, 0x18, 0x5, 0xA, 0x0, 0x1, 0x3, 0x3B, 0x4, 0xF5, 0x0, 0x1, 0x2, 0xD, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x47, 0x5, 0xA, 0x0, 0x1, 0x3, 0x9F, 0x6, 0x41, 0x0, 0x1, 0x3, 0x22, 0x4, 0xFC, 0x0, 0x1, 0x1, 0xD5, 0x6, 0xCC, 0x0, 0x1, 0x2, 0x80, 0x6, 0x1C, 0x0, 0x1, 0x2, 0x1C, 0x4, 0xEF, 0x0, 0x1, 0x2, 0x48, 0x5, 0x50, 0x0, 0x1, 0x3, 0x29, 0x6, 0x40, 0x0, 0x1, 0x2, 0x9A, 0x6, 0x61, 0x0, 0x1, 0x2, 0x47, 0x5, 0xC, 0x0, 0x1, 0x2, 0xD4, 0x7, 0x6E, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x23, 0x0, 0x1, 0x2, 0xD7, 0x6, 0x56, 0x0, 0x1, 0x2, 0x8A, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x81, 0x6, 0x19, 0x0, 0x1, 0x2, 0x5C, 0x6, 0x4C, 0x0, 0x1, 0x1, 0x11, 0x6, 0x4C, 0x0, 0x1, 0x2, 0xC5, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x21, 0x5, 0xA, 0x0, 0x1, 0x2, 0x63, 0x6, 0x4C, 0x0, 0x1, 0x2, 0xA4, 0x6, 0x61, 0x0, 0x1, 0x3, 0x4D, 0x5, 0xA, 0x0, 0x1, 0x2, 0x71, 0x5, 0xA, 0x0, 0x1, 0x2, 0x3D, 0x5, 0xA, 0x0, 0x1, 0x2, 0xA7, 0x5, 0xA, 0x0, 0x1, 0x2, 0x4B, 0x5, 0xA, 0x0, 0x1, 0x2, 0xF, 0x5, 0xA, 0x0, 0x1, 0x1, 0x5, 0x5, 0xA, 0x0, 0x1, 0x3, 0x1, 0x5, 0xA, 0x0, 0x1, 0x2, 0xB, 0x5, 0xA, 0x0, 0x1, 0x1, 0x23, 0x5, 0xA, 0x0, 0x1, 0x2, 0xF6, 0x5, 0xA, 0x0, 0x1, 0x2, 0x54, 0x5, 0xA, 0x0, 0x1, 0x1, 0xF6, 0x5, 0xA, 0x0, 0x1, 0x3, 0x73, 0x5, 0xA, 0x0, 0x1, 0x1, 0xF3, 0x5, 0xA, 0x0, 0x1, 0x2, 0x4A, 0x5, 0xA, 0x0, 0x1, 0x2, 0x3F, 0x5, 0xA, 0x0, 0x1, 0x1, 0xFB, 0x5, 0xA, 0x0, 0x1, 0x2, 0x79, 0x5, 0xA, 0x0, 0x1, 0x2, 0xF8, 0x5, 0xA, 0x0, 0x1, 0x1, 0xEA, 0x5, 0xA, 0x0, 0x1, 0x2, 0xD, 0x5, 0xA, 0x0, 0x1, 0x2, 0x67, 0x5, 0xA, 0x0, 0x1, 0x2, 0x4F, 0x5, 0xA, 0x0, 0x1, 0x2, 0x56, 0x5, 0xA, 0x0, 0x1, 0x2, 0xB1, 0x5, 0xA, 0x0, 0x1, 0x3, 0x4E, 0x5, 0xA, 0x0, 0x1, 0x2, 0xFB, 0x6, 0x40, 0x0, 0x1, 0x2, 0x67, 0x6, 0xA4, 0x0, 0x1, 0x2, 0xEB, 0x5, 0xA, 0x0, 0x1, 0x2, 0x5B, 0x5, 0xA, 0x0, 0x1, 0x2, 0x36, 0x5, 0xA, 0x0, 0x1, 0x1, 0x67, 0x6, 0x40, 0x0, 0x1, 0x2, 0x10, 0x5, 0xA, 0x0, 0x1, 0x2, 0x69, 0x5, 0xA, 0x0, 0x1, 0x2, 0x23, 0x5, 0xA, 0x0, 0x1, 0x4, 0xAB, 0x6, 0x40, 0x0, 0x1, 0x1, 0x63, 0x5, 0xA, 0x0, 0x1, 0x2, 0x97, 0x5, 0xA, 0x0, 0x1, 0x2, 0xB0, 0x5, 0xA, 0x0, 0x1, 0x2, 0x76, 0x5, 0xA, 0x0, 0x1, 0x2, 0x8D, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD, 0x6, 0x40, 0x0, 0x1, 0x1, 0xF3, 0x6, 0xA1, 0x0, 0x1, 0x2, 0x2A, 0x5, 0xA, 0x0, 0x1, 0x2, 0x57, 0x6, 0x40, 0x0, 0x1, 0x1, 0x17, 0x6, 0xA4, 0x0, 0x1, 0x3, 0xCA, 0x5, 0xA, 0x0, 0x1, 0x2, 0x88, 0x5, 0xA, 0x0, 0x1, 0x2, 0x1C, 0x5, 0xA, 0x0, 0x1, 0x2, 0x45, 0x6, 0xA4, 0x0, 0x1, 0x1, 0xFD, 0x5, 0xA, 0x0, 0x1, 0x2, 0x5, 0x5, 0xA, 0x0, 0x1, 0x2, 0x30, 0x5, 0xA, 0x0, 0x1, 0x2, 0x18, 0x6, 0x40, 0x0, 0x1, 0x2, 0x4D, 0x5, 0xA, 0x0, 0x1, 0x2, 0x34, 0x5, 0xA, 0x0, 0x1, 0x2, 0x24, 0x5, 0xA, 0x0, 0x1, 0x2, 0x11, 0x5, 0xA, 0x0, 0x1, 0x1, 0x9, 0x6, 0x40, 0x0, 0x1, 0x1, 0xFE, 0x5, 0xA, 0x0, 0x1, 0x2, 0x77, 0x6, 0xA4, 0x0, 0x1, 0x2, 0x3B, 0x5, 0xA, 0x0, 0x1, 0x2, 0x46, 0x5, 0xA, 0x0, 0x1, 0x1, 0x7F, 0x6, 0x48, 0x0, 0x1, 0x1, 0x7D, 0x6, 0x40, 0x0, 0x1, 0x1, 0x72, 0x6, 0x48, 0x0, 0x1, 0x1, 0x6F, 0x5, 0x3, 0x0, 0x1, 0x2, 0x3B, 0x5, 0x28, 0x0, 0x1, 0x2, 0x5C, 0x5, 0x28, 0x0, 0x1, 0x2, 0x15, 0x5, 0x28, 0x0, 0x1, 0x2, 0x50, 0x5, 0x28, 0x0, 0x1, 0x3, 0x1E, 0x5, 0x28, 0x0, 0x1, 0x2, 0x71, 0x5, 0x28, 0x0, 0x1, 0x2, 0x31, 0x5, 0x28, 0x0, 0x1, 0x2, 0x33, 0x5, 0x28, 0x0, 0x1, 0x3, 0xC, 0x5, 0x28, 0x0, 0x1, 0x2, 0x2B, 0x5, 0x28, 0x0, 0x1, 0x3, 0x3, 0x5, 0x28, 0x0, 0x1, 0x2, 0x8A, 0x5, 0x28, 0x0, 0x1, 0x2, 0xD7, 0x5, 0x28, 0x0, 0x1, 0x2, 0x6F, 0x5, 0x28, 0x0, 0x1, 0x2, 0x45, 0x5, 0x28, 0x0, 0x1, 0x2, 0x61, 0x5, 0x28, 0x0, 0x1, 0x2, 0x72, 0x6, 0x4C, 0x0, 0x1, 0x2, 0xDE, 0x6, 0x5E, 0x0, 0x1, 0x2, 0xD5, 0x6, 0x5E, 0x0, 0x1, 0x2, 0xC0, 0x6, 0x5E, 0x0, 0x1, 0x2, 0xD9, 0x6, 0x66, 0x0, 0x1, 0x4, 0x5E, 0x6, 0x69, 0x0, 0x1, 0x1, 0x7A, 0x4, 0xE8, 0x0, 0x1, 0x1, 0x70, 0x5, 0x3, 0x0, 0x1, 0x2, 0x4A, 0x5, 0x3, 0x0, 0x1, 0x0, 0xF2, 0x6, 0x55, 0x0, 0x1, 0x1, 0x34, 0x6, 0x72, 0x0, 0x1, 0x0, 0xEC, 0x3, 0x20, 0x0, 0x1, 0x1, 0x11, 0x4, 0xE8, 0x0, 0x1, 0x1, 0x95, 0x6, 0x72, 0x0, 0x1, 0x1, 0x1C, 0x6, 0x72, 0x0, 0x1, 0x1, 0x1F, 0x3, 0x20, 0x0, 0x1, 0x2, 0xC5, 0x5, 0xA, 0x0, 0x1, 0x3, 0x50, 0x6, 0x47, 0x0, 0x1, 0x1, 0x0, 0x5, 0x28, 0x0, 0x1, 0x3, 0x6E, 0x5, 0xA, 0x0, 0x1, 0x2, 0x11, 0x5, 0x28, 0x0, 0x1, 0x2, 0x7B, 0x5, 0x28, 0x0, 0x1, 0x2, 0xAD, 0x7, 0xAF, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x95, 0x0, 0x1, 0x2, 0xAD, 0x7, 0xE1, 0x0, 0x1, 0x2, 0xAC, 0x6, 0x55, 0x0, 0x1, 0x1, 0x21, 0x7, 0xB7, 0x0, 0x1, 0x2, 0xD6, 0x7, 0x95, 0x0, 0x1, 0x2, 0xC4, 0x7, 0xAF, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x95, 0x0, 0x1, 0x2, 0x9B, 0x7, 0xAF, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x6D, 0x0, 0x1, 0x2, 0x37, 0x6, 0x79, 0x0, 0x1, 0x2, 0x37, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x37, 0x6, 0xAB, 0x0, 0x1, 0x1, 0xC, 0x6, 0x72, 0x0, 0x1, 0x2, 0x3E, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x40, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x39, 0x6, 0x79, 0x0, 0x1, 0x2, 0x39, 0x6, 0x37, 0x0, 0x1, 0x2, 0x37, 0x6, 0x3A, 0x0, 0x1, 0x2, 0xAB, 0x7, 0x94, 0x0, 0x1, 0x2, 0x14, 0x6, 0x49, 0x0, 0x1, 0x2, 0xAC, 0x7, 0xB3, 0x0, 0x1, 0x2, 0x15, 0x6, 0x68, 0x0, 0x1, 0x2, 0x3B, 0x7, 0xA6, 0x0, 0x1, 0x2, 0x73, 0x7, 0x78, 0x0, 0x1, 0x2, 0x72, 0x7, 0x87, 0x0, 0x1, 0x2, 0xA9, 0x7, 0xA0, 0x0, 0x1, 0x2, 0xA8, 0x7, 0x94, 0x0, 0x1, 0x2, 0x2A, 0x6, 0x49, 0x0, 0x1, 0x2, 0xA9, 0x6, 0x55, 0x0, 0x1, 0x1, 0x21, 0x7, 0x9D, 0x0, 0x1, 0x1, 0xC, 0x6, 0x58, 0x0, 0x1, 0x1, 0xC, 0x6, 0x33, 0x0, 0x1, 0x1, 0xC, 0x6, 0x4E, 0x0, 0x1, 0x1, 0x20, 0x7, 0x87, 0x0, 0x1, 0x3, 0x52, 0x7, 0x9F, 0x0, 0x1, 0x1, 0x14, 0x7, 0xAF, 0x0, 0x1, 0x1, 0x6, 0x8, 0xA, 0x0, 0x1, 0x2, 0xD6, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x3E, 0x6, 0x68, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x8B, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x91, 0x0, 0x1, 0x2, 0x40, 0x6, 0x5B, 0x0, 0x1, 0x2, 0x5C, 0x7, 0xAF, 0x0, 0x1, 0x1, 0x99, 0x6, 0x79, 0x0, 0x1, 0x2, 0x5C, 0x7, 0x9E, 0x0, 0x1, 0x1, 0x99, 0x6, 0x68, 0x0, 0x1, 0x2, 0x7A, 0x7, 0xAF, 0x0, 0x1, 0x2, 0x25, 0x6, 0x79, 0x0, 0x1, 0x2, 0x7A, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x25, 0x6, 0x68, 0x0, 0x1, 0x2, 0x6C, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x95, 0x0, 0x1, 0x2, 0x39, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x70, 0x0, 0x1, 0x2, 0x39, 0x6, 0x3A, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x8B, 0x0, 0x1, 0x2, 0x39, 0x6, 0x55, 0x0, 0x1, 0x2, 0x9B, 0x7, 0xE1, 0x0, 0x1, 0x2, 0x39, 0x6, 0xAB, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x91, 0x0, 0x1, 0x2, 0x39, 0x6, 0x5B, 0x0, 0x1, 0x3, 0x92, 0x7, 0x9E, 0x0, 0x1, 0x2, 0xF5, 0x6, 0x68, 0x0, 0x1, 0x2, 0x73, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x6F, 0x7, 0xAF, 0x0, 0x1, 0x2, 0x7, 0x6, 0x79, 0x0, 0x1, 0x2, 0x6E, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x6, 0x6, 0x49, 0x0, 0x1, 0x3, 0xA7, 0x7, 0xBB, 0x0, 0x1, 0x3, 0x5C, 0x6, 0x7A, 0x0, 0x1, 0x2, 0xCB, 0x7, 0xF9, 0x0, 0x1, 0x2, 0x1C, 0x6, 0x76, 0x0, 0x1, 0x1, 0xCB, 0x5, 0x28, 0x0, 0x1, 0x2, 0x51, 0x6, 0x97, 0x0, 0x1, 0x2, 0x51, 0x6, 0x86, 0x0, 0x1, 0x2, 0x51, 0x6, 0x7D, 0x0, 0x1, 0x2, 0x51, 0x6, 0x55, 0x0, 0x1, 0x2, 0x51, 0x6, 0xC9, 0x0, 0x1, 0x2, 0x21, 0x6, 0x97, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x97, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x86, 0x0, 0x1, 0x2, 0x70, 0x6, 0x7D, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x86, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x7D, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x55, 0x0, 0x1, 0x2, 0x40, 0x6, 0x97, 0x0, 0x1, 0x2, 0x40, 0x6, 0x86, 0x0, 0x1, 0x2, 0x40, 0x6, 0x55, 0x0, 0x1, 0x2, 0x51, 0x6, 0x58, 0x0, 0x1, 0x2, 0x51, 0x6, 0x73, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x97, 0x0, 0x1, 0x2, 0x4E, 0x6, 0x67, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x86, 0x0, 0x1, 0x1, 0xCB, 0x6, 0x86, 0x0, 0x1, 0x2, 0x21, 0x6, 0x58, 0x0, 0x1, 0x2, 0x21, 0x6, 0x73, 0x0, 0x1, 0x2, 0x20, 0x6, 0x67, 0x0, 0x1, 0x2, 0x21, 0x6, 0x86, 0x0, 0x1, 0x2, 0x53, 0x6, 0x86, 0x0, 0x1, 0x2, 0x53, 0x6, 0x73, 0x0, 0x1, 0x2, 0x52, 0x6, 0x67, 0x0, 0x1, 0x2, 0x53, 0x5, 0x28, 0x0, 0x1, 0x2, 0x65, 0x6, 0x86, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x7D, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x58, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x73, 0x0, 0x1, 0x0, 0xFE, 0x6, 0x67, 0x0, 0x1, 0x2, 0xDE, 0x6, 0x86, 0x0, 0x1, 0x0, 0xF5, 0x6, 0x97, 0x0, 0x1, 0x0, 0xF5, 0x5, 0x28, 0x0, 0x1, 0x2, 0x70, 0x6, 0x97, 0x0, 0x1, 0x2, 0x70, 0x6, 0x86, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x58, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x73, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x79, 0x0, 0x1, 0x2, 0x3, 0x6, 0x97, 0x0, 0x1, 0x2, 0x3, 0x5, 0x28, 0x0, 0x1, 0x2, 0x3, 0x6, 0x86, 0x0, 0x1, 0x2, 0x2C, 0x6, 0x97, 0x0, 0x1, 0x2, 0x2C, 0x6, 0x86, 0x0, 0x1, 0x2, 0x1B, 0x6, 0x86, 0x0, 0x1, 0x2, 0x40, 0x6, 0x7D, 0x0, 0x1, 0x2, 0x40, 0x6, 0x58, 0x0, 0x1, 0x2, 0x40, 0x6, 0xC9, 0x0, 0x1, 0x2, 0x40, 0x6, 0x79, 0x0, 0x1, 0x2, 0x40, 0x5, 0x28, 0x0, 0x1, 0x3, 0x3, 0x6, 0x86, 0x0, 0x1, 0x2, 0x19, 0x6, 0x86, 0x0, 0x1, 0x2, 0x1C, 0x6, 0x97, 0x0, 0x1, 0x2, 0x1B, 0x6, 0x67, 0x0, 0x1, 0x2, 0x1C, 0x6, 0x86, 0x0, 0x1, 0x2, 0x73, 0x7, 0x6D, 0x0, 0x1, 0x1, 0x2E, 0x6, 0x22, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x29, 0x0, 0x1, 0x2, 0x73, 0x7, 0x75, 0x0, 0x1, 0x2, 0x6E, 0x7, 0xB7, 0x0, 0x1, 0x1, 0x21, 0x7, 0x75, 0x0, 0x1, 0x2, 0x91, 0x7, 0x93, 0x0, 0x1, 0x2, 0xD4, 0x7, 0x93, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x47, 0x0, 0x1, 0x2, 0x88, 0x5, 0x0, 0x0, 0x1, 0x2, 0x15, 0x5, 0xA, 0x0, 0x1, 0x2, 0x4, 0x5, 0x0, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x37, 0x0, 0x1, 0x1, 0xAD, 0x6, 0x6B, 0x0, 0x1, 0x1, 0xC, 0x6, 0x30, 0x0, 0x1, 0x2, 0x30, 0x6, 0x6B, 0x0, 0x1, 0x2, 0x2, 0x6, 0x55, 0x0, 0x1, 0x3, 0x92, 0x7, 0xAF, 0x0, 0x1, 0x2, 0xF5, 0x6, 0x79, 0x0, 0x1, 0x3, 0x92, 0x7, 0x6D, 0x0, 0x1, 0x2, 0xF5, 0x6, 0x37, 0x0, 0x1, 0x2, 0x73, 0x7, 0xAF, 0x0, 0x1, 0x2, 0x2, 0x6, 0x79, 0x0, 0x1, 0x1, 0x11, 0x6, 0x46, 0x0, 0x1, 0x3, 0x7B, 0x7, 0xAF, 0x0, 0x1, 0x3, 0x8C, 0x6, 0x79, 0x0, 0x1, 0x2, 0x73, 0x7, 0xB7, 0x0, 0x1, 0x2, 0xD4, 0x7, 0xB7, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x6B, 0x0, 0x1, 0x2, 0xDD, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x80, 0x7, 0x60, 0x0, 0x1, 0x2, 0x1C, 0x6, 0x33, 0x0, 0x1, 0x3, 0xD5, 0x7, 0x93, 0x0, 0x1, 0x3, 0x3E, 0x6, 0x47, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x6D, 0x0, 0x1, 0x2, 0x37, 0x6, 0x37, 0x0, 0x1, 0x2, 0x81, 0x7, 0x46, 0x0, 0x1, 0x2, 0x28, 0x6, 0x38, 0x0, 0x1, 0x3, 0xD5, 0x7, 0x75, 0x0, 0x1, 0x3, 0x3E, 0x6, 0x29, 0x0, 0x1, 0x2, 0x63, 0x7, 0x82, 0x0, 0x1, 0x2, 0xE, 0x6, 0x36, 0x0, 0x1, 0x2, 0xD4, 0x7, 0x78, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x2C, 0x0, 0x1, 0x2, 0xD4, 0x7, 0x75, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x29, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x6D, 0x0, 0x1, 0x2, 0x40, 0x6, 0x37, 0x0, 0x1, 0x2, 0xD2, 0x6, 0x45, 0x0, 0x1, 0x2, 0xD2, 0x7, 0x72, 0x0, 0x1, 0x2, 0x33, 0x6, 0x37, 0x0, 0x1, 0x2, 0xA3, 0x7, 0x83, 0x0, 0x1, 0x2, 0x18, 0x6, 0x37, 0x0, 0x1, 0x2, 0x91, 0x7, 0x78, 0x0, 0x1, 0x2, 0x91, 0x7, 0x75, 0x0, 0x1, 0x2, 0x2, 0x6, 0x37, 0x0, 0x1, 0x2, 0x91, 0x7, 0x99, 0x0, 0x1, 0x2, 0x2, 0x6, 0x5B, 0x0, 0x1, 0x2, 0xCF, 0x7, 0x75, 0x0, 0x1, 0x2, 0x26, 0x6, 0x29, 0x0, 0x1, 0x3, 0x81, 0x7, 0x75, 0x0, 0x1, 0x3, 0x33, 0x6, 0x29, 0x0, 0x1, 0x2, 0xAD, 0x8, 0x2, 0x0, 0x1, 0x2, 0x37, 0x6, 0xCC, 0x0, 0x1, 0x2, 0x37, 0x6, 0x55, 0x0, 0x1, 0x2, 0x73, 0x8, 0xA, 0x0, 0x1, 0x2, 0x2B, 0x6, 0xCC, 0x0, 0x1, 0x2, 0x73, 0x7, 0x9D, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x73, 0x7, 0xA6, 0x0, 0x1, 0x1, 0x21, 0x8, 0xA, 0x0, 0x1, 0x1, 0xC, 0x6, 0xC5, 0x0, 0x1, 0x1, 0x21, 0x6, 0x48, 0x0, 0x1, 0x1, 0x7, 0x6, 0x40, 0x0, 0x1, 0x2, 0xC4, 0x8, 0x2, 0x0, 0x1, 0x2, 0x40, 0x6, 0xCC, 0x0, 0x1, 0x2, 0xBF, 0x7, 0xAD, 0x0, 0x1, 0x2, 0x44, 0x6, 0x79, 0x0, 0x1, 0x2, 0xBF, 0x8, 0x0, 0x0, 0x1, 0x2, 0x44, 0x6, 0xCC, 0x0, 0x1, 0x2, 0xBF, 0x7, 0x93, 0x0, 0x1, 0x2, 0x44, 0x6, 0x5F, 0x0, 0x1, 0x2, 0xBF, 0x6, 0x3E, 0x0, 0x1, 0x2, 0x44, 0x5, 0xA, 0x0, 0x1, 0x2, 0x9B, 0x8, 0x2, 0x0, 0x1, 0x2, 0x39, 0x6, 0xCC, 0x0, 0x1, 0x2, 0xC2, 0x7, 0xBB, 0x0, 0x1, 0x2, 0x42, 0x6, 0x64, 0x0, 0x1, 0x2, 0xC2, 0x8, 0xE, 0x0, 0x1, 0x2, 0x42, 0x6, 0xB7, 0x0, 0x1, 0x2, 0xC2, 0x7, 0xA1, 0x0, 0x1, 0x2, 0x42, 0x6, 0x4A, 0x0, 0x1, 0x2, 0xC2, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x42, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x73, 0x6, 0x40, 0x0, 0x1, 0x2, 0x2, 0x5, 0xA, 0x0, 0x1, 0x2, 0x73, 0x8, 0x2, 0x0, 0x1, 0x2, 0x2, 0x6, 0xCC, 0x0, 0x1, 0x2, 0x73, 0x7, 0x95, 0x0, 0x1, 0x2, 0x2, 0x6, 0x5F, 0x0, 0x1, 0x2, 0x42, 0x5, 0xA, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x37, 0x6, 0x68, 0x0, 0x1, 0x1, 0x21, 0x7, 0xA6, 0x0, 0x1, 0x1, 0xC, 0x6, 0x61, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x40, 0x6, 0x68, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x39, 0x6, 0x68, 0x0, 0x1, 0x2, 0x38, 0x7, 0x95, 0x0, 0x1, 0x2, 0x39, 0x7, 0xA6, 0x0, 0x1, 0x2, 0x28, 0x5, 0xB, 0x0, 0x1, 0x2, 0x37, 0x7, 0x66, 0x0, 0x1, 0x2, 0x37, 0x7, 0x78, 0x0, 0x1, 0x3, 0xA7, 0x7, 0x7C, 0x0, 0x1, 0x3, 0x5C, 0x6, 0x3B, 0x0, 0x1, 0x2, 0xA9, 0x7, 0xB3, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x68, 0x0, 0x1, 0x2, 0x59, 0x7, 0x9F, 0x0, 0x1, 0x2, 0x57, 0x7, 0xA5, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x70, 0x0, 0x1, 0x2, 0x40, 0x6, 0x3A, 0x0, 0x1, 0x2, 0xA9, 0x7, 0xC4, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x79, 0x0, 0x1, 0x2, 0xD6, 0x7, 0xAF, 0x0, 0x1, 0x2, 0x3E, 0x6, 0x79, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x84, 0x0, 0x1, 0x2, 0x37, 0x6, 0x4E, 0x0, 0x1, 0x2, 0xAD, 0x7, 0xA9, 0x0, 0x1, 0x2, 0x37, 0x6, 0x73, 0x0, 0x1, 0x2, 0x73, 0x7, 0x8C, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x4E, 0x0, 0x1, 0x2, 0x73, 0x7, 0xB1, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x73, 0x0, 0x1, 0x1, 0x21, 0x7, 0x8C, 0x0, 0x1, 0x1, 0xC, 0x6, 0x47, 0x0, 0x1, 0x1, 0x21, 0x7, 0xB1, 0x0, 0x1, 0x1, 0xC, 0x6, 0x6C, 0x0, 0x1, 0x2, 0xC4, 0x7, 0x84, 0x0, 0x1, 0x2, 0x40, 0x6, 0x4E, 0x0, 0x1, 0x2, 0xC4, 0x7, 0xA9, 0x0, 0x1, 0x2, 0x40, 0x6, 0x73, 0x0, 0x1, 0x2, 0x5C, 0x7, 0x84, 0x0, 0x1, 0x1, 0x99, 0x6, 0x4E, 0x0, 0x1, 0x2, 0x5C, 0x7, 0xA9, 0x0, 0x1, 0x1, 0x99, 0x6, 0x73, 0x0, 0x1, 0x2, 0x9B, 0x7, 0x84, 0x0, 0x1, 0x2, 0x39, 0x6, 0x4E, 0x0, 0x1, 0x2, 0x9B, 0x7, 0xA9, 0x0, 0x1, 0x2, 0x39, 0x6, 0x73, 0x0, 0x1, 0x2, 0xCD, 0x7, 0xA6, 0x0, 0x1, 0x2, 0x2, 0x7, 0xC6, 0x0, 0x1, 0x2, 0xAC, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x36, 0x6, 0x49, 0x0, 0x1, 0x2, 0x40, 0x7, 0x66, 0x0, 0x1, 0x2, 0x40, 0x7, 0x8E, 0x0, 0x1, 0x2, 0xC3, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x3F, 0x6, 0x49, 0x0, 0x1, 0x2, 0x40, 0x7, 0x78, 0x0, 0x1, 0x2, 0x2, 0x6, 0x3A, 0x0, 0x1, 0x2, 0x33, 0x5, 0xA, 0x0, 0x1, 0x2, 0x23, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x4E, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x37, 0x7, 0x79, 0x0, 0x1, 0x2, 0x8C, 0x7, 0x86, 0x0, 0x1, 0x2, 0x5E, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x8D, 0x6, 0x47, 0x0, 0x1, 0x2, 0xAC, 0x7, 0xC4, 0x0, 0x1, 0x2, 0x15, 0x6, 0x79, 0x0, 0x1, 0x2, 0x3A, 0x7, 0x87, 0x0, 0x1, 0x2, 0xC, 0x7, 0x86, 0x0, 0x1, 0x2, 0x3B, 0x6, 0x48, 0x0, 0x1, 0x2, 0xD, 0x6, 0x47, 0x0, 0x1, 0x2, 0x2B, 0x7, 0xA9, 0x0, 0x1, 0x2, 0x73, 0x7, 0x93, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x55, 0x0, 0x1, 0x2, 0x72, 0x7, 0x8B, 0x0, 0x1, 0x1, 0xDF, 0x7, 0xFD, 0x0, 0x1, 0x2, 0xA9, 0x7, 0x85, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x3A, 0x0, 0x1, 0x2, 0xCC, 0x7, 0x87, 0x0, 0x1, 0x2, 0x1, 0x7, 0xA7, 0x0, 0x1, 0x2, 0xCD, 0x7, 0x75, 0x0, 0x1, 0x2, 0x2, 0x7, 0x95, 0x0, 0x1, 0x2, 0xCD, 0x6, 0x48, 0x0, 0x1, 0x2, 0x59, 0x7, 0xB0, 0x0, 0x1, 0x2, 0x57, 0x7, 0xB6, 0x0, 0x1, 0x2, 0x59, 0x6, 0x41, 0x0, 0x1, 0x2, 0x57, 0x6, 0x47, 0x0, 0x1, 0x1, 0x14, 0x7, 0x70, 0x0, 0x1, 0x1, 0x6, 0x7, 0xCB, 0x0, 0x1, 0x1, 0x14, 0x6, 0x40, 0x0, 0x1, 0x1, 0x6, 0x6, 0x9B, 0x0, 0x1, 0x3, 0x7A, 0x7, 0x7F, 0x0, 0x1, 0x3, 0x8B, 0x6, 0x49, 0x0, 0x1, 0x3, 0x7B, 0x6, 0x40, 0x0, 0x1, 0x3, 0x8C, 0x5, 0xA, 0x0, 0x1, 0x2, 0xD5, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x3D, 0x6, 0x49, 0x0, 0x1, 0x2, 0x3E, 0x5, 0xA, 0x0, 0x1, 0x2, 0x40, 0x7, 0xCE, 0x0, 0x1, 0x2, 0x40, 0x7, 0x8B, 0x0, 0x1, 0x2, 0x40, 0x7, 0xA9, 0x0, 0x1, 0x2, 0x5E, 0x7, 0xBB, 0x0, 0x1, 0x2, 0x88, 0x6, 0x6F, 0x0, 0x1, 0x2, 0x5D, 0x7, 0x8B, 0x0, 0x1, 0x2, 0x87, 0x6, 0x3F, 0x0, 0x1, 0x2, 0x5B, 0x7, 0x7F, 0x0, 0x1, 0x1, 0x98, 0x6, 0x49, 0x0, 0x1, 0x2, 0x5C, 0x7, 0x70, 0x0, 0x1, 0x1, 0x99, 0x6, 0x3A, 0x0, 0x1, 0x2, 0x5C, 0x6, 0x40, 0x0, 0x1, 0x1, 0x99, 0x5, 0xA, 0x0, 0x1, 0x2, 0x25, 0x5, 0xA, 0x0, 0x1, 0x2, 0x24, 0x7, 0xB8, 0x0, 0x1, 0x2, 0x7A, 0x6, 0x40, 0x0, 0x1, 0x2, 0x25, 0x7, 0xA7, 0x0, 0x1, 0x2, 0x79, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x24, 0x6, 0x49, 0x0, 0x1, 0x2, 0x6B, 0x7, 0x7F, 0x0, 0x1, 0x1, 0x45, 0x7, 0x3, 0x0, 0x1, 0x2, 0x6C, 0x6, 0x40, 0x0, 0x1, 0x1, 0x46, 0x5, 0xC4, 0x0, 0x1, 0x2, 0x39, 0x5, 0xA, 0x0, 0x1, 0x2, 0x39, 0x7, 0xCE, 0x0, 0x1, 0x2, 0x9B, 0x6, 0x40, 0x0, 0x1, 0x2, 0x39, 0x7, 0x66, 0x0, 0x1, 0x2, 0x99, 0x7, 0xA1, 0x0, 0x1, 0x2, 0x1, 0x6, 0x55, 0x0, 0x1, 0x2, 0x99, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x1, 0x5, 0x0, 0x0, 0x1, 0x3, 0x91, 0x7, 0x7F, 0x0, 0x1, 0x2, 0xF4, 0x6, 0x49, 0x0, 0x1, 0x3, 0x92, 0x6, 0x40, 0x0, 0x1, 0x2, 0xF5, 0x5, 0xA, 0x0, 0x1, 0x2, 0x86, 0x7, 0x8B, 0x0, 0x1, 0x2, 0x3, 0x6, 0x3F, 0x0, 0x1, 0x2, 0x87, 0x7, 0x79, 0x0, 0x1, 0x2, 0x4, 0x6, 0x2D, 0x0, 0x1, 0x2, 0x72, 0x7, 0x7F, 0x0, 0x1, 0x2, 0x1, 0x6, 0x49, 0x0, 0x1, 0x2, 0x6F, 0x7, 0x9E, 0x0, 0x1, 0x2, 0x7, 0x6, 0x68, 0x0, 0x1, 0x2, 0x6F, 0x6, 0x40, 0x0, 0x1, 0x2, 0x2, 0x6, 0x68, 0x0, 0x1, 0x1, 0x46, 0x6, 0xF1, 0x0, 0x1, 0x2, 0xF5, 0x6, 0xAB, 0x0, 0x1, 0x2, 0x2, 0x6, 0xAB, 0x0, 0x1, 0x2, 0x6F, 0x6, 0x55, 0x0, 0x1, 0x2, 0x6F, 0x6, 0x3A, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x8B, 0x0, 0x1, 0x2, 0xAD, 0x7, 0x70, 0x0, 0x1, 0x1, 0x2E, 0x6, 0x40, 0x0, 0x1, 0x1, 0x2E, 0x6, 0x25, 0x0, 0x1, 0x1, 0x21, 0x7, 0x93, 0x0, 0x1, 0x1, 0x21, 0x7, 0x78, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x47, 0x0, 0x1, 0x2, 0x2B, 0x6, 0x2C, 0x0, 0x1, 0x2, 0x73, 0x7, 0x8B, 0x0, 0x1, 0x2, 0x73, 0x7, 0x70, 0x0, 0x1, 0x2, 0x1C, 0x5, 0x28, 0x0, 0x1, 0x2, 0x2, 0x5, 0x28, 0x0, 0x1, 0x2, 0x70, 0x5, 0x28, 0x0, 0x1, 0x2, 0x19, 0x6, 0x55, 0x0, 0x1, 0x2, 0x21, 0x6, 0x55, 0x0, 0x1, 0x2, 0xF, 0x6, 0x97, 0x0, 0x1, 0x0, 0xFF, 0x5, 0x28, 0x0, 0x1, 0x0, 0xFF, 0x6, 0x55, 0x0, 0x1, 0x2, 0x2, 0x6, 0x97, 0x0, 0x1, 0x2, 0x31, 0x6, 0x73, 0x0, 0x1, 0x2, 0xE, 0x5, 0x28, 0x0, 0x1, 0x2, 0xF, 0x5, 0x28, 0x0, 0x1, 0x2, 0x71, 0x6, 0x73, 0x0, 0x1, 0x2, 0xFE, 0x5, 0x28, 0x0, 0x1, 0x2, 0x32, 0x5, 0x28, 0x0, 0x1, 0x2, 0x1B, 0x5, 0x28, 0x0, 0x1, 0x2, 0x26, 0x5, 0x28, 0x0, 0x1, 0x2, 0xB, 0x5, 0x28, 0x0, 0x1, 0x2, 0x65, 0x5, 0x28, 0x0, 0x1, 0x2, 0x4F, 0x5, 0x28, 0x0, 0x1, 0x2, 0x19, 0x5, 0x28, 0x0, 0x1, 0x2, 0x71, 0x6, 0x58, 0x0, 0x1, 0x2, 0x31, 0x6, 0x58, 0x0, 0x1, 0x2, 0xDE, 0x5, 0x28, 0x0, 0x1, 0x3, 0x6E, 0x6, 0x79, 0x0, 0x1, 0x2, 0x5F, 0x6, 0x97, 0x0, 0x1, 0x2, 0x2C, 0x5, 0x28, 0x0, 0x1, 0x3, 0x3, 0x6, 0x97, 0x0, 0x1, 0x3, 0x3, 0x6, 0x55, 0x0, 0x1, 0x2, 0x19, 0x6, 0x97, 0x0, 0x1, 0x2, 0xAD, 0x6, 0x40, 0x0, 0x1, 0x2, 0x37, 0x5, 0xA, 0x0, 0x1, 0x2, 0x73, 0x6, 0x48, 0x0, 0x1, 0x2, 0x2B, 0x5, 0xA, 0x0, 0x1, 0x2, 0xC4, 0x6, 0x40, 0x0, 0x1, 0x2, 0x40, 0x5, 0xA, 0x0, 0x1, 0x2, 0x51, 0x5, 0x28, 0x0, 0x1, 0x2, 0x21, 0x5, 0x28, 0x0, 0x1, 0x2, 0x5F, 0x5, 0x28, 0x0, 0x1, 0x2, 0xC0, 0x7, 0xCD, 0x0, 0x1, 0x2, 0xC0, 0x7, 0xBC, 0x0, 0x1, 0x2, 0xC0, 0x7, 0xB3, 0x0, 0x1, 0x2, 0xC0, 0x7, 0x8B, 0x0, 0x1, 0x2, 0xC0, 0x7, 0xFF, 0x0, 0x1, 0x2, 0xC0, 0x7, 0x8E, 0x0, 0x1, 0x2, 0xC0, 0x7, 0xA9, 0x0, 0x1, 0x2, 0xD9, 0x7, 0xD5, 0x0, 0x1, 0x2, 0xD9, 0x7, 0x93, 0x0, 0x1, 0x2, 0xD9, 0x7, 0x96, 0x0, 0x1, 0x2, 0xD9, 0x7, 0xB1, 0x0, 0x1, 0x2, 0xD8, 0x7, 0xA5, 0x0, 0x1, 0x2, 0xD9, 0x7, 0xC4, 0x0, 0x1, 0x2, 0xDE, 0x7, 0xB3, 0x0, 0x1, 0x2, 0xDE, 0x7, 0xCD, 0x0, 0x1, 0x2, 0xDE, 0x7, 0xBC, 0x0, 0x1, 0x2, 0xD5, 0x7, 0xCD, 0x0, 0x1, 0x2, 0xD5, 0x7, 0x8B, 0x0, 0x1, 0x2, 0xD5, 0x7, 0xB3, 0x0, 0x1, 0x2, 0xD5, 0x7, 0x8E, 0x0, 0x1, 0x2, 0xD5, 0x7, 0xA9, 0x0, 0x1, 0x2, 0xD5, 0x7, 0xFF, 0x0, 0x1, 0x2, 0xD5, 0x7, 0xAF, 0x0, 0x1, 0x1, 0xC, 0x5, 0x3, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x42, 0xC6, 0x0, 0xC, 0x0, 0x1, 0x43, 0x88, 0x1, 0xFC, 0x0, 0x2, 0x0, 0x52, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1A, 0x0, 0x8C, 0x0, 0x97, 0x0, 0x34, 0x0, 0xA6, 0x0, 0xA7, 0x0, 0x40, 0x0, 0xAD, 0x0, 0xAD, 0x0, 0x42, 0x0, 0xB0, 0x0, 0xB0, 0x0, 0x43, 0x0, 0xB4, 0x0, 0xB5, 0x0, 0x44, 0x0, 0xBD, 0x0, 0xBD, 0x0, 0x46, 0x0, 0xC3, 0x0, 0xC4, 0x0, 0x47, 0x0, 0xC9, 0x0, 0xCA, 0x0, 0x49, 0x0, 0xDB, 0x0, 0xDC, 0x0, 0x4B, 0x0, 0xF2, 0x0, 0xF2, 0x0, 0x4D, 0x0, 0xF8, 0x0, 0xF9, 0x0, 0x4E, 0x0, 0xFD, 0x0, 0xFE, 0x0, 0x50, 0x1, 0x1, 0x1, 0x61, 0x0, 0x52, 0x2, 0x39, 0x2, 0x3A, 0x0, 0xB3, 0x2, 0x40, 0x2, 0x40, 0x0, 0xB5, 0x2, 0x4D, 0x2, 0x4D, 0x0, 0xB6, 0x2, 0x71, 0x2, 0x71, 0x0, 0xB7, 0x2, 0x73, 0x2, 0x73, 0x0, 0xB8, 0x2, 0x85, 0x2, 0x85, 0x0, 0xB9, 0x2, 0x88, 0x2, 0x88, 0x0, 0xBA, 0x2, 0xB7, 0x2, 0xB8, 0x0, 0xBB, 0x2, 0xD8, 0x2, 0xD9, 0x0, 0xBD, 0x2, 0xE3, 0x2, 0xE4, 0x0, 0xBF, 0x2, 0xEF, 0x2, 0xEF, 0x0, 0xC1, 0x2, 0xF9, 0x2, 0xF9, 0x0, 0xC2, 0x2, 0xFB, 0x2, 0xFB, 0x0, 0xC3, 0x3, 0x1, 0x3, 0x3, 0x0, 0xC4, 0x3, 0x5, 0x3, 0x5, 0x0, 0xC7, 0x3, 0x2F, 0x3, 0x3F, 0x0, 0xC8, 0x3, 0x43, 0x3, 0x44, 0x0, 0xD9, 0x3, 0x47, 0x3, 0x4B, 0x0, 0xDB, 0x3, 0x4F, 0x3, 0x5A, 0x0, 0xE0, 0x3, 0x9A, 0x3, 0xA6, 0x0, 0xEC, 0x3, 0xA8, 0x3, 0xA9, 0x0, 0xF9, 0x3, 0xAB, 0x3, 0xC9, 0x0, 0xFB, 0x4, 0x2B, 0x4, 0x2E, 0x1, 0x1A, 0x6, 0xEA, 0x6, 0xEA, 0x1, 0x1E, 0x7, 0x4E, 0x7, 0x62, 0x1, 0x1F, 0x7, 0x6F, 0x7, 0x6F, 0x1, 0x34, 0x7, 0x79, 0x7, 0x79, 0x1, 0x35, 0x7, 0x7C, 0x7, 0x7C, 0x1, 0x36, 0x7, 0x8D, 0x7, 0x8D, 0x1, 0x37, 0x7, 0x93, 0x7, 0x94, 0x1, 0x38, 0x7, 0xA6, 0x7, 0xA6, 0x1, 0x3A, 0x7, 0xA9, 0x7, 0xA9, 0x1, 0x3B, 0x7, 0xAB, 0x7, 0xAB, 0x1, 0x3C, 0x7, 0xAE, 0x7, 0xB1, 0x1, 0x3D, 0x7, 0xDE, 0x7, 0xE2, 0x1, 0x41, 0x7, 0xEE, 0x7, 0xF3, 0x1, 0x46, 0x7, 0xF5, 0x7, 0xF5, 0x1, 0x4C, 0x7, 0xF7, 0x7, 0xF8, 0x1, 0x4D, 0x7, 0xFA, 0x7, 0xFA, 0x1, 0x4F, 0x8, 0xAD, 0x8, 0xB0, 0x1, 0x50, 0x8, 0xB3, 0x8, 0xB8, 0x1, 0x54, 0x8, 0xC8, 0x9, 0x30, 0x1, 0x5A, 0x9, 0x33, 0x9, 0x33, 0x1, 0xC3, 0x9, 0x35, 0x9, 0x78, 0x1, 0xC4, 0x9, 0x7D, 0x9, 0xD4, 0x2, 0x8, 0xA, 0x12, 0xA, 0x13, 0x2, 0x60, 0xA, 0x16, 0xA, 0x17, 0x2, 0x62, 0xA, 0x19, 0xA, 0x19, 0x2, 0x64, 0xA, 0x1C, 0xA, 0x1D, 0x2, 0x65, 0xA, 0x22, 0xA, 0x29, 0x2, 0x67, 0xA, 0x2F, 0xA, 0x32, 0x2, 0x6F, 0xA, 0x6E, 0xA, 0xC5, 0x2, 0x73, 0xA, 0xE7, 0xA, 0xE7, 0x2, 0xCB, 0xA, 0xEE, 0xB, 0x2, 0x2, 0xCC, 0xB, 0x5, 0xB, 0xC, 0x2, 0xE1, 0xB, 0x10, 0xB, 0x3B, 0x2, 0xE9, 0xB, 0x4D, 0xB, 0xD7, 0x3, 0x15, 0xC, 0xB7, 0xC, 0xCE, 0x3, 0xA0, 0xC, 0xD0, 0xC, 0xD4, 0x3, 0xB8, 0xC, 0xD6, 0xC, 0xD7, 0x3, 0xBD, 0xC, 0xD9, 0xC, 0xD9, 0x3, 0xBF, 0xC, 0xDB, 0xC, 0xDD, 0x3, 0xC0, 0xC, 0xDF, 0xC, 0xE7, 0x3, 0xC3, 0xC, 0xEB, 0xC, 0xEB, 0x3, 0xCC, 0xC, 0xED, 0xC, 0xFC, 0x3, 0xCD, 0xD, 0x12, 0xD, 0x12, 0x3, 0xDD, 0xD, 0x1D, 0xD, 0x1E, 0x3, 0xDE, 0x3, 0xE0, 0xD, 0xE6, 0xD, 0xEC, 0xC, 0x8A, 0xE, 0x10, 0xE, 0x4C, 0x10, 0x92, 0xE, 0x82, 0xE, 0x9A, 0xD, 0xDA, 0xC, 0x9C, 0xE, 0xB2, 0xD, 0xEC, 0xE, 0xF4, 0xF, 0xC, 0xF, 0x3C, 0xF, 0x48, 0x7, 0xC2, 0xF, 0x54, 0xF, 0x78, 0xF, 0x90, 0xF, 0xDE, 0xF, 0xEA, 0x10, 0x2, 0x10, 0x14, 0x10, 0x20, 0x10, 0x26, 0x10, 0x62, 0xD, 0xF2, 0xD, 0x5C, 0xE, 0x16, 0xE, 0x52, 0xE, 0x7C, 0xE, 0x88, 0xE, 0xA0, 0xD, 0xE0, 0xC, 0x42, 0xE, 0xB8, 0xD, 0xE0, 0xE, 0xFA, 0xF, 0x12, 0xF, 0x42, 0xF, 0x4E, 0x7, 0xC8, 0xF, 0x5A, 0xF, 0x7E, 0x10, 0x50, 0xF, 0xE4, 0xF, 0xF0, 0x10, 0x56, 0x10, 0x1A, 0x10, 0x5C, 0x10, 0x2C, 0xE, 0x16, 0x7, 0xCE, 0xD, 0xE0, 0x7, 0xD4, 0xD, 0xEC, 0x7, 0xDA, 0xF, 0xC, 0xF, 0x12, 0x7, 0xE0, 0x7, 0xE6, 0xD, 0xE0, 0xD, 0xF2, 0x7, 0xEC, 0x8, 0x7C, 0x7, 0xF2, 0x7, 0xF8, 0xD, 0x8C, 0xD, 0x92, 0x7, 0xFE, 0xD, 0xB0, 0xF, 0xE4, 0x10, 0x26, 0x10, 0x2C, 0x8, 0x4, 0x8, 0xA, 0xD, 0xEC, 0x8, 0x10, 0x8, 0x16, 0xC, 0x9C, 0x8, 0x1C, 0xF, 0x54, 0x8, 0x22, 0x8, 0x28, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x3A, 0x8, 0x40, 0x8, 0x46, 0x8, 0x4C, 0x8, 0x52, 0x8, 0x58, 0xE, 0x16, 0x8, 0x5E, 0xD, 0xD4, 0xD, 0xD4, 0xF, 0xE4, 0x8, 0x64, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x70, 0x8, 0x76, 0x8, 0x76, 0x8, 0x7C, 0xB, 0x4C, 0x8, 0x82, 0xB, 0xB2, 0xA, 0x2C, 0xB, 0x4C, 0xB, 0x34, 0x8, 0x88, 0x8, 0x8E, 0x8, 0x94, 0xA, 0xC8, 0x8, 0x9A, 0x8, 0xA0, 0x8, 0xA6, 0x8, 0xAC, 0x8, 0xB2, 0x8, 0xB8, 0x8, 0xBE, 0x8, 0xC4, 0x8, 0xCA, 0x8, 0xD0, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xDC, 0x8, 0xE2, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xEE, 0x8, 0xF4, 0x8, 0xFA, 0x9, 0x0, 0x9, 0x6, 0x9, 0xC, 0x9, 0xC, 0x9, 0x12, 0x9, 0x18, 0xB, 0xA, 0x9, 0x1E, 0x9, 0x24, 0xA, 0x9E, 0x9, 0x2A, 0x9, 0x72, 0xA, 0x62, 0x9, 0xAE, 0x9, 0x30, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x42, 0x9, 0x42, 0x9, 0x48, 0xA, 0x8C, 0x9, 0x4E, 0xB, 0xD6, 0x9, 0x54, 0x9, 0x5A, 0x9, 0x60, 0x9, 0x66, 0xB, 0x88, 0x9, 0x6C, 0xB, 0x9A, 0x9, 0x72, 0xF, 0xE4, 0x9, 0x78, 0x9, 0x7E, 0x9, 0x84, 0x9, 0x8A, 0xB, 0x94, 0x9, 0x90, 0x9, 0x96, 0x9, 0x9C, 0x9, 0xA2, 0x9, 0xA8, 0x9, 0xAE, 0x9, 0xB4, 0x9, 0xB4, 0x9, 0xBA, 0x9, 0xC0, 0xD, 0xCE, 0x9, 0xC6, 0x9, 0xCC, 0x9, 0xD2, 0x9, 0xD8, 0x9, 0xDE, 0x9, 0xE4, 0x9, 0xEA, 0xC, 0x18, 0x9, 0xF0, 0x9, 0xF6, 0x9, 0xFC, 0xA, 0x2, 0xA, 0x8, 0xA, 0xE, 0xA, 0x1A, 0xA, 0x14, 0xD, 0xEC, 0xA, 0x1A, 0xA, 0xC8, 0x10, 0xD4, 0xA, 0x20, 0xA, 0x26, 0xA, 0x2C, 0xA, 0x32, 0xA, 0x38, 0xA, 0x3E, 0xA, 0x44, 0xA, 0x4A, 0xA, 0x50, 0xA, 0x56, 0xA, 0x5C, 0xA, 0x62, 0xA, 0x68, 0xA, 0x6E, 0xA, 0x74, 0xA, 0x7A, 0xA, 0x80, 0xA, 0x86, 0xA, 0x8C, 0xA, 0x92, 0xA, 0x98, 0xA, 0x9E, 0xA, 0xA4, 0xA, 0xAA, 0xA, 0xB0, 0xA, 0xC2, 0xA, 0xB6, 0xA, 0xBC, 0xA, 0xC2, 0xA, 0xC8, 0xA, 0xCE, 0xA, 0xD4, 0xA, 0xDA, 0xA, 0xE0, 0xA, 0xE6, 0xA, 0xEC, 0xA, 0xF2, 0xA, 0xF8, 0xA, 0xFE, 0xD, 0x8C, 0xB, 0x4, 0xB, 0xA, 0xB, 0xA, 0xB, 0x10, 0xB, 0x16, 0xB, 0x1C, 0xB, 0x22, 0xB, 0x28, 0xB, 0x2E, 0xB, 0x34, 0xB, 0x3A, 0xD, 0x8C, 0xB, 0x40, 0xB, 0x46, 0xB, 0x4C, 0xB, 0x52, 0xE, 0x88, 0xB, 0x58, 0xB, 0x5E, 0xB, 0x64, 0xB, 0x6A, 0xB, 0x70, 0xB, 0x76, 0xB, 0x7C, 0xB, 0x82, 0xB, 0x88, 0xB, 0x8E, 0xB, 0x94, 0xB, 0x9A, 0xB, 0xA0, 0xB, 0xA6, 0xB, 0xAC, 0xB, 0xB2, 0xB, 0xB8, 0xB, 0xBE, 0xB, 0xC4, 0xB, 0xCA, 0xB, 0xD0, 0xB, 0xD6, 0xB, 0xDC, 0xB, 0xE2, 0xB, 0xE8, 0xB, 0xEE, 0xB, 0xF4, 0xB, 0xFA, 0x10, 0x6E, 0x10, 0xEC, 0x10, 0xB0, 0x10, 0xE6, 0xC, 0x0, 0xD, 0x56, 0x10, 0xAA, 0x10, 0x7A, 0xD, 0x3E, 0xC, 0x6, 0x10, 0xA4, 0x10, 0xDA, 0x10, 0x74, 0x10, 0x9E, 0xD, 0x2C, 0x10, 0x86, 0x10, 0xCE, 0x10, 0x80, 0x10, 0xBC, 0xD, 0xE, 0xC, 0xC, 0x10, 0x68, 0x10, 0xB6, 0xC, 0x12, 0xC, 0x18, 0x10, 0xC8, 0xC, 0x1E, 0x10, 0x98, 0xC, 0x24, 0xE, 0xB8, 0xD, 0x8, 0x10, 0xC2, 0x10, 0x92, 0x10, 0x8C, 0xC, 0x2A, 0xC, 0x30, 0xD, 0xE6, 0xC, 0x36, 0xC, 0x3C, 0xC, 0x42, 0xC, 0x5A, 0xC, 0x48, 0xC, 0x4E, 0xC, 0x60, 0xC, 0x54, 0xD, 0xE0, 0xC, 0x5A, 0xD, 0xE0, 0xC, 0x60, 0xE, 0x16, 0xC, 0x66, 0xC, 0x6C, 0xC, 0x72, 0xC, 0x78, 0x10, 0xD4, 0xC, 0x7E, 0x10, 0xDA, 0xC, 0x84, 0x10, 0x74, 0xE, 0x10, 0xE, 0x10, 0xE, 0xA0, 0xF, 0x90, 0x10, 0x50, 0xD, 0xE6, 0xD, 0xE6, 0xD, 0xE6, 0xD, 0xE6, 0xD, 0xE6, 0xD, 0xE6, 0xD, 0xE6, 0xE, 0x4, 0xE, 0x4C, 0xE, 0x4C, 0xE, 0x4C, 0xE, 0x4C, 0xD, 0xDA, 0xD, 0xDA, 0xD, 0xDA, 0xD, 0xDA, 0xF, 0xC, 0xF, 0x3C, 0xF, 0x3C, 0xF, 0x3C, 0xF, 0x3C, 0xF, 0x3C, 0xF, 0xDE, 0xF, 0xDE, 0xF, 0xDE, 0xF, 0xDE, 0x10, 0x20, 0x10, 0x62, 0x10, 0x62, 0x10, 0x62, 0x10, 0x62, 0x10, 0x62, 0x10, 0x62, 0x10, 0x62, 0xE, 0xA, 0xE, 0x52, 0xE, 0x52, 0xE, 0x52, 0xE, 0x52, 0xD, 0xE0, 0xD, 0xE0, 0xD, 0xE0, 0xD, 0xE0, 0xF, 0x12, 0xF, 0x42, 0xF, 0x42, 0xF, 0x42, 0xF, 0x42, 0xF, 0x42, 0xF, 0xE4, 0xF, 0xE4, 0xF, 0xE4, 0xF, 0xE4, 0x10, 0x5C, 0x10, 0x5C, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xC, 0x8A, 0xD, 0x5C, 0xC, 0x8A, 0xD, 0x5C, 0xC, 0x8A, 0xD, 0x5C, 0xC, 0x8A, 0xD, 0x5C, 0xE, 0x10, 0xE, 0x16, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x82, 0xE, 0x88, 0xE, 0x82, 0xE, 0x88, 0xE, 0x82, 0xE, 0x88, 0xC, 0x90, 0xE, 0x88, 0xE, 0x9A, 0xE, 0xA0, 0xD, 0xDA, 0xD, 0xE0, 0xD, 0xDA, 0xD, 0xE0, 0xD, 0xDA, 0xD, 0xE0, 0xC, 0x96, 0xD, 0xE0, 0xD, 0xDA, 0xC, 0x9C, 0xC, 0xA2, 0xC, 0xA8, 0xD, 0xEC, 0xD, 0xE0, 0xC, 0xAE, 0xC, 0xB4, 0xD, 0xEC, 0xD, 0xE0, 0xD, 0xEC, 0xD, 0xE0, 0xF, 0xC, 0xF, 0x12, 0xC, 0xBA, 0xC, 0xC0, 0xF, 0xC, 0xF, 0x12, 0xF, 0x12, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x54, 0xF, 0x5A, 0xC, 0xC6, 0xC, 0xCC, 0xF, 0x54, 0xF, 0x5A, 0xF, 0x78, 0xF, 0x7E, 0xF, 0x78, 0xF, 0x7E, 0xC, 0xD2, 0xC, 0xD8, 0xC, 0xDE, 0xC, 0xE4, 0xF, 0x78, 0xF, 0x7E, 0xC, 0xEA, 0xC, 0xF0, 0xC, 0xF6, 0xC, 0xFC, 0xF, 0x90, 0x10, 0x50, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0x10, 0x2, 0x10, 0x56, 0x10, 0x20, 0x10, 0x5C, 0x10, 0x20, 0x10, 0x26, 0x10, 0x2C, 0x10, 0x26, 0x10, 0x2C, 0x10, 0x26, 0x10, 0x2C, 0xD, 0x8, 0xD, 0x8, 0x10, 0xAA, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0xD, 0x2, 0x10, 0x98, 0x10, 0x98, 0x10, 0x98, 0x10, 0x98, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x74, 0x10, 0xDA, 0x10, 0xDA, 0x10, 0xDA, 0x10, 0xDA, 0x10, 0xDA, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0x10, 0xEC, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0x8C, 0x10, 0xC2, 0x10, 0xC2, 0x10, 0xC2, 0x10, 0xC2, 0xD, 0x8, 0x10, 0x98, 0x10, 0x98, 0x10, 0x98, 0x10, 0x98, 0x10, 0x98, 0xD, 0xE, 0xD, 0xE, 0xD, 0xE, 0xD, 0x14, 0x10, 0xBC, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0xD, 0x1A, 0x10, 0x80, 0x10, 0xCE, 0xD, 0x20, 0xD, 0x2C, 0xD, 0x26, 0xD, 0x2C, 0xD, 0x2C, 0x10, 0x74, 0xD, 0x32, 0x10, 0x74, 0x10, 0xDA, 0x10, 0xDA, 0x10, 0xDA, 0x11, 0x22, 0xD, 0x3E, 0xD, 0x38, 0xD, 0x3E, 0x10, 0x7A, 0x10, 0x7A, 0xD, 0x44, 0x10, 0x7A, 0xD, 0x4A, 0x10, 0xAA, 0xD, 0x50, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0xD, 0x56, 0x10, 0xE6, 0x10, 0xEC, 0x10, 0xEC, 0x10, 0x6E, 0x10, 0x6E, 0x10, 0x6E, 0x10, 0x62, 0xE, 0x52, 0xF, 0x4E, 0xD, 0x5C, 0x10, 0x1A, 0xF, 0x7E, 0xD, 0xE0, 0x10, 0x2, 0x10, 0x56, 0x10, 0x2, 0x10, 0x56, 0x10, 0x2, 0x10, 0x56, 0x10, 0x20, 0x10, 0x5C, 0xE, 0xF4, 0xE, 0xFA, 0xD, 0xE6, 0x10, 0x62, 0xD, 0x62, 0xD, 0x68, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0x62, 0xD, 0x68, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xD, 0x62, 0xD, 0x68, 0xD, 0x6E, 0xD, 0x74, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xD, 0x6E, 0xD, 0x74, 0xD, 0xDA, 0xD, 0xE0, 0xD, 0x7A, 0x11, 0x34, 0xD, 0x80, 0xD, 0x86, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xD, 0x80, 0xD, 0x86, 0xD, 0x8C, 0xD, 0x92, 0xD, 0x8C, 0xD, 0x92, 0xD, 0x8C, 0xD, 0x92, 0xD, 0x8C, 0xD, 0x92, 0xD, 0x98, 0xD, 0x9E, 0xD, 0xA4, 0xD, 0xAA, 0xF, 0xDE, 0xF, 0xE4, 0xD, 0xB0, 0xF, 0xE4, 0xD, 0xB0, 0xF, 0xE4, 0xD, 0xB0, 0xF, 0xE4, 0xD, 0xB0, 0xF, 0xE4, 0xD, 0xB6, 0xD, 0xBC, 0xD, 0xC2, 0xD, 0xC8, 0x10, 0x20, 0x10, 0x5C, 0x10, 0x20, 0x10, 0x5C, 0xD, 0xCE, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xDA, 0xD, 0xE0, 0xF, 0x3C, 0xF, 0x42, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xD, 0xD4, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xE, 0x82, 0xE, 0x88, 0xE, 0xB2, 0xE, 0xB8, 0x11, 0xA, 0x11, 0x10, 0x11, 0xA, 0x11, 0x10, 0xE, 0x82, 0xE, 0x88, 0xF, 0xC, 0xF, 0x12, 0xD, 0xE6, 0x10, 0x62, 0xD, 0xE6, 0x10, 0x62, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xD, 0xDA, 0xD, 0xE0, 0xD, 0xDA, 0xD, 0xE0, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x54, 0xF, 0x5A, 0xF, 0x54, 0xF, 0x5A, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xE, 0x9A, 0xE, 0xA0, 0xD, 0xE6, 0x10, 0x62, 0xE, 0x70, 0xE, 0x76, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0x10, 0x20, 0x10, 0x5C, 0xD, 0xEC, 0xD, 0xF2, 0xE, 0xD6, 0xD, 0xF8, 0xE, 0xDC, 0xD, 0xFE, 0xE, 0x4, 0xE, 0xA, 0xE, 0x10, 0xE, 0x16, 0xE, 0x1C, 0xE, 0x22, 0xE, 0x28, 0xE, 0x2E, 0xE, 0x34, 0xE, 0x3A, 0xE, 0x40, 0xE, 0x46, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x4C, 0xE, 0x52, 0xE, 0x58, 0xE, 0x5E, 0xE, 0x64, 0xE, 0x6A, 0xE, 0x70, 0xE, 0x76, 0x10, 0x92, 0xE, 0x7C, 0xE, 0x82, 0xE, 0x88, 0xE, 0x9A, 0xE, 0xA0, 0xE, 0x8E, 0xE, 0x94, 0xE, 0x9A, 0xE, 0xA0, 0xE, 0xA6, 0xE, 0xAC, 0xE, 0xB2, 0xE, 0xB8, 0xE, 0xBE, 0xE, 0xC4, 0xE, 0xCA, 0xE, 0xD0, 0xE, 0xD6, 0x11, 0x34, 0xE, 0xD6, 0x11, 0x34, 0xE, 0xDC, 0xE, 0xE2, 0xE, 0xE8, 0xE, 0xEE, 0xE, 0xF4, 0xE, 0xFA, 0xF, 0x0, 0xF, 0x6, 0xF, 0xC, 0xF, 0x12, 0xF, 0x18, 0xF, 0x1E, 0xF, 0x24, 0xF, 0x2A, 0xF, 0x30, 0xF, 0x36, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x3C, 0xF, 0x42, 0xF, 0x48, 0xF, 0x4E, 0xF, 0x48, 0xF, 0x4E, 0xF, 0x54, 0xF, 0x5A, 0xF, 0x60, 0xF, 0x66, 0xF, 0x60, 0xF, 0x66, 0xF, 0x6C, 0xF, 0x72, 0xF, 0x78, 0xF, 0x7E, 0xF, 0x84, 0xF, 0x8A, 0xF, 0x78, 0xF, 0x7E, 0xF, 0x78, 0xF, 0x7E, 0xF, 0x84, 0xF, 0x8A, 0xF, 0x90, 0x10, 0x50, 0xF, 0x96, 0xF, 0x9C, 0xF, 0xA2, 0xF, 0xA8, 0xF, 0xAE, 0xF, 0xB4, 0xF, 0xBA, 0xF, 0xC0, 0xF, 0xC6, 0xF, 0xCC, 0xF, 0xD2, 0xF, 0xD8, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xDE, 0xF, 0xE4, 0xF, 0xEA, 0xF, 0xF0, 0xF, 0xF6, 0xF, 0xFC, 0x10, 0x2, 0x10, 0x56, 0x10, 0x8, 0x10, 0xE, 0x10, 0x14, 0x10, 0x1A, 0x10, 0x14, 0x10, 0x1A, 0x10, 0x20, 0x10, 0x5C, 0x10, 0x26, 0x10, 0x2C, 0x10, 0x32, 0x10, 0x38, 0x10, 0x3E, 0x10, 0x44, 0x10, 0x4A, 0x10, 0x50, 0x10, 0x56, 0x10, 0x5C, 0x10, 0x62, 0x10, 0x8C, 0x10, 0x98, 0x10, 0xBC, 0x10, 0x80, 0x10, 0xDA, 0x10, 0xEC, 0x10, 0x68, 0x10, 0x8C, 0x10, 0x92, 0x10, 0x98, 0x10, 0x6E, 0x10, 0xBC, 0x10, 0x80, 0x10, 0x86, 0x10, 0x9E, 0x10, 0x74, 0x10, 0xDA, 0x10, 0xA4, 0x10, 0xAA, 0x10, 0xEC, 0x10, 0xB0, 0x10, 0x80, 0x10, 0xEC, 0x10, 0x98, 0x10, 0x7A, 0x10, 0x80, 0x10, 0x80, 0x10, 0xCE, 0x10, 0x86, 0x10, 0x8C, 0x10, 0x92, 0x10, 0x98, 0x10, 0x9E, 0x10, 0xBC, 0x10, 0xDA, 0x10, 0xA4, 0x10, 0xC2, 0x10, 0xAA, 0x10, 0xB0, 0x10, 0xB6, 0x10, 0xBC, 0x10, 0xC2, 0x10, 0xEC, 0x10, 0xC8, 0x10, 0xCE, 0x10, 0xD4, 0x10, 0xDA, 0x10, 0xE0, 0x10, 0xE6, 0x10, 0xE6, 0x10, 0xE6, 0x10, 0xEC, 0x10, 0xF2, 0x10, 0xF8, 0x10, 0xFE, 0x11, 0x4, 0x11, 0xA, 0x11, 0x10, 0x11, 0x16, 0x11, 0x1C, 0x11, 0x22, 0x11, 0x28, 0x11, 0x2E, 0x11, 0x34, 0x0, 0x1, 0x2, 0xBA, 0xFF, 0xF6, 0x0, 0x1, 0x3, 0x8C, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xDF, 0x0, 0xA, 0x0, 0x1, 0x2, 0x54, 0x0, 0xA, 0x0, 0x1, 0x1, 0x28, 0x0, 0xA, 0x0, 0x1, 0x3, 0xC9, 0x0, 0x0, 0x0, 0x1, 0x3, 0xA7, 0xFF, 0xFC, 0x0, 0x1, 0x2, 0xB8, 0x0, 0x0, 0x0, 0x1, 0x1, 0x63, 0x0, 0x7, 0x0, 0x1, 0x1, 0x63, 0x0, 0xA, 0x0, 0x1, 0x2, 0x4A, 0x0, 0xA, 0x0, 0x1, 0x2, 0xB0, 0xFF, 0xF9, 0x0, 0x1, 0x2, 0x33, 0xFE, 0x19, 0x0, 0x1, 0x2, 0x86, 0x0, 0xA, 0x0, 0x1, 0x3, 0x22, 0x0, 0x0, 0x0, 0x1, 0x1, 0x5A, 0xFE, 0x35, 0x0, 0x1, 0x1, 0x50, 0x0, 0xA, 0x0, 0x1, 0x2, 0xCB, 0x0, 0x10, 0x0, 0x1, 0x3, 0xC, 0xFF, 0x79, 0x0, 0x1, 0x2, 0x2A, 0x0, 0x0, 0x0, 0x1, 0x2, 0x1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x65, 0x0, 0x0, 0x0, 0x1, 0x2, 0x74, 0xFF, 0xFC, 0x0, 0x1, 0x1, 0xF5, 0x0, 0x0, 0x0, 0x1, 0x2, 0x4E, 0x0, 0x0, 0x0, 0x1, 0x2, 0x5D, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xF2, 0x0, 0x0, 0x0, 0x1, 0x2, 0x23, 0x0, 0x0, 0x0, 0x1, 0x2, 0x25, 0x0, 0x0, 0x0, 0x1, 0x1, 0x89, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x2B, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x72, 0x0, 0x0, 0x0, 0x1, 0x2, 0x90, 0x0, 0x0, 0x0, 0x1, 0x0, 0xF1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x6A, 0x0, 0x0, 0x0, 0x1, 0x1, 0x7E, 0x0, 0x0, 0x0, 0x1, 0x1, 0x31, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x75, 0xFE, 0x41, 0x0, 0x1, 0x3, 0x80, 0x0, 0x0, 0x0, 0x1, 0x3, 0x80, 0xFE, 0x41, 0x0, 0x1, 0x3, 0x85, 0xFE, 0x41, 0x0, 0x1, 0x2, 0xA2, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x3E, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x42, 0x0, 0x0, 0x0, 0x1, 0x3, 0x8E, 0x0, 0x0, 0x0, 0x1, 0x3, 0x48, 0x0, 0x0, 0x0, 0x1, 0x2, 0x6A, 0xFE, 0x41, 0x0, 0x1, 0x0, 0xE8, 0x0, 0x0, 0x0, 0x1, 0x0, 0xE8, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xED, 0xFE, 0x41, 0x0, 0x1, 0x0, 0xFA, 0x0, 0x0, 0x0, 0x1, 0x1, 0x75, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x1B, 0x0, 0x0, 0x0, 0x1, 0x2, 0x50, 0x0, 0x0, 0x0, 0x1, 0x2, 0x17, 0xFE, 0x41, 0x0, 0x1, 0x0, 0xD4, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x64, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x66, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xB6, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x9C, 0x0, 0x0, 0x0, 0x1, 0x2, 0x30, 0x0, 0x0, 0x0, 0x1, 0x2, 0x1E, 0x0, 0x0, 0x0, 0x1, 0x1, 0xF4, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xEC, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x3A, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xF9, 0x0, 0x0, 0x0, 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x2, 0xC2, 0x0, 0x0, 0x0, 0x1, 0x2, 0x17, 0x0, 0x0, 0x0, 0x1, 0x2, 0x5C, 0x0, 0x0, 0x0, 0x1, 0x2, 0x49, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x1A, 0x0, 0x0, 0x0, 0x1, 0x1, 0xFA, 0x0, 0x0, 0x0, 0x1, 0x5, 0xA4, 0x0, 0x0, 0x0, 0x1, 0x5, 0xB, 0xFE, 0x41, 0x0, 0x1, 0x5, 0x85, 0xFE, 0x41, 0x0, 0x1, 0x3, 0xCD, 0x0, 0x0, 0x0, 0x1, 0x4, 0x47, 0x0, 0x0, 0x0, 0x1, 0x4, 0xA9, 0xFE, 0x41, 0x0, 0x1, 0x3, 0x66, 0x0, 0x0, 0x0, 0x1, 0x3, 0x19, 0x0, 0x0, 0x0, 0x1, 0x1, 0xE3, 0x0, 0x0, 0x0, 0x1, 0x1, 0xEE, 0x0, 0x0, 0x0, 0x1, 0x2, 0xAC, 0xFE, 0x41, 0x0, 0x1, 0x2, 0xA9, 0x0, 0xA, 0x0, 0x1, 0x2, 0x12, 0xFF, 0xF6, 0x0, 0x1, 0x3, 0x4A, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x67, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0xCB, 0x0, 0xA, 0x0, 0x1, 0x2, 0xE, 0xFF, 0xF7, 0x0, 0x1, 0x2, 0x29, 0x0, 0xA, 0x0, 0x1, 0x2, 0x9A, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x47, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x4D, 0xFF, 0xF6, 0x0, 0x1, 0x3, 0xC1, 0xFF, 0xFE, 0x0, 0x1, 0x2, 0xC9, 0x0, 0x3, 0x0, 0x1, 0x2, 0xA2, 0x0, 0x0, 0x0, 0x1, 0x2, 0x5C, 0x0, 0xA, 0x0, 0x1, 0x1, 0x11, 0x0, 0xA, 0x0, 0x1, 0x2, 0x21, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0xA4, 0xFF, 0xF6, 0x0, 0x1, 0x3, 0x4D, 0x0, 0x0, 0x0, 0x1, 0x2, 0x71, 0x0, 0x0, 0x0, 0x1, 0x2, 0x3D, 0x0, 0x0, 0x0, 0x1, 0x2, 0x44, 0x0, 0x0, 0x0, 0x1, 0x2, 0xA7, 0x0, 0x0, 0x0, 0x1, 0x2, 0x4B, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF, 0x0, 0x0, 0x0, 0x1, 0x1, 0x5, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xD2, 0x0, 0x0, 0x0, 0x1, 0x2, 0xB, 0x0, 0x0, 0x0, 0x1, 0x2, 0x24, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF6, 0x0, 0x0, 0x0, 0x1, 0x2, 0x54, 0x0, 0x0, 0x0, 0x1, 0x2, 0x4D, 0x0, 0x0, 0x0, 0x1, 0x1, 0xF6, 0x0, 0x0, 0x0, 0x1, 0x3, 0x73, 0x0, 0x0, 0x0, 0x1, 0x1, 0xF3, 0x0, 0x0, 0x0, 0x1, 0x2, 0x4A, 0x0, 0x0, 0x0, 0x1, 0x2, 0x34, 0x0, 0x0, 0x0, 0x1, 0x2, 0x3F, 0x0, 0x0, 0x0, 0x1, 0x1, 0xFB, 0x0, 0x0, 0x0, 0x1, 0x2, 0x79, 0x0, 0x0, 0x0, 0x1, 0x1, 0xFE, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF8, 0x0, 0x0, 0x0, 0x1, 0x1, 0xEA, 0x0, 0x0, 0x0, 0x1, 0x2, 0xD, 0x0, 0x0, 0x0, 0x1, 0x2, 0x67, 0x0, 0x0, 0x0, 0x1, 0x2, 0x7, 0x0, 0x0, 0x0, 0x1, 0x2, 0x4F, 0x0, 0x0, 0x0, 0x1, 0x2, 0x56, 0x0, 0x0, 0x0, 0x1, 0x2, 0x5B, 0x0, 0x0, 0x0, 0x1, 0x2, 0xB1, 0x0, 0x0, 0x0, 0x1, 0x2, 0x78, 0x0, 0x0, 0x0, 0x1, 0x3, 0x4E, 0x0, 0x0, 0x0, 0x1, 0x2, 0xFB, 0x0, 0x0, 0x0, 0x1, 0x2, 0x14, 0x0, 0x0, 0x0, 0x1, 0x1, 0xAA, 0x0, 0x0, 0x0, 0x1, 0x3, 0xF7, 0x0, 0x0, 0x0, 0x1, 0x1, 0x69, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x75, 0x0, 0x0, 0x0, 0x1, 0x2, 0x36, 0x0, 0x0, 0x0, 0x1, 0x1, 0xF7, 0x0, 0x0, 0x0, 0x1, 0x2, 0x10, 0x0, 0x0, 0x0, 0x1, 0x2, 0x69, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x23, 0xFE, 0x41, 0x0, 0x1, 0x4, 0xAB, 0x0, 0x0, 0x0, 0x1, 0x1, 0x63, 0x0, 0x0, 0x0, 0x1, 0x1, 0x3A, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x76, 0x0, 0x0, 0x0, 0x1, 0x2, 0x81, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x3D, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x51, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x22, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x17, 0xFE, 0x41, 0x0, 0x1, 0x3, 0x83, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x88, 0xFE, 0x41, 0x0, 0x1, 0x0, 0xFD, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x1C, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x38, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xFD, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x5, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x7, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x30, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x33, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x18, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x4D, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x34, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x24, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x11, 0xFE, 0x41, 0x0, 0x1, 0x1, 0x9, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xFE, 0xFE, 0x41, 0x0, 0x1, 0x0, 0xEC, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x3B, 0xFE, 0x41, 0x0, 0x1, 0x2, 0x46, 0xFD, 0xDD, 0x0, 0x1, 0x1, 0x7F, 0x0, 0x7, 0x0, 0x1, 0x1, 0x7C, 0x0, 0xA, 0x0, 0x1, 0x1, 0x73, 0x0, 0x7, 0x0, 0x1, 0x1, 0x69, 0x0, 0xA, 0x0, 0x1, 0x3, 0x49, 0x0, 0x0, 0x0, 0x1, 0x2, 0x3B, 0x0, 0xA, 0x0, 0x1, 0x2, 0x5C, 0xFF, 0xF6, 0x0, 0x1, 0x1, 0xCF, 0x0, 0xA, 0x0, 0x1, 0x2, 0x5B, 0x0, 0xA, 0x0, 0x1, 0x2, 0xD7, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x52, 0x0, 0x0, 0x0, 0x1, 0x2, 0x72, 0x0, 0xA, 0x0, 0x1, 0x2, 0xDA, 0x0, 0x7, 0x0, 0x1, 0x2, 0xCE, 0x0, 0x0, 0x0, 0x1, 0x2, 0xEF, 0x0, 0xA, 0x0, 0x1, 0x4, 0x58, 0x0, 0xA, 0x0, 0x1, 0x0, 0xBE, 0xFE, 0x35, 0x0, 0x1, 0x1, 0x7A, 0xFE, 0x35, 0x0, 0x1, 0x1, 0x6A, 0x0, 0xA, 0x0, 0x1, 0x2, 0x43, 0xFE, 0x35, 0x0, 0x1, 0x1, 0x6, 0xFE, 0x35, 0x0, 0x1, 0x1, 0x11, 0xFE, 0x35, 0x0, 0x1, 0x2, 0x32, 0x0, 0xA, 0x0, 0x1, 0x2, 0xC4, 0xFE, 0x19, 0x0, 0x1, 0x3, 0x37, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x10, 0x0, 0x8, 0x0, 0x1, 0x1, 0xC6, 0x0, 0xA, 0x0, 0x1, 0x2, 0x7B, 0x0, 0xA, 0x0, 0x1, 0x2, 0xAA, 0xFF, 0xF9, 0x0, 0x1, 0x2, 0xD9, 0xFD, 0xF0, 0x0, 0x1, 0x1, 0x21, 0xFE, 0x59, 0x0, 0x1, 0x2, 0x0, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x92, 0xFE, 0x43, 0x0, 0x1, 0x2, 0x22, 0xFE, 0x2D, 0x0, 0x1, 0x2, 0x63, 0xFE, 0x1, 0x0, 0x1, 0x1, 0x6, 0xFE, 0x1, 0x0, 0x1, 0x2, 0xD1, 0xFD, 0xFE, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x1, 0x0, 0x1, 0x2, 0x64, 0xFE, 0x1, 0x0, 0x1, 0x1, 0x0, 0xFE, 0x1, 0x0, 0x1, 0x2, 0x7F, 0xFE, 0x3D, 0x0, 0x1, 0x2, 0x25, 0xFE, 0x33, 0x0, 0x1, 0x2, 0x7F, 0xFD, 0xF7, 0x0, 0x1, 0x2, 0x25, 0xFD, 0xED, 0x0, 0x1, 0x2, 0x6D, 0xFD, 0xFB, 0x0, 0x1, 0x1, 0xBE, 0xFD, 0xF7, 0x0, 0x1, 0x2, 0x6D, 0xFE, 0x41, 0x0, 0x1, 0x1, 0xBE, 0xFE, 0x3D, 0x0, 0x1, 0x2, 0x4C, 0xFE, 0x3C, 0x0, 0x1, 0x1, 0xCB, 0x0, 0xA, 0x0, 0x1, 0x2, 0x5F, 0xFF, 0xFF, 0x0, 0x1, 0x2, 0x5F, 0xFD, 0xF6, 0x0, 0x1, 0x0, 0xFF, 0xFE, 0x52, 0x0, 0x1, 0x2, 0x8, 0xFD, 0xFE, 0x0, 0x1, 0x2, 0x6, 0xFD, 0xFF, 0x0, 0x1, 0x2, 0x6, 0x0, 0x8, 0x0, 0x1, 0x2, 0x6E, 0xFD, 0xF8, 0x0, 0x1, 0x2, 0xE, 0xFD, 0xFF, 0x0, 0x1, 0x2, 0xE, 0x0, 0x8, 0x0, 0x1, 0x2, 0x31, 0xFE, 0x3D, 0x0, 0x1, 0x2, 0x1B, 0xFD, 0xFE, 0x0, 0x1, 0x2, 0x1B, 0xFE, 0x44, 0x0, 0x1, 0x2, 0x40, 0x0, 0x0, 0x0, 0x1, 0x2, 0x1E, 0xFF, 0xF9, 0x0, 0x1, 0x2, 0xB7, 0xFE, 0x94, 0x0, 0x1, 0x1, 0xE9, 0xFE, 0x99, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x91, 0x0, 0x1, 0x1, 0x21, 0xFE, 0x98, 0x0, 0x1, 0x2, 0xC7, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x47, 0xFE, 0x8D, 0x0, 0x1, 0x2, 0xB0, 0x0, 0x0, 0x0, 0x1, 0x2, 0x44, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0xB0, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x44, 0xFE, 0x87, 0x0, 0x1, 0x2, 0x9B, 0xFE, 0x91, 0x0, 0x1, 0x1, 0xEB, 0xFE, 0x91, 0x0, 0x1, 0x2, 0xC2, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0xC2, 0xFE, 0x87, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x6F, 0xFE, 0xA1, 0x0, 0x1, 0x2, 0xF0, 0xFE, 0xA, 0x0, 0x1, 0x0, 0xF8, 0x0, 0xA, 0x0, 0x1, 0x2, 0x3E, 0x0, 0x0, 0x0, 0x1, 0x1, 0x21, 0x0, 0x7, 0x0, 0x1, 0x1, 0x6, 0x0, 0xA, 0x0, 0x1, 0x2, 0xB7, 0x0, 0x3, 0x0, 0x1, 0x2, 0x63, 0x0, 0xA, 0x0, 0x1, 0x2, 0x74, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x87, 0x0, 0x1, 0x2, 0x75, 0xFE, 0xBE, 0x0, 0x1, 0x2, 0xAA, 0xFE, 0x36, 0x0, 0x1, 0x2, 0x1E, 0xFE, 0x36, 0x0, 0x1, 0x2, 0x3D, 0x0, 0xA, 0x0, 0x1, 0x2, 0x5D, 0x0, 0x0, 0x0, 0x1, 0x2, 0x3D, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x5D, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x3E, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0x5E, 0xFE, 0xC8, 0x0, 0x1, 0x2, 0x3D, 0xFE, 0x1, 0x0, 0x1, 0x2, 0x5D, 0xFD, 0xF7, 0x0, 0x1, 0x2, 0x3D, 0xFE, 0x7E, 0x0, 0x1, 0x2, 0x5D, 0xFE, 0x74, 0x0, 0x1, 0x2, 0x74, 0x0, 0xA, 0x0, 0x1, 0x2, 0x39, 0x0, 0x0, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x7E, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x74, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x63, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x59, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x47, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x3D, 0x0, 0x1, 0x1, 0x4A, 0x0, 0xA, 0x0, 0x1, 0x2, 0xD9, 0xFF, 0xF9, 0x0, 0x1, 0x2, 0x2A, 0xFE, 0x41, 0x0, 0x1, 0x2, 0xCF, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x4B, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0xCF, 0x0, 0xA, 0x0, 0x1, 0x2, 0x4B, 0x0, 0xA, 0x0, 0x1, 0x2, 0xCF, 0xFE, 0x94, 0x0, 0x1, 0x2, 0x4B, 0xFE, 0x94, 0x0, 0x1, 0x2, 0x92, 0x0, 0x4C, 0x0, 0x1, 0x2, 0x22, 0x0, 0x36, 0x0, 0x1, 0x2, 0x92, 0xFE, 0xDD, 0x0, 0x1, 0x2, 0x22, 0xFE, 0xC7, 0x0, 0x1, 0x2, 0x93, 0xFF, 0x14, 0x0, 0x1, 0x2, 0x23, 0xFE, 0xFE, 0x0, 0x1, 0x2, 0x63, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x64, 0xFE, 0xD2, 0x0, 0x1, 0x1, 0x7, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0x63, 0xFE, 0x7E, 0x0, 0x1, 0x1, 0x6, 0xFE, 0x7E, 0x0, 0x1, 0x3, 0x7F, 0x0, 0xA, 0x0, 0x1, 0x3, 0x83, 0x0, 0xA, 0x0, 0x1, 0x3, 0x7F, 0xFE, 0x9B, 0x0, 0x1, 0x3, 0x83, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0xD1, 0x0, 0x7, 0x0, 0x1, 0x2, 0x37, 0x0, 0xA, 0x0, 0x1, 0x2, 0xD1, 0xFE, 0x98, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0xD2, 0xFE, 0xCF, 0x0, 0x1, 0x2, 0x38, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0xD1, 0xFE, 0x7B, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x7E, 0x0, 0x1, 0x2, 0xC7, 0x0, 0x0, 0x0, 0x1, 0x2, 0x47, 0xFF, 0xFC, 0x0, 0x1, 0x2, 0x12, 0x0, 0xA, 0x0, 0x1, 0x0, 0xF4, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x64, 0x0, 0xA, 0x0, 0x1, 0x1, 0x0, 0x0, 0xA, 0x0, 0x1, 0x2, 0x64, 0xFE, 0x9B, 0x0, 0x1, 0x1, 0x0, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x65, 0xFE, 0xD2, 0x0, 0x1, 0x1, 0x1, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0x7F, 0x0, 0x0, 0x0, 0x1, 0x2, 0x25, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x7F, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x25, 0xFE, 0x87, 0x0, 0x1, 0x2, 0x6D, 0x0, 0x4, 0x0, 0x1, 0x2, 0x6D, 0xFE, 0x95, 0x0, 0x1, 0x1, 0xBE, 0xFE, 0x91, 0x0, 0x1, 0x2, 0x6E, 0xFE, 0xCC, 0x0, 0x1, 0x1, 0xBF, 0xFE, 0xC8, 0x0, 0x1, 0x2, 0x6D, 0xFE, 0x78, 0x0, 0x1, 0x1, 0xBE, 0xFE, 0x74, 0x0, 0x1, 0x2, 0x9B, 0xFE, 0x98, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x98, 0x0, 0x1, 0x2, 0x9B, 0xFE, 0x59, 0x0, 0x1, 0x2, 0x37, 0xFE, 0x59, 0x0, 0x1, 0x2, 0x9B, 0xFE, 0x74, 0x0, 0x1, 0x1, 0xEB, 0xFE, 0x74, 0x0, 0x1, 0x2, 0x9B, 0x0, 0x0, 0x0, 0x1, 0x2, 0x37, 0x0, 0x0, 0x0, 0x1, 0x2, 0x99, 0x0, 0xA, 0x0, 0x1, 0x2, 0x1, 0x0, 0xA, 0x0, 0x1, 0x2, 0x99, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x1, 0xFE, 0x9B, 0x0, 0x1, 0x3, 0x8F, 0x0, 0xA, 0x0, 0x1, 0x3, 0x8F, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0xF8, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x88, 0x0, 0xD, 0x0, 0x1, 0x2, 0x5, 0x0, 0xA, 0x0, 0x1, 0x2, 0x6F, 0x0, 0x10, 0x0, 0x1, 0x2, 0x6A, 0x0, 0xA, 0x0, 0x1, 0x2, 0xD, 0x0, 0xA, 0x0, 0x1, 0x2, 0x6A, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0xD, 0xFE, 0x9B, 0x0, 0x1, 0x2, 0x6B, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0xE, 0xFE, 0xD2, 0x0, 0x1, 0x2, 0x4C, 0xFE, 0xD2, 0x0, 0x1, 0x1, 0xBE, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF8, 0x0, 0xA, 0x0, 0x1, 0x2, 0xF0, 0xFF, 0x79, 0x0, 0x1, 0x1, 0xE9, 0x0, 0x8, 0x0, 0x1, 0x2, 0x76, 0x0, 0xA, 0x0, 0x1, 0x2, 0x1C, 0x0, 0xA, 0x0, 0x1, 0x2, 0x6E, 0x0, 0x1, 0x0, 0x1, 0x2, 0x31, 0x0, 0x0, 0x0, 0x1, 0x0, 0xFF, 0x0, 0x1, 0x0, 0x1, 0x2, 0x8, 0x0, 0x7, 0x0, 0x1, 0x2, 0x58, 0x0, 0x0, 0x0, 0x1, 0x2, 0x13, 0x0, 0xA, 0x0, 0x1, 0x2, 0x22, 0x0, 0x8, 0x0, 0x1, 0x2, 0xFE, 0x0, 0xA, 0x0, 0x1, 0x1, 0xE6, 0x0, 0xA, 0x0, 0x1, 0x2, 0x1B, 0x0, 0x7, 0x0, 0x1, 0x2, 0x26, 0x0, 0x8, 0x0, 0x1, 0x2, 0x6, 0xFF, 0xF6, 0x0, 0x1, 0x2, 0x65, 0x0, 0xA, 0x0, 0x1, 0x2, 0x4C, 0xFF, 0xFF, 0x0, 0x1, 0x3, 0xBA, 0xFF, 0xF6, 0x0, 0x1, 0x1, 0xD0, 0xFF, 0xF6, 0x0, 0x1, 0x3, 0x6E, 0x0, 0x0, 0x0, 0x1, 0x2, 0x6E, 0x0, 0x0, 0x0, 0x1, 0x2, 0x31, 0xFD, 0xF7, 0x0, 0x1, 0x3, 0x3, 0x0, 0xA, 0x0, 0x1, 0x2, 0x1E, 0x0, 0x15, 0x0, 0x1, 0x2, 0xB7, 0xFE, 0x55, 0x0, 0x1, 0x1, 0xE9, 0xFE, 0x5A, 0x0, 0x1, 0x2, 0x74, 0xFE, 0x5C, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x52, 0x0, 0x1, 0x2, 0xC7, 0xFE, 0x52, 0x0, 0x1, 0x2, 0x47, 0xFE, 0x4E, 0x0, 0x1, 0x2, 0x58, 0xFE, 0x52, 0x0, 0x1, 0x2, 0x22, 0xFE, 0x5A, 0x0, 0x1, 0x2, 0x6E, 0xFE, 0x52, 0x0, 0x1, 0x2, 0xDA, 0xFD, 0xFE, 0x0, 0x1, 0x1, 0x6, 0xFE, 0x63, 0x0, 0x1, 0x1, 0x6, 0xFE, 0x9B, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x18, 0x0, 0x1, 0x2, 0x56, 0x2, 0x80, 0x0, 0x1, 0x0, 0x4, 0x2, 0xE, 0x2, 0xF, 0x2, 0x11, 0x2, 0x12, 0x0, 0x2, 0x0, 0x5F, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1A, 0x0, 0x82, 0x0, 0x82, 0x0, 0x34, 0x0, 0x84, 0x0, 0x84, 0x0, 0x35, 0x0, 0x87, 0x0, 0x87, 0x0, 0x36, 0x0, 0x8A, 0x0, 0x8A, 0x0, 0x37, 0x0, 0x8C, 0x0, 0x8C, 0x0, 0x38, 0x0, 0x94, 0x0, 0x95, 0x0, 0x39, 0x2, 0xD2, 0x2, 0xD2, 0x0, 0x3B, 0x2, 0xDA, 0x2, 0xDB, 0x0, 0x3C, 0x2, 0xEB, 0x2, 0xEB, 0x0, 0x3E, 0x2, 0xED, 0x2, 0xED, 0x0, 0x3F, 0x2, 0xF4, 0x2, 0xF5, 0x0, 0x40, 0x3, 0x17, 0x3, 0x17, 0x0, 0x42, 0x4, 0x2B, 0x4, 0x2D, 0x0, 0x43, 0x5, 0x5D, 0x5, 0x5E, 0x0, 0x46, 0x6, 0xC7, 0x6, 0xC8, 0x0, 0x48, 0x7, 0x4E, 0x7, 0x62, 0x0, 0x4A, 0x7, 0xA6, 0x7, 0xA6, 0x0, 0x5F, 0x7, 0xAE, 0x7, 0xB1, 0x0, 0x60, 0x7, 0xDE, 0x7, 0xE2, 0x0, 0x64, 0x8, 0xAD, 0x8, 0xAD, 0x0, 0x69, 0x8, 0xB3, 0x8, 0xB3, 0x0, 0x6A, 0x8, 0xB5, 0x8, 0xB8, 0x0, 0x6B, 0x8, 0xC8, 0x8, 0xF3, 0x0, 0x6F, 0x8, 0xF8, 0x9, 0x28, 0x0, 0x9B, 0x9, 0x2A, 0x9, 0x2A, 0x0, 0xCC, 0x9, 0x2C, 0x9, 0x2C, 0x0, 0xCD, 0x9, 0x2E, 0x9, 0x30, 0x0, 0xCE, 0x9, 0x33, 0x9, 0x33, 0x0, 0xD1, 0x9, 0x35, 0x9, 0xDA, 0x0, 0xD2, 0x9, 0xDD, 0x9, 0xEC, 0x1, 0x78, 0x9, 0xF3, 0x9, 0xF3, 0x1, 0x88, 0x9, 0xF5, 0x9, 0xF5, 0x1, 0x89, 0x9, 0xF9, 0x9, 0xF9, 0x1, 0x8A, 0x9, 0xFC, 0x9, 0xFC, 0x1, 0x8B, 0x9, 0xFE, 0xA, 0x1, 0x1, 0x8C, 0xA, 0x3, 0xA, 0x3, 0x1, 0x90, 0xA, 0x5, 0xA, 0x6, 0x1, 0x91, 0xA, 0x8, 0xA, 0x8, 0x1, 0x93, 0xA, 0xA, 0xA, 0xC, 0x1, 0x94, 0xA, 0xE, 0xA, 0x13, 0x1, 0x97, 0xA, 0x15, 0xA, 0x1A, 0x1, 0x9D, 0xA, 0x1C, 0xA, 0x1D, 0x1, 0xA3, 0xA, 0x1F, 0xA, 0x1F, 0x1, 0xA5, 0xA, 0x21, 0xA, 0x29, 0x1, 0xA6, 0xA, 0x2F, 0xA, 0x33, 0x1, 0xAF, 0xA, 0x35, 0xA, 0x35, 0x1, 0xB4, 0xA, 0x3F, 0xA, 0x41, 0x1, 0xB5, 0xA, 0x43, 0xA, 0x43, 0x1, 0xB8, 0xA, 0x46, 0xA, 0x4E, 0x1, 0xB9, 0xA, 0x5A, 0xA, 0x5B, 0x1, 0xC2, 0xA, 0x64, 0xA, 0x64, 0x1, 0xC4, 0xA, 0x66, 0xA, 0x66, 0x1, 0xC5, 0xA, 0x68, 0xA, 0x68, 0x1, 0xC6, 0xA, 0x6D, 0xA, 0x96, 0x1, 0xC7, 0xA, 0x98, 0xA, 0xA7, 0x1, 0xF1, 0xA, 0xB2, 0xA, 0xB5, 0x2, 0x1, 0xA, 0xC0, 0xA, 0xC7, 0x2, 0x5, 0xA, 0xCF, 0xA, 0xCF, 0x2, 0xD, 0xA, 0xD6, 0xA, 0xD6, 0x2, 0xE, 0xA, 0xD8, 0xA, 0xD9, 0x2, 0xF, 0xA, 0xDB, 0xA, 0xDB, 0x2, 0x11, 0xA, 0xEE, 0xA, 0xF0, 0x2, 0x12, 0xA, 0xF2, 0xA, 0xFD, 0x2, 0x15, 0xA, 0xFF, 0xB, 0xC, 0x2, 0x21, 0xB, 0x10, 0xB, 0x1C, 0x2, 0x2F, 0xB, 0x1E, 0xB, 0x1E, 0x2, 0x3C, 0xB, 0x20, 0xB, 0x3B, 0x2, 0x3D, 0xB, 0x3F, 0xB, 0x3F, 0x2, 0x59, 0xB, 0x42, 0xB, 0x43, 0x2, 0x5A, 0xB, 0x47, 0xB, 0xD7, 0x2, 0x5C, 0xB, 0xE0, 0xB, 0xE7, 0x2, 0xED, 0xB, 0xEE, 0xB, 0xF3, 0x2, 0xF5, 0xB, 0xFC, 0xC, 0x3, 0x2, 0xFB, 0xC, 0xC, 0xC, 0x1F, 0x3, 0x3, 0xC, 0x28, 0xC, 0x2B, 0x3, 0x17, 0xC, 0x44, 0xC, 0x45, 0x3, 0x1B, 0xC, 0x52, 0xC, 0x59, 0x3, 0x1D, 0xC, 0x62, 0xC, 0x69, 0x3, 0x25, 0xC, 0x81, 0xC, 0x85, 0x3, 0x2D, 0xC, 0x8B, 0xC, 0x8F, 0x3, 0x32, 0xC, 0x96, 0xC, 0x99, 0x3, 0x37, 0xC, 0xA2, 0xC, 0xA6, 0x3, 0x3B, 0xC, 0xAC, 0xC, 0xAD, 0x3, 0x40, 0xC, 0xB7, 0xC, 0xBC, 0x3, 0x42, 0xC, 0xBE, 0xC, 0xCE, 0x3, 0x48, 0xC, 0xD0, 0xC, 0xD4, 0x3, 0x59, 0xC, 0xD6, 0xC, 0xD7, 0x3, 0x5E, 0xC, 0xD9, 0xC, 0xD9, 0x3, 0x60, 0xC, 0xDB, 0xC, 0xDD, 0x3, 0x61, 0xC, 0xDF, 0xC, 0xE2, 0x3, 0x64, 0xC, 0xE4, 0xC, 0xE6, 0x3, 0x68, 0xC, 0xEB, 0xC, 0xEB, 0x3, 0x6B, 0xC, 0xEE, 0xD, 0x1C, 0x3, 0x6C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1E, 0x0, 0x0, 0x0, 0x24, 0x0, 0x1, 0x0, 0x0, 0x4, 0x7E, 0x0, 0x1, 0x0, 0x0, 0x4, 0xE6, 0x0, 0x1, 0x0, 0x0, 0x4, 0xF6, 0x0, 0x1, 0x0, 0x0, 0x4, 0x9C, 0x3, 0x9B, 0x2C, 0x1A, 0x7, 0xC8, 0x7, 0xCE, 0x7, 0xDA, 0x8, 0xD6, 0x7, 0xE6, 0x7, 0xF2, 0x9, 0x0, 0x8, 0x52, 0x8, 0x40, 0x7, 0xFE, 0x2A, 0xA0, 0x2A, 0xAC, 0x2A, 0xB8, 0x2C, 0x32, 0x8, 0x58, 0x2C, 0x32, 0x2A, 0xCA, 0x2A, 0xD6, 0x2A, 0xE2, 0x2A, 0xE8, 0x8, 0x28, 0x2B, 0x0, 0x8, 0x34, 0x2B, 0x6C, 0x2B, 0x12, 0x2A, 0xA0, 0x8, 0x16, 0x7, 0xD4, 0x7, 0xE0, 0x8, 0xDC, 0x7, 0xEC, 0x7, 0xF8, 0x8, 0x40, 0x29, 0xD4, 0x2A, 0x4C, 0x8, 0x4, 0x29, 0xD4, 0x8, 0xA, 0x8, 0x10, 0x8, 0xE2, 0x8, 0x16, 0x7, 0xC2, 0x25, 0x66, 0x8, 0x1C, 0x25, 0x84, 0x8, 0x22, 0x8, 0x2E, 0x8, 0x46, 0x8, 0x3A, 0x8, 0x4C, 0x8, 0x3A, 0x7, 0xB6, 0x7, 0x8C, 0x7, 0xBC, 0x7, 0xF8, 0x7, 0xE0, 0x24, 0x52, 0x7, 0x38, 0x9, 0x0, 0x8, 0x34, 0x8, 0x3A, 0x9, 0x0, 0x2A, 0xAC, 0x8, 0x34, 0x8, 0x3A, 0x8, 0x40, 0x7, 0x3E, 0x28, 0x7E, 0x7, 0x44, 0x9, 0x0, 0x8, 0x40, 0x2A, 0xB8, 0x8, 0x10, 0x8, 0x7C, 0x8, 0xD0, 0x8, 0xAC, 0x8, 0xCA, 0x7, 0x4A, 0x7, 0xAA, 0x8, 0xA6, 0x8, 0xC4, 0x7, 0xA4, 0x8, 0xF4, 0x8, 0xA0, 0x8, 0xF4, 0x8, 0x82, 0x8, 0x9A, 0x7, 0x9E, 0x8, 0x8E, 0x8, 0xBE, 0x8, 0x88, 0x8, 0xB2, 0x7, 0x98, 0x26, 0x26, 0x8, 0xEE, 0x7, 0x92, 0x8, 0xB8, 0x8, 0x94, 0x8, 0xE8, 0x9, 0x0, 0x9, 0x0, 0x26, 0x1A, 0x8, 0xFA, 0x7, 0x50, 0x7, 0xE0, 0x7, 0x56, 0x7, 0x5C, 0x8, 0xF4, 0x7, 0x62, 0x8, 0x82, 0x7, 0x68, 0x7, 0x68, 0x7, 0x6E, 0x2A, 0xE2, 0x25, 0x84, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x7, 0xCE, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x2A, 0xB8, 0x2C, 0x32, 0x2C, 0x32, 0x2C, 0x32, 0x2C, 0x32, 0x2C, 0x32, 0x2A, 0xE8, 0x2A, 0xE8, 0x2A, 0xE8, 0x2A, 0xE8, 0x2B, 0x6C, 0x2A, 0xA0, 0x2A, 0xA0, 0x2A, 0xA0, 0x2A, 0xA0, 0x2A, 0xA0, 0x2A, 0xA0, 0x2A, 0xA0, 0x7, 0xD4, 0x8, 0xDC, 0x8, 0xDC, 0x8, 0xDC, 0x8, 0xDC, 0x8, 0x10, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0x22, 0x8, 0x22, 0x8, 0x22, 0x8, 0x22, 0x8, 0x4C, 0x8, 0x4C, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xDA, 0x7, 0x74, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xF2, 0x7, 0xF8, 0x9, 0x0, 0x8, 0x40, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x29, 0xD4, 0x8, 0x52, 0x8, 0x40, 0x7, 0xFE, 0x8, 0x4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xA0, 0x7, 0x7A, 0x2A, 0xA0, 0x7, 0x80, 0x2A, 0xB8, 0x8, 0x10, 0x2A, 0xB8, 0x8, 0x10, 0x2A, 0xB8, 0x8, 0x10, 0x8, 0x10, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE2, 0x7, 0x86, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2B, 0x0, 0x8, 0x46, 0x2B, 0x6C, 0x8, 0x4C, 0x2B, 0x6C, 0x2B, 0x12, 0x8, 0x3A, 0x2B, 0x12, 0x8, 0x3A, 0x2B, 0x12, 0x8, 0x3A, 0x7, 0xB6, 0x7, 0xBC, 0x7, 0x8C, 0x7, 0xF8, 0x7, 0x92, 0x7, 0x92, 0x8, 0xA6, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xB8, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x82, 0x8, 0xF4, 0x8, 0xF4, 0x8, 0xF4, 0x8, 0xF4, 0x8, 0xF4, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x8, 0xD0, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xE8, 0x8, 0xB8, 0x8, 0xB8, 0x8, 0xB8, 0x8, 0xB8, 0x7, 0x92, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x7, 0x98, 0x7, 0x98, 0x7, 0x98, 0x7, 0x98, 0x8, 0xB2, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0xBE, 0x8, 0x8E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x8, 0x82, 0x8, 0x82, 0x8, 0x82, 0x8, 0xF4, 0x8, 0xF4, 0x8, 0xF4, 0x8, 0xF4, 0x7, 0xA4, 0x7, 0xA4, 0x7, 0xA4, 0x8, 0xC4, 0x8, 0xC4, 0x8, 0xC4, 0x8, 0xC4, 0x8, 0xA6, 0x8, 0xA6, 0x8, 0xA6, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x7, 0xAA, 0x8, 0xCA, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0x7C, 0x8, 0x7C, 0x8, 0x7C, 0x2C, 0x1A, 0x8, 0xD6, 0x9, 0x0, 0x8, 0x52, 0x2B, 0x7E, 0x29, 0x62, 0x2C, 0x1A, 0x7, 0xC8, 0x8, 0xD6, 0x2B, 0x12, 0x9, 0x0, 0x8, 0x52, 0x7, 0xFE, 0x2A, 0xAC, 0x2A, 0xB8, 0x2C, 0x32, 0x8, 0x58, 0x2A, 0xE2, 0x2B, 0x6C, 0x8, 0x34, 0x8, 0x52, 0x2B, 0x6C, 0x8, 0xE2, 0x8, 0x2E, 0x8, 0xE2, 0x8, 0xD6, 0x2A, 0xD6, 0x8, 0x52, 0x8, 0x52, 0x8, 0x40, 0x7, 0xFE, 0x2C, 0x1A, 0x7, 0xC8, 0x8, 0xD6, 0x2A, 0xAC, 0x9, 0x0, 0x2C, 0x32, 0x8, 0x58, 0x7, 0xCE, 0x2A, 0xE2, 0x8, 0x34, 0x2A, 0xA0, 0x8, 0xDC, 0x8, 0xE2, 0x8, 0x16, 0x7, 0xD4, 0x8, 0x4C, 0x8, 0x3A, 0x8, 0xDC, 0x8, 0x1C, 0x29, 0xD4, 0x2A, 0x4C, 0x8, 0x4C, 0x2B, 0x0, 0x8, 0x46, 0x2B, 0x0, 0x8, 0x46, 0x2B, 0x0, 0x8, 0x46, 0x2B, 0x6C, 0x8, 0x4C, 0x2A, 0xAC, 0x8, 0xA, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0xD6, 0x8, 0xDC, 0x7, 0xCE, 0x7, 0xD4, 0x2B, 0x6C, 0x8, 0x52, 0x8, 0x52, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x7, 0xB6, 0x7, 0xBC, 0x8, 0xD6, 0x8, 0xDC, 0x2C, 0x32, 0x8, 0xE2, 0x8, 0x4C, 0x8, 0x4C, 0x8, 0x4C, 0x7, 0xE0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0x52, 0x8, 0x52, 0x29, 0xD4, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2B, 0x6C, 0x8, 0x4C, 0x2B, 0x6C, 0x8, 0x4C, 0x2B, 0x6C, 0x8, 0x4C, 0x7, 0xB0, 0x2A, 0xE2, 0x8, 0x40, 0x2B, 0x6C, 0x8, 0x34, 0x8, 0x3A, 0x7, 0xE6, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0x52, 0x2C, 0x32, 0x8, 0xE2, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x7, 0xB6, 0x7, 0xBC, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xFE, 0x8, 0x4, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x7, 0xF2, 0x7, 0xF8, 0x2A, 0xB8, 0x8, 0x10, 0x2C, 0x1A, 0x2A, 0xA0, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0x52, 0x8, 0x52, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x9, 0x0, 0x8, 0x40, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0xD6, 0x8, 0xDC, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2B, 0x6C, 0x8, 0x4C, 0x8, 0x40, 0x7, 0xD4, 0x2A, 0x4C, 0x7, 0xCE, 0x2A, 0xAC, 0x2C, 0x32, 0x7, 0xC2, 0x2B, 0x0, 0x8, 0x46, 0x7, 0xC8, 0x8, 0x16, 0x7, 0xC8, 0x8, 0x16, 0x7, 0xC8, 0x8, 0x16, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xDA, 0x7, 0xE0, 0x7, 0xDA, 0x7, 0xE0, 0x7, 0xDA, 0x7, 0xE0, 0x7, 0xDA, 0x7, 0xE0, 0x7, 0xDA, 0x7, 0xE0, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x8, 0xD6, 0x8, 0xDC, 0x7, 0xE6, 0x7, 0xEC, 0x7, 0xF2, 0x7, 0xF8, 0x9, 0x0, 0x8, 0x40, 0x9, 0x0, 0x8, 0x40, 0x9, 0x0, 0x8, 0x40, 0x9, 0x0, 0x8, 0x40, 0x7, 0xFE, 0x8, 0x4, 0x7, 0xFE, 0x8, 0x4, 0x7, 0xFE, 0x8, 0x4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xA0, 0x29, 0xD4, 0x2A, 0xAC, 0x8, 0xA, 0x2A, 0xAC, 0x8, 0xA, 0x2A, 0xB8, 0x8, 0x10, 0x2A, 0xB8, 0x8, 0x10, 0x2A, 0xB8, 0x8, 0x10, 0x2A, 0xB8, 0x8, 0x10, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x2C, 0x32, 0x8, 0xE2, 0x8, 0x58, 0x8, 0x16, 0x8, 0x58, 0x8, 0x16, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xCA, 0x25, 0x66, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xD6, 0x8, 0x1C, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE2, 0x25, 0x84, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x2A, 0xE8, 0x8, 0x22, 0x8, 0x28, 0x8, 0x2E, 0x8, 0x28, 0x8, 0x2E, 0x2B, 0x0, 0x8, 0x46, 0x2B, 0x0, 0x8, 0x46, 0x8, 0x34, 0x8, 0x3A, 0x8, 0x34, 0x8, 0x3A, 0x2B, 0x6C, 0x8, 0x4C, 0x2B, 0x12, 0x8, 0x3A, 0x2B, 0x12, 0x8, 0x3A, 0x2B, 0x12, 0x8, 0x3A, 0x8, 0x40, 0x25, 0x84, 0x8, 0x46, 0x8, 0x4C, 0x2A, 0xA0, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x8, 0xD6, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x8, 0xE2, 0x2B, 0x7E, 0x2B, 0x7E, 0x2B, 0x36, 0x2B, 0x36, 0x2B, 0x36, 0x2B, 0x36, 0x2B, 0x6C, 0x2B, 0x6C, 0x2B, 0x6C, 0x2B, 0x6C, 0x8, 0xE2, 0x8, 0xE2, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x2C, 0x1A, 0x8, 0xD6, 0x8, 0xD6, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x8, 0x52, 0x2B, 0x6C, 0x2B, 0x6C, 0x2B, 0x6C, 0x2B, 0x6C, 0x8, 0x58, 0x2B, 0x7E, 0x2B, 0x7E, 0x8, 0xE8, 0x8, 0x5E, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x70, 0x8, 0x76, 0x8, 0xE8, 0x8, 0x94, 0x8, 0xEE, 0x8, 0x7C, 0x8, 0xB2, 0x8, 0x88, 0x8, 0x8E, 0x8, 0x9A, 0x8, 0x82, 0x8, 0xF4, 0x8, 0xA0, 0x8, 0xA6, 0x8, 0xD0, 0x8, 0xAC, 0x8, 0x88, 0x8, 0xD0, 0x8, 0xEE, 0x8, 0xC4, 0x8, 0x88, 0x8, 0x88, 0x8, 0xBE, 0x8, 0x8E, 0x8, 0xE8, 0x8, 0x94, 0x8, 0xEE, 0x8, 0x9A, 0x8, 0xB2, 0x8, 0xF4, 0x8, 0xA0, 0x8, 0xB8, 0x8, 0xA6, 0x8, 0xAC, 0x8, 0xB2, 0x8, 0xB8, 0x8, 0xD0, 0x8, 0xBE, 0x8, 0xF4, 0x8, 0xC4, 0x8, 0xCA, 0x8, 0xCA, 0x8, 0xCA, 0x8, 0xD0, 0x2C, 0x1A, 0x2A, 0xA0, 0x8, 0xD6, 0x8, 0xDC, 0x2C, 0x32, 0x8, 0xE2, 0x8, 0xE8, 0x8, 0xEE, 0x8, 0xF4, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x26, 0x1A, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x8, 0xFA, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x0, 0x1, 0x7, 0x3B, 0x6, 0x40, 0x0, 0x1, 0x2, 0xA0, 0x6, 0x40, 0x0, 0x1, 0x2, 0x94, 0x6, 0x40, 0x0, 0x1, 0x4, 0x7C, 0x6, 0x40, 0x0, 0x1, 0x8, 0xAC, 0x6, 0x40, 0x0, 0x1, 0x3, 0xC4, 0x6, 0x40, 0x0, 0x1, 0x4, 0x9, 0x6, 0x40, 0x0, 0x1, 0x4, 0xF4, 0x6, 0x40, 0x0, 0x1, 0x5, 0x58, 0x6, 0x40, 0x0, 0x1, 0x4, 0x8F, 0x6, 0x40, 0x0, 0x1, 0x5, 0x1B, 0x6, 0x40, 0x0, 0x1, 0x2, 0xA2, 0x6, 0x40, 0x0, 0x1, 0x2, 0xE8, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD2, 0x6, 0x40, 0x0, 0x1, 0x5, 0x85, 0x6, 0x40, 0x0, 0x1, 0x4, 0x7B, 0x6, 0x40, 0x0, 0x1, 0x4, 0xA7, 0x6, 0x40, 0x0, 0x1, 0x3, 0xBA, 0x6, 0x40, 0x0, 0x1, 0x4, 0x5D, 0x6, 0x40, 0x0, 0x1, 0x4, 0x84, 0x6, 0x40, 0x0, 0x1, 0x4, 0xA3, 0x6, 0x40, 0x0, 0x1, 0x7, 0x85, 0x6, 0x40, 0x0, 0x1, 0x6, 0xC1, 0x6, 0x40, 0x0, 0x1, 0x4, 0x8B, 0x6, 0x40, 0x0, 0x1, 0x5, 0xD, 0x6, 0x40, 0x0, 0x1, 0x5, 0x39, 0x6, 0x40, 0x0, 0x1, 0x4, 0x31, 0x6, 0x40, 0x0, 0x1, 0x5, 0x3A, 0x6, 0x40, 0x0, 0x1, 0x4, 0x85, 0x6, 0x40, 0x0, 0x1, 0x4, 0x66, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD6, 0x6, 0x40, 0x0, 0x1, 0x5, 0x73, 0x6, 0x40, 0x0, 0x1, 0x4, 0x89, 0x6, 0x40, 0x0, 0x1, 0x5, 0xB, 0x6, 0x40, 0x0, 0x1, 0x4, 0x2D, 0x6, 0x40, 0x0, 0x1, 0x6, 0xF7, 0x6, 0x40, 0x0, 0x1, 0x4, 0x73, 0x6, 0x40, 0x0, 0x1, 0x4, 0x81, 0x6, 0x40, 0x0, 0x1, 0x4, 0x22, 0x6, 0x40, 0x0, 0x1, 0x4, 0x72, 0x6, 0x40, 0x0, 0x1, 0x5, 0x2E, 0x6, 0x40, 0x0, 0x1, 0x3, 0xF6, 0x6, 0x40, 0x0, 0x1, 0x5, 0x10, 0x6, 0x40, 0x0, 0x1, 0x4, 0x7, 0x6, 0x40, 0x0, 0x1, 0x4, 0x71, 0x6, 0x40, 0x0, 0x1, 0x5, 0xF2, 0x6, 0x40, 0x0, 0x1, 0x3, 0xE5, 0x6, 0x40, 0x0, 0x1, 0x2, 0x42, 0x6, 0x40, 0x0, 0x1, 0x5, 0x1E, 0x6, 0x40, 0x0, 0x1, 0x4, 0x1D, 0x6, 0x40, 0x0, 0x1, 0x5, 0x1A, 0x6, 0x40, 0x0, 0x1, 0x2, 0x39, 0x6, 0x40, 0x0, 0x1, 0x4, 0xCA, 0x6, 0x40, 0x0, 0x1, 0x4, 0x79, 0x6, 0x40, 0x0, 0x1, 0x4, 0x2A, 0x6, 0x40, 0x0, 0x1, 0x4, 0xDD, 0x6, 0x40, 0x0, 0x1, 0x1, 0xFD, 0x6, 0x40, 0x0, 0x1, 0x4, 0x5C, 0x6, 0x40, 0x0, 0x1, 0x4, 0x61, 0x6, 0x40, 0x0, 0x1, 0x6, 0x6, 0x6, 0x40, 0x0, 0x1, 0x4, 0x6D, 0x6, 0x40, 0x0, 0x1, 0x4, 0x3C, 0x6, 0x40, 0x0, 0x1, 0x4, 0x5F, 0x6, 0x40, 0x0, 0x1, 0x4, 0xDE, 0x6, 0x40, 0x0, 0x1, 0x4, 0x80, 0x6, 0x40, 0x0, 0x1, 0x3, 0xD6, 0x6, 0x40, 0x0, 0x1, 0x4, 0x35, 0x6, 0x40, 0x0, 0x1, 0x6, 0x8, 0x6, 0x40, 0x0, 0x1, 0x4, 0x3D, 0x6, 0x40, 0x0, 0x1, 0x4, 0x86, 0x6, 0x40, 0x0, 0x1, 0x4, 0x4B, 0x6, 0x40, 0x0, 0x1, 0x4, 0x8E, 0x6, 0x40, 0x0, 0x1, 0x4, 0x9E, 0x6, 0x40, 0x0, 0x1, 0x3, 0xE1, 0x6, 0x40, 0x0, 0x1, 0x4, 0xC0, 0x6, 0x40, 0x0, 0x1, 0x5, 0x98, 0x6, 0x40, 0x0, 0x1, 0x5, 0xB0, 0x6, 0x40, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x16, 0x0, 0x1, 0x2, 0x4E, 0x2, 0x6E, 0x0, 0x1, 0x0, 0x3, 0x2, 0xD, 0x2, 0x10, 0x2, 0x13, 0x0, 0x2, 0x0, 0x5E, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1A, 0x0, 0x8C, 0x0, 0x8C, 0x0, 0x34, 0x0, 0x94, 0x0, 0x95, 0x0, 0x35, 0x2, 0xD2, 0x2, 0xD2, 0x0, 0x37, 0x2, 0xDA, 0x2, 0xDB, 0x0, 0x38, 0x2, 0xEB, 0x2, 0xEB, 0x0, 0x3A, 0x2, 0xED, 0x2, 0xED, 0x0, 0x3B, 0x2, 0xF4, 0x2, 0xF5, 0x0, 0x3C, 0x3, 0x17, 0x3, 0x17, 0x0, 0x3E, 0x4, 0x2B, 0x4, 0x2D, 0x0, 0x3F, 0x5, 0x5D, 0x5, 0x5E, 0x0, 0x42, 0x6, 0xC7, 0x6, 0xC8, 0x0, 0x44, 0x7, 0x4E, 0x7, 0x62, 0x0, 0x46, 0x7, 0xA6, 0x7, 0xA6, 0x0, 0x5B, 0x7, 0xAE, 0x7, 0xB1, 0x0, 0x5C, 0x7, 0xDE, 0x7, 0xE2, 0x0, 0x60, 0x8, 0xAD, 0x8, 0xAD, 0x0, 0x65, 0x8, 0xB3, 0x8, 0xB3, 0x0, 0x66, 0x8, 0xB5, 0x8, 0xB8, 0x0, 0x67, 0x8, 0xC8, 0x8, 0xF3, 0x0, 0x6B, 0x8, 0xF8, 0x9, 0x28, 0x0, 0x97, 0x9, 0x2A, 0x9, 0x2A, 0x0, 0xC8, 0x9, 0x2C, 0x9, 0x2C, 0x0, 0xC9, 0x9, 0x2E, 0x9, 0x30, 0x0, 0xCA, 0x9, 0x33, 0x9, 0x33, 0x0, 0xCD, 0x9, 0x35, 0x9, 0x78, 0x0, 0xCE, 0x9, 0x7D, 0x9, 0xDA, 0x1, 0x12, 0x9, 0xDD, 0x9, 0xEC, 0x1, 0x70, 0x9, 0xF3, 0x9, 0xF3, 0x1, 0x80, 0x9, 0xF5, 0x9, 0xF5, 0x1, 0x81, 0x9, 0xF9, 0x9, 0xF9, 0x1, 0x82, 0x9, 0xFC, 0x9, 0xFC, 0x1, 0x83, 0x9, 0xFE, 0xA, 0x1, 0x1, 0x84, 0xA, 0x3, 0xA, 0x3, 0x1, 0x88, 0xA, 0x5, 0xA, 0x6, 0x1, 0x89, 0xA, 0x8, 0xA, 0x8, 0x1, 0x8B, 0xA, 0xA, 0xA, 0xC, 0x1, 0x8C, 0xA, 0xE, 0xA, 0x13, 0x1, 0x8F, 0xA, 0x15, 0xA, 0x1A, 0x1, 0x95, 0xA, 0x1C, 0xA, 0x1D, 0x1, 0x9B, 0xA, 0x1F, 0xA, 0x1F, 0x1, 0x9D, 0xA, 0x21, 0xA, 0x29, 0x1, 0x9E, 0xA, 0x2F, 0xA, 0x33, 0x1, 0xA7, 0xA, 0x35, 0xA, 0x35, 0x1, 0xAC, 0xA, 0x3F, 0xA, 0x41, 0x1, 0xAD, 0xA, 0x43, 0xA, 0x43, 0x1, 0xB0, 0xA, 0x46, 0xA, 0x4A, 0x1, 0xB1, 0xA, 0x4D, 0xA, 0x4E, 0x1, 0xB6, 0xA, 0x5A, 0xA, 0x5B, 0x1, 0xB8, 0xA, 0x64, 0xA, 0x64, 0x1, 0xBA, 0xA, 0x66, 0xA, 0x66, 0x1, 0xBB, 0xA, 0x68, 0xA, 0x68, 0x1, 0xBC, 0xA, 0x6D, 0xA, 0x96, 0x1, 0xBD, 0xA, 0x98, 0xA, 0xA7, 0x1, 0xE7, 0xA, 0xB2, 0xA, 0xB5, 0x1, 0xF7, 0xA, 0xC0, 0xA, 0xC7, 0x1, 0xFB, 0xA, 0xCF, 0xA, 0xCF, 0x2, 0x3, 0xA, 0xD6, 0xA, 0xD6, 0x2, 0x4, 0xA, 0xD8, 0xA, 0xD9, 0x2, 0x5, 0xA, 0xDB, 0xA, 0xDB, 0x2, 0x7, 0xA, 0xEE, 0xA, 0xF0, 0x2, 0x8, 0xA, 0xF2, 0xA, 0xFD, 0x2, 0xB, 0xA, 0xFF, 0xB, 0x2, 0x2, 0x17, 0xB, 0x5, 0xB, 0xC, 0x2, 0x1B, 0xB, 0x10, 0xB, 0x1C, 0x2, 0x23, 0xB, 0x1E, 0xB, 0x1E, 0x2, 0x30, 0xB, 0x20, 0xB, 0x3B, 0x2, 0x31, 0xB, 0x3F, 0xB, 0x3F, 0x2, 0x4D, 0xB, 0x42, 0xB, 0x43, 0x2, 0x4E, 0xB, 0x47, 0xB, 0xD7, 0x2, 0x50, 0xB, 0xE0, 0xB, 0xE7, 0x2, 0xE1, 0xB, 0xEE, 0xB, 0xF3, 0x2, 0xE9, 0xB, 0xFC, 0xC, 0x3, 0x2, 0xEF, 0xC, 0xC, 0xC, 0x1F, 0x2, 0xF7, 0xC, 0x28, 0xC, 0x2B, 0x3, 0xB, 0xC, 0x44, 0xC, 0x45, 0x3, 0xF, 0xC, 0x52, 0xC, 0x59, 0x3, 0x11, 0xC, 0x62, 0xC, 0x69, 0x3, 0x19, 0xC, 0x81, 0xC, 0x85, 0x3, 0x21, 0xC, 0x8B, 0xC, 0x8F, 0x3, 0x26, 0xC, 0x96, 0xC, 0x99, 0x3, 0x2B, 0xC, 0xA2, 0xC, 0xA6, 0x3, 0x2F, 0xC, 0xAC, 0xC, 0xAD, 0x3, 0x34, 0xC, 0xB7, 0xC, 0xBC, 0x3, 0x36, 0xC, 0xBE, 0xC, 0xCE, 0x3, 0x3C, 0xC, 0xD0, 0xC, 0xD4, 0x3, 0x4D, 0xC, 0xD6, 0xC, 0xD7, 0x3, 0x52, 0xC, 0xD9, 0xC, 0xD9, 0x3, 0x54, 0xC, 0xDB, 0xC, 0xDD, 0x3, 0x55, 0xC, 0xDF, 0xC, 0xE2, 0x3, 0x58, 0xC, 0xE4, 0xC, 0xE6, 0x3, 0x5C, 0xC, 0xEB, 0xC, 0xEB, 0x3, 0x5F, 0xC, 0xEE, 0xD, 0x1C, 0x3, 0x60, 0x0, 0x3, 0x0, 0x0, 0x0, 0xE, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x1A, 0x0, 0x1, 0x0, 0x0, 0xFF, 0xDB, 0x0, 0x1, 0x0, 0x0, 0xFF, 0xDC, 0x0, 0x1, 0x0, 0x0, 0xFF, 0x78, 0x3, 0x8F, 0x9, 0x1E, 0x7, 0xBC, 0x7, 0xC2, 0x7, 0xCE, 0x9, 0x2A, 0x7, 0xDA, 0x7, 0xE6, 0x9, 0x60, 0x8, 0x8E, 0x8, 0x70, 0x7, 0xF2, 0x9, 0x24, 0x8, 0x4, 0x8, 0x10, 0x9, 0x36, 0x8, 0x9A, 0x9, 0x36, 0x8, 0x22, 0x8, 0x2E, 0x8, 0x3A, 0x8, 0x40, 0x8, 0x4C, 0x8, 0x58, 0x8, 0x5E, 0x8, 0x94, 0x8, 0x64, 0x9, 0x24, 0x8, 0x1C, 0x7, 0xC8, 0x7, 0xD4, 0x9, 0x30, 0x7, 0xE0, 0x7, 0xEC, 0x8, 0x70, 0x7, 0xFE, 0x7, 0xB0, 0x7, 0xF8, 0x7, 0xFE, 0x8, 0xA, 0x8, 0x16, 0x9, 0x3C, 0x8, 0x1C, 0x7, 0xB6, 0x8, 0x28, 0x8, 0x34, 0x8, 0x76, 0x8, 0x46, 0x8, 0x52, 0x8, 0x7C, 0x8, 0x6A, 0x8, 0x82, 0x8, 0x6A, 0x7, 0xD4, 0x7, 0x20, 0x7, 0x26, 0x9, 0x60, 0x8, 0x5E, 0x8, 0x6A, 0x9, 0x60, 0x8, 0x4, 0x8, 0x5E, 0x8, 0x6A, 0x8, 0x70, 0x7, 0x2C, 0x7, 0x32, 0x7, 0x38, 0x9, 0x60, 0x8, 0x70, 0x8, 0x10, 0x8, 0x16, 0x8, 0xC4, 0x9, 0x18, 0x8, 0xF4, 0x9, 0x12, 0x7, 0x3E, 0x7, 0x9E, 0x8, 0xEE, 0x9, 0xC, 0x7, 0x98, 0x9, 0x4E, 0x8, 0xE8, 0x9, 0x4E, 0x8, 0xCA, 0x8, 0xE2, 0x7, 0x92, 0x8, 0xD6, 0x9, 0x6, 0x8, 0xD0, 0x8, 0xFA, 0x7, 0x8C, 0x7, 0x44, 0x9, 0x48, 0x7, 0x86, 0x9, 0x0, 0x8, 0xDC, 0x9, 0x42, 0x9, 0x60, 0x9, 0x60, 0x9, 0x54, 0x9, 0x5A, 0x7, 0x4A, 0x7, 0xD4, 0x7, 0x50, 0x7, 0x56, 0x9, 0x4E, 0x7, 0x5C, 0x8, 0xCA, 0x7, 0x62, 0x7, 0x62, 0x7, 0x68, 0x8, 0x3A, 0x8, 0x76, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x7, 0xC2, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x10, 0x9, 0x36, 0x9, 0x36, 0x9, 0x36, 0x9, 0x36, 0x9, 0x36, 0x8, 0x40, 0x8, 0x40, 0x8, 0x40, 0x8, 0x40, 0x8, 0x94, 0x9, 0x24, 0x9, 0x24, 0x9, 0x24, 0x9, 0x24, 0x9, 0x24, 0x9, 0x24, 0x9, 0x24, 0x7, 0xC8, 0x9, 0x30, 0x9, 0x30, 0x9, 0x30, 0x9, 0x30, 0x8, 0x16, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x8, 0x46, 0x8, 0x46, 0x8, 0x46, 0x8, 0x46, 0x8, 0x82, 0x8, 0x82, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x7, 0xC2, 0x7, 0xC8, 0x7, 0xC2, 0x7, 0xC8, 0x7, 0xC2, 0x7, 0xC8, 0x7, 0xC2, 0x7, 0xC8, 0x7, 0xCE, 0x7, 0x6E, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x7, 0xE6, 0x7, 0xEC, 0x7, 0xE6, 0x7, 0xEC, 0x7, 0xE6, 0x7, 0xEC, 0x7, 0xE6, 0x7, 0xEC, 0x9, 0x60, 0x8, 0x70, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x7, 0xFE, 0x8, 0x8E, 0x8, 0x70, 0x7, 0xF2, 0x7, 0xF8, 0x9, 0x24, 0x7, 0xFE, 0x9, 0x24, 0x7, 0xFE, 0x9, 0x24, 0x7, 0x74, 0x9, 0x24, 0x7, 0x7A, 0x8, 0x10, 0x8, 0x16, 0x8, 0x10, 0x8, 0x16, 0x8, 0x10, 0x8, 0x16, 0x8, 0x16, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x3A, 0x7, 0x80, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x94, 0x8, 0x82, 0x8, 0x94, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x64, 0x8, 0x6A, 0x7, 0x86, 0x7, 0x86, 0x8, 0xEE, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x0, 0x9, 0x48, 0x9, 0x48, 0x9, 0x48, 0x9, 0x48, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xCA, 0x9, 0x4E, 0x9, 0x4E, 0x9, 0x4E, 0x9, 0x4E, 0x9, 0x4E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x9, 0x18, 0x9, 0x42, 0x9, 0x42, 0x9, 0x42, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x9, 0x0, 0x7, 0x86, 0x9, 0x48, 0x9, 0x48, 0x9, 0x48, 0x9, 0x48, 0x9, 0x48, 0x7, 0x8C, 0x7, 0x8C, 0x7, 0x8C, 0x7, 0x8C, 0x8, 0xFA, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xD0, 0x8, 0xD0, 0x9, 0x6, 0x8, 0xD6, 0x7, 0x92, 0x7, 0x92, 0x7, 0x92, 0x7, 0x92, 0x8, 0xCA, 0x8, 0xCA, 0x8, 0xCA, 0x9, 0x4E, 0x9, 0x4E, 0x9, 0x4E, 0x9, 0x4E, 0x7, 0x98, 0x7, 0x98, 0x7, 0x98, 0x9, 0xC, 0x9, 0xC, 0x9, 0xC, 0x9, 0xC, 0x8, 0xEE, 0x8, 0xEE, 0x8, 0xEE, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x7, 0x9E, 0x9, 0x12, 0x9, 0x18, 0x9, 0x18, 0x8, 0xC4, 0x8, 0xC4, 0x8, 0xC4, 0x9, 0x1E, 0x9, 0x2A, 0x9, 0x60, 0x8, 0x8E, 0x8, 0xA0, 0x7, 0xA4, 0x9, 0x1E, 0x7, 0xBC, 0x9, 0x2A, 0x8, 0x64, 0x9, 0x60, 0x8, 0x8E, 0x7, 0xF2, 0x8, 0x4, 0x8, 0x10, 0x9, 0x36, 0x8, 0x9A, 0x8, 0x3A, 0x8, 0x94, 0x8, 0x5E, 0x8, 0x8E, 0x8, 0x94, 0x9, 0x3C, 0x8, 0x52, 0x9, 0x3C, 0x9, 0x2A, 0x8, 0x2E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x70, 0x7, 0xF2, 0x9, 0x1E, 0x7, 0xBC, 0x9, 0x2A, 0x8, 0x4, 0x9, 0x60, 0x9, 0x36, 0x8, 0x9A, 0x7, 0xC2, 0x8, 0x3A, 0x8, 0x5E, 0x9, 0x24, 0x9, 0x30, 0x9, 0x3C, 0x8, 0x1C, 0x7, 0xC8, 0x8, 0x82, 0x8, 0x6A, 0x9, 0x30, 0x8, 0x34, 0x7, 0xFE, 0x7, 0xB0, 0x8, 0x82, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x94, 0x8, 0x82, 0x8, 0x4, 0x8, 0xA, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x7, 0xC2, 0x7, 0xC8, 0x8, 0x94, 0x8, 0x8E, 0x8, 0x8E, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x82, 0x8, 0x82, 0x8, 0x82, 0x7, 0xD4, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x8, 0x8E, 0x8, 0x8E, 0x7, 0xFE, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x94, 0x8, 0x82, 0x8, 0x94, 0x8, 0x82, 0x8, 0x94, 0x8, 0x82, 0x7, 0xAA, 0x8, 0x3A, 0x8, 0x70, 0x8, 0x94, 0x8, 0x5E, 0x8, 0x6A, 0x7, 0xDA, 0x9, 0x1E, 0x9, 0x24, 0x8, 0x8E, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x7, 0xE6, 0x7, 0xEC, 0x7, 0xF2, 0x7, 0xF8, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x7, 0xE6, 0x7, 0xEC, 0x8, 0x10, 0x8, 0x16, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x8, 0x8E, 0x8, 0x8E, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x9, 0x60, 0x8, 0x70, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x94, 0x8, 0x82, 0x8, 0x70, 0x7, 0xC8, 0x7, 0xB0, 0x7, 0xC2, 0x8, 0x4, 0x9, 0x36, 0x7, 0xB6, 0x8, 0x58, 0x8, 0x7C, 0x7, 0xBC, 0x8, 0x1C, 0x7, 0xBC, 0x8, 0x1C, 0x7, 0xBC, 0x8, 0x1C, 0x7, 0xC2, 0x7, 0xC8, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x7, 0xCE, 0x7, 0xD4, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x2A, 0x9, 0x30, 0x7, 0xDA, 0x7, 0xE0, 0x7, 0xE6, 0x7, 0xEC, 0x9, 0x60, 0x8, 0x70, 0x9, 0x60, 0x8, 0x70, 0x9, 0x60, 0x8, 0x70, 0x9, 0x60, 0x8, 0x70, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xF2, 0x7, 0xF8, 0x7, 0xF2, 0x7, 0xF8, 0x9, 0x24, 0x7, 0xFE, 0x9, 0x24, 0x7, 0xFE, 0x9, 0x24, 0x7, 0xFE, 0x9, 0x24, 0x7, 0xFE, 0x8, 0x4, 0x8, 0xA, 0x8, 0x4, 0x8, 0xA, 0x8, 0x10, 0x8, 0x16, 0x8, 0x10, 0x8, 0x16, 0x8, 0x10, 0x8, 0x16, 0x8, 0x10, 0x8, 0x16, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x36, 0x9, 0x3C, 0x8, 0x9A, 0x8, 0x1C, 0x8, 0x9A, 0x8, 0x1C, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x22, 0x8, 0x28, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x2E, 0x8, 0x34, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x3A, 0x8, 0x76, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x40, 0x8, 0x46, 0x8, 0x4C, 0x8, 0x52, 0x8, 0x4C, 0x8, 0x52, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x58, 0x8, 0x7C, 0x8, 0x5E, 0x8, 0x6A, 0x8, 0x5E, 0x8, 0x6A, 0x8, 0x94, 0x8, 0x82, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x64, 0x8, 0x6A, 0x8, 0x70, 0x8, 0x76, 0x8, 0x7C, 0x8, 0x82, 0x9, 0x24, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x3C, 0x8, 0xA0, 0x8, 0xA0, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x88, 0x8, 0x94, 0x8, 0x94, 0x8, 0x94, 0x8, 0x94, 0x9, 0x3C, 0x9, 0x3C, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x1E, 0x9, 0x2A, 0x9, 0x2A, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x8E, 0x8, 0x94, 0x8, 0x94, 0x8, 0x94, 0x8, 0x94, 0x8, 0x9A, 0x8, 0xA0, 0x8, 0xA0, 0x9, 0x42, 0x8, 0xA6, 0x8, 0xAC, 0x8, 0xB2, 0x8, 0xB8, 0x8, 0xBE, 0x9, 0x42, 0x8, 0xDC, 0x9, 0x48, 0x8, 0xC4, 0x8, 0xFA, 0x8, 0xD0, 0x8, 0xD6, 0x8, 0xE2, 0x8, 0xCA, 0x9, 0x4E, 0x8, 0xE8, 0x8, 0xEE, 0x9, 0x18, 0x8, 0xF4, 0x8, 0xD0, 0x9, 0x18, 0x9, 0x48, 0x9, 0xC, 0x8, 0xD0, 0x8, 0xD0, 0x9, 0x6, 0x8, 0xD6, 0x9, 0x42, 0x8, 0xDC, 0x9, 0x48, 0x8, 0xE2, 0x8, 0xFA, 0x9, 0x4E, 0x8, 0xE8, 0x9, 0x0, 0x8, 0xEE, 0x8, 0xF4, 0x8, 0xFA, 0x9, 0x0, 0x9, 0x18, 0x9, 0x6, 0x9, 0x4E, 0x9, 0xC, 0x9, 0x12, 0x9, 0x12, 0x9, 0x12, 0x9, 0x18, 0x9, 0x1E, 0x9, 0x24, 0x9, 0x2A, 0x9, 0x30, 0x9, 0x36, 0x9, 0x3C, 0x9, 0x42, 0x9, 0x48, 0x9, 0x4E, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x54, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x5A, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x9, 0x60, 0x0, 0x1, 0x7, 0xB4, 0xFE, 0x69, 0x0, 0x1, 0x7, 0x3B, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xA0, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x82, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x94, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x7C, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xC6, 0xFE, 0x69, 0x0, 0x1, 0x8, 0xAC, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xC4, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x9, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xF4, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x58, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x8F, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x1B, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xA2, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xE8, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xD2, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x7B, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xA7, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xBA, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x5D, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x84, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x44, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xA3, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x1, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x8B, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xD, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x39, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x31, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x3A, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x85, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x66, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xD6, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x73, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x89, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xB, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x2D, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xC, 0xFE, 0x69, 0x0, 0x1, 0x7, 0x1, 0xFE, 0x69, 0x0, 0x1, 0x6, 0xF7, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xAF, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x73, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x81, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xFF, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xD0, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xD5, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x22, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xDC, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x38, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x72, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x2E, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xF6, 0xFE, 0x69, 0x0, 0x1, 0x7, 0xB, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x10, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xD2, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x7, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x71, 0xFE, 0x69, 0x0, 0x1, 0x2, 0xAA, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xF2, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xE5, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xCC, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x42, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xE0, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x1E, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x9A, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x1D, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x1A, 0xFE, 0x69, 0x0, 0x1, 0x2, 0x39, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xCA, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x79, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x2A, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xDD, 0xFE, 0x69, 0x0, 0x1, 0x1, 0xFD, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x5C, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x61, 0xFE, 0x69, 0x0, 0x1, 0x6, 0x6, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x6D, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x3C, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x5F, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xDE, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x80, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xD6, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x35, 0xFE, 0x69, 0x0, 0x1, 0x6, 0x8, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x3D, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x53, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x55, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x86, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x4B, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x86, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x8E, 0xFE, 0x69, 0x0, 0x1, 0x4, 0x9E, 0xFE, 0x69, 0x0, 0x1, 0x3, 0xE1, 0xFE, 0x69, 0x0, 0x1, 0x4, 0xC0, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x75, 0xFE, 0x69, 0x0, 0x1, 0x5, 0x98, 0xFE, 0x69, 0x0, 0x1, 0x5, 0xB0, 0xFE, 0x69, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x12, 0x0, 0x1, 0x0, 0x3A, 0x0, 0x46, 0x0, 0x1, 0x0, 0x1, 0x1, 0x8F, 0x0, 0x1, 0x0, 0x12, 0x0, 0x46, 0x0, 0x4A, 0x0, 0x4E, 0x0, 0x54, 0x0, 0x5A, 0x0, 0x5E, 0x0, 0x8E, 0x1, 0x5, 0x1, 0x6, 0x1, 0x7, 0x1, 0x9, 0x1, 0xD, 0x1, 0xE, 0x1, 0x11, 0x1, 0x13, 0x1, 0x1E, 0x4, 0x2C, 0x4, 0x2E, 0x0, 0x1, 0x0, 0x0, 0x0, 0x6, 0x0, 0x1, 0xFF, 0x3E, 0x2, 0x83, 0x0, 0x12, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x44, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x0, 0x4A, 0x0, 0x50, 0x0, 0x56, 0x0, 0x5C, 0x0, 0x62, 0x0, 0x68, 0x0, 0x6E, 0x0, 0x74, 0x0, 0x7A, 0x0, 0x80, 0x0, 0x86, 0x0, 0x1, 0x3, 0x67, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x92, 0x2, 0x8E, 0x0, 0x1, 0x3, 0xD6, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x9C, 0x2, 0x8E, 0x0, 0x1, 0x2, 0xFD, 0x2, 0x8E, 0x0, 0x1, 0x1, 0x34, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x71, 0x2, 0x71, 0x0, 0x1, 0x3, 0x88, 0x2, 0x9C, 0x0, 0x1, 0x3, 0xD2, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x56, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x6B, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x76, 0x2, 0x8E, 0x0, 0x1, 0x3, 0x9B, 0x3, 0xB, 0x0, 0x1, 0x3, 0x13, 0x2, 0x7F, 0x0, 0x1, 0x1, 0x3, 0x2, 0x84, 0x0, 0x1, 0x1, 0xAA, 0x2, 0x8E, 0x0, 0x1, 0x1, 0x97, 0x2, 0x8E, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x12, 0x0, 0x1, 0x2, 0xF8, 0x3, 0x4, 0x0, 0x1, 0x0, 0x1, 0x1, 0xC6, 0x0, 0x2, 0x0, 0x7B, 0x0, 0x26, 0x0, 0x3F, 0x0, 0x0, 0x0, 0x46, 0x0, 0x5F, 0x0, 0x1A, 0x0, 0x82, 0x0, 0x82, 0x0, 0x34, 0x0, 0x84, 0x0, 0x84, 0x0, 0x35, 0x0, 0x87, 0x0, 0x87, 0x0, 0x36, 0x0, 0x8A, 0x0, 0x8A, 0x0, 0x37, 0x0, 0x8C, 0x0, 0x97, 0x0, 0x38, 0x0, 0xA6, 0x0, 0xA7, 0x0, 0x44, 0x0, 0xAD, 0x0, 0xAD, 0x0, 0x46, 0x0, 0xB0, 0x0, 0xB1, 0x0, 0x47, 0x0, 0xB4, 0x0, 0xB5, 0x0, 0x49, 0x0, 0xBD, 0x0, 0xBD, 0x0, 0x4B, 0x0, 0xC3, 0x0, 0xC4, 0x0, 0x4C, 0x0, 0xC9, 0x0, 0xCA, 0x0, 0x4E, 0x0, 0xDB, 0x0, 0xDC, 0x0, 0x50, 0x0, 0xEC, 0x0, 0xEC, 0x0, 0x52, 0x0, 0xF2, 0x0, 0xF2, 0x0, 0x53, 0x0, 0xF8, 0x0, 0xF9, 0x0, 0x54, 0x0, 0xFD, 0x0, 0xFE, 0x0, 0x56, 0x1, 0x1, 0x1, 0x61, 0x0, 0x58, 0x2, 0x30, 0x2, 0x30, 0x0, 0xB9, 0x2, 0x3A, 0x2, 0x3A, 0x0, 0xBA, 0x2, 0x3E, 0x2, 0x3E, 0x0, 0xBB, 0x2, 0x40, 0x2, 0x40, 0x0, 0xBC, 0x2, 0x42, 0x2, 0x43, 0x0, 0xBD, 0x2, 0x46, 0x2, 0x46, 0x0, 0xBF, 0x2, 0x4A, 0x2, 0x4A, 0x0, 0xC0, 0x2, 0x4C, 0x2, 0x4D, 0x0, 0xC1, 0x2, 0x51, 0x2, 0x51, 0x0, 0xC3, 0x2, 0x53, 0x2, 0x53, 0x0, 0xC4, 0x2, 0x69, 0x2, 0x69, 0x0, 0xC5, 0x2, 0x70, 0x2, 0x72, 0x0, 0xC6, 0x2, 0x74, 0x2, 0x74, 0x0, 0xC9, 0x2, 0x77, 0x2, 0x77, 0x0, 0xCA, 0x2, 0x7B, 0x2, 0x7B, 0x0, 0xCB, 0x2, 0x7D, 0x2, 0x7F, 0x0, 0xCC, 0x2, 0x81, 0x2, 0x91, 0x0, 0xCF, 0x2, 0x93, 0x2, 0x93, 0x0, 0xE0, 0x2, 0x95, 0x2, 0x97, 0x0, 0xE1, 0x2, 0x99, 0x2, 0x99, 0x0, 0xE4, 0x2, 0x9E, 0x2, 0x9F, 0x0, 0xE5, 0x2, 0xAC, 0x2, 0xB0, 0x0, 0xE7, 0x2, 0xB2, 0x2, 0xB2, 0x0, 0xEC, 0x2, 0xB6, 0x2, 0xB8, 0x0, 0xED, 0x2, 0xC1, 0x2, 0xC2, 0x0, 0xF0, 0x2, 0xCA, 0x2, 0xCB, 0x0, 0xF2, 0x2, 0xCD, 0x2, 0xCD, 0x0, 0xF4, 0x2, 0xD2, 0x2, 0xD3, 0x0, 0xF5, 0x2, 0xD8, 0x2, 0xDB, 0x0, 0xF7, 0x2, 0xDE, 0x2, 0xDF, 0x0, 0xFB, 0x2, 0xE2, 0x2, 0xE2, 0x0, 0xFD, 0x2, 0xE8, 0x2, 0xE8, 0x0, 0xFE, 0x2, 0xEB, 0x2, 0xEF, 0x0, 0xFF, 0x2, 0xF4, 0x2, 0xF5, 0x1, 0x4, 0x2, 0xF9, 0x2, 0xF9, 0x1, 0x6, 0x2, 0xFB, 0x2, 0xFB, 0x1, 0x7, 0x2, 0xFF, 0x2, 0xFF, 0x1, 0x8, 0x3, 0x1, 0x3, 0x3, 0x1, 0x9, 0x3, 0x5, 0x3, 0x5, 0x1, 0xC, 0x3, 0x7, 0x3, 0x7, 0x1, 0xD, 0x3, 0x15, 0x3, 0x17, 0x1, 0xE, 0x3, 0x1F, 0x3, 0x1F, 0x1, 0x11, 0x3, 0x2F, 0x3, 0x3F, 0x1, 0x12, 0x3, 0x43, 0x3, 0x44, 0x1, 0x23, 0x3, 0x47, 0x3, 0x4B, 0x1, 0x25, 0x3, 0x4F, 0x3, 0x5A, 0x1, 0x2A, 0x3, 0x9A, 0x3, 0xA6, 0x1, 0x36, 0x3, 0xA8, 0x3, 0xA9, 0x1, 0x43, 0x3, 0xAB, 0x3, 0xC9, 0x1, 0x45, 0x4, 0x2B, 0x4, 0x2E, 0x1, 0x64, 0x5, 0x5D, 0x5, 0x5E, 0x1, 0x68, 0x6, 0xC7, 0x6, 0xC8, 0x1, 0x6A, 0x7, 0x4E, 0x7, 0x62, 0x1, 0x6C, 0x7, 0x66, 0x7, 0x66, 0x1, 0x81, 0x7, 0x71, 0x7, 0x71, 0x1, 0x82, 0x7, 0x78, 0x7, 0x7A, 0x1, 0x83, 0x7, 0x7D, 0x7, 0x7D, 0x1, 0x86, 0x7, 0x7F, 0x7, 0x7F, 0x1, 0x87, 0x7, 0x83, 0x7, 0x83, 0x1, 0x88, 0x7, 0x85, 0x7, 0x87, 0x1, 0x89, 0x7, 0x8D, 0x7, 0x8D, 0x1, 0x8C, 0x7, 0x92, 0x7, 0x92, 0x1, 0x8D, 0x7, 0x94, 0x7, 0x94, 0x1, 0x8E, 0x7, 0x96, 0x7, 0x96, 0x1, 0x8F, 0x7, 0xA6, 0x7, 0xA6, 0x1, 0x90, 0x7, 0xA9, 0x7, 0xA9, 0x1, 0x91, 0x7, 0xAB, 0x7, 0xAB, 0x1, 0x92, 0x7, 0xAE, 0x7, 0xB1, 0x1, 0x93, 0x7, 0xDE, 0x7, 0xE2, 0x1, 0x97, 0x7, 0xEE, 0x7, 0xF3, 0x1, 0x9C, 0x7, 0xF5, 0x7, 0xF5, 0x1, 0xA2, 0x7, 0xF7, 0x7, 0xF8, 0x1, 0xA3, 0x7, 0xFA, 0x7, 0xFA, 0x1, 0xA5, 0x8, 0xAD, 0x8, 0xB0, 0x1, 0xA6, 0x8, 0xB3, 0x8, 0xB8, 0x1, 0xAA, 0x8, 0xC8, 0x9, 0x30, 0x1, 0xB0, 0x9, 0x33, 0x9, 0xDA, 0x2, 0x19, 0x9, 0xDC, 0x9, 0xF3, 0x2, 0xC1, 0x9, 0xF5, 0x9, 0xF5, 0x2, 0xD9, 0x9, 0xF7, 0xA, 0x1, 0x2, 0xDA, 0xA, 0x3, 0xA, 0xC, 0x2, 0xE5, 0xA, 0xE, 0xA, 0x29, 0x2, 0xEF, 0xA, 0x2D, 0xA, 0x2D, 0x3, 0xB, 0xA, 0x2F, 0xA, 0x36, 0x3, 0xC, 0xA, 0x38, 0xA, 0x3A, 0x3, 0x14, 0xA, 0x3D, 0xA, 0x41, 0x3, 0x17, 0xA, 0x43, 0xA, 0xCC, 0x3, 0x1C, 0xA, 0xCF, 0xA, 0xCF, 0x3, 0xA6, 0xA, 0xD2, 0xA, 0xD3, 0x3, 0xA7, 0xA, 0xD5, 0xA, 0xD6, 0x3, 0xA9, 0xA, 0xD8, 0xA, 0xDB, 0x3, 0xAB, 0xA, 0xE7, 0xA, 0xE7, 0x3, 0xAF, 0xA, 0xEE, 0xB, 0xC, 0x3, 0xB0, 0xB, 0x10, 0xB, 0x44, 0x3, 0xCF, 0xB, 0x47, 0xC, 0x33, 0x4, 0x4, 0xC, 0x3C, 0xC, 0x71, 0x4, 0xF1, 0xC, 0x7A, 0xC, 0xAD, 0x5, 0x27, 0xC, 0xB7, 0xC, 0xBC, 0x5, 0x5B, 0xC, 0xBE, 0xC, 0xDD, 0x5, 0x61, 0xC, 0xDF, 0xC, 0xE6, 0x5, 0x81, 0xC, 0xE8, 0xC, 0xE9, 0x5, 0x89, 0xC, 0xEB, 0xC, 0xEB, 0x5, 0x8B, 0xC, 0xED, 0xD, 0x1E, 0x5, 0x8C, 0x0, 0x1, 0x0, 0x0, 0x0, 0x6, 0x0, 0x1, 0xFF, 0xB7, 0x4, 0x26, 0x5, 0xBE, 0x13, 0x52, 0x11, 0x96, 0x11, 0xA2, 0x11, 0xAE, 0x13, 0x5E, 0x11, 0xBA, 0x11, 0xC6, 0x12, 0x86, 0x12, 0x92, 0x11, 0x72, 0x11, 0xCC, 0x11, 0xD8, 0x11, 0xE4, 0x11, 0xF0, 0x13, 0x6A, 0x12, 0xAA, 0x13, 0x6A, 0x12, 0x2, 0x12, 0xE, 0x12, 0x1A, 0x12, 0x20, 0x12, 0x2C, 0x12, 0x38, 0x12, 0x3E, 0x12, 0xA4, 0x12, 0x4A, 0x13, 0x58, 0x11, 0x9C, 0x11, 0xA8, 0x11, 0xB4, 0x13, 0x64, 0x11, 0xC0, 0x12, 0x80, 0x12, 0x56, 0x11, 0xC, 0x11, 0x84, 0x11, 0xD2, 0x11, 0xDE, 0x11, 0xEA, 0x11, 0xF6, 0x13, 0x70, 0x11, 0xFC, 0x11, 0x90, 0x12, 0x8, 0x12, 0x14, 0x12, 0x5C, 0x12, 0x26, 0x12, 0x32, 0x12, 0x62, 0x12, 0x44, 0x12, 0x68, 0x12, 0x50, 0x11, 0x5A, 0x10, 0x76, 0x11, 0x60, 0x10, 0x7C, 0x10, 0x28, 0x12, 0x86, 0x13, 0x9A, 0x10, 0xA0, 0xF, 0x38, 0xB, 0x7E, 0xB, 0x84, 0x12, 0x80, 0xB, 0x8A, 0xB, 0x90, 0xB, 0x96, 0xB, 0x9C, 0xB, 0xA2, 0xB, 0xA8, 0xB, 0xAE, 0xB, 0xB4, 0xD, 0x70, 0x11, 0x12, 0x11, 0x18, 0xB, 0xBA, 0x11, 0x1E, 0x11, 0x24, 0x12, 0x4A, 0xB, 0xC0, 0xB, 0xC6, 0x12, 0x80, 0x10, 0xAC, 0xB, 0xCC, 0xB, 0xD2, 0xB, 0xD8, 0xB, 0xDE, 0xB, 0xE4, 0xB, 0xEA, 0xB, 0xF0, 0xB, 0xF6, 0xB, 0xFC, 0x13, 0x58, 0xC, 0x2, 0xC, 0x2, 0xC, 0x8, 0x11, 0xA8, 0xC, 0xE, 0xC, 0x14, 0xD, 0x1C, 0x13, 0x64, 0x11, 0x54, 0xC, 0x1A, 0xC, 0x20, 0xC, 0x20, 0xC, 0x26, 0xD, 0x4, 0xC, 0x2C, 0xC, 0x32, 0x12, 0x80, 0xC, 0x38, 0xC, 0x3E, 0xC, 0x44, 0xC, 0x4A, 0xC, 0x50, 0xC, 0x50, 0xC, 0x56, 0xC, 0x5C, 0xC, 0x62, 0xC, 0x68, 0xC, 0x6E, 0xC, 0x74, 0xF, 0x68, 0x11, 0xEA, 0x11, 0xEA, 0x11, 0xEA, 0xC, 0x7A, 0xC, 0x80, 0xC, 0x86, 0xC, 0x8C, 0xC, 0x92, 0xC, 0x98, 0x12, 0x8, 0xC, 0x9E, 0xC, 0xA4, 0x12, 0x8, 0x12, 0x8, 0xC, 0xAA, 0xC, 0xAA, 0x11, 0xF6, 0x11, 0xF6, 0x12, 0x14, 0xF, 0x9E, 0xF, 0x9E, 0xC, 0xB0, 0xC, 0xB6, 0xC, 0xBC, 0xC, 0xC2, 0xC, 0xC8, 0xF, 0x1A, 0xC, 0xCE, 0xF, 0x5C, 0xC, 0xD4, 0xC, 0xDA, 0xC, 0xE0, 0xC, 0xE6, 0xC, 0xEC, 0xC, 0xF2, 0xC, 0xF8, 0xD, 0x22, 0xD, 0x22, 0xD, 0x22, 0xD, 0x22, 0xC, 0xFE, 0xD, 0x4, 0xD, 0xA, 0xD, 0x10, 0xE, 0x6, 0xD, 0x16, 0xD, 0x1C, 0xD, 0x22, 0xD, 0x22, 0xD, 0x28, 0xD, 0x2E, 0xD, 0x34, 0xD, 0x3A, 0xD, 0x40, 0xD, 0x46, 0xD, 0x4C, 0xD, 0x52, 0xD, 0x58, 0xD, 0x5E, 0xD, 0x64, 0xF, 0xE, 0xD, 0x6A, 0x11, 0x42, 0x12, 0x7A, 0x12, 0x74, 0x12, 0x80, 0x12, 0x8C, 0xD, 0x70, 0x12, 0x98, 0x12, 0x9E, 0x10, 0xB2, 0x12, 0xB0, 0x11, 0x7E, 0xD, 0x76, 0xD, 0x7C, 0x10, 0xCA, 0x10, 0xD6, 0x10, 0xE2, 0x10, 0xFA, 0x11, 0x36, 0x11, 0x0, 0x10, 0xEE, 0xD, 0x82, 0xD, 0x88, 0x11, 0x66, 0x11, 0x48, 0xD, 0x8E, 0x10, 0xD0, 0x10, 0xDC, 0x10, 0xE8, 0x10, 0xA6, 0xE, 0x1E, 0xD, 0xEE, 0x11, 0x6C, 0x11, 0x6C, 0x11, 0x30, 0xD, 0x94, 0xD, 0x9A, 0x11, 0x3C, 0xD, 0xA0, 0xD, 0xA6, 0x11, 0x6, 0x10, 0xF4, 0xD, 0xAC, 0xD, 0xB2, 0x10, 0xF4, 0xD, 0xB8, 0xD, 0xBE, 0xD, 0xC4, 0x11, 0x8A, 0x12, 0x80, 0x10, 0xB8, 0x10, 0xBE, 0xD, 0xCA, 0xD, 0xD0, 0xD, 0xD6, 0xD, 0xDC, 0x10, 0xE2, 0x10, 0xE8, 0x10, 0xCA, 0x10, 0xD0, 0x10, 0xA6, 0x12, 0x86, 0x11, 0x6C, 0xD, 0xE2, 0xD, 0xE8, 0x12, 0x3E, 0x12, 0x44, 0x11, 0x36, 0x11, 0x3C, 0xE, 0x18, 0xE, 0x1E, 0x12, 0x86, 0x11, 0x6C, 0x11, 0xE4, 0xD, 0xEE, 0x10, 0xC4, 0x12, 0x3E, 0x12, 0x44, 0xD, 0xF4, 0x11, 0x7E, 0xD, 0xFA, 0xE, 0x0, 0xE, 0x6, 0xE, 0xC, 0xE, 0x12, 0xE, 0x1E, 0x11, 0x6C, 0xE, 0x18, 0x12, 0x56, 0xE, 0x1E, 0xE, 0x9C, 0x13, 0x3A, 0xE, 0x24, 0xF, 0xE, 0x13, 0x58, 0xE, 0x2A, 0xE, 0x30, 0xE, 0x36, 0xE, 0x3C, 0xE, 0x42, 0xE, 0x48, 0xE, 0x4E, 0xE, 0x54, 0xE, 0x5A, 0x10, 0xA0, 0xE, 0x60, 0x11, 0xA8, 0xE, 0x66, 0xE, 0x6C, 0xE, 0xA8, 0xE, 0x72, 0xE, 0x72, 0xF, 0x5C, 0xE, 0x78, 0xE, 0x7E, 0xE, 0x84, 0x12, 0x50, 0x12, 0x50, 0xE, 0x8A, 0xE, 0x90, 0xE, 0x96, 0xE, 0x9C, 0xE, 0xA2, 0xE, 0xA8, 0xE, 0xAE, 0xE, 0xB4, 0xE, 0xBA, 0xE, 0xC0, 0x12, 0x2, 0xE, 0xC6, 0xE, 0xCC, 0xE, 0xD2, 0xE, 0xD8, 0xE, 0xDE, 0xE, 0xE4, 0xE, 0xEA, 0xE, 0xF0, 0xE, 0xF6, 0x12, 0x80, 0xE, 0xFC, 0xF, 0x2, 0xF, 0x8, 0xF, 0xE, 0xF, 0x14, 0xF, 0x1A, 0xF, 0x20, 0xF, 0x26, 0xF, 0x2C, 0xF, 0x32, 0xF, 0x38, 0xF, 0x3E, 0xF, 0x44, 0xF, 0x4A, 0xF, 0x50, 0x12, 0x8, 0x12, 0x14, 0xF, 0x56, 0xF, 0x5C, 0xF, 0x62, 0x12, 0x50, 0xF, 0x68, 0xF, 0x6E, 0xF, 0x74, 0xF, 0x7A, 0xF, 0x80, 0xF, 0x86, 0xF, 0x8C, 0xF, 0x92, 0xF, 0x98, 0xF, 0x9E, 0xF, 0xA4, 0xF, 0xAA, 0xF, 0xB0, 0xF, 0xB6, 0xF, 0xBC, 0xF, 0xC2, 0x12, 0x86, 0x12, 0x56, 0x11, 0xF0, 0x11, 0xF6, 0x12, 0xDA, 0x13, 0x4C, 0x13, 0x10, 0x13, 0x46, 0xF, 0xC8, 0x10, 0x94, 0x13, 0xA, 0x13, 0x40, 0x10, 0x8E, 0x13, 0x82, 0x13, 0x4, 0x13, 0x82, 0x12, 0xE0, 0x12, 0xFE, 0x12, 0xF8, 0x12, 0xEC, 0x13, 0x34, 0x12, 0xE6, 0x13, 0x1C, 0x10, 0x88, 0xF, 0xCE, 0x12, 0xF8, 0x13, 0x22, 0xF, 0xD4, 0x13, 0x16, 0x13, 0x28, 0x13, 0x2E, 0xF, 0xF2, 0xF, 0xDA, 0x13, 0x22, 0xF, 0xE0, 0xF, 0xE6, 0xF, 0xEC, 0xF, 0xF2, 0xF, 0xF8, 0x13, 0x82, 0x13, 0x7C, 0xF, 0xFE, 0x10, 0x4, 0x10, 0x82, 0x13, 0x22, 0x12, 0xF2, 0x13, 0x76, 0x13, 0x94, 0x13, 0x94, 0x13, 0x88, 0x13, 0x8E, 0x10, 0xA, 0x10, 0xAC, 0x10, 0x10, 0x10, 0x16, 0x10, 0x1C, 0x10, 0xAC, 0x10, 0x22, 0x13, 0x9A, 0x13, 0x9A, 0x13, 0x9A, 0x10, 0xAC, 0x10, 0x28, 0x10, 0x2E, 0x10, 0x34, 0x10, 0x3A, 0x10, 0x40, 0x13, 0x3A, 0x10, 0x46, 0x13, 0x82, 0x10, 0x4C, 0x12, 0xE0, 0x10, 0x52, 0x10, 0x52, 0x10, 0x58, 0x12, 0x1A, 0x12, 0x5C, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x11, 0xA2, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x11, 0xF0, 0x13, 0x6A, 0x13, 0x6A, 0x13, 0x6A, 0x13, 0x6A, 0x13, 0x6A, 0x12, 0x20, 0x12, 0x20, 0x12, 0x20, 0x12, 0x20, 0x12, 0xA4, 0x13, 0x58, 0x13, 0x58, 0x13, 0x58, 0x13, 0x58, 0x13, 0x58, 0x13, 0x58, 0x13, 0x58, 0x11, 0xA8, 0x13, 0x64, 0x13, 0x64, 0x13, 0x64, 0x13, 0x64, 0x13, 0x9A, 0x13, 0x9A, 0x13, 0x9A, 0x13, 0x9A, 0x11, 0xF6, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x12, 0x26, 0x12, 0x26, 0x12, 0x26, 0x12, 0x26, 0x12, 0x68, 0x12, 0x68, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x11, 0xA2, 0x11, 0xA8, 0x11, 0xA2, 0x11, 0xA8, 0x11, 0xA2, 0x11, 0xA8, 0x11, 0xA2, 0x11, 0xA8, 0x11, 0xAE, 0x10, 0x5E, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x11, 0xC6, 0x12, 0x80, 0x11, 0xC6, 0x12, 0x80, 0x11, 0xC6, 0x12, 0x80, 0x11, 0xC6, 0x12, 0x80, 0x12, 0x86, 0x12, 0x56, 0x12, 0x92, 0x13, 0x9A, 0x12, 0x92, 0x13, 0x9A, 0x12, 0x92, 0x13, 0x9A, 0x12, 0x92, 0x11, 0xC, 0x12, 0x92, 0x11, 0x72, 0x10, 0xAC, 0x11, 0xCC, 0x11, 0xD2, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xD8, 0x10, 0x64, 0x11, 0xD8, 0x10, 0x6A, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF6, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x1A, 0x10, 0x70, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x38, 0x12, 0x62, 0x12, 0xA4, 0x12, 0x68, 0x12, 0xA4, 0x12, 0x4A, 0x12, 0x50, 0x12, 0x4A, 0x12, 0x50, 0x12, 0x4A, 0x12, 0x50, 0x11, 0x5A, 0x11, 0x60, 0x10, 0x76, 0x10, 0x7C, 0x10, 0x82, 0x10, 0x82, 0x13, 0xA, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x22, 0x13, 0x7C, 0x13, 0x7C, 0x13, 0x7C, 0x13, 0x7C, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE0, 0x13, 0x82, 0x13, 0x82, 0x13, 0x82, 0x13, 0x82, 0x13, 0x82, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x13, 0x4C, 0x13, 0x76, 0x13, 0x76, 0x13, 0x76, 0x13, 0x22, 0x13, 0x22, 0x13, 0x22, 0x13, 0x22, 0x10, 0x82, 0x13, 0x7C, 0x13, 0x7C, 0x13, 0x7C, 0x13, 0x7C, 0x13, 0x7C, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x13, 0x1C, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE6, 0x12, 0xE6, 0x13, 0x34, 0x12, 0xEC, 0x12, 0xF8, 0x12, 0xF8, 0x12, 0xF8, 0x12, 0xF8, 0x12, 0xE0, 0x12, 0xE0, 0x12, 0xE0, 0x13, 0x82, 0x13, 0x82, 0x13, 0x82, 0x13, 0x82, 0x10, 0x8E, 0x10, 0x8E, 0x10, 0x8E, 0x13, 0x40, 0x13, 0x40, 0x13, 0x40, 0x13, 0x40, 0x13, 0xA, 0x13, 0xA, 0x13, 0xA, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x10, 0x94, 0x13, 0x46, 0x13, 0x4C, 0x13, 0x4C, 0x12, 0xDA, 0x12, 0xDA, 0x12, 0xDA, 0x13, 0x52, 0x13, 0x5E, 0x12, 0x86, 0x12, 0x92, 0x12, 0xB6, 0x10, 0x9A, 0x12, 0x8C, 0x13, 0x52, 0x11, 0x96, 0x13, 0x5E, 0x12, 0x4A, 0x12, 0x86, 0x12, 0x92, 0x11, 0xCC, 0x11, 0xE4, 0x11, 0xF0, 0x13, 0x6A, 0x12, 0xAA, 0x12, 0x1A, 0x12, 0xA4, 0x12, 0x3E, 0x12, 0x92, 0x12, 0xA4, 0x12, 0x7A, 0x12, 0x74, 0x12, 0x80, 0x12, 0x8C, 0x12, 0x9E, 0x10, 0xA0, 0x13, 0x70, 0x12, 0x32, 0x12, 0x8C, 0x12, 0x9E, 0x13, 0x70, 0x12, 0x9E, 0x12, 0xB0, 0x13, 0x5E, 0x11, 0x42, 0x12, 0xE, 0x12, 0x92, 0x12, 0x92, 0x11, 0x72, 0x11, 0xCC, 0x10, 0xFA, 0x13, 0x52, 0x11, 0x96, 0x11, 0x42, 0x13, 0x5E, 0x10, 0xE2, 0x11, 0xE4, 0x12, 0x86, 0x13, 0x6A, 0x12, 0xAA, 0x11, 0xA2, 0x12, 0x1A, 0x12, 0x3E, 0x13, 0x58, 0x13, 0x64, 0x10, 0xE8, 0x13, 0x70, 0x11, 0xFC, 0x11, 0xA8, 0x12, 0x68, 0x12, 0x44, 0x13, 0x64, 0x11, 0x48, 0x12, 0x14, 0x11, 0xC, 0x13, 0x9A, 0x11, 0x84, 0x10, 0xA6, 0x12, 0x68, 0x12, 0x38, 0x12, 0x62, 0x12, 0x38, 0x12, 0x62, 0x12, 0x38, 0x12, 0x62, 0x12, 0xA4, 0x12, 0x68, 0x10, 0xAC, 0x11, 0xE4, 0x11, 0xEA, 0x13, 0x52, 0x13, 0x58, 0x13, 0x5E, 0x10, 0xE2, 0x13, 0x64, 0x10, 0xE8, 0x10, 0xB2, 0x10, 0xB8, 0x10, 0xBE, 0x10, 0xD6, 0x10, 0xDC, 0x11, 0xA2, 0x11, 0xA8, 0x12, 0xA4, 0x12, 0x92, 0x10, 0xCA, 0x10, 0xD0, 0x12, 0x92, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x11, 0x5A, 0x11, 0x60, 0x13, 0x5E, 0x13, 0x64, 0x10, 0xC4, 0x11, 0x54, 0x11, 0x54, 0x10, 0xCA, 0x10, 0xD0, 0x10, 0xD6, 0x10, 0xDC, 0x10, 0xE2, 0x10, 0xE8, 0x10, 0xE2, 0x10, 0xE8, 0x13, 0x6A, 0x13, 0x70, 0x11, 0x8A, 0x12, 0x80, 0x11, 0x8A, 0x11, 0x8A, 0x12, 0x80, 0x10, 0xEE, 0x10, 0xF4, 0x10, 0xFA, 0x12, 0x68, 0x10, 0xFA, 0x12, 0x68, 0x10, 0xFA, 0x12, 0x68, 0x11, 0x36, 0x11, 0x3C, 0x11, 0x0, 0x11, 0x6, 0x11, 0xB4, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x12, 0x92, 0x13, 0x9A, 0x12, 0x92, 0x11, 0xC, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x11, 0x12, 0x11, 0x18, 0x11, 0x12, 0x11, 0x18, 0x11, 0x12, 0x11, 0x18, 0x11, 0x12, 0x11, 0x18, 0x11, 0x12, 0x11, 0x18, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x11, 0x1E, 0x11, 0x24, 0x11, 0x1E, 0x11, 0x24, 0x11, 0x1E, 0x11, 0x24, 0x11, 0x1E, 0x11, 0x24, 0x11, 0x1E, 0x11, 0x24, 0x12, 0xA4, 0x12, 0x68, 0x12, 0xA4, 0x12, 0x68, 0x12, 0xA4, 0x12, 0x68, 0x11, 0x2A, 0x12, 0x1A, 0x11, 0x30, 0x11, 0x36, 0x11, 0x3C, 0x11, 0x42, 0x11, 0x48, 0x12, 0x56, 0x11, 0x42, 0x11, 0x48, 0x11, 0x4E, 0x12, 0xA4, 0x12, 0x3E, 0x12, 0x44, 0x12, 0x74, 0x11, 0xBA, 0x12, 0x80, 0x13, 0x52, 0x13, 0x58, 0x12, 0x92, 0x13, 0x9A, 0x13, 0x6A, 0x13, 0x70, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x11, 0x54, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x11, 0x5A, 0x11, 0x60, 0x11, 0xC6, 0x12, 0x80, 0x11, 0xCC, 0x11, 0xD2, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x11, 0xC6, 0x12, 0x80, 0x11, 0xF0, 0x11, 0xF6, 0x13, 0x52, 0x13, 0x58, 0x13, 0x52, 0x13, 0x58, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x12, 0x92, 0x13, 0x9A, 0x12, 0x92, 0x13, 0x9A, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x86, 0x12, 0x56, 0x13, 0x52, 0x13, 0x58, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x12, 0xA4, 0x12, 0x68, 0x12, 0x80, 0x11, 0x66, 0x11, 0x6C, 0x11, 0x72, 0x11, 0x78, 0x11, 0x7E, 0x11, 0xA8, 0x11, 0x84, 0x11, 0x8A, 0x11, 0xA2, 0x11, 0xE4, 0x13, 0x6A, 0x11, 0x90, 0x12, 0x38, 0x12, 0x62, 0x11, 0x96, 0x11, 0x9C, 0x11, 0x96, 0x11, 0x9C, 0x11, 0x96, 0x11, 0x9C, 0x11, 0xA2, 0x11, 0xA8, 0x11, 0xAE, 0x11, 0xB4, 0x11, 0xAE, 0x11, 0xB4, 0x11, 0xAE, 0x11, 0xB4, 0x11, 0xAE, 0x11, 0xB4, 0x11, 0xAE, 0x11, 0xB4, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x5E, 0x13, 0x64, 0x11, 0xBA, 0x11, 0xC0, 0x11, 0xC6, 0x12, 0x80, 0x12, 0x86, 0x12, 0x56, 0x12, 0x86, 0x12, 0x56, 0x12, 0x86, 0x12, 0x56, 0x12, 0x86, 0x12, 0x56, 0x11, 0xCC, 0x11, 0xD2, 0x11, 0xCC, 0x11, 0xD2, 0x11, 0xCC, 0x11, 0xD2, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xD8, 0x11, 0xDE, 0x11, 0xE4, 0x11, 0xEA, 0x11, 0xE4, 0x11, 0xEA, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF0, 0x11, 0xF6, 0x11, 0xF0, 0x11, 0xF6, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x6A, 0x13, 0x70, 0x12, 0xAA, 0x11, 0xFC, 0x12, 0xAA, 0x11, 0xFC, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0x2, 0x12, 0x8, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0xE, 0x12, 0x14, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x1A, 0x12, 0x5C, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x20, 0x12, 0x26, 0x12, 0x2C, 0x12, 0x32, 0x12, 0x2C, 0x12, 0x32, 0x12, 0x38, 0x12, 0x62, 0x12, 0x38, 0x12, 0x62, 0x12, 0x3E, 0x12, 0x44, 0x12, 0x3E, 0x12, 0x44, 0x12, 0xA4, 0x12, 0x68, 0x12, 0x4A, 0x12, 0x50, 0x12, 0x4A, 0x12, 0x50, 0x12, 0x4A, 0x12, 0x50, 0x12, 0x56, 0x12, 0x5C, 0x12, 0x62, 0x12, 0x68, 0x13, 0x58, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x13, 0x5E, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x12, 0xB6, 0x12, 0xB6, 0x12, 0x6E, 0x12, 0x6E, 0x12, 0x6E, 0x12, 0x6E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x74, 0x12, 0x74, 0x12, 0x80, 0x12, 0x80, 0x12, 0x8C, 0x12, 0x8C, 0x13, 0x70, 0x13, 0x70, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x12, 0x7A, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x13, 0x52, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x12, 0x80, 0x13, 0x5E, 0x13, 0x5E, 0x12, 0x86, 0x12, 0x86, 0x12, 0x86, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x8C, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x92, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0x98, 0x12, 0x98, 0x12, 0x9E, 0x12, 0x9E, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xA4, 0x12, 0xAA, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB0, 0x12, 0xB6, 0x12, 0xB6, 0x13, 0x76, 0x12, 0xBC, 0x12, 0xC2, 0x12, 0xC8, 0x12, 0xCE, 0x12, 0xD4, 0x13, 0x76, 0x12, 0xF2, 0x13, 0x7C, 0x12, 0xDA, 0x13, 0x1C, 0x12, 0xE6, 0x12, 0xEC, 0x12, 0xFE, 0x12, 0xE0, 0x13, 0x82, 0x13, 0x4, 0x13, 0xA, 0x13, 0x4C, 0x13, 0x10, 0x12, 0xE6, 0x13, 0x4C, 0x13, 0x7C, 0x12, 0xF8, 0x13, 0x40, 0x12, 0xE6, 0x12, 0xE6, 0x13, 0x34, 0x12, 0xEC, 0x13, 0x2E, 0x13, 0x76, 0x12, 0xF2, 0x12, 0xF8, 0x13, 0x7C, 0x13, 0x28, 0x12, 0xFE, 0x13, 0x1C, 0x13, 0x82, 0x13, 0x4, 0x13, 0x22, 0x13, 0xA, 0x13, 0x10, 0x13, 0x16, 0x13, 0x1C, 0x13, 0x22, 0x13, 0x4C, 0x13, 0x28, 0x13, 0x2E, 0x13, 0x34, 0x13, 0x3A, 0x13, 0x82, 0x13, 0x40, 0x13, 0x46, 0x13, 0x46, 0x13, 0x46, 0x13, 0x4C, 0x13, 0x52, 0x13, 0x58, 0x13, 0x5E, 0x13, 0x64, 0x13, 0x6A, 0x13, 0x70, 0x13, 0x76, 0x13, 0x7C, 0x13, 0x82, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x88, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x8E, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x94, 0x13, 0x9A, 0x13, 0x9A, 0x0, 0x1, 0x2, 0x4F, 0x6, 0x9B, 0x0, 0x1, 0x5, 0x94, 0x6, 0x40, 0x0, 0x1, 0x7, 0xB4, 0x6, 0x40, 0x0, 0x1, 0x7, 0x3B, 0x5, 0xA, 0x0, 0x1, 0x2, 0xD, 0x6, 0xBE, 0x0, 0x1, 0x4, 0xDA, 0x6, 0x47, 0x0, 0x1, 0x5, 0x89, 0x6, 0x40, 0x0, 0x1, 0x4, 0xD6, 0x6, 0x40, 0x0, 0x1, 0x2, 0xC6, 0x6, 0x48, 0x0, 0x1, 0x2, 0xC6, 0x6, 0x9B, 0x0, 0x1, 0x4, 0x91, 0x6, 0x48, 0x0, 0x1, 0x4, 0x14, 0x5, 0xA, 0x0, 0x1, 0x5, 0x8B, 0x6, 0x55, 0x0, 0x1, 0x4, 0xA0, 0x6, 0x40, 0x0, 0x1, 0x5, 0x5B, 0x6, 0x4C, 0x0, 0x1, 0x6, 0x43, 0x6, 0x40, 0x0, 0x1, 0x4, 0xCC, 0x6, 0x41, 0x0, 0x1, 0x2, 0xDF, 0x6, 0x40, 0x0, 0x1, 0x5, 0x43, 0x6, 0x40, 0x0, 0x1, 0x3, 0x2D, 0x5, 0xA, 0x0, 0x1, 0x5, 0x95, 0x6, 0x40, 0x0, 0x1, 0x4, 0x52, 0x5, 0xA, 0x0, 0x1, 0x4, 0xB8, 0x5, 0xA, 0x0, 0x1, 0x4, 0x82, 0x6, 0xA4, 0x0, 0x1, 0x4, 0x47, 0x5, 0xA, 0x0, 0x1, 0x4, 0xDA, 0x6, 0x63, 0x0, 0x1, 0x5, 0xC1, 0x5, 0xA, 0x0, 0x1, 0x4, 0x61, 0x5, 0xA, 0x0, 0x1, 0x5, 0xD6, 0x5, 0xA, 0x0, 0x1, 0x2, 0xBA, 0x5, 0xA, 0x0, 0x1, 0x4, 0xE4, 0x5, 0xA, 0x0, 0x1, 0x4, 0xDB, 0x5, 0xA, 0x0, 0x1, 0x4, 0x76, 0x5, 0xA, 0x0, 0x1, 0x5, 0x1B, 0x5, 0xA, 0x0, 0x1, 0x4, 0x71, 0x5, 0xA, 0x0, 0x1, 0x4, 0x71, 0x6, 0xA4, 0x0, 0x1, 0x2, 0xC6, 0x6, 0x40, 0x0, 0x1, 0x2, 0x78, 0x5, 0xA, 0x0, 0x1, 0x2, 0xD7, 0x5, 0xA, 0x0, 0x1, 0x3, 0x6, 0x6, 0x40, 0x0, 0x1, 0x3, 0xD3, 0x6, 0x40, 0x0, 0x1, 0x2, 0xA6, 0x6, 0x40, 0x0, 0x1, 0x4, 0xD0, 0x5, 0xA, 0x0, 0x1, 0x4, 0xCF, 0x5, 0xA, 0x0, 0x1, 0x4, 0x86, 0x5, 0xA, 0x0, 0x1, 0x6, 0xA8, 0x5, 0xA, 0x0, 0x1, 0x6, 0x93, 0x5, 0xA, 0x0, 0x1, 0x4, 0xD4, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD0, 0x6, 0x40, 0x0, 0x1, 0x3, 0x2A, 0x5, 0xA, 0x0, 0x1, 0x2, 0x68, 0x5, 0xA, 0x0, 0x1, 0x3, 0x4C, 0x5, 0xA, 0x0, 0x1, 0x3, 0xF2, 0x6, 0xA4, 0x0, 0x1, 0x2, 0xAA, 0x6, 0x40, 0x0, 0x1, 0x2, 0xC1, 0x6, 0x40, 0x0, 0x1, 0x5, 0x3E, 0x5, 0xA, 0x0, 0x1, 0x4, 0x60, 0x5, 0xA, 0x0, 0x1, 0x5, 0xF0, 0x5, 0xA, 0x0, 0x1, 0x3, 0xE7, 0x6, 0x40, 0x0, 0x1, 0x4, 0x39, 0x5, 0xA, 0x0, 0x1, 0x4, 0x93, 0x5, 0xA, 0x0, 0x1, 0x5, 0x1, 0x5, 0xA, 0x0, 0x1, 0x4, 0x8D, 0x5, 0xA, 0x0, 0x1, 0x4, 0xA3, 0x5, 0xA, 0x0, 0x1, 0x5, 0x86, 0x6, 0x61, 0x0, 0x1, 0x4, 0x43, 0x5, 0xA, 0x0, 0x1, 0x5, 0x11, 0x5, 0xA, 0x0, 0x1, 0x3, 0xAD, 0x6, 0x40, 0x0, 0x1, 0x3, 0x8B, 0x5, 0xA, 0x0, 0x1, 0x4, 0xDA, 0x6, 0x40, 0x0, 0x1, 0x4, 0x31, 0x6, 0x61, 0x0, 0x1, 0x7, 0xB8, 0x6, 0x40, 0x0, 0x1, 0x7, 0x64, 0x6, 0x40, 0x0, 0x1, 0x8, 0xB2, 0x6, 0x40, 0x0, 0x1, 0x5, 0xDD, 0x6, 0x40, 0x0, 0x1, 0x4, 0x95, 0x6, 0xA4, 0x0, 0x1, 0x6, 0x3D, 0x6, 0x40, 0x0, 0x1, 0x6, 0xD3, 0x6, 0xA4, 0x0, 0x1, 0x5, 0x75, 0x6, 0x40, 0x0, 0x1, 0x5, 0x35, 0x6, 0x40, 0x0, 0x1, 0x3, 0xC6, 0x6, 0x40, 0x0, 0x1, 0x3, 0xDD, 0x6, 0x40, 0x0, 0x1, 0x5, 0x57, 0x5, 0xA, 0x0, 0x1, 0x3, 0xEE, 0x6, 0x47, 0x0, 0x1, 0x6, 0x71, 0x4, 0xFC, 0x0, 0x1, 0x5, 0x5A, 0x6, 0x40, 0x0, 0x1, 0x7, 0x54, 0x6, 0x40, 0x0, 0x1, 0x4, 0xF7, 0x6, 0x4C, 0x0, 0x1, 0x4, 0xF7, 0x4, 0xF5, 0x0, 0x1, 0x5, 0xD3, 0x6, 0xCC, 0x0, 0x1, 0x4, 0xD4, 0x4, 0xF5, 0x0, 0x1, 0x6, 0x8F, 0x4, 0xF5, 0x0, 0x1, 0x6, 0xEC, 0x4, 0xF5, 0x0, 0x1, 0x6, 0x84, 0x4, 0xF5, 0x0, 0x1, 0x4, 0x70, 0x4, 0xF5, 0x0, 0x1, 0x7, 0x49, 0x6, 0x41, 0x0, 0x1, 0x6, 0x50, 0x4, 0xFC, 0x0, 0x1, 0x3, 0xF0, 0x6, 0xCC, 0x0, 0x1, 0x4, 0x89, 0x5, 0x50, 0x0, 0x1, 0x6, 0x50, 0x6, 0x40, 0x0, 0x1, 0x5, 0x1B, 0x6, 0x61, 0x0, 0x1, 0x4, 0x4A, 0x5, 0xC, 0x0, 0x1, 0x6, 0x2B, 0x6, 0x56, 0x0, 0x1, 0x5, 0x0, 0x5, 0xA, 0x0, 0x1, 0x6, 0x3, 0x4, 0xF5, 0x0, 0x1, 0x6, 0x53, 0x6, 0x4C, 0x0, 0x1, 0x7, 0xFE, 0x6, 0x4C, 0x0, 0x1, 0x5, 0x4, 0x6, 0x61, 0x0, 0x1, 0x4, 0x2D, 0x5, 0xA, 0x0, 0x1, 0x5, 0xAA, 0x6, 0x4C, 0x0, 0x1, 0x5, 0x56, 0x6, 0x61, 0x0, 0x1, 0x5, 0x87, 0x6, 0x4C, 0x0, 0x1, 0x4, 0x9A, 0x4, 0xF5, 0x0, 0x1, 0x6, 0xC1, 0x5, 0xA, 0x0, 0x1, 0x4, 0x8A, 0x5, 0xA, 0x0, 0x1, 0x4, 0xEE, 0x5, 0xA, 0x0, 0x1, 0x4, 0xA, 0x5, 0xA, 0x0, 0x1, 0x4, 0x17, 0x5, 0xA, 0x0, 0x1, 0x2, 0x7, 0x5, 0xA, 0x0, 0x1, 0x3, 0xF0, 0x5, 0xA, 0x0, 0x1, 0x4, 0x6D, 0x5, 0xA, 0x0, 0x1, 0x3, 0xB4, 0x5, 0xA, 0x0, 0x1, 0x5, 0xEB, 0x5, 0xA, 0x0, 0x1, 0x4, 0x9E, 0x5, 0xA, 0x0, 0x1, 0x7, 0x3E, 0x5, 0xA, 0x0, 0x1, 0x3, 0xE6, 0x5, 0xA, 0x0, 0x1, 0x4, 0x7A, 0x5, 0xA, 0x0, 0x1, 0x4, 0xF2, 0x5, 0xA, 0x0, 0x1, 0x3, 0xF7, 0x5, 0xA, 0x0, 0x1, 0x5, 0xF4, 0x5, 0xA, 0x0, 0x1, 0x4, 0x25, 0x5, 0xA, 0x0, 0x1, 0x4, 0xCA, 0x5, 0xA, 0x0, 0x1, 0x3, 0x65, 0x5, 0xA, 0x0, 0x1, 0x4, 0xA0, 0x5, 0xA, 0x0, 0x1, 0x4, 0xAB, 0x5, 0xA, 0x0, 0x1, 0x4, 0x6C, 0x5, 0xA, 0x0, 0x1, 0x5, 0x52, 0x5, 0xA, 0x0, 0x1, 0x4, 0xA4, 0x5, 0xA, 0x0, 0x1, 0x6, 0xFC, 0x5, 0xA, 0x0, 0x1, 0x5, 0xF, 0x6, 0x40, 0x0, 0x1, 0x3, 0x56, 0x6, 0xA4, 0x0, 0x1, 0x7, 0xD7, 0x5, 0xA, 0x0, 0x1, 0x5, 0x4D, 0x5, 0xA, 0x0, 0x1, 0x4, 0xF1, 0x5, 0xA, 0x0, 0x1, 0x3, 0x57, 0x5, 0xA, 0x0, 0x1, 0x3, 0x1D, 0x5, 0xA, 0x0, 0x1, 0x4, 0x51, 0x5, 0xA, 0x0, 0x1, 0x3, 0x1D, 0x6, 0x40, 0x0, 0x1, 0x4, 0x28, 0x5, 0xA, 0x0, 0x1, 0x4, 0x63, 0x5, 0xA, 0x0, 0x1, 0x6, 0xE1, 0x6, 0x40, 0x0, 0x1, 0x2, 0xE5, 0x5, 0xA, 0x0, 0x1, 0x5, 0x17, 0x5, 0xA, 0x0, 0x1, 0x5, 0x5F, 0x5, 0xA, 0x0, 0x1, 0x4, 0xF0, 0x5, 0xA, 0x0, 0x1, 0x4, 0x82, 0x6, 0x40, 0x0, 0x1, 0x4, 0xCC, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD6, 0x6, 0xA1, 0x0, 0x1, 0x5, 0xBB, 0x5, 0xA, 0x0, 0x1, 0x4, 0x64, 0x6, 0x40, 0x0, 0x1, 0x2, 0x56, 0x6, 0xA4, 0x0, 0x1, 0x7, 0x43, 0x5, 0xA, 0x0, 0x1, 0x4, 0xC6, 0x5, 0xA, 0x0, 0x1, 0x4, 0x81, 0x5, 0xA, 0x0, 0x1, 0x3, 0xA4, 0x6, 0xA4, 0x0, 0x1, 0x3, 0xF6, 0x5, 0xA, 0x0, 0x1, 0x4, 0x1C, 0x5, 0xA, 0x0, 0x1, 0x4, 0xD5, 0x5, 0xA, 0x0, 0x1, 0x5, 0x2A, 0x5, 0xA, 0x0, 0x1, 0x4, 0xAE, 0x6, 0x40, 0x0, 0x1, 0x4, 0x79, 0x5, 0xA, 0x0, 0x1, 0x4, 0x8C, 0x5, 0xA, 0x0, 0x1, 0x4, 0x5A, 0x5, 0xA, 0x0, 0x1, 0x5, 0x77, 0x5, 0xA, 0x0, 0x1, 0x2, 0x8A, 0x6, 0x40, 0x0, 0x1, 0x4, 0x38, 0x5, 0xA, 0x0, 0x1, 0x3, 0x4C, 0x6, 0xA4, 0x0, 0x1, 0x5, 0xF, 0x5, 0xA, 0x0, 0x1, 0x4, 0xA7, 0x5, 0xA, 0x0, 0x1, 0x2, 0xA0, 0x6, 0x48, 0x0, 0x1, 0x2, 0x82, 0x6, 0x40, 0x0, 0x1, 0x2, 0x94, 0x6, 0x48, 0x0, 0x1, 0x2, 0x7E, 0x5, 0x3, 0x0, 0x1, 0x4, 0x7C, 0x5, 0x28, 0x0, 0x1, 0x3, 0xC6, 0x5, 0x28, 0x0, 0x1, 0x6, 0x3A, 0x5, 0x28, 0x0, 0x1, 0x6, 0x20, 0x5, 0x28, 0x0, 0x1, 0x6, 0x92, 0x5, 0x28, 0x0, 0x1, 0x4, 0x88, 0x5, 0x28, 0x0, 0x1, 0x5, 0xF1, 0x5, 0x28, 0x0, 0x1, 0x4, 0x8C, 0x5, 0x28, 0x0, 0x1, 0x4, 0xD2, 0x5, 0x28, 0x0, 0x1, 0x5, 0x44, 0x6, 0x4C, 0x0, 0x1, 0x4, 0x31, 0x6, 0x47, 0x0, 0x1, 0x8, 0xAC, 0x6, 0x69, 0x0, 0x1, 0x2, 0x42, 0x5, 0x3, 0x0, 0x1, 0x2, 0xE6, 0x4, 0xE8, 0x0, 0x1, 0x2, 0xD3, 0x5, 0x3, 0x0, 0x1, 0x3, 0xAD, 0x5, 0x3, 0x0, 0x1, 0x4, 0xEE, 0x6, 0x47, 0x0, 0x1, 0x4, 0x9D, 0x5, 0xA, 0x0, 0x1, 0x5, 0xA9, 0x5, 0xA, 0x0, 0x1, 0x5, 0x9D, 0x6, 0x47, 0x0, 0x1, 0x3, 0xC4, 0x5, 0x28, 0x0, 0x1, 0x4, 0x9, 0x5, 0x28, 0x0, 0x1, 0x4, 0xF4, 0x5, 0x28, 0x0, 0x1, 0x5, 0x58, 0x6, 0x48, 0x0, 0x1, 0x4, 0x8F, 0x6, 0x68, 0x0, 0x1, 0x5, 0x1B, 0x6, 0x47, 0x0, 0x1, 0x2, 0xA2, 0x6, 0x9B, 0x0, 0x1, 0x2, 0xE8, 0x6, 0x9B, 0x0, 0x1, 0x2, 0xD2, 0x5, 0xC4, 0x0, 0x1, 0x5, 0x85, 0x6, 0x8A, 0x0, 0x1, 0x4, 0x89, 0x5, 0x7, 0x0, 0x1, 0x4, 0x7B, 0x5, 0x28, 0x0, 0x1, 0x4, 0xA7, 0x5, 0x28, 0x0, 0x1, 0x4, 0x5D, 0x5, 0x28, 0x0, 0x1, 0x4, 0x84, 0x5, 0x28, 0x0, 0x1, 0x5, 0x44, 0x6, 0x40, 0x0, 0x1, 0x4, 0x98, 0x5, 0xA, 0x0, 0x1, 0x4, 0x6F, 0x4, 0xFC, 0x0, 0x1, 0x2, 0x27, 0x4, 0xE8, 0x0, 0x1, 0x5, 0xCA, 0x4, 0xF5, 0x0, 0x1, 0x5, 0x1A, 0x6, 0x1C, 0x0, 0x1, 0x4, 0xF, 0x4, 0xEF, 0x0, 0x1, 0x5, 0x89, 0x6, 0x19, 0x0, 0x1, 0x7, 0xA2, 0x6, 0x48, 0x0, 0x1, 0x6, 0x77, 0x4, 0xFC, 0x0, 0x1, 0x4, 0xD6, 0x6, 0x55, 0x0, 0x1, 0x4, 0x17, 0x5, 0x9, 0x0, 0x1, 0x5, 0xA9, 0x6, 0x48, 0x0, 0x1, 0x4, 0x98, 0x4, 0xFC, 0x0, 0x1, 0x5, 0x51, 0x6, 0x56, 0x0, 0x1, 0x4, 0x3D, 0x5, 0xA, 0x0, 0x1, 0x5, 0xA, 0x6, 0x48, 0x0, 0x1, 0x6, 0xF9, 0x6, 0x48, 0x0, 0x1, 0x6, 0x6F, 0x4, 0xFC, 0x0, 0x1, 0x2, 0xC, 0x6, 0x40, 0x0, 0x1, 0x5, 0x8A, 0x6, 0x3E, 0x0, 0x1, 0x4, 0x9F, 0x5, 0xA, 0x0, 0x1, 0x5, 0xA5, 0x6, 0x4C, 0x0, 0x1, 0x4, 0xF2, 0x4, 0xF5, 0x0, 0x1, 0x4, 0xA3, 0x6, 0x47, 0x0, 0x1, 0x3, 0xF6, 0x4, 0xF5, 0x0, 0x1, 0x5, 0x89, 0x6, 0x48, 0x0, 0x1, 0x4, 0x66, 0x4, 0xFC, 0x0, 0x1, 0x4, 0x75, 0x6, 0x48, 0x0, 0x1, 0x3, 0x5B, 0x4, 0xFC, 0x0, 0x1, 0x4, 0x45, 0x6, 0x47, 0x0, 0x1, 0x4, 0x3D, 0x5, 0xB, 0x0, 0x1, 0x7, 0x85, 0x6, 0x4C, 0x0, 0x1, 0x6, 0xC1, 0x5, 0xB, 0x0, 0x1, 0x4, 0x90, 0x4, 0xF5, 0x0, 0x1, 0x4, 0x98, 0x4, 0xF5, 0x0, 0x1, 0x4, 0x71, 0x6, 0x41, 0x0, 0x1, 0x4, 0xDF, 0x6, 0x4C, 0x0, 0x1, 0x4, 0x7B, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x1, 0x6, 0x40, 0x0, 0x1, 0x5, 0x7B, 0x6, 0x45, 0x0, 0x1, 0x4, 0x8B, 0x5, 0xA, 0x0, 0x1, 0x5, 0xD, 0x6, 0x4C, 0x0, 0x1, 0x4, 0x81, 0x6, 0x47, 0x0, 0x1, 0x5, 0x39, 0x6, 0x55, 0x0, 0x1, 0x4, 0x31, 0x5, 0xA, 0x0, 0x1, 0x5, 0x3A, 0x6, 0x48, 0x0, 0x1, 0x4, 0x85, 0x6, 0x47, 0x0, 0x1, 0x4, 0x66, 0x6, 0x4C, 0x0, 0x1, 0x2, 0xD6, 0x6, 0xBE, 0x0, 0x1, 0x5, 0x73, 0x6, 0x55, 0x0, 0x1, 0x5, 0xB, 0x6, 0x41, 0x0, 0x1, 0x3, 0xAB, 0x6, 0x47, 0x0, 0x1, 0x4, 0x55, 0x6, 0x40, 0x0, 0x1, 0x2, 0xC, 0x6, 0x9B, 0x0, 0x1, 0x7, 0x1, 0x6, 0x40, 0x0, 0x1, 0x6, 0xF7, 0x5, 0xA, 0x0, 0x1, 0x5, 0xAF, 0x6, 0x40, 0x0, 0x1, 0x4, 0x73, 0x5, 0xA, 0x0, 0x1, 0x4, 0x81, 0x5, 0x0, 0x0, 0x1, 0x4, 0xFF, 0x6, 0x40, 0x0, 0x1, 0x2, 0xD0, 0x5, 0xA, 0x0, 0x1, 0x4, 0xD5, 0x6, 0x40, 0x0, 0x1, 0x4, 0x22, 0x5, 0xA, 0x0, 0x1, 0x4, 0xDC, 0x6, 0x40, 0x0, 0x1, 0x5, 0x38, 0x6, 0x40, 0x0, 0x1, 0x4, 0x72, 0x5, 0xA, 0x0, 0x1, 0x5, 0x2E, 0x6, 0x4C, 0x0, 0x1, 0x3, 0xF6, 0x5, 0x0, 0x0, 0x1, 0x7, 0xB, 0x6, 0x40, 0x0, 0x1, 0x5, 0x10, 0x6, 0x4C, 0x0, 0x1, 0x4, 0x7, 0x5, 0x0, 0x0, 0x1, 0x4, 0xD2, 0x6, 0x40, 0x0, 0x1, 0x4, 0x7, 0x5, 0xA, 0x0, 0x1, 0x4, 0x71, 0x6, 0x68, 0x0, 0x1, 0x2, 0xAA, 0x5, 0xC4, 0x0, 0x1, 0x5, 0xF2, 0x5, 0xA, 0x0, 0x1, 0x3, 0xE5, 0x5, 0xA, 0x0, 0x1, 0x5, 0xCC, 0x6, 0x40, 0x0, 0x1, 0x4, 0x61, 0x5, 0x9, 0x0, 0x1, 0x4, 0x85, 0x5, 0xA, 0x0, 0x1, 0x4, 0x89, 0x5, 0xA, 0x0, 0x1, 0x5, 0xB0, 0x6, 0x48, 0x0, 0x1, 0x2, 0xAA, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x42, 0x6, 0x48, 0x0, 0x1, 0x4, 0x89, 0x5, 0x0, 0x0, 0x1, 0x4, 0x61, 0x4, 0xFC, 0x0, 0x1, 0x4, 0xE0, 0x6, 0x40, 0x0, 0x1, 0x5, 0x1E, 0x6, 0x4C, 0x0, 0x1, 0x6, 0x95, 0x4, 0xFA, 0x0, 0x1, 0x5, 0x9A, 0x6, 0x40, 0x0, 0x1, 0x4, 0x1D, 0x5, 0x28, 0x0, 0x1, 0x5, 0x1A, 0x5, 0x28, 0x0, 0x1, 0x2, 0x39, 0x5, 0x28, 0x0, 0x1, 0x4, 0xCA, 0x5, 0x28, 0x0, 0x1, 0x4, 0x79, 0x5, 0x28, 0x0, 0x1, 0x4, 0x2A, 0x5, 0x28, 0x0, 0x1, 0x4, 0xDD, 0x5, 0x28, 0x0, 0x1, 0x1, 0xFD, 0x5, 0x28, 0x0, 0x1, 0x4, 0x5C, 0x5, 0x28, 0x0, 0x1, 0x4, 0x61, 0x5, 0x28, 0x0, 0x1, 0x3, 0xBA, 0x5, 0x28, 0x0, 0x1, 0x6, 0x6, 0x5, 0x28, 0x0, 0x1, 0x4, 0x6D, 0x5, 0x28, 0x0, 0x1, 0x4, 0x3C, 0x5, 0x28, 0x0, 0x1, 0x4, 0x5F, 0x5, 0x28, 0x0, 0x1, 0x4, 0x46, 0x5, 0x28, 0x0, 0x1, 0x4, 0xDE, 0x5, 0x28, 0x0, 0x1, 0x4, 0x80, 0x5, 0x28, 0x0, 0x1, 0x4, 0xE4, 0x5, 0x28, 0x0, 0x1, 0x4, 0x47, 0x5, 0x28, 0x0, 0x1, 0x3, 0xD6, 0x5, 0x28, 0x0, 0x1, 0x6, 0x47, 0x5, 0xA, 0x0, 0x1, 0x4, 0x35, 0x5, 0x28, 0x0, 0x1, 0x6, 0x8, 0x5, 0x28, 0x0, 0x1, 0x4, 0x3D, 0x5, 0x28, 0x0, 0x1, 0x5, 0x53, 0x6, 0x40, 0x0, 0x1, 0x4, 0x55, 0x5, 0xA, 0x0, 0x1, 0x4, 0x86, 0x6, 0x48, 0x0, 0x1, 0x4, 0x4B, 0x5, 0xA, 0x0, 0x1, 0x5, 0x86, 0x6, 0x40, 0x0, 0x1, 0x4, 0x8E, 0x5, 0xA, 0x0, 0x1, 0x4, 0x9E, 0x5, 0x28, 0x0, 0x1, 0x3, 0xE1, 0x5, 0x28, 0x0, 0x1, 0x4, 0xC0, 0x5, 0x28, 0x0, 0x1, 0x5, 0x75, 0x6, 0x5E, 0x0, 0x1, 0x5, 0x98, 0x6, 0x66, 0x0, 0x1, 0x5, 0xB0, 0x6, 0x5E, 0x0, 0x1, 0x2, 0x1B, 0x5, 0x3, 0x0, 0x9, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x4, 0x4A, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x14, 0x0, 0x1, 0x0, 0x1C, 0x0, 0x32, 0x0, 0x1, 0x0, 0x2, 0x8, 0x9A, 0x8, 0x9D, 0x0, 0x1, 0x0, 0x2, 0x0, 0x93, 0x1, 0x31, 0x0, 0x2, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0xFE, 0x9, 0x0, 0xD6, 0x0, 0x1, 0xFD, 0x41, 0x0, 0xD6, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0x0, 0x1, 0x3, 0x1B, 0xFE, 0xCE, 0x0, 0x1, 0x1, 0x64, 0xFE, 0xCB, 0x0, 0x9, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0xB, 0xFC, 0x0, 0x9, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0xC, 0x3A, 0x0, 0x9, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x0, 0x0, 0xC, 0x64, 0x0, 0x6, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xC, 0x0, 0x76, 0x0, 0x1, 0x0, 0xCE, 0x2, 0x62, 0x0, 0x2, 0x0, 0x11, 0x1, 0xC7, 0x1, 0xCA, 0x0, 0x0, 0x1, 0xCD, 0x1, 0xD1, 0x0, 0x4, 0x1, 0xD4, 0x1, 0xE4, 0x0, 0x9, 0x1, 0xEA, 0x1, 0xED, 0x0, 0x1A, 0x1, 0xF6, 0x1, 0xF6, 0x0, 0x1E, 0x1, 0xF8, 0x1, 0xFA, 0x0, 0x1F, 0x1, 0xFE, 0x1, 0xFF, 0x0, 0x22, 0x2, 0x4, 0x2, 0x7, 0x0, 0x24, 0x2, 0xA, 0x2, 0xB, 0x0, 0x28, 0x3, 0x25, 0x3, 0x28, 0x0, 0x2A, 0x3, 0xF1, 0x3, 0xF1, 0x0, 0x2E, 0x3, 0xF9, 0x3, 0xF9, 0x0, 0x2F, 0x3, 0xFE, 0x3, 0xFF, 0x0, 0x30, 0x4, 0x26, 0x4, 0x26, 0x0, 0x32, 0x4, 0x28, 0x4, 0x28, 0x0, 0x33, 0x8, 0x8F, 0x8, 0x95, 0x0, 0x34, 0x8, 0x98, 0x8, 0x98, 0x0, 0x3B, 0x0, 0x2, 0x0, 0xE, 0x0, 0x7A, 0x0, 0x7A, 0x0, 0x0, 0x1, 0x8C, 0x1, 0x8C, 0x0, 0x1, 0x1, 0xC7, 0x1, 0xCA, 0x0, 0x2, 0x1, 0xCD, 0x1, 0xD1, 0x0, 0x6, 0x1, 0xD4, 0x1, 0xD7, 0x0, 0xB, 0x1, 0xDA, 0x1, 0xE4, 0x0, 0xF, 0x1, 0xEA, 0x1, 0xED, 0x0, 0x1A, 0x1, 0xF6, 0x1, 0xF6, 0x0, 0x1E, 0x1, 0xF8, 0x1, 0xFA, 0x0, 0x1F, 0x1, 0xFE, 0x1, 0xFF, 0x0, 0x22, 0x2, 0x4, 0x2, 0x7, 0x0, 0x24, 0x2, 0xA, 0x2, 0xB, 0x0, 0x28, 0x7, 0x25, 0x7, 0x25, 0x0, 0x2A, 0x8, 0x8F, 0x8, 0x95, 0x0, 0x2B, 0x0, 0x3C, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x0, 0xF2, 0x0, 0x0, 0x0, 0xF8, 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0, 0x1, 0x4, 0x0, 0x0, 0x1, 0x7C, 0x0, 0x0, 0x1, 0x7C, 0x0, 0x0, 0x1, 0x7C, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x76, 0x0, 0x0, 0x1, 0x70, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0xA, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x1, 0x28, 0x0, 0x0, 0x1, 0x7C, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x82, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x16, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x6A, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x82, 0x0, 0x0, 0x1, 0x1C, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x22, 0x0, 0x0, 0x1, 0x28, 0x0, 0x0, 0x1, 0x2E, 0x0, 0x0, 0x1, 0x34, 0x0, 0x0, 0x1, 0x3A, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x1, 0x46, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x8E, 0x0, 0x0, 0x1, 0x82, 0x0, 0x0, 0x1, 0x4C, 0x0, 0x0, 0x1, 0x52, 0x0, 0x0, 0x1, 0x58, 0x0, 0x0, 0x1, 0x5E, 0x0, 0x0, 0x1, 0x64, 0x0, 0x0, 0x1, 0x6A, 0x0, 0x0, 0x1, 0x70, 0x0, 0x0, 0x1, 0x76, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x7C, 0x0, 0x0, 0x1, 0x82, 0x0, 0x0, 0x1, 0x88, 0x0, 0x0, 0x1, 0x8E, 0x0, 0x1, 0xFD, 0x9B, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xCF, 0xFF, 0xFC, 0x0, 0x1, 0xFD, 0xB0, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xED, 0xFF, 0xF9, 0x0, 0x1, 0xFD, 0xD0, 0x0, 0x0, 0x0, 0x1, 0xFD, 0x9C, 0x0, 0x3, 0x0, 0x1, 0xFD, 0x98, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xD4, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xEC, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xC8, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xC2, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xEA, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB3, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xC9, 0x0, 0x17, 0x0, 0x1, 0xFD, 0xD6, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xDE, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB9, 0x0, 0x0, 0x0, 0x1, 0xFE, 0x3C, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xC4, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xC9, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB2, 0x0, 0x0, 0x0, 0x1, 0xFD, 0x68, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xA8, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB6, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB7, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xB8, 0x0, 0x0, 0x0, 0x1, 0xFD, 0xD9, 0x0, 0x0, 0x0, 0x32, 0x0, 0x66, 0x0, 0x6C, 0x0, 0x72, 0x0, 0x78, 0x0, 0x7E, 0x0, 0x84, 0x0, 0x8A, 0x0, 0x90, 0x0, 0x90, 0x0, 0x96, 0x0, 0x9C, 0x1, 0x3E, 0x1, 0x38, 0x1, 0x44, 0x0, 0xA2, 0x1, 0x4A, 0x0, 0xA8, 0x0, 0xAE, 0x0, 0xB4, 0x0, 0xBA, 0x0, 0xC0, 0x1, 0x50, 0x1, 0x56, 0x0, 0xC6, 0x0, 0xCC, 0x0, 0xD2, 0x0, 0xD8, 0x0, 0xDE, 0x0, 0xEA, 0x0, 0xE4, 0x1, 0x32, 0x0, 0xEA, 0x0, 0xF0, 0x0, 0xF6, 0x0, 0xFC, 0x1, 0x2, 0x1, 0x8, 0x1, 0xE, 0x1, 0x14, 0x1, 0x1A, 0x1, 0x20, 0x1, 0x26, 0x1, 0x2C, 0x1, 0x32, 0x1, 0x38, 0x1, 0x3E, 0x1, 0x44, 0x1, 0x4A, 0x1, 0x50, 0x1, 0x56, 0x0, 0x1, 0x0, 0xE1, 0xFE, 0x3D, 0x0, 0x1, 0x1, 0x35, 0xFE, 0x52, 0x0, 0x1, 0xFD, 0xB9, 0xFE, 0x7A, 0x0, 0x1, 0xFD, 0x9C, 0xFE, 0x7A, 0x0, 0x1, 0xFD, 0xCF, 0xFE, 0x24, 0x0, 0x1, 0xFD, 0xB1, 0xFE, 0x24, 0x0, 0x1, 0xFD, 0xED, 0xFE, 0x25, 0x0, 0x1, 0xFD, 0xB6, 0xFE, 0x3D, 0x0, 0x1, 0xFD, 0xB7, 0xFE, 0x15, 0x0, 0x1, 0xFD, 0xBB, 0xFE, 0xA5, 0x0, 0x1, 0xFD, 0xD0, 0xFD, 0xD7, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x24, 0x0, 0x1, 0xFD, 0xB9, 0xFE, 0xAF, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x68, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x74, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x8A, 0x0, 0x1, 0xFD, 0xB9, 0xFE, 0xC8, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0xAD, 0x0, 0x1, 0xFD, 0xB8, 0xFD, 0xF9, 0x0, 0x1, 0xFD, 0x98, 0xFE, 0x2B, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x13, 0x0, 0x1, 0xFD, 0xB9, 0xFE, 0xB0, 0x0, 0x1, 0xFD, 0xB9, 0xFE, 0xE, 0x0, 0x1, 0xFD, 0xB7, 0xFE, 0xE, 0x0, 0x1, 0xFD, 0xD4, 0xFE, 0x6, 0x0, 0x1, 0xFD, 0xB8, 0xFD, 0xD8, 0x0, 0x1, 0xFD, 0xB8, 0xFD, 0xDA, 0x0, 0x1, 0xFD, 0xEC, 0xFD, 0xD7, 0x0, 0x1, 0xFD, 0xC8, 0xFD, 0xD6, 0x0, 0x1, 0xFD, 0xC2, 0xFD, 0xD7, 0x0, 0x1, 0xFD, 0xEA, 0xFD, 0xD7, 0x0, 0x1, 0xFD, 0xB3, 0xFD, 0xED, 0x0, 0x1, 0xFD, 0xC9, 0xFE, 0x1F, 0x0, 0x1, 0x0, 0xF5, 0xFF, 0x66, 0x0, 0x1, 0xFD, 0xB2, 0xFD, 0xF2, 0x0, 0x1, 0xFD, 0x68, 0xFE, 0x98, 0x0, 0x1, 0xFD, 0xA8, 0xFE, 0x91, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x29, 0x0, 0x1, 0xFD, 0xBA, 0xFE, 0xE, 0x0, 0x1, 0xFD, 0xB7, 0xFE, 0x83, 0x0, 0x1, 0xFD, 0xB8, 0xFE, 0x59, 0x0, 0x1, 0x0, 0xC, 0x0, 0x14, 0x0, 0x1, 0x0, 0xA2, 0x0, 0xB8, 0x0, 0x1, 0x0, 0x2, 0x3, 0x2B, 0x3, 0x2C, 0x0, 0x2, 0x0, 0x17, 0x8, 0xC8, 0x9, 0x30, 0x0, 0x0, 0x9, 0x33, 0x9, 0xD4, 0x0, 0x69, 0xA, 0x12, 0xA, 0x13, 0x1, 0xB, 0xA, 0x16, 0xA, 0x17, 0x1, 0xD, 0xA, 0x19, 0xA, 0x19, 0x1, 0xF, 0xA, 0x1C, 0xA, 0x1D, 0x1, 0x10, 0xA, 0x22, 0xA, 0x29, 0x1, 0x12, 0xA, 0x2D, 0xA, 0x2D, 0x1, 0x1A, 0xA, 0x2F, 0xA, 0x32, 0x1, 0x1B, 0xA, 0x38, 0xA, 0x38, 0x1, 0x1F, 0xA, 0x5E, 0xA, 0x5E, 0x1, 0x20, 0xA, 0x6E, 0xA, 0xC5, 0x1, 0x21, 0xA, 0xE7, 0xA, 0xE7, 0x1, 0x79, 0xA, 0xEE, 0xB, 0xC, 0x1, 0x7A, 0xB, 0x10, 0xB, 0x3E, 0x1, 0x99, 0xB, 0x4D, 0xB, 0xD7, 0x1, 0xC8, 0xC, 0xB7, 0xC, 0xBC, 0x2, 0x53, 0xC, 0xBE, 0xC, 0xDD, 0x2, 0x59, 0xC, 0xDF, 0xC, 0xE6, 0x2, 0x79, 0xC, 0xE8, 0xC, 0xE9, 0x2, 0x81, 0xC, 0xEB, 0xC, 0xEB, 0x2, 0x83, 0xC, 0xED, 0xC, 0xFC, 0x2, 0x84, 0xD, 0x1D, 0xD, 0x1E, 0x2, 0x94, 0x0, 0x2, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0xFD, 0xC3, 0x5, 0x46, 0x0, 0x1, 0xFD, 0xCF, 0x5, 0x46, 0x2, 0x96, 0x5, 0xD0, 0x5, 0xD0, 0x6, 0x8A, 0x6, 0x48, 0x6, 0x90, 0x7, 0x1A, 0x7, 0x1A, 0x7, 0x1A, 0x7, 0x1A, 0x7, 0x1A, 0x7, 0x1A, 0x7, 0x1A, 0x5, 0xC4, 0x7, 0x26, 0x7, 0x26, 0x7, 0x26, 0x7, 0x26, 0x5, 0xA6, 0x5, 0xA6, 0x5, 0xA6, 0x5, 0xA6, 0x6, 0x18, 0x7, 0x32, 0x7, 0x32, 0x7, 0x32, 0x7, 0x32, 0x7, 0x32, 0x6, 0x4E, 0x6, 0x4E, 0x6, 0x4E, 0x6, 0x4E, 0x6, 0x78, 0x7, 0x20, 0x7, 0x20, 0x7, 0x20, 0x7, 0x20, 0x7, 0x20, 0x7, 0x20, 0x7, 0x20, 0x5, 0xCA, 0x7, 0x2C, 0x7, 0x2C, 0x7, 0x2C, 0x7, 0x2C, 0x7, 0x50, 0x7, 0x50, 0x7, 0x50, 0x7, 0x50, 0x6, 0x1E, 0x7, 0x38, 0x7, 0x38, 0x7, 0x38, 0x7, 0x38, 0x7, 0x38, 0x6, 0x54, 0x6, 0x54, 0x6, 0x54, 0x6, 0x54, 0x6, 0x9C, 0x6, 0x9C, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x5, 0xC4, 0x5, 0xCA, 0x5, 0xC4, 0x5, 0xCA, 0x5, 0xC4, 0x5, 0xCA, 0x5, 0xC4, 0x5, 0xCA, 0x5, 0xD0, 0x5, 0xD6, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xEE, 0x6, 0x8A, 0x5, 0xA6, 0x7, 0x50, 0x5, 0xA6, 0x7, 0x50, 0x5, 0xA6, 0x7, 0x50, 0x5, 0xA6, 0x5, 0x70, 0x5, 0xA6, 0x5, 0x2E, 0x5, 0x5E, 0x5, 0xF4, 0x5, 0xFA, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x1E, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x48, 0x6, 0x90, 0x6, 0x48, 0x6, 0x90, 0x6, 0x48, 0x6, 0x90, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x66, 0x6, 0x96, 0x6, 0x78, 0x6, 0x9C, 0x6, 0x78, 0x6, 0x7E, 0x6, 0x84, 0x6, 0x7E, 0x6, 0x84, 0x6, 0x7E, 0x6, 0x84, 0x5, 0x9A, 0x5, 0xA0, 0x5, 0x34, 0x5, 0x3A, 0x5, 0x40, 0x5, 0x40, 0x6, 0xD2, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x6, 0xEA, 0x7, 0x44, 0x7, 0x44, 0x7, 0x44, 0x7, 0x44, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xA8, 0x7, 0x4A, 0x7, 0x4A, 0x7, 0x4A, 0x7, 0x4A, 0x7, 0x4A, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x7, 0x14, 0x7, 0x3E, 0x7, 0x3E, 0x7, 0x3E, 0x6, 0xEA, 0x6, 0xEA, 0x6, 0xEA, 0x6, 0xEA, 0x5, 0x40, 0x7, 0x44, 0x7, 0x44, 0x7, 0x44, 0x7, 0x44, 0x7, 0x44, 0x5, 0x46, 0x5, 0x46, 0x5, 0x46, 0x5, 0x46, 0x6, 0xE4, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xFC, 0x6, 0xB4, 0x5, 0x4C, 0x5, 0x4C, 0x5, 0x4C, 0x5, 0x4C, 0x6, 0xA8, 0x6, 0xA8, 0x6, 0xA8, 0x7, 0x4A, 0x7, 0x4A, 0x7, 0x4A, 0x7, 0x4A, 0x5, 0x52, 0x5, 0x52, 0x5, 0x52, 0x7, 0x8, 0x7, 0x8, 0x7, 0x8, 0x7, 0x8, 0x6, 0xD2, 0x6, 0xD2, 0x6, 0xD2, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x5, 0x58, 0x7, 0xE, 0x7, 0x14, 0x7, 0x14, 0x6, 0xA2, 0x6, 0xA2, 0x6, 0xA2, 0x7, 0x20, 0x7, 0x2C, 0x6, 0x2A, 0x5, 0xCA, 0x6, 0x72, 0x6, 0x42, 0x5, 0x70, 0x6, 0x66, 0x6, 0x96, 0x6, 0x66, 0x6, 0x96, 0x6, 0x66, 0x6, 0x96, 0x6, 0x78, 0x6, 0x9C, 0x5, 0x5E, 0x6, 0xC, 0x6, 0x12, 0x7, 0x1A, 0x7, 0x20, 0x5, 0x64, 0x5, 0x6A, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x5, 0xA6, 0x7, 0x50, 0x5, 0xA6, 0x5, 0x70, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x5, 0x76, 0x5, 0x7C, 0x5, 0x76, 0x5, 0x7C, 0x5, 0x76, 0x5, 0x7C, 0x5, 0x76, 0x5, 0x7C, 0x5, 0x76, 0x5, 0x7C, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x5, 0x82, 0x5, 0x88, 0x5, 0x82, 0x5, 0x88, 0x5, 0x82, 0x5, 0x88, 0x5, 0x82, 0x5, 0x88, 0x5, 0x82, 0x5, 0x88, 0x6, 0x78, 0x6, 0x9C, 0x6, 0x78, 0x6, 0x9C, 0x6, 0x78, 0x6, 0x9C, 0x5, 0x8E, 0x7, 0x1A, 0x7, 0x20, 0x5, 0xA6, 0x7, 0x50, 0x7, 0x32, 0x7, 0x38, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x5, 0x94, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x5, 0x9A, 0x5, 0xA0, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xF4, 0x5, 0xFA, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x5, 0xE8, 0x7, 0x2C, 0x6, 0x18, 0x6, 0x1E, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x5, 0xA6, 0x7, 0x50, 0x5, 0xA6, 0x7, 0x50, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x5, 0xEE, 0x6, 0x8A, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x6, 0x78, 0x6, 0x9C, 0x5, 0xAC, 0x5, 0xB2, 0x5, 0xB8, 0x6, 0x24, 0x5, 0xBE, 0x6, 0x24, 0x5, 0xBE, 0x6, 0x24, 0x5, 0xBE, 0x5, 0xC4, 0x5, 0xCA, 0x5, 0xD0, 0x5, 0xD6, 0x5, 0xD0, 0x5, 0xD6, 0x5, 0xD0, 0x5, 0xD6, 0x5, 0xD0, 0x5, 0xD6, 0x5, 0xD0, 0x5, 0xD6, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x26, 0x7, 0x2C, 0x5, 0xDC, 0x5, 0xE2, 0x5, 0xE8, 0x7, 0x2C, 0x5, 0xEE, 0x6, 0x8A, 0x5, 0xEE, 0x6, 0x8A, 0x5, 0xEE, 0x6, 0x8A, 0x5, 0xEE, 0x6, 0x8A, 0x5, 0xF4, 0x5, 0xFA, 0x5, 0xF4, 0x5, 0xFA, 0x5, 0xF4, 0x5, 0xFA, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0x0, 0x6, 0x6, 0x6, 0xC, 0x6, 0x12, 0x6, 0xC, 0x6, 0x12, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x18, 0x6, 0x1E, 0x6, 0x18, 0x6, 0x1E, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x7, 0x32, 0x7, 0x38, 0x6, 0x24, 0x6, 0x2A, 0x6, 0x24, 0x6, 0x2A, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x30, 0x6, 0x36, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x3C, 0x6, 0x42, 0x6, 0x48, 0x6, 0x90, 0x6, 0x48, 0x6, 0x90, 0x6, 0x48, 0x6, 0x90, 0x6, 0x48, 0x6, 0x90, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x4E, 0x6, 0x54, 0x6, 0x5A, 0x6, 0x60, 0x6, 0x5A, 0x6, 0x60, 0x6, 0x66, 0x6, 0x96, 0x6, 0x66, 0x6, 0x96, 0x6, 0x6C, 0x6, 0x72, 0x6, 0x6C, 0x6, 0x72, 0x6, 0x78, 0x6, 0x9C, 0x6, 0x7E, 0x6, 0x84, 0x6, 0x7E, 0x6, 0x84, 0x6, 0x7E, 0x6, 0x84, 0x6, 0x8A, 0x6, 0x90, 0x6, 0x96, 0x6, 0x9C, 0x7, 0x20, 0x7, 0x3E, 0x7, 0x44, 0x6, 0xE4, 0x6, 0xAE, 0x7, 0x4A, 0x7, 0x14, 0x7, 0x3E, 0x6, 0xBA, 0x7, 0x44, 0x6, 0xA2, 0x6, 0xE4, 0x6, 0xAE, 0x6, 0xB4, 0x6, 0xC6, 0x6, 0xA8, 0x7, 0x4A, 0x6, 0xCC, 0x6, 0xD2, 0x7, 0x14, 0x6, 0xD8, 0x6, 0xAE, 0x7, 0x14, 0x7, 0x44, 0x6, 0xC0, 0x7, 0x8, 0x6, 0xAE, 0x6, 0xAE, 0x6, 0xFC, 0x6, 0xB4, 0x6, 0xF6, 0x7, 0x3E, 0x6, 0xBA, 0x6, 0xC0, 0x7, 0x44, 0x6, 0xF0, 0x6, 0xC6, 0x6, 0xE4, 0x7, 0x4A, 0x6, 0xCC, 0x6, 0xEA, 0x6, 0xD2, 0x6, 0xD8, 0x6, 0xDE, 0x6, 0xE4, 0x6, 0xEA, 0x7, 0x14, 0x6, 0xF0, 0x6, 0xF6, 0x6, 0xFC, 0x7, 0x2, 0x7, 0x4A, 0x7, 0x8, 0x7, 0xE, 0x7, 0xE, 0x7, 0xE, 0x7, 0x14, 0x7, 0x1A, 0x7, 0x20, 0x7, 0x26, 0x7, 0x2C, 0x7, 0x32, 0x7, 0x38, 0x7, 0x3E, 0x7, 0x44, 0x7, 0x4A, 0x7, 0x50, 0x7, 0x50, 0x0, 0x1, 0x3, 0x52, 0x6, 0x41, 0x0, 0x1, 0x2, 0xCB, 0x6, 0x8A, 0x0, 0x1, 0x2, 0x1C, 0x5, 0x7, 0x0, 0x1, 0x1, 0xCB, 0x5, 0x28, 0x0, 0x1, 0x2, 0x53, 0x5, 0x28, 0x0, 0x1, 0x0, 0xF5, 0x5, 0x28, 0x0, 0x1, 0x2, 0x3, 0x5, 0x28, 0x0, 0x1, 0x2, 0x40, 0x5, 0x28, 0x0, 0x1, 0x1, 0x11, 0x4, 0xE8, 0x0, 0x1, 0x2, 0xDD, 0x4, 0xF5, 0x0, 0x1, 0x2, 0xD2, 0x6, 0x45, 0x0, 0x1, 0x1, 0x7, 0x6, 0x40, 0x0, 0x1, 0x2, 0xBF, 0x6, 0x3E, 0x0, 0x1, 0x2, 0x44, 0x5, 0xA, 0x0, 0x1, 0x2, 0xC2, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x42, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x42, 0x5, 0xA, 0x0, 0x1, 0x2, 0x28, 0x5, 0xB, 0x0, 0x1, 0x3, 0xA7, 0x6, 0x4C, 0x0, 0x1, 0x3, 0x5C, 0x5, 0xB, 0x0, 0x1, 0x1, 0x21, 0x6, 0x48, 0x0, 0x1, 0x2, 0x33, 0x5, 0xA, 0x0, 0x1, 0x2, 0x23, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x4E, 0x4, 0xF5, 0x0, 0x1, 0x2, 0x8D, 0x6, 0x47, 0x0, 0x1, 0x2, 0xAC, 0x6, 0x55, 0x0, 0x1, 0x2, 0x15, 0x5, 0xA, 0x0, 0x1, 0x2, 0x3B, 0x6, 0x48, 0x0, 0x1, 0x2, 0xD, 0x6, 0x47, 0x0, 0x1, 0x2, 0x73, 0x6, 0x4C, 0x0, 0x1, 0x1, 0xE0, 0x6, 0xBE, 0x0, 0x1, 0x2, 0xA9, 0x6, 0x55, 0x0, 0x1, 0x2, 0xCD, 0x6, 0x48, 0x0, 0x1, 0x2, 0x59, 0x6, 0x41, 0x0, 0x1, 0x2, 0x57, 0x6, 0x47, 0x0, 0x1, 0x1, 0x14, 0x6, 0x40, 0x0, 0x1, 0x1, 0x6, 0x6, 0x9B, 0x0, 0x1, 0x3, 0x7B, 0x6, 0x40, 0x0, 0x1, 0x3, 0x8C, 0x5, 0xA, 0x0, 0x1, 0x2, 0xD6, 0x6, 0x40, 0x0, 0x1, 0x2, 0x3E, 0x5, 0xA, 0x0, 0x1, 0x2, 0x5E, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x88, 0x5, 0x0, 0x0, 0x1, 0x2, 0x5C, 0x6, 0x40, 0x0, 0x1, 0x1, 0x99, 0x5, 0xA, 0x0, 0x1, 0x2, 0x7A, 0x6, 0x40, 0x0, 0x1, 0x2, 0x25, 0x5, 0xA, 0x0, 0x1, 0x2, 0x6C, 0x6, 0x40, 0x0, 0x1, 0x2, 0x9B, 0x6, 0x40, 0x0, 0x1, 0x2, 0x39, 0x5, 0xA, 0x0, 0x1, 0x2, 0x99, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x1, 0x5, 0x0, 0x0, 0x1, 0x3, 0x92, 0x6, 0x40, 0x0, 0x1, 0x2, 0x87, 0x6, 0x4C, 0x0, 0x1, 0x2, 0x4, 0x5, 0x0, 0x0, 0x1, 0x2, 0x73, 0x6, 0x40, 0x0, 0x1, 0x2, 0x6F, 0x6, 0x40, 0x0, 0x1, 0x2, 0x7, 0x5, 0xA, 0x0, 0x1, 0x2, 0x2, 0x6, 0x68, 0x0, 0x1, 0x1, 0x46, 0x5, 0xC4, 0x0, 0x1, 0x2, 0xF5, 0x5, 0xA, 0x0, 0x1, 0x2, 0x2, 0x5, 0xA, 0x0, 0x1, 0x2, 0x1C, 0x5, 0x28, 0x0, 0x1, 0x2, 0x70, 0x5, 0x28, 0x0, 0x1, 0x0, 0xFF, 0x5, 0x28, 0x0, 0x1, 0x2, 0x2, 0x5, 0x28, 0x0, 0x1, 0x2, 0xE, 0x5, 0x28, 0x0, 0x1, 0x2, 0xF, 0x5, 0x28, 0x0, 0x1, 0x2, 0xFE, 0x5, 0x28, 0x0, 0x1, 0x2, 0x32, 0x5, 0x28, 0x0, 0x1, 0x2, 0x1B, 0x5, 0x28, 0x0, 0x1, 0x2, 0x26, 0x5, 0x28, 0x0, 0x1, 0x2, 0xB, 0x5, 0x28, 0x0, 0x1, 0x2, 0x65, 0x5, 0x28, 0x0, 0x1, 0x2, 0x4F, 0x5, 0x28, 0x0, 0x1, 0x2, 0x71, 0x5, 0x28, 0x0, 0x1, 0x2, 0x31, 0x5, 0x28, 0x0, 0x1, 0x2, 0xDE, 0x5, 0x28, 0x0, 0x1, 0x3, 0x6E, 0x5, 0xA, 0x0, 0x1, 0x2, 0x2C, 0x5, 0x28, 0x0, 0x1, 0x3, 0x3, 0x5, 0x28, 0x0, 0x1, 0x2, 0x19, 0x5, 0x28, 0x0, 0x1, 0x2, 0xAD, 0x6, 0x40, 0x0, 0x1, 0x2, 0x37, 0x5, 0xA, 0x0, 0x1, 0x2, 0x73, 0x6, 0x48, 0x0, 0x1, 0x2, 0x2B, 0x5, 0xA, 0x0, 0x1, 0x2, 0xC4, 0x6, 0x40, 0x0, 0x1, 0x2, 0x40, 0x5, 0xA, 0x0, 0x1, 0x2, 0x51, 0x5, 0x28, 0x0, 0x1, 0x2, 0x21, 0x5, 0x28, 0x0, 0x1, 0x2, 0x5F, 0x5, 0x28, 0x0, 0x1, 0x1, 0xC, 0x5, 0x3, 0x0, 0x1, 0x0, 0xC, 0x0, 0x14, 0x0, 0x1, 0x0, 0x1E, 0x0, 0x34, 0x0, 0x1, 0x0, 0x2, 0x8, 0x9B, 0x8, 0x9E, 0x0, 0x1, 0x0, 0x3, 0x0, 0x8C, 0x0, 0x97, 0x1, 0x20, 0x0, 0x2, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0xFD, 0xAF, 0x0, 0xD6, 0x0, 0x1, 0xFC, 0xE7, 0x0, 0xD6, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1, 0x3, 0x65, 0x5, 0x1F, 0x0, 0x1, 0x1, 0x6B, 0x5, 0x17, 0x0, 0x1, 0x1, 0x80, 0x3, 0x1A, 0x0, 0x1, 0x0, 0xC, 0x0, 0x14, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x30, 0x0, 0x1, 0x0, 0x2, 0x8, 0x9C, 0x8, 0x9F, 0x0, 0x1, 0x0, 0x1, 0x0, 0xDC, 0x0, 0x2, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0xFD, 0x48, 0x0, 0xD6, 0x0, 0x1, 0xFC, 0x5F, 0x0, 0xD6, 0x0, 0x1, 0x0, 0x4, 0x0, 0x1, 0x2, 0x43, 0xFF, 0x89, 0x0, 0x1, 0x0, 0xC, 0x0, 0xA6, 0x0, 0x1, 0x0, 0xE0, 0x6, 0x5E, 0x0, 0x2, 0x0, 0x19, 0x1, 0xB1, 0x1, 0xC5, 0x0, 0x0, 0x1, 0xCB, 0x1, 0xCB, 0x0, 0x15, 0x1, 0xEE, 0x1, 0xF5, 0x0, 0x16, 0x1, 0xF7, 0x1, 0xF7, 0x0, 0x1E, 0x1, 0xFB, 0x1, 0xFD, 0x0, 0x1F, 0x2, 0x1, 0x2, 0x3, 0x0, 0x22, 0x2, 0x8, 0x2, 0x8, 0x0, 0x25, 0x2, 0xC, 0x2, 0xC, 0x0, 0x26, 0x2, 0x14, 0x2, 0x20, 0x0, 0x27, 0x2, 0xBA, 0x2, 0xBE, 0x0, 0x34, 0x3, 0x20, 0x3, 0x24, 0x0, 0x39, 0x3, 0x2B, 0x3, 0x2C, 0x0, 0x3E, 0x3, 0xEF, 0x3, 0xF0, 0x0, 0x40, 0x3, 0xF2, 0x3, 0xF8, 0x0, 0x42, 0x3, 0xFA, 0x3, 0xFD, 0x0, 0x49, 0x4, 0x0, 0x4, 0x24, 0x0, 0x4D, 0x4, 0x27, 0x4, 0x27, 0x0, 0x72, 0x4, 0xE2, 0x4, 0xE3, 0x0, 0x73, 0x4, 0xE5, 0x4, 0xE5, 0x0, 0x75, 0x5, 0x76, 0x5, 0x95, 0x0, 0x76, 0x6, 0x8, 0x6, 0x8, 0x0, 0x96, 0x6, 0xD, 0x6, 0x16, 0x0, 0x97, 0x6, 0x37, 0x6, 0x37, 0x0, 0xA1, 0x7, 0x2D, 0x7, 0x33, 0x0, 0xA2, 0x8, 0x8A, 0x8, 0x8E, 0x0, 0xA9, 0x0, 0x2, 0x0, 0x9, 0x1, 0xB1, 0x1, 0xC5, 0x0, 0x0, 0x1, 0xCB, 0x1, 0xCB, 0x0, 0x15, 0x1, 0xEE, 0x1, 0xF5, 0x0, 0x16, 0x1, 0xF7, 0x1, 0xF7, 0x0, 0x1E, 0x1, 0xFB, 0x1, 0xFD, 0x0, 0x1F, 0x2, 0x1, 0x2, 0x3, 0x0, 0x22, 0x2, 0x8, 0x2, 0x8, 0x0, 0x25, 0x2, 0xC, 0x2, 0xC, 0x0, 0x26, 0x8, 0x8A, 0x8, 0x8E, 0x0, 0x27, 0x0, 0xAE, 0x0, 0x0, 0x2, 0xBA, 0x0, 0x0, 0x2, 0xC0, 0x0, 0x0, 0x2, 0xC6, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x2, 0xCC, 0x0, 0x0, 0x2, 0xD2, 0x0, 0x0, 0x2, 0xD8, 0x0, 0x0, 0x5, 0x78, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0, 0x2, 0xDE, 0x0, 0x0, 0x2, 0xE4, 0x0, 0x0, 0x2, 0xEA, 0x0, 0x0, 0x5, 0x78, 0x0, 0x0, 0x2, 0xF0, 0x0, 0x0, 0x2, 0xF6, 0x0, 0x0, 0x2, 0xFC, 0x0, 0x0, 0x3, 0x2, 0x0, 0x0, 0x3, 0x2, 0x0, 0x0, 0x3, 0x8, 0x0, 0x0, 0x3, 0xE, 0x0, 0x0, 0x3, 0x14, 0x0, 0x0, 0x3, 0x1A, 0x0, 0x0, 0x3, 0x20, 0x0, 0x0, 0x3, 0x26, 0x0, 0x0, 0x3, 0x2C, 0x0, 0x0, 0x3, 0x32, 0x0, 0x0, 0x3, 0x38, 0x0, 0x0, 0x3, 0x3E, 0x0, 0x0, 0x3, 0x44, 0x0, 0x0, 0x3, 0x4A, 0x0, 0x0, 0x3, 0x50, 0x0, 0x0, 0x3, 0x56, 0x0, 0x0, 0x3, 0x5C, 0x0, 0x0, 0x3, 0x62, 0x0, 0x0, 0x3, 0x68, 0x0, 0x0, 0x3, 0x6E, 0x0, 0x0, 0x3, 0x74, 0x0, 0x0, 0x3, 0x7A, 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0x7C, 0x0, 0x0, 0x3, 0x86, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x3, 0x8C, 0x0, 0x0, 0x4, 0xA6, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x3, 0x92, 0x0, 0x0, 0x3, 0x98, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x3, 0x9E, 0x0, 0x0, 0x3, 0xA4, 0x0, 0x0, 0x3, 0xAA, 0x0, 0x0, 0x3, 0xB0, 0x0, 0x0, 0x3, 0xB6, 0x0, 0x0, 0x3, 0xBC, 0x0, 0x0, 0x3, 0xC2, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x3, 0xC8, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x3, 0xCE, 0x0, 0x0, 0x3, 0xD4, 0x0, 0x0, 0x3, 0xDA, 0x0, 0x0, 0x3, 0xE0, 0x0, 0x0, 0x3, 0xE6, 0x0, 0x0, 0x3, 0xEC, 0x0, 0x0, 0x3, 0xF2, 0x0, 0x0, 0x3, 0xF8, 0x0, 0x0, 0x3, 0xFE, 0x0, 0x0, 0x4, 0x4, 0x0, 0x0, 0x4, 0xA, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0x5, 0x1E, 0x0, 0x0, 0x4, 0x16, 0x0, 0x0, 0x4, 0x1C, 0x0, 0x0, 0x4, 0x22, 0x0, 0x0, 0x4, 0x28, 0x0, 0x0, 0x4, 0x2E, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x34, 0x0, 0x0, 0x4, 0x3A, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x4, 0x46, 0x0, 0x0, 0x4, 0x4C, 0x0, 0x0, 0x4, 0x4C, 0x0, 0x0, 0x4, 0x52, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x58, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x5E, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0x64, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0x6A, 0x0, 0x0, 0x4, 0x70, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x76, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x7C, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x4, 0x82, 0x0, 0x0, 0x4, 0x88, 0x0, 0x0, 0x4, 0x8E, 0x0, 0x0, 0x4, 0x94, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x4, 0x9A, 0x0, 0x0, 0x4, 0xA0, 0x0, 0x0, 0x4, 0xDC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xA6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xAC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xB2, 0x0, 0x0, 0x4, 0xB8, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xBE, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xC4, 0x0, 0x0, 0x4, 0xCA, 0x0, 0x0, 0x4, 0xD0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xD6, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xDC, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xE2, 0x0, 0x0, 0x4, 0xE8, 0x0, 0x0, 0x4, 0xEE, 0x0, 0x0, 0x4, 0xF4, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x4, 0xFA, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x5, 0x6, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0xC, 0x0, 0x0, 0x5, 0x12, 0x0, 0x0, 0x5, 0x18, 0x0, 0x0, 0x5, 0x1E, 0x0, 0x0, 0x5, 0x24, 0x0, 0x0, 0x5, 0x2A, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x30, 0x0, 0x0, 0x5, 0x36, 0x0, 0x0, 0x5, 0x3C, 0x0, 0x0, 0x5, 0x42, 0x0, 0x0, 0x5, 0x48, 0x0, 0x0, 0x5, 0x4E, 0x0, 0x0, 0x5, 0x54, 0x0, 0x0, 0x5, 0x5A, 0x0, 0x0, 0x5, 0x60, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x5, 0x66, 0x0, 0x0, 0x5, 0x6C, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0, 0x5, 0x78, 0x0, 0x1, 0xFD, 0xEA, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xD5, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB5, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xBB, 0x5, 0x5, 0x0, 0x1, 0xFD, 0xBA, 0x6, 0x28, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0xAA, 0x0, 0x1, 0xFD, 0xA8, 0x5, 0x4, 0x0, 0x1, 0xFD, 0xBA, 0x4, 0xCF, 0x0, 0x1, 0xFD, 0x6B, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0x9F, 0x0, 0x1, 0xFD, 0xB5, 0x4, 0x9F, 0x0, 0x1, 0xFE, 0x35, 0x5, 0xD, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xA0, 0x0, 0x1, 0xFD, 0xB7, 0x4, 0x2A, 0x0, 0x1, 0xFD, 0xA1, 0x4, 0x2A, 0x0, 0x1, 0xFD, 0xD0, 0x4, 0x2A, 0x0, 0x1, 0xFE, 0x48, 0x4, 0xEF, 0x0, 0x1, 0xFD, 0xF3, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x48, 0x0, 0x1, 0xFD, 0xB5, 0x5, 0xBE, 0x0, 0x1, 0x0, 0x20, 0x5, 0xA, 0x0, 0x1, 0xFF, 0x97, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xC3, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x9D, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB1, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0xAD, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xE6, 0x0, 0x1, 0xFD, 0x9B, 0x4, 0x6B, 0x0, 0x1, 0xFD, 0xC4, 0x4, 0xDC, 0x0, 0x1, 0xFD, 0xC2, 0x4, 0xA7, 0x0, 0x1, 0xFE, 0x3, 0x4, 0x58, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0xC3, 0x0, 0x1, 0xFD, 0x85, 0x4, 0x5F, 0x0, 0x1, 0xFD, 0xA3, 0x4, 0xC4, 0x0, 0x1, 0xFD, 0xCA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE0, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xEA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE0, 0x4, 0xA6, 0x0, 0x1, 0xFE, 0x4D, 0x4, 0xA6, 0x0, 0x1, 0xFD, 0xF5, 0x5, 0x0, 0x0, 0x1, 0xFE, 0x20, 0x5, 0x0, 0x0, 0x1, 0xFD, 0xA7, 0x4, 0xA6, 0x0, 0x1, 0xFD, 0xC5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBD, 0x4, 0x59, 0x0, 0x1, 0xFD, 0x9D, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC3, 0x5, 0x46, 0x0, 0x1, 0xFD, 0xCF, 0x5, 0x46, 0x0, 0x1, 0xFD, 0xAA, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x87, 0x5, 0xA, 0x0, 0x1, 0xFE, 0x1B, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x4D, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAB, 0x4, 0x92, 0x0, 0x1, 0xFE, 0xB, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD2, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD9, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x17, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA7, 0x4, 0x92, 0x0, 0x1, 0x0, 0x1, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xEB, 0x3, 0xD8, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x84, 0x0, 0x1, 0xFD, 0xBD, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC0, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x99, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC2, 0x3, 0xBF, 0x0, 0x1, 0xFD, 0xBB, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBC, 0x3, 0xCC, 0x0, 0x1, 0xFD, 0xD6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD4, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB1, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x3, 0xE1, 0x0, 0x1, 0xFD, 0xC7, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x9B, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x3, 0xB3, 0x0, 0x1, 0xFD, 0xB4, 0x3, 0xAE, 0x0, 0x1, 0xFD, 0x8A, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAD, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBF, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xCE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBE, 0x3, 0xB0, 0x0, 0x1, 0xFD, 0xD8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC9, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x93, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xC6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB3, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF5, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xF4, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB9, 0x4, 0x92, 0x0, 0x1, 0xFD, 0x94, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB8, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xAC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xA6, 0x3, 0xCE, 0x0, 0x1, 0xFD, 0x84, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xCC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xDC, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB6, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xBE, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD7, 0x4, 0x92, 0x0, 0x1, 0xFE, 0x7A, 0x4, 0x92, 0x0, 0x1, 0x1, 0x86, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xE1, 0x4, 0x92, 0x0, 0x1, 0x2, 0x1F, 0x4, 0x92, 0x0, 0x1, 0xFE, 0xC5, 0x4, 0x92, 0x0, 0x1, 0xFC, 0xAA, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xB7, 0x4, 0x92, 0x0, 0x1, 0xFD, 0xD4, 0x4, 0xE8, 0x0, 0x1, 0xFD, 0xBB, 0x5, 0xA, 0x0, 0x1, 0xFD, 0x67, 0x5, 0xA, 0x0, 0x1, 0xFD, 0xB8, 0x5, 0xA, 0x0, 0x2C, 0x0, 0x5A, 0x0, 0x60, 0x0, 0x66, 0x0, 0x6C, 0x0, 0x72, 0x0, 0x78, 0x0, 0x7E, 0x0, 0x84, 0x0, 0x8A, 0x0, 0x90, 0x0, 0x96, 0x0, 0x9C, 0x0, 0xA2, 0x0, 0xA8, 0x0, 0xAE, 0x0, 0xB4, 0x0, 0xBA, 0x0, 0xC0, 0x0, 0xC6, 0x0, 0xCC, 0x0, 0xD2, 0x0, 0xD8, 0x0, 0xDE, 0x0, 0xE4, 0x0, 0xEA, 0x0, 0xF0, 0x0, 0xF6, 0x0, 0xFC, 0x1, 0x2, 0x1, 0x8, 0x1, 0xE, 0x1, 0x14, 0x1, 0x1A, 0x1, 0x20, 0x1, 0x26, 0x1, 0x2C, 0x1, 0x32, 0x1, 0x38, 0x1, 0x3E, 0x1, 0x44, 0x1, 0x44, 0x1, 0x4A, 0x1, 0x50, 0x1, 0x56, 0x0, 0x1, 0xFD, 0xEA, 0x6, 0x79, 0x0, 0x1, 0xFD, 0xD5, 0x6, 0x79, 0x0, 0x1, 0xFD, 0xB5, 0x6, 0x68, 0x0, 0x1, 0xFD, 0xD4, 0x6, 0x5F, 0x0, 0x1, 0xFD, 0xBB, 0x6, 0x37, 0x0, 0x1, 0xFD, 0xBA, 0x7, 0x44, 0x0, 0x1, 0xFD, 0xB9, 0x6, 0x4F, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x27, 0x0, 0x1, 0xFD, 0x67, 0x6, 0x37, 0x0, 0x1, 0xFD, 0xA8, 0x6, 0xC6, 0x0, 0x1, 0xFD, 0xBA, 0x6, 0x77, 0x0, 0x1, 0xFD, 0x6B, 0x6, 0x5B, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x68, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x70, 0x0, 0x1, 0xFD, 0xB5, 0x6, 0x70, 0x0, 0x1, 0xFE, 0x35, 0x6, 0x51, 0x0, 0x1, 0xFD, 0xB8, 0x7, 0xC, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x9, 0x0, 0x1, 0xFD, 0xB7, 0x6, 0x94, 0x0, 0x1, 0xFD, 0xA1, 0x6, 0x94, 0x0, 0x1, 0xFD, 0xD1, 0x6, 0x94, 0x0, 0x1, 0xFE, 0x48, 0x6, 0xA4, 0x0, 0x1, 0xFD, 0xF3, 0x7, 0x1A, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0xD0, 0x0, 0x1, 0xFD, 0xB5, 0x8, 0x1, 0x0, 0x1, 0x0, 0x20, 0x6, 0x66, 0x0, 0x1, 0xFF, 0x97, 0x6, 0x66, 0x0, 0x1, 0xFD, 0xC3, 0x6, 0x41, 0x0, 0x1, 0xFD, 0x9D, 0x6, 0xBC, 0x0, 0x1, 0xFD, 0xB1, 0x6, 0xFE, 0x0, 0x1, 0xFD, 0xB9, 0x6, 0xA3, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x7B, 0x0, 0x1, 0xFD, 0x9C, 0x7, 0xBF, 0x0, 0x1, 0xFD, 0xC4, 0x6, 0x9E, 0x0, 0x1, 0xFD, 0xC3, 0x7, 0x5D, 0x0, 0x1, 0xFE, 0x3, 0x6, 0x13, 0x0, 0x1, 0xFD, 0xB8, 0x7, 0x15, 0x0, 0x1, 0xFD, 0x85, 0x6, 0x13, 0x0, 0x1, 0xFD, 0xA3, 0x6, 0xCD, 0x0, 0x1, 0xFD, 0xD4, 0x6, 0x2C, 0x0, 0x1, 0xFD, 0xBB, 0x6, 0x4, 0x0, 0x1, 0xFD, 0x67, 0x6, 0x4, 0x0, 0x1, 0xFD, 0xB8, 0x6, 0x30, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x1, 0x7A, 0x2, 0xCA, 0x0, 0x4, 0x44, 0x46, 0x4C, 0x54, 0x0, 0x1A, 0x63, 0x79, 0x72, 0x6C, 0x0, 0x1A, 0x67, 0x72, 0x65, 0x6B, 0x0, 0x1A, 0x6C, 0x61, 0x74, 0x6E, 0x0, 0x4C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x14, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x8, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x2E, 0x0, 0x7, 0x41, 0x5A, 0x45, 0x20, 0x0, 0xF4, 0x43, 0x52, 0x54, 0x20, 0x0, 0xF4, 0x46, 0x52, 0x41, 0x20, 0x0, 0x5E, 0x4D, 0x4F, 0x4C, 0x20, 0x0, 0xC2, 0x4E, 0x41, 0x56, 0x20, 0x0, 0x90, 0x52, 0x4F, 0x4D, 0x20, 0x0, 0xC2, 0x54, 0x52, 0x4B, 0x20, 0x0, 0xF4, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x15, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x7, 0x0, 0x8, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x16, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x6, 0x0, 0x8, 0x0, 0x9, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x16, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x6, 0x0, 0x8, 0x0, 0xB, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x16, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x6, 0x0, 0x8, 0x0, 0xA, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0x15, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x8, 0x0, 0xC, 0x0, 0xD, 0x0, 0xE, 0x0, 0xF, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1A, 0x63, 0x32, 0x73, 0x63, 0x0, 0x9E, 0x63, 0x63, 0x6D, 0x70, 0x0, 0xA4, 0x64, 0x6C, 0x69, 0x67, 0x0, 0xB4, 0x64, 0x6E, 0x6F, 0x6D, 0x0, 0xBA, 0x66, 0x72, 0x61, 0x63, 0x0, 0xC0, 0x6C, 0x69, 0x67, 0x61, 0x0, 0xCA, 0x6C, 0x69, 0x67, 0x61, 0x0, 0xD0, 0x6C, 0x69, 0x67, 0x61, 0x0, 0xDC, 0x6C, 0x6E, 0x75, 0x6D, 0x0, 0xE4, 0x6C, 0x6F, 0x63, 0x6C, 0x0, 0xEA, 0x6C, 0x6F, 0x63, 0x6C, 0x0, 0xF0, 0x6C, 0x6F, 0x63, 0x6C, 0x0, 0xF6, 0x6E, 0x75, 0x6D, 0x72, 0x0, 0xFC, 0x6F, 0x6E, 0x75, 0x6D, 0x1, 0x2, 0x70, 0x6E, 0x75, 0x6D, 0x1, 0x8, 0x73, 0x61, 0x6C, 0x74, 0x1, 0xE, 0x73, 0x6D, 0x63, 0x70, 0x1, 0x14, 0x73, 0x73, 0x30, 0x31, 0x1, 0x1A, 0x73, 0x73, 0x30, 0x32, 0x1, 0x20, 0x73, 0x73, 0x30, 0x33, 0x1, 0x26, 0x73, 0x73, 0x30, 0x34, 0x1, 0x2C, 0x73, 0x73, 0x30, 0x35, 0x1, 0x32, 0x73, 0x73, 0x30, 0x36, 0x1, 0x38, 0x73, 0x73, 0x30, 0x37, 0x1, 0x3E, 0x74, 0x6E, 0x75, 0x6D, 0x1, 0x44, 0x75, 0x6E, 0x69, 0x63, 0x1, 0x4A, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x3, 0x0, 0x4, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0, 0xC, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x0, 0x0, 0x1, 0x0, 0x21, 0x0, 0x0, 0x0, 0x3, 0x0, 0x1F, 0x0, 0x20, 0x0, 0x22, 0x0, 0x0, 0x0, 0x1, 0x0, 0x11, 0x0, 0x0, 0x0, 0x4, 0x0, 0x10, 0x0, 0x11, 0x0, 0x10, 0x0, 0x11, 0x0, 0x0, 0x0, 0x2, 0x0, 0x10, 0x0, 0x11, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1E, 0x0, 0x0, 0x0, 0x1, 0x0, 0xF, 0x0, 0x0, 0x0, 0x1, 0x0, 0xD, 0x0, 0x0, 0x0, 0x1, 0x0, 0xE, 0x0, 0x0, 0x0, 0x1, 0x0, 0x22, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1B, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1C, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x14, 0x0, 0x0, 0x0, 0x1, 0x0, 0x15, 0x0, 0x0, 0x0, 0x1, 0x0, 0x16, 0x0, 0x0, 0x0, 0x1, 0x0, 0x17, 0x0, 0x0, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1, 0x0, 0x19, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1A, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1D, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x23, 0x0, 0x48, 0x4, 0x5A, 0x8, 0x24, 0xA, 0xBE, 0xB, 0x9C, 0xE, 0x10, 0xE, 0x6A, 0x1D, 0x90, 0x23, 0xC, 0x24, 0x36, 0x24, 0x4C, 0x24, 0x62, 0x24, 0x82, 0x24, 0xE8, 0x24, 0xFE, 0x25, 0x34, 0x25, 0x48, 0x25, 0x6C, 0x25, 0x96, 0x25, 0xD2, 0x25, 0xEC, 0x26, 0x0, 0x26, 0x14, 0x26, 0x28, 0x26, 0x3A, 0x26, 0x54, 0x26, 0x96, 0x26, 0xB4, 0x27, 0x6, 0x27, 0x4C, 0x27, 0xAE, 0x28, 0xC, 0x28, 0x20, 0x28, 0x50, 0x28, 0x72, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x2, 0x6, 0x1, 0x0, 0x7, 0x63, 0x8, 0xB2, 0x7, 0x4D, 0x7, 0x4C, 0x7, 0x4B, 0x7, 0x4A, 0x7, 0x49, 0x7, 0x48, 0x7, 0x47, 0x7, 0x46, 0x7, 0x45, 0x7, 0x44, 0x7, 0xB1, 0x7, 0xB0, 0x7, 0xAF, 0x7, 0xAE, 0x7, 0xA6, 0x7, 0x62, 0x7, 0x61, 0x7, 0x60, 0x7, 0x5F, 0x7, 0x5E, 0x7, 0x5D, 0x7, 0x5C, 0x7, 0x5B, 0x7, 0x5A, 0x7, 0x59, 0x7, 0x58, 0x7, 0x57, 0x7, 0x56, 0x7, 0x55, 0x7, 0x54, 0x7, 0x53, 0x7, 0x52, 0x7, 0x51, 0x7, 0x50, 0x7, 0x4F, 0x7, 0x4E, 0x7, 0x64, 0x7, 0x65, 0x8, 0xB4, 0x8, 0xB6, 0x8, 0xB5, 0x8, 0xB7, 0x8, 0xB3, 0x8, 0xB8, 0x7, 0xDC, 0x7, 0x66, 0x7, 0x67, 0x7, 0x68, 0x7, 0x69, 0x7, 0x6A, 0x7, 0x6B, 0x7, 0x6C, 0x7, 0x6D, 0x7, 0x6E, 0x7, 0x6F, 0x7, 0x70, 0x7, 0x71, 0x7, 0x72, 0x7, 0x73, 0x7, 0x74, 0x7, 0x75, 0x7, 0x76, 0x7, 0x77, 0x7, 0x78, 0x7, 0x79, 0x7, 0x7A, 0x7, 0x7C, 0x7, 0x7D, 0xC, 0xEA, 0x7, 0x7E, 0x7, 0x7F, 0x7, 0x80, 0x7, 0x81, 0x7, 0x82, 0x7, 0x83, 0x7, 0x84, 0x7, 0x85, 0x7, 0x86, 0x7, 0x87, 0x7, 0xC4, 0x7, 0x89, 0x7, 0x8A, 0x7, 0x8B, 0x7, 0x8C, 0xC, 0xE4, 0x7, 0x8D, 0x7, 0x8F, 0x7, 0x90, 0x7, 0x91, 0x7, 0x92, 0x7, 0x93, 0x7, 0x94, 0x7, 0x95, 0x7, 0xFE, 0x7, 0x97, 0x7, 0x98, 0x7, 0x9A, 0x7, 0x9C, 0x7, 0x9B, 0x7, 0x99, 0x9, 0x7D, 0x9, 0x7E, 0x9, 0x7F, 0x9, 0x80, 0x9, 0x81, 0x9, 0x82, 0x9, 0x83, 0x9, 0x84, 0x9, 0x85, 0x9, 0x86, 0x9, 0x87, 0x9, 0x88, 0x9, 0x89, 0x9, 0x8A, 0x9, 0x8B, 0x9, 0x8C, 0x9, 0x8D, 0x9, 0x8E, 0x9, 0x8F, 0x9, 0x90, 0x9, 0x91, 0x9, 0x92, 0x9, 0x93, 0x9, 0x94, 0x9, 0x95, 0x9, 0x96, 0x9, 0x97, 0x9, 0x98, 0x9, 0x99, 0x9, 0x9A, 0x9, 0x9B, 0x9, 0x9C, 0x9, 0x9D, 0x9, 0x9E, 0x9, 0x9F, 0x9, 0xA0, 0x9, 0xA1, 0x9, 0xA2, 0x9, 0xA3, 0x9, 0xA4, 0x9, 0xA5, 0x9, 0xA6, 0x9, 0xA7, 0x9, 0xA8, 0x9, 0xA9, 0x9, 0xAA, 0x9, 0xAB, 0x9, 0xAC, 0x9, 0xAD, 0x9, 0xAE, 0x9, 0xAF, 0x9, 0xB0, 0x9, 0xB1, 0xC, 0xEC, 0x9, 0xB2, 0x9, 0xB3, 0x9, 0xB4, 0x9, 0xB5, 0x9, 0xB6, 0x9, 0xB7, 0x9, 0xB8, 0x9, 0xB9, 0x9, 0xBA, 0x9, 0xBB, 0x9, 0xBC, 0x9, 0xBD, 0x9, 0xBF, 0x9, 0xC0, 0x9, 0xC1, 0x9, 0xC2, 0x9, 0xC3, 0x9, 0xC4, 0xC, 0xEF, 0x9, 0xC5, 0x9, 0xC6, 0x9, 0xC8, 0x9, 0xC7, 0x9, 0xC9, 0x9, 0xCA, 0x9, 0xCB, 0x9, 0xCC, 0x9, 0xCD, 0x9, 0xCE, 0x9, 0xCF, 0x9, 0xD0, 0x9, 0xD1, 0x9, 0xD2, 0x9, 0xD3, 0x9, 0xD4, 0xC, 0xED, 0xC, 0xEE, 0xC, 0xB7, 0xC, 0xB8, 0xC, 0xB9, 0xC, 0xBA, 0xC, 0xBB, 0xC, 0xBC, 0xC, 0xBD, 0xC, 0xBE, 0xC, 0xBF, 0xC, 0xC0, 0xC, 0xC1, 0xC, 0xC2, 0xC, 0xC3, 0xC, 0xC4, 0xC, 0xC5, 0xC, 0xC6, 0xC, 0xC7, 0xC, 0xC8, 0xC, 0xC9, 0xC, 0xCA, 0xC, 0xCB, 0xC, 0xCC, 0xC, 0xCD, 0xC, 0xCE, 0xC, 0xCF, 0xC, 0xD0, 0xC, 0xD1, 0xC, 0xD2, 0xC, 0xD3, 0x7, 0x7B, 0xC, 0xD4, 0xC, 0xD5, 0xC, 0xD6, 0xC, 0xD7, 0xC, 0xD8, 0xC, 0xD9, 0xC, 0xDA, 0xC, 0xDB, 0xC, 0xDC, 0xC, 0xDD, 0xC, 0xDE, 0xC, 0xDF, 0xC, 0xE0, 0xC, 0xE1, 0xC, 0xE2, 0xC, 0xF0, 0xC, 0xF1, 0xC, 0xF2, 0xC, 0xF3, 0xC, 0xE3, 0xC, 0xE5, 0xC, 0xE6, 0xC, 0xE8, 0x7, 0x96, 0xC, 0xE9, 0xC, 0xE7, 0x7, 0x88, 0x7, 0x8E, 0x9, 0xBE, 0xC, 0xEB, 0xC, 0xFA, 0xC, 0xFB, 0xC, 0xFC, 0x0, 0x1, 0x1, 0x0, 0x0, 0x9, 0x0, 0xB, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1A, 0x0, 0x1B, 0x0, 0x1C, 0x0, 0x1D, 0x0, 0x1E, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2A, 0x0, 0x2B, 0x0, 0x2C, 0x0, 0x2D, 0x0, 0x2E, 0x0, 0x2F, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x3A, 0x0, 0x3B, 0x0, 0x3C, 0x0, 0x3D, 0x0, 0x3E, 0x0, 0x3F, 0x0, 0x66, 0x0, 0x68, 0x0, 0x82, 0x0, 0x84, 0x0, 0x85, 0x0, 0x8D, 0x0, 0x90, 0x0, 0x92, 0x0, 0x94, 0x2, 0x30, 0x2, 0x31, 0x2, 0x32, 0x2, 0x33, 0x2, 0x34, 0x2, 0x35, 0x2, 0x36, 0x2, 0x37, 0x2, 0x38, 0x2, 0x39, 0x2, 0x68, 0x2, 0x69, 0x2, 0x6A, 0x2, 0x6B, 0x2, 0x6C, 0x2, 0x6D, 0x2, 0x6E, 0x2, 0x6F, 0x2, 0x70, 0x2, 0x71, 0x2, 0x72, 0x2, 0x73, 0x2, 0x74, 0x2, 0x75, 0x2, 0x76, 0x2, 0x77, 0x2, 0x78, 0x2, 0x79, 0x2, 0x7A, 0x2, 0x7B, 0x2, 0x7C, 0x2, 0x7D, 0x2, 0x7E, 0x2, 0x7F, 0x2, 0xC6, 0x2, 0xCA, 0x2, 0xCC, 0x2, 0xCE, 0x2, 0xD0, 0x2, 0xD2, 0x2, 0xD8, 0x2, 0xDA, 0x2, 0xDC, 0x2, 0xE0, 0x2, 0xE2, 0x2, 0xE3, 0x2, 0xEF, 0x2, 0xF0, 0x4, 0x32, 0x4, 0xC8, 0x4, 0xCF, 0x4, 0xD7, 0x4, 0xDB, 0x4, 0xE0, 0x4, 0xED, 0x8, 0xC8, 0x8, 0xC9, 0x8, 0xCB, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x8, 0xD3, 0x8, 0xD4, 0x8, 0xD5, 0x8, 0xD6, 0x8, 0xD7, 0x8, 0xD8, 0x8, 0xD9, 0x8, 0xDA, 0x8, 0xDB, 0x8, 0xDC, 0x8, 0xDD, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0x8, 0xE3, 0x8, 0xE4, 0x8, 0xE5, 0x8, 0xE6, 0x8, 0xE7, 0x9, 0x4, 0x9, 0x6, 0x9, 0x8, 0x9, 0xA, 0x9, 0xC, 0x9, 0xE, 0x9, 0x10, 0x9, 0x12, 0x9, 0x14, 0x9, 0x16, 0x9, 0x18, 0x9, 0x1A, 0x9, 0x1C, 0x9, 0x1E, 0x9, 0x20, 0x9, 0x22, 0x9, 0x24, 0x9, 0x26, 0x9, 0x28, 0x9, 0x2A, 0x9, 0x2C, 0x9, 0x2E, 0x9, 0x30, 0x9, 0x31, 0x9, 0x33, 0x9, 0x35, 0x9, 0x37, 0x9, 0x39, 0x9, 0x3B, 0x9, 0x3D, 0x9, 0x3F, 0x9, 0x41, 0x9, 0x43, 0x9, 0x46, 0x9, 0x48, 0x9, 0x4A, 0x9, 0x4C, 0x9, 0x4E, 0x9, 0x50, 0x9, 0x52, 0x9, 0x54, 0x9, 0x56, 0x9, 0x58, 0x9, 0x5A, 0x9, 0x5C, 0x9, 0x5E, 0x9, 0x60, 0x9, 0x62, 0x9, 0x64, 0x9, 0x66, 0x9, 0x68, 0x9, 0x6A, 0x9, 0x6C, 0x9, 0x6E, 0x9, 0x70, 0x9, 0x72, 0x9, 0x73, 0x9, 0x75, 0x9, 0x77, 0x9, 0x79, 0x9, 0x7B, 0x9, 0xD5, 0x9, 0xD6, 0x9, 0xD7, 0x9, 0xD8, 0x9, 0xD9, 0x9, 0xDA, 0x9, 0xDB, 0x9, 0xDD, 0x9, 0xDE, 0x9, 0xDF, 0x9, 0xE0, 0x9, 0xE1, 0x9, 0xE2, 0x9, 0xE3, 0x9, 0xE4, 0x9, 0xE5, 0x9, 0xE6, 0x9, 0xE7, 0x9, 0xE8, 0x9, 0xE9, 0x9, 0xEA, 0x9, 0xEB, 0x9, 0xEC, 0x9, 0xFC, 0x9, 0xFD, 0x9, 0xFE, 0x9, 0xFF, 0xA, 0x0, 0xA, 0x1, 0xA, 0x2, 0xA, 0x3, 0xA, 0x4, 0xA, 0x5, 0xA, 0x6, 0xA, 0x7, 0xA, 0x8, 0xA, 0x9, 0xA, 0xA, 0xA, 0xB, 0xA, 0xC, 0xA, 0xD, 0xA, 0xE, 0xA, 0xF, 0xA, 0x10, 0xA, 0x11, 0xA, 0x22, 0xA, 0x24, 0xA, 0x26, 0xA, 0x28, 0xA, 0x3D, 0xA, 0x3F, 0xA, 0x41, 0xA, 0x56, 0xA, 0x5C, 0xA, 0x63, 0xA, 0xCD, 0xA, 0xD2, 0xA, 0xD6, 0xB, 0x9, 0xB, 0x3F, 0xC, 0xF4, 0xC, 0xF6, 0xC, 0xF8, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x1, 0xE2, 0x0, 0xEE, 0x8, 0xB2, 0x7, 0xB1, 0x7, 0xB0, 0x7, 0xAF, 0x7, 0xAE, 0x7, 0xA6, 0x7, 0x62, 0x7, 0x61, 0x7, 0x60, 0x7, 0x5F, 0x7, 0x5E, 0x7, 0x5D, 0x7, 0x5C, 0x7, 0x5B, 0x7, 0x5A, 0x7, 0x59, 0x7, 0x58, 0x7, 0x57, 0x7, 0x56, 0x7, 0x55, 0x7, 0x54, 0x7, 0x53, 0x7, 0x52, 0x7, 0x51, 0x7, 0x50, 0x7, 0x4F, 0x7, 0x4E, 0x7, 0xFE, 0x8, 0xB4, 0x9, 0x7E, 0x8, 0xB6, 0x8, 0xB5, 0x9, 0x7D, 0x7, 0x5F, 0x8, 0xB3, 0x8, 0xB8, 0x7, 0xDC, 0xC, 0xBE, 0xC, 0xBF, 0x7, 0x66, 0x7, 0x67, 0xC, 0xC0, 0xC, 0xC1, 0xC, 0xC2, 0x7, 0x68, 0xC, 0xC3, 0x7, 0x69, 0x7, 0x6A, 0x7, 0x6B, 0xC, 0xC8, 0x7, 0x6C, 0x7, 0x6C, 0xC, 0xC9, 0xC, 0xCA, 0x7, 0x6D, 0x7, 0x6E, 0x7, 0x6F, 0x7, 0x76, 0xC, 0xD7, 0xC, 0xD8, 0x7, 0x77, 0x7, 0x78, 0x7, 0x79, 0x7, 0x7A, 0x7, 0x7B, 0x7, 0x7C, 0xC, 0xDB, 0xC, 0xDC, 0xC, 0xDE, 0xC, 0xE1, 0xC, 0xEA, 0x7, 0x7E, 0x7, 0x7F, 0x7, 0x80, 0x7, 0x81, 0x7, 0x82, 0x7, 0x83, 0x7, 0x84, 0x7, 0x85, 0x7, 0x86, 0x7, 0x87, 0x7, 0x70, 0x7, 0x71, 0x7, 0x72, 0x7, 0x73, 0x7, 0x74, 0x7, 0x75, 0x7, 0xC4, 0x7, 0x89, 0x7, 0x8A, 0x7, 0x8B, 0x7, 0x8C, 0xC, 0xE4, 0x7, 0x8D, 0x7, 0x8F, 0x7, 0x90, 0x7, 0x91, 0x7, 0x93, 0x7, 0x95, 0x8, 0xB7, 0x9, 0x7F, 0x9, 0x80, 0x9, 0x81, 0x9, 0x82, 0x9, 0x83, 0x9, 0x84, 0x9, 0x85, 0x9, 0x86, 0x9, 0x87, 0x9, 0x88, 0x9, 0x89, 0x9, 0x8A, 0x9, 0x8B, 0x9, 0x8C, 0x9, 0x8D, 0x9, 0x8E, 0x9, 0x8F, 0x9, 0x90, 0x9, 0x91, 0x9, 0x92, 0x9, 0x93, 0x9, 0x94, 0x9, 0x95, 0x9, 0x96, 0x9, 0x97, 0x9, 0x98, 0x9, 0x99, 0x9, 0x9A, 0x9, 0xD1, 0x9, 0x9B, 0x9, 0x9C, 0x9, 0x9D, 0x9, 0x9E, 0x9, 0x9F, 0x9, 0xA0, 0x9, 0xA1, 0x9, 0xA2, 0x9, 0xA3, 0x9, 0xA4, 0x9, 0xA5, 0x9, 0xA6, 0x9, 0xA7, 0x9, 0xA8, 0x9, 0xA9, 0x9, 0xAA, 0x9, 0xAB, 0x9, 0xAC, 0x9, 0xAD, 0x9, 0xAE, 0x9, 0xAF, 0x9, 0xB0, 0xC, 0xEC, 0x9, 0xB2, 0x9, 0xB3, 0x9, 0xB4, 0x9, 0xB5, 0x9, 0xB6, 0x9, 0xB7, 0x9, 0xB8, 0x9, 0xB9, 0x9, 0xBA, 0x9, 0xBB, 0x9, 0xBC, 0x9, 0xBD, 0x9, 0xBF, 0x9, 0xC0, 0x9, 0xC1, 0x9, 0xC2, 0x9, 0xC3, 0x9, 0xC4, 0xC, 0xEF, 0x9, 0xC5, 0x9, 0xC6, 0x9, 0xC8, 0x9, 0xC7, 0x9, 0xC9, 0x9, 0xCA, 0x9, 0xCB, 0x9, 0xCC, 0x9, 0xCD, 0x9, 0xCE, 0x9, 0xCF, 0x9, 0xD0, 0x9, 0xD2, 0x9, 0xD3, 0x9, 0xD4, 0xC, 0xED, 0xC, 0xEE, 0xC, 0xB7, 0xC, 0xB8, 0xC, 0xB9, 0xC, 0xBA, 0xC, 0xC4, 0xC, 0xC7, 0xC, 0xC5, 0xC, 0xC6, 0xC, 0xCB, 0xC, 0xCC, 0xC, 0xCD, 0xC, 0xBB, 0xC, 0xBC, 0xC, 0xBD, 0xC, 0xD6, 0xC, 0xD9, 0xC, 0xDA, 0xC, 0xDD, 0xC, 0xDF, 0xC, 0xE0, 0x7, 0x7D, 0xC, 0xE2, 0xC, 0xCE, 0xC, 0xCF, 0xC, 0xD0, 0xC, 0xD1, 0xC, 0xD2, 0xC, 0xD3, 0xC, 0xD4, 0xC, 0xD5, 0xC, 0xF0, 0xC, 0xF1, 0xC, 0xF2, 0xC, 0xF3, 0xC, 0xE3, 0xC, 0xE5, 0xC, 0xE6, 0x7, 0x94, 0xC, 0xE8, 0x7, 0x96, 0xC, 0xE9, 0xC, 0xE7, 0x7, 0x92, 0x7, 0x88, 0x7, 0x8E, 0x9, 0xBE, 0xC, 0xEB, 0xC, 0xFA, 0xC, 0xFB, 0xC, 0xFC, 0x0, 0x1, 0x0, 0xEE, 0x0, 0xB, 0x0, 0x46, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x4A, 0x0, 0x4B, 0x0, 0x4C, 0x0, 0x4D, 0x0, 0x4E, 0x0, 0x4F, 0x0, 0x50, 0x0, 0x51, 0x0, 0x52, 0x0, 0x53, 0x0, 0x54, 0x0, 0x55, 0x0, 0x56, 0x0, 0x57, 0x0, 0x58, 0x0, 0x59, 0x0, 0x5A, 0x0, 0x5B, 0x0, 0x5C, 0x0, 0x5D, 0x0, 0x5E, 0x0, 0x5F, 0x0, 0x86, 0x0, 0x87, 0x0, 0x88, 0x0, 0x8A, 0x0, 0x8B, 0x0, 0x8C, 0x0, 0x8E, 0x0, 0x91, 0x0, 0x93, 0x0, 0x95, 0x2, 0x3A, 0x2, 0x3B, 0x2, 0x3C, 0x2, 0x3D, 0x2, 0x3E, 0x2, 0x3F, 0x2, 0x40, 0x2, 0x41, 0x2, 0x42, 0x2, 0x43, 0x2, 0x44, 0x2, 0x45, 0x2, 0x46, 0x2, 0x47, 0x2, 0x48, 0x2, 0x49, 0x2, 0x4A, 0x2, 0x4B, 0x2, 0x4C, 0x2, 0x4D, 0x2, 0x80, 0x2, 0x81, 0x2, 0x82, 0x2, 0x83, 0x2, 0x84, 0x2, 0x85, 0x2, 0x86, 0x2, 0x87, 0x2, 0x88, 0x2, 0x89, 0x2, 0x8A, 0x2, 0x8B, 0x2, 0x8C, 0x2, 0x8D, 0x2, 0x8E, 0x2, 0x8F, 0x2, 0x90, 0x2, 0x91, 0x2, 0x92, 0x2, 0x93, 0x2, 0x94, 0x2, 0x95, 0x2, 0x96, 0x2, 0x97, 0x2, 0x98, 0x2, 0x99, 0x2, 0x9A, 0x2, 0x9B, 0x2, 0x9C, 0x2, 0x9D, 0x2, 0xC7, 0x2, 0xCB, 0x2, 0xCD, 0x2, 0xCF, 0x2, 0xD1, 0x2, 0xD3, 0x2, 0xD9, 0x2, 0xDB, 0x2, 0xDD, 0x2, 0xE1, 0x2, 0xE4, 0x2, 0xF1, 0x8, 0xCA, 0x8, 0xCC, 0x8, 0xE8, 0x8, 0xE9, 0x8, 0xEA, 0x8, 0xEB, 0x8, 0xEC, 0x8, 0xED, 0x8, 0xEE, 0x8, 0xEF, 0x8, 0xF0, 0x8, 0xF1, 0x8, 0xF2, 0x8, 0xF3, 0x8, 0xF4, 0x8, 0xF5, 0x8, 0xF6, 0x8, 0xF7, 0x8, 0xF8, 0x8, 0xF9, 0x8, 0xFA, 0x8, 0xFB, 0x8, 0xFC, 0x8, 0xFD, 0x8, 0xFE, 0x8, 0xFF, 0x9, 0x0, 0x9, 0x1, 0x9, 0x2, 0x9, 0x3, 0x9, 0x5, 0x9, 0x7, 0x9, 0x9, 0x9, 0xB, 0x9, 0xD, 0x9, 0xF, 0x9, 0x11, 0x9, 0x13, 0x9, 0x15, 0x9, 0x17, 0x9, 0x19, 0x9, 0x1B, 0x9, 0x1D, 0x9, 0x1F, 0x9, 0x21, 0x9, 0x23, 0x9, 0x25, 0x9, 0x27, 0x9, 0x29, 0x9, 0x2B, 0x9, 0x2D, 0x9, 0x2F, 0x9, 0x32, 0x9, 0x34, 0x9, 0x36, 0x9, 0x38, 0x9, 0x3A, 0x9, 0x3C, 0x9, 0x3E, 0x9, 0x40, 0x9, 0x42, 0x9, 0x44, 0x9, 0x47, 0x9, 0x49, 0x9, 0x4B, 0x9, 0x4D, 0x9, 0x4F, 0x9, 0x51, 0x9, 0x53, 0x9, 0x55, 0x9, 0x57, 0x9, 0x59, 0x9, 0x5B, 0x9, 0x5D, 0x9, 0x5F, 0x9, 0x61, 0x9, 0x63, 0x9, 0x65, 0x9, 0x67, 0x9, 0x69, 0x9, 0x6B, 0x9, 0x6D, 0x9, 0x6F, 0x9, 0x71, 0x9, 0x74, 0x9, 0x76, 0x9, 0x78, 0x9, 0x7A, 0x9, 0x7C, 0x9, 0xED, 0x9, 0xEE, 0x9, 0xEF, 0x9, 0xF0, 0x9, 0xF2, 0x9, 0xF3, 0x9, 0xF4, 0x9, 0xF5, 0x9, 0xF6, 0x9, 0xF7, 0x9, 0xF8, 0x9, 0xF9, 0x9, 0xFA, 0x9, 0xFB, 0xA, 0x12, 0xA, 0x13, 0xA, 0x14, 0xA, 0x15, 0xA, 0x16, 0xA, 0x17, 0xA, 0x18, 0xA, 0x19, 0xA, 0x1A, 0xA, 0x1B, 0xA, 0x1C, 0xA, 0x1D, 0xA, 0x1E, 0xA, 0x1F, 0xA, 0x20, 0xA, 0x21, 0xA, 0x23, 0xA, 0x25, 0xA, 0x27, 0xA, 0x29, 0xA, 0x3E, 0xA, 0x40, 0xA, 0x42, 0xA, 0x50, 0xA, 0x57, 0xA, 0x5D, 0xA, 0x64, 0xA, 0xCE, 0xA, 0xCF, 0xA, 0xD3, 0xA, 0xD7, 0xB, 0xA, 0xB, 0x43, 0xC, 0xF5, 0xC, 0xF7, 0xC, 0xF9, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x1, 0x4A, 0x0, 0xA2, 0x7, 0xE0, 0x7, 0xE1, 0x7, 0xE2, 0x7, 0xDE, 0x7, 0xDF, 0x7, 0xE0, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x7, 0xE1, 0x0, 0x2B, 0x0, 0x2C, 0x0, 0x2D, 0x0, 0x2E, 0x0, 0x2F, 0x0, 0x30, 0x0, 0x31, 0x7, 0xE2, 0x7, 0xDE, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x7, 0xDF, 0x0, 0x3B, 0x0, 0x3C, 0x0, 0x3D, 0x0, 0x3E, 0x0, 0x3F, 0x0, 0x82, 0x8, 0xC9, 0x0, 0x84, 0x0, 0x85, 0x8, 0xC8, 0x0, 0x92, 0x0, 0x94, 0x0, 0x8D, 0x8, 0xCB, 0xC, 0xFD, 0xC, 0xFE, 0xC, 0xFF, 0xD, 0x0, 0xD, 0x1, 0xD, 0x2, 0xD, 0x6, 0xD, 0x7, 0xD, 0x8, 0xD, 0x9, 0xD, 0xA, 0xD, 0x10, 0xD, 0x14, 0xD, 0x15, 0xD, 0x16, 0xC, 0xFD, 0xC, 0xFE, 0xC, 0xFF, 0xD, 0x0, 0xD, 0x1, 0xD, 0x2, 0xD, 0x6, 0x8, 0xD4, 0xD, 0x7, 0xD, 0x8, 0xD, 0x9, 0xD, 0xA, 0x8, 0xD9, 0x8, 0xDA, 0x8, 0xDB, 0x8, 0xDC, 0xD, 0x10, 0x8, 0xDE, 0x8, 0xDF, 0x8, 0xE0, 0x8, 0xE1, 0x8, 0xE2, 0xD, 0x14, 0xD, 0x15, 0x8, 0xE5, 0xD, 0x16, 0x8, 0xE7, 0x9, 0x72, 0xD, 0x3, 0xD, 0x3, 0xD, 0x4, 0xD, 0x4, 0xD, 0x5, 0xD, 0x5, 0x9, 0xA, 0x9, 0xC, 0x9, 0xE, 0x9, 0x10, 0x9, 0x12, 0xD, 0xB, 0xD, 0xB, 0xD, 0xC, 0xD, 0xC, 0xD, 0xD, 0xD, 0xD, 0xD, 0xE, 0xD, 0xE, 0xD, 0xF, 0xD, 0xF, 0x9, 0x1E, 0x9, 0x20, 0x9, 0x22, 0x9, 0x24, 0x9, 0x26, 0x9, 0x28, 0x9, 0x2A, 0x9, 0x2C, 0x9, 0x2E, 0x9, 0x31, 0x9, 0x33, 0x9, 0x35, 0x9, 0x37, 0x9, 0x39, 0x9, 0x3B, 0x9, 0x3D, 0xD, 0x11, 0xD, 0x11, 0xD, 0x12, 0xD, 0x12, 0xD, 0x13, 0xD, 0x13, 0x9, 0x46, 0x9, 0x48, 0x9, 0x4A, 0x9, 0x4C, 0x9, 0x4E, 0x9, 0x50, 0x9, 0x52, 0x9, 0x54, 0x9, 0x56, 0x9, 0x58, 0x9, 0x5A, 0x9, 0x5E, 0x9, 0x60, 0xD, 0x17, 0xD, 0x17, 0xD, 0x18, 0xD, 0x18, 0xD, 0x19, 0xD, 0x19, 0xD, 0x1A, 0xD, 0x1A, 0xD, 0x1B, 0xD, 0x1B, 0xD, 0x1C, 0xD, 0x1C, 0x9, 0x6E, 0x9, 0x70, 0x9, 0x73, 0x9, 0x75, 0x9, 0x77, 0x9, 0x79, 0x9, 0x7B, 0xA, 0x22, 0xA, 0x24, 0xA, 0x26, 0xA, 0x28, 0x0, 0x1, 0x0, 0xA2, 0x0, 0x26, 0x0, 0x2A, 0x0, 0x32, 0x0, 0x33, 0x0, 0x3A, 0x0, 0x46, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x4A, 0x0, 0x4B, 0x0, 0x4C, 0x0, 0x4D, 0x0, 0x4E, 0x0, 0x4F, 0x0, 0x50, 0x0, 0x51, 0x0, 0x52, 0x0, 0x53, 0x0, 0x54, 0x0, 0x55, 0x0, 0x56, 0x0, 0x57, 0x0, 0x58, 0x0, 0x59, 0x0, 0x5A, 0x0, 0x5B, 0x0, 0x5C, 0x0, 0x5D, 0x0, 0x5E, 0x0, 0x5F, 0x0, 0x87, 0x0, 0x88, 0x0, 0x8A, 0x0, 0x8B, 0x0, 0x8C, 0x0, 0x93, 0x0, 0x95, 0x8, 0xCA, 0x8, 0xCC, 0x8, 0xCD, 0x8, 0xCE, 0x8, 0xCF, 0x8, 0xD0, 0x8, 0xD1, 0x8, 0xD2, 0x8, 0xD3, 0x8, 0xD5, 0x8, 0xD6, 0x8, 0xD7, 0x8, 0xD8, 0x8, 0xDD, 0x8, 0xE3, 0x8, 0xE4, 0x8, 0xE6, 0x8, 0xE8, 0x8, 0xE9, 0x8, 0xEA, 0x8, 0xEB, 0x8, 0xEC, 0x8, 0xED, 0x8, 0xEE, 0x8, 0xEF, 0x8, 0xF0, 0x8, 0xF1, 0x8, 0xF2, 0x8, 0xF3, 0x8, 0xF4, 0x8, 0xF5, 0x8, 0xF6, 0x8, 0xF7, 0x8, 0xF8, 0x8, 0xF9, 0x8, 0xFA, 0x8, 0xFB, 0x8, 0xFC, 0x8, 0xFD, 0x8, 0xFE, 0x8, 0xFF, 0x9, 0x0, 0x9, 0x1, 0x9, 0x2, 0x9, 0x3, 0x9, 0x4, 0x9, 0x5, 0x9, 0x6, 0x9, 0x7, 0x9, 0x8, 0x9, 0x9, 0x9, 0xB, 0x9, 0xD, 0x9, 0xF, 0x9, 0x11, 0x9, 0x13, 0x9, 0x14, 0x9, 0x15, 0x9, 0x16, 0x9, 0x17, 0x9, 0x18, 0x9, 0x19, 0x9, 0x1A, 0x9, 0x1B, 0x9, 0x1C, 0x9, 0x1D, 0x9, 0x1F, 0x9, 0x21, 0x9, 0x23, 0x9, 0x25, 0x9, 0x27, 0x9, 0x29, 0x9, 0x2B, 0x9, 0x2D, 0x9, 0x2F, 0x9, 0x32, 0x9, 0x34, 0x9, 0x36, 0x9, 0x38, 0x9, 0x3A, 0x9, 0x3C, 0x9, 0x3E, 0x9, 0x3F, 0x9, 0x40, 0x9, 0x41, 0x9, 0x42, 0x9, 0x43, 0x9, 0x44, 0x9, 0x47, 0x9, 0x49, 0x9, 0x4B, 0x9, 0x4D, 0x9, 0x4F, 0x9, 0x51, 0x9, 0x53, 0x9, 0x55, 0x9, 0x57, 0x9, 0x59, 0x9, 0x5B, 0x9, 0x5F, 0x9, 0x61, 0x9, 0x62, 0x9, 0x63, 0x9, 0x64, 0x9, 0x65, 0x9, 0x66, 0x9, 0x67, 0x9, 0x68, 0x9, 0x69, 0x9, 0x6A, 0x9, 0x6B, 0x9, 0x6C, 0x9, 0x6D, 0x9, 0x6F, 0x9, 0x71, 0x9, 0x74, 0x9, 0x76, 0x9, 0x78, 0x9, 0x7A, 0x9, 0x7C, 0xA, 0x23, 0xA, 0x25, 0xA, 0x27, 0xA, 0x29, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0xB6, 0x0, 0xE, 0x0, 0x22, 0x0, 0x34, 0x0, 0x3E, 0x0, 0x48, 0x0, 0x52, 0x0, 0x5C, 0x0, 0x66, 0x0, 0x70, 0x0, 0x7A, 0x0, 0x84, 0x0, 0x8E, 0x0, 0x98, 0x0, 0xA2, 0x0, 0xAC, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0x8, 0x8A, 0x0, 0x2, 0x3, 0x2B, 0x8, 0x8B, 0x0, 0x2, 0x3, 0x2C, 0x0, 0x1, 0x0, 0x4, 0x8, 0x8C, 0x0, 0x2, 0x3, 0x2B, 0x0, 0x1, 0x0, 0x4, 0x8, 0x8D, 0x0, 0x2, 0x3, 0x2B, 0x0, 0x1, 0x0, 0x4, 0x8, 0x8E, 0x0, 0x2, 0x3, 0x2B, 0x0, 0x1, 0x0, 0x4, 0x8, 0x91, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x90, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x92, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x93, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x94, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x95, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x8F, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x98, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x96, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0x4, 0x8, 0x97, 0x0, 0x2, 0x3, 0x2D, 0x0, 0x1, 0x0, 0xE, 0x1, 0xB4, 0x1, 0xB5, 0x1, 0xB9, 0x1, 0xBD, 0x1, 0xD4, 0x1, 0xD5, 0x1, 0xD6, 0x1, 0xDA, 0x1, 0xE0, 0x1, 0xE1, 0x1, 0xF6, 0x3, 0x28, 0x3, 0x29, 0x3, 0x2A, 0x0, 0x6, 0x0, 0x0, 0x0, 0x12, 0x0, 0x2A, 0x0, 0x42, 0x0, 0x5A, 0x0, 0x72, 0x0, 0x8A, 0x0, 0xA2, 0x0, 0xBA, 0x0, 0xD2, 0x0, 0xEA, 0x1, 0x2, 0x1, 0x1A, 0x1, 0x32, 0x1, 0x4A, 0x1, 0x62, 0x1, 0x7A, 0x1, 0x92, 0x1, 0xAA, 0x1, 0xC2, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0xB0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x0, 0x4E, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x98, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x0, 0x4F, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x80, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x9, 0x2F, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x68, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x0, 0xFE, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x50, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1D, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x38, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x1, 0x4F, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x20, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x1, 0x64, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x1, 0x8, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0xB, 0x43, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0xF0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0xA, 0x1D, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0xD8, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0xA, 0x1F, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0xC0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x3, 0x91, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0xA8, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x3, 0xC5, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x90, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x3, 0xD3, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x78, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x3, 0xD7, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x60, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x4, 0x2C, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x48, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0xA, 0x99, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x30, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x4, 0x9C, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x18, 0x0, 0x1, 0x0, 0x0, 0x0, 0x5, 0x0, 0x1, 0x0, 0x1, 0x5, 0x72, 0x0, 0x2, 0x0, 0x19, 0x1, 0xB1, 0x1, 0xC6, 0x0, 0x0, 0x1, 0xCB, 0x1, 0xCC, 0x0, 0x16, 0x1, 0xEE, 0x1, 0xF5, 0x0, 0x18, 0x1, 0xF7, 0x1, 0xF7, 0x0, 0x20, 0x1, 0xFB, 0x1, 0xFD, 0x0, 0x21, 0x2, 0x1, 0x2, 0x3, 0x0, 0x24, 0x2, 0x8, 0x2, 0x9, 0x0, 0x27, 0x2, 0xC, 0x2, 0xC, 0x0, 0x29, 0x2, 0x14, 0x2, 0x20, 0x0, 0x2A, 0x2, 0xBA, 0x2, 0xBE, 0x0, 0x37, 0x3, 0x20, 0x3, 0x24, 0x0, 0x3C, 0x3, 0x2B, 0x3, 0x2C, 0x0, 0x41, 0x3, 0xEF, 0x3, 0xF0, 0x0, 0x43, 0x3, 0xF2, 0x3, 0xF8, 0x0, 0x45, 0x3, 0xFA, 0x3, 0xFD, 0x0, 0x4C, 0x4, 0x0, 0x4, 0x24, 0x0, 0x50, 0x4, 0x27, 0x4, 0x27, 0x0, 0x75, 0x4, 0xE3, 0x4, 0xE3, 0x0, 0x76, 0x4, 0xE5, 0x4, 0xE5, 0x0, 0x77, 0x5, 0x76, 0x5, 0x95, 0x0, 0x78, 0x6, 0x8, 0x6, 0x8, 0x0, 0x98, 0x6, 0xD, 0x6, 0x16, 0x0, 0x99, 0x6, 0x37, 0x6, 0x37, 0x0, 0xA3, 0x7, 0x2D, 0x7, 0x33, 0x0, 0xA4, 0x8, 0x8A, 0x8, 0x8E, 0x0, 0xAB, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x2A, 0x0, 0x12, 0x7, 0xF5, 0x7, 0xEE, 0x7, 0xF0, 0x7, 0xF1, 0x7, 0xF3, 0x7, 0xFC, 0x7, 0xF9, 0x7, 0xEF, 0x7, 0xF6, 0x7, 0xFB, 0xD, 0x1D, 0x7, 0xF4, 0x7, 0xFD, 0x7, 0xF7, 0x7, 0xF8, 0x7, 0xF2, 0xD, 0x1E, 0x7, 0xFA, 0x0, 0x1, 0x0, 0x12, 0x0, 0x4E, 0x0, 0x4F, 0x0, 0xFE, 0x1, 0x1D, 0x1, 0x4F, 0x1, 0x64, 0x3, 0x91, 0x3, 0xC5, 0x3, 0xD3, 0x3, 0xD7, 0x4, 0x2C, 0x4, 0x9C, 0x5, 0x72, 0x9, 0x2F, 0xA, 0x1D, 0xA, 0x1F, 0xA, 0x99, 0xB, 0x43, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0xE, 0xC0, 0x0, 0x3D, 0x0, 0x80, 0x1, 0x5C, 0x1, 0x76, 0x1, 0xA0, 0x1, 0xD2, 0x2, 0x98, 0x2, 0xA2, 0x2, 0xDC, 0x3, 0xE, 0x3, 0x92, 0x3, 0x9C, 0x3, 0xC6, 0x3, 0xF8, 0x4, 0x12, 0x4, 0x5C, 0x5, 0x44, 0x5, 0x56, 0x5, 0x98, 0x5, 0xE6, 0x6, 0x20, 0x6, 0xEE, 0x7, 0x0, 0x7, 0x32, 0x7, 0x44, 0x7, 0x8E, 0x7, 0xC0, 0x8, 0x42, 0x8, 0x5C, 0x8, 0x86, 0x8, 0xB8, 0x9, 0x42, 0x9, 0x4C, 0x9, 0x7E, 0x9, 0xB8, 0x9, 0xD2, 0x9, 0xFC, 0xA, 0x36, 0xA, 0x50, 0xA, 0x9A, 0xB, 0x14, 0xB, 0x26, 0xB, 0x68, 0xB, 0xA2, 0xB, 0xE4, 0xC, 0x76, 0xC, 0x88, 0xC, 0xC2, 0xC, 0xD4, 0xD, 0x26, 0xD, 0x58, 0xD, 0x6A, 0xD, 0x74, 0xD, 0x86, 0xD, 0x90, 0xD, 0xEA, 0xD, 0xF4, 0xE, 0x1E, 0xE, 0x48, 0xE, 0x72, 0xE, 0x9C, 0xE, 0xAE, 0x0, 0x19, 0x0, 0x34, 0x0, 0x3C, 0x0, 0x44, 0x0, 0x4C, 0x0, 0x54, 0x0, 0x5C, 0x0, 0x64, 0x0, 0x6C, 0x0, 0x74, 0x0, 0x7C, 0x0, 0x82, 0x0, 0x88, 0x0, 0x8E, 0x0, 0x94, 0x0, 0x9A, 0x0, 0xA0, 0x0, 0xA6, 0x0, 0xAC, 0x0, 0xB2, 0x0, 0xB8, 0x0, 0xBE, 0x0, 0xC4, 0x0, 0xCA, 0x0, 0xD0, 0x0, 0xD6, 0xA, 0x7C, 0x0, 0x3, 0x1, 0xB7, 0x1, 0xB2, 0xA, 0x7E, 0x0, 0x3, 0x1, 0xB7, 0x1, 0xB1, 0xA, 0x80, 0x0, 0x3, 0x1, 0xB7, 0x1, 0xBA, 0xA, 0x72, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB2, 0xA, 0x74, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB1, 0xA, 0x76, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xBA, 0xA, 0x78, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB4, 0xA, 0xFF, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB5, 0xB, 0x1, 0x0, 0x3, 0x1, 0xB8, 0x1, 0xB5, 0x8, 0xCE, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x16, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x6, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xCF, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xD1, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x6E, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x2E, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xCD, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x70, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x4, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x8, 0x0, 0x2, 0x1, 0xD9, 0x8, 0xD2, 0x0, 0x2, 0x1, 0xBB, 0xA, 0x31, 0x0, 0x2, 0x1, 0xD6, 0x8, 0xD0, 0x0, 0x2, 0x1, 0xB4, 0xA, 0xEE, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x14, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0xB, 0x4F, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x4D, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x51, 0x0, 0x2, 0x1, 0xE2, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x9, 0xA, 0x0, 0x2, 0x1, 0xB2, 0x8, 0xD4, 0x0, 0x2, 0x1, 0xD8, 0x9, 0xC, 0x0, 0x2, 0x1, 0xB3, 0x9, 0xE, 0x0, 0x2, 0x1, 0xB8, 0x9, 0x10, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0xB, 0x5D, 0x0, 0x2, 0x1, 0xDE, 0xB, 0x5B, 0x0, 0x2, 0x7, 0x25, 0xB, 0x57, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x55, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x59, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x12, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x17, 0x0, 0x30, 0x0, 0x38, 0x0, 0x40, 0x0, 0x48, 0x0, 0x50, 0x0, 0x58, 0x0, 0x60, 0x0, 0x66, 0x0, 0x6C, 0x0, 0x72, 0x0, 0x78, 0x0, 0x7E, 0x0, 0x84, 0x0, 0x8A, 0x0, 0x90, 0x0, 0x96, 0x0, 0x9C, 0x0, 0xA2, 0x0, 0xA8, 0x0, 0xAE, 0x0, 0xB4, 0x0, 0xBA, 0x0, 0xC0, 0xA, 0x8C, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB2, 0xA, 0x8E, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB1, 0xA, 0x90, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xBA, 0xA, 0x92, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB4, 0xB, 0x61, 0x0, 0x3, 0x1, 0xB5, 0x1, 0xB2, 0xB, 0x5F, 0x0, 0x3, 0x1, 0xB5, 0x1, 0xB1, 0x8, 0xD6, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x1A, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x16, 0x0, 0x2, 0x1, 0xB7, 0xB, 0x30, 0x0, 0x2, 0x1, 0xD8, 0x8, 0xD7, 0x0, 0x2, 0x1, 0xB3, 0xB, 0x63, 0x0, 0x2, 0x1, 0xDE, 0x8, 0xD8, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x86, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x18, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xD5, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x88, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x14, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x1A, 0x0, 0x2, 0x1, 0xD9, 0xA, 0x8A, 0x0, 0x2, 0x1, 0xB4, 0xB, 0x65, 0x0, 0x2, 0x1, 0xE1, 0x9, 0x1C, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x18, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x1, 0x0, 0x4, 0xB, 0x69, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0xB, 0x10, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x20, 0x0, 0x2, 0x1, 0xB7, 0x9, 0x1E, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x24, 0x0, 0x2, 0x7, 0x25, 0x9, 0x22, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x6B, 0x0, 0x2, 0x1, 0xB5, 0xB, 0x5, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0xB, 0x73, 0x0, 0x2, 0x1, 0xDF, 0x9, 0x26, 0x0, 0x2, 0x1, 0xB3, 0xB, 0x71, 0x0, 0x2, 0x1, 0xB9, 0xB, 0x6F, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x6D, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x2C, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x10, 0x0, 0x22, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x0, 0x42, 0x0, 0x48, 0x0, 0x4E, 0x0, 0x54, 0x0, 0x5A, 0x0, 0x60, 0x0, 0x66, 0x0, 0x6C, 0x0, 0x72, 0x0, 0x78, 0x0, 0x7E, 0x4, 0x2D, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB2, 0x8, 0xDA, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x1E, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x2C, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xDB, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xDC, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x98, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x30, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xD9, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x96, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x2A, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x2E, 0x0, 0x2, 0x1, 0xD9, 0x9, 0x28, 0x0, 0x2, 0x1, 0xB4, 0x4, 0x2B, 0x0, 0x2, 0x1, 0xE1, 0xA, 0xF0, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x1C, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x1, 0x0, 0x4, 0x9, 0x33, 0x0, 0x2, 0x1, 0xB3, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xB, 0x75, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x35, 0x0, 0x2, 0x7, 0x25, 0xB, 0x77, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x79, 0x0, 0x2, 0x1, 0xE2, 0xB, 0x7, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x9, 0x37, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x81, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x39, 0x0, 0x2, 0x7, 0x25, 0xB, 0x7B, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x3D, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x7F, 0x0, 0x2, 0x1, 0xE2, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0xA, 0x2F, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x85, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x83, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x9, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x9, 0x3F, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x8D, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x41, 0x0, 0x2, 0x7, 0x25, 0xB, 0x89, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x87, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x12, 0x0, 0x2, 0x1, 0xB1, 0xB, 0x8B, 0x0, 0x2, 0x1, 0xE2, 0x8, 0xDD, 0x0, 0x2, 0x1, 0xB4, 0x9, 0x43, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x1A, 0x0, 0x36, 0x0, 0x3E, 0x0, 0x46, 0x0, 0x4E, 0x0, 0x56, 0x0, 0x5E, 0x0, 0x66, 0x0, 0x6E, 0x0, 0x76, 0x0, 0x7E, 0x0, 0x86, 0x0, 0x8E, 0x0, 0x94, 0x0, 0x9A, 0x0, 0xA0, 0x0, 0xA6, 0x0, 0xAC, 0x0, 0xB2, 0x0, 0xB8, 0x0, 0xBE, 0x0, 0xC4, 0x0, 0xCA, 0x0, 0xD0, 0x0, 0xD6, 0x0, 0xDC, 0x0, 0xE2, 0xA, 0x9E, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB2, 0xA, 0xA0, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB1, 0xA, 0xA2, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xBA, 0xA, 0xA4, 0x0, 0x3, 0x1, 0xB3, 0x1, 0xB4, 0xB, 0x32, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB5, 0xB, 0x38, 0x0, 0x3, 0x1, 0xB8, 0x1, 0xB5, 0xB, 0x95, 0x0, 0x3, 0x1, 0xB5, 0x1, 0xB2, 0xB, 0x93, 0x0, 0x3, 0x1, 0xB5, 0x1, 0xB1, 0xB, 0x8F, 0x0, 0x3, 0x1, 0xB4, 0x1, 0xB2, 0xB, 0x91, 0x0, 0x3, 0x1, 0xB4, 0x1, 0xB9, 0xB, 0x34, 0x0, 0x3, 0x1, 0xB4, 0x1, 0xB5, 0x8, 0xDF, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x4A, 0x0, 0x2, 0x1, 0xBC, 0xB, 0x22, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x48, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xE0, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xE2, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x9A, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x36, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xDE, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x9C, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x46, 0x0, 0x2, 0x1, 0xB5, 0xB, 0x9, 0x0, 0x2, 0x1, 0xD9, 0x8, 0xE1, 0x0, 0x2, 0x1, 0xB4, 0xA, 0xF2, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x20, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0x97, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x99, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x8, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x9, 0x4C, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x26, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x4E, 0x0, 0x2, 0x7, 0x25, 0xB, 0x9D, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x9B, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xA1, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x50, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x24, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x9, 0x0, 0x14, 0x0, 0x1C, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x0, 0x42, 0x0, 0x48, 0xB, 0xA7, 0x0, 0x3, 0x1, 0xB2, 0x1, 0xB8, 0xB, 0xA9, 0x0, 0x3, 0x1, 0xBD, 0x1, 0xB8, 0x9, 0x52, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x56, 0x0, 0x2, 0x1, 0xD8, 0x9, 0x54, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x58, 0x0, 0x2, 0x7, 0x25, 0xB, 0xA5, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xA3, 0x0, 0x2, 0x1, 0xB8, 0x9, 0x5A, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0x9, 0x5E, 0x0, 0x2, 0x1, 0xD8, 0xB, 0xB3, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x5C, 0x0, 0x2, 0x7, 0x25, 0xB, 0xAF, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xAD, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xB1, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x60, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x18, 0x0, 0x32, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x68, 0x0, 0x6E, 0x0, 0x74, 0x0, 0x7A, 0x0, 0x80, 0x0, 0x86, 0x0, 0x8C, 0x0, 0x92, 0x0, 0x98, 0x0, 0x9E, 0x0, 0xA4, 0x0, 0xAA, 0x0, 0xB0, 0x0, 0xB6, 0x0, 0xBC, 0x0, 0xC2, 0x0, 0xC8, 0xA, 0xF8, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB2, 0xA, 0xFC, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB1, 0xA, 0xF6, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xB5, 0xA, 0xFA, 0x0, 0x3, 0x1, 0xB9, 0x1, 0xBD, 0xB, 0xBD, 0x0, 0x3, 0x1, 0xB5, 0x1, 0xB9, 0xB, 0xBB, 0x0, 0x3, 0x1, 0xB4, 0x1, 0xB2, 0x8, 0xE4, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x6A, 0x0, 0x2, 0x1, 0xBC, 0xB, 0x2A, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x66, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xE5, 0x0, 0x2, 0x1, 0xB3, 0xB, 0xB9, 0x0, 0x2, 0x1, 0xDE, 0x8, 0xE6, 0x0, 0x2, 0x1, 0xB9, 0xA, 0xB2, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xB5, 0x0, 0x2, 0x1, 0xD5, 0x8, 0xE3, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xB4, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x64, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x6C, 0x0, 0x2, 0x1, 0xD9, 0x9, 0x68, 0x0, 0x2, 0x1, 0xBB, 0x9, 0x62, 0x0, 0x2, 0x1, 0xB4, 0xB, 0xB7, 0x0, 0x2, 0x1, 0xE1, 0xA, 0xF4, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x28, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0xC1, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xBF, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0xA, 0x24, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x6E, 0x0, 0x2, 0x1, 0xB3, 0xA, 0x26, 0x0, 0x2, 0x1, 0xB9, 0xB, 0xC5, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xC3, 0x0, 0x2, 0x1, 0xB8, 0xA, 0x22, 0x0, 0x2, 0x1, 0xB1, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0xC9, 0x0, 0x2, 0x1, 0xB9, 0xB, 0xC7, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x9, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x8, 0xE7, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x70, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x72, 0x0, 0x2, 0x1, 0xB9, 0xA, 0xC0, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xCB, 0x0, 0x2, 0x1, 0xB8, 0xA, 0x28, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xC2, 0x0, 0x2, 0x1, 0xBA, 0xB, 0x3A, 0x0, 0x2, 0x1, 0xB5, 0xA, 0xC4, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x9, 0x73, 0x0, 0x2, 0x1, 0xB2, 0xB, 0xCD, 0x0, 0x2, 0x1, 0xB3, 0xB, 0xCF, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x75, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xD1, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x77, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x10, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0x0, 0x3A, 0x0, 0x40, 0x0, 0x46, 0x0, 0x4C, 0x0, 0x52, 0x0, 0x58, 0x0, 0x5E, 0x0, 0x64, 0x0, 0x6A, 0x0, 0x70, 0x0, 0x76, 0x0, 0x7C, 0x8, 0xE9, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x17, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x7, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xEA, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xEC, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x6F, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x2F, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xE8, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x71, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x5, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x9, 0x0, 0x2, 0x1, 0xD9, 0x8, 0xED, 0x0, 0x2, 0x1, 0xBB, 0xA, 0x32, 0x0, 0x2, 0x1, 0xD6, 0x8, 0xEB, 0x0, 0x2, 0x1, 0xB4, 0xA, 0xEF, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x15, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0xB, 0x50, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x4E, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x52, 0x0, 0x2, 0x1, 0xE2, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x9, 0xB, 0x0, 0x2, 0x1, 0xB2, 0x8, 0xEF, 0x0, 0x2, 0x1, 0xD8, 0x9, 0xD, 0x0, 0x2, 0x1, 0xB3, 0x9, 0xF, 0x0, 0x2, 0x1, 0xB8, 0x9, 0x11, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0xB, 0x5E, 0x0, 0x2, 0x1, 0xDE, 0xB, 0x5C, 0x0, 0x2, 0x7, 0x25, 0xB, 0x58, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x56, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x5A, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x13, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x11, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x0, 0x42, 0x0, 0x48, 0x0, 0x4E, 0x0, 0x54, 0x0, 0x5A, 0x0, 0x60, 0x0, 0x66, 0x0, 0x6C, 0x0, 0x72, 0x0, 0x78, 0x0, 0x7E, 0x0, 0x84, 0x8, 0xF1, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x1B, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x17, 0x0, 0x2, 0x1, 0xB7, 0xB, 0x31, 0x0, 0x2, 0x1, 0xD8, 0x8, 0xF2, 0x0, 0x2, 0x1, 0xB3, 0xB, 0x64, 0x0, 0x2, 0x1, 0xDE, 0x8, 0xF3, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x87, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x19, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xF0, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x89, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x15, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x1B, 0x0, 0x2, 0x1, 0xD9, 0xA, 0x8B, 0x0, 0x2, 0x1, 0xB4, 0xB, 0x66, 0x0, 0x2, 0x1, 0xE1, 0x9, 0x1D, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x19, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x1, 0x0, 0x4, 0xB, 0x6A, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0xB, 0x11, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x21, 0x0, 0x2, 0x1, 0xB7, 0x9, 0x1F, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x23, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x6C, 0x0, 0x2, 0x1, 0xB5, 0xB, 0x6, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0xB, 0x74, 0x0, 0x2, 0x1, 0xDF, 0x9, 0x27, 0x0, 0x2, 0x1, 0xB3, 0xB, 0x72, 0x0, 0x2, 0x1, 0xB9, 0xB, 0x70, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x6E, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xD3, 0x0, 0x2, 0x1, 0xE2, 0xB, 0x2D, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0xA, 0x99, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x2F, 0x0, 0x2, 0x1, 0xD9, 0x4, 0x2C, 0x0, 0x2, 0x1, 0xE1, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xB, 0x76, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x36, 0x0, 0x2, 0x7, 0x25, 0xB, 0x78, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x7A, 0x0, 0x2, 0x1, 0xE2, 0xB, 0x8, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0x9, 0x38, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x82, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x3A, 0x0, 0x2, 0x7, 0x25, 0xB, 0x7C, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x3E, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x80, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x3C, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x3, 0x0, 0x8, 0x0, 0xE, 0x0, 0x14, 0xA, 0x30, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x86, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x84, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x9, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x9, 0x40, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x8E, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x42, 0x0, 0x2, 0x7, 0x25, 0xB, 0x8A, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x88, 0x0, 0x2, 0x1, 0xB8, 0xB, 0x13, 0x0, 0x2, 0x1, 0xB1, 0xB, 0x8C, 0x0, 0x2, 0x1, 0xE2, 0x8, 0xF8, 0x0, 0x2, 0x1, 0xB4, 0x9, 0x44, 0x0, 0x2, 0x1, 0xBD, 0x0, 0xF, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x0, 0x4A, 0x0, 0x50, 0x0, 0x56, 0x0, 0x5C, 0x0, 0x62, 0x0, 0x68, 0x0, 0x6E, 0x0, 0x74, 0x8, 0xFA, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x4B, 0x0, 0x2, 0x1, 0xBC, 0xB, 0x23, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x49, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xFB, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xFD, 0x0, 0x2, 0x1, 0xB9, 0xA, 0x9B, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x37, 0x0, 0x2, 0x1, 0xB8, 0x8, 0xF9, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x9D, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x47, 0x0, 0x2, 0x1, 0xB5, 0xB, 0xA, 0x0, 0x2, 0x1, 0xD9, 0x8, 0xFC, 0x0, 0x2, 0x1, 0xB4, 0xA, 0xF3, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x21, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0x98, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x9A, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x8, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x9, 0x4D, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x27, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x4F, 0x0, 0x2, 0x7, 0x25, 0xB, 0x9E, 0x0, 0x2, 0x1, 0xD4, 0xB, 0x9C, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xA2, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x51, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x25, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0x9, 0x53, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x57, 0x0, 0x2, 0x1, 0xD8, 0x9, 0x55, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x59, 0x0, 0x2, 0x7, 0x25, 0xB, 0xA6, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xA4, 0x0, 0x2, 0x1, 0xB8, 0x9, 0x5B, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x8, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x9, 0x5F, 0x0, 0x2, 0x1, 0xD8, 0xB, 0xB4, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x5D, 0x0, 0x2, 0x7, 0x25, 0xB, 0xD4, 0x0, 0x2, 0x1, 0xB9, 0xB, 0xB0, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xAE, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xB2, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x61, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x12, 0x0, 0x26, 0x0, 0x2C, 0x0, 0x32, 0x0, 0x38, 0x0, 0x3E, 0x0, 0x44, 0x0, 0x4A, 0x0, 0x50, 0x0, 0x56, 0x0, 0x5C, 0x0, 0x62, 0x0, 0x68, 0x0, 0x6E, 0x0, 0x74, 0x0, 0x7A, 0x0, 0x80, 0x0, 0x86, 0x0, 0x8C, 0x8, 0xFF, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x6B, 0x0, 0x2, 0x1, 0xBC, 0xB, 0x2B, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x67, 0x0, 0x2, 0x1, 0xB7, 0x9, 0x0, 0x0, 0x2, 0x1, 0xB3, 0xB, 0xBA, 0x0, 0x2, 0x1, 0xDE, 0x9, 0x1, 0x0, 0x2, 0x1, 0xB9, 0xA, 0xB3, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xB6, 0x0, 0x2, 0x1, 0xD5, 0x8, 0xFE, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xB5, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x65, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x6D, 0x0, 0x2, 0x1, 0xD9, 0x9, 0x69, 0x0, 0x2, 0x1, 0xBB, 0x9, 0x63, 0x0, 0x2, 0x1, 0xB4, 0xB, 0xB8, 0x0, 0x2, 0x1, 0xE1, 0xA, 0xF5, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x29, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0xC2, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xC0, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x7, 0x0, 0x10, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0xA, 0x25, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x6F, 0x0, 0x2, 0x1, 0xB3, 0xA, 0x27, 0x0, 0x2, 0x1, 0xB9, 0xB, 0xC6, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xC4, 0x0, 0x2, 0x1, 0xB8, 0xA, 0x23, 0x0, 0x2, 0x1, 0xB1, 0xB, 0xD5, 0x0, 0x2, 0x1, 0xBB, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0xCA, 0x0, 0x2, 0x1, 0xB9, 0xB, 0xC8, 0x0, 0x2, 0x1, 0xB8, 0x0, 0xA, 0x0, 0x16, 0x0, 0x1C, 0x0, 0x22, 0x0, 0x28, 0x0, 0x2E, 0x0, 0x34, 0x0, 0x3A, 0x0, 0x40, 0x0, 0x46, 0x0, 0x4C, 0x9, 0x2, 0x0, 0x2, 0x1, 0xB2, 0x9, 0x71, 0x0, 0x2, 0x1, 0xB3, 0x9, 0x3, 0x0, 0x2, 0x1, 0xB9, 0xA, 0xC1, 0x0, 0x2, 0x1, 0xD4, 0xB, 0xCC, 0x0, 0x2, 0x1, 0xB8, 0xA, 0x29, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xC3, 0x0, 0x2, 0x1, 0xBA, 0xB, 0x3B, 0x0, 0x2, 0x1, 0xB5, 0xB, 0xD6, 0x0, 0x2, 0x1, 0xBB, 0xA, 0xC5, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x6, 0x0, 0xE, 0x0, 0x14, 0x0, 0x1A, 0x0, 0x20, 0x0, 0x26, 0x0, 0x2C, 0x9, 0x74, 0x0, 0x2, 0x1, 0xB2, 0xB, 0xCE, 0x0, 0x2, 0x1, 0xB3, 0xB, 0xD0, 0x0, 0x2, 0x1, 0xD4, 0x9, 0x76, 0x0, 0x2, 0x1, 0xB8, 0xB, 0xD2, 0x0, 0x2, 0x1, 0xE2, 0x9, 0x78, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0x9, 0x79, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x3, 0x0, 0x2, 0x1, 0xB5, 0x0, 0x1, 0x0, 0x4, 0x9, 0x7B, 0x0, 0x2, 0x1, 0xB2, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0x9, 0x7A, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x4, 0x0, 0x2, 0x1, 0xB5, 0x0, 0x1, 0x0, 0x4, 0x9, 0x7C, 0x0, 0x2, 0x1, 0xB2, 0x0, 0xB, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0x0, 0x2A, 0x0, 0x30, 0x0, 0x36, 0x0, 0x3C, 0x0, 0x42, 0x0, 0x48, 0x0, 0x4E, 0x0, 0x54, 0x8, 0xF5, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x1F, 0x0, 0x2, 0x1, 0xC2, 0x9, 0x2D, 0x0, 0x2, 0x1, 0xB7, 0x8, 0xF6, 0x0, 0x2, 0x1, 0xB3, 0x8, 0xF7, 0x0, 0x2, 0x1, 0xB9, 0x8, 0xF4, 0x0, 0x2, 0x1, 0xB1, 0xA, 0x97, 0x0, 0x2, 0x1, 0xBA, 0x9, 0x2B, 0x0, 0x2, 0x1, 0xB5, 0x9, 0x29, 0x0, 0x2, 0x1, 0xB4, 0xA, 0xF1, 0x0, 0x2, 0x1, 0xBD, 0xB, 0x1D, 0x0, 0x2, 0x1, 0xC0, 0x0, 0x1, 0x0, 0x4, 0x4, 0x2F, 0x0, 0x2, 0x1, 0xB8, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xA, 0xA8, 0x0, 0x2, 0x1, 0xB2, 0xA, 0xB0, 0x0, 0x2, 0x1, 0xD4, 0xA, 0xAA, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xAC, 0x0, 0x2, 0x1, 0xBA, 0xA, 0xAE, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xA, 0xA9, 0x0, 0x2, 0x1, 0xB2, 0xA, 0xB1, 0x0, 0x2, 0x1, 0xD4, 0xA, 0xAB, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xAD, 0x0, 0x2, 0x1, 0xBA, 0xA, 0xAF, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xA, 0xB6, 0x0, 0x2, 0x1, 0xB2, 0xA, 0xBE, 0x0, 0x2, 0x1, 0xD4, 0xA, 0xB8, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xBA, 0x0, 0x2, 0x1, 0xBA, 0xA, 0xBC, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x5, 0x0, 0xC, 0x0, 0x12, 0x0, 0x18, 0x0, 0x1E, 0x0, 0x24, 0xA, 0xB7, 0x0, 0x2, 0x1, 0xB2, 0xA, 0xBF, 0x0, 0x2, 0x1, 0xD4, 0xA, 0xB9, 0x0, 0x2, 0x1, 0xB1, 0xA, 0xBB, 0x0, 0x2, 0x1, 0xBA, 0xA, 0xBD, 0x0, 0x2, 0x1, 0xB4, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0x9, 0x34, 0x0, 0x2, 0x1, 0xB3, 0xA, 0x2D, 0x0, 0x2, 0x1, 0xBD, 0x0, 0x2, 0x0, 0x6, 0x0, 0xC, 0xB, 0x40, 0x0, 0x2, 0x1, 0xB2, 0xB, 0x41, 0x0, 0x2, 0x1, 0xB9, 0x0, 0x2, 0x0, 0xF, 0x0, 0x26, 0x0, 0x35, 0x0, 0x0, 0x0, 0x37, 0x0, 0x3F, 0x0, 0x10, 0x0, 0x46, 0x0, 0x4E, 0x0, 0x19, 0x0, 0x50, 0x0, 0x55, 0x0, 0x22, 0x0, 0x57, 0x0, 0x5F, 0x0, 0x28, 0x0, 0x82, 0x0, 0x82, 0x0, 0x31, 0x0, 0x84, 0x0, 0x84, 0x0, 0x32, 0x0, 0x87, 0x0, 0x87, 0x0, 0x33, 0x0, 0x8A, 0x0, 0x8A, 0x0, 0x34, 0x0, 0x8E, 0x0, 0x8E, 0x0, 0x35, 0x0, 0x96, 0x0, 0x96, 0x0, 0x36, 0x0, 0xB4, 0x0, 0xB5, 0x0, 0x37, 0x0, 0xC3, 0x0, 0xC4, 0x0, 0x39, 0x0, 0xEC, 0x0, 0xEC, 0x0, 0x3B, 0x2, 0x51, 0x2, 0x51, 0x0, 0x3C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x5, 0x6A, 0x0, 0x5, 0x0, 0x10, 0x1, 0x22, 0x2, 0x34, 0x3, 0x46, 0x4, 0x58, 0x0, 0x1C, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x6A, 0x0, 0x72, 0x0, 0x7A, 0x0, 0x82, 0x0, 0x8A, 0x0, 0x92, 0x0, 0x9A, 0x0, 0xA2, 0x0, 0xAA, 0x0, 0xB2, 0x0, 0xBA, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD2, 0x0, 0xDA, 0x0, 0xE2, 0x0, 0xEA, 0x0, 0xF2, 0x0, 0xFA, 0x1, 0x0, 0x1, 0x6, 0x1, 0xC, 0x8, 0x35, 0x0, 0x3, 0x1, 0x96, 0x1, 0x97, 0x8, 0x36, 0x0, 0x3, 0x1, 0x96, 0x1, 0x98, 0x8, 0x33, 0x0, 0x3, 0x1, 0x96, 0x1, 0x99, 0x8, 0x34, 0x0, 0x3, 0x1, 0x96, 0x1, 0x9A, 0x8, 0x39, 0x0, 0x3, 0x1, 0x97, 0x1, 0x96, 0x8, 0x38, 0x0, 0x3, 0x1, 0x97, 0x1, 0x97, 0x8, 0x37, 0x0, 0x3, 0x1, 0x97, 0x1, 0x98, 0x8, 0x3E, 0x0, 0x3, 0x1, 0x97, 0x1, 0x99, 0x8, 0x3D, 0x0, 0x3, 0x1, 0x97, 0x1, 0x9A, 0x8, 0x4, 0x0, 0x3, 0x1, 0x98, 0x1, 0x96, 0x8, 0x2, 0x0, 0x3, 0x1, 0x98, 0x1, 0x97, 0x8, 0x3, 0x0, 0x3, 0x1, 0x98, 0x1, 0x98, 0x7, 0x40, 0x0, 0x3, 0x1, 0x98, 0x1, 0x99, 0x8, 0x0, 0x0, 0x3, 0x1, 0x98, 0x1, 0x9A, 0x8, 0x66, 0x0, 0x3, 0x1, 0x99, 0x1, 0x96, 0x8, 0x68, 0x0, 0x3, 0x1, 0x99, 0x1, 0x97, 0x8, 0x67, 0x0, 0x3, 0x1, 0x99, 0x1, 0x98, 0x8, 0x6F, 0x0, 0x3, 0x1, 0x99, 0x1, 0x99, 0x8, 0x6E, 0x0, 0x3, 0x1, 0x99, 0x1, 0x9A, 0x8, 0x16, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x96, 0x8, 0x11, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x97, 0x8, 0x12, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x98, 0x8, 0x5, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x99, 0x8, 0x32, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x9A, 0x8, 0x23, 0x0, 0x2, 0x1, 0x97, 0x8, 0x22, 0x0, 0x2, 0x1, 0x98, 0x8, 0x26, 0x0, 0x2, 0x1, 0x99, 0x8, 0x25, 0x0, 0x2, 0x1, 0x9A, 0x0, 0x1C, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x6A, 0x0, 0x72, 0x0, 0x7A, 0x0, 0x82, 0x0, 0x8A, 0x0, 0x92, 0x0, 0x9A, 0x0, 0xA2, 0x0, 0xAA, 0x0, 0xB2, 0x0, 0xBA, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD2, 0x0, 0xDA, 0x0, 0xE2, 0x0, 0xEA, 0x0, 0xF2, 0x0, 0xFA, 0x1, 0x0, 0x1, 0x6, 0x1, 0xC, 0x8, 0x21, 0x0, 0x3, 0x1, 0x96, 0x1, 0x96, 0x8, 0x20, 0x0, 0x3, 0x1, 0x96, 0x1, 0x97, 0x8, 0x1F, 0x0, 0x3, 0x1, 0x96, 0x1, 0x98, 0x8, 0x18, 0x0, 0x3, 0x1, 0x96, 0x1, 0x99, 0x8, 0x17, 0x0, 0x3, 0x1, 0x96, 0x1, 0x9A, 0x8, 0x2B, 0x0, 0x3, 0x1, 0x97, 0x1, 0x96, 0x8, 0x2C, 0x0, 0x3, 0x1, 0x97, 0x1, 0x98, 0x8, 0x2D, 0x0, 0x3, 0x1, 0x97, 0x1, 0x99, 0x8, 0x2E, 0x0, 0x3, 0x1, 0x97, 0x1, 0x9A, 0x8, 0x19, 0x0, 0x3, 0x1, 0x98, 0x1, 0x96, 0x8, 0x1C, 0x0, 0x3, 0x1, 0x98, 0x1, 0x97, 0x8, 0x1B, 0x0, 0x3, 0x1, 0x98, 0x1, 0x98, 0x8, 0x1E, 0x0, 0x3, 0x1, 0x98, 0x1, 0x99, 0x8, 0x1D, 0x0, 0x3, 0x1, 0x98, 0x1, 0x9A, 0x8, 0x6D, 0x0, 0x3, 0x1, 0x99, 0x1, 0x96, 0x8, 0x6B, 0x0, 0x3, 0x1, 0x99, 0x1, 0x97, 0x8, 0x6C, 0x0, 0x3, 0x1, 0x99, 0x1, 0x98, 0x8, 0x69, 0x0, 0x3, 0x1, 0x99, 0x1, 0x99, 0x8, 0x6A, 0x0, 0x3, 0x1, 0x99, 0x1, 0x9A, 0x8, 0x9, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x96, 0x8, 0x8, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x97, 0x8, 0x7, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x98, 0x8, 0xB, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x99, 0x8, 0xA, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x9A, 0x8, 0x88, 0x0, 0x2, 0x1, 0x96, 0x8, 0x89, 0x0, 0x2, 0x1, 0x98, 0x8, 0x85, 0x0, 0x2, 0x1, 0x99, 0x8, 0x86, 0x0, 0x2, 0x1, 0x9A, 0x0, 0x1C, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x6A, 0x0, 0x72, 0x0, 0x7A, 0x0, 0x82, 0x0, 0x8A, 0x0, 0x92, 0x0, 0x9A, 0x0, 0xA2, 0x0, 0xAA, 0x0, 0xB2, 0x0, 0xBA, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD2, 0x0, 0xDA, 0x0, 0xE2, 0x0, 0xEA, 0x0, 0xF2, 0x0, 0xFA, 0x1, 0x0, 0x1, 0x6, 0x1, 0xC, 0x8, 0xE, 0x0, 0x3, 0x1, 0x96, 0x1, 0x96, 0x8, 0xC, 0x0, 0x3, 0x1, 0x96, 0x1, 0x97, 0x8, 0xD, 0x0, 0x3, 0x1, 0x96, 0x1, 0x98, 0x8, 0xF, 0x0, 0x3, 0x1, 0x96, 0x1, 0x99, 0x8, 0x10, 0x0, 0x3, 0x1, 0x96, 0x1, 0x9A, 0x8, 0x7D, 0x0, 0x3, 0x1, 0x97, 0x1, 0x96, 0x8, 0x7F, 0x0, 0x3, 0x1, 0x97, 0x1, 0x97, 0x8, 0x7E, 0x0, 0x3, 0x1, 0x97, 0x1, 0x98, 0x8, 0x81, 0x0, 0x3, 0x1, 0x97, 0x1, 0x99, 0x8, 0x80, 0x0, 0x3, 0x1, 0x97, 0x1, 0x9A, 0x8, 0x5E, 0x0, 0x3, 0x1, 0x98, 0x1, 0x96, 0x8, 0x5F, 0x0, 0x3, 0x1, 0x98, 0x1, 0x97, 0x8, 0x5D, 0x0, 0x3, 0x1, 0x98, 0x1, 0x99, 0x8, 0x24, 0x0, 0x3, 0x1, 0x98, 0x1, 0x9A, 0x8, 0x4B, 0x0, 0x3, 0x1, 0x99, 0x1, 0x96, 0x8, 0x64, 0x0, 0x3, 0x1, 0x99, 0x1, 0x97, 0x8, 0x49, 0x0, 0x3, 0x1, 0x99, 0x1, 0x98, 0x8, 0x50, 0x0, 0x3, 0x1, 0x99, 0x1, 0x99, 0x8, 0x4F, 0x0, 0x3, 0x1, 0x99, 0x1, 0x9A, 0x8, 0x63, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x96, 0x8, 0x61, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x97, 0x8, 0x62, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x98, 0x8, 0x1A, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x99, 0x8, 0x60, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x9A, 0x8, 0x57, 0x0, 0x2, 0x1, 0x96, 0x8, 0x5A, 0x0, 0x2, 0x1, 0x97, 0x8, 0x54, 0x0, 0x2, 0x1, 0x99, 0x8, 0x53, 0x0, 0x2, 0x1, 0x9A, 0x0, 0x1C, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x6A, 0x0, 0x72, 0x0, 0x7A, 0x0, 0x82, 0x0, 0x8A, 0x0, 0x92, 0x0, 0x9A, 0x0, 0xA2, 0x0, 0xAA, 0x0, 0xB2, 0x0, 0xBA, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD2, 0x0, 0xDA, 0x0, 0xE2, 0x0, 0xEA, 0x0, 0xF2, 0x0, 0xFA, 0x1, 0x0, 0x1, 0x6, 0x1, 0xC, 0x8, 0x52, 0x0, 0x3, 0x1, 0x96, 0x1, 0x96, 0x8, 0x30, 0x0, 0x3, 0x1, 0x96, 0x1, 0x97, 0x8, 0x2F, 0x0, 0x3, 0x1, 0x96, 0x1, 0x98, 0x8, 0x51, 0x0, 0x3, 0x1, 0x96, 0x1, 0x99, 0x8, 0x2A, 0x0, 0x3, 0x1, 0x96, 0x1, 0x9A, 0x8, 0x48, 0x0, 0x3, 0x1, 0x97, 0x1, 0x96, 0x8, 0x46, 0x0, 0x3, 0x1, 0x97, 0x1, 0x97, 0x8, 0x47, 0x0, 0x3, 0x1, 0x97, 0x1, 0x98, 0x8, 0x44, 0x0, 0x3, 0x1, 0x97, 0x1, 0x99, 0x8, 0x45, 0x0, 0x3, 0x1, 0x97, 0x1, 0x9A, 0x8, 0x29, 0x0, 0x3, 0x1, 0x98, 0x1, 0x96, 0x8, 0x28, 0x0, 0x3, 0x1, 0x98, 0x1, 0x97, 0x8, 0x27, 0x0, 0x3, 0x1, 0x98, 0x1, 0x98, 0x8, 0x5C, 0x0, 0x3, 0x1, 0x98, 0x1, 0x99, 0x8, 0x31, 0x0, 0x3, 0x1, 0x98, 0x1, 0x9A, 0x8, 0x43, 0x0, 0x3, 0x1, 0x99, 0x1, 0x96, 0x8, 0x87, 0x0, 0x3, 0x1, 0x99, 0x1, 0x97, 0x8, 0x5B, 0x0, 0x3, 0x1, 0x99, 0x1, 0x98, 0x8, 0x65, 0x0, 0x3, 0x1, 0x99, 0x1, 0x9A, 0x8, 0x71, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x96, 0x8, 0x56, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x97, 0x8, 0x55, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x98, 0x8, 0x58, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x99, 0x8, 0x7A, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x9A, 0x8, 0x41, 0x0, 0x2, 0x1, 0x96, 0x8, 0x3F, 0x0, 0x2, 0x1, 0x97, 0x8, 0x40, 0x0, 0x2, 0x1, 0x98, 0x8, 0x42, 0x0, 0x2, 0x1, 0x9A, 0x0, 0x1C, 0x0, 0x3A, 0x0, 0x42, 0x0, 0x4A, 0x0, 0x52, 0x0, 0x5A, 0x0, 0x62, 0x0, 0x6A, 0x0, 0x72, 0x0, 0x7A, 0x0, 0x82, 0x0, 0x8A, 0x0, 0x92, 0x0, 0x9A, 0x0, 0xA2, 0x0, 0xAA, 0x0, 0xB2, 0x0, 0xBA, 0x0, 0xC2, 0x0, 0xCA, 0x0, 0xD2, 0x0, 0xDA, 0x0, 0xE2, 0x0, 0xEA, 0x0, 0xF2, 0x0, 0xFA, 0x1, 0x0, 0x1, 0x6, 0x1, 0xC, 0x8, 0x1, 0x0, 0x3, 0x1, 0x96, 0x1, 0x96, 0x8, 0x59, 0x0, 0x3, 0x1, 0x96, 0x1, 0x97, 0x8, 0x4C, 0x0, 0x3, 0x1, 0x96, 0x1, 0x98, 0x8, 0x4D, 0x0, 0x3, 0x1, 0x96, 0x1, 0x99, 0x8, 0x4E, 0x0, 0x3, 0x1, 0x96, 0x1, 0x9A, 0x8, 0x15, 0x0, 0x3, 0x1, 0x97, 0x1, 0x96, 0x8, 0x3C, 0x0, 0x3, 0x1, 0x97, 0x1, 0x97, 0x8, 0x3B, 0x0, 0x3, 0x1, 0x97, 0x1, 0x98, 0x8, 0x3A, 0x0, 0x3, 0x1, 0x97, 0x1, 0x99, 0x8, 0x7B, 0x0, 0x3, 0x1, 0x97, 0x1, 0x9A, 0x8, 0x6, 0x0, 0x3, 0x1, 0x98, 0x1, 0x96, 0x7, 0xFF, 0x0, 0x3, 0x1, 0x98, 0x1, 0x97, 0x8, 0x4A, 0x0, 0x3, 0x1, 0x98, 0x1, 0x98, 0x8, 0x13, 0x0, 0x3, 0x1, 0x98, 0x1, 0x99, 0x8, 0x14, 0x0, 0x3, 0x1, 0x98, 0x1, 0x9A, 0x8, 0x77, 0x0, 0x3, 0x1, 0x99, 0x1, 0x96, 0x8, 0x79, 0x0, 0x3, 0x1, 0x99, 0x1, 0x97, 0x8, 0x78, 0x0, 0x3, 0x1, 0x99, 0x1, 0x98, 0x8, 0x76, 0x0, 0x3, 0x1, 0x99, 0x1, 0x99, 0x8, 0x75, 0x0, 0x3, 0x1, 0x99, 0x1, 0x9A, 0x8, 0x82, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x96, 0x8, 0x83, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x97, 0x8, 0x84, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x98, 0x8, 0x7C, 0x0, 0x3, 0x1, 0x9A, 0x1, 0x99, 0x8, 0x74, 0x0, 0x2, 0x1, 0x96, 0x8, 0x73, 0x0, 0x2, 0x1, 0x97, 0x8, 0x72, 0x0, 0x2, 0x1, 0x98, 0x8, 0x70, 0x0, 0x2, 0x1, 0x99, 0x0, 0x2, 0x0, 0x1, 0x1, 0x96, 0x1, 0x9A, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0xC, 0x0, 0x1E, 0x0, 0x30, 0x0, 0x42, 0x0, 0x54, 0x0, 0x66, 0x0, 0x78, 0x0, 0x94, 0x0, 0xAC, 0x0, 0xC4, 0x0, 0xDC, 0x0, 0xF4, 0x1, 0xC, 0x0, 0x3, 0x0, 0x1, 0x0, 0x88, 0x0, 0x1, 0x0, 0x6C, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x3, 0x0, 0x1, 0x0, 0x8E, 0x0, 0x1, 0x0, 0x5A, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x3, 0x0, 0x1, 0x0, 0x94, 0x0, 0x1, 0x0, 0x48, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x3, 0x0, 0x1, 0x0, 0x9A, 0x0, 0x1, 0x0, 0x36, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xB, 0x0, 0x3, 0x0, 0x1, 0x0, 0xA0, 0x0, 0x1, 0x0, 0x24, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x3, 0x0, 0x1, 0x0, 0xA6, 0x0, 0x1, 0x0, 0x12, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x1, 0x0, 0x3, 0x3, 0x2B, 0x3, 0x2D, 0x3, 0x2E, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x90, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x1, 0x0, 0x1, 0x1, 0x20, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x78, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x1, 0x0, 0x1, 0x0, 0x8C, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x60, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x1, 0x0, 0x1, 0x0, 0x93, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x48, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xB, 0x0, 0x1, 0x0, 0x1, 0x0, 0xDC, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x30, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x1, 0x0, 0x1, 0x0, 0x97, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x18, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xA, 0x0, 0x1, 0x0, 0x1, 0x1, 0x31, 0x0, 0x1, 0x0, 0x1, 0x3, 0x2C, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x3A, 0x0, 0x4, 0x8, 0x9B, 0x8, 0x9E, 0x8, 0x9B, 0x8, 0x9B, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x24, 0x0, 0x4, 0x8, 0x9A, 0x8, 0x9D, 0x8, 0x9A, 0x8, 0x9A, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0xE, 0x0, 0x4, 0x8, 0x9C, 0x8, 0x9F, 0x8, 0x9C, 0x8, 0x9C, 0x0, 0x2, 0x0, 0x1, 0x3, 0x2B, 0x3, 0x2E, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x4E, 0x0, 0x6, 0x0, 0x12, 0x0, 0x1C, 0x0, 0x26, 0x0, 0x30, 0x0, 0x3A, 0x0, 0x44, 0x0, 0x1, 0x0, 0x4, 0x8, 0xAD, 0x0, 0x2, 0x8, 0x9B, 0x0, 0x1, 0x0, 0x4, 0x8, 0xAE, 0x0, 0x2, 0x8, 0x9A, 0x0, 0x1, 0x0, 0x4, 0x8, 0xB0, 0x0, 0x2, 0x8, 0x9B, 0x0, 0x1, 0x0, 0x4, 0x8, 0xAF, 0x0, 0x2, 0x8, 0x9C, 0x0, 0x1, 0x0, 0x4, 0x8, 0xAC, 0x0, 0x2, 0x8, 0x9B, 0x0, 0x1, 0x0, 0x4, 0x8, 0xB1, 0x0, 0x2, 0x8, 0x9A, 0x0, 0x1, 0x0, 0x6, 0x0, 0x8C, 0x0, 0x93, 0x0, 0x97, 0x0, 0xDC, 0x1, 0x20, 0x1, 0x31, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x0, 0x2, 0x0, 0x1, 0x0, 0x2, 0x9, 0x56, 0x9, 0x57, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x18, 0x0, 0x9, 0xC, 0xF4, 0xC, 0xF5, 0xC, 0xF6, 0xC, 0xF7, 0xC, 0xFA, 0xC, 0xFB, 0xC, 0xFC, 0xC, 0xF8, 0xC, 0xF9, 0x0, 0x1, 0x0, 0x9, 0x9, 0x8, 0x9, 0x9, 0x9, 0x1A, 0x9, 0x1B, 0x9, 0x9D, 0x9, 0xA6, 0x9, 0xBE, 0xB, 0x9, 0xB, 0xA, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x4, 0x53, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x40, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x6, 0x0, 0xE, 0x7, 0x29, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x4E, 0x7, 0x27, 0x0, 0x2, 0x0, 0x4E, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x1C, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x6, 0x0, 0xE, 0x7, 0x2A, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x51, 0x7, 0x28, 0x0, 0x2, 0x0, 0x51, 0x0, 0x1, 0x0, 0x1, 0x0, 0x4B, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x2A, 0x0, 0x3, 0x0, 0xC, 0x0, 0x16, 0x0, 0x20, 0x0, 0x1, 0x0, 0x4, 0x7, 0x26, 0x0, 0x2, 0x0, 0x4B, 0x0, 0x1, 0x0, 0x4, 0x7, 0x2C, 0x0, 0x2, 0x0, 0x59, 0x0, 0x1, 0x0, 0x4, 0x7, 0x2B, 0x0, 0x2, 0x0, 0x59, 0x0, 0x1, 0x0, 0x3, 0x0, 0x4B, 0x0, 0x58, 0x0, 0x96, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0xA, 0x0, 0x2, 0x7, 0xAA, 0x7, 0xA7, 0x0, 0x1, 0x0, 0x2, 0x0, 0x30, 0x0, 0x4C, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x7, 0x5B, 0x0, 0x1, 0x0, 0x1, 0x0, 0x4C, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x5, 0x6E, 0x0, 0x1, 0x0, 0x1, 0x2, 0x3A, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x7, 0x72, 0x0, 0x1, 0x0, 0x1, 0x0, 0x37, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x1C, 0x0, 0x2, 0x7, 0xAA, 0x7, 0xAB, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0xA, 0x0, 0x2, 0x7, 0xAC, 0x7, 0xAD, 0x0, 0x1, 0x0, 0x2, 0x0, 0x30, 0x0, 0x50, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x1E, 0x0, 0xC, 0x7, 0xCF, 0x7, 0xD1, 0x7, 0xD0, 0x7, 0xD2, 0x7, 0xD3, 0x8, 0xA1, 0x8, 0xA2, 0x8, 0xA3, 0x8, 0xA4, 0x8, 0xA5, 0x8, 0xA6, 0x8, 0xA7, 0x0, 0x1, 0x0, 0xC, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2C, 0x0, 0x34, 0x0, 0x36, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x4C, 0x0, 0x54, 0x0, 0x55, 0x0, 0x56, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0xC, 0x0, 0x3, 0x8, 0xA8, 0x8, 0xA9, 0x8, 0xA9, 0x0, 0x1, 0x0, 0x3, 0x0, 0x4A, 0x0, 0x4C, 0x8, 0xA4, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x2E, 0x0, 0x14, 0x7, 0xE9, 0x7, 0xED, 0x7, 0xE7, 0x7, 0xE4, 0x7, 0xE6, 0x7, 0xE5, 0x7, 0xEA, 0x7, 0xE8, 0x7, 0xEC, 0x7, 0xEB, 0x7, 0xD9, 0x7, 0xD4, 0x7, 0xD5, 0x7, 0xD6, 0x7, 0xD7, 0x7, 0xD8, 0x0, 0x1B, 0x0, 0x1D, 0x7, 0xDD, 0x8, 0x99, 0x0, 0x2, 0x0, 0x4, 0x0, 0x15, 0x0, 0x1E, 0x0, 0x0, 0x8, 0xA0, 0x8, 0xA0, 0x0, 0xA, 0x8, 0xAB, 0x8, 0xAB, 0x0, 0xB, 0xA, 0xDD, 0xA, 0xE4, 0x0, 0xC, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x2E, 0x0, 0x14, 0xA, 0xE4, 0x8, 0xAB, 0xA, 0xDD, 0xA, 0xDE, 0xA, 0xDF, 0xA, 0xE0, 0xA, 0xE1, 0x8, 0xA0, 0xA, 0xE2, 0xA, 0xE3, 0x7, 0xD6, 0x7, 0xD8, 0x7, 0xD7, 0x7, 0xD5, 0x7, 0xD9, 0x8, 0x99, 0x0, 0x1B, 0x7, 0xDD, 0x0, 0x1D, 0x7, 0xD4, 0x0, 0x2, 0x0, 0x2, 0x0, 0x15, 0x0, 0x1E, 0x0, 0x0, 0x7, 0xE4, 0x7, 0xED, 0x0, 0xA, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x2E, 0x0, 0x14, 0x7, 0xEA, 0x7, 0xEC, 0x7, 0xED, 0x7, 0xE7, 0x7, 0xE4, 0x7, 0xE6, 0x7, 0xE5, 0x7, 0xE8, 0x7, 0xEB, 0x7, 0xE9, 0x0, 0x1C, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1A, 0x0, 0x1B, 0x0, 0x1D, 0x0, 0x1E, 0x0, 0x15, 0x0, 0x1, 0x0, 0x14, 0x0, 0x1B, 0x0, 0x1D, 0x7, 0xD4, 0x7, 0xD5, 0x7, 0xD6, 0x7, 0xD7, 0x7, 0xD8, 0x7, 0xD9, 0x7, 0xDD, 0x8, 0x99, 0x8, 0xA0, 0x8, 0xAB, 0xA, 0xDD, 0xA, 0xDE, 0xA, 0xDF, 0xA, 0xE0, 0xA, 0xE1, 0xA, 0xE2, 0xA, 0xE3, 0xA, 0xE4, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x2E, 0x0, 0x14, 0xA, 0xE1, 0xA, 0xE2, 0x8, 0xAB, 0xA, 0xDD, 0xA, 0xDE, 0xA, 0xDF, 0xA, 0xE0, 0x8, 0xA0, 0xA, 0xE3, 0x0, 0x18, 0x0, 0x1A, 0x0, 0x19, 0x0, 0x17, 0x0, 0x1C, 0x0, 0x15, 0x0, 0x1B, 0x0, 0x1E, 0x0, 0x1D, 0x0, 0x16, 0xA, 0xE4, 0x0, 0x2, 0x0, 0x6, 0x0, 0x1B, 0x0, 0x1B, 0x0, 0x0, 0x0, 0x1D, 0x0, 0x1D, 0x0, 0x1, 0x7, 0xD4, 0x7, 0xD9, 0x0, 0x2, 0x7, 0xDD, 0x7, 0xDD, 0x0, 0x8, 0x7, 0xE4, 0x7, 0xED, 0x0, 0x9, 0x8, 0x99, 0x8, 0x99, 0x0, 0x13, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x1, 0x0, 0x6, 0x4, 0x6F, 0x0, 0x1, 0x0, 0x1, 0x0, 0x14, 0x0, 0x6, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x3, 0x0, 0x1, 0x0, 0x12, 0x0, 0x1, 0x0, 0x6C, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x21, 0x0, 0x2, 0x0, 0x3, 0x4, 0x83, 0x4, 0x83, 0x0, 0x0, 0x7, 0x41, 0x7, 0x43, 0x0, 0x1, 0x7, 0x9D, 0x7, 0xA3, 0x0, 0x4, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x3C, 0x0, 0xA, 0x7, 0x43, 0x7, 0x42, 0x7, 0x41, 0x7, 0x9D, 0x7, 0x9E, 0x7, 0x9F, 0x7, 0xA0, 0x7, 0xA1, 0x7, 0xA2, 0x7, 0xA3, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8, 0x0, 0x2, 0x0, 0x1A, 0x0, 0xA, 0x7, 0xC8, 0x0, 0x7B, 0x0, 0x74, 0x0, 0x75, 0x7, 0xC9, 0x7, 0xCA, 0x7, 0xCB, 0x7, 0xCC, 0x7, 0xCD, 0x7, 0xCE, 0x0, 0x2, 0x0, 0x1, 0x0, 0x15, 0x0, 0x1E, 0x0, 0x0} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/seq.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/seq.go new file mode 100644 index 00000000..76ac40d6 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/seq.go @@ -0,0 +1,275 @@ +package chart + +import ( + "math" + "sort" +) + +// ValueSequence returns a sequence for a given values set. +func ValueSequence(values ...float64) Seq { + return Seq{NewArray(values...)} +} + +// Sequence is a provider for values for a seq. +type Sequence interface { + Len() int + GetValue(int) float64 +} + +// Seq is a utility wrapper for seq providers. +type Seq struct { + Sequence +} + +// Values enumerates the seq into a slice. +func (s Seq) Values() (output []float64) { + if s.Len() == 0 { + return + } + + output = make([]float64, s.Len()) + for i := 0; i < s.Len(); i++ { + output[i] = s.GetValue(i) + } + return +} + +// Each applies the `mapfn` to all values in the value provider. +func (s Seq) Each(mapfn func(int, float64)) { + for i := 0; i < s.Len(); i++ { + mapfn(i, s.GetValue(i)) + } +} + +// Map applies the `mapfn` to all values in the value provider, +// returning a new seq. +func (s Seq) Map(mapfn func(i int, v float64) float64) Seq { + output := make([]float64, s.Len()) + for i := 0; i < s.Len(); i++ { + mapfn(i, s.GetValue(i)) + } + return Seq{Array(output)} +} + +// FoldLeft collapses a seq from left to right. +func (s Seq) FoldLeft(mapfn func(i int, v0, v float64) float64) (v0 float64) { + if s.Len() == 0 { + return 0 + } + + if s.Len() == 1 { + return s.GetValue(0) + } + + v0 = s.GetValue(0) + for i := 1; i < s.Len(); i++ { + v0 = mapfn(i, v0, s.GetValue(i)) + } + return +} + +// FoldRight collapses a seq from right to left. +func (s Seq) FoldRight(mapfn func(i int, v0, v float64) float64) (v0 float64) { + if s.Len() == 0 { + return 0 + } + + if s.Len() == 1 { + return s.GetValue(0) + } + + v0 = s.GetValue(s.Len() - 1) + for i := s.Len() - 2; i >= 0; i-- { + v0 = mapfn(i, v0, s.GetValue(i)) + } + return +} + +// Min returns the minimum value in the seq. +func (s Seq) Min() float64 { + if s.Len() == 0 { + return 0 + } + min := s.GetValue(0) + var value float64 + for i := 1; i < s.Len(); i++ { + value = s.GetValue(i) + if value < min { + min = value + } + } + return min +} + +// Max returns the maximum value in the seq. +func (s Seq) Max() float64 { + if s.Len() == 0 { + return 0 + } + max := s.GetValue(0) + var value float64 + for i := 1; i < s.Len(); i++ { + value = s.GetValue(i) + if value > max { + max = value + } + } + return max +} + +// MinMax returns the minimum and the maximum in one pass. +func (s Seq) MinMax() (min, max float64) { + if s.Len() == 0 { + return + } + min = s.GetValue(0) + max = min + var value float64 + for i := 1; i < s.Len(); i++ { + value = s.GetValue(i) + if value < min { + min = value + } + if value > max { + max = value + } + } + return +} + +// Sort returns the seq sorted in ascending order. +// This fully enumerates the seq. +func (s Seq) Sort() Seq { + if s.Len() == 0 { + return s + } + values := s.Values() + sort.Float64s(values) + return Seq{Array(values)} +} + +// Reverse reverses the sequence +func (s Seq) Reverse() Seq { + if s.Len() == 0 { + return s + } + + values := s.Values() + valuesLen := len(values) + valuesLen1 := len(values) - 1 + valuesLen2 := valuesLen >> 1 + var i, j float64 + for index := 0; index < valuesLen2; index++ { + i = values[index] + j = values[valuesLen1-index] + values[index] = j + values[valuesLen1-index] = i + } + + return Seq{Array(values)} +} + +// Median returns the median or middle value in the sorted seq. +func (s Seq) Median() (median float64) { + l := s.Len() + if l == 0 { + return + } + + sorted := s.Sort() + if l%2 == 0 { + v0 := sorted.GetValue(l/2 - 1) + v1 := sorted.GetValue(l/2 + 1) + median = (v0 + v1) / 2 + } else { + median = float64(sorted.GetValue(l << 1)) + } + + return +} + +// Sum adds all the elements of a series together. +func (s Seq) Sum() (accum float64) { + if s.Len() == 0 { + return 0 + } + + for i := 0; i < s.Len(); i++ { + accum += s.GetValue(i) + } + return +} + +// Average returns the float average of the values in the buffer. +func (s Seq) Average() float64 { + if s.Len() == 0 { + return 0 + } + + return s.Sum() / float64(s.Len()) +} + +// Variance computes the variance of the buffer. +func (s Seq) Variance() float64 { + if s.Len() == 0 { + return 0 + } + + m := s.Average() + var variance, v float64 + for i := 0; i < s.Len(); i++ { + v = s.GetValue(i) + variance += (v - m) * (v - m) + } + + return variance / float64(s.Len()) +} + +// StdDev returns the standard deviation. +func (s Seq) StdDev() float64 { + if s.Len() == 0 { + return 0 + } + + return math.Pow(s.Variance(), 0.5) +} + +//Percentile finds the relative standing in a slice of floats. +// `percent` should be given on the interval [0,1.0). +func (s Seq) Percentile(percent float64) (percentile float64) { + l := s.Len() + if l == 0 { + return 0 + } + + if percent < 0 || percent > 1.0 { + panic("percent out of range [0.0, 1.0)") + } + + sorted := s.Sort() + index := percent * float64(l) + if index == float64(int64(index)) { + i := f64i(index) + ci := sorted.GetValue(i - 1) + c := sorted.GetValue(i) + percentile = (ci + c) / 2.0 + } else { + i := f64i(index) + percentile = sorted.GetValue(i) + } + + return percentile +} + +// Normalize maps every value to the interval [0, 1.0]. +func (s Seq) Normalize() Seq { + min, max := s.MinMax() + + delta := max - min + output := make([]float64, s.Len()) + for i := 0; i < s.Len(); i++ { + output[i] = (s.GetValue(i) - min) / delta + } + + return Seq{Array(output)} +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/series.go new file mode 100644 index 00000000..7986d012 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/series.go @@ -0,0 +1,10 @@ +package chart + +// Series is an alias to Renderable. +type Series interface { + GetName() string + GetYAxis() YAxisType + GetStyle() Style + Validate() error + Render(r Renderer, canvasBox Box, xrange, yrange Range, s Style) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/sma_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/sma_series.go new file mode 100644 index 00000000..b952c0ad --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/sma_series.go @@ -0,0 +1,120 @@ +package chart + +import ( + "fmt" +) + +const ( + // DefaultSimpleMovingAveragePeriod is the default number of values to average. + DefaultSimpleMovingAveragePeriod = 16 +) + +// Interface Assertions. +var ( + _ Series = (*SMASeries)(nil) + _ FirstValuesProvider = (*SMASeries)(nil) + _ LastValuesProvider = (*SMASeries)(nil) +) + +// SMASeries is a computed series. +type SMASeries struct { + Name string + Style Style + YAxis YAxisType + + Period int + InnerSeries ValuesProvider +} + +// GetName returns the name of the time series. +func (sma SMASeries) GetName() string { + return sma.Name +} + +// GetStyle returns the line style. +func (sma SMASeries) GetStyle() Style { + return sma.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (sma SMASeries) GetYAxis() YAxisType { + return sma.YAxis +} + +// Len returns the number of elements in the series. +func (sma SMASeries) Len() int { + return sma.InnerSeries.Len() +} + +// GetPeriod returns the window size. +func (sma SMASeries) GetPeriod(defaults ...int) int { + if sma.Period == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultSimpleMovingAveragePeriod + } + return sma.Period +} + +// GetValues gets a value at a given index. +func (sma SMASeries) GetValues(index int) (x, y float64) { + if sma.InnerSeries == nil || sma.InnerSeries.Len() == 0 { + return + } + px, _ := sma.InnerSeries.GetValues(index) + x = px + y = sma.getAverage(index) + return +} + +// GetFirstValues computes the first moving average value. +func (sma SMASeries) GetFirstValues() (x, y float64) { + if sma.InnerSeries == nil || sma.InnerSeries.Len() == 0 { + return + } + px, _ := sma.InnerSeries.GetValues(0) + x = px + y = sma.getAverage(0) + return +} + +// GetLastValues computes the last moving average value but walking back window size samples, +// and recomputing the last moving average chunk. +func (sma SMASeries) GetLastValues() (x, y float64) { + if sma.InnerSeries == nil || sma.InnerSeries.Len() == 0 { + return + } + seriesLen := sma.InnerSeries.Len() + px, _ := sma.InnerSeries.GetValues(seriesLen - 1) + x = px + y = sma.getAverage(seriesLen - 1) + return +} + +func (sma SMASeries) getAverage(index int) float64 { + period := sma.GetPeriod() + floor := MaxInt(0, index-period) + var accum float64 + var count float64 + for x := index; x >= floor; x-- { + _, vy := sma.InnerSeries.GetValues(x) + accum += vy + count += 1.0 + } + return accum / count +} + +// Render renders the series. +func (sma SMASeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := sma.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, sma) +} + +// Validate validates the series. +func (sma SMASeries) Validate() error { + if sma.InnerSeries == nil { + return fmt.Errorf("sma series requires InnerSeries to be set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/stacked_bar_chart.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/stacked_bar_chart.go new file mode 100644 index 00000000..10aa5451 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/stacked_bar_chart.go @@ -0,0 +1,610 @@ +package chart + +import ( + "errors" + "fmt" + "io" + "math" + + "github.com/golang/freetype/truetype" +) + +// StackedBar is a bar within a StackedBarChart. +type StackedBar struct { + Name string + Width int + Values []Value +} + +// GetWidth returns the width of the bar. +func (sb StackedBar) GetWidth() int { + if sb.Width == 0 { + return 50 + } + return sb.Width +} + +// StackedBarChart is a chart that draws sections of a bar based on percentages. +type StackedBarChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + + XAxis Style + YAxis Style + + BarSpacing int + + Font *truetype.Font + defaultFont *truetype.Font + + IsHorizontal bool + + Bars []StackedBar + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (sbc StackedBarChart) GetDPI(defaults ...float64) float64 { + if sbc.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return sbc.DPI +} + +// GetFont returns the text font. +func (sbc StackedBarChart) GetFont() *truetype.Font { + if sbc.Font == nil { + return sbc.defaultFont + } + return sbc.Font +} + +// GetWidth returns the chart width or the default value. +func (sbc StackedBarChart) GetWidth() int { + if sbc.Width == 0 { + return DefaultChartWidth + } + return sbc.Width +} + +// GetHeight returns the chart height or the default value. +func (sbc StackedBarChart) GetHeight() int { + if sbc.Height == 0 { + return DefaultChartWidth + } + return sbc.Height +} + +// GetBarSpacing returns the spacing between bars. +func (sbc StackedBarChart) GetBarSpacing() int { + if sbc.BarSpacing == 0 { + return 100 + } + return sbc.BarSpacing +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (sbc StackedBarChart) Render(rp RendererProvider, w io.Writer) error { + if len(sbc.Bars) == 0 { + return errors.New("please provide at least one bar") + } + + r, err := rp(sbc.GetWidth(), sbc.GetHeight()) + if err != nil { + return err + } + + if sbc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + sbc.defaultFont = defaultFont + } + r.SetDPI(sbc.GetDPI(DefaultDPI)) + + var canvasBox Box + if sbc.IsHorizontal { + canvasBox = sbc.getHorizontalAdjustedCanvasBox(r, sbc.getDefaultCanvasBox()) + sbc.drawCanvas(r, canvasBox) + sbc.drawHorizontalBars(r, canvasBox) + sbc.drawHorizontalXAxis(r, canvasBox) + sbc.drawHorizontalYAxis(r, canvasBox) + } else { + canvasBox = sbc.getAdjustedCanvasBox(r, sbc.getDefaultCanvasBox()) + sbc.drawCanvas(r, canvasBox) + sbc.drawBars(r, canvasBox) + sbc.drawXAxis(r, canvasBox) + sbc.drawYAxis(r, canvasBox) + } + + sbc.drawTitle(r) + for _, a := range sbc.Elements { + a(r, canvasBox, sbc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (sbc StackedBarChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, sbc.getCanvasStyle()) +} + +func (sbc StackedBarChart) drawBars(r Renderer, canvasBox Box) { + xoffset := canvasBox.Left + for _, bar := range sbc.Bars { + sbc.drawBar(r, canvasBox, xoffset, bar) + xoffset += (sbc.GetBarSpacing() + bar.GetWidth()) + } +} + +func (sbc StackedBarChart) drawHorizontalBars(r Renderer, canvasBox Box) { + yOffset := canvasBox.Top + for _, bar := range sbc.Bars { + sbc.drawHorizontalBar(r, canvasBox, yOffset, bar) + yOffset += sbc.GetBarSpacing() + bar.GetWidth() + } +} + +func (sbc StackedBarChart) drawBar(r Renderer, canvasBox Box, xoffset int, bar StackedBar) int { + barSpacing2 := sbc.GetBarSpacing() >> 1 + bxl := xoffset + barSpacing2 + bxr := bxl + bar.GetWidth() + + normalizedBarComponents := Values(bar.Values).Normalize() + yoffset := canvasBox.Top + for index, bv := range normalizedBarComponents { + barHeight := int(math.Ceil(bv.Value * float64(canvasBox.Height()))) + barBox := Box{ + Top: yoffset, + Left: bxl, + Right: bxr, + Bottom: MinInt(yoffset+barHeight, canvasBox.Bottom-DefaultStrokeWidth), + } + Draw.Box(r, barBox, bv.Style.InheritFrom(sbc.styleDefaultsStackedBarValue(index))) + yoffset += barHeight + } + + // draw the labels + yoffset = canvasBox.Top + var lx, ly int + for index, bv := range normalizedBarComponents { + barHeight := int(math.Ceil(bv.Value * float64(canvasBox.Height()))) + + if len(bv.Label) > 0 { + lx = bxl + ((bxr - bxl) / 2) + ly = yoffset + (barHeight / 2) + + bv.Style.InheritFrom(sbc.styleDefaultsStackedBarValue(index)).WriteToRenderer(r) + tb := r.MeasureText(bv.Label) + lx = lx - (tb.Width() >> 1) + ly = ly + (tb.Height() >> 1) + + if lx < 0 { + lx = 0 + } + if ly < 0 { + lx = 0 + } + + r.Text(bv.Label, lx, ly) + } + yoffset += barHeight + } + + return bxr +} + +func (sbc StackedBarChart) drawHorizontalBar(r Renderer, canvasBox Box, yoffset int, bar StackedBar) { + halfBarSpacing := sbc.GetBarSpacing() >> 1 + + boxTop := yoffset + halfBarSpacing + boxBottom := boxTop + bar.GetWidth() + + normalizedBarComponents := Values(bar.Values).Normalize() + + xOffset := canvasBox.Right + for index, bv := range normalizedBarComponents { + barHeight := int(math.Ceil(bv.Value * float64(canvasBox.Width()))) + barBox := Box{ + Top: boxTop, + Left: MinInt(xOffset-barHeight, canvasBox.Left+DefaultStrokeWidth), + Right: xOffset, + Bottom: boxBottom, + } + Draw.Box(r, barBox, bv.Style.InheritFrom(sbc.styleDefaultsStackedBarValue(index))) + xOffset -= barHeight + } + + // draw the labels + xOffset = canvasBox.Right + var lx, ly int + for index, bv := range normalizedBarComponents { + barHeight := int(math.Ceil(bv.Value * float64(canvasBox.Width()))) + + if len(bv.Label) > 0 { + lx = xOffset - (barHeight / 2) + ly = boxTop + ((boxBottom - boxTop) / 2) + + bv.Style.InheritFrom(sbc.styleDefaultsStackedBarValue(index)).WriteToRenderer(r) + tb := r.MeasureText(bv.Label) + lx = lx - (tb.Width() >> 1) + ly = ly + (tb.Height() >> 1) + + if lx < 0 { + lx = 0 + } + if ly < 0 { + lx = 0 + } + + r.Text(bv.Label, lx, ly) + } + xOffset -= barHeight + } +} + +func (sbc StackedBarChart) drawXAxis(r Renderer, canvasBox Box) { + if !sbc.XAxis.Hidden { + axisStyle := sbc.XAxis.InheritFrom(sbc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + cursor := canvasBox.Left + for _, bar := range sbc.Bars { + + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + bar.GetWidth() + sbc.GetBarSpacing(), + Bottom: sbc.GetHeight(), + } + if len(bar.Name) > 0 { + Draw.TextWithin(r, bar.Name, barLabelBox, axisStyle) + } + axisStyle.WriteToRenderer(r) + r.MoveTo(barLabelBox.Right, canvasBox.Bottom) + r.LineTo(barLabelBox.Right, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + cursor += bar.GetWidth() + sbc.GetBarSpacing() + } + } +} + +func (sbc StackedBarChart) drawHorizontalXAxis(r Renderer, canvasBox Box) { + if !sbc.XAxis.Hidden { + axisStyle := sbc.XAxis.InheritFrom(sbc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + ticks := LinearRangeWithStep(0.0, 1.0, 0.2) + for _, t := range ticks { + axisStyle.GetStrokeOptions().WriteToRenderer(r) + tx := canvasBox.Left + int(t*float64(canvasBox.Width())) + r.MoveTo(tx, canvasBox.Bottom) + r.LineTo(tx, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + axisStyle.GetTextOptions().WriteToRenderer(r) + text := fmt.Sprintf("%0.0f%%", t*100) + + textBox := r.MeasureText(text) + textX := tx - (textBox.Width() >> 1) + textY := canvasBox.Bottom + DefaultXAxisMargin + 10 + + if t == 1 { + textX = canvasBox.Right - textBox.Width() + } + + Draw.Text(r, text, textX, textY, axisStyle) + } + } +} + +func (sbc StackedBarChart) drawYAxis(r Renderer, canvasBox Box) { + if !sbc.YAxis.Hidden { + axisStyle := sbc.YAxis.InheritFrom(sbc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + r.MoveTo(canvasBox.Right, canvasBox.Top) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Right, canvasBox.Bottom) + r.LineTo(canvasBox.Right+DefaultHorizontalTickWidth, canvasBox.Bottom) + r.Stroke() + + ticks := LinearRangeWithStep(0.0, 1.0, 0.2) + for _, t := range ticks { + axisStyle.GetStrokeOptions().WriteToRenderer(r) + ty := canvasBox.Bottom - int(t*float64(canvasBox.Height())) + r.MoveTo(canvasBox.Right, ty) + r.LineTo(canvasBox.Right+DefaultHorizontalTickWidth, ty) + r.Stroke() + + axisStyle.GetTextOptions().WriteToRenderer(r) + text := fmt.Sprintf("%0.0f%%", t*100) + + tb := r.MeasureText(text) + Draw.Text(r, text, canvasBox.Right+DefaultYAxisMargin+5, ty+(tb.Height()>>1), axisStyle) + } + } +} + +func (sbc StackedBarChart) drawHorizontalYAxis(r Renderer, canvasBox Box) { + if !sbc.YAxis.Hidden { + axisStyle := sbc.YAxis.InheritFrom(sbc.styleDefaultsHorizontalAxes()) + axisStyle.WriteToRenderer(r) + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left, canvasBox.Top) + r.Stroke() + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left-DefaultHorizontalTickWidth, canvasBox.Bottom) + r.Stroke() + + cursor := canvasBox.Top + for _, bar := range sbc.Bars { + barLabelBox := Box{ + Top: cursor, + Left: 0, + Right: canvasBox.Left - DefaultYAxisMargin, + Bottom: cursor + bar.GetWidth() + sbc.GetBarSpacing(), + } + if len(bar.Name) > 0 { + Draw.TextWithin(r, bar.Name, barLabelBox, axisStyle) + } + axisStyle.WriteToRenderer(r) + r.MoveTo(canvasBox.Left, barLabelBox.Bottom) + r.LineTo(canvasBox.Left-DefaultHorizontalTickWidth, barLabelBox.Bottom) + r.Stroke() + cursor += bar.GetWidth() + sbc.GetBarSpacing() + } + } +} + +func (sbc StackedBarChart) drawTitle(r Renderer) { + if len(sbc.Title) > 0 && !sbc.TitleStyle.Hidden { + r.SetFont(sbc.TitleStyle.GetFont(sbc.GetFont())) + r.SetFontColor(sbc.TitleStyle.GetFontColor(sbc.GetColorPalette().TextColor())) + titleFontSize := sbc.TitleStyle.GetFontSize(DefaultTitleFontSize) + r.SetFontSize(titleFontSize) + + textBox := r.MeasureText(sbc.Title) + + textWidth := textBox.Width() + textHeight := textBox.Height() + + titleX := (sbc.GetWidth() >> 1) - (textWidth >> 1) + titleY := sbc.TitleStyle.Padding.GetTop(DefaultTitleTop) + textHeight + + r.Text(sbc.Title, titleX, titleY) + } +} + +func (sbc StackedBarChart) getCanvasStyle() Style { + return sbc.Canvas.InheritFrom(sbc.styleDefaultsCanvas()) +} + +func (sbc StackedBarChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: sbc.GetColorPalette().CanvasColor(), + StrokeColor: sbc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultCanvasStrokeWidth, + } +} + +// GetColorPalette returns the color palette for the chart. +func (sbc StackedBarChart) GetColorPalette() ColorPalette { + if sbc.ColorPalette != nil { + return sbc.ColorPalette + } + return AlternateColorPalette +} + +func (sbc StackedBarChart) getDefaultCanvasBox() Box { + return sbc.Box() +} + +func (sbc StackedBarChart) getAdjustedCanvasBox(r Renderer, canvasBox Box) Box { + var totalWidth int + for _, bar := range sbc.Bars { + totalWidth += bar.GetWidth() + sbc.GetBarSpacing() + } + + if !sbc.XAxis.Hidden { + xaxisHeight := DefaultVerticalTickHeight + + axisStyle := sbc.XAxis.InheritFrom(sbc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + cursor := canvasBox.Left + for _, bar := range sbc.Bars { + if len(bar.Name) > 0 { + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + bar.GetWidth() + sbc.GetBarSpacing(), + Bottom: sbc.GetHeight(), + } + lines := Text.WrapFit(r, bar.Name, barLabelBox.Width(), axisStyle) + linesBox := Text.MeasureLines(r, lines, axisStyle) + + xaxisHeight = MaxInt(linesBox.Height()+(2*DefaultXAxisMargin), xaxisHeight) + } + } + return Box{ + Top: canvasBox.Top, + Left: canvasBox.Left, + Right: canvasBox.Left + totalWidth, + Bottom: sbc.GetHeight() - xaxisHeight, + } + } + return Box{ + Top: canvasBox.Top, + Left: canvasBox.Left, + Right: canvasBox.Left + totalWidth, + Bottom: canvasBox.Bottom, + } + +} + +func (sbc StackedBarChart) getHorizontalAdjustedCanvasBox(r Renderer, canvasBox Box) Box { + var totalHeight int + for _, bar := range sbc.Bars { + totalHeight += bar.GetWidth() + sbc.GetBarSpacing() + } + + if !sbc.YAxis.Hidden { + yAxisWidth := DefaultHorizontalTickWidth + + axisStyle := sbc.YAxis.InheritFrom(sbc.styleDefaultsHorizontalAxes()) + axisStyle.WriteToRenderer(r) + + cursor := canvasBox.Top + for _, bar := range sbc.Bars { + if len(bar.Name) > 0 { + barLabelBox := Box{ + Top: cursor, + Left: 0, + Right: canvasBox.Left + DefaultYAxisMargin, + Bottom: cursor + bar.GetWidth() + sbc.GetBarSpacing(), + } + lines := Text.WrapFit(r, bar.Name, barLabelBox.Width(), axisStyle) + linesBox := Text.MeasureLines(r, lines, axisStyle) + + yAxisWidth = MaxInt(linesBox.Height()+(2*DefaultXAxisMargin), yAxisWidth) + } + } + return Box{ + Top: canvasBox.Top, + Left: canvasBox.Left + yAxisWidth, + Right: canvasBox.Right, + Bottom: canvasBox.Top + totalHeight, + } + } + return Box{ + Top: canvasBox.Top, + Left: canvasBox.Left, + Right: canvasBox.Right, + Bottom: canvasBox.Top + totalHeight, + } +} + +// Box returns the chart bounds as a box. +func (sbc StackedBarChart) Box() Box { + dpr := sbc.Background.Padding.GetRight(10) + dpb := sbc.Background.Padding.GetBottom(50) + + return Box{ + Top: sbc.Background.Padding.GetTop(20), + Left: sbc.Background.Padding.GetLeft(20), + Right: sbc.GetWidth() - dpr, + Bottom: sbc.GetHeight() - dpb, + } +} + +func (sbc StackedBarChart) styleDefaultsStackedBarValue(index int) Style { + return Style{ + StrokeColor: sbc.GetColorPalette().GetSeriesColor(index), + StrokeWidth: 3.0, + FillColor: sbc.GetColorPalette().GetSeriesColor(index), + FontSize: sbc.getScaledFontSize(), + FontColor: sbc.GetColorPalette().TextColor(), + Font: sbc.GetFont(), + } +} + +func (sbc StackedBarChart) styleDefaultsTitle() Style { + return sbc.TitleStyle.InheritFrom(Style{ + FontColor: DefaultTextColor, + Font: sbc.GetFont(), + FontSize: sbc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (sbc StackedBarChart) getScaledFontSize() float64 { + effectiveDimension := MinInt(sbc.GetWidth(), sbc.GetHeight()) + if effectiveDimension >= 2048 { + return 48.0 + } else if effectiveDimension >= 1024 { + return 24.0 + } else if effectiveDimension > 512 { + return 18.0 + } else if effectiveDimension > 256 { + return 12.0 + } + return 10.0 +} + +func (sbc StackedBarChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(sbc.GetWidth(), sbc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +func (sbc StackedBarChart) styleDefaultsAxes() Style { + return Style{ + StrokeColor: DefaultAxisColor, + Font: sbc.GetFont(), + FontSize: DefaultAxisFontSize, + FontColor: DefaultAxisColor, + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + } +} + +func (sbc StackedBarChart) styleDefaultsHorizontalAxes() Style { + return Style{ + StrokeColor: DefaultAxisColor, + Font: sbc.GetFont(), + FontSize: DefaultAxisFontSize, + FontColor: DefaultAxisColor, + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignMiddle, + TextWrap: TextWrapWord, + } +} + +func (sbc StackedBarChart) styleDefaultsElements() Style { + return Style{ + Font: sbc.GetFont(), + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/stringutil.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/stringutil.go new file mode 100644 index 00000000..858d4474 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/stringutil.go @@ -0,0 +1,57 @@ +package chart + +import "strings" + +// SplitCSV splits a corpus by the `,`, dropping leading or trailing whitespace unless quoted. +func SplitCSV(text string) (output []string) { + if len(text) == 0 { + return + } + + var state int + var word []rune + var opened rune + for _, r := range text { + switch state { + case 0: // word + if isQuote(r) { + opened = r + state = 1 + } else if isCSVDelim(r) { + output = append(output, strings.TrimSpace(string(word))) + word = nil + } else { + word = append(word, r) + } + case 1: // we're in a quoted section + if matchesQuote(opened, r) { + state = 0 + continue + } + word = append(word, r) + } + } + + if len(word) > 0 { + output = append(output, strings.TrimSpace(string(word))) + } + return +} + +func isCSVDelim(r rune) bool { + return r == rune(',') +} + +func isQuote(r rune) bool { + return r == '"' || r == '\'' || r == '“' || r == '”' || r == '`' +} + +func matchesQuote(a, b rune) bool { + if a == '“' && b == '”' { + return true + } + if a == '”' && b == '“' { + return true + } + return a == b +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/style.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/style.go new file mode 100644 index 00000000..c601d6d1 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/style.go @@ -0,0 +1,480 @@ +package chart + +import ( + "fmt" + "strings" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +const ( + // Disabled indicates if the value should be interpreted as set intentionally to zero. + // this is because golang optionals aren't here yet. + Disabled = -1 +) + +// Hidden is a prebuilt style with the `Hidden` property set to true. +func Hidden() Style { + return Style{ + Hidden: true, + } +} + +// Shown is a prebuilt style with the `Hidden` property set to false. +// You can also think of this as the default. +func Shown() Style { + return Style{ + Hidden: false, + } +} + +// StyleTextDefaults returns a style for drawing outside a +// chart context. +func StyleTextDefaults() Style { + font, _ := GetDefaultFont() + return Style{ + Hidden: false, + Font: font, + FontColor: DefaultTextColor, + FontSize: DefaultTitleFontSize, + } +} + +// Style is a simple style set. +type Style struct { + Hidden bool + Padding Box + + ClassName string + + StrokeWidth float64 + StrokeColor drawing.Color + StrokeDashArray []float64 + + DotColor drawing.Color + DotWidth float64 + + DotWidthProvider SizeProvider + DotColorProvider DotColorProvider + + FillColor drawing.Color + + FontSize float64 + FontColor drawing.Color + Font *truetype.Font + + TextHorizontalAlign TextHorizontalAlign + TextVerticalAlign TextVerticalAlign + TextWrap TextWrap + TextLineSpacing int + TextRotationDegrees float64 //0 is unset or normal +} + +// IsZero returns if the object is set or not. +func (s Style) IsZero() bool { + return !s.Hidden && + s.StrokeColor.IsZero() && + s.StrokeWidth == 0 && + s.DotColor.IsZero() && + s.DotWidth == 0 && + s.FillColor.IsZero() && + s.FontColor.IsZero() && + s.FontSize == 0 && + s.Font == nil && + s.ClassName == "" +} + +// String returns a text representation of the style. +func (s Style) String() string { + if s.IsZero() { + return "{}" + } + + var output []string + if s.Hidden { + output = []string{"\"hidden\": true"} + } else { + output = []string{"\"hidden\": false"} + } + + if s.ClassName != "" { + output = append(output, fmt.Sprintf("\"class_name\": %s", s.ClassName)) + } else { + output = append(output, "\"class_name\": null") + } + + if !s.Padding.IsZero() { + output = append(output, fmt.Sprintf("\"padding\": %s", s.Padding.String())) + } else { + output = append(output, "\"padding\": null") + } + + if s.StrokeWidth >= 0 { + output = append(output, fmt.Sprintf("\"stroke_width\": %0.2f", s.StrokeWidth)) + } else { + output = append(output, "\"stroke_width\": null") + } + + if !s.StrokeColor.IsZero() { + output = append(output, fmt.Sprintf("\"stroke_color\": %s", s.StrokeColor.String())) + } else { + output = append(output, "\"stroke_color\": null") + } + + if len(s.StrokeDashArray) > 0 { + var elements []string + for _, v := range s.StrokeDashArray { + elements = append(elements, fmt.Sprintf("%.2f", v)) + } + dashArray := strings.Join(elements, ", ") + output = append(output, fmt.Sprintf("\"stroke_dash_array\": [%s]", dashArray)) + } else { + output = append(output, "\"stroke_dash_array\": null") + } + + if s.DotWidth >= 0 { + output = append(output, fmt.Sprintf("\"dot_width\": %0.2f", s.DotWidth)) + } else { + output = append(output, "\"dot_width\": null") + } + + if !s.DotColor.IsZero() { + output = append(output, fmt.Sprintf("\"dot_color\": %s", s.DotColor.String())) + } else { + output = append(output, "\"dot_color\": null") + } + + if !s.FillColor.IsZero() { + output = append(output, fmt.Sprintf("\"fill_color\": %s", s.FillColor.String())) + } else { + output = append(output, "\"fill_color\": null") + } + + if s.FontSize != 0 { + output = append(output, fmt.Sprintf("\"font_size\": \"%0.2fpt\"", s.FontSize)) + } else { + output = append(output, "\"font_size\": null") + } + + if !s.FontColor.IsZero() { + output = append(output, fmt.Sprintf("\"font_color\": %s", s.FontColor.String())) + } else { + output = append(output, "\"font_color\": null") + } + + if s.Font != nil { + output = append(output, fmt.Sprintf("\"font\": \"%s\"", s.Font.Name(truetype.NameIDFontFamily))) + } else { + output = append(output, "\"font_color\": null") + } + + return "{" + strings.Join(output, ", ") + "}" +} + +// GetClassName returns the class name or a default. +func (s Style) GetClassName(defaults ...string) string { + if s.ClassName == "" { + if len(defaults) > 0 { + return defaults[0] + } + return "" + } + return s.ClassName +} + +// GetStrokeColor returns the stroke color. +func (s Style) GetStrokeColor(defaults ...drawing.Color) drawing.Color { + if s.StrokeColor.IsZero() { + if len(defaults) > 0 { + return defaults[0] + } + return drawing.ColorTransparent + } + return s.StrokeColor +} + +// GetFillColor returns the fill color. +func (s Style) GetFillColor(defaults ...drawing.Color) drawing.Color { + if s.FillColor.IsZero() { + if len(defaults) > 0 { + return defaults[0] + } + return drawing.ColorTransparent + } + return s.FillColor +} + +// GetDotColor returns the stroke color. +func (s Style) GetDotColor(defaults ...drawing.Color) drawing.Color { + if s.DotColor.IsZero() { + if len(defaults) > 0 { + return defaults[0] + } + return drawing.ColorTransparent + } + return s.DotColor +} + +// GetStrokeWidth returns the stroke width. +func (s Style) GetStrokeWidth(defaults ...float64) float64 { + if s.StrokeWidth == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultStrokeWidth + } + return s.StrokeWidth +} + +// GetDotWidth returns the dot width for scatter plots. +func (s Style) GetDotWidth(defaults ...float64) float64 { + if s.DotWidth == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDotWidth + } + return s.DotWidth +} + +// GetStrokeDashArray returns the stroke dash array. +func (s Style) GetStrokeDashArray(defaults ...[]float64) []float64 { + if len(s.StrokeDashArray) == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return nil + } + return s.StrokeDashArray +} + +// GetFontSize gets the font size. +func (s Style) GetFontSize(defaults ...float64) float64 { + if s.FontSize == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultFontSize + } + return s.FontSize +} + +// GetFontColor gets the font size. +func (s Style) GetFontColor(defaults ...drawing.Color) drawing.Color { + if s.FontColor.IsZero() { + if len(defaults) > 0 { + return defaults[0] + } + return drawing.ColorTransparent + } + return s.FontColor +} + +// GetFont returns the font face. +func (s Style) GetFont(defaults ...*truetype.Font) *truetype.Font { + if s.Font == nil { + if len(defaults) > 0 { + return defaults[0] + } + return nil + } + return s.Font +} + +// GetPadding returns the padding. +func (s Style) GetPadding(defaults ...Box) Box { + if s.Padding.IsZero() { + if len(defaults) > 0 { + return defaults[0] + } + return Box{} + } + return s.Padding +} + +// GetTextHorizontalAlign returns the horizontal alignment. +func (s Style) GetTextHorizontalAlign(defaults ...TextHorizontalAlign) TextHorizontalAlign { + if s.TextHorizontalAlign == TextHorizontalAlignUnset { + if len(defaults) > 0 { + return defaults[0] + } + return TextHorizontalAlignUnset + } + return s.TextHorizontalAlign +} + +// GetTextVerticalAlign returns the vertical alignment. +func (s Style) GetTextVerticalAlign(defaults ...TextVerticalAlign) TextVerticalAlign { + if s.TextVerticalAlign == TextVerticalAlignUnset { + if len(defaults) > 0 { + return defaults[0] + } + return TextVerticalAlignUnset + } + return s.TextVerticalAlign +} + +// GetTextWrap returns the word wrap. +func (s Style) GetTextWrap(defaults ...TextWrap) TextWrap { + if s.TextWrap == TextWrapUnset { + if len(defaults) > 0 { + return defaults[0] + } + return TextWrapUnset + } + return s.TextWrap +} + +// GetTextLineSpacing returns the spacing in pixels between lines of text (vertically). +func (s Style) GetTextLineSpacing(defaults ...int) int { + if s.TextLineSpacing == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultLineSpacing + } + return s.TextLineSpacing +} + +// GetTextRotationDegrees returns the text rotation in degrees. +func (s Style) GetTextRotationDegrees(defaults ...float64) float64 { + if s.TextRotationDegrees == 0 { + if len(defaults) > 0 { + return defaults[0] + } + } + return s.TextRotationDegrees +} + +// WriteToRenderer passes the style's options to a renderer. +func (s Style) WriteToRenderer(r Renderer) { + r.SetClassName(s.GetClassName()) + r.SetStrokeColor(s.GetStrokeColor()) + r.SetStrokeWidth(s.GetStrokeWidth()) + r.SetStrokeDashArray(s.GetStrokeDashArray()) + r.SetFillColor(s.GetFillColor()) + r.SetFont(s.GetFont()) + r.SetFontColor(s.GetFontColor()) + r.SetFontSize(s.GetFontSize()) + + r.ClearTextRotation() + if s.GetTextRotationDegrees() != 0 { + r.SetTextRotation(DegreesToRadians(s.GetTextRotationDegrees())) + } +} + +// WriteDrawingOptionsToRenderer passes just the drawing style options to a renderer. +func (s Style) WriteDrawingOptionsToRenderer(r Renderer) { + r.SetClassName(s.GetClassName()) + r.SetStrokeColor(s.GetStrokeColor()) + r.SetStrokeWidth(s.GetStrokeWidth()) + r.SetStrokeDashArray(s.GetStrokeDashArray()) + r.SetFillColor(s.GetFillColor()) +} + +// WriteTextOptionsToRenderer passes just the text style options to a renderer. +func (s Style) WriteTextOptionsToRenderer(r Renderer) { + r.SetClassName(s.GetClassName()) + r.SetFont(s.GetFont()) + r.SetFontColor(s.GetFontColor()) + r.SetFontSize(s.GetFontSize()) +} + +// InheritFrom coalesces two styles into a new style. +func (s Style) InheritFrom(defaults Style) (final Style) { + final.ClassName = s.GetClassName(defaults.ClassName) + + final.StrokeColor = s.GetStrokeColor(defaults.StrokeColor) + final.StrokeWidth = s.GetStrokeWidth(defaults.StrokeWidth) + final.StrokeDashArray = s.GetStrokeDashArray(defaults.StrokeDashArray) + + final.DotColor = s.GetDotColor(defaults.DotColor) + final.DotWidth = s.GetDotWidth(defaults.DotWidth) + + final.DotWidthProvider = s.DotWidthProvider + final.DotColorProvider = s.DotColorProvider + + final.FillColor = s.GetFillColor(defaults.FillColor) + final.FontColor = s.GetFontColor(defaults.FontColor) + final.FontSize = s.GetFontSize(defaults.FontSize) + final.Font = s.GetFont(defaults.Font) + final.Padding = s.GetPadding(defaults.Padding) + final.TextHorizontalAlign = s.GetTextHorizontalAlign(defaults.TextHorizontalAlign) + final.TextVerticalAlign = s.GetTextVerticalAlign(defaults.TextVerticalAlign) + final.TextWrap = s.GetTextWrap(defaults.TextWrap) + final.TextLineSpacing = s.GetTextLineSpacing(defaults.TextLineSpacing) + final.TextRotationDegrees = s.GetTextRotationDegrees(defaults.TextRotationDegrees) + + return +} + +// GetStrokeOptions returns the stroke components. +func (s Style) GetStrokeOptions() Style { + return Style{ + ClassName: s.ClassName, + StrokeDashArray: s.StrokeDashArray, + StrokeColor: s.StrokeColor, + StrokeWidth: s.StrokeWidth, + } +} + +// GetFillOptions returns the fill components. +func (s Style) GetFillOptions() Style { + return Style{ + ClassName: s.ClassName, + FillColor: s.FillColor, + } +} + +// GetDotOptions returns the dot components. +func (s Style) GetDotOptions() Style { + return Style{ + ClassName: s.ClassName, + StrokeDashArray: nil, + FillColor: s.DotColor, + StrokeColor: s.DotColor, + StrokeWidth: 1.0, + } +} + +// GetFillAndStrokeOptions returns the fill and stroke components. +func (s Style) GetFillAndStrokeOptions() Style { + return Style{ + ClassName: s.ClassName, + StrokeDashArray: s.StrokeDashArray, + FillColor: s.FillColor, + StrokeColor: s.StrokeColor, + StrokeWidth: s.StrokeWidth, + } +} + +// GetTextOptions returns just the text components of the style. +func (s Style) GetTextOptions() Style { + return Style{ + ClassName: s.ClassName, + FontColor: s.FontColor, + FontSize: s.FontSize, + Font: s.Font, + TextHorizontalAlign: s.TextHorizontalAlign, + TextVerticalAlign: s.TextVerticalAlign, + TextWrap: s.TextWrap, + TextLineSpacing: s.TextLineSpacing, + TextRotationDegrees: s.TextRotationDegrees, + } +} + +// ShouldDrawStroke tells drawing functions if they should draw the stroke. +func (s Style) ShouldDrawStroke() bool { + return !s.StrokeColor.IsZero() && s.StrokeWidth > 0 +} + +// ShouldDrawDot tells drawing functions if they should draw the dot. +func (s Style) ShouldDrawDot() bool { + return (!s.DotColor.IsZero() && s.DotWidth > 0) || s.DotColorProvider != nil || s.DotWidthProvider != nil +} + +// ShouldDrawFill tells drawing functions if they should draw the stroke. +func (s Style) ShouldDrawFill() bool { + return !s.FillColor.IsZero() +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/text.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/text.go new file mode 100644 index 00000000..0a9dfd0b --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/text.go @@ -0,0 +1,166 @@ +package chart + +import ( + "strings" +) + +// TextHorizontalAlign is an enum for the horizontal alignment options. +type TextHorizontalAlign int + +const ( + // TextHorizontalAlignUnset is the unset state for text horizontal alignment. + TextHorizontalAlignUnset TextHorizontalAlign = 0 + // TextHorizontalAlignLeft aligns a string horizontally so that it's left ligature starts at horizontal pixel 0. + TextHorizontalAlignLeft TextHorizontalAlign = 1 + // TextHorizontalAlignCenter left aligns a string horizontally so that there are equal pixels + // to the left and to the right of a string within a box. + TextHorizontalAlignCenter TextHorizontalAlign = 2 + // TextHorizontalAlignRight right aligns a string horizontally so that the right ligature ends at the right-most pixel + // of a box. + TextHorizontalAlignRight TextHorizontalAlign = 3 +) + +// TextWrap is an enum for the word wrap options. +type TextWrap int + +const ( + // TextWrapUnset is the unset state for text wrap options. + TextWrapUnset TextWrap = 0 + // TextWrapNone will spill text past horizontal boundaries. + TextWrapNone TextWrap = 1 + // TextWrapWord will split a string on words (i.e. spaces) to fit within a horizontal boundary. + TextWrapWord TextWrap = 2 + // TextWrapRune will split a string on a rune (i.e. utf-8 codepage) to fit within a horizontal boundary. + TextWrapRune TextWrap = 3 +) + +// TextVerticalAlign is an enum for the vertical alignment options. +type TextVerticalAlign int + +const ( + // TextVerticalAlignUnset is the unset state for vertical alignment options. + TextVerticalAlignUnset TextVerticalAlign = 0 + // TextVerticalAlignBaseline aligns text according to the "baseline" of the string, or where a normal ascender begins. + TextVerticalAlignBaseline TextVerticalAlign = 1 + // TextVerticalAlignBottom aligns the text according to the lowers pixel of any of the ligatures (ex. g or q both extend below the baseline). + TextVerticalAlignBottom TextVerticalAlign = 2 + // TextVerticalAlignMiddle aligns the text so that there is an equal amount of space above and below the top and bottom of the ligatures. + TextVerticalAlignMiddle TextVerticalAlign = 3 + // TextVerticalAlignMiddleBaseline aligns the text vertically so that there is an equal number of pixels above and below the baseline of the string. + TextVerticalAlignMiddleBaseline TextVerticalAlign = 4 + // TextVerticalAlignTop alignts the text so that the top of the ligatures are at y-pixel 0 in the container. + TextVerticalAlignTop TextVerticalAlign = 5 +) + +var ( + // Text contains utilities for text. + Text = &text{} +) + +// TextStyle encapsulates text style options. +type TextStyle struct { + HorizontalAlign TextHorizontalAlign + VerticalAlign TextVerticalAlign + Wrap TextWrap +} + +type text struct{} + +func (t text) WrapFit(r Renderer, value string, width int, style Style) []string { + switch style.TextWrap { + case TextWrapRune: + return t.WrapFitRune(r, value, width, style) + case TextWrapWord: + return t.WrapFitWord(r, value, width, style) + } + return []string{value} +} + +func (t text) WrapFitWord(r Renderer, value string, width int, style Style) []string { + style.WriteToRenderer(r) + + var output []string + var line string + var word string + + var textBox Box + + for _, c := range value { + if c == rune('\n') { // commit the line to output + output = append(output, t.Trim(line+word)) + line = "" + word = "" + continue + } + + textBox = r.MeasureText(line + word + string(c)) + + if textBox.Width() >= width { + output = append(output, t.Trim(line)) + line = word + word = string(c) + continue + } + + if c == rune(' ') || c == rune('\t') { + line = line + word + string(c) + word = "" + continue + } + word = word + string(c) + } + + return append(output, t.Trim(line+word)) +} + +func (t text) WrapFitRune(r Renderer, value string, width int, style Style) []string { + style.WriteToRenderer(r) + + var output []string + var line string + var textBox Box + for _, c := range value { + if c == rune('\n') { + output = append(output, line) + line = "" + continue + } + + textBox = r.MeasureText(line + string(c)) + + if textBox.Width() >= width { + output = append(output, line) + line = string(c) + continue + } + line = line + string(c) + } + return t.appendLast(output, line) +} + +func (t text) Trim(value string) string { + return strings.Trim(value, " \t\n\r") +} + +func (t text) MeasureLines(r Renderer, lines []string, style Style) Box { + style.WriteTextOptionsToRenderer(r) + var output Box + for index, line := range lines { + lineBox := r.MeasureText(line) + output.Right = MaxInt(lineBox.Right, output.Right) + output.Bottom += lineBox.Height() + if index < len(lines)-1 { + output.Bottom += +style.GetTextLineSpacing() + } + } + return output +} + +func (t text) appendLast(lines []string, text string) []string { + if len(lines) == 0 { + return []string{text} + } + lastLine := lines[len(lines)-1] + lines[len(lines)-1] = lastLine + text + return lines +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/tick.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/tick.go new file mode 100644 index 00000000..1732c60b --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/tick.go @@ -0,0 +1,115 @@ +package chart + +import ( + "fmt" + "math" + "strings" +) + +// TicksProvider is a type that provides ticks. +type TicksProvider interface { + GetTicks(r Renderer, defaults Style, vf ValueFormatter) []Tick +} + +// Tick represents a label on an axis. +type Tick struct { + Value float64 + Label string +} + +// Ticks is an array of ticks. +type Ticks []Tick + +// Len returns the length of the ticks set. +func (t Ticks) Len() int { + return len(t) +} + +// Swap swaps two elements. +func (t Ticks) Swap(i, j int) { + t[i], t[j] = t[j], t[i] +} + +// Less returns if i's value is less than j's value. +func (t Ticks) Less(i, j int) bool { + return t[i].Value < t[j].Value +} + +// String returns a string representation of the set of ticks. +func (t Ticks) String() string { + var values []string + for i, tick := range t { + values = append(values, fmt.Sprintf("[%d: %s]", i, tick.Label)) + } + return strings.Join(values, ", ") +} + +// GenerateContinuousTicks generates a set of ticks. +func GenerateContinuousTicks(r Renderer, ra Range, isVertical bool, style Style, vf ValueFormatter) []Tick { + if vf == nil { + vf = FloatValueFormatter + } + + var ticks []Tick + min, max := ra.GetMin(), ra.GetMax() + + if ra.IsDescending() { + ticks = append(ticks, Tick{ + Value: max, + Label: vf(max), + }) + } else { + ticks = append(ticks, Tick{ + Value: min, + Label: vf(min), + }) + } + + minLabel := vf(min) + style.GetTextOptions().WriteToRenderer(r) + labelBox := r.MeasureText(minLabel) + + var tickSize float64 + if isVertical { + tickSize = float64(labelBox.Height() + DefaultMinimumTickVerticalSpacing) + } else { + tickSize = float64(labelBox.Width() + DefaultMinimumTickHorizontalSpacing) + } + + domain := float64(ra.GetDomain()) + domainRemainder := domain - (tickSize * 2) + intermediateTickCount := int(math.Floor(float64(domainRemainder) / float64(tickSize))) + + rangeDelta := math.Abs(max - min) + tickStep := rangeDelta / float64(intermediateTickCount) + + roundTo := GetRoundToForDelta(rangeDelta) / 10 + intermediateTickCount = MinInt(intermediateTickCount, DefaultTickCountSanityCheck) + + for x := 1; x < intermediateTickCount; x++ { + var tickValue float64 + if ra.IsDescending() { + tickValue = max - RoundUp(tickStep*float64(x), roundTo) + } else { + tickValue = min + RoundUp(tickStep*float64(x), roundTo) + } + ticks = append(ticks, Tick{ + Value: tickValue, + Label: vf(tickValue), + }) + } + + if ra.IsDescending() { + ticks = append(ticks, Tick{ + Value: min, + Label: vf(min), + }) + } else { + ticks = append(ticks, Tick{ + Value: max, + Label: vf(max), + }) + } + + return ticks +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/time_series.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/time_series.go new file mode 100644 index 00000000..83ee905e --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/time_series.go @@ -0,0 +1,91 @@ +package chart + +import ( + "fmt" + "time" +) + +// Interface Assertions. +var ( + _ Series = (*TimeSeries)(nil) + _ FirstValuesProvider = (*TimeSeries)(nil) + _ LastValuesProvider = (*TimeSeries)(nil) + _ ValueFormatterProvider = (*TimeSeries)(nil) +) + +// TimeSeries is a line on a chart. +type TimeSeries struct { + Name string + Style Style + + YAxis YAxisType + + XValues []time.Time + YValues []float64 +} + +// GetName returns the name of the time series. +func (ts TimeSeries) GetName() string { + return ts.Name +} + +// GetStyle returns the line style. +func (ts TimeSeries) GetStyle() Style { + return ts.Style +} + +// Len returns the number of elements in the series. +func (ts TimeSeries) Len() int { + return len(ts.XValues) +} + +// GetValues gets x, y values at a given index. +func (ts TimeSeries) GetValues(index int) (x, y float64) { + x = TimeToFloat64(ts.XValues[index]) + y = ts.YValues[index] + return +} + +// GetFirstValues gets the first values. +func (ts TimeSeries) GetFirstValues() (x, y float64) { + x = TimeToFloat64(ts.XValues[0]) + y = ts.YValues[0] + return +} + +// GetLastValues gets the last values. +func (ts TimeSeries) GetLastValues() (x, y float64) { + x = TimeToFloat64(ts.XValues[len(ts.XValues)-1]) + y = ts.YValues[len(ts.YValues)-1] + return +} + +// GetValueFormatters returns value formatter defaults for the series. +func (ts TimeSeries) GetValueFormatters() (x, y ValueFormatter) { + x = TimeValueFormatter + y = FloatValueFormatter + return +} + +// GetYAxis returns which YAxis the series draws on. +func (ts TimeSeries) GetYAxis() YAxisType { + return ts.YAxis +} + +// Render renders the series. +func (ts TimeSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := ts.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, ts) +} + +// Validate validates the series. +func (ts TimeSeries) Validate() error { + if len(ts.XValues) == 0 { + return fmt.Errorf("time series must have xvalues set") + } + + if len(ts.YValues) == 0 { + return fmt.Errorf("time series must have yvalues set") + } + return nil +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/times.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/times.go new file mode 100644 index 00000000..95e2acd7 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/times.go @@ -0,0 +1,46 @@ +package chart + +import ( + "sort" + "time" +) + +// Assert types implement interfaces. +var ( + _ Sequence = (*Times)(nil) + _ sort.Interface = (*Times)(nil) +) + +// Times are an array of times. +// It wraps the array with methods that implement `seq.Provider`. +type Times []time.Time + +// Array returns the times to an array. +func (t Times) Array() []time.Time { + return []time.Time(t) +} + +// Len returns the length of the array. +func (t Times) Len() int { + return len(t) +} + +// GetValue returns a value at an index as a time. +func (t Times) GetValue(index int) float64 { + return ToFloat64(t[index]) +} + +// Swap implements sort.Interface. +func (t Times) Swap(i, j int) { + t[i], t[j] = t[j], t[i] +} + +// Less implements sort.Interface. +func (t Times) Less(i, j int) bool { + return t[i].Before(t[j]) +} + +// ToFloat64 returns a float64 representation of a time. +func ToFloat64(t time.Time) float64 { + return float64(t.UnixNano()) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/timeutil.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/timeutil.go new file mode 100644 index 00000000..aa6b9e4d --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/timeutil.go @@ -0,0 +1,150 @@ +package chart + +import "time" + +// SecondsPerXYZ +const ( + SecondsPerHour = 60 * 60 + SecondsPerDay = 60 * 60 * 24 +) + +// TimeMillis returns a duration as a float millis. +func TimeMillis(d time.Duration) float64 { + return float64(d) / float64(time.Millisecond) +} + +// DiffHours returns the difference in hours between two times. +func DiffHours(t1, t2 time.Time) (hours int) { + t1n := t1.Unix() + t2n := t2.Unix() + var diff int64 + if t1n > t2n { + diff = t1n - t2n + } else { + diff = t2n - t1n + } + return int(diff / (SecondsPerHour)) +} + +// TimeMin returns the minimum and maximum times in a given range. +func TimeMin(times ...time.Time) (min time.Time) { + if len(times) == 0 { + return + } + min = times[0] + for index := 1; index < len(times); index++ { + if times[index].Before(min) { + min = times[index] + } + + } + return +} + +// TimeMax returns the minimum and maximum times in a given range. +func TimeMax(times ...time.Time) (max time.Time) { + if len(times) == 0 { + return + } + max = times[0] + + for index := 1; index < len(times); index++ { + if times[index].After(max) { + max = times[index] + } + } + return +} + +// TimeMinMax returns the minimum and maximum times in a given range. +func TimeMinMax(times ...time.Time) (min, max time.Time) { + if len(times) == 0 { + return + } + min = times[0] + max = times[0] + + for index := 1; index < len(times); index++ { + if times[index].Before(min) { + min = times[index] + } + if times[index].After(max) { + max = times[index] + } + } + return +} + +// TimeToFloat64 returns a float64 representation of a time. +func TimeToFloat64(t time.Time) float64 { + return float64(t.UnixNano()) +} + +// TimeFromFloat64 returns a time from a float64. +func TimeFromFloat64(tf float64) time.Time { + return time.Unix(0, int64(tf)) +} + +// TimeDescending sorts a given list of times ascending, or min to max. +type TimeDescending []time.Time + +// Len implements sort.Sorter +func (d TimeDescending) Len() int { return len(d) } + +// Swap implements sort.Sorter +func (d TimeDescending) Swap(i, j int) { d[i], d[j] = d[j], d[i] } + +// Less implements sort.Sorter +func (d TimeDescending) Less(i, j int) bool { return d[i].After(d[j]) } + +// TimeAscending sorts a given list of times ascending, or min to max. +type TimeAscending []time.Time + +// Len implements sort.Sorter +func (a TimeAscending) Len() int { return len(a) } + +// Swap implements sort.Sorter +func (a TimeAscending) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +// Less implements sort.Sorter +func (a TimeAscending) Less(i, j int) bool { return a[i].Before(a[j]) } + +// Days generates a seq of timestamps by day, from -days to today. +func Days(days int) []time.Time { + var values []time.Time + for day := days; day >= 0; day-- { + values = append(values, time.Now().AddDate(0, 0, -day)) + } + return values +} + +// Hours returns a sequence of times by the hour for a given number of hours +// after a given start. +func Hours(start time.Time, totalHours int) []time.Time { + times := make([]time.Time, totalHours) + + last := start + for i := 0; i < totalHours; i++ { + times[i] = last + last = last.Add(time.Hour) + } + + return times +} + +// HoursFilled adds zero values for the data bounded by the start and end of the xdata array. +func HoursFilled(xdata []time.Time, ydata []float64) ([]time.Time, []float64) { + start, end := TimeMinMax(xdata...) + totalHours := DiffHours(start, end) + + finalTimes := Hours(start, totalHours+1) + finalValues := make([]float64, totalHours+1) + + var hoursFromStart int + for i, xd := range xdata { + hoursFromStart = DiffHours(start, xd) + finalValues[hoursFromStart] = ydata[i] + } + + return finalTimes, finalValues +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/value.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value.go new file mode 100644 index 00000000..783e304b --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value.go @@ -0,0 +1,53 @@ +package chart + +// Value is a chart value. +type Value struct { + Style Style + Label string + Value float64 +} + +// Values is an array of Value. +type Values []Value + +// Values returns the values. +func (vs Values) Values() []float64 { + values := make([]float64, len(vs)) + for index, v := range vs { + values[index] = v.Value + } + return values +} + +// ValuesNormalized returns normalized values. +func (vs Values) ValuesNormalized() []float64 { + return Normalize(vs.Values()...) +} + +// Normalize returns the values normalized. +func (vs Values) Normalize() []Value { + var output []Value + var total float64 + + for _, v := range vs { + total += v.Value + } + + for _, v := range vs { + if v.Value > 0 { + output = append(output, Value{ + Style: v.Style, + Label: v.Label, + Value: RoundDown(v.Value/total, 0.0001), + }) + } + } + return output +} + +// Value2 is a two axis value. +type Value2 struct { + Style Style + Label string + XValue, YValue float64 +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_buffer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_buffer.go new file mode 100644 index 00000000..d544bd37 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_buffer.go @@ -0,0 +1,220 @@ +package chart + +import ( + "fmt" + "strings" +) + +const ( + bufferMinimumGrow = 4 + bufferShrinkThreshold = 32 + bufferGrowFactor = 200 + bufferDefaultCapacity = 4 +) + +// NewValueBuffer creates a new value buffer with an optional set of values. +func NewValueBuffer(values ...float64) *ValueBuffer { + var tail int + array := make([]float64, MaxInt(len(values), bufferDefaultCapacity)) + if len(values) > 0 { + copy(array, values) + tail = len(values) + } + return &ValueBuffer{ + array: array, + head: 0, + tail: tail, + size: len(values), + } +} + +// NewValueBufferWithCapacity creates a new ValueBuffer pre-allocated with the given capacity. +func NewValueBufferWithCapacity(capacity int) *ValueBuffer { + return &ValueBuffer{ + array: make([]float64, capacity), + head: 0, + tail: 0, + size: 0, + } +} + +// ValueBuffer is a fifo datastructure that is backed by a pre-allocated array. +// Instead of allocating a whole new node object for each element, array elements are re-used (which saves GC churn). +// Enqueue can be O(n), Dequeue is generally O(1). +// Buffer implements `seq.Provider` +type ValueBuffer struct { + array []float64 + head int + tail int + size int +} + +// Len returns the length of the Buffer (as it is currently populated). +// Actual memory footprint may be different. +func (b *ValueBuffer) Len() int { + return b.size +} + +// GetValue implements seq provider. +func (b *ValueBuffer) GetValue(index int) float64 { + effectiveIndex := (b.head + index) % len(b.array) + return b.array[effectiveIndex] +} + +// Capacity returns the total size of the Buffer, including empty elements. +func (b *ValueBuffer) Capacity() int { + return len(b.array) +} + +// SetCapacity sets the capacity of the Buffer. +func (b *ValueBuffer) SetCapacity(capacity int) { + newArray := make([]float64, capacity) + if b.size > 0 { + if b.head < b.tail { + arrayCopy(b.array, b.head, newArray, 0, b.size) + } else { + arrayCopy(b.array, b.head, newArray, 0, len(b.array)-b.head) + arrayCopy(b.array, 0, newArray, len(b.array)-b.head, b.tail) + } + } + b.array = newArray + b.head = 0 + if b.size == capacity { + b.tail = 0 + } else { + b.tail = b.size + } +} + +// Clear removes all objects from the Buffer. +func (b *ValueBuffer) Clear() { + b.array = make([]float64, bufferDefaultCapacity) + b.head = 0 + b.tail = 0 + b.size = 0 +} + +// Enqueue adds an element to the "back" of the Buffer. +func (b *ValueBuffer) Enqueue(value float64) { + if b.size == len(b.array) { + newCapacity := int(len(b.array) * int(bufferGrowFactor/100)) + if newCapacity < (len(b.array) + bufferMinimumGrow) { + newCapacity = len(b.array) + bufferMinimumGrow + } + b.SetCapacity(newCapacity) + } + + b.array[b.tail] = value + b.tail = (b.tail + 1) % len(b.array) + b.size++ +} + +// Dequeue removes the first element from the RingBuffer. +func (b *ValueBuffer) Dequeue() float64 { + if b.size == 0 { + return 0 + } + + removed := b.array[b.head] + b.head = (b.head + 1) % len(b.array) + b.size-- + return removed +} + +// Peek returns but does not remove the first element. +func (b *ValueBuffer) Peek() float64 { + if b.size == 0 { + return 0 + } + return b.array[b.head] +} + +// PeekBack returns but does not remove the last element. +func (b *ValueBuffer) PeekBack() float64 { + if b.size == 0 { + return 0 + } + if b.tail == 0 { + return b.array[len(b.array)-1] + } + return b.array[b.tail-1] +} + +// TrimExcess resizes the capacity of the buffer to better fit the contents. +func (b *ValueBuffer) TrimExcess() { + threshold := float64(len(b.array)) * 0.9 + if b.size < int(threshold) { + b.SetCapacity(b.size) + } +} + +// Array returns the ring buffer, in order, as an array. +func (b *ValueBuffer) Array() Array { + newArray := make([]float64, b.size) + + if b.size == 0 { + return newArray + } + + if b.head < b.tail { + arrayCopy(b.array, b.head, newArray, 0, b.size) + } else { + arrayCopy(b.array, b.head, newArray, 0, len(b.array)-b.head) + arrayCopy(b.array, 0, newArray, len(b.array)-b.head, b.tail) + } + + return Array(newArray) +} + +// Each calls the consumer for each element in the buffer. +func (b *ValueBuffer) Each(mapfn func(int, float64)) { + if b.size == 0 { + return + } + + var index int + if b.head < b.tail { + for cursor := b.head; cursor < b.tail; cursor++ { + mapfn(index, b.array[cursor]) + index++ + } + } else { + for cursor := b.head; cursor < len(b.array); cursor++ { + mapfn(index, b.array[cursor]) + index++ + } + for cursor := 0; cursor < b.tail; cursor++ { + mapfn(index, b.array[cursor]) + index++ + } + } +} + +// String returns a string representation for value buffers. +func (b *ValueBuffer) String() string { + var values []string + for _, elem := range b.Array() { + values = append(values, fmt.Sprintf("%v", elem)) + } + return strings.Join(values, " <= ") +} + +// -------------------------------------------------------------------------------- +// Util methods +// -------------------------------------------------------------------------------- + +func arrayClear(source []float64, index, length int) { + for x := 0; x < length; x++ { + absoluteIndex := x + index + source[absoluteIndex] = 0 + } +} + +func arrayCopy(source []float64, sourceIndex int, destination []float64, destinationIndex, length int) { + for x := 0; x < length; x++ { + from := sourceIndex + x + to := destinationIndex + x + + destination[to] = source[from] + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter.go new file mode 100644 index 00000000..468f3bdb --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter.go @@ -0,0 +1,105 @@ +package chart + +import ( + "fmt" + "strconv" + "time" +) + +// ValueFormatter is a function that takes a value and produces a string. +type ValueFormatter func(v interface{}) string + +// TimeValueFormatter is a ValueFormatter for timestamps. +func TimeValueFormatter(v interface{}) string { + return formatTime(v, DefaultDateFormat) +} + +// TimeHourValueFormatter is a ValueFormatter for timestamps. +func TimeHourValueFormatter(v interface{}) string { + return formatTime(v, DefaultDateHourFormat) +} + +// TimeMinuteValueFormatter is a ValueFormatter for timestamps. +func TimeMinuteValueFormatter(v interface{}) string { + return formatTime(v, DefaultDateMinuteFormat) +} + +// TimeDateValueFormatter is a ValueFormatter for timestamps. +func TimeDateValueFormatter(v interface{}) string { + return formatTime(v, "2006-01-02") +} + +// TimeValueFormatterWithFormat returns a time formatter with a given format. +func TimeValueFormatterWithFormat(format string) ValueFormatter { + return func(v interface{}) string { + return formatTime(v, format) + } +} + +// TimeValueFormatterWithFormat is a ValueFormatter for timestamps with a given format. +func formatTime(v interface{}, dateFormat string) string { + if typed, isTyped := v.(time.Time); isTyped { + return typed.Format(dateFormat) + } + if typed, isTyped := v.(int64); isTyped { + return time.Unix(0, typed).Format(dateFormat) + } + if typed, isTyped := v.(float64); isTyped { + return time.Unix(0, int64(typed)).Format(dateFormat) + } + return "" +} + +// IntValueFormatter is a ValueFormatter for float64. +func IntValueFormatter(v interface{}) string { + switch v.(type) { + case int: + return strconv.Itoa(v.(int)) + case int64: + return strconv.FormatInt(v.(int64), 10) + case float32: + return strconv.FormatInt(int64(v.(float32)), 10) + case float64: + return strconv.FormatInt(int64(v.(float64)), 10) + default: + return "" + } +} + +// FloatValueFormatter is a ValueFormatter for float64. +func FloatValueFormatter(v interface{}) string { + return FloatValueFormatterWithFormat(v, DefaultFloatFormat) +} + +// PercentValueFormatter is a formatter for percent values. +// NOTE: it normalizes the values, i.e. multiplies by 100.0. +func PercentValueFormatter(v interface{}) string { + if typed, isTyped := v.(float64); isTyped { + return FloatValueFormatterWithFormat(typed*100.0, DefaultPercentValueFormat) + } + return "" +} + +// FloatValueFormatterWithFormat is a ValueFormatter for float64 with a given format. +func FloatValueFormatterWithFormat(v interface{}, floatFormat string) string { + if typed, isTyped := v.(int); isTyped { + return fmt.Sprintf(floatFormat, float64(typed)) + } + if typed, isTyped := v.(int64); isTyped { + return fmt.Sprintf(floatFormat, float64(typed)) + } + if typed, isTyped := v.(float32); isTyped { + return fmt.Sprintf(floatFormat, typed) + } + if typed, isTyped := v.(float64); isTyped { + return fmt.Sprintf(floatFormat, typed) + } + return "" +} + +// KValueFormatter is a formatter for K values. +func KValueFormatter(k float64, vf ValueFormatter) ValueFormatter { + return func(v interface{}) string { + return fmt.Sprintf("%0.0fσ %s", k, vf(v)) + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter_provider.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter_provider.go new file mode 100644 index 00000000..829fb1db --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_formatter_provider.go @@ -0,0 +1,6 @@ +package chart + +// ValueFormatterProvider is a series that has custom formatters. +type ValueFormatterProvider interface { + GetValueFormatters() (x, y ValueFormatter) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_provider.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_provider.go new file mode 100644 index 00000000..be985eb6 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/value_provider.go @@ -0,0 +1,51 @@ +package chart + +import "github.com/wcharczuk/go-chart/v2/drawing" + +// ValuesProvider is a type that produces values. +type ValuesProvider interface { + Len() int + GetValues(index int) (float64, float64) +} + +// BoundedValuesProvider allows series to return a range. +type BoundedValuesProvider interface { + Len() int + GetBoundedValues(index int) (x, y1, y2 float64) +} + +// FirstValuesProvider is a special type of value provider that can return it's (potentially computed) first value. +type FirstValuesProvider interface { + GetFirstValues() (x, y float64) +} + +// LastValuesProvider is a special type of value provider that can return it's (potentially computed) last value. +type LastValuesProvider interface { + GetLastValues() (x, y float64) +} + +// BoundedLastValuesProvider is a special type of value provider that can return it's (potentially computed) bounded last value. +type BoundedLastValuesProvider interface { + GetBoundedLastValues() (x, y1, y2 float64) +} + +// FullValuesProvider is an interface that combines `ValuesProvider` and `LastValuesProvider` +type FullValuesProvider interface { + ValuesProvider + LastValuesProvider +} + +// FullBoundedValuesProvider is an interface that combines `BoundedValuesProvider` and `BoundedLastValuesProvider` +type FullBoundedValuesProvider interface { + BoundedValuesProvider + BoundedLastValuesProvider +} + +// SizeProvider is a provider for integer size. +type SizeProvider func(xrange, yrange Range, index int, x, y float64) float64 + +// ColorProvider is a general provider for color ranges based on values. +type ColorProvider func(v, vmin, vmax float64) drawing.Color + +// DotColorProvider is a provider for dot color. +type DotColorProvider func(xrange, yrange Range, index int, x, y float64) drawing.Color diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/vector_renderer.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/vector_renderer.go new file mode 100644 index 00000000..eb2fc831 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/vector_renderer.go @@ -0,0 +1,365 @@ +package chart + +import ( + "bytes" + "fmt" + "io" + "math" + "strings" + + "golang.org/x/image/font" + + "github.com/golang/freetype/truetype" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +// SVG returns a new png/raster renderer. +func SVG(width, height int) (Renderer, error) { + buffer := bytes.NewBuffer([]byte{}) + canvas := newCanvas(buffer) + canvas.Start(width, height) + return &vectorRenderer{ + b: buffer, + c: canvas, + s: &Style{}, + p: []string{}, + dpi: DefaultDPI, + }, nil +} + +// SVGWithCSS returns a new png/raster renderer with attached custom CSS +// The optional nonce argument sets a CSP nonce. +func SVGWithCSS(css string, nonce string) func(width, height int) (Renderer, error) { + return func(width, height int) (Renderer, error) { + buffer := bytes.NewBuffer([]byte{}) + canvas := newCanvas(buffer) + canvas.css = css + canvas.nonce = nonce + canvas.Start(width, height) + return &vectorRenderer{ + b: buffer, + c: canvas, + s: &Style{}, + p: []string{}, + dpi: DefaultDPI, + }, nil + } +} + +// vectorRenderer renders chart commands to a bitmap. +type vectorRenderer struct { + dpi float64 + b *bytes.Buffer + c *canvas + s *Style + p []string + fc *font.Drawer +} + +func (vr *vectorRenderer) ResetStyle() { + vr.s = &Style{Font: vr.s.Font} + vr.fc = nil +} + +// GetDPI returns the dpi. +func (vr *vectorRenderer) GetDPI() float64 { + return vr.dpi +} + +// SetDPI implements the interface method. +func (vr *vectorRenderer) SetDPI(dpi float64) { + vr.dpi = dpi + vr.c.dpi = dpi +} + +// SetClassName implements the interface method. +func (vr *vectorRenderer) SetClassName(classname string) { + vr.s.ClassName = classname +} + +// SetStrokeColor implements the interface method. +func (vr *vectorRenderer) SetStrokeColor(c drawing.Color) { + vr.s.StrokeColor = c +} + +// SetFillColor implements the interface method. +func (vr *vectorRenderer) SetFillColor(c drawing.Color) { + vr.s.FillColor = c +} + +// SetLineWidth implements the interface method. +func (vr *vectorRenderer) SetStrokeWidth(width float64) { + vr.s.StrokeWidth = width +} + +// StrokeDashArray sets the stroke dash array. +func (vr *vectorRenderer) SetStrokeDashArray(dashArray []float64) { + vr.s.StrokeDashArray = dashArray +} + +// MoveTo implements the interface method. +func (vr *vectorRenderer) MoveTo(x, y int) { + vr.p = append(vr.p, fmt.Sprintf("M %d %d", x, y)) +} + +// LineTo implements the interface method. +func (vr *vectorRenderer) LineTo(x, y int) { + vr.p = append(vr.p, fmt.Sprintf("L %d %d", x, y)) +} + +// QuadCurveTo draws a quad curve. +func (vr *vectorRenderer) QuadCurveTo(cx, cy, x, y int) { + vr.p = append(vr.p, fmt.Sprintf("Q%d,%d %d,%d", cx, cy, x, y)) +} + +func (vr *vectorRenderer) ArcTo(cx, cy int, rx, ry, startAngle, delta float64) { + startAngle = RadianAdd(startAngle, _pi2) + endAngle := RadianAdd(startAngle, delta) + + startx := cx + int(rx*math.Sin(startAngle)) + starty := cy - int(ry*math.Cos(startAngle)) + + if len(vr.p) > 0 { + vr.p = append(vr.p, fmt.Sprintf("L %d %d", startx, starty)) + } else { + vr.p = append(vr.p, fmt.Sprintf("M %d %d", startx, starty)) + } + + endx := cx + int(rx*math.Sin(endAngle)) + endy := cy - int(ry*math.Cos(endAngle)) + + dd := RadiansToDegrees(delta) + + largeArcFlag := 0 + if delta > _pi { + largeArcFlag = 1 + } + + vr.p = append(vr.p, fmt.Sprintf("A %d %d %0.2f %d 1 %d %d", int(rx), int(ry), dd, largeArcFlag, endx, endy)) +} + +// Close closes a shape. +func (vr *vectorRenderer) Close() { + vr.p = append(vr.p, fmt.Sprintf("Z")) +} + +// Stroke draws the path with no fill. +func (vr *vectorRenderer) Stroke() { + vr.drawPath(vr.s.GetStrokeOptions()) +} + +// Fill draws the path with no stroke. +func (vr *vectorRenderer) Fill() { + vr.drawPath(vr.s.GetFillOptions()) +} + +// FillStroke draws the path with both fill and stroke. +func (vr *vectorRenderer) FillStroke() { + vr.drawPath(vr.s.GetFillAndStrokeOptions()) +} + +// drawPath draws a path. +func (vr *vectorRenderer) drawPath(s Style) { + vr.c.Path(strings.Join(vr.p, "\n"), vr.s.GetFillAndStrokeOptions()) + vr.p = []string{} // clear the path +} + +// Circle implements the interface method. +func (vr *vectorRenderer) Circle(radius float64, x, y int) { + vr.c.Circle(x, y, int(radius), vr.s.GetFillAndStrokeOptions()) +} + +// SetFont implements the interface method. +func (vr *vectorRenderer) SetFont(f *truetype.Font) { + vr.s.Font = f +} + +// SetFontColor implements the interface method. +func (vr *vectorRenderer) SetFontColor(c drawing.Color) { + vr.s.FontColor = c +} + +// SetFontSize implements the interface method. +func (vr *vectorRenderer) SetFontSize(size float64) { + vr.s.FontSize = size +} + +// Text draws a text blob. +func (vr *vectorRenderer) Text(body string, x, y int) { + vr.c.Text(x, y, body, vr.s.GetTextOptions()) +} + +// MeasureText uses the truetype font drawer to measure the width of text. +func (vr *vectorRenderer) MeasureText(body string) (box Box) { + if vr.s.GetFont() != nil { + vr.fc = &font.Drawer{ + Face: truetype.NewFace(vr.s.GetFont(), &truetype.Options{ + DPI: vr.dpi, + Size: vr.s.FontSize, + }), + } + w := vr.fc.MeasureString(body).Ceil() + + box.Right = w + box.Bottom = int(drawing.PointsToPixels(vr.dpi, vr.s.FontSize)) + if vr.c.textTheta == nil { + return + } + box = box.Corners().Rotate(RadiansToDegrees(*vr.c.textTheta)).Box() + } + return +} + +// SetTextRotation sets the text rotation. +func (vr *vectorRenderer) SetTextRotation(radians float64) { + vr.c.textTheta = &radians +} + +// ClearTextRotation clears the text rotation. +func (vr *vectorRenderer) ClearTextRotation() { + vr.c.textTheta = nil +} + +// Save saves the renderer's contents to a writer. +func (vr *vectorRenderer) Save(w io.Writer) error { + vr.c.End() + _, err := w.Write(vr.b.Bytes()) + return err +} + +func newCanvas(w io.Writer) *canvas { + return &canvas{ + w: w, + dpi: DefaultDPI, + } +} + +type canvas struct { + w io.Writer + dpi float64 + textTheta *float64 + width int + height int + css string + nonce string +} + +func (c *canvas) Start(width, height int) { + c.width = width + c.height = height + c.w.Write([]byte(fmt.Sprintf(`\n`, c.width, c.height))) + if c.css != "" { + c.w.Write([]byte(``, c.css))) + } +} + +func (c *canvas) Path(d string, style Style) { + var strokeDashArrayProperty string + if len(style.StrokeDashArray) > 0 { + strokeDashArrayProperty = c.getStrokeDashArray(style) + } + c.w.Write([]byte(fmt.Sprintf(``, strokeDashArrayProperty, d, c.styleAsSVG(style)))) +} + +func (c *canvas) Text(x, y int, body string, style Style) { + if c.textTheta == nil { + c.w.Write([]byte(fmt.Sprintf(`%s`, x, y, c.styleAsSVG(style), body))) + } else { + transform := fmt.Sprintf(` transform="rotate(%0.2f,%d,%d)"`, RadiansToDegrees(*c.textTheta), x, y) + c.w.Write([]byte(fmt.Sprintf(`%s`, x, y, c.styleAsSVG(style), transform, body))) + } +} + +func (c *canvas) Circle(x, y, r int, style Style) { + c.w.Write([]byte(fmt.Sprintf(``, x, y, r, c.styleAsSVG(style)))) +} + +func (c *canvas) End() { + c.w.Write([]byte("")) +} + +// getStrokeDashArray returns the stroke-dasharray property of a style. +func (c *canvas) getStrokeDashArray(s Style) string { + if len(s.StrokeDashArray) > 0 { + var values []string + for _, v := range s.StrokeDashArray { + values = append(values, fmt.Sprintf("%0.1f", v)) + } + return "stroke-dasharray=\"" + strings.Join(values, ", ") + "\"" + } + return "" +} + +// GetFontFace returns the font face for the style. +func (c *canvas) getFontFace(s Style) string { + family := "sans-serif" + if s.GetFont() != nil { + name := s.GetFont().Name(truetype.NameIDFontFamily) + if len(name) != 0 { + family = fmt.Sprintf(`'%s',%s`, name, family) + } + } + return fmt.Sprintf("font-family:%s", family) +} + +// styleAsSVG returns the style as a svg style or class string. +func (c *canvas) styleAsSVG(s Style) string { + sw := s.StrokeWidth + sc := s.StrokeColor + fc := s.FillColor + fs := s.FontSize + fnc := s.FontColor + + if s.ClassName != "" { + var classes []string + classes = append(classes, s.ClassName) + if !sc.IsZero() { + classes = append(classes, "stroke") + } + if !fc.IsZero() { + classes = append(classes, "fill") + } + if fs != 0 || s.Font != nil { + classes = append(classes, "text") + } + + return fmt.Sprintf("class=\"%s\"", strings.Join(classes, " ")) + } + + var pieces []string + + if sw != 0 { + pieces = append(pieces, "stroke-width:"+fmt.Sprintf("%d", int(sw))) + } else { + pieces = append(pieces, "stroke-width:0") + } + + if !sc.IsZero() { + pieces = append(pieces, "stroke:"+sc.String()) + } else { + pieces = append(pieces, "stroke:none") + } + + if !fnc.IsZero() { + pieces = append(pieces, "fill:"+fnc.String()) + } else if !fc.IsZero() { + pieces = append(pieces, "fill:"+fc.String()) + } else { + pieces = append(pieces, "fill:none") + } + + if fs != 0 { + pieces = append(pieces, "font-size:"+fmt.Sprintf("%.1fpx", drawing.PointsToPixels(c.dpi, fs))) + } + + if s.Font != nil { + pieces = append(pieces, c.getFontFace(s)) + } + return fmt.Sprintf("style=\"%s\"", strings.Join(pieces, ";")) +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/viridis.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/viridis.go new file mode 100644 index 00000000..42343190 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/viridis.go @@ -0,0 +1,269 @@ +package chart + +import "github.com/wcharczuk/go-chart/v2/drawing" + +var viridisColors = [256]drawing.Color{ + drawing.Color{R: 0x44, G: 0x1, B: 0x54, A: 0xff}, + drawing.Color{R: 0x44, G: 0x2, B: 0x55, A: 0xff}, + drawing.Color{R: 0x45, G: 0x3, B: 0x57, A: 0xff}, + drawing.Color{R: 0x45, G: 0x5, B: 0x58, A: 0xff}, + drawing.Color{R: 0x45, G: 0x6, B: 0x5a, A: 0xff}, + drawing.Color{R: 0x46, G: 0x8, B: 0x5b, A: 0xff}, + drawing.Color{R: 0x46, G: 0x9, B: 0x5d, A: 0xff}, + drawing.Color{R: 0x46, G: 0xb, B: 0x5e, A: 0xff}, + drawing.Color{R: 0x46, G: 0xc, B: 0x60, A: 0xff}, + drawing.Color{R: 0x47, G: 0xe, B: 0x61, A: 0xff}, + drawing.Color{R: 0x47, G: 0xf, B: 0x62, A: 0xff}, + drawing.Color{R: 0x47, G: 0x11, B: 0x64, A: 0xff}, + drawing.Color{R: 0x47, G: 0x12, B: 0x65, A: 0xff}, + drawing.Color{R: 0x47, G: 0x14, B: 0x66, A: 0xff}, + drawing.Color{R: 0x48, G: 0x15, B: 0x68, A: 0xff}, + drawing.Color{R: 0x48, G: 0x16, B: 0x69, A: 0xff}, + drawing.Color{R: 0x48, G: 0x18, B: 0x6a, A: 0xff}, + drawing.Color{R: 0x48, G: 0x19, B: 0x6c, A: 0xff}, + drawing.Color{R: 0x48, G: 0x1a, B: 0x6d, A: 0xff}, + drawing.Color{R: 0x48, G: 0x1c, B: 0x6e, A: 0xff}, + drawing.Color{R: 0x48, G: 0x1d, B: 0x6f, A: 0xff}, + drawing.Color{R: 0x48, G: 0x1e, B: 0x70, A: 0xff}, + drawing.Color{R: 0x48, G: 0x20, B: 0x71, A: 0xff}, + drawing.Color{R: 0x48, G: 0x21, B: 0x73, A: 0xff}, + drawing.Color{R: 0x48, G: 0x22, B: 0x74, A: 0xff}, + drawing.Color{R: 0x48, G: 0x24, B: 0x75, A: 0xff}, + drawing.Color{R: 0x48, G: 0x25, B: 0x76, A: 0xff}, + drawing.Color{R: 0x48, G: 0x26, B: 0x77, A: 0xff}, + drawing.Color{R: 0x48, G: 0x27, B: 0x78, A: 0xff}, + drawing.Color{R: 0x47, G: 0x29, B: 0x79, A: 0xff}, + drawing.Color{R: 0x47, G: 0x2a, B: 0x79, A: 0xff}, + drawing.Color{R: 0x47, G: 0x2b, B: 0x7a, A: 0xff}, + drawing.Color{R: 0x47, G: 0x2c, B: 0x7b, A: 0xff}, + drawing.Color{R: 0x47, G: 0x2e, B: 0x7c, A: 0xff}, + drawing.Color{R: 0x46, G: 0x2f, B: 0x7d, A: 0xff}, + drawing.Color{R: 0x46, G: 0x30, B: 0x7e, A: 0xff}, + drawing.Color{R: 0x46, G: 0x31, B: 0x7e, A: 0xff}, + drawing.Color{R: 0x46, G: 0x33, B: 0x7f, A: 0xff}, + drawing.Color{R: 0x45, G: 0x34, B: 0x80, A: 0xff}, + drawing.Color{R: 0x45, G: 0x35, B: 0x81, A: 0xff}, + drawing.Color{R: 0x45, G: 0x36, B: 0x81, A: 0xff}, + drawing.Color{R: 0x44, G: 0x38, B: 0x82, A: 0xff}, + drawing.Color{R: 0x44, G: 0x39, B: 0x83, A: 0xff}, + drawing.Color{R: 0x44, G: 0x3a, B: 0x83, A: 0xff}, + drawing.Color{R: 0x43, G: 0x3b, B: 0x84, A: 0xff}, + drawing.Color{R: 0x43, G: 0x3c, B: 0x84, A: 0xff}, + drawing.Color{R: 0x43, G: 0x3e, B: 0x85, A: 0xff}, + drawing.Color{R: 0x42, G: 0x3f, B: 0x85, A: 0xff}, + drawing.Color{R: 0x42, G: 0x40, B: 0x86, A: 0xff}, + drawing.Color{R: 0x41, G: 0x41, B: 0x86, A: 0xff}, + drawing.Color{R: 0x41, G: 0x42, B: 0x87, A: 0xff}, + drawing.Color{R: 0x41, G: 0x43, B: 0x87, A: 0xff}, + drawing.Color{R: 0x40, G: 0x45, B: 0x88, A: 0xff}, + drawing.Color{R: 0x40, G: 0x46, B: 0x88, A: 0xff}, + drawing.Color{R: 0x3f, G: 0x47, B: 0x88, A: 0xff}, + drawing.Color{R: 0x3f, G: 0x48, B: 0x89, A: 0xff}, + drawing.Color{R: 0x3e, G: 0x49, B: 0x89, A: 0xff}, + drawing.Color{R: 0x3e, G: 0x4a, B: 0x89, A: 0xff}, + drawing.Color{R: 0x3d, G: 0x4b, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x3d, G: 0x4d, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x3c, G: 0x4e, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x3c, G: 0x4f, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x3b, G: 0x50, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x3b, G: 0x51, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x3a, G: 0x52, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x3a, G: 0x53, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x39, G: 0x54, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x39, G: 0x55, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x38, G: 0x56, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x38, G: 0x57, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x37, G: 0x58, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x37, G: 0x59, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x36, G: 0x5b, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x36, G: 0x5c, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x35, G: 0x5d, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x35, G: 0x5e, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x34, G: 0x5f, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x34, G: 0x60, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x33, G: 0x61, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x33, G: 0x62, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x33, G: 0x63, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x32, G: 0x64, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x32, G: 0x65, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x31, G: 0x66, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x31, G: 0x67, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x30, G: 0x68, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x30, G: 0x69, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2f, G: 0x6a, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2f, G: 0x6b, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2f, G: 0x6c, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2e, G: 0x6d, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2e, G: 0x6e, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2d, G: 0x6f, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2d, G: 0x70, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2d, G: 0x70, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2c, G: 0x71, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2c, G: 0x72, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2b, G: 0x73, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2b, G: 0x74, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2b, G: 0x75, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2a, G: 0x76, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x2a, G: 0x77, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x29, G: 0x78, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x29, G: 0x79, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x29, G: 0x7a, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x28, G: 0x7b, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x28, G: 0x7c, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x28, G: 0x7d, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x27, G: 0x7e, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x27, G: 0x7f, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x26, G: 0x80, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x26, G: 0x81, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x26, G: 0x82, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x25, G: 0x83, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x25, G: 0x83, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x25, G: 0x84, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x24, G: 0x85, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x24, G: 0x86, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x23, G: 0x87, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x23, G: 0x88, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x23, G: 0x89, B: 0x8e, A: 0xff}, + drawing.Color{R: 0x22, G: 0x8a, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x22, G: 0x8b, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x22, G: 0x8c, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x21, G: 0x8d, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x21, G: 0x8e, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x21, G: 0x8f, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x20, G: 0x90, B: 0x8d, A: 0xff}, + drawing.Color{R: 0x20, G: 0x91, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x20, G: 0x92, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x20, G: 0x93, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x1f, G: 0x93, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x1f, G: 0x94, B: 0x8c, A: 0xff}, + drawing.Color{R: 0x1f, G: 0x95, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x1f, G: 0x96, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x1f, G: 0x97, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x98, B: 0x8b, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x99, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9a, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9b, B: 0x8a, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9c, B: 0x89, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9d, B: 0x89, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9e, B: 0x89, A: 0xff}, + drawing.Color{R: 0x1e, G: 0x9f, B: 0x88, A: 0xff}, + drawing.Color{R: 0x1e, G: 0xa0, B: 0x88, A: 0xff}, + drawing.Color{R: 0x1f, G: 0xa1, B: 0x88, A: 0xff}, + drawing.Color{R: 0x1f, G: 0xa2, B: 0x87, A: 0xff}, + drawing.Color{R: 0x1f, G: 0xa3, B: 0x87, A: 0xff}, + drawing.Color{R: 0x1f, G: 0xa3, B: 0x86, A: 0xff}, + drawing.Color{R: 0x20, G: 0xa4, B: 0x86, A: 0xff}, + drawing.Color{R: 0x20, G: 0xa5, B: 0x86, A: 0xff}, + drawing.Color{R: 0x21, G: 0xa6, B: 0x85, A: 0xff}, + drawing.Color{R: 0x21, G: 0xa7, B: 0x85, A: 0xff}, + drawing.Color{R: 0x22, G: 0xa8, B: 0x84, A: 0xff}, + drawing.Color{R: 0x23, G: 0xa9, B: 0x83, A: 0xff}, + drawing.Color{R: 0x23, G: 0xaa, B: 0x83, A: 0xff}, + drawing.Color{R: 0x24, G: 0xab, B: 0x82, A: 0xff}, + drawing.Color{R: 0x25, G: 0xac, B: 0x82, A: 0xff}, + drawing.Color{R: 0x26, G: 0xad, B: 0x81, A: 0xff}, + drawing.Color{R: 0x27, G: 0xae, B: 0x81, A: 0xff}, + drawing.Color{R: 0x28, G: 0xaf, B: 0x80, A: 0xff}, + drawing.Color{R: 0x29, G: 0xaf, B: 0x7f, A: 0xff}, + drawing.Color{R: 0x2a, G: 0xb0, B: 0x7f, A: 0xff}, + drawing.Color{R: 0x2b, G: 0xb1, B: 0x7e, A: 0xff}, + drawing.Color{R: 0x2c, G: 0xb2, B: 0x7d, A: 0xff}, + drawing.Color{R: 0x2e, G: 0xb3, B: 0x7c, A: 0xff}, + drawing.Color{R: 0x2f, G: 0xb4, B: 0x7c, A: 0xff}, + drawing.Color{R: 0x30, G: 0xb5, B: 0x7b, A: 0xff}, + drawing.Color{R: 0x32, G: 0xb6, B: 0x7a, A: 0xff}, + drawing.Color{R: 0x33, G: 0xb7, B: 0x79, A: 0xff}, + drawing.Color{R: 0x35, G: 0xb7, B: 0x79, A: 0xff}, + drawing.Color{R: 0x36, G: 0xb8, B: 0x78, A: 0xff}, + drawing.Color{R: 0x38, G: 0xb9, B: 0x77, A: 0xff}, + drawing.Color{R: 0x39, G: 0xba, B: 0x76, A: 0xff}, + drawing.Color{R: 0x3b, G: 0xbb, B: 0x75, A: 0xff}, + drawing.Color{R: 0x3d, G: 0xbc, B: 0x74, A: 0xff}, + drawing.Color{R: 0x3e, G: 0xbd, B: 0x73, A: 0xff}, + drawing.Color{R: 0x40, G: 0xbe, B: 0x72, A: 0xff}, + drawing.Color{R: 0x42, G: 0xbe, B: 0x71, A: 0xff}, + drawing.Color{R: 0x44, G: 0xbf, B: 0x70, A: 0xff}, + drawing.Color{R: 0x46, G: 0xc0, B: 0x6f, A: 0xff}, + drawing.Color{R: 0x48, G: 0xc1, B: 0x6e, A: 0xff}, + drawing.Color{R: 0x49, G: 0xc2, B: 0x6d, A: 0xff}, + drawing.Color{R: 0x4b, G: 0xc2, B: 0x6c, A: 0xff}, + drawing.Color{R: 0x4d, G: 0xc3, B: 0x6b, A: 0xff}, + drawing.Color{R: 0x4f, G: 0xc4, B: 0x6a, A: 0xff}, + drawing.Color{R: 0x51, G: 0xc5, B: 0x69, A: 0xff}, + drawing.Color{R: 0x53, G: 0xc6, B: 0x68, A: 0xff}, + drawing.Color{R: 0x55, G: 0xc6, B: 0x66, A: 0xff}, + drawing.Color{R: 0x58, G: 0xc7, B: 0x65, A: 0xff}, + drawing.Color{R: 0x5a, G: 0xc8, B: 0x64, A: 0xff}, + drawing.Color{R: 0x5c, G: 0xc9, B: 0x63, A: 0xff}, + drawing.Color{R: 0x5e, G: 0xc9, B: 0x62, A: 0xff}, + drawing.Color{R: 0x60, G: 0xca, B: 0x60, A: 0xff}, + drawing.Color{R: 0x62, G: 0xcb, B: 0x5f, A: 0xff}, + drawing.Color{R: 0x65, G: 0xcc, B: 0x5e, A: 0xff}, + drawing.Color{R: 0x67, G: 0xcc, B: 0x5c, A: 0xff}, + drawing.Color{R: 0x69, G: 0xcd, B: 0x5b, A: 0xff}, + drawing.Color{R: 0x6c, G: 0xce, B: 0x5a, A: 0xff}, + drawing.Color{R: 0x6e, G: 0xce, B: 0x58, A: 0xff}, + drawing.Color{R: 0x70, G: 0xcf, B: 0x57, A: 0xff}, + drawing.Color{R: 0x73, G: 0xd0, B: 0x55, A: 0xff}, + drawing.Color{R: 0x75, G: 0xd0, B: 0x54, A: 0xff}, + drawing.Color{R: 0x77, G: 0xd1, B: 0x52, A: 0xff}, + drawing.Color{R: 0x7a, G: 0xd2, B: 0x51, A: 0xff}, + drawing.Color{R: 0x7c, G: 0xd2, B: 0x4f, A: 0xff}, + drawing.Color{R: 0x7f, G: 0xd3, B: 0x4e, A: 0xff}, + drawing.Color{R: 0x81, G: 0xd4, B: 0x4c, A: 0xff}, + drawing.Color{R: 0x84, G: 0xd4, B: 0x4b, A: 0xff}, + drawing.Color{R: 0x86, G: 0xd5, B: 0x49, A: 0xff}, + drawing.Color{R: 0x89, G: 0xd5, B: 0x48, A: 0xff}, + drawing.Color{R: 0x8b, G: 0xd6, B: 0x46, A: 0xff}, + drawing.Color{R: 0x8e, G: 0xd7, B: 0x44, A: 0xff}, + drawing.Color{R: 0x90, G: 0xd7, B: 0x43, A: 0xff}, + drawing.Color{R: 0x93, G: 0xd8, B: 0x41, A: 0xff}, + drawing.Color{R: 0x95, G: 0xd8, B: 0x3f, A: 0xff}, + drawing.Color{R: 0x98, G: 0xd9, B: 0x3e, A: 0xff}, + drawing.Color{R: 0x9b, G: 0xd9, B: 0x3c, A: 0xff}, + drawing.Color{R: 0x9d, G: 0xda, B: 0x3a, A: 0xff}, + drawing.Color{R: 0xa0, G: 0xda, B: 0x39, A: 0xff}, + drawing.Color{R: 0xa3, G: 0xdb, B: 0x37, A: 0xff}, + drawing.Color{R: 0xa5, G: 0xdb, B: 0x35, A: 0xff}, + drawing.Color{R: 0xa8, G: 0xdc, B: 0x33, A: 0xff}, + drawing.Color{R: 0xab, G: 0xdc, B: 0x32, A: 0xff}, + drawing.Color{R: 0xad, G: 0xdd, B: 0x30, A: 0xff}, + drawing.Color{R: 0xb0, G: 0xdd, B: 0x2e, A: 0xff}, + drawing.Color{R: 0xb3, G: 0xdd, B: 0x2d, A: 0xff}, + drawing.Color{R: 0xb5, G: 0xde, B: 0x2b, A: 0xff}, + drawing.Color{R: 0xb8, G: 0xde, B: 0x29, A: 0xff}, + drawing.Color{R: 0xbb, G: 0xdf, B: 0x27, A: 0xff}, + drawing.Color{R: 0xbd, G: 0xdf, B: 0x26, A: 0xff}, + drawing.Color{R: 0xc0, G: 0xdf, B: 0x24, A: 0xff}, + drawing.Color{R: 0xc3, G: 0xe0, B: 0x23, A: 0xff}, + drawing.Color{R: 0xc5, G: 0xe0, B: 0x21, A: 0xff}, + drawing.Color{R: 0xc8, G: 0xe1, B: 0x20, A: 0xff}, + drawing.Color{R: 0xcb, G: 0xe1, B: 0x1e, A: 0xff}, + drawing.Color{R: 0xcd, G: 0xe1, B: 0x1d, A: 0xff}, + drawing.Color{R: 0xd0, G: 0xe2, B: 0x1c, A: 0xff}, + drawing.Color{R: 0xd3, G: 0xe2, B: 0x1b, A: 0xff}, + drawing.Color{R: 0xd5, G: 0xe2, B: 0x1a, A: 0xff}, + drawing.Color{R: 0xd8, G: 0xe3, B: 0x19, A: 0xff}, + drawing.Color{R: 0xdb, G: 0xe3, B: 0x18, A: 0xff}, + drawing.Color{R: 0xdd, G: 0xe3, B: 0x18, A: 0xff}, + drawing.Color{R: 0xe0, G: 0xe4, B: 0x18, A: 0xff}, + drawing.Color{R: 0xe2, G: 0xe4, B: 0x18, A: 0xff}, + drawing.Color{R: 0xe5, G: 0xe4, B: 0x18, A: 0xff}, + drawing.Color{R: 0xe8, G: 0xe5, B: 0x19, A: 0xff}, + drawing.Color{R: 0xea, G: 0xe5, B: 0x19, A: 0xff}, + drawing.Color{R: 0xed, G: 0xe5, B: 0x1a, A: 0xff}, + drawing.Color{R: 0xef, G: 0xe6, B: 0x1b, A: 0xff}, + drawing.Color{R: 0xf2, G: 0xe6, B: 0x1c, A: 0xff}, + drawing.Color{R: 0xf4, G: 0xe6, B: 0x1e, A: 0xff}, + drawing.Color{R: 0xf7, G: 0xe6, B: 0x1f, A: 0xff}, + drawing.Color{R: 0xf9, G: 0xe7, B: 0x21, A: 0xff}, + drawing.Color{R: 0xfb, G: 0xe7, B: 0x23, A: 0xff}, + drawing.Color{R: 0xfe, G: 0xe7, B: 0x24, A: 0xff}, +} + +// Viridis creates a color map provider. +func Viridis(v, vmin, vmax float64) drawing.Color { + normalized := (v - vmin) / (vmax - vmin) + index := uint8(normalized * 255) + return viridisColors[index] +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/xaxis.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/xaxis.go new file mode 100644 index 00000000..4fcb569c --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/xaxis.go @@ -0,0 +1,208 @@ +package chart + +import ( + "math" +) + +// HideXAxis hides the x-axis. +func HideXAxis() XAxis { + return XAxis{ + Style: Hidden(), + } +} + +// XAxis represents the horizontal axis. +type XAxis struct { + Name string + NameStyle Style + + Style Style + ValueFormatter ValueFormatter + Range Range + + TickStyle Style + Ticks []Tick + TickPosition TickPosition + + GridLines []GridLine + GridMajorStyle Style + GridMinorStyle Style +} + +// GetName returns the name. +func (xa XAxis) GetName() string { + return xa.Name +} + +// GetStyle returns the style. +func (xa XAxis) GetStyle() Style { + return xa.Style +} + +// GetValueFormatter returns the value formatter for the axis. +func (xa XAxis) GetValueFormatter() ValueFormatter { + if xa.ValueFormatter != nil { + return xa.ValueFormatter + } + return FloatValueFormatter +} + +// GetTickPosition returns the tick position option for the axis. +func (xa XAxis) GetTickPosition(defaults ...TickPosition) TickPosition { + if xa.TickPosition == TickPositionUnset { + if len(defaults) > 0 { + return defaults[0] + } + return TickPositionUnderTick + } + return xa.TickPosition +} + +// GetTicks returns the ticks for a series. +// The coalesce priority is: +// - User Supplied Ticks (i.e. Ticks array on the axis itself). +// - Range ticks (i.e. if the range provides ticks). +// - Generating continuous ticks based on minimum spacing and canvas width. +func (xa XAxis) GetTicks(r Renderer, ra Range, defaults Style, vf ValueFormatter) []Tick { + if len(xa.Ticks) > 0 { + return xa.Ticks + } + if tp, isTickProvider := ra.(TicksProvider); isTickProvider { + return tp.GetTicks(r, defaults, vf) + } + tickStyle := xa.Style.InheritFrom(defaults) + return GenerateContinuousTicks(r, ra, false, tickStyle, vf) +} + +// GetGridLines returns the gridlines for the axis. +func (xa XAxis) GetGridLines(ticks []Tick) []GridLine { + if len(xa.GridLines) > 0 { + return xa.GridLines + } + return GenerateGridLines(ticks, xa.GridMajorStyle, xa.GridMinorStyle) +} + +// Measure returns the bounds of the axis. +func (xa XAxis) Measure(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) Box { + tickStyle := xa.TickStyle.InheritFrom(xa.Style.InheritFrom(defaults)) + + tp := xa.GetTickPosition() + + var ltx, rtx int + var tx, ty int + var left, right, bottom = math.MaxInt32, 0, 0 + for index, t := range ticks { + v := t.Value + tb := Draw.MeasureText(r, t.Label, tickStyle.GetTextOptions()) + + tx = canvasBox.Left + ra.Translate(v) + ty = canvasBox.Bottom + DefaultXAxisMargin + tb.Height() + switch tp { + case TickPositionUnderTick, TickPositionUnset: + ltx = tx - tb.Width()>>1 + rtx = tx + tb.Width()>>1 + break + case TickPositionBetweenTicks: + if index > 0 { + ltx = ra.Translate(ticks[index-1].Value) + rtx = tx + } + break + } + + left = MinInt(left, ltx) + right = MaxInt(right, rtx) + bottom = MaxInt(bottom, ty) + } + + if !xa.NameStyle.Hidden && len(xa.Name) > 0 { + tb := Draw.MeasureText(r, xa.Name, xa.NameStyle.InheritFrom(defaults)) + bottom += DefaultXAxisMargin + tb.Height() + } + + return Box{ + Top: canvasBox.Bottom, + Left: left, + Right: right, + Bottom: bottom, + } +} + +// Render renders the axis +func (xa XAxis) Render(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) { + tickStyle := xa.TickStyle.InheritFrom(xa.Style.InheritFrom(defaults)) + + tickStyle.GetStrokeOptions().WriteToRenderer(r) + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + tp := xa.GetTickPosition() + + var tx, ty int + var maxTextHeight int + for index, t := range ticks { + v := t.Value + lx := ra.Translate(v) + + tx = canvasBox.Left + lx + + tickStyle.GetStrokeOptions().WriteToRenderer(r) + r.MoveTo(tx, canvasBox.Bottom) + r.LineTo(tx, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + tickWithAxisStyle := xa.TickStyle.InheritFrom(xa.Style.InheritFrom(defaults)) + tb := Draw.MeasureText(r, t.Label, tickWithAxisStyle) + + switch tp { + case TickPositionUnderTick, TickPositionUnset: + if tickStyle.TextRotationDegrees == 0 { + tx = tx - tb.Width()>>1 + ty = canvasBox.Bottom + DefaultXAxisMargin + tb.Height() + } else { + ty = canvasBox.Bottom + (2 * DefaultXAxisMargin) + } + Draw.Text(r, t.Label, tx, ty, tickWithAxisStyle) + maxTextHeight = MaxInt(maxTextHeight, tb.Height()) + break + case TickPositionBetweenTicks: + if index > 0 { + llx := ra.Translate(ticks[index-1].Value) + ltx := canvasBox.Left + llx + finalTickStyle := tickWithAxisStyle.InheritFrom(Style{TextHorizontalAlign: TextHorizontalAlignCenter}) + + Draw.TextWithin(r, t.Label, Box{ + Left: ltx, + Right: tx, + Top: canvasBox.Bottom + DefaultXAxisMargin, + Bottom: canvasBox.Bottom + DefaultXAxisMargin, + }, finalTickStyle) + + ftb := Text.MeasureLines(r, Text.WrapFit(r, t.Label, tx-ltx, finalTickStyle), finalTickStyle) + maxTextHeight = MaxInt(maxTextHeight, ftb.Height()) + } + break + } + } + + nameStyle := xa.NameStyle.InheritFrom(defaults) + if !xa.NameStyle.Hidden && len(xa.Name) > 0 { + tb := Draw.MeasureText(r, xa.Name, nameStyle) + tx := canvasBox.Right - (canvasBox.Width()>>1 + tb.Width()>>1) + ty := canvasBox.Bottom + DefaultXAxisMargin + maxTextHeight + DefaultXAxisMargin + tb.Height() + Draw.Text(r, xa.Name, tx, ty, nameStyle) + } + + if !xa.GridMajorStyle.Hidden || !xa.GridMinorStyle.Hidden { + for _, gl := range xa.GetGridLines(ticks) { + if (gl.IsMinor && !xa.GridMinorStyle.Hidden) || (!gl.IsMinor && !xa.GridMajorStyle.Hidden) { + defaults := xa.GridMajorStyle + if gl.IsMinor { + defaults = xa.GridMinorStyle + } + gl.Render(r, canvasBox, ra, true, gl.Style.InheritFrom(defaults)) + } + } + } +} diff --git a/src/server/vendor/github.com/wcharczuk/go-chart/v2/yaxis.go b/src/server/vendor/github.com/wcharczuk/go-chart/v2/yaxis.go new file mode 100644 index 00000000..841fc862 --- /dev/null +++ b/src/server/vendor/github.com/wcharczuk/go-chart/v2/yaxis.go @@ -0,0 +1,234 @@ +package chart + +import ( + "math" +) + +// HideYAxis hides a y-axis. +func HideYAxis() YAxis { + return YAxis{ + Style: Hidden(), + } +} + +// YAxis is a veritcal rule of the range. +// There can be (2) y-axes; a primary and secondary. +type YAxis struct { + Name string + NameStyle Style + + Style Style + + Zero GridLine + + AxisType YAxisType + Ascending bool + + ValueFormatter ValueFormatter + Range Range + + TickStyle Style + Ticks []Tick + + GridLines []GridLine + GridMajorStyle Style + GridMinorStyle Style +} + +// GetName returns the name. +func (ya YAxis) GetName() string { + return ya.Name +} + +// GetNameStyle returns the name style. +func (ya YAxis) GetNameStyle() Style { + return ya.NameStyle +} + +// GetStyle returns the style. +func (ya YAxis) GetStyle() Style { + return ya.Style +} + +// GetValueFormatter returns the value formatter for the axis. +func (ya YAxis) GetValueFormatter() ValueFormatter { + if ya.ValueFormatter != nil { + return ya.ValueFormatter + } + return FloatValueFormatter +} + +// GetTickStyle returns the tick style. +func (ya YAxis) GetTickStyle() Style { + return ya.TickStyle +} + +// GetTicks returns the ticks for a series. +// The coalesce priority is: +// - User Supplied Ticks (i.e. Ticks array on the axis itself). +// - Range ticks (i.e. if the range provides ticks). +// - Generating continuous ticks based on minimum spacing and canvas width. +func (ya YAxis) GetTicks(r Renderer, ra Range, defaults Style, vf ValueFormatter) []Tick { + if len(ya.Ticks) > 0 { + return ya.Ticks + } + if tp, isTickProvider := ra.(TicksProvider); isTickProvider { + return tp.GetTicks(r, defaults, vf) + } + tickStyle := ya.Style.InheritFrom(defaults) + return GenerateContinuousTicks(r, ra, true, tickStyle, vf) +} + +// GetGridLines returns the gridlines for the axis. +func (ya YAxis) GetGridLines(ticks []Tick) []GridLine { + if len(ya.GridLines) > 0 { + return ya.GridLines + } + return GenerateGridLines(ticks, ya.GridMajorStyle, ya.GridMinorStyle) +} + +// Measure returns the bounds of the axis. +func (ya YAxis) Measure(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) Box { + var tx int + if ya.AxisType == YAxisPrimary { + tx = canvasBox.Right + DefaultYAxisMargin + } else if ya.AxisType == YAxisSecondary { + tx = canvasBox.Left - DefaultYAxisMargin + } + + ya.TickStyle.InheritFrom(ya.Style.InheritFrom(defaults)).WriteToRenderer(r) + var minx, maxx, miny, maxy = math.MaxInt32, 0, math.MaxInt32, 0 + var maxTextHeight int + for _, t := range ticks { + v := t.Value + ly := canvasBox.Bottom - ra.Translate(v) + + tb := r.MeasureText(t.Label) + tbh2 := tb.Height() >> 1 + finalTextX := tx + if ya.AxisType == YAxisSecondary { + finalTextX = tx - tb.Width() + } + + maxTextHeight = MaxInt(tb.Height(), maxTextHeight) + + if ya.AxisType == YAxisPrimary { + minx = canvasBox.Right + maxx = MaxInt(maxx, tx+tb.Width()) + } else if ya.AxisType == YAxisSecondary { + minx = MinInt(minx, finalTextX) + maxx = MaxInt(maxx, tx) + } + + miny = MinInt(miny, ly-tbh2) + maxy = MaxInt(maxy, ly+tbh2) + } + + if !ya.NameStyle.Hidden && len(ya.Name) > 0 { + maxx += (DefaultYAxisMargin + maxTextHeight) + } + + return Box{ + Top: miny, + Left: minx, + Right: maxx, + Bottom: maxy, + } +} + +// Render renders the axis. +func (ya YAxis) Render(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) { + tickStyle := ya.TickStyle.InheritFrom(ya.Style.InheritFrom(defaults)) + tickStyle.WriteToRenderer(r) + + sw := tickStyle.GetStrokeWidth(defaults.StrokeWidth) + + var lx int + var tx int + if ya.AxisType == YAxisPrimary { + lx = canvasBox.Right + int(sw) + tx = lx + DefaultYAxisMargin + } else if ya.AxisType == YAxisSecondary { + lx = canvasBox.Left - int(sw) + tx = lx - DefaultYAxisMargin + } + + r.MoveTo(lx, canvasBox.Bottom) + r.LineTo(lx, canvasBox.Top) + r.Stroke() + + var maxTextWidth int + var finalTextX, finalTextY int + for _, t := range ticks { + v := t.Value + ly := canvasBox.Bottom - ra.Translate(v) + + tb := Draw.MeasureText(r, t.Label, tickStyle) + + if tb.Width() > maxTextWidth { + maxTextWidth = tb.Width() + } + + if ya.AxisType == YAxisSecondary { + finalTextX = tx - tb.Width() + } else { + finalTextX = tx + } + + if tickStyle.TextRotationDegrees == 0 { + finalTextY = ly + tb.Height()>>1 + } else { + finalTextY = ly + } + + tickStyle.WriteToRenderer(r) + + r.MoveTo(lx, ly) + if ya.AxisType == YAxisPrimary { + r.LineTo(lx+DefaultHorizontalTickWidth, ly) + } else if ya.AxisType == YAxisSecondary { + r.LineTo(lx-DefaultHorizontalTickWidth, ly) + } + r.Stroke() + + Draw.Text(r, t.Label, finalTextX, finalTextY, tickStyle) + } + + nameStyle := ya.NameStyle.InheritFrom(defaults.InheritFrom(Style{TextRotationDegrees: 90})) + if !ya.NameStyle.Hidden && len(ya.Name) > 0 { + nameStyle.GetTextOptions().WriteToRenderer(r) + tb := Draw.MeasureText(r, ya.Name, nameStyle) + + var tx int + if ya.AxisType == YAxisPrimary { + tx = canvasBox.Right + int(sw) + DefaultYAxisMargin + maxTextWidth + DefaultYAxisMargin + } else if ya.AxisType == YAxisSecondary { + tx = canvasBox.Left - (DefaultYAxisMargin + int(sw) + maxTextWidth + DefaultYAxisMargin) + } + + var ty int + if nameStyle.TextRotationDegrees == 0 { + ty = canvasBox.Top + (canvasBox.Height()>>1 - tb.Width()>>1) + } else { + ty = canvasBox.Top + (canvasBox.Height()>>1 - tb.Height()>>1) + } + + Draw.Text(r, ya.Name, tx, ty, nameStyle) + } + + if !ya.Zero.Style.Hidden { + ya.Zero.Render(r, canvasBox, ra, false, Style{}) + } + + if !ya.GridMajorStyle.Hidden || !ya.GridMinorStyle.Hidden { + for _, gl := range ya.GetGridLines(ticks) { + if (gl.IsMinor && !ya.GridMinorStyle.Hidden) || (!gl.IsMinor && !ya.GridMajorStyle.Hidden) { + defaults := ya.GridMajorStyle + if gl.IsMinor { + defaults = ya.GridMinorStyle + } + gl.Render(r, canvasBox, ra, false, gl.Style.InheritFrom(defaults)) + } + } + } +} diff --git a/src/server/vendor/golang.org/x/image/AUTHORS b/src/server/vendor/golang.org/x/image/AUTHORS new file mode 100644 index 00000000..15167cd7 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/src/server/vendor/golang.org/x/image/CONTRIBUTORS b/src/server/vendor/golang.org/x/image/CONTRIBUTORS new file mode 100644 index 00000000..1c4577e9 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/src/server/vendor/golang.org/x/image/LICENSE b/src/server/vendor/golang.org/x/image/LICENSE new file mode 100644 index 00000000..6a66aea5 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. 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. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER 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/src/server/vendor/golang.org/x/image/PATENTS b/src/server/vendor/golang.org/x/image/PATENTS new file mode 100644 index 00000000..73309904 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google 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, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/src/server/vendor/golang.org/x/image/draw/draw.go b/src/server/vendor/golang.org/x/image/draw/draw.go new file mode 100644 index 00000000..cd5aaba6 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/draw/draw.go @@ -0,0 +1,61 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package draw provides image composition functions. +// +// See "The Go image/draw package" for an introduction to this package: +// http://golang.org/doc/articles/image_draw.html +// +// This package is a superset of and a drop-in replacement for the image/draw +// package in the standard library. +package draw + +// This file just contains the API exported by the image/draw package in the +// standard library. Other files in this package provide additional features. + +import ( + "image" + "image/draw" +) + +// Draw calls DrawMask with a nil mask. +func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op) { + draw.Draw(dst, r, src, sp, draw.Op(op)) +} + +// DrawMask aligns r.Min in dst with sp in src and mp in mask and then +// replaces the rectangle r in dst with the result of a Porter-Duff +// composition. A nil mask is treated as opaque. +func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op) { + draw.DrawMask(dst, r, src, sp, mask, mp, draw.Op(op)) +} + +// Drawer contains the Draw method. +type Drawer = draw.Drawer + +// FloydSteinberg is a Drawer that is the Src Op with Floyd-Steinberg error +// diffusion. +var FloydSteinberg Drawer = floydSteinberg{} + +type floydSteinberg struct{} + +func (floydSteinberg) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) { + draw.FloydSteinberg.Draw(dst, r, src, sp) +} + +// Image is an image.Image with a Set method to change a single pixel. +type Image = draw.Image + +// Op is a Porter-Duff compositing operator. +type Op = draw.Op + +const ( + // Over specifies ``(src in mask) over dst''. + Over Op = draw.Over + // Src specifies ``src in mask''. + Src Op = draw.Src +) + +// Quantizer produces a palette for an image. +type Quantizer = draw.Quantizer diff --git a/src/server/vendor/golang.org/x/image/draw/impl.go b/src/server/vendor/golang.org/x/image/draw/impl.go new file mode 100644 index 00000000..75498adb --- /dev/null +++ b/src/server/vendor/golang.org/x/image/draw/impl.go @@ -0,0 +1,6670 @@ +// generated by "go run gen.go". DO NOT EDIT. + +package draw + +import ( + "image" + "image/color" + "math" + + "golang.org/x/image/math/f64" +) + +func (z nnInterpolator) Scale(dst Image, dr image.Rectangle, src image.Image, sr image.Rectangle, op Op, opts *Options) { + // Try to simplify a Scale to a Copy when DstMask is not specified. + // If DstMask is not nil, Copy will call Scale back with same dr and sr, and cause stack overflow. + if dr.Size() == sr.Size() && (opts == nil || opts.DstMask == nil) { + Copy(dst, dr.Min, src, sr, op, opts) + return + } + + var o Options + if opts != nil { + o = *opts + } + + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.DstMask != nil || o.SrcMask != nil || !sr.In(src.Bounds()) { + switch op { + case Over: + z.scale_Image_Image_Over(dst, dr, adr, src, sr, &o) + case Src: + z.scale_Image_Image_Src(dst, dr, adr, src, sr, &o) + } + } else if _, ok := src.(*image.Uniform); ok { + Draw(dst, dr, src, src.Bounds().Min, op) + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.NRGBA: + z.scale_RGBA_NRGBA_Over(dst, dr, adr, src, sr, &o) + case *image.RGBA: + z.scale_RGBA_RGBA_Over(dst, dr, adr, src, sr, &o) + default: + z.scale_RGBA_Image_Over(dst, dr, adr, src, sr, &o) + } + default: + switch src := src.(type) { + default: + z.scale_Image_Image_Over(dst, dr, adr, src, sr, &o) + } + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.scale_RGBA_Gray_Src(dst, dr, adr, src, sr, &o) + case *image.NRGBA: + z.scale_RGBA_NRGBA_Src(dst, dr, adr, src, sr, &o) + case *image.RGBA: + z.scale_RGBA_RGBA_Src(dst, dr, adr, src, sr, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + z.scale_RGBA_Image_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio444: + z.scale_RGBA_YCbCr444_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio422: + z.scale_RGBA_YCbCr422_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio420: + z.scale_RGBA_YCbCr420_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio440: + z.scale_RGBA_YCbCr440_Src(dst, dr, adr, src, sr, &o) + } + default: + z.scale_RGBA_Image_Src(dst, dr, adr, src, sr, &o) + } + default: + switch src := src.(type) { + default: + z.scale_Image_Image_Src(dst, dr, adr, src, sr, &o) + } + } + } + } +} + +func (z nnInterpolator) Transform(dst Image, s2d f64.Aff3, src image.Image, sr image.Rectangle, op Op, opts *Options) { + // Try to simplify a Transform to a Copy. + if s2d[0] == 1 && s2d[1] == 0 && s2d[3] == 0 && s2d[4] == 1 { + dx := int(s2d[2]) + dy := int(s2d[5]) + if float64(dx) == s2d[2] && float64(dy) == s2d[5] { + Copy(dst, image.Point{X: sr.Min.X + dx, Y: sr.Min.X + dy}, src, sr, op, opts) + return + } + } + + var o Options + if opts != nil { + o = *opts + } + + dr := transformRect(&s2d, &sr) + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + + d2s := invert(&s2d) + // bias is a translation of the mapping from dst coordinates to src + // coordinates such that the latter temporarily have non-negative X + // and Y coordinates. This allows us to write int(f) instead of + // int(math.Floor(f)), since "round to zero" and "round down" are + // equivalent when f >= 0, but the former is much cheaper. The X-- + // and Y-- are because the TransformLeaf methods have a "sx -= 0.5" + // adjustment. + bias := transformRect(&d2s, &adr).Min + bias.X-- + bias.Y-- + d2s[2] -= float64(bias.X) + d2s[5] -= float64(bias.Y) + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.DstMask != nil || o.SrcMask != nil || !sr.In(src.Bounds()) { + switch op { + case Over: + z.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + case Src: + z.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } else if u, ok := src.(*image.Uniform); ok { + transform_Uniform(dst, dr, adr, &d2s, u, sr, bias, op) + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.NRGBA: + z.transform_RGBA_NRGBA_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.RGBA: + z.transform_RGBA_RGBA_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + default: + z.transform_RGBA_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.transform_RGBA_Gray_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.NRGBA: + z.transform_RGBA_NRGBA_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.RGBA: + z.transform_RGBA_RGBA_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + z.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio444: + z.transform_RGBA_YCbCr444_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio422: + z.transform_RGBA_YCbCr422_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio420: + z.transform_RGBA_YCbCr420_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio440: + z.transform_RGBA_YCbCr440_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + z.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } + } + } +} + +func (nnInterpolator) scale_RGBA_Gray_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.Gray, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(sx) - src.Rect.Min.X) + pr := uint32(src.Pix[pi]) * 0x101 + out := uint8(pr >> 8) + dst.Pix[d+0] = out + dst.Pix[d+1] = out + dst.Pix[d+2] = out + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) scale_RGBA_NRGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, src *image.NRGBA, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx)-src.Rect.Min.X)*4 + pa := uint32(src.Pix[pi+3]) * 0x101 + pr := uint32(src.Pix[pi+0]) * pa / 0xff + pg := uint32(src.Pix[pi+1]) * pa / 0xff + pb := uint32(src.Pix[pi+2]) * pa / 0xff + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) scale_RGBA_NRGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.NRGBA, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx)-src.Rect.Min.X)*4 + pa := uint32(src.Pix[pi+3]) * 0x101 + pr := uint32(src.Pix[pi+0]) * pa / 0xff + pg := uint32(src.Pix[pi+1]) * pa / 0xff + pb := uint32(src.Pix[pi+2]) * pa / 0xff + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) scale_RGBA_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, src *image.RGBA, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx)-src.Rect.Min.X)*4 + pr := uint32(src.Pix[pi+0]) * 0x101 + pg := uint32(src.Pix[pi+1]) * 0x101 + pb := uint32(src.Pix[pi+2]) * 0x101 + pa := uint32(src.Pix[pi+3]) * 0x101 + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) scale_RGBA_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.RGBA, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx)-src.Rect.Min.X)*4 + pr := uint32(src.Pix[pi+0]) * 0x101 + pg := uint32(src.Pix[pi+1]) * 0x101 + pb := uint32(src.Pix[pi+2]) * 0x101 + pa := uint32(src.Pix[pi+3]) * 0x101 + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) scale_RGBA_Image_Over(dst *image.RGBA, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pr, pg, pb, pa := src.At(sr.Min.X+int(sx), sr.Min.Y+int(sy)).RGBA() + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) scale_RGBA_Image_Src(dst *image.RGBA, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (2*uint64(dx) + 1) * sw / dw2 + pr, pg, pb, pa := src.At(sr.Min.X+int(sx), sr.Min.Y+int(sy)).RGBA() + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) scale_Image_Image_Over(dst Image, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + sx := (2*uint64(dx) + 1) * sw / dw2 + pr, pg, pb, pa := src.At(sr.Min.X+int(sx), sr.Min.Y+int(sy)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx), smp.Y+sr.Min.Y+int(sy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + pa1 := 0xffff - pa + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } +} + +func (nnInterpolator) scale_Image_Image_Src(dst Image, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + dw2 := uint64(dr.Dx()) * 2 + dh2 := uint64(dr.Dy()) * 2 + sw := uint64(sr.Dx()) + sh := uint64(sr.Dy()) + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (2*uint64(dy) + 1) * sh / dh2 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + sx := (2*uint64(dx) + 1) * sw / dw2 + pr, pg, pb, pa := src.At(sr.Min.X+int(sx), sr.Min.Y+int(sy)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx), smp.Y+sr.Min.Y+int(sy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } else { + dstColorRGBA64.R = uint16(pr) + dstColorRGBA64.G = uint16(pg) + dstColorRGBA64.B = uint16(pb) + dstColorRGBA64.A = uint16(pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } +} + +func (nnInterpolator) transform_RGBA_Gray_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.Gray, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.Stride + (sx0 - src.Rect.Min.X) + pr := uint32(src.Pix[pi]) * 0x101 + out := uint8(pr >> 8) + dst.Pix[d+0] = out + dst.Pix[d+1] = out + dst.Pix[d+2] = out + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) transform_RGBA_NRGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + pa := uint32(src.Pix[pi+3]) * 0x101 + pr := uint32(src.Pix[pi+0]) * pa / 0xff + pg := uint32(src.Pix[pi+1]) * pa / 0xff + pb := uint32(src.Pix[pi+2]) * pa / 0xff + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) transform_RGBA_NRGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + pa := uint32(src.Pix[pi+3]) * 0x101 + pr := uint32(src.Pix[pi+0]) * pa / 0xff + pg := uint32(src.Pix[pi+1]) * pa / 0xff + pb := uint32(src.Pix[pi+2]) * pa / 0xff + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) transform_RGBA_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + pr := uint32(src.Pix[pi+0]) * 0x101 + pg := uint32(src.Pix[pi+1]) * 0x101 + pb := uint32(src.Pix[pi+2]) * 0x101 + pa := uint32(src.Pix[pi+3]) * 0x101 + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) transform_RGBA_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + pr := uint32(src.Pix[pi+0]) * 0x101 + pg := uint32(src.Pix[pi+1]) * 0x101 + pb := uint32(src.Pix[pi+2]) * 0x101 + pa := uint32(src.Pix[pi+3]) * 0x101 + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + pj := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + pj := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff + } + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff + } + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff + } + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (nnInterpolator) transform_RGBA_Image_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pr, pg, pb, pa := src.At(sx0, sy0).RGBA() + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (nnInterpolator) transform_RGBA_Image_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pr, pg, pb, pa := src.At(sx0, sy0).RGBA() + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (nnInterpolator) transform_Image_Image_Over(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pr, pg, pb, pa := src.At(sx0, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy0).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + pa1 := 0xffff - pa + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } +} + +func (nnInterpolator) transform_Image_Image_Src(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + pr, pg, pb, pa := src.At(sx0, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy0).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } else { + dstColorRGBA64.R = uint16(pr) + dstColorRGBA64.G = uint16(pg) + dstColorRGBA64.B = uint16(pb) + dstColorRGBA64.A = uint16(pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } +} + +func (z ablInterpolator) Scale(dst Image, dr image.Rectangle, src image.Image, sr image.Rectangle, op Op, opts *Options) { + // Try to simplify a Scale to a Copy when DstMask is not specified. + // If DstMask is not nil, Copy will call Scale back with same dr and sr, and cause stack overflow. + if dr.Size() == sr.Size() && (opts == nil || opts.DstMask == nil) { + Copy(dst, dr.Min, src, sr, op, opts) + return + } + + var o Options + if opts != nil { + o = *opts + } + + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.DstMask != nil || o.SrcMask != nil || !sr.In(src.Bounds()) { + switch op { + case Over: + z.scale_Image_Image_Over(dst, dr, adr, src, sr, &o) + case Src: + z.scale_Image_Image_Src(dst, dr, adr, src, sr, &o) + } + } else if _, ok := src.(*image.Uniform); ok { + Draw(dst, dr, src, src.Bounds().Min, op) + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.NRGBA: + z.scale_RGBA_NRGBA_Over(dst, dr, adr, src, sr, &o) + case *image.RGBA: + z.scale_RGBA_RGBA_Over(dst, dr, adr, src, sr, &o) + default: + z.scale_RGBA_Image_Over(dst, dr, adr, src, sr, &o) + } + default: + switch src := src.(type) { + default: + z.scale_Image_Image_Over(dst, dr, adr, src, sr, &o) + } + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.scale_RGBA_Gray_Src(dst, dr, adr, src, sr, &o) + case *image.NRGBA: + z.scale_RGBA_NRGBA_Src(dst, dr, adr, src, sr, &o) + case *image.RGBA: + z.scale_RGBA_RGBA_Src(dst, dr, adr, src, sr, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + z.scale_RGBA_Image_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio444: + z.scale_RGBA_YCbCr444_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio422: + z.scale_RGBA_YCbCr422_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio420: + z.scale_RGBA_YCbCr420_Src(dst, dr, adr, src, sr, &o) + case image.YCbCrSubsampleRatio440: + z.scale_RGBA_YCbCr440_Src(dst, dr, adr, src, sr, &o) + } + default: + z.scale_RGBA_Image_Src(dst, dr, adr, src, sr, &o) + } + default: + switch src := src.(type) { + default: + z.scale_Image_Image_Src(dst, dr, adr, src, sr, &o) + } + } + } + } +} + +func (z ablInterpolator) Transform(dst Image, s2d f64.Aff3, src image.Image, sr image.Rectangle, op Op, opts *Options) { + // Try to simplify a Transform to a Copy. + if s2d[0] == 1 && s2d[1] == 0 && s2d[3] == 0 && s2d[4] == 1 { + dx := int(s2d[2]) + dy := int(s2d[5]) + if float64(dx) == s2d[2] && float64(dy) == s2d[5] { + Copy(dst, image.Point{X: sr.Min.X + dx, Y: sr.Min.X + dy}, src, sr, op, opts) + return + } + } + + var o Options + if opts != nil { + o = *opts + } + + dr := transformRect(&s2d, &sr) + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + + d2s := invert(&s2d) + // bias is a translation of the mapping from dst coordinates to src + // coordinates such that the latter temporarily have non-negative X + // and Y coordinates. This allows us to write int(f) instead of + // int(math.Floor(f)), since "round to zero" and "round down" are + // equivalent when f >= 0, but the former is much cheaper. The X-- + // and Y-- are because the TransformLeaf methods have a "sx -= 0.5" + // adjustment. + bias := transformRect(&d2s, &adr).Min + bias.X-- + bias.Y-- + d2s[2] -= float64(bias.X) + d2s[5] -= float64(bias.Y) + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.DstMask != nil || o.SrcMask != nil || !sr.In(src.Bounds()) { + switch op { + case Over: + z.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + case Src: + z.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } else if u, ok := src.(*image.Uniform); ok { + transform_Uniform(dst, dr, adr, &d2s, u, sr, bias, op) + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.NRGBA: + z.transform_RGBA_NRGBA_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.RGBA: + z.transform_RGBA_RGBA_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + default: + z.transform_RGBA_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.transform_RGBA_Gray_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.NRGBA: + z.transform_RGBA_NRGBA_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.RGBA: + z.transform_RGBA_RGBA_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + z.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio444: + z.transform_RGBA_YCbCr444_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio422: + z.transform_RGBA_YCbCr422_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio420: + z.transform_RGBA_YCbCr420_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + case image.YCbCrSubsampleRatio440: + z.transform_RGBA_YCbCr440_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + z.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, &o) + } + } + } + } +} + +func (ablInterpolator) scale_RGBA_Gray_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.Gray, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s00ru := uint32(src.Pix[s00i]) * 0x101 + s00r := float64(s00ru) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s10ru := uint32(src.Pix[s10i]) * 0x101 + s10r := float64(s10ru) + s10r = xFrac1*s00r + xFrac0*s10r + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s01ru := uint32(src.Pix[s01i]) * 0x101 + s01r := float64(s01ru) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s11ru := uint32(src.Pix[s11i]) * 0x101 + s11r := float64(s11ru) + s11r = xFrac1*s01r + xFrac0*s11r + s11r = yFrac1*s10r + yFrac0*s11r + pr := uint32(s11r) + out := uint8(pr >> 8) + dst.Pix[d+0] = out + dst.Pix[d+1] = out + dst.Pix[d+2] = out + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) scale_RGBA_NRGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, src *image.NRGBA, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00ru := uint32(src.Pix[s00i+0]) * s00au / 0xff + s00gu := uint32(src.Pix[s00i+1]) * s00au / 0xff + s00bu := uint32(src.Pix[s00i+2]) * s00au / 0xff + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10ru := uint32(src.Pix[s10i+0]) * s10au / 0xff + s10gu := uint32(src.Pix[s10i+1]) * s10au / 0xff + s10bu := uint32(src.Pix[s10i+2]) * s10au / 0xff + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01ru := uint32(src.Pix[s01i+0]) * s01au / 0xff + s01gu := uint32(src.Pix[s01i+1]) * s01au / 0xff + s01bu := uint32(src.Pix[s01i+2]) * s01au / 0xff + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11ru := uint32(src.Pix[s11i+0]) * s11au / 0xff + s11gu := uint32(src.Pix[s11i+1]) * s11au / 0xff + s11bu := uint32(src.Pix[s11i+2]) * s11au / 0xff + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) scale_RGBA_NRGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.NRGBA, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00ru := uint32(src.Pix[s00i+0]) * s00au / 0xff + s00gu := uint32(src.Pix[s00i+1]) * s00au / 0xff + s00bu := uint32(src.Pix[s00i+2]) * s00au / 0xff + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10ru := uint32(src.Pix[s10i+0]) * s10au / 0xff + s10gu := uint32(src.Pix[s10i+1]) * s10au / 0xff + s10bu := uint32(src.Pix[s10i+2]) * s10au / 0xff + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01ru := uint32(src.Pix[s01i+0]) * s01au / 0xff + s01gu := uint32(src.Pix[s01i+1]) * s01au / 0xff + s01bu := uint32(src.Pix[s01i+2]) * s01au / 0xff + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11ru := uint32(src.Pix[s11i+0]) * s11au / 0xff + s11gu := uint32(src.Pix[s11i+1]) * s11au / 0xff + s11bu := uint32(src.Pix[s11i+2]) * s11au / 0xff + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) scale_RGBA_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, src *image.RGBA, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s00ru := uint32(src.Pix[s00i+0]) * 0x101 + s00gu := uint32(src.Pix[s00i+1]) * 0x101 + s00bu := uint32(src.Pix[s00i+2]) * 0x101 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s10ru := uint32(src.Pix[s10i+0]) * 0x101 + s10gu := uint32(src.Pix[s10i+1]) * 0x101 + s10bu := uint32(src.Pix[s10i+2]) * 0x101 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s01ru := uint32(src.Pix[s01i+0]) * 0x101 + s01gu := uint32(src.Pix[s01i+1]) * 0x101 + s01bu := uint32(src.Pix[s01i+2]) * 0x101 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s11ru := uint32(src.Pix[s11i+0]) * 0x101 + s11gu := uint32(src.Pix[s11i+1]) * 0x101 + s11bu := uint32(src.Pix[s11i+2]) * 0x101 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) scale_RGBA_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.RGBA, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s00ru := uint32(src.Pix[s00i+0]) * 0x101 + s00gu := uint32(src.Pix[s00i+1]) * 0x101 + s00bu := uint32(src.Pix[s00i+2]) * 0x101 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s10ru := uint32(src.Pix[s10i+0]) * 0x101 + s10gu := uint32(src.Pix[s10i+1]) * 0x101 + s10bu := uint32(src.Pix[s10i+2]) * 0x101 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx0)-src.Rect.Min.X)*4 + s01ru := uint32(src.Pix[s01i+0]) * 0x101 + s01gu := uint32(src.Pix[s01i+1]) * 0x101 + s01bu := uint32(src.Pix[s01i+2]) * 0x101 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(sx1)-src.Rect.Min.X)*4 + s11ru := uint32(src.Pix[s11i+0]) * 0x101 + s11gu := uint32(src.Pix[s11i+1]) * 0x101 + s11bu := uint32(src.Pix[s11i+2]) * 0x101 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) scale_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) scale_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) scale_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) scale_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rectangle, src *image.YCbCr, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) scale_RGBA_Image_Over(dst *image.RGBA, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy0)).RGBA() + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy0)).RGBA() + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy1)).RGBA() + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy1)).RGBA() + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) scale_RGBA_Image_Src(dst *image.RGBA, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy0)).RGBA() + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy0)).RGBA() + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy1)).RGBA() + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy1)).RGBA() + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) scale_Image_Image_Over(dst Image, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy0)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx0), smp.Y+sr.Min.Y+int(sy0)).RGBA() + s00ru = s00ru * ma / 0xffff + s00gu = s00gu * ma / 0xffff + s00bu = s00bu * ma / 0xffff + s00au = s00au * ma / 0xffff + } + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy0)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx1), smp.Y+sr.Min.Y+int(sy0)).RGBA() + s10ru = s10ru * ma / 0xffff + s10gu = s10gu * ma / 0xffff + s10bu = s10bu * ma / 0xffff + s10au = s10au * ma / 0xffff + } + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy1)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx0), smp.Y+sr.Min.Y+int(sy1)).RGBA() + s01ru = s01ru * ma / 0xffff + s01gu = s01gu * ma / 0xffff + s01bu = s01bu * ma / 0xffff + s01au = s01au * ma / 0xffff + } + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy1)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx1), smp.Y+sr.Min.Y+int(sy1)).RGBA() + s11ru = s11ru * ma / 0xffff + s11gu = s11gu * ma / 0xffff + s11bu = s11bu * ma / 0xffff + s11au = s11au * ma / 0xffff + } + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + pa1 := 0xffff - pa + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } +} + +func (ablInterpolator) scale_Image_Image_Src(dst Image, dr, adr image.Rectangle, src image.Image, sr image.Rectangle, opts *Options) { + sw := int32(sr.Dx()) + sh := int32(sr.Dy()) + yscale := float64(sh) / float64(dr.Dy()) + xscale := float64(sw) / float64(dr.Dx()) + swMinus1, shMinus1 := sw-1, sh-1 + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + sy := (float64(dy)+0.5)*yscale - 0.5 + // If sy < 0, we will clamp sy0 to 0 anyway, so it doesn't matter if + // we say int32(sy) instead of int32(math.Floor(sy)). Similarly for + // sx, below. + sy0 := int32(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy1 := sy0 + 1 + if sy < 0 { + sy0, sy1 = 0, 0 + yFrac0, yFrac1 = 0, 1 + } else if sy1 > shMinus1 { + sy0, sy1 = shMinus1, shMinus1 + yFrac0, yFrac1 = 1, 0 + } + + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + sx := (float64(dx)+0.5)*xscale - 0.5 + sx0 := int32(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx1 := sx0 + 1 + if sx < 0 { + sx0, sx1 = 0, 0 + xFrac0, xFrac1 = 0, 1 + } else if sx1 > swMinus1 { + sx0, sx1 = swMinus1, swMinus1 + xFrac0, xFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy0)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx0), smp.Y+sr.Min.Y+int(sy0)).RGBA() + s00ru = s00ru * ma / 0xffff + s00gu = s00gu * ma / 0xffff + s00bu = s00bu * ma / 0xffff + s00au = s00au * ma / 0xffff + } + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy0)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx1), smp.Y+sr.Min.Y+int(sy0)).RGBA() + s10ru = s10ru * ma / 0xffff + s10gu = s10gu * ma / 0xffff + s10bu = s10bu * ma / 0xffff + s10au = s10au * ma / 0xffff + } + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sr.Min.X+int(sx0), sr.Min.Y+int(sy1)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx0), smp.Y+sr.Min.Y+int(sy1)).RGBA() + s01ru = s01ru * ma / 0xffff + s01gu = s01gu * ma / 0xffff + s01bu = s01bu * ma / 0xffff + s01au = s01au * ma / 0xffff + } + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sr.Min.X+int(sx1), sr.Min.Y+int(sy1)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(sx1), smp.Y+sr.Min.Y+int(sy1)).RGBA() + s11ru = s11ru * ma / 0xffff + s11gu = s11gu * ma / 0xffff + s11bu = s11bu * ma / 0xffff + s11au = s11au * ma / 0xffff + } + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } else { + dstColorRGBA64.R = uint16(pr) + dstColorRGBA64.G = uint16(pg) + dstColorRGBA64.B = uint16(pb) + dstColorRGBA64.A = uint16(pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } +} + +func (ablInterpolator) transform_RGBA_Gray_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.Gray, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.Stride + (sx0 - src.Rect.Min.X) + s00ru := uint32(src.Pix[s00i]) * 0x101 + s00r := float64(s00ru) + s10i := (sy0-src.Rect.Min.Y)*src.Stride + (sx1 - src.Rect.Min.X) + s10ru := uint32(src.Pix[s10i]) * 0x101 + s10r := float64(s10ru) + s10r = xFrac1*s00r + xFrac0*s10r + s01i := (sy1-src.Rect.Min.Y)*src.Stride + (sx0 - src.Rect.Min.X) + s01ru := uint32(src.Pix[s01i]) * 0x101 + s01r := float64(s01ru) + s11i := (sy1-src.Rect.Min.Y)*src.Stride + (sx1 - src.Rect.Min.X) + s11ru := uint32(src.Pix[s11i]) * 0x101 + s11r := float64(s11ru) + s11r = xFrac1*s01r + xFrac0*s11r + s11r = yFrac1*s10r + yFrac0*s11r + pr := uint32(s11r) + out := uint8(pr >> 8) + dst.Pix[d+0] = out + dst.Pix[d+1] = out + dst.Pix[d+2] = out + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) transform_RGBA_NRGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00ru := uint32(src.Pix[s00i+0]) * s00au / 0xff + s00gu := uint32(src.Pix[s00i+1]) * s00au / 0xff + s00bu := uint32(src.Pix[s00i+2]) * s00au / 0xff + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sy0-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10ru := uint32(src.Pix[s10i+0]) * s10au / 0xff + s10gu := uint32(src.Pix[s10i+1]) * s10au / 0xff + s10bu := uint32(src.Pix[s10i+2]) * s10au / 0xff + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sy1-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01ru := uint32(src.Pix[s01i+0]) * s01au / 0xff + s01gu := uint32(src.Pix[s01i+1]) * s01au / 0xff + s01bu := uint32(src.Pix[s01i+2]) * s01au / 0xff + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sy1-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11ru := uint32(src.Pix[s11i+0]) * s11au / 0xff + s11gu := uint32(src.Pix[s11i+1]) * s11au / 0xff + s11bu := uint32(src.Pix[s11i+2]) * s11au / 0xff + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) transform_RGBA_NRGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00ru := uint32(src.Pix[s00i+0]) * s00au / 0xff + s00gu := uint32(src.Pix[s00i+1]) * s00au / 0xff + s00bu := uint32(src.Pix[s00i+2]) * s00au / 0xff + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sy0-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10ru := uint32(src.Pix[s10i+0]) * s10au / 0xff + s10gu := uint32(src.Pix[s10i+1]) * s10au / 0xff + s10bu := uint32(src.Pix[s10i+2]) * s10au / 0xff + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sy1-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01ru := uint32(src.Pix[s01i+0]) * s01au / 0xff + s01gu := uint32(src.Pix[s01i+1]) * s01au / 0xff + s01bu := uint32(src.Pix[s01i+2]) * s01au / 0xff + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sy1-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11ru := uint32(src.Pix[s11i+0]) * s11au / 0xff + s11gu := uint32(src.Pix[s11i+1]) * s11au / 0xff + s11bu := uint32(src.Pix[s11i+2]) * s11au / 0xff + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) transform_RGBA_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s00ru := uint32(src.Pix[s00i+0]) * 0x101 + s00gu := uint32(src.Pix[s00i+1]) * 0x101 + s00bu := uint32(src.Pix[s00i+2]) * 0x101 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sy0-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s10ru := uint32(src.Pix[s10i+0]) * 0x101 + s10gu := uint32(src.Pix[s10i+1]) * 0x101 + s10bu := uint32(src.Pix[s10i+2]) * 0x101 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sy1-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s01ru := uint32(src.Pix[s01i+0]) * 0x101 + s01gu := uint32(src.Pix[s01i+1]) * 0x101 + s01bu := uint32(src.Pix[s01i+2]) * 0x101 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sy1-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s11ru := uint32(src.Pix[s11i+0]) * 0x101 + s11gu := uint32(src.Pix[s11i+1]) * 0x101 + s11bu := uint32(src.Pix[s11i+2]) * 0x101 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) transform_RGBA_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s00ru := uint32(src.Pix[s00i+0]) * 0x101 + s00gu := uint32(src.Pix[s00i+1]) * 0x101 + s00bu := uint32(src.Pix[s00i+2]) * 0x101 + s00au := uint32(src.Pix[s00i+3]) * 0x101 + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10i := (sy0-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s10ru := uint32(src.Pix[s10i+0]) * 0x101 + s10gu := uint32(src.Pix[s10i+1]) * 0x101 + s10bu := uint32(src.Pix[s10i+2]) * 0x101 + s10au := uint32(src.Pix[s10i+3]) * 0x101 + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01i := (sy1-src.Rect.Min.Y)*src.Stride + (sx0-src.Rect.Min.X)*4 + s01ru := uint32(src.Pix[s01i+0]) * 0x101 + s01gu := uint32(src.Pix[s01i+1]) * 0x101 + s01bu := uint32(src.Pix[s01i+2]) * 0x101 + s01au := uint32(src.Pix[s01i+3]) * 0x101 + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11i := (sy1-src.Rect.Min.Y)*src.Stride + (sx1-src.Rect.Min.X)*4 + s11ru := uint32(src.Pix[s11i+0]) * 0x101 + s11gu := uint32(src.Pix[s11i+1]) * 0x101 + s11bu := uint32(src.Pix[s11i+2]) * 0x101 + s11au := uint32(src.Pix[s11i+3]) * 0x101 + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s00j := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s10j := (sy0-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s01j := (sy1-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s11j := (sy1-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s00j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s10j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s01j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s11j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s00yy1 := int(src.Y[s00i]) * 0x10101 + s00cb1 := int(src.Cb[s00j]) - 128 + s00cr1 := int(src.Cr[s00j]) - 128 + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff + } + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff + } + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff + } + + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s10yy1 := int(src.Y[s10i]) * 0x10101 + s10cb1 := int(src.Cb[s10j]) - 128 + s10cr1 := int(src.Cr[s10j]) - 128 + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff + } + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff + } + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff + } + + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) + s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s01yy1 := int(src.Y[s01i]) * 0x10101 + s01cb1 := int(src.Cb[s01j]) - 128 + s01cr1 := int(src.Cr[s01j]) - 128 + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff + } + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff + } + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff + } + + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) + s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + s11yy1 := int(src.Y[s11i]) * 0x10101 + s11cb1 := int(src.Cb[s11j]) - 128 + s11cr1 := int(src.Cr[s11j]) - 128 + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff + } + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff + } + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff + } + + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (ablInterpolator) transform_RGBA_Image_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sx0, sy0).RGBA() + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sx1, sy0).RGBA() + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sx0, sy1).RGBA() + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sx1, sy1).RGBA() + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + pa1 := (0xffff - pa) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } +} + +func (ablInterpolator) transform_RGBA_Image_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sx0, sy0).RGBA() + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sx1, sy0).RGBA() + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sx0, sy1).RGBA() + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sx1, sy1).RGBA() + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + dst.Pix[d+0] = uint8(pr >> 8) + dst.Pix[d+1] = uint8(pg >> 8) + dst.Pix[d+2] = uint8(pb >> 8) + dst.Pix[d+3] = uint8(pa >> 8) + } + } +} + +func (ablInterpolator) transform_Image_Image_Over(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sx0, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy0).RGBA() + s00ru = s00ru * ma / 0xffff + s00gu = s00gu * ma / 0xffff + s00bu = s00bu * ma / 0xffff + s00au = s00au * ma / 0xffff + } + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sx1, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx1, smp.Y+sy0).RGBA() + s10ru = s10ru * ma / 0xffff + s10gu = s10gu * ma / 0xffff + s10bu = s10bu * ma / 0xffff + s10au = s10au * ma / 0xffff + } + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sx0, sy1).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy1).RGBA() + s01ru = s01ru * ma / 0xffff + s01gu = s01gu * ma / 0xffff + s01bu = s01bu * ma / 0xffff + s01au = s01au * ma / 0xffff + } + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sx1, sy1).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx1, smp.Y+sy1).RGBA() + s11ru = s11ru * ma / 0xffff + s11gu = s11gu * ma / 0xffff + s11bu = s11bu * ma / 0xffff + s11au = s11au * ma / 0xffff + } + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + } + pa1 := 0xffff - pa + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } +} + +func (ablInterpolator) transform_Image_Image_Src(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, opts *Options) { + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + sx -= 0.5 + sx0 := int(sx) + xFrac0 := sx - float64(sx0) + xFrac1 := 1 - xFrac0 + sx0 += bias.X + sx1 := sx0 + 1 + if sx0 < sr.Min.X { + sx0, sx1 = sr.Min.X, sr.Min.X + xFrac0, xFrac1 = 0, 1 + } else if sx1 >= sr.Max.X { + sx0, sx1 = sr.Max.X-1, sr.Max.X-1 + xFrac0, xFrac1 = 1, 0 + } + + sy -= 0.5 + sy0 := int(sy) + yFrac0 := sy - float64(sy0) + yFrac1 := 1 - yFrac0 + sy0 += bias.Y + sy1 := sy0 + 1 + if sy0 < sr.Min.Y { + sy0, sy1 = sr.Min.Y, sr.Min.Y + yFrac0, yFrac1 = 0, 1 + } else if sy1 >= sr.Max.Y { + sy0, sy1 = sr.Max.Y-1, sr.Max.Y-1 + yFrac0, yFrac1 = 1, 0 + } + + s00ru, s00gu, s00bu, s00au := src.At(sx0, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy0).RGBA() + s00ru = s00ru * ma / 0xffff + s00gu = s00gu * ma / 0xffff + s00bu = s00bu * ma / 0xffff + s00au = s00au * ma / 0xffff + } + s00r := float64(s00ru) + s00g := float64(s00gu) + s00b := float64(s00bu) + s00a := float64(s00au) + s10ru, s10gu, s10bu, s10au := src.At(sx1, sy0).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx1, smp.Y+sy0).RGBA() + s10ru = s10ru * ma / 0xffff + s10gu = s10gu * ma / 0xffff + s10bu = s10bu * ma / 0xffff + s10au = s10au * ma / 0xffff + } + s10r := float64(s10ru) + s10g := float64(s10gu) + s10b := float64(s10bu) + s10a := float64(s10au) + s10r = xFrac1*s00r + xFrac0*s10r + s10g = xFrac1*s00g + xFrac0*s10g + s10b = xFrac1*s00b + xFrac0*s10b + s10a = xFrac1*s00a + xFrac0*s10a + s01ru, s01gu, s01bu, s01au := src.At(sx0, sy1).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx0, smp.Y+sy1).RGBA() + s01ru = s01ru * ma / 0xffff + s01gu = s01gu * ma / 0xffff + s01bu = s01bu * ma / 0xffff + s01au = s01au * ma / 0xffff + } + s01r := float64(s01ru) + s01g := float64(s01gu) + s01b := float64(s01bu) + s01a := float64(s01au) + s11ru, s11gu, s11bu, s11au := src.At(sx1, sy1).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sx1, smp.Y+sy1).RGBA() + s11ru = s11ru * ma / 0xffff + s11gu = s11gu * ma / 0xffff + s11bu = s11bu * ma / 0xffff + s11au = s11au * ma / 0xffff + } + s11r := float64(s11ru) + s11g := float64(s11gu) + s11b := float64(s11bu) + s11a := float64(s11au) + s11r = xFrac1*s01r + xFrac0*s11r + s11g = xFrac1*s01g + xFrac0*s11g + s11b = xFrac1*s01b + xFrac0*s11b + s11a = xFrac1*s01a + xFrac0*s11a + s11r = yFrac1*s10r + yFrac0*s11r + s11g = yFrac1*s10g + yFrac0*s11g + s11b = yFrac1*s10b + yFrac0*s11b + s11a = yFrac1*s10a + yFrac0*s11a + pr := uint32(s11r) + pg := uint32(s11g) + pb := uint32(s11b) + pa := uint32(s11a) + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr = pr * ma / 0xffff + pg = pg * ma / 0xffff + pb = pb * ma / 0xffff + pa = pa * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } else { + dstColorRGBA64.R = uint16(pr) + dstColorRGBA64.G = uint16(pg) + dstColorRGBA64.B = uint16(pb) + dstColorRGBA64.A = uint16(pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } +} + +func (z *kernelScaler) Scale(dst Image, dr image.Rectangle, src image.Image, sr image.Rectangle, op Op, opts *Options) { + if z.dw != int32(dr.Dx()) || z.dh != int32(dr.Dy()) || z.sw != int32(sr.Dx()) || z.sh != int32(sr.Dy()) { + z.kernel.Scale(dst, dr, src, sr, op, opts) + return + } + + var o Options + if opts != nil { + o = *opts + } + + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + + if _, ok := src.(*image.Uniform); ok && o.DstMask == nil && o.SrcMask == nil && sr.In(src.Bounds()) { + Draw(dst, dr, src, src.Bounds().Min, op) + return + } + + // Create a temporary buffer: + // scaleX distributes the source image's columns over the temporary image. + // scaleY distributes the temporary image's rows over the destination image. + var tmp [][4]float64 + if z.pool.New != nil { + tmpp := z.pool.Get().(*[][4]float64) + defer z.pool.Put(tmpp) + tmp = *tmpp + } else { + tmp = z.makeTmpBuf() + } + + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.SrcMask != nil || !sr.In(src.Bounds()) { + z.scaleX_Image(tmp, src, sr, &o) + } else { + switch src := src.(type) { + case *image.Gray: + z.scaleX_Gray(tmp, src, sr, &o) + case *image.NRGBA: + z.scaleX_NRGBA(tmp, src, sr, &o) + case *image.RGBA: + z.scaleX_RGBA(tmp, src, sr, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + z.scaleX_Image(tmp, src, sr, &o) + case image.YCbCrSubsampleRatio444: + z.scaleX_YCbCr444(tmp, src, sr, &o) + case image.YCbCrSubsampleRatio422: + z.scaleX_YCbCr422(tmp, src, sr, &o) + case image.YCbCrSubsampleRatio420: + z.scaleX_YCbCr420(tmp, src, sr, &o) + case image.YCbCrSubsampleRatio440: + z.scaleX_YCbCr440(tmp, src, sr, &o) + } + default: + z.scaleX_Image(tmp, src, sr, &o) + } + } + + if o.DstMask != nil { + switch op { + case Over: + z.scaleY_Image_Over(dst, dr, adr, tmp, &o) + case Src: + z.scaleY_Image_Src(dst, dr, adr, tmp, &o) + } + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + z.scaleY_RGBA_Over(dst, dr, adr, tmp, &o) + default: + z.scaleY_Image_Over(dst, dr, adr, tmp, &o) + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + z.scaleY_RGBA_Src(dst, dr, adr, tmp, &o) + default: + z.scaleY_Image_Src(dst, dr, adr, tmp, &o) + } + } + } +} + +func (q *Kernel) Transform(dst Image, s2d f64.Aff3, src image.Image, sr image.Rectangle, op Op, opts *Options) { + var o Options + if opts != nil { + o = *opts + } + + dr := transformRect(&s2d, &sr) + // adr is the affected destination pixels. + adr := dst.Bounds().Intersect(dr) + adr, o.DstMask = clipAffectedDestRect(adr, o.DstMask, o.DstMaskP) + if adr.Empty() || sr.Empty() { + return + } + if op == Over && o.SrcMask == nil && opaque(src) { + op = Src + } + d2s := invert(&s2d) + // bias is a translation of the mapping from dst coordinates to src + // coordinates such that the latter temporarily have non-negative X + // and Y coordinates. This allows us to write int(f) instead of + // int(math.Floor(f)), since "round to zero" and "round down" are + // equivalent when f >= 0, but the former is much cheaper. The X-- + // and Y-- are because the TransformLeaf methods have a "sx -= 0.5" + // adjustment. + bias := transformRect(&d2s, &adr).Min + bias.X-- + bias.Y-- + d2s[2] -= float64(bias.X) + d2s[5] -= float64(bias.Y) + // Make adr relative to dr.Min. + adr = adr.Sub(dr.Min) + + if u, ok := src.(*image.Uniform); ok && o.DstMask != nil && o.SrcMask != nil && sr.In(src.Bounds()) { + transform_Uniform(dst, dr, adr, &d2s, u, sr, bias, op) + return + } + + xscale := abs(d2s[0]) + if s := abs(d2s[1]); xscale < s { + xscale = s + } + yscale := abs(d2s[3]) + if s := abs(d2s[4]); yscale < s { + yscale = s + } + + // sr is the source pixels. If it extends beyond the src bounds, + // we cannot use the type-specific fast paths, as they access + // the Pix fields directly without bounds checking. + // + // Similarly, the fast paths assume that the masks are nil. + if o.DstMask != nil || o.SrcMask != nil || !sr.In(src.Bounds()) { + switch op { + case Over: + q.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case Src: + q.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + } else { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.NRGBA: + q.transform_RGBA_NRGBA_Over(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case *image.RGBA: + q.transform_RGBA_RGBA_Over(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + default: + q.transform_RGBA_Image_Over(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + default: + switch src := src.(type) { + default: + q.transform_Image_Image_Over(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + } + case Src: + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + q.transform_RGBA_Gray_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case *image.NRGBA: + q.transform_RGBA_NRGBA_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case *image.RGBA: + q.transform_RGBA_RGBA_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case *image.YCbCr: + switch src.SubsampleRatio { + default: + q.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case image.YCbCrSubsampleRatio444: + q.transform_RGBA_YCbCr444_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case image.YCbCrSubsampleRatio422: + q.transform_RGBA_YCbCr422_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case image.YCbCrSubsampleRatio420: + q.transform_RGBA_YCbCr420_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + case image.YCbCrSubsampleRatio440: + q.transform_RGBA_YCbCr440_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + default: + q.transform_RGBA_Image_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + default: + switch src := src.(type) { + default: + q.transform_Image_Image_Src(dst, dr, adr, &d2s, src, sr, bias, xscale, yscale, &o) + } + } + } + } +} + +func (z *kernelScaler) scaleX_Gray(tmp [][4]float64, src *image.Gray, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.Stride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + pru := uint32(src.Pix[pi]) * 0x101 + pr += float64(pru) * c.weight + } + pr *= s.invTotalWeightFFFF + tmp[t] = [4]float64{ + pr, + pr, + pr, + 1, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_NRGBA(tmp [][4]float64, src *image.NRGBA, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb, pa float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(c.coord)-src.Rect.Min.X)*4 + pau := uint32(src.Pix[pi+3]) * 0x101 + pru := uint32(src.Pix[pi+0]) * pau / 0xff + pgu := uint32(src.Pix[pi+1]) * pau / 0xff + pbu := uint32(src.Pix[pi+2]) * pau / 0xff + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + pa += float64(pau) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + pa * s.invTotalWeightFFFF, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_RGBA(tmp [][4]float64, src *image.RGBA, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb, pa float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.Stride + (sr.Min.X+int(c.coord)-src.Rect.Min.X)*4 + pru := uint32(src.Pix[pi+0]) * 0x101 + pgu := uint32(src.Pix[pi+1]) * 0x101 + pbu := uint32(src.Pix[pi+2]) * 0x101 + pau := uint32(src.Pix[pi+3]) * 0x101 + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + pa += float64(pau) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + pa * s.invTotalWeightFFFF, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_YCbCr444(tmp [][4]float64, src *image.YCbCr, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + 1, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_YCbCr422(tmp [][4]float64, src *image.YCbCr, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + 1, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_YCbCr420(tmp [][4]float64, src *image.YCbCr, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + 1, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_YCbCr440(tmp [][4]float64, src *image.YCbCr, sr image.Rectangle, opts *Options) { + t := 0 + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + 1, + } + t++ + } + } +} + +func (z *kernelScaler) scaleX_Image(tmp [][4]float64, src image.Image, sr image.Rectangle, opts *Options) { + t := 0 + srcMask, smp := opts.SrcMask, opts.SrcMaskP + for y := int32(0); y < z.sh; y++ { + for _, s := range z.horizontal.sources { + var pr, pg, pb, pa float64 + for _, c := range z.horizontal.contribs[s.i:s.j] { + pru, pgu, pbu, pau := src.At(sr.Min.X+int(c.coord), sr.Min.Y+int(y)).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+sr.Min.X+int(c.coord), smp.Y+sr.Min.Y+int(y)).RGBA() + pru = pru * ma / 0xffff + pgu = pgu * ma / 0xffff + pbu = pbu * ma / 0xffff + pau = pau * ma / 0xffff + } + pr += float64(pru) * c.weight + pg += float64(pgu) * c.weight + pb += float64(pbu) * c.weight + pa += float64(pau) * c.weight + } + tmp[t] = [4]float64{ + pr * s.invTotalWeightFFFF, + pg * s.invTotalWeightFFFF, + pb * s.invTotalWeightFFFF, + pa * s.invTotalWeightFFFF, + } + t++ + } + } +} + +func (z *kernelScaler) scaleY_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, tmp [][4]float64, opts *Options) { + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + d := (dr.Min.Y+adr.Min.Y-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+int(dx)-dst.Rect.Min.X)*4 + for _, s := range z.vertical.sources[adr.Min.Y:adr.Max.Y] { + var pr, pg, pb, pa float64 + for _, c := range z.vertical.contribs[s.i:s.j] { + p := &tmp[c.coord*z.dw+dx] + pr += p[0] * c.weight + pg += p[1] * c.weight + pb += p[2] * c.weight + pa += p[3] * c.weight + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + pr0 := uint32(ftou(pr * s.invTotalWeight)) + pg0 := uint32(ftou(pg * s.invTotalWeight)) + pb0 := uint32(ftou(pb * s.invTotalWeight)) + pa0 := uint32(ftou(pa * s.invTotalWeight)) + pa1 := (0xffff - uint32(pa0)) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr0) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg0) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb0) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa0) >> 8) + d += dst.Stride + } + } +} + +func (z *kernelScaler) scaleY_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, tmp [][4]float64, opts *Options) { + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + d := (dr.Min.Y+adr.Min.Y-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+int(dx)-dst.Rect.Min.X)*4 + for _, s := range z.vertical.sources[adr.Min.Y:adr.Max.Y] { + var pr, pg, pb, pa float64 + for _, c := range z.vertical.contribs[s.i:s.j] { + p := &tmp[c.coord*z.dw+dx] + pr += p[0] * c.weight + pg += p[1] * c.weight + pb += p[2] * c.weight + pa += p[3] * c.weight + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + dst.Pix[d+0] = uint8(ftou(pr*s.invTotalWeight) >> 8) + dst.Pix[d+1] = uint8(ftou(pg*s.invTotalWeight) >> 8) + dst.Pix[d+2] = uint8(ftou(pb*s.invTotalWeight) >> 8) + dst.Pix[d+3] = uint8(ftou(pa*s.invTotalWeight) >> 8) + d += dst.Stride + } + } +} + +func (z *kernelScaler) scaleY_Image_Over(dst Image, dr, adr image.Rectangle, tmp [][4]float64, opts *Options) { + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + for dy, s := range z.vertical.sources[adr.Min.Y:adr.Max.Y] { + var pr, pg, pb, pa float64 + for _, c := range z.vertical.contribs[s.i:s.j] { + p := &tmp[c.coord*z.dw+dx] + pr += p[0] * c.weight + pg += p[1] * c.weight + pb += p[2] * c.weight + pa += p[3] * c.weight + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(adr.Min.Y+dy)).RGBA() + pr0 := uint32(ftou(pr * s.invTotalWeight)) + pg0 := uint32(ftou(pg * s.invTotalWeight)) + pb0 := uint32(ftou(pb * s.invTotalWeight)) + pa0 := uint32(ftou(pa * s.invTotalWeight)) + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(adr.Min.Y+dy)).RGBA() + pr0 = pr0 * ma / 0xffff + pg0 = pg0 * ma / 0xffff + pb0 = pb0 * ma / 0xffff + pa0 = pa0 * ma / 0xffff + } + pa1 := 0xffff - pa0 + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr0) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg0) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb0) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa0) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(adr.Min.Y+dy), dstColor) + } + } +} + +func (z *kernelScaler) scaleY_Image_Src(dst Image, dr, adr image.Rectangle, tmp [][4]float64, opts *Options) { + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + for dy, s := range z.vertical.sources[adr.Min.Y:adr.Max.Y] { + var pr, pg, pb, pa float64 + for _, c := range z.vertical.contribs[s.i:s.j] { + p := &tmp[c.coord*z.dw+dx] + pr += p[0] * c.weight + pg += p[1] * c.weight + pb += p[2] * c.weight + pa += p[3] * c.weight + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(adr.Min.Y+dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(adr.Min.Y+dy)).RGBA() + pr := uint32(ftou(pr*s.invTotalWeight)) * ma / 0xffff + pg := uint32(ftou(pg*s.invTotalWeight)) * ma / 0xffff + pb := uint32(ftou(pb*s.invTotalWeight)) * ma / 0xffff + pa := uint32(ftou(pa*s.invTotalWeight)) * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(adr.Min.Y+dy), dstColor) + } else { + dstColorRGBA64.R = ftou(pr * s.invTotalWeight) + dstColorRGBA64.G = ftou(pg * s.invTotalWeight) + dstColorRGBA64.B = ftou(pb * s.invTotalWeight) + dstColorRGBA64.A = ftou(pa * s.invTotalWeight) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(adr.Min.Y+dy), dstColor) + } + } + } +} + +func (q *Kernel) transform_RGBA_Gray_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.Gray, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.Stride + (kx - src.Rect.Min.X) + pru := uint32(src.Pix[pi]) * 0x101 + pr += float64(pru) * w + } + } + } + } + out := uint8(fffftou(pr) >> 8) + dst.Pix[d+0] = out + dst.Pix[d+1] = out + dst.Pix[d+2] = out + dst.Pix[d+3] = 0xff + } + } +} + +func (q *Kernel) transform_RGBA_NRGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.Stride + (kx-src.Rect.Min.X)*4 + pau := uint32(src.Pix[pi+3]) * 0x101 + pru := uint32(src.Pix[pi+0]) * pau / 0xff + pgu := uint32(src.Pix[pi+1]) * pau / 0xff + pbu := uint32(src.Pix[pi+2]) * pau / 0xff + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + pr0 := uint32(fffftou(pr)) + pg0 := uint32(fffftou(pg)) + pb0 := uint32(fffftou(pb)) + pa0 := uint32(fffftou(pa)) + pa1 := (0xffff - uint32(pa0)) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr0) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg0) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb0) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa0) >> 8) + } + } +} + +func (q *Kernel) transform_RGBA_NRGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.NRGBA, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.Stride + (kx-src.Rect.Min.X)*4 + pau := uint32(src.Pix[pi+3]) * 0x101 + pru := uint32(src.Pix[pi+0]) * pau / 0xff + pgu := uint32(src.Pix[pi+1]) * pau / 0xff + pbu := uint32(src.Pix[pi+2]) * pau / 0xff + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = uint8(fffftou(pa) >> 8) + } + } +} + +func (q *Kernel) transform_RGBA_RGBA_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.Stride + (kx-src.Rect.Min.X)*4 + pru := uint32(src.Pix[pi+0]) * 0x101 + pgu := uint32(src.Pix[pi+1]) * 0x101 + pbu := uint32(src.Pix[pi+2]) * 0x101 + pau := uint32(src.Pix[pi+3]) * 0x101 + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + pr0 := uint32(fffftou(pr)) + pg0 := uint32(fffftou(pg)) + pb0 := uint32(fffftou(pb)) + pa0 := uint32(fffftou(pa)) + pa1 := (0xffff - uint32(pa0)) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr0) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg0) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb0) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa0) >> 8) + } + } +} + +func (q *Kernel) transform_RGBA_RGBA_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.RGBA, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.Stride + (kx-src.Rect.Min.X)*4 + pru := uint32(src.Pix[pi+0]) * 0x101 + pgu := uint32(src.Pix[pi+1]) * 0x101 + pbu := uint32(src.Pix[pi+2]) * 0x101 + pau := uint32(src.Pix[pi+3]) * 0x101 + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = uint8(fffftou(pa) >> 8) + } + } +} + +func (q *Kernel) transform_RGBA_YCbCr444_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) + pj := (ky-src.Rect.Min.Y)*src.CStride + (kx - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + } + } + } + } + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (q *Kernel) transform_RGBA_YCbCr422_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) + pj := (ky-src.Rect.Min.Y)*src.CStride + ((kx)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + } + } + } + } + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (q *Kernel) transform_RGBA_YCbCr420_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) + pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + ((kx)/2 - src.Rect.Min.X/2) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + } + } + } + } + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (q *Kernel) transform_RGBA_YCbCr440_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.YCbCr, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) + pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + (kx - src.Rect.Min.X) + + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. + pyy1 := int(src.Y[pi]) * 0x10101 + pcb1 := int(src.Cb[pj]) - 128 + pcr1 := int(src.Cr[pj]) - 128 + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff + } + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff + } + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff + } + + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + } + } + } + } + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = 0xff + } + } +} + +func (q *Kernel) transform_RGBA_Image_Over(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pru, pgu, pbu, pau := src.At(kx, ky).RGBA() + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + pr0 := uint32(fffftou(pr)) + pg0 := uint32(fffftou(pg)) + pb0 := uint32(fffftou(pb)) + pa0 := uint32(fffftou(pa)) + pa1 := (0xffff - uint32(pa0)) * 0x101 + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr0) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg0) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb0) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa0) >> 8) + } + } +} + +func (q *Kernel) transform_RGBA_Image_Src(dst *image.RGBA, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := (dr.Min.Y+int(dy)-dst.Rect.Min.Y)*dst.Stride + (dr.Min.X+adr.Min.X-dst.Rect.Min.X)*4 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pru, pgu, pbu, pau := src.At(kx, ky).RGBA() + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + dst.Pix[d+0] = uint8(fffftou(pr) >> 8) + dst.Pix[d+1] = uint8(fffftou(pg) >> 8) + dst.Pix[d+2] = uint8(fffftou(pb) >> 8) + dst.Pix[d+3] = uint8(fffftou(pa) >> 8) + } + } +} + +func (q *Kernel) transform_Image_Image_Over(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pru, pgu, pbu, pau := src.At(kx, ky).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+kx, smp.Y+ky).RGBA() + pru = pru * ma / 0xffff + pgu = pgu * ma / 0xffff + pbu = pbu * ma / 0xffff + pau = pau * ma / 0xffff + } + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + pr0 := uint32(fffftou(pr)) + pg0 := uint32(fffftou(pg)) + pb0 := uint32(fffftou(pb)) + pa0 := uint32(fffftou(pa)) + if dstMask != nil { + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr0 = pr0 * ma / 0xffff + pg0 = pg0 * ma / 0xffff + pb0 = pb0 * ma / 0xffff + pa0 = pa0 * ma / 0xffff + } + pa1 := 0xffff - pa0 + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr0) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg0) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb0) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa0) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } +} + +func (q *Kernel) transform_Image_Image_Src(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src image.Image, sr image.Rectangle, bias image.Point, xscale, yscale float64, opts *Options) { + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + xHalfWidth, xKernelArgScale := q.Support, 1.0 + if xscale > 1 { + xHalfWidth *= xscale + xKernelArgScale = 1 / xscale + } + yHalfWidth, yKernelArgScale := q.Support, 1.0 + if yscale > 1 { + yHalfWidth *= yscale + yKernelArgScale = 1 / yscale + } + + xWeights := make([]float64, 1+2*int(math.Ceil(xHalfWidth))) + yWeights := make([]float64, 1+2*int(math.Ceil(yHalfWidth))) + + srcMask, smp := opts.SrcMask, opts.SrcMaskP + dstMask, dmp := opts.DstMask, opts.DstMaskP + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx := d2s[0]*dxf + d2s[1]*dyf + d2s[2] + sy := d2s[3]*dxf + d2s[4]*dyf + d2s[5] + if !(image.Point{int(sx) + bias.X, int(sy) + bias.Y}).In(sr) { + continue + } + + // TODO: adjust the bias so that we can use int(f) instead + // of math.Floor(f) and math.Ceil(f). + sx += float64(bias.X) + sx -= 0.5 + ix := int(math.Floor(sx - xHalfWidth)) + if ix < sr.Min.X { + ix = sr.Min.X + } + jx := int(math.Ceil(sx + xHalfWidth)) + if jx > sr.Max.X { + jx = sr.Max.X + } + + totalXWeight := 0.0 + for kx := ix; kx < jx; kx++ { + xWeight := 0.0 + if t := abs((sx - float64(kx)) * xKernelArgScale); t < q.Support { + xWeight = q.At(t) + } + xWeights[kx-ix] = xWeight + totalXWeight += xWeight + } + for x := range xWeights[:jx-ix] { + xWeights[x] /= totalXWeight + } + + sy += float64(bias.Y) + sy -= 0.5 + iy := int(math.Floor(sy - yHalfWidth)) + if iy < sr.Min.Y { + iy = sr.Min.Y + } + jy := int(math.Ceil(sy + yHalfWidth)) + if jy > sr.Max.Y { + jy = sr.Max.Y + } + + totalYWeight := 0.0 + for ky := iy; ky < jy; ky++ { + yWeight := 0.0 + if t := abs((sy - float64(ky)) * yKernelArgScale); t < q.Support { + yWeight = q.At(t) + } + yWeights[ky-iy] = yWeight + totalYWeight += yWeight + } + for y := range yWeights[:jy-iy] { + yWeights[y] /= totalYWeight + } + + var pr, pg, pb, pa float64 + for ky := iy; ky < jy; ky++ { + if yWeight := yWeights[ky-iy]; yWeight != 0 { + for kx := ix; kx < jx; kx++ { + if w := xWeights[kx-ix] * yWeight; w != 0 { + pru, pgu, pbu, pau := src.At(kx, ky).RGBA() + if srcMask != nil { + _, _, _, ma := srcMask.At(smp.X+kx, smp.Y+ky).RGBA() + pru = pru * ma / 0xffff + pgu = pgu * ma / 0xffff + pbu = pbu * ma / 0xffff + pau = pau * ma / 0xffff + } + pr += float64(pru) * w + pg += float64(pgu) * w + pb += float64(pbu) * w + pa += float64(pau) * w + } + } + } + } + + if pr > pa { + pr = pa + } + if pg > pa { + pg = pa + } + if pb > pa { + pb = pa + } + + if dstMask != nil { + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + _, _, _, ma := dstMask.At(dmp.X+dr.Min.X+int(dx), dmp.Y+dr.Min.Y+int(dy)).RGBA() + pr := uint32(fffftou(pr)) * ma / 0xffff + pg := uint32(fffftou(pg)) * ma / 0xffff + pb := uint32(fffftou(pb)) * ma / 0xffff + pa := uint32(fffftou(pa)) * ma / 0xffff + pa1 := 0xffff - ma + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } else { + dstColorRGBA64.R = fffftou(pr) + dstColorRGBA64.G = fffftou(pg) + dstColorRGBA64.B = fffftou(pb) + dstColorRGBA64.A = fffftou(pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } +} diff --git a/src/server/vendor/golang.org/x/image/draw/scale.go b/src/server/vendor/golang.org/x/image/draw/scale.go new file mode 100644 index 00000000..00121a12 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/draw/scale.go @@ -0,0 +1,525 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +package draw + +import ( + "image" + "image/color" + "math" + "sync" + + "golang.org/x/image/math/f64" +) + +// Copy copies the part of the source image defined by src and sr and writes +// the result of a Porter-Duff composition to the part of the destination image +// defined by dst and the translation of sr so that sr.Min translates to dp. +func Copy(dst Image, dp image.Point, src image.Image, sr image.Rectangle, op Op, opts *Options) { + var o Options + if opts != nil { + o = *opts + } + dr := sr.Add(dp.Sub(sr.Min)) + if o.DstMask == nil { + DrawMask(dst, dr, src, sr.Min, o.SrcMask, o.SrcMaskP.Add(sr.Min), op) + } else { + NearestNeighbor.Scale(dst, dr, src, sr, op, opts) + } +} + +// Scaler scales the part of the source image defined by src and sr and writes +// the result of a Porter-Duff composition to the part of the destination image +// defined by dst and dr. +// +// A Scaler is safe to use concurrently. +type Scaler interface { + Scale(dst Image, dr image.Rectangle, src image.Image, sr image.Rectangle, op Op, opts *Options) +} + +// Transformer transforms the part of the source image defined by src and sr +// and writes the result of a Porter-Duff composition to the part of the +// destination image defined by dst and the affine transform m applied to sr. +// +// For example, if m is the matrix +// +// m00 m01 m02 +// m10 m11 m12 +// +// then the src-space point (sx, sy) maps to the dst-space point +// (m00*sx + m01*sy + m02, m10*sx + m11*sy + m12). +// +// A Transformer is safe to use concurrently. +type Transformer interface { + Transform(dst Image, m f64.Aff3, src image.Image, sr image.Rectangle, op Op, opts *Options) +} + +// Options are optional parameters to Copy, Scale and Transform. +// +// A nil *Options means to use the default (zero) values of each field. +type Options struct { + // Masks limit what parts of the dst image are drawn to and what parts of + // the src image are drawn from. + // + // A dst or src mask image having a zero alpha (transparent) pixel value in + // the respective coordinate space means that dst pixel is entirely + // unaffected or that src pixel is considered transparent black. A full + // alpha (opaque) value means that the dst pixel is maximally affected or + // the src pixel contributes maximally. The default values, nil, are + // equivalent to fully opaque, infinitely large mask images. + // + // The DstMask is otherwise known as a clip mask, and its pixels map 1:1 to + // the dst image's pixels. DstMaskP in DstMask space corresponds to + // image.Point{X:0, Y:0} in dst space. For example, when limiting + // repainting to a 'dirty rectangle', use that image.Rectangle and a zero + // image.Point as the DstMask and DstMaskP. + // + // The SrcMask's pixels map 1:1 to the src image's pixels. SrcMaskP in + // SrcMask space corresponds to image.Point{X:0, Y:0} in src space. For + // example, when drawing font glyphs in a uniform color, use an + // *image.Uniform as the src, and use the glyph atlas image and the + // per-glyph offset as SrcMask and SrcMaskP: + // Copy(dst, dp, image.NewUniform(color), image.Rect(0, 0, glyphWidth, glyphHeight), &Options{ + // SrcMask: glyphAtlas, + // SrcMaskP: glyphOffset, + // }) + DstMask image.Image + DstMaskP image.Point + SrcMask image.Image + SrcMaskP image.Point + + // TODO: a smooth vs sharp edges option, for arbitrary rotations? +} + +// Interpolator is an interpolation algorithm, when dst and src pixels don't +// have a 1:1 correspondence. +// +// Of the interpolators provided by this package: +// - NearestNeighbor is fast but usually looks worst. +// - CatmullRom is slow but usually looks best. +// - ApproxBiLinear has reasonable speed and quality. +// +// The time taken depends on the size of dr. For kernel interpolators, the +// speed also depends on the size of sr, and so are often slower than +// non-kernel interpolators, especially when scaling down. +type Interpolator interface { + Scaler + Transformer +} + +// Kernel is an interpolator that blends source pixels weighted by a symmetric +// kernel function. +type Kernel struct { + // Support is the kernel support and must be >= 0. At(t) is assumed to be + // zero when t >= Support. + Support float64 + // At is the kernel function. It will only be called with t in the + // range [0, Support). + At func(t float64) float64 +} + +// Scale implements the Scaler interface. +func (q *Kernel) Scale(dst Image, dr image.Rectangle, src image.Image, sr image.Rectangle, op Op, opts *Options) { + q.newScaler(dr.Dx(), dr.Dy(), sr.Dx(), sr.Dy(), false).Scale(dst, dr, src, sr, op, opts) +} + +// NewScaler returns a Scaler that is optimized for scaling multiple times with +// the same fixed destination and source width and height. +func (q *Kernel) NewScaler(dw, dh, sw, sh int) Scaler { + return q.newScaler(dw, dh, sw, sh, true) +} + +func (q *Kernel) newScaler(dw, dh, sw, sh int, usePool bool) Scaler { + z := &kernelScaler{ + kernel: q, + dw: int32(dw), + dh: int32(dh), + sw: int32(sw), + sh: int32(sh), + horizontal: newDistrib(q, int32(dw), int32(sw)), + vertical: newDistrib(q, int32(dh), int32(sh)), + } + if usePool { + z.pool.New = func() interface{} { + tmp := z.makeTmpBuf() + return &tmp + } + } + return z +} + +var ( + // NearestNeighbor is the nearest neighbor interpolator. It is very fast, + // but usually gives very low quality results. When scaling up, the result + // will look 'blocky'. + NearestNeighbor = Interpolator(nnInterpolator{}) + + // ApproxBiLinear is a mixture of the nearest neighbor and bi-linear + // interpolators. It is fast, but usually gives medium quality results. + // + // It implements bi-linear interpolation when upscaling and a bi-linear + // blend of the 4 nearest neighbor pixels when downscaling. This yields + // nicer quality than nearest neighbor interpolation when upscaling, but + // the time taken is independent of the number of source pixels, unlike the + // bi-linear interpolator. When downscaling a large image, the performance + // difference can be significant. + ApproxBiLinear = Interpolator(ablInterpolator{}) + + // BiLinear is the tent kernel. It is slow, but usually gives high quality + // results. + BiLinear = &Kernel{1, func(t float64) float64 { + return 1 - t + }} + + // CatmullRom is the Catmull-Rom kernel. It is very slow, but usually gives + // very high quality results. + // + // It is an instance of the more general cubic BC-spline kernel with parameters + // B=0 and C=0.5. See Mitchell and Netravali, "Reconstruction Filters in + // Computer Graphics", Computer Graphics, Vol. 22, No. 4, pp. 221-228. + CatmullRom = &Kernel{2, func(t float64) float64 { + if t < 1 { + return (1.5*t-2.5)*t*t + 1 + } + return ((-0.5*t+2.5)*t-4)*t + 2 + }} + + // TODO: a Kaiser-Bessel kernel? +) + +type nnInterpolator struct{} + +type ablInterpolator struct{} + +type kernelScaler struct { + kernel *Kernel + dw, dh, sw, sh int32 + horizontal, vertical distrib + pool sync.Pool +} + +func (z *kernelScaler) makeTmpBuf() [][4]float64 { + return make([][4]float64, z.dw*z.sh) +} + +// source is a range of contribs, their inverse total weight, and that ITW +// divided by 0xffff. +type source struct { + i, j int32 + invTotalWeight float64 + invTotalWeightFFFF float64 +} + +// contrib is the weight of a column or row. +type contrib struct { + coord int32 + weight float64 +} + +// distrib measures how source pixels are distributed over destination pixels. +type distrib struct { + // sources are what contribs each column or row in the source image owns, + // and the total weight of those contribs. + sources []source + // contribs are the contributions indexed by sources[s].i and sources[s].j. + contribs []contrib +} + +// newDistrib returns a distrib that distributes sw source columns (or rows) +// over dw destination columns (or rows). +func newDistrib(q *Kernel, dw, sw int32) distrib { + scale := float64(sw) / float64(dw) + halfWidth, kernelArgScale := q.Support, 1.0 + // When shrinking, broaden the effective kernel support so that we still + // visit every source pixel. + if scale > 1 { + halfWidth *= scale + kernelArgScale = 1 / scale + } + + // Make the sources slice, one source for each column or row, and temporarily + // appropriate its elements' fields so that invTotalWeight is the scaled + // coordinate of the source column or row, and i and j are the lower and + // upper bounds of the range of destination columns or rows affected by the + // source column or row. + n, sources := int32(0), make([]source, dw) + for x := range sources { + center := (float64(x)+0.5)*scale - 0.5 + i := int32(math.Floor(center - halfWidth)) + if i < 0 { + i = 0 + } + j := int32(math.Ceil(center + halfWidth)) + if j > sw { + j = sw + if j < i { + j = i + } + } + sources[x] = source{i: i, j: j, invTotalWeight: center} + n += j - i + } + + contribs := make([]contrib, 0, n) + for k, b := range sources { + totalWeight := 0.0 + l := int32(len(contribs)) + for coord := b.i; coord < b.j; coord++ { + t := abs((b.invTotalWeight - float64(coord)) * kernelArgScale) + if t >= q.Support { + continue + } + weight := q.At(t) + if weight == 0 { + continue + } + totalWeight += weight + contribs = append(contribs, contrib{coord, weight}) + } + totalWeight = 1 / totalWeight + sources[k] = source{ + i: l, + j: int32(len(contribs)), + invTotalWeight: totalWeight, + invTotalWeightFFFF: totalWeight / 0xffff, + } + } + + return distrib{sources, contribs} +} + +// abs is like math.Abs, but it doesn't care about negative zero, infinities or +// NaNs. +func abs(f float64) float64 { + if f < 0 { + f = -f + } + return f +} + +// ftou converts the range [0.0, 1.0] to [0, 0xffff]. +func ftou(f float64) uint16 { + i := int32(0xffff*f + 0.5) + if i > 0xffff { + return 0xffff + } + if i > 0 { + return uint16(i) + } + return 0 +} + +// fffftou converts the range [0.0, 65535.0] to [0, 0xffff]. +func fffftou(f float64) uint16 { + i := int32(f + 0.5) + if i > 0xffff { + return 0xffff + } + if i > 0 { + return uint16(i) + } + return 0 +} + +// invert returns the inverse of m. +// +// TODO: move this into the f64 package, once we work out the convention for +// matrix methods in that package: do they modify the receiver, take a dst +// pointer argument, or return a new value? +func invert(m *f64.Aff3) f64.Aff3 { + m00 := +m[3*1+1] + m01 := -m[3*0+1] + m02 := +m[3*1+2]*m[3*0+1] - m[3*1+1]*m[3*0+2] + m10 := -m[3*1+0] + m11 := +m[3*0+0] + m12 := +m[3*1+0]*m[3*0+2] - m[3*1+2]*m[3*0+0] + + det := m00*m11 - m10*m01 + + return f64.Aff3{ + m00 / det, + m01 / det, + m02 / det, + m10 / det, + m11 / det, + m12 / det, + } +} + +func matMul(p, q *f64.Aff3) f64.Aff3 { + return f64.Aff3{ + p[3*0+0]*q[3*0+0] + p[3*0+1]*q[3*1+0], + p[3*0+0]*q[3*0+1] + p[3*0+1]*q[3*1+1], + p[3*0+0]*q[3*0+2] + p[3*0+1]*q[3*1+2] + p[3*0+2], + p[3*1+0]*q[3*0+0] + p[3*1+1]*q[3*1+0], + p[3*1+0]*q[3*0+1] + p[3*1+1]*q[3*1+1], + p[3*1+0]*q[3*0+2] + p[3*1+1]*q[3*1+2] + p[3*1+2], + } +} + +// transformRect returns a rectangle dr that contains sr transformed by s2d. +func transformRect(s2d *f64.Aff3, sr *image.Rectangle) (dr image.Rectangle) { + ps := [...]image.Point{ + {sr.Min.X, sr.Min.Y}, + {sr.Max.X, sr.Min.Y}, + {sr.Min.X, sr.Max.Y}, + {sr.Max.X, sr.Max.Y}, + } + for i, p := range ps { + sxf := float64(p.X) + syf := float64(p.Y) + dx := int(math.Floor(s2d[0]*sxf + s2d[1]*syf + s2d[2])) + dy := int(math.Floor(s2d[3]*sxf + s2d[4]*syf + s2d[5])) + + // The +1 adjustments below are because an image.Rectangle is inclusive + // on the low end but exclusive on the high end. + + if i == 0 { + dr = image.Rectangle{ + Min: image.Point{dx + 0, dy + 0}, + Max: image.Point{dx + 1, dy + 1}, + } + continue + } + + if dr.Min.X > dx { + dr.Min.X = dx + } + dx++ + if dr.Max.X < dx { + dr.Max.X = dx + } + + if dr.Min.Y > dy { + dr.Min.Y = dy + } + dy++ + if dr.Max.Y < dy { + dr.Max.Y = dy + } + } + return dr +} + +func clipAffectedDestRect(adr image.Rectangle, dstMask image.Image, dstMaskP image.Point) (image.Rectangle, image.Image) { + if dstMask == nil { + return adr, nil + } + if r, ok := dstMask.(image.Rectangle); ok { + return adr.Intersect(r.Sub(dstMaskP)), nil + } + // TODO: clip to dstMask.Bounds() if the color model implies that out-of-bounds means 0 alpha? + return adr, dstMask +} + +func transform_Uniform(dst Image, dr, adr image.Rectangle, d2s *f64.Aff3, src *image.Uniform, sr image.Rectangle, bias image.Point, op Op) { + switch op { + case Over: + switch dst := dst.(type) { + case *image.RGBA: + pr, pg, pb, pa := src.C.RGBA() + pa1 := (0xffff - pa) * 0x101 + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := dst.PixOffset(dr.Min.X+adr.Min.X, dr.Min.Y+int(dy)) + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + dst.Pix[d+0] = uint8((uint32(dst.Pix[d+0])*pa1/0xffff + pr) >> 8) + dst.Pix[d+1] = uint8((uint32(dst.Pix[d+1])*pa1/0xffff + pg) >> 8) + dst.Pix[d+2] = uint8((uint32(dst.Pix[d+2])*pa1/0xffff + pb) >> 8) + dst.Pix[d+3] = uint8((uint32(dst.Pix[d+3])*pa1/0xffff + pa) >> 8) + } + } + + default: + pr, pg, pb, pa := src.C.RGBA() + pa1 := 0xffff - pa + dstColorRGBA64 := &color.RGBA64{} + dstColor := color.Color(dstColorRGBA64) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + qr, qg, qb, qa := dst.At(dr.Min.X+int(dx), dr.Min.Y+int(dy)).RGBA() + dstColorRGBA64.R = uint16(qr*pa1/0xffff + pr) + dstColorRGBA64.G = uint16(qg*pa1/0xffff + pg) + dstColorRGBA64.B = uint16(qb*pa1/0xffff + pb) + dstColorRGBA64.A = uint16(qa*pa1/0xffff + pa) + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } + + case Src: + switch dst := dst.(type) { + case *image.RGBA: + pr, pg, pb, pa := src.C.RGBA() + pr8 := uint8(pr >> 8) + pg8 := uint8(pg >> 8) + pb8 := uint8(pb >> 8) + pa8 := uint8(pa >> 8) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + d := dst.PixOffset(dr.Min.X+adr.Min.X, dr.Min.Y+int(dy)) + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx, d = dx+1, d+4 { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + dst.Pix[d+0] = pr8 + dst.Pix[d+1] = pg8 + dst.Pix[d+2] = pb8 + dst.Pix[d+3] = pa8 + } + } + + default: + pr, pg, pb, pa := src.C.RGBA() + dstColorRGBA64 := &color.RGBA64{ + uint16(pr), + uint16(pg), + uint16(pb), + uint16(pa), + } + dstColor := color.Color(dstColorRGBA64) + + for dy := int32(adr.Min.Y); dy < int32(adr.Max.Y); dy++ { + dyf := float64(dr.Min.Y+int(dy)) + 0.5 + for dx := int32(adr.Min.X); dx < int32(adr.Max.X); dx++ { + dxf := float64(dr.Min.X+int(dx)) + 0.5 + sx0 := int(d2s[0]*dxf+d2s[1]*dyf+d2s[2]) + bias.X + sy0 := int(d2s[3]*dxf+d2s[4]*dyf+d2s[5]) + bias.Y + if !(image.Point{sx0, sy0}).In(sr) { + continue + } + dst.Set(dr.Min.X+int(dx), dr.Min.Y+int(dy), dstColor) + } + } + } + } +} + +func opaque(m image.Image) bool { + o, ok := m.(interface { + Opaque() bool + }) + return ok && o.Opaque() +} diff --git a/src/server/vendor/golang.org/x/image/font/font.go b/src/server/vendor/golang.org/x/image/font/font.go new file mode 100644 index 00000000..d1a75350 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/font/font.go @@ -0,0 +1,373 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package font defines an interface for font faces, for drawing text on an +// image. +// +// Other packages provide font face implementations. For example, a truetype +// package would provide one based on .ttf font files. +package font // import "golang.org/x/image/font" + +import ( + "image" + "image/draw" + "io" + "unicode/utf8" + + "golang.org/x/image/math/fixed" +) + +// TODO: who is responsible for caches (glyph images, glyph indices, kerns)? +// The Drawer or the Face? + +// Face is a font face. Its glyphs are often derived from a font file, such as +// "Comic_Sans_MS.ttf", but a face has a specific size, style, weight and +// hinting. For example, the 12pt and 18pt versions of Comic Sans are two +// different faces, even if derived from the same font file. +// +// A Face is not safe for concurrent use by multiple goroutines, as its methods +// may re-use implementation-specific caches and mask image buffers. +// +// To create a Face, look to other packages that implement specific font file +// formats. +type Face interface { + io.Closer + + // Glyph returns the draw.DrawMask parameters (dr, mask, maskp) to draw r's + // glyph at the sub-pixel destination location dot, and that glyph's + // advance width. + // + // It returns !ok if the face does not contain a glyph for r. + // + // The contents of the mask image returned by one Glyph call may change + // after the next Glyph call. Callers that want to cache the mask must make + // a copy. + Glyph(dot fixed.Point26_6, r rune) ( + dr image.Rectangle, mask image.Image, maskp image.Point, advance fixed.Int26_6, ok bool) + + // GlyphBounds returns the bounding box of r's glyph, drawn at a dot equal + // to the origin, and that glyph's advance width. + // + // It returns !ok if the face does not contain a glyph for r. + // + // The glyph's ascent and descent are equal to -bounds.Min.Y and + // +bounds.Max.Y. The glyph's left-side and right-side bearings are equal + // to bounds.Min.X and advance-bounds.Max.X. A visual depiction of what + // these metrics are is at + // https://developer.apple.com/library/archive/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Art/glyphterms_2x.png + GlyphBounds(r rune) (bounds fixed.Rectangle26_6, advance fixed.Int26_6, ok bool) + + // GlyphAdvance returns the advance width of r's glyph. + // + // It returns !ok if the face does not contain a glyph for r. + GlyphAdvance(r rune) (advance fixed.Int26_6, ok bool) + + // Kern returns the horizontal adjustment for the kerning pair (r0, r1). A + // positive kern means to move the glyphs further apart. + Kern(r0, r1 rune) fixed.Int26_6 + + // Metrics returns the metrics for this Face. + Metrics() Metrics + + // TODO: ColoredGlyph for various emoji? + // TODO: Ligatures? Shaping? +} + +// Metrics holds the metrics for a Face. A visual depiction is at +// https://developer.apple.com/library/mac/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Art/glyph_metrics_2x.png +type Metrics struct { + // Height is the recommended amount of vertical space between two lines of + // text. + Height fixed.Int26_6 + + // Ascent is the distance from the top of a line to its baseline. + Ascent fixed.Int26_6 + + // Descent is the distance from the bottom of a line to its baseline. The + // value is typically positive, even though a descender goes below the + // baseline. + Descent fixed.Int26_6 + + // XHeight is the distance from the top of non-ascending lowercase letters + // to the baseline. + XHeight fixed.Int26_6 + + // CapHeight is the distance from the top of uppercase letters to the + // baseline. + CapHeight fixed.Int26_6 + + // CaretSlope is the slope of a caret as a vector with the Y axis pointing up. + // The slope {0, 1} is the vertical caret. + CaretSlope image.Point +} + +// Drawer draws text on a destination image. +// +// A Drawer is not safe for concurrent use by multiple goroutines, since its +// Face is not. +type Drawer struct { + // Dst is the destination image. + Dst draw.Image + // Src is the source image. + Src image.Image + // Face provides the glyph mask images. + Face Face + // Dot is the baseline location to draw the next glyph. The majority of the + // affected pixels will be above and to the right of the dot, but some may + // be below or to the left. For example, drawing a 'j' in an italic face + // may affect pixels below and to the left of the dot. + Dot fixed.Point26_6 + + // TODO: Clip image.Image? + // TODO: SrcP image.Point for Src images other than *image.Uniform? How + // does it get updated during DrawString? +} + +// TODO: should DrawString return the last rune drawn, so the next DrawString +// call can kern beforehand? Or should that be the responsibility of the caller +// if they really want to do that, since they have to explicitly shift d.Dot +// anyway? What if ligatures span more than two runes? What if grapheme +// clusters span multiple runes? +// +// TODO: do we assume that the input is in any particular Unicode Normalization +// Form? +// +// TODO: have DrawRunes(s []rune)? DrawRuneReader(io.RuneReader)?? If we take +// io.RuneReader, we can't assume that we can rewind the stream. +// +// TODO: how does this work with line breaking: drawing text up until a +// vertical line? Should DrawString return the number of runes drawn? + +// DrawBytes draws s at the dot and advances the dot's location. +// +// It is equivalent to DrawString(string(s)) but may be more efficient. +func (d *Drawer) DrawBytes(s []byte) { + prevC := rune(-1) + for len(s) > 0 { + c, size := utf8.DecodeRune(s) + s = s[size:] + if prevC >= 0 { + d.Dot.X += d.Face.Kern(prevC, c) + } + dr, mask, maskp, advance, ok := d.Face.Glyph(d.Dot, c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + draw.DrawMask(d.Dst, dr, d.Src, image.Point{}, mask, maskp, draw.Over) + d.Dot.X += advance + prevC = c + } +} + +// DrawString draws s at the dot and advances the dot's location. +func (d *Drawer) DrawString(s string) { + prevC := rune(-1) + for _, c := range s { + if prevC >= 0 { + d.Dot.X += d.Face.Kern(prevC, c) + } + dr, mask, maskp, advance, ok := d.Face.Glyph(d.Dot, c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + draw.DrawMask(d.Dst, dr, d.Src, image.Point{}, mask, maskp, draw.Over) + d.Dot.X += advance + prevC = c + } +} + +// BoundBytes returns the bounding box of s, drawn at the drawer dot, as well as +// the advance. +// +// It is equivalent to BoundBytes(string(s)) but may be more efficient. +func (d *Drawer) BoundBytes(s []byte) (bounds fixed.Rectangle26_6, advance fixed.Int26_6) { + bounds, advance = BoundBytes(d.Face, s) + bounds.Min = bounds.Min.Add(d.Dot) + bounds.Max = bounds.Max.Add(d.Dot) + return +} + +// BoundString returns the bounding box of s, drawn at the drawer dot, as well +// as the advance. +func (d *Drawer) BoundString(s string) (bounds fixed.Rectangle26_6, advance fixed.Int26_6) { + bounds, advance = BoundString(d.Face, s) + bounds.Min = bounds.Min.Add(d.Dot) + bounds.Max = bounds.Max.Add(d.Dot) + return +} + +// MeasureBytes returns how far dot would advance by drawing s. +// +// It is equivalent to MeasureString(string(s)) but may be more efficient. +func (d *Drawer) MeasureBytes(s []byte) (advance fixed.Int26_6) { + return MeasureBytes(d.Face, s) +} + +// MeasureString returns how far dot would advance by drawing s. +func (d *Drawer) MeasureString(s string) (advance fixed.Int26_6) { + return MeasureString(d.Face, s) +} + +// BoundBytes returns the bounding box of s with f, drawn at a dot equal to the +// origin, as well as the advance. +// +// It is equivalent to BoundString(string(s)) but may be more efficient. +func BoundBytes(f Face, s []byte) (bounds fixed.Rectangle26_6, advance fixed.Int26_6) { + prevC := rune(-1) + for len(s) > 0 { + c, size := utf8.DecodeRune(s) + s = s[size:] + if prevC >= 0 { + advance += f.Kern(prevC, c) + } + b, a, ok := f.GlyphBounds(c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + b.Min.X += advance + b.Max.X += advance + bounds = bounds.Union(b) + advance += a + prevC = c + } + return +} + +// BoundString returns the bounding box of s with f, drawn at a dot equal to the +// origin, as well as the advance. +func BoundString(f Face, s string) (bounds fixed.Rectangle26_6, advance fixed.Int26_6) { + prevC := rune(-1) + for _, c := range s { + if prevC >= 0 { + advance += f.Kern(prevC, c) + } + b, a, ok := f.GlyphBounds(c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + b.Min.X += advance + b.Max.X += advance + bounds = bounds.Union(b) + advance += a + prevC = c + } + return +} + +// MeasureBytes returns how far dot would advance by drawing s with f. +// +// It is equivalent to MeasureString(string(s)) but may be more efficient. +func MeasureBytes(f Face, s []byte) (advance fixed.Int26_6) { + prevC := rune(-1) + for len(s) > 0 { + c, size := utf8.DecodeRune(s) + s = s[size:] + if prevC >= 0 { + advance += f.Kern(prevC, c) + } + a, ok := f.GlyphAdvance(c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + advance += a + prevC = c + } + return advance +} + +// MeasureString returns how far dot would advance by drawing s with f. +func MeasureString(f Face, s string) (advance fixed.Int26_6) { + prevC := rune(-1) + for _, c := range s { + if prevC >= 0 { + advance += f.Kern(prevC, c) + } + a, ok := f.GlyphAdvance(c) + if !ok { + // TODO: is falling back on the U+FFFD glyph the responsibility of + // the Drawer or the Face? + // TODO: set prevC = '\ufffd'? + continue + } + advance += a + prevC = c + } + return advance +} + +// Hinting selects how to quantize a vector font's glyph nodes. +// +// Not all fonts support hinting. +type Hinting int + +const ( + HintingNone Hinting = iota + HintingVertical + HintingFull +) + +// Stretch selects a normal, condensed, or expanded face. +// +// Not all fonts support stretches. +type Stretch int + +const ( + StretchUltraCondensed Stretch = -4 + StretchExtraCondensed Stretch = -3 + StretchCondensed Stretch = -2 + StretchSemiCondensed Stretch = -1 + StretchNormal Stretch = +0 + StretchSemiExpanded Stretch = +1 + StretchExpanded Stretch = +2 + StretchExtraExpanded Stretch = +3 + StretchUltraExpanded Stretch = +4 +) + +// Style selects a normal, italic, or oblique face. +// +// Not all fonts support styles. +type Style int + +const ( + StyleNormal Style = iota + StyleItalic + StyleOblique +) + +// Weight selects a normal, light or bold face. +// +// Not all fonts support weights. +// +// The named Weight constants (e.g. WeightBold) correspond to CSS' common +// weight names (e.g. "Bold"), but the numerical values differ, so that in Go, +// the zero value means to use a normal weight. For the CSS names and values, +// see https://developer.mozilla.org/en/docs/Web/CSS/font-weight +type Weight int + +const ( + WeightThin Weight = -3 // CSS font-weight value 100. + WeightExtraLight Weight = -2 // CSS font-weight value 200. + WeightLight Weight = -1 // CSS font-weight value 300. + WeightNormal Weight = +0 // CSS font-weight value 400. + WeightMedium Weight = +1 // CSS font-weight value 500. + WeightSemiBold Weight = +2 // CSS font-weight value 600. + WeightBold Weight = +3 // CSS font-weight value 700. + WeightExtraBold Weight = +4 // CSS font-weight value 800. + WeightBlack Weight = +5 // CSS font-weight value 900. +) diff --git a/src/server/vendor/golang.org/x/image/math/f64/f64.go b/src/server/vendor/golang.org/x/image/math/f64/f64.go new file mode 100644 index 00000000..a1f7fc0e --- /dev/null +++ b/src/server/vendor/golang.org/x/image/math/f64/f64.go @@ -0,0 +1,37 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package f64 implements float64 vector and matrix types. +package f64 // import "golang.org/x/image/math/f64" + +// Vec2 is a 2-element vector. +type Vec2 [2]float64 + +// Vec3 is a 3-element vector. +type Vec3 [3]float64 + +// Vec4 is a 4-element vector. +type Vec4 [4]float64 + +// Mat3 is a 3x3 matrix in row major order. +// +// m[3*r + c] is the element in the r'th row and c'th column. +type Mat3 [9]float64 + +// Mat4 is a 4x4 matrix in row major order. +// +// m[4*r + c] is the element in the r'th row and c'th column. +type Mat4 [16]float64 + +// Aff3 is a 3x3 affine transformation matrix in row major order, where the +// bottom row is implicitly [0 0 1]. +// +// m[3*r + c] is the element in the r'th row and c'th column. +type Aff3 [6]float64 + +// Aff4 is a 4x4 affine transformation matrix in row major order, where the +// bottom row is implicitly [0 0 0 1]. +// +// m[4*r + c] is the element in the r'th row and c'th column. +type Aff4 [12]float64 diff --git a/src/server/vendor/golang.org/x/image/math/fixed/fixed.go b/src/server/vendor/golang.org/x/image/math/fixed/fixed.go new file mode 100644 index 00000000..3d916638 --- /dev/null +++ b/src/server/vendor/golang.org/x/image/math/fixed/fixed.go @@ -0,0 +1,410 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fixed implements fixed-point integer types. +package fixed // import "golang.org/x/image/math/fixed" + +import ( + "fmt" +) + +// TODO: implement fmt.Formatter for %f and %g. + +// I returns the integer value i as an Int26_6. +// +// For example, passing the integer value 2 yields Int26_6(128). +func I(i int) Int26_6 { + return Int26_6(i << 6) +} + +// Int26_6 is a signed 26.6 fixed-point number. +// +// The integer part ranges from -33554432 to 33554431, inclusive. The +// fractional part has 6 bits of precision. +// +// For example, the number one-and-a-quarter is Int26_6(1<<6 + 1<<4). +type Int26_6 int32 + +// String returns a human-readable representation of a 26.6 fixed-point number. +// +// For example, the number one-and-a-quarter becomes "1:16". +func (x Int26_6) String() string { + const shift, mask = 6, 1<<6 - 1 + if x >= 0 { + return fmt.Sprintf("%d:%02d", int32(x>>shift), int32(x&mask)) + } + x = -x + if x >= 0 { + return fmt.Sprintf("-%d:%02d", int32(x>>shift), int32(x&mask)) + } + return "-33554432:00" // The minimum value is -(1<<25). +} + +// Floor returns the greatest integer value less than or equal to x. +// +// Its return type is int, not Int26_6. +func (x Int26_6) Floor() int { return int((x + 0x00) >> 6) } + +// Round returns the nearest integer value to x. Ties are rounded up. +// +// Its return type is int, not Int26_6. +func (x Int26_6) Round() int { return int((x + 0x20) >> 6) } + +// Ceil returns the least integer value greater than or equal to x. +// +// Its return type is int, not Int26_6. +func (x Int26_6) Ceil() int { return int((x + 0x3f) >> 6) } + +// Mul returns x*y in 26.6 fixed-point arithmetic. +func (x Int26_6) Mul(y Int26_6) Int26_6 { + return Int26_6((int64(x)*int64(y) + 1<<5) >> 6) +} + +// Int52_12 is a signed 52.12 fixed-point number. +// +// The integer part ranges from -2251799813685248 to 2251799813685247, +// inclusive. The fractional part has 12 bits of precision. +// +// For example, the number one-and-a-quarter is Int52_12(1<<12 + 1<<10). +type Int52_12 int64 + +// String returns a human-readable representation of a 52.12 fixed-point +// number. +// +// For example, the number one-and-a-quarter becomes "1:1024". +func (x Int52_12) String() string { + const shift, mask = 12, 1<<12 - 1 + if x >= 0 { + return fmt.Sprintf("%d:%04d", int64(x>>shift), int64(x&mask)) + } + x = -x + if x >= 0 { + return fmt.Sprintf("-%d:%04d", int64(x>>shift), int64(x&mask)) + } + return "-2251799813685248:0000" // The minimum value is -(1<<51). +} + +// Floor returns the greatest integer value less than or equal to x. +// +// Its return type is int, not Int52_12. +func (x Int52_12) Floor() int { return int((x + 0x000) >> 12) } + +// Round returns the nearest integer value to x. Ties are rounded up. +// +// Its return type is int, not Int52_12. +func (x Int52_12) Round() int { return int((x + 0x800) >> 12) } + +// Ceil returns the least integer value greater than or equal to x. +// +// Its return type is int, not Int52_12. +func (x Int52_12) Ceil() int { return int((x + 0xfff) >> 12) } + +// Mul returns x*y in 52.12 fixed-point arithmetic. +func (x Int52_12) Mul(y Int52_12) Int52_12 { + const M, N = 52, 12 + lo, hi := muli64(int64(x), int64(y)) + ret := Int52_12(hi<>N) + ret += Int52_12((lo >> (N - 1)) & 1) // Round to nearest, instead of rounding down. + return ret +} + +// muli64 multiplies two int64 values, returning the 128-bit signed integer +// result as two uint64 values. +// +// This implementation is similar to $GOROOT/src/runtime/softfloat64.go's mullu +// function, which is in turn adapted from Hacker's Delight. +func muli64(u, v int64) (lo, hi uint64) { + const ( + s = 32 + mask = 1<> s) + u0 := uint64(u & mask) + v1 := uint64(v >> s) + v0 := uint64(v & mask) + + w0 := u0 * v0 + t := u1*v0 + w0>>s + w1 := t & mask + w2 := uint64(int64(t) >> s) + w1 += u0 * v1 + return uint64(u) * uint64(v), u1*v1 + w2 + uint64(int64(w1)>>s) +} + +// P returns the integer values x and y as a Point26_6. +// +// For example, passing the integer values (2, -3) yields Point26_6{128, -192}. +func P(x, y int) Point26_6 { + return Point26_6{Int26_6(x << 6), Int26_6(y << 6)} +} + +// Point26_6 is a 26.6 fixed-point coordinate pair. +// +// It is analogous to the image.Point type in the standard library. +type Point26_6 struct { + X, Y Int26_6 +} + +// Add returns the vector p+q. +func (p Point26_6) Add(q Point26_6) Point26_6 { + return Point26_6{p.X + q.X, p.Y + q.Y} +} + +// Sub returns the vector p-q. +func (p Point26_6) Sub(q Point26_6) Point26_6 { + return Point26_6{p.X - q.X, p.Y - q.Y} +} + +// Mul returns the vector p*k. +func (p Point26_6) Mul(k Int26_6) Point26_6 { + return Point26_6{p.X * k / 64, p.Y * k / 64} +} + +// Div returns the vector p/k. +func (p Point26_6) Div(k Int26_6) Point26_6 { + return Point26_6{p.X * 64 / k, p.Y * 64 / k} +} + +// In returns whether p is in r. +func (p Point26_6) In(r Rectangle26_6) bool { + return r.Min.X <= p.X && p.X < r.Max.X && r.Min.Y <= p.Y && p.Y < r.Max.Y +} + +// Point52_12 is a 52.12 fixed-point coordinate pair. +// +// It is analogous to the image.Point type in the standard library. +type Point52_12 struct { + X, Y Int52_12 +} + +// Add returns the vector p+q. +func (p Point52_12) Add(q Point52_12) Point52_12 { + return Point52_12{p.X + q.X, p.Y + q.Y} +} + +// Sub returns the vector p-q. +func (p Point52_12) Sub(q Point52_12) Point52_12 { + return Point52_12{p.X - q.X, p.Y - q.Y} +} + +// Mul returns the vector p*k. +func (p Point52_12) Mul(k Int52_12) Point52_12 { + return Point52_12{p.X * k / 4096, p.Y * k / 4096} +} + +// Div returns the vector p/k. +func (p Point52_12) Div(k Int52_12) Point52_12 { + return Point52_12{p.X * 4096 / k, p.Y * 4096 / k} +} + +// In returns whether p is in r. +func (p Point52_12) In(r Rectangle52_12) bool { + return r.Min.X <= p.X && p.X < r.Max.X && r.Min.Y <= p.Y && p.Y < r.Max.Y +} + +// R returns the integer values minX, minY, maxX, maxY as a Rectangle26_6. +// +// For example, passing the integer values (0, 1, 2, 3) yields +// Rectangle26_6{Point26_6{0, 64}, Point26_6{128, 192}}. +// +// Like the image.Rect function in the standard library, the returned rectangle +// has minimum and maximum coordinates swapped if necessary so that it is +// well-formed. +func R(minX, minY, maxX, maxY int) Rectangle26_6 { + if minX > maxX { + minX, maxX = maxX, minX + } + if minY > maxY { + minY, maxY = maxY, minY + } + return Rectangle26_6{ + Point26_6{ + Int26_6(minX << 6), + Int26_6(minY << 6), + }, + Point26_6{ + Int26_6(maxX << 6), + Int26_6(maxY << 6), + }, + } +} + +// Rectangle26_6 is a 26.6 fixed-point coordinate rectangle. The Min bound is +// inclusive and the Max bound is exclusive. It is well-formed if Min.X <= +// Max.X and likewise for Y. +// +// It is analogous to the image.Rectangle type in the standard library. +type Rectangle26_6 struct { + Min, Max Point26_6 +} + +// Add returns the rectangle r translated by p. +func (r Rectangle26_6) Add(p Point26_6) Rectangle26_6 { + return Rectangle26_6{ + Point26_6{r.Min.X + p.X, r.Min.Y + p.Y}, + Point26_6{r.Max.X + p.X, r.Max.Y + p.Y}, + } +} + +// Sub returns the rectangle r translated by -p. +func (r Rectangle26_6) Sub(p Point26_6) Rectangle26_6 { + return Rectangle26_6{ + Point26_6{r.Min.X - p.X, r.Min.Y - p.Y}, + Point26_6{r.Max.X - p.X, r.Max.Y - p.Y}, + } +} + +// Intersect returns the largest rectangle contained by both r and s. If the +// two rectangles do not overlap then the zero rectangle will be returned. +func (r Rectangle26_6) Intersect(s Rectangle26_6) Rectangle26_6 { + if r.Min.X < s.Min.X { + r.Min.X = s.Min.X + } + if r.Min.Y < s.Min.Y { + r.Min.Y = s.Min.Y + } + if r.Max.X > s.Max.X { + r.Max.X = s.Max.X + } + if r.Max.Y > s.Max.Y { + r.Max.Y = s.Max.Y + } + // Letting r0 and s0 be the values of r and s at the time that the method + // is called, this next line is equivalent to: + // + // if max(r0.Min.X, s0.Min.X) >= min(r0.Max.X, s0.Max.X) || likewiseForY { etc } + if r.Empty() { + return Rectangle26_6{} + } + return r +} + +// Union returns the smallest rectangle that contains both r and s. +func (r Rectangle26_6) Union(s Rectangle26_6) Rectangle26_6 { + if r.Empty() { + return s + } + if s.Empty() { + return r + } + if r.Min.X > s.Min.X { + r.Min.X = s.Min.X + } + if r.Min.Y > s.Min.Y { + r.Min.Y = s.Min.Y + } + if r.Max.X < s.Max.X { + r.Max.X = s.Max.X + } + if r.Max.Y < s.Max.Y { + r.Max.Y = s.Max.Y + } + return r +} + +// Empty returns whether the rectangle contains no points. +func (r Rectangle26_6) Empty() bool { + return r.Min.X >= r.Max.X || r.Min.Y >= r.Max.Y +} + +// In returns whether every point in r is in s. +func (r Rectangle26_6) In(s Rectangle26_6) bool { + if r.Empty() { + return true + } + // Note that r.Max is an exclusive bound for r, so that r.In(s) + // does not require that r.Max.In(s). + return s.Min.X <= r.Min.X && r.Max.X <= s.Max.X && + s.Min.Y <= r.Min.Y && r.Max.Y <= s.Max.Y +} + +// Rectangle52_12 is a 52.12 fixed-point coordinate rectangle. The Min bound is +// inclusive and the Max bound is exclusive. It is well-formed if Min.X <= +// Max.X and likewise for Y. +// +// It is analogous to the image.Rectangle type in the standard library. +type Rectangle52_12 struct { + Min, Max Point52_12 +} + +// Add returns the rectangle r translated by p. +func (r Rectangle52_12) Add(p Point52_12) Rectangle52_12 { + return Rectangle52_12{ + Point52_12{r.Min.X + p.X, r.Min.Y + p.Y}, + Point52_12{r.Max.X + p.X, r.Max.Y + p.Y}, + } +} + +// Sub returns the rectangle r translated by -p. +func (r Rectangle52_12) Sub(p Point52_12) Rectangle52_12 { + return Rectangle52_12{ + Point52_12{r.Min.X - p.X, r.Min.Y - p.Y}, + Point52_12{r.Max.X - p.X, r.Max.Y - p.Y}, + } +} + +// Intersect returns the largest rectangle contained by both r and s. If the +// two rectangles do not overlap then the zero rectangle will be returned. +func (r Rectangle52_12) Intersect(s Rectangle52_12) Rectangle52_12 { + if r.Min.X < s.Min.X { + r.Min.X = s.Min.X + } + if r.Min.Y < s.Min.Y { + r.Min.Y = s.Min.Y + } + if r.Max.X > s.Max.X { + r.Max.X = s.Max.X + } + if r.Max.Y > s.Max.Y { + r.Max.Y = s.Max.Y + } + // Letting r0 and s0 be the values of r and s at the time that the method + // is called, this next line is equivalent to: + // + // if max(r0.Min.X, s0.Min.X) >= min(r0.Max.X, s0.Max.X) || likewiseForY { etc } + if r.Empty() { + return Rectangle52_12{} + } + return r +} + +// Union returns the smallest rectangle that contains both r and s. +func (r Rectangle52_12) Union(s Rectangle52_12) Rectangle52_12 { + if r.Empty() { + return s + } + if s.Empty() { + return r + } + if r.Min.X > s.Min.X { + r.Min.X = s.Min.X + } + if r.Min.Y > s.Min.Y { + r.Min.Y = s.Min.Y + } + if r.Max.X < s.Max.X { + r.Max.X = s.Max.X + } + if r.Max.Y < s.Max.Y { + r.Max.Y = s.Max.Y + } + return r +} + +// Empty returns whether the rectangle contains no points. +func (r Rectangle52_12) Empty() bool { + return r.Min.X >= r.Max.X || r.Min.Y >= r.Max.Y +} + +// In returns whether every point in r is in s. +func (r Rectangle52_12) In(s Rectangle52_12) bool { + if r.Empty() { + return true + } + // Note that r.Max is an exclusive bound for r, so that r.In(s) + // does not require that r.Max.In(s). + return s.Min.X <= r.Min.X && r.Max.X <= s.Max.X && + s.Min.Y <= r.Min.Y && r.Max.Y <= s.Max.Y +} diff --git a/src/server/vendor/modules.txt b/src/server/vendor/modules.txt index 7b37a7a3..88519ee6 100644 --- a/src/server/vendor/modules.txt +++ b/src/server/vendor/modules.txt @@ -11,6 +11,9 @@ github.com/cespare/xxhash/v2 # github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f ## explicit github.com/dgryski/go-rendezvous +# github.com/dustin/go-humanize v1.0.1 +## explicit; go 1.16 +github.com/dustin/go-humanize # github.com/fsnotify/fsnotify v1.8.0 ## explicit; go 1.17 github.com/fsnotify/fsnotify @@ -18,6 +21,10 @@ github.com/fsnotify/fsnotify/internal # github.com/go-sql-driver/mysql v1.8.1 ## explicit; go 1.18 github.com/go-sql-driver/mysql +# github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 +## explicit +github.com/golang/freetype/raster +github.com/golang/freetype/truetype # github.com/google/go-cmp v0.6.0 ## explicit; go 1.13 # github.com/google/uuid v1.3.1 @@ -117,6 +124,21 @@ github.com/segmentio/kafka-go/protocol/saslhandshake github.com/segmentio/kafka-go/protocol/syncgroup github.com/segmentio/kafka-go/protocol/txnoffsetcommit github.com/segmentio/kafka-go/sasl +# github.com/vicanso/go-charts/v2 v2.6.10 +## explicit; go 1.17 +github.com/vicanso/go-charts/v2 +# github.com/wcharczuk/go-chart/v2 v2.1.0 +## explicit; go 1.15 +github.com/wcharczuk/go-chart/v2 +github.com/wcharczuk/go-chart/v2/drawing +github.com/wcharczuk/go-chart/v2/matrix +github.com/wcharczuk/go-chart/v2/roboto +# golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 +## explicit; go 1.12 +golang.org/x/image/draw +golang.org/x/image/font +golang.org/x/image/math/f64 +golang.org/x/image/math/fixed # golang.org/x/sys v0.13.0 ## explicit; go 1.17 golang.org/x/sys/unix