From 1093212176206eee064b2ecc3fe68fcf03d384e8 Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Wed, 24 Jun 2020 12:34:57 -0400 Subject: [PATCH 1/5] Add test to ensure the StopChannelContext works properly --- lib/stop_context_test.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/stop_context_test.go diff --git a/lib/stop_context_test.go b/lib/stop_context_test.go new file mode 100644 index 0000000000..8512e7dce9 --- /dev/null +++ b/lib/stop_context_test.go @@ -0,0 +1,36 @@ +package lib + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestStopChannelContext(t *testing.T) { + ch := make(chan struct{}) + + ctx := StopChannelContext{StopCh: ch} + + select { + case <-ctx.Done(): + require.FailNow(t, "StopChannelContext should not be done yet") + default: + // do nothing things are good + } + + close(ch) + + select { + case <-ctx.Done(): + // things are good, as we are done + default: + require.FailNow(t, "StopChannelContext should be done") + } + + // issue it twice to ensure that we indefinitely return the + // same value - this is what the context interface says is + // the correct behavior. + require.Equal(t, context.Canceled, ctx.Err()) + require.Equal(t, context.Canceled, ctx.Err()) +} From 15e7b3940ca7ff7e6a476b82734e73fee69de33d Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Wed, 24 Jun 2020 12:36:14 -0400 Subject: [PATCH 2/5] Ensure that retryLoopBackoff can be cancelled We needed to pass a cancellable context into the limiter.Wait instead of context.Background. So I made the func take a context instead of a chan as most places were just passing through a Done chan from a context anyways. Fix go routine leak in the gateway locator --- agent/consul/gateway_locator.go | 5 +++-- agent/consul/leader_connect.go | 23 ++++++++++++++-------- agent/consul/leader_federation_state_ae.go | 2 +- agent/consul/server.go | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/agent/consul/gateway_locator.go b/agent/consul/gateway_locator.go index a988d86332..638c9efdf4 100644 --- a/agent/consul/gateway_locator.go +++ b/agent/consul/gateway_locator.go @@ -1,6 +1,7 @@ package consul import ( + "context" "errors" "math/rand" "sort" @@ -261,9 +262,9 @@ func NewGatewayLocator( var errGatewayLocalStateNotInitialized = errors.New("local state not initialized") -func (g *GatewayLocator) Run(stopCh <-chan struct{}) { +func (g *GatewayLocator) Run(ctx context.Context) { var lastFetchIndex uint64 - retryLoopBackoff(stopCh, func() error { + retryLoopBackoff(ctx, func() error { idx, err := g.runOnce(lastFetchIndex) if err != nil { return err diff --git a/agent/consul/leader_connect.go b/agent/consul/leader_connect.go index c62eb64899..e79ae917a2 100644 --- a/agent/consul/leader_connect.go +++ b/agent/consul/leader_connect.go @@ -651,7 +651,7 @@ func (s *Server) secondaryIntermediateCertRenewalWatch(ctx context.Context) erro case <-ctx.Done(): return nil case <-time.After(structs.IntermediateCertRenewInterval): - retryLoopBackoff(ctx.Done(), func() error { + retryLoopBackoff(ctx, func() error { s.caProviderReconfigurationLock.Lock() defer s.caProviderReconfigurationLock.Unlock() @@ -724,7 +724,7 @@ func (s *Server) secondaryCARootWatch(ctx context.Context) error { connectLogger.Debug("starting Connect CA root replication from primary datacenter", "primary", s.config.PrimaryDatacenter) - retryLoopBackoff(ctx.Done(), func() error { + retryLoopBackoff(ctx, func() error { var roots structs.IndexedCARoots if err := s.forwardDC("ConnectCA.Roots", s.config.PrimaryDatacenter, &args, &roots); err != nil { return fmt.Errorf("Error retrieving the primary datacenter's roots: %v", err) @@ -780,7 +780,7 @@ func (s *Server) replicateIntentions(ctx context.Context) error { connectLogger.Debug("starting Connect intention replication from primary datacenter", "primary", s.config.PrimaryDatacenter) - retryLoopBackoff(ctx.Done(), func() error { + retryLoopBackoff(ctx, func() error { // Always use the latest replication token value in case it changed while looping. args.QueryOptions.Token = s.tokens.ReplicationToken() @@ -832,14 +832,14 @@ func (s *Server) replicateIntentions(ctx context.Context) error { // retryLoopBackoff loops a given function indefinitely, backing off exponentially // upon errors up to a maximum of maxRetryBackoff seconds. -func retryLoopBackoff(stopCh <-chan struct{}, loopFn func() error, errFn func(error)) { +func retryLoopBackoff(ctx context.Context, loopFn func() error, errFn func(error)) { var failedAttempts uint limiter := rate.NewLimiter(loopRateLimit, retryBucketSize) for { // Rate limit how often we run the loop - limiter.Wait(context.Background()) + limiter.Wait(ctx) select { - case <-stopCh: + case <-ctx.Done(): return default: } @@ -850,8 +850,15 @@ func retryLoopBackoff(stopCh <-chan struct{}, loopFn func() error, errFn func(er if err := loopFn(); err != nil { errFn(err) - time.Sleep(retryTime) - continue + + timer := time.NewTimer(retryTime) + select { + case <-ctx.Done(): + timer.Stop() + return + case <-timer.C: + continue + } } // Reset the failed attempts after a successful run. diff --git a/agent/consul/leader_federation_state_ae.go b/agent/consul/leader_federation_state_ae.go index 99cf534cdd..4254e61a35 100644 --- a/agent/consul/leader_federation_state_ae.go +++ b/agent/consul/leader_federation_state_ae.go @@ -42,7 +42,7 @@ func (s *Server) stopFederationStateAntiEntropy() { func (s *Server) federationStateAntiEntropySync(ctx context.Context) error { var lastFetchIndex uint64 - retryLoopBackoff(ctx.Done(), func() error { + retryLoopBackoff(ctx, func() error { if !s.DatacenterSupportsFederationStates() { return nil } diff --git a/agent/consul/server.go b/agent/consul/server.go index 6bef3d130d..1803a594ca 100644 --- a/agent/consul/server.go +++ b/agent/consul/server.go @@ -525,7 +525,7 @@ func NewServerWithOptions(config *Config, options ...ConsulOption) (*Server, err } if s.gatewayLocator != nil { - go s.gatewayLocator.Run(s.shutdownCh) + go s.gatewayLocator.Run(&lib.StopChannelContext{StopCh: s.shutdownCh}) } // Serf and dynamic bind ports From 25a4f3c83b15f90659c78e84f7f1794d2c8a09bb Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Wed, 24 Jun 2020 12:36:54 -0400 Subject: [PATCH 3/5] Allow cancelling blocking queries in response to shutting down. --- agent/agent.go | 13 +++++++++---- agent/consul/rpc.go | 15 ++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index ae89fb936d..d1106c9c48 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -4424,7 +4424,8 @@ func (a *Agent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Dura // If we are not blocking we can skip tracking and allocating - nil WatchSet // is still valid to call Add on and will just be a no op. var ws memdb.WatchSet - var timeout *time.Timer + var ctx context.Context = &lib.StopChannelContext{StopCh: a.shutdownCh} + shouldBlock := false if alwaysBlock || hash != "" { if wait == 0 { @@ -4435,7 +4436,11 @@ func (a *Agent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Dura } // Apply a small amount of jitter to the request. wait += lib.RandomStagger(wait / 16) - timeout = time.NewTimer(wait) + var cancel func() + ctx, cancel = context.WithDeadline(ctx, time.Now().Add(wait)) + defer cancel() + + shouldBlock = true } for { @@ -4453,7 +4458,7 @@ func (a *Agent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Dura // WatchSet immediately returns false which would incorrectly cause this to // loop and repeat again, however we rely on the invariant that ws == nil // IFF timeout == nil in which case the Watch call is never invoked. - if timeout == nil || hash != curHash || ws.Watch(timeout.C) { + if !shouldBlock || hash != curHash || ws.WatchCtx(ctx) != nil { return curHash, curResp, err } // Watch returned false indicating a change was detected, loop and repeat @@ -4465,7 +4470,7 @@ func (a *Agent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Dura if syncPauseCh := a.SyncPausedCh(); syncPauseCh != nil { select { case <-syncPauseCh: - case <-timeout.C: + case <-ctx.Done(): } } } diff --git a/agent/consul/rpc.go b/agent/consul/rpc.go index 6edaa54a4d..938f1ee21e 100644 --- a/agent/consul/rpc.go +++ b/agent/consul/rpc.go @@ -1,6 +1,7 @@ package consul import ( + "context" "crypto/tls" "encoding/binary" "errors" @@ -752,7 +753,9 @@ type queryFn func(memdb.WatchSet, *state.Store) error // blockingQuery is used to process a potentially blocking query operation. func (s *Server) blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta structs.QueryMetaCompat, fn queryFn) error { - var timeout *time.Timer + var cancel func() + var ctx context.Context = &lib.StopChannelContext{StopCh: s.shutdownCh} + var queriesBlocking uint64 var queryTimeout time.Duration @@ -776,9 +779,9 @@ func (s *Server) blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta s // Apply a small amount of jitter to the request. queryTimeout += lib.RandomStagger(queryTimeout / jitterFraction) - // Setup a query timeout. - timeout = time.NewTimer(queryTimeout) - defer timeout.Stop() + // wrap the base context with a deadline + ctx, cancel = context.WithDeadline(ctx, time.Now().Add(queryTimeout)) + defer cancel() // instrument blockingQueries // atomic inc our server's count of in-flight blockingQueries and store the new value @@ -833,7 +836,9 @@ RUN_QUERY: } // block up to the timeout if we don't see anything fresh. if err == nil && minQueryIndex > 0 && queryMeta.GetIndex() <= minQueryIndex { - if expired := ws.Watch(timeout.C); !expired { + if err := ws.WatchCtx(ctx); err == nil { + // a non-nil error only occurs when the context is cancelled + // If a restore may have woken us up then bail out from // the query immediately. This is slightly race-ey since // this might have been interrupted for other reasons, From 29d0cfdd7debf12f36bd4443e7b91ec01a59ddf0 Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Wed, 24 Jun 2020 12:38:56 -0400 Subject: [PATCH 4/5] Fix go routine leak in auto encrypt ca roots tracking --- agent/consul/server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/agent/consul/server.go b/agent/consul/server.go index 1803a594ca..3fd83de20b 100644 --- a/agent/consul/server.go +++ b/agent/consul/server.go @@ -640,6 +640,7 @@ func (s *Server) trackAutoEncryptCARoots() { ws := memdb.NewWatchSet() state := s.fsm.State() ws.Add(state.AbandonCh()) + ws.Add(s.shutdownCh) _, cas, err := state.CARoots(ws) if err != nil { s.logger.Error("Failed to watch AutoEncrypt CARoot", "error", err) From e9835610f35c3c285d1508b278bc9dc41b075344 Mon Sep 17 00:00:00 2001 From: Matt Keeler Date: Wed, 24 Jun 2020 12:40:16 -0400 Subject: [PATCH 5/5] Add a test for go routine leaks This is in its own separate package so that it will be a separate test binary that runs thus isolating the go runtime from other tests and allowing accurate go routine leak checking. This test would ideally use goleak.VerifyTestMain but that will fail 100% of the time due to some architectural things (blocking queries and net/rpc uncancellability). This test is not comprehensive. We should enable/exercise more features and more cluster configurations. However its a start. --- agent/routine-leak-checker/leak_test.go | 135 + go.mod | 4 +- go.sum | 20 + vendor/go.uber.org/goleak/.gitignore | 5 + vendor/go.uber.org/goleak/.travis.yml | 24 + vendor/go.uber.org/goleak/CHANGELOG.md | 17 + vendor/go.uber.org/goleak/LICENSE | 21 + vendor/go.uber.org/goleak/Makefile | 41 + vendor/go.uber.org/goleak/README.md | 70 + vendor/go.uber.org/goleak/doc.go | 22 + vendor/go.uber.org/goleak/glide.yaml | 8 + vendor/go.uber.org/goleak/go.mod | 11 + vendor/go.uber.org/goleak/go.sum | 30 + .../goleak/internal/stack/stacks.go | 155 + vendor/go.uber.org/goleak/leaks.go | 80 + vendor/go.uber.org/goleak/options.go | 152 + vendor/go.uber.org/goleak/testmain.go | 63 + vendor/go.uber.org/goleak/tools.go | 28 + vendor/golang.org/x/lint/.travis.yml | 19 + vendor/golang.org/x/lint/CONTRIBUTING.md | 15 + vendor/golang.org/x/lint/LICENSE | 27 + vendor/golang.org/x/lint/README.md | 88 + vendor/golang.org/x/lint/go.mod | 3 + vendor/golang.org/x/lint/go.sum | 6 + vendor/golang.org/x/lint/golint/golint.go | 159 + vendor/golang.org/x/lint/golint/import.go | 309 + .../golang.org/x/lint/golint/importcomment.go | 13 + vendor/golang.org/x/lint/lint.go | 1614 ++ vendor/golang.org/x/net/http2/hpack/encode.go | 2 +- vendor/golang.org/x/net/http2/http2.go | 6 - vendor/golang.org/x/net/http2/pipe.go | 7 +- vendor/golang.org/x/net/http2/server.go | 25 +- vendor/golang.org/x/net/http2/transport.go | 73 +- .../x/net/http2/writesched_priority.go | 2 +- vendor/golang.org/x/net/idna/tables11.0.0.go | 2 +- vendor/golang.org/x/net/idna/tables12.00.go | 4733 ++++ .../x/net/internal/socket/norace.go | 12 + .../golang.org/x/net/internal/socket/race.go | 37 + .../x/net/internal/socket/rawconn_mmsg.go | 6 + .../x/net/internal/socket/rawconn_msg.go | 2 + .../x/net/internal/socket/sys_dragonfly.go | 27 +- .../x/net/internal/socket/zsys_aix_ppc64.go | 1 - .../x/net/internal/socket/zsys_linux_386.go | 1 - .../x/net/internal/socket/zsys_linux_amd64.go | 1 - .../x/net/internal/socket/zsys_linux_arm.go | 6 +- .../x/net/internal/socket/zsys_linux_arm64.go | 6 +- .../x/net/internal/socket/zsys_linux_mips.go | 6 +- .../net/internal/socket/zsys_linux_mips64.go | 6 +- .../internal/socket/zsys_linux_mips64le.go | 6 +- .../net/internal/socket/zsys_linux_mipsle.go | 6 +- .../x/net/internal/socket/zsys_linux_ppc64.go | 6 +- .../net/internal/socket/zsys_linux_ppc64le.go | 6 +- .../net/internal/socket/zsys_linux_riscv64.go | 6 +- .../x/net/internal/socket/zsys_linux_s390x.go | 6 +- .../x/net/internal/socket/zsys_netbsd_386.go | 6 +- .../net/internal/socket/zsys_netbsd_amd64.go | 6 +- .../x/net/internal/socket/zsys_netbsd_arm.go | 6 +- .../net/internal/socket/zsys_netbsd_arm64.go | 1 - .../golang.org/x/net/internal/socks/socks.go | 2 +- .../x/net/internal/timeseries/timeseries.go | 6 +- vendor/golang.org/x/net/ipv4/control_bsd.go | 3 +- vendor/golang.org/x/net/ipv4/helper.go | 17 +- vendor/golang.org/x/net/ipv4/sys_asmreq.go | 3 + vendor/golang.org/x/net/ipv4/sys_bpf.go | 7 +- vendor/golang.org/x/net/ipv4/sys_linux.go | 3 +- .../x/net/ipv4/zsys_freebsd_arm64.go | 93 + .../golang.org/x/net/ipv4/zsys_linux_386.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_amd64.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_arm.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_arm64.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_mips.go | 18 - .../x/net/ipv4/zsys_linux_mips64.go | 18 - .../x/net/ipv4/zsys_linux_mips64le.go | 18 - .../x/net/ipv4/zsys_linux_mipsle.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_ppc.go | 18 - .../golang.org/x/net/ipv4/zsys_linux_ppc64.go | 18 - .../x/net/ipv4/zsys_linux_ppc64le.go | 18 - .../x/net/ipv4/zsys_linux_riscv64.go | 17 - .../golang.org/x/net/ipv4/zsys_linux_s390x.go | 18 - vendor/golang.org/x/net/ipv6/helper.go | 1 - vendor/golang.org/x/net/ipv6/sys_bpf.go | 7 +- vendor/golang.org/x/net/ipv6/sys_linux.go | 3 +- .../x/net/ipv6/zsys_freebsd_arm64.go | 122 + .../golang.org/x/net/ipv6/zsys_linux_386.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_amd64.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_arm.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_arm64.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_mips.go | 18 - .../x/net/ipv6/zsys_linux_mips64.go | 18 - .../x/net/ipv6/zsys_linux_mips64le.go | 18 - .../x/net/ipv6/zsys_linux_mipsle.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_ppc.go | 18 - .../golang.org/x/net/ipv6/zsys_linux_ppc64.go | 18 - .../x/net/ipv6/zsys_linux_ppc64le.go | 18 - .../x/net/ipv6/zsys_linux_riscv64.go | 17 - .../golang.org/x/net/ipv6/zsys_linux_s390x.go | 18 - vendor/golang.org/x/net/publicsuffix/table.go | 19654 ++++++++-------- vendor/golang.org/x/tools/AUTHORS | 3 + vendor/golang.org/x/tools/CONTRIBUTORS | 3 + vendor/golang.org/x/tools/LICENSE | 27 + vendor/golang.org/x/tools/PATENTS | 22 + .../x/tools/go/ast/astutil/enclosing.go | 627 + .../x/tools/go/ast/astutil/imports.go | 482 + .../x/tools/go/ast/astutil/rewrite.go | 477 + .../golang.org/x/tools/go/ast/astutil/util.go | 14 + .../x/tools/go/gcexportdata/gcexportdata.go | 105 + .../x/tools/go/gcexportdata/importer.go | 73 + .../go/internal/gcimporter/exportdata.go | 93 + .../go/internal/gcimporter/gcimporter.go | 1075 + .../x/tools/go/internal/gcimporter/iexport.go | 759 + .../x/tools/go/internal/gcimporter/iimport.go | 800 + .../go/internal/gcimporter/newInterface10.go | 21 + .../go/internal/gcimporter/newInterface11.go | 13 + vendor/modules.txt | 12 +- 114 files changed, 22797 insertions(+), 10351 deletions(-) create mode 100644 agent/routine-leak-checker/leak_test.go create mode 100644 vendor/go.uber.org/goleak/.gitignore create mode 100644 vendor/go.uber.org/goleak/.travis.yml create mode 100644 vendor/go.uber.org/goleak/CHANGELOG.md create mode 100644 vendor/go.uber.org/goleak/LICENSE create mode 100644 vendor/go.uber.org/goleak/Makefile create mode 100644 vendor/go.uber.org/goleak/README.md create mode 100644 vendor/go.uber.org/goleak/doc.go create mode 100644 vendor/go.uber.org/goleak/glide.yaml create mode 100644 vendor/go.uber.org/goleak/go.mod create mode 100644 vendor/go.uber.org/goleak/go.sum create mode 100644 vendor/go.uber.org/goleak/internal/stack/stacks.go create mode 100644 vendor/go.uber.org/goleak/leaks.go create mode 100644 vendor/go.uber.org/goleak/options.go create mode 100644 vendor/go.uber.org/goleak/testmain.go create mode 100644 vendor/go.uber.org/goleak/tools.go create mode 100644 vendor/golang.org/x/lint/.travis.yml create mode 100644 vendor/golang.org/x/lint/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/lint/LICENSE create mode 100644 vendor/golang.org/x/lint/README.md create mode 100644 vendor/golang.org/x/lint/go.mod create mode 100644 vendor/golang.org/x/lint/go.sum create mode 100644 vendor/golang.org/x/lint/golint/golint.go create mode 100644 vendor/golang.org/x/lint/golint/import.go create mode 100644 vendor/golang.org/x/lint/golint/importcomment.go create mode 100644 vendor/golang.org/x/lint/lint.go create mode 100644 vendor/golang.org/x/net/idna/tables12.00.go create mode 100644 vendor/golang.org/x/net/internal/socket/norace.go create mode 100644 vendor/golang.org/x/net/internal/socket/race.go create mode 100644 vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go create mode 100644 vendor/golang.org/x/tools/AUTHORS create mode 100644 vendor/golang.org/x/tools/CONTRIBUTORS create mode 100644 vendor/golang.org/x/tools/LICENSE create mode 100644 vendor/golang.org/x/tools/PATENTS create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/enclosing.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/imports.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/rewrite.go create mode 100644 vendor/golang.org/x/tools/go/ast/astutil/util.go create mode 100644 vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go create mode 100644 vendor/golang.org/x/tools/go/gcexportdata/importer.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go create mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go diff --git a/agent/routine-leak-checker/leak_test.go b/agent/routine-leak-checker/leak_test.go new file mode 100644 index 0000000000..08d69d2a38 --- /dev/null +++ b/agent/routine-leak-checker/leak_test.go @@ -0,0 +1,135 @@ +package leakcheck + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/hashicorp/consul/agent" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/tlsutil" + "github.com/stretchr/testify/require" + "go.uber.org/goleak" +) + +func testTLSCertificates(serverName string) (cert string, key string, cacert string, err error) { + // generate CA + serial, err := tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + signer, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return "", "", "", err + } + ca, err := tlsutil.GenerateCA(signer, serial, 365, nil) + if err != nil { + return "", "", "", err + } + + // generate leaf + serial, err = tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + + cert, privateKey, err := tlsutil.GenerateCert( + signer, + ca, + serial, + "Test Cert Name", + 365, + []string{serverName}, + nil, + []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + ) + if err != nil { + return "", "", "", err + } + + return cert, privateKey, ca, nil +} + +func setupPrimaryServer(t *testing.T) *agent.TestAgent { + d := testutil.TempDir(t, "leaks-primary-server") + t.Cleanup(func() { os.RemoveAll(d) }) + + certPEM, keyPEM, caPEM, err := testTLSCertificates("server.primary.consul") + require.NoError(t, err) + + certPath := filepath.Join(d, "cert.pem") + keyPath := filepath.Join(d, "key.pem") + caPath := filepath.Join(d, "cacert.pem") + + require.NoError(t, ioutil.WriteFile(certPath, []byte(certPEM), 0600)) + require.NoError(t, ioutil.WriteFile(keyPath, []byte(keyPEM), 0600)) + require.NoError(t, ioutil.WriteFile(caPath, []byte(caPEM), 0600)) + + aclParams := agent.DefaulTestACLConfigParams() + aclParams.PrimaryDatacenter = "primary" + aclParams.EnableTokenReplication = true + + config := ` + server = true + datacenter = "primary" + primary_datacenter = "primary" + enable_central_service_config = true + + connect { + enabled = true + } + + auto_encrypt { + allow_tls = true + } + ` + agent.TestACLConfigWithParams(aclParams) + + a := agent.NewTestAgent(t, config) + t.Cleanup(func() { a.Shutdown() }) + + testrpc.WaitForTestAgent(t, a.RPC, "primary", testrpc.WithToken(agent.TestDefaultMasterToken)) + + return a +} + +func TestTestAgentLeaks_Server(t *testing.T) { + /* + Eventually go routine leak checking should be moved into other packages such as the agent + and agent/consul packages. However there are too many leaks for the test to run properly. + + Many of the leaks are due to blocking queries from clients to servers being uncancellable. + Until we can move away from net/rpc and fix some of the other issues we don't want a + completely unbounded test which is guaranteed to fail 100% of the time. For now this + test will do. When we do update it we should add this in a *_test.go file in the packages + that we want to enable leak checking within: + + import ( + "testing" + + "go.uber.org/goleak" + ) + + func TestMain(m *testing.M) { + goleak.VerifyTestMain(m, + goleak.IgnoreTopFunction("k8s.io/klog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/hashicorp/consul/sdk/freeport.checkFreedPorts"), + ) + } + */ + + defer goleak.VerifyNone(t, + goleak.IgnoreTopFunction("k8s.io/klog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/hashicorp/consul/sdk/freeport.checkFreedPorts"), + ) + + primaryServer := setupPrimaryServer(t) + primaryServer.Shutdown() +} diff --git a/go.mod b/go.mod index ffdff54e0b..997b023b6f 100644 --- a/go.mod +++ b/go.mod @@ -78,12 +78,14 @@ require ( github.com/sirupsen/logrus v1.4.2 // indirect github.com/stretchr/testify v1.5.1 go.opencensus.io v0.22.0 // indirect + go.uber.org/goleak v1.0.0 golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 + golang.org/x/net v0.0.0-20200226121028-0de0cce0169b golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a golang.org/x/sys v0.0.0-20200316230553-a7d97aace0b0 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 + golang.org/x/tools v0.0.0-20200513154647-78b527d18275 // indirect google.golang.org/api v0.9.0 // indirect google.golang.org/appengine v1.6.0 // indirect google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 diff --git a/go.sum b/go.sum index 241c9257c3..b5e4f8798e 100644 --- a/go.sum +++ b/go.sum @@ -32,6 +32,7 @@ github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1Gn github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -492,11 +493,14 @@ github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/goleak v1.0.0 h1:qsup4IcBdlmsnGfqyLl4Ntn3C2XCCuKAE7DwHpScyUo= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -506,6 +510,7 @@ golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -517,6 +522,10 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -536,6 +545,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -546,6 +557,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -602,7 +614,15 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200513154647-78b527d18275 h1:e7nYe9s94RHunFJ7b+mmPxiQMOKMVSqYASToWb1EcHs= +golang.org/x/tools v0.0.0-20200513154647-78b527d18275/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= diff --git a/vendor/go.uber.org/goleak/.gitignore b/vendor/go.uber.org/goleak/.gitignore new file mode 100644 index 0000000000..0fff519a4a --- /dev/null +++ b/vendor/go.uber.org/goleak/.gitignore @@ -0,0 +1,5 @@ +vendor/ +/bin +/lint.log +/cover.out +/cover.html diff --git a/vendor/go.uber.org/goleak/.travis.yml b/vendor/go.uber.org/goleak/.travis.yml new file mode 100644 index 0000000000..b215cef17c --- /dev/null +++ b/vendor/go.uber.org/goleak/.travis.yml @@ -0,0 +1,24 @@ +sudo: false +language: go +go_import_path: go.uber.org/goleak + +env: + global: + - GO111MODULE=on + +matrix: + include: + - go: 1.12.x + - go: 1.13.x + env: LINT=1 + +install: + - make install + +script: + - test -z "$LINT" || make lint + - make test + +after_success: + - make cover + - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/go.uber.org/goleak/CHANGELOG.md b/vendor/go.uber.org/goleak/CHANGELOG.md new file mode 100644 index 0000000000..2dfb98f619 --- /dev/null +++ b/vendor/go.uber.org/goleak/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.0.0] +### Changed +- Migrate to Go modules. + +### Fixed +- Ignore trace related goroutines that cause false positives with -trace. + +## 0.10.0 +- Initial release. + +[1.0.0]: https://github.com/uber-go/goleak/compare/v0.10.0...v1.0.0 diff --git a/vendor/go.uber.org/goleak/LICENSE b/vendor/go.uber.org/goleak/LICENSE new file mode 100644 index 0000000000..6c9bde216e --- /dev/null +++ b/vendor/go.uber.org/goleak/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/go.uber.org/goleak/Makefile b/vendor/go.uber.org/goleak/Makefile new file mode 100644 index 0000000000..53763fa8d1 --- /dev/null +++ b/vendor/go.uber.org/goleak/Makefile @@ -0,0 +1,41 @@ +export GOBIN ?= $(shell pwd)/bin + +GOLINT = $(GOBIN)/golint + +GO_FILES := $(shell \ + find . '(' -path '*/.*' -o -path './vendor' ')' -prune \ + -o -name '*.go' -print | cut -b3-) + +.PHONY: build +build: + go build ./... + +.PHONY: install +install: + go mod download + +.PHONY: test +test: + go test -v -race ./... + go test -v -trace=/dev/null . + +.PHONY: cover +cover: + go test -race -coverprofile=cover.out -coverpkg=./... ./... + go tool cover -html=cover.out -o cover.html + +$(GOLINT): + go install golang.org/x/lint/golint + +.PHONY: lint +lint: $(GOLINT) + @rm -rf lint.log + @echo "Checking formatting..." + @gofmt -d -s $(GO_FILES) 2>&1 | tee lint.log + @echo "Checking vet..." + @go vet ./... 2>&1 | tee -a lint.log + @echo "Checking lint..." + @$(GOLINT) ./... 2>&1 | tee -a lint.log + @echo "Checking for unresolved FIXMEs..." + @git grep -i fixme | grep -v -e '^vendor/' -e '^Makefile' | tee -a lint.log + @[ ! -s lint.log ] diff --git a/vendor/go.uber.org/goleak/README.md b/vendor/go.uber.org/goleak/README.md new file mode 100644 index 0000000000..8702de9fd1 --- /dev/null +++ b/vendor/go.uber.org/goleak/README.md @@ -0,0 +1,70 @@ +# goleak [![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov] + +Goroutine leak detector to help avoid Goroutine leaks. + +## Development Status: Alpha + +goleak is still in development, and APIs are still in flux. + +## Installation + +You can use `go get` to get the latest version: + +`go get -u go.uber.org/goleak` + +`goleak` also supports semver releases. It is compatible with Go 1.5+. + +## Quick Start + +To verify that there are no unexpected goroutines running at the end of a test: + +```go +func TestA(t *testing.T) { + defer goleak.VerifyNone(t) + + // test logic here. +} +``` + +Instead of checking for leaks at the end of every test, `goleak` can also be run +at the end of every test package by creating a `TestMain` function for your +package: + +```go +func TestMain(m *testing.M) { + goleak.VerifyTestMain(m) +} +``` + +## Determine Source of Package Leaks + +When verifying leaks using `TestMain`, the leak test is only run once after all tests +have been run. This is typically enough to ensure there's no goroutines leaked from +tests, but when there are leaks, it's hard to determine which test is causing them. + +You can use the following bash script to determine the source of the failing test: + +```sh +# Create a test binary which will be used to run each test individually +$ go test -c -o tests + +# Run each test individually, printing "." for successful tests, or the test name +# for failing tests. +$ for test in $(go test -list . | grep "^Test"); do ./tests -test.run "^$test\$" &>/dev/null && echo -n "." || echo "\n$test failed"; done +``` + +This will only print names of failing tests which can be investigated individually. E.g., + +``` +..... +TestLeakyTest failed +....... +``` + + +[doc-img]: https://godoc.org/go.uber.org/goleak?status.svg +[doc]: https://godoc.org/go.uber.org/goleak +[ci-img]: https://travis-ci.com/uber-go/goleak.svg?branch=master +[ci]: https://travis-ci.com/uber-go/goleak +[cov-img]: https://codecov.io/gh/uber-go/goleak/branch/master/graph/badge.svg +[cov]: https://codecov.io/gh/uber-go/goleak diff --git a/vendor/go.uber.org/goleak/doc.go b/vendor/go.uber.org/goleak/doc.go new file mode 100644 index 0000000000..3832f8dbc5 --- /dev/null +++ b/vendor/go.uber.org/goleak/doc.go @@ -0,0 +1,22 @@ +// Copyright (c) 2018 Uber Technologies, Inc. + +// 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 goleak is a Goroutine leak detector. +package goleak // import "go.uber.org/goleak" diff --git a/vendor/go.uber.org/goleak/glide.yaml b/vendor/go.uber.org/goleak/glide.yaml new file mode 100644 index 0000000000..c6e7a00a06 --- /dev/null +++ b/vendor/go.uber.org/goleak/glide.yaml @@ -0,0 +1,8 @@ +package: go.uber.org/goleak +import: [] +testImport: +- package: github.com/stretchr/testify + version: ^1.1.4 + subpackages: + - assert + - require diff --git a/vendor/go.uber.org/goleak/go.mod b/vendor/go.uber.org/goleak/go.mod new file mode 100644 index 0000000000..742547abd7 --- /dev/null +++ b/vendor/go.uber.org/goleak/go.mod @@ -0,0 +1,11 @@ +module go.uber.org/goleak + +go 1.13 + +require ( + github.com/kr/pretty v0.1.0 // indirect + github.com/stretchr/testify v1.4.0 + golang.org/x/lint v0.0.0-20190930215403-16217165b5de + golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 // indirect + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect +) diff --git a/vendor/go.uber.org/goleak/go.sum b/vendor/go.uber.org/goleak/go.sum new file mode 100644 index 0000000000..09b27d7eeb --- /dev/null +++ b/vendor/go.uber.org/goleak/go.sum @@ -0,0 +1,30 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/go.uber.org/goleak/internal/stack/stacks.go b/vendor/go.uber.org/goleak/internal/stack/stacks.go new file mode 100644 index 0000000000..94f82e4c0d --- /dev/null +++ b/vendor/go.uber.org/goleak/internal/stack/stacks.go @@ -0,0 +1,155 @@ +// Copyright (c) 2017 Uber Technologies, Inc. +// +// 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 stack + +import ( + "bufio" + "bytes" + "fmt" + "io" + "runtime" + "strconv" + "strings" +) + +const _defaultBufferSize = 64 * 1024 // 64 KiB + +// Stack represents a single Goroutine's stack. +type Stack struct { + id int + state string + firstFunction string + fullStack *bytes.Buffer +} + +// ID returns the goroutine ID. +func (s Stack) ID() int { + return s.id +} + +// State returns the Goroutine's state. +func (s Stack) State() string { + return s.state +} + +// Full returns the full stack trace for this goroutine. +func (s Stack) Full() string { + return s.fullStack.String() +} + +// FirstFunction returns the name of the first function on the stack. +func (s Stack) FirstFunction() string { + return s.firstFunction +} + +func (s Stack) String() string { + return fmt.Sprintf( + "Goroutine %v in state %v, with %v on top of the stack:\n%s", + s.id, s.state, s.firstFunction, s.Full()) +} + +func getStacks(all bool) []Stack { + var stacks []Stack + + var curStack *Stack + stackReader := bufio.NewReader(bytes.NewReader(getStackBuffer(all))) + for { + line, err := stackReader.ReadString('\n') + if err == io.EOF { + break + } + if err != nil { + // We're reading using bytes.NewReader which should never fail. + panic("bufio.NewReader failed on a fixed string") + } + + // If we see the goroutine header, start a new stack. + isFirstLine := false + if strings.HasPrefix(line, "goroutine ") { + // flush any previous stack + if curStack != nil { + stacks = append(stacks, *curStack) + } + id, goState := parseGoStackHeader(line) + curStack = &Stack{ + id: id, + state: goState, + fullStack: &bytes.Buffer{}, + } + isFirstLine = true + } + curStack.fullStack.WriteString(line) + if !isFirstLine && curStack.firstFunction == "" { + curStack.firstFunction = parseFirstFunc(line) + } + } + + if curStack != nil { + stacks = append(stacks, *curStack) + } + return stacks +} + +// All returns the stacks for all running goroutines. +func All() []Stack { + return getStacks(true) +} + +// Current returns the stack for the current goroutine. +func Current() Stack { + return getStacks(false)[0] +} + +func getStackBuffer(all bool) []byte { + for i := _defaultBufferSize; ; i *= 2 { + buf := make([]byte, i) + if n := runtime.Stack(buf, all); n < i { + return buf[:n] + } + } +} + +func parseFirstFunc(line string) string { + line = strings.TrimSpace(line) + if idx := strings.LastIndex(line, "("); idx > 0 { + return line[:idx] + } + panic(fmt.Sprintf("function calls missing parents: %q", line)) +} + +// parseGoStackHeader parses a stack header that looks like: +// goroutine 643 [runnable]:\n +// And returns the goroutine ID, and the state. +func parseGoStackHeader(line string) (goroutineID int, state string) { + line = strings.TrimSuffix(line, ":\n") + parts := strings.SplitN(line, " ", 3) + if len(parts) != 3 { + panic(fmt.Sprintf("unexpected stack header format: %q", line)) + } + + id, err := strconv.Atoi(parts[1]) + if err != nil { + panic(fmt.Sprintf("failed to parse goroutine ID: %v in line %q", parts[1], line)) + } + + state = strings.TrimSuffix(strings.TrimPrefix(parts[2], "["), "]") + return id, state +} diff --git a/vendor/go.uber.org/goleak/leaks.go b/vendor/go.uber.org/goleak/leaks.go new file mode 100644 index 0000000000..468dbaf951 --- /dev/null +++ b/vendor/go.uber.org/goleak/leaks.go @@ -0,0 +1,80 @@ +// Copyright (c) 2017 Uber Technologies, Inc. + +// 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 goleak + +import ( + "fmt" + + "go.uber.org/goleak/internal/stack" +) + +// TestingT is the minimal subset of testing.TB that we use. +type TestingT interface { + Error(...interface{}) +} + +// filterStacks will filter any stacks excluded by the given opts. +// filterStacks modifies the passed in stacks slice. +func filterStacks(stacks []stack.Stack, skipID int, opts *opts) []stack.Stack { + filtered := stacks[:0] + for _, stack := range stacks { + // Always skip the running goroutine. + if stack.ID() == skipID { + continue + } + // Run any default or user-specified filters. + if opts.filter(stack) { + continue + } + filtered = append(filtered, stack) + } + return filtered +} + +// Find looks for extra goroutines, and returns a descriptive error if +// any are found. +func Find(options ...Option) error { + cur := stack.Current().ID() + + opts := buildOpts(options...) + var stacks []stack.Stack + retry := true + for i := 0; retry; i++ { + stacks = filterStacks(stack.All(), cur, opts) + + if len(stacks) == 0 { + return nil + } + retry = opts.retry(i) + } + + return fmt.Errorf("found unexpected goroutines:\n%s", stacks) +} + +// VerifyNone marks the given TestingT as failed if any extra goroutines are +// found by Find. This is a helper method to make it easier to integrate in +// tests by doing: +// defer VerifyNone(t) +func VerifyNone(t TestingT, options ...Option) { + if err := Find(options...); err != nil { + t.Error(err) + } +} diff --git a/vendor/go.uber.org/goleak/options.go b/vendor/go.uber.org/goleak/options.go new file mode 100644 index 0000000000..e011ba1b85 --- /dev/null +++ b/vendor/go.uber.org/goleak/options.go @@ -0,0 +1,152 @@ +// Copyright (c) 2017 Uber Technologies, Inc. +// +// 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 goleak + +import ( + "strings" + "time" + + "go.uber.org/goleak/internal/stack" +) + +// Option lets users specify custom verifications. +type Option interface { + apply(*opts) +} + +// We retry up to 20 times if we can't find the goroutine that +// we are looking for. In between each attempt, we will sleep for +// a short while to let any running goroutines complete. +const _defaultRetries = 20 + +type opts struct { + filters []func(stack.Stack) bool + maxRetries int + maxSleep time.Duration +} + +// optionFunc lets us easily write options without a custom type. +type optionFunc func(*opts) + +func (f optionFunc) apply(opts *opts) { f(opts) } + +// IgnoreTopFunction ignores any goroutines where the specified function +// is at the top of the stack. The function name should be fully qualified, +// e.g., go.uber.org/goleak.IgnoreTopFunction +func IgnoreTopFunction(f string) Option { + return addFilter(func(s stack.Stack) bool { + return s.FirstFunction() == f + }) +} + +func maxSleep(d time.Duration) Option { + return optionFunc(func(opts *opts) { + opts.maxSleep = d + }) +} + +func addFilter(f func(stack.Stack) bool) Option { + return optionFunc(func(opts *opts) { + opts.filters = append(opts.filters, f) + }) +} + +func buildOpts(options ...Option) *opts { + opts := &opts{ + maxRetries: _defaultRetries, + maxSleep: 100 * time.Millisecond, + } + opts.filters = append(opts.filters, + isTestStack, + isSyscallStack, + isStdLibStack, + isTraceStack, + ) + for _, option := range options { + option.apply(opts) + } + return opts +} + +func (vo *opts) filter(s stack.Stack) bool { + for _, filter := range vo.filters { + if filter(s) { + return true + } + } + return false +} + +func (vo *opts) retry(i int) bool { + if i >= vo.maxRetries { + return false + } + + d := time.Duration(int(time.Microsecond) << uint(i)) + if d > vo.maxSleep { + d = vo.maxSleep + } + time.Sleep(d) + return true +} + +// isTestStack is a default filter installed to automatically skip goroutines +// that the testing package runs while the user's tests are running. +func isTestStack(s stack.Stack) bool { + // Until go1.7, the main goroutine ran RunTests, which started + // the test in a separate goroutine and waited for that test goroutine + // to end by waiting on a channel. + // Since go1.7, a separate goroutine is started to wait for signals. + // T.Parallel is for parallel tests, which are blocked until all serial + // tests have run with T.Parallel at the top of the stack. + switch s.FirstFunction() { + case "testing.RunTests", "testing.(*T).Run", "testing.(*T).Parallel": + // In pre1.7 and post-1.7, background goroutines started by the testing + // package are blocked waiting on a channel. + return strings.HasPrefix(s.State(), "chan receive") + } + return false +} + +func isSyscallStack(s stack.Stack) bool { + // Typically runs in the background when code uses CGo: + // https://github.com/golang/go/issues/16714 + return s.FirstFunction() == "runtime.goexit" && strings.HasPrefix(s.State(), "syscall") +} + +func isStdLibStack(s stack.Stack) bool { + // Importing os/signal starts a background goroutine. + // The name of the function at the top has changed between versions. + if f := s.FirstFunction(); f == "os/signal.signal_recv" || f == "os/signal.loop" { + return true + } + + // Using signal.Notify will start a runtime goroutine. + return strings.Contains(s.Full(), "runtime.ensureSigM") +} + +func isTraceStack(s stack.Stack) bool { + if f := s.FirstFunction(); f != "runtime.goparkunlock" { + return false + } + + return strings.Contains(s.Full(), "runtime.ReadTrace") +} diff --git a/vendor/go.uber.org/goleak/testmain.go b/vendor/go.uber.org/goleak/testmain.go new file mode 100644 index 0000000000..316f6e1bad --- /dev/null +++ b/vendor/go.uber.org/goleak/testmain.go @@ -0,0 +1,63 @@ +// Copyright (c) 2017 Uber Technologies, Inc. +// +// 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 goleak + +import ( + "fmt" + "io" + "os" +) + +// Variables for stubbing in unit tests. +var ( + _osExit = os.Exit + _osStderr io.Writer = os.Stderr +) + +// TestingM is the minimal subset of testing.M that we use. +type TestingM interface { + Run() int +} + +// VerifyTestMain can be used in a TestMain function for package tests to +// verify that there were no goroutine leaks. +// To use it, your TestMain function should look like: +// +// func TestMain(m *testing.M) { +// goleak.VerifyTestMain(m) +// } +// +// See https://golang.org/pkg/testing/#hdr-Main for more details. +// +// This will run all tests as per normal, and if they were successful, look +// for any goroutine leaks and fail the tests if any leaks were found. +func VerifyTestMain(m TestingM, options ...Option) { + exitCode := m.Run() + + if exitCode == 0 { + if err := Find(options...); err != nil { + fmt.Fprintf(_osStderr, "goleak: Errors on successful test run: %v\n", err) + exitCode = 1 + } + } + + _osExit(exitCode) +} diff --git a/vendor/go.uber.org/goleak/tools.go b/vendor/go.uber.org/goleak/tools.go new file mode 100644 index 0000000000..6a87612cc0 --- /dev/null +++ b/vendor/go.uber.org/goleak/tools.go @@ -0,0 +1,28 @@ +// Copyright (c) 2019 Uber Technologies, Inc. +// +// 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. + +// +build tools + +package goleak + +import ( + // Tools we use during development. + _ "golang.org/x/lint/golint" +) diff --git a/vendor/golang.org/x/lint/.travis.yml b/vendor/golang.org/x/lint/.travis.yml new file mode 100644 index 0000000000..50553ebd00 --- /dev/null +++ b/vendor/golang.org/x/lint/.travis.yml @@ -0,0 +1,19 @@ +sudo: false +language: go +go: + - 1.10.x + - 1.11.x + - master + +go_import_path: golang.org/x/lint + +install: + - go get -t -v ./... + +script: + - go test -v -race ./... + +matrix: + allow_failures: + - go: master + fast_finish: true diff --git a/vendor/golang.org/x/lint/CONTRIBUTING.md b/vendor/golang.org/x/lint/CONTRIBUTING.md new file mode 100644 index 0000000000..1fadda62d2 --- /dev/null +++ b/vendor/golang.org/x/lint/CONTRIBUTING.md @@ -0,0 +1,15 @@ +# Contributing to Golint + +## Before filing an issue: + +### Are you having trouble building golint? + +Check you have the latest version of its dependencies. Run +``` +go get -u golang.org/x/lint/golint +``` +If you still have problems, consider searching for existing issues before filing a new issue. + +## Before sending a pull request: + +Have you understood the purpose of golint? Make sure to carefully read `README`. diff --git a/vendor/golang.org/x/lint/LICENSE b/vendor/golang.org/x/lint/LICENSE new file mode 100644 index 0000000000..65d761bc9f --- /dev/null +++ b/vendor/golang.org/x/lint/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013 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/vendor/golang.org/x/lint/README.md b/vendor/golang.org/x/lint/README.md new file mode 100644 index 0000000000..4968b13aef --- /dev/null +++ b/vendor/golang.org/x/lint/README.md @@ -0,0 +1,88 @@ +Golint is a linter for Go source code. + +[![Build Status](https://travis-ci.org/golang/lint.svg?branch=master)](https://travis-ci.org/golang/lint) + +## Installation + +Golint requires a +[supported release of Go](https://golang.org/doc/devel/release.html#policy). + + go get -u golang.org/x/lint/golint + +To find out where `golint` was installed you can run `go list -f {{.Target}} golang.org/x/lint/golint`. For `golint` to be used globally add that directory to the `$PATH` environment setting. + +## Usage + +Invoke `golint` with one or more filenames, directories, or packages named +by its import path. Golint uses the same +[import path syntax](https://golang.org/cmd/go/#hdr-Import_path_syntax) as +the `go` command and therefore +also supports relative import paths like `./...`. Additionally the `...` +wildcard can be used as suffix on relative and absolute file paths to recurse +into them. + +The output of this tool is a list of suggestions in Vim quickfix format, +which is accepted by lots of different editors. + +## Purpose + +Golint differs from gofmt. Gofmt reformats Go source code, whereas +golint prints out style mistakes. + +Golint differs from govet. Govet is concerned with correctness, whereas +golint is concerned with coding style. Golint is in use at Google, and it +seeks to match the accepted style of the open source Go project. + +The suggestions made by golint are exactly that: suggestions. +Golint is not perfect, and has both false positives and false negatives. +Do not treat its output as a gold standard. We will not be adding pragmas +or other knobs to suppress specific warnings, so do not expect or require +code to be completely "lint-free". +In short, this tool is not, and will never be, trustworthy enough for its +suggestions to be enforced automatically, for example as part of a build process. +Golint makes suggestions for many of the mechanically checkable items listed in +[Effective Go](https://golang.org/doc/effective_go.html) and the +[CodeReviewComments wiki page](https://golang.org/wiki/CodeReviewComments). + +## Scope + +Golint is meant to carry out the stylistic conventions put forth in +[Effective Go](https://golang.org/doc/effective_go.html) and +[CodeReviewComments](https://golang.org/wiki/CodeReviewComments). +Changes that are not aligned with those documents will not be considered. + +## Contributions + +Contributions to this project are welcome provided they are [in scope](#scope), +though please send mail before starting work on anything major. +Contributors retain their copyright, so we need you to fill out +[a short form](https://developers.google.com/open-source/cla/individual) +before we can accept your contribution. + +## Vim + +Add this to your ~/.vimrc: + + set rtp+=$GOPATH/src/golang.org/x/lint/misc/vim + +If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value. + +Running `:Lint` will run golint on the current file and populate the quickfix list. + +Optionally, add this to your `~/.vimrc` to automatically run `golint` on `:w` + + autocmd BufWritePost,FileWritePost *.go execute 'Lint' | cwindow + + +## Emacs + +Add this to your `.emacs` file: + + (add-to-list 'load-path (concat (getenv "GOPATH") "/src/golang.org/x/lint/misc/emacs/")) + (require 'golint) + +If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value. + +Running M-x golint will run golint on the current file. + +For more usage, see [Compilation-Mode](http://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html). diff --git a/vendor/golang.org/x/lint/go.mod b/vendor/golang.org/x/lint/go.mod new file mode 100644 index 0000000000..d5ba4dbfd6 --- /dev/null +++ b/vendor/golang.org/x/lint/go.mod @@ -0,0 +1,3 @@ +module golang.org/x/lint + +require golang.org/x/tools v0.0.0-20190311212946-11955173bddd diff --git a/vendor/golang.org/x/lint/go.sum b/vendor/golang.org/x/lint/go.sum new file mode 100644 index 0000000000..7d0e2e6188 --- /dev/null +++ b/vendor/golang.org/x/lint/go.sum @@ -0,0 +1,6 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= diff --git a/vendor/golang.org/x/lint/golint/golint.go b/vendor/golang.org/x/lint/golint/golint.go new file mode 100644 index 0000000000..ac024b6d26 --- /dev/null +++ b/vendor/golang.org/x/lint/golint/golint.go @@ -0,0 +1,159 @@ +// Copyright (c) 2013 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 or at +// https://developers.google.com/open-source/licenses/bsd. + +// golint lints the Go source files named on its command line. +package main + +import ( + "flag" + "fmt" + "go/build" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "golang.org/x/lint" +) + +var ( + minConfidence = flag.Float64("min_confidence", 0.8, "minimum confidence of a problem to print it") + setExitStatus = flag.Bool("set_exit_status", false, "set exit status to 1 if any issues are found") + suggestions int +) + +func usage() { + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "\tgolint [flags] # runs on package in current directory\n") + fmt.Fprintf(os.Stderr, "\tgolint [flags] [packages]\n") + fmt.Fprintf(os.Stderr, "\tgolint [flags] [directories] # where a '/...' suffix includes all sub-directories\n") + fmt.Fprintf(os.Stderr, "\tgolint [flags] [files] # all must belong to a single package\n") + fmt.Fprintf(os.Stderr, "Flags:\n") + flag.PrintDefaults() +} + +func main() { + flag.Usage = usage + flag.Parse() + + if flag.NArg() == 0 { + lintDir(".") + } else { + // dirsRun, filesRun, and pkgsRun indicate whether golint is applied to + // directory, file or package targets. The distinction affects which + // checks are run. It is no valid to mix target types. + var dirsRun, filesRun, pkgsRun int + var args []string + for _, arg := range flag.Args() { + if strings.HasSuffix(arg, "/...") && isDir(arg[:len(arg)-len("/...")]) { + dirsRun = 1 + for _, dirname := range allPackagesInFS(arg) { + args = append(args, dirname) + } + } else if isDir(arg) { + dirsRun = 1 + args = append(args, arg) + } else if exists(arg) { + filesRun = 1 + args = append(args, arg) + } else { + pkgsRun = 1 + args = append(args, arg) + } + } + + if dirsRun+filesRun+pkgsRun != 1 { + usage() + os.Exit(2) + } + switch { + case dirsRun == 1: + for _, dir := range args { + lintDir(dir) + } + case filesRun == 1: + lintFiles(args...) + case pkgsRun == 1: + for _, pkg := range importPaths(args) { + lintPackage(pkg) + } + } + } + + if *setExitStatus && suggestions > 0 { + fmt.Fprintf(os.Stderr, "Found %d lint suggestions; failing.\n", suggestions) + os.Exit(1) + } +} + +func isDir(filename string) bool { + fi, err := os.Stat(filename) + return err == nil && fi.IsDir() +} + +func exists(filename string) bool { + _, err := os.Stat(filename) + return err == nil +} + +func lintFiles(filenames ...string) { + files := make(map[string][]byte) + for _, filename := range filenames { + src, err := ioutil.ReadFile(filename) + if err != nil { + fmt.Fprintln(os.Stderr, err) + continue + } + files[filename] = src + } + + l := new(lint.Linter) + ps, err := l.LintFiles(files) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + return + } + for _, p := range ps { + if p.Confidence >= *minConfidence { + fmt.Printf("%v: %s\n", p.Position, p.Text) + suggestions++ + } + } +} + +func lintDir(dirname string) { + pkg, err := build.ImportDir(dirname, 0) + lintImportedPackage(pkg, err) +} + +func lintPackage(pkgname string) { + pkg, err := build.Import(pkgname, ".", 0) + lintImportedPackage(pkg, err) +} + +func lintImportedPackage(pkg *build.Package, err error) { + if err != nil { + if _, nogo := err.(*build.NoGoError); nogo { + // Don't complain if the failure is due to no Go source files. + return + } + fmt.Fprintln(os.Stderr, err) + return + } + + var files []string + files = append(files, pkg.GoFiles...) + files = append(files, pkg.CgoFiles...) + files = append(files, pkg.TestGoFiles...) + if pkg.Dir != "." { + for i, f := range files { + files[i] = filepath.Join(pkg.Dir, f) + } + } + // TODO(dsymonds): Do foo_test too (pkg.XTestGoFiles) + + lintFiles(files...) +} diff --git a/vendor/golang.org/x/lint/golint/import.go b/vendor/golang.org/x/lint/golint/import.go new file mode 100644 index 0000000000..2ba9dea779 --- /dev/null +++ b/vendor/golang.org/x/lint/golint/import.go @@ -0,0 +1,309 @@ +package main + +/* + +This file holds a direct copy of the import path matching code of +https://github.com/golang/go/blob/master/src/cmd/go/main.go. It can be +replaced when https://golang.org/issue/8768 is resolved. + +It has been updated to follow upstream changes in a few ways. + +*/ + +import ( + "fmt" + "go/build" + "log" + "os" + "path" + "path/filepath" + "regexp" + "runtime" + "strings" +) + +var ( + buildContext = build.Default + goroot = filepath.Clean(runtime.GOROOT()) + gorootSrc = filepath.Join(goroot, "src") +) + +// importPathsNoDotExpansion returns the import paths to use for the given +// command line, but it does no ... expansion. +func importPathsNoDotExpansion(args []string) []string { + if len(args) == 0 { + return []string{"."} + } + var out []string + for _, a := range args { + // Arguments are supposed to be import paths, but + // as a courtesy to Windows developers, rewrite \ to / + // in command-line arguments. Handles .\... and so on. + if filepath.Separator == '\\' { + a = strings.Replace(a, `\`, `/`, -1) + } + + // Put argument in canonical form, but preserve leading ./. + if strings.HasPrefix(a, "./") { + a = "./" + path.Clean(a) + if a == "./." { + a = "." + } + } else { + a = path.Clean(a) + } + if a == "all" || a == "std" { + out = append(out, allPackages(a)...) + continue + } + out = append(out, a) + } + return out +} + +// importPaths returns the import paths to use for the given command line. +func importPaths(args []string) []string { + args = importPathsNoDotExpansion(args) + var out []string + for _, a := range args { + if strings.Contains(a, "...") { + if build.IsLocalImport(a) { + out = append(out, allPackagesInFS(a)...) + } else { + out = append(out, allPackages(a)...) + } + continue + } + out = append(out, a) + } + return out +} + +// matchPattern(pattern)(name) reports whether +// name matches pattern. Pattern is a limited glob +// pattern in which '...' means 'any string' and there +// is no other special syntax. +func matchPattern(pattern string) func(name string) bool { + re := regexp.QuoteMeta(pattern) + re = strings.Replace(re, `\.\.\.`, `.*`, -1) + // Special case: foo/... matches foo too. + if strings.HasSuffix(re, `/.*`) { + re = re[:len(re)-len(`/.*`)] + `(/.*)?` + } + reg := regexp.MustCompile(`^` + re + `$`) + return func(name string) bool { + return reg.MatchString(name) + } +} + +// hasPathPrefix reports whether the path s begins with the +// elements in prefix. +func hasPathPrefix(s, prefix string) bool { + switch { + default: + return false + case len(s) == len(prefix): + return s == prefix + case len(s) > len(prefix): + if prefix != "" && prefix[len(prefix)-1] == '/' { + return strings.HasPrefix(s, prefix) + } + return s[len(prefix)] == '/' && s[:len(prefix)] == prefix + } +} + +// treeCanMatchPattern(pattern)(name) reports whether +// name or children of name can possibly match pattern. +// Pattern is the same limited glob accepted by matchPattern. +func treeCanMatchPattern(pattern string) func(name string) bool { + wildCard := false + if i := strings.Index(pattern, "..."); i >= 0 { + wildCard = true + pattern = pattern[:i] + } + return func(name string) bool { + return len(name) <= len(pattern) && hasPathPrefix(pattern, name) || + wildCard && strings.HasPrefix(name, pattern) + } +} + +// allPackages returns all the packages that can be found +// under the $GOPATH directories and $GOROOT matching pattern. +// The pattern is either "all" (all packages), "std" (standard packages) +// or a path including "...". +func allPackages(pattern string) []string { + pkgs := matchPackages(pattern) + if len(pkgs) == 0 { + fmt.Fprintf(os.Stderr, "warning: %q matched no packages\n", pattern) + } + return pkgs +} + +func matchPackages(pattern string) []string { + match := func(string) bool { return true } + treeCanMatch := func(string) bool { return true } + if pattern != "all" && pattern != "std" { + match = matchPattern(pattern) + treeCanMatch = treeCanMatchPattern(pattern) + } + + have := map[string]bool{ + "builtin": true, // ignore pseudo-package that exists only for documentation + } + if !buildContext.CgoEnabled { + have["runtime/cgo"] = true // ignore during walk + } + var pkgs []string + + // Commands + cmd := filepath.Join(goroot, "src/cmd") + string(filepath.Separator) + filepath.Walk(cmd, func(path string, fi os.FileInfo, err error) error { + if err != nil || !fi.IsDir() || path == cmd { + return nil + } + name := path[len(cmd):] + if !treeCanMatch(name) { + return filepath.SkipDir + } + // Commands are all in cmd/, not in subdirectories. + if strings.Contains(name, string(filepath.Separator)) { + return filepath.SkipDir + } + + // We use, e.g., cmd/gofmt as the pseudo import path for gofmt. + name = "cmd/" + name + if have[name] { + return nil + } + have[name] = true + if !match(name) { + return nil + } + _, err = buildContext.ImportDir(path, 0) + if err != nil { + if _, noGo := err.(*build.NoGoError); !noGo { + log.Print(err) + } + return nil + } + pkgs = append(pkgs, name) + return nil + }) + + for _, src := range buildContext.SrcDirs() { + if (pattern == "std" || pattern == "cmd") && src != gorootSrc { + continue + } + src = filepath.Clean(src) + string(filepath.Separator) + root := src + if pattern == "cmd" { + root += "cmd" + string(filepath.Separator) + } + filepath.Walk(root, func(path string, fi os.FileInfo, err error) error { + if err != nil || !fi.IsDir() || path == src { + return nil + } + + // Avoid .foo, _foo, and testdata directory trees. + _, elem := filepath.Split(path) + if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" { + return filepath.SkipDir + } + + name := filepath.ToSlash(path[len(src):]) + if pattern == "std" && (strings.Contains(name, ".") || name == "cmd") { + // The name "std" is only the standard library. + // If the name is cmd, it's the root of the command tree. + return filepath.SkipDir + } + if !treeCanMatch(name) { + return filepath.SkipDir + } + if have[name] { + return nil + } + have[name] = true + if !match(name) { + return nil + } + _, err = buildContext.ImportDir(path, 0) + if err != nil { + if _, noGo := err.(*build.NoGoError); noGo { + return nil + } + } + pkgs = append(pkgs, name) + return nil + }) + } + return pkgs +} + +// allPackagesInFS is like allPackages but is passed a pattern +// beginning ./ or ../, meaning it should scan the tree rooted +// at the given directory. There are ... in the pattern too. +func allPackagesInFS(pattern string) []string { + pkgs := matchPackagesInFS(pattern) + if len(pkgs) == 0 { + fmt.Fprintf(os.Stderr, "warning: %q matched no packages\n", pattern) + } + return pkgs +} + +func matchPackagesInFS(pattern string) []string { + // Find directory to begin the scan. + // Could be smarter but this one optimization + // is enough for now, since ... is usually at the + // end of a path. + i := strings.Index(pattern, "...") + dir, _ := path.Split(pattern[:i]) + + // pattern begins with ./ or ../. + // path.Clean will discard the ./ but not the ../. + // We need to preserve the ./ for pattern matching + // and in the returned import paths. + prefix := "" + if strings.HasPrefix(pattern, "./") { + prefix = "./" + } + match := matchPattern(pattern) + + var pkgs []string + filepath.Walk(dir, func(path string, fi os.FileInfo, err error) error { + if err != nil || !fi.IsDir() { + return nil + } + if path == dir { + // filepath.Walk starts at dir and recurses. For the recursive case, + // the path is the result of filepath.Join, which calls filepath.Clean. + // The initial case is not Cleaned, though, so we do this explicitly. + // + // This converts a path like "./io/" to "io". Without this step, running + // "cd $GOROOT/src/pkg; go list ./io/..." would incorrectly skip the io + // package, because prepending the prefix "./" to the unclean path would + // result in "././io", and match("././io") returns false. + path = filepath.Clean(path) + } + + // Avoid .foo, _foo, and testdata directory trees, but do not avoid "." or "..". + _, elem := filepath.Split(path) + dot := strings.HasPrefix(elem, ".") && elem != "." && elem != ".." + if dot || strings.HasPrefix(elem, "_") || elem == "testdata" { + return filepath.SkipDir + } + + name := prefix + filepath.ToSlash(path) + if !match(name) { + return nil + } + if _, err = build.ImportDir(path, 0); err != nil { + if _, noGo := err.(*build.NoGoError); !noGo { + log.Print(err) + } + return nil + } + pkgs = append(pkgs, name) + return nil + }) + return pkgs +} diff --git a/vendor/golang.org/x/lint/golint/importcomment.go b/vendor/golang.org/x/lint/golint/importcomment.go new file mode 100644 index 0000000000..d5b32f7346 --- /dev/null +++ b/vendor/golang.org/x/lint/golint/importcomment.go @@ -0,0 +1,13 @@ +// Copyright (c) 2018 The Go Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd. + +// +build go1.12 + +// Require use of the correct import path only for Go 1.12+ users, so +// any breakages coincide with people updating their CI configs or +// whatnot. + +package main // import "golang.org/x/lint/golint" diff --git a/vendor/golang.org/x/lint/lint.go b/vendor/golang.org/x/lint/lint.go new file mode 100644 index 0000000000..532a75ad24 --- /dev/null +++ b/vendor/golang.org/x/lint/lint.go @@ -0,0 +1,1614 @@ +// Copyright (c) 2013 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 or at +// https://developers.google.com/open-source/licenses/bsd. + +// Package lint contains a linter for Go source code. +package lint // import "golang.org/x/lint" + +import ( + "bufio" + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/printer" + "go/token" + "go/types" + "regexp" + "sort" + "strconv" + "strings" + "unicode" + "unicode/utf8" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/go/gcexportdata" +) + +const styleGuideBase = "https://golang.org/wiki/CodeReviewComments" + +// A Linter lints Go source code. +type Linter struct { +} + +// Problem represents a problem in some source code. +type Problem struct { + Position token.Position // position in source file + Text string // the prose that describes the problem + Link string // (optional) the link to the style guide for the problem + Confidence float64 // a value in (0,1] estimating the confidence in this problem's correctness + LineText string // the source line + Category string // a short name for the general category of the problem + + // If the problem has a suggested fix (the minority case), + // ReplacementLine is a full replacement for the relevant line of the source file. + ReplacementLine string +} + +func (p *Problem) String() string { + if p.Link != "" { + return p.Text + "\n\n" + p.Link + } + return p.Text +} + +type byPosition []Problem + +func (p byPosition) Len() int { return len(p) } +func (p byPosition) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +func (p byPosition) Less(i, j int) bool { + pi, pj := p[i].Position, p[j].Position + + if pi.Filename != pj.Filename { + return pi.Filename < pj.Filename + } + if pi.Line != pj.Line { + return pi.Line < pj.Line + } + if pi.Column != pj.Column { + return pi.Column < pj.Column + } + + return p[i].Text < p[j].Text +} + +// Lint lints src. +func (l *Linter) Lint(filename string, src []byte) ([]Problem, error) { + return l.LintFiles(map[string][]byte{filename: src}) +} + +// LintFiles lints a set of files of a single package. +// The argument is a map of filename to source. +func (l *Linter) LintFiles(files map[string][]byte) ([]Problem, error) { + pkg := &pkg{ + fset: token.NewFileSet(), + files: make(map[string]*file), + } + var pkgName string + for filename, src := range files { + if isGenerated(src) { + continue // See issue #239 + } + f, err := parser.ParseFile(pkg.fset, filename, src, parser.ParseComments) + if err != nil { + return nil, err + } + if pkgName == "" { + pkgName = f.Name.Name + } else if f.Name.Name != pkgName { + return nil, fmt.Errorf("%s is in package %s, not %s", filename, f.Name.Name, pkgName) + } + pkg.files[filename] = &file{ + pkg: pkg, + f: f, + fset: pkg.fset, + src: src, + filename: filename, + } + } + if len(pkg.files) == 0 { + return nil, nil + } + return pkg.lint(), nil +} + +var ( + genHdr = []byte("// Code generated ") + genFtr = []byte(" DO NOT EDIT.") +) + +// isGenerated reports whether the source file is generated code +// according the rules from https://golang.org/s/generatedcode. +func isGenerated(src []byte) bool { + sc := bufio.NewScanner(bytes.NewReader(src)) + for sc.Scan() { + b := sc.Bytes() + if bytes.HasPrefix(b, genHdr) && bytes.HasSuffix(b, genFtr) && len(b) >= len(genHdr)+len(genFtr) { + return true + } + } + return false +} + +// pkg represents a package being linted. +type pkg struct { + fset *token.FileSet + files map[string]*file + + typesPkg *types.Package + typesInfo *types.Info + + // sortable is the set of types in the package that implement sort.Interface. + sortable map[string]bool + // main is whether this is a "main" package. + main bool + + problems []Problem +} + +func (p *pkg) lint() []Problem { + if err := p.typeCheck(); err != nil { + /* TODO(dsymonds): Consider reporting these errors when golint operates on entire packages. + if e, ok := err.(types.Error); ok { + pos := p.fset.Position(e.Pos) + conf := 1.0 + if strings.Contains(e.Msg, "can't find import: ") { + // Golint is probably being run in a context that doesn't support + // typechecking (e.g. package files aren't found), so don't warn about it. + conf = 0 + } + if conf > 0 { + p.errorfAt(pos, conf, category("typechecking"), e.Msg) + } + + // TODO(dsymonds): Abort if !e.Soft? + } + */ + } + + p.scanSortable() + p.main = p.isMain() + + for _, f := range p.files { + f.lint() + } + + sort.Sort(byPosition(p.problems)) + + return p.problems +} + +// file represents a file being linted. +type file struct { + pkg *pkg + f *ast.File + fset *token.FileSet + src []byte + filename string +} + +func (f *file) isTest() bool { return strings.HasSuffix(f.filename, "_test.go") } + +func (f *file) lint() { + f.lintPackageComment() + f.lintImports() + f.lintBlankImports() + f.lintExported() + f.lintNames() + f.lintElses() + f.lintRanges() + f.lintErrorf() + f.lintErrors() + f.lintErrorStrings() + f.lintReceiverNames() + f.lintIncDec() + f.lintErrorReturn() + f.lintUnexportedReturn() + f.lintTimeNames() + f.lintContextKeyTypes() + f.lintContextArgs() +} + +type link string +type category string + +// The variadic arguments may start with link and category types, +// and must end with a format string and any arguments. +// It returns the new Problem. +func (f *file) errorf(n ast.Node, confidence float64, args ...interface{}) *Problem { + pos := f.fset.Position(n.Pos()) + if pos.Filename == "" { + pos.Filename = f.filename + } + return f.pkg.errorfAt(pos, confidence, args...) +} + +func (p *pkg) errorfAt(pos token.Position, confidence float64, args ...interface{}) *Problem { + problem := Problem{ + Position: pos, + Confidence: confidence, + } + if pos.Filename != "" { + // The file might not exist in our mapping if a //line directive was encountered. + if f, ok := p.files[pos.Filename]; ok { + problem.LineText = srcLine(f.src, pos) + } + } + +argLoop: + for len(args) > 1 { // always leave at least the format string in args + switch v := args[0].(type) { + case link: + problem.Link = string(v) + case category: + problem.Category = string(v) + default: + break argLoop + } + args = args[1:] + } + + problem.Text = fmt.Sprintf(args[0].(string), args[1:]...) + + p.problems = append(p.problems, problem) + return &p.problems[len(p.problems)-1] +} + +var newImporter = func(fset *token.FileSet) types.ImporterFrom { + return gcexportdata.NewImporter(fset, make(map[string]*types.Package)) +} + +func (p *pkg) typeCheck() error { + config := &types.Config{ + // By setting a no-op error reporter, the type checker does as much work as possible. + Error: func(error) {}, + Importer: newImporter(p.fset), + } + info := &types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), + Uses: make(map[*ast.Ident]types.Object), + Scopes: make(map[ast.Node]*types.Scope), + } + var anyFile *file + var astFiles []*ast.File + for _, f := range p.files { + anyFile = f + astFiles = append(astFiles, f.f) + } + pkg, err := config.Check(anyFile.f.Name.Name, p.fset, astFiles, info) + // Remember the typechecking info, even if config.Check failed, + // since we will get partial information. + p.typesPkg = pkg + p.typesInfo = info + return err +} + +func (p *pkg) typeOf(expr ast.Expr) types.Type { + if p.typesInfo == nil { + return nil + } + return p.typesInfo.TypeOf(expr) +} + +func (p *pkg) isNamedType(typ types.Type, importPath, name string) bool { + n, ok := typ.(*types.Named) + if !ok { + return false + } + tn := n.Obj() + return tn != nil && tn.Pkg() != nil && tn.Pkg().Path() == importPath && tn.Name() == name +} + +// scopeOf returns the tightest scope encompassing id. +func (p *pkg) scopeOf(id *ast.Ident) *types.Scope { + var scope *types.Scope + if obj := p.typesInfo.ObjectOf(id); obj != nil { + scope = obj.Parent() + } + if scope == p.typesPkg.Scope() { + // We were given a top-level identifier. + // Use the file-level scope instead of the package-level scope. + pos := id.Pos() + for _, f := range p.files { + if f.f.Pos() <= pos && pos < f.f.End() { + scope = p.typesInfo.Scopes[f.f] + break + } + } + } + return scope +} + +func (p *pkg) scanSortable() { + p.sortable = make(map[string]bool) + + // bitfield for which methods exist on each type. + const ( + Len = 1 << iota + Less + Swap + ) + nmap := map[string]int{"Len": Len, "Less": Less, "Swap": Swap} + has := make(map[string]int) + for _, f := range p.files { + f.walk(func(n ast.Node) bool { + fn, ok := n.(*ast.FuncDecl) + if !ok || fn.Recv == nil || len(fn.Recv.List) == 0 { + return true + } + // TODO(dsymonds): We could check the signature to be more precise. + recv := receiverType(fn) + if i, ok := nmap[fn.Name.Name]; ok { + has[recv] |= i + } + return false + }) + } + for typ, ms := range has { + if ms == Len|Less|Swap { + p.sortable[typ] = true + } + } +} + +func (p *pkg) isMain() bool { + for _, f := range p.files { + if f.isMain() { + return true + } + } + return false +} + +func (f *file) isMain() bool { + if f.f.Name.Name == "main" { + return true + } + return false +} + +// lintPackageComment checks package comments. It complains if +// there is no package comment, or if it is not of the right form. +// This has a notable false positive in that a package comment +// could rightfully appear in a different file of the same package, +// but that's not easy to fix since this linter is file-oriented. +func (f *file) lintPackageComment() { + if f.isTest() { + return + } + + const ref = styleGuideBase + "#package-comments" + prefix := "Package " + f.f.Name.Name + " " + + // Look for a detached package comment. + // First, scan for the last comment that occurs before the "package" keyword. + var lastCG *ast.CommentGroup + for _, cg := range f.f.Comments { + if cg.Pos() > f.f.Package { + // Gone past "package" keyword. + break + } + lastCG = cg + } + if lastCG != nil && strings.HasPrefix(lastCG.Text(), prefix) { + endPos := f.fset.Position(lastCG.End()) + pkgPos := f.fset.Position(f.f.Package) + if endPos.Line+1 < pkgPos.Line { + // There isn't a great place to anchor this error; + // the start of the blank lines between the doc and the package statement + // is at least pointing at the location of the problem. + pos := token.Position{ + Filename: endPos.Filename, + // Offset not set; it is non-trivial, and doesn't appear to be needed. + Line: endPos.Line + 1, + Column: 1, + } + f.pkg.errorfAt(pos, 0.9, link(ref), category("comments"), "package comment is detached; there should be no blank lines between it and the package statement") + return + } + } + + if f.f.Doc == nil { + f.errorf(f.f, 0.2, link(ref), category("comments"), "should have a package comment, unless it's in another file for this package") + return + } + s := f.f.Doc.Text() + if ts := strings.TrimLeft(s, " \t"); ts != s { + f.errorf(f.f.Doc, 1, link(ref), category("comments"), "package comment should not have leading space") + s = ts + } + // Only non-main packages need to keep to this form. + if !f.pkg.main && !strings.HasPrefix(s, prefix) { + f.errorf(f.f.Doc, 1, link(ref), category("comments"), `package comment should be of the form "%s..."`, prefix) + } +} + +// lintBlankImports complains if a non-main package has blank imports that are +// not documented. +func (f *file) lintBlankImports() { + // In package main and in tests, we don't complain about blank imports. + if f.pkg.main || f.isTest() { + return + } + + // The first element of each contiguous group of blank imports should have + // an explanatory comment of some kind. + for i, imp := range f.f.Imports { + pos := f.fset.Position(imp.Pos()) + + if !isBlank(imp.Name) { + continue // Ignore non-blank imports. + } + if i > 0 { + prev := f.f.Imports[i-1] + prevPos := f.fset.Position(prev.Pos()) + if isBlank(prev.Name) && prevPos.Line+1 == pos.Line { + continue // A subsequent blank in a group. + } + } + + // This is the first blank import of a group. + if imp.Doc == nil && imp.Comment == nil { + ref := "" + f.errorf(imp, 1, link(ref), category("imports"), "a blank import should be only in a main or test package, or have a comment justifying it") + } + } +} + +// lintImports examines import blocks. +func (f *file) lintImports() { + for i, is := range f.f.Imports { + _ = i + if is.Name != nil && is.Name.Name == "." && !f.isTest() { + f.errorf(is, 1, link(styleGuideBase+"#import-dot"), category("imports"), "should not use dot imports") + } + + } +} + +const docCommentsLink = styleGuideBase + "#doc-comments" + +// lintExported examines the exported names. +// It complains if any required doc comments are missing, +// or if they are not of the right form. The exact rules are in +// lintFuncDoc, lintTypeDoc and lintValueSpecDoc; this function +// also tracks the GenDecl structure being traversed to permit +// doc comments for constants to be on top of the const block. +// It also complains if the names stutter when combined with +// the package name. +func (f *file) lintExported() { + if f.isTest() { + return + } + + var lastGen *ast.GenDecl // last GenDecl entered. + + // Set of GenDecls that have already had missing comments flagged. + genDeclMissingComments := make(map[*ast.GenDecl]bool) + + f.walk(func(node ast.Node) bool { + switch v := node.(type) { + case *ast.GenDecl: + if v.Tok == token.IMPORT { + return false + } + // token.CONST, token.TYPE or token.VAR + lastGen = v + return true + case *ast.FuncDecl: + f.lintFuncDoc(v) + if v.Recv == nil { + // Only check for stutter on functions, not methods. + // Method names are not used package-qualified. + f.checkStutter(v.Name, "func") + } + // Don't proceed inside funcs. + return false + case *ast.TypeSpec: + // inside a GenDecl, which usually has the doc + doc := v.Doc + if doc == nil { + doc = lastGen.Doc + } + f.lintTypeDoc(v, doc) + f.checkStutter(v.Name, "type") + // Don't proceed inside types. + return false + case *ast.ValueSpec: + f.lintValueSpecDoc(v, lastGen, genDeclMissingComments) + return false + } + return true + }) +} + +var ( + allCapsRE = regexp.MustCompile(`^[A-Z0-9_]+$`) + anyCapsRE = regexp.MustCompile(`[A-Z]`) +) + +// knownNameExceptions is a set of names that are known to be exempt from naming checks. +// This is usually because they are constrained by having to match names in the +// standard library. +var knownNameExceptions = map[string]bool{ + "LastInsertId": true, // must match database/sql + "kWh": true, +} + +func isInTopLevel(f *ast.File, ident *ast.Ident) bool { + path, _ := astutil.PathEnclosingInterval(f, ident.Pos(), ident.End()) + for _, f := range path { + switch f.(type) { + case *ast.File, *ast.GenDecl, *ast.ValueSpec, *ast.Ident: + continue + } + return false + } + return true +} + +// lintNames examines all names in the file. +// It complains if any use underscores or incorrect known initialisms. +func (f *file) lintNames() { + // Package names need slightly different handling than other names. + if strings.Contains(f.f.Name.Name, "_") && !strings.HasSuffix(f.f.Name.Name, "_test") { + f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("naming"), "don't use an underscore in package name") + } + if anyCapsRE.MatchString(f.f.Name.Name) { + f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("mixed-caps"), "don't use MixedCaps in package name; %s should be %s", f.f.Name.Name, strings.ToLower(f.f.Name.Name)) + } + + check := func(id *ast.Ident, thing string) { + if id.Name == "_" { + return + } + if knownNameExceptions[id.Name] { + return + } + + // Handle two common styles from other languages that don't belong in Go. + if len(id.Name) >= 5 && allCapsRE.MatchString(id.Name) && strings.Contains(id.Name, "_") { + capCount := 0 + for _, c := range id.Name { + if 'A' <= c && c <= 'Z' { + capCount++ + } + } + if capCount >= 2 { + f.errorf(id, 0.8, link(styleGuideBase+"#mixed-caps"), category("naming"), "don't use ALL_CAPS in Go names; use CamelCase") + return + } + } + if thing == "const" || (thing == "var" && isInTopLevel(f.f, id)) { + if len(id.Name) > 2 && id.Name[0] == 'k' && id.Name[1] >= 'A' && id.Name[1] <= 'Z' { + should := string(id.Name[1]+'a'-'A') + id.Name[2:] + f.errorf(id, 0.8, link(styleGuideBase+"#mixed-caps"), category("naming"), "don't use leading k in Go names; %s %s should be %s", thing, id.Name, should) + } + } + + should := lintName(id.Name) + if id.Name == should { + return + } + + if len(id.Name) > 2 && strings.Contains(id.Name[1:], "_") { + f.errorf(id, 0.9, link("http://golang.org/doc/effective_go.html#mixed-caps"), category("naming"), "don't use underscores in Go names; %s %s should be %s", thing, id.Name, should) + return + } + f.errorf(id, 0.8, link(styleGuideBase+"#initialisms"), category("naming"), "%s %s should be %s", thing, id.Name, should) + } + checkList := func(fl *ast.FieldList, thing string) { + if fl == nil { + return + } + for _, f := range fl.List { + for _, id := range f.Names { + check(id, thing) + } + } + } + f.walk(func(node ast.Node) bool { + switch v := node.(type) { + case *ast.AssignStmt: + if v.Tok == token.ASSIGN { + return true + } + for _, exp := range v.Lhs { + if id, ok := exp.(*ast.Ident); ok { + check(id, "var") + } + } + case *ast.FuncDecl: + if f.isTest() && (strings.HasPrefix(v.Name.Name, "Example") || strings.HasPrefix(v.Name.Name, "Test") || strings.HasPrefix(v.Name.Name, "Benchmark")) { + return true + } + + thing := "func" + if v.Recv != nil { + thing = "method" + } + + // Exclude naming warnings for functions that are exported to C but + // not exported in the Go API. + // See https://github.com/golang/lint/issues/144. + if ast.IsExported(v.Name.Name) || !isCgoExported(v) { + check(v.Name, thing) + } + + checkList(v.Type.Params, thing+" parameter") + checkList(v.Type.Results, thing+" result") + case *ast.GenDecl: + if v.Tok == token.IMPORT { + return true + } + var thing string + switch v.Tok { + case token.CONST: + thing = "const" + case token.TYPE: + thing = "type" + case token.VAR: + thing = "var" + } + for _, spec := range v.Specs { + switch s := spec.(type) { + case *ast.TypeSpec: + check(s.Name, thing) + case *ast.ValueSpec: + for _, id := range s.Names { + check(id, thing) + } + } + } + case *ast.InterfaceType: + // Do not check interface method names. + // They are often constrainted by the method names of concrete types. + for _, x := range v.Methods.List { + ft, ok := x.Type.(*ast.FuncType) + if !ok { // might be an embedded interface name + continue + } + checkList(ft.Params, "interface method parameter") + checkList(ft.Results, "interface method result") + } + case *ast.RangeStmt: + if v.Tok == token.ASSIGN { + return true + } + if id, ok := v.Key.(*ast.Ident); ok { + check(id, "range var") + } + if id, ok := v.Value.(*ast.Ident); ok { + check(id, "range var") + } + case *ast.StructType: + for _, f := range v.Fields.List { + for _, id := range f.Names { + check(id, "struct field") + } + } + } + return true + }) +} + +// lintName returns a different name if it should be different. +func lintName(name string) (should string) { + // Fast path for simple cases: "_" and all lowercase. + if name == "_" { + return name + } + allLower := true + for _, r := range name { + if !unicode.IsLower(r) { + allLower = false + break + } + } + if allLower { + return name + } + + // Split camelCase at any lower->upper transition, and split on underscores. + // Check each word for common initialisms. + runes := []rune(name) + w, i := 0, 0 // index of start of word, scan + for i+1 <= len(runes) { + eow := false // whether we hit the end of a word + if i+1 == len(runes) { + eow = true + } else if runes[i+1] == '_' { + // underscore; shift the remainder forward over any run of underscores + eow = true + n := 1 + for i+n+1 < len(runes) && runes[i+n+1] == '_' { + n++ + } + + // Leave at most one underscore if the underscore is between two digits + if i+n+1 < len(runes) && unicode.IsDigit(runes[i]) && unicode.IsDigit(runes[i+n+1]) { + n-- + } + + copy(runes[i+1:], runes[i+n+1:]) + runes = runes[:len(runes)-n] + } else if unicode.IsLower(runes[i]) && !unicode.IsLower(runes[i+1]) { + // lower->non-lower + eow = true + } + i++ + if !eow { + continue + } + + // [w,i) is a word. + word := string(runes[w:i]) + if u := strings.ToUpper(word); commonInitialisms[u] { + // Keep consistent case, which is lowercase only at the start. + if w == 0 && unicode.IsLower(runes[w]) { + u = strings.ToLower(u) + } + // All the common initialisms are ASCII, + // so we can replace the bytes exactly. + copy(runes[w:], []rune(u)) + } else if w > 0 && strings.ToLower(word) == word { + // already all lowercase, and not the first word, so uppercase the first character. + runes[w] = unicode.ToUpper(runes[w]) + } + w = i + } + return string(runes) +} + +// commonInitialisms is a set of common initialisms. +// Only add entries that are highly unlikely to be non-initialisms. +// For instance, "ID" is fine (Freudian code is rare), but "AND" is not. +var commonInitialisms = map[string]bool{ + "ACL": true, + "API": true, + "ASCII": true, + "CPU": true, + "CSS": true, + "DNS": true, + "EOF": true, + "GUID": true, + "HTML": true, + "HTTP": true, + "HTTPS": true, + "ID": true, + "IP": true, + "JSON": true, + "LHS": true, + "QPS": true, + "RAM": true, + "RHS": true, + "RPC": true, + "SLA": true, + "SMTP": true, + "SQL": true, + "SSH": true, + "TCP": true, + "TLS": true, + "TTL": true, + "UDP": true, + "UI": true, + "UID": true, + "UUID": true, + "URI": true, + "URL": true, + "UTF8": true, + "VM": true, + "XML": true, + "XMPP": true, + "XSRF": true, + "XSS": true, +} + +// lintTypeDoc examines the doc comment on a type. +// It complains if they are missing from an exported type, +// or if they are not of the standard form. +func (f *file) lintTypeDoc(t *ast.TypeSpec, doc *ast.CommentGroup) { + if !ast.IsExported(t.Name.Name) { + return + } + if doc == nil { + f.errorf(t, 1, link(docCommentsLink), category("comments"), "exported type %v should have comment or be unexported", t.Name) + return + } + + s := doc.Text() + articles := [...]string{"A", "An", "The"} + for _, a := range articles { + if strings.HasPrefix(s, a+" ") { + s = s[len(a)+1:] + break + } + } + if !strings.HasPrefix(s, t.Name.Name+" ") { + f.errorf(doc, 1, link(docCommentsLink), category("comments"), `comment on exported type %v should be of the form "%v ..." (with optional leading article)`, t.Name, t.Name) + } +} + +var commonMethods = map[string]bool{ + "Error": true, + "Read": true, + "ServeHTTP": true, + "String": true, + "Write": true, +} + +// lintFuncDoc examines doc comments on functions and methods. +// It complains if they are missing, or not of the right form. +// It has specific exclusions for well-known methods (see commonMethods above). +func (f *file) lintFuncDoc(fn *ast.FuncDecl) { + if !ast.IsExported(fn.Name.Name) { + // func is unexported + return + } + kind := "function" + name := fn.Name.Name + if fn.Recv != nil && len(fn.Recv.List) > 0 { + // method + kind = "method" + recv := receiverType(fn) + if !ast.IsExported(recv) { + // receiver is unexported + return + } + if commonMethods[name] { + return + } + switch name { + case "Len", "Less", "Swap": + if f.pkg.sortable[recv] { + return + } + } + name = recv + "." + name + } + if fn.Doc == nil { + f.errorf(fn, 1, link(docCommentsLink), category("comments"), "exported %s %s should have comment or be unexported", kind, name) + return + } + s := fn.Doc.Text() + prefix := fn.Name.Name + " " + if !strings.HasPrefix(s, prefix) { + f.errorf(fn.Doc, 1, link(docCommentsLink), category("comments"), `comment on exported %s %s should be of the form "%s..."`, kind, name, prefix) + } +} + +// lintValueSpecDoc examines package-global variables and constants. +// It complains if they are not individually declared, +// or if they are not suitably documented in the right form (unless they are in a block that is commented). +func (f *file) lintValueSpecDoc(vs *ast.ValueSpec, gd *ast.GenDecl, genDeclMissingComments map[*ast.GenDecl]bool) { + kind := "var" + if gd.Tok == token.CONST { + kind = "const" + } + + if len(vs.Names) > 1 { + // Check that none are exported except for the first. + for _, n := range vs.Names[1:] { + if ast.IsExported(n.Name) { + f.errorf(vs, 1, category("comments"), "exported %s %s should have its own declaration", kind, n.Name) + return + } + } + } + + // Only one name. + name := vs.Names[0].Name + if !ast.IsExported(name) { + return + } + + if vs.Doc == nil && gd.Doc == nil { + if genDeclMissingComments[gd] { + return + } + block := "" + if kind == "const" && gd.Lparen.IsValid() { + block = " (or a comment on this block)" + } + f.errorf(vs, 1, link(docCommentsLink), category("comments"), "exported %s %s should have comment%s or be unexported", kind, name, block) + genDeclMissingComments[gd] = true + return + } + // If this GenDecl has parens and a comment, we don't check its comment form. + if gd.Lparen.IsValid() && gd.Doc != nil { + return + } + // The relevant text to check will be on either vs.Doc or gd.Doc. + // Use vs.Doc preferentially. + doc := vs.Doc + if doc == nil { + doc = gd.Doc + } + prefix := name + " " + if !strings.HasPrefix(doc.Text(), prefix) { + f.errorf(doc, 1, link(docCommentsLink), category("comments"), `comment on exported %s %s should be of the form "%s..."`, kind, name, prefix) + } +} + +func (f *file) checkStutter(id *ast.Ident, thing string) { + pkg, name := f.f.Name.Name, id.Name + if !ast.IsExported(name) { + // unexported name + return + } + // A name stutters if the package name is a strict prefix + // and the next character of the name starts a new word. + if len(name) <= len(pkg) { + // name is too short to stutter. + // This permits the name to be the same as the package name. + return + } + if !strings.EqualFold(pkg, name[:len(pkg)]) { + return + } + // We can assume the name is well-formed UTF-8. + // If the next rune after the package name is uppercase or an underscore + // the it's starting a new word and thus this name stutters. + rem := name[len(pkg):] + if next, _ := utf8.DecodeRuneInString(rem); next == '_' || unicode.IsUpper(next) { + f.errorf(id, 0.8, link(styleGuideBase+"#package-names"), category("naming"), "%s name will be used as %s.%s by other packages, and that stutters; consider calling this %s", thing, pkg, name, rem) + } +} + +// zeroLiteral is a set of ast.BasicLit values that are zero values. +// It is not exhaustive. +var zeroLiteral = map[string]bool{ + "false": true, // bool + // runes + `'\x00'`: true, + `'\000'`: true, + // strings + `""`: true, + "``": true, + // numerics + "0": true, + "0.": true, + "0.0": true, + "0i": true, +} + +// lintElses examines else blocks. It complains about any else block whose if block ends in a return. +func (f *file) lintElses() { + // We don't want to flag if { } else if { } else { } constructions. + // They will appear as an IfStmt whose Else field is also an IfStmt. + // Record such a node so we ignore it when we visit it. + ignore := make(map[*ast.IfStmt]bool) + + f.walk(func(node ast.Node) bool { + ifStmt, ok := node.(*ast.IfStmt) + if !ok || ifStmt.Else == nil { + return true + } + if elseif, ok := ifStmt.Else.(*ast.IfStmt); ok { + ignore[elseif] = true + return true + } + if ignore[ifStmt] { + return true + } + if _, ok := ifStmt.Else.(*ast.BlockStmt); !ok { + // only care about elses without conditions + return true + } + if len(ifStmt.Body.List) == 0 { + return true + } + shortDecl := false // does the if statement have a ":=" initialization statement? + if ifStmt.Init != nil { + if as, ok := ifStmt.Init.(*ast.AssignStmt); ok && as.Tok == token.DEFINE { + shortDecl = true + } + } + lastStmt := ifStmt.Body.List[len(ifStmt.Body.List)-1] + if _, ok := lastStmt.(*ast.ReturnStmt); ok { + extra := "" + if shortDecl { + extra = " (move short variable declaration to its own line if necessary)" + } + f.errorf(ifStmt.Else, 1, link(styleGuideBase+"#indent-error-flow"), category("indent"), "if block ends with a return statement, so drop this else and outdent its block"+extra) + } + return true + }) +} + +// lintRanges examines range clauses. It complains about redundant constructions. +func (f *file) lintRanges() { + f.walk(func(node ast.Node) bool { + rs, ok := node.(*ast.RangeStmt) + if !ok { + return true + } + + if isIdent(rs.Key, "_") && (rs.Value == nil || isIdent(rs.Value, "_")) { + p := f.errorf(rs.Key, 1, category("range-loop"), "should omit values from range; this loop is equivalent to `for range ...`") + + newRS := *rs // shallow copy + newRS.Value = nil + newRS.Key = nil + p.ReplacementLine = f.firstLineOf(&newRS, rs) + + return true + } + + if isIdent(rs.Value, "_") { + p := f.errorf(rs.Value, 1, category("range-loop"), "should omit 2nd value from range; this loop is equivalent to `for %s %s range ...`", f.render(rs.Key), rs.Tok) + + newRS := *rs // shallow copy + newRS.Value = nil + p.ReplacementLine = f.firstLineOf(&newRS, rs) + } + + return true + }) +} + +// lintErrorf examines errors.New and testing.Error calls. It complains if its only argument is an fmt.Sprintf invocation. +func (f *file) lintErrorf() { + f.walk(func(node ast.Node) bool { + ce, ok := node.(*ast.CallExpr) + if !ok || len(ce.Args) != 1 { + return true + } + isErrorsNew := isPkgDot(ce.Fun, "errors", "New") + var isTestingError bool + se, ok := ce.Fun.(*ast.SelectorExpr) + if ok && se.Sel.Name == "Error" { + if typ := f.pkg.typeOf(se.X); typ != nil { + isTestingError = typ.String() == "*testing.T" + } + } + if !isErrorsNew && !isTestingError { + return true + } + if !f.imports("errors") { + return true + } + arg := ce.Args[0] + ce, ok = arg.(*ast.CallExpr) + if !ok || !isPkgDot(ce.Fun, "fmt", "Sprintf") { + return true + } + errorfPrefix := "fmt" + if isTestingError { + errorfPrefix = f.render(se.X) + } + p := f.errorf(node, 1, category("errors"), "should replace %s(fmt.Sprintf(...)) with %s.Errorf(...)", f.render(se), errorfPrefix) + + m := f.srcLineWithMatch(ce, `^(.*)`+f.render(se)+`\(fmt\.Sprintf\((.*)\)\)(.*)$`) + if m != nil { + p.ReplacementLine = m[1] + errorfPrefix + ".Errorf(" + m[2] + ")" + m[3] + } + + return true + }) +} + +// lintErrors examines global error vars. It complains if they aren't named in the standard way. +func (f *file) lintErrors() { + for _, decl := range f.f.Decls { + gd, ok := decl.(*ast.GenDecl) + if !ok || gd.Tok != token.VAR { + continue + } + for _, spec := range gd.Specs { + spec := spec.(*ast.ValueSpec) + if len(spec.Names) != 1 || len(spec.Values) != 1 { + continue + } + ce, ok := spec.Values[0].(*ast.CallExpr) + if !ok { + continue + } + if !isPkgDot(ce.Fun, "errors", "New") && !isPkgDot(ce.Fun, "fmt", "Errorf") { + continue + } + + id := spec.Names[0] + prefix := "err" + if id.IsExported() { + prefix = "Err" + } + if !strings.HasPrefix(id.Name, prefix) { + f.errorf(id, 0.9, category("naming"), "error var %s should have name of the form %sFoo", id.Name, prefix) + } + } + } +} + +func lintErrorString(s string) (isClean bool, conf float64) { + const basicConfidence = 0.8 + const capConfidence = basicConfidence - 0.2 + first, firstN := utf8.DecodeRuneInString(s) + last, _ := utf8.DecodeLastRuneInString(s) + if last == '.' || last == ':' || last == '!' || last == '\n' { + return false, basicConfidence + } + if unicode.IsUpper(first) { + // People use proper nouns and exported Go identifiers in error strings, + // so decrease the confidence of warnings for capitalization. + if len(s) <= firstN { + return false, capConfidence + } + // Flag strings starting with something that doesn't look like an initialism. + if second, _ := utf8.DecodeRuneInString(s[firstN:]); !unicode.IsUpper(second) { + return false, capConfidence + } + } + return true, 0 +} + +// lintErrorStrings examines error strings. +// It complains if they are capitalized or end in punctuation or a newline. +func (f *file) lintErrorStrings() { + f.walk(func(node ast.Node) bool { + ce, ok := node.(*ast.CallExpr) + if !ok { + return true + } + if !isPkgDot(ce.Fun, "errors", "New") && !isPkgDot(ce.Fun, "fmt", "Errorf") { + return true + } + if len(ce.Args) < 1 { + return true + } + str, ok := ce.Args[0].(*ast.BasicLit) + if !ok || str.Kind != token.STRING { + return true + } + s, _ := strconv.Unquote(str.Value) // can assume well-formed Go + if s == "" { + return true + } + clean, conf := lintErrorString(s) + if clean { + return true + } + + f.errorf(str, conf, link(styleGuideBase+"#error-strings"), category("errors"), + "error strings should not be capitalized or end with punctuation or a newline") + return true + }) +} + +// lintReceiverNames examines receiver names. It complains about inconsistent +// names used for the same type and names such as "this". +func (f *file) lintReceiverNames() { + typeReceiver := map[string]string{} + f.walk(func(n ast.Node) bool { + fn, ok := n.(*ast.FuncDecl) + if !ok || fn.Recv == nil || len(fn.Recv.List) == 0 { + return true + } + names := fn.Recv.List[0].Names + if len(names) < 1 { + return true + } + name := names[0].Name + const ref = styleGuideBase + "#receiver-names" + if name == "_" { + f.errorf(n, 1, link(ref), category("naming"), `receiver name should not be an underscore, omit the name if it is unused`) + return true + } + if name == "this" || name == "self" { + f.errorf(n, 1, link(ref), category("naming"), `receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"`) + return true + } + recv := receiverType(fn) + if prev, ok := typeReceiver[recv]; ok && prev != name { + f.errorf(n, 1, link(ref), category("naming"), "receiver name %s should be consistent with previous receiver name %s for %s", name, prev, recv) + return true + } + typeReceiver[recv] = name + return true + }) +} + +// lintIncDec examines statements that increment or decrement a variable. +// It complains if they don't use x++ or x--. +func (f *file) lintIncDec() { + f.walk(func(n ast.Node) bool { + as, ok := n.(*ast.AssignStmt) + if !ok { + return true + } + if len(as.Lhs) != 1 { + return true + } + if !isOne(as.Rhs[0]) { + return true + } + var suffix string + switch as.Tok { + case token.ADD_ASSIGN: + suffix = "++" + case token.SUB_ASSIGN: + suffix = "--" + default: + return true + } + f.errorf(as, 0.8, category("unary-op"), "should replace %s with %s%s", f.render(as), f.render(as.Lhs[0]), suffix) + return true + }) +} + +// lintErrorReturn examines function declarations that return an error. +// It complains if the error isn't the last parameter. +func (f *file) lintErrorReturn() { + f.walk(func(n ast.Node) bool { + fn, ok := n.(*ast.FuncDecl) + if !ok || fn.Type.Results == nil { + return true + } + ret := fn.Type.Results.List + if len(ret) <= 1 { + return true + } + if isIdent(ret[len(ret)-1].Type, "error") { + return true + } + // An error return parameter should be the last parameter. + // Flag any error parameters found before the last. + for _, r := range ret[:len(ret)-1] { + if isIdent(r.Type, "error") { + f.errorf(fn, 0.9, category("arg-order"), "error should be the last type when returning multiple items") + break // only flag one + } + } + return true + }) +} + +// lintUnexportedReturn examines exported function declarations. +// It complains if any return an unexported type. +func (f *file) lintUnexportedReturn() { + f.walk(func(n ast.Node) bool { + fn, ok := n.(*ast.FuncDecl) + if !ok { + return true + } + if fn.Type.Results == nil { + return false + } + if !fn.Name.IsExported() { + return false + } + thing := "func" + if fn.Recv != nil && len(fn.Recv.List) > 0 { + thing = "method" + if !ast.IsExported(receiverType(fn)) { + // Don't report exported methods of unexported types, + // such as private implementations of sort.Interface. + return false + } + } + for _, ret := range fn.Type.Results.List { + typ := f.pkg.typeOf(ret.Type) + if exportedType(typ) { + continue + } + f.errorf(ret.Type, 0.8, category("unexported-type-in-api"), + "exported %s %s returns unexported type %s, which can be annoying to use", + thing, fn.Name.Name, typ) + break // only flag one + } + return false + }) +} + +// exportedType reports whether typ is an exported type. +// It is imprecise, and will err on the side of returning true, +// such as for composite types. +func exportedType(typ types.Type) bool { + switch T := typ.(type) { + case *types.Named: + // Builtin types have no package. + return T.Obj().Pkg() == nil || T.Obj().Exported() + case *types.Map: + return exportedType(T.Key()) && exportedType(T.Elem()) + case interface { + Elem() types.Type + }: // array, slice, pointer, chan + return exportedType(T.Elem()) + } + // Be conservative about other types, such as struct, interface, etc. + return true +} + +// timeSuffixes is a list of name suffixes that imply a time unit. +// This is not an exhaustive list. +var timeSuffixes = []string{ + "Sec", "Secs", "Seconds", + "Msec", "Msecs", + "Milli", "Millis", "Milliseconds", + "Usec", "Usecs", "Microseconds", + "MS", "Ms", +} + +func (f *file) lintTimeNames() { + f.walk(func(node ast.Node) bool { + v, ok := node.(*ast.ValueSpec) + if !ok { + return true + } + for _, name := range v.Names { + origTyp := f.pkg.typeOf(name) + // Look for time.Duration or *time.Duration; + // the latter is common when using flag.Duration. + typ := origTyp + if pt, ok := typ.(*types.Pointer); ok { + typ = pt.Elem() + } + if !f.pkg.isNamedType(typ, "time", "Duration") { + continue + } + suffix := "" + for _, suf := range timeSuffixes { + if strings.HasSuffix(name.Name, suf) { + suffix = suf + break + } + } + if suffix == "" { + continue + } + f.errorf(v, 0.9, category("time"), "var %s is of type %v; don't use unit-specific suffix %q", name.Name, origTyp, suffix) + } + return true + }) +} + +// lintContextKeyTypes checks for call expressions to context.WithValue with +// basic types used for the key argument. +// See: https://golang.org/issue/17293 +func (f *file) lintContextKeyTypes() { + f.walk(func(node ast.Node) bool { + switch node := node.(type) { + case *ast.CallExpr: + f.checkContextKeyType(node) + } + + return true + }) +} + +// checkContextKeyType reports an error if the call expression calls +// context.WithValue with a key argument of basic type. +func (f *file) checkContextKeyType(x *ast.CallExpr) { + sel, ok := x.Fun.(*ast.SelectorExpr) + if !ok { + return + } + pkg, ok := sel.X.(*ast.Ident) + if !ok || pkg.Name != "context" { + return + } + if sel.Sel.Name != "WithValue" { + return + } + + // key is second argument to context.WithValue + if len(x.Args) != 3 { + return + } + key := f.pkg.typesInfo.Types[x.Args[1]] + + if ktyp, ok := key.Type.(*types.Basic); ok && ktyp.Kind() != types.Invalid { + f.errorf(x, 1.0, category("context"), fmt.Sprintf("should not use basic type %s as key in context.WithValue", key.Type)) + } +} + +// lintContextArgs examines function declarations that contain an +// argument with a type of context.Context +// It complains if that argument isn't the first parameter. +func (f *file) lintContextArgs() { + f.walk(func(n ast.Node) bool { + fn, ok := n.(*ast.FuncDecl) + if !ok || len(fn.Type.Params.List) <= 1 { + return true + } + // A context.Context should be the first parameter of a function. + // Flag any that show up after the first. + for _, arg := range fn.Type.Params.List[1:] { + if isPkgDot(arg.Type, "context", "Context") { + f.errorf(fn, 0.9, link("https://golang.org/pkg/context/"), category("arg-order"), "context.Context should be the first parameter of a function") + break // only flag one + } + } + return true + }) +} + +// containsComments returns whether the interval [start, end) contains any +// comments without "// MATCH " prefix. +func (f *file) containsComments(start, end token.Pos) bool { + for _, cgroup := range f.f.Comments { + comments := cgroup.List + if comments[0].Slash >= end { + // All comments starting with this group are after end pos. + return false + } + if comments[len(comments)-1].Slash < start { + // Comments group ends before start pos. + continue + } + for _, c := range comments { + if start <= c.Slash && c.Slash < end && !strings.HasPrefix(c.Text, "// MATCH ") { + return true + } + } + } + return false +} + +// receiverType returns the named type of the method receiver, sans "*", +// or "invalid-type" if fn.Recv is ill formed. +func receiverType(fn *ast.FuncDecl) string { + switch e := fn.Recv.List[0].Type.(type) { + case *ast.Ident: + return e.Name + case *ast.StarExpr: + if id, ok := e.X.(*ast.Ident); ok { + return id.Name + } + } + // The parser accepts much more than just the legal forms. + return "invalid-type" +} + +func (f *file) walk(fn func(ast.Node) bool) { + ast.Walk(walker(fn), f.f) +} + +func (f *file) render(x interface{}) string { + var buf bytes.Buffer + if err := printer.Fprint(&buf, f.fset, x); err != nil { + panic(err) + } + return buf.String() +} + +func (f *file) debugRender(x interface{}) string { + var buf bytes.Buffer + if err := ast.Fprint(&buf, f.fset, x, nil); err != nil { + panic(err) + } + return buf.String() +} + +// walker adapts a function to satisfy the ast.Visitor interface. +// The function return whether the walk should proceed into the node's children. +type walker func(ast.Node) bool + +func (w walker) Visit(node ast.Node) ast.Visitor { + if w(node) { + return w + } + return nil +} + +func isIdent(expr ast.Expr, ident string) bool { + id, ok := expr.(*ast.Ident) + return ok && id.Name == ident +} + +// isBlank returns whether id is the blank identifier "_". +// If id == nil, the answer is false. +func isBlank(id *ast.Ident) bool { return id != nil && id.Name == "_" } + +func isPkgDot(expr ast.Expr, pkg, name string) bool { + sel, ok := expr.(*ast.SelectorExpr) + return ok && isIdent(sel.X, pkg) && isIdent(sel.Sel, name) +} + +func isOne(expr ast.Expr) bool { + lit, ok := expr.(*ast.BasicLit) + return ok && lit.Kind == token.INT && lit.Value == "1" +} + +func isCgoExported(f *ast.FuncDecl) bool { + if f.Recv != nil || f.Doc == nil { + return false + } + + cgoExport := regexp.MustCompile(fmt.Sprintf("(?m)^//export %s$", regexp.QuoteMeta(f.Name.Name))) + for _, c := range f.Doc.List { + if cgoExport.MatchString(c.Text) { + return true + } + } + return false +} + +var basicTypeKinds = map[types.BasicKind]string{ + types.UntypedBool: "bool", + types.UntypedInt: "int", + types.UntypedRune: "rune", + types.UntypedFloat: "float64", + types.UntypedComplex: "complex128", + types.UntypedString: "string", +} + +// isUntypedConst reports whether expr is an untyped constant, +// and indicates what its default type is. +// scope may be nil. +func (f *file) isUntypedConst(expr ast.Expr) (defType string, ok bool) { + // Re-evaluate expr outside of its context to see if it's untyped. + // (An expr evaluated within, for example, an assignment context will get the type of the LHS.) + exprStr := f.render(expr) + tv, err := types.Eval(f.fset, f.pkg.typesPkg, expr.Pos(), exprStr) + if err != nil { + return "", false + } + if b, ok := tv.Type.(*types.Basic); ok { + if dt, ok := basicTypeKinds[b.Kind()]; ok { + return dt, true + } + } + + return "", false +} + +// firstLineOf renders the given node and returns its first line. +// It will also match the indentation of another node. +func (f *file) firstLineOf(node, match ast.Node) string { + line := f.render(node) + if i := strings.Index(line, "\n"); i >= 0 { + line = line[:i] + } + return f.indentOf(match) + line +} + +func (f *file) indentOf(node ast.Node) string { + line := srcLine(f.src, f.fset.Position(node.Pos())) + for i, r := range line { + switch r { + case ' ', '\t': + default: + return line[:i] + } + } + return line // unusual or empty line +} + +func (f *file) srcLineWithMatch(node ast.Node, pattern string) (m []string) { + line := srcLine(f.src, f.fset.Position(node.Pos())) + line = strings.TrimSuffix(line, "\n") + rx := regexp.MustCompile(pattern) + return rx.FindStringSubmatch(line) +} + +// imports returns true if the current file imports the specified package path. +func (f *file) imports(importPath string) bool { + all := astutil.Imports(f.fset, f.f) + for _, p := range all { + for _, i := range p { + uq, err := strconv.Unquote(i.Path.Value) + if err == nil && importPath == uq { + return true + } + } + } + return false +} + +// srcLine returns the complete line at p, including the terminating newline. +func srcLine(src []byte, p token.Position) string { + // Run to end of line in both directions if not at line start/end. + lo, hi := p.Offset, p.Offset+1 + for lo > 0 && src[lo-1] != '\n' { + lo-- + } + for hi < len(src) && src[hi-1] != '\n' { + hi++ + } + return string(src[lo:hi]) +} diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go index 1565cf2702..97f17831fc 100644 --- a/vendor/golang.org/x/net/http2/hpack/encode.go +++ b/vendor/golang.org/x/net/http2/hpack/encode.go @@ -150,7 +150,7 @@ func appendIndexed(dst []byte, i uint64) []byte { // extended buffer. // // If f.Sensitive is true, "Never Indexed" representation is used. If -// f.Sensitive is false and indexing is true, "Inremental Indexing" +// f.Sensitive is false and indexing is true, "Incremental Indexing" // representation is used. func appendNewName(dst []byte, f HeaderField, indexing bool) []byte { dst = append(dst, encodeTypeByte(indexing, f.Sensitive)) diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index bdaba1d46b..27cc893cc0 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -19,7 +19,6 @@ package http2 // import "golang.org/x/net/http2" import ( "bufio" "crypto/tls" - "errors" "fmt" "io" "net/http" @@ -173,11 +172,6 @@ func (s SettingID) String() string { return fmt.Sprintf("UNKNOWN_SETTING_%d", uint16(s)) } -var ( - errInvalidHeaderFieldName = errors.New("http2: invalid header field name") - errInvalidHeaderFieldValue = errors.New("http2: invalid header field value") -) - // validWireHeaderFieldName reports whether v is a valid header field // name (key). See httpguts.ValidHeaderName for the base rules. // diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go index a6140099cb..2a5399ec4a 100644 --- a/vendor/golang.org/x/net/http2/pipe.go +++ b/vendor/golang.org/x/net/http2/pipe.go @@ -17,6 +17,7 @@ type pipe struct { mu sync.Mutex c sync.Cond // c.L lazily initialized to &p.mu b pipeBuffer // nil when done reading + unread int // bytes unread when done err error // read error once empty. non-nil means closed. breakErr error // immediate read error (caller doesn't see rest of b) donec chan struct{} // closed on error @@ -33,7 +34,7 @@ func (p *pipe) Len() int { p.mu.Lock() defer p.mu.Unlock() if p.b == nil { - return 0 + return p.unread } return p.b.Len() } @@ -80,6 +81,7 @@ func (p *pipe) Write(d []byte) (n int, err error) { return 0, errClosedPipeWrite } if p.breakErr != nil { + p.unread += len(d) return len(d), nil // discard when there is no reader } return p.b.Write(d) @@ -117,6 +119,9 @@ func (p *pipe) closeWithError(dst *error, err error, fn func()) { } p.readFn = fn if dst == &p.breakErr { + if p.b != nil { + p.unread += p.b.Len() + } p.b = nil } *dst = err diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 5e01ce9ab0..bc9e41a1b7 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -252,7 +252,7 @@ func ConfigureServer(s *http.Server, conf *Server) error { } } if !haveRequired { - return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher.") + return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher (need at least one of TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 or TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256).") } } @@ -322,7 +322,7 @@ type ServeConnOpts struct { } func (o *ServeConnOpts) context() context.Context { - if o.Context != nil { + if o != nil && o.Context != nil { return o.Context } return context.Background() @@ -581,13 +581,10 @@ type stream struct { cancelCtx func() // owned by serverConn's serve loop: - bodyBytes int64 // body bytes seen so far - declBodyBytes int64 // or -1 if undeclared - flow flow // limits writing from Handler to client - inflow flow // what the client is allowed to POST/etc to us - parent *stream // or nil - numTrailerValues int64 - weight uint8 + bodyBytes int64 // body bytes seen so far + declBodyBytes int64 // or -1 if undeclared + flow flow // limits writing from Handler to client + inflow flow // what the client is allowed to POST/etc to us state streamState resetQueued bool // RST_STREAM queued for write; set by sc.resetStream gotTrailerHeader bool // HEADER frame for trailers was seen @@ -2415,7 +2412,11 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { clen = strconv.Itoa(len(p)) } _, hasContentType := rws.snapHeader["Content-Type"] - if !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 { + // If the Content-Encoding is non-blank, we shouldn't + // sniff the body. See Issue golang.org/issue/31753. + ce := rws.snapHeader.Get("Content-Encoding") + hasCE := len(ce) > 0 + if !hasCE && !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 { ctype = http.DetectContentType(p) } var date string @@ -2524,7 +2525,7 @@ const TrailerPrefix = "Trailer:" // trailers. That worked for a while, until we found the first major // user of Trailers in the wild: gRPC (using them only over http2), // and gRPC libraries permit setting trailers mid-stream without -// predeclarnig them. So: change of plans. We still permit the old +// predeclaring them. So: change of plans. We still permit the old // way, but we also permit this hack: if a Header() key begins with // "Trailer:", the suffix of that key is a Trailer. Because ':' is an // invalid token byte anyway, there is no ambiguity. (And it's already @@ -2824,7 +2825,7 @@ func (sc *serverConn) startPush(msg *startPushRequest) { // PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that // is in either the "open" or "half-closed (remote)" state. if msg.parent.state != stateOpen && msg.parent.state != stateHalfClosedRemote { - // responseWriter.Push checks that the stream is peer-initiaed. + // responseWriter.Push checks that the stream is peer-initiated. msg.done <- errStreamClosed return } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index aeac7d8a51..81778bec61 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -93,7 +93,7 @@ type Transport struct { // send in the initial settings frame. It is how many bytes // of response headers are allowed. Unlike the http2 spec, zero here // means to use a default limit (currently 10MB). If you actually - // want to advertise an ulimited value to the peer, Transport + // want to advertise an unlimited value to the peer, Transport // interprets the highest possible value here (0xffffffff or 1<<32-1) // to mean no limit. MaxHeaderListSize uint32 @@ -227,6 +227,7 @@ type ClientConn struct { br *bufio.Reader fr *Framer lastActive time.Time + lastIdle time.Time // time last idle // Settings from peer: (also guarded by mu) maxFrameSize uint32 maxConcurrentStreams uint32 @@ -603,7 +604,7 @@ func (t *Transport) expectContinueTimeout() time.Duration { } func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { - return t.newClientConn(c, false) + return t.newClientConn(c, t.disableKeepAlives()) } func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { @@ -736,7 +737,8 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { } st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay && - int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 + int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && + !cc.tooIdleLocked() st.freshConn = cc.nextStreamID == 1 && st.canTakeNewRequest return } @@ -746,6 +748,16 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool { return st.canTakeNewRequest } +// tooIdleLocked reports whether this connection has been been sitting idle +// for too much wall time. +func (cc *ClientConn) tooIdleLocked() bool { + // The Round(0) strips the monontonic clock reading so the + // times are compared based on their wall time. We don't want + // to reuse a connection that's been sitting idle during + // VM/laptop suspend if monotonic time was also frozen. + return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && time.Since(cc.lastIdle.Round(0)) > cc.idleTimeout +} + // onIdleTimeout is called from a time.AfterFunc goroutine. It will // only be called when we're idle, but because we're coming from a new // goroutine, there could be a new request coming in at the same time, @@ -1150,6 +1162,7 @@ func (cc *ClientConn) awaitOpenSlotForRequest(req *http.Request) error { } return errClientConnUnusable } + cc.lastIdle = time.Time{} if int64(len(cc.streams))+1 <= int64(cc.maxConcurrentStreams) { if waitingForConn != nil { close(waitingForConn) @@ -1216,6 +1229,8 @@ var ( // abort request body write, but send stream reset of cancel. errStopReqBodyWriteAndCancel = errors.New("http2: canceling request") + + errReqBodyTooLong = errors.New("http2: request body larger than specified content length") ) func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (err error) { @@ -1238,10 +1253,32 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( req := cs.req hasTrailers := req.Trailer != nil + remainLen := actualContentLength(req) + hasContentLen := remainLen != -1 var sawEOF bool for !sawEOF { - n, err := body.Read(buf) + n, err := body.Read(buf[:len(buf)-1]) + if hasContentLen { + remainLen -= int64(n) + if remainLen == 0 && err == nil { + // The request body's Content-Length was predeclared and + // we just finished reading it all, but the underlying io.Reader + // returned the final chunk with a nil error (which is one of + // the two valid things a Reader can do at EOF). Because we'd prefer + // to send the END_STREAM bit early, double-check that we're actually + // at EOF. Subsequent reads should return (0, EOF) at this point. + // If either value is different, we return an error in one of two ways below. + var n1 int + n1, err = body.Read(buf[n:]) + remainLen -= int64(n1) + } + if remainLen < 0 { + err = errReqBodyTooLong + cc.writeStreamReset(cs.ID, ErrCodeCancel, err) + return err + } + } if err == io.EOF { sawEOF = true err = nil @@ -1454,7 +1491,29 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail if vv[0] == "" { continue } - + } else if strings.EqualFold(k, "cookie") { + // Per 8.1.2.5 To allow for better compression efficiency, the + // Cookie header field MAY be split into separate header fields, + // each with one or more cookie-pairs. + for _, v := range vv { + for { + p := strings.IndexByte(v, ';') + if p < 0 { + break + } + f("cookie", v[:p]) + p++ + // strip space after semicolon if any. + for p+1 <= len(v) && v[p] == ' ' { + p++ + } + v = v[p:] + } + if len(v) > 0 { + f("cookie", v) + } + } + continue } for _, v := range vv { @@ -1592,6 +1651,7 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { delete(cc.streams, id) if len(cc.streams) == 0 && cc.idleTimer != nil { cc.idleTimer.Reset(cc.idleTimeout) + cc.lastIdle = time.Now() } close(cs.done) // Wake up checkResetOrDone via clientStream.awaitFlowControl and @@ -2138,8 +2198,6 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { return nil } -var errInvalidTrailers = errors.New("http2: invalid trailers") - func (rl *clientConnReadLoop) endStream(cs *clientStream) { // TODO: check that any declared content-length matches, like // server.go's (*stream).endStream method. @@ -2370,7 +2428,6 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) var ( errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit") - errPseudoTrailers = errors.New("http2: invalid pseudo header in trailers") ) func (cc *ClientConn) logf(format string, args ...interface{}) { diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go index 848fed6ec7..2618b2c11d 100644 --- a/vendor/golang.org/x/net/http2/writesched_priority.go +++ b/vendor/golang.org/x/net/http2/writesched_priority.go @@ -149,7 +149,7 @@ func (n *priorityNode) addBytes(b int64) { } // walkReadyInOrder iterates over the tree in priority order, calling f for each node -// with a non-empty write queue. When f returns true, this funcion returns true and the +// with a non-empty write queue. When f returns true, this function returns true and the // walk halts. tmp is used as scratch space for sorting. // // f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true diff --git a/vendor/golang.org/x/net/idna/tables11.0.0.go b/vendor/golang.org/x/net/idna/tables11.0.0.go index c515d7ad2a..8ce0811fdf 100644 --- a/vendor/golang.org/x/net/idna/tables11.0.0.go +++ b/vendor/golang.org/x/net/idna/tables11.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -// +build go1.13 +// +build go1.13,!go1.14 package idna diff --git a/vendor/golang.org/x/net/idna/tables12.00.go b/vendor/golang.org/x/net/idna/tables12.00.go new file mode 100644 index 0000000000..f4b8ea3638 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables12.00.go @@ -0,0 +1,4733 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.14 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "12.0.0" + +var mappings string = "" + // Size: 8178 bytes + "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + + "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + + "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + + "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + + "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + + "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + + "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + + "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + + "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + + "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + + "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + + "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + + "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + + "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + + "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + + "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + + "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + + "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + + "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + + "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + + "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + + "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + + "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + + "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + + "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + + "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + + ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + + "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + + "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + + "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + + "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + + "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + + "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + + "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + + "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + + "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + + "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + + "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + + "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + + "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + + "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + + "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + + "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + + "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + + "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + + "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + + "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + + "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + + "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + + "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + + "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + + "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + + "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + + "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + + "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + + "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + + "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + + "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + + "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + + "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + + "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + + "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + + "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + + "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + + "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + + "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + + "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + + "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + + "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + + "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + + "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + + "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + + "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + + " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + + "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + + "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + + "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + + "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + + "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + + "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + + "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + + "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + + "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + + "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + + "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + + "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + + "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + + "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + + "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + + "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + + "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + + "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + + "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + + "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + + "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + + "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + + "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + + "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + + "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + + "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + + "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + + "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + + "c\x02mc\x02md\x02mr\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多" + + "\x03解\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販" + + "\x03声\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打" + + "\x03禁\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕" + + "\x09〔安〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你" + + "\x03侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內" + + "\x03冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉" + + "\x03勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟" + + "\x03叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙" + + "\x03喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型" + + "\x03堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮" + + "\x03嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍" + + "\x03嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰" + + "\x03庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹" + + "\x03悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞" + + "\x03懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢" + + "\x03揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙" + + "\x03暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓" + + "\x03㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛" + + "\x03㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派" + + "\x03海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆" + + "\x03瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀" + + "\x03犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾" + + "\x03異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌" + + "\x03磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒" + + "\x03䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺" + + "\x03者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋" + + "\x03芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著" + + "\x03荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜" + + "\x03虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠" + + "\x03衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁" + + "\x03贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘" + + "\x03鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲" + + "\x03頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭" + + "\x03鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" + +var xorData string = "" + // Size: 4862 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x021\x00\x02\x01\x04\x02\x01\x02\x02\x019\x02" + + "\x03\x1c\x02\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03" + + "\xc1r\x02\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<" + + "\x03\xc1s*\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03" + + "\x83\xab\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96" + + "\xe1\xcd\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03" + + "\x9a\xec\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c" + + "!\x03\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03" + + "ʦ\x93\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7" + + "\x03\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca" + + "\xfa\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e" + + "\x03\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca" + + "\xe3\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99" + + "\x03\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca" + + "\xe8\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03" + + "\x0b\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06" + + "\x05\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03" + + "\x0786\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/" + + "\x03\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f" + + "\x03\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-" + + "\x03\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03" + + "\x07\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03" + + "\x07\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03" + + "\x07\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b" + + "\x0a\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03" + + "\x07\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+" + + "\x03\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03" + + "\x044\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03" + + "\x04+ \x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!" + + "\x22\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04" + + "\x03\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>" + + "\x03\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03" + + "\x054\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03" + + "\x05):\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$" + + "\x1e\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226" + + "\x03\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05" + + "\x1b\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05" + + "\x03\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03" + + "\x06\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08" + + "\x03\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03" + + "\x0a6\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a" + + "\x1f\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03" + + "\x0a\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f" + + "\x02\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/" + + "\x03\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a" + + "\x00\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+" + + "\x10\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#" + + "<\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!" + + "\x00\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18." + + "\x03\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15" + + "\x22\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b" + + "\x12\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05" + + "<\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x03\x0b)\x08\x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!" + + "\x10\x03\x0b!0\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b" + + "\x03\x09\x1f\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14" + + "\x03\x0a\x01\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03" + + "\x08='\x03\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07" + + "\x01\x00\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03" + + "\x09\x11\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03" + + "\x0a/1\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03" + + "\x07<3\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06" + + "\x13\x00\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(" + + ";\x03\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08" + + "\x14$\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03" + + "\x0a\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19" + + "\x01\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18" + + "\x03\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03" + + "\x07\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03" + + "\x0a\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03" + + "\x0b\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03" + + "\x08\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05" + + "\x03\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11" + + "\x03\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03" + + "\x09\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a" + + ".\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + + "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + + "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + + "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + + "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + + "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + + "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + + "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + + "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + + "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + + "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + + "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + + "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + + "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + + "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + + "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + + "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + + "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + + "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + + "\x05\x22\x05\x03\x050\x1d" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 29708 bytes (29.01 KiB). Checksum: c3ecc76d8fffa6e6. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 125: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 125 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 127 blocks, 8128 entries, 16256 bytes +// The third block is the zero block. +var idnaValues = [8128]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, + 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, + 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + // Block 0x5, offset 0x140 + 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, + // Block 0x12, offset 0x480 + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, + // Block 0x14, offset 0x500 + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, + // Block 0x15, offset 0x540 + 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, + 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, + 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, + 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, + 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, + 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, + 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, + 0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, + 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, + 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, + 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, + 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, + 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, + 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, + 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, + 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, + 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x3308, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, + 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, + // Block 0x1a, offset 0x680 + 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, + 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, + 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, + 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, + 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, + 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, + 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, + 0x6b6: 0x0018, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, + 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, + 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0018, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0018, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, + 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0008, 0x90d: 0x0008, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008, + 0x912: 0x0008, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x3b08, 0x93b: 0x3308, + 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, + // Block 0x25, offset 0x940 + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, + 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, + 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, + // Block 0x26, offset 0x980 + 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, + 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, + 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, + 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, + 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, + 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, + 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, + 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, + 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, + 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, + 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, + 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, + 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, + // Block 0x28, offset 0xa00 + 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, + 0xa06: 0x05b5, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, + 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, + 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0f99, 0xa17: 0x0fa9, + 0xa18: 0x0fb9, 0xa19: 0x05b5, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05e5, 0xa1d: 0x1099, + 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, + 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, + 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, + 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, + // Block 0x29, offset 0xa40 + 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, + 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, + 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, + 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, + 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, + 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05fd, 0xa68: 0x1239, 0xa69: 0x1251, + 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, + 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, + 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x0615, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, + 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + // Block 0x2a, offset 0xa80 + 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, + 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // Block 0x2b, offset 0xac0 + 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, + 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, + 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, + 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x062d, 0xadb: 0x064d, 0xadc: 0x0008, 0xadd: 0x0008, + 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, + 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, + 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, + 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, + 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, + // Block 0x2c, offset 0xb00 + 0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, + 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, + 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, + 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, + 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, + 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, + // Block 0x2d, offset 0xb40 + 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, + 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, + 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, + 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, + 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, + 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, + 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, + 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, + 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x1459, + 0xb7c: 0x19b1, 0xb7d: 0x067e, 0xb7e: 0x1a31, 0xb7f: 0x069e, + // Block 0x2e, offset 0xb80 + 0xb80: 0x06be, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06dd, 0xb89: 0x1471, 0xb8a: 0x06f5, 0xb8b: 0x1489, + 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, + 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, + 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, + 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, + 0xbaa: 0x0725, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, + 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x073d, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, + 0xbbc: 0x1ce9, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, + 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x0796, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, + 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, + 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, + 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, + // Block 0x30, offset 0xc00 + 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, + 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, + 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, + 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, + 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, + 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, + 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07d5, + 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + // Block 0x31, offset 0xc40 + 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, + 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07ed, + 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, + 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, + 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, + 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, + 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, + 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, + 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, + // Block 0x32, offset 0xc80 + 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x1159, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, + 0xc86: 0x0886, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0f31, 0xc8b: 0x0249, + 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, + 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, + 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, + 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08c5, 0xca2: 0x2061, 0xca3: 0x0018, + 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, + 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, + 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, + 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08e5, + 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, + 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, + 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, + 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, + 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, + 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x091d, 0xce3: 0x2439, + 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x093d, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, + 0xcea: 0x24a9, 0xceb: 0x095d, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, + 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x097d, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, + 0xcf6: 0x099d, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09bd, + 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + // Block 0x34, offset 0xd00 + 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, + 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, + 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, + 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, + 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, + 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, + 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, + 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, + 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a1e, 0xd35: 0x0a3e, + 0xd36: 0x0a5e, 0xd37: 0x0a7e, 0xd38: 0x0a9e, 0xd39: 0x0abe, 0xd3a: 0x0ade, 0xd3b: 0x0afe, + 0xd3c: 0x0b1e, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + // Block 0x35, offset 0xd40 + 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, + 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, + 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, + 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, + 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b3e, 0xd5d: 0x0b5e, + 0xd5e: 0x0b7e, 0xd5f: 0x0b9e, 0xd60: 0x0bbe, 0xd61: 0x0bde, 0xd62: 0x0bfe, 0xd63: 0x0c1e, + 0xd64: 0x0c3e, 0xd65: 0x0c5e, 0xd66: 0x0c7e, 0xd67: 0x0c9e, 0xd68: 0x0cbe, 0xd69: 0x0cde, + 0xd6a: 0x0cfe, 0xd6b: 0x0d1e, 0xd6c: 0x0d3e, 0xd6d: 0x0d5e, 0xd6e: 0x0d7e, 0xd6f: 0x0d9e, + 0xd70: 0x0dbe, 0xd71: 0x0dde, 0xd72: 0x0dfe, 0xd73: 0x0e1e, 0xd74: 0x0e3e, 0xd75: 0x0e5e, + 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, + 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + // Block 0x36, offset 0xd80 + 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, + 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, + 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, + 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, + 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, + 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, + 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, + 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, + 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, + 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, + 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, + 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, + 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, + 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ed5, + 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, + 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, + 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + // Block 0x38, offset 0xe00 + 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, + 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x2715, 0xe41: 0x2735, 0xe42: 0x2755, 0xe43: 0x2775, 0xe44: 0x2795, 0xe45: 0x27b5, + 0xe46: 0x27d5, 0xe47: 0x27f5, 0xe48: 0x2815, 0xe49: 0x2835, 0xe4a: 0x2855, 0xe4b: 0x2875, + 0xe4c: 0x2895, 0xe4d: 0x28b5, 0xe4e: 0x28d5, 0xe4f: 0x28f5, 0xe50: 0x2915, 0xe51: 0x2935, + 0xe52: 0x2955, 0xe53: 0x2975, 0xe54: 0x2995, 0xe55: 0x29b5, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, + 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, + // Block 0x3a, offset 0xe80 + 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, + 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, + 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, + 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29d5, 0xeb9: 0x29f5, 0xeba: 0x2a15, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b55, 0xec1: 0x2b75, 0xec2: 0x2b95, 0xec3: 0x2bb5, 0xec4: 0x2bd5, 0xec5: 0x2bf5, + 0xec6: 0x2bf5, 0xec7: 0x2bf5, 0xec8: 0x2c15, 0xec9: 0x2c15, 0xeca: 0x2c15, 0xecb: 0x2c15, + 0xecc: 0x2c35, 0xecd: 0x2c35, 0xece: 0x2c35, 0xecf: 0x2c55, 0xed0: 0x2c75, 0xed1: 0x2c75, + 0xed2: 0x2a95, 0xed3: 0x2a95, 0xed4: 0x2c75, 0xed5: 0x2c75, 0xed6: 0x2c95, 0xed7: 0x2c95, + 0xed8: 0x2c75, 0xed9: 0x2c75, 0xeda: 0x2a95, 0xedb: 0x2a95, 0xedc: 0x2c75, 0xedd: 0x2c75, + 0xede: 0x2c55, 0xedf: 0x2c55, 0xee0: 0x2cb5, 0xee1: 0x2cb5, 0xee2: 0x2cd5, 0xee3: 0x2cd5, + 0xee4: 0x0040, 0xee5: 0x2cf5, 0xee6: 0x2d15, 0xee7: 0x2d35, 0xee8: 0x2d35, 0xee9: 0x2d55, + 0xeea: 0x2d75, 0xeeb: 0x2d95, 0xeec: 0x2db5, 0xeed: 0x2dd5, 0xeee: 0x2df5, 0xeef: 0x2e15, + 0xef0: 0x2e35, 0xef1: 0x2e55, 0xef2: 0x2e55, 0xef3: 0x2e75, 0xef4: 0x2e95, 0xef5: 0x2e95, + 0xef6: 0x2eb5, 0xef7: 0x2ed5, 0xef8: 0x2e75, 0xef9: 0x2ef5, 0xefa: 0x2f15, 0xefb: 0x2ef5, + 0xefc: 0x2e75, 0xefd: 0x2f35, 0xefe: 0x2f55, 0xeff: 0x2f75, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f95, 0xf01: 0x2fb5, 0xf02: 0x2d15, 0xf03: 0x2cf5, 0xf04: 0x2fd5, 0xf05: 0x2ff5, + 0xf06: 0x3015, 0xf07: 0x3035, 0xf08: 0x3055, 0xf09: 0x3075, 0xf0a: 0x3095, 0xf0b: 0x30b5, + 0xf0c: 0x30d5, 0xf0d: 0x30f5, 0xf0e: 0x3115, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x3135, 0xf13: 0x3155, 0xf14: 0x3175, 0xf15: 0x3195, 0xf16: 0x31b5, 0xf17: 0x31d5, + 0xf18: 0x31f5, 0xf19: 0x3215, 0xf1a: 0x3235, 0xf1b: 0x3255, 0xf1c: 0x3175, 0xf1d: 0x3275, + 0xf1e: 0x3295, 0xf1f: 0x32b5, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32d5, 0xf45: 0x32f5, + 0xf46: 0x3315, 0xf47: 0x3335, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x3761, + 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, + 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, + 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, + 0xf64: 0x33f5, 0xf65: 0x33f5, 0xf66: 0x3415, 0xf67: 0x3435, 0xf68: 0x3455, 0xf69: 0x3475, + 0xf6a: 0x3495, 0xf6b: 0x34b5, 0xf6c: 0x34d5, 0xf6d: 0x34f5, 0xf6e: 0x3515, 0xf6f: 0x3535, + 0xf70: 0x3555, 0xf71: 0x3575, 0xf72: 0x3595, 0xf73: 0x35b5, 0xf74: 0x35d5, 0xf75: 0x35f5, + 0xf76: 0x3615, 0xf77: 0x3635, 0xf78: 0x3655, 0xf79: 0x3675, 0xf7a: 0x3695, 0xf7b: 0x36b5, + 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36d5, 0xf7f: 0x0018, + // Block 0x3e, offset 0xf80 + 0xf80: 0x36f5, 0xf81: 0x3715, 0xf82: 0x3735, 0xf83: 0x3755, 0xf84: 0x3775, 0xf85: 0x3795, + 0xf86: 0x37b5, 0xf87: 0x37d5, 0xf88: 0x37f5, 0xf89: 0x3815, 0xf8a: 0x3835, 0xf8b: 0x3855, + 0xf8c: 0x3875, 0xf8d: 0x3895, 0xf8e: 0x38b5, 0xf8f: 0x38d5, 0xf90: 0x38f5, 0xf91: 0x3915, + 0xf92: 0x3935, 0xf93: 0x3955, 0xf94: 0x3975, 0xf95: 0x3995, 0xf96: 0x39b5, 0xf97: 0x39d5, + 0xf98: 0x39f5, 0xf99: 0x3a15, 0xf9a: 0x3a35, 0xf9b: 0x3a55, 0xf9c: 0x3a75, 0xf9d: 0x3a95, + 0xf9e: 0x3ab5, 0xf9f: 0x3ad5, 0xfa0: 0x3af5, 0xfa1: 0x3b15, 0xfa2: 0x3b35, 0xfa3: 0x3b55, + 0xfa4: 0x3b75, 0xfa5: 0x3b95, 0xfa6: 0x1295, 0xfa7: 0x3bb5, 0xfa8: 0x3bd5, 0xfa9: 0x3bf5, + 0xfaa: 0x3c15, 0xfab: 0x3c35, 0xfac: 0x3c55, 0xfad: 0x3c75, 0xfae: 0x23b5, 0xfaf: 0x3c95, + 0xfb0: 0x3cb5, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, + 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, + 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, + 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, + 0xfcc: 0x3c99, 0xfcd: 0x3cd5, 0xfce: 0x3cb1, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, + 0xfd2: 0x3d45, 0xfd3: 0x3d5d, 0xfd4: 0x3d75, 0xfd5: 0x3d75, 0xfd6: 0x3d5d, 0xfd7: 0x3d8d, + 0xfd8: 0x07d5, 0xfd9: 0x3da5, 0xfda: 0x3dbd, 0xfdb: 0x3dd5, 0xfdc: 0x3ded, 0xfdd: 0x3e05, + 0xfde: 0x3e1d, 0xfdf: 0x3e35, 0xfe0: 0x3e4d, 0xfe1: 0x3e65, 0xfe2: 0x3e7d, 0xfe3: 0x3e95, + 0xfe4: 0x3ead, 0xfe5: 0x3ead, 0xfe6: 0x3ec5, 0xfe7: 0x3ec5, 0xfe8: 0x3edd, 0xfe9: 0x3edd, + 0xfea: 0x3ef5, 0xfeb: 0x3f0d, 0xfec: 0x3f25, 0xfed: 0x3f3d, 0xfee: 0x3f55, 0xfef: 0x3f55, + 0xff0: 0x3f6d, 0xff1: 0x3f6d, 0xff2: 0x3f6d, 0xff3: 0x3f85, 0xff4: 0x3f9d, 0xff5: 0x3fb5, + 0xff6: 0x3fcd, 0xff7: 0x3fb5, 0xff8: 0x3fe5, 0xff9: 0x3ffd, 0xffa: 0x3f85, 0xffb: 0x4015, + 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x0040, + // Block 0x40, offset 0x1000 + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, + // Block 0x41, offset 0x1040 + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x4045, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x4065, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x4085, 0x1079: 0x4085, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, + // Block 0x42, offset 0x1080 + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x40a5, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40c5, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40e5, 0x108d: 0x40e5, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x4105, + 0x1092: 0x4125, 0x1093: 0x4145, 0x1094: 0x4165, 0x1095: 0x4185, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x41a5, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41c5, 0x10a0: 0x41e5, 0x10a1: 0x6419, 0x10a2: 0x4205, 0x10a3: 0x4225, + 0x10a4: 0x4245, 0x10a5: 0x6431, 0x10a6: 0x4265, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x4285, 0x10ab: 0x42a5, 0x10ac: 0x42c5, 0x10ad: 0x42e5, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x4305, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x4325, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x4345, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x4365, 0x10c1: 0x4385, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x43a5, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43c5, 0x10d6: 0x43e5, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x4405, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x4425, + // Block 0x44, offset 0x1100 + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, + 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, + 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, + 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, + 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, + 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, + 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, + 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11, + 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, + 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, + 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, + 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, + 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, + 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, + 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, + 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, + 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, + 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, + // Block 0x47, offset 0x11c0 + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, + 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, + 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, + 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, + 0x11fc: 0x0008, 0x11fd: 0x4445, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // Block 0x48, offset 0x1200 + 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, + 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, + 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, + 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, + 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, + 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, + 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, + 0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0008, + 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x4465, 0x1234: 0xe00d, 0x1235: 0x0008, + 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0xe00d, 0x1239: 0x0008, 0x123a: 0xe00d, 0x123b: 0x0008, + 0x123c: 0xe00d, 0x123d: 0x0008, 0x123e: 0xe00d, 0x123f: 0x0008, + // Block 0x49, offset 0x1240 + 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, + 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, + 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, + 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, + 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, + 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, + 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, + 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, + 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, + 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, + 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, + 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, + 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, + 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, + 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, + 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, + 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x7001, + 0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, + 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, + 0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, + // Block 0x4d, offset 0x1340 + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, + 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, + 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, + 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, + 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, + 0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, + // Block 0x50, offset 0x1400 + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, + // Block 0x51, offset 0x1440 + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, + // Block 0x52, offset 0x1480 + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, + 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, + 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, + // Block 0x54, offset 0x1500 + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, + 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, + 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, + 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, + 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + // Block 0x55, offset 0x1540 + 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, + 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, + 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d8d, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7dad, + 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, + 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, + 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, + 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, + 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, + 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, + // Block 0x56, offset 0x1580 + 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, + 0x158c: 0x7fae, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7fcd, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fed, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7ecd, + 0x159e: 0x7f2d, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x800e, 0x15b1: 0xb009, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, + 0x15b6: 0x806e, 0x15b7: 0xb031, 0x15b8: 0x808e, 0x15b9: 0xb059, 0x15ba: 0x80ae, 0x15bb: 0xb081, + 0x15bc: 0x80ce, 0x15bd: 0xb0a9, 0x15be: 0x80ee, 0x15bf: 0xb0d1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, + // Block 0x58, offset 0x1600 + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, + 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, + 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, + 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, + 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, + 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, + 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, + 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, + 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x29d1, 0x16a2: 0x814d, 0x16a3: 0x814d, + 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, + 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, + 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, + 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, + 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, + 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, + 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, + 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, + 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, + 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, + 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, + 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, + 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, + 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, + 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, + 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, + 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x8a0e, + 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, + 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, + 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, + 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, + 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, + 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, + 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, + 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, + 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, + 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, + 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + // Block 0x5e, offset 0x1780 + 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, + 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, + 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, + 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, + 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, + 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, + 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, + 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, + 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, + 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, + 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, + 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, + 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, + 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, + 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, + 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, + 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x3308, + 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, + // Block 0x60, offset 0x1800 + 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, + 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, + 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, + 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, + 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, + 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, + 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, + 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, + 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, + 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, + 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + // Block 0x61, offset 0x1840 + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, + // Block 0x65, offset 0x1940 + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b3d, 0x1c5f: 0x8b3d, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0018, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0xc1c1, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xc1f1, 0x1dc1: 0xc229, 0x1dc2: 0xc261, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc281, 0x1dd1: 0xc2a1, + 0x1dd2: 0xc2c1, 0x1dd3: 0xc2e1, 0x1dd4: 0xc301, 0x1dd5: 0xc321, 0x1dd6: 0xc341, 0x1dd7: 0xc361, + 0x1dd8: 0xc381, 0x1dd9: 0xc3a1, 0x1dda: 0xc3c1, 0x1ddb: 0xc3e1, 0x1ddc: 0xc401, 0x1ddd: 0xc421, + 0x1dde: 0xc441, 0x1ddf: 0xc461, 0x1de0: 0xc481, 0x1de1: 0xc4a1, 0x1de2: 0xc4c1, 0x1de3: 0xc4e1, + 0x1de4: 0xc501, 0x1de5: 0xc521, 0x1de6: 0xc541, 0x1de7: 0xc561, 0x1de8: 0xc581, 0x1de9: 0xc5a1, + 0x1dea: 0xc5c1, 0x1deb: 0xc5e1, 0x1dec: 0xc601, 0x1ded: 0xc621, 0x1dee: 0xc641, 0x1def: 0xc661, + 0x1df0: 0xc681, 0x1df1: 0xc6a1, 0x1df2: 0xc6c1, 0x1df3: 0xc6e1, 0x1df4: 0xc701, 0x1df5: 0xc721, + 0x1df6: 0xc741, 0x1df7: 0xc761, 0x1df8: 0xc781, 0x1df9: 0xc7a1, 0x1dfa: 0xc7c1, 0x1dfb: 0xc7e1, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xcb11, 0x1e01: 0xcb31, 0x1e02: 0xcb51, 0x1e03: 0x8b55, 0x1e04: 0xcb71, 0x1e05: 0xcb91, + 0x1e06: 0xcbb1, 0x1e07: 0xcbd1, 0x1e08: 0xcbf1, 0x1e09: 0xcc11, 0x1e0a: 0xcc31, 0x1e0b: 0xcc51, + 0x1e0c: 0xcc71, 0x1e0d: 0x8b75, 0x1e0e: 0xcc91, 0x1e0f: 0xccb1, 0x1e10: 0xccd1, 0x1e11: 0xccf1, + 0x1e12: 0x8b95, 0x1e13: 0xcd11, 0x1e14: 0xcd31, 0x1e15: 0xc441, 0x1e16: 0x8bb5, 0x1e17: 0xcd51, + 0x1e18: 0xcd71, 0x1e19: 0xcd91, 0x1e1a: 0xcdb1, 0x1e1b: 0xcdd1, 0x1e1c: 0x8bd5, 0x1e1d: 0xcdf1, + 0x1e1e: 0xce11, 0x1e1f: 0xce31, 0x1e20: 0xce51, 0x1e21: 0xce71, 0x1e22: 0xc7a1, 0x1e23: 0xce91, + 0x1e24: 0xceb1, 0x1e25: 0xced1, 0x1e26: 0xcef1, 0x1e27: 0xcf11, 0x1e28: 0xcf31, 0x1e29: 0xcf51, + 0x1e2a: 0xcf71, 0x1e2b: 0xcf91, 0x1e2c: 0xcfb1, 0x1e2d: 0xcfd1, 0x1e2e: 0xcff1, 0x1e2f: 0xd011, + 0x1e30: 0xd031, 0x1e31: 0xd051, 0x1e32: 0xd051, 0x1e33: 0xd051, 0x1e34: 0x8bf5, 0x1e35: 0xd071, + 0x1e36: 0xd091, 0x1e37: 0xd0b1, 0x1e38: 0x8c15, 0x1e39: 0xd0d1, 0x1e3a: 0xd0f1, 0x1e3b: 0xd111, + 0x1e3c: 0xd131, 0x1e3d: 0xd151, 0x1e3e: 0xd171, 0x1e3f: 0xd191, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd1b1, 0x1e41: 0xd1d1, 0x1e42: 0xd1f1, 0x1e43: 0xd211, 0x1e44: 0xd231, 0x1e45: 0xd251, + 0x1e46: 0xd251, 0x1e47: 0xd271, 0x1e48: 0xd291, 0x1e49: 0xd2b1, 0x1e4a: 0xd2d1, 0x1e4b: 0xd2f1, + 0x1e4c: 0xd311, 0x1e4d: 0xd331, 0x1e4e: 0xd351, 0x1e4f: 0xd371, 0x1e50: 0xd391, 0x1e51: 0xd3b1, + 0x1e52: 0xd3d1, 0x1e53: 0xd3f1, 0x1e54: 0xd411, 0x1e55: 0xd431, 0x1e56: 0xd451, 0x1e57: 0xd471, + 0x1e58: 0xd491, 0x1e59: 0x8c35, 0x1e5a: 0xd4b1, 0x1e5b: 0xd4d1, 0x1e5c: 0xd4f1, 0x1e5d: 0xc321, + 0x1e5e: 0xd511, 0x1e5f: 0xd531, 0x1e60: 0x8c55, 0x1e61: 0x8c75, 0x1e62: 0xd551, 0x1e63: 0xd571, + 0x1e64: 0xd591, 0x1e65: 0xd5b1, 0x1e66: 0xd5d1, 0x1e67: 0xd5f1, 0x1e68: 0x2040, 0x1e69: 0xd611, + 0x1e6a: 0xd631, 0x1e6b: 0xd631, 0x1e6c: 0x8c95, 0x1e6d: 0xd651, 0x1e6e: 0xd671, 0x1e6f: 0xd691, + 0x1e70: 0xd6b1, 0x1e71: 0x8cb5, 0x1e72: 0xd6d1, 0x1e73: 0xd6f1, 0x1e74: 0x2040, 0x1e75: 0xd711, + 0x1e76: 0xd731, 0x1e77: 0xd751, 0x1e78: 0xd771, 0x1e79: 0xd791, 0x1e7a: 0xd7b1, 0x1e7b: 0x8cd5, + 0x1e7c: 0xd7d1, 0x1e7d: 0x8cf5, 0x1e7e: 0xd7f1, 0x1e7f: 0xd811, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xd831, 0x1e81: 0xd851, 0x1e82: 0xd871, 0x1e83: 0xd891, 0x1e84: 0xd8b1, 0x1e85: 0xd8d1, + 0x1e86: 0xd8f1, 0x1e87: 0xd911, 0x1e88: 0xd931, 0x1e89: 0x8d15, 0x1e8a: 0xd951, 0x1e8b: 0xd971, + 0x1e8c: 0xd991, 0x1e8d: 0xd9b1, 0x1e8e: 0xd9d1, 0x1e8f: 0x8d35, 0x1e90: 0xd9f1, 0x1e91: 0x8d55, + 0x1e92: 0x8d75, 0x1e93: 0xda11, 0x1e94: 0xda31, 0x1e95: 0xda31, 0x1e96: 0xda51, 0x1e97: 0x8d95, + 0x1e98: 0x8db5, 0x1e99: 0xda71, 0x1e9a: 0xda91, 0x1e9b: 0xdab1, 0x1e9c: 0xdad1, 0x1e9d: 0xdaf1, + 0x1e9e: 0xdb11, 0x1e9f: 0xdb31, 0x1ea0: 0xdb51, 0x1ea1: 0xdb71, 0x1ea2: 0xdb91, 0x1ea3: 0xdbb1, + 0x1ea4: 0x8dd5, 0x1ea5: 0xdbd1, 0x1ea6: 0xdbf1, 0x1ea7: 0xdc11, 0x1ea8: 0xdc31, 0x1ea9: 0xdc11, + 0x1eaa: 0xdc51, 0x1eab: 0xdc71, 0x1eac: 0xdc91, 0x1ead: 0xdcb1, 0x1eae: 0xdcd1, 0x1eaf: 0xdcf1, + 0x1eb0: 0xdd11, 0x1eb1: 0xdd31, 0x1eb2: 0xdd51, 0x1eb3: 0xdd71, 0x1eb4: 0xdd91, 0x1eb5: 0xddb1, + 0x1eb6: 0xddd1, 0x1eb7: 0xddf1, 0x1eb8: 0x8df5, 0x1eb9: 0xde11, 0x1eba: 0xde31, 0x1ebb: 0xde51, + 0x1ebc: 0xde71, 0x1ebd: 0xde91, 0x1ebe: 0x8e15, 0x1ebf: 0xdeb1, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe5b1, 0x1ec1: 0xe5d1, 0x1ec2: 0xe5f1, 0x1ec3: 0xe611, 0x1ec4: 0xe631, 0x1ec5: 0xe651, + 0x1ec6: 0x8f35, 0x1ec7: 0xe671, 0x1ec8: 0xe691, 0x1ec9: 0xe6b1, 0x1eca: 0xe6d1, 0x1ecb: 0xe6f1, + 0x1ecc: 0xe711, 0x1ecd: 0x8f55, 0x1ece: 0xe731, 0x1ecf: 0xe751, 0x1ed0: 0x8f75, 0x1ed1: 0x8f95, + 0x1ed2: 0xe771, 0x1ed3: 0xe791, 0x1ed4: 0xe7b1, 0x1ed5: 0xe7d1, 0x1ed6: 0xe7f1, 0x1ed7: 0xe811, + 0x1ed8: 0xe831, 0x1ed9: 0xe851, 0x1eda: 0xe871, 0x1edb: 0x8fb5, 0x1edc: 0xe891, 0x1edd: 0x8fd5, + 0x1ede: 0xe8b1, 0x1edf: 0x2040, 0x1ee0: 0xe8d1, 0x1ee1: 0xe8f1, 0x1ee2: 0xe911, 0x1ee3: 0x8ff5, + 0x1ee4: 0xe931, 0x1ee5: 0xe951, 0x1ee6: 0x9015, 0x1ee7: 0x9035, 0x1ee8: 0xe971, 0x1ee9: 0xe991, + 0x1eea: 0xe9b1, 0x1eeb: 0xe9d1, 0x1eec: 0xe9f1, 0x1eed: 0xe9f1, 0x1eee: 0xea11, 0x1eef: 0xea31, + 0x1ef0: 0xea51, 0x1ef1: 0xea71, 0x1ef2: 0xea91, 0x1ef3: 0xeab1, 0x1ef4: 0xead1, 0x1ef5: 0x9055, + 0x1ef6: 0xeaf1, 0x1ef7: 0x9075, 0x1ef8: 0xeb11, 0x1ef9: 0x9095, 0x1efa: 0xeb31, 0x1efb: 0x90b5, + 0x1efc: 0x90d5, 0x1efd: 0x90f5, 0x1efe: 0xeb51, 0x1eff: 0xeb71, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xeb91, 0x1f01: 0x9115, 0x1f02: 0x9135, 0x1f03: 0x9155, 0x1f04: 0x9175, 0x1f05: 0xebb1, + 0x1f06: 0xebd1, 0x1f07: 0xebd1, 0x1f08: 0xebf1, 0x1f09: 0xec11, 0x1f0a: 0xec31, 0x1f0b: 0xec51, + 0x1f0c: 0xec71, 0x1f0d: 0x9195, 0x1f0e: 0xec91, 0x1f0f: 0xecb1, 0x1f10: 0xecd1, 0x1f11: 0xecf1, + 0x1f12: 0x91b5, 0x1f13: 0xed11, 0x1f14: 0x91d5, 0x1f15: 0x91f5, 0x1f16: 0xed31, 0x1f17: 0xed51, + 0x1f18: 0xed71, 0x1f19: 0xed91, 0x1f1a: 0xedb1, 0x1f1b: 0xedd1, 0x1f1c: 0x9215, 0x1f1d: 0x9235, + 0x1f1e: 0x9255, 0x1f1f: 0x2040, 0x1f20: 0xedf1, 0x1f21: 0x9275, 0x1f22: 0xee11, 0x1f23: 0xee31, + 0x1f24: 0xee51, 0x1f25: 0x9295, 0x1f26: 0xee71, 0x1f27: 0xee91, 0x1f28: 0xeeb1, 0x1f29: 0xeed1, + 0x1f2a: 0xeef1, 0x1f2b: 0x92b5, 0x1f2c: 0xef11, 0x1f2d: 0xef31, 0x1f2e: 0xef51, 0x1f2f: 0xef71, + 0x1f30: 0xef91, 0x1f31: 0xefb1, 0x1f32: 0x92d5, 0x1f33: 0x92f5, 0x1f34: 0xefd1, 0x1f35: 0x9315, + 0x1f36: 0xeff1, 0x1f37: 0x9335, 0x1f38: 0xf011, 0x1f39: 0xf031, 0x1f3a: 0xf051, 0x1f3b: 0x9355, + 0x1f3c: 0x9375, 0x1f3d: 0xf071, 0x1f3e: 0x9395, 0x1f3f: 0xf091, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6d1, 0x1f41: 0xf6f1, 0x1f42: 0xf711, 0x1f43: 0xf731, 0x1f44: 0xf751, 0x1f45: 0x9555, + 0x1f46: 0xf771, 0x1f47: 0xf791, 0x1f48: 0xf7b1, 0x1f49: 0xf7d1, 0x1f4a: 0xf7f1, 0x1f4b: 0x9575, + 0x1f4c: 0x9595, 0x1f4d: 0xf811, 0x1f4e: 0xf831, 0x1f4f: 0xf851, 0x1f50: 0xf871, 0x1f51: 0xf891, + 0x1f52: 0xf8b1, 0x1f53: 0x95b5, 0x1f54: 0xf8d1, 0x1f55: 0xf8f1, 0x1f56: 0xf911, 0x1f57: 0xf931, + 0x1f58: 0x95d5, 0x1f59: 0x95f5, 0x1f5a: 0xf951, 0x1f5b: 0xf971, 0x1f5c: 0xf991, 0x1f5d: 0x9615, + 0x1f5e: 0xf9b1, 0x1f5f: 0xf9d1, 0x1f60: 0x684d, 0x1f61: 0x9635, 0x1f62: 0xf9f1, 0x1f63: 0xfa11, + 0x1f64: 0xfa31, 0x1f65: 0x9655, 0x1f66: 0xfa51, 0x1f67: 0xfa71, 0x1f68: 0xfa91, 0x1f69: 0xfab1, + 0x1f6a: 0xfad1, 0x1f6b: 0xfaf1, 0x1f6c: 0xfb11, 0x1f6d: 0x9675, 0x1f6e: 0xfb31, 0x1f6f: 0xfb51, + 0x1f70: 0xfb71, 0x1f71: 0x9695, 0x1f72: 0xfb91, 0x1f73: 0xfbb1, 0x1f74: 0xfbd1, 0x1f75: 0xfbf1, + 0x1f76: 0x7b6d, 0x1f77: 0x96b5, 0x1f78: 0xfc11, 0x1f79: 0xfc31, 0x1f7a: 0xfc51, 0x1f7b: 0x96d5, + 0x1f7c: 0xfc71, 0x1f7d: 0x96f5, 0x1f7e: 0xfc91, 0x1f7f: 0xfc91, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfcb1, 0x1f81: 0x9715, 0x1f82: 0xfcd1, 0x1f83: 0xfcf1, 0x1f84: 0xfd11, 0x1f85: 0xfd31, + 0x1f86: 0xfd51, 0x1f87: 0xfd71, 0x1f88: 0xfd91, 0x1f89: 0x9735, 0x1f8a: 0xfdb1, 0x1f8b: 0xfdd1, + 0x1f8c: 0xfdf1, 0x1f8d: 0xfe11, 0x1f8e: 0xfe31, 0x1f8f: 0xfe51, 0x1f90: 0x9755, 0x1f91: 0xfe71, + 0x1f92: 0x9775, 0x1f93: 0x9795, 0x1f94: 0x97b5, 0x1f95: 0xfe91, 0x1f96: 0xfeb1, 0x1f97: 0xfed1, + 0x1f98: 0xfef1, 0x1f99: 0xff11, 0x1f9a: 0xff31, 0x1f9b: 0xff51, 0x1f9c: 0xff71, 0x1f9d: 0x97d5, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, +} + +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var idnaIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0x9b, + 0x1b0: 0xd0, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, + 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x37, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x38, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe0, + 0x1c8: 0xe1, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe2, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe5, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe6, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe7, + 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, + 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf8, 0x31f: 0xf9, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, + 0x3a8: 0x47, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x100, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x101, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9f, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, + 0x3d0: 0x10e, 0x3d1: 0x9f, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xba, 0x3e6: 0x11a, 0x3e7: 0x11b, + 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x5b, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x121, 0x3f1: 0x122, 0x3f2: 0x123, 0x3f3: 0x124, 0x3f4: 0x125, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0x127, 0x3fd: 0x128, 0x3fe: 0xba, 0x3ff: 0x129, + // Block 0x10, offset 0x400 + 0x400: 0x12a, 0x401: 0x12b, 0x402: 0x12c, 0x403: 0x12d, 0x404: 0x12e, 0x405: 0x12f, 0x406: 0x130, 0x407: 0x131, + 0x408: 0x132, 0x409: 0xba, 0x40a: 0x133, 0x40b: 0x134, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x135, 0x411: 0x136, 0x412: 0x137, 0x413: 0x138, 0x414: 0xba, 0x415: 0xba, 0x416: 0x139, 0x417: 0x13a, + 0x418: 0x13b, 0x419: 0x13c, 0x41a: 0x13d, 0x41b: 0x13e, 0x41c: 0x13f, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0x140, 0x421: 0xba, 0x422: 0x141, 0x423: 0x142, 0x424: 0xba, 0x425: 0xba, 0x426: 0x143, 0x427: 0x144, + 0x428: 0x145, 0x429: 0x146, 0x42a: 0x147, 0x42b: 0x148, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x149, 0x431: 0x14a, 0x432: 0x14b, 0x433: 0xba, 0x434: 0x14c, 0x435: 0x14d, 0x436: 0x14e, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0x14f, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0x150, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x151, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x152, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x153, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x154, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x155, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x148, 0x529: 0x156, 0x52a: 0xba, 0x52b: 0x157, 0x52c: 0x158, 0x52d: 0x159, 0x52e: 0x15a, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0x15b, 0x53a: 0x15c, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x15d, 0x53e: 0x15e, 0x53f: 0x15f, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x160, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x161, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x162, 0x585: 0x163, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x164, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x165, 0x5b2: 0x166, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x167, 0x5c4: 0x168, 0x5c5: 0x169, 0x5c6: 0x16a, 0x5c7: 0x16b, + 0x5c8: 0x9b, 0x5c9: 0x16c, 0x5ca: 0xba, 0x5cb: 0x16d, 0x5cc: 0x9b, 0x5cd: 0x16e, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x16f, 0x5e9: 0x170, 0x5ea: 0x171, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x172, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0x173, 0x605: 0x174, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0x175, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x121, 0x621: 0x121, 0x622: 0x121, 0x623: 0x176, 0x624: 0x6f, 0x625: 0x177, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0x178, 0x632: 0x179, 0x633: 0xba, 0x634: 0x17a, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x17b, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x17c, 0x641: 0x9b, 0x642: 0x17d, 0x643: 0x17e, 0x644: 0x73, 0x645: 0x74, 0x646: 0x17f, 0x647: 0x180, + 0x648: 0x75, 0x649: 0x181, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x182, 0x65c: 0x9b, 0x65d: 0x183, 0x65e: 0x9b, 0x65f: 0x184, + 0x660: 0x185, 0x661: 0x186, 0x662: 0x187, 0x663: 0xba, 0x664: 0x188, 0x665: 0x189, 0x666: 0x18a, 0x667: 0x18b, + 0x668: 0x9b, 0x669: 0x18c, 0x66a: 0x18d, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x18e, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x18f, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x190, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x191, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, + // Block 0x1d, offset 0x740 + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x192, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x193, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x194, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x195, 0x841: 0x196, 0x842: 0xba, 0x843: 0xba, 0x844: 0x197, 0x845: 0x197, 0x846: 0x197, 0x847: 0x198, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, + 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, +} + +// idnaSparseOffset: 284 entries, 568 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x86, 0x8b, 0x94, 0xa4, 0xb2, 0xbe, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x224, 0x22e, 0x23a, 0x246, 0x252, 0x25a, 0x25f, 0x26c, 0x27d, 0x281, 0x28c, 0x290, 0x299, 0x2a1, 0x2a7, 0x2ac, 0x2af, 0x2b3, 0x2b9, 0x2bd, 0x2c1, 0x2c5, 0x2cb, 0x2d3, 0x2da, 0x2e5, 0x2ef, 0x2f3, 0x2f6, 0x2fc, 0x300, 0x302, 0x305, 0x307, 0x30a, 0x314, 0x317, 0x326, 0x32a, 0x32f, 0x332, 0x336, 0x33b, 0x340, 0x346, 0x352, 0x361, 0x367, 0x36b, 0x37a, 0x37f, 0x387, 0x391, 0x39c, 0x3a4, 0x3b5, 0x3be, 0x3ce, 0x3db, 0x3e5, 0x3ea, 0x3f7, 0x3fb, 0x400, 0x402, 0x406, 0x408, 0x40c, 0x415, 0x41b, 0x41f, 0x42f, 0x439, 0x43e, 0x441, 0x447, 0x44e, 0x453, 0x457, 0x45d, 0x462, 0x46b, 0x470, 0x476, 0x47d, 0x484, 0x48b, 0x48f, 0x494, 0x497, 0x49c, 0x4a8, 0x4ae, 0x4b3, 0x4ba, 0x4c2, 0x4c7, 0x4cb, 0x4db, 0x4e2, 0x4e6, 0x4ea, 0x4f1, 0x4f3, 0x4f6, 0x4f9, 0x4fd, 0x506, 0x50a, 0x512, 0x51a, 0x51e, 0x524, 0x52d, 0x539, 0x540, 0x549, 0x553, 0x55a, 0x568, 0x575, 0x582, 0x58b, 0x58f, 0x59f, 0x5a7, 0x5b2, 0x5bb, 0x5c1, 0x5c9, 0x5d2, 0x5dd, 0x5e0, 0x5ec, 0x5f5, 0x5f8, 0x5fd, 0x602, 0x60f, 0x61a, 0x623, 0x62d, 0x630, 0x63a, 0x643, 0x64f, 0x65c, 0x669, 0x677, 0x67e, 0x682, 0x685, 0x68a, 0x68d, 0x692, 0x695, 0x69c, 0x6a3, 0x6a7, 0x6b2, 0x6b5, 0x6b8, 0x6bb, 0x6c1, 0x6c7, 0x6cd, 0x6d0, 0x6d3, 0x6d6, 0x6dd, 0x6e0, 0x6e5, 0x6ef, 0x6f2, 0x6f6, 0x705, 0x711, 0x715, 0x71a, 0x71e, 0x723, 0x727, 0x72c, 0x735, 0x740, 0x746, 0x74c, 0x752, 0x758, 0x761, 0x764, 0x767, 0x76b, 0x76f, 0x773, 0x779, 0x77f, 0x784, 0x787, 0x797, 0x79e, 0x7a1, 0x7a6, 0x7aa, 0x7b0, 0x7b5, 0x7b9, 0x7bf, 0x7c5, 0x7c9, 0x7d2, 0x7d7, 0x7da, 0x7dd, 0x7e1, 0x7e5, 0x7e8, 0x7f8, 0x809, 0x80e, 0x810, 0x812} + +// idnaSparseValues: 2069 entries, 8276 bytes +var idnaSparseValues = [2069]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x0279, lo: 0xb7, hi: 0xb7}, + {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x06}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x6, offset 0x33 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3e + {value: 0x0000, lo: 0x0b}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xae}, + {value: 0x0808, lo: 0xaf, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4a + {value: 0x0000, lo: 0x03}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4e + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5d + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xb, offset 0x62 + {value: 0x0000, lo: 0x09}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbf}, + // Block 0xc, offset 0x6c + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd, offset 0x78 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xe, offset 0x86 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8b + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x10, offset 0x94 + {value: 0x0000, lo: 0x0f}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x3008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x11, offset 0xa4 + {value: 0x0000, lo: 0x0d}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb2 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbe + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xca + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x15, offset 0xdb + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x16, offset 0xe5 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x17, offset 0xec + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0961, lo: 0x9c, hi: 0x9c}, + {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x18, offset 0xf9 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x19, offset 0x10a + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x1a, offset 0x111 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1b, offset 0x11c + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1c, offset 0x12b + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1d, offset 0x139 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x1e, offset 0x143 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x145 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x20, offset 0x14a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14d + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x150 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x152 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x24, offset 0x15e + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x25, offset 0x169 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x171 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x27, offset 0x177 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x28, offset 0x17d + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x29, offset 0x182 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x2a, offset 0x187 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x18a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18e + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2d, offset 0x194 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2e, offset 0x199 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a5 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x30, offset 0x1af + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x31, offset 0x1b5 + {value: 0x0000, lo: 0x10}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x32, offset 0x1c6 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x34, offset 0x1d3 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x35, offset 0x1db + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1de + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x37, offset 0x1eb + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x38, offset 0x1f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f7 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x3a, offset 0x1fe + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3b, offset 0x206 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x216 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x222 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x224 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x3f, offset 0x22e + {value: 0x0000, lo: 0x0b}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x23a + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x41, offset 0x246 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x42, offset 0x252 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x43, offset 0x25a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x44, offset 0x25f + {value: 0x0000, lo: 0x0c}, + {value: 0x0e29, lo: 0x80, hi: 0x80}, + {value: 0x0e41, lo: 0x81, hi: 0x81}, + {value: 0x0e59, lo: 0x82, hi: 0x82}, + {value: 0x0e71, lo: 0x83, hi: 0x83}, + {value: 0x0e89, lo: 0x84, hi: 0x85}, + {value: 0x0ea1, lo: 0x86, hi: 0x86}, + {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x059d, lo: 0x90, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x059d, lo: 0xbd, hi: 0xbf}, + // Block 0x45, offset 0x26c + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x46, offset 0x27d + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x281 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x48, offset 0x28c + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x290 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4a, offset 0x299 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x2a1 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4c, offset 0x2a7 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09dd, lo: 0xa9, hi: 0xa9}, + {value: 0x09fd, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2ac + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2af + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4f, offset 0x2b3 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x50, offset 0x2b9 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2bd + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2c1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xbf}, + // Block 0x53, offset 0x2c5 + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ebd, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x54, offset 0x2cb + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2d3 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x56, offset 0x2da + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x57, offset 0x2e5 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x58, offset 0x2ef + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x59, offset 0x2f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x5a, offset 0x2f6 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0ef5, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5b, offset 0x2fc + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0f15, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5c, offset 0x300 + {value: 0x0020, lo: 0x01}, + {value: 0x0f35, lo: 0x80, hi: 0xbf}, + // Block 0x5d, offset 0x302 + {value: 0x0020, lo: 0x02}, + {value: 0x1735, lo: 0x80, hi: 0x8f}, + {value: 0x1915, lo: 0x90, hi: 0xbf}, + // Block 0x5e, offset 0x305 + {value: 0x0020, lo: 0x01}, + {value: 0x1f15, lo: 0x80, hi: 0xbf}, + // Block 0x5f, offset 0x307 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x60, offset 0x30a + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, + {value: 0x29e2, lo: 0x9b, hi: 0x9b}, + {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x61, offset 0x314 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x62, offset 0x317 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb0}, + {value: 0x2a35, lo: 0xb1, hi: 0xb1}, + {value: 0x2a55, lo: 0xb2, hi: 0xb2}, + {value: 0x2a75, lo: 0xb3, hi: 0xb3}, + {value: 0x2a95, lo: 0xb4, hi: 0xb4}, + {value: 0x2a75, lo: 0xb5, hi: 0xb5}, + {value: 0x2ab5, lo: 0xb6, hi: 0xb6}, + {value: 0x2ad5, lo: 0xb7, hi: 0xb7}, + {value: 0x2af5, lo: 0xb8, hi: 0xb9}, + {value: 0x2b15, lo: 0xba, hi: 0xbb}, + {value: 0x2b35, lo: 0xbc, hi: 0xbd}, + {value: 0x2b15, lo: 0xbe, hi: 0xbf}, + // Block 0x63, offset 0x326 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x64, offset 0x32a + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x66, offset 0x332 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x67, offset 0x336 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x68, offset 0x33b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x69, offset 0x340 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6a, offset 0x346 + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0xe00d, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x83}, + {value: 0x03f5, lo: 0x84, hi: 0x84}, + {value: 0x1329, lo: 0x85, hi: 0x85}, + {value: 0x447d, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6b, offset 0x352 + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6c, offset 0x361 + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6d, offset 0x367 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6e, offset 0x36b + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x6f, offset 0x37a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x70, offset 0x37f + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x71, offset 0x387 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x72, offset 0x391 + {value: 0x0000, lo: 0x0a}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x73, offset 0x39c + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x74, offset 0x3a4 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x75, offset 0x3b5 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x76, offset 0x3be + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x77, offset 0x3ce + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x78, offset 0x3db + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x449d, lo: 0x9c, hi: 0x9c}, + {value: 0x44b5, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x44cd, lo: 0xb0, hi: 0xbf}, + // Block 0x79, offset 0x3e5 + {value: 0x0000, lo: 0x04}, + {value: 0x44ed, lo: 0x80, hi: 0x8f}, + {value: 0x450d, lo: 0x90, hi: 0x9f}, + {value: 0x452d, lo: 0xa0, hi: 0xaf}, + {value: 0x450d, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3ea + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x7b, offset 0x3f7 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7c, offset 0x3fb + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7d, offset 0x400 + {value: 0x0020, lo: 0x01}, + {value: 0x454d, lo: 0x80, hi: 0xbf}, + // Block 0x7e, offset 0x402 + {value: 0x0020, lo: 0x03}, + {value: 0x4d4d, lo: 0x80, hi: 0x94}, + {value: 0x4b0d, lo: 0x95, hi: 0x95}, + {value: 0x4fed, lo: 0x96, hi: 0xbf}, + // Block 0x7f, offset 0x406 + {value: 0x0020, lo: 0x01}, + {value: 0x552d, lo: 0x80, hi: 0xbf}, + // Block 0x80, offset 0x408 + {value: 0x0020, lo: 0x03}, + {value: 0x5d2d, lo: 0x80, hi: 0x84}, + {value: 0x568d, lo: 0x85, hi: 0x85}, + {value: 0x5dcd, lo: 0x86, hi: 0xbf}, + // Block 0x81, offset 0x40c + {value: 0x0020, lo: 0x08}, + {value: 0x6b8d, lo: 0x80, hi: 0x8f}, + {value: 0x6d4d, lo: 0x90, hi: 0x90}, + {value: 0x6d8d, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70ed, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x710d, lo: 0xb0, hi: 0xbf}, + // Block 0x82, offset 0x415 + {value: 0x0020, lo: 0x05}, + {value: 0x730d, lo: 0x80, hi: 0xad}, + {value: 0x656d, lo: 0xae, hi: 0xae}, + {value: 0x78cd, lo: 0xaf, hi: 0xb5}, + {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, + {value: 0x79ad, lo: 0xb7, hi: 0xbf}, + // Block 0x83, offset 0x41b + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x84, offset 0x41f + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x85, offset 0x42f + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x86, offset 0x439 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x87, offset 0x43e + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x88, offset 0x441 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x89, offset 0x447 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8a, offset 0x44e + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8b, offset 0x453 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8c, offset 0x457 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8d, offset 0x45d + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xbf}, + // Block 0x8e, offset 0x462 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8f, offset 0x46b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x90, offset 0x470 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x91, offset 0x476 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8b0d, lo: 0x98, hi: 0x9f}, + {value: 0x8b25, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x92, offset 0x47d + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8b25, lo: 0xb0, hi: 0xb7}, + {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, + // Block 0x93, offset 0x484 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x94, offset 0x48b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x95, offset 0x48f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xae}, + {value: 0x0018, lo: 0xaf, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x96, offset 0x494 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x97, offset 0x497 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x98, offset 0x49c + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0808, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x99, offset 0x4a8 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x9a, offset 0x4ae + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x9b, offset 0x4b3 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9c, offset 0x4ba + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0x9d, offset 0x4c2 + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0x9e, offset 0x4c7 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0x9f, offset 0x4cb + {value: 0x0000, lo: 0x0f}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0808, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0808, lo: 0x99, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa0, offset 0x4db + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0818, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0xa1, offset 0x4e2 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa2, offset 0x4e6 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa3, offset 0x4ea + {value: 0x0000, lo: 0x06}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa4, offset 0x4f1 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa5, offset 0x4f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa6, offset 0x4f6 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa7, offset 0x4f9 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa8, offset 0x4fd + {value: 0x0000, lo: 0x08}, + {value: 0x0908, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0xa1}, + {value: 0x0c08, lo: 0xa2, hi: 0xa2}, + {value: 0x0a08, lo: 0xa3, hi: 0xa3}, + {value: 0x3308, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xa9, offset 0x506 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x50a + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0xa6}, + {value: 0x0808, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb3}, + {value: 0x0a08, lo: 0xb4, hi: 0xbf}, + // Block 0xab, offset 0x512 + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x84}, + {value: 0x0808, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x90}, + {value: 0x0a18, lo: 0x91, hi: 0x93}, + {value: 0x0c18, lo: 0x94, hi: 0x94}, + {value: 0x0818, lo: 0x95, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xac, offset 0x51a + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xad, offset 0x51e + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xae, offset 0x524 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xaf, offset 0x52d + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xb0, offset 0x539 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb1, offset 0x540 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xb2, offset 0x549 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb3, offset 0x553 + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb4, offset 0x55a + {value: 0x0000, lo: 0x0d}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb5, offset 0x568 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb6, offset 0x575 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb7, offset 0x582 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb8, offset 0x58b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb9, offset 0x58f + {value: 0x0000, lo: 0x0f}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xba, offset 0x59f + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xbb, offset 0x5a7 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xbc, offset 0x5b2 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbd, offset 0x5bb + {value: 0x0000, lo: 0x05}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xbe, offset 0x5c1 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbf, offset 0x5c9 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xc0, offset 0x5d2 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc1, offset 0x5dd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc2, offset 0x5e0 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc3, offset 0x5ec + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xc4, offset 0x5f5 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc5, offset 0x5f8 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc6, offset 0x5fd + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xc7, offset 0x602 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x99}, + {value: 0x3308, lo: 0x9a, hi: 0x9b}, + {value: 0x3008, lo: 0x9c, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xbf}, + // Block 0xc8, offset 0x60f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xc9, offset 0x61a + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x3b08, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0xbf}, + // Block 0xca, offset 0x623 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x98}, + {value: 0x3b08, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xbf}, + // Block 0xcb, offset 0x62d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xcc, offset 0x630 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xcd, offset 0x63a + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xce, offset 0x643 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xcf, offset 0x64f + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xd0, offset 0x65c + {value: 0x0000, lo: 0x0c}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xd1, offset 0x669 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x3008, lo: 0x93, hi: 0x94}, + {value: 0x3308, lo: 0x95, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x96}, + {value: 0x3b08, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xbf}, + // Block 0xd2, offset 0x677 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd3, offset 0x67e + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xd4, offset 0x682 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xd5, offset 0x685 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xd6, offset 0x68a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xd7, offset 0x68d + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0340, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd8, offset 0x692 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xd9, offset 0x695 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xda, offset 0x69c + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xdb, offset 0x6a3 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xdc, offset 0x6a7 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xdd, offset 0x6b2 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xde, offset 0x6b5 + {value: 0x0000, lo: 0x02}, + {value: 0xe105, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xdf, offset 0x6b8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0xe0, offset 0x6bb + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbf}, + // Block 0xe1, offset 0x6c1 + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xe2, offset 0x6c7 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xe3, offset 0x6cd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xe4, offset 0x6d0 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xe5, offset 0x6d3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xe6, offset 0x6d6 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xe7, offset 0x6dd + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xe8, offset 0x6e0 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xe9, offset 0x6e5 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xea, offset 0x6ef + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xeb, offset 0x6f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xec, offset 0x6f6 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xed, offset 0x705 + {value: 0x0000, lo: 0x0b}, + {value: 0x3318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xee, offset 0x711 + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xef, offset 0x715 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0xf0, offset 0x71a + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf1, offset 0x71e + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xf2, offset 0x723 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xf3, offset 0x727 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0xf4, offset 0x72c + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xf5, offset 0x735 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xf6, offset 0x740 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xf7, offset 0x746 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xf8, offset 0x74c + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xf9, offset 0x752 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xfa, offset 0x758 + {value: 0x0000, lo: 0x08}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0b08, lo: 0x8b, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xfb, offset 0x761 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0xfc, offset 0x764 + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xfd, offset 0x767 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0818, lo: 0x81, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xfe, offset 0x76b + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xff, offset 0x76f + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x100, offset 0x773 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x101, offset 0x779 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x102, offset 0x77f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1d9, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0x103, offset 0x784 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0x104, offset 0x787 + {value: 0x0000, lo: 0x0f}, + {value: 0xc801, lo: 0x80, hi: 0x80}, + {value: 0xc851, lo: 0x81, hi: 0x81}, + {value: 0xc8a1, lo: 0x82, hi: 0x82}, + {value: 0xc8f1, lo: 0x83, hi: 0x83}, + {value: 0xc941, lo: 0x84, hi: 0x84}, + {value: 0xc991, lo: 0x85, hi: 0x85}, + {value: 0xc9e1, lo: 0x86, hi: 0x86}, + {value: 0xca31, lo: 0x87, hi: 0x87}, + {value: 0xca81, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcad1, lo: 0x90, hi: 0x90}, + {value: 0xcaf1, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0x105, offset 0x797 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x106, offset 0x79e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x107, offset 0x7a1 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x108, offset 0x7a6 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x109, offset 0x7aa + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x10a, offset 0x7b0 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x10b, offset 0x7b5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x10c, offset 0x7b9 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0x10d, offset 0x7bf + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xa4}, + {value: 0x0018, lo: 0xa5, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xbf}, + // Block 0x10e, offset 0x7c5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x10f, offset 0x7c9 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x110, offset 0x7d2 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x111, offset 0x7d7 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0x112, offset 0x7da + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x113, offset 0x7dd + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x114, offset 0x7e1 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x115, offset 0x7e5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x116, offset 0x7e8 + {value: 0x0020, lo: 0x0f}, + {value: 0xded1, lo: 0x80, hi: 0x89}, + {value: 0x8e35, lo: 0x8a, hi: 0x8a}, + {value: 0xe011, lo: 0x8b, hi: 0x9c}, + {value: 0x8e55, lo: 0x9d, hi: 0x9d}, + {value: 0xe251, lo: 0x9e, hi: 0xa2}, + {value: 0x8e75, lo: 0xa3, hi: 0xa3}, + {value: 0xe2f1, lo: 0xa4, hi: 0xab}, + {value: 0x7f0d, lo: 0xac, hi: 0xac}, + {value: 0xe3f1, lo: 0xad, hi: 0xaf}, + {value: 0x8e95, lo: 0xb0, hi: 0xb0}, + {value: 0xe451, lo: 0xb1, hi: 0xb6}, + {value: 0x8eb5, lo: 0xb7, hi: 0xb9}, + {value: 0xe511, lo: 0xba, hi: 0xba}, + {value: 0x8f15, lo: 0xbb, hi: 0xbb}, + {value: 0xe531, lo: 0xbc, hi: 0xbf}, + // Block 0x117, offset 0x7f8 + {value: 0x0020, lo: 0x10}, + {value: 0x93b5, lo: 0x80, hi: 0x80}, + {value: 0xf0b1, lo: 0x81, hi: 0x86}, + {value: 0x93d5, lo: 0x87, hi: 0x8a}, + {value: 0xda11, lo: 0x8b, hi: 0x8b}, + {value: 0xf171, lo: 0x8c, hi: 0x96}, + {value: 0x9455, lo: 0x97, hi: 0x97}, + {value: 0xf2d1, lo: 0x98, hi: 0xa3}, + {value: 0x9475, lo: 0xa4, hi: 0xa6}, + {value: 0xf451, lo: 0xa7, hi: 0xaa}, + {value: 0x94d5, lo: 0xab, hi: 0xab}, + {value: 0xf4d1, lo: 0xac, hi: 0xac}, + {value: 0x94f5, lo: 0xad, hi: 0xad}, + {value: 0xf4f1, lo: 0xae, hi: 0xaf}, + {value: 0x9515, lo: 0xb0, hi: 0xb1}, + {value: 0xf531, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x118, offset 0x809 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0x119, offset 0x80e + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x11a, offset 0x810 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x11b, offset 0x812 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 42780 bytes (41KiB); checksum: 29936AB9 diff --git a/vendor/golang.org/x/net/internal/socket/norace.go b/vendor/golang.org/x/net/internal/socket/norace.go new file mode 100644 index 0000000000..9519ffbba4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/norace.go @@ -0,0 +1,12 @@ +// Copyright 2019 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. + +// +build !race + +package socket + +func (m *Message) raceRead() { +} +func (m *Message) raceWrite() { +} diff --git a/vendor/golang.org/x/net/internal/socket/race.go b/vendor/golang.org/x/net/internal/socket/race.go new file mode 100644 index 0000000000..df60c62fff --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/race.go @@ -0,0 +1,37 @@ +// Copyright 2019 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. + +// +build race + +package socket + +import ( + "runtime" + "unsafe" +) + +// This package reads and writes the Message buffers using a +// direct system call, which the race detector can't see. +// These functions tell the race detector what is going on during the syscall. + +func (m *Message) raceRead() { + for _, b := range m.Buffers { + if len(b) > 0 { + runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) + } + } + if b := m.OOB; len(b) > 0 { + runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) + } +} +func (m *Message) raceWrite() { + for _, b := range m.Buffers { + if len(b) > 0 { + runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) + } + } + if b := m.OOB; len(b) > 0 { + runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) + } +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go index 1f4cb3b36e..d01fc4c7da 100644 --- a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go @@ -13,6 +13,9 @@ import ( ) func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + for i := range ms { + ms[i].raceWrite() + } hs := make(mmsghdrs, len(ms)) var parseFn func([]byte, string) (net.Addr, error) if c.network != "tcp" { @@ -43,6 +46,9 @@ func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { } func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + for i := range ms { + ms[i].raceRead() + } hs := make(mmsghdrs, len(ms)) var marshalFn func(net.Addr) []byte if c.network != "tcp" { diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go index a972011812..d5ae3f8e14 100644 --- a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go @@ -12,6 +12,7 @@ import ( ) func (c *Conn) recvMsg(m *Message, flags int) error { + m.raceWrite() var h msghdr vs := make([]iovec, len(m.Buffers)) var sa []byte @@ -48,6 +49,7 @@ func (c *Conn) recvMsg(m *Message, flags int) error { } func (c *Conn) sendMsg(m *Message, flags int) error { + m.raceRead() var h msghdr vs := make([]iovec, len(m.Buffers)) var sa []byte diff --git a/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go index b17d223bff..ed0448fe98 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go +++ b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go @@ -4,4 +4,29 @@ package socket -func probeProtocolStack() int { return 4 } +import ( + "sync" + "syscall" + "unsafe" +) + +// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h +var ( + osreldateOnce sync.Once + osreldate uint32 +) + +// First __DragonFly_version after September 2019 ABI changes +// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html +const _dragonflyABIChangeVersion = 500705 + +func probeProtocolStack() int { + osreldateOnce.Do(func() { osreldate, _ = syscall.SysctlUint32("kern.osreldate") }) + var p uintptr + if int(unsafe.Sizeof(p)) == 8 && osreldate >= _dragonflyABIChangeVersion { + return int(unsafe.Sizeof(p)) + } + // 64-bit Dragonfly before the September 2019 ABI changes still requires + // 32-bit aligned access to network subsystem. + return 4 +} diff --git a/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go index 813385a98b..e740c8f024 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go @@ -53,7 +53,6 @@ type sockaddrInet6 struct { const ( sizeofIovec = 0x10 sizeofMsghdr = 0x30 - sizeofMmsghdr = 0x38 sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go index 72d8b25421..d33025b70d 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go @@ -47,7 +47,6 @@ type sockaddrInet6 struct { const ( sizeofIovec = 0x8 sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go index 3545319ae9..b20d216774 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go @@ -50,7 +50,6 @@ type sockaddrInet6 struct { const ( sizeofIovec = 0x10 sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go index 72d8b25421..1bb10a4289 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go @@ -45,9 +45,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go index 72d8b25421..1bb10a4289 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go @@ -45,9 +45,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go index 72d8b25421..1bb10a4289 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go @@ -45,9 +45,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go index dbff234fbd..f12a1d7682 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go @@ -49,9 +49,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go index 3545319ae9..7f6e8a7fa4 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go @@ -48,9 +48,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x38 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofCmsghdr = 0x10 sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go index bf8f47c88c..7e258cec29 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go @@ -47,9 +47,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go index a46eff9912..b3f9c0d7e5 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go @@ -50,9 +50,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x10 - sizeofMsghdr = 0x30 - sizeofMmsghdr = 0x40 + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go index bf8f47c88c..7e258cec29 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go @@ -47,9 +47,9 @@ type sockaddrInet6 struct { } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c - sizeofMmsghdr = 0x20 + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go index a46eff9912..da26ef019c 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go @@ -52,7 +52,6 @@ type sockaddrInet6 struct { const ( sizeofIovec = 0x10 sizeofMsghdr = 0x30 - sizeofMmsghdr = 0x40 sizeofCmsghdr = 0xc sizeofSockaddrInet = 0x10 diff --git a/vendor/golang.org/x/net/internal/socks/socks.go b/vendor/golang.org/x/net/internal/socks/socks.go index 6929a9fd5c..97db2340ec 100644 --- a/vendor/golang.org/x/net/internal/socks/socks.go +++ b/vendor/golang.org/x/net/internal/socks/socks.go @@ -127,7 +127,7 @@ type Dialer struct { // establishing the transport connection. ProxyDial func(context.Context, string, string) (net.Conn, error) - // AuthMethods specifies the list of request authention + // AuthMethods specifies the list of request authentication // methods. // If empty, SOCKS client requests only AuthMethodNotRequired. AuthMethods []AuthMethod diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go index 685f0e7ea2..dc5225b6d4 100644 --- a/vendor/golang.org/x/net/internal/timeseries/timeseries.go +++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go @@ -403,9 +403,9 @@ func (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, resu // Where should scanning start? if dstStart.After(srcStart) { - advance := dstStart.Sub(srcStart) / srcInterval - srcIndex += int(advance) - srcStart = srcStart.Add(advance * srcInterval) + advance := int(dstStart.Sub(srcStart) / srcInterval) + srcIndex += advance + srcStart = srcStart.Add(time.Duration(advance) * srcInterval) } // The i'th value is computed as show below. diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go index 19845c55b1..69c4f553cd 100644 --- a/vendor/golang.org/x/net/ipv4/control_bsd.go +++ b/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -35,6 +35,7 @@ func marshalInterface(b []byte, cm *ControlMessage) []byte { } func parseInterface(cm *ControlMessage, b []byte) { - sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&b[0])) + var sadl syscall.SockaddrDatalink + copy((*[unsafe.Sizeof(sadl)]byte)(unsafe.Pointer(&sadl))[:], b) cm.IfIndex = int(sadl.Index) } diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go index b494a2cde4..e845a7376e 100644 --- a/vendor/golang.org/x/net/ipv4/helper.go +++ b/vendor/golang.org/x/net/ipv4/helper.go @@ -13,16 +13,13 @@ import ( ) var ( - errInvalidConn = errors.New("invalid connection") - errMissingAddress = errors.New("missing address") - errMissingHeader = errors.New("missing header") - errNilHeader = errors.New("nil header") - errHeaderTooShort = errors.New("header too short") - errExtHeaderTooShort = errors.New("extension header too short") - errInvalidConnType = errors.New("invalid conn type") - errNoSuchInterface = errors.New("no such interface") - errNoSuchMulticastInterface = errors.New("no such multicast interface") - errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) + errInvalidConn = errors.New("invalid connection") + errMissingAddress = errors.New("missing address") + errNilHeader = errors.New("nil header") + errHeaderTooShort = errors.New("header too short") + errExtHeaderTooShort = errors.New("extension header too short") + errInvalidConnType = errors.New("invalid conn type") + errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) // See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html. freebsdVersion uint32 diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreq.go b/vendor/golang.org/x/net/ipv4/sys_asmreq.go index c5eaafe96b..76d670acaa 100644 --- a/vendor/golang.org/x/net/ipv4/sys_asmreq.go +++ b/vendor/golang.org/x/net/ipv4/sys_asmreq.go @@ -7,12 +7,15 @@ package ipv4 import ( + "errors" "net" "unsafe" "golang.org/x/net/internal/socket" ) +var errNoSuchInterface = errors.New("no such interface") + func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}} if err := setIPMreqInterface(&mreq, ifi); err != nil { diff --git a/vendor/golang.org/x/net/ipv4/sys_bpf.go b/vendor/golang.org/x/net/ipv4/sys_bpf.go index 9f30b7308e..5c03dce3b7 100644 --- a/vendor/golang.org/x/net/ipv4/sys_bpf.go +++ b/vendor/golang.org/x/net/ipv4/sys_bpf.go @@ -11,13 +11,14 @@ import ( "golang.org/x/net/bpf" "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" ) func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { - prog := sockFProg{ + prog := unix.SockFprog{ Len: uint16(len(f)), - Filter: (*sockFilter)(unsafe.Pointer(&f[0])), + Filter: (*unix.SockFilter)(unsafe.Pointer(&f[0])), } - b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog] + b := (*[unix.SizeofSockFprog]byte)(unsafe.Pointer(&prog))[:unix.SizeofSockFprog] return so.Set(c, b) } diff --git a/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/golang.org/x/net/ipv4/sys_linux.go index 60defe1326..cf755c7fba 100644 --- a/vendor/golang.org/x/net/ipv4/sys_linux.go +++ b/vendor/golang.org/x/net/ipv4/sys_linux.go @@ -11,6 +11,7 @@ import ( "golang.org/x/net/internal/iana" "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" ) var ( @@ -35,7 +36,7 @@ var ( ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, - ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}}, + ssoAttachFilter: {Option: socket.Option{Level: unix.SOL_SOCKET, Name: unix.SO_ATTACH_FILTER, Len: unix.SizeofSockFprog}}, } ) diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go new file mode 100644 index 0000000000..ecebf32723 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go @@ -0,0 +1,93 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go index 43ef8e5922..1c7fdfa13a 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -133,16 +128,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go index 43ef8e5922..1c7fdfa13a 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -133,16 +128,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go index 43ef8e5922..1c7fdfa13a 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -133,16 +128,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go index 43ef8e5922..1c7fdfa13a 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -133,16 +128,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go index fa1b6bc61d..3c5ea54731 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -133,16 +128,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go index 0c0d48012f..e626134a8b 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go @@ -57,9 +57,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -72,8 +69,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -137,15 +132,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go index ee8204da46..a04e785187 100644 --- a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +++ b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go @@ -55,9 +55,6 @@ const ( sysSO_EE_ORIGIN_TXSTATUS = 0x4 sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet = 0x10 sizeofInetPktinfo = 0xc @@ -70,8 +67,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPFilter = 0x4 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -135,16 +130,3 @@ type groupSourceReq struct { type icmpFilter struct { Data uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/helper.go b/vendor/golang.org/x/net/ipv6/helper.go index f767b1f5dd..c2d508f9c3 100644 --- a/vendor/golang.org/x/net/ipv6/helper.go +++ b/vendor/golang.org/x/net/ipv6/helper.go @@ -15,7 +15,6 @@ var ( errMissingAddress = errors.New("missing address") errHeaderTooShort = errors.New("header too short") errInvalidConnType = errors.New("invalid conn type") - errNoSuchInterface = errors.New("no such interface") errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH) ) diff --git a/vendor/golang.org/x/net/ipv6/sys_bpf.go b/vendor/golang.org/x/net/ipv6/sys_bpf.go index b2dbcb2f28..90ef4dfaf4 100644 --- a/vendor/golang.org/x/net/ipv6/sys_bpf.go +++ b/vendor/golang.org/x/net/ipv6/sys_bpf.go @@ -11,13 +11,14 @@ import ( "golang.org/x/net/bpf" "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" ) func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { - prog := sockFProg{ + prog := unix.SockFprog{ Len: uint16(len(f)), - Filter: (*sockFilter)(unsafe.Pointer(&f[0])), + Filter: (*unix.SockFilter)(unsafe.Pointer(&f[0])), } - b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog] + b := (*[unix.SizeofSockFprog]byte)(unsafe.Pointer(&prog))[:unix.SizeofSockFprog] return so.Set(c, b) } diff --git a/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/golang.org/x/net/ipv6/sys_linux.go index bc218103c1..96e8093a30 100644 --- a/vendor/golang.org/x/net/ipv6/sys_linux.go +++ b/vendor/golang.org/x/net/ipv6/sys_linux.go @@ -11,6 +11,7 @@ import ( "golang.org/x/net/internal/iana" "golang.org/x/net/internal/socket" + "golang.org/x/sys/unix" ) var ( @@ -40,7 +41,7 @@ var ( ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, - ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}}, + ssoAttachFilter: {Option: socket.Option{Level: unix.SOL_SOCKET, Name: unix.SO_ATTACH_FILTER, Len: unix.SizeofSockFprog}}, } ) diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go new file mode 100644 index 0000000000..47e99ac9d3 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go @@ -0,0 +1,122 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]uint8 + X__ss_align int64 + X__ss_pad2 [112]uint8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go index 14155dec21..bde4a8f8f5 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -155,16 +150,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go index 14155dec21..bde4a8f8f5 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -155,16 +150,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go index 14155dec21..bde4a8f8f5 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -155,16 +150,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go index 14155dec21..bde4a8f8f5 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -155,16 +150,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go index a51e142b42..66fd236121 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x104 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x8 ) type kernelSockaddrStorage struct { @@ -155,16 +150,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go index 1ee237b2b7..6083ddcedc 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go @@ -86,9 +86,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -100,8 +97,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -159,15 +154,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go index 9566d76468..992ac9ec5f 100644 --- a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +++ b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go @@ -84,9 +84,6 @@ const ( sysICMPV6_FILTER_BLOCKOTHERS = 0x3 sysICMPV6_FILTER_PASSONLY = 0x4 - sysSOL_SOCKET = 0x1 - sysSO_ATTACH_FILTER = 0x1a - sizeofKernelSockaddrStorage = 0x80 sizeofSockaddrInet6 = 0x1c sizeofInet6Pktinfo = 0x14 @@ -98,8 +95,6 @@ const ( sizeofGroupSourceReq = 0x108 sizeofICMPv6Filter = 0x20 - - sizeofSockFprog = 0x10 ) type kernelSockaddrStorage struct { @@ -157,16 +152,3 @@ type groupSourceReq struct { type icmpv6Filter struct { Data [8]uint32 } - -type sockFProg struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *sockFilter -} - -type sockFilter struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go index c1347ced4d..369e44656a 100644 --- a/vendor/golang.org/x/net/publicsuffix/table.go +++ b/vendor/golang.org/x/net/publicsuffix/table.go @@ -2,7 +2,7 @@ package publicsuffix -const version = "publicsuffix.org's public_suffix_list.dat, git revision 6f03f42a65d006c8ae657f125f14fb8f9d3337f4 (2019-05-31T16:38:49Z)" +const version = "publicsuffix.org's public_suffix_list.dat, git revision 7922d7c20e246552be418e8f72e577899fd30d99 (2020-02-18T23:18:19Z)" const ( nodesBitsChildren = 10 @@ -23,486 +23,488 @@ const ( ) // numTLD is the number of top level domains. -const numTLD = 1539 +const numTLD = 1528 // Text is the combined text of all labels. -const text = "9guacuiababia-goracleaningroks-theatree164-baltimore-og-romsdali" + - "payboltateshinanomachimkentateyamagrocerybnikeisenbahnatuurweten" + - "schappenaumburggfarmerseineastcoastaldefenceatonsbergjemnes3-ap-" + - "southeast-2ix4432-balsfjordd-dnsiskinkyotobetsulikes-piedmontice" + - "llodingenaturhistorisches3-ap-south-16-b-datainaioirasebastopolo" + - "gyeongnamegawakembuchikumagayagawakkanaibetsubamericanfamilydscl" + - "oudeitychyattorneyagawakayamadridvagsoyereplanetariumemsettsuppo" + - "rtashkentatamotors3-ap-northeast-2038bloxcms3-website-us-east-1b" + - "luedancebmoattachments3-website-us-west-1bms3-website-us-west-2b" + - "mwegroweibolognagasakimobetsuitaipeiheijindianmarketinglitchasel" + - "jeepsongdalenviknagatorockartuzyuzawabnpparibaselburgliwicebnrwe" + - "irbomloabathsbcatholicaxiashorokanaiebondray-dnsupdaternopilawat" + - "ches5ybonnishiharabookinghostfoldnavyboomlahppiacenzachpomorskie" + - "nishiizunazukindigenaklodzkochikushinonsenergyboschaefflerdalimi" + - "tedrayddnsfreebox-osascoli-picenordre-landraydnsakyotanabellunor" + - "d-aurdalvdalaskanittedallasalleangaviikaascolipicenoduminamidait" + - "omandalimoldeloittemp-dnsalangenishikatakazakindustriabostikarel" + - "iancebostonakijinsekikogentinglobalashovhachinohedmarkariyamelbo" + - "urnebotanicalgardenishikatsuragit-reposalondonetskarlsoybotanicg" + - "ardenishikawazukamisunagawabotanybouncemerckmsdnipropetrovskjerv" + - "oyagebounty-fullensakerrypropertiesaltdalinkyard-cloudnsaludrive" + - "fsnillfjordrobaknoluoktagajobojindustriesteamfamberkeleyboutique" + - "becheltenham-radio-openairbusantiquest-a-la-maisondre-landroidru" + - "dunsalvadordalibabalestrandabergamo-siemensncfdupontariodejaneir" + - "odoybozen-sudtirolivornobozen-suedtirolombardynaliaskimitsubatam" + - "ibugattiffanynysadoes-itvedestrandurbanamexnetlifyinfinitintuitj" + - "omemorialomzaporizhzhegurinuyamashinatsukigatakasakitchenishimer" + - "abplacedogawarabikomaezakirunorddalondrinamsskoganeinvestmentsal" + - "zburgloboavistaprintelligencebrandywinevalleybrasiliabrindisiben" + - "ikinderoybristoloseyouriparliamentjxfinitybritishcolumbialowieza" + - "ganquanpachigasakievennodesabaerobaticketsamegawabroadcastlecler" + - "chernihivgubananarepublicasadelamonedatingjesdalavangenayorovnoc" + - "eanographics3-fips-us-gov-west-1broadwaybroke-itkmaxxjavald-aost" + - "aplesamnangerbrokerbronnoysundurhamburglogowfarmsteadweberbrothe" + - "rmesaverdealstahaugesunderseaportsinfolldalorenskogloppenzaolbia" + - "-tempio-olbiatempioolbialystokkepnogataijinzais-a-candidatebrows" + - "ersafetymarketsampalacebrumunddalotenkawabrunelasticbeanstalkarm" + - "oybrusselsamsclubartowhalinglugmbhartipscbgminakamichiharabruxel" + - "lesamsungmodalenishinomiyashironobryansklepparmattelefonicarboni" + - "a-iglesias-carboniaiglesiascarboniabrynewjerseybuskerudinewportl" + - "ligatksatxn--0trq7p7nnishinoomotegobuzentsujiiebuzzlgmxn--11b4c3" + - "dynathomebuiltmparochernigovernmentoyosatoyokawabwhoswhokksundyn" + - "dns-at-homedepotenzamamidsundyndns-at-workisboringrimstadyndns-b" + - "logdnsandnessjoenishinoshimatsuurabzhitomirumalatvuopmicrolighti" + - "ngripebzzparsandoycolognexus-2colonialwilliamsburgrongausdalucan" + - "iacoloradoplateaudiocolumbusheycommunecommunitycomoarekecomparem" + - "arkerryhotelsaobernardocompute-1computerhistoryofscience-fiction" + - "comsecuritytacticsaogoncartiercondoshichinohealth-carereforminam" + - "iiselectraniandriabarlettatraniandriaconferenceconstructionconsu" + - "ladonnakamagayahabaghdadyndns-wikirkenesaotomembersapporoconsult" + - "anthropologyconsultingrossetouchihayaakasakawaharacontactranoyco" + - "ntagematsubaracontemporaryarteducationalchikugodaddyn-vpndnsarde" + - "gnaroycontractorskenconventureshinodebalancertificationcookingch" + - "annelsdvrdnsfor-better-thanawatchandclockashiharacooluccapitalon" + - "ewspapercooperativano-frankivskolegallocus-3copenhagencyclopedic" + - "hiryukyuragifuchungbukharaumalborkarpaczeladzwiiheyakumoduminami" + - "echizenishiokoppegardyndns-freeboxosloftranakanojoetsuwanouchiku" + - "jogaszkolajollamericanexpressexycorsicafederationcorvettemasekas" + - "hiwaracosenzakopanecosidnshome-webserverdalucernecostumedio-camp" + - "idano-mediocampidanomediocouchpotatofriesardiniacouncilukowildli" + - "fedorainfraclouderacouponsarluroycq-acranbrookuwanalyticsarpsbor" + - "groundhandlingroznycrdyndns-workshoppingrpasadenarashinocreditca" + - "rdyndns1creditunioncremonashgabadaddjaguarqhachirogatakanezawacr" + - "ewilliamhillutskashiwazakiyosatokamachintaifun-dnsdojolstercrick" + - "etrzyncrimeast-kazakhstanangercrotonecrownipassagensarufutsunomi" + - "yawakasaikaitakoelncrsvpassenger-associationcruisesasayamacrypto" + - "nomichigangwoncuisinellair-traffic-controlleyculturalcentertainm" + - "entransportecuneocupcakecuritibahcavuotnagaivuotnagaokakyotambab" + - "yeniwaizumiotsukumiyamazonawsagaeroclubmedecincinnationwidealeri" + - "mo-i-ranaamesjevuemielno-ipifonychitachinakagawashtenawdev-myqna" + - "pcloudcontrolledekagaminogiftsandvikcoromantovalle-d-aostathelle" + - "cxn--12c1fe0bradescorporationcymrussiacyonabaruminamiizukamiokam" + - "eokameyamatotakadacyoutheworkpccwinbanzaicloudcontrolappleborkda" + - "lpha-myqnapcloud66ferrerotikagoshimalselvendrelluzernfetsundynse" + - "rvebbsaskatchewanfguitarsavannahgafhvalerfidoomdnstracefieldynuc" + - "onnectransurluxembourgruefigueresinstagingujohanamakinoharafilat" + - "eliafilegear-audnedalnfilegear-deatnurembergulenfilegear-gbizfil" + - "egear-iefilegear-jpmorganfilegear-sgunmaoris-a-financialadvisor-" + - "aurdalvivanovoldafilminamiminowafinalfinancefineartsaves-the-wha" + - "lessandria-trani-barletta-andriatranibarlettaandriafinlandynv6fi" + - "nnoyfirebaseapplinzis-a-geekasukabedzin-berlindasdaburfirenzefir" + - "estonefirmdalegokasells-itravelchannelfishingoldpoint2thisamitsu" + - "kefitjarvodkafjordynvpnplus-4fitnessettlementravelersinsurancefj" + - "alerflesberguovdageaidnulminamioguni5flickragerogersavonarusawaf" + - "lightsaxoflirfloginlinefloraflorencefloridattorelayfloripaderbor" + - "nfloristanohatakahamalvikasumigaurawa-mazowszextraspace-to-renta" + - "lstomakomaibaraflorokunohealthcareerschoenbrunnflowerschokokeksc" + - "hokoladenfltrdyroyrvikinguidegreeflynnhosting-clusterflynnhubarc" + - "laycards3-sa-east-1fndfor-ourfor-someeresistancefor-theaterforex" + - "rothadanorthwesternmutualforgotdnscholarshipschoolforli-cesena-f" + - "orlicesenaforlikescandyn53forsaleikangerforsandasuologoipatriafo" + - "rtalfortmissoulancashirecreationfortworthadselfipaviancarrdforum" + - "zfosneschulefotaris-a-greenfoxfordebianfozorafredrikstadtvschwar" + - "zgwangjuniperfreeddnsgeekgalaxyfreedesktopocznore-og-uvdalfreema" + - "sonryfreesitevadsoccertmgretakahashimamakirovogradoyfreetlschwei" + - "zfreiburgushikamifuranorth-kazakhstanfreightrentin-sud-tirolfres" + - "eniuscountryestateofdelawarezzoologyfribourgwiddleitungsenfriuli" + - "-v-giuliafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafri" + - "uli-veneziagiuliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriu" + - "livegiuliafriulivenezia-giuliafriuliveneziagiuliafriulivgiuliafr" + - "lfrogansciencecentersciencehistoryfrognfrolandfrom-akrehamnfrom-" + - "alfrom-arfrom-azimuthdfcbankasuyanagawafrom-capebretonamicrosoft" + - "bankaszubyfrom-codyn-o-saurlandescientistordalfrom-ctrentin-sudt" + - "irolfrom-dchitosetogitsuldalottefrom-dedyn-berlincolnfrom-flande" + - "rscjohnsonfrom-gaulardalfrom-hichisochildrensgardenfrom-iafrom-i" + - "dfrom-ilfrom-in-brbarclays3-us-east-2from-kscotlandfrom-kyowaria" + - "sahikawawindmillfrom-lancasterfrom-mamurogawafrom-mdfrom-meethno" + - "logyfrom-mifunefrom-mnfrom-mochizukiryuohdattowebcampinashikimin" + - "ohostre-totendofinternet-dnsaliasiafrom-mscrapper-sitefrom-mtnfr" + - "om-nctulanciafrom-ndfrom-nefrom-nh-serveblogsiteleafamilycompany" + - "minamisanrikubetsurfastly-terrariuminamimakis-a-designerfrom-nja" + - "worznoticiasnesoddenmarkhangelskjakdnepropetrovskiervaapsteierma" + - "rkatowicefrom-nminamitanefrom-nvalled-aostavangerfrom-nyfrom-ohk" + - "urafrom-oketogurafrom-orfrom-padovaksdalfrom-pratohmangolffanscr" + - "appingxn--12co0c3b4evalleaostaticscrysechocolatelemarkaruizawafr" + - "om-ris-a-gurulvikatsushikabeeldengeluidfrom-schmidtre-gauldalfro" + - "m-sdfrom-tnfrom-txn--1ck2e1barefootballfinanzgoraustraliaisondri" + - "obranconagawalbrzycharitysfjordds3-eu-west-1from-utazuerichardli" + - "llehammerfeste-ipfizerfrom-val-daostavalleyfrom-vtrentin-sued-ti" + - "rolfrom-wafrom-wielunnerfrom-wvalledaostavernfrom-wyfrosinonefro" + - "stalowa-wolawafroyahooguyfstcgroupgfoggiafujiiderafujikawaguchik" + - "onefujiminokamoenairlinedre-eikerfujinomiyadavvenjargap-northeas" + - "t-3fujiokayamangyshlakasamatsudovre-eikerfujisatoshonairportland" + - "-4-salernoboribetsuckserveminecraftrentin-suedtirolfujisawafujis" + - "hiroishidakabiratoridefensells-for-lesservemp3fujitsurugashimani" + - "wakuratexaskoyabearalvahkihokumakogengerdalcesurancechirealmpmnf" + - "ujixeroxn--1ctwolominamataobaomoriguchiharagusartservep2pharmaci" + - "enservepicservequakefujiyoshidavvesiidatsunanjoburgfukayabeatser" + - "vesarcasmatartanddesignfukuchiyamadazaifudaigodontexistmein-iser" + - "vebeerfukudominichofunatoriginstitutelevisionishitosashimizunami" + - "namibosogndalottokonamegatakatsukis-a-catererfukuis-a-hard-worke" + - "rservicesevastopolefukumitsubishigakisarazurecontainerdpolicefuk" + - "uokazakishiwadafukuroishikarikaturindalfukusakisofukushimannorfo" + - "lkebibleirfjordfukuyamagatakahatakaishimogosenfunabashiriuchinad" + - "afunagatakamatsukawafunahashikamiamakusatsumasendaisennangonohej" + - "is-a-hunterfundaciofuoiskujukuriyamansionsevenassisicilyfuosskoc" + - "zowindowsewinnersharis-a-knightpointtohobby-sitefurnitureggio-ca" + - "labriafurubirafurudonostiaafurukawairtelebitballooningfusodegaur" + - "afussaikisosakitagawafutabayamaguchinomigawafutboldlygoingnowher" + - "e-for-morenakatombetsumitakagiizefuttsurugimperiafuturecmsharpha" + - "rmacyshawaiijimarnardalfuturehostingfuturemailingfvgfylkesbiblac" + - "kbaudcdn77-securebungoonord-odalwaysdatabaseballangenoamishirasa" + - "tochigiessensiositelekommunikationionjukudoyamaintenanceofyresda" + - "lhangglidinghangoutsystemscloudyclusterhannanmokuizumodellinghan" + - "nosegawahanyuzenhapmirhareidsbergenharstadharvestcelebrationhasa" + - "marburghasaminami-alpshimojis-a-liberalhashbanghasudahasura-apph" + - "dhasvikatsuyamarylandhatogayaizuwakamatsubushikusakadogawahatoya" + - "mazakitakamiizumisanofidelityhatsukaichikaiseis-a-libertarianhat" + - "tfjelldalhayashimamotobungotakadapliernewmexicoalhazuminobusells" + - "yourhomegoodshimokawahelsinkitakatakaokalmykiahembygdsforbundhem" + - "neshimokitayamahemsedalhepforgeherokussldheroyhgtvallee-aosteroy" + - "higashiagatsumagoianiahigashichichibunkyonanaoshimageandsoundand" + - "visionhigashihiroshimanehigashiizumozakitakyushuaiahigashikagawa" + - "higashikagurasoedahigashikawakitaaikitamihamadahigashikurumeguro" + - "roshimonitayanagithubusercontentrentino-a-adigehigashimatsushima" + - "rcheapigeelvinckaufenhigashimatsuyamakitaakitadaitoigawahigashim" + - "urayamamotorcycleshimonosekikawahigashinarusembokukitamotosumy-g" + - "atewayhigashinehigashiomihachimanaustdalhigashiosakasayamanakako" + - "gawahigashishirakawamatakarazukaluganskypehigashisumiyoshikawami" + - "namiaikitanakagusukumodenakayamaritimodernhigashitsunoshiroomura" + - "higashiurausukitashiobarahigashiyamatokoriyamanashifteditchyouri" + - "philadelphiaareadmyblogspotrentino-aadigehigashiyodogawahigashiy" + - "oshinogaris-a-linux-useranishiaritabashijonawatehiraizumisatohno" + - "shoooshikamaishimodatehirakatashinagawahiranairtrafficplexus-1hi" + - "rarahiratsukagawahirayakagehistorichouseshimosuwalkis-a-llamarri" + - "ottrentino-alto-adigehitachiomiyagildeskaliszhitachiotagooglecod" + - "espotaruis-a-musicianhitraeumtgeradelmenhorstalbanshimotsukehjar" + - "tdalhjelmelandholeckobierzyceholidayhomeiphilatelyhomelinkitools" + - "ztynsettlershimotsumahomelinuxn--1lqs03nhomeofficehomesecurityma" + - "caparecidahomesecuritypchonanbulsan-suedtirolouvreisenishiwakis-" + - "a-celticsfanissandiegohomesenseminehomeunixn--1lqs71dhondahoneyw" + - "ellbeingzonehongoppdalhonjyoitakasagotembaixadahornindalhorseoul" + - "lensvanguardhorteneis-a-nascarfanhospitalhoteleshinichinanhotmai" + - "lhoyangerhoylandetroitskautokeinotteroyhumanitieshinjournalismai" + - "lillesandefjordhurdalhurumajis-a-nurservegame-serverhyllestadhyo" + - "goris-a-painteractivegaskvollhyugawarahyundaiwafuneis-very-sweet" + - "pepperis-with-thebandoisleofmanchesterjewelryjewishartgalleryjfk" + - "fhappounzenjgorajlljmphonefosshioyanaizuslivinghistoryjnjcphoeni" + - "xn--1qqw23ajoyentrentino-stiroljoyokaichibalatinoipirangamvikhak" + - "assiajpnjprshirahamatonbetsurnadaljurkoseis-a-photographerokuapp" + - "hilipsyno-dshinjukumanowtvallee-d-aosteigenkosherbrookegawakoshi" + - "mizumakiyosunndalkoshunantankharkovalleedaostekosugekotohiradoma" + - "insureggioemiliaromagnamsosnowiechoseiroumuenchenissayokkaichiro" + - "practichernivtsiciliakotourakouhokutamakizunokunimimatakatoris-a" + - "-playerkounosupplieshiranukamitsuekouyamashikekouzushimashikis-a" + - "-republicancerresearchaeologicaliforniakozagawakozakis-a-rocksta" + - "rachowicekozowioshiraois-a-socialistdlibestadkpnkppspdnshiraokam" + - "ogawakrasnikahokutokashikis-a-soxfankrasnodarkredstonekristiansa" + - "ndcatshiratakahagitlaborkristiansundkrodsheradkrokstadelvaldaost" + - "arnbergkryminamiuonumassa-carrara-massacarraramassabusinessebykl" + - "ecznagasukekumatorinokumejimasoykumenantokigawakunisakis-a-stude" + - "ntalkunitachiarailwaykunitomigusukumamotoyamashikokuchuokunneppu" + - "eblockbustermezkunstsammlungkunstunddesignkuokgroupictetrentino-" + - "sud-tirolkurehabmerkurgankurobelaudibleasingleshishikuis-a-teach" + - "erkassyncloudkurogiminamiashigarakuroisoftwarendalenugkuromatsun" + - "ais-a-techietis-a-patsfankurotakikawasakis-a-therapistoiakushiro" + - "gawakustanais-an-accountantshinkamigotoyohashimototalkusupplykut" + - "chanelkutnokuzumakis-an-actorkvafjordkvalsundkvamlidlugolekadena" + - "gahamaroygardenebakkeshibechambagriculturennebudejjuedischesapea" + - "kebayernuorochesterkvanangenkvinesdalkvinnheradkviteseidskogkvit" + - "soykwpspectruminamiyamashirokawanabelembetsukubankhersonkzmisugi" + - "tokorozawamitourismolangevagrigentomologyeonggiehtavuoatnadexete" + - "rmitoyoakemiuramiyazurewebsiteshikagamiishibukawamiyotamanomjond" + - "alenmlbfanmombetsurgeonshalloffamelhusdecorativeartshisuifuelver" + - "uminanomonstermontrealestatefarmequipmentrentino-sued-tirolmonza" + - "-brianzapposhitaramamonza-e-della-brianzaptokuyamatsumotofukemon" + - "zabrianzaramonzaebrianzamonzaedellabrianzamoonscalevangermoparac" + - "hutingmordoviamoriyamatsunomoriyoshiminamiawajikis-an-artistgory" + - "mormonmouthagakhanamigawamoroyamatsusakahoginankokubunjis-an-eng" + - "ineeringmortgagemoscowitdkhmelnitskiyamarylhurstjordalshalsenmos" + - "eushistorymosjoenmoskeneshizukuishimofusaitamatsukuris-an-entert" + - "ainermosshizuokanagawamosvikhmelnytskyivanylvenicemoteginowaniih" + - "amatamakawajimanxn--2scrj9choshibuyachtsanfranciscofreakunemuror" + - "angeiseiyoichippubetsubetsugarugbydgoszczecinemagentositecnologi" + - "amoviemovimientokyotangotsukitahatakamoriokakegawamovistargardmo" + - "zilla-iotrentino-suedtirolmtranbymuenstermuginozawaonsenmuikamis" + - "atokaizukamikitayamatsuris-bytomaritimekeepingmukodairamulhouser" + - "vehalflifestylewismillermunakatanemuncienciamuosattemupicturesho" + - "ujis-certifieducatorahimeshimamateramobaramurmanskhplaystationmu" + - "rotorcraftrentinoa-adigemusashimurayamatsushigemusashinoharamuse" + - "etrentinoaadigemuseumverenigingmusicargoboatshowamutsuzawamy-vig" + - "orgemy-wanggouvichoyodobashichikashukujitawaravennaharimalopolsk" + - "anlandyndns-homednsangomyactivedirectorymyasustor-elvdalmycdn77-" + - "sslattumincomcastresindevicenzaporizhzhiamydattolocalhistorymydd" + - "nskingmydissentrentinoalto-adigemydobisshikis-foundationmydroboe" + - "hringerikemydshowtimemergencyahikobeardubaiduckdnshriramsterdamn" + - "serverbaniamyeffectrentinoaltoadigemyfirewallonieruchomosciencea" + - "ndindustrynmyfritzmyftpaccessienarutolgamyhome-servermyjinomykol" + - "aivaomymailermymediapchristiansburgriwataraidyndns-ipartis-a-che" + - "farsundyndns-mailowiczest-le-patronissedalplfinancialpuserconten" + - "toyotapartsanjotoyotomiyazakis-a-conservativegarsheis-a-cpaduals" + - "tackhero-networkinggroupartymyokohamamatsudamypepiemontemypetsig" + - "dalmyphotoshibalena-devicesilklabudhabikinokawabarthaebaruericss" + - "onyoursidell-ogliastradermypiagetmyiphostrodawaramypsxn--30rr7ym" + - "ysecuritycamerakermyshopblocksimple-urlmytis-a-bookkeeperugiamyt" + - "uleapilotsirdalmyvnchristmasakindlefrakkestadyndns-office-on-the" + - "-webhopencraftoyotsukaidomywireitrentinos-tirolpiszpittsburghoff" + - "icialpiwatepixolinopizzapknx-serversailleshirakofuefukihaboromsk" + - "ogplantationplantsjcbnlplatformshangrilanslupskolobrzegersundpla" + - "zaplcube-serversicherungplumbingoplurinacionalpodhalezajskomagan" + - "epodlasiellaktyubinskiptveterinaireadthedocscappgafannefrankfurt" + - "rentinosud-tirolpodzonepohlpoivronpokerpokrovskomakiyosemitepoli" + - "ticarrierpolitiendapolkowicepoltavalle-aostarostwodzislawithgoog" + - "leapisa-hockeynutsiracusakatakkoebenhavnpomorzeszowithyoutubersp" + - "acekitagatamayufuettertdasnetzponpesaro-urbino-pesarourbinopesar" + - "omasvuotnaritakurashikis-goneponypordenonepornporsangerporsangug" + - "eporsgrunnanyokoshibahikariwanumatakinouepoznanpraxis-a-bruinsfa" + - "nprdpreservationpresidioprgmrprimeloyalistorageprincipeprivatize" + - "healthinsuranceprochowiceproductionslzprofesionalprogressivennes" + - "laskerrylogisticsnoasaitoshimayfirstockholmestrandpromomahachijo" + - "invilleksvikomatsushimasfjordenpropertyprotectionprotonetrentino" + - "sudtirolprudentialpruszkowiwatsukiyonotairestaurantrentinosued-t" + - "irolprvcyberlevagangaviikanonjis-into-animeiwamarshallstatebanka" + - "zoprzeworskogptplusgardenpupimientaketomisatomobellevuelosangele" + - "sjabbottrentinostirolpvhagebostadpvtrentinosuedtirolpwchromedici" + - "nakaiwamizawassamukawataricoharuovatoyourapzqldqponiatowadaqslin" + - "gquicksytestingquipelementsokananiimihoboleslawiechryslerqvchung" + - "namdalseidfjordyndns-picsannanisshingucciprianiigataishinomakink" + - "obayashikaoirmitakeharasuzakanazawasuzukaneyamazoesuzukis-into-g" + - "amessinazawasvalbardunloppacificircleverappsseljordyndns-webhost" + - "ingroks-thisayamanobeokakudamatsuesveiosvelvikomonowruzhgorodeos" + - "vizzerasvn-reposomnarviikamishihoronobeauxartsandcraftsolarssons" + - "wedenswidnicartoonartdecologiaswidnikkokaminokawanishiaizubanges" + - "wiebodzin-butterswiftcoverswinoujscienceandhistoryswissmartertha" + - "nyousrcfastpanelblagrarchaeologyeongbuk0emmafann-arboretumbriama" + - "llamaceiobbcg120001wwwebspace12hpalermoliserniabogadodgehirnrt3l" + - "3p0rtarnobrzegyptian4tarumizusawabruzzoologicalvinklein-addramme" + - "nuernbergdyniaetnabudapest-a-la-masion-webredirectmedicaltanisse" + - "ttachikawafflecellclaims3-ap-northeast-1337synology-diskstations" + - "ynology-dsootunesor-varangertunkomorotsukaminoyamaxunjargaturyst" + - "ykanmakiwientuscanytushuissier-justicetuvalle-daostatic-accessor" + - "foldtuxfamilytwmailvestfoldvestnesorocabalsan-sudtirollagdenesna" + - "aseralingenkainanaejrietisalatinabenonichurcharternidyndns-remot" + - "ewdyndns-serverisigniyodogawavestre-slidrepbodynamic-dnsorreisah" + - "ayakawakamiichikawamisatottoris-into-carshinshirovestre-totennis" + - "hiawakuravestvagoyvevelstadvibo-valentiavibovalentiavideovillaso" + - "rtlandvinnicasacamdvrcampinagrandebuilderschlesischesoruminiserv" + - "ervinnytsiavirginiavirtual-userveexchangevirtualservervirtualuse" + - "rveftpioneervirtueeldomein-vigorlicevirtuelvisakegawaviterboknow" + - "sitallvivolkenkundenvixn--32vp30haibarakitahiroshimapartmentshel" + - "laspeziavlaanderenvladikavkazimierz-dolnyvladimirvlogintoyonezaw" + - "avminnesotaketakayamasudavologdanskomvuxn--2m4a15evolvolkswagent" + - "soundcastronomy-routervolyngdalvoorloperauniterois-leetnedalvoss" + - "evangenvotevotingvotoyonownextdirectrentoyonakagyokutoyakokonoew" + - "orldworse-thandawowloclawekongsbergwpcomstagingwpdevcloudwritest" + - "hisblogsytewroclawmflabsouthcarolinarvikommunalforbundwtcmintern" + - "ationalfirearmshisognewtfastvps-serveronakasatsunairguardiannaka" + - "domarinebraskauniversitydalaheadjudaicable-modemocraciawuozustka" + - "nnamilanotogawawzmiuwajimaxn--3pxu8kongsvingerxn--42c2d9axn--45b" + - "r5cylxn--45brj9cistrondheimmobilienxn--45q11citadeliveryggeexn--" + - "4gbriminingxn--4it168dxn--4it797koninjambylxn--4pvxs4allxn--54b7" + - "fta0ccitichernovtsymantechnologyxn--55qw42gxn--55qx5dxn--5js045d" + - "xn--5rtp49civilaviationxn--5rtq34konskowolayangrouphotographysio" + - "xn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6q" + - "q986b3xlxn--7t0a264civilisationxn--80adxhksouthwestfalenxn--80ao" + - "21axn--80aqecdr1axn--80asehdbarrell-of-knowledgeologyonagoyautom" + - "otiveconomiasakuchinotsuchiurakawalesundevelopmentattoobninskara" + - "coldwarmiastagebizenakanotoddenavuotnaples3-eu-west-2xn--80aswgx" + - "n--80augustownproviderxn--8ltr62konsulatrobeepilepsykkylvenetoei" + - "dsvollxn--8pvr4utwentexn--8y0a063axn--90a3academiamicaaarborteac" + - "hes-yogasawaracingxn--90aeroportalabamagasakishimabaraogakibichu" + - "oxn--90aishobarakawagoexn--90azhytomyravendbarsycenterprisesakik" + - "ugawalmartaxihuanflfanfshostrowwlkpmgjovikaragandautoscanadaegua" + - "mbulancehimejibmdgcagliaribeiraokinawashirosatochiokinoshimaizur" + - "uhreviewskrakoweddingjerstadotsuruokakamigaharaurskog-holandingj" + - "erdrumetacentrumeteorappalmaserati234lima-cityeatselinogradultat" + - "arantours3-ap-southeast-1kappchizip6xn--9dbhblg6dietcimdbarsyonl" + - "inewhampshirealtysnes3-us-gov-west-1xn--9dbq2axn--9et52uxn--9krt" + - "00axn--andy-iraxn--aroport-byandexn--3bst00misakis-an-actresshin" + - "shinotsurgeryxn--asky-iraxn--aurskog-hland-jnbashkiriaveroykengl" + - "andiscountyolasitempresashibetsukuiitatebayashiibajddarchitectur" + - "ealtorlandiscourses3-eu-west-3utilitiesquare7xn--avery-yuasakuho" + - "kkaidownloadxn--b-5gaxn--b4w605ferdxn--balsan-sdtirol-nsbsowaxn-" + - "-bck1b9a5dre4civilizationxn--bdddj-mrabdxn--bearalvhki-y4axn--be" + - "rlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikat" + - "suuraxn--bievt-0qa2xn--bjarky-fyaotsurreyxn--bjddar-ptargets-itr" + - "evisohughesopotrentinsud-tirolxn--blt-elabourxn--bmlo-graingerxn" + - "--bod-2natalxn--bozen-sdtirol-2obanazawaxn--brnny-wuacademy-fire" + - "wall-gatewayxn--brnnysund-m8accident-investigation-aptibleadpage" + - "st-mon-blogueurovision-rancherkasydneyxn--brum-voagatritonxn--bt" + - "sfjord-9zaxn--bulsan-sdtirol-nsbasicservercelliguriavocatanzarow" + - "edeployombolzano-altoadigemrevistanbulsan-sudtirolavagiskeu-1xn-" + - "-c1avgxn--c2br7gxn--c3s14misasaguris-an-anarchistoricalsocietyxn" + - "--cck2b3basilicataniavoues3-external-1xn--cesena-forl-mcbremange" + - "rxn--cesenaforl-i8axn--cg4bkis-lostrolekamakurazakiwakunigamihar" + - "unusualpersonxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a2o" + - "xn--correios-e-telecomunicaes-ghc29axn--czr694basketballyngenvir" + - "onmentalconservationrenderxn--czrs0troandinosaurepaircraftingvol" + - "lombardiamondsor-odalxn--czru2dxn--czrw28batodayonagunicommbanka" + - "rasjohkamikoaniikappuboliviajessheimetlifeinsuranceu-4xn--d1acj3" + - "batsfjordishakotanhktcp4xn--d1alfaromeoxn--d1atrogstadxn--d5qv7z" + - "876civilwarmanagementoystre-slidrettozawaxn--davvenjrga-y4axn--d" + - "jrs72d6uyxn--djty4konyvelolxn--dnna-grajewolterskluwerxn--drbak-" + - "wuaxn--dyry-iraxn--e1a4clanbibaidarmeniaxn--eckvdtc9dxn--efvn9sp" + - "eedpartnersolognexn--efvy88hair-surveillancexn--ehqz56nxn--elqq1" + - "6hakatanortonxn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429ko" + - "oris-a-personaltrainerxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspje" + - "lkavikommunexn--fiq64bauhausposts-and-telecommunicationswatch-an" + - "d-clockerxn--fiqs8spreadbettingxn--fiqz9spydebergxn--fjord-lraxn" + - "--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-cesena-fcbsrl" + - "xn--forlcesena-c8axn--fpcrj9c3dxn--frde-grandrapidsrtrentinsudti" + - "rolxn--frna-woaraisaijosoyrovigotpantheonsitextileirvikopervikha" + - "rkivalleeaosteinkjerusalembroideryxn--frya-hraxn--fzc2c9e2cldmai" + - "lubindalublindesnesannohelpagesanokarumaifashionxn--fzys8d69uvgm" + - "ailxn--g2xx48clickasaokamiminersantabarbaraxn--gckr3f0fauskedsmo" + - "korsetagayasells-for-ufcfanxn--gecrj9clinichirurgiens-dentistes-" + - "en-francexn--ggaviika-8ya47hakodatexn--gildeskl-g0axn--givuotna-" + - "8yasakaiminatoyookaniepcexn--gjvik-wuaxn--gk3at1exn--gls-elacaix" + - "axn--gmq050is-not-certifiedugit-pagespeedmobilizeroticahcesuoloa" + - "nshintomikasaharaxn--gmqw5axn--h-2failxn--h1aeghakonexn--h2breg3" + - "evenesrvaporcloudxn--h2brj9c8cliniquenoharaxn--h3cuzk1digitalxn-" + - "-hbmer-xqaxn--hcesuolo-7ya35beneventogakushimotoganewhollandisre" + - "chtrainingladefinimakanegasakiraxaustevoll-o-g-i-naval-d-aosta-v" + - "alleyokosukanumazuryokotebinagisobetsumidatlantic66xn--hery-irax" + - "n--hgebostad-g3axn--hkkinen-5waxn--hmmrfeasta-s4accident-prevent" + - "ion-riopretobamaceratabuseating-organicbcn-north-1xn--hnefoss-q1" + - "axn--hobl-iraxn--holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-" + - "q1axn--hylandet-54axn--i1b6b1a6a2exn--imr513nxn--indery-fyasugiv" + - "ingxn--io0a7is-savedunetbankazunow-dnshinyoshitomiokamitondabaya" + - "shiogamagoriziaxn--j1aefbsbxn--12cfi8ixb8luxuryxn--j1amhakubahcc" + - "avuotnagarahkkeravjuegoshikikuchikuseikarugalsacexn--j6w193gxn--" + - "jlq61u9w7bentleyoriikarasjokarasuyamarumorimachidaxn--jlster-bya" + - "suokanoyaltakashimarugame-hostrowieclintonoshoesantacruzsantafed" + - "jejuifminamifuranoxn--jrpeland-54axn--jvr189misawaxn--k7yn95exn-" + - "-karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn-" + - "-klt787dxn--kltp7dxn--kltx9axn--klty5xn--3ds443gxn--koluokta-7ya" + - "57hakuis-a-landscaperxn--kprw13dxn--kpry57dxn--kpu716fbx-osassar" + - "is-a-doctorayxn--kput3is-slickddielddanuorrikuzentakatajimidoris" + - "sagamiharaxn--krager-gyatomitamamuraxn--kranghke-b0axn--krdshera" + - "d-m8axn--krehamn-dxaxn--krjohka-hwab49jdfastlylbarcelonagareyama" + - "keupowiat-band-campaniaustinnavigationavoizumizakibigawajudygarl" + - "anddnslivelanddnss3-ca-central-1xn--ksnes-uuaxn--kvfjord-nxaxn--" + - "kvitsy-fyatsukanraxn--kvnangen-k0axn--l-1fairwindstorfjordxn--l1" + - "accentureklamborghinikolaeventstorjdevcloudfunctionshiojirishiri" + - "fujiedaxn--laheadju-7yatsushiroxn--langevg-jxaxn--lcvr32dxn--ldi" + - "ngen-q1axn--leagaviika-52beppublishproxyzgorzeleccoffeedbackplan" + - "eapplicationcloudaccesscambridgestonewyorkshirecifedexhibitionhl" + - "fanhs3-us-west-1xn--lesund-huaxn--lgbbat1ad8jelenia-goraxn--lgrd" + - "-poacctromsakakinokiaxn--lhppi-xqaxn--linds-pramericanartromsoja" + - "misonxn--lns-qlanxesstpetersburgxn--loabt-0qaxn--lrdal-sraxn--lr" + - "enskog-54axn--lt-liaclothingdustdataitogliattiresantamariakexn--" + - "lten-granexn--lury-iraxn--m3ch0j3axn--mely-iraxn--merker-kuaxn--" + - "mgb2ddestreamuneuesolundbeckomforbarreauctionredumbrella-speziau" + - "strheimatunduhrennesoyokozebinordreisa-geek12xn--mgb9awbfbxosaud" + - "axn--mgba3a3ejtrusteexn--mgba3a4f16axn--mgba3a4franamizuholdings" + - "tudioxn--mgba7c0bbn0axn--mgbaakc7dvfedorapeoplegnicanonoichinomi" + - "yakexn--mgbaam7a8hakusanagochijiwadellogliastradingxn--mgbab2bdx" + - "n--mgbai9a5eva00beskidyn-ip24xn--mgbai9azgqp6jeonnamerikawauexn-" + - "-mgbayh7gpaleoxn--mgbb9fbpobihirosakikamijimatsuzakis-uberleetre" + - "ntino-altoadigexn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mg" + - "berp4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4ecexposedxn--" + - "mgbpl2fhskydivingxn--mgbqly7c0a67fbcn-northwest-1xn--mgbqly7cvaf" + - "ranziskanerimaringatlantakaharuxn--mgbt3dhdxn--mgbtf8flatangerxn" + - "--mgbtx2bestbuyshouses3-us-west-2xn--mgbx4cd0abbvieeexn--mix082f" + - "edoraprojectrapaniizaxn--mix891feiraquarelleaseeklogesauheradynn" + - "sasebofageorgeorgiaxn--mjndalen-64axn--mk0axin-dslgbtrvareserveh" + - "ttpinkmpspbargainstantcloudfrontdoorhcloudiscoveryomitanoceanogr" + - "aphiqueu-3xn--mk1bu44cngrondarxn--mkru45is-very-badajozxn--mlatv" + - "uopmi-s4axn--mli-tlapyxn--mlselv-iuaxn--moreke-juaxn--mori-qsaku" + - "ragawaxn--mosjen-eyawaraxn--mot-tlaquilancomeldalxn--mre-og-roms" + - "dal-qqbetainaboxfusejnyoshiokanzakiyokawaraxn--msy-ula0haldenxn-" + - "-mtta-vrjjat-k7aflakstadaokagakicks-assnasaarlandxn--muost-0qaxn" + - "--mxtq1misconfusedxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--3e0b707exn" + - "--nit225koryokamikawanehonbetsurutaharaxn--nmesjevuemie-tcbalsan" + - "-suedtirolkuszczytnombresciaxn--nnx388axn--nodessakurais-very-ev" + - "illagexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--n" + - "ttery-byaeservehumourxn--nvuotna-hwaxn--nyqy26axn--o1achattanoog" + - "anordlandxn--o3cw4halsaintlouis-a-anarchistoireggio-emilia-romag" + - "nakatsugawaxn--o3cyx2axn--od0algxn--od0aq3bhzcaseihicampobassoci" + - "atest-iservecounterstrikeverbankaratevje-og-hornnes3-website-ap-" + - "northeast-1xn--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyawat" + - "ahamaxn--osyro-wuaxn--otu796dxn--p1acfermobilyxn--p1ais-very-goo" + - "dyearxn--pbt977cnpyatigorskodjeffersonxn--pgbs0dhlxn--porsgu-sta" + - "26ferraraxn--pssu33lxn--pssy2uxn--q9jyb4cnsantoandreamhostersanu" + - "kis-a-cubicle-slavellinodearthachiojiyaitakanabeautysvardoesntex" + - "isteingeekashibatakasugais-a-democratozsdeltaiwanairforcebetsuik" + - "idsmynasushiobarackmazerbaijan-mayendoftheinternetflixilovecolle" + - "gefantasyleaguernseyxn--qcka1pmckinseyxn--qqqt11mishimatsumaebas" + - "hikshacknetrentino-sudtirolxn--qxamusementdllxn--rady-iraxn--rda" + - "l-poaxn--rde-ularvikosaigawaxn--rdy-0nabaris-very-nicexn--rennes" + - "y-v1axn--rhkkervju-01aferrarivnexn--rholt-mragowoodsidemoneyxn--" + - "rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5nativeamericananti" + - "questudynamisches-dnsolutionsokndalxn--risr-iraxn--rland-uuaxn--" + - "rlingen-mxaxn--rmskog-byaxn--rny31hammarfeastafricapetownnews-st" + - "agingxn--rovu88bieigersundivtasvuodnakamuratajirittogojomedizinh" + - "istorisches3-website-ap-southeast-1xn--rros-granvindafjordxn--rs" + - "kog-uuaxn--rst-0naturalhistorymuseumcenterxn--rsta-francaisehara" + - "xn--rvc1e0am3exn--ryken-vuaxn--ryrvik-byaxn--s-1faithruherecipes" + - "caravantaarpippulawyxn--s9brj9cntrani-andria-barletta-trani-andr" + - "iaxn--sandnessjen-ogbielawalterxn--sandy-yuaxn--sdtirol-n2axn--s" + - "eral-lraxn--ses554gxn--sgne-gratangenxn--skierv-utazastuff-4-sal" + - "exn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat" + - "-5naturalsciencesnaturellestufftoread-booksnesomaxn--slt-elabcie" + - "szynxn--smla-hraxn--smna-gratis-a-bulls-fanxn--snase-nraxn--sndr" + - "e-land-0cbielladbrokes3-website-ap-southeast-2xn--snes-poaxn--sn" + - "sa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-vara" + - "nger-ggbieszczadygeyachiyodaejeonbuklugsmilebtimnetzjampagefront" + - "appanamatta-varjjatjeldsundivttasvuotnakaniikawatanaguraxn--srfo" + - "ld-byaxn--srreisa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1ax" + - "n--stjrdalshalsen-sqbievathletajimabaridagawakuyabukijobserverra" + - "nkoshigayachimataikikonaikawachinaganoharamcoachampionshiphoptob" + - "ishimagazineat-urlillyukiiyamanouchikuhokuryugasakitaurayasudaxn" + - "--stre-toten-zcbifukagawarszawashingtondclkaratsuginamikatagamil" + - "itaryukuhashimoichinosekigaharaxn--t60b56axn--tckweatherchannelx" + - "n--tiq49xqyjetztrentino-s-tirolxn--tjme-hraxn--tn0agrinet-freaks" + - "tuttgartrentinsued-tirolxn--tnsberg-q1axn--tor131oxn--trany-yuax" + - "n--trentin-sd-tirol-rzbigv-infoodnetworkangerxn--trentin-sdtirol" + - "-7vbihorologyurihonjournalistjohnikonanporohtawaramotoineppuglia" + - "xn--trentino-sd-tirol-c3bikedagestangeometre-experts-comptables3" + - "-website-eu-west-1xn--trentino-sdtirol-szbilbaogashimadachicago-" + - "vipsinaappanasonicasertairanzaninohekinannestadiyusuharaxn--tren" + - "tinosd-tirol-rzbillustrationthewifiatmallorcadaques3-website-sa-" + - "east-1xn--trentinosdtirol-7vbiomutashinain-the-bandain-vpncasino" + - "rdkapparaglidinglassassinationalheritagexn--trentinsd-tirol-6vbi" + - "rdartcenterprisecloudappspotagerxn--trentinsdtirol-nsbirkenesodd" + - "tangenovaraholtaleninomiyakonojorpelandnparisor-fronirasakincheo" + - "nishiazaindianapolis-a-bloggerxn--trgstad-r1axn--trna-woaxn--tro" + - "ms-zuaxn--tysvr-vraxn--uc0atvarggatrentinsuedtirolxn--uc0ay4axn-" + - "-uist22hamurakamigoris-a-lawyerxn--uisz3gxn--unjrga-rtargivestby" + - "temarkosakaerodromegallupinbarrel-of-knowledgemologicallazioddau" + - "thordalandeportenrightathomeftpalmspringsakereportatsunobiraukra" + - "anghkeymachineustarhubss3-eu-central-1xn--unup4yxn--uuwu58axn--v" + - "ads-jraxn--valle-aoste-ebbtrysiljanxn--valle-d-aoste-ehbodollsus" + - "akis-into-cartoonshintokushimaxn--valleaoste-e7axn--valledaoste-" + - "ebbvacationsusonoxn--vard-jraxn--vegrshei-c0axn--vermgensberater" + - "-ctbirthplacexn--vermgensberatung-pwbjarkoyusuisserveircateringe" + - "buildingleezexn--vestvgy-ixa6oxn--vg-yiabkhaziaxn--vgan-qoaxn--v" + - "gsy-qoa0jevnakershuscultureggiocalabriaxn--vgu402coguchikuzenxn-" + - "-vhquvaroyxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla" + - "5gxn--vuq861bjerkreimbamblebesbyglandroverhallaakesvuemielecceu-" + - "2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wgbh1collectionxn" + - "--wgbl6axn--xhq521bjugnieznord-frontierxn--xkc2al3hye2axn--xkc2d" + - "l3a5ee0handsonxn--y9a3aquariumissilelxn--yer-znaturbruksgymnxn--" + - "yfro4i67oxn--ygarden-p1axn--ygbi2ammxn--3hcrj9circustomerxn--yst" + - "re-slidre-ujblackfridayuu2-localhostoregontrailroadrangedalimano" + - "warudaxn--zbx025dxn--zf0ao64axn--zf0avxn--3oq18vl8pn36axn--zfr16" + - "4bloombergbauernishigovtjmaxxxboxenapponazure-mobilexnbayxz" +const text = "9guacuiababia-goracleaningroks-theatree12hpalermomahachijoinvill" + + "eksvik12ix4432-balsfjordd-dnsiskinkyotobetsulikes-piedmonticello" + + "dingen4tatarantours3-ap-south-16-b-dataiji234lima-cityeatselinog" + + "radult3l3p0rtashkentatamotors3-ap-northeast-2038blackfridayuu2-l" + + "ocalhostoregontrailroadnparachutingleezebloombergbauernirasakind" + + "igenaklodzkochikushinonsenergyuzawabloxcms3-website-us-west-1blu" + + "edagestangemologicallimoliseminebmoattachments3-website-us-west-" + + "2bms5ybmweddinglitchattanooganordlandrangedalinkyard-cloudyclust" + + "erbnrwedeploybomloabathsbchernihivgubsakyotanabellunord-aurdalph" + + "a-myqnapcloudaccesscambridgestoneuesalangenishiazaindustriabondr" + + "ay-dnsupdaternopilawatchesalondonetskaruizawabonnishigohtawaramo" + + "toineppueblockbustermezparaglidingliwicebookinghostfoldnavybooml" + + "air-traffic-controlleyboschaefflerdalivornomutashinaindustrieste" + + "amfamberkeleybostikarumaifarmsteadrayddnsfreebox-osascoli-piceno" + + "rdre-landraydnsaltdalombardynaliaskimitsubatamibudejjuegoshikiho" + + "kumakogenebakkeshibechambagriculturennebugattiffanynysadoes-itve" + + "destrandrivefsnillfjordrobaknoluoktachikawakembuchikumagayagawak" + + "kanaibetsubamericanfamilydsclouderackmazerbaijan-mayen-rootaribe" + + "iraogashimadachicagoboatsaludrudupontariobranconakamuratajirivne" + + "bostonakijinsekikogentappsselfiparisor-fronishiharabotanicalgard" + + "enishiizunazukinfinitintuitjomeloyalistoragebotanicgardenishikat" + + "aketomisatomobellevuelosangelesjabbottjxfinitybotanybouncemerckm" + + "sdnipropetrovskjervoyageorgeorgiabounty-fullensakerrypropertiesa" + + "lvadordalibabalestrandabergamo-siemensncfdurbanamexnethnologybou" + + "tiquebechernivtsiciliabozen-sudtirolomzaporizhzhegurinuyamashina" + + "tsukigatakasakitaurayasudabozen-suedtirolondrinamsskoganeinvestm" + + "entsalzburglobalashovhachinohedmarkasaokamiminersamegawabplacedo" + + "gawarabikomaezakirunorddalorenskogloboavistanbulsan-sudtiroloten" + + "kawabrandywinevalleybrasiliabrindisibenikimobetsuitainaioiraseba" + + "stopologyeongnamegawafflecellclaimsamnangerbristoloseyouriparlia" + + "mentkmaxxjavald-aostarnberglogowegroweibolognagareyamakeupowiath" + + "letajimabaridagawakuyabukikonaikawachinaganoharamcoachampionship" + + "hoptobishimadridvagsoyerbritishcolumbialowiezaganishikatsuragit-" + + "reposampalacebroadcastleclerchernovtsymantechnologybroadwaybroke" + + "-itksatxn--0trq7p7nnishikawazukamisunagawabrokerbronnoysundurham" + + "burgloppenzaolbia-tempio-olbiatempioolbialystokkepnogatagajoboji" + + "nzais-a-candidatebrothermesaverdealstahaugesunderseaportsinfolld" + + "alottebrowsersafetymarketsamsclubartoweirbrumunddalottokonamegat" + + "akayamashikokuchuobrunelasticbeanstalkashibatakatoris-a-catererb" + + "russelsamsunglugmbhartipscbgminakamichiharabruxellesandnessjoeni" + + "shimerabryansklepparmatta-varjjatmparochernigovernmentoyosatoyok" + + "awabrynewjerseybuskerudinewmexicoalouvreitoyotaparsandoybuzentsu" + + "jiiebuzzwellbeingzonebwfarsundweberbzhitomirumalatvuopmicrolight" + + "ingmodellingmxn--11b4c3dynathomebuiltwithdarkashiharabzzcolumbus" + + "heycommunecommunity-prochowicecomoarekecomparemarkerryhotelsanta" + + "mariakecompute-1computerhistoryofscience-fictioncomsecuritytacti" + + "csantoandreamhostersanukis-a-cubicle-slavellinodearthachiojiyaho" + + "oguycondoshichinohealth-carereforminamidaitomanchesterconference" + + "constructionconsuladonnagatorodoyconsultanthropologyconsultingro" + + "ngausdalukowhalingrossetouchihayaakasakawaharacontactraniandriab" + + "arlettatraniandriacontagematsubaracontemporaryarteducationalchik" + + "ugodontexistmein-iservebeercontractorskenconventureshinodebalanc" + + "ertificationcookingchannelsdvrdnsfor-better-thanawassamukawatari" + + "ghtathomeftpartycooluroycooperativano-frankivskolegallocus-3cope" + + "nhagencyclopedichitosetogakushimotoganewyorkshirecifedexhibition" + + "ishinoomotegocorsicafederationcorvettemp-dnsaobernardocosenzakop" + + "anecosidnshome-webserverdalutskasuyameinforumzcostumedicinaharim" + + "alopolskanlandyndns-office-on-the-webhareidsbergentingroundhandl" + + "ingroznycouchpotatofriesaogoncarriercounciluxurycouponsaotomelda" + + "luzerncq-acranbrookuwanalyticsapporocrdyndns-picsardegnaroycredi" + + "tcardyndns-remotewdyndns-serverisigncreditunioncremonashgabadadd" + + "jaguarqcxn--12c1fe0bradescorporationrendercrewhoswhokksundyndns-" + + "webhopencraftranoycricketrzyncrimeast-kazakhstanangercrotonecrow" + + "nipasadenarashinocrsvpassagensardiniacruisesarlvivanovoldacrypto" + + "nomichigangwoncuisinellajollamericanexpressexyculturalcentertain" + + "mentransportecuneocupcakecuritibaghdadyndns-wikirkenesarpsborgrp" + + "assenger-associationcymrussiacyonabaruminamiechizencyouthruherec" + + "ipescaravantaarpatriaferrerotikagoshimalvikaszubyfetsundyndns1fg" + + "uidegreefhvalerfidoomdnstracefieldynnsarufutsunomiyawakasaikaita" + + "koelnfigueresinstaginguitarsauheradynservebbsasayamayfirstockhol" + + "mestrandyndns-workshopitsitexaskoyabearalvahkijobservableusercon" + + "tentransurlfilateliafilegear-audnedalnfilegear-deatnulminamiiser" + + "niafilegear-gbizfilegear-iefilegear-jpmorganfilegear-sgujohanama" + + "kinoharafilminamiizukamiokameokameyamatotakadafinalfinancefinear" + + "tsavannahgafinlandynufcfanfinnoyfirebaseapplinzis-a-doctorayfire" + + "nzefirestonefirmdalegoldpoint2thisamitsukefishingolffansaves-the" + + "-whalessandria-trani-barletta-andriatranibarlettaandriafitjarvod" + + "kafjordynv6fitnessettlementravelersinsurancefjalerflesbergulenfl" + + "ickragerogersavonarusawaflightsaxoflirfloginlinefloraflorenceflo" + + "ridattorelayfloripaderbornfloristanohatakaharulvikatowicefloroku" + + "nohealthcareerschoenbrunnflowerschokokekschokoladenfltrdynvpnplu" + + "s-4flynnhosting-clusterflynnhubarcelonagawalesundgcagliaricoharu" + + "ovataxihuanflfanfshostrowwlkpmgjerdrumemsettsupportcp4fndyroyrvi" + + "kingruefor-ourfor-somedizinhistorischescholarshipschoolschulefor" + + "-theaterforexrothachirogatakamoriokakudamatsueforgotdnschwarzgwa" + + "ngjuniperforli-cesena-forlicesenaforlikescandyn53forsaleikangerf" + + "orsandasuologoipaviancargodaddyn-o-saurlandeschweizfortalfortmis" + + "soulancasterfortworthadanorthwesternmutualfosnesciencecenterscie" + + "ncehistoryfotaruis-a-financialadvisor-aurdalfoxfordebianfozorafr" + + "edrikstadtvscientistordalfreeddnsgeekgalaxyfreedesktopocznore-og" + + "-uvdalfreemasonryfreesitextileirfjordfreetlscjohnsonfreiburgunma" + + "nxn--12co0c3b4evalleaostavangerfreightrentin-sud-tirolfreseniusc" + + "ountryestateofdelawareggio-calabriafribourguovdageaidnunusualper" + + "sonfriuli-v-giuliafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-" + + "giuliafriuli-veneziagiuliafriuli-vgiuliafriuliv-giuliafriulive-g" + + "iuliafriulivegiuliafriulivenezia-giuliafriuliveneziagiuliafriuli" + + "vgiuliafrlfroganscotlandfrognfrolandfrom-akrehamnfrom-alfrom-arf" + + "rom-azimutheworkpccwiiheyakagefrom-capebretonamicrosoftbankatsus" + + "hikabeeldengeluidfrom-codyn-vpndnscrapper-sitefrom-ctrentin-sudt" + + "irolfrom-dchocolatelevisionishinoshimatsushigefrom-dedyn-berlinc" + + "olnfrom-flanderscrappingushikamifuranorth-kazakhstanfrom-gaulard" + + "alfrom-hichisochildrensgardenfrom-iafrom-idfrom-ilfrom-in-brbarc" + + "laycards3-sa-east-1from-kscrysechofunatoriginstitutemasekashiwaz" + + "akiyosatokamachintaifun-dnsdojolsterfrom-kyowariasahikawawildlif" + + "edorainfracloudfrontdoorfrom-lanciafrom-mamurogawafrom-mdfrom-me" + + "eresistancefrom-mifunefrom-mnfrom-modalenfrom-mserveirchonanbuls" + + "an-suedtirolowiczest-le-patronishiokoppegardyndns-at-homedepoten" + + "zamamidsundyndns-at-workisboringrimstadyndns-blogdnsangofrom-mtn" + + "from-nctulangevagrigentomologyeonggiehtavuoatnadexeterfrom-ndfro" + + "m-nefrom-nh-serveblogsiteleafamilycompanyminamimakis-a-geekatsuy" + + "amarugame-hostrowiechoseiroumuenchenishitosashimizunaminamibosog" + + "ndalpusercontentoyotsukaidofrom-njaworznoticiasnesoddenmarkhange" + + "lskjakdnepropetrovskiervaapsteiermarkaufenfrom-nminamiminowafrom" + + "-nvalled-aostavernfrom-nyfrom-ohkurafrom-oketogurafrom-orfrom-pa" + + "dovaksdalfrom-pratohmandalfrom-ris-a-greenfrom-schmidtre-gauldal" + + "from-sdfrom-tnfrom-txn--1ck2e1barclays3-us-east-2from-utazuerich" + + "ardlillehammerfeste-ipfizerfrom-val-daostavalleyfrom-vtrentin-su" + + "ed-tirolfrom-wafrom-wielunnerfrom-wvalledaostaobaomoriguchiharah" + + "kkeravjuedischesapeakebayernunzenfrom-wyfrosinonefrostalowa-wola" + + "wafroyahikobeardubaiduckdnserveminecraftrentin-suedtirolfstcgrou" + + "pgfoggiafujiiderafujikawaguchikonefujiminokamoenairguardiannakad" + + "omarineat-urlfujinomiyadavvenjargap-northeast-3fujiokayamangonoh" + + "ejis-a-guruslivinghistoryfujisatoshonairlinebraskauniversitychya" + + "ttorneyagawakayamagazinedre-eikerfujisawafujishiroishidakabirato" + + "ridefenseljordfujitsurugashimangyshlakasamatsudovre-eikerfujixer" + + "oxn--1ctwolominamatargivestbytemarkautokeinotteroyfujiyoshidavve" + + "siidatsunanjoburgwiddleitungsenfukayabeatservemp3fukuchiyamadaza" + + "ifudaigojomedio-campidano-mediocampidanomediofukudominichoshibuy" + + "achiyodatingripefukuis-a-hard-workerservep2pharmacienservepicser" + + "vequakefukumitsubishigakisarazurecontainerdpolicefukuokazakishiw" + + "adafukuroishikarikaturindalfukusakisofukushimaniwakuratefukuyama" + + "gatakahatakaishimogosenfunabashiriuchinadafunagatakamatsukawafun" + + "ahashikamiamakusatsumasendaisennangooglecodespotrentino-a-adigef" + + "undaciofuoiskujukuriyamannorfolkebibleirvikazoologyfuosskoczowil" + + "liamhillfurnitureggio-emilia-romagnakasatsunairportland-4-salern" + + "oboribetsuckservesarcasmatartanddesignfurubirafurudonostiaafuruk" + + "awairtelebitballooningxn--1lqs03nfusodegaurafussagamiharafutabay" + + "amaguchinomigawafutboldlygoingnowhere-for-morenakatombetsumitaka" + + "giizefuttsurugimperiafuturecmservicesevastopolefuturehostingfutu" + + "remailingfvgfylkesbiblackbaudcdn77-securebungoonord-odalwaysdata" + + "baseballangenkainanaejrietisalatinabenonicbcn-north-1fyresdalhan" + + "goutsystemscloudhannanmokuizumodenakayamapartmentsewinbarefootba" + + "llfinanzgoraustrheimatunduhrennesoyokozebinagisoccertmgretakaham" + + "alselvendrellaziobiramusementdllpages3-ap-southeast-2hannosegawa" + + "hanyuzenhapmirharstadharvestcelebrationhasamarburghasaminami-alp" + + "sharis-a-lawyerhashbanghasudahasura-appharmacysharphdfcbankddiel" + + "ddanuorrittogliattireshawaiijimaritimoduminamioguni5hasvikfhappo" + + "usrcfastly-terrariuminamifuranohatogayaitakanezawahatoyamazakita" + + "kamiizumisanofidelityhatsukaichikaiseis-a-liberalhattfjelldalhay" + + "ashimamotobungotakadancehazuminobusells-for-ustkannamilanotogawa" + + "helsinkitakatakaokalmykiahembygdsforbundhemneshellaspeziahemseda" + + "lhepforgeherokussldheroyhgtvallee-aosteroyhigashiagatsumagoiania" + + "higashichichibunkyonanaoshimageandsoundandvisionthewifiatmallorc" + + "adaqueshimojis-a-libertarianhigashihiroshimanehigashiizumozakita" + + "kyushuaiahigashikagawahigashikagurasoedahigashikawakitaaikitamih" + + "amadahigashikurumeetnedalhigashimatsushimarcheapigeelvinckhakass" + + "iahigashimatsuyamakitaakitadaitoigawahigashimurayamamotorcyclesh" + + "imokawahigashinarusells-itrentino-alto-adigehigashinehigashiomih" + + "achimanagementrentino-altoadigehigashiosakasayamanakakogawahigas" + + "hishirakawamatakarazukaluganskygearapphiladelphiaareadmyblogspot" + + "rentino-s-tirolhigashisumiyoshikawaminamiaikitamotosumy-gatewayh" + + "igashitsunoshiroomurahigashiurausukitanakagusukumodernhigashiyam" + + "atokoriyamanashifteditchyouriphilatelyhigashiyodogawahigashiyosh" + + "inogaris-a-linux-useranishiaritabashijonawatehiraizumisatohnosho" + + "ooshikamaishimodatehirakatashinagawahiranairtrafficplexus-1hirar" + + "ahiratsukagawahirayaizuwakamatsubushikusakadogawahistorichousesh" + + "imokitayamahitachiomiyagildeskaliszhitachiotagoppdalhitraeumtger" + + "adelmenhorstalbanshimonitayanagithubusercontentrentino-stirolhja" + + "rtdalhjelmelandholeckobierzyceholidayhomeiphilipsyno-dshimonosek" + + "ikawahomelinkitoolsztynsettlershimosuwalkis-a-llamarriottrentino" + + "-sud-tirolhomelinuxn--1lqs71dhomeofficehomesecuritymacaparecidah" + + "omesecuritypchoyodobashichikashukujitawaravennagasukehomesenseer" + + "inghomeunixn--1qqw23ahondahongotembaixadahonjyoitakasagotpantheo" + + "nsitehornindalhorsellsyourhomegoodshimotsukehorteneis-a-musician" + + "hospitalhoteleshimotsumahotmailhoyangerhoylandetroitskypehumanit" + + "ieshinichinanhurdalhurumajis-a-nascarfanhyllestadhyogoris-a-nurs" + + "embokukitchenhyugawarahyundaiwafuneis-very-sweetpepperis-with-th" + + "ebandoisleofmanaustdaljewelryjewishartgalleryjfkharkovalleedaost" + + "ejgorajlljmphotographysiojnjcphonefosshintomikasaharajoyentrenti" + + "noa-adigejoyokaichibalatinogiftshiojirishirifujiedajpnjprshioyan" + + "aizujurkoseis-a-personaltrainerkosherbrookegawakoshimizumakizuno" + + "kunimimatakatsukiyosemitekoshunantankhmelnitskiyamarumorimachida" + + "kosugekotohiradomainsurehabmerkotourakouhokutamakis-a-photograph" + + "erokuapphoenixn--2m4a15ekounosupplieshirakofuefukihaboromskogkou" + + "yamarylhurstjordalshalsenkouzushimasfjordenkozagawakozakis-a-pla" + + "yerkozowindmillkpnkppspdnshiranukamitsuekrasnikahokutokashikis-a" + + "-republicancerresearchaeologicaliforniakrasnodarkredstonekristia" + + "nsandcatshiraois-a-rockstarachowicekristiansundkrodsheradkroksta" + + "delvaldaostarostwodzislawindowskrakowinnershiraokamogawakryminam" + + "isanrikubetsurfastpanelblagrarchaeologyeongbuk0emmafann-arboretu" + + "mbriamallamaceiobbcg120001wwwebredirectmembers3-ap-northeast-133" + + "7kumatorinokumejimashikis-a-socialistdlibestadkumenantokigawakun" + + "isakis-a-soxfankunitachiarailwaykunitomigusukumamotoyamashikekun" + + "neppubtlshiratakahagitlaborkunstsammlungkunstunddesignkuokgroupi" + + "lotshishikuis-a-studentalkureisenkurgankurobelaudibleasingleshis" + + "ognekurogiminamiashigarakuroisoftwarendalenugkuromatsunais-a-tea" + + "cherkassyncloudkurotakikawasakis-a-techietis-a-painteractivegask" + + "vollkushirogawakustanais-a-therapistoiakusupplykutchanelkutnokuz" + + "umakis-an-accountantshinjournalismailillesandefjordkvafjordkvals" + + "undkvamlidlugolekadenagahamaroygardendoftheinternetlifyis-an-act" + + "orkvanangenkvinesdalkvinnheradkviteseidskogkvitsoykwpspectrumina" + + "mitanekzmissileluxembourgmisugitokorozawamitourismolanxesshisuif" + + "uettertdasnetzmitoyoakemiuramiyazurewebsiteshikagamiishibukawami" + + "yotamanomjondalenmlbfanmonstermontrealestatefarmequipmentrentino" + + "aadigemonza-brianzapposhitaramamonza-e-della-brianzaptokuyamatsu" + + "maebashikshacknetrentinoalto-adigemonzabrianzaramonzaebrianzamon" + + "zaedellabrianzamoonscalevangermordoviamoriyamatsumotofukemoriyos" + + "himinamiawajikis-an-engineeringmormonmouthaebaruericssongdalenvi" + + "knakatsugawamoroyamatsunomortgagemoscowioshizukuishimofusaitamat" + + "sukuris-an-entertainermoseushistorymosjoenmoskeneshizuokanagawam" + + "osshoppingmosvikhplaystationmoteginowaniihamatamakawajimansionsh" + + "oujis-bytomaritimekeepingmoviemovimientokyotangovtrentinoaltoadi" + + "gemozilla-iotrentinos-tirolmtranbymuenstermuginozawaonsenmuikami" + + "satokaizukamikitayamatsuris-certifieducatorahimeshimamateramobar" + + "amukodairamulhouseoullensvanguardmunakatanemuncienciamuosattemup" + + "imientakinouemurmansklabudhabikinokawabarthadselectrentino-aadig" + + "emurotorcraftrentinostirolmusashimurayamatsusakahoginankokubunji" + + "s-foundationmusashinoharamuseetrentinosud-tirolmuseumverenigingm" + + "usicarbonia-iglesias-carboniaiglesiascarboniamutsuzawamy-vigorge" + + "my-wanggouvichromedicaltanissettairamyactivedirectorymyasustor-e" + + "lvdalmycdn77-sslattuminamiuonumassa-carrara-massacarraramassabus" + + "inessebyklecznagasakinderoymydattolocalhistorymyddnskingmydissen" + + "trentinosudtirolmydobisshikis-gonemydroboehringerikemydshowamyef" + + "fectrentinosued-tirolmyfirewallonieruchomoscienceandindustrynmyf" + + "oruminamiyamashirokawanabelembetsukubankhmelnytskyivanylvenicemy" + + "fritzmyftpaccesshowtimelhusdecorativeartshriramsterdamnserverban" + + "iamyhome-servermyjinomykolaivaomymailermymediapchungnamdalseidfj" + + "ordyndns-ipartis-a-chefashionishiwakis-a-conservativegarsheis-a-" + + "cpadualstackhero-networkinggroupartsannanissandiegomyokohamamats" + + "udamypepinkmpspbargainstantcloudfunctionswedenvironmentalconserv" + + "ationionjukudoyamaintenancempresashibetsukuiiyamanouchikuhokuryu" + + "gasakitashiobarauthordalanddnslivelanddnss3-eu-west-1mypetsienar" + + "utolgamyphotoshibalena-devicesigdalmypictetrentinosuedtirolmypsx" + + "n--30rr7ymysecuritycamerakermyshopblocksilknx-serverrankoshigaya" + + "nagawamytis-a-bloggermytuleapioneermyvnchurcharternidyndns-mailu" + + "bindalublindesnesannohelplfinancialucaniamywirepaircraftingvollo" + + "mbardiamondsimple-urlpizzapkolobrzegersundplantsirdalplatformsha" + + "ngrilapyplazaplcube-serversaillesjcbnpparibaselburgplumbingoplur" + + "inacionalpodhalewismillerpodlasiellaktyubinskiptveterinaireadthe" + + "docscappgafannefrankfurtrentinsud-tirolpodzonepohlpoivronpokerpo" + + "krovskomaganepoliticarrdpolitiendapolkowicepoltavalle-aostathell" + + "ezajskomakiyosunndalpomorzeszowitdkomatsushimarylandponpesaro-ur" + + "bino-pesarourbinopesaromasvuotnaritakurashikis-into-animeguroros" + + "hinkamigotoyohashimototalponypordenonepornporsangerporsangugepor" + + "sgrunnanyokoshibahikariwanumatakkoebenhavnpoznanpraxis-a-bookkee" + + "perspectakashimarnardalprdpreservationpresidioprgmrprimelbournep" + + "rincipeprivatizehealthinsuranceproductionslupskomforbarreauction" + + "-webhostingjerstadotsuruokakamigaharautomotiveconomiasakuchinots" + + "uchiurakawalbrzycharitysfjordds3-eu-west-2profesionalprogressive" + + "nneslaskerrylogisticslzpromombetsurgeonshalloffameiwamasoyproper" + + "typrotectionprotonetrentinsudtirolprudentialpruszkowithgoogleapi" + + "sa-hockeynutsiracusakatamayufuelveruminanoprvcyberlevagangaviika" + + "nonjis-into-carshinshinotsurgeryprzeworskogptplusgardenpulawypup" + + "ippugliapvhagakhanamigawapvtrentinsued-tirolpwcircustomer-ocimdb" + + "ananarepublicaseihicampobassociatest-iservecounterstrikehimejibm" + + "deportevadsobetsumidatlanticasertaipeiheijiitatebayashiibajddarc" + + "hitecturealtorlandevelopmentattoobservereviewsaintlouis-a-bruins" + + "fanayorovnoceanographics3-fips-us-gov-west-1pzqhagebostadqldqpon" + + "iatowadaqslingqualifioappiszquickconnectrentinsuedtirolquicksyte" + + "stingquipelementsnoasaitoshimattelekommunikationqvcistrondheimmo" + + "bilienissayokkaichiropractichirurgiens-dentistes-en-francesuzaka" + + "nazawasuzukaneyamazoesuzukis-leetrentino-sudtirolsvalbardunloppa" + + "cificitichiryukyuragifuchungbukharaumalborkashiwarasveiosvelviko" + + "morotsukaminoyamaxunjargasvizzerasvn-reposomnarviikamishihoronob" + + "eauxartsandcraftsokndalswidnicartoonartdecologiaswidnikkokaminok" + + "awanishiaizubangeswiebodzin-butterswiftcoverswinoujscienceandhis" + + "toryswissmarterthanyousynology-diskstationsynology-dsooturystyka" + + "nmakiwientuscanytushuissier-justicetuvalle-daostaticsor-varanger" + + "tuxfamilytwmailvestfoldvestnesorfoldvestre-slidreplantationvestr" + + "e-totennishiawakuravestvagoyvevelstadvibo-valentiavibovalentiavi" + + "deovillasorocabalsan-sudtirollagdenesnaaseinet-freaksolarssonvin" + + "nicasacamdvrcampinagrandebuilderschlesischesorreisahayakawakamii" + + "chikawamisatottoris-into-cartoonshinshirovinnytsiavipsinaappitts" + + "burghofficialvirginiavirtual-userveftpiwatevirtualservervirtualu" + + "servegame-servervirtueeldomein-vigorlicevirtuelvisakegawaviterbo" + + "knowsitallvivolkenkundenvixn--32vp30haibarakitahatakanabeautysva" + + "rdoesntexisteingeekazunow-dnsevenassisicilyvlaanderenvladikavkaz" + + "imierz-dolnyvladimirvlogintoyonezawavminiserversicherungvologdan" + + "skongsbergvolvolkswagentsortlandvolyngdalvoorloperauniterois-los" + + "trolekamakurazakiwakunigamiharutwentevossevangenvotevotingvotoyo" + + "nowloclawekongsvingerwmflabsorumincomcastresindevicenzaporizhzhi" + + "awnextdirectrogstadworldworse-thandawowithyoutuberspacekitagatar" + + "getmyiphostrodawarawpdevcloudwritesthisblogsytewroclawiwatsukiyo" + + "notairestaurantroandinosaurepbodynamic-dnsopotrentoyonakagyokuto" + + "yakokonoewtcminnesotaketakazakis-an-actresshinjukumanowtvallee-d" + + "-aosteigenwtfastvps-serveronakanotoddenwuozuwzmiuwajimaxn--3oq18" + + "vl8pn36axn--3pxu8koninjambylxn--42c2d9axn--45br5cylxn--45brj9civ" + + "ilisationisshinguccircleverappsanokasukabedzin-berlindasdaburxn-" + + "-45q11civilizationiyodogawaxn--4gbriminingxn--4it168dxn--4it797k" + + "onskowolayangroupictureshirahamatonbetsurnadalxn--4pvxs4allxn--5" + + "4b7fta0ccivilwarmiastagets-itozsdeltajimidorissagaeroclubmedecin" + + "cinnationwidealerxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49clanb" + + "ibaidarmeniaxn--5rtq34konsulatrobeepilepsykkylvenetodayxn--5su34" + + "j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlx" + + "n--7t0a264cldmailovecollegefantasyleaguernseyxn--80adxhksoundcas" + + "tronomy-routerxn--80ao21axn--80aqecdr1axn--80asehdbarrell-of-kno" + + "wledgeiseiyoichippubetsubetsugarugbyglandroverhalla-speziautosca" + + "nadaeguambulanceobninskaracoldwarszawaukraanghkeymachinewhampshi" + + "realtydalaskanittedallasalleangaviikaascolipicenodumemergencyach" + + "ts3-ca-central-1xn--80aswgxn--80augustownproviderxn--8ltr62konyv" + + "elolipopiemontexn--8pvr4uxn--8y0a063axn--90a3academiamicaaarbort" + + "eaches-yogasawaracingxn--90aeroportalabamagasakishimabaraogakibi" + + "chuoxn--90aishobarakawagoexn--90azhytomyravendbarsycenterprisesa" + + "kikuchikuseikarugamvikarasjokarasuyamarshallstatebankaratemrhclo" + + "udiscountyombolzano-altoadigeometre-experts-comptables3-us-west-" + + "1xn--9dbhblg6dietciprianiigataishinomakinkobayashikaoirmitakehar" + + "axn--9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byandexc" + + "loudxn--asky-iraxn--aurskog-hland-jnbarsyonlinewhollandiscourses" + + "3-us-west-2xn--avery-yuasakuhokkaidownloadxn--b-5gaxn--b4w605fer" + + "dxn--balsan-sdtirol-nsbsouthcarolinarvikommunexn--bck1b9a5dre4cl" + + "ickasumigaurawa-mazowszextraspace-to-rentalstomakomaibaraxn--bdd" + + "dj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--b" + + "hccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fy" + + "aotsurreyxn--bjddar-ptarnobrzegyptianxn--blt-elabourxn--bmlo-gra" + + "ingerxn--bod-2natalxn--bozen-sdtirol-2obanazawaxn--brnny-wuacade" + + "my-firewall-gatewayxn--brnnysund-m8accident-investigation-aptibl" + + "eadpagest-mon-blogueurovision-k3southwestfalenxn--brum-voagatrom" + + "sakakinokiaxn--btsfjord-9zaxn--bulsan-sdtirol-nsbashkiriaveroyke" + + "ngerdalcesurancechirealmpmnavigationavoizumizakibigawaurskog-hol" + + "andingdyniaetnabudapest-a-la-masion-riopretobamaceratabuseating-" + + "organicasadelamonedapliernewspapereportateshinanomachimkentateya" + + "mabogadobeaemcloud66xn--c1avgxn--c2br7gxn--c3s14misakis-an-anarc" + + "historicalsocietyxn--cck2b3basicservercelliguriavocatanzarowebsp" + + "acebinordreisa-geekaragandaustevoll-o-g-i-natuurwetenschappenaum" + + "burggfarmerseine164-baltimore-og-romsdalipayboltatsunobihirosaki" + + "kamijimatsuuragrocerybnikeisenbahnaturhistorisches3-ap-southeast" + + "-1kappchizip6xn--cckwcxetdxn--cesena-forl-mcbremangerxn--cesenaf" + + "orl-i8axn--cg4bkis-not-certifiedugit-pagespeedmobilizeroticahces" + + "uoloanshintokushimaxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes" + + "-v6a2oxn--correios-e-telecomunicaes-ghc29axn--czr694basilicatani" + + "avoues3-eu-west-3utilitiesquare7xn--czrs0tromsojamisonxn--czru2d" + + "xn--czrw28basketballyngenhktjeldsundiscoveryomitanoceanographiqu" + + "eu-1xn--d1acj3batochiokinoshimaizuruhrxn--d1alfaromeoxn--d1atrus" + + "teexn--d5qv7z876clinichitachinakagawashtenawdev-myqnapcloudeitys" + + "nesandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemuro" + + "rangehirnrtoyotomiyazakis-a-celticsfanishinomiyashironoxn--davve" + + "njrga-y4axn--djrs72d6uyxn--djty4kooris-a-patsfanxn--dnna-grajewo" + + "lterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--ec" + + "kvdtc9dxn--efvn9sowaxn--efvy88hair-surveillancexn--ehqz56nxn--el" + + "qq16hakatanortonxn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct42" + + "9kopervikhersonxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspeedpartne" + + "rsolognexn--fiq64batsfjordishakotanhlfanhs3-website-ap-northeast" + + "-1xn--fiqs8spjelkavikomonowruzhgorodeoxn--fiqz9spreadbettingxn--" + + "fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-ce" + + "sena-fcbsspydebergxn--forlcesena-c8axn--fpcrj9c3dxn--frde-grandr" + + "apidsrlxn--frna-woaraisaijosoyrovigotsukisosakitagawaxn--frya-hr" + + "axn--fzc2c9e2clintonoshoesantabarbaraxn--fzys8d69uvgmailxn--g2xx" + + "48clothingdustdataitogitsuldalucernexn--gckr3f0fauskedsmokorseta" + + "gayaseralingenoamishirasatogokasells-for-lessasebofageologyxn--g" + + "ecrj9cn-northwest-1xn--ggaviika-8ya47hakodatexn--gildeskl-g0axn-" + + "-givuotna-8yasakaiminatoyookaniepcexn--gjvik-wuaxn--gk3at1exn--g" + + "ls-elacaixaxn--gmq050is-savedunetflixilxn--gmqw5axn--h-2failxn--" + + "h1aeghakonexn--h2breg3evenesrvaporcloudxn--h2brj9c8cngroks-thisa" + + "yamanobeokakegawaxn--h3cuzk1digitalxn--hbmer-xqaxn--hcesuolo-7ya" + + "35bauhausposts-and-telecommunications3-website-ap-southeast-1xn-" + + "-hery-iraxn--hgebostad-g3axn--hkkinen-5waxn--hmmrfeasta-s4accide" + + "nt-prevention-rancherkasydneyxn--hnefoss-q1axn--hobl-iraxn--holt" + + "len-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn" + + "--i1b6b1a6a2exn--imr513nxn--indery-fyasugivingxn--io0a7is-slickh" + + "arkivalleeaosteinkjerusalembroideryxn--j1aefbsbxn--12cfi8ixb8lxn" + + "--j1amhakubahccavuotnagaraholtalenglandxn--j6w193gxn--jlq480n2rg" + + "xn--jlq61u9w7beneventoeidsvollimanowarudaxaustinnaval-d-aosta-va" + + "lleyokosukanumazuryokoteastcoastaldefenceatonsbergjemnes3-eu-cen" + + "tral-1xn--jlster-byasuokanoyakumoldeloittenrikuzentakataiwanairf" + + "orcebetsuikidsmynasushiobaragusartstorfjordxn--jrpeland-54axn--j" + + "vr189misasaguris-an-artistgoryxn--k7yn95exn--karmy-yuaxn--kbrq7o" + + "xn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn" + + "--kltx9axn--klty5xn--3bst00mintelligencexn--koluokta-7ya57hakuis" + + "-a-hunterxn--kprw13dxn--kpry57dxn--kpu716fbx-osaskatchewanxn--kp" + + "ut3is-uberleetrentino-sued-tirolxn--krager-gyatomitamamuraxn--kr" + + "anghke-b0axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jdfa" + + "stlylbanzaicloudcontrolledekagaminombresciaustraliajudaicable-mo" + + "democraciabruzzoologicalvinklein-addrammenuorochesterimo-i-ranaa" + + "mesjevuemielno-ipifonyc66xn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-" + + "fyatsukanraxn--kvnangen-k0axn--l-1fairwindstorjdevcloudnshinyosh" + + "itomiokamitondabayashiogamagoriziaxn--l1accentureklamborghinikol" + + "aeventstpetersburgxn--laheadju-7yatsushiroxn--langevg-jxaxn--lcv" + + "r32dxn--ldingen-q1axn--leagaviika-52bentleyonagoyaxn--lesund-hua" + + "xn--lgbbat1ad8jelenia-goraxn--lgrd-poacctrvareservehalflifestyle" + + "xn--lhppi-xqaxn--linds-pramericanartrycloudflarezzoxn--lns-qlaqu" + + "ilanstreamswatch-and-clockerxn--loabt-0qaxn--lrdal-sraxn--lrensk" + + "og-54axn--lt-liacnpyatigorskodjeffersonxn--lten-granexn--lury-ir" + + "axn--m3ch0j3axn--mely-iraxn--merker-kuaxn--mgb2ddestudioxn--mgb9" + + "awbfbxosassaris-a-democratrapaniizaxn--mgba3a3ejtrysiljanxn--mgb" + + "a3a4f16axn--mgba3a4franamizuholdingstudynamisches-dnsolundbeckom" + + "munalforbundxn--mgba7c0bbn0axn--mgbaakc7dvfedorapeoplegnicanonoi" + + "chinomiyakexn--mgbaam7a8hakusanagochijiwadell-ogliastraderxn--mg" + + "bab2bdxn--mgbah1a3hjkrdxn--mgbai9a5eva00beppublishproxyzgorzelec" + + "coffeedbackplaneapplicationcloudappspotagerxn--mgbai9azgqp6jeonn" + + "amerikawauexn--mgbayh7gpaleoxn--mgbbh1a71exn--mgbc0a9azcgxn--mgb" + + "ca7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4" + + "ecexposedxn--mgbpl2fhskydivingxn--mgbqly7c0a67fbcnsantacruzsanta" + + "fedjejuifmetlifeinsurancexn--mgbqly7cvafranziskanerimaringatlant" + + "akahashimamakiryuohdattowebcampinashikiminohostre-totendofintern" + + "et-dnsaliasiaxn--mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2beskidyn-i" + + "p24xn--mgbx4cd0abbvieeexn--mix082fedoraprojectravelchannelxn--mi" + + "x891feiraquarelleaseeklogesaudaxn--mjndalen-64axn--mk0axin-dslgb" + + "tunesor-odalxn--mk1bu44cntrani-andria-barletta-trani-andriaxn--m" + + "kru45is-very-badajozxn--mlatvuopmi-s4axn--mli-tlarvikoryokamikaw" + + "anehonbetsurutaharaxn--mlselv-iuaxn--moreke-juaxn--mori-qsakurag" + + "awaxn--mosjen-eyawaraxn--mot-tlavagiskexn--mre-og-romsdal-qqbuse" + + "rveexchangexn--msy-ula0haldenxn--mtta-vrjjat-k7aflakstadaokagaki" + + "cks-assnasaarlandxn--muost-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngb" + + "e9e0axn--ngbrxn--3ds443gxn--nit225kosaigawaxn--nmesjevuemie-tcba" + + "lsan-suedtirolkuszczytnoipirangalsacexn--nnx388axn--nodessakurai" + + "s-very-evillagexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--nts" + + "q17gxn--nttery-byaeservehttpixolinoxn--nvuotna-hwaxn--nyqy26axn-" + + "-o1acheltenham-radio-openairbusantiquest-a-la-maisondre-landroid" + + "xn--o3cw4halsaikitahiroshimaoris-a-knightpointtohobby-sitexn--o3" + + "cyx2axn--od0algxn--od0aq3bestbuyshouses3-website-ap-southeast-2x" + + "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyawatahamaxn--osy" + + "ro-wuaxn--otu796dxn--p1acfermochizukirovogradoyxn--p1ais-very-go" + + "odyearxn--pbt977coguchikuzenxn--pgbs0dhlxn--porsgu-sta26ferrarax" + + "n--pssu33lxn--pssy2uxn--q9jyb4collectionxn--qcka1pmckinseyxn--qq" + + "qt11misconfusedxn--qxa6axn--qxamuneustargardxn--rady-iraxn--rdal" + + "-poaxn--rde-ulavangenxn--rdy-0nabaris-very-nicexn--rennesy-v1axn" + + "--rhkkervju-01aferraris-a-designerxn--rholt-mragowoodsidemoneyxn" + + "--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5nativeamericanan" + + "tiquestuff-4-salexn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rms" + + "kog-byaxn--rny31hammarfeastafricapetownnews-stagingxn--rovu88bet" + + "ainaboxfusejnyonagunicommbankaratsuginamikatagamilitaryoriikarel" + + "ianceu-2xn--rros-granvindafjordxn--rskog-uuaxn--rst-0naturalhist" + + "orymuseumcenterxn--rsta-francaiseharaxn--rvc1e0am3exn--ryken-vua" + + "xn--ryrvik-byaxn--s-1faithamurakamigoris-a-landscaperugiaxn--s9b" + + "rj9colognexus-2xn--sandnessjen-ogbhzcateringebuildingjesdalimite" + + "diskussionsbereichaseljeepsondriodejaneirockartuzyoshiokanzakiyo" + + "kawaraxn--sandy-yuaxn--sdtirol-n2axn--seral-lraxn--ses554gxn--sg" + + "ne-gratangenxn--skierv-utazastufftoread-booksnesolutionsokananii" + + "mihoboleslawiecitadeliveryggeexn--skjervy-v1axn--skjk-soaxn--skn" + + "it-yqaxn--sknland-fxaxn--slat-5naturalsciencesnaturellestuttgart" + + "revisohughesomaxn--slt-elabcieszynxn--smla-hraxn--smna-gratis-a-" + + "bulls-fanxn--snase-nraxn--sndre-land-0cbieigersundisrechtraining" + + "jovikariyaltakasugaincheonikonanporocpanamatsuzakindianapolis-a-" + + "anarchistoireggiocalabriaxn--snes-poaxn--snsa-roaxn--sr-aurdal-l" + + "8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbielawalmartjm" + + "axxxboxenapponazure-mobileu-3xn--srfold-byaxn--srreisa-q1axn--sr" + + "um-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbiellaa" + + "kesvuemielecceu-4xn--stre-toten-zcbieszczadygeyachimataikikugawa" + + "ltervistaprinternationalfirearms3-website-eu-west-1xn--t60b56axn" + + "--tckweatherchannelxn--tiq49xqyjetztrentino-suedtirolxn--tjme-hr" + + "axn--tn0agrinetbankosakaerodromegallupinbarrel-of-knowledgestack" + + "arasjohkamikoaniikappuboliviajessheimetacentrumeteorappalmaserat" + + "in-the-bandain-vpncasinordkappalmspringsakerevistaples3-us-gov-w" + + "est-1xn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trentin-sd-tirol" + + "-rzbievat-band-campaniaxn--trentin-sdtirol-7vbifukagawashingtond" + + "clkarlsoyukindianmarketingladefinimakanegasakiraxn--trentino-sd-" + + "tirol-c3bigv-infoodnetworkangerxn--trentino-sdtirol-szbihorology" + + "ukuhashimoichinosekigaharaxn--trentinosd-tirol-rzbikedaejeonbukl" + + "ugsmileborkdalvdalaheadjudygarlandivtasvuodnakaiwamizawatchandcl" + + "ockarmoyurihonjournalistjohninohekinannestadivttasvuotnakamagaya" + + "habahcavuotnagaivuotnagaokakyotambabydgoszczecinemagentositelema" + + "rkarpaczeladzjampagefrontappanasonicatholicaxiashorokanaievje-og" + + "-hornnes3-website-sa-east-1xn--trentinosdtirol-7vbilbaokinawashi" + + "rosatochigiessensiositecnologiaxn--trentinsd-tirol-6vbillustrati" + + "onredumbrellahppiacenzachpomorskieninomiyakonojorpelandiyusuhara" + + "xn--trentinsdtirol-nsbioddaxn--trgstad-r1axn--trna-woaxn--troms-" + + "zuaxn--tysvr-vraxn--uc0atvarggatritonxn--uc0ay4axn--uist22handso" + + "nyoursidellogliastradingxn--uisz3gxn--unjrga-rtarumizusawaxn--un" + + "up4yxn--uuwu58axn--vads-jraxn--valle-aoste-ebbtunkomvuxn--2scrj9" + + "christmasakindlefrakkestadyndns-homednsanjotoyouraxn--valle-d-ao" + + "ste-ehbodollsusakis-into-gamessinazawaxn--valleaoste-e7axn--vall" + + "edaoste-ebbvacationsusonoxn--vard-jraxn--vegrshei-c0axn--vermgen" + + "sberater-ctbirdartcenterprisecloudcontrolapplebtimnetzlglassassi" + + "nationalheritagexn--vermgensberatung-pwbirkenesoddtangenovaranza" + + "nquanpachigasakievennodesabaerobatickets3-website-us-east-1xn--v" + + "estvgy-ixa6oxn--vg-yiabkhaziaxn--vgan-qoaxn--vgsy-qoa0jevnakersh" + + "uscultureggioemiliaromagnamsosnowiechristiansburgriwataraidyndns" + + "-freeboxosloftranakaniikawatanaguraxn--vgu402colonialwilliamsbur" + + "grondarxn--vhquvaroyxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadx" + + "n--vry-yla5gxn--vuq861birthplacexn--w4r85el8fhu5dnraxn--w4rs40lx" + + "n--wcvs22dxn--wgbh1coloradoplateaudioxn--wgbl6axn--xhq521bjarkoy" + + "usuisservehumourxn--xkc2al3hye2axn--xkc2dl3a5ee0hangglidingxn--y" + + "9a3aquariumishimasudaxn--yer-znaturbruksgymnxn--yfro4i67oxn--yga" + + "rden-p1axn--ygbi2ammxn--3e0b707exn--ystre-slidre-ujbjerkreimbamb" + + "lebesbyeniwaizumiotsukumiyamazonawsmpplanetariumemorialillyolasi" + + "tebizenakanojoetsuwanouchikujogaszkolancashirecreationavuotnaple" + + "s3-external-1xn--zbx025dxn--zf0ao64axn--zf0avxn--3hcrj9civilavia" + + "tionissedaluccapitalonewportlligatoystre-slidrettozawaxn--zfr164" + + "bjugnieznord-frontierxnbayxz" // nodes is the list of nodes. Each node is represented as a uint32, which // encodes the node's children, wildcard bit and node type (as an index into @@ -522,8860 +524,8925 @@ const text = "9guacuiababia-goracleaningroks-theatree164-baltimore-og-romsdali" // [15 bits] text index // [ 6 bits] text length var nodes = [...]uint32{ - 0x32bd43, - 0x3ac204, - 0x2e8b86, - 0x2fe083, - 0x2fe086, - 0x389b46, - 0x3b0ec3, - 0x31f984, - 0x309b87, - 0x2e87c8, + 0x32ce03, + 0x243304, + 0x2d7946, + 0x215803, + 0x215806, + 0x38b3c6, + 0x3ae643, + 0x246d44, + 0x341047, + 0x2d7588, 0x1a000c2, - 0x1f3dd07, - 0x375009, - 0x2c444a, - 0x2c444b, - 0x22d043, - 0x2342c5, - 0x2206702, - 0x2483c4, - 0x25ba43, - 0x331e45, - 0x260dcc2, - 0x32eec3, - 0x2a1e744, - 0x30b345, - 0x2e240c2, - 0x26dc8e, - 0x253f83, - 0x3a7b46, - 0x3201842, - 0x2d02c7, - 0x236c86, - 0x3604b02, - 0x227483, - 0x280a84, - 0x2165c6, - 0x39fc48, - 0x289886, - 0x26f844, - 0x3a00b02, - 0x34a789, - 0x217307, - 0x200f46, - 0x274909, - 0x2fccc8, - 0x346d44, - 0x368ac6, - 0x255fc6, - 0x3e017c2, - 0x23938f, - 0x205b8e, - 0x2199c4, - 0x215ac5, - 0x32bc45, - 0x2e1d89, - 0x23cc09, - 0x216dc7, - 0x21e046, - 0x248903, - 0x4220f02, - 0x222e83, - 0x317cca, - 0x46020c3, - 0x248d45, - 0x2ffe82, - 0x38a8c9, - 0x4e02442, - 0x20c3c4, - 0x3b89c6, - 0x336d45, - 0x36c084, - 0x5637884, - 0x20a683, - 0x233684, - 0x5a026c2, - 0x250bc4, - 0x5e6c7c4, - 0x398e8a, + 0x1f3aec7, + 0x377a09, + 0x2c628a, + 0x2c628b, + 0x231b43, + 0x233805, + 0x2203042, + 0x212284, + 0x2d7ac3, + 0x203045, + 0x260c6c2, + 0x3290c3, + 0x2b22c44, + 0x33f285, + 0x2e0c182, + 0x26d6ce, + 0x24e5c3, + 0x3a36c6, + 0x3206082, + 0x2fd2c7, + 0x236086, + 0x3602982, + 0x27f103, + 0x27f104, + 0x397646, + 0x36bf08, + 0x288086, + 0x270104, + 0x3a00ac2, + 0x34cb09, + 0x2171c7, + 0x344986, + 0x28dfc9, + 0x32fa48, + 0x34b444, + 0x3947c6, + 0x336a46, + 0x3e03582, + 0x3da686, + 0x24070f, + 0x2112ce, + 0x217bc4, + 0x20d005, + 0x32cd05, + 0x2e1b49, + 0x23b549, + 0x397e47, + 0x3cffc6, + 0x28e143, + 0x4212082, + 0x2232c3, + 0x28da0a, + 0x4613583, + 0x3cea45, + 0x299082, + 0x38c209, + 0x4e02282, + 0x213c04, + 0x21fb46, + 0x2fff45, + 0x36db84, + 0x5643344, + 0x225843, + 0x232b84, + 0x5a03342, + 0x31fd84, + 0x5f8a244, + 0x2fe64a, 0x6200882, - 0x3b7607, - 0x206288, - 0x7202202, - 0x37e987, - 0x22d3c4, - 0x2c1807, - 0x22d3c5, - 0x351647, - 0x3cbf86, - 0x2ad604, - 0x32ec45, - 0x25bc47, - 0x82052c2, - 0x244683, - 0x20b582, - 0x3607c3, - 0x860d242, - 0x283a05, - 0x8a00202, - 0x243f44, - 0x2e1a05, - 0x219907, - 0x21f2ce, - 0x2b0444, - 0x265604, - 0x218a43, - 0x371bc9, - 0x257f0b, - 0x269488, - 0x2746c8, - 0x38c288, - 0x28da08, - 0x346b8a, - 0x351547, - 0x2c7086, - 0x8e4a0c2, - 0x309243, - 0x3ce603, - 0x3d0044, - 0x309283, - 0x3639c3, - 0x1739742, - 0x9202c42, - 0x27fe45, - 0x39eb86, - 0x281084, - 0x369247, - 0x250a06, - 0x2ba9c4, - 0x389207, - 0x203a83, - 0x96cb182, - 0x9a25a42, - 0x9e25802, - 0x225806, - 0xa200282, - 0x2850c5, - 0x33ac83, - 0x3c0604, - 0x2ef704, - 0x2ef705, - 0x3c4703, - 0xa64ce83, - 0xab3b5c2, - 0x28cf05, - 0x3da30b, - 0x2c004b, - 0x22afc4, - 0x3dc049, - 0x207fc4, - 0xae08202, - 0x208a43, - 0x208fc3, - 0xb201a42, - 0x2ee503, - 0x20a94a, - 0xb6010c2, - 0x2dca05, - 0x2e0f4a, - 0x38b104, - 0x20b083, - 0x20b944, - 0x20c483, - 0x20c484, - 0x20c487, - 0x20db85, - 0x210d86, - 0x211146, - 0x212103, - 0x215e08, - 0x20e383, - 0xba1c742, - 0x247308, - 0x37868b, - 0x220808, - 0x221346, - 0x221e87, - 0x225088, - 0xca07c02, - 0xcf25802, - 0x30b488, - 0x219047, - 0x314885, - 0x314888, - 0xd2bdcc8, - 0x2d4803, - 0x228bc4, - 0x389bc2, - 0xd629c02, - 0xda43fc2, - 0xe22b882, - 0x22b883, - 0xe605cc2, - 0x30f943, - 0x239944, - 0x212283, - 0x3cbd04, - 0x30ab0b, - 0x23af03, - 0x2ea246, - 0x23af04, - 0x2b920e, - 0x381c85, - 0x3a7c48, - 0x235dc7, - 0x235dca, - 0x226e43, - 0x3ac007, - 0x2580c5, - 0x22fc84, - 0x256786, - 0x256787, - 0x312944, - 0x22f5c7, - 0xea1f604, - 0x398b44, - 0x398b46, - 0x25b444, - 0x3c4e86, - 0x20b383, - 0x3d1dc8, - 0x20b388, - 0x2655c3, - 0x2ee4c3, - 0x343dc4, - 0x353ec3, - 0xf235d82, - 0xf68d142, - 0x208183, - 0x242d46, - 0x28ed83, - 0x23ab04, - 0xfa17b02, - 0x308183, - 0x217b03, - 0x212f82, - 0xfe014c2, - 0x2c5006, - 0x234f87, - 0x275487, - 0x209e85, - 0x396d84, - 0x29b045, - 0x23f907, - 0x2eb4c9, - 0x2fed86, - 0x300c48, - 0x3109c6, - 0x1022ec82, - 0x3019c8, - 0x3037c6, - 0x2d4b85, - 0x321b07, - 0x323144, - 0x323145, - 0x10731a84, - 0x331a88, - 0x10a0a602, - 0x10e00482, - 0x30c486, - 0x200488, - 0x358345, - 0x359946, - 0x35e748, - 0x37c508, - 0x11205f85, - 0x11625344, - 0x2448c7, - 0x11a07a42, - 0x11ed5e42, - 0x13202782, - 0x3b8ac5, - 0x2a5f45, - 0x377c46, - 0x3a0ec7, - 0x22c487, - 0x13a2d7c3, - 0x2df287, - 0x348dc8, - 0x1da2d989, - 0x26de47, - 0x22de07, - 0x22e808, - 0x22f006, - 0x22f786, - 0x230bcc, - 0x23230a, - 0x232c87, - 0x23418b, - 0x234dc7, - 0x234dce, - 0x1de35c44, - 0x236204, - 0x239807, - 0x260147, - 0x23c4c6, - 0x23c4c7, - 0x337307, - 0x1e22bdc2, - 0x23de06, - 0x23de0a, - 0x23e20b, - 0x23fec7, - 0x240945, - 0x2414c3, - 0x241b06, - 0x241b07, - 0x272803, - 0x1e600102, - 0x24238a, - 0x1eb76cc2, - 0x1ee487c2, - 0x1f247002, - 0x1f636d82, - 0x247745, - 0x248484, - 0x1fe37982, - 0x250c45, - 0x231543, - 0x2080c5, - 0x204a44, - 0x20bc84, - 0x21f906, - 0x27f946, - 0x2a7843, - 0x3ba9c4, - 0x275783, - 0x20e02942, - 0x222204, - 0x244e46, - 0x222205, - 0x2576c6, - 0x321c08, - 0x28fd84, - 0x2102c8, - 0x39fa05, - 0x39f748, - 0x2bef86, - 0x359d87, - 0x26ec04, - 0x2226ec06, - 0x22645dc3, - 0x39cbc3, - 0x348188, - 0x332c04, - 0x22b5ed87, - 0x232de7c6, - 0x2de7c9, - 0x336088, - 0x38ca48, - 0x34a204, - 0x3c2b83, - 0x23e8c2, - 0x23652282, - 0x23a03e02, - 0x3c7983, - 0x23e12ac2, - 0x2f0a04, - 0x36f146, - 0x309cc5, - 0x21b1c3, - 0x2b5f07, - 0x3306c3, - 0x338108, - 0x214ec5, - 0x25cdc3, - 0x2e1985, - 0x2e1ac4, - 0x3034c6, - 0x217004, - 0x217b86, - 0x219846, - 0x206804, - 0x235183, - 0x2420d602, - 0x2479e645, - 0x200843, - 0x24e16042, - 0x22d943, - 0x246385, - 0x25233743, - 0x25a33749, - 0x25e00942, - 0x26605242, - 0x28ca45, - 0x213986, - 0x20da06, - 0x2d0f48, - 0x2d0f4b, - 0x32dc4b, - 0x20a085, - 0x2cc809, - 0x1601982, - 0x2e8e88, - 0x21f084, - 0x26e01242, - 0x337943, - 0x27660306, - 0x27db08, - 0x27a01f02, - 0x310588, - 0x27e758c2, - 0x33f30a, - 0x282d2003, - 0x28b75646, - 0x399608, - 0x315848, - 0x3c0b46, - 0x386d47, - 0x239587, - 0x255b4a, - 0x38b184, - 0x35d884, - 0x374a49, - 0x28fabc05, - 0x205d86, - 0x219243, - 0x271e84, - 0x29202404, - 0x202407, - 0x29757a47, - 0x26e4c4, - 0x378c45, - 0x377d08, - 0x3a4587, - 0x249487, - 0x29a19d02, - 0x3c3844, - 0x293548, - 0x24aa44, - 0x24e444, - 0x24e805, - 0x24e947, - 0x29e4dbc9, - 0x250104, - 0x250f49, - 0x251188, - 0x251984, - 0x251987, - 0x2a252083, - 0x252747, - 0x1603582, - 0x16b0f82, - 0x253946, - 0x253fc7, - 0x254244, - 0x255047, - 0x256bc7, - 0x257843, - 0x2b06c2, - 0x20c742, - 0x2747c3, - 0x3be744, - 0x3be74b, - 0x2a6747c8, - 0x25c784, - 0x258ec5, - 0x25a687, - 0x25bec5, - 0x2e0b8a, - 0x25c6c3, - 0x2aa0e282, - 0x20e284, - 0x25ff09, - 0x263f83, - 0x264047, - 0x38c6c9, - 0x3d77c8, - 0x238983, - 0x27cb87, - 0x27dfc9, - 0x23fac3, - 0x2872c4, - 0x288c09, - 0x28ab06, - 0x219c03, - 0x205282, - 0x236883, - 0x2b0d87, - 0x236885, - 0x3cb4c6, - 0x2aea44, - 0x302fc5, - 0x279d03, - 0x212346, - 0x237482, - 0x24ce44, - 0x2ae0a1c2, - 0x2b22b083, - 0x2b604182, - 0x24c203, - 0x2115c4, - 0x2115c7, - 0x38b206, - 0x2023c2, - 0x2ba02382, - 0x321e04, - 0x2be0c602, - 0x2c212782, - 0x246644, - 0x246645, - 0x3cae05, - 0x365f46, - 0x2c609d82, - 0x360245, - 0x3c53c5, - 0x2270c3, - 0x211746, - 0x21c105, - 0x225782, - 0x357f85, - 0x225784, - 0x226203, - 0x228d03, - 0x2ca05142, - 0x233b47, - 0x251b04, - 0x251b09, - 0x271d84, - 0x28d503, - 0x39bf48, - 0x2cea5dc4, - 0x2a5dc6, - 0x2ab3c3, - 0x259703, - 0x220583, - 0x2d2ee042, - 0x300002, - 0x2d600642, - 0x33cd88, - 0x220108, - 0x3b1646, - 0x25c585, - 0x22c045, - 0x201887, - 0x2da78745, - 0x2068c2, - 0x2de96bc2, - 0x2e200042, - 0x31ed08, - 0x301905, - 0x2f5f44, - 0x257605, - 0x24a487, - 0x273244, - 0x242282, - 0x2e605002, - 0x34e6c4, - 0x221807, - 0x28f307, - 0x351604, - 0x3ced83, - 0x265504, - 0x265508, - 0x22fac6, - 0x25660a, - 0x3575c4, - 0x295548, - 0x28af44, - 0x221f86, - 0x296b84, - 0x3b8dc6, - 0x251dc9, - 0x245847, - 0x21f183, - 0x2ea07102, - 0x34a483, - 0x208402, - 0x2ee01d02, - 0x2f3206, - 0x380e08, - 0x2a7747, - 0x22a1c9, - 0x295109, - 0x2a8c85, - 0x2aa589, - 0x2aad45, - 0x2aae89, - 0x2abe05, - 0x2ac848, - 0x2f20c644, - 0x2f657987, - 0x22e1c3, - 0x2aca47, - 0x22e1c6, - 0x2ace87, - 0x2a48c5, - 0x2ba0c3, - 0x2fa320c2, - 0x20b2c4, - 0x2fe2bf42, - 0x302373c2, - 0x33c146, - 0x206205, - 0x2af987, - 0x32f343, - 0x363944, - 0x203f43, - 0x2c6883, - 0x306067c2, - 0x30e03d82, - 0x389c44, - 0x36b103, - 0x2fc5c5, - 0x31205e42, - 0x31a00bc2, - 0x2da6c6, - 0x332d44, - 0x321644, - 0x32164a, - 0x322005c2, - 0x244b03, - 0x2157ca, - 0x219c88, - 0x32622884, - 0x2005c3, - 0x32a038c3, - 0x281709, - 0x252d49, - 0x2b6006, - 0x32e19e43, - 0x21c445, - 0x31de8d, - 0x219e46, - 0x21bccb, - 0x33204c02, - 0x2b2c48, - 0x36215f02, - 0x36604c82, - 0x375e05, - 0x36a01b82, - 0x230047, - 0x2adec7, - 0x204383, - 0x341788, - 0x36e06102, - 0x3b9c84, - 0x219583, - 0x328085, - 0x23e906, - 0x220d44, - 0x2ee483, - 0x2b1e03, - 0x37202d42, - 0x20a004, - 0x3bc2c5, - 0x2b0987, - 0x27a143, - 0x2b1403, - 0x16b14c2, - 0x2b14c3, - 0x2b1d83, - 0x376035c2, - 0x3b7d44, - 0x27fb46, - 0x2e6343, - 0x2b22c3, - 0x37a4d442, - 0x24d448, - 0x2b3204, - 0x368486, - 0x25d187, - 0x29b3c6, - 0x36f744, - 0x45a015c2, - 0x22e08b, - 0x2f90ce, - 0x21450f, - 0x2b0fc3, - 0x4625d602, - 0x1637542, - 0x46603882, - 0x295ac3, - 0x209503, - 0x21d046, - 0x2eb746, - 0x21ac87, - 0x30e184, - 0x46a13ac2, - 0x46e0a3c2, - 0x241385, - 0x2fa2c7, - 0x2b4ac6, - 0x47248702, - 0x32e844, - 0x2bab43, - 0x47653a42, - 0x47b70e03, - 0x2bbb44, - 0x2c0a89, - 0x47ec80c2, - 0x48203942, - 0x203945, - 0x486c8e02, - 0x48a06ac2, - 0x35be87, - 0x3b2349, - 0x37528b, - 0x239345, - 0x26a549, - 0x26d1c6, - 0x38f987, - 0x48e0e984, - 0x3d5849, - 0x37b387, - 0x20f607, - 0x22bb83, - 0x2b2ac6, - 0x32a947, - 0x20bec3, - 0x3ca646, - 0x4960ac02, - 0x49a339c2, - 0x3b5543, - 0x38aa85, - 0x21ee87, - 0x2eb846, - 0x236805, - 0x251304, - 0x2a3dc5, - 0x38bc44, - 0x49e00f82, - 0x274d87, - 0x2c5c44, - 0x23bf84, - 0x34998d, - 0x2d9189, - 0x22be88, - 0x203bc4, - 0x3b9445, - 0x20df07, - 0x210184, - 0x267b87, - 0x357285, - 0x4a214a04, - 0x2b4085, - 0x262c44, - 0x2b1a46, - 0x3a0cc5, - 0x4a624ec2, - 0x30c403, - 0x35cf44, - 0x35cf45, - 0x3520c6, - 0x236945, - 0x238904, - 0x34c603, - 0x4aa12a06, - 0x2676c5, - 0x282305, - 0x3a0dc4, - 0x2e5a43, - 0x2e5a4c, - 0x4aeb0a82, - 0x4b203502, - 0x4b600b42, - 0x214903, - 0x214904, - 0x4ba08002, - 0x37e508, - 0x3cb585, - 0x24b304, - 0x367a46, - 0x4be0f1c2, - 0x4c205e82, - 0x4c601442, - 0x28c045, - 0x2066c6, - 0x357984, - 0x216b06, - 0x371f86, - 0x210043, - 0x4cb4b2ca, - 0x271cc5, - 0x317c83, - 0x209b86, - 0x209b89, - 0x224207, - 0x2a4ec8, - 0x2fcb89, - 0x331688, - 0x226b86, - 0x218a03, - 0x4cedf302, - 0x3a1788, - 0x4d24ab82, - 0x4d6024c2, - 0x22a243, - 0x2e43c5, - 0x26ae44, - 0x211ec9, - 0x2e14c4, - 0x21a048, - 0x4de08443, - 0x4e30af84, - 0x2139c8, - 0x3498c7, - 0x4e65e5c2, - 0x23f1c2, - 0x32bbc5, - 0x265dc9, - 0x205e03, - 0x281304, - 0x31de44, - 0x20df83, - 0x2835ca, - 0x4ea01582, - 0x4ee0b102, - 0x2cb103, - 0x38e683, - 0x162d842, - 0x308a43, - 0x4f202dc2, - 0x4f600c02, - 0x4fb216c4, - 0x3dcb86, - 0x39ba06, - 0x226244, - 0x279343, - 0x3bb343, - 0x4fecb283, - 0x23e586, - 0x3a4dc5, - 0x2cc1c7, - 0x2cee45, - 0x2d0006, - 0x2d1208, - 0x2d1406, - 0x207304, - 0x29c1cb, - 0x2d6043, - 0x2d6045, - 0x2d6c88, - 0x2104c2, - 0x35c182, - 0x502477c2, - 0x50600e82, - 0x200e83, - 0x50a6cec2, - 0x26cec3, - 0x2d7683, - 0x51224682, - 0x516dc3c6, - 0x2594c6, - 0x51ab2e42, - 0x51e09002, - 0x52228d42, - 0x52645ec2, - 0x52a1a282, - 0x52e01342, - 0x20ed83, - 0x2c9e05, - 0x327d86, - 0x53205184, - 0x244c4a, - 0x3aa406, - 0x20c844, - 0x201c43, - 0x53e02a42, - 0x202642, - 0x22d903, - 0x54206b43, - 0x366547, - 0x3a0bc7, - 0x55ee7247, - 0x3cd307, - 0x227983, - 0x35fc8a, - 0x235fc4, - 0x31b684, - 0x31b68a, - 0x22c5c5, - 0x56205d42, - 0x255003, - 0x56600602, - 0x251ac3, - 0x34a443, - 0x56e00582, - 0x348d44, - 0x201a84, - 0x3bf805, - 0x322885, - 0x2aa2c6, - 0x2b6c06, - 0x5724fd42, - 0x576013c2, - 0x37a405, - 0x2591d2, - 0x34f1c6, - 0x24e703, - 0x304c46, - 0x2b4545, - 0x160a982, - 0x5fa0af02, - 0x3743c3, - 0x20af03, - 0x288883, - 0x5fe1a682, - 0x23d443, - 0x6060cc82, - 0x2a7503, - 0x3b7d88, - 0x2a8b03, - 0x2a8b06, - 0x32f7c7, - 0x324a06, - 0x324a0b, - 0x20c787, - 0x347f84, - 0x60e00e42, - 0x3cb405, - 0x61212b03, - 0x2050c3, - 0x28e805, - 0x332f43, - 0x61b32f46, - 0x2e900a, - 0x2a3083, - 0x2164c4, - 0x2003c6, - 0x2d4f86, - 0x61e3cf83, - 0x363807, - 0x281607, - 0x29dbc5, - 0x2ec406, - 0x267703, - 0x64a11983, - 0x64e01002, - 0x6533ef04, - 0x3c2249, - 0x3c7a05, - 0x22c244, - 0x34e0c8, - 0x2e6185, - 0x656e75c5, - 0x240ac9, - 0x201003, - 0x248744, - 0x65a02142, - 0x213d03, - 0x65e76402, - 0x276406, - 0x1678842, - 0x662201c2, - 0x28bf48, - 0x291f83, - 0x2b3fc7, - 0x2b1545, - 0x2b3b85, - 0x324c8b, - 0x2e8146, - 0x324e86, - 0x2e96c6, - 0x27f1c4, - 0x2c0c86, - 0x666d9d88, - 0x23afc3, - 0x23d903, - 0x23d904, - 0x38c084, - 0x316147, - 0x2ed4c5, - 0x66aed602, - 0x66e06a82, - 0x6761b085, - 0x2b8044, - 0x2daccb, - 0x2ef608, - 0x2525c4, - 0x67a2bd02, - 0x67e23802, - 0x3c4e03, - 0x2f15c4, - 0x2f1885, - 0x2f2247, - 0x2f5a84, - 0x351704, - 0x68213c42, - 0x37ab09, - 0x2f6bc5, - 0x239605, - 0x2f7745, - 0x68613c43, - 0x2f8644, - 0x2f864b, - 0x2f8984, - 0x2f8c4b, - 0x2f9c85, - 0x21464a, - 0x2fa7c8, - 0x2fa9ca, - 0x2fb203, - 0x2fb20a, - 0x68e0a0c2, - 0x69241f42, - 0x6961f4c3, - 0x69afed02, - 0x2fed03, - 0x69f52a42, - 0x6a33b402, - 0x2ffbc4, - 0x215f46, - 0x216845, - 0x300e43, - 0x32c306, - 0x216345, - 0x2e4a44, - 0x6a600902, - 0x2a1344, - 0x2cc48a, - 0x336fc7, - 0x3332c6, - 0x3abe47, - 0x23de43, - 0x2bbb88, - 0x37eb4b, - 0x2c12c5, - 0x2a9c05, - 0x2a9c06, - 0x2ec744, - 0x210f48, - 0x222b03, - 0x255ec4, - 0x255ec7, - 0x347bc6, - 0x3ccb06, - 0x2b904a, - 0x250fc4, - 0x2fba4a, - 0x6ab30086, - 0x330087, - 0x258f47, - 0x275dc4, - 0x275dc9, - 0x2ff605, - 0x3cc44b, - 0x2ee903, - 0x217d43, - 0x6ae1d583, - 0x2ca004, - 0x6b200682, - 0x229446, - 0x6b6b9e45, - 0x304e85, - 0x253b86, - 0x29fe44, - 0x6ba02542, - 0x241504, - 0x6be16f82, - 0x2d5745, - 0x32ffc4, - 0x6ca1b683, - 0x6ce01e82, - 0x201e83, - 0x237086, - 0x6d209482, - 0x391a48, - 0x224084, - 0x224086, - 0x38ef06, - 0x6d65a744, - 0x212985, - 0x225248, - 0x226087, - 0x246747, - 0x24674f, - 0x293446, - 0x231c83, - 0x23c644, - 0x20e4c3, - 0x2220c4, - 0x254144, - 0x6da02c02, - 0x28ce43, - 0x338dc3, - 0x6de02002, - 0x227683, - 0x2259c3, - 0x20dc0a, - 0x273b07, - 0x25984c, - 0x259b06, - 0x25c186, - 0x25ce87, - 0x6e22ec47, - 0x268049, - 0x247444, - 0x269ac4, - 0x6e600ec2, - 0x6ea01bc2, - 0x2b9406, - 0x363604, - 0x28d2c6, - 0x22f0c8, - 0x38ab44, - 0x230086, - 0x20d9c5, - 0x6ee83048, - 0x241c03, - 0x287a45, - 0x288203, - 0x239703, - 0x239704, - 0x20e243, - 0x6f24d882, - 0x6f601282, - 0x2ee7c9, - 0x28be45, - 0x28c144, - 0x317f05, - 0x297104, - 0x3a1fc7, - 0x36aac5, - 0x6fa3d804, - 0x23d808, - 0x2d9f46, - 0x2dcb04, - 0x2e1348, - 0x2e1c47, - 0x6fe037c2, - 0x2e8684, - 0x303104, - 0x2c1a07, - 0x70207c44, - 0x22b302, - 0x70603842, - 0x203843, - 0x203844, - 0x29e943, - 0x29e945, - 0x70a388c2, - 0x2fff05, - 0x2801c2, - 0x307d85, - 0x3b49c5, - 0x70e15042, - 0x217a84, - 0x71203002, - 0x25e406, - 0x2ba6c6, - 0x265f08, - 0x2c2988, - 0x33c0c4, - 0x305d85, - 0x3a6509, - 0x20a104, - 0x2e8fc4, - 0x206903, - 0x71655c85, - 0x243185, - 0x2a15c4, - 0x35248d, - 0x308102, - 0x353f43, - 0x354c83, - 0x71a02702, - 0x391505, - 0x220f87, - 0x2b9f44, - 0x3cd3c7, - 0x2fcd89, - 0x2cc5c9, - 0x202703, - 0x278688, - 0x2f9889, - 0x2f7a07, - 0x3da885, - 0x37e1c6, - 0x380fc6, - 0x3a60c5, - 0x2d9285, - 0x71e03b42, - 0x27b445, - 0x2b8308, - 0x2c4dc6, - 0x72206ec7, - 0x26e404, - 0x335187, - 0x302c86, - 0x72641542, - 0x351dc6, - 0x30740a, - 0x307c85, - 0x72ae9d02, - 0x72e8f4c2, - 0x33f806, - 0x323448, - 0x7328f4c7, - 0x73639102, - 0x28a5c3, - 0x209786, - 0x224e44, - 0x27e606, - 0x33bd46, - 0x20720a, - 0x331f45, - 0x328c46, - 0x32e243, - 0x32e244, - 0x202742, - 0x332cc3, - 0x73a14942, - 0x2d15c3, - 0x215a44, - 0x2c3184, - 0x73f2358a, - 0x21c4c3, - 0x226c4a, - 0x239dc7, - 0x312e86, - 0x25e2c4, - 0x20c702, - 0x2a6742, - 0x742007c2, - 0x2654c3, - 0x258d07, - 0x2007c7, - 0x2895c4, - 0x21e8c7, - 0x2f2346, - 0x219187, - 0x225904, - 0x37cb05, - 0x218345, - 0x74619f82, - 0x3dc5c6, - 0x21d843, - 0x220bc2, - 0x220bc6, - 0x74a19b42, - 0x74e1be02, - 0x3c3905, - 0x75243982, - 0x75602b42, - 0x348ac5, - 0x2d6385, - 0x2a7ec5, - 0x75a04e83, - 0x36f205, - 0x2e8207, - 0x2c4c05, - 0x332105, - 0x32a284, - 0x2e6006, - 0x34b504, - 0x75e008c2, - 0x76ae94c5, - 0x382b07, - 0x360088, - 0x251646, - 0x25164d, - 0x252b09, - 0x252b12, - 0x380385, - 0x38bd03, - 0x76e062c2, - 0x2f3e44, - 0x219ec3, - 0x30d305, - 0x30e4c5, - 0x772195c2, - 0x25ce03, - 0x7765b8c2, - 0x77ee3402, - 0x78200082, - 0x2c8b45, - 0x3cd503, - 0x24af88, - 0x78619082, - 0x78a0d2c2, - 0x348d06, - 0x31f38a, - 0x20ef03, - 0x25ac43, - 0x2eeac3, - 0x79e07d82, - 0x8821a6c2, - 0x88a0a742, - 0x206842, - 0x3d00c9, - 0x2c7504, - 0x2ac108, - 0x88efc182, - 0x89214f82, - 0x2af4c5, - 0x2345c8, - 0x311308, - 0x2ef30c, - 0x239d03, - 0x8961f202, - 0x89a0a342, - 0x349646, - 0x313d05, - 0x2dcf43, - 0x2574c6, - 0x313e46, - 0x29b2c3, - 0x3c2003, - 0x3152c6, - 0x316ac4, - 0x2819c6, - 0x21c28a, - 0x24e184, - 0x317184, - 0x31820a, - 0x89e1ff02, - 0x252205, - 0x319d4a, - 0x319c85, - 0x31b1c4, - 0x31b2c6, - 0x31b444, - 0x213fc6, - 0x8a22bc42, - 0x2fdd06, - 0x328805, - 0x32e0c7, - 0x3ad646, - 0x25d084, - 0x2dd1c7, - 0x34b206, - 0x20bf45, - 0x20bf47, - 0x3bbc47, - 0x3bbc4e, - 0x26bb86, - 0x221d45, - 0x207b87, - 0x306003, - 0x330387, - 0x209185, - 0x20af84, - 0x221ac2, - 0x229c47, - 0x30e204, - 0x231784, - 0x23f04b, - 0x21c8c3, - 0x288087, - 0x21c8c4, - 0x288287, - 0x294a03, - 0x34ca4d, - 0x3a4bc8, - 0x8a62a984, - 0x23d705, - 0x31bfc5, - 0x31c403, - 0x8aa23f82, - 0x31dd83, - 0x31e583, - 0x3dc744, - 0x27e0c5, - 0x21d8c7, - 0x32e2c6, - 0x38bac3, - 0x228d8b, - 0x27444b, - 0x2b200b, - 0x2d440b, - 0x2e9d4a, - 0x33484b, - 0x36d94b, - 0x392c8c, - 0x3d990b, - 0x3db991, - 0x32068a, - 0x320b8b, - 0x320e4c, - 0x32114b, - 0x3218ca, - 0x321f0a, - 0x322e0e, - 0x32380b, - 0x323aca, - 0x325011, - 0x32544a, - 0x32594b, - 0x325e8e, - 0x3267cc, - 0x326e0b, - 0x3270ce, - 0x32744c, - 0x329d4a, - 0x32b58c, - 0x8af2b88a, - 0x32c488, - 0x32d049, - 0x33390a, - 0x333b8a, - 0x333e0b, - 0x33854e, - 0x338f51, - 0x341f49, - 0x34218a, - 0x342f8b, - 0x3444ca, - 0x345596, - 0x34690b, - 0x34768a, - 0x34854a, - 0x349d8b, - 0x34a609, - 0x34d3c9, - 0x34da0d, - 0x34e44b, - 0x34f34b, - 0x34fd0b, - 0x350589, - 0x350bce, - 0x35130a, - 0x35224a, - 0x3527ca, - 0x352f8b, - 0x3537cb, - 0x35448d, - 0x356b8d, - 0x357c10, - 0x3580cb, - 0x358acc, - 0x3596cb, - 0x35b98b, - 0x35dd4e, - 0x35e44b, - 0x35e44d, - 0x364a4b, - 0x3654cf, - 0x36588b, - 0x3660ca, - 0x3673c9, - 0x367bc9, - 0x8b368c4b, - 0x368f0e, - 0x36b88b, - 0x36c50f, - 0x36e54b, - 0x36e80b, - 0x36eacb, - 0x36f34a, - 0x374e89, - 0x37978f, - 0x37df0c, - 0x37fb4c, - 0x38004e, - 0x38054f, - 0x38090e, - 0x381150, - 0x38154f, - 0x38210e, - 0x382ccc, - 0x382fd2, - 0x383751, - 0x383f4e, - 0x38438e, - 0x3853cb, - 0x3853ce, - 0x38574f, - 0x385b0e, - 0x385e93, - 0x386351, - 0x38678c, - 0x386a8e, - 0x386f0c, - 0x387453, - 0x387c50, - 0x3887cc, - 0x388acc, - 0x388f8b, - 0x38984e, - 0x389d4b, - 0x38a54b, - 0x38d28c, - 0x391f8a, - 0x39248c, - 0x39278c, - 0x392a89, - 0x39470b, - 0x3949c8, - 0x395189, - 0x39518f, - 0x39690b, - 0x8b79724a, - 0x39a2cc, - 0x39b48b, - 0x39b749, - 0x39bb88, - 0x39c14b, - 0x39c98b, - 0x39d50a, - 0x39d78b, - 0x3a150c, - 0x3a26c8, - 0x3a4f0b, - 0x3a814b, - 0x3ab00e, - 0x3ac50b, - 0x3ae20b, - 0x3bb7cb, - 0x3bba89, - 0x3bbfcd, - 0x3cd98a, - 0x3d0b57, - 0x3d1358, - 0x3d3f49, - 0x3d508b, - 0x3d6054, - 0x3d654b, - 0x3d6aca, - 0x3d6f8a, - 0x3d720b, - 0x3d79d0, - 0x3d7dd1, - 0x3d838a, - 0x3d8f0d, - 0x3d960d, - 0x3dbdcb, - 0x3dc6c3, - 0x8bb77983, - 0x2d4886, - 0x278445, - 0x30db87, - 0x334706, - 0x1605042, - 0x2dd4c9, - 0x32c104, - 0x2e7748, - 0x21d4c3, - 0x2f3d87, - 0x22f282, - 0x2af9c3, - 0x8be0a842, - 0x2cd186, - 0x2ce1c4, - 0x35cbc4, - 0x332803, - 0x8c6c8e42, - 0x8caab204, - 0x275d07, - 0x8ce37b02, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0xecf48, - 0x2013c3, - 0x2000c2, - 0xa14c8, - 0x202782, - 0x220583, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x202003, - 0x33e716, - 0x362c13, - 0x21e749, - 0x2447c8, - 0x3cb289, - 0x319ec6, - 0x34e710, - 0x2425d3, - 0x347c88, - 0x279447, - 0x27ad47, - 0x2a3b0a, - 0x32efc9, - 0x3a2849, - 0x24184b, - 0x3cbf86, - 0x289b0a, - 0x221346, - 0x32bd03, - 0x2dc8c5, - 0x3d1dc8, - 0x234a8d, - 0x3b8b8c, - 0x310ac7, - 0x32428d, - 0x225344, - 0x23094a, - 0x231e4a, - 0x23230a, - 0x2428c7, - 0x23bc07, - 0x23ef84, - 0x26ec06, - 0x32f404, - 0x2da308, - 0x2e1509, - 0x2d0f46, - 0x2d0f48, - 0x242d8d, - 0x2cc809, - 0x315848, - 0x239587, - 0x2399ca, - 0x253fc6, - 0x25f947, - 0x2cbe44, - 0x28f147, - 0x22964a, - 0x23d00e, - 0x278745, - 0x28f04b, - 0x229149, - 0x252d49, - 0x2add07, - 0x3bf4ca, - 0x2c1947, - 0x2f9209, - 0x3b9108, - 0x28eb4b, - 0x2e43c5, - 0x22bd4a, - 0x28fd09, - 0x37270a, - 0x2ceecb, - 0x3c514b, - 0x2415d5, - 0x2eb105, - 0x239605, - 0x2f864a, - 0x25b58a, - 0x311a07, - 0x234703, - 0x2b9388, - 0x2db00a, - 0x224086, - 0x266809, - 0x283048, - 0x2dcb04, - 0x387209, - 0x2c2988, - 0x2beec7, + 0x21ef47, + 0x27afc8, + 0x7204c82, + 0x2f6e47, + 0x2c2b84, + 0x2c2b87, + 0x3d6805, + 0x362187, + 0x2e73c6, + 0x27d8c4, + 0x328e45, + 0x256407, + 0x8a05802, + 0x3da803, + 0x21e182, + 0x369a03, + 0x8e09bc2, + 0x281705, + 0x9200202, + 0x3c2844, + 0x277445, + 0x217b07, + 0x2fdfce, + 0x2b1044, + 0x261dc4, + 0x20e5c3, + 0x251789, + 0x265f0b, + 0x273788, + 0x28dd88, + 0x2e53c8, + 0x28c008, + 0x34b28a, + 0x362087, + 0x276586, + 0x9615842, + 0x2be403, + 0x3cab03, + 0x3cd244, + 0x2be443, + 0x28ca83, + 0x1736f42, + 0x9a019c2, + 0x27e945, + 0x313dc6, + 0x2335c4, + 0x379907, + 0x263e46, + 0x2bfa04, + 0x399647, + 0x2019c3, + 0x9ecb4c2, + 0xa227682, + 0xa627442, + 0x227446, + 0xaa00282, + 0x285845, + 0x338483, + 0x3bfc44, + 0x2eddc4, + 0x2eddc5, + 0x3c7543, + 0xae48343, + 0xb338dc2, + 0x203c05, + 0x203c0b, + 0x20b24b, + 0x26bb44, + 0x204a09, + 0x205f44, + 0xb606802, + 0x207043, + 0x207183, + 0xba08082, + 0x2ed8ca, + 0xbe08342, + 0x212505, + 0x2de9ca, + 0x35cc04, + 0x208343, + 0x209ec4, + 0x20ba03, + 0x20ba04, + 0x20ba07, + 0x20c585, + 0x20d346, + 0x213006, + 0x213cc3, + 0x217f48, + 0x20db43, + 0xc209582, + 0x23d4c8, + 0x20958b, + 0x221cc8, + 0x222a86, + 0x224447, + 0x226fc8, + 0xd205b82, + 0xd6c1142, + 0x33f3c8, + 0x20f9c7, + 0x30f645, + 0x30f648, + 0xdadcf48, + 0x27ff43, + 0x22a104, + 0x38b442, + 0xde2a542, + 0xe243bc2, + 0xea2a8c2, + 0x22a8c3, + 0xee04042, + 0x30e303, + 0x237484, + 0x204043, + 0x206444, + 0x37454b, + 0x2094c3, 0x2e94c6, - 0x382b07, - 0x3503c7, - 0x23e385, - 0x2e730c, - 0x23d705, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x202782, - 0x22d7c3, - 0x206b43, - 0x2013c3, - 0x23cf83, - 0x22d7c3, - 0x206b43, - 0x13c3, - 0x2a8b03, - 0x23cf83, - 0x1cdd43, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0xa14c8, - 0x202782, - 0x22d7c3, - 0x22d7c7, - 0x206b43, - 0x23cf83, - 0x202782, - 0x203dc2, - 0x31b402, - 0x206102, - 0x200d42, - 0x2ea5c2, - 0x91d46, - 0x54389, - 0x481b683, - 0x89947, - 0x7b83, - 0x11b645, + 0x27f404, + 0x2ba20e, + 0x381e45, + 0x3a37c8, + 0x3dd347, + 0x3dd34a, + 0x22f603, + 0x243107, + 0x2660c5, + 0x22f604, + 0x250206, + 0x250207, + 0x2fc304, + 0xf30f084, + 0x2fe304, + 0x2fe306, + 0x3db9c4, + 0x3ba486, + 0x226e03, + 0x3a8908, + 0x3c38c8, + 0x291d83, + 0x2ed883, + 0x346ac4, + 0x358183, + 0xfa09382, + 0xfe8b742, + 0x20b983, + 0x240d86, + 0x329383, + 0x35b7c4, + 0x102179c2, + 0x24a583, + 0x2179c3, + 0x214c82, + 0x10600d42, + 0x2c5c86, + 0x2344c7, + 0x2f8407, + 0x3a9405, + 0x207484, + 0x29bac5, + 0x267347, + 0x3cb009, + 0x2db306, + 0x2ea9c6, + 0x10a02c82, + 0x331448, + 0x31f486, + 0x34ebc5, + 0x3ac387, + 0x306104, + 0x306105, + 0x10e02c84, + 0x202c88, + 0x11203cc2, + 0x11600482, + 0x21d746, + 0x200488, + 0x335f85, + 0x34d406, + 0x351b08, + 0x35b088, + 0x11a07d45, + 0x11e25744, + 0x322d47, + 0x122059c2, + 0x1268cac2, + 0x13a0c302, + 0x21fc45, + 0x284a05, + 0x384006, + 0x326507, + 0x3a80c7, + 0x1422c0c3, + 0x318887, + 0x3a4548, + 0x1f22c289, + 0x26d887, + 0x22c9c7, + 0x22d408, + 0x22dc06, + 0x22f106, + 0x23000c, + 0x230d0a, + 0x231b87, + 0x2336cb, + 0x234307, + 0x23430e, + 0x1f635404, + 0x235604, + 0x237347, + 0x25bfc7, + 0x23ac06, + 0x23ac07, + 0x333e47, + 0x2e4003, + 0x1fa2ae02, + 0x23bec6, + 0x23beca, + 0x23c90b, + 0x23e487, + 0x23ef05, + 0x23f443, + 0x23f946, + 0x23f947, + 0x2ef083, + 0x1fe00102, + 0x24038a, + 0x20378f82, + 0x20661482, + 0x20a3d1c2, + 0x20e36182, + 0x242505, + 0x242cc4, + 0x21659dc2, + 0x31fe05, + 0x23cf03, + 0x2954c5, + 0x2028c4, + 0x20a204, + 0x280186, + 0x27e0c6, + 0x203e03, + 0x3bcfc4, + 0x2f8703, + 0x226081c2, + 0x2247c4, + 0x3232c6, + 0x2247c5, + 0x244086, + 0x3ac488, + 0x22b144, + 0x36b888, + 0x322805, + 0x37f488, + 0x2c24c6, + 0x3049c7, + 0x287804, + 0x23a87806, + 0x23ee85c3, + 0x39c943, + 0x2ec108, + 0x331344, + 0x24361707, + 0x24abe846, + 0x2dbb09, + 0x330048, + 0x34b8c8, + 0x355644, + 0x3c6d83, + 0x23cfc2, + 0x24e4cfc2, + 0x25201d42, + 0x204583, + 0x2560a782, + 0x2ef004, + 0x24ad06, + 0x21af83, + 0x2b6387, + 0x2f7443, + 0x334888, + 0x2101c5, + 0x259203, + 0x2773c5, + 0x277504, + 0x305e06, + 0x2127c6, + 0x217a46, + 0x2203c4, + 0x2346c3, + 0x25a05202, + 0x25e2ec05, + 0x200843, + 0x2660f4c2, + 0x22c243, + 0x373605, + 0x26a32c43, + 0x27232c49, + 0x27600942, + 0x27e04282, + 0x28b045, + 0x215e46, + 0x205606, + 0x2cf508, + 0x2cf50b, + 0x32ed0b, + 0x3a9605, + 0x2cbc09, + 0x1600b42, + 0x2cfc08, + 0x204d04, + 0x28601bc2, + 0x34a603, + 0x28e5c186, + 0x33e208, + 0x29201a02, + 0x28c608, + 0x29609802, + 0x33c4ca, + 0x29a46e03, + 0x2a378046, + 0x3910c8, + 0x330906, + 0x387087, + 0x240907, + 0x3365ca, + 0x35cc84, + 0x35fe04, + 0x376889, + 0x2a7a7545, + 0x2114c6, + 0x20fbc3, + 0x24bd04, + 0x2aa0d644, + 0x344147, + 0x2aee3587, + 0x293104, + 0x236cc5, + 0x3840c8, + 0x3a03c7, + 0x243547, + 0x2b20c202, + 0x298d44, + 0x294348, + 0x2443c4, + 0x249204, + 0x249b85, + 0x249cc7, + 0x2b658549, + 0x24a804, + 0x24b0c9, + 0x24b308, + 0x24ba84, + 0x24ba87, + 0x2ba4cdc3, + 0x24d2c7, + 0x2be014c2, + 0x16b1b82, + 0x24df86, + 0x24e607, + 0x24e884, + 0x24f687, + 0x250647, + 0x2510c3, + 0x2b12c2, + 0x20bcc2, + 0x28de83, + 0x3be3c4, + 0x3be3cb, + 0x2c28de88, + 0x258bc4, + 0x254205, + 0x255c47, + 0x238a05, + 0x2d908a, + 0x258b03, + 0x2c603d42, + 0x20da44, + 0x25bd89, + 0x2601c3, + 0x260287, + 0x2683c9, + 0x3de348, + 0x23e2c3, + 0x27c387, + 0x27ce49, + 0x266883, + 0x284fc4, + 0x286209, + 0x289406, + 0x2c7d43, + 0x2076c2, + 0x235c83, + 0x2b1987, + 0x235c85, + 0x3b8806, + 0x26e144, + 0x3cc645, + 0x279803, + 0x213f06, + 0x210dc3, + 0x204c02, + 0x248304, + 0x2ca6bc02, + 0x2ce6bc03, + 0x2d2020c2, + 0x247603, + 0x213484, + 0x239bc7, + 0x216586, + 0x278042, + 0x2d65c582, + 0x3ac684, + 0x2da0bb82, + 0x2de063c2, + 0x2b36c4, + 0x2b36c5, + 0x27d545, + 0x366a06, + 0x2e204882, + 0x3bd645, + 0x3cedc5, + 0x204883, + 0x21a286, + 0x21b845, + 0x2273c2, + 0x35acc5, + 0x2273c4, + 0x22b083, + 0x22b2c3, + 0x2e61d302, + 0x256607, + 0x24b504, + 0x24b509, + 0x24bc04, + 0x284883, + 0x39bf88, + 0x2ea84884, + 0x284886, + 0x2a6b43, + 0x254c43, + 0x228b03, + 0x2eeedc82, + 0x302342, + 0x2f200642, + 0x339f48, + 0x301408, + 0x3aedc6, + 0x272945, + 0x2802c5, + 0x345387, + 0x2f677f05, + 0x220482, + 0x2fa97642, + 0x2fe00042, + 0x278cc8, + 0x31f3c5, + 0x2f3e44, + 0x243fc5, + 0x245547, + 0x27a1c4, + 0x240282, + 0x30205702, + 0x352784, + 0x222f47, + 0x28cf47, + 0x362144, + 0x3cc143, + 0x291cc4, + 0x291cc8, + 0x22f446, + 0x25008a, + 0x2eb544, + 0x296008, + 0x242ec4, + 0x224546, + 0x297604, + 0x21ff46, + 0x24b7c9, + 0x2a62c7, + 0x2087c3, + 0x306033c2, + 0x34b643, + 0x206a02, + 0x30a17d82, + 0x2fb0c6, + 0x380708, + 0x2a8787, + 0x26ad49, + 0x2ad689, + 0x2aa9c5, + 0x2abd49, + 0x2ac545, + 0x2ad385, + 0x2ae008, + 0x30e04104, + 0x31251207, + 0x22cd83, + 0x2ae207, + 0x22cd86, + 0x2ae607, + 0x2a5e45, + 0x22c603, + 0x31630ac2, + 0x208584, + 0x31a0adc2, + 0x31e04742, + 0x3ae186, + 0x27af45, + 0x2b0587, + 0x2fef43, + 0x28ca04, + 0x201e83, + 0x20f703, + 0x32203dc2, + 0x32a01cc2, + 0x38b4c4, + 0x3881c3, + 0x2fbf45, + 0x32e00f42, + 0x33602b82, + 0x2d5c86, + 0x2fdf04, + 0x303f04, + 0x303f0a, + 0x33e005c2, + 0x263f43, + 0x20cd0a, + 0x214388, + 0x34224e44, + 0x2005c3, + 0x34601803, + 0x266ac9, + 0x24d8c9, + 0x2b6486, + 0x34a14543, + 0x36f705, + 0x3b62cd, + 0x214546, + 0x219e4b, + 0x34e129c2, + 0x394608, + 0x38218042, + 0x38604dc2, + 0x2b3905, + 0x38a01742, + 0x2c67c7, + 0x214903, + 0x21ba08, + 0x38e02cc2, + 0x219384, + 0x20ff03, + 0x2f7ac5, + 0x23d006, + 0x21e244, + 0x2ed843, + 0x2b26c3, + 0x392163c2, + 0x3a9584, + 0x3b77c5, + 0x2b1587, + 0x279c43, + 0x2b2183, + 0x16b2242, + 0x2b2243, + 0x2b2643, + 0x39600e02, + 0x246b84, + 0x27e2c6, + 0x3cba43, + 0x2b2d43, + 0x39a48902, + 0x248908, + 0x2b3d84, + 0x20ed06, + 0x255087, + 0x270906, + 0x291e84, + 0x47e01b82, + 0x22cc4b, + 0x2f91ce, + 0x216c0f, + 0x292e43, + 0x48659902, + 0x163ea82, + 0x48a017c2, + 0x296583, + 0x20e883, + 0x2dd4c6, + 0x3cb286, + 0x2b0187, + 0x30b0c4, + 0x48e11902, + 0x492106c2, + 0x245005, + 0x2f1887, + 0x2b47c6, + 0x496526c2, + 0x2526c4, + 0x2b93c3, + 0x49a4e082, + 0x49f72383, + 0x2bac04, + 0x2c1d89, + 0x4a2c8c82, + 0x4a601882, + 0x201885, + 0x4aac9182, + 0x4ae03c42, + 0x35f107, + 0x377c8b, + 0x2406c5, + 0x2570c9, + 0x268746, + 0x4b207844, + 0x328949, + 0x2c9cc7, + 0x32a547, + 0x22abc3, + 0x2b3546, + 0x3246c7, + 0x20a443, + 0x291246, + 0x4ba23342, + 0x4be1d702, + 0x34b783, + 0x38c3c5, + 0x221587, + 0x3cb386, + 0x235c05, + 0x24b484, + 0x2a4d05, + 0x38cf44, + 0x4c201b02, + 0x2c71c4, + 0x267f44, + 0x38830d, + 0x37adc9, + 0x22aec8, + 0x201b04, + 0x3dad85, + 0x3a8e87, + 0x206504, + 0x263f07, + 0x2eb205, + 0x4c607b04, + 0x2a8b45, + 0x25ee84, + 0x27a306, + 0x35f885, + 0x4ca26902, + 0x21d6c3, + 0x28f783, + 0x348084, + 0x348085, + 0x37c586, + 0x235d45, + 0x3d3284, + 0x32c043, + 0x4ce0a6c6, + 0x225045, + 0x225c85, + 0x326404, + 0x2eb5c3, + 0x2eb5cc, + 0x4d204482, + 0x4d601442, + 0x4da03102, + 0x20e403, + 0x20e404, + 0x4de05f82, + 0x380d88, + 0x3b88c5, + 0x2c93c4, + 0x23aa86, + 0x4e217002, + 0x4e6115c2, + 0x4ea00c42, + 0x291a85, + 0x220286, + 0x20d584, + 0x397b86, + 0x21ed06, + 0x221983, + 0x4ee9e10a, + 0x279e05, + 0x28d9c3, + 0x2254c6, + 0x3bd449, + 0x2254c7, + 0x2a9c48, + 0x32f909, + 0x3b9e48, + 0x303706, + 0x20e583, + 0x4f21fc02, + 0x39dc88, + 0x4f644502, + 0x4fa06a42, + 0x238cc3, + 0x2e2a45, + 0x29b404, + 0x2f5d89, + 0x32acc4, + 0x3dabc8, + 0x50206a43, + 0x507749c4, + 0x215e88, + 0x388247, + 0x50a52742, + 0x22e302, + 0x32cc85, + 0x261b89, + 0x211543, + 0x27fcc4, + 0x36f6c4, + 0x20e903, + 0x2812ca, + 0x50f40d82, + 0x512083c2, + 0x2cb443, + 0x38f5c3, + 0x162c142, + 0x2bdc03, + 0x5161d902, + 0x51a00bc2, + 0x51f03f84, + 0x3b3506, + 0x269884, + 0x278b03, + 0x3bf203, + 0x52200bc3, + 0x23cc86, + 0x3a0e45, + 0x2cb5c7, + 0x2cf7c6, + 0x2d0648, + 0x2d0846, + 0x2035c4, + 0x29cd0b, + 0x2d3643, + 0x2d3645, + 0x21fdc2, + 0x35f402, + 0x52642582, + 0x52a05a02, + 0x215fc3, + 0x52e6bf42, + 0x26bf43, + 0x2d46c3, + 0x5360cac2, + 0x53ad9bc6, + 0x257906, + 0x53ed9d02, + 0x542071c2, + 0x5462b302, + 0x54a09082, + 0x54e18942, + 0x552050c2, + 0x208b03, + 0x26cb45, + 0x379b06, + 0x55617b84, + 0x3230ca, + 0x3a5d46, + 0x20bdc4, + 0x28dd43, + 0x56212b02, + 0x205642, + 0x22c203, + 0x5660a803, + 0x3b8307, + 0x35f787, + 0x58ae4447, + 0x39e847, + 0x229183, + 0x333b4a, + 0x340644, + 0x319084, + 0x31908a, + 0x3a8205, + 0x58e11482, + 0x24df43, + 0x59200602, + 0x24bbc3, + 0x34b603, + 0x59a00582, + 0x3a44c4, + 0x345584, + 0x3b0645, + 0x31e4c5, + 0x2e4a06, + 0x304146, + 0x59e39242, + 0x5a202f42, + 0x33d185, + 0x257612, + 0x353286, + 0x270e03, + 0x356606, + 0x31cd05, + 0x16045c2, + 0x626080c2, + 0x376203, + 0x2080c3, + 0x396203, + 0x62a18d42, + 0x23a183, + 0x63223242, + 0x220103, + 0x300808, + 0x239503, + 0x239506, + 0x3c4d87, + 0x321186, + 0x32118b, + 0x20bd07, + 0x2ebf04, + 0x63a00c02, + 0x3b8745, + 0x63e09783, + 0x21d283, + 0x2e60c5, + 0x333a43, + 0x64733a46, + 0x3c8fca, + 0x2a3fc3, + 0x235f44, + 0x2003c6, + 0x34efc6, + 0x64a16603, + 0x340007, + 0x2669c7, + 0x29e985, + 0x26f486, + 0x2158c3, + 0x6761a4c3, + 0x67a00a82, + 0x67e8f804, + 0x3c36c9, + 0x2137c5, + 0x229bc4, + 0x354e88, + 0x2e47c5, + 0x682352c5, + 0x23f549, + 0x344a43, + 0x261404, + 0x686161c2, + 0x2161c3, + 0x68a74542, + 0x274546, + 0x1678002, + 0x68e08f82, + 0x291988, + 0x291c83, + 0x2a8a87, + 0x2b2745, + 0x2b22c5, + 0x2b22cb, + 0x2e8206, + 0x2b24c6, + 0x23bb44, + 0x2e8946, + 0x69321408, + 0x27f4c3, + 0x264503, + 0x264504, + 0x2e51c4, + 0x2ea707, + 0x2ec545, + 0x696ec682, + 0x69a08242, + 0x6a21ae45, + 0x2b8f44, + 0x2d244b, + 0x2edcc8, + 0x250f44, + 0x6a62ad42, + 0x6aa23c42, + 0x3ba403, + 0x2efb84, + 0x2efe45, + 0x2f0607, + 0x2f3984, + 0x362244, + 0x6ae16102, + 0x37b5c9, + 0x2f4c05, + 0x240985, + 0x2f5cc5, + 0x6b216103, + 0x2f67c4, + 0x2f67cb, + 0x2f8a84, + 0x2f8d4b, + 0x2f95c5, + 0x216d4a, + 0x2f9e88, + 0x2fa08a, + 0x2fa883, + 0x2fa88a, + 0x6ba13602, + 0x6be20082, + 0x6c2ba0c3, + 0x6c6fdb02, + 0x2fdb03, + 0x6caed182, + 0x6cf38c02, + 0x301f04, + 0x218086, + 0x3978c5, + 0x303c03, + 0x32d3c6, + 0x3973c5, + 0x3d2dc4, + 0x6d200902, + 0x29fc84, + 0x2cb88a, + 0x3001c7, + 0x32a006, + 0x242f47, + 0x23bf03, + 0x2bac48, + 0x3c608b, + 0x2b6585, + 0x2c26c5, + 0x2c26c6, + 0x229984, + 0x3a4f48, + 0x20f883, + 0x25b984, + 0x336947, + 0x2ebb46, + 0x340846, + 0x2ba04a, + 0x24b144, + 0x31b14a, + 0x6d7009c6, + 0x3009c7, + 0x254287, + 0x273f04, + 0x273f09, + 0x251e05, + 0x234f8b, + 0x2ed083, + 0x212983, + 0x6da1de03, + 0x331d84, + 0x6de00682, + 0x228906, + 0x6e2bb4c5, + 0x356845, + 0x24e1c6, + 0x2a1384, + 0x6e602442, + 0x23f484, + 0x6ea0a982, + 0x3287c5, + 0x34c884, + 0x6f61b443, + 0x6fa08102, + 0x208103, + 0x3062c6, + 0x6fe04e82, + 0x392248, + 0x225344, + 0x225346, + 0x38fe46, + 0x70255d04, + 0x20a645, + 0x225648, + 0x227187, + 0x34e087, + 0x34e08f, + 0x294246, + 0x23b743, + 0x23fac4, + 0x20dc83, + 0x224684, + 0x24e784, + 0x706085c2, + 0x28b443, + 0x335543, + 0x70a09482, + 0x209483, + 0x227603, + 0x20c60a, + 0x272bc7, + 0x25398c, + 0x70e53c46, + 0x253dc6, + 0x254d87, + 0x7122d847, + 0x25aac9, + 0x23d604, + 0x71660404, + 0x71a16002, + 0x71e02e42, + 0x2ba406, + 0x33fe04, + 0x28b8c6, + 0x22dcc8, + 0x38c484, + 0x2d7b46, + 0x2055c5, + 0x7228a748, + 0x23fa43, + 0x314705, + 0x28dc43, + 0x240a83, + 0x240a84, + 0x20da03, + 0x72648d42, + 0x72a03382, + 0x2ecf49, + 0x291b85, + 0x292544, + 0x296b45, + 0x209b04, + 0x2cd147, + 0x35a545, + 0x72e46484, + 0x2d2088, + 0x2d2f86, + 0x2dedc4, + 0x2e13c8, + 0x2e1a07, + 0x73201702, + 0x2e99c4, + 0x310d44, + 0x2c2d87, + 0x73605bc4, + 0x215782, + 0x73a01782, + 0x201783, + 0x201784, + 0x29f703, + 0x2aed05, + 0x73e2e942, + 0x302245, + 0x287582, + 0x30a205, + 0x3c0085, + 0x74210342, + 0x217944, + 0x74602602, + 0x28eb86, + 0x2bf706, + 0x261cc8, + 0x2c3748, + 0x3ae104, + 0x30ed05, + 0x3abbc9, + 0x2cfd44, + 0x3c8f84, + 0x2204c3, + 0x319c83, + 0x74b19c85, + 0x2411c5, + 0x284b04, + 0x356bcd, + 0x293042, + 0x359103, + 0x74e09442, + 0x75203a42, + 0x391d05, + 0x3babc7, + 0x21e484, + 0x32fb09, + 0x2cb9c9, + 0x277e43, + 0x277e48, + 0x245e09, + 0x214947, + 0x204185, + 0x37c106, + 0x37ec86, + 0x3808c5, + 0x37aec5, + 0x75601a82, + 0x287205, + 0x2b7748, + 0x2c5a46, + 0x75a52b07, + 0x2bd2c4, + 0x2fc647, + 0x305546, + 0x75e01082, + 0x37c286, + 0x30988a, + 0x30a105, + 0x762e8f82, + 0x76621902, + 0x3645c6, + 0x221908, + 0x76a8d107, + 0x76e43b02, + 0x288ec3, + 0x2ff806, + 0x226884, + 0x275b06, + 0x319f46, + 0x2034ca, + 0x2021c5, + 0x3006c6, + 0x2520c3, + 0x2520c4, + 0x207442, + 0x331403, + 0x7720e442, + 0x2f1803, + 0x7760cf84, + 0x221a44, + 0x77a21a4a, + 0x22ce03, + 0x266c87, + 0x30d106, + 0x2ff144, + 0x20bc82, + 0x2a6f02, + 0x77e007c2, + 0x22b9c3, + 0x254047, + 0x2007c7, + 0x287dc4, + 0x3d0847, + 0x2f0706, + 0x20fb07, + 0x227544, + 0x292445, + 0x2187c5, + 0x78214682, + 0x3b2f46, + 0x215943, + 0x21e0c2, + 0x21e0c6, + 0x78621542, + 0x78a19f82, + 0x298e05, + 0x78e47c82, + 0x79201942, + 0x324c85, + 0x2d3985, + 0x2a9385, + 0x79a1d043, + 0x24adc5, + 0x2e82c7, + 0x2f3505, + 0x202385, + 0x32b944, + 0x229a46, + 0x3dd844, + 0x79e008c2, + 0x7ab82d05, + 0x3c9447, + 0x3afe08, + 0x24d686, + 0x38bb4d, + 0x24d689, + 0x24d692, + 0x34cf05, + 0x37aa03, + 0x7ae06902, + 0x319b44, + 0x2145c3, + 0x38d005, + 0x30b405, + 0x7b20ff42, + 0x259243, + 0x7b62b902, + 0x7beca302, + 0x7c200082, + 0x2e08c5, + 0x2088c3, + 0x7c60fa02, + 0x7ca14302, + 0x3a4486, + 0x27ac8a, + 0x208c83, + 0x256203, + 0x2f6ac3, + 0x7de05402, + 0x8c218d82, + 0x8ca05782, + 0x217042, + 0x3cd2c9, + 0x2c80c4, + 0x2d6648, + 0x8cefbb02, + 0x8d60ff82, + 0x2c4e85, + 0x233b08, + 0x23c708, + 0x315b0c, + 0x237843, + 0x8da08842, + 0x8de00f02, + 0x3b9686, + 0x30df85, + 0x2dae43, + 0x252f86, + 0x30e0c6, + 0x27a383, + 0x310c83, + 0x311346, + 0x312bc4, + 0x263546, + 0x3b610a, + 0x23fbc4, + 0x313284, + 0x314aca, + 0x8e212f42, + 0x24cf45, + 0x31634a, + 0x316285, + 0x317c04, + 0x317d06, + 0x317e84, + 0x216486, + 0x8e615482, + 0x215486, + 0x251a45, + 0x3b2dc7, + 0x3b5f86, + 0x254f84, + 0x2db0c7, + 0x20a4c5, + 0x20a4c7, + 0x3b7147, + 0x3b714e, + 0x389606, + 0x22a785, + 0x205b07, + 0x207203, + 0x207207, + 0x21e905, + 0x225944, + 0x22a582, + 0x23db47, + 0x30b144, + 0x241b04, + 0x285f4b, + 0x21c283, + 0x2bc607, + 0x21c284, + 0x2bc907, + 0x229683, + 0x350f8d, + 0x3a0c48, + 0x8ea46384, + 0x246385, + 0x3194c5, + 0x319903, + 0x8ee25242, + 0x31c243, + 0x31d283, + 0x3b30c4, + 0x27cf45, + 0x2159c7, + 0x252146, + 0x38cdc3, + 0x22b34b, + 0x27350b, + 0x2ac28b, + 0x3cad8b, + 0x2e8fca, + 0x36f44b, + 0x39334b, + 0x3d950c, + 0x3dcb4b, + 0x31ddd1, + 0x31e20a, + 0x31e70b, + 0x31e9cc, + 0x31eccb, + 0x31ff4a, + 0x3206ca, + 0x321ece, + 0x32344b, + 0x32370a, + 0x324dd1, + 0x32520a, + 0x32570b, + 0x325c4e, + 0x326b4c, + 0x32738b, + 0x32764e, + 0x3279cc, + 0x32b40a, + 0x32c64c, + 0x8f32c94a, + 0x32d548, + 0x32e109, + 0x33204a, + 0x3322ca, + 0x33254b, + 0x334cce, + 0x335b91, + 0x341509, + 0x34174a, + 0x34244b, + 0x34634d, + 0x3471ca, + 0x348716, + 0x349a8b, + 0x34a80a, + 0x34ad8a, + 0x34c10b, + 0x34c989, + 0x351909, + 0x351e8d, + 0x35250b, + 0x35340b, + 0x353dcb, + 0x3543c9, + 0x354a0e, + 0x35520a, + 0x35608a, + 0x35698a, + 0x35724b, + 0x357a8b, + 0x35890d, + 0x35a04d, + 0x35a950, + 0x35ae0b, + 0x35b90c, + 0x35cecb, + 0x35ec0b, + 0x3602ce, + 0x3609cb, + 0x3609cd, + 0x36550b, + 0x365f8f, + 0x36634b, + 0x366b8a, + 0x3678c9, + 0x367f89, + 0x8f7689cb, + 0x368c8e, + 0x36900e, + 0x36cecb, + 0x36e00f, + 0x37024b, + 0x37050b, + 0x3707cb, + 0x370e8a, + 0x377889, + 0x37a00f, + 0x37e9cc, + 0x37ee0c, + 0x37f8ce, + 0x37fe4f, + 0x38020e, + 0x381310, + 0x38170f, + 0x3822ce, + 0x382e8c, + 0x383191, + 0x3835d2, + 0x384ad1, + 0x3852ce, + 0x38570b, + 0x38570e, + 0x385a8f, + 0x385e4e, + 0x3861d3, + 0x386691, + 0x386acc, + 0x386dce, + 0x38724c, + 0x387793, + 0x388650, + 0x38a34c, + 0x38a64c, + 0x38ab0b, + 0x38b0ce, + 0x38b5cb, + 0x38be8b, + 0x38d30c, + 0x39278a, + 0x392b4c, + 0x392e4c, + 0x393149, + 0x39494b, + 0x394c08, + 0x3953c9, + 0x3953cf, + 0x396c8b, + 0x8fb9800a, + 0x399fcc, + 0x39b18b, + 0x39b449, + 0x39bbc8, + 0x39c18b, + 0x39c70b, + 0x39d28a, + 0x39d50b, + 0x39da0c, + 0x39e3c9, + 0x39e608, + 0x3a0f8b, + 0x3a3ccb, + 0x3a694e, + 0x3a7e4b, + 0x3aabcb, + 0x3b6ccb, + 0x3b6f89, + 0x3b74cd, + 0x3c9e8a, + 0x3cdd57, + 0x3cf418, + 0x3d41c9, + 0x3d530b, + 0x3d5814, + 0x3d5d0b, + 0x3d628a, + 0x3d694a, + 0x3d6bcb, + 0x3d7410, + 0x3d7811, + 0x3d7eca, + 0x3d8b0d, + 0x3d920d, + 0x3ddd8b, + 0x3b3043, + 0x8ff83d43, + 0x32af06, + 0x22ef05, + 0x307347, + 0x332e46, + 0x1602d42, + 0x2ab3c9, + 0x32d1c4, + 0x2e4d08, + 0x21dd43, + 0x319a87, + 0x22de82, + 0x2b05c3, + 0x902057c2, + 0x2cc446, + 0x2cdb04, + 0x347d04, + 0x346243, + 0x90ac91c2, + 0x90e2a444, + 0x273e47, + 0x9122a1c2, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x111148, + 0x20ca43, + 0x2000c2, + 0x9fe08, + 0x20c302, + 0x228b03, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x20c603, + 0x33b8d6, + 0x363e93, + 0x3d06c9, + 0x322c48, + 0x3b85c9, + 0x3164c6, + 0x3527d0, + 0x20c013, + 0x2ebc08, + 0x27a947, + 0x286b07, + 0x2a4a4a, + 0x3291c9, + 0x28f509, + 0x24224b, + 0x2e73c6, + 0x28830a, + 0x222a86, + 0x32cdc3, + 0x256545, + 0x3a8908, + 0x233fcd, + 0x21fd0c, + 0x2eaac7, + 0x3dcdcd, + 0x225744, + 0x22fd8a, + 0x23084a, + 0x230d0a, + 0x20c307, + 0x23a907, + 0x23da84, + 0x287806, + 0x251c04, + 0x2d58c8, + 0x32ad09, + 0x2cf506, + 0x2cf508, + 0x240dcd, + 0x2cbc09, + 0x3910c8, + 0x240907, + 0x23750a, + 0x24e606, + 0x25b7c7, + 0x2fb704, + 0x20b6c7, + 0x228b0a, + 0x239d4e, + 0x277f05, + 0x3d7c0b, + 0x22b709, + 0x24d8c9, + 0x2c6607, + 0x3c138a, + 0x2c2cc7, + 0x2f9309, + 0x27b408, + 0x2e640b, + 0x2e2a45, + 0x22ad8a, + 0x22b0c9, + 0x33e68a, + 0x20460b, + 0x20b5cb, + 0x241fd5, + 0x2c1f85, + 0x240985, + 0x2f67ca, + 0x3dbb0a, + 0x31b687, + 0x233c43, + 0x2ba388, + 0x2d80ca, + 0x225346, + 0x2592c9, + 0x28a748, + 0x2dedc4, + 0x387549, + 0x2c3748, + 0x2c2407, + 0x382d06, + 0x3c9447, + 0x2b4607, + 0x23ca85, + 0x2e450c, + 0x246385, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0xca43, + 0x216603, + 0x20c302, + 0x22c0c3, + 0x20a803, + 0x20ca43, + 0x216603, + 0x22c0c3, + 0x20a803, + 0xca43, + 0x239503, + 0x216603, + 0x1ca243, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x9fe08, + 0x20c302, + 0x22c0c3, + 0x22c0c7, + 0x20a803, + 0x216603, + 0x20c302, + 0x201d02, + 0x2ebe82, + 0x202cc2, + 0x202f82, + 0x2e5382, + 0x91746, + 0x4e9c9, + 0x481b443, + 0x88147, + 0x5b03, + 0x119045, 0xc1, - 0x522d7c3, - 0x233743, - 0x228843, - 0x220583, - 0x219e43, - 0x205e03, - 0x2dc7c6, - 0x206b43, - 0x23cf83, - 0x204283, - 0xa14c8, - 0x200984, - 0x30ad47, - 0x332843, - 0x375e04, - 0x21a5c3, - 0x212003, - 0x220583, - 0x14c47, - 0x109744, - 0x3283, - 0x131905, + 0x522c0c3, + 0x232c43, + 0x212483, + 0x228b03, + 0x214543, + 0x211543, + 0x2d9fc6, + 0x20a803, + 0x216603, + 0x20f803, + 0x9fe08, + 0x3443c4, + 0x374787, + 0x346283, + 0x2b3904, + 0x218c83, + 0x286243, + 0x228b03, + 0x176c87, + 0x9c4, + 0x11c3, + 0x2b05, 0x2000c2, - 0x4ce83, - 0x6602782, - 0x688bc49, - 0x8c5cd, - 0x8c90d, - 0x31b402, - 0x22884, - 0x131949, + 0x48343, + 0x660c302, + 0x688a549, + 0x8abcd, + 0x8af0d, + 0x2ebe82, + 0x24e44, + 0x2b49, 0x2003c2, - 0x6e22788, - 0xf7dc4, - 0xa14c8, - 0x1419a42, + 0x6e24d48, + 0xf61c4, + 0x9fe08, + 0x1417c42, 0x14005c2, - 0x1419a42, - 0x1517386, - 0x22f303, - 0x26f283, - 0x762d7c3, - 0x230944, - 0x7a33743, - 0x7e20583, - 0x2067c2, - 0x222884, - 0x206b43, - 0x305f83, - 0x201642, - 0x23cf83, - 0x218142, - 0x2ffb03, - 0x209482, - 0x207043, - 0x283103, - 0x205302, - 0xa14c8, - 0x22f303, - 0x305f83, - 0x201642, - 0x2ffb03, - 0x209482, - 0x207043, - 0x283103, - 0x205302, - 0x2ffb03, - 0x209482, - 0x207043, - 0x283103, - 0x205302, - 0x22d7c3, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x219e43, - 0x205e03, - 0x205184, - 0x206b43, - 0x23cf83, - 0x202102, - 0x213c43, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x206b43, - 0x23cf83, - 0x3da885, - 0x2195c2, + 0x1417c42, + 0x1513486, + 0x22df03, + 0x26fb43, + 0x762c0c3, + 0x22fd84, + 0x7a32c43, + 0x8628b03, + 0x203dc2, + 0x224e44, + 0x20a803, + 0x2e59c3, + 0x201e02, + 0x216603, + 0x2185c2, + 0x301e43, + 0x204e82, + 0x203303, + 0x28a803, + 0x205842, + 0x9fe08, + 0x22df03, + 0x3c38c8, + 0x7ee59c3, + 0x201e02, + 0x301e43, + 0x204e82, + 0x8203303, + 0x28a803, + 0x205842, + 0x253c47, + 0x232c49, + 0x301e43, + 0x204e82, + 0x203303, + 0x28a803, + 0x205842, + 0x22c0c3, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x214543, + 0x211543, + 0x217b84, + 0x20a803, + 0x216603, + 0x20b142, + 0x216103, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x20a803, + 0x216603, + 0x204185, + 0x20ff42, 0x2000c2, - 0xa14c8, - 0x144b148, - 0x103e4a, - 0x220583, - 0x207881, - 0x2009c1, + 0x9fe08, + 0x14470c8, + 0xf704a, + 0x228b03, 0x203281, - 0x202ec1, - 0x200a41, - 0x20c101, + 0x2009c1, 0x200a01, - 0x228441, - 0x207901, + 0x201301, + 0x201281, + 0x207101, + 0x2027c1, + 0x2223c1, + 0x203bc1, 0x200001, 0x2000c1, 0x200201, - 0x12dac5, - 0xa14c8, + 0x12eb85, + 0x9fe08, 0x200101, - 0x200f01, + 0x2015c1, 0x200501, - 0x202401, + 0x2014c1, 0x200041, 0x200801, 0x200181, - 0x202d41, + 0x200e01, 0x200701, 0x2004c1, - 0x200c01, + 0x200bc1, 0x200581, 0x2003c1, - 0x201001, - 0x215f41, + 0x200a81, + 0x209101, 0x200401, 0x200741, 0x2007c1, 0x200081, - 0x206841, - 0x201ec1, - 0x203301, - 0x201081, - 0x20a781, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x202782, - 0x22d7c3, - 0x233743, + 0x200f01, + 0x205841, + 0x201241, + 0x2018c1, + 0x204981, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x20c302, + 0x22c0c3, + 0x232c43, 0x2003c2, - 0x23cf83, - 0x1b043, - 0x14c47, - 0x5f07, - 0x29f46, - 0x3530a, - 0x8b088, - 0x58748, - 0x58c07, - 0x108a46, - 0xe3485, - 0x45585, - 0x125d43, - 0x5bac6, - 0xec046, - 0x241844, - 0x37e847, - 0xa14c8, - 0x2dd2c4, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x2782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x32ba88, - 0x201844, - 0x233684, - 0x22afc4, - 0x349547, - 0x2d9947, - 0x22d7c3, - 0x23620b, - 0x31fb4a, - 0x3cc247, - 0x306588, - 0x328108, - 0x233743, - 0x336447, - 0x228843, - 0x20d348, - 0x210b49, - 0x222884, - 0x219e43, - 0x2fee88, - 0x205e03, - 0x2d618a, - 0x2dc7c6, - 0x3aa407, - 0x206b43, - 0x394486, - 0x26f108, - 0x23cf83, - 0x25ae06, - 0x2ef84d, - 0x2f1f08, - 0x2f898b, - 0x2bff86, - 0x3416c7, - 0x214dc5, - 0x2d5dca, - 0x228105, - 0x24308a, - 0x2195c2, - 0x207b83, - 0x231784, + 0x216603, + 0x1ae03, + 0x176c87, + 0x11647, + 0x39346, + 0x3484a, + 0x89988, + 0x53388, + 0x53f47, + 0xbdc06, + 0xe1145, + 0x175305, + 0x125b03, + 0x13686, + 0x3e006, + 0x242244, + 0x2f6d07, + 0x9fe08, + 0x2db1c4, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0xc302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x32cb48, + 0x345344, + 0x232b84, + 0x26bb44, + 0x3b9587, + 0x2d6b87, + 0x22c0c3, + 0x23560b, + 0x37400a, + 0x2ff007, + 0x308a08, + 0x2f7b48, + 0x232c43, + 0x2e6687, + 0x212483, + 0x204f48, + 0x209c89, + 0x224e44, + 0x214543, + 0x238cc8, + 0x211543, + 0x2d378a, + 0x2d9fc6, + 0x3a5d47, + 0x20a803, + 0x373846, + 0x26f9c8, + 0x216603, + 0x2433c6, + 0x2edf0d, + 0x2f0348, + 0x2f8a8b, + 0x20b186, + 0x3baac7, + 0x212605, + 0x3c554a, + 0x222085, + 0x2410ca, + 0x20ff42, + 0x205b03, + 0x241b04, 0x200006, - 0x3b0ec3, - 0x2a13c3, - 0x24de03, - 0x201843, - 0x372dc3, - 0x2017c2, - 0x300745, - 0x2a9049, - 0x23ea03, - 0x20a683, - 0x202b03, - 0x200201, - 0x2e8d87, - 0x2c8885, - 0x398a83, - 0x3c4703, - 0x22afc4, - 0x32f383, - 0x21c1c8, - 0x367603, - 0x31454d, - 0x26bc48, - 0x20b546, - 0x332d03, - 0x38d543, - 0x3ac783, - 0xbe2d7c3, - 0x232f88, - 0x236204, - 0x23fec3, - 0x200106, - 0x243608, - 0x202943, - 0x2d5e03, - 0x22d943, - 0x233743, - 0x210483, - 0x2416c3, - 0x2a6003, - 0x332c83, - 0x209c83, - 0x202403, - 0x38a7c5, - 0x254344, - 0x254cc7, - 0x2b06c2, - 0x2584c3, - 0x25af86, - 0x25c303, - 0x25c9c3, - 0x278643, - 0x309303, - 0x202383, - 0x2973c7, - 0xc220583, - 0x24b543, - 0x3d54c3, - 0x209a03, - 0x219c83, - 0x2fe043, - 0x3b4d05, - 0x371983, - 0x2f9f89, - 0x2035c3, - 0x30e7c3, - 0xc636803, - 0x3d8883, - 0x21b888, - 0x2a8f86, - 0x3090c6, - 0x29d786, - 0x388307, - 0x226b83, - 0x22a243, - 0x205e03, - 0x28b186, - 0x2104c2, - 0x2a6343, - 0x33d1c5, - 0x206b43, - 0x31aa87, - 0x16013c3, - 0x26f103, - 0x234203, - 0x218003, - 0x2050c3, - 0x23cf83, - 0x20e486, - 0x3315c6, - 0x37a043, - 0x2f0b83, - 0x213c43, - 0x225983, - 0x3c2083, - 0x2fe543, - 0x2ffec3, - 0x216345, - 0x25b583, - 0x378b46, - 0x32f608, - 0x217d43, - 0x274f89, - 0x363108, - 0x2170c8, - 0x224385, - 0x37cc0a, - 0x39da8a, - 0x22e30b, - 0x22f448, - 0x2ee443, - 0x38bc03, - 0x2f88c3, - 0x30f848, - 0x35e143, - 0x32e244, - 0x202742, - 0x260403, - 0x2007c3, - 0x229343, - 0x2572c3, - 0x204283, - 0x2195c2, - 0x227d43, - 0x239d03, - 0x317503, - 0x318c44, - 0x231784, - 0x228c83, - 0xa14c8, - 0x2000c2, - 0x200b02, - 0x2017c2, - 0x2020c2, - 0x200202, - 0x201942, - 0x258542, - 0x201242, - 0x200382, - 0x201442, - 0x25e5c2, - 0x200e82, - 0x26cec2, - 0x201002, - 0x2ea5c2, - 0x202142, - 0x203d42, - 0x213c42, - 0x2b0942, - 0x206382, - 0x200682, - 0x214582, - 0x202542, - 0x202002, - 0x201bc2, - 0x236082, - 0x202b42, - 0xc2, - 0xb02, - 0x17c2, - 0x20c2, - 0x202, - 0x1942, - 0x58542, - 0x1242, - 0x382, - 0x1442, - 0x5e5c2, - 0xe82, - 0x6cec2, - 0x1002, - 0xea5c2, - 0x2142, - 0x3d42, - 0x13c42, - 0xb0942, - 0x6382, - 0x682, - 0x14582, - 0x2542, - 0x2002, - 0x1bc2, - 0x36082, - 0x2b42, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x1ec2, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x2782, - 0x202782, - 0x23cf83, - 0xde2d7c3, - 0x220583, - 0x205e03, - 0x6df83, - 0x22ebc2, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x6df83, - 0x23cf83, - 0xa842, - 0x2001c2, - 0x1445d45, - 0x12dac5, - 0x20b342, - 0xa14c8, - 0x2782, - 0x234f42, - 0x202282, - 0x201c42, - 0x205d42, - 0x24fd42, - 0x45585, - 0x201fc2, - 0x201642, - 0x21a682, - 0x202b82, - 0x202142, - 0x3a1602, - 0x203842, - 0x295a82, - 0xef0b404, - 0x142, - 0x14c47, - 0x1a108d, - 0xe3509, - 0xaea4b, - 0xe80c8, - 0x71f49, - 0x10f346, - 0x220583, - 0xa14c8, - 0x109744, - 0x3283, - 0x131905, - 0xa14c8, - 0xdffc7, - 0x59706, - 0x131949, - 0x14a0e, - 0x137987, - 0x2000c2, - 0x241844, - 0x202782, - 0x22d7c3, - 0x203dc2, - 0x233743, - 0x19d03, - 0x200382, - 0x2dd2c4, - 0x219e43, - 0x24ab82, - 0x206b43, - 0x2003c2, - 0x23cf83, - 0x239606, - 0x3343cf, - 0x602, - 0x7094c3, - 0xa14c8, - 0x202782, - 0x228843, - 0x220583, - 0x205e03, - 0x13c3, - 0x14a08, - 0x14d5b8b, - 0x153f50a, - 0x148e24a, - 0x14726c7, - 0xa3bcb, - 0x15e1c5, - 0x11a7c9, - 0x12dac5, - 0x14c47, - 0xf5744, - 0x202782, - 0x22d7c3, - 0x220583, - 0x206b43, - 0x2000c2, - 0x201cc2, - 0x33b5c2, - 0x1222d7c3, - 0x23c842, - 0x233743, + 0x3ae643, + 0x29fd03, + 0x258783, + 0x20f643, + 0x373c83, 0x203582, - 0x20a1c2, - 0x220583, - 0x2068c2, - 0x272142, - 0x2ab1c2, - 0x202082, - 0x291a82, - 0x200802, - 0x2012c2, - 0x207102, - 0x27a482, - 0x201d02, - 0x18c3cc, - 0x2b1402, - 0x2efdc2, - 0x21d882, - 0x241442, - 0x205e03, - 0x200c02, - 0x206b43, - 0x209b42, - 0x2d43c2, - 0x23cf83, - 0x23ea82, - 0x202002, - 0x200ec2, - 0x201282, - 0x215042, - 0x2e9d02, - 0x219f82, - 0x25b8c2, - 0x220d02, - 0x323aca, - 0x3660ca, - 0x39858a, - 0x3dce42, - 0x218b42, - 0x3b4cc2, - 0x12644509, - 0x12b63a0a, - 0x142e5c7, - 0x12e04d82, - 0x140abc3, - 0x2e82, - 0x163a0a, - 0x1878ce, - 0x24ec04, - 0x5bd85, - 0x1362d7c3, - 0x3d4c3, - 0x233743, - 0x251184, - 0x1c1f46, - 0x220583, - 0x222884, - 0x219e43, - 0x13ee09, - 0x157646, - 0x205e03, - 0xe9644, - 0x10a4c3, - 0x206b43, - 0xfc85, - 0x2013c3, - 0x23cf83, - 0x14e60c4, - 0x25b583, - 0x6a04, - 0x207b83, - 0xa14c8, - 0x109406, - 0x15089c4, - 0x132605, - 0x13774a, - 0x12b382, - 0x1a7b46, - 0x48fd1, - 0x13e44509, - 0x132688, - 0x50308, - 0x1c6547, - 0x2442, - 0xe834e, - 0x12dacb, - 0x132e0b, - 0x19018a, - 0x89a4a, - 0x2afc7, - 0xa14c8, - 0x11d0c8, - 0x7947, - 0x1a81414b, - 0x1b047, - 0x1c742, - 0x7dc87, - 0xd4b8a, - 0x48a4f, - 0x4604f, - 0xd5e42, - 0x2782, - 0xa5f48, - 0xe1f0a, - 0xdfaca, - 0x54a4a, - 0x6ba48, - 0xe188, - 0x5d448, - 0xdff88, - 0x173088, - 0x2942, - 0x45dcf, - 0xa0d8b, - 0x6c648, - 0x3fbc7, - 0x374a, - 0x19ee0b, - 0x80b89, - 0x4aac7, - 0xe088, - 0x19dc4c, - 0x1a0047, - 0x6644a, - 0x18b08, - 0x29f4e, - 0x2a70e, - 0x2ae0b, - 0x3850b, - 0xde14b, - 0xe4b09, - 0xe518b, - 0xebb0d, - 0x10138b, - 0x110d0d, - 0x11108d, - 0x103c8a, - 0x315cb, - 0x3d54b, - 0x18af05, - 0x1ac24b50, - 0x168cf, - 0x10b5cf, - 0xe558d, - 0x13efd0, - 0x758c2, - 0x1b21e488, - 0x5d88, - 0x6e4d0, - 0x11e60e, - 0x1b7675c5, - 0x5010b, - 0x13df10, - 0x57d48, - 0xe28a, - 0x386c9, - 0x64b87, - 0x64ec7, - 0x65087, - 0x659c7, - 0x66b87, - 0x67107, - 0x67807, - 0x67d47, - 0x68287, - 0x68607, - 0x68cc7, - 0x68e87, - 0x69047, - 0x69207, - 0x69947, - 0x69cc7, - 0x6a787, - 0x6ab47, - 0x6b107, - 0x6b3c7, - 0x6b587, - 0x6c8c7, - 0x6cd87, - 0x6cf87, - 0x6d347, - 0x6d507, - 0x6d6c7, - 0x6ee07, - 0x70247, - 0x70647, - 0x70e07, - 0x710c7, - 0x71447, - 0x71607, - 0x71a07, - 0x72f87, - 0x739c7, - 0x73f47, - 0x74107, - 0x742c7, - 0x75b07, - 0x76587, - 0x76ac7, - 0x770c7, - 0x77287, - 0x77607, - 0x77b47, - 0x37482, - 0x5d54a, - 0xe9787, - 0x8b705, - 0x9a3d1, - 0x1d21c6, - 0xf2f0a, - 0xa5dca, - 0x59706, - 0x15578b, - 0x642, - 0x2fad1, - 0xb3dc9, - 0x967c9, - 0x7102, - 0x8898a, - 0xa8549, - 0xa8c8f, - 0xa928e, - 0xaa8c8, - 0x373c2, - 0x108f09, - 0x19774e, - 0x1c848c, - 0xeaa8f, - 0x1b174e, - 0x8284c, - 0xe4e09, - 0xe6711, - 0xe6cc8, - 0x19e052, - 0x19f60d, - 0x6eacd, - 0x16f00b, - 0x4da95, - 0x504c9, - 0x5c44a, - 0x73109, - 0x82c50, - 0x8700b, - 0x16e18f, - 0x1ca50b, - 0x916cc, - 0x93b50, - 0xa4cca, - 0xa620d, - 0xac4ce, - 0xae70a, - 0xaf0cc, - 0x150094, - 0xb3a51, - 0xb7f0b, - 0xb8f0f, - 0xb9d0d, - 0xba58e, - 0xbed8c, - 0xc1d8c, - 0xc304b, - 0xc3a0e, - 0xc42d0, - 0xc548b, - 0x134c0d, - 0x14288f, - 0xcfc0c, - 0xd0dce, - 0xd2d11, - 0xda08c, - 0xf5587, - 0xfc78d, - 0x11274c, - 0x1cf090, - 0x102dcd, - 0x11ac07, - 0x15c2d0, - 0x16f588, - 0x184ccb, - 0xb018f, - 0x17f8c8, - 0xf310d, - 0x107d10, - 0x175889, - 0x1bab22c6, - 0xb3143, - 0xba245, - 0x53a42, - 0x3bc9, - 0x5a34a, - 0x1bf9e506, - 0x1c27de84, - 0x5acc6, - 0x1d3ca, - 0xe5d0d, - 0x1c5313c9, - 0x19a03, - 0x114e0a, - 0xde5d1, - 0xdea09, - 0xdfa47, - 0xe0808, - 0xe0e07, - 0xe9848, - 0x45ecb, - 0x12d8c9, - 0xe9fd0, - 0xea48c, - 0xeaf48, - 0xeb3c5, - 0x1b9288, - 0x1bcd8a, - 0x19ac7, - 0x12e547, - 0x13c2, - 0x13ec0a, - 0x147488, - 0x1c3689, - 0x78505, - 0x11a90a, - 0x8f40f, - 0x12a2cb, - 0x1b4dcc, - 0x15c812, - 0x78845, - 0xed2c8, - 0x51c0a, - 0x1caf7605, - 0x17770c, - 0x13b403, - 0x1a1602, - 0x10004a, - 0x15003cc, - 0x1a03c8, - 0x110ec8, - 0x1cf47506, - 0x18c8c7, - 0x16f82, - 0x9482, - 0x4ecd0, - 0x72847, - 0x2f0cf, - 0x5bac6, - 0x7c64e, - 0x1592cb, - 0x49f88, - 0x80f49, - 0x1991d2, - 0x11570d, - 0x115f88, - 0xae909, - 0xd8f4d, - 0x18be89, - 0x19628b, - 0x1d1c08, - 0x7c988, - 0x7ec48, - 0x7f089, - 0x7f28a, - 0x7ff4c, - 0xea74a, - 0x1c20c7, - 0x55c8d, - 0xe6fd1, - 0x1d2ba886, - 0x1b068b, - 0x12bf0c, - 0x10448, - 0x48589, - 0x17c5cd, - 0x1a7d50, - 0xd2c2, - 0x14500d, - 0x7d82, - 0x1a6c2, - 0x1c200a, - 0x10c20a, - 0xf2e0a, - 0xf3c8b, - 0x2a98c, - 0x11c8cc, - 0x11cbca, - 0x11ce4e, - 0x1dc80d, - 0x1d5dcd05, - 0x136288, - 0xa842, - 0x1430c68e, - 0x14a0750e, - 0x152046ca, - 0x15b322ce, - 0x16202f4e, - 0x16b7350c, - 0x142e5c7, - 0x142e5c9, - 0x140abc3, - 0x173cd68c, - 0x17a758c9, - 0x18329b09, - 0x18b37549, - 0x2e82, - 0x10c5d1, - 0x7451, - 0x460d, - 0x132211, - 0x2e91, - 0x17344f, - 0x1cd5cf, - 0x7580c, - 0x129a4c, - 0x13748c, - 0x14364d, - 0x202d5, - 0x581cc, - 0x6964c, - 0x133510, - 0x17910c, - 0x18954c, - 0x199c99, - 0x1a9299, - 0x1b2559, - 0x1c0f94, - 0x1c3c94, - 0x7ad4, - 0x8554, - 0x8ad4, - 0x19258289, - 0x19807d89, - 0x1a269709, - 0x146e6ec9, - 0x2e82, - 0x14ee6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x156e6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x15ee6ec9, - 0x2e82, - 0x166e6ec9, - 0x2e82, - 0x16ee6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x176e6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x17ee6ec9, - 0x2e82, - 0x186e6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x18ee6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x196e6ec9, - 0x2e82, - 0x19ee6ec9, - 0x2e82, - 0x1a6e6ec9, - 0x2e82, - 0x7aca, - 0x2e82, - 0x48fc5, - 0x190184, - 0x10c68e, - 0x750e, - 0x79d4e, - 0x46ca, - 0x1322ce, - 0x2f4e, - 0x17350c, - 0x1cd68c, - 0x758c9, - 0x129b09, - 0x137549, - 0x58289, - 0x7d89, - 0x69709, - 0x204cd, - 0x8809, - 0x8d89, - 0x141e44, - 0x1d5f44, - 0x18d184, - 0x149c84, - 0xa3e84, - 0x2c684, - 0x36a04, - 0x52644, - 0x103a04, - 0x159da03, - 0x31b07, - 0x3484c, - 0x20c3, - 0x758c2, - 0x1dc803, - 0x20c3, - 0x35e03, - 0x148702, - 0x1da608, - 0x12d947, - 0x2942, + 0x3abe85, + 0x2aad89, + 0x23d103, + 0x225843, + 0x215203, + 0x200201, + 0x2cfb07, + 0x2e0605, + 0x3a8843, + 0x3c7543, + 0x26bb44, + 0x2fef83, + 0x21b908, + 0x367b03, + 0x30f30d, + 0x3896c8, + 0x3c3a86, + 0x2fdec3, + 0x360cc3, + 0x38d5c3, + 0xc62c0c3, + 0x232488, + 0x235604, + 0x23e483, + 0x200106, + 0x241648, + 0x27c083, + 0x3c5583, + 0x22c243, + 0x232c43, + 0x2234c3, + 0x2420c3, + 0x284ac3, + 0x3313c3, + 0x28c603, + 0x20d643, + 0x38c105, + 0x24e984, + 0x24f307, + 0x2b12c2, + 0x252d83, + 0x256cc6, + 0x258283, + 0x258e03, + 0x277e03, + 0x2be4c3, + 0x3440c3, + 0x297e47, + 0xca28b03, + 0x2530c3, + 0x3d9e83, + 0x204f43, + 0x214383, + 0x2157c3, + 0x3c3345, + 0x372f03, + 0x200e09, + 0x201503, + 0x30b703, + 0xce35c03, + 0x2c9343, + 0x219a08, + 0x2aacc6, + 0x2be286, + 0x2b1306, + 0x388d07, + 0x228503, + 0x238cc3, + 0x211543, + 0x289a86, + 0x21fdc2, + 0x28f543, + 0x33a385, + 0x20a803, + 0x316d07, + 0x160ca43, + 0x26f9c3, + 0x204343, + 0x230743, + 0x21d283, + 0x216603, + 0x20dc46, + 0x3b9d86, + 0x37a8c3, + 0x2ef183, + 0x216103, + 0x2275c3, + 0x310d03, + 0x2fd203, + 0x302203, + 0x3973c5, + 0x236bc3, + 0x236bc6, + 0x211f08, + 0x212983, + 0x212989, + 0x33f908, + 0x216f88, + 0x221105, + 0x22ceca, + 0x22e04a, + 0x237acb, + 0x23a5c8, + 0x2ed803, + 0x38cf03, + 0x2f9503, + 0x30e208, + 0x3606c3, + 0x2520c4, + 0x207442, + 0x25c283, + 0x2007c3, + 0x228803, + 0x250d43, + 0x20f803, + 0x20ff42, + 0x229543, + 0x237843, + 0x313603, + 0x315504, + 0x241b04, + 0x3ced43, + 0x9fe08, 0x2000c2, - 0x202782, - 0x203dc2, - 0x219d02, - 0x200382, - 0x2003c2, - 0x209482, - 0x22d7c3, - 0x233743, - 0x220583, - 0x219c83, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x206b43, - 0x23cf83, - 0xb243, - 0x220583, - 0x22884, - 0x2000c2, - 0x24ce83, - 0x1fa2d7c3, - 0x38abc7, - 0x220583, - 0x214903, - 0x205184, - 0x206b43, - 0x23cf83, - 0x21d60a, - 0x239605, - 0x213c43, - 0x21be02, - 0xa14c8, - 0xa14c8, - 0x2782, - 0x1392c2, - 0x2033114b, - 0x2062da44, - 0x7ddc5, - 0x5f85, - 0x1d9c46, - 0x20a05f85, - 0x57243, - 0x1080c3, - 0x109744, - 0x3283, - 0x131905, - 0x12dac5, - 0xa14c8, - 0x1b047, - 0x2d7c3, - 0x2123a4c7, - 0x3686, - 0x21573345, - 0x3a5c7, - 0xbb4a, - 0xba08, - 0xea47, - 0x679ca, - 0x183548, - 0x33c87, - 0x1a618f, - 0x3e047, - 0x52446, - 0x13df10, - 0xf43cf, - 0x12789, - 0x5ad44, - 0x2183a68e, - 0x50949, - 0x69346, - 0x1071c9, - 0x18bb06, - 0x1c4d06, - 0x6c40c, - 0x19f00a, - 0x80d07, - 0x1cd10a, - 0x160a49, - 0xef0cc, - 0x1b4a8a, - 0x60c0a, - 0x131949, - 0x5acc6, - 0x80dca, - 0x11658a, - 0x9cf0a, - 0x11a349, - 0xdce88, - 0xdd106, - 0xe3a0d, - 0xbacc5, - 0x21f4df8c, - 0x137987, - 0x1051c9, - 0xb4147, - 0x10cad4, - 0x10cfcb, - 0x3fa0a, - 0x19904a, - 0xa65cd, - 0x14f3e89, - 0x1154cc, - 0x115d8b, - 0x18b03, - 0x18b03, - 0x29f46, - 0x18b03, - 0x1d9c48, - 0x1cd543, - 0x150c443, - 0x54389, - 0x14cfe83, - 0x82ec7, - 0x22dc6409, - 0x12a06, - 0x1081c9, - 0x4ce83, - 0xa14c8, - 0x2782, - 0x51184, - 0x88dc3, - 0x1da885, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x20a683, - 0x22d7c3, - 0x233743, - 0x228843, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x296983, - 0x207b83, - 0x20a683, - 0x241844, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x204f03, - 0x249c6505, - 0x142c183, - 0x22d7c3, - 0x233743, - 0x219d03, - 0x228843, - 0x220583, - 0x222884, - 0x37fa83, - 0x22a243, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x213c43, - 0x2561dac3, - 0x15c709, - 0x2782, - 0x2097c3, - 0x2622d7c3, - 0x233743, - 0x24adc3, - 0x220583, - 0x217343, - 0x22a243, - 0x23cf83, - 0x21c3c3, - 0x369444, - 0xa14c8, - 0x26a2d7c3, - 0x233743, - 0x2aa983, - 0x220583, - 0x205e03, - 0x205184, - 0x206b43, - 0x23cf83, - 0x22ec43, - 0xa14c8, - 0x2722d7c3, - 0x233743, - 0x228843, - 0x2013c3, - 0x23cf83, - 0xa14c8, - 0x142e5c7, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x205184, - 0x206b43, - 0x23cf83, - 0x12dac5, - 0x14c47, - 0x10cd0b, - 0xdee04, - 0xbacc5, - 0x144b148, - 0xaafcd, - 0x286e75c5, - 0x9a544, - 0x2782, - 0x1083, - 0x175785, - 0x2ebc2, - 0x2b82, - 0x3cc145, - 0xa14c8, - 0x18b02, - 0x1d003, - 0x16240f, - 0x2782, - 0xfd346, - 0x2ebc2, - 0x32c608, - 0x241844, - 0x340cc6, - 0x343506, - 0xa14c8, - 0x301983, - 0x2c6689, - 0x359a95, - 0x159a9f, - 0x22d7c3, - 0x3c0b52, - 0x16ed46, - 0x17fe05, - 0xe28a, - 0x386c9, - 0x3c090f, - 0x2dd2c4, - 0x25e605, - 0x30e590, - 0x2449c7, - 0x2013c3, - 0x2fb908, - 0x10b906, - 0x27ee0a, - 0x206f84, - 0x2f7043, - 0x21be02, - 0x2f060b, - 0x13c3, - 0x19c3c4, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x2fe843, - 0x202782, - 0xe16c3, - 0xf984, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x214903, - 0x226243, - 0x23cf83, - 0x4ce83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x2000c2, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x5f85, - 0x241844, - 0x22d7c3, - 0x233743, - 0x3216c4, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x6df83, - 0x23cf83, - 0x137249, - 0x22d7c3, - 0x233743, - 0x228843, - 0x209a03, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x32ef44, - 0x222884, - 0x206b43, - 0x23cf83, - 0x207b83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x6df83, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x2067c3, - 0x44b03, - 0x14903, - 0x206b43, - 0x23cf83, - 0x323aca, - 0x345349, - 0x35c04b, - 0x35d44a, - 0x3660ca, - 0x376b8b, - 0x38b8ca, - 0x391f8a, - 0x39858a, - 0x39880b, - 0x3bcac9, - 0x3c94ca, - 0x3c9c8b, - 0x3d680b, - 0x3db74a, - 0x22d7c3, - 0x233743, - 0x228843, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x17830b, - 0x5e148, - 0xd9084, - 0x46006, - 0xec149, - 0xa14c8, - 0x22d7c3, - 0xe284, - 0x264b84, - 0x20d142, - 0x205184, - 0x331e45, - 0x20a683, - 0x241844, - 0x22d7c3, - 0x236204, - 0x233743, - 0x251184, - 0x2dd2c4, - 0x222884, - 0x22a243, - 0x206b43, - 0x23cf83, - 0x3451c5, - 0x204f03, - 0x213c43, - 0x210f43, - 0x23d804, - 0x309384, - 0x308485, - 0xa14c8, - 0x2010c4, - 0x3c4e86, - 0x331a84, - 0x202782, - 0x35cc07, - 0x249587, - 0x24e444, - 0x25bec5, - 0x302fc5, - 0x22e1c5, - 0x222884, - 0x3883c8, - 0x239006, - 0x34c488, - 0x27a4c5, - 0x2e43c5, - 0x235fc4, - 0x23cf83, - 0x2f7dc4, - 0x3751c6, - 0x239703, - 0x23d804, - 0x243185, - 0x203b44, - 0x255ac4, - 0x21be02, - 0x39f906, - 0x3aec06, - 0x313d05, - 0x2000c2, - 0x24ce83, - 0x30a02782, - 0x21e604, - 0x200382, - 0x205e03, - 0x245ec2, - 0x206b43, - 0x2003c2, - 0x2f4786, - 0x202003, - 0x207b83, - 0xab204, - 0xa14c8, - 0xa14c8, - 0x220583, - 0x6df83, - 0x2000c2, - 0x31602782, - 0x220583, - 0x268fc3, - 0x37fa83, - 0x22da44, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x2000c2, - 0x31e02782, - 0x22d7c3, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x682, - 0x2062c2, - 0x2195c2, - 0x214903, - 0x2ef083, - 0x2000c2, - 0x12dac5, - 0xa14c8, - 0x14c47, - 0x202782, - 0x233743, - 0x251184, - 0x204183, - 0x220583, - 0x209a03, - 0x205e03, - 0x206b43, - 0x212203, - 0x23cf83, - 0x234703, - 0x1cb6d3, - 0x127714, - 0x12dac5, - 0x14c47, - 0x114486, - 0x111b4b, - 0x29f46, - 0x58587, - 0x5bec6, - 0x649, - 0x10408a, - 0x8af4d, - 0x1a0d8c, - 0x116f0a, - 0xf9708, - 0x45585, - 0xbb88, - 0x5bac6, - 0x1be646, - 0xec046, - 0x602, - 0x2758c2, - 0x7844, - 0x9b106, - 0x178050, - 0x83a0e, - 0x49c6, - 0x177e0c, - 0x336488cb, - 0x12dac5, - 0x1407cb, - 0x33bbe584, - 0x190347, - 0x23ed1, - 0x10388a, - 0x22d7c3, - 0x67945, - 0x160308, - 0x16f44, - 0x5a545, - 0x33d10886, - 0x9a3c6, - 0xbc406, - 0x91d4a, - 0x198ac3, - 0x34242584, - 0x54389, - 0x1784a, - 0x14cea89, - 0x605, - 0x110c83, - 0x3479e587, - 0xfc85, - 0x1563046, - 0x15584c, - 0xfac48, - 0xf084b, - 0xdf44b, - 0x34a4b78c, - 0x140c0c3, - 0xbbf88, - 0xf0ac5, - 0xa0c09, - 0xf3f88, - 0x141d306, - 0x89947, - 0x34f7c5c9, - 0x12b3c7, - 0x15e1ca, - 0x115a4d, - 0x140fc8, - 0x20c3, - 0x108943, - 0x1d9c48, - 0x103a04, - 0x129285, - 0xe8507, - 0x35245dc3, - 0x3575fec6, - 0x35af8644, - 0x35f00207, - 0x1d9c44, - 0x1d9c44, - 0x1d9c44, - 0x1d9c44, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x2000c2, - 0x202782, - 0x220583, - 0x2067c2, - 0x206b43, - 0x23cf83, - 0x202003, - 0x38054f, - 0x38090e, - 0xa14c8, - 0x22d7c3, - 0x43447, - 0x233743, - 0x220583, - 0x219e43, - 0x206b43, - 0x23cf83, - 0x4904, - 0x33c4, - 0xa04, - 0x21cd03, - 0x30a807, - 0x201842, - 0x2c9689, - 0x200b02, - 0x24efcb, - 0x2a52ca, - 0x2e2689, - 0x200542, - 0x2750c6, - 0x3ac995, - 0x24f115, - 0x230313, - 0x24f693, - 0x220f02, - 0x220f05, - 0x360e4c, - 0x27680b, - 0x296e05, - 0x2020c2, - 0x2ffe82, - 0x38f886, - 0x202442, - 0x260646, - 0x20e50d, - 0x20fa0c, - 0x224bc4, - 0x200882, - 0x20c882, - 0x39e408, + 0x200ac2, + 0x203582, + 0x202542, 0x200202, - 0x30f9c6, - 0x30f9cf, - 0x393e90, - 0x3a39c4, - 0x3acb55, - 0x230493, - 0x204dc3, - 0x34320a, - 0x20ee07, - 0x35f709, - 0x217707, - 0x225a42, - 0x200282, - 0x3b2246, - 0x207942, - 0xa14c8, - 0x201a42, - 0x2010c2, - 0x209247, - 0x341247, - 0x341251, - 0x218105, - 0x21810e, - 0x21860f, - 0x21c742, - 0x394547, - 0x21cd48, - 0x207c02, - 0x325802, - 0x2a9746, - 0x3418cf, - 0x2a9750, - 0x22b882, - 0x205cc2, - 0x32f488, - 0x212283, - 0x288f88, - 0x30bd8d, - 0x23af03, - 0x3723c8, - 0x23af0f, - 0x23b2ce, - 0x398d0a, - 0x226e51, - 0x2272d0, - 0x2bd68d, - 0x2bd9cc, - 0x3c2447, - 0x343387, - 0x340d89, - 0x224cc2, - 0x201942, - 0x259e0c, - 0x25a10b, - 0x2014c2, - 0x2c3206, - 0x22ec82, - 0x200482, - 0x2d5e42, - 0x202782, - 0x22dbc4, - 0x23a187, - 0x22bdc2, - 0x23e4c7, - 0x240787, - 0x220282, - 0x22eec2, - 0x243305, - 0x237982, - 0x2e920e, - 0x38288d, - 0x233743, - 0x397d0e, - 0x2b628d, - 0x341643, - 0x201602, - 0x286d04, - 0x265582, - 0x2029c2, - 0x39b945, - 0x39d087, - 0x24a442, - 0x219d02, - 0x250d87, - 0x254708, - 0x2b06c2, - 0x2788c6, - 0x259c8c, - 0x259fcb, - 0x20e282, - 0x260e8f, - 0x261250, - 0x26164f, - 0x261a15, - 0x261f54, - 0x26244e, - 0x2627ce, - 0x262b4f, - 0x262f0e, - 0x263294, - 0x263793, - 0x263c4d, - 0x277d09, - 0x28cc43, - 0x204182, - 0x28dc85, - 0x3c70c6, + 0x201ec2, + 0x25a902, + 0x201bc2, 0x200382, - 0x367207, - 0x220583, - 0x200642, - 0x232548, - 0x227091, - 0x2274d0, - 0x200bc2, - 0x28ba87, - 0x201b82, - 0x309a07, - 0x253a42, - 0x37ed89, - 0x38f847, - 0x318008, - 0x3106c6, - 0x2eef83, - 0x3cbdc5, - 0x2339c2, - 0x2004c2, - 0x3d5e45, - 0x377b85, - 0x200f82, - 0x21c583, - 0x340b47, - 0x218447, - 0x204042, - 0x204044, - 0x218983, - 0x348009, - 0x218988, - 0x200b42, - 0x208002, - 0x22cec7, - 0x235d05, - 0x363388, - 0x246a07, - 0x209b83, - 0x29af86, - 0x2bd50d, - 0x2bd88c, - 0x2da786, - 0x202282, - 0x2df302, - 0x2024c2, - 0x23ad8f, - 0x23b18e, - 0x303047, - 0x205e02, - 0x3200c5, - 0x3200c6, - 0x202dc2, - 0x200c02, - 0x29f506, - 0x210203, - 0x309946, - 0x2ccec5, - 0x2ccecd, - 0x2cd515, - 0x2cdf4c, - 0x2ce2cd, - 0x2ce612, - 0x200e82, - 0x26cec2, - 0x201342, - 0x329906, - 0x3c8346, - 0x2013c2, - 0x3c7146, - 0x21a682, - 0x2c71c5, - 0x200d42, - 0x2e9349, - 0x222ecc, - 0x22320b, - 0x2003c2, - 0x2550c8, - 0x2039c2, - 0x201002, - 0x271746, - 0x2e6e45, - 0x309807, - 0x226ac5, - 0x25bc05, - 0x2434c2, - 0x20bc42, - 0x202142, - 0x2ead87, - 0x2f484d, - 0x2f4bcc, - 0x3abf47, - 0x278842, - 0x203d42, - 0x20cb48, - 0x203d48, - 0x2e7c08, - 0x2f30c4, - 0x2c3c87, - 0x27df03, - 0x223802, - 0x204f02, - 0x2f5849, - 0x22a347, - 0x213c42, - 0x271b45, - 0x241f42, - 0x21f4c2, - 0x3bfe83, - 0x3bfe86, - 0x2fe542, - 0x2ffa82, - 0x200402, - 0x27ea46, - 0x2ddb07, - 0x213a42, - 0x200902, - 0x288dcf, - 0x397b4d, - 0x3d364e, - 0x2b610c, - 0x202342, - 0x204482, - 0x310505, - 0x3220c6, - 0x202482, - 0x206382, + 0x200c42, + 0x252742, + 0x205a02, + 0x26bf42, + 0x200a82, + 0x2e5382, + 0x2161c2, + 0x201c82, + 0x216102, + 0x228702, + 0x204d42, 0x200682, - 0x246984, - 0x2fee04, - 0x355686, + 0x216c82, + 0x202442, 0x209482, - 0x27b0c7, - 0x233ec3, - 0x233ec8, - 0x23ba08, - 0x36ee87, - 0x253cc6, - 0x2037c2, - 0x2398c3, - 0x2b7387, - 0x287c86, - 0x2e3705, - 0x2f3448, - 0x203002, - 0x274e87, - 0x236082, - 0x308102, - 0x21bac2, - 0x218789, - 0x241542, - 0xc2148, - 0x201182, - 0x24fac3, - 0x331fc7, - 0x201202, - 0x22304c, - 0x22334b, - 0x2da806, - 0x310bc5, - 0x243982, - 0x202b42, - 0x2be3c6, - 0x267343, - 0x32ecc7, - 0x288782, - 0x2008c2, - 0x3ac815, - 0x24f2d5, - 0x2301d3, - 0x24f813, - 0x38a2c7, - 0x25fad1, - 0x266d10, - 0x276c52, - 0x27b891, - 0x29a7c8, - 0x29a7d0, - 0x2a168f, - 0x2a5093, - 0x384f52, - 0x3bc3d0, - 0x2b240f, - 0x2c0dd2, - 0x3a2291, - 0x2cca13, - 0x2d7212, - 0x2db24f, - 0x2dc04e, - 0x2e0392, - 0x2e2491, - 0x2ec80f, - 0x2fe1ce, - 0x2f0fd1, - 0x2fae10, - 0x2fbc92, - 0x2fe8d1, - 0x33c390, - 0x354d0f, - 0x3bd1d1, - 0x3c9890, - 0x31b8c6, - 0x33bf87, - 0x215907, - 0x203b02, - 0x2847c5, - 0x30e307, - 0x2195c2, - 0x206042, - 0x227d45, - 0x202243, - 0x308e06, - 0x2f4a0d, - 0x2f4d4c, - 0x206842, - 0x360ccb, - 0x2766ca, - 0x220dca, - 0x2bce09, - 0x2f284b, - 0x246b4d, - 0x30ea0c, - 0x27250a, - 0x2707cc, - 0x27778b, - 0x296c4c, - 0x2b464e, - 0x3560cb, - 0x2b588c, - 0x2e4083, - 0x38bd86, - 0x3bf082, - 0x2fc182, - 0x20f203, - 0x214f82, - 0x21e4c3, - 0x32ae06, - 0x261bc7, - 0x2d3b06, - 0x2e20c8, - 0x3409c8, - 0x31e8c6, - 0x20a342, - 0x3136cd, - 0x313a0c, - 0x2df607, - 0x316d47, - 0x2351c2, - 0x213e42, - 0x276c02, - 0x279b42, - 0x3388d6, - 0x33d315, - 0x340296, - 0x343993, - 0x344052, - 0x353a93, - 0x354012, - 0x3adb0f, - 0x3bdfd8, - 0x3beb57, - 0x3c0019, - 0x3c1498, - 0x3c2e18, - 0x3c4197, - 0x3c5a17, - 0x3c6816, - 0x3ce1d3, - 0x3ce8d5, - 0x3cf792, - 0x3cfc13, - 0x202782, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x205184, - 0x206b43, - 0x23cf83, - 0x202003, + 0x202e42, + 0x2411c2, + 0x201942, + 0xc2, + 0xac2, + 0x3582, + 0x2542, + 0x202, + 0x1ec2, + 0x5a902, + 0x1bc2, + 0x382, + 0xc42, + 0x52742, + 0x5a02, + 0x6bf42, + 0xa82, + 0xe5382, + 0x161c2, + 0x1c82, + 0x16102, + 0x28702, + 0x4d42, + 0x682, + 0x16c82, + 0x2442, + 0x9482, + 0x2e42, + 0x411c2, + 0x1942, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x5b02, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0xc302, + 0x20c302, + 0x216603, + 0xe62c0c3, + 0x228b03, + 0x211543, + 0x6d9c3, + 0x22d7c2, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x57c2, + 0x2001c2, + 0x154da85, + 0x12eb85, + 0x208602, + 0x9fe08, + 0xc302, + 0x234482, + 0x204b02, + 0x21bb02, + 0x211482, + 0x239242, + 0x175305, + 0x2016c2, + 0x201e02, + 0x218d42, + 0x201dc2, + 0x2161c2, + 0x23d182, + 0x201782, + 0x296542, + 0xf73f344, + 0x142, + 0x176c87, + 0x1266cd, + 0xe11c9, + 0x11214b, + 0xe8188, + 0x643c9, + 0x10c246, + 0x228b03, + 0x9fe08, + 0x9c4, + 0x11c3, + 0x2b05, + 0x9fe08, + 0xddc47, + 0x54c46, + 0x2b49, + 0x7b0e, + 0x14a647, 0x2000c2, - 0x206702, - 0x37e938c5, - 0x3828a305, - 0x3867e706, - 0xa14c8, - 0x38ab2985, - 0x202782, + 0x242244, + 0x20c302, + 0x22c0c3, + 0x201d02, + 0x232c43, + 0x14403, + 0x200382, + 0x2db1c4, + 0x214543, + 0x244502, + 0x20a803, + 0x2003c2, + 0x216603, + 0x240986, + 0x332b0f, + 0x602, + 0x6be683, + 0x9fe08, + 0x20c302, + 0x212483, + 0x228b03, + 0x211543, + 0xca43, + 0x7b08, + 0x15c2c4b, + 0x15642ca, + 0xf5009, + 0x15c534a, + 0x150bb87, + 0xa4b0b, + 0x160745, + 0x116a49, + 0x12eb85, + 0x176c87, + 0xf3644, + 0x20c302, + 0x22c0c3, + 0x228b03, + 0x20a803, + 0x2000c2, + 0x200c82, + 0x338dc2, + 0x12a2c0c3, + 0x23b182, + 0x232c43, + 0x2014c2, + 0x26bc02, + 0x228b03, + 0x220482, + 0x288542, + 0x22a402, + 0x200cc2, + 0x291482, + 0x200802, + 0x200d82, + 0x2033c2, + 0x21efc2, + 0x217d82, + 0xe550c, + 0x2b2182, + 0x2f10c2, + 0x215982, + 0x2450c2, + 0x211543, + 0x200bc2, + 0x20a803, + 0x228c42, + 0x25b002, + 0x216603, + 0x301b82, + 0x209482, + 0x216002, + 0x203382, + 0x210342, + 0x2e8f82, + 0x214682, + 0x22b902, + 0x21e202, + 0x32370a, + 0x366b8a, + 0x39914a, + 0x3de682, + 0x20e6c2, + 0x3c3302, + 0x12fda689, + 0x1328caca, + 0x142d1c7, + 0x136049c2, + 0x14bd543, + 0x2482, + 0x8caca, + 0x15d14e, + 0x249f84, + 0xf04c5, + 0x13e2c0c3, + 0x3b903, + 0x232c43, + 0x24b304, + 0x228b03, + 0x224e44, + 0x214543, + 0x13bfc9, + 0x8f7c6, + 0x211543, + 0xe88c4, + 0x2143, + 0x20a803, + 0x12abc5, + 0x20ca43, + 0x216603, + 0x1429b04, + 0x236bc3, + 0x10cbc4, + 0x205b03, + 0x9fe08, + 0xbe5c6, + 0x14bdb84, + 0x146045, + 0x14a40a, + 0x12c5c2, + 0x1454114d, + 0x1a36c6, + 0x8f11, + 0x14bda689, + 0x1460c8, + 0x4aa08, + 0x1b584807, + 0x2282, + 0x1da807, + 0xe840e, + 0x12eb8b, + 0x13390b, + 0x1a3f4a, + 0x8824a, + 0x6bb47, + 0x9fe08, + 0x11a9c8, + 0x58c7, + 0x1b81684b, + 0x1ae07, + 0x9582, + 0x2b80d, + 0x13e387, + 0x14ebca, + 0x1ce74f, + 0x1732cf, + 0x8cac2, + 0xc302, + 0x84a08, + 0x1bcfdc4c, + 0xe1cca, + 0xdd74a, + 0x4f08a, + 0x1894c8, + 0xd948, + 0x59748, + 0xddc08, + 0xe7688, + 0x81c2, + 0x14db0f, + 0xa24cb, + 0x18a0c8, + 0x67607, + 0x168a, + 0x11404b, + 0x330c9, + 0x44447, + 0xd848, + 0x2e20c, + 0x16c307, + 0x5674a, + 0xe688, + 0x6aace, + 0x6b28e, + 0x6b98b, + 0x1d2e8b, + 0x1cb64b, + 0xe3089, + 0xead0b, + 0x3934d, + 0x3b98b, + 0x3c10d, + 0x3c48d, + 0x3de4a, + 0x4194b, + 0x461cb, + 0x44845, + 0x1c026590, + 0x19794f, + 0x13f50f, + 0x6a44d, + 0x13c190, + 0x9802, + 0x1c7d0408, + 0x114c8, + 0x93110, + 0x11d30e, + 0x1cb67ac5, + 0x4a80b, + 0x13b0d0, + 0x515c8, + 0xda4a, + 0x1d3049, + 0x60907, + 0x60c47, + 0x60e07, + 0x61787, + 0x62b87, + 0x63107, + 0x63b87, + 0x640c7, + 0x64d07, + 0x65087, + 0x65747, + 0x65907, + 0x65ac7, + 0x65c87, + 0x664c7, + 0x67907, + 0x688c7, + 0x68c87, + 0x692c7, + 0x69587, + 0x69747, + 0x69a47, + 0x6be07, + 0x6c007, + 0x6cd87, + 0x6cf47, + 0x6d107, + 0x6f6c7, + 0x70a87, + 0x70f07, + 0x71647, + 0x71907, + 0x71c87, + 0x71e47, + 0x72247, + 0x72687, + 0x72a87, + 0x73007, + 0x731c7, + 0x73387, + 0x73c47, + 0x746c7, + 0x74c07, + 0x75207, + 0x753c7, + 0x75747, + 0x76847, + 0x4c02, + 0x5984a, + 0x13488, + 0x11a007, + 0x8a005, + 0xa7791, + 0x4886, + 0xfadca, + 0x8488a, + 0x54c46, + 0xacd8b, + 0x642, + 0x2f451, + 0xb6fc9, + 0x97249, + 0x33c2, + 0x198c0a, + 0xaa289, + 0xaa9cf, + 0xaafce, + 0xac0c8, + 0x4742, + 0xbe0c9, + 0x1b0ece, + 0xea24c, + 0xf4d0f, + 0x1aeece, + 0x26ccc, + 0xe3389, + 0xe3911, + 0xe3ec8, + 0x2e612, + 0x17f34d, + 0x1a054d, + 0x4abcb, + 0x58415, + 0x6dc89, + 0x7280a, + 0x7a089, + 0x80510, + 0x16ff8b, + 0x1a798f, + 0x9110b, + 0x9494c, + 0x99310, + 0xa9a4a, + 0xadccd, + 0xaf68e, + 0xafdca, + 0xc4a8c, + 0xb42d4, + 0xb6c51, + 0xb8e0b, + 0xb9f0f, + 0xbb38d, + 0xbf5ce, + 0xc22cc, + 0xc3e0c, + 0xc478b, + 0xc558e, + 0xc6110, + 0xc7dcb, + 0x11c78d, + 0x141d4f, + 0x16d38c, + 0xcf38e, + 0xd1151, + 0xd564c, + 0xde6c7, + 0xf2b0d, + 0xfc10c, + 0x110450, + 0x1cc44d, + 0x105687, + 0x147410, + 0x166dc8, + 0x1710cb, + 0xb0d8f, + 0x1432c8, + 0xfafcd, + 0x10a190, + 0x176b89, + 0x1ceb2d46, + 0xb3cc3, + 0xb90c5, + 0x4e082, + 0x1b09, + 0x5590a, + 0x1d22eac6, + 0x1d73e584, + 0x56286, + 0x1dc4a, + 0x6f0cd, + 0x1d9b9b89, + 0x17c03, + 0x11594a, + 0xdb911, + 0xdbd49, + 0xdd6c7, + 0xde408, + 0xde887, + 0x11a0c8, + 0x908b, + 0x12e989, + 0xe9250, + 0xe970c, + 0xea548, + 0xea8c5, + 0x79148, + 0x10eaca, + 0xc7c07, + 0x523c7, + 0x2f42, + 0x1de46bd5, + 0x13bdca, + 0x3d888, + 0x98b89, + 0x2efc5, + 0x116b8a, + 0x8d04f, + 0x12b98b, + 0x1c340c, + 0x147952, + 0x78005, + 0x1966c8, + 0x4b60a, + 0x1e2f5b85, + 0x183acc, + 0x138c03, + 0x190ec6, + 0x3d182, + 0x10238b, + 0x102dca, + 0x150314c, + 0x11848, + 0x3c2c8, + 0x1e63d906, + 0x12fec7, + 0xa982, + 0x4e82, + 0x4bdd0, + 0x66647, + 0x2dccf, + 0x13686, + 0x15c7ce, + 0x9588b, + 0x45948, + 0x33489, + 0xfe992, + 0x190f8d, + 0x111788, + 0x112009, + 0x17ab8d, + 0x1964c9, + 0x1d714b, + 0x69bc8, + 0x7ea48, + 0x80908, + 0x80d49, + 0x80f4a, + 0x8730c, + 0x4648a, + 0xec2ca, + 0x110d47, + 0x9f70a, + 0x13670d, + 0xe41d1, + 0x1eabf8c6, + 0x1ab70b, + 0x12cfcc, + 0x37908, + 0x61249, + 0x15b14d, + 0x1a38d0, + 0x17b8cd, + 0x14302, + 0x5cd8d, + 0x5402, + 0x18d82, + 0x110c8a, + 0x1d4ca, + 0xfacca, + 0x11998b, + 0x6b50c, + 0x11a4ca, + 0x11a74e, + 0x1b318d, + 0x1edde545, + 0x1dae88, + 0x57c2, + 0x14e85c3, + 0x14ebec0e, + 0x156037ce, + 0x15e0254a, + 0x16745d0e, + 0x16e8f9ce, + 0x1772b10c, + 0x142d1c7, + 0x142d1c9, + 0x14bd543, + 0x17f6ae8c, + 0x186e7b09, + 0x18ef8849, + 0x1974a209, + 0x2482, + 0xbeb51, + 0x3711, + 0x248d, + 0x145c51, + 0x8f911, + 0x12b04f, + 0x16adcf, + 0xe7a4c, + 0xf878c, + 0x14a14c, + 0x1dc00d, + 0x1015d5, + 0x661cc, + 0x7394c, + 0x1bad50, + 0x130d4c, + 0x133fcc, + 0x155a59, + 0x162919, + 0x199999, + 0x1b67d4, + 0x1c41d4, + 0x1d09d4, + 0x5a54, + 0x6b54, + 0x19e66289, + 0x1a5d0c89, + 0x1ae73a09, + 0x152e40c9, + 0x2482, + 0x15ae40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x162e40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x16ae40c9, + 0x2482, + 0x172e40c9, + 0x2482, + 0x17ae40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x182e40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x18ae40c9, + 0x2482, + 0x192e40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x19ae40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x1a2e40c9, + 0x2482, + 0x1aae40c9, + 0x2482, + 0x1b2e40c9, + 0x2482, + 0x5a4a, + 0x2482, + 0x1400401, + 0x8f05, + 0x1a3f44, + 0x1442303, + 0x15b08c3, + 0x14ef043, + 0xbec0e, + 0x37ce, + 0x7984e, + 0x254a, + 0x145d0e, + 0x8f9ce, + 0x12b10c, + 0x16ae8c, + 0xe7b09, + 0xf8849, + 0x14a209, + 0x66289, + 0x1d0c89, + 0x73a09, + 0x1017cd, + 0x5d09, + 0x6e09, + 0x14c004, + 0x1a5104, + 0x1b3644, + 0x1b5344, + 0xa4dc4, + 0x1a82c4, + 0x35e04, + 0x50fc4, + 0x13584, + 0x1587c03, + 0xbe9c7, + 0x33d8c, + 0x13583, + 0x9802, + 0x10bb86, + 0x1b3183, + 0x13583, + 0x9bb83, + 0x3f02, + 0x3f08, + 0xdff47, + 0x12ea07, + 0x81c2, + 0x2000c2, + 0x20c302, + 0x201d02, + 0x20c202, + 0x200382, + 0x2003c2, + 0x204e82, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x214383, + 0x20a803, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x20a803, + 0x216603, + 0x8503, + 0x228b03, + 0x24e44, + 0x2000c2, + 0x248343, + 0x2122c0c3, + 0x38c507, + 0x228b03, + 0x20e403, + 0x217b84, + 0x20a803, + 0x216603, + 0x21de8a, + 0x240985, + 0x216103, + 0x219f82, + 0x9fe08, + 0x9fe08, + 0xc302, + 0x135f02, + 0x21bb990b, + 0x21e2c344, + 0x13e4c5, + 0x7d45, + 0xfdc46, + 0x22207d45, + 0x50cc3, + 0x93003, + 0x9c4, + 0x11c3, + 0x2b05, + 0x12eb85, + 0x9fe08, + 0x1ae07, + 0x2c0c3, + 0x2c28d, + 0x22a380c7, + 0x15c6, + 0x22ce7945, + 0x1a9012, + 0x381c7, + 0xa0ca, + 0x9f88, + 0xe207, + 0x63d4a, + 0x18aec8, + 0x62607, + 0x18098f, + 0x43dc7, + 0x50dc6, + 0x13b0d0, + 0xc9fcf, + 0x20f09, + 0x56304, + 0x2303828e, + 0x11fb09, + 0x65dc6, + 0x109649, + 0x18ce06, + 0x1ba306, + 0x189e8c, + 0x11424a, + 0x33247, + 0x129b8a, + 0x143889, + 0xed38c, + 0x1ceb0a, + 0x7e54a, + 0x2b49, + 0x56286, + 0x3330a, + 0x11268a, + 0xa0d4a, + 0x127149, + 0xdad88, + 0xdb006, + 0xe208d, + 0xb9545, + 0x23754d4c, + 0x14a647, + 0x107849, + 0xa8c07, + 0x10a594, + 0x10aa8b, + 0x6744a, + 0xfe80a, + 0xa6d8d, + 0x1519b89, + 0x11154c, + 0x111e0b, + 0xe683, + 0xe683, + 0x39346, + 0xe683, + 0xfdc48, + 0x1581c3, + 0x33445, + 0x141d703, + 0x4e9c9, + 0x156d603, + 0x1439887, + 0x80787, + 0x245846c9, + 0xa6c6, + 0xbd389, + 0x48343, + 0x9fe08, + 0xc302, + 0x4b304, + 0x4243, + 0x4185, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x225843, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x297403, + 0x205b03, + 0x225843, + 0x242244, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x21d0c3, + 0x261847c5, + 0x142bd43, + 0x22c0c3, + 0x232c43, + 0x214403, + 0x212483, + 0x228b03, + 0x224e44, + 0x201143, + 0x238cc3, + 0x211543, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x216103, + 0x26e20643, + 0x147849, + 0xc302, + 0x2ff843, + 0x27a2c0c3, + 0x232c43, + 0x244743, + 0x228b03, + 0x217203, + 0x238cc3, + 0x216603, + 0x2f5cc3, + 0x3a4e04, + 0x9fe08, + 0x2822c0c3, + 0x232c43, + 0x2ac183, + 0x228b03, + 0x211543, + 0x217b84, + 0x20a803, + 0x216603, + 0x22d843, + 0x9fe08, + 0x28a2c0c3, + 0x232c43, + 0x212483, + 0x20ca43, + 0x216603, + 0x9fe08, + 0x142d1c7, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x217b84, + 0x20a803, + 0x216603, + 0x12eb85, + 0x176c87, + 0x10a7cb, + 0xdc144, + 0xb9545, + 0x14470c8, + 0x2a20d, + 0x29e352c5, + 0x46e44, + 0xc302, + 0x8303, + 0x176a85, + 0x2d7c2, + 0x1dc2, + 0x2e7585, + 0x9fe08, + 0x7e42, + 0xeec3, + 0x16368f, + 0xc302, + 0xfcac6, + 0x2000c2, + 0x248343, + 0x22c0c3, + 0x228b03, + 0x224e44, + 0x211543, + 0x217b84, + 0x20a803, + 0x216603, + 0x216103, + 0x2d7c2, + 0x32d6c8, + 0x242244, + 0x342bc6, + 0x34a006, + 0x9fe08, + 0x31f443, + 0x20f509, + 0x3046d5, + 0x1046df, + 0x22c0c3, + 0x11d07, + 0x330912, + 0x170a46, + 0x17f0c5, + 0xda4a, + 0x1d3049, + 0x3306cf, + 0x2db1c4, + 0x28ed85, + 0x30b4d0, + 0x322e47, + 0x20ca43, + 0x31b008, + 0xf6f86, + 0x280aca, + 0x224d04, + 0x2f55c3, + 0x219f82, + 0x2eec0b, + 0xca43, + 0x17d404, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x2fd643, + 0x20c302, + 0x12aec3, + 0x12a8c4, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20e403, + 0x22b0c3, + 0x216603, + 0x48343, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x20a803, + 0xca43, + 0x216603, + 0x2000c2, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x7d45, + 0x242244, + 0x22c0c3, + 0x232c43, + 0x303f84, + 0x20a803, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x133d89, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x204f43, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x329144, + 0x224e44, + 0x20a803, + 0x216603, + 0x205b03, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x220383, + 0x63f43, + 0xe403, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x32370a, + 0x3484c9, + 0x35f2cb, + 0x35f9ca, + 0x366b8a, + 0x378e4b, + 0x38cbca, + 0x39278a, + 0x39914a, + 0x3993cb, + 0x3b8049, + 0x3c840a, + 0x3c894b, + 0x3d5fcb, + 0x3dc90a, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x920b, + 0x5a448, + 0x17acc4, + 0x91c6, + 0x3e109, + 0x9fe08, + 0x22c0c3, + 0xda44, + 0x260904, + 0x20aa02, + 0x217b84, + 0x203045, + 0x225843, + 0x242244, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x24b304, + 0x2db1c4, + 0x224e44, + 0x238cc3, + 0x20a803, + 0x216603, + 0x25cf45, + 0x21d0c3, + 0x216103, + 0x24f1c3, + 0x246484, + 0x2be544, + 0x2bd645, + 0x9fe08, + 0x344b04, + 0x3ba486, + 0x202c84, + 0x20c302, + 0x347d47, + 0x243647, + 0x249204, + 0x238a05, + 0x3cc645, + 0x22cd85, + 0x224e44, + 0x388dc8, + 0x3db706, + 0x32bec8, + 0x27c8c5, + 0x2e2a45, + 0x340644, + 0x216603, + 0x2f61c4, + 0x377bc6, + 0x240a83, + 0x246484, + 0x2411c5, + 0x201a84, + 0x336544, + 0x219f82, + 0x322706, + 0x3ab5c6, + 0x30df85, + 0x2000c2, + 0x248343, + 0x3260c302, + 0x3d0584, + 0x200382, + 0x211543, + 0x209082, + 0x20a803, + 0x2003c2, + 0x2f1d06, + 0x20c603, + 0x205b03, + 0x9fe08, + 0x9fe08, + 0x228b03, + 0x6d9c3, + 0x2000c2, + 0x3320c302, + 0x228b03, + 0x2623c3, + 0x201143, + 0x22c344, + 0x20a803, + 0x216603, + 0x9fe08, + 0x2000c2, + 0x33a0c302, + 0x22c0c3, + 0x20a803, + 0xca43, + 0x216603, + 0x682, + 0x206902, + 0x20ff42, + 0x20e403, + 0x2ed343, + 0x2000c2, + 0x12eb85, + 0x9fe08, + 0x176c87, + 0x20c302, + 0x232c43, + 0x24b304, + 0x2020c3, + 0x228b03, + 0x204f43, + 0x211543, + 0x20a803, + 0x213dc3, + 0x216603, + 0x233c43, + 0x1b8a13, + 0x127c94, + 0x12eb85, + 0x176c87, + 0x10f246, + 0x11b7cb, + 0x39346, + 0x531c7, + 0x38a06, + 0x649, + 0x160d4a, + 0x8984d, + 0x1263cc, + 0x11300a, + 0x45c88, + 0x175305, + 0xa108, + 0x13686, + 0x1be2c6, + 0x3e006, + 0x602, + 0x209802, + 0x3b04, + 0x9bb86, + 0x184410, + 0x8170e, + 0x2846, + 0x1841cc, + 0x3537314b, + 0x12eb85, + 0x1426cb, + 0x357be204, + 0x1a4107, + 0x25191, + 0x11f54a, + 0x22c0c3, + 0x63cc5, + 0x1bd708, + 0x12704, + 0x55b05, + 0x3588c906, + 0xa7786, + 0xc14c6, + 0x9174a, + 0x1a8883, + 0x35e0bfc4, + 0x4e9c9, + 0x12c047, + 0x1770a, + 0x14ce3c9, + 0x605, + 0xeac83, + 0x3622eb47, + 0x12abc5, + 0x153c6c6, + 0x153f846, + 0xace4c, + 0xfa308, + 0x3643d183, + 0xeee4b, + 0x118a4b, + 0x36a4528c, + 0x14070c3, + 0xbb048, + 0xef0c5, + 0xa2349, + 0x119c88, + 0x141db86, + 0x88147, + 0x36f5b149, + 0x117787, + 0x16074a, + 0x111acd, + 0x8148, + 0x13583, + 0xbdb03, + 0xfdc48, + 0x13584, + 0x1224c5, + 0x148d103, + 0xe85c7, + 0x372e85c3, + 0x377afc46, + 0x37af67c4, + 0x37f02f87, + 0xfdc44, + 0xfdc44, + 0xfdc44, + 0xfdc44, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x2000c2, + 0x20c302, + 0x228b03, 0x203dc2, - 0x38f2f1c5, - 0x39282b45, - 0x39683f47, - 0x39a84c49, - 0x39e37284, + 0x20a803, + 0x216603, + 0x20c603, + 0x37fe4f, + 0x38020e, + 0x9fe08, + 0x22c0c3, + 0x41487, + 0x232c43, + 0x228b03, + 0x214543, + 0x20a803, + 0x216603, + 0x2784, + 0x1304, + 0x144444, + 0x21c0c3, + 0x374247, + 0x206082, + 0x26c3c9, + 0x200ac2, + 0x24c0cb, + 0x29d88a, + 0x29e589, + 0x200542, + 0x212ac6, + 0x38d7d5, + 0x24c215, + 0x231e53, + 0x24c793, + 0x212082, + 0x21e405, + 0x369e0c, + 0x27494b, + 0x297885, + 0x202542, + 0x299082, + 0x37bf46, + 0x202282, + 0x37bb46, + 0x20dccd, + 0x32a94c, + 0x226604, + 0x200882, + 0x20be02, + 0x22e9c8, + 0x200202, + 0x30e386, + 0x30e38f, + 0x393f90, + 0x21f204, + 0x38d995, + 0x231fd3, + 0x21cf83, + 0x349d0a, + 0x208b87, + 0x369349, + 0x2175c7, + 0x227682, + 0x200282, + 0x3b4e46, + 0x203c02, + 0x9fe08, + 0x208082, + 0x208342, + 0x21e9c7, + 0x330307, + 0x330311, + 0x218585, + 0x21858e, + 0x21968f, + 0x209582, + 0x373907, + 0x21c708, + 0x205b82, + 0x2c1142, + 0x21bb46, + 0x21bb4f, + 0x269f10, + 0x22a8c2, + 0x204042, + 0x251c88, + 0x204043, + 0x25c6c8, + 0x2db50d, + 0x2094c3, + 0x3bc3c8, + 0x27f40f, + 0x27f7ce, + 0x2fe4ca, + 0x2da0d1, + 0x2da550, + 0x2dc90d, + 0x2dcc4c, + 0x2ff6c7, + 0x349e87, + 0x342c89, + 0x226702, + 0x201ec2, + 0x2553cc, + 0x2556cb, + 0x200d42, + 0x2c4946, + 0x202c82, + 0x200482, + 0x28cac2, + 0x20c302, + 0x22c784, + 0x237d87, + 0x22ae02, + 0x23cbc7, + 0x23ed47, + 0x22e002, + 0x22dac2, + 0x241345, + 0x259dc2, + 0x382a4e, + 0x3c91cd, + 0x232c43, + 0x28658e, + 0x3d234d, + 0x32fe43, + 0x202102, + 0x284744, + 0x24a542, + 0x2253c2, + 0x39b645, + 0x39ce07, + 0x243f82, + 0x20c202, + 0x24af07, + 0x24ed48, + 0x2b12c2, + 0x278086, + 0x25524c, + 0x25558b, + 0x203d42, + 0x25d0cf, + 0x25d490, + 0x25d88f, + 0x25dc55, + 0x25e194, + 0x25e68e, + 0x25ea0e, + 0x25ed8f, + 0x25f14e, + 0x25f4d4, + 0x25f9d3, + 0x25fe8d, + 0x276a09, + 0x28b243, + 0x2020c2, + 0x35c2c5, + 0x3cfd46, + 0x200382, + 0x3776c7, + 0x228b03, + 0x200642, + 0x231448, + 0x2da311, + 0x2da750, + 0x202b82, + 0x28a387, + 0x201742, + 0x247f07, + 0x24e082, + 0x328c49, + 0x37bf07, + 0x296c48, + 0x28c746, + 0x28f303, + 0x28f305, + 0x21d702, + 0x2004c2, + 0x3b5245, + 0x383f45, + 0x201b02, + 0x22aec3, + 0x342a47, + 0x20c907, + 0x201f82, + 0x201f84, + 0x20e503, + 0x2ebf89, + 0x20e508, + 0x203102, + 0x205f82, + 0x2eb887, + 0x3dd285, + 0x33fb88, + 0x34e347, + 0x21a7c3, + 0x29ba06, + 0x2dc78d, + 0x2dcb0c, + 0x2d5d46, + 0x204b02, + 0x21fc02, + 0x206a42, + 0x27f28f, + 0x27f68e, + 0x3cc6c7, + 0x206702, + 0x295d05, + 0x295d06, + 0x21d902, + 0x200bc2, + 0x28d746, + 0x2062c3, + 0x206586, + 0x2cc185, + 0x2cc18d, + 0x2cc7d5, + 0x2cd88c, + 0x2cdc0d, + 0x2cdf52, + 0x205a02, + 0x26bf42, + 0x2050c2, + 0x3dbec6, + 0x3b0d86, + 0x202f42, + 0x3cfdc6, + 0x218d42, + 0x374a45, + 0x202f82, + 0x382b89, + 0x22330c, + 0x22364b, + 0x2003c2, + 0x24f708, + 0x201902, + 0x200a82, + 0x271f86, + 0x2e4045, + 0x200a87, + 0x228445, + 0x2563c5, + 0x2091c2, + 0x20a1c2, + 0x2161c2, + 0x3a7c87, + 0x2f1dcd, + 0x2f214c, + 0x243047, + 0x278002, + 0x201c82, + 0x3c63c8, + 0x201c88, + 0x32c1c8, + 0x2faf84, + 0x2c5807, + 0x33e603, + 0x223c42, + 0x212842, + 0x2f3749, + 0x26aec7, + 0x216102, + 0x272385, + 0x220082, + 0x20b182, + 0x2fd083, + 0x2fd086, + 0x2fd202, + 0x301b02, + 0x200402, + 0x36c686, + 0x2aba07, + 0x215f02, + 0x200902, + 0x25c50f, + 0x2863cd, + 0x3b12ce, + 0x3d21cc, + 0x204bc2, + 0x203d82, + 0x28c585, + 0x320886, + 0x200b82, + 0x204d42, + 0x200682, + 0x286744, + 0x2db384, + 0x359786, + 0x204e82, + 0x286e87, + 0x23bc03, + 0x23bc08, + 0x23f748, + 0x37f1c7, + 0x24e306, + 0x201702, + 0x2183c3, + 0x2183c7, + 0x314946, + 0x2e7e85, + 0x2fb308, + 0x202602, + 0x3a9687, + 0x2411c2, + 0x293042, + 0x209442, + 0x219809, + 0x201082, + 0xc41c8, + 0x2021c2, + 0x2432c3, + 0x202247, + 0x205c42, + 0x22348c, + 0x22378b, + 0x2d5dc6, + 0x2eabc5, + 0x247c82, + 0x201942, + 0x2bf146, + 0x236483, + 0x328ec7, + 0x235282, + 0x2008c2, + 0x38d655, + 0x24c3d5, + 0x231d13, + 0x24c913, + 0x37f647, + 0x25b951, + 0x262d10, + 0x274d92, + 0x2779d1, + 0x284bc8, + 0x284bd0, + 0x2d7c8f, + 0x29d653, + 0x29e352, + 0x29ffd0, + 0x2a7b8f, + 0x2a9e12, + 0x305811, + 0x371353, + 0x3b78d2, + 0x2b2e8f, + 0x2cbe0e, + 0x2cd412, + 0x2d3c51, + 0x2d430f, + 0x2d830e, + 0x2d9791, + 0x2de010, + 0x2df0d2, + 0x2e8a91, + 0x2ef5d0, + 0x2fa4cf, + 0x2fd6d1, + 0x3029d0, + 0x31bb46, + 0x3adfc7, + 0x20ce47, + 0x201a42, + 0x2824c5, + 0x30b247, + 0x20ff42, + 0x207e02, + 0x229545, + 0x220883, + 0x2bdfc6, + 0x2f1f8d, + 0x2f22cc, + 0x217042, + 0x369c8b, + 0x27480a, + 0x21e2ca, + 0x2bc0c9, + 0x2f0c0b, + 0x34e48d, + 0x30b94c, + 0x25b3ca, + 0x27108c, + 0x2758cb, + 0x2976cc, + 0x31ce0e, + 0x36710b, + 0x2b1d4c, + 0x2e2703, + 0x37aa86, + 0x3bcb02, + 0x2fbb02, + 0x25a083, + 0x20ff82, + 0x233b03, + 0x324b86, + 0x25de07, + 0x2e0e06, + 0x2e1e88, + 0x3428c8, + 0x31d5c6, + 0x200f02, + 0x30d94d, + 0x30dc8c, + 0x318c07, + 0x312e47, + 0x229942, + 0x216302, + 0x218342, + 0x279642, + 0x335056, + 0x33a4d5, + 0x33d6d6, + 0x346693, + 0x346d52, + 0x357d53, + 0x358492, + 0x3aa4cf, + 0x3bbb18, + 0x3bc5d7, + 0x3bdc19, + 0x3be7d8, + 0x3bf698, + 0x3c46d7, + 0x3c57d7, + 0x3c7016, + 0x3ca6d3, + 0x3cbc95, + 0x3cc992, + 0x3cce13, + 0x20c302, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x217b84, + 0x20a803, + 0x216603, + 0x20c603, + 0x2000c2, + 0x203042, + 0x39e946c5, + 0x3a219305, + 0x3a675c06, + 0x9fe08, + 0x3aab3405, + 0x20c302, + 0x201d02, + 0x3aefedc5, + 0x3b280405, + 0x3b681c47, + 0x3ba82949, + 0x3bf064c4, 0x200382, 0x200642, - 0x3a24d8c5, - 0x3a698349, - 0x3ab37f88, - 0x3aeaef45, - 0x3b317887, - 0x3b613148, - 0x3baed185, - 0x3be45a86, - 0x3c2496c9, - 0x3c6d3388, - 0x3cac3848, - 0x3ce9898a, - 0x3d2e1804, - 0x3d60d685, - 0x3dabf848, - 0x3de03945, - 0x212302, - 0x3e237f83, - 0x3e6a5746, - 0x3eae6548, - 0x3efb8806, - 0x3f209388, - 0x3f727d86, - 0x3fa3dbc4, - 0x3fe02642, - 0x40301b47, - 0x406ab6c4, - 0x40a7a1c7, - 0x40f2f7c7, + 0x3c25aec5, + 0x3c6998c9, + 0x3cb34708, + 0x3ceafc45, + 0x3d313987, + 0x3d622508, + 0x3db11985, + 0x3de9a406, + 0x3e243789, + 0x3e6d1dc8, + 0x3eac45c8, + 0x3ee99f0a, + 0x3f277244, + 0x3f605285, + 0x3fac0b08, + 0x3fe01885, + 0x213ec2, + 0x40242a83, + 0x406a64c6, + 0x40b4f408, + 0x40e1f986, + 0x412dd348, + 0x41779b06, + 0x41a3f204, + 0x41e05642, + 0x427315c7, + 0x42aacb84, + 0x42e79cc7, + 0x433c4d87, 0x2003c2, - 0x4129dbc5, - 0x41644704, - 0x41ad29c7, - 0x41e31c87, - 0x42286b46, - 0x42683785, - 0x42a98447, - 0x42ed3208, - 0x4328e007, - 0x437cf549, - 0x43ad6385, - 0x43f125c7, - 0x44292f06, - 0x9a54b, - 0x44606548, - 0x22824d, - 0x27e1c9, - 0x2a874b, - 0x2aaa8b, - 0x3199cb, - 0x31758b, - 0x3222cb, - 0x32258b, - 0x322ac9, - 0x323d4b, - 0x32400b, - 0x3245cb, - 0x3256ca, - 0x325c0a, - 0x32620c, - 0x32a58b, - 0x32b18a, - 0x34240a, - 0x34ad8e, - 0x34bece, - 0x34c24a, - 0x34dd4a, - 0x34eb0b, - 0x34edcb, - 0x34fa4b, - 0x36bc8b, - 0x36c28a, - 0x36cf4b, - 0x36d20a, - 0x36d48a, - 0x36d70a, - 0x38d78b, - 0x392f8b, - 0x39588e, - 0x395c0b, - 0x39d24b, - 0x3a198b, - 0x3a51ca, - 0x3a5449, - 0x3a568a, - 0x3a764a, - 0x3bd9cb, - 0x3c9f4b, - 0x3ca7ca, - 0x3cdc0b, - 0x3d39cb, - 0x3db18b, - 0x44a854c8, - 0x44e8a6c9, - 0x452a0a89, - 0x456e7748, - 0x355405, - 0x2017c3, - 0x27fac4, - 0x2be185, - 0x236fc6, - 0x245805, - 0x289d84, - 0x367108, - 0x31c2c5, - 0x294c44, - 0x3c2887, - 0x2a000a, - 0x381e0a, - 0x303147, - 0x21a647, - 0x2e0947, - 0x27cfc7, - 0x35b445, - 0x211d46, - 0x39f487, - 0x360704, - 0x2b5186, - 0x2f1b86, - 0x3bf885, - 0x34a344, - 0x2999c6, - 0x29ecc7, - 0x238186, - 0x301747, - 0x228883, - 0x3d3c86, - 0x2ff6c5, - 0x284047, - 0x269e8a, - 0x232644, - 0x212508, - 0x312a09, - 0x2cd2c7, - 0x393846, - 0x255348, - 0x3b8f49, - 0x32af04, - 0x3a8c84, - 0x2d8045, - 0x2823c8, - 0x2ca0c7, - 0x2c4949, - 0x229a08, - 0x318dc6, - 0x2e6006, - 0x29ae08, - 0x370586, - 0x28a305, - 0x286c06, - 0x27aa48, - 0x3a8d06, - 0x23eacb, - 0x2b1046, - 0x29c80d, - 0x3bf405, - 0x2ab586, - 0x213205, - 0x349189, - 0x247e07, - 0x3badc8, - 0x3666c6, - 0x29b949, - 0x3cb146, - 0x269e05, - 0x2a2dc6, - 0x2704c6, - 0x2cf6c9, - 0x2bb246, - 0x29fd07, - 0x2a3445, - 0x21b203, - 0x223885, - 0x29cac7, - 0x3614c6, - 0x3bf309, - 0x27e706, - 0x286e46, - 0x211a09, - 0x286609, - 0x2a39c7, - 0x384748, - 0x29a209, - 0x284448, - 0x36bb06, - 0x2dcc45, - 0x31ef0a, - 0x286ec6, - 0x204c46, - 0x2d3e45, - 0x256488, - 0x357487, - 0x22f8ca, - 0x251a06, - 0x2f36c5, - 0x2ffd46, - 0x2d5607, - 0x393707, - 0x21b385, - 0x269fc5, - 0x2a95c6, - 0x2b6806, - 0x2d4686, - 0x2bfd04, - 0x285b89, - 0x28b846, - 0x2d03ca, - 0x225c88, - 0x3122c8, - 0x381e0a, - 0x223a45, - 0x29ec05, - 0x2311c8, - 0x2baf48, - 0x239f47, - 0x2b7dc6, - 0x33af48, + 0x4369e985, + 0x43a88bc4, + 0x43ed0e07, + 0x4423b747, + 0x44684586, + 0x44a81485, + 0x44e999c7, + 0x452d1c48, + 0x457c5107, + 0x45b48289, + 0x45ed3985, + 0x463102c7, + 0x46693d06, + 0x46e4b, + 0x46a7b288, + 0x2221cd, + 0x27d049, + 0x28858b, + 0x2aa48b, + 0x2b734b, + 0x31368b, + 0x320a8b, + 0x320d4b, + 0x321b89, + 0x32398b, + 0x323c4b, + 0x32430b, + 0x32548a, + 0x3259ca, + 0x325fcc, + 0x32bc4b, + 0x32c3ca, + 0x3419ca, + 0x34d0ce, + 0x35024e, + 0x3505ca, + 0x3521ca, + 0x352bcb, + 0x352e8b, + 0x353b0b, + 0x36d78b, + 0x36dd8a, + 0x36ea4b, + 0x36ed0a, + 0x36ef8a, + 0x36f20a, + 0x38decb, + 0x39360b, + 0x395ace, + 0x395e4b, + 0x39cfcb, + 0x39de8b, + 0x3a124a, + 0x3a14c9, + 0x3a170a, + 0x3a31ca, + 0x3bb50b, + 0x3c8c0b, + 0x3c960a, + 0x3ca10b, + 0x3d38cb, + 0x3dc34b, + 0x46e82f08, + 0x47288fc9, + 0x476a21c9, + 0x47ae4d08, + 0x359505, + 0x218e03, + 0x27e244, + 0x2abc05, + 0x306206, + 0x34d545, + 0x288844, + 0x3775c8, + 0x3197c5, + 0x295604, + 0x3c17c7, + 0x2a154a, + 0x381fca, + 0x3cc7c7, 0x218d07, - 0x2838c8, - 0x2b9bc6, - 0x287608, - 0x297986, - 0x27a647, - 0x36fe46, - 0x2999c6, - 0x281f8a, - 0x2da906, - 0x2dcc49, - 0x368146, - 0x371d8a, - 0x23dbc9, - 0x2f5206, - 0x2bba04, - 0x28dd4d, - 0x28a947, - 0x28e8c6, - 0x2c3705, - 0x3cb1c5, - 0x38ef06, - 0x2d2809, - 0x2eda47, - 0x27bfc6, - 0x2cbcc6, - 0x289e09, - 0x28a244, - 0x241304, - 0x201688, - 0x35fb86, - 0x2a2ec8, - 0x2fd948, - 0x3b9d47, - 0x3b8209, - 0x3b44c7, - 0x2b284a, - 0x2f630f, - 0x2ec3ca, - 0x310305, - 0x27ac85, - 0x2108c5, - 0x3b7807, - 0x23f643, - 0x384948, - 0x27d606, - 0x27d709, - 0x2eb646, - 0x2cf507, - 0x29b709, - 0x3bacc8, - 0x2d3f07, - 0x31fe43, - 0x355485, - 0x2d5145, - 0x2bfb4b, - 0x203a04, - 0x306384, - 0x278ec6, - 0x3204c7, - 0x39aeca, - 0x238007, - 0x209887, - 0x282b45, - 0x3c0645, - 0x292189, - 0x2999c6, - 0x237e8d, - 0x3632c5, - 0x2b5dc3, - 0x226783, - 0x21e685, - 0x35b0c5, - 0x255348, - 0x27cc87, - 0x241086, - 0x2a0706, - 0x2288c5, - 0x233a07, - 0x3b9847, - 0x238ec7, - 0x20d70a, - 0x3d3d48, - 0x2bfd04, - 0x280887, - 0x2805c7, - 0x34f046, - 0x297007, - 0x2c8608, - 0x304248, - 0x247d06, - 0x21a888, - 0x2bb2c4, - 0x39f486, - 0x2656c6, - 0x390946, - 0x201b06, - 0x21bb44, - 0x27d086, - 0x2c2346, - 0x299d86, - 0x20fd86, - 0x3c7586, - 0x244446, - 0x240f88, - 0x2b5008, - 0x2d9608, - 0x245a08, - 0x231146, - 0x20c245, - 0x223846, - 0x2aefc5, - 0x391647, - 0x229ac5, - 0x20c503, - 0x3c4785, - 0x22ccc4, - 0x3c76c5, - 0x2039c3, - 0x3a3547, - 0x3426c8, - 0x301806, - 0x36694d, - 0x27ac46, - 0x299345, - 0x218783, - 0x2bf209, - 0x28a3c6, - 0x295746, - 0x288904, - 0x2ec347, - 0x39fec6, - 0x2edd05, - 0x20fd43, - 0x3d1ac4, - 0x280786, - 0x211e44, - 0x2657c8, - 0x3bb109, - 0x306d89, - 0x2a2cca, - 0x29270d, - 0x2329c7, - 0x3c4bc6, - 0x20bc84, - 0x284c49, - 0x289388, - 0x28a546, - 0x235606, - 0x297007, - 0x2bc186, - 0x2266c6, - 0x336886, - 0x32f84a, - 0x213148, - 0x2a9e45, - 0x372a49, - 0x2ca84a, - 0x3029c8, - 0x29e408, - 0x2956c8, - 0x2a034c, - 0x34ff85, - 0x2a0988, - 0x2b7b46, - 0x344ec6, - 0x3a1c07, - 0x237f05, - 0x286d85, - 0x306c49, - 0x3dc3c7, - 0x27d6c5, - 0x228707, - 0x226783, - 0x2cad05, - 0x21ea48, - 0x285907, - 0x29e2c9, - 0x2dcb05, - 0x3b0b44, - 0x2a4248, - 0x301c87, - 0x2d40c8, - 0x3b5c08, - 0x2ac3c5, - 0x3b7bc6, - 0x248186, - 0x2d8409, - 0x2b1847, - 0x2af786, - 0x21e147, - 0x202183, - 0x237284, - 0x2d0a85, - 0x280b04, - 0x24ba44, - 0x25e7c7, - 0x268747, - 0x27c184, - 0x29e110, - 0x372c47, - 0x3c0645, - 0x3308cc, - 0x20f384, - 0x35d248, - 0x27a549, - 0x383dc6, - 0x2f40c8, - 0x246544, - 0x2791c8, - 0x302346, - 0x281e08, - 0x29cd86, - 0x39800b, - 0x32cd85, - 0x2d0908, - 0x211444, - 0x3bb54a, - 0x29e2c9, - 0x36fd46, - 0x319348, - 0x2a6105, - 0x2be9c4, - 0x35d146, - 0x238d88, - 0x2854c8, - 0x33b7c6, - 0x21fe04, - 0x31ee86, - 0x3b4547, - 0x27a0c7, - 0x29700f, - 0x32de07, - 0x2f52c7, - 0x31ff85, - 0x374345, - 0x2a3689, - 0x2e8ac6, - 0x26b885, - 0x286907, - 0x3a1e88, - 0x2fca45, - 0x36fe46, - 0x225ac8, - 0x3b880a, - 0x238a88, - 0x28fa87, - 0x2f6746, - 0x372a06, + 0x2de547, + 0x282bc7, + 0x35e6c5, + 0x3b0106, + 0x3b0347, + 0x3bdb04, + 0x2f1246, + 0x2f1146, + 0x3b06c5, + 0x355784, + 0x29af46, + 0x2a0607, + 0x26a746, + 0x31f207, + 0x27e303, + 0x39c446, + 0x251ec5, + 0x281d47, + 0x267aca, + 0x231544, + 0x220c88, + 0x310809, + 0x2cc587, + 0x38f346, + 0x28ee48, + 0x2200c9, + 0x369504, + 0x35c644, + 0x2d5085, + 0x225d48, + 0x2ca407, + 0x2f3249, + 0x228ec8, + 0x315686, + 0x229a46, + 0x29b888, + 0x371b06, + 0x219305, + 0x284646, + 0x27a648, + 0x27f186, + 0x25440b, + 0x292ec6, + 0x29d1cd, + 0x3c12c5, + 0x2aca46, + 0x210985, + 0x3b91c9, + 0x249507, + 0x3a4a48, + 0x314486, + 0x29c489, + 0x3b8486, + 0x267a45, + 0x215146, + 0x2c9006, + 0x2cee49, + 0x2b9b06, + 0x2a1247, + 0x2a4385, + 0x207683, + 0x223cc5, + 0x2affc7, + 0x36a486, + 0x3c11c9, + 0x275c06, + 0x279ec6, + 0x21a549, + 0x284049, + 0x2a4907, + 0x344e08, + 0x2a75c9, + 0x282148, + 0x3929c6, + 0x2dab45, + 0x278eca, + 0x279f46, + 0x21ce06, + 0x2d28c5, + 0x24ff08, + 0x2eb407, + 0x22f24a, + 0x24bb06, + 0x2f4745, + 0x302086, + 0x328687, + 0x38f207, + 0x21b145, + 0x267c05, + 0x269d86, + 0x26e4c6, + 0x27fdc6, + 0x226384, + 0x2835c9, + 0x28a146, + 0x2fd3ca, + 0x2278c8, + 0x30ffc8, + 0x381fca, + 0x223fc5, + 0x2a0545, + 0x3c1e08, + 0x2bcc08, + 0x266e07, + 0x226b86, + 0x338748, + 0x20e887, + 0x2815c8, + 0x2b8cc6, + 0x285308, + 0x298406, + 0x27ca47, + 0x3229c6, + 0x29af46, + 0x26ed4a, + 0x2d5ec6, + 0x2dab49, + 0x368506, + 0x21eb0a, + 0x23f209, + 0x2f2786, + 0x2baac4, + 0x35c38d, + 0x289247, + 0x2e6186, + 0x2c4485, + 0x3b8505, + 0x38fe46, + 0x2d0c49, + 0x2b7907, + 0x27bb46, + 0x2c9e46, + 0x2888c9, + 0x359a44, + 0x244f84, + 0x340e88, + 0x236846, + 0x2a3e08, + 0x2150c8, + 0x219447, + 0x3b5b89, + 0x27ffc7, + 0x2b32ca, + 0x2f420f, + 0x26f44a, + 0x28c385, + 0x27a885, + 0x214f05, + 0x21f147, + 0x267083, + 0x345008, + 0x20ef06, + 0x20f009, + 0x3cb186, + 0x2d0487, + 0x29c249, + 0x3a4948, + 0x2d2987, + 0x31da43, + 0x359585, + 0x3281c5, + 0x2261cb, + 0x201944, + 0x308804, + 0x278686, + 0x31dc07, + 0x39abca, + 0x242b07, + 0x2ff907, + 0x280405, + 0x3bfc85, + 0x26de89, + 0x29af46, + 0x24298d, + 0x33fac5, + 0x2b6243, + 0x23ffc3, + 0x3d0605, + 0x35e345, + 0x28ee48, + 0x27c487, + 0x244d06, + 0x2a1e46, + 0x229e05, + 0x232f07, + 0x2e6d07, + 0x3db5c7, + 0x20530a, + 0x39c508, + 0x226384, + 0x27ef07, + 0x27ec47, + 0x353106, + 0x297a87, + 0x2e0388, + 0x360f08, + 0x249406, + 0x218f48, + 0x2b9b84, + 0x3b0346, + 0x238786, + 0x3aa006, + 0x345606, + 0x219cc4, + 0x282c86, + 0x2c3106, + 0x29b306, + 0x22f846, + 0x3c6986, + 0x2e01c6, + 0x244c08, + 0x2b4d08, + 0x2d6848, + 0x34d748, + 0x3c1d86, + 0x209a85, + 0x223c86, + 0x2afcc5, + 0x391e47, + 0x228f85, + 0x20ba83, + 0x20ca85, + 0x230fc4, + 0x3c6ac5, + 0x201903, + 0x393907, + 0x36d1c8, + 0x31f2c6, + 0x376e0d, + 0x27a846, + 0x29a8c5, + 0x219803, + 0x2c04c9, + 0x359bc6, + 0x296206, + 0x398b84, + 0x26f3c7, + 0x36c186, + 0x2b7bc5, + 0x242943, + 0x3d7004, + 0x27ee06, + 0x238884, + 0x2e9f88, + 0x3befc9, + 0x309209, + 0x2a3c0a, + 0x2a54cd, + 0x2318c7, + 0x3ba1c6, + 0x20a204, + 0x282949, + 0x287b88, + 0x288e46, + 0x234b46, + 0x297a87, + 0x2c1246, + 0x34fc46, + 0x2ffa86, + 0x3c4e0a, + 0x222508, + 0x2e3805, + 0x33e9c9, + 0x2cab8a, + 0x305288, + 0x29f1c8, + 0x296188, + 0x2e710c, + 0x350805, + 0x2a20c8, + 0x2b5006, + 0x317646, + 0x3d8287, + 0x242a05, + 0x2847c5, + 0x3090c9, + 0x20ac07, + 0x20efc5, + 0x237187, + 0x23ffc3, + 0x2cb045, + 0x21ac08, + 0x283347, + 0x29f089, + 0x2dedc5, + 0x3ae2c4, + 0x2a5188, + 0x331707, + 0x2d2b48, + 0x3d36c8, + 0x2adbc5, + 0x21f506, + 0x249886, + 0x2d5449, + 0x2b3f47, + 0x2b0386, + 0x3d00c7, + 0x205083, + 0x3064c4, + 0x2d8c85, + 0x233044, + 0x248d84, + 0x3890c7, + 0x2651c7, + 0x27bd04, + 0x29eed0, + 0x33ebc7, + 0x3bfc85, + 0x2f764c, + 0x32a2c4, + 0x2b2b48, + 0x27c949, + 0x385146, + 0x319dc8, + 0x270d84, + 0x278988, + 0x331dc6, + 0x26ebc8, + 0x2a0bc6, + 0x2d004b, + 0x32de45, + 0x2d8b08, + 0x213304, + 0x3bf40a, + 0x29f089, + 0x3228c6, + 0x225fc8, + 0x258305, + 0x2bfd44, + 0x2b2a46, + 0x3db488, + 0x282f08, + 0x338fc6, + 0x301104, + 0x278e46, + 0x280047, + 0x279bc7, + 0x297a8f, + 0x32eec7, + 0x2f2847, + 0x295bc5, + 0x376185, + 0x2a45c9, + 0x2d7886, + 0x389305, + 0x284347, + 0x2cd008, + 0x2f9c05, + 0x3229c6, + 0x227708, + 0x21f98a, + 0x3db188, + 0x28d4c7, + 0x2f4646, + 0x33e986, 0x2003c3, - 0x20ecc3, - 0x2caa09, - 0x29a089, - 0x35d046, - 0x2dcb05, - 0x21ab08, - 0x319348, - 0x370708, - 0x33690b, - 0x366b87, - 0x2fb749, - 0x297288, - 0x35e8c4, - 0x390588, - 0x291209, - 0x2afa85, - 0x3b7707, - 0x237305, - 0x2853c8, - 0x29374b, - 0x298190, - 0x2ab305, - 0x21138c, - 0x241245, - 0x282bc3, - 0x2b4446, - 0x2c1244, - 0x370106, - 0x29ecc7, - 0x225b44, - 0x241fc8, - 0x38480d, - 0x319205, - 0x232a04, - 0x2a2544, - 0x2a2549, - 0x2acbc8, - 0x32d247, - 0x3023c8, - 0x285c48, - 0x27c2c5, - 0x205987, - 0x27c247, - 0x2c6447, - 0x269fc9, - 0x3365c9, - 0x20b646, - 0x2bdbc6, - 0x2869c6, - 0x34d6c5, - 0x3a83c4, - 0x3ba3c6, - 0x3bf0c6, - 0x27c308, - 0x2d52cb, - 0x267287, - 0x20bc84, - 0x39fe06, - 0x2c8947, - 0x244045, - 0x244f45, - 0x2ae104, - 0x336546, - 0x3ba448, - 0x284c49, - 0x25f446, - 0x289188, - 0x2eddc6, - 0x35a6c8, - 0x2b340c, - 0x27c186, - 0x29900d, - 0x29948b, - 0x29fdc5, - 0x3b9987, - 0x2bb346, - 0x3935c8, - 0x20b6c9, - 0x3057c8, - 0x3c0645, - 0x360447, - 0x284548, - 0x2ff109, - 0x39fb46, - 0x25f34a, - 0x393348, - 0x30560b, - 0x2133cc, - 0x2792c8, - 0x27fd46, - 0x205388, - 0x3b8487, - 0x209509, - 0x3179cd, - 0x2998c6, - 0x23f608, - 0x2b4ec9, - 0x2bfe08, - 0x287708, - 0x2c2d8c, - 0x2c3e47, - 0x2c4f47, - 0x269e05, - 0x2b89c7, - 0x3a1d48, - 0x35d1c6, - 0x36b18c, - 0x2cb288, - 0x2d1f48, - 0x2ff406, - 0x2d4ec7, - 0x20b844, - 0x245a08, - 0x31e9cc, - 0x28b28c, - 0x310385, - 0x3bf907, - 0x21fd86, - 0x2d4e46, - 0x349348, - 0x21cfc4, - 0x23818b, - 0x27b20b, - 0x2f6746, - 0x384687, - 0x3ccdc5, - 0x271205, - 0x2382c6, - 0x2a60c5, - 0x2039c5, - 0x2cdd87, - 0x3bfcc9, - 0x2b69c4, - 0x25ca05, - 0x3ac2c5, - 0x3b7f88, - 0x28d3c5, - 0x26e249, - 0x375e47, - 0x375e4b, - 0x2f4f46, - 0x240cc9, - 0x34a288, - 0x288405, - 0x2c6548, - 0x336608, - 0x273547, - 0x302147, - 0x25e849, - 0x281d47, - 0x295309, - 0x334f0c, - 0x3cf448, - 0x2b84c9, - 0x2ba407, - 0x285d09, - 0x3617c7, - 0x2134c8, - 0x3b83c5, - 0x39f406, - 0x2c3748, - 0x2f6848, - 0x2ca709, - 0x203a07, - 0x271c05, - 0x256089, - 0x2d8746, - 0x292f04, - 0x31bd06, - 0x2e63c8, - 0x2ff8c7, - 0x2d54c8, - 0x21a949, - 0x3286c7, - 0x2a01c6, - 0x3b9a44, - 0x3c4809, - 0x205808, - 0x2ff2c7, - 0x237c86, - 0x2d5206, - 0x204bc4, - 0x36a2c6, - 0x23a303, - 0x32c909, - 0x32cd46, - 0x2ab805, - 0x2a0706, - 0x2cfa85, - 0x2849c8, - 0x368547, - 0x2ddcc6, - 0x32f206, - 0x3122c8, - 0x2a3807, - 0x299905, - 0x29df08, - 0x3ca348, - 0x393348, - 0x241105, - 0x39f486, - 0x306b49, - 0x2d8284, - 0x2cf90b, - 0x2263cb, - 0x2a9d49, - 0x226783, - 0x25aac5, - 0x301606, - 0x241c88, - 0x2b6cc4, - 0x301806, - 0x20d849, - 0x31e385, - 0x2cdcc6, - 0x301c86, - 0x210984, - 0x29e58a, - 0x2ab748, - 0x2f6846, - 0x243e85, - 0x3ccc47, - 0x35b307, - 0x3b7bc4, - 0x226607, - 0x229a84, - 0x229a86, - 0x205dc3, - 0x269fc5, - 0x2b0445, - 0x368788, - 0x280a45, - 0x27bec9, - 0x245847, - 0x24584b, - 0x2a554c, - 0x2a5b4a, - 0x317887, - 0x201303, - 0x26bd48, - 0x2412c5, - 0x2fcac5, - 0x355544, - 0x2133c6, - 0x27a546, - 0x36a307, - 0x25560b, - 0x21bb44, - 0x3008c4, - 0x2c9284, - 0x2cf386, - 0x225b44, - 0x2824c8, - 0x355345, - 0x21b205, - 0x370647, - 0x3b9a89, - 0x35b0c5, - 0x38ef0a, - 0x2a3349, - 0x2a82ca, - 0x32f989, - 0x338e44, - 0x2cbd85, - 0x2bc288, - 0x2d2a8b, - 0x2d8045, - 0x2fdac6, - 0x240844, - 0x27c406, - 0x328549, - 0x2c8a47, - 0x27e8c8, - 0x292a86, - 0x3b44c7, - 0x2854c8, - 0x38f486, - 0x3b9544, - 0x380c47, - 0x36e085, - 0x382447, - 0x245a84, - 0x2bb2c6, - 0x3026c8, - 0x299648, - 0x2fa2c7, - 0x3294c8, - 0x297a45, - 0x226504, - 0x381d08, - 0x3201c4, - 0x210845, - 0x3028c4, - 0x218e07, - 0x28b907, - 0x285e48, - 0x2d4246, - 0x2809c5, - 0x27bcc8, - 0x24bb48, - 0x2a2c09, - 0x2266c6, - 0x22f948, - 0x3bb3ca, - 0x2440c8, - 0x2ed185, - 0x215686, - 0x2a3208, - 0x36050a, - 0x357887, - 0x2897c5, - 0x293108, - 0x2dd904, - 0x256506, - 0x2c52c8, - 0x3c7586, - 0x30a648, - 0x2d6947, - 0x3c2786, - 0x2bba04, - 0x281487, - 0x2b5484, - 0x328507, - 0x36fa8d, - 0x239fc5, - 0x2d260b, - 0x28b506, - 0x2551c8, - 0x241f84, - 0x231346, - 0x280786, - 0x2056c7, - 0x298ccd, - 0x2fc607, - 0x2b5d08, - 0x284e05, - 0x36a448, - 0x2ca046, - 0x297ac8, - 0x39df06, - 0x330647, - 0x2861c9, - 0x36a9c7, - 0x28a808, - 0x275c45, - 0x228948, - 0x2d4d85, - 0x22a4c5, - 0x32fc05, - 0x251e03, - 0x201b84, - 0x244185, - 0x2496c9, - 0x36a0c6, - 0x2c8708, - 0x301f05, - 0x2b8887, - 0x344a4a, - 0x2cdc09, - 0x2703ca, - 0x2d9688, - 0x22854c, - 0x28698d, - 0x30d243, - 0x30a548, - 0x3d1a85, - 0x3b85c6, - 0x3bab46, - 0x359205, - 0x21e249, - 0x361605, - 0x27bcc8, - 0x2590c6, - 0x35dbc6, - 0x2a4109, - 0x3aae47, - 0x293a06, - 0x3449c8, - 0x390848, - 0x2e7947, - 0x2c24ce, - 0x2ca285, - 0x2ff005, - 0x3c7488, - 0x2e9a87, - 0x204c42, - 0x2c2904, - 0x37000a, - 0x2ff388, - 0x336746, - 0x29b848, - 0x248186, - 0x361108, - 0x2af788, - 0x22a484, - 0x2b8c45, - 0x731a84, - 0x731a84, - 0x731a84, - 0x2094c3, - 0x2d5086, - 0x27c186, - 0x29fa8c, - 0x20d8c3, - 0x246446, - 0x2133c4, - 0x28a348, - 0x20d685, - 0x370106, - 0x2bf948, - 0x2daf86, - 0x2ddc46, - 0x3a88c8, - 0x2d0b07, - 0x281b09, - 0x3114ca, - 0x20d6c4, - 0x229ac5, - 0x2c4905, - 0x2d65c6, - 0x232a06, - 0x29f406, - 0x3cef46, - 0x281c44, - 0x281c4b, - 0x229884, - 0x240e45, - 0x2ae605, - 0x3b9e06, - 0x3c2c08, - 0x286847, - 0x32ccc4, - 0x25dfc3, - 0x2dd405, - 0x31bbc7, - 0x28674b, - 0x368687, - 0x2bf848, - 0x2b8d87, - 0x26b246, - 0x27e488, - 0x25364b, - 0x2be0c6, - 0x20c249, - 0x2537c5, - 0x31fe43, - 0x2cdcc6, - 0x2d6848, - 0x20d2c3, - 0x2ad643, - 0x2854c6, - 0x248186, - 0x37654a, - 0x27fd85, - 0x2805cb, - 0x2a064b, - 0x244e03, - 0x202603, - 0x2b27c4, - 0x247f47, - 0x2792c4, - 0x28a344, - 0x2b79c4, - 0x2443c8, - 0x243dc8, - 0x20ec49, - 0x2d6408, - 0x32fe87, - 0x20fd86, - 0x2c834f, - 0x2ca3c6, - 0x2d8b84, - 0x243c0a, - 0x31bac7, - 0x2b5586, - 0x292f49, - 0x20ebc5, - 0x3688c5, - 0x20ed06, - 0x228a83, - 0x2dd949, - 0x2132c6, - 0x21a709, - 0x39aec6, - 0x269fc5, - 0x310785, - 0x201b83, - 0x248088, - 0x32d407, - 0x27d604, - 0x28a1c8, - 0x344c44, - 0x304b46, - 0x2b4446, - 0x23cb46, - 0x2d07c9, - 0x2fca45, - 0x2999c6, - 0x22fec9, - 0x2c8e86, - 0x244446, - 0x3a3946, - 0x22b5c5, - 0x3028c6, - 0x330644, - 0x3b83c5, - 0x2c3744, - 0x2b78c6, - 0x363284, - 0x203b03, - 0x289445, - 0x2346c8, - 0x2e4947, - 0x2b6d49, - 0x2896c8, - 0x29abd1, - 0x301d0a, - 0x2f6687, - 0x304586, - 0x2133c4, - 0x2c3848, - 0x3698c8, - 0x29ad8a, - 0x26e00d, - 0x2a2dc6, - 0x3a89c6, - 0x281546, - 0x21b207, - 0x2b5dc5, - 0x275187, - 0x28a285, - 0x375f84, - 0x2aa746, - 0x39f2c7, - 0x2dd64d, - 0x2a3147, - 0x367008, - 0x27bfc9, - 0x215586, - 0x39fac5, - 0x231a84, - 0x2e64c6, - 0x3b7ac6, - 0x2ff506, - 0x29c0c8, - 0x222e43, - 0x2056c3, - 0x37f685, - 0x251386, - 0x2af745, - 0x292c88, - 0x29ee8a, - 0x3b7cc4, - 0x28a348, - 0x2956c8, - 0x3b9c47, - 0x301fc9, - 0x2bf548, - 0x284cc7, - 0x2b7c46, - 0x3c758a, - 0x2e6548, - 0x30d849, - 0x2acc88, - 0x21ae09, - 0x304447, - 0x2f9505, - 0x336b06, - 0x35d048, - 0x3885c8, - 0x39ea08, - 0x210988, - 0x240e45, - 0x201484, - 0x233088, - 0x21f304, - 0x32f784, - 0x269fc5, - 0x294c87, - 0x3b9849, - 0x2054c7, - 0x211a85, - 0x2790c6, - 0x367dc6, - 0x20c384, - 0x2a4446, - 0x27f8c4, - 0x28c286, - 0x3b9606, - 0x20d106, - 0x3c0645, - 0x292b47, - 0x201303, - 0x272d49, - 0x3120c8, - 0x284b44, - 0x284b4d, - 0x299748, - 0x2efe48, - 0x30d7c6, - 0x2862c9, - 0x2cdc09, - 0x328245, - 0x29ef8a, - 0x26e88a, - 0x24e50c, - 0x24e686, - 0x2799c6, - 0x2cac46, - 0x26b6c9, - 0x3b8806, - 0x213546, - 0x3616c6, - 0x245a08, - 0x238a86, - 0x2d7b4b, - 0x294e05, - 0x21b205, - 0x27a1c5, - 0x201406, - 0x226543, - 0x23cac6, - 0x2a30c7, - 0x2c3705, - 0x25c345, - 0x3cb1c5, - 0x37a286, - 0x328304, - 0x337e86, - 0x2a4a09, - 0x20128c, - 0x375cc8, - 0x238d04, - 0x3025c6, - 0x28b606, - 0x2d6848, - 0x319348, - 0x201189, - 0x3ccc47, - 0x35f8c9, - 0x2712c6, - 0x22b984, - 0x208044, - 0x2842c4, - 0x2854c8, - 0x3b968a, - 0x35b046, - 0x369f87, - 0x3826c7, - 0x240dc5, - 0x2c48c4, - 0x2911c6, - 0x2b5e06, - 0x21d003, - 0x311f07, - 0x3b5b08, - 0x32838a, - 0x22b688, - 0x209388, - 0x3632c5, - 0x29fec5, - 0x267385, - 0x241186, - 0x38b006, - 0x398bc5, - 0x32cb49, - 0x2c46cc, - 0x267447, - 0x29ae08, - 0x2b1185, - 0x731a84, - 0x22c344, - 0x285a44, - 0x21a506, - 0x2a1e0e, - 0x368947, - 0x21b405, - 0x2d820c, - 0x30e047, - 0x39f247, - 0x235a09, - 0x2125c9, - 0x2897c5, - 0x3120c8, - 0x306b49, - 0x393205, - 0x2c3648, - 0x2b8706, - 0x381f86, - 0x23dbc4, - 0x290008, - 0x215743, - 0x378384, - 0x2dd485, - 0x394c07, - 0x2de485, - 0x3bb289, - 0x29608d, - 0x2adc06, - 0x3c2344, - 0x2b7d48, - 0x3bfb0a, - 0x224887, - 0x3cc385, - 0x280a03, - 0x2a080e, - 0x24818c, - 0x302ac7, - 0x2a1fc7, - 0x109d86, - 0x205643, - 0x3b8845, - 0x285a45, - 0x29bc08, - 0x2987c9, - 0x238c06, - 0x2792c4, - 0x2f65c6, - 0x23f3cb, - 0x2bd28c, - 0x251ec7, - 0x2d7e05, - 0x3ca248, - 0x2e7705, - 0x243c07, - 0x301b47, - 0x39e885, - 0x226543, - 0x2193c4, - 0x2e6285, - 0x2b68c5, - 0x2b68c6, - 0x29c608, - 0x39f2c7, - 0x3bae46, - 0x204ac6, - 0x32fb46, - 0x23f789, - 0x205a87, - 0x27f9c6, - 0x2bd406, - 0x2e1706, - 0x2ab685, - 0x20a7c6, - 0x377645, - 0x28d448, - 0x29458b, - 0x290f06, - 0x382704, - 0x2da549, - 0x245844, - 0x2b8688, - 0x31be07, - 0x287604, - 0x2bebc8, - 0x2c4d44, - 0x2ab6c4, - 0x28a105, - 0x319246, - 0x244307, - 0x2166c3, - 0x2a0285, - 0x2f4344, - 0x2ff046, - 0x3282c8, - 0x3293c5, - 0x294249, - 0x256285, - 0x246448, - 0x358447, - 0x32ce48, - 0x2be807, - 0x2f5389, - 0x27cf06, - 0x334ac6, - 0x29a344, - 0x300805, - 0x312f4c, - 0x27a1c7, - 0x27ab47, - 0x232648, - 0x2adc06, - 0x2a3004, - 0x37af04, - 0x25e6c9, - 0x2cad46, - 0x292207, - 0x205304, - 0x2a4546, - 0x348c85, - 0x2d3d87, - 0x2d7ac6, - 0x25f209, - 0x2e8cc7, - 0x297007, - 0x2a3f86, - 0x237bc5, - 0x283748, - 0x213148, - 0x20ff86, - 0x329405, - 0x2c5e86, - 0x203883, - 0x29ba89, - 0x29f18e, - 0x2be548, - 0x344d48, - 0x20fd8b, - 0x294486, - 0x327d84, - 0x286584, - 0x29f28a, - 0x211287, - 0x27fa85, - 0x20c249, - 0x2c2405, - 0x32f7c7, - 0x2310c4, - 0x291547, - 0x2fd848, - 0x2cd386, - 0x2bb449, - 0x2bf64a, - 0x211206, - 0x299286, - 0x2ae585, - 0x3961c5, - 0x38cc47, - 0x2479c8, - 0x348bc8, - 0x22a486, - 0x310805, - 0x23278e, - 0x2bfd04, - 0x20ff05, - 0x278a49, - 0x2e88c8, - 0x28f9c6, - 0x29da0c, - 0x29ea90, - 0x2a1a4f, - 0x2a3588, - 0x317887, - 0x3c0645, - 0x244185, - 0x244189, - 0x293309, - 0x31ef86, - 0x2d80c7, - 0x300705, - 0x239f49, - 0x34f0c6, - 0x3b864d, - 0x284189, - 0x28a344, - 0x2be2c8, - 0x233149, - 0x35b206, - 0x26bf45, - 0x334ac6, - 0x27e789, - 0x2063c8, - 0x20c245, - 0x290004, - 0x29dbcb, - 0x35b0c5, - 0x241d06, - 0x286cc6, - 0x206dc6, - 0x2a294b, - 0x294349, - 0x2096c5, - 0x391547, - 0x301c86, - 0x3a8ac6, - 0x2857c8, - 0x282649, - 0x366dcc, - 0x31b9c8, - 0x31b4c6, - 0x33b7c3, - 0x37cd86, - 0x2a2785, - 0x281188, - 0x310206, - 0x2d3fc8, - 0x238085, - 0x3882c5, - 0x358588, - 0x390707, - 0x3baa87, - 0x36a307, - 0x2f40c8, - 0x2d66c8, - 0x2d1886, - 0x2b7707, - 0x237147, - 0x2a264a, - 0x246603, - 0x201406, - 0x232705, - 0x244704, - 0x27bfc9, - 0x2f5304, - 0x2b9f84, - 0x29ce04, - 0x2a1fcb, - 0x32d347, - 0x2329c5, - 0x297748, - 0x2790c6, - 0x2790c8, - 0x27fcc6, - 0x28ff45, - 0x290205, - 0x291bc6, - 0x292548, - 0x292e88, - 0x27c186, - 0x29758f, - 0x29b550, - 0x3bf405, - 0x201303, - 0x22ba45, - 0x2fb688, - 0x293209, - 0x393348, - 0x2d7ec8, - 0x2506c8, - 0x32d407, - 0x278d89, - 0x2d41c8, - 0x2fcf84, - 0x29cc88, - 0x3b8049, - 0x2b81c7, - 0x29cc04, - 0x205588, - 0x29290a, - 0x2cc046, - 0x2a2dc6, - 0x226589, - 0x29ecc7, - 0x2d0648, - 0x20a408, - 0x205188, - 0x38a405, - 0x396f85, - 0x21b205, - 0x285a05, - 0x2b4d07, - 0x226545, - 0x2c3705, - 0x3c2646, - 0x393287, - 0x2d29c7, - 0x292c06, - 0x2d9bc5, - 0x241d06, - 0x26be05, - 0x2badc8, - 0x300684, - 0x2c8f06, - 0x348ac4, - 0x2be9c8, - 0x2c900a, - 0x27cc8c, - 0x255805, - 0x21b2c6, - 0x366f86, - 0x37f546, - 0x2fb884, - 0x3693c5, - 0x27f607, - 0x29ed49, - 0x2cf7c7, - 0x731a84, - 0x731a84, - 0x32d1c5, - 0x2177c4, - 0x29d3ca, - 0x278f46, - 0x306944, - 0x3bf885, - 0x2b3945, - 0x2b5d04, - 0x286907, - 0x256207, - 0x2cf388, - 0x2c5f88, - 0x3c8009, - 0x3201c8, - 0x29d58b, - 0x2442c4, - 0x3a8bc5, - 0x26b905, - 0x36a289, - 0x282649, - 0x2da448, - 0x229888, - 0x2dea44, - 0x28b645, - 0x2017c3, - 0x2d6585, - 0x299a46, - 0x29860c, - 0x2131c6, - 0x26be46, - 0x28fc45, - 0x37a308, - 0x3194c6, - 0x304706, - 0x2a2dc6, - 0x22b40c, - 0x26b9c4, - 0x32fc8a, - 0x28fb88, - 0x298447, - 0x2f4246, - 0x238cc7, - 0x2f61c5, - 0x237c86, - 0x365e46, - 0x374207, - 0x2bf344, - 0x218f05, - 0x278a44, - 0x376007, - 0x278c88, - 0x27984a, - 0x2843c7, - 0x2ab8c7, - 0x317807, - 0x2e7849, - 0x29860a, - 0x20ff83, - 0x2e4905, - 0x20d143, - 0x2b7a09, - 0x2d6a88, - 0x31ff87, - 0x393449, - 0x213246, - 0x32df48, - 0x3a34c5, - 0x24bc4a, - 0x384ac9, - 0x247bc9, - 0x3a1c07, - 0x3699c9, - 0x20d008, - 0x361306, - 0x21b488, - 0x3c1c47, - 0x281d47, - 0x2a3347, - 0x2d3208, - 0x3d02c6, - 0x2926c5, - 0x27f607, - 0x298d88, - 0x348a44, - 0x2d0284, - 0x293907, - 0x2afb07, - 0x3069ca, - 0x361286, - 0x3696ca, - 0x2c2847, - 0x2bfac7, - 0x218fc4, - 0x2953c4, - 0x2d3c86, - 0x3a0144, - 0x3a014c, - 0x306885, - 0x2107c9, - 0x2465c4, - 0x2b5dc5, - 0x3bfa88, - 0x28ea85, - 0x38ef06, - 0x293444, - 0x2a6c8a, - 0x2b1746, - 0x23ed0a, - 0x28e007, - 0x2d5605, - 0x228a85, - 0x240e0a, - 0x39e945, - 0x244146, - 0x21f304, + 0x208a43, + 0x2cad49, + 0x2a7449, 0x2b2946, - 0x38cd05, - 0x3102c6, - 0x2fa2cc, - 0x2db94a, - 0x26e984, - 0x20fd86, - 0x29ecc7, - 0x2d7a44, - 0x245a08, - 0x2e37c6, - 0x382549, - 0x2c1b89, - 0x3cf549, - 0x2cfac6, - 0x3c1d46, - 0x21b5c7, - 0x32ca88, - 0x3c1b49, - 0x32d347, - 0x2978c6, - 0x3b4547, - 0x281405, - 0x2bfd04, - 0x21b187, - 0x237305, - 0x28a045, - 0x2f9e47, - 0x39e748, - 0x3ca1c6, - 0x299bcd, - 0x29be0f, - 0x2a064d, - 0x20d884, - 0x2347c6, - 0x2dbd08, - 0x361685, - 0x2a2808, - 0x27340a, - 0x28a344, - 0x2f1c86, - 0x2d8c07, - 0x21bb47, - 0x2d0bc9, - 0x21b445, - 0x2b5d04, - 0x2b8b8a, - 0x2bf109, - 0x369ac7, - 0x299e86, - 0x35b206, - 0x28b586, - 0x380d06, - 0x2db60f, - 0x2dbbc9, - 0x238a86, - 0x388206, - 0x32c149, - 0x2b7807, - 0x21a003, - 0x22b586, - 0x20ecc3, - 0x3590c8, - 0x2d4747, - 0x2a3789, - 0x2b42c8, - 0x3babc8, - 0x361906, - 0x30c049, - 0x37c885, - 0x2b78c4, - 0x2f95c7, - 0x26b745, - 0x20d884, - 0x232a88, - 0x211544, - 0x2b7547, - 0x342646, - 0x2a9685, - 0x2acc88, - 0x35b0cb, - 0x3125c7, - 0x241086, - 0x2ca444, - 0x327d06, - 0x269fc5, - 0x237305, - 0x2834c9, - 0x286509, - 0x281d84, - 0x281dc5, - 0x20fdc5, - 0x24bac6, - 0x3121c8, - 0x2c1646, - 0x3b594b, - 0x383c4a, - 0x2be905, - 0x290286, - 0x27d305, - 0x3c2585, - 0x295847, - 0x201688, - 0x2925c4, - 0x265cc6, - 0x292f06, - 0x20d1c7, - 0x31fe04, - 0x280786, - 0x3b7905, - 0x3b7909, - 0x2dc984, - 0x2c4a49, - 0x27c186, - 0x2c3f08, - 0x20fdc5, - 0x3827c5, - 0x3102c6, - 0x366cc9, - 0x2125c9, - 0x26bec6, - 0x2e89c8, - 0x2961c8, - 0x27d2c4, - 0x2b99c4, - 0x2b99c8, - 0x28e9c8, - 0x35f9c9, - 0x2999c6, - 0x2a2dc6, - 0x33ae0d, - 0x301806, - 0x2b32c9, - 0x223945, - 0x20ed06, - 0x206548, - 0x337dc5, - 0x237184, - 0x269fc5, - 0x286048, - 0x29d189, - 0x278b04, - 0x2bb2c6, - 0x30da0a, - 0x3029c8, - 0x306b49, - 0x26a8ca, - 0x3933c6, - 0x29bfc8, - 0x2439c5, - 0x29f608, - 0x2f6245, - 0x213109, - 0x33d7c9, - 0x219482, - 0x2537c5, - 0x270f46, - 0x27c0c7, - 0x244705, - 0x2f35c6, - 0x316b48, - 0x2adc06, - 0x2bc149, - 0x27ac46, - 0x285648, - 0x26c285, - 0x34b8c6, - 0x330748, - 0x2854c8, - 0x304348, - 0x318e48, - 0x20a7c4, - 0x250c83, - 0x2bc384, - 0x2845c6, - 0x281444, - 0x344c87, - 0x304609, - 0x2c9285, - 0x20a406, - 0x22b586, - 0x29c44b, - 0x2b54c6, - 0x363506, - 0x2cda88, - 0x2e6006, - 0x26e303, - 0x3da583, - 0x2bfd04, - 0x22f845, - 0x2edc07, - 0x278c88, - 0x278c8f, - 0x27f50b, - 0x311fc8, - 0x2bb346, - 0x3122ce, - 0x241243, - 0x2edb84, - 0x2b5445, - 0x2b5b86, - 0x2912cb, - 0x294d46, - 0x225b49, - 0x2a9685, - 0x253dc8, - 0x3c7cc8, - 0x21248c, - 0x2a2006, - 0x2d65c6, - 0x2dcb05, - 0x28a5c8, - 0x27cc85, - 0x35e8c8, - 0x29dd8a, - 0x2a0a89, - 0x731a84, - 0x2000c2, - 0x45e02782, - 0x200382, - 0x222884, - 0x2024c2, - 0x3216c4, - 0x202642, - 0x13c3, - 0x2003c2, - 0x202002, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x206b43, - 0x23cf83, - 0x240b03, - 0x241844, - 0x22d7c3, - 0x236204, - 0x233743, - 0x2dd2c4, - 0x220583, - 0x2449c7, - 0x205e03, - 0x2013c3, - 0x2fb908, - 0x23cf83, - 0x27ee0b, - 0x2f7043, - 0x239606, - 0x21be02, - 0x2f060b, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x23cf83, - 0x206a03, - 0x217583, - 0x2000c2, - 0xa14c8, - 0x216685, - 0x237388, - 0x300ec8, - 0x202782, - 0x32ee85, - 0x3b4687, - 0x201242, - 0x2421c7, - 0x200382, - 0x25d047, - 0x308789, - 0x2c99c8, - 0x205009, - 0x20b2c2, - 0x3c7e87, - 0x36b004, - 0x3b4747, - 0x383b47, - 0x25d602, - 0x205e03, - 0x200e82, - 0x202642, - 0x2003c2, - 0x202142, - 0x200902, - 0x202002, - 0x2abec5, - 0x2a9785, - 0x2782, - 0x33743, - 0x22d7c3, - 0x233743, - 0x2053c3, - 0x220583, - 0x209a03, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x6df83, - 0x23cf83, - 0xaec3, - 0x101, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x219e43, - 0x206b43, - 0x6df83, - 0x23cf83, - 0x214703, - 0x490726c6, - 0x45dc3, - 0xca685, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x6df83, - 0x23cf83, - 0x6942, - 0xa14c8, - 0x12bd03, - 0x13c3, - 0x6df83, - 0x47984, - 0x1421d04, - 0xe7b05, - 0x2000c2, - 0x391904, - 0x22d7c3, - 0x233743, - 0x220583, - 0x23d9c3, - 0x22e1c5, - 0x219e43, - 0x214903, - 0x206b43, - 0x251ac3, - 0x23cf83, - 0x202003, - 0x2418c3, - 0x207b83, - 0x5c2, - 0x2ebc2, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x2000c2, - 0x24ce83, - 0x202782, - 0x233743, - 0x220583, - 0x222884, - 0x206b43, - 0x23cf83, - 0x202002, - 0xa14c8, - 0x220583, - 0x6df83, - 0xa14c8, - 0x6df83, - 0x26f283, - 0x22d7c3, - 0x230944, - 0x233743, - 0x220583, - 0x2067c2, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x2067c2, - 0x22a243, - 0x206b43, - 0x23cf83, - 0x2ef083, - 0x202003, - 0x2000c2, - 0x202782, - 0x220583, - 0x206b43, - 0x23cf83, - 0x239605, - 0x11a406, - 0x241844, - 0x21be02, - 0xa14c8, - 0x2000c2, - 0x12dac5, - 0x1cb48, - 0x161c03, - 0x202782, - 0x4d8947c6, - 0xe184, - 0x10cd0b, - 0x35246, - 0x5f07, - 0x233743, - 0x4c108, - 0x4c10b, - 0x4c58b, - 0x4cc0b, - 0x4cf4b, - 0x4d20b, - 0x4d64b, - 0x9d86, - 0x220583, - 0x1b8e85, - 0x131844, - 0x218dc3, - 0x118c87, - 0xe1284, - 0x6d0c4, - 0x206b43, - 0x6bfc6, - 0xb2bc4, - 0x6df83, - 0x23cf83, - 0x2f7dc4, - 0x12d947, - 0x11a009, - 0x10cac8, - 0x14a504, - 0xec046, - 0x140fc8, - 0x141185, - 0x1da6c9, - 0x2fe03, - 0x12dac5, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x2013c3, - 0x23cf83, - 0x2f7043, - 0x21be02, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x219c83, - 0x205184, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x2dd2c4, - 0x220583, - 0x206b43, - 0x23cf83, - 0x239606, - 0x233743, - 0x220583, - 0x3d443, - 0x6df83, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x12dac5, - 0x5f07, - 0xe9c3, - 0x2fe03, - 0xa14c8, - 0x220583, - 0x22d7c3, - 0x233743, - 0x220583, - 0x89003, - 0x206b43, - 0x23cf83, - 0x50e2d7c3, - 0x233743, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x2000c2, - 0x202782, - 0x22d7c3, - 0x220583, - 0x206b43, - 0x2003c2, - 0x23cf83, - 0x33dd07, - 0x2c67cb, - 0x2165c3, - 0x31ec48, - 0x32c807, - 0x20f286, - 0x215b85, - 0x32efc9, - 0x205b88, - 0x37ab89, - 0x3a5d10, - 0x37ab8b, - 0x2e1d89, - 0x20e9c3, - 0x2f0cc9, - 0x232006, - 0x23200c, - 0x216748, - 0x3d8588, - 0x308c49, - 0x2b948e, - 0x30854b, - 0x336d4c, - 0x20a683, - 0x2802cc, - 0x3c6089, - 0x306487, - 0x23368c, - 0x2b0cca, - 0x24ec04, - 0x305a8d, - 0x280188, - 0x3c544d, - 0x287b86, - 0x24184b, - 0x31a189, - 0x388487, - 0x372586, - 0x274c09, - 0x327eca, - 0x3243c8, - 0x2f6c44, - 0x38dc07, - 0x231447, - 0x201c84, - 0x217444, - 0x200ac9, - 0x371bc9, - 0x28da08, - 0x20ab05, - 0x20b205, - 0x3dc286, - 0x305949, - 0x27368d, - 0x2fdbc8, - 0x3dc187, - 0x215c08, - 0x250a06, - 0x22e3c4, - 0x2850c5, - 0x3c1a46, - 0x3c33c4, - 0x3c5f87, - 0x3d10ca, - 0x20c184, - 0x211146, - 0x212109, - 0x21210f, - 0x212e0d, - 0x2136c6, - 0x21c750, - 0x21cb46, - 0x21d247, - 0x21da87, - 0x21da8f, - 0x21ec49, - 0x224a46, - 0x225087, - 0x225088, - 0x225e89, - 0x3d2008, - 0x2ece07, - 0x216683, - 0x22d646, - 0x3c3ac8, - 0x2b974a, - 0x3785c9, - 0x205cc3, - 0x32ed86, - 0x265b0a, - 0x2f2087, - 0x3062ca, - 0x21f60e, - 0x21ed86, - 0x2df347, - 0x2aa086, - 0x242d46, - 0x396d8b, - 0x21608a, - 0x2c6e0d, - 0x3c1e07, - 0x268908, - 0x268909, - 0x26890f, - 0x2b6ecc, - 0x2729c9, - 0x2e454e, - 0x244aca, - 0x2d5a86, - 0x3d9b86, - 0x3264cc, - 0x33934c, - 0x34b0c8, - 0x36a8c7, - 0x235905, - 0x294b44, - 0x20278e, - 0x2663c4, - 0x329007, - 0x3d6d0a, - 0x22c794, - 0x22d08f, - 0x21dc48, - 0x22d508, - 0x351a8d, - 0x351a8e, - 0x22d989, - 0x22e808, - 0x22e80f, - 0x23338c, - 0x23338f, - 0x234507, - 0x236b0a, - 0x24748b, - 0x239c48, - 0x23ac47, - 0x26014d, - 0x336146, - 0x305c46, - 0x23c949, - 0x25b608, - 0x242b48, - 0x242b4e, - 0x2c68c7, - 0x2fc1c5, - 0x247745, - 0x200f04, - 0x20f546, - 0x28d908, - 0x30ae43, - 0x2cb98e, - 0x260508, - 0x2a688b, - 0x26f447, - 0x22a2c5, - 0x26ec06, - 0x2ad3c7, - 0x347a08, - 0x38ca49, - 0x3cee45, - 0x289488, - 0x221746, - 0x3a7a4a, - 0x202689, - 0x233749, - 0x23374b, - 0x30a308, - 0x201b49, - 0x20abc6, - 0x24998a, - 0x35660a, - 0x236d0c, - 0x335f07, + 0x2dedc5, + 0x2191c8, + 0x225fc8, + 0x371c88, + 0x2ffb0b, + 0x377047, + 0x31ae49, + 0x297d08, + 0x351c84, + 0x3a9c48, + 0x290cc9, + 0x2b0685, + 0x21f047, + 0x306545, + 0x282e08, + 0x29454b, + 0x299710, + 0x2ac685, + 0x21324c, + 0x244ec5, + 0x280483, + 0x31cc06, + 0x2c2644, + 0x288cc6, + 0x2a0607, + 0x212bc4, + 0x23ffc8, + 0x344ecd, + 0x31c485, + 0x231904, + 0x2a3484, + 0x2a3489, + 0x2af088, + 0x32e307, + 0x331e48, + 0x283688, + 0x27be45, + 0x2110c7, + 0x27bdc7, + 0x20f2c7, + 0x267c09, + 0x2e6809, + 0x3c3b86, + 0x2dce46, + 0x284406, + 0x323fc5, + 0x3af9c4, + 0x3bcb46, + 0x3bed86, + 0x27be88, + 0x32834b, + 0x2363c7, + 0x20a204, + 0x36c0c6, + 0x2e06c7, + 0x3da1c5, + 0x374cc5, + 0x227c84, + 0x2e6786, + 0x3bcbc8, + 0x282949, + 0x264806, + 0x287988, + 0x2b7c86, + 0x35d948, + 0x32170c, + 0x27bd06, + 0x29a58d, + 0x29aa0b, + 0x2a1305, + 0x2e6e47, + 0x2b9c06, + 0x38f0c8, + 0x3c3c09, + 0x307e48, + 0x3bfc85, + 0x3bd847, + 0x282248, + 0x3c0bc9, + 0x36be06, + 0x26470a, + 0x38ee48, + 0x307c8b, + 0x22278c, + 0x278a88, + 0x27e846, + 0x210ac8, + 0x21f607, + 0x21ca09, + 0x3983cd, + 0x29ae46, + 0x267048, + 0x2b4bc9, + 0x2c0f48, + 0x285408, + 0x2c3b4c, + 0x2c5107, + 0x2c5bc7, + 0x267a45, + 0x2c0d87, + 0x2ccec8, + 0x2b2ac6, + 0x2934cc, + 0x2f9688, + 0x2d1588, + 0x234d86, + 0x34ef07, + 0x3c3d84, + 0x34d748, + 0x28688c, + 0x289b8c, + 0x28c405, + 0x3b0747, + 0x301086, + 0x34ee86, + 0x3b9388, + 0x21c984, + 0x26a74b, + 0x286fcb, + 0x2f4646, + 0x344d47, + 0x28f405, + 0x271a45, + 0x26a886, + 0x2582c5, + 0x201905, + 0x2cec87, + 0x20afc9, + 0x26e684, + 0x258e45, + 0x2fcfc5, + 0x2e9d08, + 0x28b9c5, + 0x2bd109, + 0x2b3947, + 0x2b394b, + 0x2f24c6, + 0x244949, + 0x3556c8, + 0x291005, + 0x20f3c8, + 0x2e6848, + 0x261fc7, + 0x331bc7, + 0x389149, + 0x26eb07, + 0x29cf89, + 0x2fc3cc, + 0x348188, + 0x2b9649, + 0x2bb207, + 0x283749, + 0x2ff287, + 0x222888, + 0x3b5d45, + 0x3b02c6, + 0x2c44c8, + 0x2d7148, + 0x2caa49, + 0x201947, + 0x272445, + 0x336b09, + 0x2d3206, + 0x293d04, + 0x31bf86, + 0x34f288, + 0x3cbac7, + 0x328548, + 0x219009, + 0x2f8107, + 0x2a1706, + 0x2e6f04, + 0x20cb09, + 0x210f48, + 0x234c47, + 0x36b6c6, + 0x328286, + 0x21cd84, + 0x2f5206, + 0x20f0c3, + 0x32d9c9, + 0x32de06, + 0x2accc5, + 0x2a1e46, + 0x2cf205, + 0x2826c8, + 0x20edc7, + 0x238ec6, + 0x2fee06, + 0x30ffc8, + 0x2a4747, + 0x29ae85, + 0x29ecc8, + 0x3a77c8, + 0x38ee48, + 0x244d85, + 0x3b0346, + 0x308fc9, + 0x2d52c4, + 0x2cf08b, + 0x34f94b, + 0x2e3709, + 0x23ffc3, + 0x256085, + 0x2e48c6, + 0x245b08, + 0x304204, + 0x31f2c6, + 0x205449, + 0x2c2f05, + 0x2cebc6, + 0x331706, + 0x2191c4, + 0x29f34a, + 0x2acc08, + 0x2d7146, + 0x3c2785, + 0x344bc7, + 0x35e587, + 0x21f504, + 0x34fb87, + 0x228f44, + 0x228f46, + 0x20eb03, + 0x267c05, + 0x2b1045, + 0x32f108, + 0x27f0c5, + 0x27ba49, + 0x2a62c7, + 0x34d58b, + 0x2a62cc, + 0x2a68ca, + 0x313987, + 0x20cc43, + 0x3897c8, + 0x244f45, + 0x2f9c85, + 0x359644, + 0x222786, + 0x27c946, + 0x2f5247, + 0x33608b, + 0x219cc4, + 0x3ac004, + 0x2c9a44, + 0x2ce986, + 0x212bc4, + 0x225e48, + 0x359445, + 0x21afc5, + 0x371bc7, + 0x2e6f49, + 0x35e345, + 0x38fe4a, + 0x2a4289, + 0x2ae38a, + 0x3c4f49, + 0x352404, + 0x2c9f05, + 0x2c1348, + 0x2d0ecb, + 0x2d5085, + 0x215246, + 0x209744, + 0x27bf86, + 0x2f7f89, + 0x2e07c7, + 0x275dc8, + 0x2a5846, + 0x27ffc7, + 0x282f08, + 0x3903c6, + 0x3bd204, + 0x380547, + 0x36fe85, + 0x382607, + 0x29a404, + 0x2b9b86, + 0x304f88, + 0x29abc8, + 0x2f1887, + 0x31d6c8, + 0x2984c5, + 0x240004, + 0x381ec8, + 0x295e04, + 0x214e85, + 0x305184, + 0x20e987, + 0x28a207, + 0x283888, + 0x2d2cc6, + 0x27f045, + 0x27b848, + 0x248e88, + 0x2a3b49, + 0x34fc46, + 0x22f2c8, + 0x3bf28a, + 0x3da248, + 0x311985, + 0x223e86, + 0x2a4148, + 0x3bd90a, + 0x20d487, + 0x287fc5, + 0x293f08, + 0x2ab804, + 0x24ff86, + 0x2c5f48, + 0x3c6986, + 0x3c9c88, + 0x254747, + 0x3c16c6, + 0x2baac4, + 0x266847, + 0x2b5684, + 0x2f7f47, + 0x36bacd, + 0x266e85, + 0x2d0a4b, + 0x289e06, + 0x24f808, + 0x23ff84, + 0x3c1f86, + 0x27ee06, + 0x210e07, + 0x29a24d, + 0x2fbf87, + 0x2b6188, + 0x285585, + 0x26e048, + 0x2ca386, + 0x298548, + 0x22e4c6, + 0x2f73c7, + 0x283c09, + 0x35a447, + 0x289108, + 0x273d85, + 0x229e88, + 0x34edc5, + 0x26b045, + 0x34c4c5, + 0x215183, + 0x2846c4, + 0x294105, + 0x243789, + 0x36b5c6, + 0x2e0488, + 0x331985, + 0x2b7f47, + 0x3171ca, + 0x2ceb09, + 0x2c8f0a, + 0x2d68c8, + 0x236fcc, + 0x2843cd, + 0x30ad03, + 0x3c9b88, + 0x3d6fc5, + 0x21f746, + 0x3a47c6, + 0x35c045, + 0x3d01c9, + 0x28e9c5, + 0x27b848, + 0x257506, + 0x360146, + 0x2a5049, + 0x3a6787, + 0x294806, + 0x317148, + 0x3a9f08, + 0x2e4f07, + 0x2c328e, + 0x2ca5c5, + 0x3c0ac5, + 0x3c6888, + 0x31a307, + 0x200e42, + 0x2c36c4, + 0x288bca, + 0x234d08, + 0x2e6986, + 0x29c388, + 0x249886, + 0x36a0c8, + 0x2b0388, + 0x26b004, + 0x2b8705, + 0x602c84, + 0x602c84, + 0x602c84, + 0x204ec3, + 0x328106, + 0x27bd06, + 0x2a0fcc, + 0x202f03, + 0x2cab86, + 0x21a9c4, + 0x359b48, + 0x205285, + 0x288cc6, + 0x2c0c08, + 0x2d8046, + 0x238e46, + 0x212bc8, + 0x2d8d07, + 0x26e8c9, + 0x32044a, + 0x2052c4, + 0x228f85, + 0x2f3205, + 0x3598c6, + 0x231906, + 0x2a1b06, + 0x3cc306, + 0x26ea04, + 0x26ea0b, + 0x228d44, + 0x244ac5, + 0x2af585, + 0x219506, + 0x3c6e08, + 0x284287, + 0x32dd84, + 0x25a2c3, + 0x2ab305, + 0x31be47, + 0x28418b, + 0x32f007, + 0x2c0b08, + 0x2bf447, + 0x269406, + 0x27d308, + 0x292a0b, + 0x2abb46, + 0x213a89, + 0x292b85, + 0x31da43, + 0x2cebc6, + 0x254648, + 0x214303, + 0x27d903, + 0x27b386, + 0x249886, + 0x37880a, + 0x27e885, + 0x27ec4b, + 0x2a1d8b, + 0x244043, + 0x206743, + 0x2b3244, + 0x249647, + 0x2546c4, + 0x219344, + 0x2b4e84, + 0x3da548, + 0x3c26c8, + 0x2089c9, + 0x2d3a08, + 0x34c747, + 0x22f846, + 0x2e00cf, + 0x2ca706, + 0x2d6044, + 0x3c250a, + 0x31bd47, + 0x2b5786, + 0x293d49, + 0x208945, + 0x32f245, + 0x208a86, + 0x229fc3, + 0x2ab849, + 0x222686, + 0x218dc9, + 0x39abc6, + 0x267c05, + 0x28c805, + 0x206643, + 0x249788, + 0x32e4c7, + 0x20ef04, + 0x3599c8, + 0x3173c4, + 0x356506, + 0x31cc06, + 0x23b486, + 0x2d89c9, + 0x2f9c05, + 0x29af46, + 0x247d89, + 0x2c9646, + 0x2e01c6, + 0x39f786, + 0x212185, + 0x305186, + 0x2f73c4, + 0x3b5d45, + 0x2c44c4, + 0x2b6b06, + 0x33fa84, + 0x201a43, + 0x287c45, + 0x233c08, + 0x3d2cc7, + 0x304289, + 0x287ec8, + 0x29b651, + 0x33178a, + 0x2f4587, + 0x254886, + 0x21a9c4, + 0x2c45c8, + 0x2b5c48, + 0x29b80a, + 0x2bcecd, + 0x215146, + 0x212cc6, + 0x266906, + 0x21afc7, + 0x2b6245, + 0x251907, + 0x344ec5, + 0x2b3a84, + 0x206686, + 0x2269c7, + 0x2ab54d, + 0x2a4087, + 0x3774c8, + 0x27bb49, + 0x223d86, + 0x36bd85, + 0x23ae44, + 0x34f386, + 0x21f406, + 0x234e86, + 0x29cc08, + 0x223283, + 0x210e03, + 0x343085, + 0x35c6c6, + 0x2b0345, + 0x2a5a48, + 0x2a07ca, + 0x246b04, + 0x359b48, + 0x296188, + 0x219347, + 0x331a49, + 0x2c0808, + 0x2829c7, + 0x2b5106, + 0x3c698a, + 0x34f408, + 0x307009, + 0x2af148, + 0x227f89, + 0x361107, + 0x303505, + 0x2ffd06, + 0x2b2948, + 0x24f988, + 0x313c48, + 0x31c5c8, + 0x244ac5, + 0x200d04, + 0x232588, + 0x23eb84, + 0x3c4d44, + 0x267c05, + 0x295647, + 0x2e6d09, + 0x210c07, + 0x21a5c5, + 0x278886, + 0x368186, + 0x213bc4, + 0x2a5386, + 0x27e044, + 0x292686, + 0x2e6ac6, + 0x214146, + 0x3bfc85, + 0x2a5907, + 0x20cc43, + 0x20a909, + 0x30fdc8, + 0x282844, + 0x28284d, + 0x29acc8, + 0x2f0148, + 0x306f86, + 0x283d09, + 0x2ceb09, + 0x2f7c85, + 0x2a08ca, + 0x26da4a, + 0x270c0c, + 0x270d86, + 0x2794c6, + 0x2caf86, + 0x39b709, + 0x21f986, + 0x222906, + 0x28ea86, + 0x34d748, + 0x31d6c6, + 0x2d4b8b, + 0x2957c5, + 0x21afc5, + 0x279cc5, + 0x340c06, + 0x215103, + 0x23b406, + 0x2a4007, + 0x2c4485, + 0x211e45, + 0x3b8505, + 0x33d006, + 0x2f7d44, + 0x334606, + 0x2a9789, + 0x340a8c, + 0x2b37c8, + 0x2a98c4, + 0x304e86, + 0x289f06, + 0x254648, + 0x225fc8, + 0x340989, + 0x344bc7, + 0x236589, + 0x271b06, + 0x2150c4, + 0x205fc4, + 0x281fc4, + 0x282f08, + 0x2e6b4a, + 0x35e2c6, + 0x36b487, + 0x382887, + 0x244a45, + 0x2f31c4, + 0x290c86, + 0x2b6286, + 0x20eec3, + 0x30fc07, + 0x3d35c8, + 0x2f7dca, + 0x345188, + 0x2dd348, + 0x33fac5, + 0x2a1405, + 0x2364c5, + 0x244e06, + 0x35cb06, + 0x2fe385, + 0x32dc09, + 0x2f2fcc, + 0x35b4c7, + 0x29b888, + 0x276705, + 0x602c84, + 0x229cc4, + 0x283484, + 0x218bc6, + 0x2a2d4e, + 0x32f2c7, + 0x21b1c5, + 0x2d524c, + 0x30af87, + 0x226947, + 0x22bb09, + 0x220d49, + 0x287fc5, + 0x30fdc8, + 0x308fc9, + 0x38ed05, + 0x2c43c8, + 0x2b9886, + 0x382146, + 0x23f204, + 0x28fe08, + 0x223f43, + 0x209284, + 0x2ab385, + 0x394e47, + 0x26bcc5, + 0x3bf149, + 0x2a5f8d, + 0x2c6506, + 0x3c37c4, + 0x226b08, + 0x20ae0a, + 0x21bf47, + 0x36ba05, + 0x2092c3, + 0x2a1f4e, + 0x24988c, + 0x305387, + 0x2a2f07, + 0x4230e9c7, + 0x14f0c6, + 0x46e44, + 0x210d83, + 0x21f9c5, + 0x283485, + 0x29c748, + 0x299d49, + 0x3db306, + 0x2546c4, + 0x2f44c6, + 0x266e0b, + 0x2dc50c, + 0x24b8c7, + 0x2d4e45, + 0x3a76c8, + 0x2e4cc5, + 0x3c2507, + 0x3315c7, + 0x22ee45, + 0x215103, + 0x20fd44, + 0x3cb985, + 0x26e585, + 0x26e586, + 0x2a8f48, + 0x2269c7, + 0x3a4ac6, + 0x21cc86, + 0x34c406, + 0x2671c9, + 0x2111c7, + 0x27e146, + 0x2dc686, + 0x277146, + 0x2acb45, + 0x205746, + 0x383a05, + 0x28ba48, + 0x29528b, + 0x2909c6, + 0x3828c4, + 0x2d5b09, + 0x2a62c4, + 0x2b9808, + 0x31c087, + 0x285304, + 0x2bff48, + 0x2c59c4, + 0x2acb84, + 0x398305, + 0x31c4c6, + 0x3da487, + 0x24e4c3, + 0x2a17c5, + 0x2fb684, + 0x3c0b06, + 0x2f7d08, + 0x3db085, + 0x294f49, + 0x313985, + 0x3736c8, + 0x21a887, + 0x32df08, + 0x2bfb87, + 0x2f2909, + 0x282b06, + 0x341c06, + 0x28ea84, + 0x3abf45, + 0x30d1cc, + 0x279cc7, + 0x27a747, + 0x231548, + 0x2c6506, + 0x2a3f44, + 0x34ab44, + 0x388fc9, + 0x2cb086, + 0x26df07, + 0x210a44, + 0x261606, + 0x3a4405, + 0x2d2807, + 0x2d4b06, + 0x2645c9, + 0x2cfa47, + 0x297a87, + 0x2a4ec6, + 0x261545, + 0x281448, + 0x222508, + 0x22fa46, + 0x3db0c5, + 0x2c7406, + 0x2017c3, + 0x29c5c9, + 0x2a188e, + 0x2bf2c8, + 0x3174c8, + 0x22f84b, + 0x295186, + 0x379b04, + 0x238e44, + 0x2a198a, + 0x213147, + 0x27e205, + 0x213a89, + 0x2c31c5, + 0x3c4d87, + 0x230504, + 0x299187, + 0x214fc8, + 0x2cc646, + 0x2b9d09, + 0x2c090a, + 0x2130c6, + 0x29a806, + 0x2af505, + 0x396405, + 0x34bac7, + 0x242788, + 0x3a4348, + 0x26b006, + 0x28c885, + 0x23168e, + 0x226384, + 0x22f9c5, + 0x278209, + 0x2d7688, + 0x28d406, + 0x29e7cc, + 0x2a03d0, + 0x2a298f, + 0x2a44c8, + 0x313987, + 0x3bfc85, + 0x294105, + 0x3da309, + 0x294109, + 0x278f46, + 0x2d5107, + 0x3abe45, + 0x306a89, + 0x353186, + 0x21f7cd, + 0x281e89, + 0x219344, + 0x2bf048, + 0x232649, + 0x35e486, + 0x3899c5, + 0x341c06, + 0x275c89, + 0x27b108, + 0x209a85, + 0x28fe04, + 0x29e98b, + 0x35e345, + 0x245b86, + 0x284706, + 0x252a06, + 0x2a388b, + 0x295049, + 0x21cbc5, + 0x391d47, + 0x331706, + 0x212dc6, + 0x283208, + 0x2b5209, + 0x37728c, + 0x31bc48, + 0x317f06, + 0x338fc3, + 0x22d046, + 0x2a36c5, + 0x27fb48, + 0x28c286, + 0x2d2a48, + 0x242b85, + 0x292745, + 0x21a9c8, + 0x3a9dc7, + 0x3a4707, + 0x2f5247, + 0x319dc8, + 0x313ac8, + 0x2b5b46, + 0x2b6947, + 0x306387, + 0x2a358a, + 0x206383, + 0x340c06, + 0x231605, + 0x288bc4, + 0x27bb49, + 0x2f2884, + 0x202244, + 0x2a0c44, + 0x2a2f0b, + 0x32e407, + 0x2318c5, + 0x2981c8, + 0x278886, + 0x278888, + 0x27e7c6, + 0x28fd45, + 0x290005, + 0x2915c6, + 0x2937c8, + 0x293c88, + 0x27bd06, + 0x29800f, + 0x29c090, + 0x3c12c5, + 0x20cc43, + 0x22aa85, + 0x31ad88, + 0x294009, + 0x38ee48, + 0x2d4f08, + 0x31f888, + 0x32e4c7, + 0x278549, + 0x2d2c48, + 0x285a84, + 0x2a0ac8, + 0x2e9dc9, + 0x2b7607, + 0x2b0104, + 0x210cc8, + 0x2a56ca, + 0x2fb906, + 0x215146, + 0x34fb09, + 0x2a0607, + 0x2d0308, + 0x230588, + 0x21d348, + 0x37f785, + 0x207685, + 0x21afc5, + 0x283445, + 0x2b4a07, + 0x244bc5, + 0x2c4485, + 0x3cfec6, + 0x38ed87, + 0x2d0e07, + 0x2a59c6, + 0x2d6e05, + 0x245b86, + 0x20ee45, + 0x2bca88, + 0x3abdc4, + 0x2c96c6, + 0x324c84, + 0x2bfd48, 0x2c97ca, - 0x346ecb, - 0x346ed9, - 0x32ab08, - 0x239685, - 0x260306, - 0x26aec9, - 0x2c9ec6, - 0x378d0a, - 0x205d86, - 0x202404, - 0x2cc70d, - 0x202407, - 0x221b09, - 0x24adc5, - 0x24b648, - 0x24bec9, - 0x24e444, - 0x24eb07, - 0x24eb08, - 0x24fcc7, - 0x267e88, - 0x254907, - 0x39fd05, - 0x25b10c, - 0x25b809, - 0x2e0b8a, - 0x3aacc9, - 0x2f0dc9, - 0x387fcc, - 0x25de8b, - 0x25f048, - 0x260908, - 0x264044, - 0x2872c8, - 0x288c09, - 0x2b0d87, - 0x212346, - 0x29cfc7, - 0x29b1c9, - 0x3cbb0b, - 0x327b87, - 0x38b307, - 0x28e147, - 0x3c53c4, - 0x3c53c5, - 0x2dcfc5, - 0x354a0b, - 0x3b6784, - 0x3a1308, - 0x2cb60a, - 0x221807, - 0x3d81c7, - 0x290a92, - 0x28c186, - 0x22fac6, - 0x37f0ce, - 0x317f46, - 0x295548, - 0x295b8f, - 0x3c5808, - 0x3979c8, - 0x342b4a, - 0x342b51, - 0x2a46ce, - 0x20434a, - 0x20434c, - 0x22ea07, - 0x22ea10, - 0x3bf148, - 0x2a48c5, - 0x2ad9ca, - 0x3c340c, - 0x297c0d, - 0x209a06, - 0x3c8207, - 0x3c820c, - 0x209a0c, - 0x21c44c, - 0x2af28b, - 0x38a844, - 0x226704, - 0x2b0589, - 0x37af87, - 0x39c749, - 0x356449, - 0x2b0987, - 0x2b0b46, - 0x2b0b49, - 0x2b0f43, - 0x2add0a, - 0x31f807, - 0x372e0b, - 0x2c6c8a, - 0x36b084, - 0x3997c6, - 0x284649, - 0x39ffc4, - 0x2f378a, - 0x241385, - 0x2c03c5, - 0x2c03cd, - 0x2c070e, - 0x2bc4c5, - 0x33c9c6, - 0x239207, - 0x25b38a, - 0x2666c6, - 0x2ee984, - 0x305e07, - 0x2d934b, - 0x267b87, - 0x2503c4, - 0x2b1a46, - 0x2b1a4d, - 0x2dfc0c, - 0x212a06, - 0x2fddca, - 0x2a9b06, - 0x2f7888, - 0x23aa87, - 0x24b30a, - 0x249bc6, - 0x2066c3, - 0x2066c6, - 0x3c3948, - 0x2b070a, - 0x287887, - 0x287888, - 0x2d4344, - 0x291007, - 0x2d87c8, - 0x29f788, - 0x292348, - 0x2d198a, - 0x2e43c5, - 0x30bc87, - 0x3a8e13, - 0x2588c6, - 0x21a048, - 0x222049, - 0x242088, - 0x36198b, - 0x3baf48, - 0x26a304, - 0x358686, - 0x322146, - 0x319089, - 0x3d8747, - 0x25b208, - 0x29f906, - 0x2f9d44, - 0x3a4dc5, - 0x2d00c8, - 0x203e4a, - 0x2cc388, - 0x2d1406, - 0x29c1ca, - 0x2b6a48, - 0x2d7848, - 0x2d8dc8, - 0x2d9886, - 0x2dbf06, - 0x3aa78c, - 0x2dc3d0, - 0x2a6345, - 0x31dfc8, - 0x31dfd0, - 0x3c5610, - 0x3a5b8e, - 0x3aa40e, - 0x3aa414, - 0x3b008f, - 0x3b0446, - 0x204211, - 0x201d53, - 0x2021c8, - 0x360c45, - 0x31f188, - 0x37e385, - 0x33304c, - 0x227989, - 0x294989, - 0x227e07, - 0x235fc9, - 0x3788c7, - 0x35b4c6, - 0x284ec7, - 0x2075c5, - 0x20af03, - 0x30b009, - 0x24c8c9, - 0x23d443, - 0x2192c4, - 0x21ff8d, - 0x38ce0f, - 0x2f9d85, - 0x332f46, - 0x217c47, - 0x2164c7, - 0x3da906, - 0x3da90b, - 0x2a5d05, - 0x25c706, - 0x303647, - 0x254e09, - 0x224446, - 0x384245, - 0x3cc78b, - 0x3b5086, - 0x3c7a05, - 0x23da48, - 0x28bf48, - 0x2a100c, - 0x2a1010, - 0x2a7a49, - 0x2b1e87, - 0x324c8b, - 0x2eb106, - 0x2eccca, - 0x206a8b, - 0x2ee08a, - 0x2ee306, - 0x2eef45, - 0x32c706, - 0x27ae08, - 0x227eca, - 0x35171c, - 0x2f710c, - 0x2f7408, - 0x239605, - 0x38a147, - 0x21f4c6, - 0x3494c5, - 0x215f46, - 0x3daac8, - 0x2bf387, - 0x2b9388, - 0x25898a, - 0x217d4c, - 0x2c7289, - 0x20a587, - 0x246984, - 0x247806, - 0x39754a, - 0x356545, - 0x2170cc, - 0x21bf48, - 0x2aa388, - 0x2d49cc, - 0x3587cc, - 0x36abc9, - 0x36ae07, - 0x24a14c, - 0x228184, - 0x24a60a, - 0x314a4c, - 0x25690b, - 0x256f8b, - 0x259b06, - 0x25ee87, - 0x22ec47, - 0x22ec4f, - 0x307851, - 0x2e2e12, - 0x2641cd, - 0x2641ce, - 0x26450e, - 0x3b0248, - 0x3b0252, - 0x269ac8, - 0x222687, - 0x2528ca, - 0x2a8108, - 0x317f05, - 0x2b4b4a, - 0x21cec7, - 0x2e8684, - 0x203843, - 0x236745, - 0x342dc7, - 0x34e287, - 0x297e0e, - 0x31d5cd, - 0x326a89, - 0x255c85, - 0x352a03, - 0x337986, - 0x25cd05, - 0x2a6ac8, - 0x2bcf89, - 0x260345, - 0x26034f, - 0x2dadc7, - 0x215a05, - 0x26fe0a, - 0x3bf6c6, - 0x2f9889, - 0x37b50c, - 0x3bcfc9, - 0x3d1b06, - 0x2cb40c, - 0x33b8c6, - 0x304fc8, - 0x305fc6, - 0x33f806, - 0x2b5644, - 0x31ddc3, - 0x32358a, - 0x28e451, - 0x2818ca, - 0x27d185, - 0x355ac7, - 0x258d07, - 0x2d88c4, - 0x2d88cb, - 0x204e88, - 0x2be3c6, - 0x2326c5, - 0x32a284, - 0x243089, - 0x2008c4, - 0x242987, - 0x380385, - 0x380387, - 0x37f305, - 0x2535c3, - 0x222548, - 0x31f38a, - 0x2166c3, - 0x2166ca, - 0x27eb06, - 0x2600cf, - 0x3d3489, - 0x2cb910, - 0x2fd448, - 0x2d2049, - 0x298b07, - 0x2b19cf, - 0x393804, - 0x2dd344, - 0x21c9c6, - 0x3ac106, - 0x2ed80a, - 0x2574c6, - 0x394fc7, - 0x3152c8, - 0x3154c7, - 0x316907, - 0x31820a, - 0x31720b, - 0x328805, - 0x2e2a48, - 0x21b2c3, - 0x3ba74c, - 0x351e0f, - 0x23570d, - 0x259307, - 0x326bc9, - 0x225547, - 0x23be88, - 0x22c98c, - 0x26a208, - 0x23d708, - 0x33290e, - 0x345b14, - 0x346024, - 0x35d98a, - 0x37b14b, - 0x378984, - 0x378989, - 0x2f1d08, - 0x2484c5, - 0x30a94a, - 0x260747, - 0x21e744, - 0x24ce83, - 0x22d7c3, - 0x236204, - 0x233743, - 0x220583, - 0x222884, - 0x219e43, - 0x205e03, - 0x2dc3c6, - 0x205184, - 0x206b43, - 0x23cf83, - 0x213c43, + 0x27c48c, + 0x336285, + 0x21b086, + 0x377446, + 0x28e886, + 0x317f84, + 0x3a4d85, + 0x27dd87, + 0x2a0689, + 0x2cef47, + 0x602c84, + 0x602c84, + 0x32e285, + 0x217684, + 0x29dd4a, + 0x278706, + 0x308dc4, + 0x3b06c5, + 0x2b41c5, + 0x2b6184, + 0x284347, + 0x336c87, + 0x2ce988, + 0x2c7508, + 0x209a89, + 0x295e08, + 0x29df0b, + 0x26f484, + 0x2921c5, + 0x389385, + 0x2f51c9, + 0x2b5209, + 0x2d5a08, + 0x228d48, + 0x219504, + 0x289f45, + 0x218e03, + 0x359885, + 0x29afc6, + 0x299b8c, + 0x210946, + 0x3898c6, + 0x28d685, + 0x33d088, + 0x3d83c6, + 0x254a06, + 0x215146, + 0x26368c, + 0x389444, + 0x34c54a, + 0x28d5c8, + 0x2999c7, + 0x2fb586, + 0x3db3c7, + 0x2f40c5, + 0x36b6c6, + 0x366906, + 0x376047, + 0x2c0604, + 0x20ea85, + 0x278204, + 0x2b3b07, + 0x278448, + 0x27934a, + 0x2820c7, + 0x2ac747, + 0x313907, + 0x2e4e09, + 0x299b8a, + 0x229a03, + 0x3d2c85, + 0x214183, + 0x2b4ec9, + 0x361248, + 0x295bc7, + 0x38ef49, + 0x222606, + 0x3b5e08, + 0x393885, + 0x248f8a, + 0x3b0a49, + 0x2492c9, + 0x3d8287, + 0x2b5d49, + 0x214048, + 0x36a2c6, + 0x21b248, + 0x212187, + 0x26eb07, + 0x2a4287, + 0x2d1c48, + 0x3cd4c6, + 0x2a5485, + 0x27dd87, + 0x29a308, + 0x34c384, + 0x2fd284, + 0x294707, + 0x2b0707, + 0x308e4a, + 0x36a246, + 0x32f70a, + 0x2c3607, + 0x226147, + 0x20eb44, + 0x29d044, + 0x2d2706, + 0x36c404, + 0x36c40c, + 0x308d05, + 0x214e09, + 0x2b3644, + 0x2b6245, + 0x20ad88, + 0x293d45, + 0x38fe46, + 0x294244, + 0x2ad88a, + 0x2b3e46, + 0x293a0a, + 0x3c5107, + 0x2d0145, + 0x229fc5, + 0x244a8a, + 0x293945, + 0x2a3c06, + 0x23eb84, + 0x2b33c6, + 0x34bb85, + 0x28c346, + 0x2f188c, + 0x26390a, + 0x26db44, + 0x22f846, + 0x2a0607, + 0x2d4a84, + 0x34d748, + 0x2e7f46, + 0x382709, + 0x2c20c9, + 0x348289, + 0x2cf246, + 0x212286, + 0x21b387, + 0x32db48, + 0x212089, + 0x32e407, + 0x298346, + 0x280047, + 0x2667c5, + 0x226384, + 0x21af47, + 0x306545, + 0x288b05, + 0x200cc7, + 0x22ed08, + 0x3a7646, + 0x29b14d, + 0x29c94f, + 0x2a1d8d, + 0x205484, + 0x233d06, + 0x2d9448, + 0x28ea45, + 0x2a3748, + 0x261e8a, + 0x219344, + 0x2b53c6, + 0x2d60c7, + 0x219cc7, + 0x2d8dc9, + 0x21b205, + 0x2b6184, + 0x2b864a, + 0x2c03c9, + 0x2b5e47, + 0x2f2dc6, + 0x35e486, + 0x289e86, + 0x380606, + 0x2d868f, + 0x2d9309, + 0x31d6c6, + 0x388c06, + 0x32d209, + 0x2b6a47, + 0x214703, + 0x243846, + 0x208a43, + 0x35bf08, + 0x27fe87, + 0x2a46c9, + 0x31ca88, + 0x3a4848, + 0x2ff3c6, + 0x210889, + 0x35b405, + 0x22cf84, + 0x3035c7, + 0x39b785, + 0x205484, + 0x231988, + 0x20f104, + 0x2b6787, + 0x36d146, + 0x269e45, + 0x2af148, + 0x35e34b, + 0x3102c7, + 0x244d06, + 0x2ca784, + 0x379a86, + 0x267c05, + 0x306545, + 0x2811c9, + 0x283f49, + 0x26eb44, + 0x26eb85, + 0x22f885, + 0x248e06, + 0x30fec8, + 0x2c29c6, + 0x3d340b, + 0x384fca, + 0x2bfc85, + 0x290086, + 0x246805, + 0x2db7c5, + 0x296307, + 0x340e88, + 0x236584, + 0x261a86, + 0x293d06, + 0x214207, + 0x31da04, + 0x27ee06, + 0x21f245, + 0x21f249, + 0x212484, + 0x2f3349, + 0x27bd06, + 0x2c51c8, + 0x22f885, + 0x382985, + 0x28c346, + 0x377189, + 0x220d49, + 0x389946, + 0x2d7788, + 0x2a60c8, + 0x2467c4, + 0x2b8ac4, + 0x2b8ac8, + 0x2e6288, + 0x236689, + 0x29af46, + 0x215146, + 0x33860d, + 0x31f2c6, + 0x3215c9, + 0x202945, + 0x208a86, + 0x27b288, + 0x334545, + 0x3063c4, + 0x267c05, + 0x283a88, + 0x29db09, + 0x2782c4, + 0x2b9b86, + 0x3071ca, + 0x305288, + 0x308fc9, + 0x268a0a, + 0x38eec6, + 0x29cb08, + 0x3c22c5, + 0x28d848, + 0x2f4145, + 0x2224c9, + 0x33a989, + 0x20fe02, + 0x292b85, + 0x271786, + 0x27bc47, + 0x322b85, + 0x2fb486, + 0x312c48, + 0x2c6506, + 0x2c1209, + 0x27a846, + 0x283088, + 0x389d05, + 0x3ddc06, + 0x2f74c8, + 0x282f08, + 0x361008, + 0x315708, + 0x205744, + 0x21f543, + 0x2c1444, + 0x2822c6, + 0x266804, + 0x317407, + 0x254909, + 0x2c9a45, + 0x230586, + 0x243846, + 0x2a8d8b, + 0x2b56c6, + 0x33fd06, + 0x2ccd48, + 0x229a46, + 0x2bd1c3, + 0x203e83, + 0x226384, + 0x22f1c5, + 0x2b7ac7, + 0x278448, + 0x27844f, + 0x27dc8b, + 0x30fcc8, + 0x2b9c06, + 0x30ffce, + 0x244ec3, + 0x2b7a44, + 0x2b5645, + 0x2b6006, + 0x290d8b, + 0x295706, + 0x227789, + 0x269e45, + 0x24e408, + 0x204d88, + 0x220c0c, + 0x2a2f46, + 0x3598c6, + 0x2dedc5, + 0x288ec8, + 0x27c485, + 0x351c88, + 0x29eb4a, + 0x2a21c9, + 0x602c84, 0x2000c2, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x236204, - 0x233743, - 0x220583, - 0x219e43, - 0x2dc3c6, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x228843, - 0x206b43, - 0x6df83, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x205184, - 0x206b43, - 0x23cf83, - 0x2000c2, - 0x24de03, - 0x202782, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x205cc2, - 0x235d82, - 0x202782, - 0x22d7c3, - 0x206742, - 0x2005c2, - 0x222884, - 0x3216c4, - 0x228d42, - 0x205184, + 0x4820c302, + 0x200382, + 0x224e44, + 0x206a42, + 0x303f84, + 0x205642, + 0xca43, 0x2003c2, - 0x23cf83, - 0x213c43, - 0x259b06, - 0x2195c2, - 0x207d82, - 0x223f82, - 0x5361f043, - 0x53a04343, - 0x59646, - 0x59646, - 0x241844, - 0x2013c3, - 0x8d78a, - 0x1721cc, - 0x1dca0c, - 0xca48d, - 0x12dac5, - 0x8cf0c, - 0x2afc7, - 0xc946, - 0x13848, - 0x1b047, - 0x20a08, - 0x18930a, - 0x1142c7, - 0x5468d145, - 0xdee89, - 0x34f8b, - 0x17830b, - 0x1c6408, - 0x5f89, - 0x18c58a, - 0x17598e, - 0x8f68d, - 0x1441e8b, - 0xdfaca, - 0xe184, - 0x5c846, - 0x160308, - 0x6c648, - 0x3fbc7, - 0xbb45, - 0x19447, - 0x80b89, - 0x1a0047, - 0x18b08, - 0x29009, - 0x4aec4, - 0x4fe45, - 0x16364e, - 0x6c2cd, - 0x5d88, - 0x54a6e4c6, - 0x55571a08, - 0x76248, - 0x13df10, - 0x5784c, - 0x65247, - 0x66287, - 0x6a407, - 0x70c47, - 0x37482, - 0x13be07, - 0x1c1f46, - 0x1624c, - 0x198c85, - 0x1cc607, - 0xa7906, - 0xa8549, - 0xaa8c8, - 0x373c2, + 0x209482, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x20a803, + 0x216603, + 0x234c83, + 0x242244, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x2db1c4, + 0x228b03, + 0x322e47, + 0x211543, + 0x20ca43, + 0x31b008, + 0x216603, + 0x280acb, + 0x2f55c3, + 0x240986, + 0x219f82, + 0x2eec0b, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x216603, + 0x221003, + 0x204383, + 0x2000c2, + 0x9fe08, + 0x397705, + 0x3065c8, + 0x2e2bc8, + 0x20c302, + 0x329085, + 0x3bfd47, + 0x201bc2, + 0x2401c7, + 0x200382, + 0x254f47, + 0x2bd949, + 0x26c708, + 0x21d1c9, + 0x208582, + 0x3b04c7, + 0x3880c4, + 0x3bfe07, + 0x384ec7, + 0x259902, + 0x211543, + 0x205a02, + 0x205642, + 0x2003c2, + 0x2161c2, + 0x200902, + 0x209482, + 0x2d6405, + 0x21bb85, + 0xc302, + 0x32c43, + 0x22c0c3, + 0x232c43, + 0x210b03, + 0x228b03, + 0x204f43, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x8083, + 0x101, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x214543, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x216e03, + 0x4b50bb86, + 0xe85c3, + 0xca9c5, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x82c2, + 0x9fe08, + 0x12cdc3, + 0xca43, + 0x6d9c3, + 0x42744, + 0x142a744, + 0xe50c5, + 0x2000c2, + 0x392104, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x241f43, + 0x22cd85, + 0x214543, + 0x20e403, + 0x20a803, + 0x24bbc3, + 0x216603, + 0x20c603, + 0x2422c3, + 0x205b03, 0x5c2, - 0x18bb06, - 0x1c4a0b, - 0x1c4d06, - 0x1091c4, - 0x45647, - 0xe4e09, - 0x504c9, - 0x17f8c8, - 0x4d442, - 0x191789, - 0xc548, - 0xed64a, - 0x6d06, - 0xcea89, - 0xdfa47, - 0xe0189, - 0xe22c8, - 0xe32c7, - 0xe4349, - 0xe9c45, - 0xe9fd0, - 0x178f46, - 0x45585, - 0x1667c7, - 0xebccd, - 0x409c5, - 0xf0bc6, - 0xf1407, - 0xf7dd8, - 0x1a03c8, - 0x10ba8a, - 0x16f82, - 0x56d4a, - 0x6ca4d, - 0x1bc2, - 0x5bac6, - 0x51488, - 0x49f88, - 0x6d8c9, - 0x115f88, - 0x7b54e, - 0x6db08, - 0x137987, - 0x55b08104, - 0x10ec4d, - 0x100185, - 0x109f48, - 0x1abcc8, - 0x10f346, - 0xd2c2, - 0x53844, - 0x33d86, - 0xec046, - 0xa842, + 0x2d7c2, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x2000c2, + 0x248343, + 0x20c302, + 0x232c43, + 0x228b03, + 0x224e44, + 0x20a803, + 0x216603, + 0x209482, + 0x9fe08, + 0x228b03, + 0x6d9c3, + 0x9fe08, + 0x6d9c3, + 0x26fb43, + 0x22c0c3, + 0x22fd84, + 0x232c43, + 0x228b03, + 0x203dc2, + 0x211543, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x203dc2, + 0x238cc3, + 0x20a803, + 0x216603, + 0x2ed343, + 0x20c603, + 0x2000c2, + 0x20c302, + 0x228b03, + 0x20a803, + 0x216603, + 0x240985, + 0x127206, + 0x242244, + 0x219f82, + 0x9fe08, + 0x2000c2, + 0x12eb85, + 0x1c508, + 0x175583, + 0x20c302, + 0x4fd40486, + 0xd944, + 0x10a7cb, + 0x34786, + 0x11647, + 0x1b8dc9, + 0x232c43, + 0x47508, + 0x4750b, + 0x4798b, + 0x480cb, + 0x4840b, + 0x486cb, + 0x48b0b, + 0x7386, + 0x228b03, + 0x20005, + 0x2a44, + 0x20e943, + 0x115547, + 0xded04, + 0x6c144, + 0x20a803, + 0x189a46, + 0x194584, + 0x6d9c3, + 0x216603, + 0x2f61c4, + 0x12ea07, + 0x126e09, + 0x10a588, + 0x52c84, + 0x3e006, + 0x8148, + 0x130245, + 0x3fc9, + 0x2f783, + 0x12eb85, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20ca43, + 0x216603, + 0x2f55c3, + 0x219f82, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x214383, + 0x217b84, + 0x20a803, + 0xca43, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x2db1c4, + 0x228b03, + 0x20a803, + 0x216603, + 0x240986, + 0x232c43, + 0x228b03, + 0x3a183, + 0x6d9c3, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x12eb85, + 0x11647, + 0x7883, + 0x2f783, + 0x9fe08, + 0x228b03, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x5c743, + 0x20a803, + 0x216603, + 0x5322c0c3, + 0x232c43, + 0x20a803, + 0x216603, + 0x9fe08, + 0x2000c2, + 0x20c302, + 0x22c0c3, + 0x228b03, + 0x20a803, + 0x2003c2, + 0x216603, + 0x33aec7, + 0x20f64b, + 0x20c003, + 0x278c08, + 0x32d8c7, + 0x32a1c6, + 0x20d0c5, + 0x3291c9, + 0x2112c8, + 0x37b649, + 0x3a1d90, + 0x37b64b, + 0x2e1b49, + 0x207883, + 0x2ef2c9, + 0x230a06, + 0x230a0c, + 0x3977c8, + 0x3d80c8, + 0x2bde09, + 0x2ba48e, + 0x2bd70b, + 0x2fff4c, + 0x225843, + 0x28768c, + 0x3ce3c9, + 0x308907, + 0x232b8c, + 0x2b18ca, + 0x249f84, + 0x30810d, + 0x287548, + 0x3cee4d, + 0x314846, + 0x24224b, + 0x326f89, + 0x388e87, + 0x369a86, + 0x373a89, + 0x2f790a, + 0x3dcf08, + 0x2f4c84, + 0x38e347, + 0x2417c7, + 0x345784, + 0x217304, + 0x344509, + 0x251789, + 0x28c008, + 0x2eda85, + 0x2084c5, + 0x204c46, + 0x307fc9, + 0x26210d, + 0x215348, + 0x204b47, + 0x20d148, + 0x263e46, + 0x237b84, + 0x285845, + 0x3c4c46, + 0x3c5d44, + 0x3ce2c7, + 0x3d558a, + 0x20ab44, + 0x213006, + 0x213cc9, + 0x213ccf, + 0x214b0d, + 0x215b86, + 0x21c110, + 0x21c506, + 0x21dac7, + 0x220607, + 0x22060f, + 0x221349, + 0x226486, + 0x226fc7, + 0x226fc8, + 0x227ac9, + 0x3a8b48, + 0x311007, + 0x20b383, + 0x22bf46, + 0x298fc8, + 0x2ba74a, + 0x2094c9, + 0x211403, + 0x328f86, + 0x2618ca, + 0x23a747, + 0x30874a, + 0x34018e, + 0x221486, + 0x318947, + 0x34f706, + 0x240d86, + 0x20748b, + 0x39710a, + 0x27630d, + 0x212347, + 0x265388, + 0x265389, + 0x26538f, + 0x30440c, + 0x263289, + 0x3d28ce, + 0x322f4a, + 0x3c2b46, + 0x2fdb86, + 0x31ef4c, + 0x32018c, + 0x322208, + 0x35a347, + 0x37c545, + 0x2297c4, + 0x36a6ce, + 0x262584, + 0x329687, + 0x39d78a, + 0x3d3b54, + 0x3d64cf, + 0x2207c8, + 0x22be08, + 0x3625cd, + 0x3625ce, + 0x22c289, + 0x22d408, + 0x22d40f, + 0x23288c, + 0x23288f, + 0x233a47, + 0x235f0a, + 0x23d64b, + 0x237788, + 0x238b87, + 0x25bfcd, + 0x330106, + 0x3082c6, + 0x23b289, + 0x3dbb88, + 0x240b88, + 0x240b8e, + 0x20f747, + 0x2fbb45, + 0x242505, + 0x207a84, + 0x32a486, + 0x28bf08, + 0x374883, + 0x2e16ce, + 0x25c388, + 0x2a704b, + 0x26fd07, + 0x26ae45, + 0x287806, + 0x2aeb47, + 0x31b4c8, + 0x34b8c9, + 0x3cc205, + 0x287c88, + 0x222e86, + 0x3a35ca, + 0x36a5c9, + 0x232c49, + 0x232c4b, + 0x339748, + 0x345649, + 0x2edb46, + 0x28f0ca, + 0x36764a, + 0x23610c, + 0x368807, + 0x26c50a, + 0x2e5b0b, + 0x2e5b19, + 0x324888, + 0x240a05, + 0x25c186, + 0x217d09, + 0x26cc06, + 0x236d8a, + 0x2114c6, + 0x20d644, + 0x2cbb0d, + 0x344147, + 0x20d649, + 0x244745, + 0x245148, + 0x2472c9, + 0x249204, + 0x249e87, + 0x249e88, + 0x24a2c7, + 0x264208, + 0x24ef47, + 0x36bfc5, + 0x256e4c, + 0x257309, + 0x2d908a, + 0x3a6609, + 0x2ef3c9, + 0x3889cc, + 0x25a18b, + 0x25ad08, + 0x25c8c8, + 0x260284, + 0x284fc8, + 0x286209, + 0x2b1987, + 0x213f06, + 0x2a0e07, + 0x29bc49, + 0x20624b, + 0x35cd07, + 0x216687, + 0x3c5247, + 0x3cedc4, + 0x3cedc5, + 0x2daec5, + 0x358e8b, + 0x3b40c4, + 0x326948, + 0x2f9a0a, + 0x222f47, + 0x3c8e87, + 0x290552, + 0x292586, + 0x22f446, + 0x28e40e, + 0x296b86, + 0x296008, + 0x29664f, + 0x3cf208, + 0x3b1148, + 0x34200a, + 0x342011, + 0x2a5c4e, + 0x2536ca, + 0x2536cc, + 0x22d607, + 0x22d610, + 0x3bee08, + 0x2a5e45, + 0x2aee4a, + 0x3c5d8c, + 0x29868d, + 0x3b0c46, + 0x3b0c47, + 0x3b0c4c, + 0x3bd2cc, + 0x36f70c, + 0x2c4c4b, + 0x38c184, + 0x2e5bc4, + 0x2b1189, + 0x34abc7, + 0x37d789, + 0x367489, + 0x2b1587, + 0x2b1746, + 0x2b1749, + 0x2b1b43, + 0x2c660a, + 0x373cc7, + 0x3c05cb, + 0x27618a, + 0x388144, + 0x32fd06, + 0x282349, + 0x36c284, + 0x2f480a, + 0x245005, + 0x2c16c5, + 0x2c16cd, + 0x2c1a0e, + 0x2c1585, + 0x339b86, + 0x240587, + 0x3db90a, + 0x2569c6, + 0x37c044, + 0x30ed87, + 0x2ee38b, + 0x263f07, + 0x24aac4, + 0x27a306, + 0x27a30d, + 0x2dd88c, + 0x20a6c6, + 0x21554a, + 0x229886, + 0x2147c8, + 0x35b747, + 0x2c93ca, + 0x23b006, + 0x212243, + 0x220286, + 0x298e48, + 0x22fb0a, + 0x2d2dc7, + 0x2d2dc8, + 0x25af84, + 0x290ac7, + 0x2d3288, + 0x292788, + 0x2f1b08, + 0x2b808a, + 0x2e2a45, + 0x2db407, + 0x253513, + 0x268f86, + 0x3dabc8, + 0x224609, + 0x240088, + 0x2ff44b, + 0x3a4bc8, + 0x2b92c4, + 0x21aac6, + 0x320906, + 0x31c309, + 0x2c9207, + 0x256f48, + 0x2a1c06, + 0x200bc4, + 0x3a0e45, + 0x2cf888, + 0x201d8a, + 0x2cb788, + 0x2d0846, + 0x29cd0a, + 0x26e708, + 0x2d4888, + 0x2d6288, + 0x2d6ac6, + 0x2d9646, + 0x3a60cc, + 0x2d9bd0, + 0x2ade05, + 0x3b6408, + 0x3b6410, + 0x3cf010, + 0x3a1c0e, + 0x3a5d4e, + 0x3a5d54, + 0x3ad7cf, + 0x3adb86, + 0x345851, + 0x343a93, + 0x343f08, + 0x369c05, + 0x27aa88, + 0x2097c5, + 0x329d8c, + 0x229189, + 0x229609, + 0x3dd547, + 0x340649, + 0x236947, + 0x35e746, + 0x285647, + 0x203885, + 0x2080c3, + 0x23a183, + 0x20fc44, + 0x30128d, + 0x34bc8f, + 0x200c05, + 0x333a46, + 0x212887, + 0x397547, + 0x204206, + 0x20420b, + 0x2a6a85, + 0x258b46, + 0x305f87, + 0x24f449, + 0x2211c6, + 0x3855c5, + 0x3ba74b, + 0x3b0946, + 0x2137c5, + 0x23f088, + 0x291988, + 0x29f94c, + 0x29f950, + 0x2a2749, + 0x2b71c7, + 0x2b22cb, + 0x2c1f86, + 0x310eca, + 0x3da94b, + 0x30cc4a, + 0x2eca86, + 0x2ed205, + 0x32d7c6, + 0x286bc8, + 0x3dd60a, + 0x36225c, + 0x2f568c, + 0x2f5988, + 0x240985, + 0x38b9c7, + 0x2ba0c6, + 0x3b9505, + 0x218086, + 0x2043c8, + 0x2c0647, + 0x2ba388, + 0x26904a, + 0x3a978c, + 0x374b09, + 0x3a9a07, + 0x286744, + 0x2425c6, + 0x300b4a, + 0x367585, + 0x216f8c, + 0x21a0c8, + 0x2e4ac8, + 0x34ea0c, + 0x35a64c, + 0x387c89, + 0x387ec7, + 0x370b8c, + 0x222104, + 0x24a04a, + 0x30f80c, + 0x25038b, + 0x250a0b, + 0x253c46, + 0x256b07, + 0x22d847, + 0x22d84f, + 0x309cd1, + 0x2dfa92, + 0x257bcd, + 0x257bce, + 0x257f0e, + 0x3ad988, + 0x3ad992, + 0x260408, + 0x224c47, + 0x24d44a, + 0x2a95c8, + 0x296b45, + 0x2b484a, + 0x21c887, + 0x2e99c4, + 0x201783, + 0x235b45, + 0x342287, + 0x355047, + 0x29888e, + 0x3355cd, + 0x33c809, + 0x319c85, + 0x358243, + 0x34a646, + 0x259145, + 0x2a7288, + 0x21e489, + 0x25c1c5, + 0x25c1cf, + 0x2d2547, + 0x20cf45, + 0x2706ca, + 0x3c1586, + 0x245e09, + 0x37818c, + 0x3addc9, + 0x3d7046, + 0x2f980c, + 0x3390c6, + 0x307648, + 0x2e5a06, + 0x3645c6, + 0x2b5844, + 0x31c283, + 0x221a4a, + 0x3037d1, + 0x26344a, + 0x246685, + 0x25a5c7, + 0x254047, + 0x2d3384, + 0x2d338b, + 0x21d048, + 0x2bf146, + 0x2315c5, + 0x32b944, + 0x2410c9, + 0x2008c4, + 0x20c3c7, + 0x34cf05, + 0x34cf07, + 0x28e645, + 0x247d03, + 0x224b08, + 0x27ac8a, + 0x24e4c3, + 0x39774a, + 0x36c746, + 0x25bf4f, + 0x3d2009, + 0x2e1650, + 0x2fcbc8, + 0x2d1689, + 0x29a087, + 0x27a28f, + 0x38f304, + 0x2db244, + 0x21c386, + 0x243206, + 0x2ed5ca, + 0x252f86, + 0x395207, + 0x311348, + 0x311547, + 0x312a07, + 0x314aca, + 0x31330b, + 0x251a45, + 0x2df6c8, + 0x20ae83, + 0x3bcd4c, + 0x37c2cf, + 0x3c0d8d, + 0x257747, + 0x33c949, + 0x2312c7, + 0x267e48, + 0x3d3d4c, + 0x2b91c8, + 0x246388, + 0x33104e, + 0x348c94, + 0x3491a4, + 0x35ff0a, + 0x37bccb, + 0x236a04, + 0x236a09, + 0x2b5448, + 0x242d05, + 0x37438a, + 0x285b07, + 0x322c44, + 0x248343, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x228b03, + 0x224e44, + 0x214543, + 0x211543, + 0x2d9bc6, + 0x217b84, + 0x20a803, + 0x216603, + 0x216103, + 0x2000c2, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x228b03, + 0x214543, + 0x2d9bc6, + 0x20a803, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x217b84, + 0x20a803, + 0x216603, + 0x2000c2, + 0x258783, + 0x20c302, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x204042, + 0x209382, + 0x20c302, + 0x22c0c3, + 0x207902, + 0x2005c2, + 0x224e44, + 0x303f84, + 0x22b302, + 0x217b84, + 0x2003c2, + 0x216603, + 0x216103, + 0x253c46, + 0x20ff42, + 0x205402, + 0x225242, + 0x55a08683, + 0x55e2d603, + 0x54b86, + 0x54b86, + 0x242244, + 0x20ca43, + 0x14114d, + 0x8bd8a, + 0x1bc1cc, + 0x1b338c, + 0xca7cd, + 0x12eb85, + 0x8b50c, + 0x6bb47, + 0xbec6, + 0x15d08, + 0x1ae07, + 0x21ec8, + 0x19974a, + 0x10f087, + 0x56a8b745, + 0xdc1c9, + 0x56c344cb, + 0x920b, + 0x1846c8, + 0x14dd89, + 0x6828a, + 0xe56ce, + 0x7d4d, + 0x2c28d, + 0x143fe8b, + 0xdd74a, + 0xd944, + 0x58c86, + 0x1bd708, + 0x18a0c8, + 0x67607, + 0xa0c5, + 0xfdc7, + 0x330c9, + 0x16c307, + 0xe688, + 0x2b5c9, + 0x4a444, + 0x4d185, + 0x13fe4e, + 0x189d4d, + 0x114c8, + 0x57293106, + 0x57d72f88, + 0x74388, + 0x13b0d0, + 0x510cc, + 0x60fc7, + 0x62447, + 0x68607, + 0x71487, + 0x4c02, + 0x122587, + 0x1972cc, + 0xfe445, + 0x35147, + 0xa8946, + 0xaa289, + 0xac0c8, + 0x4742, + 0x5c2, + 0x18ce06, + 0x1ba00b, + 0x1ba306, + 0xbe384, + 0x1753c7, + 0xe3389, + 0x6dc89, + 0x1432c8, + 0x48902, + 0x191f89, + 0xbac8, + 0xe9a8a, + 0x38909, + 0x52946, + 0xce3c9, + 0xdd6c7, + 0xdde09, + 0xdef08, + 0xe0f87, + 0xe29c9, + 0xe8ec5, + 0xe9250, + 0x155886, + 0x175305, + 0x114587, + 0x3950d, + 0x3ef85, + 0xef1c6, + 0xef9c7, + 0xf61d8, + 0x11848, + 0xbe7ca, + 0xa982, + 0x507ca, + 0x6284d, + 0x2e42, + 0x13686, + 0x9d488, + 0xabe4a, + 0x45948, + 0x6d309, + 0x111788, + 0x7768e, + 0x6d548, + 0x14a647, + 0x58293044, + 0x14e70d, + 0x102f05, + 0x3148, + 0x42dc8, + 0x10c246, + 0x14302, + 0x92c04, + 0x62706, + 0x3e006, + 0x58532e4b, + 0x57c2, 0x401, - 0x5ed07, - 0x117c83, - 0x54ef8644, - 0x55296943, + 0x81, + 0x5a947, + 0x8d9c3, + 0x576f67c4, + 0x57a973c3, 0xc1, - 0x11746, + 0x1a286, 0xc1, 0x201, - 0x11746, - 0x117c83, - 0x418c3, - 0x9a544, - 0x147da45, - 0x52184, - 0x65387, - 0x2782, - 0x24ec04, - 0x22d7c3, - 0x251184, - 0x222884, - 0x206b43, - 0x221f05, - 0x214703, - 0x25b583, - 0x3da885, - 0x207b83, - 0xe583, - 0x56a2d7c3, - 0x233743, - 0x4183, - 0x220583, + 0x1a286, + 0x8d9c3, + 0x422c3, + 0x46e44, + 0x14947, + 0x5b07, + 0x153e145, + 0x4cec4, + 0x61107, + 0xc302, + 0x249f84, + 0x22c0c3, + 0x24b304, + 0x224e44, + 0x20a803, + 0x2244c5, + 0x216e03, + 0x236bc3, + 0x204185, + 0x205b03, + 0xdd43, + 0x5962c0c3, + 0x232c43, + 0x4b304, + 0x20c3, + 0x228b03, 0x200181, - 0x14903, - 0x205e03, - 0x3216c4, - 0x205184, - 0x206b43, - 0x23cf83, - 0x202003, - 0xa14c8, + 0xe403, + 0x211543, + 0x303f84, + 0x217b84, + 0x20a803, + 0x4bbc3, + 0x216603, + 0x20c603, + 0x9fe08, 0x2000c2, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x228843, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x212483, 0x2005c2, - 0x222884, - 0x219e43, - 0x205e03, - 0x206b43, - 0x2013c3, - 0x23cf83, - 0x207b83, - 0xa14c8, - 0x1213c7, - 0x2782, - 0x1a4d45, - 0x5798f, - 0xdac46, - 0x144b148, - 0x11630e, - 0x57a0f9c2, - 0x32bd88, - 0x310446, - 0x252306, - 0x30fdc7, - 0x57e01cc2, - 0x583d3308, - 0x21538a, - 0x264cc8, - 0x200b02, - 0x31f649, - 0x328847, - 0x2122c6, - 0x222289, - 0x30bdc4, - 0x20f186, - 0x2c5bc4, - 0x2072c4, - 0x25ab09, - 0x314786, - 0x22c345, - 0x2684c5, - 0x22df07, - 0x2c2ac7, - 0x28c3c4, - 0x310006, - 0x2f9045, - 0x218c85, - 0x27d245, - 0x2af587, - 0x26f285, - 0x24c349, - 0x3ccec5, - 0x347b44, - 0x266607, - 0x330b8e, - 0x360849, - 0x37ef89, - 0x335d46, - 0x23e788, - 0x24378b, - 0x367ecc, - 0x34d746, - 0x336c07, - 0x2b2a45, - 0x21744a, - 0x28db09, - 0x203489, - 0x3d5546, - 0x303405, - 0x247ac5, - 0x34a009, - 0x27d3cb, - 0x2e1886, - 0x350706, - 0x202c44, - 0x290746, - 0x2fc248, - 0x3b7506, - 0x357086, - 0x3c6d48, - 0x3d1907, - 0x3d5309, - 0x3d7485, - 0xa14c8, - 0x3cedc4, - 0x316e84, - 0x20b085, - 0x343e09, - 0x2214c7, - 0x2214cb, - 0x2245ca, - 0x2278c5, - 0x586022c2, - 0x2c6b47, - 0x58a27bc8, - 0x3d5787, - 0x2bdf05, - 0x35cd4a, - 0x2782, - 0x279acb, - 0x27f74a, - 0x24c7c6, - 0x22a2c3, - 0x36f7cd, - 0x3a864c, - 0x3b568d, - 0x231085, - 0x27a785, - 0x30ae87, - 0x3dac89, - 0x215286, - 0x257345, - 0x2eed48, - 0x290643, - 0x3011c8, - 0x290648, - 0x2c7d47, - 0x32af88, - 0x3a8449, - 0x2cbec7, - 0x2c6347, - 0x27d8c8, - 0x31ad44, - 0x31ad47, - 0x287a88, - 0x35e006, - 0x39990f, - 0x2e5007, - 0x358d86, - 0x36af45, - 0x224103, - 0x249d47, - 0x387183, - 0x24ff86, - 0x252086, - 0x252f86, - 0x294045, - 0x267e83, - 0x391408, - 0x388d49, - 0x39a54b, - 0x253108, - 0x2545c5, - 0x2563c5, - 0x58eb06c2, - 0x284f89, - 0x222907, - 0x25c785, - 0x25aa07, - 0x25c046, - 0x380bc5, - 0x25cb4b, - 0x25f044, - 0x264885, - 0x2649c7, - 0x277f46, - 0x278385, - 0x2874c7, - 0x287e07, - 0x2d2944, - 0x28cd0a, - 0x28ee48, - 0x243a49, - 0x368a85, - 0x2b2dc6, - 0x2fc40a, - 0x2683c6, - 0x22cd47, - 0x2c9b4d, - 0x2a5849, - 0x341d45, - 0x202d07, - 0x330f88, - 0x330508, - 0x21fa47, - 0x32e906, - 0x222c87, - 0x251b03, - 0x314704, - 0x37d145, - 0x3a9b07, - 0x3ae709, - 0x22ac48, - 0x22cc45, - 0x24b544, - 0x24cac5, - 0x2532cd, - 0x202082, - 0x2c1346, - 0x25ba06, - 0x2fe5ca, - 0x390dc6, - 0x397485, - 0x2c6085, - 0x2c6087, - 0x3a788c, - 0x2760ca, - 0x290406, - 0x2dbe05, - 0x290586, - 0x2908c7, - 0x292046, - 0x293f4c, - 0x2223c9, - 0x59211bc7, - 0x295f45, - 0x295f46, - 0x2963c8, - 0x2bca45, - 0x2a6545, - 0x2a6f08, - 0x2a710a, - 0x5967a482, - 0x59a08402, - 0x300945, - 0x281443, - 0x229d88, - 0x20b443, - 0x2a7384, - 0x2f99cb, - 0x3c72c8, - 0x2b1588, - 0x59fcc049, - 0x2abbc9, - 0x2ac306, - 0x2ad048, - 0x2ad249, - 0x2ae3c6, - 0x2ae545, - 0x24a8c6, - 0x2aed09, - 0x2ba987, - 0x34b786, - 0x21d087, - 0x3731c7, - 0x21f1c4, - 0x5a3a06c9, - 0x349708, - 0x3d3208, - 0x23fd07, - 0x2caf06, - 0x3c7789, - 0x2522c7, - 0x348f8a, - 0x369508, - 0x212c47, - 0x224f06, - 0x2ad5ca, - 0x231808, - 0x2e8745, - 0x2269c5, - 0x351147, - 0x31c689, - 0x3208cb, - 0x355d88, - 0x3ccf49, - 0x253a47, - 0x2bbd8c, - 0x2bc60c, - 0x2bc90a, - 0x2bcb8c, - 0x2c5748, - 0x2c5948, - 0x2c5b44, - 0x2c74c9, - 0x2c7709, - 0x2c794a, - 0x2c7bc9, - 0x2c7f07, - 0x3d5b4c, - 0x20ca46, - 0x2c9508, - 0x268486, - 0x3a3386, - 0x341c47, - 0x21fbc8, - 0x20f74b, - 0x3d5647, - 0x25a7c9, - 0x285189, - 0x355c07, - 0x2c5e04, - 0x2fa147, - 0x20a286, - 0x20ddc6, - 0x2fdf85, - 0x2cec48, - 0x294884, - 0x294886, - 0x275f8b, - 0x2ae009, - 0x250ac6, - 0x357289, - 0x20b146, - 0x204048, - 0x218983, - 0x303585, - 0x222a89, - 0x224805, - 0x37e504, - 0x277486, - 0x23c705, - 0x257bc6, - 0x31a607, - 0x346dc6, - 0x22bb0b, - 0x249887, - 0x2554c6, - 0x210046, - 0x22dfc6, - 0x28c389, - 0x2fa54a, - 0x2be6c5, - 0x3b518d, - 0x2a7206, - 0x38fac6, - 0x2cb806, - 0x2f7805, - 0x2ea2c7, - 0x22a587, - 0x273bce, - 0x205e03, - 0x2caec9, - 0x245009, - 0x22dc47, - 0x226247, - 0x237d85, - 0x210205, - 0x5a600c0f, - 0x2d2287, - 0x2d2448, - 0x2d3144, - 0x2d3586, - 0x5aa477c2, - 0x2d9b06, - 0x2dc3c6, - 0x2451ce, - 0x30100a, - 0x2b6546, - 0x21ba0a, - 0x3c2989, - 0x234045, - 0x305488, - 0x31d886, - 0x29d808, - 0x329788, - 0x27958b, - 0x30fec5, - 0x26f308, - 0x3c6e8c, - 0x2bddc7, - 0x252806, - 0x2e5888, - 0x20f408, - 0x5ae4fd42, - 0x20ef4b, - 0x3d7689, - 0x28d5c9, - 0x21b707, - 0x3c4f88, - 0x5b397048, - 0x20e7cb, - 0x37f749, - 0x25db4d, - 0x3295c8, - 0x2ad7c8, - 0x5b601642, - 0x3cbec4, - 0x5ba2ebc2, - 0x3b0a06, - 0x5be01102, - 0x2f500a, - 0x2ab406, - 0x238348, - 0x3be948, - 0x248ec6, - 0x337106, - 0x2fd1c6, - 0x2a6a45, - 0x23a1c4, - 0x5c238884, - 0x355586, - 0x296e47, - 0x5c60c687, - 0x26c08b, - 0x3d5989, - 0x27a7ca, - 0x206944, - 0x2c61c8, - 0x34b54d, - 0x2f5b89, - 0x2f5dc8, - 0x2f6049, - 0x2f7dc4, - 0x247344, - 0x25ebc5, - 0x36824b, - 0x3c7246, - 0x3553c5, - 0x2eb909, - 0x3100c8, - 0x238a04, - 0x2175c9, - 0x237605, - 0x2c2b08, - 0x2c6a07, - 0x37f388, - 0x284846, - 0x3d1ec7, - 0x2e1049, - 0x3cc909, - 0x3c7a85, - 0x36ff45, - 0x5ca12cc2, - 0x347904, - 0x217fc5, - 0x30fcc6, - 0x37a1c5, - 0x2edec7, - 0x299f85, - 0x277f84, - 0x335e06, - 0x2573c7, - 0x2ff786, - 0x321d85, - 0x210608, - 0x310645, - 0x214887, - 0x221109, - 0x2ae14a, - 0x22b147, - 0x22b14c, - 0x22c306, - 0x23ce09, - 0x37ff05, - 0x38ad48, - 0x209f43, - 0x20ab85, - 0x209f45, - 0x303b07, - 0x5ce03542, - 0x2f0187, - 0x2e7f46, - 0x3ce746, - 0x2eb246, - 0x20f346, - 0x2ddf88, - 0x31f2c5, - 0x358e47, - 0x358e4d, - 0x203843, - 0x20cf05, - 0x26fbc7, - 0x2f04c8, - 0x26f785, - 0x213e88, - 0x39c646, - 0x2df047, - 0x2c9445, - 0x30ff46, - 0x391985, - 0x21504a, - 0x2f9406, - 0x282187, - 0x31e445, - 0x3a6707, - 0x305d84, - 0x37e486, - 0x3053c5, - 0x216bcb, - 0x20a109, - 0x24df0a, - 0x3c7b08, - 0x348348, - 0x30d40c, - 0x30ef47, - 0x311dc8, - 0x313f88, - 0x314d05, - 0x350f0a, - 0x352a09, - 0x5d202702, - 0x3c0806, - 0x246dc4, - 0x246dc9, - 0x270a09, - 0x277987, - 0x2b4907, - 0x3562c9, - 0x2d1b88, - 0x2d1b8f, - 0x223686, - 0x2deb4b, - 0x2669c5, - 0x2669c7, - 0x374c49, - 0x217546, - 0x217547, - 0x2e3185, - 0x230f84, - 0x267586, - 0x221684, - 0x2b5287, - 0x2b3688, - 0x5d703308, - 0x304885, - 0x3049c7, - 0x32ac89, - 0x20ed04, - 0x240588, - 0x5da72b88, - 0x2d88c4, - 0x347e48, - 0x372644, - 0x3b5489, - 0x219f85, - 0x5de1be02, - 0x2236c5, - 0x2e38c5, - 0x202b48, - 0x234347, - 0x5e2008c2, - 0x2389c5, - 0x2d76c6, - 0x232e06, - 0x3478c8, - 0x34ab88, - 0x37a186, - 0x37ae06, - 0x321489, - 0x3ce686, - 0x2195cb, - 0x31f585, - 0x2a8046, - 0x2755c8, - 0x3333c6, - 0x39ec86, - 0x21434a, - 0x2abf8a, - 0x273305, - 0x30dcc7, - 0x2f33c6, - 0x5e606842, - 0x26fd07, - 0x25e345, - 0x2fc384, - 0x2fc385, - 0x206846, - 0x271847, - 0x21c9c5, - 0x21fc44, - 0x2d39c8, - 0x39ed45, - 0x3c9707, - 0x3d4145, - 0x214f85, - 0x2ae9c4, - 0x2e6ac9, - 0x2f8e88, - 0x23a946, - 0x3b7ec6, - 0x3cae86, - 0x5eb0f4c8, - 0x30f6c7, - 0x31174d, - 0x312c4c, - 0x313249, - 0x313489, - 0x5ef73c82, - 0x3d2fc3, - 0x20a343, - 0x20a345, - 0x3a9c0a, - 0x33fbc6, - 0x24e305, - 0x31af04, - 0x31af0b, - 0x3340cc, - 0x33534c, - 0x335655, - 0x337b4d, - 0x33964f, - 0x339a12, - 0x339e8f, - 0x33a252, - 0x33a6d3, - 0x33ab8d, - 0x33b14d, - 0x33b4ce, - 0x33ba4e, - 0x33c78c, - 0x33cb4c, - 0x33cf8b, - 0x33da0e, - 0x33e312, - 0x33f98c, - 0x33fe90, - 0x34ba52, - 0x34c6cc, - 0x34cd8d, - 0x34d0cc, - 0x34f611, - 0x35088d, - 0x352c4d, - 0x35324a, - 0x3534cc, - 0x3547cc, - 0x3550cc, - 0x35688c, - 0x35a253, - 0x35a8d0, - 0x35acd0, - 0x35b64d, - 0x35bc4c, - 0x35d6c9, - 0x35ef4d, - 0x35f293, - 0x361fd1, - 0x3627d3, - 0x363c8f, - 0x36404c, - 0x36434f, - 0x36470d, - 0x364d0f, - 0x3650d0, - 0x365b4e, - 0x369c8e, - 0x36b490, - 0x36bf4d, - 0x36c8ce, - 0x36cc4c, - 0x36dc13, - 0x37028e, - 0x370910, - 0x370d11, - 0x37114f, - 0x371513, - 0x37380d, - 0x373b4f, - 0x373f0e, - 0x374490, - 0x374889, - 0x3761d0, - 0x3767cf, - 0x376e4f, - 0x377212, - 0x37940e, - 0x379e0d, - 0x37a54d, - 0x37a88d, - 0x37b80d, - 0x37bb4d, - 0x37be90, - 0x37c28b, - 0x37cf0c, - 0x37d28c, - 0x37d88c, - 0x37db8e, - 0x38b4d0, - 0x38ddd2, - 0x38e24b, - 0x38e58e, - 0x38e90e, - 0x38f18e, - 0x38f60b, - 0x5f38fc56, - 0x390acd, - 0x390f54, - 0x391c4d, - 0x3939d5, - 0x39554d, - 0x395ecf, - 0x39654f, - 0x39a80f, - 0x39abce, - 0x39b14d, - 0x39cc91, - 0x3a2b4c, - 0x3a2e4c, - 0x3a314b, - 0x3a370c, - 0x3a3d8f, - 0x3a4152, - 0x3a480d, - 0x3a590c, - 0x3a68cc, - 0x3a6bcd, - 0x3a6f0f, - 0x3a72ce, - 0x3a98cc, - 0x3a9e8d, - 0x3aa1cb, - 0x3aaa8c, - 0x3ab38d, - 0x3ab6ce, - 0x3aba49, - 0x3ad093, - 0x3ad7cd, - 0x3adecd, - 0x3ae4cc, - 0x3ae94e, - 0x3af04f, - 0x3af40c, - 0x3af70d, - 0x3afa4f, - 0x3afe0c, - 0x3b0c4c, - 0x3b110c, - 0x3b140c, - 0x3b1acd, - 0x3b1e12, - 0x3b2b8c, - 0x3b2e8c, - 0x3b3191, - 0x3b35cf, - 0x3b398f, - 0x3b3d53, - 0x3b5e0e, - 0x3b618f, - 0x3b654c, - 0x5f7b688e, - 0x3b6c0f, - 0x3b6fd6, - 0x3b9f92, - 0x3bc7cc, - 0x3bd60f, - 0x3bdc8d, - 0x3c878f, - 0x3c8b4c, - 0x3c8e4d, - 0x3c918d, - 0x3caa4e, - 0x3cdecc, - 0x3d044c, - 0x3d0750, - 0x3d2351, - 0x3d278b, - 0x3d2bcc, - 0x3d2ece, - 0x3d4591, - 0x3d49ce, - 0x3d4d4d, - 0x3d894b, - 0x3d924f, - 0x3d9e54, - 0x2068c2, - 0x2068c2, - 0x202e03, - 0x2068c2, - 0x202e03, - 0x2068c2, - 0x20c682, - 0x24a905, - 0x3d428c, - 0x2068c2, - 0x2068c2, - 0x20c682, - 0x2068c2, - 0x296a45, - 0x2ae145, - 0x2068c2, - 0x2068c2, - 0x2010c2, - 0x296a45, - 0x338309, - 0x361ccc, - 0x2068c2, - 0x2068c2, - 0x2068c2, - 0x2068c2, - 0x24a905, - 0x2068c2, - 0x2068c2, - 0x2068c2, - 0x2068c2, - 0x2010c2, - 0x338309, - 0x2068c2, - 0x2068c2, - 0x2068c2, - 0x2ae145, - 0x2068c2, - 0x2ae145, - 0x361ccc, - 0x3d428c, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x206b43, - 0x23cf83, - 0x60314887, - 0x1c618f, - 0x24c8, - 0x7b684, - 0x13c3, - 0x1a20c8, - 0x7c44, - 0x2000c2, - 0x60a02782, - 0x23fec3, - 0x250604, - 0x204183, - 0x3dc504, - 0x22fac6, - 0x20ad83, - 0x30e184, - 0x24d985, - 0x205e03, - 0x206b43, - 0x6df83, - 0x23cf83, - 0x21d60a, - 0x259b06, - 0x38ec8c, - 0xa14c8, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x22a243, - 0x2dc3c6, - 0x206b43, - 0x23cf83, - 0x213c43, - 0x2fe03, - 0xa7c88, - 0x6157eac5, - 0x4b8c7, - 0x12dac5, - 0x178449, - 0xdcc2, - 0x6237e2c5, - 0x12dac5, - 0x2afc7, - 0x6da08, - 0x820e, - 0x8abd2, - 0x11f94b, - 0x1143c6, - 0x6268d145, - 0x62a8d14c, - 0x5e4c7, - 0x14c47, - 0x1a0eca, - 0x3b650, - 0x173345, - 0x10cd0b, - 0x6c648, - 0x3fbc7, - 0x19ee0b, - 0x80b89, - 0x4aac7, - 0x1a0047, - 0xe1ac7, - 0x35186, - 0x18b08, - 0x63029f46, - 0x49ec7, - 0x15c646, - 0x6c2cd, - 0x1a0890, - 0x634758c2, - 0x5d88, - 0x3c010, - 0x1818cc, - 0x63b89fcd, - 0x5d348, - 0x5d7cb, - 0x6ad07, - 0x16a549, - 0x59706, - 0x965c8, - 0x7102, - 0x8898a, - 0xde307, - 0x1cc607, - 0xa8549, - 0xaa8c8, - 0x1b8e85, - 0x18bb06, - 0x1c4d06, - 0xf6cce, - 0x23b4e, - 0xa9f4f, - 0xe4e09, - 0x504c9, - 0x8850b, - 0xa224f, - 0xc334c, - 0xbb64b, - 0xe0ac8, - 0x144707, - 0x166308, - 0x18da0b, - 0x194d8c, - 0x19bd4c, - 0x1a3a8c, - 0xafccd, - 0x17f8c8, - 0xefdc2, - 0x191789, - 0xf9708, - 0x1921cb, - 0xcb106, - 0xd6f8b, - 0x13de4b, - 0xe28ca, - 0xe3485, - 0xe9fd0, - 0xec646, - 0x12e406, - 0x45585, - 0x1667c7, - 0xfd6c8, - 0xf1407, - 0xf16c7, - 0x1c6647, - 0x1b084a, - 0xa134a, - 0x5bac6, - 0x94ecd, - 0x49f88, - 0x115f88, - 0xae909, - 0xbacc5, - 0x1aed4c, - 0xafecb, - 0x10d704, - 0x10f109, - 0x10f346, - 0x159546, - 0x1b4886, - 0x7d82, - 0xec046, - 0x10b9cb, - 0x11d447, - 0xa842, - 0xcd9c5, - 0x26c44, - 0x101, - 0x568c3, - 0x62e81606, - 0x96943, - 0x382, - 0x29144, - 0xb02, - 0x41844, - 0x882, - 0x2202, - 0x2c42, - 0x25a42, - 0x5cc2, - 0x8d142, - 0x14c2, - 0xd5e42, - 0x36d82, - 0x37982, - 0x2942, - 0x52282, - 0x33743, - 0x942, - 0x1242, - 0x19d02, - 0xe282, - 0x642, - 0x320c2, - 0x373c2, - 0x3d82, - 0x5e42, - 0x5c2, - 0x19e43, - 0x1b82, - 0x6102, - 0x4d442, - 0x53a42, - 0xb42, - 0x8002, - 0xf1c2, - 0xdf302, - 0x24c2, - 0x1582, - 0x6cec2, - 0x45ec2, - 0x6b43, - 0x602, - 0x4fd42, - 0x13c2, - 0xcc82, - 0x1c7a05, - 0x6a82, - 0x41f42, - 0x3c883, - 0x682, - 0x16f82, - 0x1bc2, - 0x37c2, - 0x3842, - 0x8c2, - 0xd2c2, - 0x7d82, - 0x5f85, - 0x63e0c682, - 0x642cfe83, - 0x20c3, - 0x6460c682, - 0x20c3, - 0x83cc7, - 0x20c443, - 0x2000c2, - 0x22d7c3, - 0x233743, - 0x228843, - 0x2005c3, - 0x22a243, - 0x206b43, - 0x2013c3, - 0x23cf83, - 0x296983, - 0xfc105, - 0x1083, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x228843, - 0x205e03, - 0x206b43, - 0x2013c3, - 0x6df83, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x200181, - 0x205e03, - 0x206b43, - 0x251ac3, - 0x23cf83, - 0x10c9c4, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x205d83, - 0x228843, - 0x251383, - 0x22f503, - 0x2ab3c3, - 0x249743, - 0x220583, - 0x222884, - 0x206b43, - 0x23cf83, - 0x207b83, - 0x201844, - 0x2534c3, - 0xa683, - 0x3c38c3, - 0x32a148, - 0x2ad604, - 0x20020a, - 0x250846, - 0x12aa84, - 0x383407, - 0x21dd8a, - 0x223549, - 0x3ad507, - 0x3b41ca, - 0x24ce83, - 0x3009cb, - 0x2d5809, - 0x2d86c5, - 0x3b0f47, - 0x2782, - 0x22d7c3, - 0x237987, - 0x2e5505, - 0x2c5cc9, - 0x233743, - 0x308386, - 0x2c5103, - 0xa1c3, - 0x119746, - 0x10b206, - 0xad07, - 0x221986, - 0x225a85, - 0x3d7547, - 0x316747, - 0x67220583, - 0x34c907, - 0x3b4983, - 0x20be85, - 0x222884, - 0x26ef88, - 0x379b0c, - 0x2b12c5, - 0x2a59c6, - 0x237847, - 0x20a647, - 0x2660c7, - 0x270048, - 0x31868f, - 0x223785, - 0x23ffc7, - 0x20d547, - 0x2a74ca, - 0x2eeb89, - 0x322805, - 0x32484a, - 0x130246, - 0xbb147, - 0x2c5185, - 0x38e484, - 0x248e06, - 0xbdfc6, - 0x381b47, - 0x2efcc7, - 0x3dae88, - 0x21a205, - 0x2e5406, - 0x25388, - 0x357005, - 0x1571c6, + 0x224e44, + 0x214543, + 0x211543, + 0x20a803, + 0x20ca43, + 0x216603, + 0x205b03, + 0x17c204, + 0x9fe08, + 0x103c87, + 0xc302, + 0x1a0dc5, + 0x5120f, + 0xd23c6, + 0x14470c8, + 0x11240e, + 0x5a631802, + 0x32ce48, + 0x28c4c6, + 0x24d046, + 0x30e787, + 0x5aa00c82, + 0x5afd1e88, + 0x21068a, + 0x260a48, + 0x200ac2, + 0x3c0409, + 0x251a87, + 0x213e86, + 0x224849, + 0x2db544, + 0x3c0306, + 0x2c7144, + 0x203584, + 0x2560c9, + 0x30f546, + 0x229cc5, + 0x264f45, + 0x22cac7, + 0x2c3887, + 0x2f53c4, + 0x35c0c6, + 0x2f9145, + 0x20e805, + 0x246745, + 0x2c4f47, + 0x26fb45, + 0x247749, + 0x329945, + 0x31b604, + 0x256907, + 0x33ed4e, + 0x343689, + 0x28e2c9, + 0x33de06, + 0x23ce88, + 0x3c208b, + 0x36828c, + 0x324046, + 0x2ffe07, + 0x2b34c5, + 0x21730a, + 0x28c109, + 0x2013c9, + 0x3d9f06, + 0x305d45, + 0x242885, + 0x355449, + 0x2468cb, + 0x2772c6, + 0x354546, + 0x204b44, + 0x239b06, + 0x2fbbc8, + 0x3bc0c6, + 0x2eb006, + 0x3cf9c8, + 0x3d6e47, + 0x3d9cc9, + 0x3de005, + 0x9fe08, + 0x3cc184, + 0x312f84, + 0x208345, + 0x346b09, + 0x222c07, + 0x222c0b, + 0x225a4a, + 0x2290c5, + 0x5b20b382, + 0x20ebc7, + 0x5b6293c8, + 0x328887, + 0x2dd185, + 0x347e8a, + 0xc302, + 0x2795cb, + 0x27deca, + 0x247bc6, + 0x2081c3, + 0x291f0d, + 0x3c084c, + 0x3c1acd, + 0x2304c5, + 0x27cb85, + 0x3748c7, + 0x207909, + 0x210586, + 0x252e05, + 0x2ec888, + 0x239a03, + 0x2e2ec8, + 0x239a08, + 0x2c8907, + 0x369588, + 0x3afa49, + 0x2fb787, + 0x20f1c7, + 0x33dfc8, + 0x29b484, + 0x29b487, + 0x314748, + 0x360586, + 0x3c3e4f, + 0x22a5c7, + 0x35bbc6, + 0x388005, + 0x2253c3, + 0x243c47, + 0x3874c3, + 0x24a686, + 0x24cdc6, + 0x24db06, + 0x294d45, + 0x264203, + 0x391c08, + 0x38a8c9, + 0x39a24b, + 0x24dc88, + 0x24ec05, + 0x24fe45, + 0x5bab12c2, + 0x285709, + 0x224ec7, + 0x258bc5, + 0x255fc7, + 0x257a86, + 0x3804c5, + 0x258f8b, + 0x25ad04, + 0x260605, + 0x260747, + 0x276c46, + 0x277085, + 0x2851c7, + 0x285cc7, + 0x2d0d84, + 0x28b30a, + 0x28cd48, + 0x3c2349, + 0x394785, + 0x32f406, + 0x2fbd8a, + 0x264e46, + 0x231047, + 0x26c88d, + 0x2a65c9, + 0x390885, + 0x36ac47, + 0x252788, + 0x2f7288, + 0x3a8d07, + 0x3affc6, + 0x2230c7, + 0x24b503, + 0x30f4c4, + 0x37dc05, + 0x3a5447, + 0x3ab0c9, + 0x26b7c8, + 0x230f45, + 0x2530c4, + 0x24de45, + 0x25ca8d, + 0x200cc2, + 0x2b6606, + 0x2d7a86, + 0x301bca, + 0x3915c6, + 0x398245, + 0x2c7605, + 0x2c7607, + 0x3a340c, + 0x27420a, + 0x290206, + 0x21fb05, + 0x239946, + 0x290387, + 0x292d06, + 0x294c4c, + 0x224989, + 0x5be1a707, + 0x296a05, + 0x296a06, + 0x296e48, + 0x245785, + 0x2a6d05, + 0x2a7f48, + 0x2a814a, + 0x5c21efc2, + 0x5c606a02, + 0x3ac085, + 0x266803, + 0x23dc88, + 0x245f43, + 0x2a83c4, + 0x245f4b, + 0x368688, + 0x2b2788, + 0x5cae7489, + 0x2ad149, + 0x2adb06, + 0x2ae7c8, + 0x2ae9c9, + 0x2af346, + 0x2af4c5, + 0x244246, + 0x2afa09, + 0x2bf9c7, + 0x3ddac6, + 0x2dd507, + 0x2e77c7, + 0x208804, + 0x5ce11b49, + 0x3b9748, + 0x3d1d88, + 0x267747, + 0x2cb246, + 0x3c6b89, + 0x24d007, + 0x3b8fca, + 0x32f548, + 0x3bd087, + 0x3c1086, + 0x27d88a, + 0x241b88, + 0x2d7505, + 0x228345, + 0x3359c7, + 0x316049, + 0x31828b, + 0x354048, + 0x3299c9, + 0x24e087, + 0x2bae4c, + 0x2bb8cc, + 0x2bbbca, + 0x2bbe4c, + 0x2c6cc8, + 0x2c6ec8, + 0x2c70c4, + 0x2c8089, + 0x2c82c9, + 0x2c850a, + 0x2c8789, + 0x2c8ac7, + 0x3b4f4c, + 0x3c62c6, + 0x26c248, + 0x264f06, + 0x38ebc6, + 0x390787, + 0x39f348, + 0x32a68b, + 0x3da007, + 0x255d89, + 0x25a709, + 0x285907, + 0x2c7384, + 0x200fc7, + 0x2cfec6, + 0x20c7c6, + 0x215705, + 0x2ce588, + 0x340544, + 0x340546, + 0x2740cb, + 0x2c6909, + 0x31fc86, + 0x2eb209, + 0x208406, + 0x201f88, + 0x20e503, + 0x305ec5, + 0x21b649, + 0x21bec5, + 0x380d84, + 0x2755c6, + 0x2354c5, + 0x207f06, + 0x316887, + 0x34b4c6, + 0x22ab4b, + 0x28efc7, + 0x243946, + 0x272506, + 0x22cb86, + 0x2f5389, + 0x2b884a, + 0x2f9d45, + 0x22850d, + 0x2a8246, + 0x23aec6, + 0x2e1546, + 0x214745, + 0x2e9547, + 0x26b107, + 0x272c8e, + 0x211543, + 0x2cb209, + 0x374d89, + 0x22c807, + 0x269887, + 0x292905, + 0x36b7c5, + 0x5d34464f, + 0x2d18c7, + 0x2d1a88, + 0x2d1fc4, + 0x2d2286, + 0x5d642582, + 0x2d6d46, + 0x2d9bc6, + 0x374f4e, + 0x2e2d0a, + 0x3d2606, + 0x219b8a, + 0x3c18c9, 0x23bd85, - 0x28ca84, - 0x2376c7, - 0x2dddca, - 0x255988, - 0x361386, - 0x2a243, - 0x2e43c5, - 0x3291c6, - 0x3d5d86, - 0x245486, - 0x205e03, - 0x3a4a87, - 0x20d4c5, - 0x206b43, - 0x2e2b8d, - 0x2013c3, - 0x3daf88, - 0x219344, - 0x278245, - 0x2a73c6, - 0x394206, - 0x2a7f47, - 0x25da07, - 0x283385, - 0x23cf83, - 0x2e9987, - 0x344809, - 0x36a6c9, - 0x32e64a, - 0x2434c2, - 0x20be44, - 0x2ecbc4, - 0x2efb87, - 0x2f0048, - 0x2f24c9, - 0x20cdc9, - 0x2f3a07, - 0xffc09, - 0x3720c6, - 0xf6a46, - 0x2f7dc4, - 0x2f83ca, - 0x2fb488, - 0x2fd089, - 0x3ac386, - 0x2b5e85, - 0x255848, - 0x2cc48a, - 0x210f43, - 0x2019c6, - 0x2f3b07, - 0x357785, - 0x390485, - 0x239703, - 0x23d804, - 0x226985, - 0x287f07, - 0x2f8fc5, - 0x2eea46, - 0x13c285, - 0x28a243, - 0x2b6609, - 0x27800c, - 0x2b9f4c, - 0x2d6d88, - 0x2a4b47, - 0x306148, - 0x106787, - 0x306fca, - 0x30768b, - 0x2d5948, - 0x394308, - 0x239106, - 0x3cad45, - 0x30a10a, - 0x2cfec5, - 0x21be02, - 0x2c9307, - 0x251646, - 0x375145, - 0x30de89, - 0x206145, - 0x31fec5, - 0x2752c9, - 0x329106, - 0x3ba5c8, - 0x26a183, - 0x209046, - 0x2773c6, - 0x31c485, - 0x31c489, - 0x2f2c09, - 0x27e387, - 0x11d2c4, - 0x31d2c7, - 0x20ccc9, - 0x21df85, - 0x3a2c8, - 0x340ec5, - 0x274b05, - 0x377a09, - 0x2020c2, - 0x2e4884, - 0x203f42, - 0x201b82, - 0x38c145, - 0x32a808, - 0x2bac05, - 0x2c80c3, - 0x2c80c5, - 0x2d9d03, - 0x209002, - 0x302284, - 0x2b69c3, - 0x201002, - 0x3cb604, - 0x2ed143, - 0x204f02, - 0x2bac83, - 0x303a84, - 0x2fd643, - 0x25cfc4, - 0x209482, - 0x213b43, - 0x21bb03, - 0x203002, - 0x308102, - 0x2f2a49, - 0x219082, - 0x28ba04, - 0x202242, - 0x2556c4, - 0x372084, - 0x206f04, - 0x207d82, - 0x238d42, - 0x36ad83, - 0x307443, - 0x237b44, - 0x248804, - 0x2ba344, - 0x2d1544, - 0x2fb643, - 0x2446c3, - 0x3301c4, - 0x31fdc4, - 0x3203c6, - 0x22c202, - 0x2782, - 0x409c3, - 0x202782, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, + 0x307b08, + 0x335886, + 0x2b1388, + 0x3dbd48, + 0x27b58b, + 0x30e885, + 0x26fbc8, + 0x3cfb0c, + 0x2dd047, + 0x24d386, + 0x3dd0c8, + 0x32a348, + 0x5da39242, + 0x208ccb, + 0x3de209, + 0x28bbc9, + 0x21b4c7, + 0x3ba588, + 0x5de07748, + 0x20df8b, + 0x343149, + 0x259e4d, + 0x31d7c8, + 0x27da88, + 0x5e201e02, + 0x3c75c4, + 0x5e62d7c2, + 0x3aba86, + 0x5ea06302, + 0x2f258a, + 0x2a6b86, + 0x26a908, + 0x3be5c8, + 0x3c0206, + 0x300306, + 0x2fc946, + 0x2a7205, + 0x237dc4, + 0x5efd3204, + 0x359686, + 0x2978c7, + 0x5f20bc07, + 0x389b0b, + 0x328a89, + 0x27cbca, + 0x220504, + 0x2c7748, + 0x3dd88d, + 0x2f3a89, + 0x2f3cc8, + 0x2f3f49, + 0x2f61c4, + 0x23d504, + 0x39ba85, + 0x275f4b, + 0x368606, + 0x3594c5, + 0x3cb449, + 0x35c188, + 0x2a4984, + 0x217489, + 0x306845, + 0x2c38c8, + 0x20f887, + 0x28e6c8, + 0x282546, + 0x3a8a07, + 0x2deac9, + 0x3ba8c9, + 0x213845, + 0x322ac5, + 0x5f61df02, + 0x31b3c4, + 0x230705, + 0x30e686, + 0x33cf45, + 0x2b7d87, + 0x2f2ec5, + 0x276c84, + 0x33dec6, + 0x252e87, + 0x251f86, + 0x3ac605, + 0x2098c8, + 0x28c6c5, + 0x20e387, + 0x21d889, + 0x2c6a4a, + 0x227cc7, + 0x227ccc, + 0x229c86, + 0x241d49, + 0x38c685, + 0x2456c8, + 0x202e43, + 0x2edb05, + 0x3a94c5, + 0x27c1c7, + 0x5fa01482, + 0x2ee787, + 0x2e8746, + 0x37fcc6, + 0x2ecbc6, + 0x32a286, + 0x239188, + 0x27abc5, + 0x35bc87, + 0x35bc8d, + 0x201783, + 0x3c6785, + 0x270487, + 0x2eeac8, + 0x270045, + 0x216348, + 0x37d686, + 0x2dc387, + 0x2c9c05, + 0x30e906, + 0x392185, + 0x21034a, + 0x303406, + 0x26ef47, + 0x2c2fc5, + 0x308407, + 0x30ed04, + 0x380d06, + 0x307a45, + 0x397c4b, + 0x2cfd49, + 0x25888a, + 0x2138c8, + 0x38d108, + 0x30bd0c, + 0x30c747, + 0x30fac8, + 0x316608, + 0x3186c5, + 0x3562ca, + 0x358249, + 0x5fe03a42, + 0x206146, + 0x25c1c4, + 0x2f0e09, + 0x25b589, + 0x2712c7, + 0x31d0c7, + 0x367309, + 0x2b8288, + 0x2b828f, + 0x223ac6, + 0x2dbe8b, + 0x259485, + 0x259487, + 0x36c889, + 0x210086, + 0x217407, + 0x2dfe05, + 0x2303c4, + 0x35b606, + 0x222dc4, + 0x2f1347, + 0x321988, + 0x60305c48, + 0x306cc5, + 0x306e07, + 0x324a09, + 0x208a84, + 0x23eb48, + 0x607c2e88, + 0x2d3384, + 0x2ebdc8, + 0x369b44, + 0x34b6c9, + 0x214685, + 0x60a19f82, + 0x223b05, + 0x2e8045, + 0x36aa88, + 0x233887, + 0x60e008c2, + 0x3d3345, + 0x2d4706, + 0x23e306, + 0x31b388, + 0x3192c8, + 0x33cf06, + 0x34aa46, + 0x303d49, + 0x37fc06, + 0x20ff4b, + 0x32a105, + 0x2a9506, + 0x2f8548, + 0x34df46, + 0x313ec6, + 0x216a4a, + 0x2d64ca, + 0x24fb45, + 0x307487, + 0x2fb286, + 0x61217042, + 0x2705c7, + 0x2ff1c5, + 0x2fbd04, + 0x2fbd05, + 0x220406, + 0x272087, + 0x21c385, + 0x25b644, + 0x2e0cc8, + 0x313f85, + 0x3c8647, + 0x3d43c5, + 0x210285, + 0x2c4e84, + 0x2e3cc9, + 0x2f8f88, + 0x238546, + 0x2e9c46, + 0x27d5c6, + 0x6170c3c8, + 0x30c5c7, + 0x30c90d, + 0x30cecc, + 0x30d4c9, + 0x30d709, + 0x61b75ac2, + 0x3d1b43, + 0x2010c3, + 0x2cff85, + 0x3a554a, + 0x33cdc6, + 0x23fd45, + 0x317944, + 0x31794b, + 0x33280c, + 0x33310c, + 0x333415, + 0x3342cd, + 0x336e4f, + 0x337212, + 0x33768f, + 0x337a52, + 0x337ed3, + 0x33838d, + 0x33894d, + 0x338cce, + 0x33924e, + 0x33994c, + 0x339d0c, + 0x33a14b, + 0x33abce, + 0x33b4d2, + 0x33cb8c, + 0x33d2d0, + 0x34fdd2, + 0x350c0c, + 0x3512cd, + 0x35160c, + 0x3536d1, + 0x3546cd, + 0x356f0d, + 0x35750a, + 0x35778c, + 0x358c4c, + 0x3591cc, + 0x359d4c, + 0x35d4d3, + 0x35db50, + 0x35df50, + 0x35e8cd, + 0x35eecc, + 0x35fc49, + 0x3618cd, + 0x361c13, + 0x363251, + 0x363a53, + 0x36474f, + 0x364b0c, + 0x364e0f, + 0x3651cd, + 0x3657cf, + 0x365b90, + 0x36660e, + 0x36b18e, + 0x36cad0, + 0x36da4d, + 0x36e3ce, + 0x36e74c, + 0x36fa13, + 0x37180e, + 0x371e90, + 0x372291, + 0x3726cf, + 0x372a93, + 0x37564d, + 0x37598f, + 0x375d4e, + 0x3762d0, + 0x3766c9, + 0x378490, + 0x378a8f, + 0x37910f, + 0x3794d2, + 0x379c8e, + 0x37a68d, + 0x37b00d, + 0x37b34d, + 0x37c70d, + 0x37ca4d, + 0x37cd90, + 0x37d18b, + 0x37d9cc, + 0x37dd4c, + 0x37e34c, + 0x37e64e, + 0x38c7d0, + 0x38e512, + 0x38e98b, + 0x38f4ce, + 0x38f84e, + 0x3900ce, + 0x39054b, + 0x61f909d6, + 0x3912cd, + 0x391754, + 0x39244d, + 0x393ad5, + 0x39578d, + 0x39610f, + 0x3968cf, + 0x39a50f, + 0x39a8ce, + 0x39ae4d, + 0x39ca11, + 0x39eb0c, + 0x39ee0c, + 0x39f10b, + 0x39f54c, + 0x39fbcf, + 0x39ff92, + 0x3a088d, + 0x3a198c, + 0x3a244c, + 0x3a274d, + 0x3a2a8f, + 0x3a2e4e, + 0x3a520c, + 0x3a57cd, + 0x3a5b0b, + 0x3a63cc, + 0x3a6ccd, + 0x3a700e, + 0x3a7389, + 0x3a83d3, + 0x3aa18d, + 0x3aa88d, + 0x3aae8c, + 0x3ab30e, + 0x3ac78f, + 0x3acb4c, + 0x3ace4d, + 0x3ad18f, + 0x3ad54c, + 0x3ae3cc, + 0x3ae88c, + 0x3aeb8c, + 0x3af24d, + 0x3af592, + 0x3b164c, + 0x3b194c, + 0x3b1c51, + 0x3b208f, + 0x3b244f, + 0x3b2813, + 0x3b374e, + 0x3b3acf, + 0x3b3e8c, + 0x623b41ce, + 0x3b454f, + 0x3b4916, + 0x3b5452, + 0x3b7d4c, + 0x3bb14f, + 0x3bb7cd, + 0x3c76cf, + 0x3c7a8c, + 0x3c7d8d, + 0x3c80cd, + 0x3c988e, + 0x3ca3cc, + 0x3cd64c, + 0x3cd950, + 0x3d0ed1, + 0x3d130b, + 0x3d174c, + 0x3d1a4e, + 0x3d4811, + 0x3d4c4e, + 0x3d4fcd, + 0x3d854b, + 0x3d8e4f, + 0x3d9814, + 0x220482, + 0x220482, + 0x227dc3, + 0x220482, + 0x227dc3, + 0x220482, + 0x204142, + 0x244285, + 0x3d450c, + 0x220482, + 0x220482, + 0x204142, + 0x220482, + 0x2974c5, + 0x2c6a45, + 0x220482, + 0x220482, + 0x208342, + 0x2974c5, + 0x334a89, + 0x362f4c, + 0x220482, + 0x220482, + 0x220482, + 0x220482, + 0x244285, + 0x220482, + 0x220482, + 0x220482, + 0x220482, + 0x208342, + 0x334a89, + 0x220482, + 0x220482, + 0x220482, + 0x2c6a45, + 0x220482, + 0x2c6a45, + 0x362f4c, + 0x3d450c, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x20a803, + 0x216603, + 0x62f0f647, + 0x1ce4cf, + 0x144208, + 0x6704, + 0xca43, + 0xcd248, + 0x5bc4, 0x2000c2, - 0x24ce83, - 0x22d7c3, - 0x233743, - 0x208903, - 0x220583, - 0x222884, - 0x2f2d04, - 0x205184, - 0x206b43, - 0x23cf83, - 0x213c43, - 0x2f8984, - 0x32bd43, - 0x2a8fc3, - 0x37a0c4, - 0x340cc6, - 0x218a43, - 0x12dac5, - 0x14c47, - 0x2e6e03, - 0x68a4abc8, - 0x2416c3, - 0x2b3883, - 0x20bec3, - 0x22a243, - 0x35ff85, - 0x1b0f03, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x3410c3, - 0x22f0c3, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x219e43, - 0x206b43, - 0x23b484, - 0x6df83, - 0x23cf83, - 0x21f4c4, - 0x12dac5, - 0x2c1745, - 0x14c47, - 0x202782, - 0x203dc2, + 0x6360c302, + 0x23e483, + 0x259844, + 0x2020c3, + 0x2d3b84, + 0x22f446, + 0x20b8c3, + 0x30b0c4, + 0x398685, + 0x211543, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x21de8a, + 0x253c46, + 0x38fbcc, + 0x9fe08, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x238cc3, + 0x2d9bc6, + 0x20a803, + 0x216603, + 0x216103, + 0x2f783, + 0xa9148, + 0x641c6005, + 0x453c7, + 0x12eb85, + 0x9349, + 0xc6c2, + 0x1b5fca, + 0x64f9e785, + 0x12eb85, + 0x6bb47, + 0x6d448, + 0x680e, + 0x894d2, + 0x173e0b, + 0x10f186, + 0x6528b745, + 0x6568b74c, + 0x8ec47, + 0x176c87, + 0x12650a, + 0x3a210, + 0xe7945, + 0x10a7cb, + 0x18a0c8, + 0x67607, + 0x11404b, + 0x330c9, + 0x44447, + 0x16c307, + 0x77507, + 0x346c6, + 0xe688, + 0x65c39346, + 0x45887, + 0x147786, + 0x189d4d, + 0xc78d0, + 0x66009802, + 0x114c8, + 0x67fd0, + 0x181a8c, + 0x6678b84d, + 0x59648, + 0x59acb, + 0x68e47, + 0x6e149, + 0x54c46, + 0x97048, + 0x33c2, + 0x198c0a, + 0x1cb807, + 0x35147, + 0xaa289, + 0xac0c8, + 0x20005, + 0x18ce06, + 0x1ba306, + 0x100d4e, + 0x240ce, + 0x14f5cf, + 0xe3389, + 0x6dc89, + 0x19878b, + 0xa318f, + 0x15090c, + 0xc010b, + 0xd8fc8, + 0x116e87, + 0x15f548, + 0x18e14b, + 0x194fcc, + 0x19bd8c, + 0x19f8cc, + 0xb08cd, + 0x1432c8, + 0xf10c2, + 0x191f89, + 0x45c88, + 0x19e10b, + 0xcb446, + 0xd408b, + 0x13b00b, + 0xdf54a, + 0xe1145, + 0xe9250, + 0xeba46, + 0x52286, + 0x175305, + 0x114587, + 0xd6fc8, + 0xef9c7, + 0xefc87, + 0x184907, + 0xc10c6, + 0x1ab8ca, + 0x9fc8a, + 0x13686, + 0xad44d, + 0x45948, + 0x111788, + 0x112009, + 0xb9545, + 0x1a214c, + 0xb0acb, + 0x1cab84, + 0x10c009, + 0x10c246, + 0x4a506, + 0x1bff46, + 0x5402, + 0x3e006, + 0xbe70b, + 0x118547, + 0x57c2, + 0xccc85, + 0x63444, + 0x101, + 0x50343, + 0x65a669c6, + 0x973c3, + 0x382, + 0x2b704, + 0xac2, + 0x42244, + 0x882, + 0x4c82, + 0x19c2, + 0x27682, + 0x4042, + 0x8b742, + 0xd42, + 0x8cac2, + 0x36182, + 0x59dc2, + 0x81c2, + 0x4cfc2, + 0x32c43, + 0x942, + 0x1bc2, + 0xc202, + 0x3d42, + 0x642, + 0x30ac2, + 0x4742, + 0x1cc2, + 0xf42, + 0x5c2, + 0x14543, + 0x1742, + 0x2cc2, + 0x48902, + 0x4e082, + 0x3102, + 0x5f82, + 0x17002, + 0x1fc02, + 0x6a42, + 0x140d82, + 0x6bf42, + 0x9082, + 0xa803, + 0x602, + 0x39242, + 0x2f42, + 0x23242, + 0x137c5, + 0x8242, + 0x20082, + 0x3b1c3, + 0x682, + 0xa982, + 0x2e42, + 0x1702, + 0x1782, + 0x8c2, + 0x14302, + 0x5402, + 0x7d45, + 0x66a04142, + 0x66f6d603, + 0x13583, + 0x67204142, + 0x13583, + 0x819c7, + 0x209e83, + 0x2000c2, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x2005c3, + 0x238cc3, + 0x20a803, + 0x20ca43, + 0x216603, + 0x297403, + 0xfba85, + 0x8303, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x211543, + 0x20a803, + 0x20ca43, + 0x6d9c3, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x200181, + 0x211543, + 0x20a803, + 0x24bbc3, + 0x216603, + 0xbef44, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x20d083, + 0x212483, + 0x35c6c3, + 0x2042c3, + 0x2a6b43, + 0x20edc3, + 0x228b03, + 0x224e44, + 0x20a803, + 0x216603, + 0x205b03, + 0x345344, + 0x25cc83, + 0x25843, + 0x2287c3, + 0x32b808, + 0x27d8c4, + 0x20020a, + 0x31fa06, + 0x124804, + 0x38ad87, + 0x22090a, + 0x223989, + 0x3b2c87, + 0x3b588a, + 0x248343, + 0x3ac10b, + 0x3c28c9, + 0x2d3185, + 0x3ae6c7, + 0xc302, + 0x22c0c3, + 0x3c3187, + 0x26a3c5, + 0x2c7249, + 0x232c43, + 0x2bd546, + 0x2c5d83, + 0xcfe03, + 0x115f06, + 0x13f146, + 0xb847, + 0x21e686, + 0x2276c5, + 0x3de0c7, + 0x312847, + 0x69e28b03, + 0x350e47, + 0x3c0043, + 0x20a405, + 0x224e44, + 0x26f848, + 0x37a38c, + 0x2b2045, + 0x2a6746, + 0x3c3047, + 0x3a9ac7, + 0x243a87, + 0x24fc48, + 0x314f4f, + 0x223bc5, + 0x23e587, + 0x205147, + 0x2a850a, + 0x2ec6c9, + 0x31e445, + 0x320fca, + 0xbc7c6, + 0xb9a07, + 0x2c5e05, + 0x2ed104, + 0x3c0146, + 0xdd246, + 0x381d07, + 0x2f0fc7, + 0x369748, + 0x2188c5, + 0x26a2c6, + 0x25788, + 0x2eaf85, + 0xeb146, + 0x2311c5, + 0x28b084, + 0x306907, + 0x238fca, + 0x336408, + 0x36a346, + 0x38cc3, + 0x2e2a45, + 0x322406, + 0x3b5186, + 0x375206, + 0x211543, + 0x3a0b07, + 0x2050c5, + 0x20a803, + 0x2df80d, + 0x20ca43, + 0x369848, + 0x20fcc4, + 0x276f45, + 0x2a8406, + 0x394306, + 0x2a9407, + 0x259d07, + 0x28aa85, + 0x216603, + 0x31a207, + 0x316f89, + 0x26e2c9, + 0x2524ca, + 0x2091c2, + 0x20a3c4, + 0x302604, + 0x2ee247, + 0x2ee648, + 0x2f0889, + 0x3c6649, + 0x2f1507, + 0x101f49, + 0x21ee46, + 0xf4a86, + 0x2f61c4, + 0x22c50a, + 0x2fab08, + 0x2fc809, + 0x2fcdc6, + 0x2b6305, + 0x3362c8, + 0x2cb88a, + 0x24f1c3, + 0x3454c6, + 0x2f1607, + 0x31f785, + 0x3a4245, + 0x240a83, + 0x246484, + 0x228305, + 0x285dc7, + 0x2f90c5, + 0x2f6a46, + 0x11ba45, + 0x359a43, + 0x3d26c9, + 0x276d0c, + 0x2bb5cc, + 0x39e908, + 0x2a98c7, + 0x3085c8, + 0x108c07, + 0x30944a, + 0x309b0b, + 0x3c2a08, + 0x394408, + 0x3db806, + 0x27d485, + 0x33954a, + 0x36d645, + 0x219f82, + 0x2c9ac7, + 0x24d686, + 0x377b45, + 0x30adc9, + 0x27ae85, + 0x295b05, + 0x2f8249, + 0x322346, + 0x329788, + 0x267dc3, + 0x21e7c6, + 0x275506, + 0x318085, + 0x318089, + 0x2bc409, + 0x27d207, + 0x11abc4, + 0x31abc7, + 0x3c6549, + 0x220b05, + 0x37ec8, + 0x342dc5, + 0x28e1c5, + 0x383dc9, + 0x202542, + 0x3d2c04, + 0x201e82, + 0x201742, + 0x2e5285, + 0x324588, + 0x2b9485, + 0x2c8c83, + 0x2c8c85, + 0x2d6f43, + 0x2071c2, + 0x331d04, + 0x26e683, + 0x200a82, + 0x3b8944, + 0x311943, + 0x212842, + 0x2b9503, + 0x213604, + 0x2fcf43, + 0x254ec4, + 0x204e82, + 0x216003, + 0x219c83, + 0x202602, + 0x293042, + 0x2bc249, + 0x20fa02, + 0x28a304, + 0x20d542, + 0x336144, + 0x21ee04, + 0x252b44, + 0x205402, + 0x23b4c2, + 0x387e43, + 0x298cc3, + 0x2614c4, + 0x28dcc4, + 0x2d0984, + 0x2f1784, + 0x31ad43, + 0x300b03, + 0x2bc744, + 0x31d9c4, + 0x31db06, + 0x20b582, + 0xc302, + 0x3ef83, + 0x20c302, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x2000c2, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x205e03, + 0x228b03, + 0x224e44, + 0x2bc504, + 0x217b84, + 0x20a803, + 0x216603, + 0x216103, + 0x2f8a84, + 0x32ce03, + 0x2aad03, + 0x37a944, + 0x342bc6, + 0x20e5c3, + 0x12eb85, + 0x176c87, + 0x2e4003, + 0x6b644548, + 0x2420c3, + 0x2b4103, + 0x20a443, + 0x238cc3, + 0x3afd05, + 0x1ae683, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x208243, + 0x22dcc3, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x214543, + 0x20a803, + 0x27f984, + 0x6d9c3, + 0x216603, + 0x2ba0c4, + 0x12eb85, + 0x2c2ac5, + 0x176c87, + 0x20c302, + 0x201d02, 0x200382, - 0x202642, - 0x13c3, + 0x205642, + 0xca43, 0x2003c2, - 0x3304, - 0x22d7c3, - 0x236204, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x205184, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x202003, - 0x241844, - 0xa14c8, - 0x22d7c3, - 0x2013c3, - 0x1083, - 0x14d5c4, - 0x24ec04, - 0xa14c8, - 0x22d7c3, - 0x251184, - 0x222884, - 0x2013c3, - 0x201642, - 0x6df83, - 0x23cf83, - 0x25b583, - 0x3d804, - 0x3da885, - 0x21be02, - 0x3094c3, - 0x131949, - 0xdff06, - 0x109548, + 0x1244, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x217b84, + 0x20a803, + 0xca43, + 0x216603, + 0x20c603, + 0x242244, + 0x9fe08, + 0x22c0c3, + 0x20ca43, + 0x8303, + 0x123ec4, + 0x249f84, + 0x9fe08, + 0x22c0c3, + 0x24b304, + 0x224e44, + 0x20ca43, + 0x201e02, + 0x6d9c3, + 0x216603, + 0x236bc3, + 0x46484, + 0x204185, + 0x219f82, + 0x2be683, + 0x2b49, + 0xddb86, + 0x142ec8, 0x2000c2, - 0xa14c8, - 0x202782, - 0x233743, - 0x220583, + 0x9fe08, + 0x20c302, + 0x232c43, + 0x228b03, 0x2005c2, - 0x13c3, - 0x23cf83, - 0x79c2, + 0xca43, + 0x216603, + 0x5942, 0x82, + 0xc2, + 0x1b5a47, + 0x13dc09, + 0x7be83, + 0x9fe08, + 0x27643, + 0x6ef26287, + 0x2c0c3, + 0x6048, + 0x32c43, + 0x28b03, + 0x3a086, + 0x14543, + 0x96448, + 0xc53c8, + 0x79046, + 0x11543, + 0xce788, + 0xb7e03, + 0x6f0e23c6, + 0xea185, + 0x32e47, + 0xa803, + 0x21803, + 0x16603, + 0xb142, + 0x17d48a, + 0x4e03, + 0xe5343, + 0xfe804, + 0x114d4b, + 0x115308, + 0x91482, + 0x1451207, + 0x153efc7, + 0x14c8d48, + 0x151d403, + 0x10044b, + 0x8582, + 0x12ea07, + 0x10cbc4, 0x2000c2, - 0x1b4387, - 0x135b49, - 0x7c303, - 0xa14c8, - 0x25a03, - 0x6c356e87, - 0x2d7c3, - 0x1c0708, - 0x233743, - 0x220583, - 0x3d346, - 0x219e43, - 0x95988, - 0xc4108, - 0x11f086, - 0x205e03, - 0xcf188, - 0xedf43, - 0x6c4e3d46, - 0xea9c5, - 0x33947, - 0x6b43, - 0x4e283, - 0x3cf83, - 0x2102, - 0x19c44a, - 0x4cc3, - 0x18c203, - 0x300204, - 0x11848b, - 0x118a48, - 0x91a82, - 0x1457987, - 0x1530e07, - 0x14c8188, - 0x151e703, - 0x1289cb, - 0x12d947, - 0x6a04, - 0x2000c2, - 0x202782, - 0x236204, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x22a243, - 0x206b43, - 0x23cf83, - 0x21f4c3, - 0x202003, - 0x2fe03, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x1083, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x22a243, - 0x206b43, - 0x23cf83, - 0x2195c2, + 0x20c302, + 0x235604, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x238cc3, + 0x20a803, + 0x216603, + 0x2ba0c3, + 0x20c603, + 0x2f783, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x602, + 0x8303, + 0x28b03, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x238cc3, + 0x20a803, + 0x216603, + 0x20ff42, 0x2000c1, 0x2000c2, 0x200201, - 0x339742, - 0xa14c8, - 0x21c745, + 0x336f42, + 0x9fe08, + 0x21c105, 0x200101, - 0x2d7c3, - 0x30944, - 0x200f01, + 0x2c0c3, + 0x2fd84, + 0x2015c1, 0x200501, - 0x202401, - 0x24a882, - 0x387184, - 0x24a883, + 0x2014c1, + 0x244202, + 0x3874c4, + 0x244203, 0x200041, 0x200801, 0x200181, 0x200701, - 0x37e6c7, - 0x31d9cf, - 0x319886, + 0x2f6b87, + 0x380f4f, + 0x3cac46, 0x2004c1, - 0x34d606, - 0x200c01, + 0x323f06, + 0x200bc1, 0x200581, - 0x3d8b8e, + 0x3d878e, 0x2003c1, - 0x23cf83, - 0x201001, - 0x2e4d05, - 0x202102, - 0x239605, + 0x216603, + 0x200a81, + 0x2e3285, + 0x20b142, + 0x240985, 0x200401, 0x200741, 0x2007c1, - 0x21be02, + 0x219f82, 0x200081, - 0x201ec1, - 0x203301, - 0x201081, - 0x20a781, - 0x54389, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x214703, - 0x22d7c3, - 0x220583, - 0x919c8, - 0x205e03, - 0x206b43, - 0x4e703, - 0x23cf83, - 0x14ee5c8, - 0x140fc8, - 0x12dac5, - 0xa14c8, - 0x13c3, - 0x12dac5, - 0x43fc4, - 0x3c2c8, - 0x47984, - 0x54389, - 0x14ee5ca, - 0xa14c8, - 0x6df83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x206b43, - 0x23cf83, - 0x20a683, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x2dd2c4, - 0x23cf83, - 0x3451c5, - 0x31f384, - 0x22d7c3, - 0x206b43, - 0x23cf83, - 0x2003, - 0xa7d8a, - 0xf3e84, - 0x122c86, - 0x202782, - 0x22d7c3, - 0x230ec9, - 0x233743, - 0x2ab989, - 0x220583, - 0x205e03, - 0x206b43, - 0x6bfc4, - 0x13c3, - 0x23cf83, - 0x2f7bc8, - 0x2319c7, - 0x3da885, - 0x1d29c8, - 0x1b4387, - 0xf02ca, - 0x6f54b, - 0x14d847, - 0x3e648, - 0x1a050a, - 0x11808, - 0x135b49, - 0x26847, - 0x374c7, - 0x14c8, - 0x1c0708, - 0x4028f, - 0x19a45, - 0x18b307, - 0x3d346, - 0x4e1c7, - 0x122946, - 0x95988, - 0x9e786, - 0x128f07, - 0x12ea49, - 0x10ec7, - 0xb2f09, - 0xbb909, - 0xc14c6, - 0xc4108, - 0xc2c45, - 0x7a30a, - 0xcf188, - 0xedf43, - 0xdaa88, - 0x33947, - 0x172945, - 0x5f550, - 0x4e283, - 0x6df83, - 0x128d87, - 0x22d85, - 0xf19c8, - 0x68885, - 0x18c203, - 0x7048, - 0xc0246, - 0x17c949, - 0xad447, - 0x131c0b, - 0x6d144, - 0x10e984, - 0x11848b, - 0x118a48, - 0x119647, - 0x12dac5, - 0x22d7c3, - 0x233743, - 0x228843, - 0x23cf83, - 0x23de43, - 0x220583, - 0x6df83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x8864b, + 0x205841, + 0x201241, + 0x2018c1, + 0x204981, + 0x4e9c9, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x216e03, + 0x22c0c3, + 0x228b03, + 0x913c8, + 0x211543, + 0x20a803, + 0x70e03, + 0x216603, + 0x14ecd48, + 0x8148, + 0x12eb85, + 0x9fe08, + 0xca43, + 0x12eb85, + 0x1da144, + 0x116c8, + 0x42744, + 0xc9345, + 0x4e9c9, + 0x14ecd4a, + 0x9fe08, + 0x6d9c3, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x225843, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x2db1c4, + 0x216603, + 0x25cf45, + 0x27ac84, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x206a42, + 0x20a803, + 0x216603, + 0xc603, + 0xa924a, + 0x119b84, + 0x121d46, + 0x248343, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x20a803, + 0x216603, + 0x20c302, + 0x22c0c3, + 0x230309, + 0x232c43, + 0x2ac809, + 0x228b03, + 0x211543, + 0x20a803, + 0x189a44, + 0xca43, + 0x216603, + 0x2f5fc8, + 0x23ad87, + 0x204185, + 0x1d1548, + 0x1b5a47, + 0xee8ca, + 0x6fe0b, + 0x124147, + 0x3cd48, + 0x1198a, + 0x1a348, + 0x13dc09, + 0x281c7, + 0x106707, + 0x140cc8, + 0x6048, + 0x3e84f, + 0x17c45, + 0x16687, + 0x3a086, + 0x3fc07, + 0x11e586, + 0x96448, + 0x9f546, + 0x129587, + 0x143489, + 0x1a4ec7, + 0x9be49, + 0xba9c9, + 0xc2846, + 0xc53c8, + 0xc3a05, + 0x7c70a, + 0xce788, + 0xb7e03, + 0xd7348, + 0x32e47, + 0x13e8c5, + 0x64910, + 0x21803, + 0x6d9c3, + 0x129407, + 0x231c5, + 0xeff88, + 0x65305, + 0xe5343, + 0x3308, + 0xb446, + 0x92289, + 0xaebc7, + 0x2e0b, + 0x6c1c4, + 0x10b8c4, + 0x114d4b, + 0x115308, + 0x115e07, + 0x12eb85, + 0x22c0c3, + 0x232c43, + 0x212483, + 0x216603, + 0x23bf03, + 0x228b03, + 0x6d9c3, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x1988cb, 0x2000c2, - 0x202782, - 0x23cf83, - 0xa14c8, - 0x2782, + 0x20c302, + 0x216603, + 0x9fe08, + 0x133d89, + 0xc302, 0x2000c2, - 0x202782, + 0x20c302, 0x200382, 0x2005c2, - 0x205e02, - 0x206b43, - 0x132f46, + 0x206702, + 0x20a803, + 0x133a46, 0x2003c2, - 0x3d804, + 0x46484, 0x2000c2, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x233743, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x232c43, 0x200382, - 0x220583, - 0x219e43, - 0x205e03, - 0x205184, - 0x206b43, - 0x212203, - 0x13c3, - 0x23cf83, - 0x300204, - 0x207b83, - 0x220583, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x2013c3, - 0x23cf83, - 0x3bcc87, - 0x22d7c3, - 0x27c507, - 0x366486, - 0x201f83, - 0x219d03, - 0x220583, - 0x209a03, - 0x222884, - 0x3975c4, - 0x2df1c6, - 0x201d43, - 0x206b43, - 0x23cf83, - 0x3451c5, - 0x309e84, - 0x3a13c3, - 0x2c7183, - 0x2c9307, - 0x2c6985, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x52507, - 0x1667c7, - 0x1a2a05, - 0x20c882, - 0x24a0c3, - 0x20ee03, - 0x24ce83, - 0x7622d7c3, - 0x206742, - 0x233743, - 0x204183, - 0x220583, - 0x222884, - 0x37fa83, - 0x223783, - 0x205e03, - 0x205184, - 0x76602a42, - 0x206b43, - 0x23cf83, - 0x204f03, - 0x21c4c3, - 0x212bc3, - 0x2195c2, - 0x207b83, - 0xa14c8, - 0x220583, - 0x1083, - 0x21e744, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x236204, - 0x233743, - 0x220583, - 0x222884, - 0x219e43, - 0x3b7d44, - 0x3216c4, - 0x2dc3c6, - 0x205184, - 0x206b43, - 0x23cf83, - 0x213c43, - 0x251646, - 0x3540b, - 0x29f46, - 0xebe8a, - 0x11c10a, - 0xa14c8, - 0x225344, - 0x77a2d7c3, - 0x329384, - 0x233743, - 0x2aea44, - 0x220583, - 0x2067c3, - 0x205e03, - 0x206b43, - 0x6df83, - 0x23cf83, - 0x4b283, - 0x3487cb, - 0x3c94ca, - 0x3db44c, - 0xe4148, + 0x228b03, + 0x214543, + 0x211543, + 0x217b84, + 0x20a803, + 0x213dc3, + 0xca43, + 0x216603, + 0x2fe804, + 0x205b03, + 0x228b03, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x20ca43, + 0x216603, + 0x3b8207, + 0x22c0c3, + 0x27c087, + 0x35f6c6, + 0x216b03, + 0x214403, + 0x228b03, + 0x204f43, + 0x224e44, + 0x300bc4, + 0x3187c6, + 0x218f83, + 0x20a803, + 0x216603, + 0x25cf45, + 0x34f1c4, + 0x326a03, + 0x276683, + 0x2c9ac7, + 0x20f805, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x211543, + 0x20a803, + 0x216603, + 0x14803, + 0x7970270c, + 0x50e87, + 0xbe846, + 0x114587, + 0x8f6c5, + 0x20be02, + 0x245a83, + 0x208b83, + 0x248343, + 0x7a22c0c3, + 0x207902, + 0x232c43, + 0x2020c3, + 0x228b03, + 0x224e44, + 0x201143, + 0x223bc3, + 0x211543, + 0x217b84, + 0x7a612b02, + 0x20a803, + 0x216603, + 0x21d0c3, + 0x22ce03, + 0x20a883, + 0x20ff42, + 0x205b03, + 0x9fe08, + 0x228b03, + 0x8303, + 0x322c44, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x235604, + 0x232c43, + 0x228b03, + 0x224e44, + 0x214543, + 0x246b84, + 0x303f84, + 0x2d9bc6, + 0x217b84, + 0x20a803, + 0x216603, + 0x216103, + 0x24d686, + 0x3494b, + 0x39346, + 0x396ca, + 0x11960a, + 0x9fe08, + 0x225744, + 0x7ba2c0c3, + 0x3db044, + 0x232c43, + 0x26e144, + 0x228b03, + 0x220383, + 0x211543, + 0x20a803, + 0x6d9c3, + 0x216603, + 0x47203, + 0x34b00b, + 0x3c840a, + 0x3dc60c, + 0xe27c8, 0x2000c2, - 0x202782, + 0x20c302, 0x200382, - 0x22e1c5, - 0x222884, - 0x2024c2, - 0x205e03, - 0x3216c4, - 0x202642, + 0x22cd85, + 0x224e44, + 0x206a42, + 0x211543, + 0x303f84, + 0x205642, 0x2003c2, - 0x202002, - 0x2195c2, - 0x4ce83, - 0x35d82, - 0x2c1f89, - 0x33f688, - 0x2294c9, - 0x21f009, - 0x2b718a, - 0x32324a, - 0x20a602, - 0x2d5e42, - 0x2782, - 0x22d7c3, - 0x22bdc2, - 0x240186, - 0x376cc2, - 0x203742, - 0x26f8ce, - 0x213b8e, - 0x281287, - 0x212ac7, - 0x251bc2, - 0x233743, - 0x220583, - 0x2191c2, + 0x209482, + 0x20ff42, + 0x48343, + 0x9382, + 0x2c4009, + 0x364448, + 0x228989, + 0x208649, + 0x2181ca, + 0x22170a, + 0x203cc2, + 0x28cac2, + 0xc302, + 0x22c0c3, + 0x22ae02, + 0x23e746, + 0x378f82, + 0x201682, + 0x27018e, + 0x21604e, + 0x27fc47, + 0x20a787, + 0x24b5c2, + 0x232c43, + 0x228b03, + 0x20d602, 0x2005c2, - 0x19c83, - 0x23640f, - 0x237542, - 0x355f47, - 0x2b5707, - 0x2c8c47, - 0x2d164c, - 0x2d36cc, - 0x21e404, - 0x25ea0a, - 0x213ac2, - 0x253a42, - 0x2bd1c4, + 0x14383, + 0x23580f, + 0x23ea82, + 0x366f87, + 0x2b1bc7, + 0x354207, + 0x2b590c, + 0x2e09cc, + 0x3d0384, + 0x39b8ca, + 0x211902, + 0x24e082, + 0x2bce04, 0x200702, - 0x2af602, - 0x2d3904, - 0x212302, - 0x200b42, - 0x14903, - 0x29e807, - 0x23f2c5, - 0x20f1c2, - 0x24e144, - 0x201582, - 0x2e3ec8, - 0x206b43, - 0x3754c8, - 0x204082, - 0x21e5c5, - 0x394b06, - 0x23cf83, - 0x206a82, - 0x2f2707, - 0x2102, - 0x3a46c5, - 0x21fe85, - 0x213f82, - 0x202c02, - 0x204d4a, - 0x28320a, - 0x2801c2, - 0x29ce84, - 0x201202, - 0x20bd08, - 0x20a742, - 0x304d48, - 0x314187, - 0x315089, - 0x21ff02, - 0x31a585, - 0x36a1c5, - 0x21a2cb, - 0x2df74c, - 0x22b8c8, - 0x32d788, - 0x22c202, - 0x2a8002, + 0x2c4fc2, + 0x2e0c04, + 0x213ec2, + 0x203102, + 0xe403, + 0x29f5c7, + 0x238685, + 0x217002, + 0x23fb84, + 0x340d82, + 0x2e2548, + 0x20a803, + 0x377ec8, + 0x201fc2, + 0x3d0545, + 0x394d46, + 0x216603, + 0x208242, + 0x2f0ac7, + 0xb142, + 0x212ec5, + 0x301185, + 0x216442, + 0x2085c2, + 0x21cf0a, + 0x28a90a, + 0x287582, + 0x2a0cc4, + 0x205c42, + 0x20a288, + 0x205782, + 0x356708, + 0xf01, + 0x30ef47, + 0x310a49, + 0x212f42, + 0x316805, + 0x3b0205, + 0x21898b, + 0x318d4c, + 0x22a908, + 0x32e848, + 0x20b582, + 0x2a94c2, 0x2000c2, - 0xa14c8, - 0x202782, - 0x22d7c3, + 0x9fe08, + 0x20c302, + 0x22c0c3, 0x200382, - 0x202642, - 0x13c3, + 0x205642, + 0xca43, 0x2003c2, - 0x23cf83, - 0x202002, + 0x216603, + 0x209482, 0x2000c2, - 0x12dac5, - 0x78e02782, - 0x79620583, - 0x214903, - 0x2024c2, - 0x206b43, - 0x379083, - 0x79a3cf83, - 0x2ef083, - 0x283dc6, - 0x1602003, - 0x12dac5, - 0x132e0b, - 0xa14c8, - 0x793caf88, - 0x60ac7, - 0x6d807, - 0x45585, - 0xaafcd, - 0x3d142, - 0x119042, - 0xa8a0a, - 0x83047, - 0x256c4, - 0x25703, - 0x1b4904, - 0x7a205342, - 0x7a600b02, - 0x7aa02442, - 0x7ae026c2, - 0x7b20d242, - 0x7b605cc2, - 0x14c47, - 0x7ba02782, - 0x7be2eec2, - 0x7c21ed42, - 0x7c602942, - 0x213b83, - 0x16f44, - 0x2399c3, - 0x7ca0dd82, - 0x5d348, - 0x7ce05282, - 0x71d87, - 0x7d200042, - 0x7d6012c2, - 0x7da00182, - 0x7de067c2, - 0x7e205e42, - 0x7e6005c2, - 0xd8605, - 0x251e03, - 0x39ffc4, - 0x7ea00702, - 0x7ee03942, - 0x7f206ac2, - 0x7af0b, - 0x7f601442, - 0x7fe4ab82, - 0x802024c2, - 0x80605e02, - 0x80a02dc2, - 0x80e00c02, - 0x81200e82, - 0x8166cec2, - 0x81a02a42, - 0x81e09a42, - 0x82202642, - 0x82616202, - 0x82a6ef42, - 0x82e09b42, - 0xb2bc4, - 0x217a43, - 0x8320a302, - 0x836137c2, - 0x83a11b82, - 0x83e006c2, - 0x842003c2, - 0x84601002, - 0x887c7, - 0x84a13c42, - 0x84e04482, - 0x85202002, - 0x85600ec2, - 0x1aed4c, - 0x85a43982, - 0x85e28202, - 0x86203082, - 0x86606842, - 0x86a0a342, - 0x86e76c02, - 0x87205302, - 0x8760adc2, - 0x87a77742, - 0x87e77c82, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x17343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x7fb7fa83, - 0x217343, - 0x360004, - 0x2293c6, - 0x2fe843, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x308b49, - 0x235d82, - 0x3d3c43, - 0x2bbc03, - 0x202ac5, - 0x204183, - 0x37fa83, - 0x217343, - 0x2a6343, - 0x243283, - 0x245b89, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x37fa83, - 0x217343, - 0x235d82, - 0x235d82, - 0x37fa83, - 0x217343, - 0x8862d7c3, - 0x233743, - 0x21f243, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0xa14c8, - 0x202782, - 0x22d7c3, - 0x206b43, - 0x23cf83, - 0x22d7c3, - 0x233743, - 0x220583, - 0x205e03, - 0x206b43, - 0x13c3, - 0x23cf83, - 0x24ec04, - 0x202782, - 0x22d7c3, - 0x309703, - 0x233743, - 0x251184, - 0x228843, - 0x220583, - 0x222884, - 0x219e43, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x25b583, - 0x3da885, - 0x243283, - 0x207b83, - 0x13c3, - 0x202782, - 0x22d7c3, - 0x37fa83, - 0x206b43, - 0x23cf83, + 0x12eb85, + 0x7ce0c302, + 0x7d628b03, + 0x20e403, + 0x206a42, + 0x20a803, + 0x3559c3, + 0x7da16603, + 0x2ed343, + 0x281ac6, + 0x160c603, + 0x12eb85, + 0x13390b, + 0x9fe08, + 0x7d27d6c8, + 0x7e407, + 0x6d247, + 0x175305, + 0x2a20d, + 0x39e82, + 0x115902, + 0xaa74a, + 0x8a747, + 0x27304, + 0x27343, + 0x1bffc4, + 0x7e204ec2, + 0x7e600ac2, + 0x7ea02282, + 0x7ee03342, + 0x7f209bc2, + 0x7f604042, + 0x176c87, + 0x7fa0c302, + 0x7fe2dac2, + 0x80221442, + 0x806081c2, + 0x216043, + 0x12704, + 0x236cc3, + 0x80a0c782, + 0x59648, + 0x80e076c2, + 0x4bc07, + 0x81200042, + 0x81600d82, + 0x81a00182, + 0x81e03dc2, + 0x82200f42, + 0x826005c2, + 0xd30c5, + 0x215183, + 0x36c284, + 0x82a00702, + 0x82e01882, + 0x83203c42, + 0x86ccb, + 0x83600c42, + 0x83e44502, + 0x84206a42, + 0x84606702, + 0x84a1d902, + 0x84e00bc2, + 0x85205a02, + 0x8566bf42, + 0x85a12b02, + 0x85e04f82, + 0x86205642, + 0x86636002, + 0x86a6f802, + 0x86e28c42, + 0x194584, + 0x217903, + 0x87200ec2, + 0x8760fc42, + 0x87a0ad82, + 0x87e006c2, + 0x882003c2, + 0x88600a82, + 0x198a47, + 0x88a16102, + 0x88e03d82, + 0x89209482, + 0x89616002, + 0x1a214c, + 0x89a47c82, + 0x89e22182, + 0x8a202682, + 0x8a617042, + 0x8aa00f02, + 0x8ae18342, + 0x8b205842, + 0x8b60b902, + 0x8ba75882, + 0x8be369c2, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x17203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x83a01143, + 0x217203, + 0x3afd84, + 0x228886, + 0x2fd643, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x2bdd09, + 0x209382, + 0x39c403, + 0x2bacc3, + 0x36aa05, + 0x2020c3, + 0x201143, + 0x217203, + 0x28f543, + 0x221a43, + 0x34d8c9, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x201143, + 0x217203, + 0x209382, + 0x209382, + 0x201143, + 0x217203, + 0x8c62c0c3, + 0x232c43, + 0x208883, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x9fe08, + 0x20c302, + 0x22c0c3, + 0x20a803, + 0x216603, + 0xbdb82, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x8d0ebe82, + 0x211543, + 0x20a803, + 0xca43, + 0x216603, + 0x15c1, + 0x249f84, + 0x20c302, + 0x22c0c3, + 0x200983, + 0x232c43, + 0x24b304, + 0x212483, + 0x228b03, + 0x224e44, + 0x214543, + 0x211543, + 0x20a803, + 0x216603, + 0x236bc3, + 0x204185, + 0x221a43, + 0x205b03, + 0xca43, + 0x20c302, + 0x22c0c3, + 0x201143, + 0x20a803, + 0x216603, 0x2000c2, - 0x24ce83, - 0xa14c8, - 0x22d7c3, - 0x233743, - 0x220583, - 0x22fac6, - 0x222884, - 0x219e43, - 0x205184, - 0x206b43, - 0x23cf83, - 0x213c43, - 0x22d7c3, - 0x233743, - 0x206b43, - 0x23cf83, - 0x2ebc2, - 0x2b42, - 0x144de07, - 0x492c7, - 0x22d7c3, - 0x29f46, - 0x233743, - 0x220583, - 0xe7e06, - 0x206b43, - 0x23cf83, - 0x329fc8, - 0x32d5c9, - 0x341f49, - 0x34a9c8, - 0x396bc8, - 0x396bc9, - 0x323aca, - 0x35d44a, - 0x391f8a, - 0x39858a, - 0x3c94ca, - 0x3d680b, - 0x24704d, - 0x3676cf, - 0x272190, - 0x35eacd, - 0x37d58c, - 0x3982cb, - 0x6da08, - 0x147d48, - 0xb1005, - 0x1489947, - 0xcd9c5, + 0x248343, + 0x9fe08, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x22f446, + 0x224e44, + 0x214543, + 0x217b84, + 0x20a803, + 0x216603, + 0x216103, + 0x22c0c3, + 0x232c43, + 0x20a803, + 0x216603, + 0x2d7c2, + 0x1942, + 0x1458787, + 0x141347, + 0x22c0c3, + 0x39346, + 0x232c43, + 0x228b03, + 0xe7d46, + 0x20a803, + 0x216603, + 0x32b688, + 0x32e689, + 0x341509, + 0x34cd48, + 0x396f48, + 0x396f49, + 0x32370a, + 0x35f9ca, + 0x39278a, + 0x39914a, + 0x3c840a, + 0x3d5fcb, + 0x23d20d, + 0x367bcf, + 0x25b050, + 0x36144d, + 0x37e04c, + 0x398e8b, + 0x6d448, + 0xebcc8, + 0x92e85, + 0x1488147, + 0xccc85, 0x2000c2, - 0x2c67c5, - 0x200b03, - 0x8c202782, - 0x233743, - 0x220583, - 0x38d5c7, - 0x20bec3, - 0x205e03, - 0x206b43, - 0x251ac3, - 0x20c243, - 0x2013c3, - 0x23cf83, - 0x259b06, - 0x21be02, - 0x207b83, - 0xa14c8, + 0x20f645, + 0x20e3c3, + 0x9060c302, + 0x232c43, + 0x228b03, + 0x3d4007, + 0x20a443, + 0x211543, + 0x20a803, + 0x24bbc3, + 0x213dc3, + 0x209a83, + 0x20ca43, + 0x216603, + 0x253c46, + 0x219f82, + 0x205b03, + 0x9fe08, 0x2000c2, - 0x24ce83, - 0x202782, - 0x22d7c3, - 0x233743, - 0x220583, - 0x222884, - 0x205e03, - 0x206b43, - 0x23cf83, - 0x202003, - 0x492c7, - 0x131944, - 0x153fd06, + 0x248343, + 0x20c302, + 0x22c0c3, + 0x232c43, + 0x228b03, + 0x224e44, + 0x211543, + 0x20a803, + 0x216603, + 0x20c603, + 0x141347, + 0x8582, + 0x2b44, + 0x15c87c6, 0x2000c2, - 0x202782, - 0x220583, - 0x205e03, - 0x23cf83, + 0x20c302, + 0x228b03, + 0x211543, + 0x216603, } // children is the list of nodes' children, the parent's wildcard bit and the @@ -9395,568 +9462,585 @@ var children = [...]uint32{ 0x40000000, 0x50000000, 0x60000000, - 0x1824603, - 0x1828609, - 0x182c60a, - 0x185060b, - 0x19ac614, + 0x17f85f8, + 0x17fc5fe, + 0x18005ff, + 0x1824600, + 0x1980609, + 0x1998660, + 0x19ac666, 0x19c466b, - 0x19d8671, - 0x19f0676, - 0x1a1067c, - 0x1a28684, - 0x1a4068a, - 0x1a58690, + 0x19e4671, + 0x19fc679, + 0x1a1467f, + 0x1a2c685, + 0x1a3068b, + 0x1a5868c, 0x1a5c696, - 0x1a84697, - 0x1a886a1, - 0x1aa06a2, - 0x1aa46a8, - 0x1aa86a9, - 0x1ae46aa, - 0x1ae86b9, - 0x61af06ba, - 0x21af86bc, - 0x1b406be, + 0x1a74697, + 0x1a7869d, + 0x1a7c69e, + 0x1ab869f, + 0x1abc6ae, + 0x61ac46af, + 0x21acc6b1, + 0x1b146b3, + 0x1b186c5, + 0x1b3c6c6, + 0x1b406cf, 0x1b446d0, - 0x1b646d1, - 0x1b786d9, - 0x1b7c6de, - 0x1bac6df, - 0x1bc86eb, - 0x1bf06f2, - 0x1c006fc, - 0x1c04700, - 0x1c9c701, - 0x1cb0727, - 0x1cc472c, - 0x1cfc731, - 0x1d0c73f, - 0x1d20743, - 0x1d38748, - 0x1ddc74e, - 0x1fe0777, - 0x1fe47f8, - 0x20507f9, - 0x20bc814, - 0x20d482f, + 0x1b586d1, + 0x1b5c6d6, + 0x1b8c6d7, + 0x1ba86e3, + 0x1bd06ea, + 0x1be06f4, + 0x1be46f8, + 0x1c7c6f9, + 0x1c9071f, + 0x1ca4724, + 0x1cdc729, + 0x1cec737, + 0x1d0073b, + 0x1d18740, + 0x1dbc746, + 0x1fc076f, + 0x1fc47f0, + 0x20307f1, + 0x209c80c, + 0x20b4827, + 0x20c882d, + 0x20cc832, + 0x20d4833, 0x20e8835, 0x20ec83a, - 0x20f483b, - 0x210883d, - 0x210c842, - 0x2128843, - 0x217884a, - 0x217c85e, - 0x2218085f, - 0x219c860, - 0x21a0867, - 0x21a4868, - 0x21c8869, - 0x2208872, - 0x220c882, - 0x62210883, - 0x2228884, - 0x224888a, - 0x2254892, - 0x2264895, - 0x2318899, - 0x231c8c6, - 0x2232c8c7, - 0x223308cb, - 0x223388cc, - 0x23948ce, - 0x23988e5, - 0x28848e6, - 0x2292ca21, - 0x22930a4b, - 0x22934a4c, - 0x22940a4d, - 0x22944a50, - 0x22950a51, - 0x22954a54, - 0x22958a55, - 0x2295ca56, + 0x210883b, + 0x2158842, + 0x215c856, + 0x22160857, + 0x217c858, + 0x218085f, + 0x2184860, + 0x21a8861, + 0x21e886a, + 0x21ec87a, + 0x621f087b, + 0x220887c, + 0x222c882, + 0x223888b, + 0x224888e, + 0x22fc892, + 0x23008bf, + 0x223108c0, + 0x223148c4, + 0x2231c8c5, + 0x23748c7, + 0x23788dd, + 0x288c8de, + 0x2890a23, + 0x22938a24, + 0x2293ca4e, + 0x22940a4f, + 0x2294ca50, + 0x22950a53, + 0x2295ca54, 0x22960a57, 0x22964a58, - 0x22970a59, - 0x22974a5c, - 0x22980a5d, - 0x22984a60, - 0x22988a61, - 0x2298ca62, - 0x22998a63, - 0x2299ca66, - 0x229a8a67, - 0x229aca6a, - 0x229b0a6b, - 0x229b4a6c, - 0x29b8a6d, + 0x22968a59, + 0x2296ca5a, + 0x22970a5b, + 0x2297ca5c, + 0x22980a5f, + 0x2298ca60, + 0x22990a63, + 0x22994a64, + 0x22998a65, + 0x229a4a66, + 0x229a8a69, + 0x229b4a6a, + 0x229b8a6d, 0x229bca6e, - 0x229c8a6f, - 0x229cca72, - 0x29d4a73, - 0x2a18a75, - 0x22a38a86, - 0x22a3ca8e, - 0x22a40a8f, - 0x22a48a90, - 0x22a4ca92, - 0x2a50a93, - 0x22a54a94, + 0x229c0a6f, + 0x29c4a70, + 0x229c8a71, + 0x229d4a72, + 0x229d8a75, + 0x29dca76, + 0x29e4a77, + 0x629f0a79, + 0x2a34a7c, + 0x22a54a8d, 0x22a58a95, 0x22a5ca96, - 0x2a64a97, - 0x2a68a99, + 0x22a64a97, + 0x22a68a99, 0x2a6ca9a, - 0x2a88a9b, - 0x2aa0aa2, - 0x2aa4aa8, - 0x2ab4aa9, - 0x2ac0aad, - 0x2af4ab0, - 0x2af8abd, - 0x2b10abe, - 0x22b18ac4, - 0x22b1cac6, - 0x22b24ac7, - 0x2c14ac9, - 0x22c18b05, - 0x2c20b06, - 0x2c24b08, - 0x22c28b09, - 0x2c2cb0a, - 0x2c3cb0b, - 0x2c40b0f, - 0x2c44b10, - 0x2c48b11, - 0x2c60b12, - 0x2c74b18, - 0x2c9cb1d, - 0x2cbcb27, - 0x2cc0b2f, - 0x62cc4b30, - 0x2cf4b31, - 0x2cf8b3d, - 0x22cfcb3e, - 0x2d00b3f, - 0x2d28b40, - 0x2d2cb4a, - 0x2d50b4b, - 0x2d54b54, - 0x2d68b55, - 0x2d6cb5a, - 0x2d70b5b, - 0x2d90b5c, - 0x2dacb64, - 0x2db0b6b, - 0x22db4b6c, - 0x2db8b6d, - 0x2dbcb6e, - 0x2dc0b6f, - 0x2dc8b70, - 0x2ddcb72, - 0x2de0b77, - 0x2de4b78, + 0x22a70a9b, + 0x22a74a9c, + 0x22a78a9d, + 0x22a7ca9e, + 0x2a84a9f, + 0x2a8caa1, + 0x2a90aa3, + 0x2aacaa4, + 0x2ac4aab, + 0x2ac8ab1, + 0x2ad8ab2, + 0x2ae4ab6, + 0x2b18ab9, + 0x2b1cac6, + 0x2b34ac7, + 0x22b3cacd, + 0x22b40acf, + 0x22b48ad0, + 0x2c40ad2, + 0x22c44b10, + 0x2c4cb11, + 0x2c50b13, + 0x22c54b14, + 0x2c58b15, + 0x2c70b16, + 0x2c74b1c, + 0x2c78b1d, + 0x2c7cb1e, + 0x2c94b1f, + 0x2ca8b25, + 0x2cd0b2a, + 0x2cf0b34, + 0x2cf4b3c, + 0x62cf8b3d, + 0x2d2cb3e, + 0x2d30b4b, + 0x22d34b4c, + 0x2d38b4d, + 0x2d60b4e, + 0x2d64b58, + 0x2d88b59, + 0x2d8cb62, + 0x2da0b63, + 0x2da4b68, + 0x2da8b69, + 0x2dc8b6a, + 0x2de4b72, 0x2de8b79, - 0x2e58b7a, - 0x2e5cb96, - 0x2e60b97, - 0x2e80b98, - 0x2e94ba0, - 0x2ea8ba5, - 0x2ec0baa, - 0x2edcbb0, - 0x2ef4bb7, - 0x2ef8bbd, - 0x2f10bbe, - 0x2f2cbc4, - 0x2f30bcb, - 0x2f50bcc, - 0x2f70bd4, - 0x2f8cbdc, - 0x2fecbe3, - 0x3008bfb, - 0x3018c02, - 0x301cc06, - 0x3034c07, - 0x3078c0d, - 0x30f8c1e, - 0x312cc3e, - 0x3130c4b, - 0x313cc4c, - 0x315cc4f, - 0x3160c57, - 0x3184c58, - 0x318cc61, - 0x31c8c63, - 0x3218c72, - 0x321cc86, - 0x3220c87, - 0x32e4c88, - 0x232e8cb9, - 0x232eccba, - 0x32f0cbb, - 0x232f4cbc, - 0x232f8cbd, - 0x232fccbe, - 0x2330ccbf, - 0x23310cc3, - 0x23314cc4, - 0x23318cc5, - 0x2331ccc6, - 0x3334cc7, - 0x3358ccd, - 0x3378cd6, - 0x39e4cde, - 0x39f0e79, - 0x3a10e7c, - 0x3bd0e84, - 0x3ca0ef4, - 0x3d10f28, - 0x3d68f44, - 0x3e50f5a, - 0x3ea8f94, - 0x3ee4faa, - 0x3fe0fb9, - 0x40acff8, - 0x414502b, - 0x41d5051, - 0x4239075, - 0x447108e, - 0x452911c, - 0x45f514a, - 0x464117d, - 0x46c9190, - 0x47051b2, - 0x47551c1, - 0x47cd1d5, - 0x647d11f3, - 0x647d51f4, - 0x647d91f5, - 0x48551f6, - 0x48b1215, - 0x492d22c, - 0x49a524b, - 0x4a25269, - 0x4a91289, - 0x4bbd2a4, - 0x4c152ef, - 0x64c19305, - 0x4cb1306, - 0x4cb532c, - 0x4d3d32d, - 0x4d8934f, - 0x4df1362, - 0x4e9937c, - 0x4f613a6, - 0x4fc93d8, - 0x50dd3f2, - 0x650e1437, - 0x650e5438, - 0x5141439, - 0x519d450, - 0x522d467, - 0x52a948b, - 0x52ed4aa, - 0x53d14bb, - 0x54054f4, - 0x5465501, - 0x54d9519, - 0x5561536, - 0x55a1558, - 0x5611568, - 0x65615584, - 0x563d585, - 0x564158f, - 0x5659590, - 0x5675596, - 0x56b959d, - 0x56c95ae, - 0x56e15b2, - 0x57595b8, - 0x57615d6, - 0x577d5d8, - 0x57915df, - 0x57ad5e4, - 0x57d95eb, - 0x57dd5f6, - 0x57e55f7, - 0x57f95f9, - 0x58195fe, - 0x5829606, - 0x583560a, - 0x587160d, - 0x587961c, - 0x588d61e, - 0x58b1623, - 0x58bd62c, - 0x58c562f, - 0x58e9631, - 0x590d63a, - 0x5925643, - 0x5929649, - 0x593164a, - 0x593564c, - 0x59d164d, - 0x59d5674, - 0x59d9675, - 0x59dd676, - 0x5a01677, - 0x5a25680, - 0x5a41689, - 0x5a55690, - 0x5a69695, - 0x5a7169a, - 0x5a7969c, - 0x5a8169e, - 0x5a996a0, - 0x5aa96a6, - 0x5aad6aa, - 0x5ac96ab, - 0x63596b2, - 0x63918d6, - 0x63bd8e4, - 0x63d98ef, - 0x63f98f6, - 0x64198fe, - 0x645d906, - 0x6465917, - 0x26469919, - 0x2646d91a, - 0x647591b, - 0x663d91d, - 0x2664198f, - 0x26651990, - 0x26659994, - 0x26665996, - 0x6669999, - 0x2667199a, - 0x668199c, - 0x66a99a0, - 0x66dd9aa, - 0x66e19b7, - 0x67199b8, - 0x67399c6, - 0x72919ce, - 0x7295ca4, - 0x7299ca5, - 0x2729dca6, - 0x72a1ca7, - 0x272a5ca8, - 0x72a9ca9, - 0x272b5caa, - 0x72b9cad, - 0x72bdcae, - 0x272c1caf, - 0x72c5cb0, - 0x272cdcb1, - 0x72d1cb3, - 0x72d5cb4, - 0x272e5cb5, - 0x72e9cb9, - 0x72edcba, - 0x72f1cbb, - 0x72f5cbc, - 0x272f9cbd, - 0x72fdcbe, - 0x7301cbf, - 0x7305cc0, - 0x7309cc1, - 0x27311cc2, - 0x7315cc4, - 0x7319cc5, - 0x731dcc6, - 0x27321cc7, - 0x7325cc8, - 0x2732dcc9, - 0x27331ccb, - 0x734dccc, - 0x7365cd3, - 0x27369cd9, - 0x73adcda, - 0x73b1ceb, - 0x73d5cec, - 0x73e1cf5, - 0x73e5cf8, - 0x73e9cf9, - 0x759dcfa, - 0x275a1d67, - 0x275a9d68, - 0x275add6a, - 0x275b1d6b, - 0x75b9d6c, - 0x7695d6e, - 0x276a1da5, - 0x276a5da8, - 0x276a9da9, - 0x276addaa, - 0x76b1dab, - 0x76dddac, - 0x76e1db7, - 0x76e5db8, - 0x7709db9, - 0x7715dc2, - 0x7735dc5, - 0x7739dcd, - 0x7771dce, - 0x7a21ddc, - 0x7adde88, - 0x7ae1eb7, - 0x7ae5eb8, - 0x7af9eb9, - 0x7b2debe, - 0x7b65ecb, - 0x27b69ed9, - 0x7b85eda, - 0x7badee1, - 0x7bb1eeb, - 0x7bd5eec, - 0x7bf1ef5, - 0x7c19efc, - 0x7c29f06, - 0x7c2df0a, - 0x7c31f0b, - 0x7c69f0c, - 0x7c75f1a, - 0x7c9df1d, - 0x7d1df27, - 0x27d21f47, - 0x7d31f48, - 0x7d3df4c, - 0x7d59f4f, - 0x7d79f56, - 0x7d7df5e, - 0x7d91f5f, - 0x7da5f64, - 0x7da9f69, - 0x7dc9f6a, - 0x7e71f72, - 0x7e75f9c, - 0x7e91f9d, - 0x7eb5fa4, - 0x7eb9fad, - 0x7ec1fae, - 0x7ed9fb0, - 0x7ee1fb6, - 0x7ef5fb8, - 0x7f15fbd, - 0x7f25fc5, - 0x7f31fc9, - 0x7f69fcc, - 0x803dfda, - 0x804200f, - 0x8056010, - 0x805e015, - 0x8076017, - 0x807a01d, - 0x808601e, - 0x808a021, - 0x808e022, - 0x80b2023, - 0x80f202c, - 0x80f603c, - 0x811603d, - 0x8166045, - 0x8182059, - 0x818a060, - 0x81e2062, - 0x81e6078, - 0x81ea079, - 0x81ee07a, - 0x823207b, - 0x824208c, - 0x8282090, - 0x82860a0, - 0x82b60a1, - 0x83fe0ad, - 0x84260ff, - 0x8456109, - 0x8476115, - 0x2847e11d, - 0x848611f, - 0x8492121, - 0x85a6124, - 0x85b2169, - 0x85be16c, - 0x85ca16f, - 0x85d6172, - 0x85e2175, - 0x85ee178, - 0x85fa17b, - 0x860617e, - 0x8612181, - 0x861e184, - 0x862a187, - 0x863618a, - 0x864218d, - 0x864a190, - 0x8656192, - 0x8662195, - 0x866e198, - 0x867a19b, - 0x868619e, - 0x86921a1, - 0x869e1a4, - 0x86aa1a7, - 0x86b61aa, - 0x86c21ad, - 0x86ce1b0, - 0x86fa1b3, - 0x87061be, - 0x87121c1, - 0x871e1c4, - 0x872a1c7, - 0x87361ca, - 0x873e1cd, - 0x874a1cf, - 0x87561d2, - 0x87621d5, - 0x876e1d8, - 0x877a1db, - 0x87861de, - 0x87921e1, - 0x879e1e4, - 0x87aa1e7, - 0x87b61ea, - 0x87c21ed, - 0x87ce1f0, - 0x87da1f3, - 0x87e21f6, - 0x87ee1f8, - 0x87fa1fb, - 0x88061fe, - 0x8812201, - 0x881e204, - 0x882a207, - 0x883620a, - 0x884220d, - 0x8846210, + 0x22decb7a, + 0x2df0b7b, + 0x2df4b7c, + 0x2df8b7d, + 0x2e00b7e, + 0x2e14b80, + 0x2e18b85, + 0x2e1cb86, + 0x2e44b87, + 0x2e48b91, + 0x2ebcb92, + 0x2ec0baf, + 0x2ec4bb0, + 0x2ee4bb1, + 0x2ef8bb9, + 0x2f0cbbe, + 0x2f24bc3, + 0x2f40bc9, + 0x2f58bd0, + 0x2f5cbd6, + 0x2f74bd7, + 0x2f90bdd, + 0x2f94be4, + 0x2fb4be5, + 0x2fd4bed, + 0x2ff0bf5, + 0x3054bfc, + 0x3070c15, + 0x3080c1c, + 0x3084c20, + 0x309cc21, + 0x30e0c27, + 0x3160c38, + 0x3190c58, + 0x3194c64, + 0x31a0c65, + 0x31c0c68, + 0x31c4c70, + 0x31e8c71, + 0x31f0c7a, + 0x322cc7c, + 0x327cc8b, + 0x3280c9f, + 0x3284ca0, + 0x3354ca1, + 0x23358cd5, + 0x2335ccd6, + 0x3360cd7, + 0x23364cd8, + 0x23368cd9, + 0x336ccda, + 0x23370cdb, + 0x23380cdc, + 0x23384ce0, + 0x23388ce1, + 0x2338cce2, + 0x23390ce3, + 0x33a8ce4, + 0x33cccea, + 0x33eccf3, + 0x3a58cfb, + 0x3a64e96, + 0x3a84e99, + 0x3c44ea1, + 0x3d14f11, + 0x3d84f45, + 0x3ddcf61, + 0x3ec4f77, + 0x3f1cfb1, + 0x3f58fc7, + 0x4054fd6, + 0x4121015, + 0x41b9048, + 0x424906e, + 0x42ad092, + 0x44e50ab, + 0x459d139, + 0x4669167, + 0x46b519a, + 0x473d1ad, + 0x47791cf, + 0x47c91de, + 0x48411f2, + 0x64845210, + 0x64849211, + 0x6484d212, + 0x48c9213, + 0x4925232, + 0x49a1249, + 0x4a19268, + 0x4a99286, + 0x4b052a6, + 0x4c312c1, + 0x4c8930c, + 0x64c8d322, + 0x4d25323, + 0x4d2d349, + 0x24d3134b, + 0x4db934c, + 0x4e0536e, + 0x4e6d381, + 0x4f1539b, + 0x4fdd3c5, + 0x50453f7, + 0x5159411, + 0x6515d456, + 0x65161457, + 0x51bd458, + 0x521946f, + 0x52a9486, + 0x53254aa, + 0x53694c9, + 0x544d4da, + 0x5481513, + 0x54e1520, + 0x5555538, + 0x55dd555, + 0x561d577, + 0x568d587, + 0x656915a3, + 0x56b95a4, + 0x56bd5ae, + 0x56d55af, + 0x56f15b5, + 0x57355bc, + 0x57455cd, + 0x575d5d1, + 0x57d55d7, + 0x57dd5f5, + 0x57f95f7, + 0x580d5fe, + 0x5829603, + 0x585560a, + 0x5859615, + 0x5861616, + 0x5875618, + 0x589561d, + 0x58a5625, + 0x58b1629, + 0x58ed62c, + 0x58f563b, + 0x590963d, + 0x592d642, + 0x593964b, + 0x594164e, + 0x5965650, + 0x5989659, + 0x59a1662, + 0x59a5668, + 0x59ad669, + 0x59b166b, + 0x5a5166c, + 0x5a55694, + 0x5a59695, + 0x5a5d696, + 0x5a81697, + 0x5aa56a0, + 0x5ac16a9, + 0x5ad56b0, + 0x5ae96b5, + 0x5af16ba, + 0x5af96bc, + 0x5b016be, + 0x5b196c0, + 0x5b296c6, + 0x5b2d6ca, + 0x5b496cb, + 0x63d16d2, + 0x64098f4, + 0x6435902, + 0x645190d, + 0x6471914, + 0x649191c, + 0x64d5924, + 0x64dd935, + 0x264e1937, + 0x264e5938, + 0x64ed939, + 0x66c593b, + 0x266c99b1, + 0x66cd9b2, + 0x266dd9b3, + 0x266e59b7, + 0x266f19b9, + 0x66f59bc, + 0x266fd9bd, + 0x67059bf, + 0x67159c1, + 0x673d9c5, + 0x67799cf, + 0x677d9de, + 0x67b59df, + 0x67d99ed, + 0x73319f6, + 0x7335ccc, + 0x7339ccd, + 0x2733dcce, + 0x7341ccf, + 0x27345cd0, + 0x7349cd1, + 0x27355cd2, + 0x7359cd5, + 0x735dcd6, + 0x27361cd7, + 0x7365cd8, + 0x2736dcd9, + 0x7371cdb, + 0x7375cdc, + 0x27385cdd, + 0x7389ce1, + 0x738dce2, + 0x7391ce3, + 0x7395ce4, + 0x27399ce5, + 0x739dce6, + 0x73a1ce7, + 0x73a5ce8, + 0x73a9ce9, + 0x273b1cea, + 0x73b5cec, + 0x73b9ced, + 0x73bdcee, + 0x273c1cef, + 0x73c5cf0, + 0x273cdcf1, + 0x273d1cf3, + 0x73edcf4, + 0x7405cfb, + 0x27409d01, + 0x744dd02, + 0x7451d13, + 0x7475d14, + 0x7481d1d, + 0x7485d20, + 0x7489d21, + 0x7645d22, + 0x27649d91, + 0x27651d92, + 0x27655d94, + 0x27659d95, + 0x7661d96, + 0x773dd98, + 0x27749dcf, + 0x2774ddd2, + 0x27751dd3, + 0x27755dd4, + 0x7759dd5, + 0x7785dd6, + 0x7789de1, + 0x778dde2, + 0x77b1de3, + 0x77bddec, + 0x77dddef, + 0x77e1df7, + 0x7819df8, + 0x7ac9e06, + 0x7b85eb2, + 0x7b89ee1, + 0x7b8dee2, + 0x7ba1ee3, + 0x7bd5ee8, + 0x7c0def5, + 0x27c11f03, + 0x7c2df04, + 0x7c55f0b, + 0x7c59f15, + 0x7c7df16, + 0x7c99f1f, + 0x7cc1f26, + 0x7cd1f30, + 0x7cd5f34, + 0x7cd9f35, + 0x7d11f36, + 0x7d1df44, + 0x7d45f47, + 0x7dc5f51, + 0x27dc9f71, + 0x7dd9f72, + 0x7de9f76, + 0x7e05f7a, + 0x7e25f81, + 0x7e29f89, + 0x7e3df8a, + 0x7e51f8f, + 0x7e55f94, + 0x7e59f95, + 0x7e5df96, + 0x7e7df97, + 0x7f25f9f, + 0x7f29fc9, + 0x7f45fca, + 0x7f69fd1, + 0x7f6dfda, + 0x7f75fdb, + 0x7f91fdd, + 0x7f99fe4, + 0x7fadfe6, + 0x7fcdfeb, + 0x7fe9ff3, + 0x7ff5ffa, + 0x800dffd, + 0x8046003, + 0x811a011, + 0x811e046, + 0x8132047, + 0x813a04c, + 0x815204e, + 0x8156054, + 0x8162055, + 0x8166058, + 0x816a059, + 0x816e05a, + 0x819205b, + 0x81d2064, + 0x81d6074, + 0x81f6075, + 0x824607d, + 0x826a091, + 0x2826e09a, + 0x827609b, + 0x82ce09d, + 0x82d20b3, + 0x82d60b4, + 0x82da0b5, + 0x831e0b6, + 0x832e0c7, + 0x836e0cb, + 0x83720db, + 0x83a20dc, + 0x84ee0e8, + 0x851613b, + 0x8546145, + 0x8566151, + 0x2856e159, + 0x857615b, + 0x858215d, + 0x8696160, + 0x86a21a5, + 0x86ae1a8, + 0x86ba1ab, + 0x86c61ae, + 0x86d21b1, + 0x86de1b4, + 0x86ea1b7, + 0x86f61ba, + 0x87021bd, + 0x870e1c0, + 0x871a1c3, + 0x87261c6, + 0x87321c9, + 0x873a1cc, + 0x87461ce, + 0x87521d1, + 0x875e1d4, + 0x876a1d7, + 0x87761da, + 0x87821dd, + 0x878e1e0, + 0x879a1e3, + 0x87a61e6, + 0x87b21e9, + 0x87be1ec, + 0x87ea1ef, + 0x87f61fa, + 0x88021fd, + 0x880e200, + 0x881a203, + 0x8826206, + 0x882e209, + 0x883a20b, + 0x884620e, 0x8852211, - 0x886e214, - 0x887221b, - 0x888221c, - 0x889e220, - 0x88e2227, - 0x88e6238, - 0x88fa239, - 0x892e23e, - 0x893e24b, - 0x894624f, - 0x896a251, - 0x898225a, - 0x899a260, - 0x89b2266, - 0x89c626c, - 0x28a0a271, - 0x8a0e282, - 0x8a3a283, - 0x8a4628e, - 0x8a5a291, + 0x885e214, + 0x886a217, + 0x887621a, + 0x888221d, + 0x888e220, + 0x889a223, + 0x88a6226, + 0x88b2229, + 0x88be22c, + 0x88ca22f, + 0x88d2232, + 0x88de234, + 0x88ea237, + 0x88f623a, + 0x890223d, + 0x890e240, + 0x891a243, + 0x8926246, + 0x8932249, + 0x893624c, + 0x894224d, + 0x895e250, + 0x8962257, + 0x8972258, + 0x899625c, + 0x899a265, + 0x89de266, + 0x89e2277, + 0x89f6278, + 0x8a2a27d, + 0x8a3a28a, + 0x8a4228e, + 0x8a66290, + 0x8a7e299, + 0x8a9629f, + 0x8aae2a5, + 0x8ac22ab, + 0x28b0a2b0, + 0x8b0e2c2, + 0x8b3a2c3, + 0x8b4a2ce, + 0x8b5e2d2, } -// max children 563 (capacity 1023) -// max text offset 30521 (capacity 32767) +// max children 580 (capacity 1023) +// max text offset 30618 (capacity 32767) // max text length 36 (capacity 63) -// max hi 8854 (capacity 16383) -// max lo 8849 (capacity 16383) +// max hi 8919 (capacity 16383) +// max lo 8914 (capacity 16383) diff --git a/vendor/golang.org/x/tools/AUTHORS b/vendor/golang.org/x/tools/AUTHORS new file mode 100644 index 0000000000..15167cd746 --- /dev/null +++ b/vendor/golang.org/x/tools/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/vendor/golang.org/x/tools/CONTRIBUTORS b/vendor/golang.org/x/tools/CONTRIBUTORS new file mode 100644 index 0000000000..1c4577e968 --- /dev/null +++ b/vendor/golang.org/x/tools/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/vendor/golang.org/x/tools/LICENSE b/vendor/golang.org/x/tools/LICENSE new file mode 100644 index 0000000000..6a66aea5ea --- /dev/null +++ b/vendor/golang.org/x/tools/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/vendor/golang.org/x/tools/PATENTS b/vendor/golang.org/x/tools/PATENTS new file mode 100644 index 0000000000..733099041f --- /dev/null +++ b/vendor/golang.org/x/tools/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/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go new file mode 100644 index 0000000000..6b7052b892 --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -0,0 +1,627 @@ +// Copyright 2013 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 astutil + +// This file defines utilities for working with source positions. + +import ( + "fmt" + "go/ast" + "go/token" + "sort" +) + +// PathEnclosingInterval returns the node that encloses the source +// interval [start, end), and all its ancestors up to the AST root. +// +// The definition of "enclosing" used by this function considers +// additional whitespace abutting a node to be enclosed by it. +// In this example: +// +// z := x + y // add them +// <-A-> +// <----B-----> +// +// the ast.BinaryExpr(+) node is considered to enclose interval B +// even though its [Pos()..End()) is actually only interval A. +// This behaviour makes user interfaces more tolerant of imperfect +// input. +// +// This function treats tokens as nodes, though they are not included +// in the result. e.g. PathEnclosingInterval("+") returns the +// enclosing ast.BinaryExpr("x + y"). +// +// If start==end, the 1-char interval following start is used instead. +// +// The 'exact' result is true if the interval contains only path[0] +// and perhaps some adjacent whitespace. It is false if the interval +// overlaps multiple children of path[0], or if it contains only +// interior whitespace of path[0]. +// In this example: +// +// z := x + y // add them +// <--C--> <---E--> +// ^ +// D +// +// intervals C, D and E are inexact. C is contained by the +// z-assignment statement, because it spans three of its children (:=, +// x, +). So too is the 1-char interval D, because it contains only +// interior whitespace of the assignment. E is considered interior +// whitespace of the BlockStmt containing the assignment. +// +// Precondition: [start, end) both lie within the same file as root. +// TODO(adonovan): return (nil, false) in this case and remove precond. +// Requires FileSet; see loader.tokenFileContainsPos. +// +// Postcondition: path is never nil; it always contains at least 'root'. +// +func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) { + // fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging + + // Precondition: node.[Pos..End) and adjoining whitespace contain [start, end). + var visit func(node ast.Node) bool + visit = func(node ast.Node) bool { + path = append(path, node) + + nodePos := node.Pos() + nodeEnd := node.End() + + // fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging + + // Intersect [start, end) with interval of node. + if start < nodePos { + start = nodePos + } + if end > nodeEnd { + end = nodeEnd + } + + // Find sole child that contains [start, end). + children := childrenOf(node) + l := len(children) + for i, child := range children { + // [childPos, childEnd) is unaugmented interval of child. + childPos := child.Pos() + childEnd := child.End() + + // [augPos, augEnd) is whitespace-augmented interval of child. + augPos := childPos + augEnd := childEnd + if i > 0 { + augPos = children[i-1].End() // start of preceding whitespace + } + if i < l-1 { + nextChildPos := children[i+1].Pos() + // Does [start, end) lie between child and next child? + if start >= augEnd && end <= nextChildPos { + return false // inexact match + } + augEnd = nextChildPos // end of following whitespace + } + + // fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n", + // i, augPos, augEnd, start, end) // debugging + + // Does augmented child strictly contain [start, end)? + if augPos <= start && end <= augEnd { + _, isToken := child.(tokenNode) + return isToken || visit(child) + } + + // Does [start, end) overlap multiple children? + // i.e. left-augmented child contains start + // but LR-augmented child does not contain end. + if start < childEnd && end > augEnd { + break + } + } + + // No single child contained [start, end), + // so node is the result. Is it exact? + + // (It's tempting to put this condition before the + // child loop, but it gives the wrong result in the + // case where a node (e.g. ExprStmt) and its sole + // child have equal intervals.) + if start == nodePos && end == nodeEnd { + return true // exact match + } + + return false // inexact: overlaps multiple children + } + + if start > end { + start, end = end, start + } + + if start < root.End() && end > root.Pos() { + if start == end { + end = start + 1 // empty interval => interval of size 1 + } + exact = visit(root) + + // Reverse the path: + for i, l := 0, len(path); i < l/2; i++ { + path[i], path[l-1-i] = path[l-1-i], path[i] + } + } else { + // Selection lies within whitespace preceding the + // first (or following the last) declaration in the file. + // The result nonetheless always includes the ast.File. + path = append(path, root) + } + + return +} + +// tokenNode is a dummy implementation of ast.Node for a single token. +// They are used transiently by PathEnclosingInterval but never escape +// this package. +// +type tokenNode struct { + pos token.Pos + end token.Pos +} + +func (n tokenNode) Pos() token.Pos { + return n.pos +} + +func (n tokenNode) End() token.Pos { + return n.end +} + +func tok(pos token.Pos, len int) ast.Node { + return tokenNode{pos, pos + token.Pos(len)} +} + +// childrenOf returns the direct non-nil children of ast.Node n. +// It may include fake ast.Node implementations for bare tokens. +// it is not safe to call (e.g.) ast.Walk on such nodes. +// +func childrenOf(n ast.Node) []ast.Node { + var children []ast.Node + + // First add nodes for all true subtrees. + ast.Inspect(n, func(node ast.Node) bool { + if node == n { // push n + return true // recur + } + if node != nil { // push child + children = append(children, node) + } + return false // no recursion + }) + + // Then add fake Nodes for bare tokens. + switch n := n.(type) { + case *ast.ArrayType: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Elt.End(), len("]"))) + + case *ast.AssignStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.BasicLit: + children = append(children, + tok(n.ValuePos, len(n.Value))) + + case *ast.BinaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.BlockStmt: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("}"))) + + case *ast.BranchStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.CallExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + if n.Ellipsis != 0 { + children = append(children, tok(n.Ellipsis, len("..."))) + } + + case *ast.CaseClause: + if n.List == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.ChanType: + switch n.Dir { + case ast.RECV: + children = append(children, tok(n.Begin, len("<-chan"))) + case ast.SEND: + children = append(children, tok(n.Begin, len("chan<-"))) + case ast.RECV | ast.SEND: + children = append(children, tok(n.Begin, len("chan"))) + } + + case *ast.CommClause: + if n.Comm == nil { + children = append(children, + tok(n.Case, len("default"))) + } else { + children = append(children, + tok(n.Case, len("case"))) + } + children = append(children, tok(n.Colon, len(":"))) + + case *ast.Comment: + // nop + + case *ast.CommentGroup: + // nop + + case *ast.CompositeLit: + children = append(children, + tok(n.Lbrace, len("{")), + tok(n.Rbrace, len("{"))) + + case *ast.DeclStmt: + // nop + + case *ast.DeferStmt: + children = append(children, + tok(n.Defer, len("defer"))) + + case *ast.Ellipsis: + children = append(children, + tok(n.Ellipsis, len("..."))) + + case *ast.EmptyStmt: + // nop + + case *ast.ExprStmt: + // nop + + case *ast.Field: + // TODO(adonovan): Field.{Doc,Comment,Tag}? + + case *ast.FieldList: + children = append(children, + tok(n.Opening, len("(")), + tok(n.Closing, len(")"))) + + case *ast.File: + // TODO test: Doc + children = append(children, + tok(n.Package, len("package"))) + + case *ast.ForStmt: + children = append(children, + tok(n.For, len("for"))) + + case *ast.FuncDecl: + // TODO(adonovan): FuncDecl.Comment? + + // Uniquely, FuncDecl breaks the invariant that + // preorder traversal yields tokens in lexical order: + // in fact, FuncDecl.Recv precedes FuncDecl.Type.Func. + // + // As a workaround, we inline the case for FuncType + // here and order things correctly. + // + children = nil // discard ast.Walk(FuncDecl) info subtrees + children = append(children, tok(n.Type.Func, len("func"))) + if n.Recv != nil { + children = append(children, n.Recv) + } + children = append(children, n.Name) + if n.Type.Params != nil { + children = append(children, n.Type.Params) + } + if n.Type.Results != nil { + children = append(children, n.Type.Results) + } + if n.Body != nil { + children = append(children, n.Body) + } + + case *ast.FuncLit: + // nop + + case *ast.FuncType: + if n.Func != 0 { + children = append(children, + tok(n.Func, len("func"))) + } + + case *ast.GenDecl: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + if n.Lparen != 0 { + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + } + + case *ast.GoStmt: + children = append(children, + tok(n.Go, len("go"))) + + case *ast.Ident: + children = append(children, + tok(n.NamePos, len(n.Name))) + + case *ast.IfStmt: + children = append(children, + tok(n.If, len("if"))) + + case *ast.ImportSpec: + // TODO(adonovan): ImportSpec.{Doc,EndPos}? + + case *ast.IncDecStmt: + children = append(children, + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.IndexExpr: + children = append(children, + tok(n.Lbrack, len("{")), + tok(n.Rbrack, len("}"))) + + case *ast.InterfaceType: + children = append(children, + tok(n.Interface, len("interface"))) + + case *ast.KeyValueExpr: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.LabeledStmt: + children = append(children, + tok(n.Colon, len(":"))) + + case *ast.MapType: + children = append(children, + tok(n.Map, len("map"))) + + case *ast.ParenExpr: + children = append(children, + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.RangeStmt: + children = append(children, + tok(n.For, len("for")), + tok(n.TokPos, len(n.Tok.String()))) + + case *ast.ReturnStmt: + children = append(children, + tok(n.Return, len("return"))) + + case *ast.SelectStmt: + children = append(children, + tok(n.Select, len("select"))) + + case *ast.SelectorExpr: + // nop + + case *ast.SendStmt: + children = append(children, + tok(n.Arrow, len("<-"))) + + case *ast.SliceExpr: + children = append(children, + tok(n.Lbrack, len("[")), + tok(n.Rbrack, len("]"))) + + case *ast.StarExpr: + children = append(children, tok(n.Star, len("*"))) + + case *ast.StructType: + children = append(children, tok(n.Struct, len("struct"))) + + case *ast.SwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.TypeAssertExpr: + children = append(children, + tok(n.Lparen-1, len(".")), + tok(n.Lparen, len("(")), + tok(n.Rparen, len(")"))) + + case *ast.TypeSpec: + // TODO(adonovan): TypeSpec.{Doc,Comment}? + + case *ast.TypeSwitchStmt: + children = append(children, tok(n.Switch, len("switch"))) + + case *ast.UnaryExpr: + children = append(children, tok(n.OpPos, len(n.Op.String()))) + + case *ast.ValueSpec: + // TODO(adonovan): ValueSpec.{Doc,Comment}? + + case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt: + // nop + } + + // TODO(adonovan): opt: merge the logic of ast.Inspect() into + // the switch above so we can make interleaved callbacks for + // both Nodes and Tokens in the right order and avoid the need + // to sort. + sort.Sort(byPos(children)) + + return children +} + +type byPos []ast.Node + +func (sl byPos) Len() int { + return len(sl) +} +func (sl byPos) Less(i, j int) bool { + return sl[i].Pos() < sl[j].Pos() +} +func (sl byPos) Swap(i, j int) { + sl[i], sl[j] = sl[j], sl[i] +} + +// NodeDescription returns a description of the concrete type of n suitable +// for a user interface. +// +// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident, +// StarExpr) we could be much more specific given the path to the AST +// root. Perhaps we should do that. +// +func NodeDescription(n ast.Node) string { + switch n := n.(type) { + case *ast.ArrayType: + return "array type" + case *ast.AssignStmt: + return "assignment" + case *ast.BadDecl: + return "bad declaration" + case *ast.BadExpr: + return "bad expression" + case *ast.BadStmt: + return "bad statement" + case *ast.BasicLit: + return "basic literal" + case *ast.BinaryExpr: + return fmt.Sprintf("binary %s operation", n.Op) + case *ast.BlockStmt: + return "block" + case *ast.BranchStmt: + switch n.Tok { + case token.BREAK: + return "break statement" + case token.CONTINUE: + return "continue statement" + case token.GOTO: + return "goto statement" + case token.FALLTHROUGH: + return "fall-through statement" + } + case *ast.CallExpr: + if len(n.Args) == 1 && !n.Ellipsis.IsValid() { + return "function call (or conversion)" + } + return "function call" + case *ast.CaseClause: + return "case clause" + case *ast.ChanType: + return "channel type" + case *ast.CommClause: + return "communication clause" + case *ast.Comment: + return "comment" + case *ast.CommentGroup: + return "comment group" + case *ast.CompositeLit: + return "composite literal" + case *ast.DeclStmt: + return NodeDescription(n.Decl) + " statement" + case *ast.DeferStmt: + return "defer statement" + case *ast.Ellipsis: + return "ellipsis" + case *ast.EmptyStmt: + return "empty statement" + case *ast.ExprStmt: + return "expression statement" + case *ast.Field: + // Can be any of these: + // struct {x, y int} -- struct field(s) + // struct {T} -- anon struct field + // interface {I} -- interface embedding + // interface {f()} -- interface method + // func (A) func(B) C -- receiver, param(s), result(s) + return "field/method/parameter" + case *ast.FieldList: + return "field/method/parameter list" + case *ast.File: + return "source file" + case *ast.ForStmt: + return "for loop" + case *ast.FuncDecl: + return "function declaration" + case *ast.FuncLit: + return "function literal" + case *ast.FuncType: + return "function type" + case *ast.GenDecl: + switch n.Tok { + case token.IMPORT: + return "import declaration" + case token.CONST: + return "constant declaration" + case token.TYPE: + return "type declaration" + case token.VAR: + return "variable declaration" + } + case *ast.GoStmt: + return "go statement" + case *ast.Ident: + return "identifier" + case *ast.IfStmt: + return "if statement" + case *ast.ImportSpec: + return "import specification" + case *ast.IncDecStmt: + if n.Tok == token.INC { + return "increment statement" + } + return "decrement statement" + case *ast.IndexExpr: + return "index expression" + case *ast.InterfaceType: + return "interface type" + case *ast.KeyValueExpr: + return "key/value association" + case *ast.LabeledStmt: + return "statement label" + case *ast.MapType: + return "map type" + case *ast.Package: + return "package" + case *ast.ParenExpr: + return "parenthesized " + NodeDescription(n.X) + case *ast.RangeStmt: + return "range loop" + case *ast.ReturnStmt: + return "return statement" + case *ast.SelectStmt: + return "select statement" + case *ast.SelectorExpr: + return "selector" + case *ast.SendStmt: + return "channel send" + case *ast.SliceExpr: + return "slice expression" + case *ast.StarExpr: + return "*-operation" // load/store expr or pointer type + case *ast.StructType: + return "struct type" + case *ast.SwitchStmt: + return "switch statement" + case *ast.TypeAssertExpr: + return "type assertion" + case *ast.TypeSpec: + return "type specification" + case *ast.TypeSwitchStmt: + return "type switch" + case *ast.UnaryExpr: + return fmt.Sprintf("unary %s operation", n.Op) + case *ast.ValueSpec: + return "value specification" + + } + panic(fmt.Sprintf("unexpected node type: %T", n)) +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go new file mode 100644 index 0000000000..2087ceec9c --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/imports.go @@ -0,0 +1,482 @@ +// Copyright 2013 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 astutil contains common utilities for working with the Go AST. +package astutil // import "golang.org/x/tools/go/ast/astutil" + +import ( + "fmt" + "go/ast" + "go/token" + "strconv" + "strings" +) + +// AddImport adds the import path to the file f, if absent. +func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) { + return AddNamedImport(fset, f, "", path) +} + +// AddNamedImport adds the import with the given name and path to the file f, if absent. +// If name is not empty, it is used to rename the import. +// +// For example, calling +// AddNamedImport(fset, f, "pathpkg", "path") +// adds +// import pathpkg "path" +func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) { + if imports(f, name, path) { + return false + } + + newImport := &ast.ImportSpec{ + Path: &ast.BasicLit{ + Kind: token.STRING, + Value: strconv.Quote(path), + }, + } + if name != "" { + newImport.Name = &ast.Ident{Name: name} + } + + // Find an import decl to add to. + // The goal is to find an existing import + // whose import path has the longest shared + // prefix with path. + var ( + bestMatch = -1 // length of longest shared prefix + lastImport = -1 // index in f.Decls of the file's final import decl + impDecl *ast.GenDecl // import decl containing the best match + impIndex = -1 // spec index in impDecl containing the best match + + isThirdPartyPath = isThirdParty(path) + ) + for i, decl := range f.Decls { + gen, ok := decl.(*ast.GenDecl) + if ok && gen.Tok == token.IMPORT { + lastImport = i + // Do not add to import "C", to avoid disrupting the + // association with its doc comment, breaking cgo. + if declImports(gen, "C") { + continue + } + + // Match an empty import decl if that's all that is available. + if len(gen.Specs) == 0 && bestMatch == -1 { + impDecl = gen + } + + // Compute longest shared prefix with imports in this group and find best + // matched import spec. + // 1. Always prefer import spec with longest shared prefix. + // 2. While match length is 0, + // - for stdlib package: prefer first import spec. + // - for third party package: prefer first third party import spec. + // We cannot use last import spec as best match for third party package + // because grouped imports are usually placed last by goimports -local + // flag. + // See issue #19190. + seenAnyThirdParty := false + for j, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + p := importPath(impspec) + n := matchLen(p, path) + if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) { + bestMatch = n + impDecl = gen + impIndex = j + } + seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p) + } + } + } + + // If no import decl found, add one after the last import. + if impDecl == nil { + impDecl = &ast.GenDecl{ + Tok: token.IMPORT, + } + if lastImport >= 0 { + impDecl.TokPos = f.Decls[lastImport].End() + } else { + // There are no existing imports. + // Our new import, preceded by a blank line, goes after the package declaration + // and after the comment, if any, that starts on the same line as the + // package declaration. + impDecl.TokPos = f.Package + + file := fset.File(f.Package) + pkgLine := file.Line(f.Package) + for _, c := range f.Comments { + if file.Line(c.Pos()) > pkgLine { + break + } + // +2 for a blank line + impDecl.TokPos = c.End() + 2 + } + } + f.Decls = append(f.Decls, nil) + copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:]) + f.Decls[lastImport+1] = impDecl + } + + // Insert new import at insertAt. + insertAt := 0 + if impIndex >= 0 { + // insert after the found import + insertAt = impIndex + 1 + } + impDecl.Specs = append(impDecl.Specs, nil) + copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:]) + impDecl.Specs[insertAt] = newImport + pos := impDecl.Pos() + if insertAt > 0 { + // If there is a comment after an existing import, preserve the comment + // position by adding the new import after the comment. + if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil { + pos = spec.Comment.End() + } else { + // Assign same position as the previous import, + // so that the sorter sees it as being in the same block. + pos = impDecl.Specs[insertAt-1].Pos() + } + } + if newImport.Name != nil { + newImport.Name.NamePos = pos + } + newImport.Path.ValuePos = pos + newImport.EndPos = pos + + // Clean up parens. impDecl contains at least one spec. + if len(impDecl.Specs) == 1 { + // Remove unneeded parens. + impDecl.Lparen = token.NoPos + } else if !impDecl.Lparen.IsValid() { + // impDecl needs parens added. + impDecl.Lparen = impDecl.Specs[0].Pos() + } + + f.Imports = append(f.Imports, newImport) + + if len(f.Decls) <= 1 { + return true + } + + // Merge all the import declarations into the first one. + var first *ast.GenDecl + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { + continue + } + if first == nil { + first = gen + continue // Don't touch the first one. + } + // We now know there is more than one package in this import + // declaration. Ensure that it ends up parenthesized. + first.Lparen = first.Pos() + // Move the imports of the other import declaration to the first one. + for _, spec := range gen.Specs { + spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() + first.Specs = append(first.Specs, spec) + } + f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) + i-- + } + + return true +} + +func isThirdParty(importPath string) bool { + // Third party package import path usually contains "." (".com", ".org", ...) + // This logic is taken from golang.org/x/tools/imports package. + return strings.Contains(importPath, ".") +} + +// DeleteImport deletes the import path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) { + return DeleteNamedImport(fset, f, "", path) +} + +// DeleteNamedImport deletes the import with the given name and path from the file f, if present. +// If there are duplicate import declarations, all matching ones are deleted. +func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) { + var delspecs []*ast.ImportSpec + var delcomments []*ast.CommentGroup + + // Find the import nodes that import path, if any. + for i := 0; i < len(f.Decls); i++ { + decl := f.Decls[i] + gen, ok := decl.(*ast.GenDecl) + if !ok || gen.Tok != token.IMPORT { + continue + } + for j := 0; j < len(gen.Specs); j++ { + spec := gen.Specs[j] + impspec := spec.(*ast.ImportSpec) + if importName(impspec) != name || importPath(impspec) != path { + continue + } + + // We found an import spec that imports path. + // Delete it. + delspecs = append(delspecs, impspec) + deleted = true + copy(gen.Specs[j:], gen.Specs[j+1:]) + gen.Specs = gen.Specs[:len(gen.Specs)-1] + + // If this was the last import spec in this decl, + // delete the decl, too. + if len(gen.Specs) == 0 { + copy(f.Decls[i:], f.Decls[i+1:]) + f.Decls = f.Decls[:len(f.Decls)-1] + i-- + break + } else if len(gen.Specs) == 1 { + if impspec.Doc != nil { + delcomments = append(delcomments, impspec.Doc) + } + if impspec.Comment != nil { + delcomments = append(delcomments, impspec.Comment) + } + for _, cg := range f.Comments { + // Found comment on the same line as the import spec. + if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line { + delcomments = append(delcomments, cg) + break + } + } + + spec := gen.Specs[0].(*ast.ImportSpec) + + // Move the documentation right after the import decl. + if spec.Doc != nil { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + } + for _, cg := range f.Comments { + if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line { + for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line { + fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line) + } + break + } + } + } + if j > 0 { + lastImpspec := gen.Specs[j-1].(*ast.ImportSpec) + lastLine := fset.Position(lastImpspec.Path.ValuePos).Line + line := fset.Position(impspec.Path.ValuePos).Line + + // We deleted an entry but now there may be + // a blank line-sized hole where the import was. + if line-lastLine > 1 || !gen.Rparen.IsValid() { + // There was a blank line immediately preceding the deleted import, + // so there's no need to close the hole. The right parenthesis is + // invalid after AddImport to an import statement without parenthesis. + // Do nothing. + } else if line != fset.File(gen.Rparen).LineCount() { + // There was no blank line. Close the hole. + fset.File(gen.Rparen).MergeLine(line) + } + } + j-- + } + } + + // Delete imports from f.Imports. + for i := 0; i < len(f.Imports); i++ { + imp := f.Imports[i] + for j, del := range delspecs { + if imp == del { + copy(f.Imports[i:], f.Imports[i+1:]) + f.Imports = f.Imports[:len(f.Imports)-1] + copy(delspecs[j:], delspecs[j+1:]) + delspecs = delspecs[:len(delspecs)-1] + i-- + break + } + } + } + + // Delete comments from f.Comments. + for i := 0; i < len(f.Comments); i++ { + cg := f.Comments[i] + for j, del := range delcomments { + if cg == del { + copy(f.Comments[i:], f.Comments[i+1:]) + f.Comments = f.Comments[:len(f.Comments)-1] + copy(delcomments[j:], delcomments[j+1:]) + delcomments = delcomments[:len(delcomments)-1] + i-- + break + } + } + } + + if len(delspecs) > 0 { + panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs)) + } + + return +} + +// RewriteImport rewrites any import of path oldPath to path newPath. +func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) { + for _, imp := range f.Imports { + if importPath(imp) == oldPath { + rewrote = true + // record old End, because the default is to compute + // it using the length of imp.Path.Value. + imp.EndPos = imp.End() + imp.Path.Value = strconv.Quote(newPath) + } + } + return +} + +// UsesImport reports whether a given import is used. +func UsesImport(f *ast.File, path string) (used bool) { + spec := importSpec(f, path) + if spec == nil { + return + } + + name := spec.Name.String() + switch name { + case "": + // If the package name is not explicitly specified, + // make an educated guess. This is not guaranteed to be correct. + lastSlash := strings.LastIndex(path, "/") + if lastSlash == -1 { + name = path + } else { + name = path[lastSlash+1:] + } + case "_", ".": + // Not sure if this import is used - err on the side of caution. + return true + } + + ast.Walk(visitFn(func(n ast.Node) { + sel, ok := n.(*ast.SelectorExpr) + if ok && isTopName(sel.X, name) { + used = true + } + }), f) + + return +} + +type visitFn func(node ast.Node) + +func (fn visitFn) Visit(node ast.Node) ast.Visitor { + fn(node) + return fn +} + +// imports reports whether f has an import with the specified name and path. +func imports(f *ast.File, name, path string) bool { + for _, s := range f.Imports { + if importName(s) == name && importPath(s) == path { + return true + } + } + return false +} + +// importSpec returns the import spec if f imports path, +// or nil otherwise. +func importSpec(f *ast.File, path string) *ast.ImportSpec { + for _, s := range f.Imports { + if importPath(s) == path { + return s + } + } + return nil +} + +// importName returns the name of s, +// or "" if the import is not named. +func importName(s *ast.ImportSpec) string { + if s.Name == nil { + return "" + } + return s.Name.Name +} + +// importPath returns the unquoted import path of s, +// or "" if the path is not properly quoted. +func importPath(s *ast.ImportSpec) string { + t, err := strconv.Unquote(s.Path.Value) + if err != nil { + return "" + } + return t +} + +// declImports reports whether gen contains an import of path. +func declImports(gen *ast.GenDecl, path string) bool { + if gen.Tok != token.IMPORT { + return false + } + for _, spec := range gen.Specs { + impspec := spec.(*ast.ImportSpec) + if importPath(impspec) == path { + return true + } + } + return false +} + +// matchLen returns the length of the longest path segment prefix shared by x and y. +func matchLen(x, y string) int { + n := 0 + for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ { + if x[i] == '/' { + n++ + } + } + return n +} + +// isTopName returns true if n is a top-level unresolved identifier with the given name. +func isTopName(n ast.Expr, name string) bool { + id, ok := n.(*ast.Ident) + return ok && id.Name == name && id.Obj == nil +} + +// Imports returns the file imports grouped by paragraph. +func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec { + var groups [][]*ast.ImportSpec + + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok || genDecl.Tok != token.IMPORT { + break + } + + group := []*ast.ImportSpec{} + + var lastLine int + for _, spec := range genDecl.Specs { + importSpec := spec.(*ast.ImportSpec) + pos := importSpec.Path.ValuePos + line := fset.Position(pos).Line + if lastLine > 0 && pos > 0 && line-lastLine > 1 { + groups = append(groups, group) + group = []*ast.ImportSpec{} + } + group = append(group, importSpec) + lastLine = line + } + groups = append(groups, group) + } + + return groups +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go new file mode 100644 index 0000000000..cf72ea990b --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -0,0 +1,477 @@ +// Copyright 2017 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 astutil + +import ( + "fmt" + "go/ast" + "reflect" + "sort" +) + +// An ApplyFunc is invoked by Apply for each node n, even if n is nil, +// before and/or after the node's children, using a Cursor describing +// the current node and providing operations on it. +// +// The return value of ApplyFunc controls the syntax tree traversal. +// See Apply for details. +type ApplyFunc func(*Cursor) bool + +// Apply traverses a syntax tree recursively, starting with root, +// and calling pre and post for each node as described below. +// Apply returns the syntax tree, possibly modified. +// +// If pre is not nil, it is called for each node before the node's +// children are traversed (pre-order). If pre returns false, no +// children are traversed, and post is not called for that node. +// +// If post is not nil, and a prior call of pre didn't return false, +// post is called for each node after its children are traversed +// (post-order). If post returns false, traversal is terminated and +// Apply returns immediately. +// +// Only fields that refer to AST nodes are considered children; +// i.e., token.Pos, Scopes, Objects, and fields of basic types +// (strings, etc.) are ignored. +// +// Children are traversed in the order in which they appear in the +// respective node's struct definition. A package's files are +// traversed in the filenames' alphabetical order. +// +func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) { + parent := &struct{ ast.Node }{root} + defer func() { + if r := recover(); r != nil && r != abort { + panic(r) + } + result = parent.Node + }() + a := &application{pre: pre, post: post} + a.apply(parent, "Node", nil, root) + return +} + +var abort = new(int) // singleton, to signal termination of Apply + +// A Cursor describes a node encountered during Apply. +// Information about the node and its parent is available +// from the Node, Parent, Name, and Index methods. +// +// If p is a variable of type and value of the current parent node +// c.Parent(), and f is the field identifier with name c.Name(), +// the following invariants hold: +// +// p.f == c.Node() if c.Index() < 0 +// p.f[c.Index()] == c.Node() if c.Index() >= 0 +// +// The methods Replace, Delete, InsertBefore, and InsertAfter +// can be used to change the AST without disrupting Apply. +type Cursor struct { + parent ast.Node + name string + iter *iterator // valid if non-nil + node ast.Node +} + +// Node returns the current Node. +func (c *Cursor) Node() ast.Node { return c.node } + +// Parent returns the parent of the current Node. +func (c *Cursor) Parent() ast.Node { return c.parent } + +// Name returns the name of the parent Node field that contains the current Node. +// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns +// the filename for the current Node. +func (c *Cursor) Name() string { return c.name } + +// Index reports the index >= 0 of the current Node in the slice of Nodes that +// contains it, or a value < 0 if the current Node is not part of a slice. +// The index of the current node changes if InsertBefore is called while +// processing the current node. +func (c *Cursor) Index() int { + if c.iter != nil { + return c.iter.index + } + return -1 +} + +// field returns the current node's parent field value. +func (c *Cursor) field() reflect.Value { + return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name) +} + +// Replace replaces the current Node with n. +// The replacement node is not walked by Apply. +func (c *Cursor) Replace(n ast.Node) { + if _, ok := c.node.(*ast.File); ok { + file, ok := n.(*ast.File) + if !ok { + panic("attempt to replace *ast.File with non-*ast.File") + } + c.parent.(*ast.Package).Files[c.name] = file + return + } + + v := c.field() + if i := c.Index(); i >= 0 { + v = v.Index(i) + } + v.Set(reflect.ValueOf(n)) +} + +// Delete deletes the current Node from its containing slice. +// If the current Node is not part of a slice, Delete panics. +// As a special case, if the current node is a package file, +// Delete removes it from the package's Files map. +func (c *Cursor) Delete() { + if _, ok := c.node.(*ast.File); ok { + delete(c.parent.(*ast.Package).Files, c.name) + return + } + + i := c.Index() + if i < 0 { + panic("Delete node not contained in slice") + } + v := c.field() + l := v.Len() + reflect.Copy(v.Slice(i, l), v.Slice(i+1, l)) + v.Index(l - 1).Set(reflect.Zero(v.Type().Elem())) + v.SetLen(l - 1) + c.iter.step-- +} + +// InsertAfter inserts n after the current Node in its containing slice. +// If the current Node is not part of a slice, InsertAfter panics. +// Apply does not walk n. +func (c *Cursor) InsertAfter(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertAfter node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l)) + v.Index(i + 1).Set(reflect.ValueOf(n)) + c.iter.step++ +} + +// InsertBefore inserts n before the current Node in its containing slice. +// If the current Node is not part of a slice, InsertBefore panics. +// Apply will not walk n. +func (c *Cursor) InsertBefore(n ast.Node) { + i := c.Index() + if i < 0 { + panic("InsertBefore node not contained in slice") + } + v := c.field() + v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem()))) + l := v.Len() + reflect.Copy(v.Slice(i+1, l), v.Slice(i, l)) + v.Index(i).Set(reflect.ValueOf(n)) + c.iter.index++ +} + +// application carries all the shared data so we can pass it around cheaply. +type application struct { + pre, post ApplyFunc + cursor Cursor + iter iterator +} + +func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) { + // convert typed nil into untyped nil + if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() { + n = nil + } + + // avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead + saved := a.cursor + a.cursor.parent = parent + a.cursor.name = name + a.cursor.iter = iter + a.cursor.node = n + + if a.pre != nil && !a.pre(&a.cursor) { + a.cursor = saved + return + } + + // walk children + // (the order of the cases matches the order of the corresponding node types in go/ast) + switch n := n.(type) { + case nil: + // nothing to do + + // Comments and fields + case *ast.Comment: + // nothing to do + + case *ast.CommentGroup: + if n != nil { + a.applyList(n, "List") + } + + case *ast.Field: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.FieldList: + a.applyList(n, "List") + + // Expressions + case *ast.BadExpr, *ast.Ident, *ast.BasicLit: + // nothing to do + + case *ast.Ellipsis: + a.apply(n, "Elt", nil, n.Elt) + + case *ast.FuncLit: + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + case *ast.CompositeLit: + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Elts") + + case *ast.ParenExpr: + a.apply(n, "X", nil, n.X) + + case *ast.SelectorExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Sel", nil, n.Sel) + + case *ast.IndexExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Index", nil, n.Index) + + case *ast.SliceExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Low", nil, n.Low) + a.apply(n, "High", nil, n.High) + a.apply(n, "Max", nil, n.Max) + + case *ast.TypeAssertExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Type", nil, n.Type) + + case *ast.CallExpr: + a.apply(n, "Fun", nil, n.Fun) + a.applyList(n, "Args") + + case *ast.StarExpr: + a.apply(n, "X", nil, n.X) + + case *ast.UnaryExpr: + a.apply(n, "X", nil, n.X) + + case *ast.BinaryExpr: + a.apply(n, "X", nil, n.X) + a.apply(n, "Y", nil, n.Y) + + case *ast.KeyValueExpr: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + // Types + case *ast.ArrayType: + a.apply(n, "Len", nil, n.Len) + a.apply(n, "Elt", nil, n.Elt) + + case *ast.StructType: + a.apply(n, "Fields", nil, n.Fields) + + case *ast.FuncType: + a.apply(n, "Params", nil, n.Params) + a.apply(n, "Results", nil, n.Results) + + case *ast.InterfaceType: + a.apply(n, "Methods", nil, n.Methods) + + case *ast.MapType: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + + case *ast.ChanType: + a.apply(n, "Value", nil, n.Value) + + // Statements + case *ast.BadStmt: + // nothing to do + + case *ast.DeclStmt: + a.apply(n, "Decl", nil, n.Decl) + + case *ast.EmptyStmt: + // nothing to do + + case *ast.LabeledStmt: + a.apply(n, "Label", nil, n.Label) + a.apply(n, "Stmt", nil, n.Stmt) + + case *ast.ExprStmt: + a.apply(n, "X", nil, n.X) + + case *ast.SendStmt: + a.apply(n, "Chan", nil, n.Chan) + a.apply(n, "Value", nil, n.Value) + + case *ast.IncDecStmt: + a.apply(n, "X", nil, n.X) + + case *ast.AssignStmt: + a.applyList(n, "Lhs") + a.applyList(n, "Rhs") + + case *ast.GoStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.DeferStmt: + a.apply(n, "Call", nil, n.Call) + + case *ast.ReturnStmt: + a.applyList(n, "Results") + + case *ast.BranchStmt: + a.apply(n, "Label", nil, n.Label) + + case *ast.BlockStmt: + a.applyList(n, "List") + + case *ast.IfStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Body", nil, n.Body) + a.apply(n, "Else", nil, n.Else) + + case *ast.CaseClause: + a.applyList(n, "List") + a.applyList(n, "Body") + + case *ast.SwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Tag", nil, n.Tag) + a.apply(n, "Body", nil, n.Body) + + case *ast.TypeSwitchStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Assign", nil, n.Assign) + a.apply(n, "Body", nil, n.Body) + + case *ast.CommClause: + a.apply(n, "Comm", nil, n.Comm) + a.applyList(n, "Body") + + case *ast.SelectStmt: + a.apply(n, "Body", nil, n.Body) + + case *ast.ForStmt: + a.apply(n, "Init", nil, n.Init) + a.apply(n, "Cond", nil, n.Cond) + a.apply(n, "Post", nil, n.Post) + a.apply(n, "Body", nil, n.Body) + + case *ast.RangeStmt: + a.apply(n, "Key", nil, n.Key) + a.apply(n, "Value", nil, n.Value) + a.apply(n, "X", nil, n.X) + a.apply(n, "Body", nil, n.Body) + + // Declarations + case *ast.ImportSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Path", nil, n.Path) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.ValueSpec: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Names") + a.apply(n, "Type", nil, n.Type) + a.applyList(n, "Values") + a.apply(n, "Comment", nil, n.Comment) + + case *ast.TypeSpec: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Comment", nil, n.Comment) + + case *ast.BadDecl: + // nothing to do + + case *ast.GenDecl: + a.apply(n, "Doc", nil, n.Doc) + a.applyList(n, "Specs") + + case *ast.FuncDecl: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Recv", nil, n.Recv) + a.apply(n, "Name", nil, n.Name) + a.apply(n, "Type", nil, n.Type) + a.apply(n, "Body", nil, n.Body) + + // Files and packages + case *ast.File: + a.apply(n, "Doc", nil, n.Doc) + a.apply(n, "Name", nil, n.Name) + a.applyList(n, "Decls") + // Don't walk n.Comments; they have either been walked already if + // they are Doc comments, or they can be easily walked explicitly. + + case *ast.Package: + // collect and sort names for reproducible behavior + var names []string + for name := range n.Files { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + a.apply(n, name, nil, n.Files[name]) + } + + default: + panic(fmt.Sprintf("Apply: unexpected node type %T", n)) + } + + if a.post != nil && !a.post(&a.cursor) { + panic(abort) + } + + a.cursor = saved +} + +// An iterator controls iteration over a slice of nodes. +type iterator struct { + index, step int +} + +func (a *application) applyList(parent ast.Node, name string) { + // avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead + saved := a.iter + a.iter.index = 0 + for { + // must reload parent.name each time, since cursor modifications might change it + v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name) + if a.iter.index >= v.Len() { + break + } + + // element x may be nil in a bad AST - be cautious + var x ast.Node + if e := v.Index(a.iter.index); e.IsValid() { + x = e.Interface().(ast.Node) + } + + a.iter.step = 1 + a.apply(parent, name, &a.iter, x) + a.iter.index += a.iter.step + } + a.iter = saved +} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/util.go b/vendor/golang.org/x/tools/go/ast/astutil/util.go new file mode 100644 index 0000000000..7630629824 --- /dev/null +++ b/vendor/golang.org/x/tools/go/ast/astutil/util.go @@ -0,0 +1,14 @@ +package astutil + +import "go/ast" + +// Unparen returns e with any enclosing parentheses stripped. +func Unparen(e ast.Expr) ast.Expr { + for { + p, ok := e.(*ast.ParenExpr) + if !ok { + return e + } + e = p.X + } +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go new file mode 100644 index 0000000000..0d51acad99 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -0,0 +1,105 @@ +// Copyright 2016 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 gcexportdata provides functions for locating, reading, and +// writing export data files containing type information produced by the +// gc compiler. This package supports go1.7 export data format and all +// later versions. +// +// Although it might seem convenient for this package to live alongside +// go/types in the standard library, this would cause version skew +// problems for developer tools that use it, since they must be able to +// consume the outputs of the gc compiler both before and after a Go +// update such as from Go 1.7 to Go 1.8. Because this package lives in +// golang.org/x/tools, sites can update their version of this repo some +// time before the Go 1.8 release and rebuild and redeploy their +// developer tools, which will then be able to consume both Go 1.7 and +// Go 1.8 export data files, so they will work before and after the +// Go update. (See discussion at https://golang.org/issue/15651.) +// +package gcexportdata // import "golang.org/x/tools/go/gcexportdata" + +import ( + "bufio" + "bytes" + "fmt" + "go/token" + "go/types" + "io" + "io/ioutil" + + "golang.org/x/tools/go/internal/gcimporter" +) + +// Find returns the name of an object (.o) or archive (.a) file +// containing type information for the specified import path, +// using the workspace layout conventions of go/build. +// If no file was found, an empty filename is returned. +// +// A relative srcDir is interpreted relative to the current working directory. +// +// Find also returns the package's resolved (canonical) import path, +// reflecting the effects of srcDir and vendoring on importPath. +func Find(importPath, srcDir string) (filename, path string) { + return gcimporter.FindPkg(importPath, srcDir) +} + +// NewReader returns a reader for the export data section of an object +// (.o) or archive (.a) file read from r. The new reader may provide +// additional trailing data beyond the end of the export data. +func NewReader(r io.Reader) (io.Reader, error) { + buf := bufio.NewReader(r) + _, err := gcimporter.FindExportData(buf) + // If we ever switch to a zip-like archive format with the ToC + // at the end, we can return the correct portion of export data, + // but for now we must return the entire rest of the file. + return buf, err +} + +// Read reads export data from in, decodes it, and returns type +// information for the package. +// The package name is specified by path. +// File position information is added to fset. +// +// Read may inspect and add to the imports map to ensure that references +// within the export data to other packages are consistent. The caller +// must ensure that imports[path] does not exist, or exists but is +// incomplete (see types.Package.Complete), and Read inserts the +// resulting package into this map entry. +// +// On return, the state of the reader is undefined. +func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) { + data, err := ioutil.ReadAll(in) + if err != nil { + return nil, fmt.Errorf("reading export data for %q: %v", path, err) + } + + if bytes.HasPrefix(data, []byte("!")) { + return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path) + } + + // The App Engine Go runtime v1.6 uses the old export data format. + // TODO(adonovan): delete once v1.7 has been around for a while. + if bytes.HasPrefix(data, []byte("package ")) { + return gcimporter.ImportData(imports, path, path, bytes.NewReader(data)) + } + + // The indexed export format starts with an 'i'. + if len(data) == 0 || data[0] != 'i' { + return nil, fmt.Errorf("unknown export data format") + } + _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) + return pkg, err +} + +// Write writes encoded type information for the specified package to out. +// The FileSet provides file position information for named objects. +func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error { + b, err := gcimporter.IExportData(fset, pkg) + if err != nil { + return err + } + _, err = out.Write(b) + return err +} diff --git a/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/vendor/golang.org/x/tools/go/gcexportdata/importer.go new file mode 100644 index 0000000000..efe221e7e1 --- /dev/null +++ b/vendor/golang.org/x/tools/go/gcexportdata/importer.go @@ -0,0 +1,73 @@ +// Copyright 2016 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 gcexportdata + +import ( + "fmt" + "go/token" + "go/types" + "os" +) + +// NewImporter returns a new instance of the types.Importer interface +// that reads type information from export data files written by gc. +// The Importer also satisfies types.ImporterFrom. +// +// Export data files are located using "go build" workspace conventions +// and the build.Default context. +// +// Use this importer instead of go/importer.For("gc", ...) to avoid the +// version-skew problems described in the documentation of this package, +// or to control the FileSet or access the imports map populated during +// package loading. +// +func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom { + return importer{fset, imports} +} + +type importer struct { + fset *token.FileSet + imports map[string]*types.Package +} + +func (imp importer) Import(importPath string) (*types.Package, error) { + return imp.ImportFrom(importPath, "", 0) +} + +func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) { + filename, path := Find(importPath, srcDir) + if filename == "" { + if importPath == "unsafe" { + // Even for unsafe, call Find first in case + // the package was vendored. + return types.Unsafe, nil + } + return nil, fmt.Errorf("can't find import: %s", importPath) + } + + if pkg, ok := imp.imports[path]; ok && pkg.Complete() { + return pkg, nil // cache hit + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + f.Close() + if err != nil { + // add file name to error + err = fmt.Errorf("reading export data: %s: %v", filename, err) + } + }() + + r, err := NewReader(f) + if err != nil { + return nil, err + } + + return Read(r, imp.fset, imp.imports, path) +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go b/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go new file mode 100644 index 0000000000..f33dc5613e --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go @@ -0,0 +1,93 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go. + +// This file implements FindExportData. + +package gcimporter + +import ( + "bufio" + "fmt" + "io" + "strconv" + "strings" +) + +func readGopackHeader(r *bufio.Reader) (name string, size int, err error) { + // See $GOROOT/include/ar.h. + hdr := make([]byte, 16+12+6+6+8+10+2) + _, err = io.ReadFull(r, hdr) + if err != nil { + return + } + // leave for debugging + if false { + fmt.Printf("header: %s", hdr) + } + s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10])) + size, err = strconv.Atoi(s) + if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' { + err = fmt.Errorf("invalid archive header") + return + } + name = strings.TrimSpace(string(hdr[:16])) + return +} + +// FindExportData positions the reader r at the beginning of the +// export data section of an underlying GC-created object/archive +// file by reading from it. The reader must be positioned at the +// start of the file before calling this function. The hdr result +// is the string before the export data, either "$$" or "$$B". +// +func FindExportData(r *bufio.Reader) (hdr string, err error) { + // Read first line to make sure this is an object file. + line, err := r.ReadSlice('\n') + if err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + + if string(line) == "!\n" { + // Archive file. Scan to __.PKGDEF. + var name string + if name, _, err = readGopackHeader(r); err != nil { + return + } + + // First entry should be __.PKGDEF. + if name != "__.PKGDEF" { + err = fmt.Errorf("go archive is missing __.PKGDEF") + return + } + + // Read first line of __.PKGDEF data, so that line + // is once again the first line of the input. + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + } + + // Now at __.PKGDEF in archive or still at beginning of file. + // Either way, line should begin with "go object ". + if !strings.HasPrefix(string(line), "go object ") { + err = fmt.Errorf("not a Go object file") + return + } + + // Skip over object header to export data. + // Begins after first line starting with $$. + for line[0] != '$' { + if line, err = r.ReadSlice('\n'); err != nil { + err = fmt.Errorf("can't find export data (%v)", err) + return + } + } + hdr = string(line) + + return +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go new file mode 100644 index 0000000000..6a9265ea94 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go @@ -0,0 +1,1075 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file is a modified copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go, +// but it also contains the original source-based importer code for Go1.6. +// Once we stop supporting 1.6, we can remove that code. + +// Package gcimporter provides various functions for reading +// gc-generated object files that can be used to implement the +// Importer interface defined by the Go 1.5 standard library package. +package gcimporter // import "golang.org/x/tools/go/internal/gcimporter" + +import ( + "bufio" + "errors" + "fmt" + "go/build" + "go/constant" + "go/token" + "go/types" + "io" + "io/ioutil" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "text/scanner" +) + +// debugging/development support +const debug = false + +var pkgExts = [...]string{".a", ".o"} + +// FindPkg returns the filename and unique package id for an import +// path based on package information provided by build.Import (using +// the build.Default build.Context). A relative srcDir is interpreted +// relative to the current working directory. +// If no file was found, an empty filename is returned. +// +func FindPkg(path, srcDir string) (filename, id string) { + if path == "" { + return + } + + var noext string + switch { + default: + // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" + // Don't require the source files to be present. + if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 + srcDir = abs + } + bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary) + if bp.PkgObj == "" { + id = path // make sure we have an id to print in error message + return + } + noext = strings.TrimSuffix(bp.PkgObj, ".a") + id = bp.ImportPath + + case build.IsLocalImport(path): + // "./x" -> "/this/directory/x.ext", "/this/directory/x" + noext = filepath.Join(srcDir, path) + id = noext + + case filepath.IsAbs(path): + // for completeness only - go/build.Import + // does not support absolute imports + // "/x" -> "/x.ext", "/x" + noext = path + id = path + } + + if false { // for debugging + if path != id { + fmt.Printf("%s -> %s\n", path, id) + } + } + + // try extensions + for _, ext := range pkgExts { + filename = noext + ext + if f, err := os.Stat(filename); err == nil && !f.IsDir() { + return + } + } + + filename = "" // not found + return +} + +// ImportData imports a package by reading the gc-generated export data, +// adds the corresponding package object to the packages map indexed by id, +// and returns the object. +// +// The packages map must contains all packages already imported. The data +// reader position must be the beginning of the export data section. The +// filename is only used in error messages. +// +// If packages[id] contains the completely imported package, that package +// can be used directly, and there is no need to call this function (but +// there is also no harm but for extra time used). +// +func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) { + // support for parser error handling + defer func() { + switch r := recover().(type) { + case nil: + // nothing to do + case importError: + err = r + default: + panic(r) // internal error + } + }() + + var p parser + p.init(filename, id, data, packages) + pkg = p.parseExport() + + return +} + +// Import imports a gc-generated package given its import path and srcDir, adds +// the corresponding package object to the packages map, and returns the object. +// The packages map must contain all packages already imported. +// +func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { + var rc io.ReadCloser + var filename, id string + if lookup != nil { + // With custom lookup specified, assume that caller has + // converted path to a canonical import path for use in the map. + if path == "unsafe" { + return types.Unsafe, nil + } + id = path + + // No need to re-import if the package was imported completely before. + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + f, err := lookup(path) + if err != nil { + return nil, err + } + rc = f + } else { + filename, id = FindPkg(path, srcDir) + if filename == "" { + if path == "unsafe" { + return types.Unsafe, nil + } + return nil, fmt.Errorf("can't find import: %q", id) + } + + // no need to re-import if the package was imported completely before + if pkg = packages[id]; pkg != nil && pkg.Complete() { + return + } + + // open file + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + // add file name to error + err = fmt.Errorf("%s: %v", filename, err) + } + }() + rc = f + } + defer rc.Close() + + var hdr string + buf := bufio.NewReader(rc) + if hdr, err = FindExportData(buf); err != nil { + return + } + + switch hdr { + case "$$\n": + // Work-around if we don't have a filename; happens only if lookup != nil. + // Either way, the filename is only needed for importer error messages, so + // this is fine. + if filename == "" { + filename = path + } + return ImportData(packages, filename, id, buf) + + case "$$B\n": + var data []byte + data, err = ioutil.ReadAll(buf) + if err != nil { + break + } + + // TODO(gri): allow clients of go/importer to provide a FileSet. + // Or, define a new standard go/types/gcexportdata package. + fset := token.NewFileSet() + + // The indexed export format starts with an 'i'. + if len(data) == 0 || data[0] != 'i' { + return nil, fmt.Errorf("unknown export data format") + } + _, pkg, err = IImportData(fset, packages, data[1:], id) + + default: + err = fmt.Errorf("unknown export data header: %q", hdr) + } + + return +} + +// ---------------------------------------------------------------------------- +// Parser + +// TODO(gri) Imported objects don't have position information. +// Ideally use the debug table line info; alternatively +// create some fake position (or the position of the +// import). That way error messages referring to imported +// objects can print meaningful information. + +// parser parses the exports inside a gc compiler-produced +// object/archive file and populates its scope with the results. +type parser struct { + scanner scanner.Scanner + tok rune // current token + lit string // literal string; only valid for Ident, Int, String tokens + id string // package id of imported package + sharedPkgs map[string]*types.Package // package id -> package object (across importer) + localPkgs map[string]*types.Package // package id -> package object (just this package) +} + +func (p *parser) init(filename, id string, src io.Reader, packages map[string]*types.Package) { + p.scanner.Init(src) + p.scanner.Error = func(_ *scanner.Scanner, msg string) { p.error(msg) } + p.scanner.Mode = scanner.ScanIdents | scanner.ScanInts | scanner.ScanChars | scanner.ScanStrings | scanner.ScanComments | scanner.SkipComments + p.scanner.Whitespace = 1<<'\t' | 1<<' ' + p.scanner.Filename = filename // for good error messages + p.next() + p.id = id + p.sharedPkgs = packages + if debug { + // check consistency of packages map + for _, pkg := range packages { + if pkg.Name() == "" { + fmt.Printf("no package name for %s\n", pkg.Path()) + } + } + } +} + +func (p *parser) next() { + p.tok = p.scanner.Scan() + switch p.tok { + case scanner.Ident, scanner.Int, scanner.Char, scanner.String, '·': + p.lit = p.scanner.TokenText() + default: + p.lit = "" + } + if debug { + fmt.Printf("%s: %q -> %q\n", scanner.TokenString(p.tok), p.scanner.TokenText(), p.lit) + } +} + +func declTypeName(pkg *types.Package, name string) *types.TypeName { + scope := pkg.Scope() + if obj := scope.Lookup(name); obj != nil { + return obj.(*types.TypeName) + } + obj := types.NewTypeName(token.NoPos, pkg, name, nil) + // a named type may be referred to before the underlying type + // is known - set it up + types.NewNamed(obj, nil, nil) + scope.Insert(obj) + return obj +} + +// ---------------------------------------------------------------------------- +// Error handling + +// Internal errors are boxed as importErrors. +type importError struct { + pos scanner.Position + err error +} + +func (e importError) Error() string { + return fmt.Sprintf("import error %s (byte offset = %d): %s", e.pos, e.pos.Offset, e.err) +} + +func (p *parser) error(err interface{}) { + if s, ok := err.(string); ok { + err = errors.New(s) + } + // panic with a runtime.Error if err is not an error + panic(importError{p.scanner.Pos(), err.(error)}) +} + +func (p *parser) errorf(format string, args ...interface{}) { + p.error(fmt.Sprintf(format, args...)) +} + +func (p *parser) expect(tok rune) string { + lit := p.lit + if p.tok != tok { + p.errorf("expected %s, got %s (%s)", scanner.TokenString(tok), scanner.TokenString(p.tok), lit) + } + p.next() + return lit +} + +func (p *parser) expectSpecial(tok string) { + sep := 'x' // not white space + i := 0 + for i < len(tok) && p.tok == rune(tok[i]) && sep > ' ' { + sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token + p.next() + i++ + } + if i < len(tok) { + p.errorf("expected %q, got %q", tok, tok[0:i]) + } +} + +func (p *parser) expectKeyword(keyword string) { + lit := p.expect(scanner.Ident) + if lit != keyword { + p.errorf("expected keyword %s, got %q", keyword, lit) + } +} + +// ---------------------------------------------------------------------------- +// Qualified and unqualified names + +// PackageId = string_lit . +// +func (p *parser) parsePackageID() string { + id, err := strconv.Unquote(p.expect(scanner.String)) + if err != nil { + p.error(err) + } + // id == "" stands for the imported package id + // (only known at time of package installation) + if id == "" { + id = p.id + } + return id +} + +// PackageName = ident . +// +func (p *parser) parsePackageName() string { + return p.expect(scanner.Ident) +} + +// dotIdentifier = ( ident | '·' ) { ident | int | '·' } . +func (p *parser) parseDotIdent() string { + ident := "" + if p.tok != scanner.Int { + sep := 'x' // not white space + for (p.tok == scanner.Ident || p.tok == scanner.Int || p.tok == '·') && sep > ' ' { + ident += p.lit + sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token + p.next() + } + } + if ident == "" { + p.expect(scanner.Ident) // use expect() for error handling + } + return ident +} + +// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) . +// +func (p *parser) parseQualifiedName() (id, name string) { + p.expect('@') + id = p.parsePackageID() + p.expect('.') + // Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields. + if p.tok == '?' { + p.next() + } else { + name = p.parseDotIdent() + } + return +} + +// getPkg returns the package for a given id. If the package is +// not found, create the package and add it to the p.localPkgs +// and p.sharedPkgs maps. name is the (expected) name of the +// package. If name == "", the package name is expected to be +// set later via an import clause in the export data. +// +// id identifies a package, usually by a canonical package path like +// "encoding/json" but possibly by a non-canonical import path like +// "./json". +// +func (p *parser) getPkg(id, name string) *types.Package { + // package unsafe is not in the packages maps - handle explicitly + if id == "unsafe" { + return types.Unsafe + } + + pkg := p.localPkgs[id] + if pkg == nil { + // first import of id from this package + pkg = p.sharedPkgs[id] + if pkg == nil { + // first import of id by this importer; + // add (possibly unnamed) pkg to shared packages + pkg = types.NewPackage(id, name) + p.sharedPkgs[id] = pkg + } + // add (possibly unnamed) pkg to local packages + if p.localPkgs == nil { + p.localPkgs = make(map[string]*types.Package) + } + p.localPkgs[id] = pkg + } else if name != "" { + // package exists already and we have an expected package name; + // make sure names match or set package name if necessary + if pname := pkg.Name(); pname == "" { + pkg.SetName(name) + } else if pname != name { + p.errorf("%s package name mismatch: %s (given) vs %s (expected)", id, pname, name) + } + } + return pkg +} + +// parseExportedName is like parseQualifiedName, but +// the package id is resolved to an imported *types.Package. +// +func (p *parser) parseExportedName() (pkg *types.Package, name string) { + id, name := p.parseQualifiedName() + pkg = p.getPkg(id, "") + return +} + +// ---------------------------------------------------------------------------- +// Types + +// BasicType = identifier . +// +func (p *parser) parseBasicType() types.Type { + id := p.expect(scanner.Ident) + obj := types.Universe.Lookup(id) + if obj, ok := obj.(*types.TypeName); ok { + return obj.Type() + } + p.errorf("not a basic type: %s", id) + return nil +} + +// ArrayType = "[" int_lit "]" Type . +// +func (p *parser) parseArrayType(parent *types.Package) types.Type { + // "[" already consumed and lookahead known not to be "]" + lit := p.expect(scanner.Int) + p.expect(']') + elem := p.parseType(parent) + n, err := strconv.ParseInt(lit, 10, 64) + if err != nil { + p.error(err) + } + return types.NewArray(elem, n) +} + +// MapType = "map" "[" Type "]" Type . +// +func (p *parser) parseMapType(parent *types.Package) types.Type { + p.expectKeyword("map") + p.expect('[') + key := p.parseType(parent) + p.expect(']') + elem := p.parseType(parent) + return types.NewMap(key, elem) +} + +// Name = identifier | "?" | QualifiedName . +// +// For unqualified and anonymous names, the returned package is the parent +// package unless parent == nil, in which case the returned package is the +// package being imported. (The parent package is not nil if the the name +// is an unqualified struct field or interface method name belonging to a +// type declared in another package.) +// +// For qualified names, the returned package is nil (and not created if +// it doesn't exist yet) unless materializePkg is set (which creates an +// unnamed package with valid package path). In the latter case, a +// subsequent import clause is expected to provide a name for the package. +// +func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) { + pkg = parent + if pkg == nil { + pkg = p.sharedPkgs[p.id] + } + switch p.tok { + case scanner.Ident: + name = p.lit + p.next() + case '?': + // anonymous + p.next() + case '@': + // exported name prefixed with package path + pkg = nil + var id string + id, name = p.parseQualifiedName() + if materializePkg { + pkg = p.getPkg(id, "") + } + default: + p.error("name expected") + } + return +} + +func deref(typ types.Type) types.Type { + if p, _ := typ.(*types.Pointer); p != nil { + return p.Elem() + } + return typ +} + +// Field = Name Type [ string_lit ] . +// +func (p *parser) parseField(parent *types.Package) (*types.Var, string) { + pkg, name := p.parseName(parent, true) + + if name == "_" { + // Blank fields should be package-qualified because they + // are unexported identifiers, but gc does not qualify them. + // Assuming that the ident belongs to the current package + // causes types to change during re-exporting, leading + // to spurious "can't assign A to B" errors from go/types. + // As a workaround, pretend all blank fields belong + // to the same unique dummy package. + const blankpkg = "<_>" + pkg = p.getPkg(blankpkg, blankpkg) + } + + typ := p.parseType(parent) + anonymous := false + if name == "" { + // anonymous field - typ must be T or *T and T must be a type name + switch typ := deref(typ).(type) { + case *types.Basic: // basic types are named types + pkg = nil // objects defined in Universe scope have no package + name = typ.Name() + case *types.Named: + name = typ.Obj().Name() + default: + p.errorf("anonymous field expected") + } + anonymous = true + } + tag := "" + if p.tok == scanner.String { + s := p.expect(scanner.String) + var err error + tag, err = strconv.Unquote(s) + if err != nil { + p.errorf("invalid struct tag %s: %s", s, err) + } + } + return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag +} + +// StructType = "struct" "{" [ FieldList ] "}" . +// FieldList = Field { ";" Field } . +// +func (p *parser) parseStructType(parent *types.Package) types.Type { + var fields []*types.Var + var tags []string + + p.expectKeyword("struct") + p.expect('{') + for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { + if i > 0 { + p.expect(';') + } + fld, tag := p.parseField(parent) + if tag != "" && tags == nil { + tags = make([]string, i) + } + if tags != nil { + tags = append(tags, tag) + } + fields = append(fields, fld) + } + p.expect('}') + + return types.NewStruct(fields, tags) +} + +// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] . +// +func (p *parser) parseParameter() (par *types.Var, isVariadic bool) { + _, name := p.parseName(nil, false) + // remove gc-specific parameter numbering + if i := strings.Index(name, "·"); i >= 0 { + name = name[:i] + } + if p.tok == '.' { + p.expectSpecial("...") + isVariadic = true + } + typ := p.parseType(nil) + if isVariadic { + typ = types.NewSlice(typ) + } + // ignore argument tag (e.g. "noescape") + if p.tok == scanner.String { + p.next() + } + // TODO(gri) should we provide a package? + par = types.NewVar(token.NoPos, nil, name, typ) + return +} + +// Parameters = "(" [ ParameterList ] ")" . +// ParameterList = { Parameter "," } Parameter . +// +func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) { + p.expect('(') + for p.tok != ')' && p.tok != scanner.EOF { + if len(list) > 0 { + p.expect(',') + } + par, variadic := p.parseParameter() + list = append(list, par) + if variadic { + if isVariadic { + p.error("... not on final argument") + } + isVariadic = true + } + } + p.expect(')') + + return +} + +// Signature = Parameters [ Result ] . +// Result = Type | Parameters . +// +func (p *parser) parseSignature(recv *types.Var) *types.Signature { + params, isVariadic := p.parseParameters() + + // optional result type + var results []*types.Var + if p.tok == '(' { + var variadic bool + results, variadic = p.parseParameters() + if variadic { + p.error("... not permitted on result type") + } + } + + return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic) +} + +// InterfaceType = "interface" "{" [ MethodList ] "}" . +// MethodList = Method { ";" Method } . +// Method = Name Signature . +// +// The methods of embedded interfaces are always "inlined" +// by the compiler and thus embedded interfaces are never +// visible in the export data. +// +func (p *parser) parseInterfaceType(parent *types.Package) types.Type { + var methods []*types.Func + + p.expectKeyword("interface") + p.expect('{') + for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ { + if i > 0 { + p.expect(';') + } + pkg, name := p.parseName(parent, true) + sig := p.parseSignature(nil) + methods = append(methods, types.NewFunc(token.NoPos, pkg, name, sig)) + } + p.expect('}') + + // Complete requires the type's embedded interfaces to be fully defined, + // but we do not define any + return newInterface(methods, nil).Complete() +} + +// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type . +// +func (p *parser) parseChanType(parent *types.Package) types.Type { + dir := types.SendRecv + if p.tok == scanner.Ident { + p.expectKeyword("chan") + if p.tok == '<' { + p.expectSpecial("<-") + dir = types.SendOnly + } + } else { + p.expectSpecial("<-") + p.expectKeyword("chan") + dir = types.RecvOnly + } + elem := p.parseType(parent) + return types.NewChan(dir, elem) +} + +// Type = +// BasicType | TypeName | ArrayType | SliceType | StructType | +// PointerType | FuncType | InterfaceType | MapType | ChanType | +// "(" Type ")" . +// +// BasicType = ident . +// TypeName = ExportedName . +// SliceType = "[" "]" Type . +// PointerType = "*" Type . +// FuncType = "func" Signature . +// +func (p *parser) parseType(parent *types.Package) types.Type { + switch p.tok { + case scanner.Ident: + switch p.lit { + default: + return p.parseBasicType() + case "struct": + return p.parseStructType(parent) + case "func": + // FuncType + p.next() + return p.parseSignature(nil) + case "interface": + return p.parseInterfaceType(parent) + case "map": + return p.parseMapType(parent) + case "chan": + return p.parseChanType(parent) + } + case '@': + // TypeName + pkg, name := p.parseExportedName() + return declTypeName(pkg, name).Type() + case '[': + p.next() // look ahead + if p.tok == ']' { + // SliceType + p.next() + return types.NewSlice(p.parseType(parent)) + } + return p.parseArrayType(parent) + case '*': + // PointerType + p.next() + return types.NewPointer(p.parseType(parent)) + case '<': + return p.parseChanType(parent) + case '(': + // "(" Type ")" + p.next() + typ := p.parseType(parent) + p.expect(')') + return typ + } + p.errorf("expected type, got %s (%q)", scanner.TokenString(p.tok), p.lit) + return nil +} + +// ---------------------------------------------------------------------------- +// Declarations + +// ImportDecl = "import" PackageName PackageId . +// +func (p *parser) parseImportDecl() { + p.expectKeyword("import") + name := p.parsePackageName() + p.getPkg(p.parsePackageID(), name) +} + +// int_lit = [ "+" | "-" ] { "0" ... "9" } . +// +func (p *parser) parseInt() string { + s := "" + switch p.tok { + case '-': + s = "-" + p.next() + case '+': + p.next() + } + return s + p.expect(scanner.Int) +} + +// number = int_lit [ "p" int_lit ] . +// +func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) { + // mantissa + mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0) + if mant == nil { + panic("invalid mantissa") + } + + if p.lit == "p" { + // exponent (base 2) + p.next() + exp, err := strconv.ParseInt(p.parseInt(), 10, 0) + if err != nil { + p.error(err) + } + if exp < 0 { + denom := constant.MakeInt64(1) + denom = constant.Shift(denom, token.SHL, uint(-exp)) + typ = types.Typ[types.UntypedFloat] + val = constant.BinaryOp(mant, token.QUO, denom) + return + } + if exp > 0 { + mant = constant.Shift(mant, token.SHL, uint(exp)) + } + typ = types.Typ[types.UntypedFloat] + val = mant + return + } + + typ = types.Typ[types.UntypedInt] + val = mant + return +} + +// ConstDecl = "const" ExportedName [ Type ] "=" Literal . +// Literal = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit . +// bool_lit = "true" | "false" . +// complex_lit = "(" float_lit "+" float_lit "i" ")" . +// rune_lit = "(" int_lit "+" int_lit ")" . +// string_lit = `"` { unicode_char } `"` . +// +func (p *parser) parseConstDecl() { + p.expectKeyword("const") + pkg, name := p.parseExportedName() + + var typ0 types.Type + if p.tok != '=' { + // constant types are never structured - no need for parent type + typ0 = p.parseType(nil) + } + + p.expect('=') + var typ types.Type + var val constant.Value + switch p.tok { + case scanner.Ident: + // bool_lit + if p.lit != "true" && p.lit != "false" { + p.error("expected true or false") + } + typ = types.Typ[types.UntypedBool] + val = constant.MakeBool(p.lit == "true") + p.next() + + case '-', scanner.Int: + // int_lit + typ, val = p.parseNumber() + + case '(': + // complex_lit or rune_lit + p.next() + if p.tok == scanner.Char { + p.next() + p.expect('+') + typ = types.Typ[types.UntypedRune] + _, val = p.parseNumber() + p.expect(')') + break + } + _, re := p.parseNumber() + p.expect('+') + _, im := p.parseNumber() + p.expectKeyword("i") + p.expect(')') + typ = types.Typ[types.UntypedComplex] + val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + + case scanner.Char: + // rune_lit + typ = types.Typ[types.UntypedRune] + val = constant.MakeFromLiteral(p.lit, token.CHAR, 0) + p.next() + + case scanner.String: + // string_lit + typ = types.Typ[types.UntypedString] + val = constant.MakeFromLiteral(p.lit, token.STRING, 0) + p.next() + + default: + p.errorf("expected literal got %s", scanner.TokenString(p.tok)) + } + + if typ0 == nil { + typ0 = typ + } + + pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val)) +} + +// TypeDecl = "type" ExportedName Type . +// +func (p *parser) parseTypeDecl() { + p.expectKeyword("type") + pkg, name := p.parseExportedName() + obj := declTypeName(pkg, name) + + // The type object may have been imported before and thus already + // have a type associated with it. We still need to parse the type + // structure, but throw it away if the object already has a type. + // This ensures that all imports refer to the same type object for + // a given type declaration. + typ := p.parseType(pkg) + + if name := obj.Type().(*types.Named); name.Underlying() == nil { + name.SetUnderlying(typ) + } +} + +// VarDecl = "var" ExportedName Type . +// +func (p *parser) parseVarDecl() { + p.expectKeyword("var") + pkg, name := p.parseExportedName() + typ := p.parseType(pkg) + pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ)) +} + +// Func = Signature [ Body ] . +// Body = "{" ... "}" . +// +func (p *parser) parseFunc(recv *types.Var) *types.Signature { + sig := p.parseSignature(recv) + if p.tok == '{' { + p.next() + for i := 1; i > 0; p.next() { + switch p.tok { + case '{': + i++ + case '}': + i-- + } + } + } + return sig +} + +// MethodDecl = "func" Receiver Name Func . +// Receiver = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" . +// +func (p *parser) parseMethodDecl() { + // "func" already consumed + p.expect('(') + recv, _ := p.parseParameter() // receiver + p.expect(')') + + // determine receiver base type object + base := deref(recv.Type()).(*types.Named) + + // parse method name, signature, and possibly inlined body + _, name := p.parseName(nil, false) + sig := p.parseFunc(recv) + + // methods always belong to the same package as the base type object + pkg := base.Obj().Pkg() + + // add method to type unless type was imported before + // and method exists already + // TODO(gri) This leads to a quadratic algorithm - ok for now because method counts are small. + base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig)) +} + +// FuncDecl = "func" ExportedName Func . +// +func (p *parser) parseFuncDecl() { + // "func" already consumed + pkg, name := p.parseExportedName() + typ := p.parseFunc(nil) + pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ)) +} + +// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" . +// +func (p *parser) parseDecl() { + if p.tok == scanner.Ident { + switch p.lit { + case "import": + p.parseImportDecl() + case "const": + p.parseConstDecl() + case "type": + p.parseTypeDecl() + case "var": + p.parseVarDecl() + case "func": + p.next() // look ahead + if p.tok == '(' { + p.parseMethodDecl() + } else { + p.parseFuncDecl() + } + } + } + p.expect('\n') +} + +// ---------------------------------------------------------------------------- +// Export + +// Export = "PackageClause { Decl } "$$" . +// PackageClause = "package" PackageName [ "safe" ] "\n" . +// +func (p *parser) parseExport() *types.Package { + p.expectKeyword("package") + name := p.parsePackageName() + if p.tok == scanner.Ident && p.lit == "safe" { + // package was compiled with -u option - ignore + p.next() + } + p.expect('\n') + + pkg := p.getPkg(p.id, name) + + for p.tok != '$' && p.tok != scanner.EOF { + p.parseDecl() + } + + if ch := p.scanner.Peek(); p.tok != '$' || ch != '$' { + // don't call next()/expect() since reading past the + // export data may cause scanner errors (e.g. NUL chars) + p.errorf("expected '$$', got %s %c", scanner.TokenString(p.tok), ch) + } + + if n := p.scanner.ErrorCount; n != 0 { + p.errorf("expected no scanner errors, got %d", n) + } + + // Record all locally referenced packages as imports. + var imports []*types.Package + for id, pkg2 := range p.localPkgs { + if pkg2.Name() == "" { + p.errorf("%s package has no name", id) + } + if id == p.id { + continue // avoid self-edge + } + imports = append(imports, pkg2) + } + sort.Sort(byPath(imports)) + pkg.SetImports(imports) + + // package was imported completely and without errors + pkg.MarkComplete() + + return pkg +} + +type byPath []*types.Package + +func (a byPath) Len() int { return len(a) } +func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go new file mode 100644 index 0000000000..858eb9f456 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go @@ -0,0 +1,759 @@ +// Copyright 2019 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. + +// Indexed binary package export. +// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go; +// see that file for specification of the format. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/ast" + "go/constant" + "go/token" + "go/types" + "io" + "math/big" + "reflect" + "sort" +) + +// Current indexed export format version. Increase with each format change. +// 0: Go1.11 encoding +const iexportVersion = 0 + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +func internalErrorf(format string, args ...interface{}) error { + return internalError(fmt.Sprintf(format, args...)) +} + +// IExportData returns the binary export data for pkg. +// +// If no file set is provided, position info will be missing. +// The package path of the top-level package will not be recorded, +// so that calls to IImportData can override with a provided package path. +func IExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { + defer func() { + if e := recover(); e != nil { + if ierr, ok := e.(internalError); ok { + err = ierr + return + } + // Not an internal error; panic again. + panic(e) + } + }() + + p := iexporter{ + out: bytes.NewBuffer(nil), + fset: fset, + allPkgs: map[*types.Package]bool{}, + stringIndex: map[string]uint64{}, + declIndex: map[types.Object]uint64{}, + typIndex: map[types.Type]uint64{}, + localpkg: pkg, + } + + for i, pt := range predeclared() { + p.typIndex[pt] = uint64(i) + } + if len(p.typIndex) > predeclReserved { + panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved)) + } + + // Initialize work queue with exported declarations. + scope := pkg.Scope() + for _, name := range scope.Names() { + if ast.IsExported(name) { + p.pushDecl(scope.Lookup(name)) + } + } + + // Loop until no more work. + for !p.declTodo.empty() { + p.doDecl(p.declTodo.popHead()) + } + + // Append indices to data0 section. + dataLen := uint64(p.data0.Len()) + w := p.newWriter() + w.writeIndex(p.declIndex) + w.flush() + + // Assemble header. + var hdr intWriter + hdr.WriteByte('i') + hdr.uint64(iexportVersion) + hdr.uint64(uint64(p.strings.Len())) + hdr.uint64(dataLen) + + // Flush output. + io.Copy(p.out, &hdr) + io.Copy(p.out, &p.strings) + io.Copy(p.out, &p.data0) + + return p.out.Bytes(), nil +} + +// writeIndex writes out an object index. mainIndex indicates whether +// we're writing out the main index, which is also read by +// non-compiler tools and includes a complete package description +// (i.e., name and height). +func (w *exportWriter) writeIndex(index map[types.Object]uint64) { + // Build a map from packages to objects from that package. + pkgObjs := map[*types.Package][]types.Object{} + + // For the main index, make sure to include every package that + // we reference, even if we're not exporting (or reexporting) + // any symbols from it. + pkgObjs[w.p.localpkg] = nil + for pkg := range w.p.allPkgs { + pkgObjs[pkg] = nil + } + + for obj := range index { + pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], obj) + } + + var pkgs []*types.Package + for pkg, objs := range pkgObjs { + pkgs = append(pkgs, pkg) + + sort.Slice(objs, func(i, j int) bool { + return objs[i].Name() < objs[j].Name() + }) + } + + sort.Slice(pkgs, func(i, j int) bool { + return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j]) + }) + + w.uint64(uint64(len(pkgs))) + for _, pkg := range pkgs { + w.string(w.exportPath(pkg)) + w.string(pkg.Name()) + w.uint64(uint64(0)) // package height is not needed for go/types + + objs := pkgObjs[pkg] + w.uint64(uint64(len(objs))) + for _, obj := range objs { + w.string(obj.Name()) + w.uint64(index[obj]) + } + } +} + +type iexporter struct { + fset *token.FileSet + out *bytes.Buffer + + localpkg *types.Package + + // allPkgs tracks all packages that have been referenced by + // the export data, so we can ensure to include them in the + // main index. + allPkgs map[*types.Package]bool + + declTodo objQueue + + strings intWriter + stringIndex map[string]uint64 + + data0 intWriter + declIndex map[types.Object]uint64 + typIndex map[types.Type]uint64 +} + +// stringOff returns the offset of s within the string section. +// If not already present, it's added to the end. +func (p *iexporter) stringOff(s string) uint64 { + off, ok := p.stringIndex[s] + if !ok { + off = uint64(p.strings.Len()) + p.stringIndex[s] = off + + p.strings.uint64(uint64(len(s))) + p.strings.WriteString(s) + } + return off +} + +// pushDecl adds n to the declaration work queue, if not already present. +func (p *iexporter) pushDecl(obj types.Object) { + // Package unsafe is known to the compiler and predeclared. + assert(obj.Pkg() != types.Unsafe) + + if _, ok := p.declIndex[obj]; ok { + return + } + + p.declIndex[obj] = ^uint64(0) // mark n present in work queue + p.declTodo.pushTail(obj) +} + +// exportWriter handles writing out individual data section chunks. +type exportWriter struct { + p *iexporter + + data intWriter + currPkg *types.Package + prevFile string + prevLine int64 +} + +func (w *exportWriter) exportPath(pkg *types.Package) string { + if pkg == w.p.localpkg { + return "" + } + return pkg.Path() +} + +func (p *iexporter) doDecl(obj types.Object) { + w := p.newWriter() + w.setPkg(obj.Pkg(), false) + + switch obj := obj.(type) { + case *types.Var: + w.tag('V') + w.pos(obj.Pos()) + w.typ(obj.Type(), obj.Pkg()) + + case *types.Func: + sig, _ := obj.Type().(*types.Signature) + if sig.Recv() != nil { + panic(internalErrorf("unexpected method: %v", sig)) + } + w.tag('F') + w.pos(obj.Pos()) + w.signature(sig) + + case *types.Const: + w.tag('C') + w.pos(obj.Pos()) + w.value(obj.Type(), obj.Val()) + + case *types.TypeName: + if obj.IsAlias() { + w.tag('A') + w.pos(obj.Pos()) + w.typ(obj.Type(), obj.Pkg()) + break + } + + // Defined type. + w.tag('T') + w.pos(obj.Pos()) + + underlying := obj.Type().Underlying() + w.typ(underlying, obj.Pkg()) + + t := obj.Type() + if types.IsInterface(t) { + break + } + + named, ok := t.(*types.Named) + if !ok { + panic(internalErrorf("%s is not a defined type", t)) + } + + n := named.NumMethods() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + m := named.Method(i) + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + w.param(sig.Recv()) + w.signature(sig) + } + + default: + panic(internalErrorf("unexpected object: %v", obj)) + } + + p.declIndex[obj] = w.flush() +} + +func (w *exportWriter) tag(tag byte) { + w.data.WriteByte(tag) +} + +func (w *exportWriter) pos(pos token.Pos) { + if w.p.fset == nil { + w.int64(0) + return + } + + p := w.p.fset.Position(pos) + file := p.Filename + line := int64(p.Line) + + // When file is the same as the last position (common case), + // we can save a few bytes by delta encoding just the line + // number. + // + // Note: Because data objects may be read out of order (or not + // at all), we can only apply delta encoding within a single + // object. This is handled implicitly by tracking prevFile and + // prevLine as fields of exportWriter. + + if file == w.prevFile { + delta := line - w.prevLine + w.int64(delta) + if delta == deltaNewFile { + w.int64(-1) + } + } else { + w.int64(deltaNewFile) + w.int64(line) // line >= 0 + w.string(file) + w.prevFile = file + } + w.prevLine = line +} + +func (w *exportWriter) pkg(pkg *types.Package) { + // Ensure any referenced packages are declared in the main index. + w.p.allPkgs[pkg] = true + + w.string(w.exportPath(pkg)) +} + +func (w *exportWriter) qualifiedIdent(obj types.Object) { + // Ensure any referenced declarations are written out too. + w.p.pushDecl(obj) + + w.string(obj.Name()) + w.pkg(obj.Pkg()) +} + +func (w *exportWriter) typ(t types.Type, pkg *types.Package) { + w.data.uint64(w.p.typOff(t, pkg)) +} + +func (p *iexporter) newWriter() *exportWriter { + return &exportWriter{p: p} +} + +func (w *exportWriter) flush() uint64 { + off := uint64(w.p.data0.Len()) + io.Copy(&w.p.data0, &w.data) + return off +} + +func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 { + off, ok := p.typIndex[t] + if !ok { + w := p.newWriter() + w.doTyp(t, pkg) + off = predeclReserved + w.flush() + p.typIndex[t] = off + } + return off +} + +func (w *exportWriter) startType(k itag) { + w.data.uint64(uint64(k)) +} + +func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { + switch t := t.(type) { + case *types.Named: + w.startType(definedType) + w.qualifiedIdent(t.Obj()) + + case *types.Pointer: + w.startType(pointerType) + w.typ(t.Elem(), pkg) + + case *types.Slice: + w.startType(sliceType) + w.typ(t.Elem(), pkg) + + case *types.Array: + w.startType(arrayType) + w.uint64(uint64(t.Len())) + w.typ(t.Elem(), pkg) + + case *types.Chan: + w.startType(chanType) + // 1 RecvOnly; 2 SendOnly; 3 SendRecv + var dir uint64 + switch t.Dir() { + case types.RecvOnly: + dir = 1 + case types.SendOnly: + dir = 2 + case types.SendRecv: + dir = 3 + } + w.uint64(dir) + w.typ(t.Elem(), pkg) + + case *types.Map: + w.startType(mapType) + w.typ(t.Key(), pkg) + w.typ(t.Elem(), pkg) + + case *types.Signature: + w.startType(signatureType) + w.setPkg(pkg, true) + w.signature(t) + + case *types.Struct: + w.startType(structType) + w.setPkg(pkg, true) + + n := t.NumFields() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + f := t.Field(i) + w.pos(f.Pos()) + w.string(f.Name()) + w.typ(f.Type(), pkg) + w.bool(f.Anonymous()) + w.string(t.Tag(i)) // note (or tag) + } + + case *types.Interface: + w.startType(interfaceType) + w.setPkg(pkg, true) + + n := t.NumEmbeddeds() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + f := t.Embedded(i) + w.pos(f.Obj().Pos()) + w.typ(f.Obj().Type(), f.Obj().Pkg()) + } + + n = t.NumExplicitMethods() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + m := t.ExplicitMethod(i) + w.pos(m.Pos()) + w.string(m.Name()) + sig, _ := m.Type().(*types.Signature) + w.signature(sig) + } + + default: + panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t))) + } +} + +func (w *exportWriter) setPkg(pkg *types.Package, write bool) { + if write { + w.pkg(pkg) + } + + w.currPkg = pkg +} + +func (w *exportWriter) signature(sig *types.Signature) { + w.paramList(sig.Params()) + w.paramList(sig.Results()) + if sig.Params().Len() > 0 { + w.bool(sig.Variadic()) + } +} + +func (w *exportWriter) paramList(tup *types.Tuple) { + n := tup.Len() + w.uint64(uint64(n)) + for i := 0; i < n; i++ { + w.param(tup.At(i)) + } +} + +func (w *exportWriter) param(obj types.Object) { + w.pos(obj.Pos()) + w.localIdent(obj) + w.typ(obj.Type(), obj.Pkg()) +} + +func (w *exportWriter) value(typ types.Type, v constant.Value) { + w.typ(typ, nil) + + switch v.Kind() { + case constant.Bool: + w.bool(constant.BoolVal(v)) + case constant.Int: + var i big.Int + if i64, exact := constant.Int64Val(v); exact { + i.SetInt64(i64) + } else if ui64, exact := constant.Uint64Val(v); exact { + i.SetUint64(ui64) + } else { + i.SetString(v.ExactString(), 10) + } + w.mpint(&i, typ) + case constant.Float: + f := constantToFloat(v) + w.mpfloat(f, typ) + case constant.Complex: + w.mpfloat(constantToFloat(constant.Real(v)), typ) + w.mpfloat(constantToFloat(constant.Imag(v)), typ) + case constant.String: + w.string(constant.StringVal(v)) + case constant.Unknown: + // package contains type errors + default: + panic(internalErrorf("unexpected value %v (%T)", v, v)) + } +} + +// constantToFloat converts a constant.Value with kind constant.Float to a +// big.Float. +func constantToFloat(x constant.Value) *big.Float { + assert(x.Kind() == constant.Float) + // Use the same floating-point precision (512) as cmd/compile + // (see Mpprec in cmd/compile/internal/gc/mpfloat.go). + const mpprec = 512 + var f big.Float + f.SetPrec(mpprec) + if v, exact := constant.Float64Val(x); exact { + // float64 + f.SetFloat64(v) + } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { + // TODO(gri): add big.Rat accessor to constant.Value. + n := valueToRat(num) + d := valueToRat(denom) + f.SetRat(n.Quo(n, d)) + } else { + // Value too large to represent as a fraction => inaccessible. + // TODO(gri): add big.Float accessor to constant.Value. + _, ok := f.SetString(x.ExactString()) + assert(ok) + } + return &f +} + +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + +// mpint exports a multi-precision integer. +// +// For unsigned types, small values are written out as a single +// byte. Larger values are written out as a length-prefixed big-endian +// byte string, where the length prefix is encoded as its complement. +// For example, bytes 0, 1, and 2 directly represent the integer +// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-, +// 2-, and 3-byte big-endian string follow. +// +// Encoding for signed types use the same general approach as for +// unsigned types, except small values use zig-zag encoding and the +// bottom bit of length prefix byte for large values is reserved as a +// sign bit. +// +// The exact boundary between small and large encodings varies +// according to the maximum number of bytes needed to encode a value +// of type typ. As a special case, 8-bit types are always encoded as a +// single byte. +// +// TODO(mdempsky): Is this level of complexity really worthwhile? +func (w *exportWriter) mpint(x *big.Int, typ types.Type) { + basic, ok := typ.Underlying().(*types.Basic) + if !ok { + panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying())) + } + + signed, maxBytes := intSize(basic) + + negative := x.Sign() < 0 + if !signed && negative { + panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x)) + } + + b := x.Bytes() + if len(b) > 0 && b[0] == 0 { + panic(internalErrorf("leading zeros")) + } + if uint(len(b)) > maxBytes { + panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x)) + } + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + // Check if x can use small value encoding. + if len(b) <= 1 { + var ux uint + if len(b) == 1 { + ux = uint(b[0]) + } + if signed { + ux <<= 1 + if negative { + ux-- + } + } + if ux < maxSmall { + w.data.WriteByte(byte(ux)) + return + } + } + + n := 256 - uint(len(b)) + if signed { + n = 256 - 2*uint(len(b)) + if negative { + n |= 1 + } + } + if n < maxSmall || n >= 256 { + panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n)) + } + + w.data.WriteByte(byte(n)) + w.data.Write(b) +} + +// mpfloat exports a multi-precision floating point number. +// +// The number's value is decomposed into mantissa × 2**exponent, where +// mantissa is an integer. The value is written out as mantissa (as a +// multi-precision integer) and then the exponent, except exponent is +// omitted if mantissa is zero. +func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) { + if f.IsInf() { + panic("infinite constant") + } + + // Break into f = mant × 2**exp, with 0.5 <= mant < 1. + var mant big.Float + exp := int64(f.MantExp(&mant)) + + // Scale so that mant is an integer. + prec := mant.MinPrec() + mant.SetMantExp(&mant, int(prec)) + exp -= int64(prec) + + manti, acc := mant.Int(nil) + if acc != big.Exact { + panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc)) + } + w.mpint(manti, typ) + if manti.Sign() != 0 { + w.int64(exp) + } +} + +func (w *exportWriter) bool(b bool) bool { + var x uint64 + if b { + x = 1 + } + w.uint64(x) + return b +} + +func (w *exportWriter) int64(x int64) { w.data.int64(x) } +func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) } +func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) } + +func (w *exportWriter) localIdent(obj types.Object) { + // Anonymous parameters. + if obj == nil { + w.string("") + return + } + + name := obj.Name() + if name == "_" { + w.string("_") + return + } + + w.string(name) +} + +type intWriter struct { + bytes.Buffer +} + +func (w *intWriter) int64(x int64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutVarint(buf[:], x) + w.Write(buf[:n]) +} + +func (w *intWriter) uint64(x uint64) { + var buf [binary.MaxVarintLen64]byte + n := binary.PutUvarint(buf[:], x) + w.Write(buf[:n]) +} + +func assert(cond bool) { + if !cond { + panic("internal error: assertion failed") + } +} + +// The below is copied from go/src/cmd/compile/internal/gc/syntax.go. + +// objQueue is a FIFO queue of types.Object. The zero value of objQueue is +// a ready-to-use empty queue. +type objQueue struct { + ring []types.Object + head, tail int +} + +// empty returns true if q contains no Nodes. +func (q *objQueue) empty() bool { + return q.head == q.tail +} + +// pushTail appends n to the tail of the queue. +func (q *objQueue) pushTail(obj types.Object) { + if len(q.ring) == 0 { + q.ring = make([]types.Object, 16) + } else if q.head+len(q.ring) == q.tail { + // Grow the ring. + nring := make([]types.Object, len(q.ring)*2) + // Copy the old elements. + part := q.ring[q.head%len(q.ring):] + if q.tail-q.head <= len(part) { + part = part[:q.tail-q.head] + copy(nring, part) + } else { + pos := copy(nring, part) + copy(nring[pos:], q.ring[:q.tail%len(q.ring)]) + } + q.ring, q.head, q.tail = nring, 0, q.tail-q.head + } + + q.ring[q.tail%len(q.ring)] = obj + q.tail++ +} + +// popHead pops a node from the head of the queue. It panics if q is empty. +func (q *objQueue) popHead() types.Object { + if q.empty() { + panic("dequeue empty") + } + obj := q.ring[q.head%len(q.ring)] + q.head++ + return obj +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go new file mode 100644 index 0000000000..fef8b30080 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go @@ -0,0 +1,800 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Indexed package import. +// See cmd/compile/internal/gc/iexport.go for the export data format. + +// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go. + +package gcimporter + +import ( + "bytes" + "encoding/binary" + "fmt" + "go/constant" + "go/token" + "go/types" + "io" + "sort" + "sync" + "unicode" + "unicode/utf8" +) + +type intReader struct { + *bytes.Reader + path string +} + +func errorf(format string, args ...interface{}) { + panic(fmt.Sprintf(format, args...)) +} + +func (r *intReader) int64() int64 { + i, err := binary.ReadVarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +func (r *intReader) uint64() uint64 { + i, err := binary.ReadUvarint(r.Reader) + if err != nil { + errorf("import %q: read varint error: %v", r.path, err) + } + return i +} + +const predeclReserved = 32 + +type itag uint64 + +const ( + // Types + definedType itag = iota + pointerType + sliceType + arrayType + chanType + mapType + signatureType + structType + interfaceType +) + +// IImportData imports a package from the serialized package data +// and returns the number of bytes consumed and a reference to the package. +// If the export data version is not recognized or the format is otherwise +// compromised, an error is returned. +func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + const currentVersion = 1 + version := int64(-1) + defer func() { + if e := recover(); e != nil { + if version > currentVersion { + err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) + } else { + err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + } + } + }() + + r := &intReader{bytes.NewReader(data), path} + + version = int64(r.uint64()) + switch version { + case currentVersion, 0: + default: + errorf("unknown iexport format version %d", version) + } + + sLen := int64(r.uint64()) + dLen := int64(r.uint64()) + + whence, _ := r.Seek(0, io.SeekCurrent) + stringData := data[whence : whence+sLen] + declData := data[whence+sLen : whence+sLen+dLen] + r.Seek(sLen+dLen, io.SeekCurrent) + + p := iimporter{ + ipath: path, + version: int(version), + + stringData: stringData, + stringCache: make(map[uint64]string), + pkgCache: make(map[uint64]*types.Package), + + declData: declData, + pkgIndex: make(map[*types.Package]map[string]uint64), + typCache: make(map[uint64]types.Type), + + fake: fakeFileSet{ + fset: fset, + files: make(map[string]*token.File), + }, + } + + for i, pt := range predeclared() { + p.typCache[uint64(i)] = pt + } + + pkgList := make([]*types.Package, r.uint64()) + for i := range pkgList { + pkgPathOff := r.uint64() + pkgPath := p.stringAt(pkgPathOff) + pkgName := p.stringAt(r.uint64()) + _ = r.uint64() // package height; unused by go/types + + if pkgPath == "" { + pkgPath = path + } + pkg := imports[pkgPath] + if pkg == nil { + pkg = types.NewPackage(pkgPath, pkgName) + imports[pkgPath] = pkg + } else if pkg.Name() != pkgName { + errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) + } + + p.pkgCache[pkgPathOff] = pkg + + nameIndex := make(map[string]uint64) + for nSyms := r.uint64(); nSyms > 0; nSyms-- { + name := p.stringAt(r.uint64()) + nameIndex[name] = r.uint64() + } + + p.pkgIndex[pkg] = nameIndex + pkgList[i] = pkg + } + if len(pkgList) == 0 { + errorf("no packages found for %s", path) + panic("unreachable") + } + p.ipkg = pkgList[0] + names := make([]string, 0, len(p.pkgIndex[p.ipkg])) + for name := range p.pkgIndex[p.ipkg] { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + p.doDecl(p.ipkg, name) + } + + for _, typ := range p.interfaceList { + typ.Complete() + } + + // record all referenced packages as imports + list := append(([]*types.Package)(nil), pkgList[1:]...) + sort.Sort(byPath(list)) + p.ipkg.SetImports(list) + + // package was imported completely and without errors + p.ipkg.MarkComplete() + + consumed, _ := r.Seek(0, io.SeekCurrent) + return int(consumed), p.ipkg, nil +} + +type iimporter struct { + ipath string + ipkg *types.Package + version int + + stringData []byte + stringCache map[uint64]string + pkgCache map[uint64]*types.Package + + declData []byte + pkgIndex map[*types.Package]map[string]uint64 + typCache map[uint64]types.Type + + fake fakeFileSet + interfaceList []*types.Interface +} + +func (p *iimporter) doDecl(pkg *types.Package, name string) { + // See if we've already imported this declaration. + if obj := pkg.Scope().Lookup(name); obj != nil { + return + } + + off, ok := p.pkgIndex[pkg][name] + if !ok { + errorf("%v.%v not in index", pkg, name) + } + + r := &importReader{p: p, currPkg: pkg} + r.declReader.Reset(p.declData[off:]) + + r.obj(name) +} + +func (p *iimporter) stringAt(off uint64) string { + if s, ok := p.stringCache[off]; ok { + return s + } + + slen, n := binary.Uvarint(p.stringData[off:]) + if n <= 0 { + errorf("varint failed") + } + spos := off + uint64(n) + s := string(p.stringData[spos : spos+slen]) + p.stringCache[off] = s + return s +} + +func (p *iimporter) pkgAt(off uint64) *types.Package { + if pkg, ok := p.pkgCache[off]; ok { + return pkg + } + path := p.stringAt(off) + if path == p.ipath { + return p.ipkg + } + errorf("missing package %q in %q", path, p.ipath) + return nil +} + +func (p *iimporter) typAt(off uint64, base *types.Named) types.Type { + if t, ok := p.typCache[off]; ok && (base == nil || !isInterface(t)) { + return t + } + + if off < predeclReserved { + errorf("predeclared type missing from cache: %v", off) + } + + r := &importReader{p: p} + r.declReader.Reset(p.declData[off-predeclReserved:]) + t := r.doType(base) + + if base == nil || !isInterface(t) { + p.typCache[off] = t + } + return t +} + +type importReader struct { + p *iimporter + declReader bytes.Reader + currPkg *types.Package + prevFile string + prevLine int64 + prevColumn int64 +} + +func (r *importReader) obj(name string) { + tag := r.byte() + pos := r.pos() + + switch tag { + case 'A': + typ := r.typ() + + r.declare(types.NewTypeName(pos, r.currPkg, name, typ)) + + case 'C': + typ, val := r.value() + + r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) + + case 'F': + sig := r.signature(nil) + + r.declare(types.NewFunc(pos, r.currPkg, name, sig)) + + case 'T': + // Types can be recursive. We need to setup a stub + // declaration before recursing. + obj := types.NewTypeName(pos, r.currPkg, name, nil) + named := types.NewNamed(obj, nil, nil) + r.declare(obj) + + underlying := r.p.typAt(r.uint64(), named).Underlying() + named.SetUnderlying(underlying) + + if !isInterface(underlying) { + for n := r.uint64(); n > 0; n-- { + mpos := r.pos() + mname := r.ident() + recv := r.param() + msig := r.signature(recv) + + named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) + } + } + + case 'V': + typ := r.typ() + + r.declare(types.NewVar(pos, r.currPkg, name, typ)) + + default: + errorf("unexpected tag: %v", tag) + } +} + +func (r *importReader) declare(obj types.Object) { + obj.Pkg().Scope().Insert(obj) +} + +func (r *importReader) value() (typ types.Type, val constant.Value) { + typ = r.typ() + + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { + case types.IsBoolean: + val = constant.MakeBool(r.bool()) + + case types.IsString: + val = constant.MakeString(r.string()) + + case types.IsInteger: + val = r.mpint(b) + + case types.IsFloat: + val = r.mpfloat(b) + + case types.IsComplex: + re := r.mpfloat(b) + im := r.mpfloat(b) + val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) + + default: + if b.Kind() == types.Invalid { + val = constant.MakeUnknown() + return + } + errorf("unexpected type %v", typ) // panics + panic("unreachable") + } + + return +} + +func intSize(b *types.Basic) (signed bool, maxBytes uint) { + if (b.Info() & types.IsUntyped) != 0 { + return true, 64 + } + + switch b.Kind() { + case types.Float32, types.Complex64: + return true, 3 + case types.Float64, types.Complex128: + return true, 7 + } + + signed = (b.Info() & types.IsUnsigned) == 0 + switch b.Kind() { + case types.Int8, types.Uint8: + maxBytes = 1 + case types.Int16, types.Uint16: + maxBytes = 2 + case types.Int32, types.Uint32: + maxBytes = 4 + default: + maxBytes = 8 + } + + return +} + +func (r *importReader) mpint(b *types.Basic) constant.Value { + signed, maxBytes := intSize(b) + + maxSmall := 256 - maxBytes + if signed { + maxSmall = 256 - 2*maxBytes + } + if maxBytes == 1 { + maxSmall = 256 + } + + n, _ := r.declReader.ReadByte() + if uint(n) < maxSmall { + v := int64(n) + if signed { + v >>= 1 + if n&1 != 0 { + v = ^v + } + } + return constant.MakeInt64(v) + } + + v := -n + if signed { + v = -(n &^ 1) >> 1 + } + if v < 1 || uint(v) > maxBytes { + errorf("weird decoding: %v, %v => %v", n, signed, v) + } + + buf := make([]byte, v) + io.ReadFull(&r.declReader, buf) + + // convert to little endian + // TODO(gri) go/constant should have a more direct conversion function + // (e.g., once it supports a big.Float based implementation) + for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 { + buf[i], buf[j] = buf[j], buf[i] + } + + x := constant.MakeFromBytes(buf) + if signed && n&1 != 0 { + x = constant.UnaryOp(token.SUB, x, 0) + } + return x +} + +func (r *importReader) mpfloat(b *types.Basic) constant.Value { + x := r.mpint(b) + if constant.Sign(x) == 0 { + return x + } + + exp := r.int64() + switch { + case exp > 0: + x = constant.Shift(x, token.SHL, uint(exp)) + case exp < 0: + d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) + x = constant.BinaryOp(x, token.QUO, d) + } + return x +} + +func (r *importReader) ident() string { + return r.string() +} + +func (r *importReader) qualifiedIdent() (*types.Package, string) { + name := r.string() + pkg := r.pkg() + return pkg, name +} + +func (r *importReader) pos() token.Pos { + if r.p.version >= 1 { + r.posv1() + } else { + r.posv0() + } + + if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 { + return token.NoPos + } + return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn)) +} + +func (r *importReader) posv0() { + delta := r.int64() + if delta != deltaNewFile { + r.prevLine += delta + } else if l := r.int64(); l == -1 { + r.prevLine += deltaNewFile + } else { + r.prevFile = r.string() + r.prevLine = l + } +} + +func (r *importReader) posv1() { + delta := r.int64() + r.prevColumn += delta >> 1 + if delta&1 != 0 { + delta = r.int64() + r.prevLine += delta >> 1 + if delta&1 != 0 { + r.prevFile = r.string() + } + } +} + +func (r *importReader) typ() types.Type { + return r.p.typAt(r.uint64(), nil) +} + +func isInterface(t types.Type) bool { + _, ok := t.(*types.Interface) + return ok +} + +func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) } +func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } + +func (r *importReader) doType(base *types.Named) types.Type { + switch k := r.kind(); k { + default: + errorf("unexpected kind tag in %q: %v", r.p.ipath, k) + return nil + + case definedType: + pkg, name := r.qualifiedIdent() + r.p.doDecl(pkg, name) + return pkg.Scope().Lookup(name).(*types.TypeName).Type() + case pointerType: + return types.NewPointer(r.typ()) + case sliceType: + return types.NewSlice(r.typ()) + case arrayType: + n := r.uint64() + return types.NewArray(r.typ(), int64(n)) + case chanType: + dir := chanDir(int(r.uint64())) + return types.NewChan(dir, r.typ()) + case mapType: + return types.NewMap(r.typ(), r.typ()) + case signatureType: + r.currPkg = r.pkg() + return r.signature(nil) + + case structType: + r.currPkg = r.pkg() + + fields := make([]*types.Var, r.uint64()) + tags := make([]string, len(fields)) + for i := range fields { + fpos := r.pos() + fname := r.ident() + ftyp := r.typ() + emb := r.bool() + tag := r.string() + + fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + tags[i] = tag + } + return types.NewStruct(fields, tags) + + case interfaceType: + r.currPkg = r.pkg() + + embeddeds := make([]types.Type, r.uint64()) + for i := range embeddeds { + _ = r.pos() + embeddeds[i] = r.typ() + } + + methods := make([]*types.Func, r.uint64()) + for i := range methods { + mpos := r.pos() + mname := r.ident() + + // TODO(mdempsky): Matches bimport.go, but I + // don't agree with this. + var recv *types.Var + if base != nil { + recv = types.NewVar(token.NoPos, r.currPkg, "", base) + } + + msig := r.signature(recv) + methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) + } + + typ := newInterface(methods, embeddeds) + r.p.interfaceList = append(r.p.interfaceList, typ) + return typ + } +} + +func (r *importReader) kind() itag { + return itag(r.uint64()) +} + +func (r *importReader) signature(recv *types.Var) *types.Signature { + params := r.paramList() + results := r.paramList() + variadic := params.Len() > 0 && r.bool() + return types.NewSignature(recv, params, results, variadic) +} + +func (r *importReader) paramList() *types.Tuple { + xs := make([]*types.Var, r.uint64()) + for i := range xs { + xs[i] = r.param() + } + return types.NewTuple(xs...) +} + +func (r *importReader) param() *types.Var { + pos := r.pos() + name := r.ident() + typ := r.typ() + return types.NewParam(pos, r.currPkg, name, typ) +} + +func (r *importReader) bool() bool { + return r.uint64() != 0 +} + +func (r *importReader) int64() int64 { + n, err := binary.ReadVarint(&r.declReader) + if err != nil { + errorf("readVarint: %v", err) + } + return n +} + +func (r *importReader) uint64() uint64 { + n, err := binary.ReadUvarint(&r.declReader) + if err != nil { + errorf("readUvarint: %v", err) + } + return n +} + +func (r *importReader) byte() byte { + x, err := r.declReader.ReadByte() + if err != nil { + errorf("declReader.ReadByte: %v", err) + } + return x +} + +const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go + +// Synthesize a token.Pos +type fakeFileSet struct { + fset *token.FileSet + files map[string]*token.File +} + +func (s *fakeFileSet) pos(file string, line, column int) token.Pos { + // TODO(mdempsky): Make use of column. + + // Since we don't know the set of needed file positions, we + // reserve maxlines positions per file. + const maxlines = 64 * 1024 + f := s.files[file] + if f == nil { + f = s.fset.AddFile(file, -1, maxlines) + s.files[file] = f + // Allocate the fake linebreak indices on first use. + // TODO(adonovan): opt: save ~512KB using a more complex scheme? + fakeLinesOnce.Do(func() { + fakeLines = make([]int, maxlines) + for i := range fakeLines { + fakeLines[i] = i + } + }) + f.SetLines(fakeLines) + } + + if line > maxlines { + line = 1 + } + + // Treat the file as if it contained only newlines + // and column=1: use the line number as the offset. + return f.Pos(line - 1) +} + +var ( + fakeLines []int + fakeLinesOnce sync.Once +) + +func chanDir(d int) types.ChanDir { + // tag values must match the constants in cmd/compile/internal/gc/go.go + switch d { + case 1 /* Crecv */ : + return types.RecvOnly + case 2 /* Csend */ : + return types.SendOnly + case 3 /* Cboth */ : + return types.SendRecv + default: + errorf("unexpected channel dir %d", d) + return 0 + } +} + +func exported(name string) bool { + ch, _ := utf8.DecodeRuneInString(name) + return unicode.IsUpper(ch) +} + +// ---------------------------------------------------------------------------- +// Export format + +// Tags. Must be < 0. +const ( + // Objects + packageTag = -(iota + 1) + constTag + typeTag + varTag + funcTag + endTag + + // Types + namedTag + arrayTag + sliceTag + dddTag + structTag + pointerTag + signatureTag + interfaceTag + mapTag + chanTag + + // Values + falseTag + trueTag + int64Tag + floatTag + fractionTag // not used by gc + complexTag + stringTag + nilTag // only used by gc (appears in exported inlined function bodies) + unknownTag // not used by gc (only appears in packages with errors) + + // Type aliases + aliasTag +) + +var predeclOnce sync.Once +var predecl []types.Type // initialized lazily + +func predeclared() []types.Type { + predeclOnce.Do(func() { + // initialize lazily to be sure that all + // elements have been initialized before + predecl = []types.Type{ // basic types + types.Typ[types.Bool], + types.Typ[types.Int], + types.Typ[types.Int8], + types.Typ[types.Int16], + types.Typ[types.Int32], + types.Typ[types.Int64], + types.Typ[types.Uint], + types.Typ[types.Uint8], + types.Typ[types.Uint16], + types.Typ[types.Uint32], + types.Typ[types.Uint64], + types.Typ[types.Uintptr], + types.Typ[types.Float32], + types.Typ[types.Float64], + types.Typ[types.Complex64], + types.Typ[types.Complex128], + types.Typ[types.String], + + // basic type aliases + types.Universe.Lookup("byte").Type(), + types.Universe.Lookup("rune").Type(), + + // error + types.Universe.Lookup("error").Type(), + + // untyped types + types.Typ[types.UntypedBool], + types.Typ[types.UntypedInt], + types.Typ[types.UntypedRune], + types.Typ[types.UntypedFloat], + types.Typ[types.UntypedComplex], + types.Typ[types.UntypedString], + types.Typ[types.UntypedNil], + + // package unsafe + types.Typ[types.UnsafePointer], + + // invalid type + types.Typ[types.Invalid], // only appears in packages with errors + + // used internally by gc; never used by this package or in .a files + anyType{}, + } + }) + return predecl +} + +type anyType struct{} + +func (t anyType) Underlying() types.Type { return t } +func (t anyType) String() string { return "any" } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go new file mode 100644 index 0000000000..463f252271 --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go @@ -0,0 +1,21 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + named := make([]*types.Named, len(embeddeds)) + for i, e := range embeddeds { + var ok bool + named[i], ok = e.(*types.Named) + if !ok { + panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") + } + } + return types.NewInterface(methods, named) +} diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go new file mode 100644 index 0000000000..ab28b95cbb --- /dev/null +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + return types.NewInterfaceType(methods, embeddeds) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index e824b06d0d..21f67dfdb7 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -443,6 +443,9 @@ go.opencensus.io/trace go.opencensus.io/trace/internal go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate +# go.uber.org/goleak v1.0.0 +go.uber.org/goleak +go.uber.org/goleak/internal/stack # golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 golang.org/x/crypto/blake2b golang.org/x/crypto/blowfish @@ -459,7 +462,10 @@ golang.org/x/crypto/ssh golang.org/x/crypto/ssh/agent golang.org/x/crypto/ssh/internal/bcrypt_pbkdf golang.org/x/crypto/ssh/terminal -# golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 +# golang.org/x/lint v0.0.0-20190930215403-16217165b5de +golang.org/x/lint +golang.org/x/lint/golint +# golang.org/x/net v0.0.0-20200226121028-0de0cce0169b golang.org/x/net/bpf golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -501,6 +507,10 @@ golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm # golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 golang.org/x/time/rate +# golang.org/x/tools v0.0.0-20200513154647-78b527d18275 +golang.org/x/tools/go/ast/astutil +golang.org/x/tools/go/gcexportdata +golang.org/x/tools/go/internal/gcimporter # google.golang.org/api v0.9.0 google.golang.org/api/compute/v1 google.golang.org/api/gensupport