“d52a8d01b2ebf6390fe4513baf623b1ee81e4c01”上不存在“mobile/src/operators/range_op.cpp”
提交 4d957dfd 编写于 作者: W wenzhi

Merge branch 'dev' of https://github.com/XiaoMi/soar into dev

...@@ -10,18 +10,18 @@ ...@@ -10,18 +10,18 @@
## SOAR ## SOAR
SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。 SOAR(SQL Optimizer And Rewriter) 是一个对 SQL 进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。
## 功能特点 ## 功能特点
* 跨平台支持(支持Linux, Mac环境,Windows环境理论上也支持,不过未全面测试) * 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
* 目前只支持 MySQL 语法族协议的SQL优化 * 目前只支持 MySQL 语法族协议的 SQL 优化
* 支持基于启发式算法的语句优化 * 支持基于启发式算法的语句优化
* 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT) * 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
* 支持EXPLAIN信息丰富解读 * 支持 EXPLAIN 信息丰富解读
* 支持SQL指纹、压缩和美化 * 支持 SQL 指纹、压缩和美化
* 支持同一张表多条ALTER请求合并 * 支持同一张表多条 ALTER 请求合并
* 支持自定义规则的SQL改写 * 支持自定义规则的 SQL 改写
## 快速入门 ## 快速入门
...@@ -34,8 +34,8 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化 ...@@ -34,8 +34,8 @@ SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化
## 交流与反馈 ## 交流与反馈
* 欢迎通过Github Issues提交问题报告与建议 * 欢迎通过 Github Issues 提交问题报告与建议
* QQ群: 779359816(满) 758940447(新) * QQ 群:779359816(满) 758940447(新)
* [Gitter](https://gitter.im/xiaomi-dba/soar) 推荐 * [Gitter](https://gitter.im/xiaomi-dba/soar) 推荐
![xiaomi_sa](https://raw.githubusercontent.com/XiaoMi/soar/master/doc/images/xiaomi_sa.png) ![xiaomi_sa](https://raw.githubusercontent.com/XiaoMi/soar/master/doc/images/xiaomi_sa.png)
......
...@@ -1409,6 +1409,35 @@ const ( ...@@ -1409,6 +1409,35 @@ const (
LockTypeExclusive LockTypeExclusive
) )
// AlterAlgorithm is the algorithm of the DDL operations.
// See https://dev.mysql.com/doc/refman/8.0/en/alter-table.html#alter-table-performance.
type AlterAlgorithm byte
// DDL alter algorithms.
// For now, TiDB only supported inplace and instance algorithms. If the user specify `copy`,
// will get an error.
const (
AlterAlgorithmDefault AlterAlgorithm = iota
AlterAlgorithmCopy
AlterAlgorithmInplace
AlterAlgorithmInstant
)
func (a AlterAlgorithm) String() string {
switch a {
case AlterAlgorithmDefault:
return "DEFAULT"
case AlterAlgorithmCopy:
return "COPY"
case AlterAlgorithmInplace:
return "INPLACE"
case AlterAlgorithmInstant:
return "INSTANT"
default:
return "DEFAULT"
}
}
// AlterTableSpec represents alter table specification. // AlterTableSpec represents alter table specification.
type AlterTableSpec struct { type AlterTableSpec struct {
node node
...@@ -1422,6 +1451,7 @@ type AlterTableSpec struct { ...@@ -1422,6 +1451,7 @@ type AlterTableSpec struct {
OldColumnName *ColumnName OldColumnName *ColumnName
Position *ColumnPosition Position *ColumnPosition
LockType LockType LockType LockType
Algorithm AlterAlgorithm
Comment string Comment string
FromKey model.CIStr FromKey model.CIStr
ToKey model.CIStr ToKey model.CIStr
...@@ -1543,11 +1573,9 @@ func (n *AlterTableSpec) Restore(ctx *RestoreCtx) error { ...@@ -1543,11 +1573,9 @@ func (n *AlterTableSpec) Restore(ctx *RestoreCtx) error {
ctx.WritePlain("= ") ctx.WritePlain("= ")
ctx.WriteKeyWord(n.LockType.String()) ctx.WriteKeyWord(n.LockType.String())
case AlterTableAlgorithm: case AlterTableAlgorithm:
// TODO: not support
ctx.WriteKeyWord("ALGORITHM ") ctx.WriteKeyWord("ALGORITHM ")
ctx.WritePlain("= ") ctx.WritePlain("= ")
ctx.WriteKeyWord("DEFAULT") ctx.WriteKeyWord(n.Algorithm.String())
ctx.WritePlain(" /* AlterTableAlgorithm is not supported */ ")
case AlterTableRenameIndex: case AlterTableRenameIndex:
ctx.WriteKeyWord("RENAME INDEX ") ctx.WriteKeyWord("RENAME INDEX ")
ctx.WriteName(n.FromKey.O) ctx.WriteName(n.FromKey.O)
......
...@@ -1755,6 +1755,8 @@ const ( ...@@ -1755,6 +1755,8 @@ const (
ShowPrivileges ShowPrivileges
ShowErrors ShowErrors
ShowBindings ShowBindings
ShowPumpStatus
ShowDrainerStatus
) )
// ShowStmt is a statement to provide information about databases, tables, columns and so on. // ShowStmt is a statement to provide information about databases, tables, columns and so on.
...@@ -1937,6 +1939,10 @@ func (n *ShowStmt) Restore(ctx *RestoreCtx) error { ...@@ -1937,6 +1939,10 @@ func (n *ShowStmt) Restore(ctx *RestoreCtx) error {
ctx.WriteKeyWord("SESSION ") ctx.WriteKeyWord("SESSION ")
} }
ctx.WriteKeyWord("BINDINGS") ctx.WriteKeyWord("BINDINGS")
case ShowPumpStatus:
ctx.WriteKeyWord("PUMP STATUS")
case ShowDrainerStatus:
ctx.WriteKeyWord("DRAINER STATUS")
default: default:
return errors.New("Unknown ShowStmt type") return errors.New("Unknown ShowStmt type")
} }
......
...@@ -725,6 +725,7 @@ func (n *SetPwdStmt) Accept(v Visitor) (Node, bool) { ...@@ -725,6 +725,7 @@ func (n *SetPwdStmt) Accept(v Visitor) (Node, bool) {
type UserSpec struct { type UserSpec struct {
User *auth.UserIdentity User *auth.UserIdentity
AuthOpt *AuthOption AuthOpt *AuthOption
IsRole bool
} }
// Restore implements Node interface. // Restore implements Node interface.
......
...@@ -33,6 +33,11 @@ type UserIdentity struct { ...@@ -33,6 +33,11 @@ type UserIdentity struct {
AuthHostname string // Match in privs system (i.e. could be a wildcard) AuthHostname string // Match in privs system (i.e. could be a wildcard)
} }
type RoleIdentity struct {
Username string
Hostname string
}
// Restore implements Node interface. // Restore implements Node interface.
func (user *UserIdentity) Restore(ctx *RestoreCtx) error { func (user *UserIdentity) Restore(ctx *RestoreCtx) error {
if user.CurrentUser { if user.CurrentUser {
......
...@@ -11,14 +11,19 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc ...@@ -11,14 +11,19 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c h1:G8zTsaqyVfIHpgMFcGgdbhHSFhlNc77rAKkhVbQ9kQg=
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc= github.com/cznic/golex v0.0.0-20181122101858-9c343928389c/go.mod h1:+bmmJDNmKlhWNG+gwWCkaBoTy39Fs+bzRxVBzoTQbIc=
github.com/cznic/mathutil v0.0.0-20181021201202-eba54fb065b7/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/cznic/mathutil v0.0.0-20181021201202-eba54fb065b7/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1 h1:uWcWCkSP+E1w1z8r082miT+c+9vzg+5UdrgGCo15lMo=
github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM= github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM=
github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8 h1:LpMLYGyy67BoAFGda1NeOBQwqlv7nUXpm+rIVHGxZZ4=
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186 h1:0rkFMAbn5KBKNpJyHQ6Prb95vIKanmAe62KxsrN+sqA=
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a h1:N2rDAvHuM46OGscJkGX4Dw4BBqZgg6mGNGLYs5utVVo=
github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs= github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
......
...@@ -234,6 +234,7 @@ var tokenMap = map[string]int{ ...@@ -234,6 +234,7 @@ var tokenMap = map[string]int{
"DIV": div, "DIV": div,
"DO": do, "DO": do,
"DOUBLE": doubleType, "DOUBLE": doubleType,
"DRAINER": drainer,
"DROP": drop, "DROP": drop,
"DUAL": dual, "DUAL": dual,
"DUPLICATE": duplicate, "DUPLICATE": duplicate,
...@@ -250,6 +251,7 @@ var tokenMap = map[string]int{ ...@@ -250,6 +251,7 @@ var tokenMap = map[string]int{
"EVENT": event, "EVENT": event,
"EVENTS": events, "EVENTS": events,
"EXCLUSIVE": exclusive, "EXCLUSIVE": exclusive,
"EXCEPT": except,
"EXECUTE": execute, "EXECUTE": execute,
"EXISTS": exists, "EXISTS": exists,
"EXPLAIN": explain, "EXPLAIN": explain,
...@@ -292,6 +294,7 @@ var tokenMap = map[string]int{ ...@@ -292,6 +294,7 @@ var tokenMap = map[string]int{
"INFILE": infile, "INFILE": infile,
"INNER": inner, "INNER": inner,
"INPLACE": inplace, "INPLACE": inplace,
"INSTANT": instant,
"INSERT": insert, "INSERT": insert,
"INT": intType, "INT": intType,
"INT1": int1Type, "INT1": int1Type,
...@@ -390,6 +393,7 @@ var tokenMap = map[string]int{ ...@@ -390,6 +393,7 @@ var tokenMap = map[string]int{
"PROCESS": process, "PROCESS": process,
"PROCESSLIST": processlist, "PROCESSLIST": processlist,
"PROFILES": profiles, "PROFILES": profiles,
"PUMP": pump,
"QUARTER": quarter, "QUARTER": quarter,
"QUERY": query, "QUERY": query,
"QUERIES": queries, "QUERIES": queries,
...@@ -416,6 +420,7 @@ var tokenMap = map[string]int{ ...@@ -416,6 +420,7 @@ var tokenMap = map[string]int{
"REVOKE": revoke, "REVOKE": revoke,
"RIGHT": right, "RIGHT": right,
"RLIKE": rlike, "RLIKE": rlike,
"ROLE": role,
"ROLLBACK": rollback, "ROLLBACK": rollback,
"ROUTINE": routine, "ROUTINE": routine,
"ROW": row, "ROW": row,
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
...@@ -119,6 +119,7 @@ import ( ...@@ -119,6 +119,7 @@ import (
escaped "ESCAPED" escaped "ESCAPED"
exists "EXISTS" exists "EXISTS"
explain "EXPLAIN" explain "EXPLAIN"
except "EXCEPT"
falseKwd "FALSE" falseKwd "FALSE"
firstValue "FIRST_VALUE" firstValue "FIRST_VALUE"
floatType "FLOAT" floatType "FLOAT"
...@@ -379,6 +380,7 @@ import ( ...@@ -379,6 +380,7 @@ import (
respect "RESPECT" respect "RESPECT"
replication "REPLICATION" replication "REPLICATION"
reverse "REVERSE" reverse "REVERSE"
role "ROLE"
rollback "ROLLBACK" rollback "ROLLBACK"
routine "ROUTINE" routine "ROUTINE"
rowCount "ROW_COUNT" rowCount "ROW_COUNT"
...@@ -447,6 +449,7 @@ import ( ...@@ -447,6 +449,7 @@ import (
groupConcat "GROUP_CONCAT" groupConcat "GROUP_CONCAT"
next_row_id "NEXT_ROW_ID" next_row_id "NEXT_ROW_ID"
inplace "INPLACE" inplace "INPLACE"
instant "INSTANT"
internal "INTERNAL" internal "INTERNAL"
min "MIN" min "MIN"
max "MAX" max "MAX"
...@@ -474,8 +477,10 @@ import ( ...@@ -474,8 +477,10 @@ import (
buckets "BUCKETS" buckets "BUCKETS"
cancel "CANCEL" cancel "CANCEL"
ddl "DDL" ddl "DDL"
drainer "DRAINER"
jobs "JOBS" jobs "JOBS"
job "JOB" job "JOB"
pump "PUMP"
stats "STATS" stats "STATS"
statsMeta "STATS_META" statsMeta "STATS_META"
statsHistograms "STATS_HISTOGRAMS" statsHistograms "STATS_HISTOGRAMS"
...@@ -574,6 +579,7 @@ import ( ...@@ -574,6 +579,7 @@ import (
CreateTableStmt "CREATE TABLE statement" CreateTableStmt "CREATE TABLE statement"
CreateViewStmt "CREATE VIEW stetement" CreateViewStmt "CREATE VIEW stetement"
CreateUserStmt "CREATE User statement" CreateUserStmt "CREATE User statement"
CreateRoleStmt "CREATE Role statement"
CreateDatabaseStmt "Create Database Statement" CreateDatabaseStmt "Create Database Statement"
CreateIndexStmt "CREATE INDEX statement" CreateIndexStmt "CREATE INDEX statement"
CreateBindingStmt "CREATE BINDING statement" CreateBindingStmt "CREATE BINDING statement"
...@@ -583,6 +589,7 @@ import ( ...@@ -583,6 +589,7 @@ import (
DropStatsStmt "DROP STATS statement" DropStatsStmt "DROP STATS statement"
DropTableStmt "DROP TABLE statement" DropTableStmt "DROP TABLE statement"
DropUserStmt "DROP USER" DropUserStmt "DROP USER"
DropRoleStmt "DROP ROLE"
DropViewStmt "DROP VIEW statement" DropViewStmt "DROP VIEW statement"
DropBindingStmt "DROP BINDING statement" DropBindingStmt "DROP BINDING statement"
DeallocateStmt "Deallocate prepared statement" DeallocateStmt "Deallocate prepared statement"
...@@ -593,6 +600,7 @@ import ( ...@@ -593,6 +600,7 @@ import (
ExplainableStmt "explainable statement" ExplainableStmt "explainable statement"
FlushStmt "Flush statement" FlushStmt "Flush statement"
GrantStmt "Grant statement" GrantStmt "Grant statement"
GrantRoleStmt "Grant role statement"
InsertIntoStmt "INSERT INTO statement" InsertIntoStmt "INSERT INTO statement"
KillStmt "Kill statement" KillStmt "Kill statement"
LoadDataStmt "Load data statement" LoadDataStmt "Load data statement"
...@@ -603,8 +611,11 @@ import ( ...@@ -603,8 +611,11 @@ import (
RenameTableStmt "rename table statement" RenameTableStmt "rename table statement"
ReplaceIntoStmt "REPLACE INTO statement" ReplaceIntoStmt "REPLACE INTO statement"
RevokeStmt "Revoke statement" RevokeStmt "Revoke statement"
RevokeRoleStmt "Revoke role statement"
RollbackStmt "ROLLBACK statement" RollbackStmt "ROLLBACK statement"
SetStmt "Set variable statement" SetStmt "Set variable statement"
SetRoleStmt "Set active role statement"
SetDefaultRoleStmt "Set default statement for some user"
ShowStmt "Show engines/databases/tables/user/columns/warnings/status statement" ShowStmt "Show engines/databases/tables/user/columns/warnings/status statement"
Statement "statement" Statement "statement"
TraceStmt "TRACE statement" TraceStmt "TRACE statement"
...@@ -617,7 +628,8 @@ import ( ...@@ -617,7 +628,8 @@ import (
%type <item> %type <item>
AdminShowSlow "Admin Show Slow statement" AdminShowSlow "Admin Show Slow statement"
AlterTableOptionListOpt "alter table option list opt" AlterAlgorithm "Alter table algorithm"
AlterTableOptionListOpt "Alter table option list opt"
AlterTableSpec "Alter table specification" AlterTableSpec "Alter table specification"
AlterTableSpecList "Alter table specification list" AlterTableSpecList "Alter table specification list"
AnyOrAll "Any or All for subquery" AnyOrAll "Any or All for subquery"
...@@ -748,6 +760,11 @@ import ( ...@@ -748,6 +760,11 @@ import (
OnUpdateOpt "optional ON UPDATE clause" OnUpdateOpt "optional ON UPDATE clause"
OptGConcatSeparator "optional GROUP_CONCAT SEPARATOR" OptGConcatSeparator "optional GROUP_CONCAT SEPARATOR"
ReferOpt "reference option" ReferOpt "reference option"
Rolename "Rolename"
RolenameList "RolenameList"
RoleSpec "Rolename and auth option"
RoleSpecList "Rolename and auth option list"
RoleNameString "role name string"
RowFormat "Row format option" RowFormat "Row format option"
RowValue "Row value" RowValue "Row value"
SelectLockOpt "FOR UPDATE or LOCK IN SHARE MODE," SelectLockOpt "FOR UPDATE or LOCK IN SHARE MODE,"
...@@ -761,6 +778,8 @@ import ( ...@@ -761,6 +778,8 @@ import (
SelectStmtFromDualTable "SELECT statement from dual table" SelectStmtFromDualTable "SELECT statement from dual table"
SelectStmtFromTable "SELECT statement from table" SelectStmtFromTable "SELECT statement from table"
SelectStmtGroup "SELECT statement optional GROUP BY clause" SelectStmtGroup "SELECT statement optional GROUP BY clause"
SetRoleOpt "Set role options"
SetDefaultRoleOpt "Set default role options"
ShowTargetFilterable "Show target that can be filtered by WHERE or LIKE" ShowTargetFilterable "Show target that can be filtered by WHERE or LIKE"
ShowDatabaseNameOpt "Show tables/columns statement database name option" ShowDatabaseNameOpt "Show tables/columns statement database name option"
ShowTableAliasOpt "Show table alias option" ShowTableAliasOpt "Show table alias option"
...@@ -1201,6 +1220,7 @@ AlterTableSpec: ...@@ -1201,6 +1220,7 @@ AlterTableSpec:
// Parse it and ignore it. Just for compatibility. // Parse it and ignore it. Just for compatibility.
$$ = &ast.AlterTableSpec{ $$ = &ast.AlterTableSpec{
Tp: ast.AlterTableAlgorithm, Tp: ast.AlterTableAlgorithm,
Algorithm: $3.(ast.AlterAlgorithm),
} }
} }
| "FORCE" | "FORCE"
...@@ -1213,7 +1233,23 @@ AlterTableSpec: ...@@ -1213,7 +1233,23 @@ AlterTableSpec:
AlterAlgorithm: AlterAlgorithm:
"DEFAULT" | "INPLACE" | "COPY" "DEFAULT"
{
$$ = ast.AlterAlgorithmDefault
}
| "COPY"
{
$$ = ast.AlterAlgorithmCopy
}
| "INPLACE"
{
$$ = ast.AlterAlgorithmInplace
}
| "INSTANT"
{
$$ = ast.AlterAlgorithmInstant
}
LockClauseOpt: LockClauseOpt:
{} {}
...@@ -2392,6 +2428,14 @@ DropUserStmt: ...@@ -2392,6 +2428,14 @@ DropUserStmt:
$$ = &ast.DropUserStmt{IfExists: true, UserList: $5.([]*auth.UserIdentity)} $$ = &ast.DropUserStmt{IfExists: true, UserList: $5.([]*auth.UserIdentity)}
} }
DropRoleStmt:
"DROP" "ROLE" RolenameList
{
}
| "DROP" "ROLE" "IF" "EXISTS" RolenameList
{
}
DropStatsStmt: DropStatsStmt:
"DROP" "STATS" TableName "DROP" "STATS" TableName
{ {
...@@ -2990,7 +3034,7 @@ UnReservedKeyword: ...@@ -2990,7 +3034,7 @@ UnReservedKeyword:
| "COLUMNS" | "COMMIT" | "COMPACT" | "COMPRESSED" | "CONSISTENT" | "CURRENT" | "DATA" | "DATE" %prec lowerThanStringLitToken| "DATETIME" | "DAY" | "DEALLOCATE" | "DO" | "DUPLICATE" | "COLUMNS" | "COMMIT" | "COMPACT" | "COMPRESSED" | "CONSISTENT" | "CURRENT" | "DATA" | "DATE" %prec lowerThanStringLitToken| "DATETIME" | "DAY" | "DEALLOCATE" | "DO" | "DUPLICATE"
| "DYNAMIC"| "END" | "ENGINE" | "ENGINES" | "ENUM" | "ERRORS" | "ESCAPE" | "EXECUTE" | "FIELDS" | "FIRST" | "FIXED" | "FLUSH" | "FOLLOWING" | "FORMAT" | "FULL" |"GLOBAL" | "DYNAMIC"| "END" | "ENGINE" | "ENGINES" | "ENUM" | "ERRORS" | "ESCAPE" | "EXECUTE" | "FIELDS" | "FIRST" | "FIXED" | "FLUSH" | "FOLLOWING" | "FORMAT" | "FULL" |"GLOBAL"
| "HASH" | "HOUR" | "LESS" | "LOCAL" | "LAST" | "NAMES" | "OFFSET" | "PASSWORD" %prec lowerThanEq | "PREPARE" | "QUICK" | "REDUNDANT" | "HASH" | "HOUR" | "LESS" | "LOCAL" | "LAST" | "NAMES" | "OFFSET" | "PASSWORD" %prec lowerThanEq | "PREPARE" | "QUICK" | "REDUNDANT"
| "ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken | "ROLE" |"ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken
| "TIMESTAMP" %prec lowerThanStringLitToken | "TRACE" | "TRANSACTION" | "TRUNCATE" | "UNBOUNDED" | "UNKNOWN" | "VALUE" | "WARNINGS" | "YEAR" | "MODE" | "WEEK" | "ANY" | "SOME" | "USER" | "IDENTIFIED" | "TIMESTAMP" %prec lowerThanStringLitToken | "TRACE" | "TRANSACTION" | "TRUNCATE" | "UNBOUNDED" | "UNKNOWN" | "VALUE" | "WARNINGS" | "YEAR" | "MODE" | "WEEK" | "ANY" | "SOME" | "USER" | "IDENTIFIED"
| "COLLATION" | "COMMENT" | "AVG_ROW_LENGTH" | "CONNECTION" | "CHECKSUM" | "COMPRESSION" | "KEY_BLOCK_SIZE" | "MASTER" | "MAX_ROWS" | "COLLATION" | "COMMENT" | "AVG_ROW_LENGTH" | "CONNECTION" | "CHECKSUM" | "COMPRESSION" | "KEY_BLOCK_SIZE" | "MASTER" | "MAX_ROWS"
| "MIN_ROWS" | "NATIONAL" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON" | "MIN_ROWS" | "NATIONAL" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON"
...@@ -3003,11 +3047,11 @@ UnReservedKeyword: ...@@ -3003,11 +3047,11 @@ UnReservedKeyword:
TiDBKeyword: TiDBKeyword:
"ADMIN" | "BUCKETS" | "CANCEL" | "DDL" | "JOBS" | "JOB" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB" | "TIDB_HJ" | "TIDB_SMJ" | "TIDB_INLJ" | "RESTORE" "ADMIN" | "BUCKETS" | "CANCEL" | "DDL" | "DRAINER" | "JOBS" | "JOB" | "PUMP" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB" | "TIDB_HJ" | "TIDB_SMJ" | "TIDB_INLJ" | "RESTORE"
NotKeywordToken: NotKeywordToken:
"ADDDATE" | "BIT_AND" | "BIT_OR" | "BIT_XOR" | "CAST" | "COPY" | "COUNT" | "CURTIME" | "DATE_ADD" | "DATE_SUB" | "EXTRACT" | "GET_FORMAT" | "GROUP_CONCAT" "ADDDATE" | "BIT_AND" | "BIT_OR" | "BIT_XOR" | "CAST" | "COPY" | "COUNT" | "CURTIME" | "DATE_ADD" | "DATE_SUB" | "EXTRACT" | "GET_FORMAT" | "GROUP_CONCAT"
| "INPLACE" | "INTERNAL" |"MIN" | "MAX" | "MAX_EXECUTION_TIME" | "NOW" | "RECENT" | "POSITION" | "SUBDATE" | "SUBSTRING" | "SUM" | "INPLACE" | "INSTANT" | "INTERNAL" |"MIN" | "MAX" | "MAX_EXECUTION_TIME" | "NOW" | "RECENT" | "POSITION" | "SUBDATE" | "SUBSTRING" | "SUM"
| "STD" | "STDDEV" | "STDDEV_POP" | "STDDEV_SAMP" | "VARIANCE" | "VAR_POP" | "VAR_SAMP" | "STD" | "STDDEV" | "STDDEV_POP" | "STDDEV_SAMP" | "VARIANCE" | "VAR_POP" | "VAR_SAMP"
| "TIMESTAMPADD" | "TIMESTAMPDIFF" | "TOP" | "TRIM" | "NEXT_ROW_ID" | "TIMESTAMPADD" | "TIMESTAMPDIFF" | "TOP" | "TRIM" | "NEXT_ROW_ID"
...@@ -5500,6 +5544,39 @@ SetStmt: ...@@ -5500,6 +5544,39 @@ SetStmt:
$$ = &ast.SetStmt{Variables: assigns} $$ = &ast.SetStmt{Variables: assigns}
} }
SetRoleStmt:
"SET" "ROLE" SetRoleOpt
{
}
SetDefaultRoleStmt:
"SET" "DEFAULT" "ROLE" SetDefaultRoleOpt "TO" UsernameList
{
}
SetDefaultRoleOpt:
"NONE"
{
}
| "ALL"
{
}
| RolenameList
{
}
SetRoleOpt:
"ALL" "EXCEPT" RolenameList
{
}
| SetDefaultRoleOpt
{
}
| "DEFAULT"
{
}
TransactionChars: TransactionChars:
TransactionChar TransactionChar
{ {
...@@ -5739,6 +5816,41 @@ AuthString: ...@@ -5739,6 +5816,41 @@ AuthString:
$$ = $1 $$ = $1
} }
RoleNameString:
stringLit
{
$$ = $1
}
| identifier
{
$$ = $1
}
Rolename:
RoleNameString
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: "%"}
}
| StringName '@' StringName
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: $3.(string)}
}
| StringName singleAtIdentifier
{
$$ = &auth.RoleIdentity{Username: $1.(string), Hostname: strings.TrimPrefix($2, "@")}
}
RolenameList:
Rolename
{
$$ = []*auth.RoleIdentity{$1.(*auth.RoleIdentity)}
}
| RolenameList ',' Rolename
{
$$ = append($1.([]*auth.RoleIdentity), $3.(*auth.RoleIdentity))
}
/****************************Admin Statement*******************************/ /****************************Admin Statement*******************************/
AdminStmt: AdminStmt:
"ADMIN" "SHOW" "DDL" "ADMIN" "SHOW" "DDL"
...@@ -6172,6 +6284,18 @@ ShowTargetFilterable: ...@@ -6172,6 +6284,18 @@ ShowTargetFilterable:
Tp: ast.ShowProcedureStatus, Tp: ast.ShowProcedureStatus,
} }
} }
| "PUMP" "STATUS"
{
$$ = &ast.ShowStmt {
Tp: ast.ShowPumpStatus,
}
}
| "DRAINER" "STATUS"
{
$$ = &ast.ShowStmt {
Tp: ast.ShowDrainerStatus,
}
}
| "FUNCTION" "STATUS" | "FUNCTION" "STATUS"
{ {
// This statement is similar to SHOW PROCEDURE STATUS but for stored functions. // This statement is similar to SHOW PROCEDURE STATUS but for stored functions.
...@@ -6345,6 +6469,7 @@ Statement: ...@@ -6345,6 +6469,7 @@ Statement:
| CreateTableStmt | CreateTableStmt
| CreateViewStmt | CreateViewStmt
| CreateUserStmt | CreateUserStmt
| CreateRoleStmt
| CreateBindingStmt | CreateBindingStmt
| DoStmt | DoStmt
| DropDatabaseStmt | DropDatabaseStmt
...@@ -6352,10 +6477,12 @@ Statement: ...@@ -6352,10 +6477,12 @@ Statement:
| DropTableStmt | DropTableStmt
| DropViewStmt | DropViewStmt
| DropUserStmt | DropUserStmt
| DropRoleStmt
| DropStatsStmt | DropStatsStmt
| DropBindingStmt | DropBindingStmt
| FlushStmt | FlushStmt
| GrantStmt | GrantStmt
| GrantRoleStmt
| InsertIntoStmt | InsertIntoStmt
| KillStmt | KillStmt
| LoadDataStmt | LoadDataStmt
...@@ -6365,9 +6492,12 @@ Statement: ...@@ -6365,9 +6492,12 @@ Statement:
| RenameTableStmt | RenameTableStmt
| ReplaceIntoStmt | ReplaceIntoStmt
| RevokeStmt | RevokeStmt
| RevokeRoleStmt
| SelectStmt | SelectStmt
| UnionStmt | UnionStmt
| SetStmt | SetStmt
| SetRoleStmt
| SetDefaultRoleStmt
| ShowStmt | ShowStmt
| SubSelect | SubSelect
{ {
...@@ -7271,6 +7401,11 @@ CreateUserStmt: ...@@ -7271,6 +7401,11 @@ CreateUserStmt:
} }
} }
CreateRoleStmt:
"CREATE" "ROLE" IfNotExists RoleSpecList
{
}
/* See http://dev.mysql.com/doc/refman/5.7/en/alter-user.html */ /* See http://dev.mysql.com/doc/refman/5.7/en/alter-user.html */
AlterUserStmt: AlterUserStmt:
"ALTER" "USER" IfExists UserSpecList "ALTER" "USER" IfExists UserSpecList
...@@ -7355,6 +7490,30 @@ HashString: ...@@ -7355,6 +7490,30 @@ HashString:
$$ = $1 $$ = $1
} }
RoleSpec:
Rolename
{
role := $1.(*auth.RoleIdentity)
roleSpec := &ast.UserSpec{
User: &auth.UserIdentity {
Username: role.Username,
Hostname: role.Hostname,
},
IsRole: true,
}
$$ = roleSpec
}
RoleSpecList:
RoleSpec
{
$$ = []*ast.UserSpec{$1.(*ast.UserSpec)}
}
| RoleSpecList ',' RoleSpec
{
$$ = append($1.([]*ast.UserSpec), $3.(*ast.UserSpec))
}
/******************************************************************* /*******************************************************************
* *
* Create Binding Statement * Create Binding Statement
...@@ -7420,6 +7579,11 @@ GrantStmt: ...@@ -7420,6 +7579,11 @@ GrantStmt:
} }
} }
GrantRoleStmt:
"GRANT" RolenameList "TO" UsernameList
{
}
WithGrantOptionOpt: WithGrantOptionOpt:
{ {
$$ = false $$ = false
...@@ -7647,6 +7811,11 @@ RevokeStmt: ...@@ -7647,6 +7811,11 @@ RevokeStmt:
} }
} }
RevokeRoleStmt:
"REVOKE" RolenameList "FROM" UsernameList
{
}
/**************************************LoadDataStmt***************************************** /**************************************LoadDataStmt*****************************************
* See https://dev.mysql.com/doc/refman/5.7/en/load-data.html * See https://dev.mysql.com/doc/refman/5.7/en/load-data.html
*******************************************************************************************/ *******************************************************************************************/
......
...@@ -15,10 +15,13 @@ package execdetails ...@@ -15,10 +15,13 @@ package execdetails
import ( import (
"fmt" "fmt"
"sort"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/pingcap/tipb/go-tipb"
) )
// CommitDetailCtxKey presents CommitDetail info key in context. // CommitDetailCtxKey presents CommitDetail info key in context.
...@@ -26,6 +29,7 @@ const CommitDetailCtxKey = "commitDetail" ...@@ -26,6 +29,7 @@ const CommitDetailCtxKey = "commitDetail"
// ExecDetails contains execution detail information. // ExecDetails contains execution detail information.
type ExecDetails struct { type ExecDetails struct {
CalleeAddress string
ProcessTime time.Duration ProcessTime time.Duration
WaitTime time.Duration WaitTime time.Duration
BackoffTime time.Duration BackoffTime time.Duration
...@@ -108,10 +112,58 @@ func (d ExecDetails) String() string { ...@@ -108,10 +112,58 @@ func (d ExecDetails) String() string {
return strings.Join(parts, " ") return strings.Join(parts, " ")
} }
// CopRuntimeStats collects cop tasks' execution info.
type CopRuntimeStats struct {
sync.Mutex
// stats stores the runtime statistics of coprocessor tasks.
// The key of the map is the tikv-server address. Because a tikv-server can
// have many region leaders, several coprocessor tasks can be sent to the
// same tikv-server instance. We have to use a list to maintain all tasks
// executed on each instance.
stats map[string][]*RuntimeStats
}
// RecordOneCopTask records a specific cop tasks's execution detail.
func (crs *CopRuntimeStats) RecordOneCopTask(address string, summary *tipb.ExecutorExecutionSummary) {
crs.Lock()
defer crs.Unlock()
crs.stats[address] = append(crs.stats[address],
&RuntimeStats{int32(*summary.NumIterations), int64(*summary.TimeProcessedNs), int64(*summary.NumProducedRows)})
}
func (crs *CopRuntimeStats) String() string {
if len(crs.stats) == 0 {
return ""
}
var totalRows, totalTasks int64
var totalIters int32
procTimes := make([]time.Duration, 0, 32)
for _, instanceStats := range crs.stats {
for _, stat := range instanceStats {
procTimes = append(procTimes, time.Duration(stat.consume)*time.Nanosecond)
totalRows += stat.rows
totalIters += stat.loop
totalTasks++
}
}
if totalTasks == 1 {
return fmt.Sprintf("time:%v, loops:%d, rows:%d", procTimes[0], totalIters, totalRows)
}
n := len(procTimes)
sort.Slice(procTimes, func(i, j int) bool { return procTimes[i] < procTimes[j] })
return fmt.Sprintf("proc max:%v, min:%v, p80:%v, p95:%v, rows:%v, iters:%v, tasks:%v",
procTimes[n-1], procTimes[0], procTimes[n*4/5], procTimes[n*19/20], totalRows, totalIters, totalTasks)
}
// RuntimeStatsColl collects executors's execution info. // RuntimeStatsColl collects executors's execution info.
type RuntimeStatsColl struct { type RuntimeStatsColl struct {
mu sync.Mutex mu sync.Mutex
stats map[string]*RuntimeStats rootStats map[string]*RuntimeStats
copStats map[string]*CopRuntimeStats
} }
// RuntimeStats collects one executor's execution info. // RuntimeStats collects one executor's execution info.
...@@ -126,26 +178,53 @@ type RuntimeStats struct { ...@@ -126,26 +178,53 @@ type RuntimeStats struct {
// NewRuntimeStatsColl creates new executor collector. // NewRuntimeStatsColl creates new executor collector.
func NewRuntimeStatsColl() *RuntimeStatsColl { func NewRuntimeStatsColl() *RuntimeStatsColl {
return &RuntimeStatsColl{stats: make(map[string]*RuntimeStats)} return &RuntimeStatsColl{rootStats: make(map[string]*RuntimeStats),
copStats: make(map[string]*CopRuntimeStats)}
} }
// Get gets execStat for a executor. // GetRootStats gets execStat for a executor.
func (e *RuntimeStatsColl) Get(planID string) *RuntimeStats { func (e *RuntimeStatsColl) GetRootStats(planID string) *RuntimeStats {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
runtimeStats, exists := e.stats[planID] runtimeStats, exists := e.rootStats[planID]
if !exists { if !exists {
runtimeStats = &RuntimeStats{} runtimeStats = &RuntimeStats{}
e.stats[planID] = runtimeStats e.rootStats[planID] = runtimeStats
} }
return runtimeStats return runtimeStats
} }
// Exists checks if the planID exists in the stats collection. // GetCopStats gets the CopRuntimeStats specified by planID.
func (e *RuntimeStatsColl) Exists(planID string) bool { func (e *RuntimeStatsColl) GetCopStats(planID string) *CopRuntimeStats {
e.mu.Lock()
defer e.mu.Unlock()
copStats, ok := e.copStats[planID]
if !ok {
copStats = &CopRuntimeStats{stats: make(map[string][]*RuntimeStats)}
e.copStats[planID] = copStats
}
return copStats
}
// RecordOneCopTask records a specific cop tasks's execution detail.
func (e *RuntimeStatsColl) RecordOneCopTask(planID, address string, summary *tipb.ExecutorExecutionSummary) {
copStats := e.GetCopStats(planID)
copStats.RecordOneCopTask(address, summary)
}
// ExistsRootStats checks if the planID exists in the rootStats collection.
func (e *RuntimeStatsColl) ExistsRootStats(planID string) bool {
e.mu.Lock()
defer e.mu.Unlock()
_, exists := e.rootStats[planID]
return exists
}
// ExistsCopStats checks if the planID exists in the copStats collection.
func (e *RuntimeStatsColl) ExistsCopStats(planID string) bool {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
_, exists := e.stats[planID] _, exists := e.copStats[planID]
return exists return exists
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
Aggregation Aggregation
TopN TopN
Limit Limit
ExecutorExecutionSummary
FieldType FieldType
Expr Expr
ByItem ByItem
...@@ -53,12 +54,10 @@ package tipb ...@@ -53,12 +54,10 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
io "io" proto "github.com/golang/protobuf/proto"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
...@@ -5,12 +5,10 @@ package tipb ...@@ -5,12 +5,10 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
io "io" proto "github.com/golang/protobuf/proto"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
...@@ -5,12 +5,10 @@ package tipb ...@@ -5,12 +5,10 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
io "io" proto "github.com/golang/protobuf/proto"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -339,6 +337,42 @@ func (m *Limit) GetLimit() uint64 { ...@@ -339,6 +337,42 @@ func (m *Limit) GetLimit() uint64 {
return 0 return 0
} }
type ExecutorExecutionSummary struct {
// Total time cost in this executor. Includes self time cost and children time cost.
TimeProcessedNs *uint64 `protobuf:"varint,1,opt,name=time_processed_ns,json=timeProcessedNs" json:"time_processed_ns,omitempty"`
// How many rows this executor produced totally.
NumProducedRows *uint64 `protobuf:"varint,2,opt,name=num_produced_rows,json=numProducedRows" json:"num_produced_rows,omitempty"`
// How many times executor's `next()` is called.
NumIterations *uint64 `protobuf:"varint,3,opt,name=num_iterations,json=numIterations" json:"num_iterations,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
func (m *ExecutorExecutionSummary) Reset() { *m = ExecutorExecutionSummary{} }
func (m *ExecutorExecutionSummary) String() string { return proto.CompactTextString(m) }
func (*ExecutorExecutionSummary) ProtoMessage() {}
func (*ExecutorExecutionSummary) Descriptor() ([]byte, []int) { return fileDescriptorExecutor, []int{8} }
func (m *ExecutorExecutionSummary) GetTimeProcessedNs() uint64 {
if m != nil && m.TimeProcessedNs != nil {
return *m.TimeProcessedNs
}
return 0
}
func (m *ExecutorExecutionSummary) GetNumProducedRows() uint64 {
if m != nil && m.NumProducedRows != nil {
return *m.NumProducedRows
}
return 0
}
func (m *ExecutorExecutionSummary) GetNumIterations() uint64 {
if m != nil && m.NumIterations != nil {
return *m.NumIterations
}
return 0
}
func init() { func init() {
proto.RegisterType((*Executor)(nil), "tipb.Executor") proto.RegisterType((*Executor)(nil), "tipb.Executor")
proto.RegisterType((*TableScan)(nil), "tipb.TableScan") proto.RegisterType((*TableScan)(nil), "tipb.TableScan")
...@@ -348,6 +382,7 @@ func init() { ...@@ -348,6 +382,7 @@ func init() {
proto.RegisterType((*Aggregation)(nil), "tipb.Aggregation") proto.RegisterType((*Aggregation)(nil), "tipb.Aggregation")
proto.RegisterType((*TopN)(nil), "tipb.TopN") proto.RegisterType((*TopN)(nil), "tipb.TopN")
proto.RegisterType((*Limit)(nil), "tipb.Limit") proto.RegisterType((*Limit)(nil), "tipb.Limit")
proto.RegisterType((*ExecutorExecutionSummary)(nil), "tipb.ExecutorExecutionSummary")
proto.RegisterEnum("tipb.ExecType", ExecType_name, ExecType_value) proto.RegisterEnum("tipb.ExecType", ExecType_name, ExecType_value)
} }
func (m *Executor) Marshal() (dAtA []byte, err error) { func (m *Executor) Marshal() (dAtA []byte, err error) {
...@@ -724,6 +759,42 @@ func (m *Limit) MarshalTo(dAtA []byte) (int, error) { ...@@ -724,6 +759,42 @@ func (m *Limit) MarshalTo(dAtA []byte) (int, error) {
return i, nil return i, nil
} }
func (m *ExecutorExecutionSummary) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *ExecutorExecutionSummary) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.TimeProcessedNs != nil {
dAtA[i] = 0x8
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.TimeProcessedNs))
}
if m.NumProducedRows != nil {
dAtA[i] = 0x10
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.NumProducedRows))
}
if m.NumIterations != nil {
dAtA[i] = 0x18
i++
i = encodeVarintExecutor(dAtA, i, uint64(*m.NumIterations))
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
return i, nil
}
func encodeVarintExecutor(dAtA []byte, offset int, v uint64) int { func encodeVarintExecutor(dAtA []byte, offset int, v uint64) int {
for v >= 1<<7 { for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80) dAtA[offset] = uint8(v&0x7f | 0x80)
...@@ -887,6 +958,24 @@ func (m *Limit) Size() (n int) { ...@@ -887,6 +958,24 @@ func (m *Limit) Size() (n int) {
return n return n
} }
func (m *ExecutorExecutionSummary) Size() (n int) {
var l int
_ = l
if m.TimeProcessedNs != nil {
n += 1 + sovExecutor(uint64(*m.TimeProcessedNs))
}
if m.NumProducedRows != nil {
n += 1 + sovExecutor(uint64(*m.NumProducedRows))
}
if m.NumIterations != nil {
n += 1 + sovExecutor(uint64(*m.NumIterations))
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func sovExecutor(x uint64) (n int) { func sovExecutor(x uint64) (n int) {
for { for {
n++ n++
...@@ -1951,6 +2040,117 @@ func (m *Limit) Unmarshal(dAtA []byte) error { ...@@ -1951,6 +2040,117 @@ func (m *Limit) Unmarshal(dAtA []byte) error {
} }
return nil return nil
} }
func (m *ExecutorExecutionSummary) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: ExecutorExecutionSummary: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ExecutorExecutionSummary: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TimeProcessedNs", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.TimeProcessedNs = &v
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NumProducedRows", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.NumProducedRows = &v
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field NumIterations", wireType)
}
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowExecutor
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.NumIterations = &v
default:
iNdEx = preIndex
skippy, err := skipExecutor(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthExecutor
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipExecutor(dAtA []byte) (n int, err error) { func skipExecutor(dAtA []byte) (n int, err error) {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
...@@ -2059,45 +2259,50 @@ var ( ...@@ -2059,45 +2259,50 @@ var (
func init() { proto.RegisterFile("executor.proto", fileDescriptorExecutor) } func init() { proto.RegisterFile("executor.proto", fileDescriptorExecutor) }
var fileDescriptorExecutor = []byte{ var fileDescriptorExecutor = []byte{
// 630 bytes of a gzipped FileDescriptorProto // 718 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcd, 0x6e, 0xd3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xcf, 0x6e, 0xdb, 0x38,
0x10, 0xc7, 0x6b, 0xc7, 0x69, 0x9c, 0x49, 0x3f, 0xdc, 0xe5, 0x43, 0x56, 0x0f, 0x69, 0x30, 0x20, 0x10, 0xc6, 0x23, 0x5b, 0x8e, 0xe5, 0x71, 0x62, 0x2b, 0xdc, 0x3f, 0x10, 0x72, 0x70, 0xbc, 0xda,
0x4a, 0x24, 0x02, 0x2a, 0x07, 0xce, 0x0d, 0x02, 0x29, 0x02, 0x55, 0x95, 0xdb, 0x7b, 0xe4, 0xac, 0x0d, 0xd6, 0x6b, 0x60, 0xbd, 0x8b, 0xf4, 0xd0, 0x73, 0x5c, 0xb4, 0x80, 0xd1, 0xc2, 0x30, 0x94,
0xb7, 0xcb, 0xa2, 0x64, 0x77, 0xb1, 0xd7, 0x52, 0x72, 0xe0, 0xce, 0x23, 0xf0, 0x0e, 0xbc, 0x48, 0xdc, 0x05, 0x59, 0x62, 0x58, 0x16, 0x16, 0xa9, 0x52, 0x14, 0x62, 0x1f, 0x7a, 0xef, 0x23, 0xb4,
0x8f, 0x3c, 0x01, 0x82, 0xf2, 0x22, 0x68, 0x77, 0x6d, 0xc7, 0x85, 0x22, 0x38, 0xed, 0xce, 0x7f, 0xcf, 0xd0, 0x17, 0xc9, 0xb1, 0x4f, 0x50, 0xb4, 0xe9, 0x8b, 0x14, 0x24, 0x25, 0xd9, 0x69, 0x53,
0x7e, 0x33, 0x3b, 0x9a, 0x99, 0x85, 0x1d, 0xb2, 0x24, 0xb8, 0x50, 0x22, 0x1b, 0xc9, 0x4c, 0x28, 0xb4, 0x27, 0x91, 0xdf, 0xfc, 0x66, 0x48, 0xcc, 0x37, 0x14, 0xf4, 0xf0, 0x1a, 0xc7, 0x85, 0xe4,
0x81, 0x3c, 0xc5, 0xe4, 0x6c, 0x3f, 0x20, 0x4b, 0x99, 0x91, 0x3c, 0x67, 0x82, 0x5b, 0x7d, 0x7f, 0x62, 0x92, 0x09, 0x2e, 0x39, 0xb2, 0x25, 0xcd, 0x96, 0xc7, 0x2e, 0x5e, 0x67, 0x02, 0xe7, 0x39,
0x2b, 0xc7, 0xef, 0xc8, 0x22, 0x29, 0xad, 0xdb, 0x54, 0x50, 0x61, 0xae, 0x4f, 0xf5, 0xcd, 0xaa, 0xe5, 0xcc, 0xe8, 0xc7, 0x07, 0x79, 0xfc, 0x1c, 0xa7, 0x51, 0xb9, 0xfb, 0x95, 0x70, 0xc2, 0xf5,
0xd1, 0x0f, 0x17, 0xfc, 0x57, 0x65, 0x3a, 0xf4, 0x00, 0x5c, 0x25, 0x43, 0x67, 0xe0, 0x1c, 0xee, 0xf2, 0x3f, 0xb5, 0x32, 0xaa, 0xff, 0xa9, 0x01, 0xce, 0xe3, 0xb2, 0x1c, 0xfa, 0x0b, 0x1a, 0x32,
0x1c, 0xed, 0x8c, 0x74, 0xd6, 0x91, 0xf6, 0x9d, 0xaf, 0x24, 0x19, 0x7b, 0x97, 0xdf, 0x0e, 0x36, 0xf3, 0xac, 0xa1, 0x35, 0xea, 0x9d, 0xf5, 0x26, 0xaa, 0xea, 0x44, 0xc5, 0x2e, 0x37, 0x19, 0x9e,
0x62, 0x57, 0x49, 0x34, 0x04, 0x5f, 0xcd, 0xe6, 0xd3, 0x1c, 0x27, 0x3c, 0x74, 0x07, 0xce, 0x61, 0xda, 0x37, 0x1f, 0x4e, 0xf6, 0x82, 0x86, 0xcc, 0xd0, 0x18, 0x1c, 0xb9, 0x5c, 0x85, 0x79, 0x1c,
0xef, 0x68, 0xd7, 0xb2, 0xe7, 0xc9, 0x6c, 0x4e, 0xce, 0x70, 0xc2, 0xe3, 0x8e, 0x9a, 0xcd, 0xf5, 0x31, 0xaf, 0x31, 0xb4, 0x46, 0xdd, 0xb3, 0xbe, 0x61, 0x2f, 0xa3, 0xe5, 0x0a, 0x5f, 0xc4, 0x11,
0x45, 0xb3, 0x2c, 0x5d, 0x5a, 0xb6, 0xd5, 0x64, 0x27, 0x3c, 0x25, 0x4b, 0xcb, 0xb2, 0xd4, 0x5c, 0x0b, 0xda, 0x72, 0xb9, 0x52, 0x0b, 0xc5, 0xd2, 0x64, 0x6d, 0xd8, 0xe6, 0x2e, 0x3b, 0x63, 0x09,
0xd0, 0x13, 0xe8, 0xe6, 0x64, 0x4e, 0xb0, 0x62, 0x82, 0x87, 0x5e, 0x13, 0x3e, 0xab, 0xe4, 0x78, 0x5e, 0x1b, 0x96, 0x26, 0x7a, 0x81, 0xfe, 0x85, 0x4e, 0x8e, 0x57, 0x38, 0x96, 0x94, 0x33, 0xcf,
0x4d, 0xa0, 0xe7, 0xd0, 0x4b, 0x28, 0xcd, 0x08, 0x4d, 0x4c, 0x40, 0xdb, 0x04, 0xec, 0xd9, 0x80, 0xde, 0x85, 0x2f, 0x2a, 0x39, 0xd8, 0x12, 0xe8, 0x01, 0x74, 0x23, 0x42, 0x04, 0x26, 0x91, 0x4e,
0xe3, 0xb5, 0x23, 0x6e, 0x52, 0xa8, 0x0f, 0x9e, 0x12, 0xf2, 0x24, 0xdc, 0x34, 0x34, 0x94, 0x75, 0x68, 0xe9, 0x84, 0x23, 0x93, 0x70, 0xbe, 0x0d, 0x04, 0xbb, 0x14, 0x1a, 0x80, 0x2d, 0x79, 0x36,
0x0b, 0x79, 0x12, 0x1b, 0x1d, 0xdd, 0x83, 0xf6, 0x9c, 0x2d, 0x98, 0x0a, 0x3b, 0x06, 0xe8, 0x59, 0xf7, 0xf6, 0x35, 0x0d, 0xe5, 0xbd, 0x79, 0x36, 0x0f, 0xb4, 0x8e, 0xfe, 0x80, 0xd6, 0x8a, 0xa6,
0xe0, 0xad, 0x96, 0x62, 0xeb, 0x41, 0xcf, 0x00, 0x72, 0x95, 0x91, 0x64, 0x31, 0x4d, 0x28, 0x0d, 0x54, 0x7a, 0x6d, 0x0d, 0x74, 0x0d, 0xf0, 0x4c, 0x49, 0x81, 0x89, 0xa0, 0xff, 0x01, 0x72, 0x29,
0xfd, 0xbf, 0x3d, 0xdb, 0xb5, 0xd0, 0x31, 0xa5, 0x51, 0x06, 0xdd, 0xba, 0x35, 0xe8, 0x00, 0x7c, 0x70, 0x94, 0x86, 0x11, 0x21, 0x9e, 0xf3, 0xbd, 0x63, 0x3b, 0x06, 0x3a, 0x27, 0xc4, 0x17, 0xd0,
0xa5, 0x8d, 0x29, 0x4b, 0x4d, 0xa7, 0x5b, 0x65, 0x67, 0x3b, 0x46, 0x9d, 0xa4, 0x68, 0x08, 0x1d, 0xa9, 0x5b, 0x83, 0x4e, 0xc0, 0x91, 0x6a, 0x13, 0xd2, 0x44, 0x77, 0xba, 0x59, 0x76, 0xb6, 0xad,
0x2c, 0xe6, 0xc5, 0x82, 0xe7, 0xa1, 0x3b, 0x68, 0x1d, 0xf6, 0x8e, 0x02, 0x9b, 0xfc, 0xa5, 0x11, 0xd5, 0x59, 0x82, 0xc6, 0xd0, 0x8e, 0xf9, 0xaa, 0x48, 0x59, 0xee, 0x35, 0x86, 0xcd, 0x51, 0xf7,
0x27, 0xfc, 0x42, 0xc4, 0x15, 0x80, 0x42, 0xf0, 0x52, 0x92, 0x63, 0xd3, 0x5a, 0xbf, 0x4c, 0x64, 0xcc, 0x35, 0xc5, 0x1f, 0x69, 0x71, 0xc6, 0xae, 0x78, 0x50, 0x01, 0xc8, 0x03, 0x3b, 0xc1, 0x79,
0x94, 0xe8, 0x8b, 0x03, 0xdd, 0xba, 0xc7, 0xff, 0x7e, 0xf4, 0x00, 0x7c, 0xa6, 0x69, 0x0d, 0xb8, 0xac, 0x5b, 0xeb, 0x94, 0x85, 0xb4, 0xe2, 0xbf, 0xb3, 0xa0, 0x53, 0xf7, 0xf8, 0xc7, 0x87, 0x9e,
0x4d, 0xc0, 0xa8, 0xd7, 0xab, 0x6a, 0xfd, 0x6f, 0x55, 0xde, 0xef, 0x55, 0xa1, 0xbb, 0xb0, 0x59, 0x80, 0x43, 0x15, 0xad, 0x80, 0xc6, 0x2e, 0xa0, 0xd5, 0xbb, 0xb7, 0x6a, 0xfe, 0xec, 0xad, 0xec,
0x70, 0xf6, 0xa1, 0x20, 0x66, 0x5c, 0x7e, 0x5c, 0x5a, 0xd1, 0x0b, 0xe8, 0xd6, 0x33, 0x46, 0x43, 0xaf, 0x6f, 0x85, 0x7e, 0x87, 0xfd, 0x82, 0xd1, 0x97, 0x05, 0xd6, 0x76, 0x39, 0x41, 0xb9, 0xf3,
0x00, 0x2c, 0x78, 0xca, 0xb4, 0x91, 0x87, 0x8e, 0x79, 0x0d, 0xaa, 0x6d, 0x94, 0x59, 0xdc, 0xf0, 0x1f, 0x42, 0xa7, 0xf6, 0x18, 0x8d, 0x01, 0x62, 0xce, 0x12, 0xaa, 0x36, 0xb9, 0x67, 0xe9, 0xd3,
0x46, 0x23, 0x80, 0xd3, 0x4c, 0xbc, 0x2f, 0x23, 0x07, 0xd0, 0xd6, 0x9f, 0xe0, 0xa6, 0x20, 0xeb, 0xa0, 0x9a, 0xc6, 0x4c, 0x04, 0x3b, 0x51, 0x7f, 0x02, 0xb0, 0x10, 0xfc, 0x45, 0x99, 0x39, 0x84,
0x88, 0x3e, 0x42, 0xaf, 0x31, 0x24, 0xf4, 0x10, 0x7c, 0x9a, 0x89, 0x42, 0x4e, 0x67, 0xab, 0x1b, 0x96, 0x7a, 0x04, 0xf7, 0x25, 0x99, 0x80, 0xff, 0x0a, 0xba, 0x3b, 0x26, 0xa1, 0x53, 0x70, 0x88,
0x62, 0x3a, 0xc6, 0x37, 0x5e, 0x69, 0x2c, 0xa1, 0x74, 0x7a, 0x51, 0x70, 0x5c, 0xce, 0xe4, 0x1a, 0xe0, 0x45, 0x16, 0x2e, 0x37, 0xf7, 0xe4, 0xb4, 0x75, 0x6c, 0xba, 0x51, 0x58, 0x44, 0x48, 0x78,
0x96, 0x50, 0xfa, 0xba, 0xe0, 0x18, 0x0d, 0xc0, 0xb7, 0x43, 0x27, 0xe9, 0xb5, 0x89, 0xd4, 0x6a, 0x55, 0xb0, 0xb8, 0xf4, 0xe4, 0x0e, 0x16, 0x11, 0xf2, 0xa4, 0x60, 0x31, 0x1a, 0x82, 0x63, 0x4c,
0xf4, 0x06, 0x3c, 0xbd, 0x6c, 0xe8, 0x11, 0xf8, 0x22, 0x4b, 0x49, 0xb6, 0x7e, 0x77, 0xcb, 0x26, 0xc7, 0xc9, 0x1d, 0x47, 0x6a, 0xd5, 0x7f, 0x0a, 0xb6, 0x1a, 0x36, 0xf4, 0x37, 0x38, 0x5c, 0x24,
0x1c, 0xaf, 0x26, 0x8a, 0x2c, 0xe2, 0x8e, 0xf1, 0x8e, 0x57, 0x68, 0xbf, 0xda, 0x47, 0x3d, 0x14, 0x58, 0x6c, 0xcf, 0x3d, 0x30, 0x05, 0xa7, 0x9b, 0x99, 0xc4, 0x69, 0xd0, 0xd6, 0xd1, 0xe9, 0x06,
0xaf, 0xcc, 0x67, 0xa5, 0xe8, 0x3e, 0xb4, 0xcd, 0x62, 0xae, 0x21, 0xe7, 0x0f, 0x68, 0xf8, 0xc9, 0x1d, 0x57, 0xf3, 0xa8, 0x4c, 0xb1, 0xcb, 0x7a, 0x46, 0xf2, 0xff, 0x84, 0x96, 0x1e, 0xcc, 0x2d,
0xb1, 0xff, 0x5b, 0xff, 0x61, 0xb4, 0x07, 0xdb, 0xfa, 0xac, 0x97, 0x31, 0xd8, 0xa8, 0xa4, 0x7a, 0x64, 0x7d, 0x0b, 0xbd, 0xb5, 0xc0, 0xab, 0xde, 0xb7, 0xf9, 0x52, 0xce, 0x2e, 0x8a, 0x34, 0x8d,
0x55, 0x02, 0xa7, 0x92, 0xea, 0x81, 0x04, 0x2e, 0xba, 0x05, 0xbb, 0x5a, 0x6a, 0xb4, 0x2e, 0x68, 0xc4, 0x06, 0x8d, 0xe1, 0x48, 0xd2, 0x14, 0x87, 0x99, 0xe0, 0x31, 0xce, 0x73, 0x9c, 0x84, 0xba,
0xa1, 0x2d, 0xf0, 0x4d, 0x36, 0x21, 0x4f, 0x02, 0x0f, 0x6d, 0x43, 0x57, 0x5b, 0xa6, 0xa2, 0xa0, 0xe1, 0xd6, 0xc8, 0x0e, 0xfa, 0x2a, 0xb0, 0xa8, 0xf4, 0x79, 0xae, 0x58, 0x56, 0xa4, 0x0a, 0x4d,
0x5d, 0x27, 0xa9, 0x3e, 0x41, 0xb0, 0x39, 0x7e, 0x7c, 0x79, 0xd5, 0x77, 0xbe, 0x5e, 0xf5, 0x9d, 0x8a, 0x18, 0x27, 0xa1, 0xe0, 0xd7, 0xb9, 0xb9, 0x55, 0xd0, 0x67, 0x45, 0xba, 0x28, 0xf5, 0x80,
0xef, 0x57, 0x7d, 0xe7, 0xf3, 0xcf, 0xfe, 0x06, 0xdc, 0xc1, 0x62, 0x31, 0x92, 0x8c, 0x53, 0x9c, 0x5f, 0xe7, 0xe8, 0x14, 0x7a, 0x8a, 0xa5, 0x12, 0x8b, 0xc8, 0xb8, 0xd8, 0xd4, 0xe0, 0x21, 0x2b,
0xc8, 0x91, 0x62, 0xe9, 0xcc, 0x34, 0xe1, 0xd4, 0xf9, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x05, 0xd2, 0x59, 0x2d, 0x8e, 0x5f, 0x5b, 0xe6, 0xdf, 0xa3, 0xfe, 0x2f, 0xe8, 0x08, 0x0e, 0xd5, 0xb7,
0x10, 0x17, 0xe2, 0x04, 0x00, 0x00, 0x7e, 0x28, 0xee, 0x5e, 0x25, 0xd5, 0x63, 0xec, 0x5a, 0x95, 0x54, 0x0f, 0x8b, 0xdb, 0x40, 0xbf,
0x40, 0x5f, 0x49, 0x3b, 0xb6, 0xba, 0x4d, 0x74, 0x00, 0x8e, 0xae, 0xc6, 0xb3, 0xb9, 0x6b, 0xa3,
0x43, 0xe8, 0xa8, 0x9d, 0xee, 0x96, 0xdb, 0xaa, 0x8b, 0x54, 0x0f, 0xd4, 0xdd, 0x9f, 0xfe, 0x73,
0x73, 0x3b, 0xb0, 0xde, 0xdf, 0x0e, 0xac, 0x8f, 0xb7, 0x03, 0xeb, 0xcd, 0xe7, 0xc1, 0x1e, 0xfc,
0x16, 0xf3, 0x74, 0x92, 0x51, 0x46, 0xe2, 0x28, 0x9b, 0x48, 0x9a, 0x2c, 0xb5, 0x41, 0x0b, 0xeb,
0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xfc, 0xf8, 0x28, 0x7e, 0x05, 0x00, 0x00,
} }
...@@ -5,12 +5,10 @@ package tipb ...@@ -5,12 +5,10 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
io "io" proto "github.com/golang/protobuf/proto"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -479,7 +477,7 @@ const ( ...@@ -479,7 +477,7 @@ const (
ScalarFuncSig_JsonMergeSig ScalarFuncSig = 5008 ScalarFuncSig_JsonMergeSig ScalarFuncSig = 5008
ScalarFuncSig_JsonObjectSig ScalarFuncSig = 5009 ScalarFuncSig_JsonObjectSig ScalarFuncSig = 5009
ScalarFuncSig_JsonArraySig ScalarFuncSig = 5010 ScalarFuncSig_JsonArraySig ScalarFuncSig = 5010
ScalarFuncSig_JsonValidSig ScalarFuncSig = 5011 ScalarFuncSig_JsonValidJsonSig ScalarFuncSig = 5011
ScalarFuncSig_JsonContainsSig ScalarFuncSig = 5012 ScalarFuncSig_JsonContainsSig ScalarFuncSig = 5012
ScalarFuncSig_JsonArrayAppendSig ScalarFuncSig = 5013 ScalarFuncSig_JsonArrayAppendSig ScalarFuncSig = 5013
ScalarFuncSig_JsonArrayInsertSig ScalarFuncSig = 5014 ScalarFuncSig_JsonArrayInsertSig ScalarFuncSig = 5014
...@@ -494,6 +492,7 @@ const ( ...@@ -494,6 +492,7 @@ const (
ScalarFuncSig_JsonKeysSig ScalarFuncSig = 5023 ScalarFuncSig_JsonKeysSig ScalarFuncSig = 5023
ScalarFuncSig_JsonLengthSig ScalarFuncSig = 5024 ScalarFuncSig_JsonLengthSig ScalarFuncSig = 5024
ScalarFuncSig_JsonKeys2ArgsSig ScalarFuncSig = 5025 ScalarFuncSig_JsonKeys2ArgsSig ScalarFuncSig = 5025
ScalarFuncSig_JsonValidStringSig ScalarFuncSig = 5026
// time // time
ScalarFuncSig_DateFormatSig ScalarFuncSig = 6001 ScalarFuncSig_DateFormatSig ScalarFuncSig = 6001
ScalarFuncSig_DateLiteral ScalarFuncSig = 6002 ScalarFuncSig_DateLiteral ScalarFuncSig = 6002
...@@ -968,7 +967,7 @@ var ScalarFuncSig_name = map[int32]string{ ...@@ -968,7 +967,7 @@ var ScalarFuncSig_name = map[int32]string{
5008: "JsonMergeSig", 5008: "JsonMergeSig",
5009: "JsonObjectSig", 5009: "JsonObjectSig",
5010: "JsonArraySig", 5010: "JsonArraySig",
5011: "JsonValidSig", 5011: "JsonValidJsonSig",
5012: "JsonContainsSig", 5012: "JsonContainsSig",
5013: "JsonArrayAppendSig", 5013: "JsonArrayAppendSig",
5014: "JsonArrayInsertSig", 5014: "JsonArrayInsertSig",
...@@ -983,6 +982,7 @@ var ScalarFuncSig_name = map[int32]string{ ...@@ -983,6 +982,7 @@ var ScalarFuncSig_name = map[int32]string{
5023: "JsonKeysSig", 5023: "JsonKeysSig",
5024: "JsonLengthSig", 5024: "JsonLengthSig",
5025: "JsonKeys2ArgsSig", 5025: "JsonKeys2ArgsSig",
5026: "JsonValidStringSig",
6001: "DateFormatSig", 6001: "DateFormatSig",
6002: "DateLiteral", 6002: "DateLiteral",
6003: "DateDiff", 6003: "DateDiff",
...@@ -1454,7 +1454,7 @@ var ScalarFuncSig_value = map[string]int32{ ...@@ -1454,7 +1454,7 @@ var ScalarFuncSig_value = map[string]int32{
"JsonMergeSig": 5008, "JsonMergeSig": 5008,
"JsonObjectSig": 5009, "JsonObjectSig": 5009,
"JsonArraySig": 5010, "JsonArraySig": 5010,
"JsonValidSig": 5011, "JsonValidJsonSig": 5011,
"JsonContainsSig": 5012, "JsonContainsSig": 5012,
"JsonArrayAppendSig": 5013, "JsonArrayAppendSig": 5013,
"JsonArrayInsertSig": 5014, "JsonArrayInsertSig": 5014,
...@@ -1469,6 +1469,7 @@ var ScalarFuncSig_value = map[string]int32{ ...@@ -1469,6 +1469,7 @@ var ScalarFuncSig_value = map[string]int32{
"JsonKeysSig": 5023, "JsonKeysSig": 5023,
"JsonLengthSig": 5024, "JsonLengthSig": 5024,
"JsonKeys2ArgsSig": 5025, "JsonKeys2ArgsSig": 5025,
"JsonValidStringSig": 5026,
"DateFormatSig": 6001, "DateFormatSig": 6001,
"DateLiteral": 6002, "DateLiteral": 6002,
"DateDiff": 6003, "DateDiff": 6003,
...@@ -2582,274 +2583,275 @@ var ( ...@@ -2582,274 +2583,275 @@ var (
func init() { proto.RegisterFile("expression.proto", fileDescriptorExpression) } func init() { proto.RegisterFile("expression.proto", fileDescriptorExpression) }
var fileDescriptorExpression = []byte{ var fileDescriptorExpression = []byte{
// 4300 bytes of a gzipped FileDescriptorProto // 4312 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x5a, 0x67, 0x74, 0x1c, 0x55, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x5a, 0x67, 0x74, 0x1c, 0x55,
0x96, 0xa6, 0x6d, 0x19, 0xec, 0x72, 0xba, 0x14, 0x36, 0x6a, 0xd8, 0xb3, 0xb6, 0x8c, 0xe6, 0xac, 0x96, 0xa6, 0x6d, 0x19, 0xec, 0x72, 0xba, 0x14, 0x36, 0x6a, 0xd8, 0xb3, 0xb6, 0x8c, 0xe6, 0xac,
0x18, 0x66, 0x57, 0x3d, 0x63, 0x4c, 0x6b, 0x7f, 0x6c, 0x6a, 0xa9, 0x65, 0xd1, 0xb3, 0x92, 0x2c, 0x18, 0x66, 0x57, 0x3d, 0x63, 0x4c, 0x6b, 0x7f, 0x6c, 0x6a, 0x05, 0x8b, 0x9e, 0x95, 0x64, 0x59,
0xab, 0x5b, 0x66, 0xf6, 0xd7, 0x9c, 0x52, 0xf7, 0x53, 0xab, 0xa0, 0xbb, 0xaa, 0xa9, 0x7a, 0x2d, 0xdd, 0x32, 0xb3, 0xbf, 0xe6, 0x94, 0xba, 0x9f, 0x5a, 0x05, 0xdd, 0x55, 0x4d, 0xd5, 0x6b, 0x59,
0x4b, 0x6c, 0x38, 0xe4, 0x1c, 0x6c, 0x82, 0x6d, 0x72, 0x86, 0x21, 0x87, 0x19, 0x72, 0x4e, 0x83, 0x62, 0xc3, 0x21, 0x47, 0x47, 0x82, 0x6d, 0x72, 0x86, 0x21, 0x87, 0x19, 0x72, 0x4e, 0x83, 0x8d,
0x8d, 0x89, 0x03, 0x38, 0x00, 0xc3, 0x30, 0x66, 0x12, 0x61, 0x02, 0x43, 0x8e, 0xb3, 0xe7, 0x7e, 0x89, 0x03, 0x38, 0x00, 0xc3, 0x30, 0x66, 0x12, 0x61, 0x02, 0x43, 0x8e, 0xb3, 0xe7, 0x7e, 0xef,
0xef, 0xbd, 0xea, 0x6a, 0x89, 0x5f, 0xaa, 0xf7, 0xbd, 0x7b, 0xbf, 0xfb, 0xbd, 0xfb, 0xf2, 0x53, 0xbd, 0xea, 0x6a, 0x89, 0x5f, 0xaa, 0xf7, 0xbd, 0x7b, 0xbf, 0xfb, 0xbd, 0xfb, 0xf2, 0x53, 0x5b,
0x5b, 0x24, 0x26, 0x6b, 0x81, 0x08, 0x43, 0xd7, 0xf7, 0x3a, 0x6b, 0x81, 0x2f, 0x7d, 0xbb, 0x45, 0x24, 0x26, 0xaa, 0x81, 0x08, 0x43, 0xd7, 0xf7, 0xda, 0xab, 0x81, 0x2f, 0x7d, 0xbb, 0x49, 0xba,
0xba, 0xb5, 0xd1, 0x03, 0x97, 0x94, 0xfd, 0xb2, 0x0f, 0x20, 0xc5, 0x5f, 0xaa, 0xee, 0xa0, 0xbb, 0xd5, 0x91, 0x43, 0x17, 0x95, 0xfc, 0x92, 0x0f, 0x20, 0xc5, 0x5f, 0xaa, 0xee, 0xb0, 0xbb, 0x12,
0x12, 0xd6, 0xbc, 0xd5, 0xae, 0xa8, 0x94, 0x0a, 0x53, 0x35, 0x61, 0x2f, 0xb1, 0x66, 0xc9, 0x5a, 0xd6, 0x9c, 0x95, 0xae, 0x28, 0x17, 0xf3, 0x93, 0x55, 0x61, 0x2f, 0xb2, 0x66, 0xc8, 0x6a, 0x32,
0x32, 0xd1, 0x96, 0x38, 0x78, 0x4e, 0x77, 0xcb, 0xd6, 0x37, 0x97, 0xef, 0x35, 0x3c, 0x4b, 0xd6, 0xd1, 0x92, 0x38, 0x7c, 0x56, 0x67, 0xd3, 0xf6, 0x37, 0x97, 0xee, 0x37, 0x34, 0x43, 0x56, 0xed,
0xec, 0xa4, 0xd5, 0x32, 0x56, 0x71, 0xca, 0xc9, 0x59, 0x6d, 0x89, 0x83, 0x17, 0x6a, 0x1c, 0x88, 0xa4, 0xd5, 0x34, 0x5a, 0x76, 0x4a, 0xc9, 0x19, 0x2d, 0x89, 0xc3, 0xe7, 0x6b, 0x1c, 0x88, 0xaa,
0xaa, 0x11, 0x5e, 0x72, 0x76, 0xcc, 0x03, 0x88, 0xbd, 0xcc, 0xda, 0xa7, 0x24, 0x8a, 0x6e, 0xd5, 0x11, 0x5e, 0x72, 0x66, 0xcc, 0x03, 0x88, 0xbd, 0xc4, 0x3a, 0xa0, 0x28, 0x0a, 0x6e, 0xc5, 0x29,
0xa9, 0x24, 0x5b, 0x62, 0x95, 0x06, 0xe4, 0xfa, 0xa2, 0x5f, 0xa9, 0x38, 0x52, 0x24, 0xe7, 0xc4, 0x27, 0x9b, 0x62, 0x95, 0x06, 0xe4, 0xfa, 0x82, 0x5f, 0x2e, 0x3b, 0x52, 0x24, 0x67, 0xc5, 0xeb,
0xeb, 0x35, 0x88, 0xfa, 0x71, 0x27, 0x08, 0x85, 0x4c, 0xee, 0xdd, 0x96, 0x38, 0x78, 0x5e, 0x54, 0x35, 0x88, 0xfa, 0x31, 0x27, 0x08, 0x85, 0x4c, 0xee, 0xdf, 0x92, 0x38, 0x7c, 0x4e, 0x54, 0xaf,
0xaf, 0xc0, 0x83, 0x9e, 0x48, 0x58, 0x2d, 0xbd, 0x93, 0xb5, 0xc0, 0xfe, 0x4e, 0x24, 0x79, 0xd1, 0xc0, 0xc3, 0x9e, 0x48, 0x58, 0x4d, 0x3d, 0x13, 0xd5, 0xc0, 0xfe, 0x4e, 0x24, 0x79, 0xc1, 0xf2,
0xca, 0x45, 0x9d, 0xdc, 0xd2, 0x4e, 0xc6, 0xb9, 0x39, 0xb1, 0x26, 0x90, 0x35, 0x7b, 0xc2, 0xa9, 0x05, 0xed, 0xdc, 0xd2, 0x76, 0xc6, 0xb9, 0x39, 0xb1, 0x26, 0x90, 0x35, 0x73, 0xdc, 0x29, 0xa3,
0xa0, 0x05, 0x0b, 0x86, 0xf9, 0xd3, 0xfe, 0x07, 0x6b, 0x6e, 0x71, 0xdc, 0xad, 0x94, 0x02, 0xc8, 0x05, 0xf3, 0x86, 0xf8, 0xd3, 0xfe, 0x07, 0x6b, 0x76, 0x61, 0xcc, 0x2d, 0x17, 0x03, 0xc8, 0x9f,
0x9f, 0x7d, 0xf0, 0xfc, 0x95, 0x56, 0xc3, 0x7b, 0x38, 0xaa, 0xb3, 0xbf, 0x67, 0xcd, 0x0e, 0xdd, 0x79, 0xf8, 0xdc, 0xe5, 0x56, 0xdd, 0x7b, 0x28, 0xaa, 0xb3, 0xbf, 0x67, 0xcd, 0x0c, 0xdd, 0x12,
0x32, 0x1a, 0xb1, 0x68, 0xe5, 0x7e, 0xca, 0x24, 0x5f, 0x74, 0x2a, 0x4e, 0xb0, 0xba, 0xee, 0x15, 0x1a, 0xb1, 0x60, 0xf9, 0x41, 0xca, 0x24, 0x57, 0x70, 0xca, 0x4e, 0xb0, 0xb2, 0xe6, 0x15, 0x72,
0xf3, 0x6e, 0x59, 0x47, 0x61, 0x2b, 0xbb, 0xd3, 0xb2, 0xc6, 0x38, 0x99, 0x3f, 0x96, 0x53, 0x35, 0x6e, 0x49, 0x47, 0x61, 0x2b, 0xbb, 0xdd, 0xb2, 0x46, 0x39, 0x99, 0x3f, 0x96, 0x93, 0x55, 0xd5,
0xd5, 0xb0, 0xf9, 0x2b, 0x17, 0x2b, 0x9f, 0x28, 0xc9, 0xc3, 0xf3, 0xc6, 0xcc, 0xe7, 0x41, 0xdd, 0xb0, 0xb9, 0xcb, 0x17, 0x2a, 0x9f, 0x28, 0xc9, 0x43, 0x73, 0x46, 0xcd, 0xe7, 0x61, 0x9d, 0xd6,
0xd6, 0xde, 0xdd, 0x53, 0x39, 0x29, 0xaa, 0xf6, 0x32, 0xab, 0x85, 0xfb, 0x0d, 0x0d, 0x69, 0x96, 0xfe, 0x9d, 0x93, 0x59, 0x29, 0x2a, 0xf6, 0x12, 0xab, 0x89, 0xfb, 0x0d, 0x0d, 0x69, 0x94, 0x02,
0x02, 0x9c, 0x33, 0x5d, 0x12, 0x61, 0x11, 0x2d, 0x98, 0x6b, 0x32, 0xcd, 0xc8, 0x21, 0x9b, 0x5a, 0x9c, 0x33, 0x5d, 0x14, 0x61, 0x01, 0x2d, 0x98, 0x6d, 0x32, 0xcd, 0xc8, 0x11, 0x5b, 0x9a, 0xac,
0xac, 0xb9, 0xa6, 0xc5, 0xf6, 0x5c, 0xab, 0x65, 0xb0, 0x5e, 0xa9, 0xd0, 0x5e, 0xf6, 0x3c, 0x6b, 0xd9, 0xa6, 0xc5, 0xf6, 0x6c, 0xab, 0x69, 0xa0, 0x56, 0x2e, 0xd3, 0x7e, 0xf6, 0x1c, 0x6b, 0x56,
0x4e, 0xce, 0x93, 0xe9, 0x55, 0x94, 0xb0, 0x2d, 0x6b, 0xef, 0x11, 0x17, 0xdf, 0xb3, 0xec, 0xf9, 0xd6, 0x93, 0xe9, 0x15, 0x94, 0xb0, 0x2d, 0x6b, 0xff, 0x61, 0x17, 0xdf, 0x33, 0xec, 0xb9, 0xd6,
0xd6, 0x3e, 0xab, 0x2b, 0xbe, 0x23, 0x0f, 0x5d, 0x49, 0xb3, 0xa3, 0x42, 0x7a, 0x15, 0xb5, 0xb0, 0x01, 0x2b, 0xcb, 0xbe, 0x23, 0x8f, 0x5c, 0x4e, 0x33, 0xa3, 0x42, 0x7a, 0x05, 0x35, 0xb1, 0x55,
0x55, 0x5e, 0x06, 0xae, 0x57, 0xa6, 0x39, 0xec, 0xdc, 0x3d, 0x25, 0x45, 0x48, 0x7b, 0xdb, 0x0b, 0x4e, 0x06, 0xae, 0x57, 0xa2, 0x59, 0xec, 0xdc, 0x39, 0x29, 0x45, 0x48, 0xfb, 0xdb, 0xf3, 0xac,
0xac, 0xb9, 0x03, 0x53, 0xe1, 0xd1, 0x95, 0x6e, 0x57, 0x92, 0xb0, 0xc9, 0x5a, 0x80, 0x52, 0x56, 0xd9, 0xfd, 0x93, 0xe1, 0xf1, 0xe5, 0x4e, 0x57, 0x92, 0xb0, 0xc9, 0x9a, 0x87, 0x52, 0xb7, 0xea,
0x75, 0x23, 0x8d, 0xd9, 0xfb, 0x5a, 0x0b, 0x15, 0x52, 0x0f, 0x1c, 0xe9, 0xfa, 0x1e, 0x95, 0xed, 0x46, 0x1a, 0xb5, 0x0f, 0xb4, 0xe6, 0x2b, 0xa4, 0x16, 0x38, 0xd2, 0xf5, 0x3d, 0x2a, 0xd9, 0xf3,
0x85, 0xd6, 0x3c, 0x40, 0xbd, 0x5e, 0xbd, 0x4a, 0xe3, 0x11, 0xc3, 0xe1, 0x62, 0x92, 0xdc, 0xa8, 0xad, 0x39, 0x80, 0x7a, 0xbc, 0x5a, 0x85, 0xc6, 0x22, 0x86, 0xa3, 0xc5, 0x04, 0xb9, 0x51, 0x29,
0x94, 0x17, 0x92, 0x8e, 0x8c, 0x4c, 0x0b, 0x6e, 0x55, 0xd0, 0x51, 0x51, 0xf1, 0x87, 0xa1, 0xef, 0x27, 0x24, 0x1d, 0x1b, 0x99, 0xe6, 0xdd, 0x8a, 0xa0, 0xe3, 0xa2, 0xe2, 0x0f, 0x43, 0xdf, 0xa3,
0x51, 0xc5, 0x5e, 0x64, 0xcd, 0x5b, 0xe7, 0x54, 0xea, 0xa2, 0xdf, 0x0d, 0x25, 0x6d, 0x4e, 0x70, 0xb2, 0xbd, 0xc0, 0x9a, 0xb3, 0xc6, 0x29, 0xd7, 0x44, 0x9f, 0x1b, 0x4a, 0xda, 0x9a, 0xe0, 0x72,
0xb9, 0xc7, 0xaf, 0xd4, 0xab, 0xde, 0xb0, 0x18, 0xa3, 0x6d, 0xdc, 0xb0, 0x39, 0x3d, 0x7e, 0xdd, 0x97, 0x5f, 0xae, 0x55, 0xbc, 0x21, 0x31, 0x4a, 0x3b, 0xb8, 0x61, 0xb3, 0xba, 0xfc, 0x9a, 0x27,
0x93, 0x74, 0x5f, 0xab, 0x3d, 0xd7, 0x9a, 0x9d, 0xaf, 0x57, 0xe9, 0x7e, 0x7c, 0x65, 0x26, 0xca, 0xe9, 0xbe, 0x66, 0x7b, 0xb6, 0x35, 0x33, 0x57, 0xab, 0xd0, 0xfd, 0xf8, 0xca, 0x8c, 0x97, 0xe8,
0xf4, 0x00, 0xbe, 0x06, 0x5c, 0x8f, 0x1e, 0x54, 0x5f, 0xce, 0x24, 0x3d, 0xd4, 0xca, 0x3e, 0xab, 0x01, 0x7c, 0xf5, 0xbb, 0x1e, 0x3d, 0xa8, 0xbe, 0x9c, 0x09, 0x7a, 0xa8, 0x99, 0x7d, 0x56, 0xba,
0xdd, 0x20, 0x94, 0xf4, 0x70, 0xab, 0x4d, 0xd6, 0xfc, 0xbe, 0xc0, 0xaf, 0xd7, 0x7a, 0x7c, 0xaf, 0x41, 0x28, 0xe9, 0xe1, 0x66, 0x9b, 0xac, 0xb9, 0xbd, 0x81, 0x5f, 0xab, 0x76, 0xf9, 0x5e, 0xc1,
0xe8, 0x48, 0x7a, 0xa4, 0xd5, 0x5e, 0x6c, 0x59, 0x99, 0x72, 0xf9, 0xc7, 0xdd, 0xae, 0xcc, 0x78, 0x91, 0xf4, 0x48, 0xb3, 0xbd, 0xd0, 0xb2, 0x32, 0xa5, 0xd2, 0x8f, 0x3b, 0x5d, 0x99, 0xf1, 0x8a,
0x25, 0x7a, 0xb4, 0x95, 0x43, 0x6a, 0x60, 0x4d, 0x40, 0x8f, 0xc5, 0x0d, 0x7e, 0xe4, 0x07, 0xf4, 0xf4, 0x68, 0x33, 0x87, 0xd4, 0xc0, 0xaa, 0x80, 0x1e, 0x8b, 0x1b, 0xfc, 0xc8, 0x0f, 0xe8, 0x71,
0xb8, 0x8a, 0x2b, 0x4b, 0xf4, 0x44, 0xab, 0x3d, 0x9f, 0x13, 0x58, 0x2a, 0x89, 0x09, 0x7a, 0x12, 0x15, 0x57, 0x16, 0xe9, 0x89, 0x66, 0x7b, 0x2e, 0x27, 0xb0, 0x58, 0x14, 0xe3, 0xf4, 0x24, 0xfc,
0x7e, 0xaa, 0x30, 0xe4, 0xd7, 0xe8, 0x29, 0xf8, 0xa9, 0x72, 0xde, 0xa9, 0xd6, 0xe8, 0xe7, 0xb0, 0x54, 0x61, 0xd0, 0xaf, 0xd2, 0x53, 0xf0, 0x53, 0xe5, 0x9c, 0x53, 0xa9, 0xd2, 0xcf, 0x61, 0xbd,
0x5e, 0xe7, 0x04, 0x5c, 0xfb, 0x74, 0xab, 0xbd, 0xc0, 0xda, 0x67, 0x9d, 0x13, 0xa0, 0x6a, 0x6b, 0xc6, 0x09, 0xb8, 0xf6, 0xe9, 0x66, 0x7b, 0x9e, 0x75, 0xc0, 0x1a, 0x27, 0x40, 0xd5, 0xf6, 0x66,
0xab, 0xbd, 0xd0, 0x9a, 0xbb, 0xce, 0x09, 0x5c, 0xc7, 0x2b, 0x0a, 0xda, 0xd6, 0x6a, 0xef, 0x6b, 0x7b, 0xbe, 0x35, 0x7b, 0x8d, 0x13, 0xb8, 0x8e, 0x57, 0x10, 0xb4, 0xa3, 0xd9, 0x3e, 0xd0, 0x9a,
0x2d, 0xe0, 0x7c, 0x64, 0x82, 0xc0, 0x99, 0xca, 0x94, 0xcb, 0xf4, 0x4c, 0xab, 0x6d, 0x5b, 0x0b, 0xc7, 0xf9, 0xc8, 0x04, 0x81, 0x33, 0x99, 0x29, 0x95, 0xe8, 0x99, 0x66, 0xdb, 0xb6, 0xe6, 0x33,
0x19, 0x5a, 0x33, 0x7a, 0xa4, 0x28, 0x4a, 0xc6, 0xb6, 0xab, 0x08, 0xd1, 0xb8, 0xa4, 0x0d, 0x83, 0xb4, 0x6a, 0xe4, 0x58, 0x51, 0x90, 0x8c, 0xed, 0x54, 0x11, 0xa2, 0x71, 0x49, 0x9b, 0x06, 0x8e,
0x87, 0x7c, 0x9a, 0xb5, 0x16, 0x36, 0x8d, 0x54, 0xee, 0xbd, 0x1e, 0x27, 0x94, 0x39, 0x4f, 0x66, 0x38, 0xbf, 0xc7, 0x9a, 0xdf, 0x30, 0x52, 0xb9, 0xf7, 0xba, 0x9c, 0x50, 0x66, 0x3d, 0x99, 0x09,
0xc2, 0x9c, 0x27, 0x69, 0x2f, 0xee, 0xbd, 0x08, 0x19, 0x16, 0x4e, 0x85, 0x12, 0xf6, 0x7e, 0xd6, 0xb3, 0x9e, 0xa4, 0xfd, 0xb8, 0xf7, 0x22, 0x64, 0x48, 0x38, 0x65, 0x4a, 0xd8, 0x07, 0x59, 0x0b,
0xe2, 0x08, 0xd2, 0x03, 0x62, 0x96, 0xbd, 0xc4, 0xa2, 0x08, 0x34, 0x7d, 0x3f, 0xbb, 0xc9, 0x1b, 0x23, 0x48, 0x0f, 0x88, 0x19, 0xf6, 0x22, 0x8b, 0x22, 0xd0, 0xf4, 0xfd, 0xcc, 0x06, 0x6f, 0xf4,
0x3d, 0xd8, 0x62, 0x2f, 0xb5, 0xf6, 0x6d, 0x18, 0x9a, 0x21, 0x31, 0xa7, 0xc9, 0x12, 0x9d, 0xbb, 0x60, 0x93, 0xbd, 0xd8, 0x3a, 0xb0, 0x6e, 0x68, 0x86, 0xc4, 0xac, 0x06, 0x4b, 0x74, 0xee, 0xfe,
0xb7, 0x81, 0x38, 0xaa, 0x52, 0x63, 0xd9, 0xb6, 0xb5, 0xa8, 0x01, 0x41, 0xce, 0x7c, 0x13, 0x59, 0x06, 0xe2, 0xa8, 0x4a, 0x8d, 0x65, 0xdb, 0xd6, 0x82, 0x3a, 0x04, 0x39, 0x73, 0x4d, 0x64, 0x85,
0x61, 0x5a, 0xcf, 0x02, 0x13, 0x46, 0xa1, 0x46, 0xd0, 0xc2, 0x66, 0x02, 0x28, 0x5a, 0x64, 0xef, 0x69, 0x3d, 0xf3, 0x4c, 0x18, 0x85, 0x1a, 0x41, 0xf3, 0x1b, 0x09, 0xa0, 0x68, 0x81, 0x7d, 0xb0,
0x6f, 0xd9, 0x31, 0x53, 0x23, 0x69, 0x71, 0xb3, 0x2d, 0x34, 0x91, 0x09, 0xa6, 0x09, 0x95, 0xac, 0x65, 0xc7, 0x4c, 0x8d, 0xa4, 0x85, 0x8d, 0xb6, 0xd0, 0x44, 0x26, 0x98, 0x26, 0x54, 0xb2, 0x16,
0x25, 0x26, 0x58, 0x84, 0x42, 0xd9, 0x52, 0xbb, 0xd5, 0xda, 0xaf, 0x09, 0xd6, 0xe2, 0xf6, 0xb7, 0x99, 0x60, 0x11, 0x0a, 0x65, 0x8b, 0xed, 0x66, 0xeb, 0xa0, 0x06, 0x58, 0x8b, 0x3b, 0xd8, 0x4e,
0x93, 0xd6, 0x92, 0xa6, 0x0a, 0xa3, 0xaf, 0x75, 0x06, 0x13, 0x24, 0x26, 0xed, 0x03, 0xac, 0xa5, 0x5a, 0x8b, 0x1a, 0x2a, 0x8c, 0xbe, 0xe6, 0x69, 0x4c, 0x90, 0x98, 0xb4, 0x0f, 0xb1, 0x16, 0x37,
0xcd, 0x0e, 0x46, 0xe5, 0x01, 0x33, 0x3c, 0x20, 0xf4, 0x40, 0xd3, 0x49, 0x2a, 0xa4, 0xd2, 0xb9, 0x3a, 0x18, 0x95, 0x87, 0x4c, 0xf3, 0x80, 0xd0, 0x43, 0x4d, 0x27, 0xa9, 0x90, 0x4a, 0xe7, 0x12,
0xcc, 0xa8, 0x37, 0x20, 0x64, 0x2e, 0x37, 0xed, 0x37, 0xa8, 0x56, 0xd9, 0x66, 0xe4, 0x1b, 0xdc, 0xa3, 0xde, 0x80, 0x90, 0xb9, 0xd4, 0xb4, 0xdf, 0xa0, 0x5a, 0x65, 0x8b, 0x91, 0x6f, 0x70, 0x23,
0x88, 0x5c, 0x31, 0x9d, 0x06, 0x1a, 0x0f, 0x32, 0x8d, 0x8a, 0xcc, 0x8d, 0xc4, 0xf6, 0xe9, 0xf6, 0x72, 0xd9, 0x54, 0x1a, 0x68, 0x3c, 0xcc, 0x34, 0x2a, 0x32, 0x37, 0x12, 0x5b, 0xa7, 0xda, 0x43,
0x50, 0xf8, 0x1d, 0xd3, 0xbd, 0xec, 0xad, 0xf4, 0x1d, 0x6c, 0x32, 0xae, 0x20, 0xa8, 0xfb, 0xae, 0xe1, 0x77, 0x4c, 0xf7, 0xb2, 0xb7, 0xd2, 0x77, 0xb8, 0xc9, 0xb8, 0x82, 0xa0, 0xee, 0xbb, 0xc6,
0x71, 0x56, 0x98, 0xd6, 0x76, 0x88, 0x69, 0xb5, 0x42, 0x8d, 0xb2, 0xef, 0x35, 0x13, 0x40, 0xd7, 0x59, 0x61, 0x5a, 0xdb, 0x11, 0xa6, 0xd5, 0x0a, 0x35, 0xca, 0xbe, 0xd7, 0x48, 0x00, 0x5d, 0xff,
0x3f, 0x9a, 0xe6, 0x69, 0x53, 0xa3, 0xea, 0x9f, 0x9a, 0x6d, 0xa1, 0xa9, 0x33, 0x4a, 0xa6, 0xb6, 0x68, 0x9a, 0xa7, 0x4d, 0x8d, 0xaa, 0x7f, 0x6a, 0xb4, 0x85, 0xa6, 0xf6, 0x28, 0x99, 0xda, 0x4a,
0x52, 0xba, 0x56, 0x1a, 0x8a, 0x06, 0x0c, 0x6d, 0x87, 0x46, 0xfd, 0x18, 0xe1, 0x5a, 0xdf, 0xaa, 0xe9, 0x5a, 0x6e, 0x28, 0xea, 0x30, 0xb4, 0x1d, 0x19, 0xf5, 0x63, 0x84, 0x6b, 0x7d, 0x2b, 0xa2,
0xa8, 0xc3, 0xa2, 0x1a, 0xa3, 0xf1, 0xb0, 0x99, 0x64, 0xd0, 0x99, 0xb6, 0x0f, 0xb4, 0xf6, 0x9f, 0x0e, 0x8b, 0x6a, 0x8c, 0xc6, 0xa3, 0xa6, 0x93, 0x41, 0x67, 0xda, 0x3e, 0xd4, 0x3a, 0x78, 0x8a,
0xe6, 0x62, 0xb4, 0x76, 0xcd, 0xf4, 0x81, 0xde, 0x7f, 0x36, 0x39, 0xc4, 0xec, 0x87, 0xd6, 0x7f, 0x8b, 0xd1, 0xda, 0x31, 0xdd, 0x07, 0x7a, 0xff, 0xd9, 0xe4, 0x10, 0xb3, 0x1f, 0x5a, 0xff, 0xc5,
0x31, 0xcd, 0x52, 0x10, 0x74, 0xfe, 0xab, 0xc9, 0xa1, 0xc2, 0xb4, 0xc6, 0x7f, 0x33, 0x8d, 0x55, 0x34, 0x4b, 0x41, 0xd0, 0xf9, 0xaf, 0x26, 0x87, 0x0a, 0xd3, 0x1a, 0xff, 0xcd, 0x34, 0x56, 0xa1,
0xa8, 0xd1, 0xf7, 0xef, 0xcd, 0x04, 0xd0, 0xf6, 0x1f, 0x26, 0xbe, 0x36, 0x35, 0xba, 0x32, 0xcd, 0x46, 0xdf, 0xbf, 0x37, 0x12, 0x40, 0xdb, 0x7f, 0x98, 0xf8, 0xda, 0xd4, 0xe8, 0xca, 0x34, 0xda,
0xb6, 0xd0, 0xd4, 0xcd, 0x6b, 0x66, 0x8f, 0xef, 0x54, 0x44, 0x58, 0x14, 0xac, 0xe8, 0x9d, 0x36, 0x42, 0x53, 0x27, 0xaf, 0x99, 0x5d, 0xbe, 0x53, 0x16, 0x61, 0x41, 0xb0, 0xa2, 0x77, 0x5a, 0x78,
0x5e, 0x9f, 0x0c, 0x02, 0x41, 0xef, 0xb6, 0xd9, 0x4b, 0xac, 0xc5, 0x06, 0x32, 0x91, 0xdf, 0x6b, 0x7d, 0x32, 0x08, 0x04, 0xbd, 0xdb, 0x62, 0x2f, 0xb2, 0x16, 0x1a, 0xc8, 0x44, 0x7e, 0xaf, 0xc5,
0xb3, 0xf7, 0xb3, 0x16, 0x19, 0x54, 0xab, 0x7c, 0xbf, 0xc9, 0x1b, 0x6a, 0xfe, 0xd8, 0x66, 0x2f, 0x3e, 0xc8, 0x5a, 0x60, 0x50, 0xad, 0xf2, 0xfd, 0x06, 0x6f, 0xa8, 0xf9, 0x63, 0x8b, 0xbd, 0xd8,
0xb5, 0x28, 0xf2, 0x36, 0x62, 0xfe, 0xd4, 0x64, 0x09, 0x2d, 0x7f, 0x6e, 0xe3, 0x7d, 0xaa, 0xbf, 0xa2, 0xc8, 0xdb, 0x88, 0xf9, 0x53, 0x83, 0x25, 0xb4, 0xfc, 0xb9, 0x85, 0xf7, 0xa9, 0xbe, 0x3c,
0xc0, 0x32, 0x4a, 0xbc, 0x7d, 0xf5, 0x17, 0x10, 0x5f, 0xf0, 0x36, 0xd2, 0x5f, 0x68, 0x6c, 0x51, 0xcb, 0x28, 0xf2, 0xf6, 0xd5, 0x97, 0x47, 0x7c, 0xc1, 0xdb, 0x48, 0x5f, 0xbe, 0xbe, 0x45, 0xcd,
0x0b, 0xac, 0xb9, 0xfd, 0x05, 0x1d, 0xb1, 0xac, 0x0c, 0x11, 0x6a, 0xdc, 0x5e, 0x64, 0x59, 0xfd, 0xb3, 0x66, 0xf7, 0xe5, 0x75, 0xc4, 0x92, 0x32, 0x44, 0xa8, 0x31, 0x7b, 0x81, 0x65, 0xf5, 0xe5,
0x85, 0x28, 0x86, 0xab, 0xea, 0x40, 0x7e, 0x24, 0xb8, 0x7b, 0x99, 0xdb, 0x03, 0xdc, 0x0b, 0x6e, 0xa3, 0x18, 0xae, 0xaa, 0x03, 0xf9, 0xb1, 0xe0, 0xee, 0x61, 0x6e, 0x0f, 0x70, 0x0f, 0xb8, 0x7d,
0x1f, 0xdc, 0xbd, 0x86, 0xbb, 0x06, 0xee, 0x5e, 0xcd, 0x7d, 0xb4, 0x32, 0x04, 0x77, 0x00, 0xee, 0x70, 0xf7, 0x18, 0xee, 0x2a, 0xb8, 0x7b, 0x34, 0xf7, 0xf1, 0xca, 0x10, 0xdc, 0x01, 0xb8, 0x7b,
0xde, 0x88, 0x3b, 0x54, 0x75, 0xe0, 0x96, 0xcc, 0xdd, 0x07, 0xdd, 0x93, 0x0c, 0xf7, 0x29, 0xdd, 0x22, 0xee, 0x50, 0xd5, 0x81, 0x5b, 0x32, 0x77, 0x2f, 0x74, 0x4f, 0x30, 0xdc, 0xab, 0x74, 0x4f,
0x53, 0xcc, 0xdd, 0x17, 0xe9, 0x3e, 0x86, 0xb9, 0xfb, 0x8c, 0xee, 0xff, 0x56, 0x86, 0xe0, 0xfe, 0x32, 0x77, 0x6f, 0xa4, 0xfb, 0x04, 0xe6, 0xee, 0x35, 0xba, 0xff, 0x5b, 0x19, 0x82, 0xfb, 0x7f,
0x1f, 0xe6, 0xee, 0x6b, 0xe8, 0xfe, 0x5f, 0x55, 0x07, 0xee, 0xff, 0x53, 0x9b, 0x9a, 0x70, 0xa4, 0x98, 0xbb, 0xb7, 0xae, 0xfb, 0x7f, 0x55, 0x1d, 0xb8, 0xff, 0x4f, 0x6d, 0x6a, 0xc2, 0x91, 0x02,
0xc0, 0x72, 0x4b, 0x9f, 0x22, 0x71, 0x06, 0x41, 0xa0, 0xcf, 0xd0, 0x41, 0x06, 0x32, 0xf1, 0x3e, 0xcb, 0x2d, 0x7d, 0x8a, 0xc4, 0x19, 0x04, 0x81, 0x3e, 0x43, 0x07, 0x19, 0xc8, 0xc4, 0xfb, 0x1c,
0x47, 0x07, 0x19, 0x54, 0x87, 0xfd, 0xa2, 0xc9, 0x1b, 0xd1, 0xbf, 0x6c, 0xe3, 0x0d, 0xaa, 0x5f, 0x1d, 0x64, 0x50, 0x1d, 0xf6, 0x8b, 0x06, 0x6f, 0x44, 0xff, 0xb2, 0x85, 0x37, 0xa8, 0x3e, 0xa1,
0xa8, 0xe5, 0x9c, 0xbe, 0x6a, 0xe3, 0xbd, 0x0e, 0x45, 0x90, 0x7f, 0x0d, 0x0f, 0x94, 0x0d, 0xf3, 0x96, 0x73, 0xfa, 0xaa, 0x85, 0xf7, 0x3a, 0x14, 0x41, 0xfe, 0x35, 0x3c, 0x50, 0x36, 0xcc, 0xdf,
0x37, 0x6d, 0x2c, 0x0a, 0x90, 0xa6, 0xfd, 0x5b, 0xc3, 0x09, 0x9c, 0xc7, 0xae, 0x60, 0x8b, 0x9c, 0xb4, 0xb0, 0x28, 0x40, 0x9a, 0xf6, 0x6f, 0x75, 0x27, 0x70, 0x9e, 0xb8, 0x8c, 0x2d, 0xb2, 0x9e,
0x27, 0x45, 0x30, 0xe1, 0x54, 0x98, 0xf6, 0xb8, 0x15, 0x4c, 0x63, 0x10, 0x30, 0x1f, 0xbf, 0x82, 0x14, 0xc1, 0xb8, 0x53, 0x66, 0xda, 0x93, 0x96, 0x31, 0x8d, 0x41, 0xc0, 0x7c, 0xf2, 0x32, 0xde,
0x37, 0xef, 0x3e, 0xf4, 0xc9, 0xf1, 0x09, 0xde, 0x40, 0xfb, 0x54, 0xa7, 0x9c, 0x80, 0x93, 0x41, 0xbc, 0x7b, 0xd1, 0x27, 0x27, 0x27, 0x78, 0x03, 0xed, 0x55, 0x9d, 0x72, 0x0a, 0x4e, 0x06, 0xbd,
0x5f, 0xd4, 0x2b, 0x27, 0x26, 0x58, 0x61, 0x9f, 0xe9, 0x96, 0x93, 0xb4, 0x2d, 0x22, 0x9d, 0x9c, 0x51, 0xaf, 0x9c, 0x9a, 0x60, 0x85, 0xbd, 0xa6, 0x5b, 0x4e, 0xd3, 0xb6, 0x88, 0x74, 0x7a, 0x82,
0xe0, 0x8d, 0xb2, 0xaf, 0xd1, 0x31, 0xa7, 0xe8, 0x5a, 0x64, 0xef, 0x54, 0x9c, 0x29, 0x7a, 0xd7, 0x37, 0xca, 0xde, 0x7a, 0xc7, 0x9c, 0xa1, 0x6b, 0x91, 0xbd, 0x33, 0x71, 0xa6, 0xe8, 0x59, 0xcd,
0x72, 0x88, 0x33, 0x51, 0xd1, 0xbb, 0x16, 0x21, 0xce, 0x42, 0x88, 0xde, 0xb5, 0x26, 0xc4, 0xd9, 0x21, 0xd6, 0xa1, 0xa2, 0x67, 0x35, 0x42, 0xac, 0x47, 0x88, 0x9e, 0xd5, 0x26, 0xc4, 0x06, 0x84,
0x08, 0xd1, 0xbb, 0x56, 0x87, 0x38, 0x47, 0xdb, 0x22, 0xc4, 0x06, 0x84, 0xe8, 0x5d, 0x1b, 0x85, 0xe8, 0x59, 0xad, 0x43, 0x6c, 0xd4, 0xb6, 0x08, 0xb1, 0x09, 0x21, 0x7a, 0x56, 0x47, 0x21, 0x36,
0xd8, 0xa8, 0x6b, 0x11, 0xe2, 0x5c, 0x84, 0x18, 0x44, 0x2b, 0x36, 0xa1, 0x62, 0x50, 0xb5, 0x42, 0xeb, 0x5a, 0x84, 0x38, 0x17, 0x21, 0x06, 0xd0, 0x8a, 0x2d, 0xa8, 0x18, 0x50, 0xad, 0x50, 0xe7,
0x9d, 0x6f, 0x06, 0xa3, 0x56, 0x6c, 0x41, 0x88, 0x41, 0xd3, 0x8a, 0x0b, 0xb5, 0x2d, 0x42, 0x5c, 0x9b, 0x81, 0xa8, 0x15, 0xdb, 0x10, 0x62, 0xc0, 0xb4, 0xe2, 0x42, 0x6d, 0x8b, 0x10, 0x17, 0x21,
0x84, 0x10, 0x83, 0x8d, 0x56, 0x5c, 0xac, 0x6b, 0x11, 0xe2, 0x12, 0xc5, 0x54, 0xaf, 0x54, 0x54, 0xc4, 0x40, 0xbd, 0x15, 0x17, 0xeb, 0x5a, 0x84, 0xb8, 0x44, 0x31, 0xd5, 0xca, 0x65, 0xd5, 0x92,
0x4b, 0xae, 0x50, 0xd6, 0x28, 0x23, 0xd4, 0x95, 0x09, 0x3e, 0x41, 0x28, 0xc0, 0x84, 0xbb, 0x2a, 0x2b, 0x94, 0x35, 0xca, 0x08, 0x75, 0x65, 0x82, 0x4f, 0x10, 0x0a, 0x30, 0xe1, 0xae, 0x4a, 0x70,
0xc1, 0x09, 0x57, 0x98, 0x0e, 0x79, 0x75, 0xcc, 0x0f, 0x61, 0xaf, 0xe1, 0xd3, 0xc1, 0x22, 0xed, 0xc2, 0x15, 0xa6, 0x43, 0x5e, 0x1d, 0xf3, 0x43, 0xd8, 0x6b, 0xf8, 0x74, 0xb0, 0x40, 0xfb, 0x99,
0x67, 0x42, 0x5f, 0x1b, 0xb3, 0x42, 0xf8, 0xeb, 0x20, 0x7c, 0xa8, 0x52, 0x57, 0xeb, 0xd3, 0xd6, 0xd0, 0xd7, 0xc6, 0xac, 0x10, 0xfe, 0x3a, 0x08, 0x1f, 0x2c, 0xd7, 0xd4, 0xfa, 0xb4, 0x3d, 0xc1,
0x04, 0xf7, 0x2d, 0x17, 0x4d, 0xa8, 0x6d, 0x09, 0x3e, 0xf0, 0x30, 0xc2, 0xea, 0xb6, 0x43, 0xed, 0x7d, 0xcb, 0x45, 0x13, 0x6a, 0x47, 0x82, 0x0f, 0x3c, 0x8c, 0xb0, 0xba, 0x9d, 0x50, 0xdb, 0xef,
0x80, 0xeb, 0x69, 0xfb, 0x67, 0x21, 0x04, 0x65, 0xe3, 0xf0, 0x1c, 0x18, 0x01, 0xb1, 0xc7, 0x0b, 0x7a, 0xda, 0xfe, 0x59, 0x08, 0x41, 0xd9, 0x38, 0x3c, 0x07, 0x46, 0x40, 0xec, 0xf1, 0x82, 0xb2,
0xca, 0xa2, 0x5e, 0x91, 0x6e, 0xad, 0x32, 0x05, 0xa7, 0x17, 0x13, 0x3c, 0xa4, 0x0d, 0x64, 0xfc, 0xa8, 0x95, 0xa5, 0x5b, 0x2d, 0x4f, 0xc2, 0xe9, 0xc5, 0x04, 0x0f, 0x69, 0x03, 0x19, 0xbf, 0x97,
0x5e, 0x42, 0x68, 0x83, 0xb2, 0xeb, 0x2f, 0x20, 0x36, 0xeb, 0x4e, 0xb8, 0x25, 0xb5, 0x58, 0xbd, 0x10, 0xda, 0xa0, 0xec, 0xfa, 0x0b, 0x88, 0xed, 0x76, 0xc7, 0xdd, 0xa2, 0x5a, 0xac, 0x5e, 0x46,
0x8c, 0x54, 0x28, 0xc0, 0xb8, 0xbd, 0x92, 0xd0, 0x63, 0x4f, 0xc1, 0xec, 0xf7, 0x6a, 0x82, 0x57, 0x2a, 0x14, 0x60, 0xdc, 0x5e, 0x49, 0xe8, 0xb1, 0xa7, 0x60, 0xf6, 0x7b, 0x35, 0xc1, 0xab, 0x52,
0xa5, 0x08, 0x32, 0x96, 0x3b, 0xd0, 0x92, 0x01, 0xbf, 0x04, 0xae, 0x9d, 0x20, 0x1f, 0xf0, 0x4b, 0x04, 0x19, 0xcb, 0x5d, 0x68, 0x49, 0xbf, 0x5f, 0x04, 0xd7, 0x6e, 0x90, 0xf7, 0xfb, 0x45, 0x53,
0xa6, 0x7a, 0x17, 0x7a, 0x65, 0xc0, 0x2f, 0x31, 0xc5, 0xee, 0x84, 0x9d, 0xb4, 0xf6, 0x8b, 0x89, 0xbd, 0x07, 0xbd, 0xd2, 0xef, 0x17, 0x99, 0x62, 0x6f, 0xc2, 0x4e, 0x5a, 0x07, 0xc5, 0xc4, 0x0c,
0x19, 0xf1, 0x42, 0xb7, 0xec, 0x89, 0x12, 0xbd, 0x06, 0xb3, 0xcc, 0x28, 0x1a, 0x77, 0x17, 0x31, 0x7b, 0xa1, 0x5b, 0xf2, 0x44, 0x91, 0x5e, 0x83, 0x59, 0x66, 0x04, 0x8d, 0xbb, 0x8b, 0x98, 0x32,
0x65, 0x66, 0x34, 0x1c, 0xe1, 0xd2, 0xdd, 0xa6, 0x84, 0x00, 0xf7, 0x10, 0xce, 0x9f, 0xa3, 0x51, 0x33, 0x12, 0x0e, 0x73, 0xe9, 0x6e, 0x53, 0x42, 0x80, 0x7b, 0x08, 0xe7, 0xcf, 0x91, 0x28, 0x31,
0x62, 0xee, 0x25, 0xac, 0x8a, 0xc2, 0xe5, 0x39, 0x53, 0xf0, 0xb3, 0xa2, 0x48, 0xf7, 0x35, 0x43, 0xf7, 0x12, 0x56, 0x45, 0xe1, 0xf2, 0x9c, 0xc9, 0xfb, 0xdd, 0xa2, 0x40, 0xf7, 0x35, 0x42, 0x4c,
0x4c, 0x72, 0x7f, 0x04, 0x65, 0x45, 0x51, 0x41, 0x0f, 0x34, 0x43, 0xec, 0xf8, 0x20, 0x71, 0x92, 0x72, 0x7f, 0x04, 0x75, 0x8b, 0x82, 0x82, 0x1e, 0x68, 0x84, 0xd8, 0xf1, 0x41, 0xe2, 0x24, 0x33,
0x19, 0x42, 0xac, 0x87, 0x88, 0x13, 0xb3, 0xba, 0xe2, 0xfb, 0x41, 0xc4, 0xfd, 0xf0, 0x34, 0x8c, 0x84, 0x58, 0x0f, 0x11, 0x27, 0x66, 0x65, 0xd9, 0xf7, 0x83, 0x88, 0xfb, 0xe1, 0x29, 0x18, 0x33,
0x99, 0x1e, 0x69, 0x60, 0x11, 0xfb, 0xa3, 0xd3, 0x30, 0xf6, 0x7d, 0x8c, 0xb8, 0x9b, 0x81, 0x81, 0x3d, 0x52, 0xc7, 0x22, 0xf6, 0x47, 0xa7, 0x60, 0xec, 0xfb, 0x18, 0x71, 0x37, 0x03, 0x03, 0xff,
0xff, 0x71, 0x94, 0x87, 0xfd, 0xba, 0xa7, 0x92, 0xb7, 0x0d, 0xe1, 0x51, 0x66, 0x8a, 0x67, 0x1a, 0xe3, 0x28, 0x0f, 0xf9, 0x35, 0x4f, 0x25, 0x6f, 0x07, 0xc2, 0xa3, 0xcc, 0x14, 0xcf, 0xd4, 0x8b,
0x45, 0xf6, 0xde, 0x4e, 0xf6, 0xfe, 0xd6, 0xbe, 0x28, 0x1e, 0xe1, 0xca, 0xf1, 0xd5, 0x81, 0x53, 0xec, 0xbd, 0x93, 0xec, 0x83, 0xad, 0x03, 0x51, 0x3c, 0xc6, 0x95, 0x63, 0x2b, 0x03, 0xa7, 0xa0,
0x54, 0x83, 0x85, 0xb8, 0x5f, 0x9a, 0x70, 0xf6, 0x7e, 0x6e, 0x26, 0xcc, 0x2c, 0xcf, 0x23, 0x9b, 0x06, 0x0b, 0x71, 0xbf, 0x34, 0xe0, 0xec, 0xfd, 0xdc, 0x74, 0x98, 0x59, 0x9e, 0x47, 0x36, 0xfb,
0xfd, 0x7e, 0xf9, 0x07, 0x99, 0xa0, 0x4c, 0x2f, 0x23, 0x44, 0xbf, 0x5f, 0x5e, 0x99, 0x09, 0xca, 0xfc, 0xd2, 0x0f, 0x32, 0x41, 0x89, 0x5e, 0x46, 0x88, 0x3e, 0xbf, 0xb4, 0x3c, 0x13, 0x94, 0x42,
0x21, 0xbd, 0x42, 0xf6, 0x3c, 0xab, 0x85, 0x8b, 0xf4, 0x2a, 0xf1, 0x1c, 0x65, 0xbb, 0xef, 0xd3, 0x7a, 0x85, 0xec, 0x39, 0x56, 0x13, 0x17, 0xe9, 0x55, 0xe2, 0x39, 0xca, 0x76, 0xdf, 0xa7, 0x5d,
0x0e, 0xc0, 0xc3, 0x8e, 0x57, 0xa2, 0x9d, 0x48, 0x1a, 0x7f, 0x32, 0x69, 0x5e, 0x88, 0x12, 0xed, 0x80, 0x87, 0x1c, 0xaf, 0x48, 0xbb, 0x91, 0x34, 0xfe, 0x64, 0xd2, 0x9c, 0x10, 0x45, 0xda, 0x43,
0x22, 0xbe, 0x00, 0x0c, 0xf9, 0xeb, 0x69, 0x37, 0xec, 0x7a, 0x7c, 0x6f, 0x82, 0x5e, 0x83, 0x7b, 0x7c, 0x01, 0x18, 0xf4, 0xd7, 0xd2, 0x5e, 0xd8, 0x75, 0xf9, 0xde, 0x38, 0xbd, 0x06, 0xf7, 0xae,
0xcf, 0x70, 0xcf, 0xa1, 0x2b, 0xe9, 0x75, 0xc0, 0x79, 0xb7, 0xec, 0xd1, 0x1b, 0xea, 0xf3, 0xe8, 0xa1, 0xae, 0x23, 0x97, 0xd3, 0xeb, 0x80, 0x73, 0x6e, 0xc9, 0xa3, 0x37, 0xd4, 0xe7, 0xf1, 0x81,
0x40, 0xd2, 0x2f, 0xf1, 0x99, 0x29, 0xfa, 0x21, 0xbd, 0xa9, 0x3e, 0x43, 0xd7, 0xa3, 0x5f, 0x41, 0xa4, 0x5f, 0xe2, 0x33, 0x53, 0xf0, 0x43, 0x7a, 0x53, 0x7d, 0x86, 0xae, 0x47, 0xbf, 0x82, 0xa0,
0x50, 0x46, 0x3a, 0x1e, 0xf4, 0xbd, 0x85, 0x0c, 0x71, 0x51, 0x09, 0xfc, 0x35, 0x62, 0xf5, 0xf8, 0x8c, 0x74, 0x3c, 0xe8, 0x7b, 0x0b, 0x19, 0xe2, 0xa2, 0x12, 0xf8, 0x6b, 0xc4, 0xea, 0xf2, 0x43,
0x21, 0xed, 0xd1, 0x5f, 0x92, 0xde, 0x46, 0x8b, 0xb2, 0xa2, 0x1c, 0x08, 0x11, 0xd2, 0x6f, 0x80, 0xda, 0xa7, 0xbf, 0x24, 0xbd, 0x8d, 0x16, 0x75, 0x8b, 0x52, 0x20, 0x44, 0x48, 0xbf, 0x01, 0xde,
0xf7, 0x4e, 0xd6, 0xe8, 0xb7, 0x64, 0xef, 0x63, 0xcd, 0x1a, 0xca, 0xd1, 0xef, 0x60, 0x30, 0xec, 0x33, 0x51, 0xa5, 0xdf, 0x92, 0x7d, 0x80, 0x35, 0x63, 0x30, 0x4b, 0xbf, 0x83, 0xc1, 0x90, 0x53,
0x94, 0x5c, 0xc7, 0x0b, 0xe9, 0xf7, 0x30, 0xc8, 0xbb, 0x1e, 0xfd, 0x01, 0x5f, 0x05, 0xc7, 0xa3, 0x74, 0x1d, 0x2f, 0xa4, 0xdf, 0xc3, 0x20, 0xe7, 0x7a, 0xf4, 0x07, 0x7c, 0xe5, 0x1d, 0x8f, 0xde,
0x77, 0x88, 0x27, 0x49, 0x21, 0xa8, 0xf3, 0x1d, 0x08, 0x83, 0xfd, 0x5d, 0xb4, 0xd3, 0x20, 0xc8, 0x21, 0x9e, 0x24, 0xf9, 0xa0, 0xc6, 0x77, 0x20, 0x0c, 0xf6, 0x77, 0xd1, 0x4e, 0x83, 0x20, 0xcf,
0xf3, 0x7b, 0x7c, 0x36, 0x5e, 0x6c, 0x20, 0x33, 0xfc, 0xde, 0xc7, 0x78, 0xec, 0xf7, 0xcb, 0x6e, 0xef, 0xf1, 0xd9, 0x78, 0xa1, 0x81, 0xcc, 0xf0, 0x7b, 0x1f, 0xe3, 0xb1, 0xcf, 0x2f, 0xb9, 0x05,
0xd1, 0xa9, 0xf0, 0x85, 0xe9, 0xd2, 0x24, 0xd6, 0x75, 0x05, 0xac, 0x09, 0xe8, 0xb2, 0x64, 0xcc, 0xa7, 0xcc, 0x17, 0xa6, 0x4b, 0x93, 0x58, 0xd7, 0x15, 0xb0, 0x2a, 0xa0, 0xcb, 0x92, 0x31, 0x03,
0x80, 0x2f, 0x4c, 0x97, 0x27, 0xb9, 0x89, 0x23, 0x9e, 0x13, 0x4c, 0x0d, 0xfa, 0x92, 0xae, 0x48, 0xbe, 0x30, 0x5d, 0x9e, 0xe4, 0x26, 0x0e, 0x7b, 0x4e, 0x30, 0x39, 0xe0, 0x4b, 0xba, 0x22, 0xc9,
0xf2, 0x40, 0x41, 0x31, 0x9a, 0xdd, 0xd7, 0x24, 0x79, 0x91, 0x69, 0x60, 0x88, 0x7f, 0x6d, 0x92, 0x03, 0x05, 0xc5, 0x68, 0x76, 0x5f, 0x93, 0xe4, 0x45, 0xa6, 0x8e, 0x21, 0xfe, 0xb5, 0x49, 0xee,
0xfb, 0xbf, 0x01, 0x1a, 0x05, 0xd7, 0x81, 0x40, 0x97, 0x72, 0x21, 0xee, 0xbe, 0xd7, 0x83, 0xc0, 0xff, 0x3a, 0x68, 0x14, 0x5c, 0x07, 0x02, 0x5d, 0xca, 0x86, 0xb8, 0xfb, 0x5e, 0x0f, 0x02, 0xb3,
0xac, 0x4f, 0x1a, 0xfc, 0x09, 0x94, 0x30, 0x97, 0x06, 0x6e, 0x48, 0x72, 0x23, 0xd5, 0x4a, 0xa7, 0x3e, 0x69, 0xf0, 0x27, 0x50, 0xc2, 0x5c, 0x1a, 0xb8, 0x21, 0xc9, 0x8d, 0x54, 0x2b, 0x9d, 0x86,
0xa1, 0x1b, 0x61, 0xc3, 0x2b, 0x9d, 0x06, 0x6e, 0x42, 0x73, 0x72, 0x9e, 0xd4, 0xe5, 0x9b, 0x61, 0x6e, 0x84, 0x0d, 0xaf, 0x74, 0x1a, 0xb8, 0x09, 0xcd, 0xc9, 0x7a, 0x52, 0x97, 0x6f, 0x86, 0x01,
0xc0, 0x8b, 0x9c, 0x06, 0x6e, 0x81, 0x81, 0xba, 0x2d, 0xe6, 0xdd, 0x32, 0xdd, 0x8a, 0xe6, 0xe1, 0x2f, 0x72, 0x1a, 0xb8, 0x05, 0x06, 0xea, 0xb6, 0x98, 0x73, 0x4b, 0x74, 0x2b, 0x9a, 0x87, 0xcb,
0xb2, 0xc8, 0xc5, 0xdb, 0x4c, 0xf5, 0x8f, 0x7c, 0x94, 0x6f, 0x37, 0xe5, 0x41, 0x51, 0xe6, 0xf2, 0x22, 0x17, 0x6f, 0x33, 0xd5, 0x3f, 0xf2, 0x51, 0xbe, 0xdd, 0x94, 0x07, 0x44, 0x89, 0xcb, 0x77,
0x1d, 0x0d, 0xfe, 0x42, 0x50, 0x17, 0x74, 0x67, 0x4c, 0x24, 0x80, 0x9f, 0x36, 0x37, 0x0f, 0xd8, 0xd4, 0xf9, 0xf3, 0x41, 0x4d, 0xd0, 0x9d, 0x31, 0x91, 0x00, 0x7e, 0xda, 0xd8, 0x3c, 0x60, 0x3f,
0xcf, 0x60, 0x04, 0xa7, 0xd5, 0x4e, 0x25, 0x14, 0x74, 0x57, 0x92, 0x3b, 0x50, 0x79, 0x29, 0xe4, 0x83, 0x11, 0x9c, 0x56, 0x3a, 0xe5, 0x50, 0xd0, 0x5d, 0x49, 0xee, 0x40, 0xe5, 0xa5, 0x90, 0xbb,
0x6e, 0x95, 0x01, 0xe3, 0xa6, 0xc0, 0x7b, 0x54, 0xdf, 0x88, 0x31, 0x99, 0x1f, 0x77, 0xc7, 0x24, 0x55, 0x06, 0x8c, 0x9b, 0x02, 0xef, 0x51, 0x7d, 0x23, 0x46, 0x65, 0x6e, 0xcc, 0x1d, 0x95, 0x74,
0xdd, 0xa7, 0x82, 0xb9, 0xe5, 0x71, 0x0d, 0xdc, 0x6f, 0xc4, 0xab, 0x3b, 0xf5, 0xbd, 0x20, 0xe9, 0x9f, 0x0a, 0xe6, 0x96, 0xc6, 0x34, 0x70, 0xbf, 0x11, 0xaf, 0xee, 0xd4, 0xf7, 0x82, 0xa4, 0x57,
0x13, 0x72, 0xc8, 0x09, 0x9c, 0xaa, 0xde, 0x12, 0x1e, 0x48, 0x62, 0xb7, 0x14, 0x72, 0x9d, 0x13, 0xc8, 0x41, 0x27, 0x70, 0x2a, 0x7a, 0x4b, 0x78, 0x20, 0x89, 0xdd, 0x52, 0xc8, 0x35, 0x4e, 0x40,
0xd0, 0x83, 0x28, 0x0c, 0xfb, 0xeb, 0xb9, 0x2d, 0x0f, 0xa1, 0x90, 0x57, 0x35, 0x0f, 0x43, 0x37, 0x0f, 0xa2, 0x30, 0xe4, 0xaf, 0xe5, 0xb6, 0x3c, 0x84, 0x42, 0x4e, 0xd5, 0x3c, 0x0c, 0xdd, 0xb8,
0xee, 0xee, 0x51, 0x57, 0x3d, 0x02, 0x3e, 0x8d, 0x99, 0xcd, 0xe3, 0xd1, 0x64, 0x74, 0xc9, 0x47, 0xbb, 0x47, 0x5d, 0xf5, 0x08, 0xf8, 0x34, 0x66, 0x36, 0x8f, 0x47, 0x93, 0xd1, 0x25, 0x1f, 0x9d,
0xe7, 0x3f, 0x06, 0x51, 0xaa, 0xfc, 0xc3, 0xfc, 0x9a, 0x41, 0x7a, 0x3c, 0x06, 0x60, 0x24, 0x3c, 0xff, 0x18, 0x44, 0xa9, 0xf2, 0x0f, 0x73, 0xab, 0x06, 0xe8, 0xf1, 0x18, 0x80, 0x91, 0xf0, 0x04,
0x81, 0x7e, 0x53, 0x80, 0x16, 0xf5, 0x64, 0xcc, 0x06, 0xfb, 0xd4, 0x53, 0x49, 0x9e, 0x80, 0x39, 0xfa, 0x4d, 0x01, 0x5a, 0xd4, 0x93, 0x31, 0x1b, 0xec, 0x53, 0x4f, 0x25, 0x79, 0x02, 0x66, 0x3d,
0x8f, 0x19, 0xaf, 0x5c, 0xce, 0xba, 0x72, 0x1e, 0x9c, 0xaf, 0x5a, 0xae, 0x12, 0x6e, 0x34, 0x5d, 0x66, 0xbc, 0x72, 0x29, 0xeb, 0xca, 0x7a, 0x70, 0xbe, 0x6a, 0xa9, 0x4a, 0xb8, 0xd1, 0x74, 0xf5,
0xbd, 0x9c, 0x9b, 0x9c, 0xf3, 0x34, 0xd1, 0x35, 0xda, 0x16, 0x24, 0xd7, 0x2e, 0x57, 0x79, 0x8e, 0x52, 0x6e, 0x72, 0xd6, 0xd3, 0x44, 0xd7, 0x68, 0x5b, 0x90, 0x5c, 0xbb, 0x54, 0xe5, 0x39, 0xd2,
0xb4, 0x5e, 0xa7, 0x6b, 0xb1, 0xc9, 0x5d, 0xaf, 0x98, 0xc6, 0x78, 0x18, 0x70, 0x98, 0x93, 0xda, 0x7a, 0x9d, 0xae, 0xc5, 0x26, 0x77, 0xbd, 0x62, 0x1a, 0xe5, 0x61, 0xc0, 0x61, 0x4e, 0x6b, 0x81,
0x60, 0x8d, 0x32, 0x42, 0x9d, 0xdc, 0xc6, 0x29, 0x50, 0x80, 0x09, 0x77, 0x0a, 0xce, 0x46, 0x0a, 0x35, 0xca, 0x08, 0x75, 0x7a, 0x0b, 0xa7, 0x40, 0x01, 0x26, 0xdc, 0x19, 0x38, 0x1b, 0x29, 0x4c,
0xd3, 0x21, 0x4f, 0x8d, 0xf9, 0x21, 0xec, 0x69, 0x38, 0x86, 0x69, 0x3f, 0x13, 0xfa, 0xf4, 0x36, 0x87, 0x3c, 0x33, 0xe6, 0x87, 0xb0, 0x67, 0xe1, 0x18, 0xa6, 0xfd, 0x4c, 0xe8, 0xb3, 0x5b, 0xd0,
0x34, 0x68, 0x8c, 0x23, 0x9d, 0xd1, 0x06, 0x19, 0x63, 0x88, 0x72, 0x66, 0x9b, 0x92, 0x61, 0x22, 0xa0, 0x51, 0x8e, 0x74, 0x4e, 0x0b, 0x64, 0x8c, 0x22, 0xca, 0xba, 0x16, 0x25, 0xc3, 0x44, 0x58,
0x9c, 0x85, 0xc3, 0x59, 0x6e, 0x4c, 0xb3, 0x9f, 0xad, 0x6d, 0xc1, 0x7c, 0x8e, 0x0e, 0x15, 0xb1, 0x8f, 0xc3, 0x59, 0x76, 0x54, 0xb3, 0x6f, 0xd0, 0xb6, 0x60, 0xde, 0xa8, 0x43, 0x45, 0xac, 0x9b,
0x6e, 0x88, 0xc5, 0x46, 0xa3, 0x36, 0x6a, 0x73, 0x75, 0x50, 0xc1, 0xa9, 0xad, 0xc7, 0x09, 0xc5, 0x62, 0xb1, 0xd1, 0xa8, 0xcd, 0xda, 0x5c, 0x1d, 0x54, 0x70, 0x6a, 0xeb, 0x72, 0x42, 0x71, 0xcc,
0x11, 0xe3, 0x02, 0xa9, 0xfc, 0x8b, 0x3a, 0x83, 0x6b, 0x04, 0xf1, 0x3f, 0x50, 0x67, 0x7d, 0x0d, 0x98, 0x40, 0x2a, 0xff, 0xa2, 0xce, 0xe0, 0x1a, 0x41, 0xfc, 0x0f, 0xd4, 0x59, 0x5f, 0x43, 0x46,
0x19, 0x15, 0x7f, 0x55, 0x67, 0x7d, 0x8d, 0x6a, 0x2d, 0x1f, 0x36, 0x79, 0x43, 0xd1, 0x47, 0xea, 0xc5, 0x5f, 0xd5, 0x59, 0x5f, 0xa3, 0x5a, 0xcb, 0x87, 0x0d, 0xde, 0x50, 0xf4, 0x91, 0x3a, 0xeb,
0xac, 0x6f, 0xbc, 0x8d, 0xae, 0x8f, 0x9b, 0x2c, 0x21, 0xe6, 0x13, 0x48, 0xcd, 0x60, 0x34, 0x05, 0x1b, 0x6f, 0xa3, 0xeb, 0xe3, 0x06, 0x4b, 0x88, 0xf9, 0x04, 0x52, 0x33, 0x18, 0x4d, 0xc1, 0x64,
0x53, 0x35, 0x49, 0x17, 0xb4, 0x6b, 0xa0, 0xd7, 0x53, 0xc0, 0xa6, 0x76, 0x6c, 0x5f, 0x7e, 0x15, 0x55, 0xd2, 0x05, 0xad, 0x1a, 0xe8, 0xf1, 0x14, 0xb0, 0xa5, 0x15, 0xdb, 0x97, 0x5f, 0xc1, 0xe3,
0x8f, 0x9f, 0xb4, 0xb9, 0x1d, 0x6f, 0x3e, 0xd9, 0xc3, 0x68, 0x0b, 0x2a, 0x86, 0x9c, 0x30, 0x5c, 0x27, 0x6d, 0x6d, 0xc5, 0x9b, 0x4f, 0xf7, 0x51, 0xb4, 0x0d, 0x15, 0x83, 0x4e, 0x18, 0xae, 0xf5,
0xef, 0x07, 0x25, 0xba, 0xb0, 0x1d, 0xb3, 0xc5, 0xf1, 0x4a, 0x7e, 0x55, 0xbd, 0x71, 0x5d, 0xd4, 0x83, 0x22, 0x5d, 0xd8, 0x8a, 0xd9, 0xe2, 0x78, 0x45, 0xbf, 0xa2, 0xde, 0xb8, 0x2e, 0x6a, 0xc5,
0x8e, 0x75, 0xf9, 0xf0, 0xcc, 0x0f, 0xe8, 0x62, 0xf3, 0xb9, 0x92, 0x2e, 0x41, 0x80, 0x11, 0xaf, 0xba, 0x7c, 0x74, 0xe6, 0x07, 0x74, 0xb1, 0xf9, 0x5c, 0x4e, 0x97, 0x20, 0xc0, 0xb0, 0x57, 0x30,
0x68, 0x18, 0x2f, 0x6d, 0xb7, 0x5b, 0x2d, 0xbb, 0x01, 0x88, 0x52, 0xbf, 0xf0, 0xca, 0x72, 0x9c, 0x8c, 0x97, 0xb6, 0xda, 0xcd, 0x96, 0x5d, 0x07, 0x44, 0xb1, 0x4f, 0x78, 0x25, 0x39, 0x46, 0x97,
0x2e, 0x43, 0x80, 0xac, 0x23, 0x9d, 0x51, 0x27, 0x14, 0x74, 0x43, 0x3b, 0x36, 0x3a, 0x6c, 0x6c, 0x21, 0x40, 0xb7, 0x23, 0x9d, 0x11, 0x27, 0x14, 0x74, 0x43, 0x2b, 0x36, 0x3a, 0x6c, 0x6c, 0xfe,
0xfe, 0xfa, 0x90, 0x6e, 0x44, 0xc0, 0x9e, 0x7a, 0x10, 0x08, 0x4f, 0x8e, 0x84, 0x22, 0xa0, 0x9b, 0xda, 0x90, 0x6e, 0x44, 0xc0, 0xae, 0x5a, 0x10, 0x08, 0x4f, 0x0e, 0x87, 0x22, 0xa0, 0x9b, 0x10,
0x10, 0x05, 0x9f, 0x37, 0xb7, 0xab, 0x6b, 0x8d, 0xe7, 0x89, 0x22, 0x56, 0xab, 0x2c, 0xdd, 0x02, 0x05, 0x9f, 0x37, 0xb7, 0xaa, 0x6b, 0x8d, 0xe7, 0x89, 0x02, 0x56, 0xab, 0x6e, 0xba, 0x05, 0x50,
0xa8, 0x1f, 0xc7, 0xeb, 0x50, 0x04, 0x32, 0x97, 0xa5, 0x5b, 0x11, 0x3a, 0x0e, 0xf1, 0x06, 0x94, 0x1f, 0x8e, 0xd7, 0xa1, 0x08, 0x64, 0xb6, 0x9b, 0x6e, 0x45, 0xe8, 0x38, 0xc4, 0x1b, 0x50, 0xb6,
0xcb, 0xd2, 0x6d, 0xed, 0x78, 0x3a, 0x12, 0x41, 0xc8, 0x79, 0xbb, 0x1d, 0x91, 0x0a, 0x6e, 0xb6, 0x9b, 0x6e, 0x6b, 0xc5, 0xd3, 0x91, 0x08, 0x42, 0xce, 0xdb, 0xed, 0x88, 0x94, 0x77, 0xbb, 0x3b,
0xdb, 0x20, 0x77, 0xb4, 0xab, 0x5d, 0x74, 0xbd, 0x9a, 0xd2, 0x77, 0xb6, 0xf3, 0x30, 0xca, 0x57, 0x0d, 0x72, 0x47, 0xab, 0xda, 0x45, 0xd7, 0xaa, 0x29, 0x7d, 0x67, 0x2b, 0x0f, 0xa3, 0x5c, 0x59,
0x84, 0xa8, 0xd1, 0xd3, 0xed, 0x6a, 0xbb, 0x2b, 0x1e, 0x45, 0x5b, 0x55, 0x4a, 0x44, 0x45, 0x38, 0x88, 0x2a, 0x3d, 0xdd, 0xaa, 0xb6, 0xbb, 0xc2, 0x71, 0xb4, 0x5d, 0xa5, 0x44, 0x94, 0x85, 0x13,
0xa1, 0x00, 0xb2, 0x8d, 0x6f, 0xf5, 0x8b, 0xcd, 0xa3, 0x83, 0x37, 0x85, 0xb9, 0x45, 0xcf, 0xb4, 0x0a, 0x20, 0x3b, 0xf8, 0x56, 0xbf, 0xd0, 0x3c, 0x3a, 0x78, 0x93, 0x98, 0x5b, 0xf4, 0x4c, 0x2b,
0x73, 0x77, 0x45, 0xb7, 0x54, 0x03, 0x6f, 0x6f, 0xd7, 0x87, 0xf7, 0x08, 0x79, 0x16, 0x4d, 0xe0, 0x77, 0x57, 0x74, 0x4b, 0x35, 0xf0, 0xce, 0x56, 0x7d, 0x78, 0x8f, 0x90, 0x67, 0xd1, 0x04, 0x9e,
0xf9, 0x1b, 0x41, 0xcf, 0x01, 0xc2, 0x63, 0x8b, 0x81, 0x9e, 0x6f, 0xe7, 0x51, 0xa2, 0x9f, 0x0d, 0xbf, 0x11, 0xf4, 0x1c, 0x20, 0x3c, 0xb6, 0x18, 0xe8, 0xf9, 0x56, 0x1e, 0x25, 0xfa, 0xd9, 0xc0,
0x0c, 0xf8, 0x02, 0xec, 0x70, 0x6b, 0x37, 0xd0, 0x8b, 0xed, 0x6a, 0x92, 0x0a, 0x99, 0x91, 0xbe, 0x80, 0x2f, 0xc0, 0x0e, 0xb7, 0x76, 0x03, 0xbd, 0xd8, 0xaa, 0x26, 0xa9, 0x90, 0x19, 0xe9, 0x7b,
0x47, 0x2f, 0x45, 0xc5, 0x41, 0xe9, 0x3b, 0xf4, 0x8b, 0x76, 0x35, 0xa5, 0x85, 0x4c, 0xa3, 0xfa, 0xf4, 0x52, 0x54, 0x1c, 0x90, 0xbe, 0x43, 0xbf, 0x68, 0x55, 0x53, 0x5a, 0xc8, 0x34, 0xaa, 0x5f,
0xe5, 0x46, 0x19, 0xf5, 0xaf, 0xb4, 0x63, 0x4c, 0x87, 0xb9, 0xa1, 0x89, 0x55, 0xf4, 0x2a, 0xd8, 0xae, 0x97, 0x51, 0xff, 0x4a, 0x2b, 0xc6, 0x74, 0x98, 0x1d, 0x1c, 0x5f, 0x41, 0xaf, 0x82, 0x5d,
0x55, 0x81, 0x87, 0x8a, 0x23, 0x69, 0x47, 0x0c, 0x1a, 0x70, 0x6a, 0x35, 0x51, 0xa2, 0x9d, 0x0d, 0x15, 0x78, 0xa8, 0x38, 0x92, 0x76, 0xc5, 0xa0, 0x7e, 0xa7, 0x5a, 0x15, 0x45, 0xda, 0x5d, 0x77,
0x97, 0x34, 0xed, 0x52, 0x9d, 0x35, 0x92, 0xcb, 0xd2, 0x6e, 0x64, 0xbb, 0xdf, 0x3d, 0x4a, 0xf0, 0x49, 0xd3, 0x1e, 0xd5, 0x59, 0xc3, 0xd9, 0x6e, 0xda, 0x8b, 0x6c, 0xf7, 0xb9, 0xc7, 0x09, 0x5e,
0x82, 0xb7, 0x63, 0x05, 0xe7, 0x68, 0x58, 0x94, 0xc5, 0x64, 0xad, 0xdb, 0xe5, 0x9d, 0x89, 0xd1, 0xf0, 0x76, 0x2d, 0xe3, 0x1c, 0x0d, 0x89, 0x92, 0x98, 0xa8, 0x76, 0xba, 0xbc, 0x33, 0x31, 0xba,
0x9d, 0x2b, 0x70, 0xac, 0x01, 0xca, 0xe5, 0x5d, 0x2b, 0xb8, 0x91, 0x3c, 0x86, 0x7b, 0x27, 0x65, 0x7b, 0x19, 0x8e, 0x35, 0x40, 0xb9, 0xbc, 0x67, 0x19, 0x37, 0x92, 0xc7, 0x70, 0xcf, 0x84, 0x0c,
0xe0, 0x14, 0x25, 0x83, 0xa7, 0x75, 0x18, 0x70, 0xc4, 0x3b, 0xba, 0xee, 0x4b, 0xf0, 0x9d, 0xde, 0x9c, 0x82, 0x64, 0xf0, 0xac, 0x36, 0x03, 0x0e, 0x7b, 0xc7, 0xd7, 0x7c, 0x09, 0xbe, 0xb3, 0xdb,
0xc1, 0x69, 0x64, 0xb0, 0x30, 0x55, 0x03, 0x72, 0x46, 0x87, 0xd9, 0x6e, 0xf2, 0x02, 0x7e, 0x67, 0x38, 0x8d, 0x0c, 0xe6, 0x27, 0xab, 0x40, 0xce, 0x69, 0x33, 0xdb, 0x4d, 0x4e, 0xc0, 0x6f, 0x5d,
0x76, 0x98, 0x97, 0x3f, 0x35, 0x0e, 0x18, 0x3b, 0x2b, 0xe2, 0x1a, 0x16, 0xb5, 0x8a, 0x53, 0x84, 0x9b, 0x79, 0xf9, 0x53, 0xe3, 0x80, 0xb1, 0xf5, 0x11, 0xd7, 0x90, 0xa8, 0x96, 0x9d, 0x02, 0x3c,
0xe7, 0xd9, 0x91, 0xe1, 0xb0, 0xa8, 0xfa, 0x13, 0xc0, 0xce, 0xe9, 0x30, 0x2f, 0x89, 0x03, 0x22, 0x37, 0x44, 0x86, 0x43, 0xa2, 0xe2, 0x8f, 0x03, 0xdb, 0xd8, 0x66, 0x5e, 0x12, 0xfb, 0x45, 0x50,
0x28, 0x03, 0xda, 0xd0, 0xd1, 0xfc, 0x92, 0xc8, 0xd8, 0xc6, 0x8e, 0xa6, 0x07, 0x47, 0x86, 0xce, 0x02, 0xb4, 0xa9, 0xad, 0xf1, 0x25, 0x91, 0xb1, 0xcd, 0x6d, 0x0d, 0x0f, 0x8e, 0x0c, 0x9d, 0xdb,
0x8d, 0xa0, 0x75, 0x4e, 0xc5, 0xc5, 0x46, 0x77, 0x5e, 0x07, 0x37, 0x9e, 0xa1, 0x1e, 0xdf, 0x93, 0xc6, 0xfd, 0xce, 0xd0, 0x1a, 0xa7, 0xec, 0x16, 0x21, 0xc8, 0x2d, 0xd1, 0x79, 0x6d, 0x9c, 0x00,
0x8e, 0xeb, 0x85, 0x8c, 0x9e, 0xdf, 0xc1, 0xe3, 0xb4, 0xf1, 0x58, 0x59, 0xab, 0x09, 0xb5, 0x2f, 0x2e, 0x75, 0xf9, 0x9e, 0x74, 0x5c, 0x2f, 0x64, 0xf4, 0xfc, 0x36, 0x1e, 0xab, 0xf5, 0x07, 0xcb,
0x5e, 0xd0, 0x5c, 0xd1, 0x50, 0xbf, 0xa9, 0x83, 0xf7, 0xf5, 0x48, 0xd4, 0x90, 0x23, 0x8b, 0xe3, 0x6a, 0x55, 0xa8, 0xbd, 0xf1, 0x82, 0xc6, 0x8a, 0x7a, 0x0b, 0xb6, 0xb4, 0xf1, 0xde, 0x1e, 0x09,
0x8c, 0x6f, 0xee, 0xb0, 0x0f, 0xb0, 0x96, 0x34, 0xf0, 0x40, 0x84, 0x22, 0x50, 0xed, 0xd8, 0xd2, 0x1b, 0x74, 0x64, 0x61, 0x8c, 0xf1, 0xad, 0x6d, 0xf6, 0x21, 0xd6, 0xa2, 0x3a, 0x1e, 0x88, 0x50,
0xc1, 0xe7, 0xe8, 0x78, 0xe8, 0x21, 0x47, 0xc2, 0xe9, 0xc2, 0xa8, 0x39, 0x43, 0x81, 0x90, 0x12, 0x04, 0xaa, 0x2d, 0xdb, 0xda, 0xf8, 0x2c, 0x1d, 0x0f, 0x3d, 0xe8, 0x48, 0x38, 0x5d, 0x18, 0x35,
0xda, 0x2f, 0x8a, 0xb4, 0xaf, 0x35, 0x89, 0xbe, 0x38, 0x32, 0xcb, 0x0b, 0x27, 0x50, 0xf1, 0x2e, 0x69, 0x30, 0x10, 0x52, 0x42, 0xff, 0x45, 0x51, 0x93, 0x56, 0x9b, 0x64, 0x5f, 0x1c, 0x99, 0xe5,
0x89, 0x04, 0xe6, 0xa5, 0x1f, 0x38, 0x9c, 0x9e, 0x63, 0x60, 0x7c, 0x69, 0xe4, 0x9f, 0x15, 0x35, 0x84, 0x13, 0xa8, 0x78, 0x97, 0x44, 0x02, 0x73, 0xd2, 0x0f, 0x1c, 0x4e, 0xd1, 0x09, 0x30, 0xbe,
0x15, 0xe6, 0xb2, 0xa8, 0xa3, 0xfe, 0x53, 0x4c, 0xa1, 0xdd, 0x97, 0x47, 0x8c, 0x6a, 0x49, 0x60, 0x34, 0xf2, 0xef, 0x16, 0x55, 0x15, 0xe6, 0xb2, 0xa8, 0xb3, 0xfe, 0x53, 0x4c, 0xa2, 0xdd, 0x97,
0xec, 0x8a, 0x0e, 0x9e, 0x2c, 0xc6, 0x0a, 0x27, 0x38, 0x86, 0xaf, 0x84, 0x69, 0xd6, 0x91, 0x62, 0x47, 0x8c, 0x6a, 0x59, 0x60, 0xec, 0x8a, 0x28, 0x71, 0x6c, 0x85, 0x53, 0x1c, 0xc3, 0x57, 0x46,
0xb5, 0x1f, 0x54, 0x1d, 0x24, 0xe1, 0x83, 0x4e, 0x26, 0x64, 0xac, 0xdf, 0x95, 0x22, 0xe0, 0x05, 0x81, 0x90, 0x4f, 0x35, 0x03, 0xb8, 0xe2, 0x2a, 0x70, 0x74, 0x3b, 0x52, 0xac, 0xf4, 0x83, 0x8a,
0xb4, 0x53, 0x2f, 0x29, 0x22, 0xeb, 0x8e, 0x8d, 0xd1, 0x87, 0x9d, 0xe6, 0x6e, 0xc6, 0x13, 0x03, 0x83, 0xec, 0x7c, 0xd0, 0xce, 0x91, 0x18, 0xeb, 0x73, 0xa5, 0x08, 0x78, 0x75, 0x6d, 0xd7, 0xeb,
0xd0, 0x47, 0x9d, 0x2c, 0x98, 0x8b, 0x6a, 0x02, 0x45, 0x15, 0x1f, 0x77, 0xda, 0x7f, 0x67, 0xed, 0x8d, 0xe8, 0x76, 0x47, 0x47, 0xe9, 0xc3, 0x76, 0x73, 0x71, 0xe3, 0x59, 0x03, 0xe8, 0xa3, 0x76,
0x6f, 0x26, 0xe9, 0xb4, 0xca, 0x4f, 0x3a, 0xed, 0xbf, 0xb7, 0x92, 0xa6, 0xd2, 0xfc, 0x8d, 0xaa, 0x0e, 0xc0, 0x45, 0xc5, 0x1d, 0x55, 0x7c, 0xdc, 0x6e, 0xff, 0x9d, 0x75, 0xb0, 0x99, 0xc1, 0x53,
0x3f, 0x05, 0x69, 0xc3, 0x27, 0xaa, 0xf8, 0x0c, 0xa4, 0xaa, 0x62, 0x86, 0xd7, 0xe7, 0x9d, 0xdc, 0x2a, 0x3f, 0x69, 0xb7, 0xff, 0xde, 0x4a, 0x9a, 0x4a, 0xf3, 0x37, 0xaa, 0xfe, 0x14, 0xa4, 0x75,
0x57, 0xaa, 0x72, 0x5a, 0xbc, 0x2f, 0x3a, 0x39, 0x09, 0x86, 0x2a, 0x82, 0xbf, 0xec, 0xe4, 0x39, 0x9f, 0xa8, 0xe2, 0x33, 0x90, 0xaa, 0x8a, 0x69, 0x5e, 0x9f, 0xb7, 0x73, 0x27, 0xea, 0x26, 0x36,
0xc5, 0xcd, 0xa3, 0xaf, 0xf0, 0x79, 0xb8, 0x5f, 0x0f, 0xe8, 0xeb, 0x4e, 0xdc, 0x96, 0x5c, 0xaf, 0xc6, 0xfb, 0xa2, 0x9d, 0xb3, 0x63, 0xa8, 0x22, 0xf8, 0xcb, 0x76, 0x9e, 0x70, 0xdc, 0x3c, 0xfa,
0x2e, 0x05, 0x7d, 0xd3, 0xa9, 0x8e, 0x13, 0x45, 0xdf, 0x2b, 0xd1, 0xdf, 0x90, 0xa0, 0x01, 0xb7, 0x0a, 0x9f, 0x47, 0xfb, 0xb5, 0x80, 0xbe, 0x6e, 0xc7, 0x55, 0xca, 0xf5, 0x6a, 0x52, 0xd0, 0x37,
0x18, 0xf8, 0x1a, 0x39, 0x36, 0xc5, 0x2b, 0xd9, 0x80, 0xef, 0xc9, 0x71, 0x3a, 0x2e, 0x85, 0x0b, 0xed, 0xea, 0xac, 0x51, 0xf0, 0xbd, 0x22, 0xfd, 0x0d, 0x09, 0xea, 0x77, 0x0b, 0x81, 0xaf, 0x91,
0x24, 0x7f, 0x0f, 0x3a, 0x55, 0x41, 0xc7, 0xa7, 0x70, 0x21, 0xf5, 0xd7, 0xf3, 0x22, 0xc9, 0x07, 0x13, 0x53, 0xbc, 0xcc, 0xf5, 0xfb, 0x9e, 0x1c, 0xa3, 0x93, 0x52, 0xb8, 0x5d, 0xf2, 0xf7, 0x80,
0xe9, 0x13, 0x52, 0xb8, 0xee, 0x2a, 0xc0, 0xaf, 0x4b, 0xc6, 0x4e, 0x4c, 0xe1, 0xe0, 0xec, 0x4c, 0x53, 0x11, 0x74, 0x72, 0x0a, 0xb7, 0x55, 0x7f, 0x2d, 0xaf, 0xa0, 0x7c, 0xca, 0x3e, 0x25, 0x85,
0xc1, 0xe5, 0x24, 0xb8, 0x64, 0x9d, 0xa9, 0x35, 0x63, 0x8a, 0xf3, 0x64, 0x70, 0x02, 0x38, 0x42, 0xbb, 0xb0, 0x02, 0xfc, 0x9a, 0x64, 0xec, 0xd4, 0x14, 0x4e, 0xd5, 0xce, 0x24, 0x5c, 0x4e, 0x83,
0x88, 0xa3, 0xe8, 0x94, 0x46, 0xf9, 0xbf, 0x84, 0x13, 0xd0, 0xa9, 0x29, 0xee, 0x11, 0xae, 0x62, 0x4b, 0xb7, 0x33, 0xb9, 0x6a, 0x54, 0x71, 0x9e, 0x0e, 0x4e, 0x00, 0xc7, 0x08, 0x71, 0x1c, 0x9d,
0xce, 0x01, 0xbf, 0x24, 0xe8, 0xb4, 0x14, 0x4f, 0x09, 0x03, 0xf9, 0x75, 0x09, 0xf4, 0x74, 0xc4, 0x51, 0x2f, 0xff, 0x97, 0x70, 0x02, 0x3a, 0x33, 0xc5, 0x3d, 0xc2, 0x55, 0xcc, 0xd9, 0xef, 0x17,
0x61, 0x34, 0xeb, 0x4c, 0xd1, 0x19, 0x88, 0xc3, 0x25, 0xcd, 0x73, 0x66, 0x8a, 0x9b, 0x8f, 0xcf, 0x05, 0x9d, 0x95, 0xe2, 0xb9, 0x62, 0x20, 0xbf, 0x26, 0x81, 0x9e, 0x8d, 0x38, 0x8c, 0x76, 0x3b,
0xb3, 0x52, 0x9c, 0x2b, 0xfe, 0x6c, 0xa2, 0x3d, 0x3b, 0xc5, 0xc3, 0x3d, 0x0e, 0x1b, 0xea, 0x73, 0x93, 0x74, 0x0e, 0xe2, 0x70, 0x49, 0xf3, 0xac, 0x4b, 0x71, 0xf3, 0xf1, 0xb9, 0x3e, 0xc5, 0xb9,
0xa0, 0xa9, 0x4f, 0x48, 0x35, 0x92, 0x68, 0x43, 0x0a, 0xeb, 0xe9, 0x54, 0xc8, 0x89, 0xc5, 0xb5, 0xe2, 0xcf, 0x06, 0xda, 0x0d, 0x29, 0x9e, 0x07, 0x71, 0xd8, 0x50, 0x6f, 0x84, 0xa6, 0x5e, 0x21,
0x27, 0xac, 0xd1, 0xc6, 0x14, 0x4f, 0xb0, 0x18, 0xe8, 0xd7, 0x25, 0xe3, 0xe7, 0xa6, 0x62, 0xbb, 0xd5, 0x48, 0xa2, 0x4d, 0x29, 0x2c, 0xb6, 0x93, 0x21, 0x27, 0x16, 0x77, 0xa2, 0xb0, 0x4a, 0x9b,
0x12, 0x7a, 0xe2, 0x3c, 0xe8, 0xd7, 0x08, 0x77, 0xd5, 0xf7, 0x39, 0x4f, 0xe7, 0x4f, 0x47, 0x71, 0x53, 0x3c, 0xf3, 0x62, 0xa0, 0x5f, 0x93, 0x8c, 0x9f, 0x9b, 0x8a, 0x6d, 0x59, 0xe8, 0x89, 0xf3,
0x35, 0xb9, 0x00, 0xb2, 0xb1, 0x87, 0x6f, 0x4a, 0xa9, 0x4d, 0xa7, 0x1a, 0x0d, 0xde, 0xcd, 0x68, 0xa0, 0x5f, 0x23, 0xdc, 0x55, 0xdf, 0xe7, 0x3c, 0x9d, 0x3f, 0x15, 0xc5, 0xbd, 0xe5, 0x02, 0xc8,
0xf2, 0x48, 0xa1, 0x07, 0xb4, 0x5b, 0xa0, 0x7f, 0xa4, 0xd0, 0xc3, 0x26, 0xa1, 0x74, 0xaa, 0x35, 0xc6, 0x06, 0xbf, 0x25, 0xa5, 0x76, 0xa4, 0x4a, 0x34, 0x78, 0xb7, 0xa2, 0xc9, 0xc3, 0xf9, 0x2e,
0xd3, 0x2d, 0x17, 0xa6, 0x78, 0x50, 0x4d, 0xaf, 0xd1, 0xfd, 0x73, 0x11, 0x2a, 0x33, 0xa5, 0x12, 0xd0, 0x6e, 0x83, 0xfe, 0xe1, 0x7c, 0x17, 0x9b, 0x84, 0xd2, 0xa9, 0x54, 0x4d, 0xb7, 0x5c, 0x98,
0x93, 0x48, 0x6c, 0x07, 0xa5, 0xc6, 0x6b, 0x47, 0x8a, 0x47, 0x5c, 0x73, 0xa5, 0x3e, 0x65, 0x5c, 0xe2, 0x41, 0x35, 0xb5, 0x46, 0xf7, 0xcf, 0x45, 0xa8, 0xcc, 0x14, 0x8b, 0x4c, 0x22, 0xb1, 0x57,
0x82, 0x70, 0x99, 0x52, 0x09, 0x83, 0xcd, 0x91, 0x18, 0x74, 0x38, 0xab, 0x5f, 0x6a, 0x9c, 0xcc, 0x14, 0xeb, 0x4f, 0x21, 0x29, 0x1e, 0x71, 0x8d, 0x95, 0xfa, 0x08, 0x72, 0x09, 0xc2, 0x65, 0x8a,
0x8e, 0xd3, 0xe0, 0xbb, 0x2c, 0xc5, 0xe3, 0x3e, 0x5e, 0xa5, 0xd9, 0x2e, 0x47, 0xf6, 0x34, 0x9b, 0x45, 0x0c, 0x36, 0x47, 0x62, 0xd0, 0xe1, 0x20, 0x7f, 0xa9, 0x71, 0x32, 0xdb, 0x51, 0x9d, 0xef,
0xc2, 0xc0, 0x75, 0x45, 0xa4, 0x2e, 0xda, 0x0c, 0x1b, 0x6c, 0x57, 0x46, 0xea, 0x1a, 0x95, 0x9a, 0xb2, 0x14, 0x8f, 0xfb, 0x78, 0x95, 0x66, 0xbb, 0x1c, 0xd9, 0xd3, 0x6c, 0x0a, 0x03, 0xd7, 0x15,
0xef, 0xaa, 0x26, 0x75, 0xba, 0x1a, 0x8c, 0x57, 0x1b, 0x09, 0xac, 0x39, 0xce, 0x76, 0x0d, 0x86, 0x91, 0xba, 0x68, 0xa7, 0xac, 0xb3, 0x5d, 0x19, 0xa9, 0xab, 0x57, 0x6a, 0xbe, 0xab, 0x1a, 0xd4,
0x45, 0xa3, 0x42, 0x33, 0x5d, 0x0b, 0x05, 0xf9, 0xfa, 0xe8, 0xb7, 0xe5, 0xe7, 0x3a, 0x28, 0x68, 0xe9, 0x6a, 0x30, 0x5e, 0x6d, 0x24, 0xb0, 0xe6, 0x38, 0xdb, 0x35, 0x18, 0x16, 0xf5, 0x0a, 0xcd,
0xae, 0xd4, 0x7e, 0xd7, 0x43, 0x41, 0xbe, 0x3e, 0x3a, 0x23, 0x3f, 0x3f, 0x31, 0x4e, 0x33, 0xf3, 0x74, 0x2d, 0x14, 0xe4, 0x6a, 0x23, 0xdf, 0x96, 0x9f, 0xeb, 0xa0, 0xa0, 0xb1, 0x52, 0xfb, 0x5d,
0x73, 0x03, 0xc4, 0xc5, 0xab, 0x34, 0xdb, 0x8d, 0x6a, 0x74, 0x29, 0xb6, 0x58, 0x7e, 0x6e, 0x8a, 0x0f, 0x05, 0xb9, 0xda, 0xc8, 0xb4, 0xfc, 0xfc, 0xc4, 0x38, 0x4d, 0xcf, 0xcf, 0x0d, 0x10, 0x17,
0xd4, 0x7d, 0x4b, 0x7e, 0x6e, 0x8e, 0xd4, 0xcd, 0xc8, 0xcf, 0x2d, 0x4d, 0xea, 0xe2, 0xf9, 0xb9, 0xaf, 0xd2, 0x6c, 0x37, 0xaa, 0xd1, 0xa5, 0xd8, 0x62, 0xf9, 0xb9, 0x29, 0x52, 0xf7, 0x2d, 0xf9,
0xd5, 0x48, 0x98, 0x9e, 0x9f, 0xdb, 0x90, 0x9f, 0x46, 0x85, 0x66, 0xba, 0x1d, 0x41, 0x46, 0x3c, 0xb9, 0x39, 0x52, 0x37, 0x2d, 0x3f, 0xb7, 0x34, 0xa8, 0x8b, 0xe7, 0xe7, 0x56, 0x23, 0x61, 0x6a,
0x77, 0x32, 0x1a, 0x5d, 0x7a, 0x10, 0xd3, 0x1d, 0xf0, 0x68, 0xaa, 0xe2, 0xd3, 0xed, 0x9d, 0x33, 0x7e, 0x6e, 0x43, 0x7e, 0xea, 0x15, 0x9a, 0xe9, 0x76, 0x04, 0x19, 0xf6, 0xdc, 0x89, 0x68, 0x74,
0xe1, 0xac, 0x28, 0xd2, 0x4f, 0x53, 0xea, 0xdf, 0x8e, 0xde, 0x84, 0x08, 0x64, 0xe1, 0x18, 0xfa, 0xe9, 0x41, 0x4c, 0x77, 0xc0, 0xa3, 0xa1, 0x8a, 0x8f, 0xbe, 0x77, 0x4e, 0x87, 0xbb, 0x45, 0x81,
0x59, 0x0a, 0x6f, 0x51, 0xce, 0x51, 0xc8, 0x1e, 0xdd, 0x15, 0x15, 0x31, 0x1b, 0xee, 0x86, 0xf5, 0x7e, 0x9a, 0x52, 0xff, 0x93, 0xf4, 0xc6, 0x45, 0x20, 0xf3, 0x27, 0xd0, 0xcf, 0x52, 0x78, 0xa8,
0x90, 0x08, 0x5c, 0xbf, 0x94, 0x29, 0x95, 0xe8, 0x1e, 0x4c, 0x78, 0x55, 0xc6, 0xd2, 0x77, 0x2f, 0x72, 0x8e, 0x43, 0xf6, 0xe8, 0xae, 0xa8, 0x88, 0xd9, 0x70, 0x37, 0xac, 0x07, 0x45, 0xe0, 0xfa,
0x26, 0xc7, 0xda, 0xba, 0x13, 0x48, 0x11, 0xd0, 0x7d, 0x30, 0xcf, 0x8b, 0x62, 0xc1, 0x87, 0xfb, 0xc5, 0x4c, 0xb1, 0x48, 0xf7, 0x60, 0xc2, 0xab, 0x32, 0x96, 0xbe, 0x7b, 0x31, 0x39, 0x56, 0xd7,
0xfd, 0x28, 0x63, 0xad, 0xe4, 0x95, 0x8e, 0x1e, 0x48, 0x99, 0xd3, 0x10, 0xf4, 0x30, 0xe3, 0x83, 0x9c, 0x40, 0x8a, 0x80, 0xee, 0x83, 0x79, 0x4e, 0x14, 0xf2, 0x3e, 0xdc, 0xef, 0x47, 0x19, 0x6b,
0x29, 0x5e, 0x18, 0x0b, 0x7e, 0xd6, 0x99, 0x0a, 0xe9, 0x21, 0x65, 0xaf, 0x57, 0xc5, 0x90, 0x1e, 0x25, 0xaf, 0x74, 0xf4, 0x40, 0xca, 0x1c, 0x95, 0xa0, 0x87, 0x19, 0x1f, 0x4c, 0xf1, 0xc2, 0x98,
0xc6, 0x12, 0xa0, 0xa7, 0x94, 0x99, 0x67, 0x8f, 0xa0, 0x93, 0x62, 0xa0, 0x9e, 0x62, 0x8f, 0x62, 0xf7, 0xbb, 0x9d, 0xc9, 0x90, 0x1e, 0x52, 0xf6, 0x7a, 0x55, 0x0c, 0xe9, 0x61, 0x2c, 0x01, 0x7a,
0x59, 0x8c, 0xc8, 0x31, 0xb1, 0x1f, 0x03, 0x41, 0x84, 0xa9, 0x87, 0x87, 0xc7, 0x53, 0x66, 0x15, 0x4a, 0x99, 0x79, 0xf6, 0x08, 0x3a, 0x29, 0x06, 0xea, 0x29, 0xf6, 0x28, 0x96, 0xc5, 0x88, 0x1c,
0x07, 0x68, 0xe6, 0xf9, 0x13, 0x68, 0x0a, 0x9f, 0x4a, 0x79, 0x69, 0x7b, 0x12, 0x6c, 0x79, 0x19, 0x13, 0xfb, 0x31, 0x10, 0x44, 0x98, 0x7a, 0x95, 0x78, 0x3c, 0x65, 0x56, 0x71, 0x80, 0x66, 0x9e,
0xb0, 0x34, 0xa9, 0x92, 0xf3, 0x94, 0x1a, 0x1e, 0x71, 0x8c, 0x47, 0x23, 0xfd, 0x7c, 0x1a, 0x6e, 0x3f, 0x81, 0xa6, 0xf0, 0x91, 0x95, 0x97, 0xb6, 0x27, 0xc1, 0x96, 0x93, 0x01, 0x4b, 0x93, 0x2a,
0xfa, 0xf2, 0x69, 0x04, 0x5a, 0x1d, 0xf8, 0x55, 0xd3, 0x0d, 0x10, 0xb5, 0x75, 0x06, 0xcc, 0xba, 0x39, 0x4f, 0xa9, 0xe1, 0x11, 0xc7, 0x78, 0x34, 0xd2, 0xcf, 0xa7, 0xe0, 0xa6, 0x2f, 0x9f, 0x46,
0x68, 0x1b, 0x96, 0x26, 0x7d, 0xac, 0x8a, 0xb8, 0x9f, 0x69, 0x42, 0x0d, 0xf3, 0x76, 0x33, 0xf1, 0xa0, 0x95, 0x81, 0x5f, 0x31, 0xdd, 0x00, 0x51, 0xdb, 0xa7, 0xc1, 0xac, 0x8b, 0x76, 0x60, 0x69,
0xd8, 0x2e, 0xbe, 0x55, 0xd1, 0xb3, 0xf1, 0xf9, 0xa5, 0x9f, 0x03, 0x3c, 0x49, 0xcf, 0xc5, 0x97, 0xd2, 0x67, 0xae, 0x88, 0xfb, 0x99, 0x06, 0xd4, 0x30, 0xef, 0x34, 0x13, 0x8f, 0xed, 0xe2, 0x5b,
0x18, 0xbd, 0xf1, 0xe9, 0xdb, 0xcd, 0xf3, 0x71, 0x8f, 0x9c, 0x67, 0xde, 0xb4, 0x5f, 0x40, 0x02, 0x15, 0x3d, 0x1b, 0x9f, 0x5f, 0xfa, 0xad, 0xc0, 0x93, 0xf4, 0x5c, 0x7c, 0x89, 0xd1, 0x1b, 0x9f,
0x1a, 0x30, 0xb3, 0xbc, 0x98, 0xb2, 0x0f, 0xb4, 0x96, 0x6a, 0xcc, 0x48, 0xd4, 0xf6, 0x2f, 0xc5, 0xbe, 0xfa, 0x3c, 0x1f, 0xf7, 0xc8, 0x7a, 0xe6, 0xc1, 0xfb, 0x05, 0x24, 0xa0, 0x0e, 0x33, 0xcb,
0x67, 0xbc, 0xa9, 0xc3, 0x1b, 0xa5, 0x99, 0x04, 0x33, 0xb4, 0xbe, 0x1c, 0x1f, 0xeb, 0x0d, 0xad, 0x8b, 0x29, 0xfb, 0x50, 0x6b, 0xb1, 0xc6, 0x8c, 0x44, 0x6d, 0xff, 0x52, 0x7c, 0xc6, 0x9b, 0x3a,
0xaf, 0xc4, 0xa7, 0x7b, 0xb3, 0xd6, 0x57, 0xe3, 0x1e, 0x0d, 0xad, 0x3b, 0x54, 0x67, 0x45, 0x30, 0x3c, 0x60, 0x9a, 0x49, 0x30, 0x4d, 0xeb, 0xcb, 0xf1, 0xb1, 0x5e, 0xd7, 0xfa, 0x4a, 0x7c, 0xba,
0xb3, 0xec, 0x84, 0x56, 0x8d, 0x4d, 0xd3, 0xba, 0x2b, 0x3e, 0xfb, 0xe2, 0x5a, 0x77, 0x63, 0xf8, 0x37, 0x6a, 0x7d, 0x35, 0xee, 0x51, 0xd7, 0xba, 0x4b, 0x75, 0x56, 0x04, 0x33, 0xcb, 0x6e, 0x68,
0x73, 0xd7, 0x60, 0x3c, 0xbe, 0x96, 0x32, 0x2f, 0x28, 0x7a, 0x4f, 0x7a, 0xbd, 0x79, 0x8c, 0x61, 0xd5, 0xd8, 0x14, 0xad, 0x7b, 0xe2, 0xb3, 0x2f, 0xae, 0x75, 0x2f, 0x86, 0x3f, 0x77, 0x0d, 0xc6,
0x0a, 0xbc, 0x91, 0xd2, 0xaf, 0x20, 0xfa, 0xfe, 0xb4, 0x3b, 0xcd, 0x57, 0xb5, 0x6e, 0xd7, 0xa3, 0xe3, 0x6b, 0x29, 0xf3, 0xbc, 0xa2, 0xf7, 0xa4, 0xd7, 0x1b, 0xc7, 0x18, 0xa6, 0xc0, 0x1b, 0x29,
0xd7, 0xd2, 0xbc, 0xab, 0x67, 0xf2, 0x3d, 0xb9, 0x1c, 0xbd, 0x9e, 0xc6, 0x7b, 0xda, 0xb8, 0x13, 0xfd, 0x44, 0xa2, 0x2f, 0x57, 0x7b, 0xd3, 0x7c, 0x8f, 0xeb, 0x74, 0x3d, 0x7a, 0x2d, 0xcd, 0xbb,
0xd0, 0x1b, 0x69, 0x66, 0xe5, 0x4f, 0xed, 0xf1, 0xcb, 0x34, 0xcf, 0x01, 0xfd, 0x5f, 0xfb, 0x37, 0x7a, 0x26, 0xd7, 0x95, 0xcd, 0xd2, 0xeb, 0x69, 0x3c, 0xb6, 0x8d, 0x39, 0x01, 0xbd, 0x91, 0x66,
0xd3, 0xea, 0xe2, 0xc7, 0x85, 0x23, 0xf2, 0xf4, 0xab, 0x34, 0x8f, 0x4a, 0x3d, 0x5f, 0xe9, 0x2d, 0x56, 0xfe, 0xd4, 0x1e, 0xbf, 0x4c, 0xf3, 0x1c, 0xd0, 0xff, 0xd2, 0x7f, 0x33, 0xad, 0x6e, 0x85,
0x70, 0xf7, 0x56, 0x24, 0xfd, 0x3a, 0xcd, 0x4a, 0x7a, 0x27, 0x6b, 0x7e, 0x20, 0xf3, 0x42, 0x1e, 0x5c, 0x38, 0x26, 0x47, 0xbf, 0x4a, 0xf3, 0xa8, 0xd4, 0xf3, 0x95, 0xde, 0x02, 0x77, 0x4f, 0x59,
0xca, 0x23, 0x68, 0x4f, 0x33, 0xb6, 0x8a, 0xb1, 0xb7, 0x9b, 0xb1, 0xc3, 0x18, 0xfb, 0x0d, 0x42, 0xd2, 0xaf, 0xd3, 0xac, 0xa4, 0x67, 0xa2, 0xea, 0x07, 0x32, 0x27, 0xe4, 0x91, 0x3c, 0x82, 0xf6,
0xe0, 0x17, 0x1c, 0xdc, 0xe8, 0xdf, 0xa6, 0x71, 0xc3, 0xe3, 0x22, 0x2e, 0xc1, 0xbf, 0x4b, 0xf3, 0x35, 0x62, 0x2b, 0x18, 0x7b, 0xbb, 0x11, 0x3b, 0x8a, 0xb1, 0xdf, 0x20, 0x04, 0x7e, 0xde, 0xc1,
0x16, 0x88, 0xb2, 0xce, 0xd7, 0xef, 0xb5, 0x85, 0x57, 0xca, 0xf1, 0xd9, 0x9d, 0xfe, 0x00, 0xc1, 0x8d, 0xfe, 0x6d, 0x1a, 0xd7, 0x3f, 0x2e, 0xe2, 0x86, 0xfc, 0xbb, 0x34, 0x6f, 0x81, 0x28, 0xeb,
0x3a, 0x27, 0xef, 0xa4, 0x31, 0x9c, 0x51, 0xe0, 0xe9, 0xd8, 0xef, 0x17, 0x9d, 0x8a, 0xa0, 0x77, 0x7c, 0xfd, 0x5e, 0x5b, 0x78, 0xc5, 0x2c, 0x1f, 0xec, 0xe9, 0x0f, 0x10, 0xac, 0x73, 0xf2, 0x4e,
0xd1, 0x4a, 0x4e, 0x65, 0xb7, 0x13, 0x8a, 0xf4, 0x2a, 0x7a, 0x0f, 0x24, 0x87, 0x8b, 0x49, 0xbe, 0x1a, 0xc3, 0x19, 0x05, 0x9e, 0x8e, 0x7d, 0x7e, 0xc1, 0x29, 0x0b, 0x7a, 0x17, 0xad, 0xe4, 0x54,
0x5a, 0x05, 0x65, 0x7a, 0xdf, 0x94, 0xf3, 0x32, 0xe0, 0xf2, 0x1f, 0xd3, 0xea, 0x3d, 0x82, 0xcf, 0x76, 0x3a, 0xa1, 0x48, 0xaf, 0xa0, 0xf7, 0x40, 0x72, 0xb4, 0x98, 0xe0, 0x7b, 0x57, 0x50, 0xa2,
0xd2, 0xf4, 0xa7, 0xb4, 0x7a, 0xb3, 0xe6, 0x82, 0xba, 0x8d, 0xd0, 0x9f, 0xd3, 0xea, 0x15, 0x24, 0xf7, 0x4d, 0x39, 0x27, 0x03, 0x2e, 0xff, 0x31, 0xad, 0x1e, 0x2b, 0xf8, 0x90, 0x4d, 0x7f, 0x4a,
0x94, 0x01, 0xfd, 0x25, 0xad, 0xee, 0x68, 0xa1, 0x0c, 0x74, 0xed, 0x07, 0xa8, 0xed, 0x2f, 0x04, 0xab, 0x07, 0x6d, 0x2e, 0xa8, 0xab, 0x0a, 0xfd, 0x39, 0xad, 0x9e, 0x48, 0x42, 0x19, 0xd0, 0x5f,
0x6e, 0x95, 0xfe, 0x8a, 0x5c, 0xf7, 0x8b, 0x31, 0x49, 0x1f, 0x42, 0x05, 0x7f, 0x6a, 0xbb, 0x8f, 0xd2, 0xea, 0x02, 0x17, 0xca, 0x40, 0xd7, 0x7e, 0x80, 0xda, 0xbe, 0x7c, 0xe0, 0x56, 0xe8, 0xaf,
0x10, 0x45, 0x27, 0xfe, 0x63, 0xd0, 0xb0, 0x60, 0x29, 0xd4, 0xda, 0xf0, 0x49, 0x0c, 0x39, 0x14, 0xc8, 0x75, 0x9f, 0x18, 0x95, 0xf4, 0x21, 0x54, 0xf0, 0xa7, 0xb6, 0xfb, 0x08, 0x51, 0x74, 0xe2,
0xc8, 0xa7, 0x69, 0x9e, 0xdc, 0x0a, 0x51, 0x1c, 0xca, 0xf2, 0xb3, 0x19, 0xb8, 0xb2, 0xff, 0x5c, 0x3f, 0x06, 0x0d, 0x0b, 0x96, 0x42, 0xad, 0x0d, 0x9f, 0xc4, 0x90, 0x23, 0x81, 0x7c, 0x9a, 0xe6,
0x09, 0xf1, 0xd7, 0x8b, 0x80, 0xbe, 0x50, 0x42, 0x6a, 0x4e, 0x89, 0xbe, 0x54, 0x42, 0x6a, 0x4e, 0xc9, 0xad, 0x10, 0xc5, 0xa1, 0x2c, 0x3f, 0x9b, 0x86, 0x2b, 0xfb, 0xcf, 0x95, 0x10, 0x7f, 0xad,
0x49, 0x0b, 0xf9, 0x0a, 0x1d, 0xcb, 0x2b, 0x2d, 0x67, 0xf4, 0x6b, 0xc8, 0x5a, 0x53, 0xc4, 0xd0, 0x08, 0xe8, 0x0b, 0x25, 0xa4, 0xea, 0x14, 0xe9, 0x4b, 0x25, 0xa4, 0xea, 0x14, 0xb5, 0x90, 0xaf,
0xfd, 0x06, 0x99, 0x59, 0x53, 0x8c, 0xfe, 0xbd, 0x84, 0x5e, 0x5f, 0x13, 0x94, 0xe8, 0xd8, 0x2e, 0xd0, 0xb1, 0xbc, 0xd2, 0x72, 0x46, 0xbf, 0x86, 0xac, 0x55, 0x05, 0x0c, 0xdd, 0x6f, 0x90, 0x99,
0x26, 0xc7, 0xd1, 0x9f, 0x8e, 0xc3, 0xf7, 0x30, 0x5a, 0x7c, 0x7c, 0x17, 0x9e, 0xae, 0x44, 0x4d, 0x55, 0x85, 0xe8, 0x7f, 0x4f, 0xe8, 0xf5, 0x55, 0x41, 0x91, 0x4e, 0xec, 0x60, 0x72, 0xdc, 0x09,
0x38, 0x92, 0x4e, 0xe8, 0xc2, 0x1b, 0xa9, 0xba, 0x3e, 0xd1, 0x89, 0xba, 0x34, 0x21, 0x82, 0x50, 0xe8, 0x24, 0x7c, 0x0f, 0xa1, 0xc5, 0x27, 0x77, 0xe0, 0x5d, 0x4b, 0x54, 0x85, 0x23, 0xe9, 0x94,
0xd0, 0x49, 0x5d, 0x3c, 0x1c, 0x74, 0x49, 0x2b, 0x39, 0x59, 0x11, 0xb9, 0xe5, 0x71, 0x49, 0xa7, 0x0e, 0x3c, 0xa0, 0xaa, 0xbb, 0x15, 0x9d, 0xaa, 0x4b, 0xe3, 0x22, 0x08, 0x05, 0x9d, 0xd6, 0xc1,
0x74, 0xe1, 0xee, 0xcc, 0xdf, 0xba, 0xf6, 0xd4, 0x2e, 0x3c, 0x18, 0x73, 0x1b, 0x4e, 0xeb, 0xc2, 0xc3, 0x41, 0x97, 0xb4, 0x92, 0xd3, 0x15, 0x91, 0x5b, 0x1a, 0x93, 0x74, 0x46, 0x07, 0x2e, 0xd6,
0x13, 0x5b, 0xa3, 0x0d, 0xa7, 0xc3, 0x33, 0x5f, 0xe3, 0x38, 0x67, 0x74, 0xa9, 0x5f, 0x8c, 0x04, 0xfc, 0xad, 0x6b, 0xcf, 0xec, 0xc0, 0x6b, 0x32, 0xb7, 0xe1, 0xac, 0x0e, 0xbc, 0xbf, 0xd5, 0xdb,
0xc5, 0x6a, 0x8d, 0xce, 0xec, 0xc2, 0xd9, 0xad, 0x3e, 0x1a, 0xa2, 0x05, 0x2a, 0x63, 0x67, 0x35, 0x70, 0x36, 0x3c, 0x73, 0x55, 0x8e, 0x73, 0x4e, 0x87, 0xfa, 0x39, 0x49, 0x50, 0xa8, 0x54, 0x69,
0x83, 0x2a, 0x5d, 0x67, 0x77, 0xe9, 0xc9, 0xae, 0xc0, 0x78, 0x86, 0xcf, 0xf9, 0xb6, 0x2a, 0xe5, 0x5d, 0x07, 0xce, 0x6e, 0xb5, 0x91, 0x10, 0x2d, 0x50, 0x19, 0x5b, 0xdf, 0x08, 0xaa, 0x74, 0x6d,
0xb5, 0xa1, 0x99, 0x2a, 0xe7, 0x95, 0xc4, 0x24, 0x6d, 0xec, 0xe2, 0x61, 0x5d, 0xf0, 0xf5, 0x78, 0xe8, 0xd0, 0x93, 0x5d, 0x81, 0xf1, 0x0c, 0x6f, 0xfc, 0xb6, 0x2a, 0xe5, 0xb5, 0xa9, 0x91, 0x2a,
0x3b, 0x57, 0x15, 0x03, 0xb7, 0x8a, 0x55, 0xf7, 0xbc, 0x2e, 0xec, 0x2d, 0x81, 0x5b, 0x55, 0xec, 0xeb, 0x15, 0xc5, 0x04, 0x6d, 0xee, 0xe0, 0x61, 0x9d, 0xf7, 0xf5, 0x78, 0x3b, 0x57, 0x15, 0x03,
0xe7, 0x47, 0x65, 0x45, 0x79, 0x01, 0xda, 0x32, 0xe2, 0x1d, 0x2e, 0x26, 0x69, 0x93, 0xfa, 0xae, 0xb7, 0x82, 0x55, 0xf7, 0xbc, 0x0e, 0xec, 0x2d, 0x81, 0x5b, 0x51, 0xec, 0xe7, 0x47, 0x65, 0x45,
0xd5, 0x44, 0x40, 0x9b, 0xbb, 0xba, 0xbf, 0xbb, 0x75, 0xcf, 0xb2, 0xc4, 0x8b, 0x7b, 0x96, 0x25, 0x79, 0x01, 0xda, 0x32, 0xec, 0x1d, 0x2d, 0x26, 0x68, 0x8b, 0xfa, 0xae, 0x56, 0x45, 0x40, 0x5b,
0xde, 0xda, 0xb3, 0x2c, 0xb1, 0xe5, 0xed, 0x65, 0x7b, 0x59, 0x4b, 0x8b, 0x7e, 0xb5, 0xb3, 0xe6, 0x3b, 0x3a, 0xbf, 0xbb, 0x7d, 0xdf, 0x92, 0xc4, 0x8b, 0xfb, 0x96, 0x24, 0xde, 0xda, 0xb7, 0x24,
0x7a, 0xe5, 0xa2, 0x53, 0xeb, 0x94, 0x6e, 0x69, 0x14, 0x3f, 0x70, 0x1a, 0x4a, 0xfc, 0x7f, 0x00, 0xb1, 0xed, 0xed, 0x25, 0xfb, 0x59, 0x8b, 0x0b, 0x7e, 0xa5, 0xbd, 0xea, 0x7a, 0xa5, 0x82, 0x53,
0x00, 0x00, 0xff, 0xff, 0x98, 0xba, 0x44, 0x0b, 0xae, 0x26, 0x00, 0x00, 0x6d, 0x97, 0x6e, 0x71, 0x04, 0xbf, 0x7e, 0x1a, 0x4c, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff,
0x9c, 0x1e, 0xa1, 0x4b, 0xcb, 0x26, 0x00, 0x00,
} }
...@@ -5,12 +5,10 @@ package tipb ...@@ -5,12 +5,10 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
io "io" proto "github.com/golang/protobuf/proto"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
...@@ -5,14 +5,11 @@ package tipb ...@@ -5,14 +5,11 @@ package tipb
import ( import (
"fmt" "fmt"
io "io"
proto "github.com/golang/protobuf/proto"
math "math" math "math"
proto "github.com/golang/protobuf/proto"
github_com_pingcap_tipb_sharedbytes "github.com/pingcap/tipb/sharedbytes" github_com_pingcap_tipb_sharedbytes "github.com/pingcap/tipb/sharedbytes"
io "io"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -112,12 +109,14 @@ type SelectResponse struct { ...@@ -112,12 +109,14 @@ type SelectResponse struct {
Rows []*Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` Rows []*Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"`
// Use multiple chunks to reduce memory allocation and // Use multiple chunks to reduce memory allocation and
// avoid allocating large contiguous memory. // avoid allocating large contiguous memory.
Chunks []Chunk `protobuf:"bytes,3,rep,name=chunks" json:"chunks"` Chunks []Chunk `protobuf:"bytes,3,rep,name=chunks" json:"chunks"`
Warnings []*Error `protobuf:"bytes,4,rep,name=warnings" json:"warnings,omitempty"` Warnings []*Error `protobuf:"bytes,4,rep,name=warnings" json:"warnings,omitempty"`
OutputCounts []int64 `protobuf:"varint,5,rep,name=output_counts,json=outputCounts" json:"output_counts,omitempty"` OutputCounts []int64 `protobuf:"varint,5,rep,name=output_counts,json=outputCounts" json:"output_counts,omitempty"`
WarningCount *int64 `protobuf:"varint,6,opt,name=warning_count,json=warningCount" json:"warning_count,omitempty"` WarningCount *int64 `protobuf:"varint,6,opt,name=warning_count,json=warningCount" json:"warning_count,omitempty"`
RowBatchData github_com_pingcap_tipb_sharedbytes.SharedBytes `protobuf:"bytes,7,opt,name=row_batch_data,json=rowBatchData,customtype=github.com/pingcap/tipb/sharedbytes.SharedBytes" json:"row_batch_data"` RowBatchData github_com_pingcap_tipb_sharedbytes.SharedBytes `protobuf:"bytes,7,opt,name=row_batch_data,json=rowBatchData,customtype=github.com/pingcap/tipb/sharedbytes.SharedBytes" json:"row_batch_data"`
XXX_unrecognized []byte `json:"-"` // The execution summary of each executor, in the order in request.
ExecutionSummaries []*ExecutorExecutionSummary `protobuf:"bytes,8,rep,name=execution_summaries,json=executionSummaries" json:"execution_summaries,omitempty"`
XXX_unrecognized []byte `json:"-"`
} }
func (m *SelectResponse) Reset() { *m = SelectResponse{} } func (m *SelectResponse) Reset() { *m = SelectResponse{} }
...@@ -167,6 +166,13 @@ func (m *SelectResponse) GetWarningCount() int64 { ...@@ -167,6 +166,13 @@ func (m *SelectResponse) GetWarningCount() int64 {
return 0 return 0
} }
func (m *SelectResponse) GetExecutionSummaries() []*ExecutorExecutionSummary {
if m != nil {
return m.ExecutionSummaries
}
return nil
}
// Chunk contains multiple rows data and rows meta. // Chunk contains multiple rows data and rows meta.
type Chunk struct { type Chunk struct {
// Data for all rows in the chunk. // Data for all rows in the chunk.
...@@ -241,11 +247,13 @@ type DAGRequest struct { ...@@ -241,11 +247,13 @@ type DAGRequest struct {
EncodeType EncodeType `protobuf:"varint,8,opt,name=encode_type,json=encodeType,enum=tipb.EncodeType" json:"encode_type"` EncodeType EncodeType `protobuf:"varint,8,opt,name=encode_type,json=encodeType,enum=tipb.EncodeType" json:"encode_type"`
// It indicates the sql_mode. // It indicates the sql_mode.
SqlMode *uint64 `protobuf:"varint,9,opt,name=sql_mode,json=sqlMode" json:"sql_mode,omitempty"` SqlMode *uint64 `protobuf:"varint,9,opt,name=sql_mode,json=sqlMode" json:"sql_mode,omitempty"`
// It indicates whether the sql mode is strict.
IsStrictSqlMode *bool `protobuf:"varint,10,opt,name=is_strict_sql_mode,json=isStrictSqlMode" json:"is_strict_sql_mode,omitempty"`
// supply offset is not enough since we have daylight saving time present in some regions // supply offset is not enough since we have daylight saving time present in some regions
TimeZoneName string `protobuf:"bytes,11,opt,name=time_zone_name,json=timeZoneName" json:"time_zone_name"` TimeZoneName string `protobuf:"bytes,11,opt,name=time_zone_name,json=timeZoneName" json:"time_zone_name"`
XXX_unrecognized []byte `json:"-"` // It represents whether or not TiKV should collect execution summaries.
// Execution summaries will be collected into `execution_summaries` field
// in the response.
CollectExecutionSummaries *bool `protobuf:"varint,12,opt,name=collect_execution_summaries,json=collectExecutionSummaries" json:"collect_execution_summaries,omitempty"`
XXX_unrecognized []byte `json:"-"`
} }
func (m *DAGRequest) Reset() { *m = DAGRequest{} } func (m *DAGRequest) Reset() { *m = DAGRequest{} }
...@@ -316,13 +324,6 @@ func (m *DAGRequest) GetSqlMode() uint64 { ...@@ -316,13 +324,6 @@ func (m *DAGRequest) GetSqlMode() uint64 {
return 0 return 0
} }
func (m *DAGRequest) GetIsStrictSqlMode() bool {
if m != nil && m.IsStrictSqlMode != nil {
return *m.IsStrictSqlMode
}
return false
}
func (m *DAGRequest) GetTimeZoneName() string { func (m *DAGRequest) GetTimeZoneName() string {
if m != nil { if m != nil {
return m.TimeZoneName return m.TimeZoneName
...@@ -330,6 +331,13 @@ func (m *DAGRequest) GetTimeZoneName() string { ...@@ -330,6 +331,13 @@ func (m *DAGRequest) GetTimeZoneName() string {
return "" return ""
} }
func (m *DAGRequest) GetCollectExecutionSummaries() bool {
if m != nil && m.CollectExecutionSummaries != nil {
return *m.CollectExecutionSummaries
}
return false
}
type StreamResponse struct { type StreamResponse struct {
Error *Error `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` Error *Error `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
// Data for all rows // Data for all rows
...@@ -526,6 +534,18 @@ func (m *SelectResponse) MarshalTo(dAtA []byte) (int, error) { ...@@ -526,6 +534,18 @@ func (m *SelectResponse) MarshalTo(dAtA []byte) (int, error) {
return 0, err return 0, err
} }
i += n2 i += n2
if len(m.ExecutionSummaries) > 0 {
for _, msg := range m.ExecutionSummaries {
dAtA[i] = 0x42
i++
i = encodeVarintSelect(dAtA, i, uint64(msg.Size()))
n, err := msg.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n
}
}
if m.XXX_unrecognized != nil { if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized) i += copy(dAtA[i:], m.XXX_unrecognized)
} }
...@@ -666,20 +686,20 @@ func (m *DAGRequest) MarshalTo(dAtA []byte) (int, error) { ...@@ -666,20 +686,20 @@ func (m *DAGRequest) MarshalTo(dAtA []byte) (int, error) {
i++ i++
i = encodeVarintSelect(dAtA, i, uint64(*m.SqlMode)) i = encodeVarintSelect(dAtA, i, uint64(*m.SqlMode))
} }
if m.IsStrictSqlMode != nil { dAtA[i] = 0x5a
dAtA[i] = 0x50 i++
i = encodeVarintSelect(dAtA, i, uint64(len(m.TimeZoneName)))
i += copy(dAtA[i:], m.TimeZoneName)
if m.CollectExecutionSummaries != nil {
dAtA[i] = 0x60
i++ i++
if *m.IsStrictSqlMode { if *m.CollectExecutionSummaries {
dAtA[i] = 1 dAtA[i] = 1
} else { } else {
dAtA[i] = 0 dAtA[i] = 0
} }
i++ i++
} }
dAtA[i] = 0x5a
i++
i = encodeVarintSelect(dAtA, i, uint64(len(m.TimeZoneName)))
i += copy(dAtA[i:], m.TimeZoneName)
if m.XXX_unrecognized != nil { if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized) i += copy(dAtA[i:], m.XXX_unrecognized)
} }
...@@ -822,6 +842,12 @@ func (m *SelectResponse) Size() (n int) { ...@@ -822,6 +842,12 @@ func (m *SelectResponse) Size() (n int) {
} }
l = m.RowBatchData.Size() l = m.RowBatchData.Size()
n += 1 + l + sovSelect(uint64(l)) n += 1 + l + sovSelect(uint64(l))
if len(m.ExecutionSummaries) > 0 {
for _, e := range m.ExecutionSummaries {
l = e.Size()
n += 1 + l + sovSelect(uint64(l))
}
}
if m.XXX_unrecognized != nil { if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized) n += len(m.XXX_unrecognized)
} }
...@@ -883,11 +909,11 @@ func (m *DAGRequest) Size() (n int) { ...@@ -883,11 +909,11 @@ func (m *DAGRequest) Size() (n int) {
if m.SqlMode != nil { if m.SqlMode != nil {
n += 1 + sovSelect(uint64(*m.SqlMode)) n += 1 + sovSelect(uint64(*m.SqlMode))
} }
if m.IsStrictSqlMode != nil {
n += 2
}
l = len(m.TimeZoneName) l = len(m.TimeZoneName)
n += 1 + l + sovSelect(uint64(l)) n += 1 + l + sovSelect(uint64(l))
if m.CollectExecutionSummaries != nil {
n += 2
}
if m.XXX_unrecognized != nil { if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized) n += len(m.XXX_unrecognized)
} }
...@@ -1415,6 +1441,37 @@ func (m *SelectResponse) Unmarshal(dAtA []byte) error { ...@@ -1415,6 +1441,37 @@ func (m *SelectResponse) Unmarshal(dAtA []byte) error {
return err return err
} }
iNdEx = postIndex iNdEx = postIndex
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecutionSummaries", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthSelect
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecutionSummaries = append(m.ExecutionSummaries, &ExecutorExecutionSummary{})
if err := m.ExecutionSummaries[len(m.ExecutionSummaries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipSelect(dAtA[iNdEx:]) skippy, err := skipSelect(dAtA[iNdEx:])
...@@ -1897,27 +1954,6 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error { ...@@ -1897,27 +1954,6 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error {
} }
} }
m.SqlMode = &v m.SqlMode = &v
case 10:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field IsStrictSqlMode", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
b := bool(v != 0)
m.IsStrictSqlMode = &b
case 11: case 11:
if wireType != 2 { if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TimeZoneName", wireType) return fmt.Errorf("proto: wrong wireType = %d for field TimeZoneName", wireType)
...@@ -1947,6 +1983,27 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error { ...@@ -1947,6 +1983,27 @@ func (m *DAGRequest) Unmarshal(dAtA []byte) error {
} }
m.TimeZoneName = string(dAtA[iNdEx:postIndex]) m.TimeZoneName = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex iNdEx = postIndex
case 12:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field CollectExecutionSummaries", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSelect
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
b := bool(v != 0)
m.CollectExecutionSummaries = &b
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipSelect(dAtA[iNdEx:]) skippy, err := skipSelect(dAtA[iNdEx:])
...@@ -2304,52 +2361,55 @@ var ( ...@@ -2304,52 +2361,55 @@ var (
func init() { proto.RegisterFile("select.proto", fileDescriptorSelect) } func init() { proto.RegisterFile("select.proto", fileDescriptorSelect) }
var fileDescriptorSelect = []byte{ var fileDescriptorSelect = []byte{
// 748 bytes of a gzipped FileDescriptorProto // 785 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x54, 0xcd, 0x4e, 0xdb, 0x4a, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x54, 0xcf, 0x6f, 0xe3, 0x44,
0x18, 0xc5, 0xd8, 0xf9, 0xfb, 0x92, 0x98, 0xdc, 0x11, 0x17, 0xf9, 0x22, 0x6e, 0xc8, 0xcd, 0x55, 0x14, 0xae, 0xd7, 0xce, 0xaf, 0x97, 0xc4, 0x1b, 0x86, 0x65, 0xe5, 0x2d, 0x4b, 0x1a, 0x82, 0x10,
0xd5, 0x40, 0x91, 0x43, 0xd9, 0xa0, 0x2e, 0x09, 0xa0, 0x2e, 0x2a, 0xda, 0xca, 0x41, 0xaa, 0x54, 0xd9, 0x6a, 0xe5, 0x2c, 0xbd, 0xac, 0xb8, 0x20, 0x35, 0x6d, 0xc4, 0x01, 0x95, 0xa2, 0x49, 0x25,
0xa9, 0xb2, 0x26, 0xce, 0xc4, 0xb1, 0x6a, 0x7b, 0xcc, 0xcc, 0x58, 0x81, 0xbe, 0x44, 0xb7, 0x7d, 0x24, 0x24, 0x64, 0x4d, 0x9c, 0x89, 0x63, 0x61, 0x7b, 0xdc, 0x99, 0xb1, 0xd2, 0xf0, 0x4f, 0x70,
0x24, 0x76, 0xed, 0xb6, 0x5d, 0xa0, 0x8a, 0x3e, 0x42, 0x5f, 0xa0, 0x9a, 0xf1, 0x24, 0x81, 0x65, 0xe5, 0xc8, 0x9f, 0xd3, 0x23, 0x67, 0x0e, 0x15, 0x2a, 0x57, 0x6e, 0xfc, 0x03, 0x68, 0xc6, 0xe3,
0xc5, 0xa2, 0xab, 0x4c, 0xce, 0x39, 0x73, 0xbe, 0xcf, 0xdf, 0x9c, 0x19, 0x68, 0x70, 0x12, 0x93, 0xa4, 0x11, 0x5c, 0x50, 0x0f, 0x7b, 0xf2, 0xf8, 0x7b, 0xdf, 0x7c, 0xf3, 0xe6, 0xbd, 0x6f, 0x1e,
0x40, 0xb8, 0x19, 0xa3, 0x82, 0x22, 0x4b, 0x44, 0xd9, 0x68, 0xd3, 0x26, 0x97, 0x24, 0xc8, 0x05, 0x74, 0x04, 0x4d, 0x68, 0x28, 0xfd, 0x9c, 0x33, 0xc9, 0x90, 0x23, 0xe3, 0x7c, 0x7e, 0xe8, 0xd2,
0x65, 0x05, 0xba, 0xb9, 0x1e, 0xd2, 0x90, 0xaa, 0x65, 0x5f, 0xae, 0x0a, 0xb4, 0xfb, 0x14, 0x4c, 0x1b, 0x1a, 0x16, 0x92, 0xf1, 0x12, 0x3d, 0x7c, 0x16, 0xb1, 0x88, 0xe9, 0xe5, 0x58, 0xad, 0x4a,
0x8f, 0xce, 0xd0, 0x06, 0x94, 0xa7, 0x38, 0x1d, 0xc7, 0xc4, 0x31, 0x3a, 0x46, 0xaf, 0xe1, 0xe9, 0x74, 0xf8, 0x39, 0xd8, 0x98, 0xad, 0xd1, 0x73, 0xa8, 0xaf, 0x48, 0xb6, 0x48, 0xa8, 0x67, 0x0d,
0x7f, 0x08, 0x81, 0x35, 0xc6, 0x02, 0x3b, 0xab, 0x0a, 0x55, 0xeb, 0xee, 0x33, 0x28, 0x9d, 0x32, 0xac, 0x51, 0x07, 0x9b, 0x3f, 0x84, 0xc0, 0x59, 0x10, 0x49, 0xbc, 0x27, 0x1a, 0xd5, 0xeb, 0xe1,
0x46, 0x19, 0x72, 0xc0, 0x0a, 0xe8, 0xb8, 0xd8, 0x52, 0x1a, 0x58, 0xd7, 0x37, 0xdb, 0x2b, 0x9e, 0x17, 0x50, 0x9b, 0x72, 0xce, 0x38, 0xf2, 0xc0, 0x09, 0xd9, 0xa2, 0xdc, 0x52, 0x9b, 0x38, 0xb7,
0x42, 0xd0, 0x06, 0x98, 0x09, 0x0f, 0xd5, 0xae, 0x9a, 0x26, 0x24, 0xd0, 0xfd, 0xbc, 0x0a, 0xf6, 0x77, 0x47, 0x07, 0x58, 0x23, 0xe8, 0x39, 0xd8, 0xa9, 0x88, 0xf4, 0xae, 0x96, 0x09, 0x28, 0x60,
0x50, 0xb5, 0xea, 0x11, 0x9e, 0xd1, 0x94, 0x13, 0xf4, 0x1f, 0x94, 0x88, 0x74, 0x53, 0x2e, 0xf5, 0xf8, 0xab, 0x0d, 0xee, 0x4c, 0xa7, 0x8a, 0xa9, 0xc8, 0x59, 0x26, 0x28, 0xfa, 0x18, 0x6a, 0x54,
0x83, 0xba, 0x2b, 0x9b, 0x77, 0x55, 0x01, 0xaf, 0x60, 0xd0, 0xbf, 0x60, 0x31, 0x3a, 0xe3, 0xce, 0xa9, 0x69, 0x95, 0xf6, 0x49, 0xdb, 0x57, 0xc9, 0xfb, 0xfa, 0x00, 0x5c, 0x46, 0xd0, 0x47, 0xe0,
0x6a, 0xc7, 0xec, 0xd5, 0x0f, 0x6a, 0x85, 0xc2, 0xa3, 0x33, 0x4f, 0xc1, 0x68, 0x07, 0xca, 0xc1, 0x70, 0xb6, 0x16, 0xde, 0x93, 0x81, 0x3d, 0x6a, 0x9f, 0xb4, 0x4a, 0x06, 0x66, 0x6b, 0xac, 0x61,
0x34, 0x4f, 0xdf, 0x73, 0xc7, 0x54, 0x02, 0x6d, 0x71, 0x2c, 0x31, 0x5d, 0x5c, 0x0b, 0xd0, 0x63, 0xf4, 0x0a, 0xea, 0xe1, 0xaa, 0xc8, 0x7e, 0x14, 0x9e, 0xad, 0x09, 0x46, 0xe2, 0x4c, 0x61, 0xe6,
0xa8, 0xce, 0x30, 0x4b, 0xa3, 0x34, 0xe4, 0x8e, 0x75, 0x57, 0x5c, 0xd4, 0x5b, 0x90, 0xe8, 0x7f, 0x70, 0x43, 0x40, 0x9f, 0x41, 0x73, 0x4d, 0x78, 0x16, 0x67, 0x91, 0xf0, 0x9c, 0x87, 0xe4, 0xf2,
0x68, 0xd2, 0x5c, 0x64, 0xb9, 0xf0, 0x03, 0x9a, 0xa7, 0x82, 0x3b, 0xa5, 0x8e, 0xd9, 0x33, 0xbd, 0xbc, 0x6d, 0x10, 0x7d, 0x02, 0x5d, 0x56, 0xc8, 0xbc, 0x90, 0x41, 0xc8, 0x8a, 0x4c, 0x0a, 0xaf,
0x46, 0x01, 0x1e, 0x2b, 0x4c, 0x8a, 0xf4, 0x86, 0x42, 0xe5, 0x94, 0x3b, 0x86, 0x14, 0x69, 0x50, 0x36, 0xb0, 0x47, 0x36, 0xee, 0x94, 0xe0, 0x99, 0xc6, 0x14, 0xc9, 0x6c, 0x28, 0x59, 0x5e, 0x7d,
0xa9, 0xd0, 0x3b, 0xb0, 0x19, 0x9d, 0xf9, 0x23, 0x2c, 0x82, 0xa9, 0xaf, 0x66, 0x59, 0x91, 0xb3, 0x60, 0x29, 0x92, 0x01, 0x35, 0x0b, 0xfd, 0x00, 0x2e, 0x67, 0xeb, 0x60, 0x4e, 0x64, 0xb8, 0x0a,
0x1c, 0x1c, 0xca, 0xc6, 0xbe, 0xdd, 0x6c, 0xf7, 0xc3, 0x48, 0x4c, 0xf3, 0x91, 0x1b, 0xd0, 0xa4, 0x74, 0x2d, 0x1b, 0xaa, 0x96, 0x93, 0xb7, 0x2a, 0xb1, 0xdf, 0xef, 0x8e, 0xc6, 0x51, 0x2c, 0x57,
0x9f, 0x45, 0x69, 0x18, 0xe0, 0xac, 0x2f, 0x5b, 0xea, 0xf3, 0x29, 0x66, 0x64, 0x3c, 0xba, 0x12, 0xc5, 0xdc, 0x0f, 0x59, 0x3a, 0xce, 0xe3, 0x2c, 0x0a, 0x49, 0x3e, 0x56, 0x29, 0x8d, 0xc5, 0x8a,
0x84, 0xbb, 0x43, 0xb5, 0x1e, 0xc8, 0xb5, 0xd7, 0x60, 0x74, 0x36, 0x90, 0x6e, 0x27, 0xf2, 0x30, 0x70, 0xba, 0x98, 0x6f, 0x24, 0x15, 0xfe, 0x4c, 0xaf, 0x27, 0x6a, 0x8d, 0x3b, 0x9c, 0xad, 0x27,
0x3e, 0x1a, 0x50, 0x52, 0x5f, 0x8a, 0xce, 0xa1, 0x26, 0xc7, 0x51, 0xd4, 0x30, 0x1f, 0x56, 0xa3, 0x4a, 0xed, 0x9c, 0x48, 0x82, 0x2e, 0xe1, 0xfd, 0xb2, 0xcf, 0x31, 0xcb, 0x02, 0x51, 0xa4, 0x29,
0x2a, 0x9d, 0xa4, 0x3f, 0xda, 0xd7, 0xae, 0x09, 0x11, 0x58, 0x8f, 0xac, 0xb9, 0x38, 0x80, 0x33, 0xe1, 0x31, 0x15, 0x5e, 0x53, 0x5f, 0xae, 0x6f, 0x2e, 0x67, 0x8c, 0x30, 0xad, 0x88, 0x33, 0xcd,
0x22, 0xb0, 0x9e, 0xb0, 0xda, 0x21, 0xff, 0x77, 0x4f, 0xa1, 0xa2, 0x29, 0xb4, 0x75, 0x2f, 0x55, 0xdb, 0x60, 0x44, 0xf7, 0x91, 0x98, 0x8a, 0xe1, 0xcf, 0x16, 0xd4, 0x74, 0xe9, 0xd0, 0x15, 0xb4,
0xe6, 0xfc, 0x30, 0x74, 0xb6, 0xb6, 0xa0, 0x1c, 0x93, 0x34, 0x14, 0x53, 0x95, 0x93, 0x05, 0x5b, 0x54, 0x7d, 0xcb, 0xa4, 0xed, 0xc7, 0x25, 0xdd, 0x54, 0x4a, 0x3a, 0xe1, 0x37, 0x46, 0x35, 0xa5,
0x60, 0xdd, 0xaf, 0x26, 0xc0, 0xc9, 0xd1, 0x73, 0x8f, 0x5c, 0xe4, 0x84, 0x0b, 0xb4, 0x0d, 0x55, 0x92, 0x98, 0x1e, 0x74, 0xb7, 0x1d, 0xbd, 0xa0, 0x92, 0x98, 0x96, 0xe9, 0x1d, 0xea, 0x7f, 0x38,
0x2e, 0x30, 0x13, 0xbe, 0xe0, 0xca, 0xcc, 0xd2, 0xf2, 0x8a, 0x42, 0xcf, 0x39, 0xda, 0x83, 0xda, 0x85, 0x86, 0x09, 0xa1, 0x97, 0x7b, 0x36, 0xb5, 0xab, 0xee, 0x1a, 0xb3, 0xbe, 0x84, 0x7a, 0x42,
0x3c, 0xf0, 0xf3, 0xa4, 0xd8, 0xfa, 0x6c, 0x35, 0xec, 0x2d, 0x05, 0xc8, 0x85, 0x96, 0x88, 0x12, 0xb3, 0x48, 0xae, 0xb4, 0xf1, 0xb6, 0xd1, 0x12, 0x1b, 0xfe, 0x65, 0x03, 0x9c, 0x9f, 0x7e, 0x85,
0xe2, 0x7f, 0xa0, 0x29, 0xf1, 0xe9, 0x64, 0xc2, 0x89, 0x50, 0x33, 0x9b, 0x77, 0x61, 0x4b, 0xf6, 0xe9, 0x75, 0x41, 0x85, 0x44, 0x47, 0xd0, 0x14, 0x92, 0x70, 0x19, 0x48, 0xa1, 0xc5, 0x1c, 0x43,
0x2d, 0x4d, 0xc9, 0x2b, 0xc5, 0xa1, 0x4d, 0x28, 0x4d, 0x62, 0xac, 0x52, 0xb3, 0xac, 0x5d, 0x40, 0x6f, 0x68, 0xf4, 0x4a, 0xa0, 0xd7, 0xd0, 0xaa, 0x5e, 0x50, 0x65, 0x3d, 0x77, 0xbf, 0x9e, 0x78,
0xe8, 0x11, 0xd8, 0x3a, 0x2b, 0x85, 0x51, 0x11, 0x96, 0xa6, 0xa7, 0x13, 0x54, 0x38, 0x70, 0xb4, 0x47, 0x40, 0x3e, 0xf4, 0x64, 0x9c, 0xd2, 0xe0, 0x27, 0x96, 0xd1, 0x80, 0x2d, 0x97, 0x82, 0x4a,
0x0f, 0xeb, 0x01, 0x8d, 0x65, 0xf6, 0x7d, 0x86, 0xd3, 0x90, 0xcc, 0x93, 0x25, 0x43, 0x53, 0xf5, 0x5d, 0xb3, 0x2a, 0x0b, 0x57, 0x45, 0xbf, 0x67, 0x19, 0xbd, 0xd4, 0x31, 0x74, 0x08, 0xb5, 0x65,
0x90, 0xe6, 0x3c, 0x49, 0xe9, 0x7c, 0xed, 0xc2, 0x5f, 0x09, 0xbe, 0xf4, 0xef, 0x67, 0x4c, 0xa6, 0x42, 0xb4, 0x0d, 0x77, 0x67, 0x97, 0x10, 0xfa, 0x14, 0x5c, 0x63, 0xbe, 0x52, 0xa8, 0x74, 0x5f,
0xc7, 0xf2, 0xd6, 0x12, 0x7c, 0xf9, 0xe6, 0x6e, 0xcc, 0x0e, 0xa1, 0x4e, 0x52, 0x79, 0xf7, 0x7c, 0x17, 0x1b, 0x4b, 0x96, 0x0a, 0x02, 0xbd, 0x81, 0x67, 0x21, 0x4b, 0xd4, 0x63, 0x0a, 0x38, 0xc9,
0x71, 0x95, 0x11, 0xa7, 0xda, 0x31, 0x7a, 0xf6, 0x41, 0x4b, 0x0f, 0x40, 0x11, 0xe7, 0x57, 0x19, 0x22, 0x5a, 0x59, 0x55, 0xb9, 0xb0, 0x89, 0x91, 0x89, 0x61, 0x15, 0x32, 0x86, 0x3d, 0x86, 0xf7,
0xd1, 0x8d, 0x03, 0x59, 0x20, 0xe8, 0x1f, 0xa8, 0xf2, 0x8b, 0xd8, 0x4f, 0xe4, 0x45, 0xae, 0x29, 0x52, 0x72, 0x13, 0xec, 0x9b, 0x56, 0xd9, 0xd1, 0xc1, 0x4f, 0x53, 0x72, 0xf3, 0xdd, 0x43, 0xdf,
0xef, 0x0a, 0xbf, 0x88, 0xcf, 0xe4, 0x2d, 0x7e, 0x02, 0x28, 0xe2, 0x3e, 0x17, 0x2c, 0x0a, 0x84, 0xbe, 0x85, 0x36, 0xcd, 0xd4, 0x63, 0x0e, 0xe4, 0x26, 0xa7, 0x5e, 0x73, 0x60, 0x8d, 0xdc, 0x93,
0xbf, 0x10, 0x81, 0xea, 0x77, 0x2d, 0xe2, 0x43, 0x45, 0x0c, 0xb5, 0x78, 0x17, 0xec, 0xe5, 0x44, 0x9e, 0x29, 0x80, 0x0e, 0x5c, 0x6d, 0x72, 0x6a, 0x12, 0x07, 0xba, 0x45, 0xd0, 0x0b, 0x68, 0x8a,
0x53, 0x9c, 0x10, 0xa7, 0x7e, 0xe7, 0xf6, 0x37, 0xe6, 0xf3, 0x7c, 0x89, 0x13, 0xd2, 0xfd, 0x69, 0xeb, 0x24, 0x48, 0xd5, 0x64, 0x68, 0x69, 0xed, 0x86, 0xb8, 0x4e, 0x2e, 0xd4, 0x58, 0x38, 0x06,
0x80, 0x3d, 0x14, 0x8c, 0xe0, 0xe4, 0x77, 0x9e, 0x81, 0x17, 0xfa, 0x2d, 0x7a, 0x60, 0xb6, 0x95, 0x77, 0x57, 0xa4, 0x8c, 0xa4, 0xd4, 0x6b, 0x3f, 0x98, 0x10, 0x9d, 0xaa, 0x44, 0xdf, 0x90, 0x94,
0xc9, 0x1f, 0x78, 0x09, 0x76, 0xf7, 0x00, 0x96, 0x27, 0x81, 0xd6, 0xa0, 0x2e, 0x7f, 0x4f, 0xc8, 0xa2, 0x2f, 0xe1, 0xc3, 0xea, 0x76, 0xff, 0x65, 0xf0, 0x8e, 0xbe, 0xe4, 0x0b, 0x43, 0x99, 0xfe,
0x04, 0xe7, 0xb1, 0x68, 0xad, 0xa0, 0x26, 0xd4, 0x24, 0x70, 0xc4, 0x18, 0x9d, 0xb5, 0x8c, 0xc1, 0xdb, 0xc7, 0x7f, 0x5b, 0xe0, 0xce, 0x24, 0xa7, 0x24, 0xfd, 0x3f, 0xa3, 0xe6, 0x6b, 0x33, 0xef,
0xce, 0xf5, 0x6d, 0xdb, 0xf8, 0x72, 0xdb, 0x36, 0xbe, 0xdf, 0xb6, 0x8d, 0x4f, 0x3f, 0xda, 0x2b, 0x1e, 0x69, 0x77, 0x2d, 0xf2, 0x0e, 0xa6, 0xcd, 0xf1, 0x6b, 0x80, 0x5d, 0x73, 0xd0, 0x53, 0x68,
0xf0, 0x77, 0x40, 0x13, 0x57, 0x7f, 0xa2, 0x2b, 0xa2, 0xf1, 0x48, 0x35, 0xfc, 0xda, 0xf8, 0x15, 0xab, 0xef, 0x39, 0x5d, 0x92, 0x22, 0x91, 0xbd, 0x03, 0xd4, 0x85, 0x96, 0x02, 0x4e, 0x39, 0x67,
0x00, 0x00, 0xff, 0xff, 0x04, 0xb1, 0xa6, 0x66, 0xfe, 0x05, 0x00, 0x00, 0xeb, 0x9e, 0x35, 0x79, 0x75, 0x7b, 0xdf, 0xb7, 0x7e, 0xbb, 0xef, 0x5b, 0x7f, 0xdc, 0xf7, 0xad,
0x5f, 0xfe, 0xec, 0x1f, 0xc0, 0x07, 0x21, 0x4b, 0x7d, 0x73, 0x45, 0x5f, 0xc6, 0x8b, 0xb9, 0x4e,
0xf8, 0x5b, 0xeb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x9c, 0xdb, 0x62, 0x06, 0x00,
0x00,
} }
...@@ -111,118 +111,118 @@ ...@@ -111,118 +111,118 @@
"revisionTime": "2018-10-24T15:10:47Z" "revisionTime": "2018-10-24T15:10:47Z"
}, },
{ {
"checksumSHA1": "zdNB/SusrolFBEotWrfqZ08+MCk=", "checksumSHA1": "SEiIj/X95cyoI8/a0z2XBpzE+CI=",
"path": "github.com/pingcap/parser", "path": "github.com/pingcap/parser",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "JdLK0084PE81bjMLcH+qUZFq10M=", "checksumSHA1": "saYDWHgFCkZAYZeOGfowg2TEAss=",
"path": "github.com/pingcap/parser/ast", "path": "github.com/pingcap/parser/ast",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "npMzF75Vg7tO28nM3MNFq7ciqRY=", "checksumSHA1": "40q2uTuOqgcdXxoauVNVO+FCxe8=",
"path": "github.com/pingcap/parser/auth", "path": "github.com/pingcap/parser/auth",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "t4UHo966WzU9Z0IJkyGHRp0loOk=", "checksumSHA1": "t4UHo966WzU9Z0IJkyGHRp0loOk=",
"path": "github.com/pingcap/parser/charset", "path": "github.com/pingcap/parser/charset",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "ohLJW2u9NJEzYIJL/AjOqcuKfMY=", "checksumSHA1": "ohLJW2u9NJEzYIJL/AjOqcuKfMY=",
"path": "github.com/pingcap/parser/format", "path": "github.com/pingcap/parser/format",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "AqNgtzIGY8g7Ojd9ofE8EtKW2mk=", "checksumSHA1": "AqNgtzIGY8g7Ojd9ofE8EtKW2mk=",
"path": "github.com/pingcap/parser/model", "path": "github.com/pingcap/parser/model",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "SrliCbNvJrQExC1gULpw7FAiE6s=", "checksumSHA1": "SrliCbNvJrQExC1gULpw7FAiE6s=",
"path": "github.com/pingcap/parser/mysql", "path": "github.com/pingcap/parser/mysql",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "olapD16WCMBU9vrA5PtlERGFfXw=", "checksumSHA1": "olapD16WCMBU9vrA5PtlERGFfXw=",
"path": "github.com/pingcap/parser/opcode", "path": "github.com/pingcap/parser/opcode",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "TF2rMYy9ewgZpFsJb+jaGXXqZqc=", "checksumSHA1": "TF2rMYy9ewgZpFsJb+jaGXXqZqc=",
"path": "github.com/pingcap/parser/terror", "path": "github.com/pingcap/parser/terror",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "dxjAHfRcmXkQdf0HeueDrUO+BcM=", "checksumSHA1": "dxjAHfRcmXkQdf0HeueDrUO+BcM=",
"path": "github.com/pingcap/parser/types", "path": "github.com/pingcap/parser/types",
"revision": "64957c596663a56fe176881aadea6baa4890f710", "revision": "f7d75264dcc6bc53a720eeffeb47ab8db9fb3801",
"revisionTime": "2019-02-19T02:02:13Z" "revisionTime": "2019-02-21T06:24:14Z"
}, },
{ {
"checksumSHA1": "uOrWw9c47zwN6COxonFJ0t2IMcM=", "checksumSHA1": "uOrWw9c47zwN6COxonFJ0t2IMcM=",
"path": "github.com/pingcap/tidb/sessionctx/stmtctx", "path": "github.com/pingcap/tidb/sessionctx/stmtctx",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "IJSv0YocnSmIZRpgQJ1pLtHL8vY=", "checksumSHA1": "IJSv0YocnSmIZRpgQJ1pLtHL8vY=",
"path": "github.com/pingcap/tidb/types", "path": "github.com/pingcap/tidb/types",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "fPdBwAtPVKOr7YAyOMnRxyHixoM=", "checksumSHA1": "fPdBwAtPVKOr7YAyOMnRxyHixoM=",
"path": "github.com/pingcap/tidb/types/json", "path": "github.com/pingcap/tidb/types/json",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "tY4KSNzuTGm+dgV6ByZEGa6mv5E=", "checksumSHA1": "tY4KSNzuTGm+dgV6ByZEGa6mv5E=",
"path": "github.com/pingcap/tidb/types/parser_driver", "path": "github.com/pingcap/tidb/types/parser_driver",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "OOig47D9TSVOUAYkNj2yJok1Hmo=", "checksumSHA1": "oSpVUrmVZl6RPxrpwtKgeNodckQ=",
"path": "github.com/pingcap/tidb/util/execdetails", "path": "github.com/pingcap/tidb/util/execdetails",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "RdbHgQWMHjRtKjqPcTX81k1V3sw=", "checksumSHA1": "RdbHgQWMHjRtKjqPcTX81k1V3sw=",
"path": "github.com/pingcap/tidb/util/hack", "path": "github.com/pingcap/tidb/util/hack",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "xSyepiuqsoaaeDch7cXeumvVHKM=", "checksumSHA1": "xSyepiuqsoaaeDch7cXeumvVHKM=",
"path": "github.com/pingcap/tidb/util/memory", "path": "github.com/pingcap/tidb/util/memory",
"revision": "ed7bb004170311e73664c280e77298760de74425", "revision": "38a453d29c8cb6644c6bfd28be4efe243e10c161",
"revisionTime": "2019-02-19T02:02:46Z" "revisionTime": "2019-02-21T13:18:03Z"
}, },
{ {
"checksumSHA1": "SmYeIK/fIYXNu8IKxD6HOVQVTuU=", "checksumSHA1": "QPIBwDNUFF5Whrnd41S3mkKa4gQ=",
"path": "github.com/pingcap/tipb/go-tipb", "path": "github.com/pingcap/tipb/go-tipb",
"revision": "11e33c750323a0267a6aee335eaaeb7831bdae67", "revision": "aa146c1ab9bb2b7ec5e00e8904aa95465f3f106b",
"revisionTime": "2018-10-12T11:26:00Z" "revisionTime": "2019-02-21T05:42:54Z"
}, },
{ {
"checksumSHA1": "l0hSacaw5sInpzZkFwGLH/azUD4=", "checksumSHA1": "l0hSacaw5sInpzZkFwGLH/azUD4=",
"path": "github.com/pingcap/tipb/sharedbytes", "path": "github.com/pingcap/tipb/sharedbytes",
"revision": "11e33c750323a0267a6aee335eaaeb7831bdae67", "revision": "aa146c1ab9bb2b7ec5e00e8904aa95465f3f106b",
"revisionTime": "2018-10-12T11:26:00Z" "revisionTime": "2019-02-21T05:42:54Z"
}, },
{ {
"checksumSHA1": "I7hloldMJZTqUx6hbVDp5nk9fZQ=", "checksumSHA1": "I7hloldMJZTqUx6hbVDp5nk9fZQ=",
...@@ -413,62 +413,62 @@ ...@@ -413,62 +413,62 @@
{ {
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2", "path": "vitess.io/vitess/go/bytes2",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "bhE6CGQgZTIgLPp9lnvlKW/47xc=", "checksumSHA1": "bhE6CGQgZTIgLPp9lnvlKW/47xc=",
"path": "vitess.io/vitess/go/hack", "path": "vitess.io/vitess/go/hack",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "w4BH8HL/CgT6aBWojJeZHOj5DZg=", "checksumSHA1": "w4BH8HL/CgT6aBWojJeZHOj5DZg=",
"path": "vitess.io/vitess/go/sqltypes", "path": "vitess.io/vitess/go/sqltypes",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "vAIRxI6MHsq3x1hLQwIyw5AvqtI=", "checksumSHA1": "vAIRxI6MHsq3x1hLQwIyw5AvqtI=",
"path": "vitess.io/vitess/go/vt/log", "path": "vitess.io/vitess/go/vt/log",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "nRmynSAD/uvTjH0/Ftr9Iz/VsN4=", "checksumSHA1": "nRmynSAD/uvTjH0/Ftr9Iz/VsN4=",
"path": "vitess.io/vitess/go/vt/proto/query", "path": "vitess.io/vitess/go/vt/proto/query",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "YLWTmL+rvz0htn0niRMrIUI6rKc=", "checksumSHA1": "YLWTmL+rvz0htn0niRMrIUI6rKc=",
"path": "vitess.io/vitess/go/vt/proto/topodata", "path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "1gA4wbQ2DiVjeLJauYSQiuBJiE0=", "checksumSHA1": "1gA4wbQ2DiVjeLJauYSQiuBJiE0=",
"path": "vitess.io/vitess/go/vt/proto/vtgate", "path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "qz32abYdmm9NfKTc++K0l1EvXXM=", "checksumSHA1": "qz32abYdmm9NfKTc++K0l1EvXXM=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc", "path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "lpx8L51nDqrhQis64dEBk7RI32k=", "checksumSHA1": "lpx8L51nDqrhQis64dEBk7RI32k=",
"path": "vitess.io/vitess/go/vt/sqlparser", "path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
}, },
{ {
"checksumSHA1": "Jx+gOh/kiBDSZxEIWHyYn9brjdo=", "checksumSHA1": "Jx+gOh/kiBDSZxEIWHyYn9brjdo=",
"path": "vitess.io/vitess/go/vt/vterrors", "path": "vitess.io/vitess/go/vt/vterrors",
"revision": "092479406b27ae61a8fcd146a0e08af2d51a7245", "revision": "b7e5a982740b1bc49dc8129605b9f037370829ae",
"revisionTime": "2019-02-18T03:34:22Z" "revisionTime": "2019-02-20T22:32:46Z"
} }
], ],
"rootPath": "github.com/XiaoMi/soar" "rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册