Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
748ba0cb
Commit
748ba0cb
authored
Jun 27, 2019
by
vipwzw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
auto ci
parent
29629ee7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
315 additions
and
226 deletions
+315
-226
action.go
plugin/dapp/paracross/executor/action.go
+75
-85
exec_del_local.go
plugin/dapp/paracross/executor/exec_del_local.go
+1
-1
exec_local.go
plugin/dapp/paracross/executor/exec_local.go
+1
-1
paracross.go
plugin/dapp/paracross/executor/paracross.go
+14
-15
superaccount.go
plugin/dapp/paracross/executor/superaccount.go
+6
-6
paracross.pb.go
plugin/dapp/paracross/types/paracross.pb.go
+215
-115
type.go
plugin/dapp/paracross/types/type.go
+3
-3
No files found.
plugin/dapp/paracross/executor/action.go
View file @
748ba0cb
...
...
@@ -162,21 +162,21 @@ func makeRecordReceipt(addr string, commit *pt.ParacrossCommitAction) *types.Rec
}
func
makeDoneReceipt
(
execMainHeight
int64
,
commit
*
pt
.
ParacrossNodeStatus
,
most
,
commitCount
,
totalCount
int32
)
*
types
.
Receipt
{
most
,
commitCount
,
totalCount
int32
)
*
types
.
Receipt
{
log
:=
&
pt
.
ReceiptParacrossDone
{
TotalNodes
:
totalCount
,
TotalCommit
:
commitCount
,
MostSameCommit
:
most
,
Title
:
commit
.
Title
,
Height
:
commit
.
Height
,
StateHash
:
commit
.
StateHash
,
BlockHash
:
commit
.
BlockHash
,
TxCounts
:
commit
.
TxCounts
,
TxResult
:
commit
.
TxResult
,
TxHashs
:
commit
.
TxHashs
,
CrossTxHashs
:
commit
.
CrossTxHashs
,
CrossTxResult
:
commit
.
CrossTxResult
,
TotalNodes
:
totalCount
,
TotalCommit
:
commitCount
,
MostSameCommit
:
most
,
Title
:
commit
.
Title
,
Height
:
commit
.
Height
,
StateHash
:
commit
.
StateHash
,
BlockHash
:
commit
.
BlockHash
,
TxCounts
:
commit
.
TxCounts
,
TxResult
:
commit
.
TxResult
,
TxHashs
:
commit
.
TxHashs
,
CrossTxHashs
:
commit
.
CrossTxHashs
,
CrossTxResult
:
commit
.
CrossTxResult
,
MainBlockHeight
:
commit
.
MainBlockHeight
,
MainBlockHash
:
commit
.
MainBlockHash
,
}
...
...
@@ -226,16 +226,15 @@ func getMostCommit(stat *pt.ParacrossHeightStatus) (int, string) {
}
//需要在ForkLoopCheckCommitTxDone后使用
func
getMostResults
(
mostHash
[]
byte
,
stat
*
pt
.
ParacrossHeightStatus
)
([]
byte
,
[]
byte
,[]
byte
,
[]
byte
)
{
for
i
,
hash
:=
range
stat
.
Details
.
BlockHash
{
if
bytes
.
Equal
(
mostHash
,
hash
)
{
return
stat
.
Details
.
TxResult
[
i
],
stat
.
Details
.
TxHashs
[
i
],
stat
.
Details
.
CrossTxResult
[
i
],
stat
.
Details
.
CrossTxHashs
[
i
]
func
getMostResults
(
mostHash
[]
byte
,
stat
*
pt
.
ParacrossHeightStatus
)
([]
byte
,
[]
byte
,
[]
byte
,
[]
byte
)
{
for
i
,
hash
:=
range
stat
.
Details
.
BlockHash
{
if
bytes
.
Equal
(
mostHash
,
hash
)
{
return
stat
.
Details
.
TxResult
[
i
],
stat
.
Details
.
TxHashs
[
i
],
stat
.
Details
.
CrossTxResult
[
i
],
stat
.
Details
.
CrossTxHashs
[
i
]
}
}
return
nil
,
nil
,
nil
,
nil
return
nil
,
nil
,
nil
,
nil
}
func
hasCommited
(
addrs
[]
string
,
addr
string
)
(
bool
,
int
)
{
for
i
,
a
:=
range
addrs
{
if
a
==
addr
{
...
...
@@ -403,14 +402,13 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
stat
.
MainHeight
=
commit
.
Status
.
MainBlockHeight
stat
.
MainHash
=
commit
.
Status
.
MainBlockHash
}
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
){
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
stat
.
Details
.
TxResult
=
append
(
stat
.
Details
.
TxResult
,
commit
.
Status
.
TxResult
)
stat
.
Details
.
TxHashs
=
append
(
stat
.
Details
.
TxHashs
,
commit
.
Status
.
TxHashs
[
0
])
stat
.
Details
.
CrossTxResult
=
append
(
stat
.
Details
.
CrossTxResult
,
commit
.
Status
.
CrossTxResult
)
stat
.
Details
.
CrossTxHashs
=
append
(
stat
.
Details
.
CrossTxHashs
,
commit
.
Status
.
CrossTxHashs
[
0
])
}
receipt
=
makeCommitReceipt
(
a
.
fromaddr
,
commit
,
nil
,
stat
)
}
else
{
var
copyStat
pt
.
ParacrossHeightStatus
...
...
@@ -423,7 +421,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
found
,
index
:=
hasCommited
(
stat
.
Details
.
Addrs
,
a
.
fromaddr
)
if
found
{
stat
.
Details
.
BlockHash
[
index
]
=
commit
.
Status
.
BlockHash
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
){
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
stat
.
Details
.
TxResult
[
index
]
=
commit
.
Status
.
TxResult
stat
.
Details
.
TxHashs
[
index
]
=
commit
.
Status
.
TxHashs
[
0
]
stat
.
Details
.
CrossTxResult
[
index
]
=
commit
.
Status
.
CrossTxResult
...
...
@@ -432,7 +430,7 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
}
else
{
stat
.
Details
.
Addrs
=
append
(
stat
.
Details
.
Addrs
,
a
.
fromaddr
)
stat
.
Details
.
BlockHash
=
append
(
stat
.
Details
.
BlockHash
,
commit
.
Status
.
BlockHash
)
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
){
if
a
.
exec
.
GetMainHeight
()
>=
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
stat
.
Details
.
TxResult
=
append
(
stat
.
Details
.
TxResult
,
commit
.
Status
.
TxResult
)
stat
.
Details
.
TxHashs
=
append
(
stat
.
Details
.
TxHashs
,
commit
.
Status
.
TxHashs
[
0
])
stat
.
Details
.
CrossTxResult
=
append
(
stat
.
Details
.
CrossTxResult
,
commit
.
Status
.
CrossTxResult
)
...
...
@@ -444,13 +442,13 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
}
//平行链fork pt.ForkCommitTx=0,主链在ForkCommitTx后支持nodegroup,这里平行链dappFork一定为true
if
types
.
IsDappFork
(
commit
.
Status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkCommitTx
)
{
updateCommitAddrs
(
stat
,
nodes
,
a
.
exec
.
GetMainHeight
())
updateCommitAddrs
(
stat
,
nodes
,
a
.
exec
.
GetMainHeight
())
}
if
commit
.
Status
.
Height
>
titleStatus
.
Height
+
1
{
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
commit
.
Status
.
Title
,
commit
.
Status
.
Height
),
stat
)
//平行链由主链共识无缝切换,即接收第一个收到的高度,可以不从0开始
paraSwitch
,
err
:=
isParaSelfConsensSwitch
(
a
.
db
,
stat
,
titleStatus
)
paraSwitch
,
err
:=
isParaSelfConsensSwitch
(
a
.
db
,
stat
,
titleStatus
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -458,11 +456,11 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
return
receipt
,
nil
}
}
return
a
.
commitTxDone
(
commit
.
Status
,
stat
,
titleStatus
,
nodes
,
receipt
)
return
a
.
commitTxDone
(
commit
.
Status
,
stat
,
titleStatus
,
nodes
,
receipt
)
}
func
(
a
*
action
)
commitTxDone
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
commitTxDone
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
clog
.
Info
(
"paracross.Commit commit"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
clog
.
Info
(
"paracross.Commit commit detail"
,
"addr"
,
v
,
"hash"
,
hex
.
EncodeToString
(
stat
.
Details
.
BlockHash
[
i
]))
...
...
@@ -482,12 +480,11 @@ func (a *action)commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Paracr
receiptDone
:=
makeDoneReceipt
(
a
.
exec
.
GetMainHeight
(),
nodeStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
return
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
,
receipt
)
return
a
.
commitTxDoneStep2
(
nodeStatus
,
stat
,
titleStatus
,
receipt
)
}
func
(
a
*
action
)
commitTxDoneStep2
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
){
func
(
a
*
action
)
commitTxDoneStep2
(
nodeStatus
*
pt
.
ParacrossNodeStatus
,
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
titleStatus
.
Title
=
nodeStatus
.
Title
titleStatus
.
Height
=
nodeStatus
.
Height
...
...
@@ -503,7 +500,7 @@ func (a *action)commitTxDoneStep2(nodeStatus *pt.ParacrossNodeStatus, stat *pt.P
//parallel chain not need to process cross commit tx here
if
types
.
IsPara
()
{
//平行连进行奖励分配
rewardReceipt
,
err
:=
a
.
reward
(
nodeStatus
,
stat
)
rewardReceipt
,
err
:=
a
.
reward
(
nodeStatus
,
stat
)
//错误会导致和主链处理的共识结果不一致
if
err
!=
nil
{
clog
.
Error
(
"paracross mining reward err"
,
"height"
,
nodeStatus
.
Height
,
...
...
@@ -515,16 +512,15 @@ func (a *action)commitTxDoneStep2(nodeStatus *pt.ParacrossNodeStatus, stat *pt.P
}
//主链,处理跨链交易
r
,
err
:=
a
.
procCrossTxs
(
nodeStatus
)
if
err
!=
nil
{
return
nil
,
err
r
,
err
:=
a
.
procCrossTxs
(
nodeStatus
)
if
err
!=
nil
{
return
nil
,
err
}
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
return
receipt
,
nil
}
func
(
a
*
action
)
procCrossTxs
(
status
*
pt
.
ParacrossNodeStatus
)(
*
types
.
Receipt
,
error
){
func
(
a
*
action
)
procCrossTxs
(
status
*
pt
.
ParacrossNodeStatus
)
(
*
types
.
Receipt
,
error
)
{
haveCrossTxs
:=
len
(
status
.
CrossTxHashs
)
>
0
if
status
.
Height
>
0
&&
types
.
IsDappFork
(
status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkCommitTx
)
&&
len
(
status
.
CrossTxHashs
[
0
])
==
0
{
haveCrossTxs
=
false
...
...
@@ -536,14 +532,13 @@ func (a *action) procCrossTxs(status *pt.ParacrossNodeStatus)(*types.Receipt, er
if
err
!=
nil
{
return
nil
,
err
}
return
crossTxReceipt
,
nil
return
crossTxReceipt
,
nil
}
return
nil
,
nil
}
//由于可能对当前块的共识交易进行处理,需要全部数据保存到statedb,通过tx获取数据无法处理当前块的场景
func
(
a
*
action
)
loopCommitTxDone
(
title
string
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
loopCommitTxDone
(
title
string
)
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
nodes
,
_
,
err
:=
getParacrossNodes
(
a
.
db
,
title
)
...
...
@@ -556,14 +551,14 @@ func (a *action) loopCommitTxDone(title string)(*types.Receipt, error){
return
nil
,
errors
.
Wrapf
(
err
,
"getTitle:%s"
,
title
)
}
//当前共识高度还未到分叉高度,则不处理
if
titleStatus
.
GetMainHeight
()
<
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
){
return
nil
,
errors
.
Wrapf
(
pt
.
ErrForkHeightNotReach
,
"titleHeight:%d,forkHeight"
,
titleStatus
.
MainHeight
,
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
))
if
titleStatus
.
GetMainHeight
()
<
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
return
nil
,
errors
.
Wrapf
(
pt
.
ErrForkHeightNotReach
,
"titleHeight:%d,forkHeight"
,
titleStatus
.
MainHeight
,
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
))
}
loopHeight
:=
titleStatus
.
Height
for
{
for
{
loopHeight
++
stat
,
err
:=
getTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
title
,
loopHeight
))
...
...
@@ -572,28 +567,27 @@ func (a *action) loopCommitTxDone(title string)(*types.Receipt, error){
return
receipt
,
err
}
//防止无限循环
if
stat
.
MainHeight
>
a
.
exec
.
GetMainHeight
(){
return
receipt
,
nil
if
stat
.
MainHeight
>
a
.
exec
.
GetMainHeight
()
{
return
receipt
,
nil
}
r
,
err
:=
a
.
checkCommitTxDone
(
title
,
stat
,
nodes
)
if
err
!=
nil
{
clog
.
Error
(
"paracross.Commit checkExecCommitTxDone"
,
"para title"
,
title
,
"height"
,
stat
.
Height
,
"error"
,
err
,
)
return
receipt
,
nil
r
,
err
:=
a
.
checkCommitTxDone
(
title
,
stat
,
nodes
)
if
err
!=
nil
{
clog
.
Error
(
"paracross.Commit checkExecCommitTxDone"
,
"para title"
,
title
,
"height"
,
stat
.
Height
,
"error"
,
err
)
return
receipt
,
nil
}
if
r
==
nil
{
return
receipt
,
nil
if
r
==
nil
{
return
receipt
,
nil
}
receipt
=
mergeReceipt
(
receipt
,
r
)
receipt
=
mergeReceipt
(
receipt
,
r
)
}
return
receipt
,
nil
return
receipt
,
nil
}
func
(
a
*
action
)
checkCommitTxDone
(
title
string
,
stat
*
pt
.
ParacrossHeightStatus
,
nodes
map
[
string
]
struct
{})(
*
types
.
Receipt
,
error
){
func
(
a
*
action
)
checkCommitTxDone
(
title
string
,
stat
*
pt
.
ParacrossHeightStatus
,
nodes
map
[
string
]
struct
{})
(
*
types
.
Receipt
,
error
)
{
receipt
:=
&
types
.
Receipt
{}
status
,
err
:=
getTitle
(
a
.
db
,
calcTitleKey
(
title
))
if
err
!=
nil
{
...
...
@@ -605,20 +599,19 @@ func (a *action) checkCommitTxDone(title string,stat *pt.ParacrossHeightStatus,n
return
nil
,
nil
}
updateCommitAddrs
(
stat
,
nodes
,
a
.
exec
.
GetMainHeight
())
updateCommitAddrs
(
stat
,
nodes
,
a
.
exec
.
GetMainHeight
())
most
,
_
:=
getMostCommit
(
stat
)
if
!
isCommitDone
(
nodes
,
most
)
{
return
nil
,
nil
}
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
,
receipt
)
return
a
.
commitTxDoneByStat
(
stat
,
status
,
nodes
,
receipt
)
}
//只根据stat的信息在commitDone之后重构一个commitStatus做后续处理
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
commitTxDoneByStat
(
stat
*
pt
.
ParacrossHeightStatus
,
titleStatus
*
pt
.
ParacrossStatus
,
nodes
map
[
string
]
struct
{},
receipt
*
types
.
Receipt
)
(
*
types
.
Receipt
,
error
)
{
clog
.
Info
(
"paracross.Commit commit"
,
"stat.title"
,
stat
.
Title
,
"stat.height"
,
stat
.
Height
,
"notes"
,
len
(
nodes
))
for
i
,
v
:=
range
stat
.
Details
.
Addrs
{
...
...
@@ -635,25 +628,25 @@ func (a *action) commitTxDoneByStat(stat *pt.ParacrossHeightStatus,titleStatus *
stat
.
Status
=
pt
.
ParacrossStatusCommitDone
saveTitleHeight
(
a
.
db
,
calcTitleHeightKey
(
stat
.
Title
,
stat
.
Height
),
stat
)
txRst
,
txHash
,
crossTxRst
,
crossTxHash
:=
getMostResults
([]
byte
(
mostHash
),
stat
)
txRst
,
txHash
,
crossTxRst
,
crossTxHash
:=
getMostResults
([]
byte
(
mostHash
),
stat
)
finalStatus
:=
&
pt
.
ParacrossNodeStatus
{
MainBlockHash
:
stat
.
MainHash
,
MainBlockHeight
:
stat
.
MainHeight
,
Title
:
stat
.
Title
,
Height
:
stat
.
Height
,
BlockHash
:
[]
byte
(
mostHash
),
TxResult
:
txRst
,
TxHashs
:
[][]
byte
{
txHash
},
CrossTxResult
:
crossTxRst
,
CrossTxHashs
:
[][]
byte
{
crossTxHash
},
MainBlockHash
:
stat
.
MainHash
,
MainBlockHeight
:
stat
.
MainHeight
,
Title
:
stat
.
Title
,
Height
:
stat
.
Height
,
BlockHash
:
[]
byte
(
mostHash
),
TxResult
:
txRst
,
TxHashs
:
[][]
byte
{
txHash
},
CrossTxResult
:
crossTxRst
,
CrossTxHashs
:
[][]
byte
{
crossTxHash
},
}
//stat.ConsensBlockHash = []byte(mostHash)
//add commit done receipt
receiptDone
:=
makeDoneReceipt
(
a
.
exec
.
GetMainHeight
(),
finalStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receiptDone
:=
makeDoneReceipt
(
a
.
exec
.
GetMainHeight
(),
finalStatus
,
int32
(
most
),
int32
(
commitCount
),
int32
(
len
(
nodes
)))
receipt
=
mergeReceipt
(
receipt
,
receiptDone
)
clog
.
Info
(
"paracross.Commit commit ----pass"
,
"most"
,
most
,
"mostHash"
,
hex
.
EncodeToString
([]
byte
(
mostHash
)))
return
a
.
commitTxDoneStep2
(
finalStatus
,
stat
,
titleStatus
,
receipt
)
return
a
.
commitTxDoneStep2
(
finalStatus
,
stat
,
titleStatus
,
receipt
)
}
//平行链自共识无缝切换条件:1,平行链没有共识过,2:commit高度是大于自共识分叉高度且上一次共识的主链高度小于自共识分叉高度,保证只运行一次,
...
...
@@ -700,16 +693,15 @@ func (a *action) execCrossTx(tx *types.TransactionDetail, crossTxHash []byte) (*
return
nil
,
errors
.
Cause
(
err
)
}
clog
.
Info
(
"paracross.Commit WithdrawCoins"
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
clog
.
Info
(
"paracross.Commit WithdrawCoins"
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHash
))
return
receiptWithdraw
,
nil
}
return
nil
,
nil
}
func
getCrossTxHashs
(
api
client
.
QueueProtocolAPI
,
status
*
pt
.
ParacrossNodeStatus
)
([][]
byte
,
[]
byte
,
error
)
{
if
!
types
.
IsDappFork
(
status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkCommitTx
){
if
!
types
.
IsDappFork
(
status
.
MainBlockHeight
,
pt
.
ParaX
,
pt
.
ForkCommitTx
)
{
return
status
.
CrossTxHashs
,
status
.
CrossTxResult
,
nil
}
...
...
@@ -719,7 +711,6 @@ func getCrossTxHashs(api client.QueueProtocolAPI, status *pt.ParacrossNodeStatus
return
nil
,
nil
,
types
.
ErrCheckTxHash
}
blockDetail
,
err
:=
GetBlock
(
api
,
status
.
MainBlockHash
)
if
err
!=
nil
{
return
nil
,
nil
,
err
...
...
@@ -760,7 +751,6 @@ func getCrossTxHashs(api client.QueueProtocolAPI, status *pt.ParacrossNodeStatus
}
func
(
a
*
action
)
execCrossTxs
(
status
*
pt
.
ParacrossNodeStatus
)
(
*
types
.
Receipt
,
error
)
{
var
receipt
types
.
Receipt
...
...
@@ -774,23 +764,23 @@ func (a *action) execCrossTxs(status *pt.ParacrossNodeStatus) (*types.Receipt, e
}
for
i
:=
0
;
i
<
len
(
crossTxHashs
);
i
++
{
clog
.
Info
(
"paracross.Commit commitDone"
,
"do cross number"
,
i
,
"hash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]),
clog
.
Info
(
"paracross.Commit commitDone"
,
"do cross number"
,
i
,
"hash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]),
"res"
,
util
.
BitMapBit
(
crossTxResult
,
uint32
(
i
)))
if
util
.
BitMapBit
(
crossTxResult
,
uint32
(
i
))
{
tx
,
err
:=
GetTx
(
a
.
api
,
crossTxHashs
[
i
])
if
err
!=
nil
{
clog
.
Crit
(
"paracross.Commit Load Tx failed"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
return
nil
,
err
}
if
tx
==
nil
{
clog
.
Error
(
"paracross.Commit Load Tx failed"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
clog
.
Error
(
"paracross.Commit Load Tx failed"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
,
"txHash"
,
hex
.
EncodeToString
(
crossTxHashs
[
i
]))
return
nil
,
types
.
ErrHashNotExist
}
receiptCross
,
err
:=
a
.
execCrossTx
(
tx
,
crossTxHashs
[
i
])
if
err
!=
nil
{
clog
.
Error
(
"paracross.Commit execCrossTx"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
clog
.
Error
(
"paracross.Commit execCrossTx"
,
"para title"
,
title
,
"para height"
,
status
.
Height
,
"para tx index"
,
i
,
"error"
,
err
)
return
nil
,
errors
.
Cause
(
err
)
}
...
...
plugin/dapp/paracross/executor/exec_del_local.go
View file @
748ba0cb
...
...
@@ -77,7 +77,7 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
}
key
:=
calcLocalNodeTitleDone
(
g
.
Title
,
g
.
TargetAddr
)
set
.
KV
=
append
(
set
.
KV
,
&
types
.
KeyValue
{
Key
:
key
,
Value
:
nil
})
}
else
if
log
.
Ty
==
pt
.
TyLogParacrossCommitDone
{
}
else
if
log
.
Ty
==
pt
.
TyLogParacrossCommitDone
{
var
g
pt
.
ReceiptParacrossDone
types
.
Decode
(
log
.
Log
,
&
g
)
g
.
Height
=
g
.
Height
-
1
...
...
plugin/dapp/paracross/executor/exec_local.go
View file @
748ba0cb
...
...
@@ -81,7 +81,7 @@ func (e *Paracross) ExecLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *typ
}
key
:=
calcLocalNodeTitleDone
(
g
.
Title
,
g
.
TargetAddr
)
set
.
KV
=
append
(
set
.
KV
,
&
types
.
KeyValue
{
Key
:
key
,
Value
:
types
.
Encode
(
&
g
)})
}
else
if
log
.
Ty
==
pt
.
TyLogParacrossCommitDone
{
}
else
if
log
.
Ty
==
pt
.
TyLogParacrossCommitDone
{
var
g
pt
.
ReceiptParacrossDone
types
.
Decode
(
log
.
Log
,
&
g
)
...
...
plugin/dapp/paracross/executor/paracross.go
View file @
748ba0cb
...
...
@@ -69,7 +69,6 @@ func (c *Paracross) checkTxGroup(tx *types.Transaction, index int) ([]*types.Tra
func
(
c
*
Paracross
)
saveLocalParaTxs
(
tx
*
types
.
Transaction
,
isDel
bool
)
(
*
types
.
LocalDBSet
,
error
)
{
var
payload
pt
.
ParacrossAction
err
:=
types
.
Decode
(
tx
.
Payload
,
&
payload
)
if
err
!=
nil
{
...
...
@@ -85,22 +84,22 @@ func (c *Paracross) saveLocalParaTxs(tx *types.Transaction, isDel bool) (*types.
return
nil
,
err
}
return
c
.
udpateLocalParaTxs
(
commit
.
Status
.
Title
,
commit
.
Status
.
Height
,
crossTxHashs
,
crossTxResult
,
isDel
)
return
c
.
udpateLocalParaTxs
(
commit
.
Status
.
Title
,
commit
.
Status
.
Height
,
crossTxHashs
,
crossTxResult
,
isDel
)
}
//无法获取到commit tx信息,从commitDone 结构里面构建
func
(
c
*
Paracross
)
saveLocalParaTxsFork
(
commitDone
*
pt
.
ReceiptParacrossDone
,
isDel
bool
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Paracross
)
saveLocalParaTxsFork
(
commitDone
*
pt
.
ReceiptParacrossDone
,
isDel
bool
)
(
*
types
.
LocalDBSet
,
error
)
{
status
:=
&
pt
.
ParacrossNodeStatus
{
MainBlockHash
:
commitDone
.
MainBlockHash
,
MainBlockHash
:
commitDone
.
MainBlockHash
,
MainBlockHeight
:
commitDone
.
MainBlockHeight
,
Title
:
commitDone
.
Title
,
Height
:
commitDone
.
Height
,
BlockHash
:
commitDone
.
BlockHash
,
TxResult
:
commitDone
.
TxResult
,
TxHashs
:
commitDone
.
TxHashs
,
CrossTxResult
:
commitDone
.
CrossTxResult
,
CrossTxHashs
:
commitDone
.
CrossTxHashs
,
Title
:
commitDone
.
Title
,
Height
:
commitDone
.
Height
,
BlockHash
:
commitDone
.
BlockHash
,
TxResult
:
commitDone
.
TxResult
,
TxHashs
:
commitDone
.
TxHashs
,
CrossTxResult
:
commitDone
.
CrossTxResult
,
CrossTxHashs
:
commitDone
.
CrossTxHashs
,
}
crossTxHashs
,
crossTxResult
,
err
:=
getCrossTxHashs
(
c
.
GetAPI
(),
status
)
...
...
@@ -108,11 +107,11 @@ func (c *Paracross) saveLocalParaTxsFork(commitDone *pt.ReceiptParacrossDone,isD
return
nil
,
err
}
return
c
.
udpateLocalParaTxs
(
commitDone
.
Title
,
commitDone
.
Height
,
crossTxHashs
,
crossTxResult
,
isDel
)
return
c
.
udpateLocalParaTxs
(
commitDone
.
Title
,
commitDone
.
Height
,
crossTxHashs
,
crossTxResult
,
isDel
)
}
func
(
c
*
Paracross
)
udpateLocalParaTxs
(
paraTitle
string
,
paraHeight
int64
,
crossTxHashs
[][]
byte
,
crossTxResult
[]
byte
,
isDel
bool
)
(
*
types
.
LocalDBSet
,
error
)
{
func
(
c
*
Paracross
)
udpateLocalParaTxs
(
paraTitle
string
,
paraHeight
int64
,
crossTxHashs
[][]
byte
,
crossTxResult
[]
byte
,
isDel
bool
)
(
*
types
.
LocalDBSet
,
error
)
{
var
set
types
.
LocalDBSet
if
len
(
crossTxHashs
)
==
0
{
...
...
@@ -139,7 +138,7 @@ func (c *Paracross) udpateLocalParaTxs(paraTitle string, paraHeight int64,crossT
return
nil
,
err
}
if
payload
.
Ty
==
pt
.
ParacrossActionAssetTransfer
{
kv
,
err
:=
c
.
updateLocalAssetTransfer
(
paraHeight
,
paraTx
.
Tx
,
success
,
isDel
)
kv
,
err
:=
c
.
updateLocalAssetTransfer
(
paraHeight
,
paraTx
.
Tx
,
success
,
isDel
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -267,7 +266,7 @@ func (c *Paracross) initLocalAssetWithdraw(paraHeight int64, tx *types.Transacti
return
&
types
.
KeyValue
{
Key
:
key
,
Value
:
types
.
Encode
(
&
asset
)},
nil
}
func
(
c
*
Paracross
)
updateLocalAssetTransfer
(
paraHeight
int64
,
tx
*
types
.
Transaction
,
success
,
isDel
bool
)
(
*
types
.
KeyValue
,
error
)
{
func
(
c
*
Paracross
)
updateLocalAssetTransfer
(
paraHeight
int64
,
tx
*
types
.
Transaction
,
success
,
isDel
bool
)
(
*
types
.
KeyValue
,
error
)
{
clog
.
Debug
(
"para execLocal"
,
"tx hash"
,
hex
.
EncodeToString
(
tx
.
Hash
()))
key
:=
calcLocalAssetKey
(
tx
.
Hash
())
...
...
plugin/dapp/paracross/executor/superaccount.go
View file @
748ba0cb
...
...
@@ -612,11 +612,11 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
}
receipt
=
mergeReceipt
(
receipt
,
r
)
if
a
.
exec
.
GetMainHeight
()
>
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
){
if
a
.
exec
.
GetMainHeight
()
>
getDappForkHeight
(
pt
.
ForkLoopCheckCommitTxDone
)
{
//node quit后,如果committx满足2/3目标,自动触发commitDone
r
,
err
=
a
.
loopCommitTxDone
(
config
.
Title
)
if
err
!=
nil
{
clog
.
Error
(
"unpdateNodeGroup.loopCommitTxDone"
,
"title"
,
title
,
"err"
,
err
.
Error
())
r
,
err
=
a
.
loopCommitTxDone
(
config
.
Title
)
if
err
!=
nil
{
clog
.
Error
(
"unpdateNodeGroup.loopCommitTxDone"
,
"title"
,
title
,
"err"
,
err
.
Error
())
}
receipt
=
mergeReceipt
(
receipt
,
r
)
}
...
...
@@ -673,9 +673,9 @@ func unpdateNodeGroup(db dbm.KV, title, addr string, add bool) (*types.Receipt,
}
}
}
err
=
db
.
Set
(
key
,
types
.
Encode
(
&
item
))
err
=
db
.
Set
(
key
,
types
.
Encode
(
&
item
))
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"unpdateNodeGroup set dbkey=%s"
,
key
)
return
nil
,
errors
.
Wrapf
(
err
,
"unpdateNodeGroup set dbkey=%s"
,
key
)
}
return
makeParaNodeGroupReceipt
(
title
,
&
copyItem
,
&
item
),
nil
}
...
...
plugin/dapp/paracross/types/paracross.pb.go
View file @
748ba0cb
...
...
@@ -28,6 +28,10 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type
ParacrossStatusDetails
struct
{
Addrs
[]
string
`protobuf:"bytes,1,rep,name=addrs,proto3" json:"addrs,omitempty"`
BlockHash
[][]
byte
`protobuf:"bytes,2,rep,name=blockHash,proto3" json:"blockHash,omitempty"`
TxResult
[][]
byte
`protobuf:"bytes,3,rep,name=txResult,proto3" json:"txResult,omitempty"`
TxHashs
[][]
byte
`protobuf:"bytes,4,rep,name=txHashs,proto3" json:"txHashs,omitempty"`
CrossTxResult
[][]
byte
`protobuf:"bytes,5,rep,name=crossTxResult,proto3" json:"crossTxResult,omitempty"`
CrossTxHashs
[][]
byte
`protobuf:"bytes,6,rep,name=crossTxHashs,proto3" json:"crossTxHashs,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -72,6 +76,34 @@ func (m *ParacrossStatusDetails) GetBlockHash() [][]byte {
return
nil
}
func
(
m
*
ParacrossStatusDetails
)
GetTxResult
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
TxResult
}
return
nil
}
func
(
m
*
ParacrossStatusDetails
)
GetTxHashs
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
TxHashs
}
return
nil
}
func
(
m
*
ParacrossStatusDetails
)
GetCrossTxResult
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
CrossTxResult
}
return
nil
}
func
(
m
*
ParacrossStatusDetails
)
GetCrossTxHashs
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
CrossTxHashs
}
return
nil
}
type
ParacrossHeightStatus
struct
{
// ing, done
Status
int32
`protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
...
...
@@ -243,6 +275,8 @@ type ParacrossStatus struct {
Title
string
`protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
Height
int64
`protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
BlockHash
[]
byte
`protobuf:"bytes,3,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
MainHeight
int64
`protobuf:"varint,4,opt,name=mainHeight,proto3" json:"mainHeight,omitempty"`
MainHash
[]
byte
`protobuf:"bytes,5,opt,name=mainHash,proto3" json:"mainHash,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -294,6 +328,20 @@ func (m *ParacrossStatus) GetBlockHash() []byte {
return
nil
}
func
(
m
*
ParacrossStatus
)
GetMainHeight
()
int64
{
if
m
!=
nil
{
return
m
.
MainHeight
}
return
0
}
func
(
m
*
ParacrossStatus
)
GetMainHash
()
[]
byte
{
if
m
!=
nil
{
return
m
.
MainHash
}
return
nil
}
type
ParacrossConsensusStatus
struct
{
Title
string
`protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
ChainHeight
int64
`protobuf:"varint,2,opt,name=chainHeight,proto3" json:"chainHeight,omitempty"`
...
...
@@ -2054,6 +2102,12 @@ type ReceiptParacrossDone struct {
StateHash
[]
byte
`protobuf:"bytes,6,opt,name=stateHash,proto3" json:"stateHash,omitempty"`
TxCounts
uint32
`protobuf:"varint,7,opt,name=txCounts,proto3" json:"txCounts,omitempty"`
TxResult
[]
byte
`protobuf:"bytes,8,opt,name=txResult,proto3" json:"txResult,omitempty"`
BlockHash
[]
byte
`protobuf:"bytes,9,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
TxHashs
[][]
byte
`protobuf:"bytes,10,rep,name=txHashs,proto3" json:"txHashs,omitempty"`
CrossTxResult
[]
byte
`protobuf:"bytes,11,opt,name=crossTxResult,proto3" json:"crossTxResult,omitempty"`
CrossTxHashs
[][]
byte
`protobuf:"bytes,12,rep,name=crossTxHashs,proto3" json:"crossTxHashs,omitempty"`
MainBlockHash
[]
byte
`protobuf:"bytes,13,opt,name=mainBlockHash,proto3" json:"mainBlockHash,omitempty"`
MainBlockHeight
int64
`protobuf:"varint,14,opt,name=mainBlockHeight,proto3" json:"mainBlockHeight,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -2140,6 +2194,48 @@ func (m *ReceiptParacrossDone) GetTxResult() []byte {
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetBlockHash
()
[]
byte
{
if
m
!=
nil
{
return
m
.
BlockHash
}
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetTxHashs
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
TxHashs
}
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetCrossTxResult
()
[]
byte
{
if
m
!=
nil
{
return
m
.
CrossTxResult
}
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetCrossTxHashs
()
[][]
byte
{
if
m
!=
nil
{
return
m
.
CrossTxHashs
}
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetMainBlockHash
()
[]
byte
{
if
m
!=
nil
{
return
m
.
MainBlockHash
}
return
nil
}
func
(
m
*
ReceiptParacrossDone
)
GetMainBlockHeight
()
int64
{
if
m
!=
nil
{
return
m
.
MainBlockHeight
}
return
0
}
type
ReceiptParacrossRecord
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Status
*
ParacrossNodeStatus
`protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
...
...
@@ -2620,121 +2716,125 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"paracross.proto"
,
fileDescriptor_6a397e38c9ea6747
)
}
var
fileDescriptor_6a397e38c9ea6747
=
[]
byte
{
// 1819 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xd4
,
0x59
,
0xcd
,
0x6f
,
0x24
,
0x47
,
0x15
,
0x9f
,
0x9e
,
0x4f
,
0xcf
,
0xb3
,
0x3d
,
0x6b
,
0x57
,
0xd6
,
0xde
,
0x61
,
0x48
,
0x36
,
0xa3
,
0x56
,
0x40
,
0x06
,
0x56
,
0x0e
,
0xf1
,
0x42
,
0x10
,
0x8a
,
0x10
,
0x6c
,
0x9c
,
0xc4
,
0x63
,
0x25
,
0x1b
,
0x45
,
0x6d
,
0x07
,
0x4e
,
0x48
,
0xf4
,
0xce
,
0x94
,
0x3d
,
0x2d
,
0x66
,
0xba
,
0x7b
,
0xbb
,
0x6a
,
0x12
,
0x9b
,
0x1b
,
0x02
,
0xee
,
0x9c
,
0x90
,
0x38
,
0xc3
,
0x99
,
0x3f
,
0x81
,
0x3f
,
0x80
,
0xdc
,
0xf8
,
0x0f
,
0xb8
,
0x71
,
0xe7
,
0xc0
,
0x15
,
0xbd
,
0x57
,
0x55
,
0xdd
,
0x55
,
0x35
,
0x1f
,
0x6b
,
0x2d
,
0x7b
,
0xc9
,
0xcd
,
0xef
,
0xd5
,
0xab
,
0xf7
,
0xf1
,
0xab
,
0xf7
,
0xd5
,
0x63
,
0xb8
,
0x97
,
0xc7
,
0x45
,
0x3c
,
0x2e
,
0x32
,
0x21
,
0x8e
,
0xf3
,
0x22
,
0x93
,
0x19
,
0x6b
,
0xc9
,
0xdb
,
0x9c
,
0x8b
,
0xc1
,
0xbe
,
0x2c
,
0xe2
,
0x54
,
0xc4
,
0x63
,
0x99
,
0x64
,
0xa9
,
0x3a
,
0x19
,
0xec
,
0x8c
,
0xb3
,
0xf9
,
0xbc
,
0xa4
,
0xf6
,
0x9e
,
0xcd
,
0xb2
,
0xf1
,
0xaf
,
0xc7
,
0xd3
,
0x38
,
0x31
,
0x9c
,
0x1e
,
0xbf
,
0xe1
,
0xe3
,
0x85
,
0xcc
,
0x0a
,
0x45
,
0x87
,
0x9f
,
0xc0
,
0xe1
,
0x67
,
0x46
,
0xf9
,
0x85
,
0x8c
,
0xe5
,
0x42
,
0x7c
,
0xc0
,
0x65
,
0x9c
,
0xcc
,
0x04
,
0xbb
,
0x0f
,
0xad
,
0x78
,
0x32
,
0x29
,
0x44
,
0x3f
,
0x18
,
0x36
,
0x8e
,
0xba
,
0x91
,
0x22
,
0xd8
,
0xeb
,
0xd0
,
0x25
,
0x9d
,
0xa3
,
0x58
,
0x4c
,
0xfb
,
0xf5
,
0x61
,
0xe3
,
0x68
,
0x27
,
0xaa
,
0x18
,
0xe1
,
0x3f
,
0x03
,
0x38
,
0x28
,
0xd5
,
0x8d
,
0x78
,
0x72
,
0x3d
,
0x95
,
0x4a
,
0x29
,
0x3b
,
0x84
,
0xb6
,
0xa0
,
0xbf
,
0xfa
,
0xc1
,
0x30
,
0x38
,
0x6a
,
0x45
,
0x9a
,
0x42
,
0x2b
,
0x32
,
0x91
,
0x33
,
0xde
,
0xaf
,
0x0f
,
0x03
,
0xb4
,
0x42
,
0x04
,
0x4a
,
0x4f
,
0xe9
,
0x76
,
0xbf
,
0x31
,
0x0c
,
0x8e
,
0x1a
,
0x91
,
0xa6
,
0xd8
,
0x8f
,
0xa0
,
0x33
,
0x51
,
0xee
,
0xf5
,
0x9b
,
0xc3
,
0xe0
,
0x68
,
0xfb
,
0xe4
,
0x8d
,
0x63
,
0x42
,
0xe2
,
0x78
,
0x75
,
0x0c
,
0x91
,
0x91
,
0x66
,
0x0f
,
0x01
,
0xe6
,
0x71
,
0x92
,
0x2a
,
0x97
,
0xfa
,
0x2d
,
0x52
,
0x6a
,
0x71
,
0xd8
,
0x00
,
0xb6
,
0x88
,
0xc2
,
0xa8
,
0xda
,
0xc3
,
0xe0
,
0x68
,
0x27
,
0x2a
,
0xe9
,
0xf0
,
0xdf
,
0x01
,
0xf4
,
0x57
,
0x06
,
0x15
,
0x89
,
0xfc
,
0x15
,
0xc5
,
0xe5
,
0xba
,
0xd7
,
0xdc
,
0xe8
,
0x5e
,
0x8b
,
0x14
,
0x96
,
0x34
,
0x1b
,
0xc2
,
0x36
,
0xbe
,
0x79
,
0x22
,
0x9f
,
0xd0
,
0x6b
,
0xb5
,
0xe9
,
0xb5
,
0x6c
,
0x16
,
0x3b
,
0x82
,
0x7b
,
0x8a
,
0x7c
,
0xbf
,
0x7c
,
0xb9
,
0x0e
,
0x49
,
0xf9
,
0xec
,
0xf0
,
0x97
,
0x70
,
0xcf
,
0x43
,
0xb2
,
0x0a
,
0x24
,
0x58
,
0x1d
,
0x48
,
0xdd
,
0x09
,
0xc4
,
0x49
,
0x8f
,
0x06
,
0x01
,
0x69
,
0xa5
,
0xc7
,
0x5f
,
0x6d
,
0x24
,
0x4f
,
0xb3
,
0x54
,
0xf0
,
0x54
,
0x2c
,
0x36
,
0x1b
,
0xc2
,
0xe8
,
0xa6
,
0x15
,
0x34
,
0xca
,
0x9a
,
0xcd
,
0x62
,
0x6f
,
0xc1
,
0xee
,
0x58
,
0xa9
,
0x1a
,
0xd9
,
0xd0
,
0xba
,
0x4c
,
0xf6
,
0x5d
,
0xd8
,
0xd3
,
0x8c
,
0x0a
,
0x84
,
0x26
,
0x19
,
0x5a
,
0xe2
,
0x87
,
0x7f
,
0x0a
,
0x80
,
0xa1
,
0x9b
,
0x9f
,
0x66
,
0x13
,
0x8e
,
0x08
,
0x9e
,
0x66
,
0xe9
,
0x55
,
0x72
,
0xbd
,
0xc6
,
0xc1
,
0x1e
,
0xd4
,
0xb3
,
0x9c
,
0xfc
,
0xda
,
0x8d
,
0xea
,
0x59
,
0x8e
,
0x74
,
0x32
,
0x21
,
0x1f
,
0xba
,
0x51
,
0x3d
,
0x99
,
0x30
,
0x06
,
0x4d
,
0xac
,
0x1c
,
0x6d
,
0x8c
,
0xfe
,
0x46
,
0x4d
,
0x5f
,
0xc4
,
0xb3
,
0x05
,
0xa7
,
0xb7
,
0xdc
,
0x8d
,
0x14
,
0xa1
,
0x1e
,
0x32
,
0x49
,
0xc5
,
0x47
,
0x45
,
0xf6
,
0x1b
,
0x9e
,
0x52
,
0x1a
,
0x62
,
0xa8
,
0x15
,
0x2b
,
0xfc
,
0x59
,
0xe5
,
0xd7
,
0xcf
,
0x33
,
0xc9
,
0x55
,
0x96
,
0xaf
,
0x29
,
0x54
,
0xb4
,
0x91
,
0x49
,
0x2e
,
0xa8
,
0x48
,
0xbb
,
0x91
,
0x22
,
0xc2
,
0x3f
,
0x06
,
0x70
,
0xdf
,
0x0e
,
0xed
,
0x7c
,
0xa2
,
0xd1
,
0x37
,
0x6e
,
0x06
,
0x96
,
0x9b
,
0x0f
,
0x01
,
0xf2
,
0x22
,
0xcb
,
0x33
,
0x11
,
0xcf
,
0xce
,
0x27
,
0x3a
,
0x91
,
0x2d
,
0x0e
,
0x26
,
0xc1
,
0xf3
,
0x45
,
0x22
,
0xcf
,
0x4d
,
0xb8
,
0x9a
,
0xb2
,
0x6a
,
0xa2
,
0xb9
,
0xba
,
0x26
,
0x5a
,
0x16
,
0x80
,
0xe1
,
0x7f
,
0x03
,
0xd8
,
0x33
,
0x2e
,
0x95
,
0xee
,
0x28
,
0x14
,
0x83
,
0x12
,
0xc5
,
0x4a
,
0x65
,
0x7d
,
0xb5
,
0xca
,
0x86
,
0xfd
,
0x26
,
0x0f
,
0x01
,
0x64
,
0x5c
,
0x5c
,
0x73
,
0xca
,
0x7f
,
0x8d
,
0xbc
,
0xc5
,
0xf1
,
0x91
,
0x6e
,
0x2d
,
0x21
,
0xcd
,
0xde
,
0x36
,
0xe8
,
0xb5
,
0xa9
,
0xcd
,
0x7c
,
0xc3
,
0x6a
,
0x33
,
0x2e
,
0xfa
,
0x1a
,
0x58
,
0xac
,
0xd0
,
0xab
,
0x22
,
0x9b
,
0x93
,
0xc1
,
0x8e
,
0xaa
,
0x50
,
0x43
,
0x5b
,
0xc5
,
0xb2
,
0x65
,
0x17
,
0x4b
,
0xf8
,
0xf7
,
0x00
,
0x0e
,
0x22
,
0x3e
,
0xe6
,
0x49
,
0x2e
,
0x8d
,
0x62
,
0x9d
,
0x6a
,
0xab
,
0x5e
,
0xe3
,
0x1d
,
0x68
,
0x8f
,
0xe9
,
0x94
,
0x20
,
0x58
,
0xf6
,
0xa9
,
0xca
,
0xd4
,
0x48
,
0x0b
,
0xb2
,
0xef
,
0x41
,
0x33
,
0x2f
,
0xf8
,
0x17
,
0x04
,
0xce
,
0xf6
,
0xc9
,
0x03
,
0xef
,
0x82
,
0x01
,
0x3b
,
0x22
,
0x21
,
0xf6
,
0x0e
,
0x74
,
0xc6
,
0x8b
,
0xa2
,
0xe0
,
0xa9
,
0xd4
,
0xbd
,
0x75
,
0xad
,
0xbc
,
0x91
,
0x0b
,
0xff
,
0x12
,
0xc0
,
0x1b
,
0x5e
,
0x00
,
0xe8
,
0x05
,
0x8a
,
0x7d
,
0x9e
,
0x4f
,
0x62
,
0xc9
,
0x1d
,
0x58
,
0x02
,
0x0f
,
0x96
,
0xb7
,
0xb5
,
0x77
,
0x2a
,
0x9c
,
0x6f
,
0xae
,
0x08
,
0xc7
,
0xf3
,
0xf0
,
0x87
,
0x95
,
0x87
,
0x8d
,
0x17
,
0xdf
,
0x29
,
0xbd
,
0xfc
,
0x4f
,
0x00
,
0x0f
,
0x3c
,
0x2f
,
0xe9
,
0xfd
,
0xb2
,
0x94
,
0x2f
,
0xe5
,
0xd9
,
0xea
,
0xb6
,
0xed
,
0xe6
,
0x53
,
0x63
,
0x29
,
0x9f
,
0xf0
,
0x3c
,
0x93
,
0xf1
,
0x0c
,
0x55
,
0x9b
,
0xa4
,
0xb7
,
0x38
,
0xd8
,
0x15
,
0x89
,
0x42
,
0xb3
,
0x94
,
0x6d
,
0xad
,
0xa8
,
0x62
,
0x50
,
0x73
,
0xcf
,
0x84
,
0xa4
,
0xc3
,
0x36
,
0x1d
,
0x96
,
0x34
,
0xeb
,
0x43
,
0x07
,
0xf3
,
0x2b
,
0x12
,
0x52
,
0x67
,
0x95
,
0x21
,
0xd1
,
0xe6
,
0x24
,
0x4b
,
0xb9
,
0x0a
,
0x96
,
0x12
,
0xab
,
0x15
,
0x59
,
0x9c
,
0xf0
,
0x77
,
0x01
,
0xbc
,
0x66
,
0xc2
,
0x3d
,
0x2b
,
0xb2
,
0x45
,
0xfe
,
0x7f
,
0x75
,
0xb1
,
0xb2
,
0xc7
,
0xa8
,
0x62
,
0xd2
,
0x3d
,
0xe6
,
0x85
,
0x75
,
0x14
,
0x7e
,
0xe5
,
0x7b
,
0xf1
,
0x4a
,
0xea
,
0x7b
,
0x08
,
0xdb
,
0x15
,
0xfa
,
0xc6
,
0x27
,
0x9b
,
0x75
,
0x87
,
0x0a
,
0xb7
,
0x33
,
0xb3
,
0xbd
,
0xb6
,
0x60
,
0x3b
,
0x4e
,
0xc1
,
0xfe
,
0x23
,
0x80
,
0x81
,
0x97
,
0x49
,
0x36
,
0xb4
,
0xab
,
0xaa
,
0xf6
,
0xc4
,
0xab
,
0xda
,
0x81
,
0x97
,
0xb2
,
0xd6
,
0xfd
,
0xb2
,
0x6c
,
0x8f
,
0x9d
,
0xb2
,
0x5d
,
0x79
,
0xc3
,
0xa9
,
0x8b
,
0x1f
,
0xf8
,
0x95
,
0xbb
,
0xe9
,
0x4a
,
0x59
,
0x16
,
0x53
,
0xb8
,
0x1f
,
0xf1
,
0xe7
,
0xe5
,
0x38
,
0xa6
,
0x0a
,
0x4f
,
0xaf
,
0xb2
,
0xf5
,
0x09
,
0x92
,
0x98
,
0x19
,
0x60
,
0x8f
,
0xb5
,
0x86
,
0x15
,
0xeb
,
0x9a
,
0xbe
,
0x1f
,
0x9e
,
0xc2
,
0x61
,
0xc4
,
0x45
,
0xee
,
0x98
,
0x52
,
0xcf
,
0xf4
,
0x1d
,
0x68
,
0x24
,
0x13
,
0x35
,
0xb8
,
0x36
,
0xf4
,
0x1b
,
0x94
,
0x09
,
0xcf
,
0xb0
,
0x88
,
0x3d
,
0x25
,
0x14
,
0x97
,
0x60
,
0x8f
,
0x6c
,
0x2d
,
0x9b
,
0x62
,
0x27
,
0x45
,
0x7f
,
0x08
,
0x60
,
0x1f
,
0x0f
,
0x69
,
0xde
,
0x9f
,
0x3c
,
0x8d
,
0x93
,
0xf4
,
0x69
,
0x9c
,
0x5b
,
0x4f
,
0x1e
,
0xac
,
0x5f
,
0x68
,
0x54
,
0xf8
,
0x15
,
0xc3
,
0xdb
,
0xdb
,
0x1a
,
0x1b
,
0xf7
,
0xb6
,
0xa6
,
0xbb
,
0xb7
,
0x85
,
0x1f
,
0xa8
,
0x61
,
0x5e
,
0xb9
,
0x41
,
0xe8
,
0x1f
,
0x43
,
0x2b
,
0x91
,
0x7c
,
0x6e
,
0xa2
,
0xe9
,
0x5b
,
0xd1
,
0x38
,
0x0e
,
0x47
,
0x4a
,
0x2c
,
0xfc
,
0x57
,
0x43
,
0x15
,
0x58
,
0x89
,
0x89
,
0x2e
,
0xb0
,
0xb7
,
0x60
,
0x17
,
0x2d
,
0x55
,
0xcb
,
0x4e
,
0x40
,
0xcb
,
0x98
,
0xcb
,
0xc4
,
0xcd
,
0xb0
,
0x62
,
0xd8
,
0x1b
,
0x96
,
0xcf
,
0x5e
,
0x53
,
0x88
,
0x15
,
0x6a
,
0x4d
,
0x07
,
0xb5
,
0x10
,
0x76
,
0xf2
,
0x82
,
0x57
,
0xc6
,
0x5b
,
0x64
,
0xdc
,
0xe1
,
0xb9
,
0xc8
,
0xb6
,
0xbd
,
0x55
,
0x51
,
0x6b
,
0xc0
,
0x60
,
0xb8
,
0x5e
,
0x58
,
0x8d
,
0x86
,
0x92
,
0x87
,
0x1a
,
0x44
,
0x29
,
0xb0
,
0xa5
,
0x34
,
0x94
,
0x0c
,
0xc4
,
0x5e
,
0xde
,
0x9c
,
0x66
,
0x8b
,
0x54
,
0x8a
,
0x7e
,
0x97
,
0x1a
,
0x5b
,
0x49
,
0xab
,
0xb3
,
0x88
,
0x8b
,
0xc5
,
0x4c
,
0xf6
,
0x41
,
0xad
,
0xfb
,
0x86
,
0xc6
,
0x96
,
0x2b
,
0x6f
,
0x50
,
0x83
,
0xe8
,
0x6f
,
0xd3
,
0xf7
,
0x8d
,
0x21
,
0x69
,
0xd3
,
0x44
,
0x98
,
0x2f
,
0xcd
,
0xd5
,
0x1d
,
0x85
,
0xa9
,
0xc3
,
0x44
,
0xcf
,
0x35
,
0x43
,
0x29
,
0xd9
,
0x25
,
0x25
,
0x0e
,
0x8f
,
0x3d
,
0x82
,
0xfd
,
0x34
,
0x4b
,
0x4f
,
0x69
,
0xfb
,
0xbe
,
0x34
,
0x4e
,
0xf6
,
0xc8
,
0xc9
,
0xe5
,
0x83
,
0xf0
,
0x63
,
0xeb
,
0xa3
,
0x4a
,
0x1d
,
0x3d
,
0xa1
,
0x4f
,
0x3e
,
0x6c
,
0x2e
,
0xd6
,
0xc7
,
0x87
,
0x9b
,
0xfb
,
0x5e
,
0x42
,
0x94
,
0xc5
,
0x28
,
0xd5
,
0x02
,
0x48
,
0xc7
,
0x4f
,
0x93
,
0x94
,
0x17
,
0x2f
,
0xaf
,
0x0b
,
0xd3
,
0x27
,
0x11
,
0x17
,
0x7c
,
0x76
,
0x55
,
0xee
,
0xf2
,
0x94
,
0x3e
,
0x5b
,
0x91
,
0xcf
,
0x0e
,
0xbf
,
0x6a
,
0x5a
,
0x5f
,
0x16
,
0xda
,
0xe2
,
0xbb
,
0xd8
,
0x1a
,
0x31
,
0x1a
,
0x6d
,
0xf1
,
0x75
,
0xdf
,
0xa2
,
0x1d
,
0xeb
,
0xa8
,
0x16
,
0x69
,
0x69
,
0xf6
,
0x18
,
0x5a
,
0x73
,
0x74
,
0x7c
,
0xc5
,
0x12
,
0xe0
,
0x47
,
0x35
,
0xaa
,
0x45
,
0x4a
,
0x96
,
0xfd
,
0x04
,
0x76
,
0x63
,
0x21
,
0xb8
,
0xbc
,
0xc4
,
0x2f
,
0xe6
,
0x2b
,
0x5e
,
0xe8
,
0x4e
,
0x79
,
0xa0
,
0x2f
,
0x3f
,
0xc1
,
0x33
,
0x61
,
0x0e
,
0x47
,
0xb5
,
0xc8
,
0x95
,
0x2e
,
0xaf
,
0xff
,
0x22
,
0x91
,
0xd3
,
0x49
,
0x11
,
0x7f
,
0x49
,
0x19
,
0xed
,
0x5f
,
0x37
,
0x87
,
0xe5
,
0x75
,
0xc3
,
0x60
,
0x8f
,
0x61
,
0x4b
,
0x1a
,
0xc3
,
0xed
,
0xcd
,
0x86
,
0x4b
,
0x41
,
0xbc
,
0xf4
,
0xa5
,
0x31
,
0xd7
,
0xd9
,
0x6c
,
0xae
,
0x14
,
0x64
,
0x1f
,
0x42
,
0xcf
,
0x28
,
0xb8
,
0xcc
,
0x3e
,
0xbc
,
0xe1
,
0x63
,
0x2a
,
0x8c
,
0x0a
,
0x25
,
0xd7
,
0x9e
,
0x12
,
0x19
,
0xd5
,
0x22
,
0xef
,
0x12
,
0x7b
,
0x0f
,
0x20
,
0x2d
,
0xd7
,
0x51
,
0x2a
,
0x9f
,
0x4d
,
0x0b
,
0xe7
,
0xa8
,
0x16
,
0x59
,
0xe2
,
0xec
,
0x23
,
0xb8
,
0x97
,
0xba
,
0xa3
,
0x8d
,
0x8a
,
0x6c
,
0xe3
,
0xf0
,
0x1b
,
0xd5
,
0x22
,
0xff
,
0x12
,
0xce
,
0x1c
,
0x79
,
0xab
,
0x17
,
0x82
,
0xba
,
0xbc
,
0x7d
,
0xbf
,
0xa3
,
0x3f
,
0x9b
,
0x70
,
0x0e
,
0x1f
,
0x5a
,
0x73
,
0xd8
,
0x4a
,
0x96
,
0x75
,
0x33
,
0xd8
,
0x5a
,
0x2e
,
0xee
,
0x96
,
0xda
,
0xdf
,
0x77
,
0x66
,
0xf0
,
0x52
,
0x6a
,
0x3a
,
0x3f
,
0x03
,
0xa8
,
0x29
,
0xfc
,
0xae
,
0x3f
,
0x85
,
0x37
,
0x5f
,
0x2a
,
0xe7
,
0xf0
,
0xc7
,
0xce
,
0x47
,
0x40
,
0x95
,
0xc1
,
0x2f
,
0x55
,
0xdd
,
0xbf
,
0xaf
,
0xe3
,
0x54
,
0x77
,
0xb5
,
0xd1
,
0xa2
,
0xeb
,
0xae
,
0xa8
,
0xc1
,
0xd2
,
0x8a
,
0x8a
,
0x2b
,
0x15
,
0x52
,
0x0a
,
0x46
,
0x0d
,
0xba
,
0xcd
,
0x62
,
0xdf
,
0x86
,
0x1e
,
0xae
,
0xa5
,
0x17
,
0xf1
,
0x9c
,
0x6b
,
0xa1
,
0x06
,
0x09
,
0x79
,
0xdc
,
0x6a
,
0x52
,
0x34
,
0x57
,
0x4f
,
0x8a
,
0x96
,
0x3f
,
0x5f
,
0xab
,
0x1e
,
0xde
,
0xde
,
0xd4
,
0xc3
,
0x3b
,
0x1b
,
0x7a
,
0xf8
,
0x96
,
0xdb
,
0xc3
,
0xc3
,
0x5f
,
0x2d
,
0xe7
,
0x47
,
0xc4
,
0xc7
,
0x59
,
0x31
,
0x79
,
0x55
,
0xf9
,
0x11
,
0x7e
,
0x0b
,
0xb6
,
0xcb
,
0xe3
,
0xcb
,
0x1b
,
0x0c
,
0x4f
,
0x4d
,
0x09
,
0xad
,
0x58
,
0x53
,
0x6a
,
0x6b
,
0xa9
,
0x96
,
0xac
,
0x4b
,
0xc4
,
0xc2
,
0x9f
,
0xa8
,
0x77
,
0xf9
,
0x61
,
0x25
,
0xfc
,
0x6d
,
0x1d
,
0xf6
,
0x9d
,
0xfd
,
0xe7
,
0xeb
,
0xf5
,
0xaa
,
0xdd
,
0x97
,
0x7d
,
0xd5
,
0xae
,
0xf5
,
0xaa
,
0x67
,
0xf0
,
0x9a
,
0x03
,
0x01
,
0xa1
,
0x89
,
0xa5
,
0xda
,
0x26
,
0x6f
,
0xfc
,
0x9d
,
0x69
,
0x09
,
0xae
,
0x48
,
0xcb
,
0xa9
,
0x92
,
0xf3
,
0x5f
,
0x05
,
0x3d
,
0x5b
,
0xfd
,
0x26
,
0x4b
,
0x3b
,
0xa0
,
0xf3
,
0xa3
,
0xd6
,
0xdf
,
0xea
,
0xd0
,
0xab
,
0x46
,
0x1b
,
0xb6
,
0x57
,
0x4c
,
0x32
,
0xfc
,
0x96
,
0x30
,
0x49
,
0x86
,
0x7f
,
0x53
,
0x33
,
0xcb
,
0xcc
,
0x02
,
0x2d
,
0x33
,
0x7c
,
0xba
,
0xa4
,
0x6c
,
0xe1
,
0x04
,
0xfa
,
0x56
,
0x64
,
0x71
,
0xac
,
0x8c
,
0x6a
,
0x92
,
0x45
,
0x4d
,
0x21
,
0x3f
,
0x9e
,
0x23
,
0x56
,
0x06
,
0x72
,
0x45
,
0xa1
,
0x4d
,
0x8e
,
0xed
,
0x5e
,
0xa1
,
0x4d
,
0x7f
,
0xd3
,
0x42
,
0x7e
,
0x3b
,
0x7f
,
0x96
,
0xcd
,
0xf4
,
0xc7
,
0xa3
,
0xa6
,
0xac
,
0x67
,
0x03
,
0xe7
,
0xd9
,
0xe8
,
0x47
,
0x32
,
0x7c
,
0x6e
,
0x44
,
0x4b
,
0xef
,
0x83
,
0x07
,
0x24
,
0xb1
,
0xc4
,
0xa7
,
0x1f
,
0x87
,
0xe2
,
0x22
,
0xd6
,
0x52
,
0x87
,
0x6a
,
0xf5
,
0xad
,
0x38
,
0xb8
,
0x46
,
0x89
,
0xc5
,
0x78
,
0xcc
,
0x85
,
0xe8
,
0x3f
,
0xa0
,
0xe0
,
0x0c
,
0x79
,
0xf2
,
0xe7
,
0x06
,
0x74
,
0xcb
,
0x1f
,
0xb4
,
0xd9
,
0x4f
,
0x61
,
0xeb
,
0x8c
,
0x4b
,
0x7a
,
0x02
,
0xb6
,
0x57
,
0xbe
,
0xdc
,
0xf3
,
0x0b
,
0x59
,
0x24
,
0xe9
,
0xf5
,
0xe0
,
0xcd
,
0xe5
,
0x9d
,
0xc0
,
0xf9
,
0xd5
,
0x30
,
0xac
,
0xb1
,
0x1f
,
0x03
,
0x7c
,
0x92
,
0x08
,
0xa9
,
0x93
,
0x61
,
0xb7
,
0x52
,
0xf1
,
0x69
,
0x32
,
0x1b
,
0x0c
,
0x56
,
0xe5
,
0x82
,
0x12
,
0x0d
,
0x6b
,
0xec
,
0x33
,
0x60
,
0x67
,
0x9c
,
0x82
,
0xb2
,
0x0b
,
0xf3
,
0x61
,
0xa5
,
0x62
,
0x55
,
0xe1
,
0x0e
,
0xd6
,
0xe6
,
0x57
,
0x58
,
0x63
,
0x17
,
0xd0
,
0x33
,
0xd1
,
0xdc
,
0x51
,
0xdb
,
0x9b
,
0x1b
,
0xa7
,
0x84
,
0xc8
,
0xc3
,
0x1a
,
0x7b
,
0x0f
,
0xf6
,
0xce
,
0xb8
,
0xa4
,
0xd4
,
0x2a
,
0xb7
,
0xcc
,
0x5e
,
0xa5
,
0x16
,
0xd3
,
0x62
,
0x70
,
0xe0
,
0xab
,
0x21
,
0xf1
,
0xb0
,
0xc6
,
0x1e
,
0x41
,
0xfb
,
0x5c
,
0x5c
,
0xdc
,
0xa6
,
0x63
,
0x1f
,
0x9a
,
0x7d
,
0x4d
,
0x9e
,
0x8b
,
0xd3
,
0x78
,
0x71
,
0x3d
,
0x95
,
0x9f
,
0xe7
,
0x61
,
0xed
,
0x59
,
0x9b
,
0xfe
,
0x2b
,
0xf0
,
0xf8
,
0x7f
,
0x01
,
0x00
,
0x00
,
0xff
,
0xff
,
0xed
,
0xd7
,
0xdd
,
0x61
,
0x72
,
0x18
,
0x00
,
0x00
,
// 1878 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xd4
,
0x59
,
0x4f
,
0x73
,
0x23
,
0x47
,
0x15
,
0xd7
,
0xe8
,
0x9f
,
0xad
,
0x67
,
0x5b
,
0x6b
,
0x77
,
0xd6
,
0x5e
,
0x21
,
0x92
,
0x8d
,
0x6a
,
0x2a
,
0x50
,
0x06
,
0xb6
,
0x1c
,
0xe2
,
0x85
,
0x50
,
0x54
,
0x8a
,
0x82
,
0x8d
,
0x93
,
0x58
,
0xae
,
0xb0
,
0xa9
,
0xd4
,
0xd8
,
0x81
,
0x2b
,
0xb3
,
0x52
,
0xdb
,
0x9e
,
0x42
,
0x9a
,
0x99
,
0x9d
,
0x6e
,
0x25
,
0x36
,
0x37
,
0x8a
,
0xe2
,
0xce
,
0x89
,
0xaa
,
0x9c
,
0xe1
,
0xcc
,
0x47
,
0xe0
,
0x03
,
0x10
,
0x4e
,
0x1c
,
0xb8
,
0x73
,
0xe3
,
0xce
,
0x81
,
0x2b
,
0xf5
,
0x5e
,
0x77
,
0xcf
,
0x74
,
0xb7
,
0x46
,
0x5a
,
0xb3
,
0xec
,
0x85
,
0x9b
,
0xde
,
0xeb
,
0xd7
,
0xaf
,
0xdf
,
0x7b
,
0xfd
,
0x7b
,
0x7f
,
0x7a
,
0x04
,
0xf7
,
0xf2
,
0xb8
,
0x88
,
0x27
,
0x45
,
0x26
,
0xc4
,
0x51
,
0x5e
,
0x64
,
0x32
,
0x63
,
0x1d
,
0x79
,
0x9b
,
0x73
,
0x31
,
0xdc
,
0x93
,
0x45
,
0x9c
,
0x8a
,
0x78
,
0x22
,
0x93
,
0x2c
,
0x55
,
0x2b
,
0xc3
,
0xed
,
0x49
,
0x36
,
0x9f
,
0x97
,
0xd4
,
0xee
,
0xb3
,
0x59
,
0x36
,
0xf9
,
0xe5
,
0xe4
,
0x3a
,
0x4e
,
0x0c
,
0xa7
,
0xcf
,
0x6f
,
0xf8
,
0x64
,
0x21
,
0xb3
,
0x42
,
0xd1
,
0xe1
,
0x5f
,
0x03
,
0x38
,
0xf8
,
0xd4
,
0x68
,
0x3f
,
0x97
,
0xb1
,
0x5c
,
0x88
,
0x0f
,
0xb8
,
0x8c
,
0x93
,
0x99
,
0x60
,
0xf7
,
0xa1
,
0x13
,
0x4f
,
0xa7
,
0x85
,
0x18
,
0x04
,
0xa3
,
0xd6
,
0x61
,
0x2f
,
0x52
,
0x04
,
0x7b
,
0x1d
,
0x7a
,
0xa4
,
0x74
,
0x1c
,
0x8b
,
0xeb
,
0x41
,
0x73
,
0xd4
,
0x3a
,
0xdc
,
0x8e
,
0x2a
,
0x06
,
0x1b
,
0xc2
,
0xa6
,
0xbc
,
0x89
,
0xb8
,
0x58
,
0xcc
,
0xe4
,
0xa0
,
0x45
,
0x8b
,
0x25
,
0xcd
,
0x06
,
0xb0
,
0x21
,
0x6f
,
0x50
,
0x4a
,
0x0c
,
0xda
,
0xb4
,
0x64
,
0x48
,
0xf6
,
0x16
,
0xec
,
0xd0
,
0xf9
,
0x17
,
0x66
,
0x6b
,
0x87
,
0xd6
,
0x5d
,
0x26
,
0x0b
,
0x61
,
0x5b
,
0x33
,
0x94
,
0x92
,
0x2e
,
0x09
,
0x39
,
0xbc
,
0xf0
,
0x6f
,
0x01
,
0xec
,
0x97
,
0xee
,
0x8c
,
0x79
,
0x72
,
0x75
,
0x2d
,
0x95
,
0x53
,
0xec
,
0x00
,
0xba
,
0x82
,
0x7e
,
0x0d
,
0x82
,
0x51
,
0x70
,
0xd8
,
0x89
,
0x34
,
0x85
,
0x5e
,
0xca
,
0x44
,
0xce
,
0xf8
,
0xa0
,
0x39
,
0x0a
,
0xd0
,
0x4b
,
0x22
,
0x50
,
0xfa
,
0x9a
,
0x76
,
0x0f
,
0x5a
,
0xa3
,
0xe0
,
0xb0
,
0x15
,
0x69
,
0x8a
,
0xfd
,
0x00
,
0x36
,
0xa6
,
0x2a
,
0x3c
,
0x83
,
0xf6
,
0x28
,
0x38
,
0xdc
,
0x3a
,
0x7e
,
0xe3
,
0x88
,
0xae
,
0xe2
,
0xa8
,
0x3e
,
0x86
,
0x91
,
0x91
,
0x66
,
0x0f
,
0x01
,
0xe6
,
0x71
,
0x92
,
0x2a
,
0x93
,
0x06
,
0x1d
,
0x52
,
0x6a
,
0x71
,
0x30
,
0x70
,
0x44
,
0x61
,
0x54
,
0xbb
,
0xa3
,
0x00
,
0x03
,
0x67
,
0xe8
,
0xf0
,
0x9f
,
0x01
,
0x0c
,
0x6a
,
0x9d
,
0x8a
,
0x44
,
0xfe
,
0x8a
,
0xfc
,
0x72
,
0xcd
,
0x6b
,
0xaf
,
0x35
,
0xaf
,
0x43
,
0x0a
,
0x4b
,
0x9a
,
0x8d
,
0x60
,
0x0b
,
0x41
,
0x97
,
0xc8
,
0x27
,
0x84
,
0x96
,
0x2e
,
0xa1
,
0xc5
,
0x66
,
0xb1
,
0x43
,
0xb8
,
0xa7
,
0xc8
,
0xf7
,
0x4b
,
0xe4
,
0x6c
,
0x90
,
0x94
,
0xcf
,
0x0e
,
0xbf
,
0x0c
,
0xe0
,
0x9e
,
0x17
,
0xca
,
0xca
,
0x93
,
0xa0
,
0xde
,
0x93
,
0xa6
,
0xe3
,
0x89
,
0x83
,
0xcf
,
0x16
,
0x45
,
0xd2
,
0xc2
,
0xe7
,
0x7f
,
0xeb
,
0xa7
,
0x7d
,
0x0d
,
0x7f
,
0xb4
,
0xaf
,
0xe1
,
0x24
,
0x4b
,
0x05
,
0x4f
,
0xc5
,
0x62
,
0xbd
,
0x91
,
0x18
,
0x9a
,
0xeb
,
0xea
,
0x3c
,
0x65
,
0xa9
,
0xcd
,
0x22
,
0xe8
,
0x2b
,
0x55
,
0x63
,
0xfb
,
0x5e
,
0x5c
,
0x26
,
0xfb
,
0x36
,
0xec
,
0x6a
,
0x46
,
0x15
,
0xc1
,
0x36
,
0x1d
,
0xb4
,
0xc4
,
0x0f
,
0x7f
,
0x1f
,
0x00
,
0x43
,
0x33
,
0x3f
,
0xc9
,
0xa6
,
0x1c
,
0xc3
,
0x7f
,
0x92
,
0xa5
,
0x97
,
0xc9
,
0xd5
,
0x0a
,
0x03
,
0xfb
,
0xd0
,
0xcc
,
0x72
,
0xb2
,
0x6b
,
0x27
,
0x6a
,
0x66
,
0x39
,
0xd2
,
0xc9
,
0x94
,
0x6c
,
0xe8
,
0x45
,
0xcd
,
0x64
,
0xca
,
0x18
,
0xb4
,
0x31
,
0xed
,
0xf5
,
0x61
,
0xf4
,
0x1b
,
0x35
,
0x7d
,
0x1e
,
0xcf
,
0x16
,
0x9c
,
0x02
,
0xb4
,
0x13
,
0x29
,
0x42
,
0xa1
,
0x20
,
0x49
,
0xc5
,
0x47
,
0x45
,
0xf6
,
0x2b
,
0x9e
,
0x12
,
0x86
,
0xd1
,
0xd5
,
0x8a
,
0x15
,
0xfe
,
0xa4
,
0xb2
,
0xeb
,
0x67
,
0x99
,
0xe4
,
0x2a
,
0x45
,
0x56
,
0x54
,
0x19
,
0x3c
,
0x23
,
0x93
,
0x5c
,
0x50
,
0x85
,
0xe9
,
0x45
,
0x8a
,
0x08
,
0x7f
,
0x17
,
0xc0
,
0x7d
,
0xdb
,
0xb5
,
0xb3
,
0xa9
,
0x8e
,
0xbe
,
0x31
,
0x33
,
0xb0
,
0xcc
,
0x7c
,
0x08
,
0x90
,
0x17
,
0x59
,
0x9e
,
0x89
,
0x78
,
0x76
,
0x36
,
0xd5
,
0x59
,
0x60
,
0x71
,
0x10
,
0x40
,
0xcf
,
0x17
,
0x89
,
0x3c
,
0x33
,
0xee
,
0x6a
,
0xca
,
0x4a
,
0xa8
,
0x76
,
0x7d
,
0x42
,
0x75
,
0xac
,
0x00
,
0x86
,
0xff
,
0x0e
,
0x60
,
0xd7
,
0x98
,
0x54
,
0x9a
,
0xa3
,
0xa2
,
0x18
,
0x94
,
0x51
,
0xac
,
0x54
,
0x36
,
0xeb
,
0x55
,
0xb6
,
0xec
,
0x3b
,
0x79
,
0x08
,
0x20
,
0xe3
,
0xe2
,
0x8a
,
0x53
,
0xf2
,
0xe8
,
0xc8
,
0x5b
,
0x1c
,
0x3f
,
0xd2
,
0x9d
,
0xa5
,
0x48
,
0xb3
,
0xb7
,
0x4d
,
0xf4
,
0xba
,
0x54
,
0xa3
,
0xbe
,
0x66
,
0xd5
,
0x28
,
0x37
,
0xfa
,
0x3a
,
0xb0
,
0x08
,
0xfb
,
0xcb
,
0x22
,
0x9b
,
0xd3
,
0x81
,
0x1b
,
0x2a
,
0xbd
,
0x0d
,
0x6d
,
0x25
,
0xda
,
0xa6
,
0x9d
,
0x68
,
0xe1
,
0x9f
,
0x03
,
0xd8
,
0x8f
,
0xf8
,
0x84
,
0x27
,
0xb9
,
0x34
,
0x8a
,
0x35
,
0xd4
,
0xea
,
0x6e
,
0xe3
,
0x1d
,
0xe8
,
0x4e
,
0x68
,
0x95
,
0x42
,
0xb0
,
0x6c
,
0x53
,
0x85
,
0xd4
,
0x48
,
0x0b
,
0xb2
,
0xef
,
0x40
,
0x3b
,
0x2f
,
0xf8
,
0xe7
,
0x14
,
0x9c
,
0xad
,
0xe3
,
0x07
,
0xde
,
0x06
,
0x13
,
0xec
,
0x88
,
0x84
,
0xd8
,
0x3b
,
0xb0
,
0x31
,
0x59
,
0x14
,
0x05
,
0x4f
,
0xa5
,
0x2e
,
0xcc
,
0x2b
,
0xe5
,
0x8d
,
0x5c
,
0xf8
,
0x87
,
0x00
,
0xde
,
0xf0
,
0x1c
,
0x40
,
0x2b
,
0x50
,
0xec
,
0xb3
,
0x7c
,
0x1a
,
0x4b
,
0xee
,
0x84
,
0x25
,
0xf0
,
0xc2
,
0xf2
,
0xb6
,
0xb6
,
0x4e
,
0xb9
,
0xf3
,
0xf5
,
0x1a
,
0x77
,
0x3c
,
0x0b
,
0xbf
,
0x5f
,
0x59
,
0xd8
,
0x7a
,
0xf1
,
0x9e
,
0xd2
,
0xca
,
0x7f
,
0x05
,
0xf0
,
0xc0
,
0xb3
,
0x92
,
0xee
,
0x2f
,
0x4b
,
0xf9
,
0x12
,
0xce
,
0xea
,
0x6b
,
0xbe
,
0x8b
,
0xa7
,
0xd6
,
0x12
,
0x9e
,
0x70
,
0x3d
,
0x93
,
0xf1
,
0x0c
,
0x55
,
0x1b
,
0xd0
,
0x5b
,
0x1c
,
0xac
,
0xa8
,
0x44
,
0xe1
,
0xb1
,
0x84
,
0xb6
,
0x4e
,
0x54
,
0x31
,
0xa8
,
0x62
,
0x66
,
0x42
,
0xd2
,
0x62
,
0x97
,
0x16
,
0x4b
,
0x1a
,
0x3b
,
0x3e
,
0xe2
,
0x2b
,
0x12
,
0x52
,
0xa3
,
0xca
,
0x90
,
0x78
,
0xe6
,
0x34
,
0x4b
,
0xb9
,
0x72
,
0x96
,
0x80
,
0xd5
,
0x89
,
0x2c
,
0x4e
,
0xf8
,
0x9b
,
0x00
,
0x5e
,
0x33
,
0xee
,
0x9e
,
0x16
,
0xd9
,
0x22
,
0xff
,
0x9f
,
0xaa
,
0x58
,
0x59
,
0x63
,
0x54
,
0x32
,
0xe9
,
0x1a
,
0xf3
,
0xc2
,
0x3c
,
0x0a
,
0xbf
,
0xf2
,
0xad
,
0x78
,
0x25
,
0xf9
,
0x3d
,
0x82
,
0xad
,
0x2a
,
0xfa
,
0xc6
,
0x26
,
0x9b
,
0x75
,
0x87
,
0x0c
,
0xb7
,
0x91
,
0xd9
,
0x5d
,
0x99
,
0xb0
,
0x1b
,
0x4e
,
0xc2
,
0xfe
,
0x25
,
0x80
,
0xa1
,
0x87
,
0x24
,
0x3b
,
0xb4
,
0x75
,
0x59
,
0x7b
,
0xec
,
0x65
,
0xed
,
0xd0
,
0x83
,
0xac
,
0xb5
,
0xbf
,
0x4c
,
0xdb
,
0x23
,
0x27
,
0x6d
,
0x6b
,
0x77
,
0x38
,
0x79
,
0xf1
,
0x3d
,
0x3f
,
0x73
,
0xd7
,
0x6d
,
0x29
,
0xd3
,
0xe2
,
0x1a
,
0xee
,
0x47
,
0xfc
,
0x79
,
0xd9
,
0x8e
,
0x29
,
0xc3
,
0xd3
,
0xcb
,
0x6c
,
0x35
,
0x40
,
0x12
,
0xd3
,
0x03
,
0xec
,
0xb6
,
0xd6
,
0xb2
,
0x7c
,
0x5d
,
0x51
,
0xf7
,
0xc3
,
0x13
,
0x38
,
0x88
,
0xb8
,
0xc8
,
0x9d
,
0xa3
,
0xd4
,
0x35
,
0x7d
,
0x0b
,
0x5a
,
0xc9
,
0x54
,
0x35
,
0xae
,
0x35
,
0xf5
,
0x06
,
0x65
,
0xc2
,
0x53
,
0x4c
,
0x62
,
0x4f
,
0x09
,
0xf9
,
0x25
,
0xd8
,
0x23
,
0x5b
,
0xcb
,
0x3a
,
0xdf
,
0x49
,
0xd1
,
0x6f
,
0x03
,
0xd8
,
0xc3
,
0x45
,
0xea
,
0xf7
,
0xc7
,
0x4f
,
0xe3
,
0x24
,
0x7d
,
0x1a
,
0xe7
,
0xd6
,
0x95
,
0x07
,
0xab
,
0x87
,
0x21
,
0xe5
,
0xfe
,
0xca
,
0x61
,
0xa8
,
0xb5
,
0x76
,
0x18
,
0x6a
,
0xbb
,
0x43
,
0x5f
,
0xf8
,
0x81
,
0x6a
,
0xe6
,
0x95
,
0x19
,
0x14
,
0xfd
,
0x23
,
0xe8
,
0x24
,
0x92
,
0xcf
,
0x8d
,
0x37
,
0x03
,
0xcb
,
0x1b
,
0xc7
,
0xe0
,
0x48
,
0x89
,
0x85
,
0xff
,
0x68
,
0xa9
,
0x04
,
0x2b
,
0x63
,
0xa2
,
0x13
,
0xec
,
0x2d
,
0xd8
,
0xc1
,
0x93
,
0xaa
,
0x61
,
0x27
,
0xa0
,
0x59
,
0xcc
,
0x65
,
0xe2
,
0x58
,
0x59
,
0x31
,
0xec
,
0x09
,
0xcb
,
0x67
,
0xaf
,
0x48
,
0xc4
,
0x2a
,
0x6a
,
0x6d
,
0x27
,
0x6a
,
0x21
,
0x6c
,
0xe7
,
0x05
,
0xaf
,
0x0e
,
0x57
,
0x83
,
0xa0
,
0xc3
,
0x73
,
0x23
,
0xdb
,
0xf5
,
0xc7
,
0x4c
,
0xa5
,
0x01
,
0x9d
,
0xe1
,
0x7a
,
0xda
,
0x35
,
0x1a
,
0x4a
,
0x1e
,
0x6a
,
0x10
,
0xa5
,
0xc0
,
0xa6
,
0xd2
,
0x50
,
0x32
,
0xd4
,
0x43
,
0xea
,
0x24
,
0x5b
,
0xa4
,
0x52
,
0x0c
,
0x7a
,
0x54
,
0xd8
,
0x4a
,
0xda
,
0x79
,
0x64
,
0x81
,
0x1a
,
0x52
,
0xeb
,
0x1e
,
0x59
,
0x5b
,
0x2f
,
0x78
,
0x64
,
0x6d
,
0xab
,
0x98
,
0xae
,
0x7f
,
0x64
,
0xed
,
0x2c
,
0x3f
,
0xb2
,
0xd8
,
0x23
,
0xd8
,
0x4b
,
0xb3
,
0xf4
,
0x84
,
0x46
,
0xf7
,
0x0b
,
0x63
,
0x64
,
0x9f
,
0x8c
,
0x5c
,
0x5e
,
0x08
,
0x3f
,
0xb6
,
0x5e
,
0x64
,
0x6a
,
0xe9
,
0x09
,
0x3d
,
0x58
,
0xb1
,
0xb8
,
0x58
,
0x2f
,
0x17
,
0x17
,
0xfb
,
0x1e
,
0x20
,
0xca
,
0x64
,
0x94
,
0x6a
,
0x00
,
0xa4
,
0xe5
,
0xa7
,
0x49
,
0xca
,
0x8b
,
0x97
,
0xd7
,
0x85
,
0xf0
,
0x49
,
0xc4
,
0x39
,
0x9f
,
0x5d
,
0x96
,
0xb3
,
0x3c
,
0xc1
,
0x67
,
0x33
,
0xf2
,
0xd9
,
0xe1
,
0x57
,
0x6d
,
0xeb
,
0x55
,
0xa2
,
0x4f
,
0x7c
,
0x17
,
0x4b
,
0x23
,
0x7a
,
0xa3
,
0x4f
,
0x7c
,
0xdd
,
0x3f
,
0xd1
,
0xf6
,
0x75
,
0xdc
,
0x88
,
0xb4
,
0x34
,
0x7b
,
0x0c
,
0x9d
,
0x39
,
0x1a
,
0x5e
,
0x33
,
0x04
,
0xf8
,
0x5e
,
0x8d
,
0x1b
,
0x91
,
0x92
,
0x65
,
0x3f
,
0x82
,
0x9d
,
0x58
,
0x08
,
0x2e
,
0x2f
,
0xf0
,
0xbd
,
0x7f
,
0xc9
,
0x0b
,
0x5d
,
0x29
,
0xf7
,
0xf5
,
0xe6
,
0x27
,
0xb8
,
0x26
,
0xcc
,
0xe2
,
0xb8
,
0x11
,
0xb9
,
0xd2
,
0xe5
,
0xf6
,
0x9f
,
0x27
,
0xf2
,
0x7a
,
0x5a
,
0xc4
,
0x5f
,
0x10
,
0xa2
,
0xfd
,
0xed
,
0x66
,
0xb1
,
0xdc
,
0x6e
,
0x18
,
0xec
,
0x31
,
0x6c
,
0x4a
,
0x73
,
0x70
,
0x77
,
0xfd
,
0xc1
,
0xa5
,
0x20
,
0x6e
,
0xfa
,
0xc2
,
0x1c
,
0xb7
,
0xb1
,
0xfe
,
0xb8
,
0x52
,
0x90
,
0x7d
,
0x08
,
0x7d
,
0xa3
,
0xe0
,
0x22
,
0xfb
,
0xf0
,
0x86
,
0x4f
,
0x28
,
0x31
,
0xaa
,
0x28
,
0xb9
,
0xe7
,
0x29
,
0x91
,
0x71
,
0x23
,
0xf2
,
0x36
,
0xb1
,
0xf7
,
0x00
,
0xd2
,
0x72
,
0x1c
,
0xa5
,
0xf4
,
0x59
,
0x37
,
0x70
,
0x8e
,
0x1b
,
0x91
,
0x25
,
0xce
,
0x3e
,
0x82
,
0x7b
,
0xa9
,
0xdb
,
0xda
,
0x28
,
0xc9
,
0xd6
,
0x36
,
0xbf
,
0x71
,
0x23
,
0xf2
,
0x37
,
0x61
,
0xcf
,
0x91
,
0xb7
,
0x7a
,
0x20
,
0x68
,
0xca
,
0xdb
,
0xf7
,
0x37
,
0xf4
,
0xb3
,
0x09
,
0xfb
,
0xf0
,
0x81
,
0xd5
,
0x87
,
0x2d
,
0xb0
,
0xac
,
0xea
,
0xc1
,
0xd6
,
0x70
,
0x71
,
0x37
,
0x68
,
0x7f
,
0xd7
,
0xe9
,
0xc1
,
0x4b
,
0xd0
,
0x74
,
0xbe
,
0x21
,
0xa8
,
0x2e
,
0xfc
,
0xae
,
0xdf
,
0x85
,
0xd7
,
0x6f
,
0x2a
,
0xfb
,
0xf0
,
0xc7
,
0xce
,
0x23
,
0xa0
,
0x42
,
0xf0
,
0x4b
,
0x65
,
0xf7
,
0xdf
,
0x5b
,
0xd8
,
0xd5
,
0x5d
,
0x6d
,
0x34
,
0xe8
,
0xba
,
0x23
,
0x6a
,
0xb0
,
0x34
,
0xa2
,
0xe2
,
0x48
,
0x85
,
0x94
,
0x0a
,
0xa3
,
0x0e
,
0xba
,
0xcd
,
0x62
,
0xdf
,
0x84
,
0x3e
,
0x8e
,
0xa5
,
0xe7
,
0xf1
,
0x9c
,
0x6b
,
0xa1
,
0x16
,
0x09
,
0x79
,
0xdc
,
0xaa
,
0x53
,
0xb4
,
0xeb
,
0x3b
,
0x45
,
0xc7
,
0xef
,
0xaf
,
0x55
,
0x0d
,
0xef
,
0xae
,
0xab
,
0xe1
,
0x1b
,
0x6b
,
0x6a
,
0xf8
,
0xa6
,
0x57
,
0xc3
,
0x9d
,
0xde
,
0xd2
,
0xf3
,
0x7b
,
0x8b
,
0x55
,
0xe1
,
0xe1
,
0x05
,
0x15
,
0x7e
,
0xeb
,
0x2e
,
0x15
,
0x7e
,
0xbb
,
0xa6
,
0xc2
,
0x2f
,
0xf5
,
0xdf
,
0x9d
,
0x3b
,
0xf6
,
0xdf
,
0x7e
,
0x6d
,
0xff
,
0x0d
,
0x7f
,
0xb1
,
0x8c
,
0xf8
,
0x88
,
0x4f
,
0xb2
,
0x62
,
0xfa
,
0xaa
,
0x10
,
0x1f
,
0x7e
,
0x03
,
0xb6
,
0xca
,
0xe5
,
0x8b
,
0x1b
,
0xbc
,
0x30
,
0x15
,
0x15
,
0xad
,
0x58
,
0x53
,
0x6a
,
0x0e
,
0xab
,
0xc6
,
0xc6
,
0x0b
,
0xbc
,
0x5d
,
0x7f
,
0x46
,
0xb8
,
0xcb
,
0x67
,
0xa6
,
0xf0
,
0xd7
,
0x4d
,
0xd8
,
0x73
,
0x26
,
0xba
,
0xff
,
0x2f
,
0x9c
,
0xf6
,
0x5e
,
0x16
,
0xa7
,
0xbd
,
0x0a
,
0xa7
,
0xe1
,
0x29
,
0xbc
,
0xe6
,
0x84
,
0x80
,
0xa2
,
0x89
,
0xc5
,
0xa7
,
0x4b
,
0xd6
,
0xf8
,
0x53
,
0xe0
,
0x52
,
0xb8
,
0x22
,
0x2d
,
0xa7
,
0x8a
,
0x88
,
0x7f
,
0x2b
,
0x68
,
0x59
,
0xfd
,
0x9d
,
0x2c
,
0x4d
,
0xb5
,
0x76
,
0x7e
,
0x84
,
0x7f
,
0x6a
,
0x42
,
0xbf
,
0x6a
,
0xd6
,
0xd8
,
0x30
,
0x10
,
0x64
,
0xf8
,
0x3a
,
0x32
,
0x20
,
0xc3
,
0xdf
,
0x54
,
0x9e
,
0x33
,
0xf3
,
0x24
,
0x90
,
0x19
,
0x5e
,
0x5d
,
0x52
,
0x36
,
0x25
,
0x0a
,
0xfa
,
0x66
,
0x64
,
0x71
,
0x2c
,
0x44
,
0xb5
,
0xe9
,
0x44
,
0x4d
,
0x21
,
0x3f
,
0x9e
,
0x63
,
0xac
,
0x4c
,
0xc8
,
0x15
,
0x85
,
0x67
,
0x72
,
0x6c
,
0x60
,
0x2a
,
0xda
,
0xf4
,
0x9b
,
0x9e
,
0x18
,
0xb7
,
0xf3
,
0x67
,
0xd9
,
0x4c
,
0x3f
,
0x87
,
0x35
,
0x65
,
0x5d
,
0x1b
,
0x38
,
0xd7
,
0x46
,
0x9f
,
0xfd
,
0xf0
,
0xba
,
0x31
,
0x5a
,
0x3a
,
0xc3
,
0xf6
,
0x49
,
0x62
,
0x89
,
0x4f
,
0x9f
,
0xbb
,
0xe2
,
0x22
,
0xd6
,
0x52
,
0x07
,
0x6a
,
0x98
,
0xaf
,
0x38
,
0x58
,
0x36
,
0xc4
,
0x62
,
0x32
,
0xe1
,
0x42
,
0x0c
,
0x1e
,
0x90
,
0x73
,
0x86
,
0x3c
,
0xfe
,
0xb2
,
0x05
,
0xbd
,
0xf2
,
0x0f
,
0x06
,
0xf6
,
0x63
,
0xd8
,
0x3c
,
0xe5
,
0x92
,
0xae
,
0x80
,
0xed
,
0x96
,
0x37
,
0xf7
,
0xfc
,
0x5c
,
0x16
,
0x49
,
0x7a
,
0x35
,
0x7c
,
0x73
,
0x79
,
0xca
,
0x71
,
0xbe
,
0x83
,
0x86
,
0x0d
,
0xf6
,
0x43
,
0x80
,
0x9f
,
0x26
,
0x42
,
0x6a
,
0x30
,
0xec
,
0x54
,
0x2a
,
0x3e
,
0x49
,
0x66
,
0xc3
,
0x61
,
0x1d
,
0x16
,
0x94
,
0x68
,
0xd8
,
0x60
,
0x9f
,
0x02
,
0x3b
,
0xe5
,
0xe4
,
0x94
,
0x9d
,
0x98
,
0x0f
,
0x2b
,
0x15
,
0x75
,
0x89
,
0x3b
,
0x5c
,
0x89
,
0xaf
,
0xb0
,
0xc1
,
0xce
,
0xa1
,
0x6f
,
0xbc
,
0xb9
,
0xa3
,
0xb6
,
0x37
,
0xd7
,
0xf6
,
0x3d
,
0x91
,
0x87
,
0x0d
,
0xf6
,
0x1e
,
0xec
,
0x9e
,
0x72
,
0x49
,
0xd0
,
0x2a
,
0xab
,
0x6a
,
0xbf
,
0x52
,
0x8b
,
0xb0
,
0x18
,
0xee
,
0xfb
,
0x6a
,
0x48
,
0x3c
,
0x6c
,
0xb0
,
0x47
,
0xd0
,
0x3d
,
0x13
,
0xe7
,
0xb7
,
0xe9
,
0xc4
,
0x0f
,
0xcd
,
0x9e
,
0x26
,
0xcf
,
0xc4
,
0x49
,
0xbc
,
0xb8
,
0xba
,
0x96
,
0x9f
,
0xe5
,
0x61
,
0xe3
,
0x59
,
0x97
,
0xfe
,
0xa5
,
0x79
,
0xfc
,
0x9f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x01
,
0x9c
,
0x04
,
0x0e
,
0x02
,
0x1a
,
0x00
,
0x00
,
}
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/paracross/types/type.go
View file @
748ba0cb
...
...
@@ -19,13 +19,13 @@ var (
// ForkCommitTx main chain support paracross commit tx
ForkCommitTx
=
"ForkParacrossCommitTx"
//平行链配置项对应主链的ForkCommitTx 高度
MainForkParacrossCommitTx
=
"MainForkParacrossCommitTx"
MainForkParacrossCommitTx
=
"MainForkParacrossCommitTx"
// ParaSelfConsensForkHeight para self consens height string
ParaSelfConsensForkHeight
=
"MainParaSelfConsensusForkHeight"
//ForkLoopCheckCommitTxDone 循环检查共识交易done的fork
ForkLoopCheckCommitTxDone
=
"ForkLoopCheckCommitTxDone"
ForkLoopCheckCommitTxDone
=
"ForkLoopCheckCommitTxDone"
//MainLoopCheckCommitTxDoneForkHeight 平行链的配置项,对应主链的ForkLoopCheckCommitTxDone高度
MainLoopCheckCommitTxDoneForkHeight
=
"MainLoopCheckCommitTxDoneForkHeight"
MainLoopCheckCommitTxDoneForkHeight
=
"MainLoopCheckCommitTxDoneForkHeight"
)
func
init
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment