Repository: pingcap/dumpling
Pull request #308 (2021-07-13 07:05:23)

dump: always split TiDB v3.* tables through tidb rowid to save TiDB's memory (#301)
This is an automated cherry-pick of #301

<!--
Thank you for contributing to Dumpling! Please read the [CONTRIBUTING](https://github.com/pingcap/dumpling/blob/master/CONTRIBUTING.md) document **BEFORE** filing this PR.

If you want to open the **Challenge Program** pull request, please use the following template:
https://raw.githubusercontent.com/pingcap/.github/master/.github/PULL_REQUEST_TEMPLATE/challenge-program.md

You can use it with query parameters: https://github.com/pingcap/dumpling/compare/master...${you branch}?template=challenge-program.md
-->

### What problem does this PR solve? <!--add issue link with summary if exists-->
fix https://github.com/pingcap/dumpling/issues/295, an extension of https://github.com/pingcap/dumpling/pull/273
In TiDB v3.x:
1. table INFORMATION_SCHEMA.TIKV_REGION_STATUS doesn't have table_name/table_schema. 
2. doesn't have `SHOW TABLE REGIONS` statement.
3. table INFORMATION_SCHEMA.PARTITIONS doesn't actually have data.
4. doesn't have `tidb_decode_key` function.
```sql
mysql> show create table information_schema.TIKV_REGION_STATUS;
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table              | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TIKV_REGION_STATUS | CREATE TABLE `TIKV_REGION_STATUS` (
  `REGION_ID` bigint(21) unsigned DEFAULT NULL,
  `START_KEY` text DEFAULT NULL,
  `END_KEY` text DEFAULT NULL,
  `EPOCH_CONF_VER` bigint(21) unsigned DEFAULT NULL,
  `EPOCH_VERSION` bigint(21) unsigned DEFAULT NULL,
  `WRITTEN_BYTES` bigint(21) unsigned DEFAULT NULL,
  `READ_BYTES` bigint(21) unsigned DEFAULT NULL,
  `APPROXIMATE_SIZE` bigint(21) unsigned DEFAULT NULL,
  `APPROXIMATE_KEYS` bigint(21) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
```

### What is changed and how it works?
Split chunks by `PKIsHandle` for TiDB v3.*. Make sure TiDB won't OOM through splitting tables by rowids.
We do some staff by our own to solve the problem that tidb lacks some info.

### Check List <!--REMOVE the items that are not applicable-->

Tests <!-- At least one of them must be included. -->

 - Unit test
 - Integration test
 - Manual test (add detailed scripts or steps below)
Test dump with v3.0.0. The result is looks expected.

Related changes

 - Need to cherry-pick to the release branch
 
### Release note

<!-- bugfixes or new feature need a release note, must in the form of a list, such as

- support -T/--tables-list argument

or if no need to be included in the release note, just add the following line

- No release note
-->
- Always split TiDB v3.* tables through tidb rowid to save TiDB's memory.

ti-chi-bot: [REVIEW NOTIFICATION]

This pull request has not been approved.


To complete the [pull request process](https://book.prow.tidb.io/#/en/workflows/pr), please ask the reviewers in the [list](https://prow.tidb.io/tichi/repos/pingcap/dumpling/pulls/308/owners) to review by filling `/cc @reviewer` in the comment.
After your PR has acquired the required number of LGTMs, you can assign this pull request to the committer in the [list](https://prow.tidb.io/tichi/repos/pingcap/dumpling/pulls/308/owners) by filling  `/assign @committer` in the comment to help you merge this pull request.

The full list of commands accepted by this bot can be found [here](https://prow.tidb.io/command-help?repo=pingcap%2Fdumpling).

<details>

Reviewer can indicate their review by submitting an approval review.
Reviewer can cancel approval by submitting a request changes review.
</details>

<!--Review Notification Identifier-->
ti-chi-bot: @ti-chi-bot: This cherry pick PR is for a release branch and has not yet been approved by release team.
Adding the `do-not-merge/cherry-pick-not-approved` label.

To merge this cherry pick, it must first be approved by the collaborators.

**AFTER** it has been approved by collaborators, please ping the release team in a comment to request a cherry pick review.


<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
ti-chi-bot: @ti-chi-bot: PR needs rebase.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

Patch:
diff --git a/go.mod b/go.mod
index f52e726..0b62cfc 100644
--- a/go.mod
+++ b/go.mod
@@ -18,7 +18,8 @@ require (
 	github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3
 	github.com/pingcap/failpoint v0.0.0-20210316064728-7acb0f0a3dfd
 	github.com/pingcap/log v0.0.0-20210317133921-96f4fcab92a4
-	github.com/pingcap/tidb v1.1.0-beta.0.20210517044538-8ad868f801fc // indirect
+	github.com/pingcap/parser v0.0.0-20210513020953-ae2c4497c07b
+	github.com/pingcap/tidb v1.1.0-beta.0.20210517044538-8ad868f801fc
 	github.com/pingcap/tidb-tools v4.0.9-0.20201127090955-2707c97b3853+incompatible
 	github.com/prometheus/client_golang v1.5.1
 	github.com/prometheus/client_model v0.2.0
diff --git a/v4/export/config.go b/v4/export/config.go
index b7bf104..4ef6d45 100644
--- a/v4/export/config.go
+++ b/v4/export/config.go
@@ -561,8 +561,9 @@ const (
 )
 
 var (
-	gcSafePointVersion = semver.New("4.0.0")
-	tableSampleVersion = semver.New("5.0.0-nightly")
+	decodeRegionVersion = semver.New("3.0.0")
+	gcSafePointVersion  = semver.New("4.0.0")
+	tableSampleVersion  = semver.New("5.0.0-nightly")
 )
 
 // ServerInfo is the combination of ServerType and ServerInfo
diff --git a/v4/export/dump.go b/v4/export/dump.go
index 5244f82..c428ae2 100755
--- a/v4/export/dump.go
+++ b/v4/export/dump.go
@@ -6,8 +6,11 @@ import (
 	"bytes"
 	"context"
 	"database/sql"
+	"encoding/hex"
 	"fmt"
 	"math/big"
+	"sort"
+	"strconv"
 	"strings"
 	"time"
 
@@ -22,11 +25,16 @@ import (
 	"github.com/pingcap/errors"
 	"github.com/pingcap/failpoint"
 	pclog "github.com/pingcap/log"
+	"github.com/pingcap/tidb/store/helper"
+	"github.com/pingcap/tidb/tablecodec"
+	"github.com/pingcap/tidb/util/codec"
 	pd "github.com/tikv/pd/client"
 	"go.uber.org/zap"
 	"golang.org/x/sync/errgroup"
 )
 
+var openDBFunc = sql.Open
+
 // Dumper is the dump progress structure
 type Dumper struct {
 	tctx      *tcontext.Context
@@ -36,16 +44,18 @@ type Dumper struct {
 	extStore storage.ExternalStorage
 	dbHandle *sql.DB
 
-	tidbPDClientForGC pd.Client
+	tidbPDClientForGC         pd.Client
+	selectTiDBTableRegionFunc func(tctx *tcontext.Context, conn *sql.Conn, meta TableMeta) (pkFields []string, pkVals [][]string, err error)
 }
 
 // NewDumper returns a new Dumper
 func NewDumper(ctx context.Context, conf *Config) (*Dumper, error) {
 	tctx, cancelFn := tcontext.Background().WithContext(ctx).WithCancel()
 	d := &Dumper{
-		tctx:      tctx,
-		conf:      conf,
-		cancelCtx: cancelFn,
+		tctx:                      tctx,
+		conf:                      conf,
+		cancelCtx:                 cancelFn,
+		selectTiDBTableRegionFunc: selectTiDBTableRegion,
 	}
 	err := adjustConfig(conf,
 		registerTLSConfig,
@@ -139,6 +149,9 @@ func (d *Dumper) Dump() (dumpErr error) {
 			return err
 		}
 	}
+	if err = d.renewSelectTableRegionFuncForLowerTiDB(tctx); err != nil {
+		tctx.L().Error("fail to update select table region info for TiDB", zap.Error(err))
+	}
 
 	rebuildConn := func(conn *sql.Conn) (*sql.Conn, error) {
 		// make sure that the lock connection is still alive
@@ -450,7 +463,7 @@ func (d *Dumper) concurrentDumpTable(tctx *tcontext.Context, conn *sql.Conn, met
 	if conf.ServerInfo.ServerType == ServerTypeTiDB &&
 		conf.ServerInfo.ServerVersion != nil &&
 		(conf.ServerInfo.ServerVersion.Compare(*tableSampleVersion) >= 0 ||
-			(conf.ServerInfo.HasTiKV && conf.ServerInfo.ServerVersion.Compare(*gcSafePointVersion) >= 0)) {
+			(conf.ServerInfo.HasTiKV && conf.ServerInfo.ServerVersion.Compare(*decodeRegionVersion) >= 0)) {
 		err := d.concurrentDumpTiDBTables(tctx, conn, meta, taskChan)
 		// don't retry on context error and successful tasks
 		if err2 := errors.Cause(err); err2 == nil || err2 == context.DeadlineExceeded || err2 == context.Canceled {
@@ -587,18 +600,22 @@ func (d *Dumper) concurrentDumpTiDBTables(tctx *tcontext.Context, conn *sql.Conn
 		handleVals     [][]string
 		err            error
 	)
+	// for TiDB v5.0+, we can use table sample directly
 	if d.conf.ServerInfo.ServerVersion.Compare(*tableSampleVersion) >= 0 {
 		tctx.L().Debug("dumping TiDB tables with TABLESAMPLE",
 			zap.String("database", db), zap.String("table", tbl))
 		handleColNames, handleVals, err = selectTiDBTableSample(tctx, conn, meta)
 	} else {
+		// for TiDB v3.0+, we can use table region decode in TiDB directly
 		tctx.L().Debug("dumping TiDB tables with TABLE REGIONS",
 			zap.String("database", db), zap.String("table", tbl))
 		var partitions []string
-		partitions, err = GetPartitionNames(conn, db, tbl)
+		if d.conf.ServerInfo.ServerVersion.Compare(*gcSafePointVersion) >= 0 {
+			partitions, err = GetPartitionNames(conn, db, tbl)
+		}
 		if err == nil {
 			if len(partitions) == 0 {
-				handleColNames, handleVals, err = selectTiDBTableRegion(tctx, conn, meta)
+				handleColNames, handleVals, err = d.selectTiDBTableRegionFunc(tctx, conn, meta)
 			} else {
 				return d.concurrentDumpTiDBPartitionTables(tctx, conn, meta, taskChan, partitions)
 			}
@@ -1170,3 +1187,94 @@ func setSessionParam(d *Dumper) error {
 	}
 	return nil
 }
+
+func (d *Dumper) renewSelectTableRegionFuncForLowerTiDB(tctx *tcontext.Context) error {
+	conf := d.conf
+	if !(conf.ServerInfo.ServerType == ServerTypeTiDB && conf.ServerInfo.ServerVersion != nil && conf.ServerInfo.HasTiKV &&
+		conf.ServerInfo.ServerVersion.Compare(*decodeRegionVersion) >= 0 &&
+		conf.ServerInfo.ServerVersion.Compare(*gcSafePointVersion) < 0) {
+		tctx.L().Debug("no need to build region info because database is not TiDB 3.x")
+		return nil
+	}
+	dbHandle, err := openDBFunc("mysql", conf.GetDSN(""))
+	if err != nil {
+		return errors.Trace(err)
+	}
+	defer dbHandle.Close()
+	conn, err := dbHandle.Conn(tctx)
+	if err != nil {
+		return errors.Trace(err)
+	}
+	defer conn.Close()
+	dbInfos, err := GetDBInfo(conn, DatabaseTablesToMap(conf.Tables))
+	if err != nil {
+		return errors.Trace(err)
+	}
+	regionsInfo, err := GetRegionInfos(conn)
+	if err != nil {
+		return errors.Trace(err)
+	}
+	tikvHelper := &helper.Helper{}
+	tableInfos := tikvHelper.GetRegionsTableInfo(regionsInfo, dbInfos)
+
+	tableInfoMap := make(map[string]map[string][]int64, len(conf.Tables))
+	for _, region := range regionsInfo.Regions {
+		tableList := tableInfos[region.ID]
+		for _, table := range tableList {
+			db, tbl := table.DB.Name.O, table.Table.Name.O
+			if _, ok := tableInfoMap[db]; !ok {
+				tableInfoMap[db] = make(map[string][]int64, len(conf.Tables[db]))
+			}
+
+			key, err := hex.DecodeString(region.StartKey)
+			if err != nil {
+				d.L().Debug("invalid region start key", zap.Error(err), zap.String("key", region.StartKey))
+				continue
+			}
+			// Auto decode byte if needed.
+			_, bs, err := codec.DecodeBytes(key, nil)
+			if err == nil {
+				key = bs
+			}
+			// Try to decode it as a record key.
+			tableID, handle, err := tablecodec.DecodeRecordKey(key)
+			if err != nil {
+				d.L().Debug("fail to decode region start key", zap.Error(err), zap.String("key", region.StartKey), zap.Int64("tableID", tableID))
+				continue
+			}
+			if handle.IsInt() {
+				tableInfoMap[db][tbl] = append(tableInfoMap[db][tbl], handle.IntValue())
+			} else {
+				d.L().Debug("not an int handle", zap.Error(err), zap.Stringer("handle", handle))
+			}
+		}
+	}
+	for _, tbInfos := range tableInfoMap {
+		for _, tbInfoLoop := range tbInfos {
+			// make sure tbInfo is only used in this loop
+			tbInfo := tbInfoLoop
+			sort.Slice(tbInfo, func(i, j int) bool {
+				return tbInfo[i] < tbInfo[j]
+			})
+		}
+	}
+
+	d.selectTiDBTableRegionFunc = func(tctx *tcontext.Context, conn *sql.Conn, meta TableMeta) (pkFields []string, pkVals [][]string, err error) {
+		dbName, tableName := meta.DatabaseName(), meta.TableName()
+		pkFields, _, err = selectTiDBRowKeyFields(conn, meta, checkTiDBTableRegionPkFields)
+		if err != nil {
+			return
+		}
+		if tbInfos, ok := tableInfoMap[dbName]; ok {
+			if tbInfo, ok := tbInfos[tableName]; ok {
+				pkVals = make([][]string, len(tbInfo))
+				for i, val := range tbInfo {
+					pkVals[i] = []string{strconv.FormatInt(val, 10)}
+				}
+			}
+		}
+		return
+	}
+
+	return nil
+}
diff --git a/v4/export/prepare.go b/v4/export/prepare.go
index a8c1342..e995f8a 100644
--- a/v4/export/prepare.go
+++ b/v4/export/prepare.go
@@ -206,3 +206,17 @@ func (d DatabaseTables) Literal() string {
 
 	return b.String()
 }
+
+// DatabaseTablesToMap transfers DatabaseTables to Map
+func DatabaseTablesToMap(d DatabaseTables) map[string]map[string]struct{} {
+	mp := make(map[string]map[string]struct{}, len(d))
+	for name, infos := range d {
+		mp[name] = make(map[string]struct{}, len(infos))
+		for _, info := range infos {
+			if info.Type == TableTypeBase {
+				mp[name][info.Name] = struct{}{}
+			}
+		}
+	}
+	return mp
+}
diff --git a/v4/export/region_results.csv b/v4/export/region_results.csv
new file mode 100644
index 0000000..07c0355
--- /dev/null
+++ b/v4/export/region_results.csv
@@ -0,0 +1,990 @@
+4,"","7480000000000000FF0500000000000000F8"
+6,"7480000000000000FF0500000000000000F8","7480000000000000FF0700000000000000F8"
+8,"7480000000000000FF0700000000000000F8","7480000000000000FF0900000000000000F8"
+10,"7480000000000000FF0900000000000000F8","7480000000000000FF0B00000000000000F8"
+12,"7480000000000000FF0B00000000000000F8","7480000000000000FF0D00000000000000F8"
+14,"7480000000000000FF0D00000000000000F8","7480000000000000FF0F00000000000000F8"
+16,"7480000000000000FF0F00000000000000F8","7480000000000000FF1100000000000000F8"
+18,"7480000000000000FF1100000000000000F8","7480000000000000FF1300000000000000F8"
+20,"7480000000000000FF1300000000000000F8","7480000000000000FF1500000000000000F8"
+22,"7480000000000000FF1500000000000000F8","7480000000000000FF1700000000000000F8"
+24,"7480000000000000FF1700000000000000F8","7480000000000000FF1900000000000000F8"
+26,"7480000000000000FF1900000000000000F8","7480000000000000FF1B00000000000000F8"
+28,"7480000000000000FF1B00000000000000F8","7480000000000000FF1D00000000000000F8"
+30,"7480000000000000FF1D00000000000000F8","7480000000000000FF1F00000000000000F8"
+32,"7480000000000000FF1F00000000000000F8","7480000000000000FF2100000000000000F8"
+34,"7480000000000000FF2100000000000000F8","7480000000000000FF2300000000000000F8"
+36,"7480000000000000FF2300000000000000F8","7480000000000000FF2500000000000000F8"
+38,"7480000000000000FF2500000000000000F8","7480000000000000FF2700000000000000F8"
+40,"7480000000000000FF2700000000000000F8","7480000000000000FF2900000000000000F8"
+42,"7480000000000000FF2900000000000000F8","7480000000000000FF295F728000000000FF0EA6010000000000FA"
+44,"7480000000000000FF295F728000000000FF0EA6010000000000FA","7480000000000000FF295F728000000000FF1D4C010000000000FA"
+46,"7480000000000000FF295F728000000000FF1D4C010000000000FA","7480000000000000FF295F728000000000FF2BF2010000000000FA"
+48,"7480000000000000FF295F728000000000FF2BF2010000000000FA","7480000000000000FF295F728000000000FF3A98010000000000FA"
+50,"7480000000000000FF295F728000000000FF3A98010000000000FA","7480000000000000FF295F728000000000FF493E010000000000FA"
+52,"7480000000000000FF295F728000000000FF493E010000000000FA","7480000000000000FF295F728000000000FF57E4010000000000FA"
+54,"7480000000000000FF295F728000000000FF57E4010000000000FA","7480000000000000FF295F728000000000FF668A010000000000FA"
+1001,"7480000000000000FF295F728000000000FF668A010000000000FA","7480000000000000FF2F00000000000000F8"
+1003,"7480000000000000FF2F00000000000000F8","7480000000000000FF3300000000000000F8"
+1005,"7480000000000000FF3300000000000000F8","7480000000000000FF3500000000000000F8"
+1007,"7480000000000000FF3500000000000000F8","7480000000000000FF3C00000000000000F8"
+1009,"7480000000000000FF3C00000000000000F8","7480000000000000FF4500000000000000F8"
+1011,"7480000000000000FF4500000000000000F8","7480000000000000FF4700000000000000F8"
+1013,"7480000000000000FF4700000000000000F8","7480000000000000FF4F00000000000000F8"
+1015,"7480000000000000FF4F00000000000000F8","7480000000000000FF5400000000000000F8"
+1017,"7480000000000000FF5400000000000000F8","7480000000000000FF5800000000000000F8"
+1019,"7480000000000000FF5800000000000000F8","7480000000000000FF5E00000000000000F8"
+1021,"7480000000000000FF5E00000000000000F8","7480000000000000FF6B00000000000000F8"
+1023,"7480000000000000FF6B00000000000000F8","7480000000000000FF7000000000000000F8"
+1025,"7480000000000000FF7000000000000000F8","7480000000000000FF7300000000000000F8"
+1027,"7480000000000000FF7300000000000000F8","7480000000000000FF7A00000000000000F8"
+1029,"7480000000000000FF7A00000000000000F8","7480000000000000FF8500000000000000F8"
+1031,"7480000000000000FF8500000000000000F8","7480000000000000FF8900000000000000F8"
+1033,"7480000000000000FF8900000000000000F8","7480000000000000FF8D00000000000000F8"
+1035,"7480000000000000FF8D00000000000000F8","7480000000000000FF9400000000000000F8"
+1037,"7480000000000000FF9400000000000000F8","7480000000000000FF9D00000000000000F8"
+1039,"7480000000000000FF9D00000000000000F8","7480000000000000FFA200000000000000F8"
+1041,"7480000000000000FFA200000000000000F8","7480000000000000FFA500000000000000F8"
+1043,"7480000000000000FFA500000000000000F8","7480000000000000FFAC00000000000000F8"
+1045,"7480000000000000FFAC00000000000000F8","7480000000000000FFB900000000000000F8"
+1047,"7480000000000000FFB900000000000000F8","7480000000000000FFBD00000000000000F8"
+1049,"7480000000000000FFBD00000000000000F8","7480000000000000FFBF00000000000000F8"
+1051,"7480000000000000FFBF00000000000000F8","7480000000000000FFC300000000000000F8"
+1053,"7480000000000000FFC300000000000000F8","7480000000000000FFCF00000000000000F8"
+1055,"7480000000000000FFCF00000000000000F8","7480000000000000FFD400000000000000F8"
+1057,"7480000000000000FFD400000000000000F8","7480000000000000FFD800000000000000F8"
+1059,"7480000000000000FFD800000000000000F8","7480000000000000FFDE00000000000000F8"
+1061,"7480000000000000FFDE00000000000000F8","7480000000000000FFE700000000000000F8"
+1063,"7480000000000000FFE700000000000000F8","7480000000000000FFEC00000000000000F8"
+1065,"7480000000000000FFEC00000000000000F8","7480000000000000FFF000000000000000F8"
+1067,"7480000000000000FFF000000000000000F8","7480000000000000FFF600000000000000F8"
+1069,"7480000000000000FFF600000000000000F8","7480000000000000FFFC00000000000000F8"
+1071,"7480000000000000FFFC00000000000000F8","7480000000000000FFFE00000000000000F8"
+1119,"7480000000000000FFFE00000000000000F8","7480000000000001FF0200000000000000F8"
+1135,"7480000000000001FF0200000000000000F8","7480000000000001FF0300000000000000F8"
+1137,"7480000000000001FF0300000000000000F8","7480000000000001FF0400000000000000F8"
+1127,"7480000000000001FF0400000000000000F8","7480000000000001FF0500000000000000F8"
+1073,"7480000000000001FF0500000000000000F8","7480000000000001FF0600000000000000F8"
+1125,"7480000000000001FF0600000000000000F8","7480000000000001FF0800000000000000F8"
+1083,"7480000000000001FF0800000000000000F8","7480000000000001FF0900000000000000F8"
+1075,"7480000000000001FF0900000000000000F8","7480000000000001FF0A00000000000000F8"
+1115,"7480000000000001FF0A00000000000000F8","7480000000000001FF0C00000000000000F8"
+1077,"7480000000000001FF0C00000000000000F8","7480000000000001FF0D00000000000000F8"
+1079,"7480000000000001FF0D00000000000000F8","7480000000000001FF0F00000000000000F8"
+1129,"7480000000000001FF0F00000000000000F8","7480000000000001FF1100000000000000F8"
+1103,"7480000000000001FF1100000000000000F8","7480000000000001FF1200000000000000F8"
+1081,"7480000000000001FF1200000000000000F8","7480000000000001FF1300000000000000F8"
+1085,"7480000000000001FF1300000000000000F8","7480000000000001FF1500000000000000F8"
+1105,"7480000000000001FF1500000000000000F8","7480000000000001FF1600000000000000F8"
+1089,"7480000000000001FF1600000000000000F8","7480000000000001FF1800000000000000F8"
+1087,"7480000000000001FF1800000000000000F8","7480000000000001FF1A00000000000000F8"
+1099,"7480000000000001FF1A00000000000000F8","7480000000000001FF1C00000000000000F8"
+1093,"7480000000000001FF1C00000000000000F8","7480000000000001FF1E00000000000000F8"
+1091,"7480000000000001FF1E00000000000000F8","7480000000000001FF1F00000000000000F8"
+1143,"7480000000000001FF1F00000000000000F8","7480000000000001FF2200000000000000F8"
+1097,"7480000000000001FF2200000000000000F8","7480000000000001FF2300000000000000F8"
+1145,"7480000000000001FF2300000000000000F8","7480000000000001FF2400000000000000F8"
+1095,"7480000000000001FF2400000000000000F8","7480000000000001FF2500000000000000F8"
+1139,"7480000000000001FF2500000000000000F8","7480000000000001FF2800000000000000F8"
+1101,"7480000000000001FF2800000000000000F8","7480000000000001FF2A00000000000000F8"
+1141,"7480000000000001FF2A00000000000000F8","7480000000000001FF2E00000000000000F8"
+1123,"7480000000000001FF2E00000000000000F8","7480000000000001FF2F00000000000000F8"
+1107,"7480000000000001FF2F00000000000000F8","7480000000000001FF3000000000000000F8"
+1121,"7480000000000001FF3000000000000000F8","7480000000000001FF3100000000000000F8"
+1109,"7480000000000001FF3100000000000000F8","7480000000000001FF3200000000000000F8"
+1113,"7480000000000001FF3200000000000000F8","7480000000000001FF3500000000000000F8"
+1111,"7480000000000001FF3500000000000000F8","7480000000000001FF3600000000000000F8"
+1117,"7480000000000001FF3600000000000000F8","7480000000000001FF3A00000000000000F8"
+1131,"7480000000000001FF3A00000000000000F8","7480000000000001FF4200000000000000F8"
+1133,"7480000000000001FF4200000000000000F8","7480000000000001FF4400000000000000F8"
+1147,"7480000000000001FF4400000000000000F8","7480000000000001FF4C00000000000000F8"
+1149,"7480000000000001FF4C00000000000000F8","7480000000000001FF4E00000000000000F8"
+1153,"7480000000000001FF4E00000000000000F8","7480000000000001FF5000000000000000F8"
+1187,"7480000000000001FF5000000000000000F8","7480000000000001FF5100000000000000F8"
+1183,"7480000000000001FF5100000000000000F8","7480000000000001FF5300000000000000F8"
+1151,"7480000000000001FF5300000000000000F8","7480000000000001FF5400000000000000F8"
+1167,"7480000000000001FF5400000000000000F8","7480000000000001FF5500000000000000F8"
+1175,"7480000000000001FF5500000000000000F8","7480000000000001FF5700000000000000F8"
+1177,"7480000000000001FF5700000000000000F8","7480000000000001FF5800000000000000F8"
+1197,"7480000000000001FF5800000000000000F8","7480000000000001FF5900000000000000F8"
+1169,"7480000000000001FF5900000000000000F8","7480000000000001FF5A00000000000000F8"
+1157,"7480000000000001FF5A00000000000000F8","7480000000000001FF5B00000000000000F8"
+1179,"7480000000000001FF5B00000000000000F8","7480000000000001FF5C00000000000000F8"
+1191,"7480000000000001FF5C00000000000000F8","7480000000000001FF5D00000000000000F8"
+1155,"7480000000000001FF5D00000000000000F8","7480000000000001FF5E00000000000000F8"
+1189,"7480000000000001FF5E00000000000000F8","7480000000000001FF6100000000000000F8"
+1159,"7480000000000001FF6100000000000000F8","7480000000000001FF6200000000000000F8"
+1193,"7480000000000001FF6200000000000000F8","7480000000000001FF6400000000000000F8"
+1163,"7480000000000001FF6400000000000000F8","7480000000000001FF6500000000000000F8"
+1161,"7480000000000001FF6500000000000000F8","7480000000000001FF6600000000000000F8"
+1185,"7480000000000001FF6600000000000000F8","7480000000000001FF6900000000000000F8"
+1165,"7480000000000001FF6900000000000000F8","7480000000000001FF6A00000000000000F8"
+1171,"7480000000000001FF6A00000000000000F8","7480000000000001FF6E00000000000000F8"
+1173,"7480000000000001FF6E00000000000000F8","7480000000000001FF7000000000000000F8"
+1181,"7480000000000001FF7000000000000000F8","7480000000000001FF7500000000000000F8"
+1195,"7480000000000001FF7500000000000000F8","7480000000000001FF7C00000000000000F8"
+1199,"7480000000000001FF7C00000000000000F8","7480000000000001FF8000000000000000F8"
+1201,"7480000000000001FF8000000000000000F8","7480000000000001FF8200000000000000F8"
+1203,"7480000000000001FF8200000000000000F8","7480000000000001FF8400000000000000F8"
+1209,"7480000000000001FF8400000000000000F8","7480000000000001FF8600000000000000F8"
+1211,"7480000000000001FF8600000000000000F8","7480000000000001FF8800000000000000F8"
+1207,"7480000000000001FF8800000000000000F8","7480000000000001FF8A00000000000000F8"
+1217,"7480000000000001FF8A00000000000000F8","7480000000000001FF8B00000000000000F8"
+1219,"7480000000000001FF8B00000000000000F8","7480000000000001FF8C00000000000000F8"
+1205,"7480000000000001FF8C00000000000000F8","7480000000000001FF8D00000000000000F8"
+1213,"7480000000000001FF8D00000000000000F8","7480000000000001FF9100000000000000F8"
+1233,"7480000000000001FF9100000000000000F8","7480000000000001FF9400000000000000F8"
+1247,"7480000000000001FF9400000000000000F8","7480000000000001FF9500000000000000F8"
+1215,"7480000000000001FF9500000000000000F8","7480000000000001FF9600000000000000F8"
+1227,"7480000000000001FF9600000000000000F8","7480000000000001FF9700000000000000F8"
+1235,"7480000000000001FF9700000000000000F8","7480000000000001FF9900000000000000F8"
+1221,"7480000000000001FF9900000000000000F8","7480000000000001FF9A00000000000000F8"
+1231,"7480000000000001FF9A00000000000000F8","7480000000000001FF9B00000000000000F8"
+1223,"7480000000000001FF9B00000000000000F8","7480000000000001FF9D00000000000000F8"
+1229,"7480000000000001FF9D00000000000000F8","7480000000000001FFA000000000000000F8"
+1243,"7480000000000001FFA000000000000000F8","7480000000000001FFA500000000000000F8"
+1245,"7480000000000001FFA500000000000000F8","7480000000000001FFA600000000000000F8"
+1239,"7480000000000001FFA600000000000000F8","7480000000000001FFA700000000000000F8"
+1241,"7480000000000001FFA700000000000000F8","7480000000000001FFA900000000000000F8"
+1237,"7480000000000001FFA900000000000000F8","7480000000000001FFAA00000000000000F8"
+1249,"7480000000000001FFAA00000000000000F8","7480000000000001FFB000000000000000F8"
+1251,"7480000000000001FFB000000000000000F8","7480000000000001FFB200000000000000F8"
+1255,"7480000000000001FFB200000000000000F8","7480000000000001FFB300000000000000F8"
+1257,"7480000000000001FFB300000000000000F8","7480000000000001FFB600000000000000F8"
+1267,"7480000000000001FFB600000000000000F8","7480000000000001FFB800000000000000F8"
+1275,"7480000000000001FFB800000000000000F8","7480000000000001FFB900000000000000F8"
+1273,"7480000000000001FFB900000000000000F8","7480000000000001FFBA00000000000000F8"
+1271,"7480000000000001FFBA00000000000000F8","7480000000000001FFBB00000000000000F8"
+1277,"7480000000000001FFBB00000000000000F8","7480000000000001FFBC00000000000000F8"
+1261,"7480000000000001FFBC00000000000000F8","7480000000000001FFBD00000000000000F8"
+1259,"7480000000000001FFBD00000000000000F8","7480000000000001FFBE00000000000000F8"
+1279,"7480000000000001FFBE00000000000000F8","7480000000000001FFC600000000000000F8"
+1281,"7480000000000001FFC600000000000000F8","7480000000000001FFC800000000000000F8"
+1283,"7480000000000001FFC800000000000000F8","7480000000000001FFCA00000000000000F8"
+1285,"7480000000000001FFCA00000000000000F8","7480000000000001FFCC00000000000000F8"
+1289,"7480000000000001FFCC00000000000000F8","7480000000000001FFCD00000000000000F8"
+1291,"7480000000000001FFCD00000000000000F8","7480000000000001FFD000000000000000F8"
+1293,"7480000000000001FFD000000000000000F8","7480000000000001FFD200000000000000F8"
+1295,"7480000000000001FFD200000000000000F8","7480000000000001FFD400000000000000F8"
+1297,"7480000000000001FFD400000000000000F8","7480000000000001FFD600000000000000F8"
+1299,"7480000000000001FFD600000000000000F8","7480000000000001FFD800000000000000F8"
+1309,"7480000000000001FFD800000000000000F8","7480000000000001FFDA00000000000000F8"
+1303,"7480000000000001FFDA00000000000000F8","7480000000000001FFDB00000000000000F8"
+1307,"7480000000000001FFDB00000000000000F8","7480000000000001FFDE00000000000000F8"
+1311,"7480000000000001FFDE00000000000000F8","7480000000000001FFE000000000000000F8"
+1313,"7480000000000001FFE000000000000000F8","7480000000000001FFE200000000000000F8"
+1317,"7480000000000001FFE200000000000000F8","7480000000000001FFE400000000000000F8"
+1321,"7480000000000001FFE400000000000000F8","7480000000000001FFE600000000000000F8"
+1325,"7480000000000001FFE600000000000000F8","7480000000000001FFE800000000000000F8"
+1329,"7480000000000001FFE800000000000000F8","7480000000000001FFEA00000000000000F8"
+1331,"7480000000000001FFEA00000000000000F8","7480000000000001FFEC00000000000000F8"
+1327,"7480000000000001FFEC00000000000000F8","7480000000000001FFED00000000000000F8"
+1333,"7480000000000001FFED00000000000000F8","7480000000000001FFF000000000000000F8"
+1335,"7480000000000001FFF000000000000000F8","7480000000000001FFF200000000000000F8"
+1337,"7480000000000001FFF200000000000000F8","7480000000000001FFF400000000000000F8"
+1339,"7480000000000001FFF400000000000000F8","7480000000000001FFF600000000000000F8"
+1341,"7480000000000001FFF600000000000000F8","7480000000000001FFF800000000000000F8"
+1355,"7480000000000001FFF800000000000000F8","7480000000000001FFFA00000000000000F8"
+1343,"7480000000000001FFFA00000000000000F8","7480000000000001FFFB00000000000000F8"
+1347,"7480000000000001FFFB00000000000000F8","7480000000000001FFFC00000000000000F8"
+1345,"7480000000000001FFFC00000000000000F8","7480000000000001FFFD00000000000000F8"
+1353,"7480000000000001FFFD00000000000000F8","7480000000000002FF0100000000000000F8"
+1349,"7480000000000002FF0100000000000000F8","7480000000000002FF0200000000000000F8"
+1351,"7480000000000002FF0200000000000000F8","7480000000000002FF0500000000000000F8"
+1363,"7480000000000002FF0500000000000000F8","7480000000000002FF0800000000000000F8"
+1357,"7480000000000002FF0800000000000000F8","7480000000000002FF0900000000000000F8"
+1359,"7480000000000002FF0900000000000000F8","7480000000000002FF0B00000000000000F8"
+1361,"7480000000000002FF0B00000000000000F8","7480000000000002FF0D00000000000000F8"
+1365,"7480000000000002FF0D00000000000000F8","7480000000000002FF1000000000000000F8"
+1369,"7480000000000002FF1000000000000000F8","7480000000000002FF1200000000000000F8"
+1373,"7480000000000002FF1200000000000000F8","7480000000000002FF1400000000000000F8"
+1375,"7480000000000002FF1400000000000000F8","7480000000000002FF1600000000000000F8"
+1367,"7480000000000002FF1600000000000000F8","7480000000000002FF1800000000000000F8"
+1377,"7480000000000002FF1800000000000000F8","7480000000000002FF1A00000000000000F8"
+1383,"7480000000000002FF1A00000000000000F8","7480000000000002FF1C00000000000000F8"
+1379,"7480000000000002FF1C00000000000000F8","7480000000000002FF1D00000000000000F8"
+1385,"7480000000000002FF1D00000000000000F8","7480000000000002FF2000000000000000F8"
+1397,"7480000000000002FF2000000000000000F8","7480000000000002FF2200000000000000F8"
+1389,"7480000000000002FF2200000000000000F8","7480000000000002FF2300000000000000F8"
+1387,"7480000000000002FF2300000000000000F8","7480000000000002FF2400000000000000F8"
+1393,"7480000000000002FF2400000000000000F8","7480000000000002FF2700000000000000F8"
+1391,"7480000000000002FF2700000000000000F8","7480000000000002FF2800000000000000F8"
+1401,"7480000000000002FF2800000000000000F8","7480000000000002FF2C00000000000000F8"
+1399,"7480000000000002FF2C00000000000000F8","7480000000000002FF2D00000000000000F8"
+1395,"7480000000000002FF2D00000000000000F8","7480000000000002FF3000000000000000F8"
+1403,"7480000000000002FF3000000000000000F8","7480000000000002FF3200000000000000F8"
+1405,"7480000000000002FF3200000000000000F8","7480000000000002FF3400000000000000F8"
+1411,"7480000000000002FF3400000000000000F8","7480000000000002FF3500000000000000F8"
+1409,"7480000000000002FF3500000000000000F8","7480000000000002FF3800000000000000F8"
+1413,"7480000000000002FF3800000000000000F8","7480000000000002FF3A00000000000000F8"
+1417,"7480000000000002FF3A00000000000000F8","7480000000000002FF3C00000000000000F8"
+1415,"7480000000000002FF3C00000000000000F8","7480000000000002FF3D00000000000000F8"
+1419,"7480000000000002FF3D00000000000000F8","7480000000000002FF4000000000000000F8"
+1423,"7480000000000002FF4000000000000000F8","7480000000000002FF4200000000000000F8"
+1421,"7480000000000002FF4200000000000000F8","7480000000000002FF4300000000000000F8"
+1425,"7480000000000002FF4300000000000000F8","7480000000000002FF4600000000000000F8"
+1427,"7480000000000002FF4600000000000000F8","7480000000000002FF4800000000000000F8"
+1429,"7480000000000002FF4800000000000000F8","7480000000000002FF4A00000000000000F8"
+1431,"7480000000000002FF4A00000000000000F8","7480000000000002FF4C00000000000000F8"
+1437,"7480000000000002FF4C00000000000000F8","7480000000000002FF4E00000000000000F8"
+1433,"7480000000000002FF4E00000000000000F8","7480000000000002FF4F00000000000000F8"
+1439,"7480000000000002FF4F00000000000000F8","7480000000000002FF5200000000000000F8"
+1445,"7480000000000002FF5200000000000000F8","7480000000000002FF5400000000000000F8"
+1441,"7480000000000002FF5400000000000000F8","7480000000000002FF5500000000000000F8"
+1443,"7480000000000002FF5500000000000000F8","7480000000000002FF5700000000000000F8"
+1447,"7480000000000002FF5700000000000000F8","7480000000000002FF5A00000000000000F8"
+1449,"7480000000000002FF5A00000000000000F8","7480000000000002FF5C00000000000000F8"
+1451,"7480000000000002FF5C00000000000000F8","7480000000000002FF5E00000000000000F8"
+1453,"7480000000000002FF5E00000000000000F8","7480000000000002FF6000000000000000F8"
+1457,"7480000000000002FF6000000000000000F8","7480000000000002FF6200000000000000F8"
+1459,"7480000000000002FF6200000000000000F8","7480000000000002FF6400000000000000F8"
+1455,"7480000000000002FF6400000000000000F8","7480000000000002FF6600000000000000F8"
+1465,"7480000000000002FF6600000000000000F8","7480000000000002FF6800000000000000F8"
+1461,"7480000000000002FF6800000000000000F8","7480000000000002FF6A00000000000000F8"
+1463,"7480000000000002FF6A00000000000000F8","7480000000000002FF6C00000000000000F8"
+1469,"7480000000000002FF6C00000000000000F8","7480000000000002FF6E00000000000000F8"
+1467,"7480000000000002FF6E00000000000000F8","7480000000000002FF6F00000000000000F8"
+1471,"7480000000000002FF6F00000000000000F8","7480000000000002FF7200000000000000F8"
+1473,"7480000000000002FF7200000000000000F8","7480000000000002FF7400000000000000F8"
+1475,"7480000000000002FF7400000000000000F8","7480000000000002FF7600000000000000F8"
+1477,"7480000000000002FF7600000000000000F8","7480000000000002FF7800000000000000F8"
+1479,"7480000000000002FF7800000000000000F8","7480000000000002FF7A00000000000000F8"
+1481,"7480000000000002FF7A00000000000000F8","7480000000000002FF7C00000000000000F8"
+1485,"7480000000000002FF7C00000000000000F8","7480000000000002FF7E00000000000000F8"
+1487,"7480000000000002FF7E00000000000000F8","7480000000000002FF8000000000000000F8"
+1483,"7480000000000002FF8000000000000000F8","7480000000000002FF8200000000000000F8"
+1489,"7480000000000002FF8200000000000000F8","7480000000000002FF8400000000000000F8"
+1491,"7480000000000002FF8400000000000000F8","7480000000000002FF8600000000000000F8"
+1493,"7480000000000002FF8600000000000000F8","7480000000000002FF8800000000000000F8"
+1495,"7480000000000002FF8800000000000000F8","7480000000000002FF8A00000000000000F8"
+1497,"7480000000000002FF8A00000000000000F8","7480000000000002FF8C00000000000000F8"
+1501,"7480000000000002FF8C00000000000000F8","7480000000000002FF8E00000000000000F8"
+1499,"7480000000000002FF8E00000000000000F8","7480000000000002FF9000000000000000F8"
+1507,"7480000000000002FF9000000000000000F8","7480000000000002FF9200000000000000F8"
+1503,"7480000000000002FF9200000000000000F8","7480000000000002FF9400000000000000F8"
+1509,"7480000000000002FF9400000000000000F8","7480000000000002FF9600000000000000F8"
+1511,"7480000000000002FF9600000000000000F8","7480000000000002FF9800000000000000F8"
+1515,"7480000000000002FF9800000000000000F8","7480000000000002FF9A00000000000000F8"
+1513,"7480000000000002FF9A00000000000000F8","7480000000000002FF9C00000000000000F8"
+1517,"7480000000000002FF9C00000000000000F8","7480000000000002FF9E00000000000000F8"
+1519,"7480000000000002FF9E00000000000000F8","7480000000000002FFA000000000000000F8"
+1521,"7480000000000002FFA000000000000000F8","7480000000000002FFA200000000000000F8"
+1523,"7480000000000002FFA200000000000000F8","7480000000000002FFA400000000000000F8"
+1527,"7480000000000002FFA400000000000000F8","7480000000000002FFA600000000000000F8"
+1529,"7480000000000002FFA600000000000000F8","7480000000000002FFA800000000000000F8"
+1531,"7480000000000002FFA800000000000000F8","7480000000000002FFAA00000000000000F8"
+1533,"7480000000000002FFAA00000000000000F8","7480000000000002FFAC00000000000000F8"
+1535,"7480000000000002FFAC00000000000000F8","7480000000000002FFAE00000000000000F8"
+1537,"7480000000000002FFAE00000000000000F8","7480000000000002FFB000000000000000F8"
+1547,"7480000000000002FFB000000000000000F8","7480000000000002FFB200000000000000F8"
+1539,"7480000000000002FFB200000000000000F8","7480000000000002FFB300000000000000F8"
+1543,"7480000000000002FFB300000000000000F8","7480000000000002FFB500000000000000F8"
+1549,"7480000000000002FFB500000000000000F8","7480000000000002FFB800000000000000F8"
+1541,"7480000000000002FFB800000000000000F8","7480000000000002FFBA00000000000000F8"
+1545,"7480000000000002FFBA00000000000000F8","7480000000000002FFBC00000000000000F8"
+1551,"7480000000000002FFBC00000000000000F8","7480000000000002FFBE00000000000000F8"
+1553,"7480000000000002FFBE00000000000000F8","7480000000000002FFC000000000000000F8"
+1557,"7480000000000002FFC000000000000000F8","7480000000000002FFC200000000000000F8"
+1555,"7480000000000002FFC200000000000000F8","7480000000000002FFC400000000000000F8"
+1567,"7480000000000002FFC400000000000000F8","7480000000000002FFC500000000000000F8"
+1559,"7480000000000002FFC500000000000000F8","7480000000000002FFC700000000000000F8"
+1577,"7480000000000002FFC700000000000000F8","7480000000000002FFC800000000000000F8"
+1565,"7480000000000002FFC800000000000000F8","7480000000000002FFC900000000000000F8"
+1561,"7480000000000002FFC900000000000000F8","7480000000000002FFCB00000000000000F8"
+1569,"7480000000000002FFCB00000000000000F8","7480000000000002FFCD00000000000000F8"
+1563,"7480000000000002FFCD00000000000000F8","7480000000000002FFCE00000000000000F8"
+1571,"7480000000000002FFCE00000000000000F8","7480000000000002FFD400000000000000F8"
+1573,"7480000000000002FFD400000000000000F8","7480000000000002FFD600000000000000F8"
+1575,"7480000000000002FFD600000000000000F8","7480000000000002FFD800000000000000F8"
+1579,"7480000000000002FFD800000000000000F8","7480000000000002FFDA00000000000000F8"
+1589,"7480000000000002FFDA00000000000000F8","7480000000000002FFDC00000000000000F8"
+1581,"7480000000000002FFDC00000000000000F8","7480000000000002FFDD00000000000000F8"
+1591,"7480000000000002FFDD00000000000000F8","7480000000000002FFE000000000000000F8"
+1587,"7480000000000002FFE000000000000000F8","7480000000000002FFE200000000000000F8"
+1593,"7480000000000002FFE200000000000000F8","7480000000000002FFE400000000000000F8"
+1595,"7480000000000002FFE400000000000000F8","7480000000000002FFE600000000000000F8"
+1599,"7480000000000002FFE600000000000000F8","7480000000000002FFE800000000000000F8"
+1597,"7480000000000002FFE800000000000000F8","7480000000000002FFE900000000000000F8"
+1601,"7480000000000002FFE900000000000000F8","7480000000000002FFEB00000000000000F8"
+1603,"7480000000000002FFEB00000000000000F8","7480000000000002FFEE00000000000000F8"
+1605,"7480000000000002FFEE00000000000000F8","7480000000000002FFF000000000000000F8"
+1607,"7480000000000002FFF000000000000000F8","7480000000000002FFF200000000000000F8"
+1609,"7480000000000002FFF200000000000000F8","7480000000000002FFF400000000000000F8"
+1611,"7480000000000002FFF400000000000000F8","7480000000000002FFF600000000000000F8"
+1613,"7480000000000002FFF600000000000000F8","7480000000000002FFF800000000000000F8"
+1615,"7480000000000002FFF800000000000000F8","7480000000000002FFFA00000000000000F8"
+1621,"7480000000000002FFFA00000000000000F8","7480000000000002FFFC00000000000000F8"
+1623,"7480000000000002FFFC00000000000000F8","7480000000000002FFFD00000000000000F8"
+1617,"7480000000000002FFFD00000000000000F8","7480000000000002FFFE00000000000000F8"
+1619,"7480000000000002FFFE00000000000000F8","7480000000000003FF0000000000000000F8"
+1625,"7480000000000003FF0000000000000000F8","7480000000000003FF0400000000000000F8"
+1627,"7480000000000003FF0400000000000000F8","7480000000000003FF0600000000000000F8"
+1629,"7480000000000003FF0600000000000000F8","7480000000000003FF0800000000000000F8"
+1631,"7480000000000003FF0800000000000000F8","7480000000000003FF0A00000000000000F8"
+1633,"7480000000000003FF0A00000000000000F8","7480000000000003FF0C00000000000000F8"
+1635,"7480000000000003FF0C00000000000000F8","7480000000000003FF0E00000000000000F8"
+1637,"7480000000000003FF0E00000000000000F8","7480000000000003FF1000000000000000F8"
+1639,"7480000000000003FF1000000000000000F8","7480000000000003FF1200000000000000F8"
+1641,"7480000000000003FF1200000000000000F8","7480000000000003FF1400000000000000F8"
+1643,"7480000000000003FF1400000000000000F8","7480000000000003FF1600000000000000F8"
+1647,"7480000000000003FF1600000000000000F8","7480000000000003FF1800000000000000F8"
+1649,"7480000000000003FF1800000000000000F8","7480000000000003FF1A00000000000000F8"
+1651,"7480000000000003FF1A00000000000000F8","7480000000000003FF1C00000000000000F8"
+1645,"7480000000000003FF1C00000000000000F8","7480000000000003FF1E00000000000000F8"
+1657,"7480000000000003FF1E00000000000000F8","7480000000000003FF1F00000000000000F8"
+1655,"7480000000000003FF1F00000000000000F8","7480000000000003FF2000000000000000F8"
+1677,"7480000000000003FF2000000000000000F8","7480000000000003FF2300000000000000F8"
+1671,"7480000000000003FF2300000000000000F8","7480000000000003FF2400000000000000F8"
+1675,"7480000000000003FF2400000000000000F8","7480000000000003FF2500000000000000F8"
+1681,"7480000000000003FF2500000000000000F8","7480000000000003FF2600000000000000F8"
+1679,"7480000000000003FF2600000000000000F8","7480000000000003FF2700000000000000F8"
+1661,"7480000000000003FF2700000000000000F8","7480000000000003FF2900000000000000F8"
+1665,"7480000000000003FF2900000000000000F8","7480000000000003FF2A00000000000000F8"
+1663,"7480000000000003FF2A00000000000000F8","7480000000000003FF2B00000000000000F8"
+1659,"7480000000000003FF2B00000000000000F8","7480000000000003FF2C00000000000000F8"
+1653,"7480000000000003FF2C00000000000000F8","7480000000000003FF2D00000000000000F8"
+1667,"7480000000000003FF2D00000000000000F8","7480000000000003FF3300000000000000F8"
+1669,"7480000000000003FF3300000000000000F8","7480000000000003FF3500000000000000F8"
+1683,"7480000000000003FF3500000000000000F8","7480000000000003FF3B00000000000000F8"
+1685,"7480000000000003FF3B00000000000000F8","7480000000000003FF3E00000000000000F8"
+1687,"7480000000000003FF3E00000000000000F8","7480000000000003FF4000000000000000F8"
+1689,"7480000000000003FF4000000000000000F8","7480000000000003FF4200000000000000F8"
+1691,"7480000000000003FF4200000000000000F8","7480000000000003FF4300000000000000F8"
+1693,"7480000000000003FF4300000000000000F8","7480000000000003FF4600000000000000F8"
+1695,"7480000000000003FF4600000000000000F8","7480000000000003FF4800000000000000F8"
+1697,"7480000000000003FF4800000000000000F8","7480000000000003FF4A00000000000000F8"
+1699,"7480000000000003FF4A00000000000000F8","7480000000000003FF4C00000000000000F8"
+1701,"7480000000000003FF4C00000000000000F8","7480000000000003FF4E00000000000000F8"
+1705,"7480000000000003FF4E00000000000000F8","7480000000000003FF4F00000000000000F8"
+1711,"7480000000000003FF4F00000000000000F8","7480000000000003FF5200000000000000F8"
+1707,"7480000000000003FF5200000000000000F8","7480000000000003FF5300000000000000F8"
+1713,"7480000000000003FF5300000000000000F8","7480000000000003FF5600000000000000F8"
+1715,"7480000000000003FF5600000000000000F8","7480000000000003FF5800000000000000F8"
+1717,"7480000000000003FF5800000000000000F8","7480000000000003FF5A00000000000000F8"
+1719,"7480000000000003FF5A00000000000000F8","7480000000000003FF5C00000000000000F8"
+1721,"7480000000000003FF5C00000000000000F8","7480000000000003FF5E00000000000000F8"
+1723,"7480000000000003FF5E00000000000000F8","7480000000000003FF6000000000000000F8"
+1727,"7480000000000003FF6000000000000000F8","7480000000000003FF6200000000000000F8"
+1725,"7480000000000003FF6200000000000000F8","7480000000000003FF6300000000000000F8"
+1729,"7480000000000003FF6300000000000000F8","7480000000000003FF6600000000000000F8"
+1731,"7480000000000003FF6600000000000000F8","7480000000000003FF6800000000000000F8"
+1733,"7480000000000003FF6800000000000000F8","7480000000000003FF6A00000000000000F8"
+1735,"7480000000000003FF6A00000000000000F8","7480000000000003FF6C00000000000000F8"
+1741,"7480000000000003FF6C00000000000000F8","7480000000000003FF6E00000000000000F8"
+1737,"7480000000000003FF6E00000000000000F8","7480000000000003FF6F00000000000000F8"
+1765,"7480000000000003FF6F00000000000000F8","7480000000000003FF7200000000000000F8"
+1779,"7480000000000003FF7200000000000000F8","7480000000000003FF7300000000000000F8"
+1773,"7480000000000003FF7300000000000000F8","7480000000000003FF7400000000000000F8"
+1739,"7480000000000003FF7400000000000000F8","7480000000000003FF7500000000000000F8"
+1785,"7480000000000003FF7500000000000000F8","7480000000000003FF7600000000000000F8"
+1789,"7480000000000003FF7600000000000000F8","7480000000000003FF7700000000000000F8"
+1743,"7480000000000003FF7700000000000000F8","7480000000000003FF7800000000000000F8"
+1777,"7480000000000003FF7800000000000000F8","7480000000000003FF7A00000000000000F8"
+1775,"7480000000000003FF7A00000000000000F8","7480000000000003FF7B00000000000000F8"
+1771,"7480000000000003FF7B00000000000000F8","7480000000000003FF7D00000000000000F8"
+1761,"7480000000000003FF7D00000000000000F8","7480000000000003FF7E00000000000000F8"
+1745,"7480000000000003FF7E00000000000000F8","7480000000000003FF7F00000000000000F8"
+1755,"7480000000000003FF7F00000000000000F8","7480000000000003FF8100000000000000F8"
+1747,"7480000000000003FF8100000000000000F8","7480000000000003FF8200000000000000F8"
+1749,"7480000000000003FF8200000000000000F8","7480000000000003FF8400000000000000F8"
+1787,"7480000000000003FF8400000000000000F8","7480000000000003FF8500000000000000F8"
+1783,"7480000000000003FF8500000000000000F8","7480000000000003FF8600000000000000F8"
+1769,"7480000000000003FF8600000000000000F8","7480000000000003FF8800000000000000F8"
+1751,"7480000000000003FF8800000000000000F8","7480000000000003FF8900000000000000F8"
+1767,"7480000000000003FF8900000000000000F8","7480000000000003FF8B00000000000000F8"
+1753,"7480000000000003FF8B00000000000000F8","7480000000000003FF8C00000000000000F8"
+1757,"7480000000000003FF8C00000000000000F8","7480000000000003FF8E00000000000000F8"
+1759,"7480000000000003FF8E00000000000000F8","7480000000000003FF9100000000000000F8"
+1763,"7480000000000003FF9100000000000000F8","7480000000000003FF9400000000000000F8"
+1781,"7480000000000003FF9400000000000000F8","7480000000000003FF9D00000000000000F8"
+1791,"7480000000000003FF9D00000000000000F8","7480000000000003FFA400000000000000F8"
+1793,"7480000000000003FFA400000000000000F8","7480000000000003FFA600000000000000F8"
+1795,"7480000000000003FFA600000000000000F8","7480000000000003FFA800000000000000F8"
+1805,"7480000000000003FFA800000000000000F8","7480000000000003FFAA00000000000000F8"
+1799,"7480000000000003FFAA00000000000000F8","7480000000000003FFAC00000000000000F8"
+1807,"7480000000000003FFAC00000000000000F8","7480000000000003FFAD00000000000000F8"
+1803,"7480000000000003FFAD00000000000000F8","7480000000000003FFAE00000000000000F8"
+1809,"7480000000000003FFAE00000000000000F8","7480000000000003FFAF00000000000000F8"
+1797,"7480000000000003FFAF00000000000000F8","7480000000000003FFB000000000000000F8"
+1811,"7480000000000003FFB000000000000000F8","7480000000000003FFB600000000000000F8"
+1813,"7480000000000003FFB600000000000000F8","7480000000000003FFB800000000000000F8"
+1815,"7480000000000003FFB800000000000000F8","7480000000000003FFBA00000000000000F8"
+1817,"7480000000000003FFBA00000000000000F8","7480000000000003FFBC00000000000000F8"
+1819,"7480000000000003FFBC00000000000000F8","7480000000000003FFBE00000000000000F8"
+1821,"7480000000000003FFBE00000000000000F8","7480000000000003FFC000000000000000F8"
+1823,"7480000000000003FFC000000000000000F8","7480000000000003FFC200000000000000F8"
+1827,"7480000000000003FFC200000000000000F8","7480000000000003FFC400000000000000F8"
+1825,"7480000000000003FFC400000000000000F8","7480000000000003FFC600000000000000F8"
+1829,"7480000000000003FFC600000000000000F8","7480000000000003FFC800000000000000F8"
+1839,"7480000000000003FFC800000000000000F8","7480000000000003FFCA00000000000000F8"
+1837,"7480000000000003FFCA00000000000000F8","7480000000000003FFCB00000000000000F8"
+1831,"7480000000000003FFCB00000000000000F8","7480000000000003FFCC00000000000000F8"
+1833,"7480000000000003FFCC00000000000000F8","7480000000000003FFCE00000000000000F8"
+1841,"7480000000000003FFCE00000000000000F8","7480000000000003FFD600000000000000F8"
+1843,"7480000000000003FFD600000000000000F8","7480000000000003FFD800000000000000F8"
+1917,"7480000000000003FFD800000000000000F8","7480000000000003FFDC00000000000000F8"
+1893,"7480000000000003FFDC00000000000000F8","7480000000000003FFDD00000000000000F8"
+1847,"7480000000000003FFDD00000000000000F8","7480000000000003FFDE00000000000000F8"
+1869,"7480000000000003FFDE00000000000000F8","7480000000000003FFDF00000000000000F8"
+1899,"7480000000000003FFDF00000000000000F8","7480000000000003FFE000000000000000F8"
+1849,"7480000000000003FFE000000000000000F8","7480000000000003FFE100000000000000F8"
+1845,"7480000000000003FFE100000000000000F8","7480000000000003FFE200000000000000F8"
+1909,"7480000000000003FFE200000000000000F8","7480000000000003FFE600000000000000F8"
+1879,"7480000000000003FFE600000000000000F8","7480000000000003FFE700000000000000F8"
+1851,"7480000000000003FFE700000000000000F8","7480000000000003FFE800000000000000F8"
+1865,"7480000000000003FFE800000000000000F8","7480000000000003FFEA00000000000000F8"
+1863,"7480000000000003FFEA00000000000000F8","7480000000000003FFEB00000000000000F8"
+1853,"7480000000000003FFEB00000000000000F8","7480000000000003FFEC00000000000000F8"
+1855,"7480000000000003FFEC00000000000000F8","7480000000000003FFEE00000000000000F8"
+1857,"7480000000000003FFEE00000000000000F8","7480000000000003FFF000000000000000F8"
+1861,"7480000000000003FFF000000000000000F8","7480000000000003FFF200000000000000F8"
+1859,"7480000000000003FFF200000000000000F8","7480000000000003FFF300000000000000F8"
+1867,"7480000000000003FFF300000000000000F8","7480000000000003FFF800000000000000F8"
+1907,"7480000000000003FFF800000000000000F8","7480000000000003FFFB00000000000000F8"
+1915,"7480000000000003FFFB00000000000000F8","7480000000000003FFFC00000000000000F8"
+1897,"7480000000000003FFFC00000000000000F8","7480000000000003FFFD00000000000000F8"
+1905,"7480000000000003FFFD00000000000000F8","7480000000000003FFFE00000000000000F8"
+1891,"7480000000000003FFFE00000000000000F8","7480000000000003FFFF00000000000000F8"
+1873,"7480000000000003FFFF00000000000000F8","7480000000000004FF0000000000000000F8"
+1901,"7480000000000004FF0000000000000000F8","7480000000000004FF0100000000000000F8"
+1913,"7480000000000004FF0100000000000000F8","7480000000000004FF0200000000000000F8"
+1871,"7480000000000004FF0200000000000000F8","7480000000000004FF0300000000000000F8"
+1889,"7480000000000004FF0300000000000000F8","7480000000000004FF0600000000000000F8"
+1875,"7480000000000004FF0600000000000000F8","7480000000000004FF0700000000000000F8"
+1881,"7480000000000004FF0700000000000000F8","7480000000000004FF0900000000000000F8"
+1887,"7480000000000004FF0900000000000000F8","7480000000000004FF0A00000000000000F8"
+1877,"7480000000000004FF0A00000000000000F8","7480000000000004FF0B00000000000000F8"
+1885,"7480000000000004FF0B00000000000000F8","7480000000000004FF0F00000000000000F8"
+1883,"7480000000000004FF0F00000000000000F8","7480000000000004FF1000000000000000F8"
+1919,"7480000000000004FF1000000000000000F8","7480000000000004FF1800000000000000F8"
+1911,"7480000000000004FF1800000000000000F8","7480000000000004FF1900000000000000F8"
+1921,"7480000000000004FF1900000000000000F8","7480000000000004FF1A00000000000000F8"
+1895,"7480000000000004FF1A00000000000000F8","7480000000000004FF1B00000000000000F8"
+1903,"7480000000000004FF1B00000000000000F8","7480000000000004FF1F00000000000000F8"
+1923,"7480000000000004FF1F00000000000000F8","7480000000000004FF2A00000000000000F8"
+1925,"7480000000000004FF2A00000000000000F8","7480000000000004FF2C00000000000000F8"
+1929,"7480000000000004FF2C00000000000000F8","7480000000000004FF2E00000000000000F8"
+1927,"7480000000000004FF2E00000000000000F8","7480000000000004FF2F00000000000000F8"
+1931,"7480000000000004FF2F00000000000000F8","7480000000000004FF3200000000000000F8"
+1933,"7480000000000004FF3200000000000000F8","7480000000000004FF3400000000000000F8"
+1945,"7480000000000004FF3400000000000000F8","7480000000000004FF3600000000000000F8"
+1939,"7480000000000004FF3600000000000000F8","7480000000000004FF3700000000000000F8"
+1935,"7480000000000004FF3700000000000000F8","7480000000000004FF3800000000000000F8"
+1943,"7480000000000004FF3800000000000000F8","7480000000000004FF3B00000000000000F8"
+1941,"7480000000000004FF3B00000000000000F8","7480000000000004FF3C00000000000000F8"
+1951,"7480000000000004FF3C00000000000000F8","7480000000000004FF4000000000000000F8"
+1947,"7480000000000004FF4000000000000000F8","7480000000000004FF4100000000000000F8"
+1961,"7480000000000004FF4100000000000000F8","7480000000000004FF4400000000000000F8"
+1953,"7480000000000004FF4400000000000000F8","7480000000000004FF4500000000000000F8"
+1965,"7480000000000004FF4500000000000000F8","7480000000000004FF4700000000000000F8"
+1957,"7480000000000004FF4700000000000000F8","7480000000000004FF4800000000000000F8"
+1955,"7480000000000004FF4800000000000000F8","7480000000000004FF4900000000000000F8"
+1959,"7480000000000004FF4900000000000000F8","7480000000000004FF4C00000000000000F8"
+1967,"7480000000000004FF4C00000000000000F8","7480000000000004FF5000000000000000F8"
+1963,"7480000000000004FF5000000000000000F8","7480000000000004FF5200000000000000F8"
+1969,"7480000000000004FF5200000000000000F8","7480000000000004FF5400000000000000F8"
+1973,"7480000000000004FF5400000000000000F8","7480000000000004FF5600000000000000F8"
+1971,"7480000000000004FF5600000000000000F8","7480000000000004FF5700000000000000F8"
+1975,"7480000000000004FF5700000000000000F8","7480000000000004FF5A00000000000000F8"
+1977,"7480000000000004FF5A00000000000000F8","7480000000000004FF5C00000000000000F8"
+1979,"7480000000000004FF5C00000000000000F8","7480000000000004FF5E00000000000000F8"
+1983,"7480000000000004FF5E00000000000000F8","7480000000000004FF6000000000000000F8"
+1981,"7480000000000004FF6000000000000000F8","7480000000000004FF6100000000000000F8"
+1985,"7480000000000004FF6100000000000000F8","7480000000000004FF6400000000000000F8"
+1987,"7480000000000004FF6400000000000000F8","7480000000000004FF6600000000000000F8"
+1989,"7480000000000004FF6600000000000000F8","7480000000000004FF6800000000000000F8"
+1991,"7480000000000004FF6800000000000000F8","7480000000000004FF6A00000000000000F8"
+1995,"7480000000000004FF6A00000000000000F8","7480000000000004FF6C00000000000000F8"
+1993,"7480000000000004FF6C00000000000000F8","7480000000000004FF6D00000000000000F8"
+1997,"7480000000000004FF6D00000000000000F8","7480000000000004FF7000000000000000F8"
+1999,"7480000000000004FF7000000000000000F8","7480000000000004FF7200000000000000F8"
+2001,"7480000000000004FF7200000000000000F8","7480000000000004FF7400000000000000F8"
+2003,"7480000000000004FF7400000000000000F8","7480000000000004FF7600000000000000F8"
+2005,"7480000000000004FF7600000000000000F8","7480000000000004FF7800000000000000F8"
+2011,"7480000000000004FF7800000000000000F8","7480000000000004FF7A00000000000000F8"
+2007,"7480000000000004FF7A00000000000000F8","7480000000000004FF7C00000000000000F8"
+2013,"7480000000000004FF7C00000000000000F8","7480000000000004FF7E00000000000000F8"
+2015,"7480000000000004FF7E00000000000000F8","7480000000000004FF8000000000000000F8"
+2019,"7480000000000004FF8000000000000000F8","7480000000000004FF8200000000000000F8"
+2017,"7480000000000004FF8200000000000000F8","7480000000000004FF8300000000000000F8"
+2021,"7480000000000004FF8300000000000000F8","7480000000000004FF8600000000000000F8"
+2023,"7480000000000004FF8600000000000000F8","7480000000000004FF8800000000000000F8"
+2025,"7480000000000004FF8800000000000000F8","7480000000000004FF8A00000000000000F8"
+2027,"7480000000000004FF8A00000000000000F8","7480000000000004FF8C00000000000000F8"
+2029,"7480000000000004FF8C00000000000000F8","7480000000000004FF8E00000000000000F8"
+2033,"7480000000000004FF8E00000000000000F8","7480000000000004FF9000000000000000F8"
+2035,"7480000000000004FF9000000000000000F8","7480000000000004FF9200000000000000F8"
+2037,"7480000000000004FF9200000000000000F8","7480000000000004FF9400000000000000F8"
+2039,"7480000000000004FF9400000000000000F8","7480000000000004FF9600000000000000F8"
+2041,"7480000000000004FF9600000000000000F8","7480000000000004FF9800000000000000F8"
+2047,"7480000000000004FF9800000000000000F8","7480000000000004FF9A00000000000000F8"
+2043,"7480000000000004FF9A00000000000000F8","7480000000000004FF9B00000000000000F8"
+2049,"7480000000000004FF9B00000000000000F8","7480000000000004FF9E00000000000000F8"
+2051,"7480000000000004FF9E00000000000000F8","7480000000000004FFA000000000000000F8"
+2055,"7480000000000004FFA000000000000000F8","7480000000000004FFA200000000000000F8"
+2053,"7480000000000004FFA200000000000000F8","7480000000000004FFA300000000000000F8"
+2057,"7480000000000004FFA300000000000000F8","7480000000000004FFA600000000000000F8"
+2061,"7480000000000004FFA600000000000000F8","7480000000000004FFA800000000000000F8"
+2063,"7480000000000004FFA800000000000000F8","7480000000000004FFAA00000000000000F8"
+2065,"7480000000000004FFAA00000000000000F8","7480000000000004FFAC00000000000000F8"
+2075,"7480000000000004FFAC00000000000000F8","7480000000000004FFAE00000000000000F8"
+2059,"7480000000000004FFAE00000000000000F8","7480000000000004FFAF00000000000000F8"
+2073,"7480000000000004FFAF00000000000000F8","7480000000000004FFB200000000000000F8"
+2067,"7480000000000004FFB200000000000000F8","7480000000000004FFB400000000000000F8"
+2069,"7480000000000004FFB400000000000000F8","7480000000000004FFB600000000000000F8"
+2071,"7480000000000004FFB600000000000000F8","7480000000000004FFB800000000000000F8"
+2077,"7480000000000004FFB800000000000000F8","7480000000000004FFBA00000000000000F8"
+2081,"7480000000000004FFBA00000000000000F8","7480000000000004FFBB00000000000000F8"
+2083,"7480000000000004FFBB00000000000000F8","7480000000000004FFBE00000000000000F8"
+2085,"7480000000000004FFBE00000000000000F8","7480000000000004FFC000000000000000F8"
+2087,"7480000000000004FFC000000000000000F8","7480000000000004FFC200000000000000F8"
+2089,"7480000000000004FFC200000000000000F8","7480000000000004FFC400000000000000F8"
+2099,"7480000000000004FFC400000000000000F8","7480000000000004FFC600000000000000F8"
+2103,"7480000000000004FFC600000000000000F8","7480000000000004FFC800000000000000F8"
+2091,"7480000000000004FFC800000000000000F8","7480000000000004FFCA00000000000000F8"
+2097,"7480000000000004FFCA00000000000000F8","7480000000000004FFCC00000000000000F8"
+2105,"7480000000000004FFCC00000000000000F8","7480000000000004FFCE00000000000000F8"
+2107,"7480000000000004FFCE00000000000000F8","7480000000000004FFD000000000000000F8"
+2109,"7480000000000004FFD000000000000000F8","7480000000000004FFD200000000000000F8"
+2111,"7480000000000004FFD200000000000000F8","7480000000000004FFD400000000000000F8"
+2123,"7480000000000004FFD400000000000000F8","7480000000000004FFD600000000000000F8"
+2115,"7480000000000004FFD600000000000000F8","7480000000000004FFD700000000000000F8"
+2121,"7480000000000004FFD700000000000000F8","7480000000000004FFDA00000000000000F8"
+2113,"7480000000000004FFDA00000000000000F8","7480000000000004FFDB00000000000000F8"
+2125,"7480000000000004FFDB00000000000000F8","7480000000000004FFDE00000000000000F8"
+2127,"7480000000000004FFDE00000000000000F8","7480000000000004FFE000000000000000F8"
+2129,"7480000000000004FFE000000000000000F8","7480000000000004FFE200000000000000F8"
+2131,"7480000000000004FFE200000000000000F8","7480000000000004FFE400000000000000F8"
+2179,"7480000000000004FFE400000000000000F8","7480000000000004FFE600000000000000F8"
+2169,"7480000000000004FFE600000000000000F8","7480000000000004FFE700000000000000F8"
+2177,"7480000000000004FFE700000000000000F8","7480000000000004FFE800000000000000F8"
+2191,"7480000000000004FFE800000000000000F8","7480000000000004FFE900000000000000F8"
+2181,"7480000000000004FFE900000000000000F8","7480000000000004FFEA00000000000000F8"
+2173,"7480000000000004FFEA00000000000000F8","7480000000000004FFEB00000000000000F8"
+2189,"7480000000000004FFEB00000000000000F8","7480000000000004FFEC00000000000000F8"
+2185,"7480000000000004FFEC00000000000000F8","7480000000000004FFED00000000000000F8"
+2163,"7480000000000004FFED00000000000000F8","7480000000000004FFEE00000000000000F8"
+2133,"7480000000000004FFEE00000000000000F8","7480000000000004FFEF00000000000000F8"
+2161,"7480000000000004FFEF00000000000000F8","7480000000000004FFF100000000000000F8"
+2135,"7480000000000004FFF100000000000000F8","7480000000000004FFF200000000000000F8"
+2137,"7480000000000004FFF200000000000000F8","7480000000000004FFF400000000000000F8"
+2145,"7480000000000004FFF400000000000000F8","7480000000000004FFF600000000000000F8"
+2141,"7480000000000004FFF600000000000000F8","7480000000000004FFF700000000000000F8"
+2139,"7480000000000004FFF700000000000000F8","7480000000000004FFF800000000000000F8"
+2143,"7480000000000004FFF800000000000000F8","7480000000000004FFFB00000000000000F8"
+2147,"7480000000000004FFFB00000000000000F8","7480000000000004FFFE00000000000000F8"
+2149,"7480000000000004FFFE00000000000000F8","7480000000000005FF0000000000000000F8"
+2171,"7480000000000005FF0000000000000000F8","7480000000000005FF0200000000000000F8"
+2151,"7480000000000005FF0200000000000000F8","7480000000000005FF0300000000000000F8"
+2157,"7480000000000005FF0300000000000000F8","7480000000000005FF0400000000000000F8"
+2153,"7480000000000005FF0400000000000000F8","7480000000000005FF0500000000000000F8"
+2155,"7480000000000005FF0500000000000000F8","7480000000000005FF0800000000000000F8"
+2159,"7480000000000005FF0800000000000000F8","7480000000000005FF0B00000000000000F8"
+2165,"7480000000000005FF0B00000000000000F8","7480000000000005FF0E00000000000000F8"
+2167,"7480000000000005FF0E00000000000000F8","7480000000000005FF1100000000000000F8"
+2183,"7480000000000005FF1100000000000000F8","7480000000000005FF1900000000000000F8"
+2193,"7480000000000005FF1900000000000000F8","7480000000000005FF1E00000000000000F8"
+2195,"7480000000000005FF1E00000000000000F8","7480000000000005FF2000000000000000F8"
+2197,"7480000000000005FF2000000000000000F8","7480000000000005FF2200000000000000F8"
+2199,"7480000000000005FF2200000000000000F8","7480000000000005FF2400000000000000F8"
+2241,"7480000000000005FF2400000000000000F8","7480000000000005FF2500000000000000F8"
+2235,"7480000000000005FF2500000000000000F8","7480000000000005FF2700000000000000F8"
+2245,"7480000000000005FF2700000000000000F8","7480000000000005FF2800000000000000F8"
+2203,"7480000000000005FF2800000000000000F8","7480000000000005FF2900000000000000F8"
+2231,"7480000000000005FF2900000000000000F8","7480000000000005FF2A00000000000000F8"
+2201,"7480000000000005FF2A00000000000000F8","7480000000000005FF2B00000000000000F8"
+2221,"7480000000000005FF2B00000000000000F8","7480000000000005FF2E00000000000000F8"
+2253,"7480000000000005FF2E00000000000000F8","7480000000000005FF2F00000000000000F8"
+2229,"7480000000000005FF2F00000000000000F8","7480000000000005FF3000000000000000F8"
+2247,"7480000000000005FF3000000000000000F8","7480000000000005FF3100000000000000F8"
+2239,"7480000000000005FF3100000000000000F8","7480000000000005FF3200000000000000F8"
+2205,"7480000000000005FF3200000000000000F8","7480000000000005FF3300000000000000F8"
+2207,"7480000000000005FF3300000000000000F8","7480000000000005FF3400000000000000F8"
+2211,"7480000000000005FF3400000000000000F8","7480000000000005FF3600000000000000F8"
+2249,"7480000000000005FF3600000000000000F8","7480000000000005FF3700000000000000F8"
+2209,"7480000000000005FF3700000000000000F8","7480000000000005FF3900000000000000F8"
+2225,"7480000000000005FF3900000000000000F8","7480000000000005FF3C00000000000000F8"
+2223,"7480000000000005FF3C00000000000000F8","7480000000000005FF3D00000000000000F8"
+2219,"7480000000000005FF3D00000000000000F8","7480000000000005FF3E00000000000000F8"
+2227,"7480000000000005FF3E00000000000000F8","7480000000000005FF3F00000000000000F8"
+2213,"7480000000000005FF3F00000000000000F8","7480000000000005FF4000000000000000F8"
+2215,"7480000000000005FF4000000000000000F8","7480000000000005FF4200000000000000F8"
+2217,"7480000000000005FF4200000000000000F8","7480000000000005FF4400000000000000F8"
+2243,"7480000000000005FF4400000000000000F8","7480000000000005FF5000000000000000F8"
+2251,"7480000000000005FF5000000000000000F8","7480000000000005FF5500000000000000F8"
+2255,"7480000000000005FF5500000000000000F8","7480000000000005FF5800000000000000F8"
+2257,"7480000000000005FF5800000000000000F8","7480000000000005FF5A00000000000000F8"
+2259,"7480000000000005FF5A00000000000000F8","7480000000000005FF5C00000000000000F8"
+2265,"7480000000000005FF5C00000000000000F8","7480000000000005FF5E00000000000000F8"
+2333,"7480000000000005FF5E00000000000000F8","7480000000000005FF6000000000000000F8"
+2329,"7480000000000005FF6000000000000000F8","7480000000000005FF6100000000000000F8"
+2291,"7480000000000005FF6100000000000000F8","7480000000000005FF6200000000000000F8"
+2261,"7480000000000005FF6200000000000000F8","7480000000000005FF6300000000000000F8"
+2355,"7480000000000005FF6300000000000000F8","7480000000000005FF6500000000000000F8"
+2325,"7480000000000005FF6500000000000000F8","7480000000000005FF6600000000000000F8"
+2263,"7480000000000005FF6600000000000000F8","7480000000000005FF6700000000000000F8"
+2351,"7480000000000005FF6700000000000000F8","7480000000000005FF6800000000000000F8"
+2315,"7480000000000005FF6800000000000000F8","7480000000000005FF6900000000000000F8"
+2345,"7480000000000005FF6900000000000000F8","7480000000000005FF6B00000000000000F8"
+2341,"7480000000000005FF6B00000000000000F8","7480000000000005FF6C00000000000000F8"
+2269,"7480000000000005FF6C00000000000000F8","7480000000000005FF6D00000000000000F8"
+2331,"7480000000000005FF6D00000000000000F8","7480000000000005FF6E00000000000000F8"
+2267,"7480000000000005FF6E00000000000000F8","7480000000000005FF6F00000000000000F8"
+2271,"7480000000000005FF6F00000000000000F8","7480000000000005FF7100000000000000F8"
+2299,"7480000000000005FF7100000000000000F8","7480000000000005FF7400000000000000F8"
+2273,"7480000000000005FF7400000000000000F8","7480000000000005FF7500000000000000F8"
+2293,"7480000000000005FF7500000000000000F8","7480000000000005FF7700000000000000F8"
+2275,"7480000000000005FF7700000000000000F8","7480000000000005FF7800000000000000F8"
+2277,"7480000000000005FF7800000000000000F8","7480000000000005FF7A00000000000000F8"
+2279,"7480000000000005FF7A00000000000000F8","7480000000000005FF7C00000000000000F8"
+2281,"7480000000000005FF7C00000000000000F8","7480000000000005FF7E00000000000000F8"
+2287,"7480000000000005FF7E00000000000000F8","7480000000000005FF8000000000000000F8"
+2283,"7480000000000005FF8000000000000000F8","7480000000000005FF8100000000000000F8"
+2289,"7480000000000005FF8100000000000000F8","7480000000000005FF8300000000000000F8"
+2285,"7480000000000005FF8300000000000000F8","7480000000000005FF8400000000000000F8"
+2309,"7480000000000005FF8400000000000000F8","7480000000000005FF8A00000000000000F8"
+2295,"7480000000000005FF8A00000000000000F8","7480000000000005FF8B00000000000000F8"
+2311,"7480000000000005FF8B00000000000000F8","7480000000000005FF8D00000000000000F8"
+2297,"7480000000000005FF8D00000000000000F8","7480000000000005FF8E00000000000000F8"
+2301,"7480000000000005FF8E00000000000000F8","7480000000000005FF9000000000000000F8"
+2307,"7480000000000005FF9000000000000000F8","7480000000000005FF9100000000000000F8"
+2305,"7480000000000005FF9100000000000000F8","7480000000000005FF9200000000000000F8"
+2303,"7480000000000005FF9200000000000000F8","7480000000000005FF9500000000000000F8"
+2339,"7480000000000005FF9500000000000000F8","7480000000000005FF9B00000000000000F8"
+2349,"7480000000000005FF9B00000000000000F8","7480000000000005FF9C00000000000000F8"
+2361,"7480000000000005FF9C00000000000000F8","7480000000000005FF9D00000000000000F8"
+2313,"7480000000000005FF9D00000000000000F8","7480000000000005FF9E00000000000000F8"
+2317,"7480000000000005FF9E00000000000000F8","7480000000000005FFA000000000000000F8"
+2347,"7480000000000005FFA000000000000000F8","7480000000000005FFA100000000000000F8"
+2321,"7480000000000005FFA100000000000000F8","7480000000000005FFA400000000000000F8"
+2319,"7480000000000005FFA400000000000000F8","7480000000000005FFA500000000000000F8"
+2337,"7480000000000005FFA500000000000000F8","7480000000000005FFA700000000000000F8"
+2323,"7480000000000005FFA700000000000000F8","7480000000000005FFA800000000000000F8"
+2327,"7480000000000005FFA800000000000000F8","7480000000000005FFAB00000000000000F8"
+2335,"7480000000000005FFAB00000000000000F8","7480000000000005FFB000000000000000F8"
+2343,"7480000000000005FFB000000000000000F8","7480000000000005FFB500000000000000F8"
+2353,"7480000000000005FFB500000000000000F8","7480000000000005FFBD00000000000000F8"
+2357,"7480000000000005FFBD00000000000000F8","7480000000000005FFC000000000000000F8"
+2359,"7480000000000005FFC000000000000000F8","7480000000000005FFC200000000000000F8"
+2363,"7480000000000005FFC200000000000000F8","7480000000000005FFC400000000000000F8"
+2365,"7480000000000005FFC400000000000000F8","7480000000000005FFC600000000000000F8"
+2367,"7480000000000005FFC600000000000000F8","7480000000000005FFC800000000000000F8"
+2369,"7480000000000005FFC800000000000000F8","7480000000000005FFCA00000000000000F8"
+2377,"7480000000000005FFCA00000000000000F8","7480000000000005FFCC00000000000000F8"
+2373,"7480000000000005FFCC00000000000000F8","7480000000000005FFCD00000000000000F8"
+2371,"7480000000000005FFCD00000000000000F8","7480000000000005FFCE00000000000000F8"
+2379,"7480000000000005FFCE00000000000000F8","7480000000000005FFD200000000000000F8"
+2381,"7480000000000005FFD200000000000000F8","7480000000000005FFD400000000000000F8"
+2383,"7480000000000005FFD400000000000000F8","7480000000000005FFD600000000000000F8"
+2385,"7480000000000005FFD600000000000000F8","7480000000000005FFD800000000000000F8"
+2391,"7480000000000005FFD800000000000000F8","7480000000000005FFDA00000000000000F8"
+2395,"7480000000000005FFDA00000000000000F8","7480000000000005FFDB00000000000000F8"
+2397,"7480000000000005FFDB00000000000000F8","7480000000000005FFDE00000000000000F8"
+2399,"7480000000000005FFDE00000000000000F8","7480000000000005FFE000000000000000F8"
+2401,"7480000000000005FFE000000000000000F8","7480000000000005FFE200000000000000F8"
+2403,"7480000000000005FFE200000000000000F8","7480000000000005FFE400000000000000F8"
+2405,"7480000000000005FFE400000000000000F8","7480000000000005FFE600000000000000F8"
+2409,"7480000000000005FFE600000000000000F8","7480000000000005FFE800000000000000F8"
+2411,"7480000000000005FFE800000000000000F8","7480000000000005FFEA00000000000000F8"
+2413,"7480000000000005FFEA00000000000000F8","7480000000000005FFEC00000000000000F8"
+2407,"7480000000000005FFEC00000000000000F8","7480000000000005FFED00000000000000F8"
+2415,"7480000000000005FFED00000000000000F8","7480000000000005FFF000000000000000F8"
+2417,"7480000000000005FFF000000000000000F8","7480000000000005FFF200000000000000F8"
+2421,"7480000000000005FFF200000000000000F8","7480000000000005FFF400000000000000F8"
+2419,"7480000000000005FFF400000000000000F8","7480000000000005FFF600000000000000F8"
+2429,"7480000000000005FFF600000000000000F8","7480000000000005FFF800000000000000F8"
+2425,"7480000000000005FFF800000000000000F8","7480000000000005FFF900000000000000F8"
+2423,"7480000000000005FFF900000000000000F8","7480000000000005FFFB00000000000000F8"
+2431,"7480000000000005FFFB00000000000000F8","7480000000000005FFFE00000000000000F8"
+2433,"7480000000000005FFFE00000000000000F8","7480000000000006FF0000000000000000F8"
+2435,"7480000000000006FF0000000000000000F8","7480000000000006FF0200000000000000F8"
+2437,"7480000000000006FF0200000000000000F8","7480000000000006FF0400000000000000F8"
+2439,"7480000000000006FF0400000000000000F8","7480000000000006FF0600000000000000F8"
+2441,"7480000000000006FF0600000000000000F8","7480000000000006FF0800000000000000F8"
+2443,"7480000000000006FF0800000000000000F8","7480000000000006FF0A00000000000000F8"
+2445,"7480000000000006FF0A00000000000000F8","7480000000000006FF0C00000000000000F8"
+2449,"7480000000000006FF0C00000000000000F8","7480000000000006FF0E00000000000000F8"
+2447,"7480000000000006FF0E00000000000000F8","7480000000000006FF0F00000000000000F8"
+2451,"7480000000000006FF0F00000000000000F8","7480000000000006FF1200000000000000F8"
+2453,"7480000000000006FF1200000000000000F8","7480000000000006FF1400000000000000F8"
+2459,"7480000000000006FF1400000000000000F8","7480000000000006FF1600000000000000F8"
+2461,"7480000000000006FF1600000000000000F8","7480000000000006FF1800000000000000F8"
+2469,"7480000000000006FF1800000000000000F8","7480000000000006FF1A00000000000000F8"
+2463,"7480000000000006FF1A00000000000000F8","7480000000000006FF1B00000000000000F8"
+2455,"7480000000000006FF1B00000000000000F8","7480000000000006FF1C00000000000000F8"
+2457,"7480000000000006FF1C00000000000000F8","7480000000000006FF1D00000000000000F8"
+2465,"7480000000000006FF1D00000000000000F8","7480000000000006FF2100000000000000F8"
+2467,"7480000000000006FF2100000000000000F8","7480000000000006FF2300000000000000F8"
+2475,"7480000000000006FF2300000000000000F8","7480000000000006FF2600000000000000F8"
+2471,"7480000000000006FF2600000000000000F8","7480000000000006FF2800000000000000F8"
+2477,"7480000000000006FF2800000000000000F8","7480000000000006FF2A00000000000000F8"
+2479,"7480000000000006FF2A00000000000000F8","7480000000000006FF2C00000000000000F8"
+2481,"7480000000000006FF2C00000000000000F8","7480000000000006FF2E00000000000000F8"
+2483,"7480000000000006FF2E00000000000000F8","7480000000000006FF3000000000000000F8"
+2485,"7480000000000006FF3000000000000000F8","7480000000000006FF3200000000000000F8"
+2487,"7480000000000006FF3200000000000000F8","7480000000000006FF3400000000000000F8"
+2495,"7480000000000006FF3400000000000000F8","7480000000000006FF3600000000000000F8"
+2489,"7480000000000006FF3600000000000000F8","7480000000000006FF3700000000000000F8"
+2497,"7480000000000006FF3700000000000000F8","7480000000000006FF3A00000000000000F8"
+2499,"7480000000000006FF3A00000000000000F8","7480000000000006FF3C00000000000000F8"
+2491,"7480000000000006FF3C00000000000000F8","7480000000000006FF3E00000000000000F8"
+2513,"7480000000000006FF3E00000000000000F8","7480000000000006FF4000000000000000F8"
+2501,"7480000000000006FF4000000000000000F8","7480000000000006FF4100000000000000F8"
+2507,"7480000000000006FF4100000000000000F8","7480000000000006FF4300000000000000F8"
+2511,"7480000000000006FF4300000000000000F8","7480000000000006FF4400000000000000F8"
+2503,"7480000000000006FF4400000000000000F8","7480000000000006FF4500000000000000F8"
+2505,"7480000000000006FF4500000000000000F8","7480000000000006FF4700000000000000F8"
+2515,"7480000000000006FF4700000000000000F8","7480000000000006FF4C00000000000000F8"
+2517,"7480000000000006FF4C00000000000000F8","7480000000000006FF4E00000000000000F8"
+2519,"7480000000000006FF4E00000000000000F8","7480000000000006FF5000000000000000F8"
+2521,"7480000000000006FF5000000000000000F8","7480000000000006FF5200000000000000F8"
+2523,"7480000000000006FF5200000000000000F8","7480000000000006FF5400000000000000F8"
+2525,"7480000000000006FF5400000000000000F8","7480000000000006FF5600000000000000F8"
+2531,"7480000000000006FF5600000000000000F8","7480000000000006FF5800000000000000F8"
+2527,"7480000000000006FF5800000000000000F8","7480000000000006FF5900000000000000F8"
+2549,"7480000000000006FF5900000000000000F8","7480000000000006FF5B00000000000000F8"
+2529,"7480000000000006FF5B00000000000000F8","7480000000000006FF5C00000000000000F8"
+2547,"7480000000000006FF5C00000000000000F8","7480000000000006FF5F00000000000000F8"
+2563,"7480000000000006FF5F00000000000000F8","7480000000000006FF6000000000000000F8"
+2533,"7480000000000006FF6000000000000000F8","7480000000000006FF6100000000000000F8"
+2553,"7480000000000006FF6100000000000000F8","7480000000000006FF6200000000000000F8"
+2555,"7480000000000006FF6200000000000000F8","7480000000000006FF6400000000000000F8"
+2567,"7480000000000006FF6400000000000000F8","7480000000000006FF6500000000000000F8"
+2557,"7480000000000006FF6500000000000000F8","7480000000000006FF6600000000000000F8"
+2559,"7480000000000006FF6600000000000000F8","7480000000000006FF6700000000000000F8"
+2565,"7480000000000006FF6700000000000000F8","7480000000000006FF6800000000000000F8"
+2561,"7480000000000006FF6800000000000000F8","7480000000000006FF6900000000000000F8"
+2545,"7480000000000006FF6900000000000000F8","7480000000000006FF6A00000000000000F8"
+2541,"7480000000000006FF6A00000000000000F8","7480000000000006FF6B00000000000000F8"
+2535,"7480000000000006FF6B00000000000000F8","7480000000000006FF6C00000000000000F8"
+2537,"7480000000000006FF6C00000000000000F8","7480000000000006FF6E00000000000000F8"
+2539,"7480000000000006FF6E00000000000000F8","7480000000000006FF7000000000000000F8"
+2543,"7480000000000006FF7000000000000000F8","7480000000000006FF7300000000000000F8"
+2551,"7480000000000006FF7300000000000000F8","7480000000000006FF7800000000000000F8"
+2571,"7480000000000006FF7800000000000000F8","7480000000000006FF8200000000000000F8"
+2573,"7480000000000006FF8200000000000000F8","7480000000000006FF8400000000000000F8"
+2575,"7480000000000006FF8400000000000000F8","7480000000000006FF8600000000000000F8"
+2569,"7480000000000006FF8600000000000000F8","7480000000000006FF8800000000000000F8"
+2577,"7480000000000006FF8800000000000000F8","7480000000000006FF8A00000000000000F8"
+2579,"7480000000000006FF8A00000000000000F8","7480000000000006FF8C00000000000000F8"
+2583,"7480000000000006FF8C00000000000000F8","7480000000000006FF8D00000000000000F8"
+2589,"7480000000000006FF8D00000000000000F8","7480000000000006FF9000000000000000F8"
+2585,"7480000000000006FF9000000000000000F8","7480000000000006FF9100000000000000F8"
+2591,"7480000000000006FF9100000000000000F8","7480000000000006FF9400000000000000F8"
+2593,"7480000000000006FF9400000000000000F8","7480000000000006FF9600000000000000F8"
+2595,"7480000000000006FF9600000000000000F8","7480000000000006FF9800000000000000F8"
+2599,"7480000000000006FF9800000000000000F8","7480000000000006FF9A00000000000000F8"
+2587,"7480000000000006FF9A00000000000000F8","7480000000000006FF9C00000000000000F8"
+2603,"7480000000000006FF9C00000000000000F8","7480000000000006FF9E00000000000000F8"
+2605,"7480000000000006FF9E00000000000000F8","7480000000000006FFA000000000000000F8"
+2607,"7480000000000006FFA000000000000000F8","7480000000000006FFA200000000000000F8"
+2609,"7480000000000006FFA200000000000000F8","7480000000000006FFA300000000000000F8"
+2597,"7480000000000006FFA300000000000000F8","7480000000000006FFA400000000000000F8"
+2601,"7480000000000006FFA400000000000000F8","7480000000000006FFA600000000000000F8"
+2611,"7480000000000006FFA600000000000000F8","7480000000000006FFA900000000000000F8"
+2615,"7480000000000006FFA900000000000000F8","7480000000000006FFAC00000000000000F8"
+2613,"7480000000000006FFAC00000000000000F8","7480000000000006FFAD00000000000000F8"
+2617,"7480000000000006FFAD00000000000000F8","7480000000000006FFB000000000000000F8"
+2619,"7480000000000006FFB000000000000000F8","7480000000000006FFB200000000000000F8"
+2625,"7480000000000006FFB200000000000000F8","7480000000000006FFB400000000000000F8"
+2621,"7480000000000006FFB400000000000000F8","7480000000000006FFB600000000000000F8"
+2627,"7480000000000006FFB600000000000000F8","7480000000000006FFB800000000000000F8"
+2629,"7480000000000006FFB800000000000000F8","7480000000000006FFBA00000000000000F8"
+2637,"7480000000000006FFBA00000000000000F8","7480000000000006FFBC00000000000000F8"
+2639,"7480000000000006FFBC00000000000000F8","7480000000000006FFBE00000000000000F8"
+2633,"7480000000000006FFBE00000000000000F8","7480000000000006FFC000000000000000F8"
+2641,"7480000000000006FFC000000000000000F8","7480000000000006FFC100000000000000F8"
+2631,"7480000000000006FFC100000000000000F8","7480000000000006FFC200000000000000F8"
+2693,"7480000000000006FFC200000000000000F8","7480000000000006FFC500000000000000F8"
+2667,"7480000000000006FFC500000000000000F8","7480000000000006FFC700000000000000F8"
+2643,"7480000000000006FFC700000000000000F8","7480000000000006FFC800000000000000F8"
+2671,"7480000000000006FFC800000000000000F8","7480000000000006FFC900000000000000F8"
+2711,"7480000000000006FFC900000000000000F8","7480000000000006FFCA00000000000000F8"
+2645,"7480000000000006FFCA00000000000000F8","7480000000000006FFCB00000000000000F8"
+2705,"7480000000000006FFCB00000000000000F8","7480000000000006FFCE00000000000000F8"
+2707,"7480000000000006FFCE00000000000000F8","7480000000000006FFCF00000000000000F8"
+2647,"7480000000000006FFCF00000000000000F8","7480000000000006FFD000000000000000F8"
+2701,"7480000000000006FFD000000000000000F8","7480000000000006FFD100000000000000F8"
+2695,"7480000000000006FFD100000000000000F8","7480000000000006FFD300000000000000F8"
+2709,"7480000000000006FFD300000000000000F8","7480000000000006FFD400000000000000F8"
+2651,"7480000000000006FFD400000000000000F8","7480000000000006FFD500000000000000F8"
+2665,"7480000000000006FFD500000000000000F8","7480000000000006FFD600000000000000F8"
+2649,"7480000000000006FFD600000000000000F8","7480000000000006FFD700000000000000F8"
+2653,"7480000000000006FFD700000000000000F8","7480000000000006FFDA00000000000000F8"
+2679,"7480000000000006FFDA00000000000000F8","7480000000000006FFDB00000000000000F8"
+2657,"7480000000000006FFDB00000000000000F8","7480000000000006FFDD00000000000000F8"
+2655,"7480000000000006FFDD00000000000000F8","7480000000000006FFDE00000000000000F8"
+2691,"7480000000000006FFDE00000000000000F8","7480000000000006FFE100000000000000F8"
+2699,"7480000000000006FFE100000000000000F8","7480000000000006FFE200000000000000F8"
+2659,"7480000000000006FFE200000000000000F8","7480000000000006FFE300000000000000F8"
+2663,"7480000000000006FFE300000000000000F8","7480000000000006FFE500000000000000F8"
+2661,"7480000000000006FFE500000000000000F8","7480000000000006FFE600000000000000F8"
+2669,"7480000000000006FFE600000000000000F8","7480000000000006FFEB00000000000000F8"
+2683,"7480000000000006FFEB00000000000000F8","7480000000000006FFEE00000000000000F8"
+2697,"7480000000000006FFEE00000000000000F8","7480000000000006FFEF00000000000000F8"
+2681,"7480000000000006FFEF00000000000000F8","7480000000000006FFF000000000000000F8"
+2703,"7480000000000006FFF000000000000000F8","7480000000000006FFF100000000000000F8"
+2673,"7480000000000006FFF100000000000000F8","7480000000000006FFF200000000000000F8"
+2675,"7480000000000006FFF200000000000000F8","7480000000000006FFF400000000000000F8"
+2677,"7480000000000006FFF400000000000000F8","7480000000000006FFF600000000000000F8"
+2687,"7480000000000006FFF600000000000000F8","7480000000000006FFFB00000000000000F8"
+2685,"7480000000000006FFFB00000000000000F8","7480000000000006FFFC00000000000000F8"
+2689,"7480000000000006FFFC00000000000000F8","7480000000000006FFFF00000000000000F8"
+2713,"7480000000000006FFFF00000000000000F8","7480000000000007FF0C00000000000000F8"
+2715,"7480000000000007FF0C00000000000000F8","7480000000000007FF0E00000000000000F8"
+2717,"7480000000000007FF0E00000000000000F8","7480000000000007FF1000000000000000F8"
+2719,"7480000000000007FF1000000000000000F8","7480000000000007FF1200000000000000F8"
+2721,"7480000000000007FF1200000000000000F8","7480000000000007FF1400000000000000F8"
+2723,"7480000000000007FF1400000000000000F8","7480000000000007FF1600000000000000F8"
+2725,"7480000000000007FF1600000000000000F8","7480000000000007FF1800000000000000F8"
+2727,"7480000000000007FF1800000000000000F8","7480000000000007FF1A00000000000000F8"
+2729,"7480000000000007FF1A00000000000000F8","7480000000000007FF1C00000000000000F8"
+2731,"7480000000000007FF1C00000000000000F8","7480000000000007FF1E00000000000000F8"
+2733,"7480000000000007FF1E00000000000000F8","7480000000000007FF2000000000000000F8"
+2735,"7480000000000007FF2000000000000000F8","7480000000000007FF2100000000000000F8"
+2739,"7480000000000007FF2100000000000000F8","7480000000000007FF2400000000000000F8"
+2741,"7480000000000007FF2400000000000000F8","7480000000000007FF2600000000000000F8"
+2745,"7480000000000007FF2600000000000000F8","7480000000000007FF2800000000000000F8"
+2743,"7480000000000007FF2800000000000000F8","7480000000000007FF2900000000000000F8"
+2753,"7480000000000007FF2900000000000000F8","7480000000000007FF2C00000000000000F8"
+2747,"7480000000000007FF2C00000000000000F8","7480000000000007FF2D00000000000000F8"
+2751,"7480000000000007FF2D00000000000000F8","7480000000000007FF2F00000000000000F8"
+2755,"7480000000000007FF2F00000000000000F8","7480000000000007FF3200000000000000F8"
+2763,"7480000000000007FF3200000000000000F8","7480000000000007FF3400000000000000F8"
+2765,"7480000000000007FF3400000000000000F8","7480000000000007FF3600000000000000F8"
+2759,"7480000000000007FF3600000000000000F8","7480000000000007FF3800000000000000F8"
+2757,"7480000000000007FF3800000000000000F8","7480000000000007FF3900000000000000F8"
+2761,"7480000000000007FF3900000000000000F8","7480000000000007FF3B00000000000000F8"
+2767,"7480000000000007FF3B00000000000000F8","7480000000000007FF3E00000000000000F8"
+2769,"7480000000000007FF3E00000000000000F8","7480000000000007FF4000000000000000F8"
+2773,"7480000000000007FF4000000000000000F8","7480000000000007FF4200000000000000F8"
+2775,"7480000000000007FF4200000000000000F8","7480000000000007FF4300000000000000F8"
+2771,"7480000000000007FF4300000000000000F8","7480000000000007FF4400000000000000F8"
+2777,"7480000000000007FF4400000000000000F8","7480000000000007FF4700000000000000F8"
+2783,"7480000000000007FF4700000000000000F8","7480000000000007FF4A00000000000000F8"
+2779,"7480000000000007FF4A00000000000000F8","7480000000000007FF4C00000000000000F8"
+2789,"7480000000000007FF4C00000000000000F8","7480000000000007FF4D00000000000000F8"
+2787,"7480000000000007FF4D00000000000000F8","7480000000000007FF5000000000000000F8"
+2797,"7480000000000007FF5000000000000000F8","7480000000000007FF5200000000000000F8"
+2791,"7480000000000007FF5200000000000000F8","7480000000000007FF5400000000000000F8"
+2793,"7480000000000007FF5400000000000000F8","7480000000000007FF5600000000000000F8"
+2795,"7480000000000007FF5600000000000000F8","7480000000000007FF5800000000000000F8"
+2799,"7480000000000007FF5800000000000000F8","7480000000000007FF5A00000000000000F8"
+2801,"7480000000000007FF5A00000000000000F8","7480000000000007FF5C00000000000000F8"
+2803,"7480000000000007FF5C00000000000000F8","7480000000000007FF5E00000000000000F8"
+2805,"7480000000000007FF5E00000000000000F8","7480000000000007FF6000000000000000F8"
+2807,"7480000000000007FF6000000000000000F8","7480000000000007FF6200000000000000F8"
+2809,"7480000000000007FF6200000000000000F8","7480000000000007FF6400000000000000F8"
+2811,"7480000000000007FF6400000000000000F8","7480000000000007FF6600000000000000F8"
+2823,"7480000000000007FF6600000000000000F8","7480000000000007FF6800000000000000F8"
+2813,"7480000000000007FF6800000000000000F8","7480000000000007FF6A00000000000000F8"
+2815,"7480000000000007FF6A00000000000000F8","7480000000000007FF6B00000000000000F8"
+2821,"7480000000000007FF6B00000000000000F8","7480000000000007FF6E00000000000000F8"
+2817,"7480000000000007FF6E00000000000000F8","7480000000000007FF6F00000000000000F8"
+2825,"7480000000000007FF6F00000000000000F8","7480000000000007FF7200000000000000F8"
+2827,"7480000000000007FF7200000000000000F8","7480000000000007FF7400000000000000F8"
+2829,"7480000000000007FF7400000000000000F8","7480000000000007FF7600000000000000F8"
+2831,"7480000000000007FF7600000000000000F8","7480000000000007FF7800000000000000F8"
+2833,"7480000000000007FF7800000000000000F8","7480000000000007FF7A00000000000000F8"
+2839,"7480000000000007FF7A00000000000000F8","7480000000000007FF7B00000000000000F8"
+2843,"7480000000000007FF7B00000000000000F8","7480000000000007FF7C00000000000000F8"
+2837,"7480000000000007FF7C00000000000000F8","7480000000000007FF7E00000000000000F8"
+2835,"7480000000000007FF7E00000000000000F8","7480000000000007FF8000000000000000F8"
+2841,"7480000000000007FF8000000000000000F8","7480000000000007FF8300000000000000F8"
+2845,"7480000000000007FF8300000000000000F8","7480000000000007FF8600000000000000F8"
+2851,"7480000000000007FF8600000000000000F8","7480000000000007FF8800000000000000F8"
+2849,"7480000000000007FF8800000000000000F8","7480000000000007FF8900000000000000F8"
+2853,"7480000000000007FF8900000000000000F8","7480000000000007FF8C00000000000000F8"
+2857,"7480000000000007FF8C00000000000000F8","7480000000000007FF8E00000000000000F8"
+2859,"7480000000000007FF8E00000000000000F8","7480000000000007FF9000000000000000F8"
+2861,"7480000000000007FF9000000000000000F8","7480000000000007FF9200000000000000F8"
+2863,"7480000000000007FF9200000000000000F8","7480000000000007FF9400000000000000F8"
+2865,"7480000000000007FF9400000000000000F8","7480000000000007FF9600000000000000F8"
+2867,"7480000000000007FF9600000000000000F8","7480000000000007FF9800000000000000F8"
+2869,"7480000000000007FF9800000000000000F8","7480000000000007FF9A00000000000000F8"
+2871,"7480000000000007FF9A00000000000000F8","7480000000000007FF9C00000000000000F8"
+2873,"7480000000000007FF9C00000000000000F8","7480000000000007FF9E00000000000000F8"
+2875,"7480000000000007FF9E00000000000000F8","7480000000000007FFA000000000000000F8"
+2879,"7480000000000007FFA000000000000000F8","7480000000000007FFA200000000000000F8"
+2877,"7480000000000007FFA200000000000000F8","7480000000000007FFA300000000000000F8"
+2881,"7480000000000007FFA300000000000000F8","7480000000000007FFA600000000000000F8"
+2903,"7480000000000007FFA600000000000000F8","7480000000000007FFA800000000000000F8"
+2895,"7480000000000007FFA800000000000000F8","7480000000000007FFA900000000000000F8"
+2899,"7480000000000007FFA900000000000000F8","7480000000000007FFAA00000000000000F8"
+2901,"7480000000000007FFAA00000000000000F8","7480000000000007FFAB00000000000000F8"
+2891,"7480000000000007FFAB00000000000000F8","7480000000000007FFAC00000000000000F8"
+2907,"7480000000000007FFAC00000000000000F8","7480000000000007FFAD00000000000000F8"
+2909,"7480000000000007FFAD00000000000000F8","7480000000000007FFAE00000000000000F8"
+2885,"7480000000000007FFAE00000000000000F8","7480000000000007FFAF00000000000000F8"
+2905,"7480000000000007FFAF00000000000000F8","7480000000000007FFB000000000000000F8"
+2883,"7480000000000007FFB000000000000000F8","7480000000000007FFB100000000000000F8"
+2893,"7480000000000007FFB100000000000000F8","7480000000000007FFB300000000000000F8"
+2897,"7480000000000007FFB300000000000000F8","7480000000000007FFB400000000000000F8"
+2887,"7480000000000007FFB400000000000000F8","7480000000000007FFB500000000000000F8"
+2889,"7480000000000007FFB500000000000000F8","7480000000000007FFB700000000000000F8"
+2911,"7480000000000007FFB700000000000000F8","7480000000000007FFCB00000000000000F8"
+2913,"7480000000000007FFCB00000000000000F8","7480000000000007FFCF00000000000000F8"
+2915,"7480000000000007FFCF00000000000000F8","7480000000000007FFD100000000000000F8"
+2917,"7480000000000007FFD100000000000000F8","7480000000000007FFD600000000000000F8"
+2919,"7480000000000007FFD600000000000000F8","7480000000000007FFDF00000000000000F8"
+2921,"7480000000000007FFDF00000000000000F8","7480000000000007FFE300000000000000F8"
+2923,"7480000000000007FFE300000000000000F8","7480000000000007FFE500000000000000F8"
+2925,"7480000000000007FFE500000000000000F8","7480000000000007FFEA00000000000000F8"
+2927,"7480000000000007FFEA00000000000000F8","7480000000000007FFF700000000000000F8"
+2929,"7480000000000007FFF700000000000000F8","7480000000000007FFFB00000000000000F8"
+2931,"7480000000000007FFFB00000000000000F8","7480000000000008FF0000000000000000F8"
+2933,"7480000000000008FF0000000000000000F8","7480000000000008FF0600000000000000F8"
+2935,"7480000000000008FF0600000000000000F8","7480000000000008FF0E00000000000000F8"
+2937,"7480000000000008FF0E00000000000000F8","7480000000000008FF1300000000000000F8"
+2939,"7480000000000008FF1300000000000000F8","7480000000000008FF1800000000000000F8"
+2941,"7480000000000008FF1800000000000000F8","7480000000000008FF1A00000000000000F8"
+2943,"7480000000000008FF1A00000000000000F8","7480000000000008FF2200000000000000F8"
+2945,"7480000000000008FF2200000000000000F8","7480000000000008FF2700000000000000F8"
+2947,"7480000000000008FF2700000000000000F8","7480000000000008FF2E00000000000000F8"
+2949,"7480000000000008FF2E00000000000000F8","7480000000000008FF3000000000000000F8"
+4001,"7480000000000008FF3000000000000000F8","7480000000000008FF4300000000000000F8"
+4003,"7480000000000008FF4300000000000000F8","7480000000000008FF4400000000000000F8"
+4005,"7480000000000008FF4400000000000000F8","7480000000000008FF4500000000000000F8"
+4007,"7480000000000008FF4500000000000000F8","7480000000000008FF4600000000000000F8"
+4009,"7480000000000008FF4600000000000000F8","7480000000000008FF5000000000000000F8"
+4017,"7480000000000008FF5000000000000000F8","7480000000000008FF505F728000000000FF0EA6010000000000FA"
+4011,"7480000000000008FF505F728000000000FF0EA6010000000000FA","7480000000000008FF5100000000000000F8"
+4019,"7480000000000008FF5100000000000000F8","7480000000000008FF515F728000000000FF2D2A810000000000FA"
+4013,"7480000000000008FF515F728000000000FF2D2A810000000000FA","7480000000000008FF5200000000000000F8"
+4021,"7480000000000008FF5200000000000000F8","7480000000000008FF525F728000000000FF4BAF010000000000FA"
+4015,"7480000000000008FF525F728000000000FF4BAF010000000000FA","7480000000000008FF5300000000000000F8"
+4023,"7480000000000008FF5300000000000000F8","7480000000000008FF535F728000000000FF6A33810000000000FA"
+4025,"7480000000000008FF535F728000000000FF6A33810000000000FA","7480000000000008FF5500000000000000F8"
+5001,"7480000000000008FF5500000000000000F8","7480000000000008FF5800000000000000F8"
+5005,"7480000000000008FF5800000000000000F8","7480000000000008FF585F698000000000FF0000010380000000FF000EA60103800000FF00000EA601000000FC"
+5009,"7480000000000008FF585F698000000000FF0000010380000000FF000EA60103800000FF00000EA601000000FC","7480000000000008FF585F698000000000FF0000010380000000FF001D4C0103800000FF00001D4C01000000FC"
+5013,"7480000000000008FF585F698000000000FF0000010380000000FF001D4C0103800000FF00001D4C01000000FC","7480000000000008FF585F698000000000FF0000010380000000FF002BF20103800000FF00002BF201000000FC"
+5017,"7480000000000008FF585F698000000000FF0000010380000000FF002BF20103800000FF00002BF201000000FC","7480000000000008FF585F698000000000FF0000010380000000FF003A980103800000FF00003A9801000000FC"
+5021,"7480000000000008FF585F698000000000FF0000010380000000FF003A980103800000FF00003A9801000000FC","7480000000000008FF585F698000000000FF0000010380000000FF00493E0103800000FF0000493E01000000FC"
+5025,"7480000000000008FF585F698000000000FF0000010380000000FF00493E0103800000FF0000493E01000000FC","7480000000000008FF585F698000000000FF0000010380000000FF0057E40103800000FF000057E401000000FC"
+5029,"7480000000000008FF585F698000000000FF0000010380000000FF0057E40103800000FF000057E401000000FC","7480000000000008FF585F698000000000FF0000010380000000FF00668A0103800000FF0000668A01000000FC"
+5003,"7480000000000008FF585F698000000000FF0000010380000000FF00668A0103800000FF0000668A01000000FC","7480000000000008FF585F728000000000FF013EB00000000000FA"
+5007,"7480000000000008FF585F728000000000FF013EB00000000000FA","7480000000000008FF585F728000000000FF0FE4B00000000000FA"
+5011,"7480000000000008FF585F728000000000FF0FE4B00000000000FA","7480000000000008FF585F728000000000FF1E8AB00000000000FA"
+5015,"7480000000000008FF585F728000000000FF1E8AB00000000000FA","7480000000000008FF585F728000000000FF2D30B00000000000FA"
+5019,"7480000000000008FF585F728000000000FF2D30B00000000000FA","7480000000000008FF585F728000000000FF3BD6B00000000000FA"
+5023,"7480000000000008FF585F728000000000FF3BD6B00000000000FA","7480000000000008FF585F728000000000FF4A7CB00000000000FA"
+5027,"7480000000000008FF585F728000000000FF4A7CB00000000000FA","7480000000000008FF585F728000000000FF5922B00000000000FA"
+5031,"7480000000000008FF585F728000000000FF5922B00000000000FA","7480000000000008FF585F728000000000FF67C8B00000000000FA"
+5033,"7480000000000008FF585F728000000000FF67C8B00000000000FA","7480000000000008FF5B00000000000000F8"
+5043,"7480000000000008FF5B00000000000000F8","7480000000000008FF5B5F698000000000FF0000010380000000FF000EA60103800000FF00000EA601000000FC"
+5041,"7480000000000008FF5B5F698000000000FF0000010380000000FF000EA60103800000FF00000EA601000000FC","7480000000000008FF5B5F728000000000FF02BF210000000000FA"
+5045,"7480000000000008FF5B5F728000000000FF02BF210000000000FA","7480000000000008FF5B5F728000000000FF1165210000000000FA"
+5035,"7480000000000008FF5B5F728000000000FF1165210000000000FA","7480000000000008FF5C00000000000000F8"
+5049,"7480000000000008FF5C00000000000000F8","7480000000000008FF5C5F698000000000FF0000010380000000FF002D2A8103800000FF00002D2A81000000FC"
+5047,"7480000000000008FF5C5F698000000000FF0000010380000000FF002D2A8103800000FF00002D2A81000000FC","7480000000000008FF5C5F728000000000FF2191C10000000000FA"
+5051,"7480000000000008FF5C5F728000000000FF2191C10000000000FA","7480000000000008FF5C5F728000000000FF3037C10000000000FA"
+5037,"7480000000000008FF5C5F728000000000FF3037C10000000000FA","7480000000000008FF5D00000000000000F8"
+5057,"7480000000000008FF5D00000000000000F8","7480000000000008FF5D5F698000000000FF0000010380000000FF004BAF0103800000FF00004BAF01000000FC"
+5053,"7480000000000008FF5D5F698000000000FF0000010380000000FF004BAF0103800000FF00004BAF01000000FC","7480000000000008FF5D5F728000000000FF3F7A010000000000FA"
+5055,"7480000000000008FF5D5F728000000000FF3F7A010000000000FA","7480000000000008FF5D5F728000000000FF4E20010000000000FA"
+5039,"7480000000000008FF5D5F728000000000FF4E20010000000000FA","7480000000000008FF5E00000000000000F8"
+5061,"7480000000000008FF5E00000000000000F8","7480000000000008FF5E5F698000000000FF0000010380000000FF006A338103800000FF00006A3381000000FC"
+5059,"7480000000000008FF5E5F698000000000FF0000010380000000FF006A338103800000FF00006A3381000000FC","7480000000000008FF5E5F728000000000FF5E25910000000000FA"
+5063,"7480000000000008FF5E5F728000000000FF5E25910000000000FA","7480000000000008FF5E5F728000000000FF6CCB910000000000FA"
+2,"7480000000000008FF5E5F728000000000FF6CCB910000000000FA",""
diff --git a/v4/export/sql.go b/v4/export/sql.go
index 5e37fa9..d8b731b 100644
--- a/v4/export/sql.go
+++ b/v4/export/sql.go
@@ -15,6 +15,8 @@ import (
 	tcontext "github.com/pingcap/dumpling/v4/context"
 
 	"github.com/pingcap/errors"
+	"github.com/pingcap/parser/model"
+	"github.com/pingcap/tidb/store/helper"
 	"go.uber.org/zap"
 )
 
@@ -624,13 +626,8 @@ func resetDBWithSessionParams(tctx *tcontext.Context, db *sql.DB, dsn string, pa
 	}
 
 	newDB, err := sql.Open("mysql", dsn)
-	if err != nil {
-		return nil, errors.Trace(err)
-	}
-
 	db.Close()
-
-	return newDB, nil
+	return newDB, errors.Trace(err)
 }
 
 func createConnWithConsistency(ctx context.Context, db *sql.DB) (*sql.Conn, error) {
@@ -874,18 +871,18 @@ func simpleQuery(conn *sql.Conn, sql string, handleOneRow func(*sql.Rows) error)
 func simpleQueryWithArgs(conn *sql.Conn, handleOneRow func(*sql.Rows) error, sql string, args ...interface{}) error {
 	rows, err := conn.QueryContext(context.Background(), sql, args...)
 	if err != nil {
-		return errors.Annotatef(err, "sql: %s", sql)
+		return errors.Annotatef(err, "sql: %s, args: %s", sql, args)
 	}
 	defer rows.Close()
 
 	for rows.Next() {
 		if err := handleOneRow(rows); err != nil {
 			rows.Close()
-			return errors.Annotatef(err, "sql: %s", sql)
+			return errors.Annotatef(err, "sql: %s, args: %s", sql, args)
 		}
 	}
 	rows.Close()
-	return errors.Annotatef(rows.Err(), "sql: %s", sql)
+	return errors.Annotatef(rows.Err(), "sql: %s, args: %s", sql, args)
 }
 
 func pickupPossibleField(meta TableMeta, db *sql.Conn) (string, error) {
@@ -1012,7 +1009,7 @@ func parseSnapshotToTSO(pool *sql.DB, snapshot string) (uint64, error) {
 	if !tso.Valid {
 		return 0, errors.Errorf("snapshot %s format not supported. please use tso or '2006-01-02 15:04:05' format time", snapshot)
 	}
-	return (uint64(tso.Int64)<<18)*1000 + 1, nil
+	return (uint64(tso.Int64) << 18) * 1000, nil
 }
 
 func buildWhereCondition(conf *Config, where string) string {
@@ -1054,3 +1051,157 @@ func GetPartitionNames(db *sql.Conn, schema, table string) (partitions []string,
 	}, "SELECT PARTITION_NAME from INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?", schema, table)
 	return
 }
+
+// GetPartitionTableIDs get partition tableIDs through histograms.
+// SHOW STATS_HISTOGRAMS  has db_name,table_name,partition_name but doesn't have partition id
+// mysql.stats_histograms has partition_id but doesn't have db_name,table_name,partition_name
+// So we combine the results from these two sqls to get partition ids for each table
+// If UPDATE_TIME,DISTINCT_COUNT are equal, we assume these two records can represent one line.
+// If histograms are not accurate or (UPDATE_TIME,DISTINCT_COUNT) has duplicate data, it's still fine.
+// Because the possibility is low and the effect is that we will select more than one regions in one time,
+// this will not affect the correctness of the dumping data and will not affect the memory usage much.
+// This method is tricky, but no better way is found.
+// Because TiDB v3.0.0's information_schema.partition table doesn't have partition name or partition id info
+// return (dbName -> tbName -> partitionName -> partitionID, error)
+func GetPartitionTableIDs(db *sql.Conn, tables map[string]map[string]struct{}) (map[string]map[string]map[string]int64, error) {
+	const (
+		showStatsHistogramsSQL   = "SHOW STATS_HISTOGRAMS"
+		selectStatsHistogramsSQL = "SELECT TABLE_ID,FROM_UNIXTIME(VERSION DIV 262144 DIV 1000,'%Y-%m-%d %H:%i:%s') AS UPDATE_TIME,DISTINCT_COUNT FROM mysql.stats_histograms"
+	)
+	partitionIDs := make(map[string]map[string]map[string]int64, len(tables))
+	rows, err := db.QueryContext(context.Background(), showStatsHistogramsSQL)
+	if err != nil {
+		return nil, errors.Annotatef(err, "sql: %s", showStatsHistogramsSQL)
+	}
+	results, err := GetSpecifiedColumnValuesAndClose(rows, "DB_NAME", "TABLE_NAME", "PARTITION_NAME", "UPDATE_TIME", "DISTINCT_COUNT")
+	if err != nil {
+		return nil, errors.Annotatef(err, "sql: %s", showStatsHistogramsSQL)
+	}
+	type partitionInfo struct {
+		dbName, tbName, partitionName string
+	}
+	saveMap := make(map[string]map[string]partitionInfo)
+	for _, oneRow := range results {
+		dbName, tbName, partitionName, updateTime, distinctCount := oneRow[0], oneRow[1], oneRow[2], oneRow[3], oneRow[4]
+		if len(partitionName) == 0 {
+			continue
+		}
+		if tbm, ok := tables[dbName]; ok {
+			if _, ok = tbm[tbName]; ok {
+				if _, ok = saveMap[updateTime]; !ok {
+					saveMap[updateTime] = make(map[string]partitionInfo)
+				}
+				saveMap[updateTime][distinctCount] = partitionInfo{
+					dbName:        dbName,
+					tbName:        tbName,
+					partitionName: partitionName,
+				}
+			}
+		}
+	}
+	if len(saveMap) == 0 {
+		return map[string]map[string]map[string]int64{}, nil
+	}
+	err = simpleQuery(db, selectStatsHistogramsSQL, func(rows *sql.Rows) error {
+		var (
+			tableID                   int64
+			updateTime, distinctCount string
+		)
+		err2 := rows.Scan(&tableID, &updateTime, &distinctCount)
+		if err2 != nil {
+			return errors.Trace(err2)
+		}
+		if mpt, ok := saveMap[updateTime]; ok {
+			if partition, ok := mpt[distinctCount]; ok {
+				dbName, tbName, partitionName := partition.dbName, partition.tbName, partition.partitionName
+				if _, ok := partitionIDs[dbName]; !ok {
+					partitionIDs[dbName] = make(map[string]map[string]int64)
+				}
+				if _, ok := partitionIDs[dbName][tbName]; !ok {
+					partitionIDs[dbName][tbName] = make(map[string]int64)
+				}
+				partitionIDs[dbName][tbName][partitionName] = tableID
+			}
+		}
+		return nil
+	})
+	return partitionIDs, err
+}
+
+// GetDBInfo get model.DBInfos from database sql interface.
+// We need table_id to check whether a region belongs to this table
+func GetDBInfo(db *sql.Conn, tables map[string]map[string]struct{}) ([]*model.DBInfo, error) {
+	const tableIDSQL = "SELECT TABLE_SCHEMA,TABLE_NAME,TIDB_TABLE_ID FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_SCHEMA"
+
+	schemas := make([]*model.DBInfo, 0, len(tables))
+	var (
+		tableSchema, tableName string
+		tidbTableID            int64
+	)
+	partitionIDs, err := GetPartitionTableIDs(db, tables)
+	if err != nil {
+		return nil, err
+	}
+	err = simpleQuery(db, tableIDSQL, func(rows *sql.Rows) error {
+		err2 := rows.Scan(&tableSchema, &tableName, &tidbTableID)
+		if err2 != nil {
+			return errors.Trace(err2)
+		}
+		if tbm, ok := tables[tableSchema]; !ok {
+			return nil
+		} else if _, ok = tbm[tableName]; !ok {
+			return nil
+		}
+		last := len(schemas) - 1
+		if last < 0 || schemas[last].Name.O != tableSchema {
+			schemas = append(schemas, &model.DBInfo{
+				Name:   model.CIStr{O: tableSchema},
+				Tables: make([]*model.TableInfo, 0, len(tables[tableSchema])),
+			})
+			last++
+		}
+		var partition *model.PartitionInfo
+		if tbm, ok := partitionIDs[tableSchema]; ok {
+			if ptm, ok := tbm[tableName]; ok {
+				partition = &model.PartitionInfo{Definitions: make([]model.PartitionDefinition, 0, len(ptm))}
+				for partitionName, partitionID := range ptm {
+					partition.Definitions = append(partition.Definitions, model.PartitionDefinition{
+						ID:   partitionID,
+						Name: model.CIStr{O: partitionName},
+					})
+				}
+			}
+		}
+		schemas[last].Tables = append(schemas[last].Tables, &model.TableInfo{
+			ID:        tidbTableID,
+			Name:      model.CIStr{O: tableName},
+			Partition: partition,
+		})
+		return nil
+	})
+	return schemas, err
+}
+
+// GetRegionInfos get region info including regionID, start key, end key from database sql interface.
+// start key, end key includes information to help split table
+func GetRegionInfos(db *sql.Conn) (*helper.RegionsInfo, error) {
+	const tableRegionSQL = "SELECT REGION_ID,START_KEY,END_KEY FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS ORDER BY START_KEY;"
+	var (
+		regionID         int64
+		startKey, endKey string
+	)
+	regionsInfo := &helper.RegionsInfo{Regions: make([]helper.RegionInfo, 0)}
+	err := simpleQuery(db, tableRegionSQL, func(rows *sql.Rows) error {
+		err := rows.Scan(&regionID, &startKey, &endKey)
+		if err != nil {
+			return errors.Trace(err)
+		}
+		regionsInfo.Regions = append(regionsInfo.Regions, helper.RegionInfo{
+			ID:       regionID,
+			StartKey: startKey,
+			EndKey:   endKey,
+		})
+		return nil
+	})
+	return regionsInfo, err
+}


Test patch:
diff --git a/v4/export/dump_test.go b/v4/export/dump_test.go
index edfc16c..ae584f1 100644
--- a/v4/export/dump_test.go
+++ b/v4/export/dump_test.go
@@ -20,10 +20,9 @@ func (s *testSQLSuite) TestDumpBlock(c *C) {
 	c.Assert(err, IsNil)
 	defer db.Close()
 
-	database := "test"
 	mock.ExpectQuery(fmt.Sprintf("SHOW CREATE DATABASE `%s`", escapeString(database))).
 		WillReturnRows(sqlmock.NewRows([]string{"Database", "Create Database"}).
-			AddRow("test", "CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */"))
+			AddRow(database, fmt.Sprintf("CREATE DATABASE `%s` /*!40100 DEFAULT CHARACTER SET utf8mb4 */", database)))
 
 	tctx, cancel := tcontext.Background().WithLogger(appLogger).WithCancel()
 	defer cancel()
@@ -49,7 +48,7 @@ func (s *testSQLSuite) TestDumpBlock(c *C) {
 	// simulate taskChan is full
 	taskChan := make(chan Task, 1)
 	taskChan <- &TaskDatabaseMeta{}
-	d.conf.Tables = DatabaseTables{}.AppendTable("test", nil)
+	d.conf.Tables = DatabaseTables{}.AppendTable(database, nil)
 	c.Assert(errors.ErrorEqual(d.dumpDatabases(writerCtx, conn, taskChan), context.Canceled), IsTrue)
 	c.Assert(errors.ErrorEqual(wg.Wait(), writerErr), IsTrue)
 }
diff --git a/v4/export/sql_test.go b/v4/export/sql_test.go
index 4b6a0f4..9de2de5 100644
--- a/v4/export/sql_test.go
+++ b/v4/export/sql_test.go
@@ -4,8 +4,15 @@ package export
 
 import (
 	"context"
+	"database/sql"
 	"database/sql/driver"
+	"encoding/csv"
 	"fmt"
+	"io"
+	"os"
+	"path"
+	"runtime"
+	"strconv"
 	"strings"
 
 	tcontext "github.com/pingcap/dumpling/v4/context"
@@ -291,7 +298,7 @@ func (s *testSQLSuite) TestParseSnapshotToTSO(c *C) {
 		WillReturnRows(sqlmock.NewRows([]string{`unix_timestamp("2020/07/18 20:31:50")`}).AddRow(1595075510))
 	tso, err := parseSnapshotToTSO(db, snapshot)
 	c.Assert(err, IsNil)
-	c.Assert(tso, Equals, (unixTimeStamp<<18)*1000+1)
+	c.Assert(tso, Equals, (unixTimeStamp<<18)*1000)
 	c.Assert(mock.ExpectationsWereMet(), IsNil)
 
 	// generate columns not valid snapshot
@@ -394,9 +401,10 @@ func (s *testSQLSuite) TestBuildTableSampleQueries(c *C) {
 	tctx, cancel := tcontext.Background().WithLogger(appLogger).WithCancel()
 
 	d := &Dumper{
-		tctx:      tctx,
-		conf:      DefaultConfig(),
-		cancelCtx: cancel,
+		tctx:                      tctx,
+		conf:                      DefaultConfig(),
+		cancelCtx:                 cancel,
+		selectTiDBTableRegionFunc: selectTiDBTableRegion,
 	}
 	d.conf.ServerInfo = ServerInfo{
 		HasTiKV:       true,
@@ -763,9 +771,10 @@ func (s *testSQLSuite) TestBuildRegionQueriesWithoutPartition(c *C) {
 	tctx, cancel := tcontext.Background().WithLogger(appLogger).WithCancel()
 
 	d := &Dumper{
-		tctx:      tctx,
-		conf:      DefaultConfig(),
-		cancelCtx: cancel,
+		tctx:                      tctx,
+		conf:                      DefaultConfig(),
+		cancelCtx:                 cancel,
+		selectTiDBTableRegionFunc: selectTiDBTableRegion,
 	}
 	d.conf.ServerInfo = ServerInfo{
 		HasTiKV:       true,
@@ -917,9 +926,10 @@ func (s *testSQLSuite) TestBuildRegionQueriesWithPartitions(c *C) {
 	tctx, cancel := tcontext.Background().WithLogger(appLogger).WithCancel()
 
 	d := &Dumper{
-		tctx:      tctx,
-		conf:      DefaultConfig(),
-		cancelCtx: cancel,
+		tctx:                      tctx,
+		conf:                      DefaultConfig(),
+		cancelCtx:                 cancel,
+		selectTiDBTableRegionFunc: selectTiDBTableRegion,
 	}
 	d.conf.ServerInfo = ServerInfo{
 		HasTiKV:       true,
@@ -1105,6 +1115,308 @@ func (s *testSQLSuite) TestBuildRegionQueriesWithPartitions(c *C) {
 	}
 }
 
+func buildMockNewRows(mock sqlmock.Sqlmock, columns []string, driverValues [][]driver.Value) *sqlmock.Rows {
+	rows := mock.NewRows(columns)
+	for _, driverValue := range driverValues {
+		rows.AddRow(driverValue...)
+	}
+	return rows
+}
+
+func readRegionCsvDriverValues(c *C) [][]driver.Value {
+	// nolint: dogsled
+	_, filename, _, _ := runtime.Caller(0)
+	csvFilename := path.Join(path.Dir(filename), "region_results.csv")
+	file, err := os.Open(csvFilename)
+	c.Assert(err, IsNil)
+	csvReader := csv.NewReader(file)
+	values := make([][]driver.Value, 0, 990)
+	for {
+		results, err := csvReader.Read()
+		if err == io.EOF {
+			break
+		}
+		c.Assert(err, IsNil)
+		if len(results) != 3 {
+			continue
+		}
+		regionID, err := strconv.Atoi(results[0])
+		c.Assert(err, IsNil)
+		startKey, endKey := results[1], results[2]
+		values = append(values, []driver.Value{regionID, startKey, endKey})
+	}
+	return values
+}
+
+func (s *testSQLSuite) TestBuildVersion3RegionQueries(c *C) {
+	db, mock, err := sqlmock.New()
+	c.Assert(err, IsNil)
+	defer db.Close()
+	conn, err := db.Conn(context.Background())
+	c.Assert(err, IsNil)
+	tctx, cancel := tcontext.Background().WithLogger(appLogger).WithCancel()
+	oldOpenFunc := openDBFunc
+	defer func() {
+		openDBFunc = oldOpenFunc
+	}()
+	openDBFunc = func(_, _ string) (*sql.DB, error) {
+		return db, nil
+	}
+
+	conf := DefaultConfig()
+	conf.ServerInfo = ServerInfo{
+		HasTiKV:       true,
+		ServerType:    ServerTypeTiDB,
+		ServerVersion: decodeRegionVersion,
+	}
+	database := "test"
+	conf.Tables = DatabaseTables{
+		database: []*TableInfo{
+			{"t1", 0, TableTypeBase},
+			{"t2", 0, TableTypeBase},
+			{"t3", 0, TableTypeBase},
+			{"t4", 0, TableTypeBase},
+		},
+	}
+	d := &Dumper{
+		tctx:                      tctx,
+		conf:                      conf,
+		cancelCtx:                 cancel,
+		selectTiDBTableRegionFunc: selectTiDBTableRegion,
+	}
+	showStatsHistograms := buildMockNewRows(mock, []string{"Db_name", "Table_name", "Partition_name", "Column_name", "Is_index", "Update_time", "Distinct_count", "Null_count", "Avg_col_size", "Correlation"},
+		[][]driver.Value{
+			{"test", "t2", "p0", "a", 0, "2021-06-27 17:43:51", 1999999, 0, 8, 0},
+			{"test", "t2", "p1", "a", 0, "2021-06-22 20:30:16", 1260000, 0, 8, 0},
+			{"test", "t2", "p2", "a", 0, "2021-06-22 20:32:16", 1230000, 0, 8, 0},
+			{"test", "t2", "p3", "a", 0, "2021-06-22 20:36:19", 2000000, 0, 8, 0},
+			{"test", "t1", "", "a", 0, "2021-04-22 15:23:58", 7100000, 0, 8, 0},
+			{"test", "t3", "", "PRIMARY", 1, "2021-06-27 22:08:43", 4980000, 0, 0, 0},
+			{"test", "t4", "p0", "PRIMARY", 1, "2021-06-28 10:54:06", 2000000, 0, 0, 0},
+			{"test", "t4", "p1", "PRIMARY", 1, "2021-06-28 10:55:04", 1300000, 0, 0, 0},
+			{"test", "t4", "p2", "PRIMARY", 1, "2021-06-28 10:57:05", 1830000, 0, 0, 0},
+			{"test", "t4", "p3", "PRIMARY", 1, "2021-06-28 10:59:04", 2000000, 0, 0, 0},
+			{"mysql", "global_priv", "", "PRIMARY", 1, "2021-06-04 20:39:44", 0, 0, 0, 0},
+		})
+	selectMySQLStatsHistograms := buildMockNewRows(mock, []string{"TABLE_ID", "VERSION", "DISTINCT_COUNT"},
+		[][]driver.Value{
+			{15, "1970-01-01 08:00:00", 0},
+			{15, "1970-01-01 08:00:00", 0},
+			{15, "1970-01-01 08:00:00", 0},
+			{41, "2021-04-22 15:23:58", 7100000},
+			{41, "2021-04-22 15:23:59", 7100000},
+			{41, "2021-04-22 15:23:59", 7100000},
+			{41, "2021-04-22 15:23:59", 7100000},
+			{27, "1970-01-01 08:00:00", 0},
+			{27, "1970-01-01 08:00:00", 0},
+			{25, "1970-01-01 08:00:00", 0},
+			{25, "1970-01-01 08:00:00", 0},
+			{2098, "2021-06-04 20:39:41", 0},
+			{2101, "2021-06-04 20:39:44", 0},
+			{2101, "2021-06-04 20:39:44", 0},
+			{2101, "2021-06-04 20:39:44", 0},
+			{2101, "2021-06-04 20:39:44", 0},
+			{2128, "2021-06-22 20:29:19", 1991680},
+			{2128, "2021-06-22 20:29:19", 1991680},
+			{2128, "2021-06-22 20:29:19", 1991680},
+			{2129, "2021-06-22 20:30:16", 1260000},
+			{2129, "2021-06-22 20:30:16", 1237120},
+			{2129, "2021-06-22 20:30:16", 1237120},
+			{2129, "2021-06-22 20:30:16", 1237120},
+			{2130, "2021-06-22 20:32:16", 1230000},
+			{2130, "2021-06-22 20:32:16", 1216128},
+			{2130, "2021-06-22 20:32:17", 1216128},
+			{2130, "2021-06-22 20:32:17", 1216128},
+			{2131, "2021-06-22 20:36:19", 2000000},
+			{2131, "2021-06-22 20:36:19", 1959424},
+			{2131, "2021-06-22 20:36:19", 1959424},
+			{2131, "2021-06-22 20:36:19", 1959424},
+			{2128, "2021-06-27 17:43:51", 1999999},
+			{2136, "2021-06-27 22:08:38", 4860000},
+			{2136, "2021-06-27 22:08:38", 4860000},
+			{2136, "2021-06-27 22:08:38", 4860000},
+			{2136, "2021-06-27 22:08:38", 4860000},
+			{2136, "2021-06-27 22:08:43", 4980000},
+			{2139, "2021-06-28 10:54:05", 1991680},
+			{2139, "2021-06-28 10:54:05", 1991680},
+			{2139, "2021-06-28 10:54:05", 1991680},
+			{2139, "2021-06-28 10:54:05", 1991680},
+			{2139, "2021-06-28 10:54:06", 2000000},
+			{2140, "2021-06-28 10:55:02", 1246336},
+			{2140, "2021-06-28 10:55:02", 1246336},
+			{2140, "2021-06-28 10:55:02", 1246336},
+			{2140, "2021-06-28 10:55:03", 1246336},
+			{2140, "2021-06-28 10:55:04", 1300000},
+			{2141, "2021-06-28 10:57:03", 1780000},
+			{2141, "2021-06-28 10:57:03", 1780000},
+			{2141, "2021-06-28 10:57:03", 1780000},
+			{2141, "2021-06-28 10:57:03", 1780000},
+			{2141, "2021-06-28 10:57:05", 1830000},
+			{2142, "2021-06-28 10:59:03", 1959424},
+			{2142, "2021-06-28 10:59:03", 1959424},
+			{2142, "2021-06-28 10:59:03", 1959424},
+			{2142, "2021-06-28 10:59:03", 1959424},
+			{2142, "2021-06-28 10:59:04", 2000000},
+		})
+	selectRegionStatusHistograms := buildMockNewRows(mock, []string{"REGION_ID", "START_KEY", "END_KEY"}, readRegionCsvDriverValues(c))
+	selectInformationSchemaTables := buildMockNewRows(mock, []string{"TABLE_SCHEMA", "TABLE_NAME", "TIDB_TABLE_ID"},
+		[][]driver.Value{
+			{"mysql", "expr_pushdown_blacklist", 39},
+			{"mysql", "user", 5},
+			{"mysql", "db", 7},
+			{"mysql", "tables_priv", 9},
+			{"mysql", "stats_top_n", 37},
+			{"mysql", "columns_priv", 11},
+			{"mysql", "bind_info", 35},
+			{"mysql", "default_roles", 33},
+			{"mysql", "role_edges", 31},
+			{"mysql", "stats_feedback", 29},
+			{"mysql", "gc_delete_range_done", 27},
+			{"mysql", "gc_delete_range", 25},
+			{"mysql", "help_topic", 17},
+			{"mysql", "global_priv", 2101},
+			{"mysql", "stats_histograms", 21},
+			{"mysql", "opt_rule_blacklist", 2098},
+			{"mysql", "stats_meta", 19},
+			{"mysql", "stats_buckets", 23},
+			{"mysql", "tidb", 15},
+			{"mysql", "GLOBAL_VARIABLES", 13},
+			{"test", "t2", 2127},
+			{"test", "t1", 41},
+			{"test", "t3", 2136},
+			{"test", "t4", 2138},
+		})
+	mock.ExpectQuery("SHOW STATS_HISTOGRAMS").
+		WillReturnRows(showStatsHistograms)
+	mock.ExpectQuery("SELECT TABLE_ID,FROM_UNIXTIME").
+		WillReturnRows(selectMySQLStatsHistograms)
+	mock.ExpectQuery("SELECT TABLE_SCHEMA,TABLE_NAME,TIDB_TABLE_ID FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_SCHEMA").
+		WillReturnRows(selectInformationSchemaTables)
+	mock.ExpectQuery("SELECT REGION_ID,START_KEY,END_KEY FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS ORDER BY START_KEY;").
+		WillReturnRows(selectRegionStatusHistograms)
+
+	c.Assert(d.renewSelectTableRegionFuncForLowerTiDB(tctx), IsNil)
+	c.Assert(mock.ExpectationsWereMet(), IsNil)
+
+	testCases := []struct {
+		tableName            string
+		handleColNames       []string
+		handleColTypes       []string
+		expectedWhereClauses []string
+		hasTiDBRowID         bool
+	}{
+		{
+			"t1",
+			[]string{"a"},
+			[]string{"INT"},
+			[]string{
+				"`a`<960001",
+				"`a`>=960001 and `a`<1920001",
+				"`a`>=1920001 and `a`<2880001",
+				"`a`>=2880001 and `a`<3840001",
+				"`a`>=3840001 and `a`<4800001",
+				"`a`>=4800001 and `a`<5760001",
+				"`a`>=5760001 and `a`<6720001",
+				"`a`>=6720001",
+			},
+			false,
+		},
+		{
+			"t2",
+			[]string{"a"},
+			[]string{"INT"},
+			[]string{
+				"`a`<960001",
+				"`a`>=960001 and `a`<2960001",
+				"`a`>=2960001 and `a`<4960001",
+				"`a`>=4960001 and `a`<6960001",
+				"`a`>=6960001",
+			},
+			false,
+		},
+		{
+			"t3",
+			[]string{"_tidb_rowid"},
+			[]string{"BIGINT"},
+			[]string{
+				"`_tidb_rowid`<81584",
+				"`_tidb_rowid`>=81584 and `_tidb_rowid`<1041584",
+				"`_tidb_rowid`>=1041584 and `_tidb_rowid`<2001584",
+				"`_tidb_rowid`>=2001584 and `_tidb_rowid`<2961584",
+				"`_tidb_rowid`>=2961584 and `_tidb_rowid`<3921584",
+				"`_tidb_rowid`>=3921584 and `_tidb_rowid`<4881584",
+				"`_tidb_rowid`>=4881584 and `_tidb_rowid`<5841584",
+				"`_tidb_rowid`>=5841584 and `_tidb_rowid`<6801584",
+				"`_tidb_rowid`>=6801584",
+			},
+			true,
+		},
+		{
+			"t4",
+			[]string{"_tidb_rowid"},
+			[]string{"BIGINT"},
+			[]string{
+				"`_tidb_rowid`<180001",
+				"`_tidb_rowid`>=180001 and `_tidb_rowid`<1140001",
+				"`_tidb_rowid`>=1140001 and `_tidb_rowid`<2200001",
+				"`_tidb_rowid`>=2200001 and `_tidb_rowid`<3160001",
+				"`_tidb_rowid`>=3160001 and `_tidb_rowid`<4160001",
+				"`_tidb_rowid`>=4160001 and `_tidb_rowid`<5120001",
+				"`_tidb_rowid`>=5120001 and `_tidb_rowid`<6170001",
+				"`_tidb_rowid`>=6170001 and `_tidb_rowid`<7130001",
+				"`_tidb_rowid`>=7130001",
+			},
+			true,
+		},
+	}
+
+	for i, testCase := range testCases {
+		c.Log(fmt.Sprintf("case #%d", i))
+		table := testCase.tableName
+		handleColNames := testCase.handleColNames
+		handleColTypes := testCase.handleColTypes
+
+		// Test build tasks through table region
+		taskChan := make(chan Task, 128)
+		meta := &mockTableIR{
+			dbName:           database,
+			tblName:          table,
+			selectedField:    "*",
+			hasImplicitRowID: testCase.hasTiDBRowID,
+			colNames:         handleColNames,
+			colTypes:         handleColTypes,
+			specCmt: []string{
+				"/*!40101 SET NAMES binary*/;",
+			},
+		}
+
+		if !testCase.hasTiDBRowID {
+			rows := sqlmock.NewRows(showIndexHeaders)
+			for i, handleColName := range handleColNames {
+				rows.AddRow(table, 0, "PRIMARY", i, handleColName, "A", 0, nil, nil, "", "BTREE", "", "")
+			}
+			mock.ExpectQuery(fmt.Sprintf("SHOW INDEX FROM `%s`.`%s`", database, table)).WillReturnRows(rows)
+		}
+
+		orderByClause := buildOrderByClauseString(handleColNames)
+		c.Assert(d.concurrentDumpTable(tctx, conn, meta, taskChan), IsNil)
+		c.Assert(mock.ExpectationsWereMet(), IsNil)
+
+		chunkIdx := 0
+		for _, w := range testCase.expectedWhereClauses {
+			query := buildSelectQuery(database, table, "*", "", buildWhereCondition(d.conf, w), orderByClause)
+			task := <-taskChan
+			taskTableData, ok := task.(*TaskTableData)
+			c.Assert(ok, IsTrue)
+			c.Assert(taskTableData.ChunkIndex, Equals, chunkIdx)
+			data, ok := taskTableData.Data.(*tableData)
+			c.Assert(ok, IsTrue)
+			c.Assert(data.query, Equals, query)
+			chunkIdx++
+		}
+	}
+}
+
 func makeVersion(major, minor, patch int64, preRelease string) *semver.Version {
 	return &semver.Version{
 		Major:      major,