Commit 499f1612 authored by QM's avatar QM

平行链监督节点组,不维护组的状态,只维护当个节点的状态

parent 3d524381
...@@ -281,7 +281,7 @@ func (b *blsClient) sendAggregateTx(nodes []string) error { ...@@ -281,7 +281,7 @@ func (b *blsClient) sendAggregateTx(nodes []string) error {
func (b *blsClient) rcvCommitTx(tx *types.Transaction) error { func (b *blsClient) rcvCommitTx(tx *types.Transaction) error {
if !b.isValidNodes(tx.From()) { if !b.isValidNodes(tx.From()) {
plog.Error("rcvCommitTx is not valid node", "addr", tx.From()) plog.Error("rcvCommitTx is not valid node", "addr", tx.From(), "typeNode", b.typeNode)
return pt.ErrParaNodeAddrNotExisted return pt.ErrParaNodeAddrNotExisted
} }
......
...@@ -793,24 +793,14 @@ function para_create_nodegroup() { ...@@ -793,24 +793,14 @@ function para_create_nodegroup() {
# $1 status, $2 hash # $1 status, $2 hash
function check_supervision_node_group_list() { function check_supervision_node_group_list() {
newid=$(${PARA_CLI} para supervision_node list -s "$1" | jq -r ".ids[0].id") newid=$(${PARA_CLI} para supervision_node id_list -s "$1" | jq -r ".ids[0].id")
if [ "$newid" != "$2" ]; then if [ "$newid" != "$2" ]; then
${PARA_CLI} para supervision_node list -s "$1" ${PARA_CLI} para supervision_node id_list -s "$1"
echo "cancel status error " echo "cancel status error "
exit 1 exit 1
fi fi
} }
# $1 status
function check_supervision_node_group_status() {
status=$(${PARA_CLI} para supervision_node status | jq -r ".status")
if [ "$status" != "$1" ]; then
${PARA_CLI} para supervision_node status
echo "status $status not eq target status $1"
exit 1
fi
}
# $1 status $2 addr # $1 status $2 addr
function check_supervision_node_addr_status() { function check_supervision_node_addr_status() {
status=$(${PARA_CLI} para supervision_node addr_status -a "$2" | jq -r ".status") status=$(${PARA_CLI} para supervision_node addr_status -a "$2" | jq -r ".status")
...@@ -874,7 +864,6 @@ function para_create_supervision_nodegroup_quit() { ...@@ -874,7 +864,6 @@ function para_create_supervision_nodegroup_quit() {
check_supervision_node_addr_status 2 "$ADDR_25" check_supervision_node_addr_status 2 "$ADDR_25"
check_supervision_node_group_list 2 "$id" check_supervision_node_group_list 2 "$id"
check_supervision_node_group_status 2
check_supervision_node_addrs "$ADDR_25" check_supervision_node_addrs "$ADDR_25"
echo "=========== # para chain quit supervision node group 25 =============" echo "=========== # para chain quit supervision node group 25 ============="
...@@ -885,7 +874,6 @@ function para_create_supervision_nodegroup_quit() { ...@@ -885,7 +874,6 @@ function para_create_supervision_nodegroup_quit() {
check_balance_1ka "$balancePre" -6 check_balance_1ka "$balancePre" -6
check_supervision_node_group_list 3 "$id" check_supervision_node_group_list 3 "$id"
check_supervision_node_group_status 3
check_supervision_node_addr_status 3 "$ADDR_25" check_supervision_node_addr_status 3 "$ADDR_25"
check_supervision_node_addrs null check_supervision_node_addrs null
echo "=========== # ${FUNCNAME} end =============" echo "=========== # ${FUNCNAME} end ============="
...@@ -910,7 +898,6 @@ function para_create_supervision_nodegroup_approve() { ...@@ -910,7 +898,6 @@ function para_create_supervision_nodegroup_approve() {
query_tx "${PARA_CLI}" "${txhash}" query_tx "${PARA_CLI}" "${txhash}"
check_supervision_node_group_list 2 "$id" check_supervision_node_group_list 2 "$id"
check_supervision_node_group_status 2
check_supervision_node_addr_status 2 "$ADDR_28" check_supervision_node_addr_status 2 "$ADDR_28"
check_supervision_node_addrs "$ADDR_28" check_supervision_node_addrs "$ADDR_28"
......
...@@ -236,8 +236,7 @@ function paracross_ListNodeStatus() { ...@@ -236,8 +236,7 @@ function paracross_ListNodeStatus() {
function paracross_GetSupervisionInfo() { function paracross_GetSupervisionInfo() {
chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"GetSupervisionNodeGroupAddrs","payload":{"title":"user.p.para."}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("key","value"),true])' "GetSupervisionNodeGroupAddrs" chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"GetSupervisionNodeGroupAddrs","payload":{"title":"user.p.para."}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("key","value"),true])' "GetSupervisionNodeGroupAddrs"
chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"GetSupervisionNodeGroupStatus","payload":{"title":"user.p.para."}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("status"),true])' "GetSupervisionNodeGroupStatus" chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"GetSupervisionNodeGroupStatus","payload":{"title":"user.p.para."}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("status"),true])' "GetSupervisionNodeGroupStatus"
chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"ListSupervisionNodeGroupStatus","payload":{"title":"user.p.para.","status":2}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("status"),true])' "ListSupervisionNodeGroupStatus status:2" chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"ListSupervisionNodeStatusInfo","payload":{"title":"user.p.para.","status":0}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("status"),true])' "ListSupervisionNodeStatusInfo status:0"
chain33_Http '{"method":"Chain33.Query","params":[{ "execer":"paracross", "funcName":"ListSupervisionNodeGroupStatus","payload":{"title":"user.p.para.","status":3}}]}' ${UNIT_HTTP} '(.error|not) and (.result| [has("status"),true])' "ListSupervisionNodeGroupStatus status:3"
} }
para_test_addr="1MAuE8QSbbech3bVKK2JPJJxYxNtT95oSU" para_test_addr="1MAuE8QSbbech3bVKK2JPJJxYxNtT95oSU"
......
...@@ -1167,7 +1167,6 @@ func GetBlockInfoCmd() *cobra.Command { ...@@ -1167,7 +1167,6 @@ func GetBlockInfoCmd() *cobra.Command {
func addLocalBlockBodyCmdFlags(cmd *cobra.Command) { func addLocalBlockBodyCmdFlags(cmd *cobra.Command) {
cmd.Flags().Int64P("start", "t", 0, "block height,-1:latest height") cmd.Flags().Int64P("start", "t", 0, "block height,-1:latest height")
_ = cmd.MarkFlagRequired("start") _ = cmd.MarkFlagRequired("start")
} }
func localBlockInfo(cmd *cobra.Command, args []string) { func localBlockInfo(cmd *cobra.Command, args []string) {
...@@ -1197,7 +1196,6 @@ func GetLocalBlockInfoCmd() *cobra.Command { ...@@ -1197,7 +1196,6 @@ func GetLocalBlockInfoCmd() *cobra.Command {
func addParaBodyCmdFlags(cmd *cobra.Command) { func addParaBodyCmdFlags(cmd *cobra.Command) {
cmd.Flags().Int64P("height", "g", 0, "height to para chain") cmd.Flags().Int64P("height", "g", 0, "height to para chain")
_ = cmd.MarkFlagRequired("height") _ = cmd.MarkFlagRequired("height")
} }
func paraInfo(cmd *cobra.Command, args []string) { func paraInfo(cmd *cobra.Command, args []string) {
...@@ -1525,8 +1523,7 @@ func supervisionNodeCmd() *cobra.Command { ...@@ -1525,8 +1523,7 @@ func supervisionNodeCmd() *cobra.Command {
cmd.AddCommand(supervisionNodeCancelCmd()) cmd.AddCommand(supervisionNodeCancelCmd())
cmd.AddCommand(getSupervisionNodeGroupAddrsCmd()) cmd.AddCommand(getSupervisionNodeGroupAddrsCmd())
cmd.AddCommand(supervisionNodeGroupStatusCmd()) cmd.AddCommand(supervisionNodeListInfoCmd())
cmd.AddCommand(supervisionNodeGroupListCmd())
cmd.AddCommand(getSupervisionNodeInfoCmd()) cmd.AddCommand(getSupervisionNodeInfoCmd())
return cmd return cmd
...@@ -1565,7 +1562,7 @@ func supervisionNodeApply(cmd *cobra.Command, args []string) { ...@@ -1565,7 +1562,7 @@ func supervisionNodeApply(cmd *cobra.Command, args []string) {
payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 1, Addr: addr, BlsPubKey: blspub, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4} payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 1, Addr: addr, BlsPubKey: blspub, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX), Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "SupervisionNodeGroupConfig", ActionName: "SupervisionNodeConfig",
Payload: types.MustPBToJSON(payload), Payload: types.MustPBToJSON(payload),
} }
...@@ -1605,7 +1602,7 @@ func supervisionNodeApprove(cmd *cobra.Command, args []string) { ...@@ -1605,7 +1602,7 @@ func supervisionNodeApprove(cmd *cobra.Command, args []string) {
payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 2, Id: id, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4} payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 2, Id: id, CoinsFrozen: int64(math.Trunc((coins+0.0000001)*1e4)) * 1e4}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX), Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "SupervisionNodeGroupConfig", ActionName: "SupervisionNodeConfig",
Payload: types.MustPBToJSON(payload), Payload: types.MustPBToJSON(payload),
} }
...@@ -1639,7 +1636,7 @@ func supervisionNodeQuit(cmd *cobra.Command, args []string) { ...@@ -1639,7 +1636,7 @@ func supervisionNodeQuit(cmd *cobra.Command, args []string) {
payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 3, Addr: opAddr} payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 3, Addr: opAddr}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX), Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "SupervisionNodeGroupConfig", ActionName: "SupervisionNodeConfig",
Payload: types.MustPBToJSON(payload), Payload: types.MustPBToJSON(payload),
} }
...@@ -1673,7 +1670,7 @@ func supervisionNodeCancel(cmd *cobra.Command, args []string) { ...@@ -1673,7 +1670,7 @@ func supervisionNodeCancel(cmd *cobra.Command, args []string) {
payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 4, Id: id} payload := &pt.ParaNodeAddrConfig{Title: paraName, Op: 4, Id: id}
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: getRealExecName(paraName, pt.ParaX), Execer: getRealExecName(paraName, pt.ParaX),
ActionName: "SupervisionNodeGroupConfig", ActionName: "SupervisionNodeConfig",
Payload: types.MustPBToJSON(payload), Payload: types.MustPBToJSON(payload),
} }
...@@ -1706,58 +1703,38 @@ func supervisionNodeGroup(cmd *cobra.Command, args []string) { ...@@ -1706,58 +1703,38 @@ func supervisionNodeGroup(cmd *cobra.Command, args []string) {
ctx.Run() ctx.Run()
} }
func supervisionNodeGroupStatusCmd() *cobra.Command { // supervisionNodeListInfoCmd get node list by status
func supervisionNodeListInfoCmd() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "status", Use: "id_list",
Short: "query supervision node group apply status by title", Short: "Get supervision node apply id list info by status",
Run: supervisionNodeGroupStatus, Run: supervisionNodeListInfo,
}
return cmd
}
func supervisionNodeGroupStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
paraName, _ := cmd.Flags().GetString("paraName")
var params rpctypes.Query4Jrpc
params.Execer = pt.ParaX
params.FuncName = "GetSupervisionNodeGroupStatus"
req := pt.ReqParacrossNodeInfo{Title: paraName}
params.Payload = types.MustPBToJSON(&req)
var res pt.ParaNodeGroupStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run()
}
func supervisionNodeGroupListCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "list",
Short: "query supervision node group apply list by status",
Run: supervisionNodeGroupList,
} }
getSupervisionNodeGroupListCmdFlags(cmd) getSupervisionNodeListInfoCmdFlags(cmd)
return cmd return cmd
} }
func getSupervisionNodeGroupListCmdFlags(cmd *cobra.Command) { func getSupervisionNodeListInfoCmdFlags(cmd *cobra.Command) {
cmd.Flags().Int32P("status", "s", 0, "status:2:approve, 3:quit") cmd.Flags().Int32P("status", "s", 0, "status:0:all,1:joining,2:quiting,3:closed,4:canceled")
_ = cmd.MarkFlagRequired("status") _ = cmd.MarkFlagRequired("status")
} }
func supervisionNodeGroupList(cmd *cobra.Command, args []string) { func supervisionNodeListInfo(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
paraName, _ := cmd.Flags().GetString("paraName")
status, _ := cmd.Flags().GetInt32("status") status, _ := cmd.Flags().GetInt32("status")
var params rpctypes.Query4Jrpc var params rpctypes.Query4Jrpc
params.Execer = pt.ParaX params.Execer = pt.ParaX
params.FuncName = "ListSupervisionNodeGroupStatus" params.FuncName = "ListSupervisionNodeStatusInfo"
req := pt.ReqParacrossNodeInfo{ req := pt.ReqParacrossNodeInfo{
Title: paraName,
Status: status, Status: status,
} }
params.Payload = types.MustPBToJSON(&req) params.Payload = types.MustPBToJSON(&req)
var res pt.RespParacrossNodeGroups var res pt.RespParacrossNodeAddrs
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} }
......
...@@ -774,7 +774,6 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac ...@@ -774,7 +774,6 @@ func (a *action) commitTxDone(nodeStatus *pt.ParacrossNodeStatus, stat *pt.Parac
func (a *action) commitTxDoneStep2(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHeightStatus, titleStatus *pt.ParacrossStatus) (*types.Receipt, error) { func (a *action) commitTxDoneStep2(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHeightStatus, titleStatus *pt.ParacrossStatus) (*types.Receipt, error) {
receipt := &types.Receipt{} receipt := &types.Receipt{}
titleStatus.Title = nodeStatus.Title titleStatus.Title = nodeStatus.Title
titleStatus.Height = nodeStatus.Height titleStatus.Height = nodeStatus.Height
titleStatus.BlockHash = nodeStatus.BlockHash titleStatus.BlockHash = nodeStatus.BlockHash
...@@ -1547,8 +1546,3 @@ func (a *action) TransferToExec(transfer *types.AssetsTransferToExec, tx *types. ...@@ -1547,8 +1546,3 @@ func (a *action) TransferToExec(transfer *types.AssetsTransferToExec, tx *types.
} }
return nil, types.ErrToAddrNotSameToExecAddr return nil, types.ErrToAddrNotSameToExecAddr
} }
func getParacrossSupervisonNodes(db dbm.KV, title string) (map[string]struct{}, []string, error) {
key := calcParaSupervisionNodeGroupAddrsKey(title)
return getNodes(db, key)
}
...@@ -126,8 +126,8 @@ func (e *Paracross) Exec_ParaBindMiner(payload *pt.ParaBindMinerCmd, tx *types.T ...@@ -126,8 +126,8 @@ func (e *Paracross) Exec_ParaBindMiner(payload *pt.ParaBindMinerCmd, tx *types.T
return a.bindMiner(payload) return a.bindMiner(payload)
} }
//Exec_SupervisionNodeGroupConfig exec Supervision node config //Exec_SupervisionNodeConfig exec Supervision node config
func (e *Paracross) Exec_SupervisionNodeGroupConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, index int) (*types.Receipt, error) { func (e *Paracross) Exec_SupervisionNodeConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, index int) (*types.Receipt, error) {
a := newAction(e, tx) a := newAction(e, tx)
return a.SupervisionNodeGroupConfig(payload) return a.SupervisionNodeConfig(payload)
} }
...@@ -97,7 +97,6 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx * ...@@ -97,7 +97,6 @@ func (e *Paracross) ExecDelLocal_NodeConfig(payload *pt.ParaNodeAddrConfig, tx *
} }
set.KV = append(set.KV, r.KV...) set.KV = append(set.KV, r.KV...)
} }
} }
} }
return &set, nil return &set, nil
...@@ -138,24 +137,10 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig ...@@ -138,24 +137,10 @@ func (e *Paracross) ExecDelLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig
return &set, nil return &set, nil
} }
// ExecDelLocal_NodeGroupConfig node group config tx delete process func (e *Paracross) ExecDelLocal_SupervisionNodeConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (e *Paracross) ExecDelLocal_SupervisionNodeGroupConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
for _, log := range receiptData.Logs { for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaSupervisionNodeGroupStatusUpdate { if log.Ty == pt.TyLogParaSupervisionNodeConfig {
var g pt.ReceiptParaNodeGroupConfig
err := types.Decode(log.Log, &g)
if err != nil {
return nil, err
}
if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeGroupStatusTitle(g.Prev.Status, g.Current.Title, g.Current.Id), Value: types.Encode(g.Prev)})
}
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeGroupStatusTitle(g.Current.Status, g.Current.Title, g.Current.Id), Value: nil})
} else if log.Ty == pt.TyLogParaSupervisionNodeConfig {
var g pt.ReceiptParaNodeConfig var g pt.ReceiptParaNodeConfig
err := types.Decode(log.Log, &g) err := types.Decode(log.Log, &g)
if err != nil { if err != nil {
...@@ -163,11 +148,11 @@ func (e *Paracross) ExecDelLocal_SupervisionNodeGroupConfig(payload *pt.ParaNode ...@@ -163,11 +148,11 @@ func (e *Paracross) ExecDelLocal_SupervisionNodeGroupConfig(payload *pt.ParaNode
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeStatusTitle(g.Prev.Status, g.Current.Title, g.Current.TargetAddr, g.Current.Id), Value: types.Encode(g.Prev)}) Key: calcLocalSupervisionNodeStatusTitle(g.Current.Title, g.Prev.Status, g.Current.TargetAddr, g.Current.Id), Value: types.Encode(g.Prev)})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeStatusTitle(g.Current.Status, g.Current.Title, g.Current.TargetAddr, g.Current.Id), Value: nil}) Key: calcLocalSupervisionNodeStatusTitle(g.Current.Title, g.Current.Status, g.Current.TargetAddr, g.Current.Id), Value: nil})
} }
} }
return &set, nil return &set, nil
......
...@@ -140,23 +140,10 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t ...@@ -140,23 +140,10 @@ func (e *Paracross) ExecLocal_NodeGroupConfig(payload *pt.ParaNodeGroupConfig, t
return &set, nil return &set, nil
} }
func (e *Paracross) ExecLocal_SupervisionNodeGroupConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (e *Paracross) ExecLocal_SupervisionNodeConfig(payload *pt.ParaNodeAddrConfig, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
var set types.LocalDBSet var set types.LocalDBSet
for _, log := range receiptData.Logs { for _, log := range receiptData.Logs {
if log.Ty == pt.TyLogParaSupervisionNodeGroupStatusUpdate { if log.Ty == pt.TyLogParaSupervisionNodeConfig {
var g pt.ReceiptParaNodeGroupConfig
err := types.Decode(log.Log, &g)
if err != nil {
return nil, err
}
if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeGroupStatusTitle(g.Prev.Status, g.Current.Title, g.Current.Id), Value: nil})
}
set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeGroupStatusTitle(g.Current.Status, g.Current.Title, g.Current.Id), Value: types.Encode(g.Current)})
} else if log.Ty == pt.TyLogParaSupervisionNodeConfig {
var g pt.ReceiptParaNodeConfig var g pt.ReceiptParaNodeConfig
err := types.Decode(log.Log, &g) err := types.Decode(log.Log, &g)
if err != nil { if err != nil {
...@@ -164,11 +151,11 @@ func (e *Paracross) ExecLocal_SupervisionNodeGroupConfig(payload *pt.ParaNodeAdd ...@@ -164,11 +151,11 @@ func (e *Paracross) ExecLocal_SupervisionNodeGroupConfig(payload *pt.ParaNodeAdd
} }
if g.Prev != nil { if g.Prev != nil {
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeStatusTitle(g.Prev.Status, g.Current.Title, g.Current.TargetAddr, g.Current.Id), Value: types.Encode(g.Prev)}) Key: calcLocalSupervisionNodeStatusTitle(g.Current.Title, g.Prev.Status, g.Current.TargetAddr, g.Current.Id), Value: nil})
} }
set.KV = append(set.KV, &types.KeyValue{ set.KV = append(set.KV, &types.KeyValue{
Key: calcLocalSupervisionNodeStatusTitle(g.Current.Status, g.Current.Title, g.Current.TargetAddr, g.Current.Id), Value: nil}) Key: calcLocalSupervisionNodeStatusTitle(g.Current.Title, g.Current.Status, g.Current.TargetAddr, g.Current.Id), Value: types.Encode(g.Current)})
} }
} }
return &set, nil return &set, nil
......
...@@ -41,10 +41,7 @@ var ( ...@@ -41,10 +41,7 @@ var (
//监督节点 //监督节点
paraSupervisionNodes string paraSupervisionNodes string
paraSupervisionNodeGroupStatusAddrs string
paraSupervisionNodeIDPrefix string paraSupervisionNodeIDPrefix string
localSupervisionNodeGroupStatusTitle string
localSupervisionNodeStatusTitle string localSupervisionNodeStatusTitle string
) )
...@@ -76,10 +73,7 @@ func setPrefix() { ...@@ -76,10 +73,7 @@ func setPrefix() {
localNodeGroupStatusTitle = "LODB-paracross-nodegroupStatusTitle-" localNodeGroupStatusTitle = "LODB-paracross-nodegroupStatusTitle-"
paraSupervisionNodes = "mavl-paracross-supervision-nodes-title-" paraSupervisionNodes = "mavl-paracross-supervision-nodes-title-"
paraSupervisionNodeGroupStatusAddrs = "mavl-paracross-supervision-nodegroup-status-title-"
paraSupervisionNodeIDPrefix = "mavl-paracross-title-nodeid-supervision-" paraSupervisionNodeIDPrefix = "mavl-paracross-title-nodeid-supervision-"
localSupervisionNodeGroupStatusTitle = "LODB-paracross-supervision-nodegroupStatusTitle-"
localSupervisionNodeStatusTitle = "LODB-paracross-supervision-nodeStatusTitle-" localSupervisionNodeStatusTitle = "LODB-paracross-supervision-nodeStatusTitle-"
} }
...@@ -201,20 +195,16 @@ func calcLocalNodeGroupAllPrefix() []byte { ...@@ -201,20 +195,16 @@ func calcLocalNodeGroupAllPrefix() []byte {
return []byte(fmt.Sprintf(localNodeGroupStatusTitle)) return []byte(fmt.Sprintf(localNodeGroupStatusTitle))
} }
func calcLocalSupervisionNodeGroupStatusTitle(status int32, title, id string) []byte { func calcLocalSupervisionNodeStatusTitle(title string, status int32, addr, id string) []byte {
return []byte(fmt.Sprintf(localSupervisionNodeGroupStatusTitle+"%02d-%s-%s", status, title, id)) return []byte(fmt.Sprintf(localSupervisionNodeStatusTitle+"%s-%02d-%s-%s-%s", title, status, addr, id))
}
func calcLocalSupervisionNodeGroupStatusPrefix(status int32) []byte {
return []byte(fmt.Sprintf(localSupervisionNodeGroupStatusTitle+"%02d-", status))
} }
func calcLocalSupervisionNodeGroupAllPrefix() []byte { func calcLocalSupervisionNodeStatusTitlePrefix(title string, status int32) []byte {
return []byte(fmt.Sprintf(localSupervisionNodeGroupStatusTitle)) return []byte(fmt.Sprintf(localSupervisionNodeStatusTitle+"%s-%02d", title, status))
} }
func calcLocalSupervisionNodeStatusTitle(status int32, addr, title, id string) []byte { func calcLocalSupervisionNodeStatusTitleAllPrefix(title string) []byte {
return []byte(fmt.Sprintf(localSupervisionNodeStatusTitle+"%s-%02d-%s-%s", addr, status, title, id)) return []byte(fmt.Sprintf(localSupervisionNodeStatusTitle+"%s-", title))
} }
//bind miner //bind miner
...@@ -230,10 +220,6 @@ func calcParaSupervisionNodeGroupAddrsKey(title string) []byte { ...@@ -230,10 +220,6 @@ func calcParaSupervisionNodeGroupAddrsKey(title string) []byte {
return []byte(fmt.Sprintf(paraSupervisionNodes+"%s", title)) return []byte(fmt.Sprintf(paraSupervisionNodes+"%s", title))
} }
func calcParaSupervisionNodeGroupStatusKey(title string) []byte {
return []byte(fmt.Sprintf(paraSupervisionNodeGroupStatusAddrs+"%s", title))
}
func calcParaSupervisionNodeIDKey(title, hash string) string { func calcParaSupervisionNodeIDKey(title, hash string) string {
return fmt.Sprintf(paraSupervisionNodeIDPrefix+"%s-%s", title, hash) return fmt.Sprintf(paraSupervisionNodeIDPrefix+"%s-%s", title, hash)
} }
...@@ -356,7 +356,7 @@ func (c *Paracross) allow(tx *types.Transaction, index int) error { ...@@ -356,7 +356,7 @@ func (c *Paracross) allow(tx *types.Transaction, index int) error {
} }
} }
if cfg.IsDappFork(c.GetHeight(), pt.ParaX, pt.ForkParaSupervision) { if cfg.IsDappFork(c.GetHeight(), pt.ParaX, pt.ForkParaSupervision) {
if payload.Ty == pt.ParacrossActionSupervisionNodeGroupConfig { if payload.Ty == pt.ParacrossActionSupervisionNodeConfig {
return nil return nil
} }
} }
......
...@@ -302,8 +302,8 @@ func checkCommitReceipt(suite *CommitTestSuite, receipt *types.Receipt, commitCn ...@@ -302,8 +302,8 @@ func checkCommitReceipt(suite *CommitTestSuite, receipt *types.Receipt, commitCn
func checkDoneReceipt(suite suite.Suite, receipt *types.Receipt, commitCnt int) { func checkDoneReceipt(suite suite.Suite, receipt *types.Receipt, commitCnt int) {
assert.Equal(suite.T(), receipt.Ty, int32(types.ExecOk)) assert.Equal(suite.T(), receipt.Ty, int32(types.ExecOk))
assert.Len(suite.T(), receipt.KV, 6) assert.Len(suite.T(), receipt.KV, 8)
assert.Len(suite.T(), receipt.Logs, 6) assert.Len(suite.T(), receipt.Logs, 8)
key := calcTitleHeightKey(Title, TitleHeight) key := calcTitleHeightKey(Title, TitleHeight)
suite.T().Log("title height key", string(key)) suite.T().Log("title height key", string(key))
......
...@@ -33,7 +33,7 @@ func (p *Paracross) Query_GetTitleHeight(in *pt.ReqParacrossTitleHeight) (types. ...@@ -33,7 +33,7 @@ func (p *Paracross) Query_GetTitleHeight(in *pt.ReqParacrossTitleHeight) (types.
} }
stat, err := p.paracrossGetStateTitleHeight(in.Title, in.Height) stat, err := p.paracrossGetStateTitleHeight(in.Title, in.Height)
if err != nil { if err != nil {
clog.Error("paracross.GetTitleHeight", "title", title, "height", in.Height, "err", err.Error()) clog.Error("paracross.GetTitleHeight", "title", in.Title, "height", in.Height, "err", err.Error())
return nil, err return nil, err
} }
status := stat.(*pt.ParacrossHeightStatus) status := stat.(*pt.ParacrossHeightStatus)
...@@ -243,19 +243,6 @@ func (p *Paracross) Query_GetNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types ...@@ -243,19 +243,6 @@ func (p *Paracross) Query_GetNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types
return stat, nil return stat, nil
} }
//Query_GetSupervisionNodeGroupStatus get specific node addr info
func (p *Paracross) Query_GetSupervisionNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil || in.Title == "" {
return nil, types.ErrInvalidParam
}
stat, err := getSupervisionNodeGroupStatus(p.GetStateDB(), in.Title)
if err != nil {
return stat, err
}
stat.Id = getParaNodeIDSuffix(stat.Id)
return stat, err
}
//Query_ListNodeGroupStatus list node info by status //Query_ListNodeGroupStatus list node info by status
func (p *Paracross) Query_ListNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) { func (p *Paracross) Query_ListNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil { if in == nil {
...@@ -281,28 +268,29 @@ func (p *Paracross) Query_ListNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (type ...@@ -281,28 +268,29 @@ func (p *Paracross) Query_ListNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (type
return resp, nil return resp, nil
} }
//Query_ListSupervisionNodeGroupStatus list node info by status //Query_ListSupervisionNodeStatusInfo list node info by status
func (p *Paracross) Query_ListSupervisionNodeGroupStatus(in *pt.ReqParacrossNodeInfo) (types.Message, error) { func (p *Paracross) Query_ListSupervisionNodeStatusInfo(in *pt.ReqParacrossNodeInfo) (types.Message, error) {
if in == nil { if in == nil || in.Title == "" {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
var prefix []byte var prefix []byte
if in.Status == 0 { if in.Status == 0 {
prefix = calcLocalSupervisionNodeGroupAllPrefix() prefix = calcLocalSupervisionNodeStatusTitleAllPrefix(in.Title)
} else { } else {
prefix = calcLocalSupervisionNodeGroupStatusPrefix(in.Status) prefix = calcLocalSupervisionNodeStatusTitlePrefix(in.Title, in.Status)
} }
resp, err := listNodeGroupStatus(p.GetLocalDB(), prefix) resp, err := listNodeStatus(p.GetLocalDB(), prefix)
if err != nil { if err != nil {
return resp, err return resp, err
} }
addrs := resp.(*pt.RespParacrossNodeGroups)
addrs := resp.(*pt.RespParacrossNodeAddrs)
for _, id := range addrs.Ids { for _, id := range addrs.Ids {
id.Id = getParaNodeIDSuffix(id.Id) id.Id = getParaNodeIDSuffix(id.Id)
} }
return resp, nil
return resp, err
} }
//Query_ListTitles query paracross titles list //Query_ListTitles query paracross titles list
......
...@@ -125,6 +125,12 @@ func (a *action) reward(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHe ...@@ -125,6 +125,12 @@ func (a *action) reward(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHe
return nil, err return nil, err
} }
// 监督节点地址
supervisionAddrs := make([]string, 0)
if stat.SupervisionDetails != nil {
supervisionAddrs = getSuperNodes(stat.SupervisionDetails, nodeStatus.BlockHash)
}
//奖励超级节点 //奖励超级节点
minderRewards := coinReward minderRewards := coinReward
//如果有委托挖矿地址,则超级节点分baseReward部分,否则全部 //如果有委托挖矿地址,则超级节点分baseReward部分,否则全部
...@@ -132,7 +138,12 @@ func (a *action) reward(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHe ...@@ -132,7 +138,12 @@ func (a *action) reward(nodeStatus *pt.ParacrossNodeStatus, stat *pt.ParacrossHe
minderRewards = coinBaseReward minderRewards = coinBaseReward
} }
receipt := &types.Receipt{Ty: types.ExecOk} receipt := &types.Receipt{Ty: types.ExecOk}
r, change, err := a.rewardSuperNode(minderRewards, nodeAddrs, nodeStatus.Height)
miners := nodeAddrs
for _, addr := range supervisionAddrs {
miners = append(miners, addr)
}
r, change, err := a.rewardSuperNode(minderRewards, miners, nodeStatus.Height)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -623,7 +623,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) ...@@ -623,7 +623,7 @@ func (a *action) nodeVote(config *pt.ParaNodeAddrConfig) (*types.Receipt, error)
//node quit后,如果committx满足2/3目标,自动触发commitDone //node quit后,如果committx满足2/3目标,自动触发commitDone
r, err = a.loopCommitTxDone(config.Title) r, err = a.loopCommitTxDone(config.Title)
if err != nil { if err != nil {
clog.Error("updateNodeGroup.loopCommitTxDone", "title", title, "err", err.Error()) clog.Error("updateNodeGroup.loopCommitTxDone", "title", cfg.GetTitle(), "err", err.Error())
} }
receipt = mergeReceipt(receipt, r) receipt = mergeReceipt(receipt, r)
} }
......
...@@ -70,39 +70,6 @@ func makeParaSupervisionNodeStatusReceipt(fromAddr string, prev, current *pt.Par ...@@ -70,39 +70,6 @@ func makeParaSupervisionNodeStatusReceipt(fromAddr string, prev, current *pt.Par
} }
} }
func makeParaSupervisionNodeGroupStatusReceipt(title string, addr string, prev, current *pt.ParaNodeGroupStatus) *types.Receipt {
key := calcParaSupervisionNodeGroupStatusKey(title)
log := &pt.ReceiptParaNodeGroupConfig{
Addr: addr,
Prev: prev,
Current: current,
}
return &types.Receipt{
Ty: types.ExecOk,
KV: []*types.KeyValue{
{Key: key, Value: types.Encode(current)},
},
Logs: []*types.ReceiptLog{
{
Ty: pt.TyLogParaSupervisionNodeGroupStatusUpdate,
Log: types.Encode(log),
},
},
}
}
func getSupervisionNodeGroupStatus(db dbm.KV, title string) (*pt.ParaNodeGroupStatus, error) {
key := calcParaSupervisionNodeGroupStatusKey(title)
val, err := db.Get(key)
if err != nil {
return nil, err
}
var status pt.ParaNodeGroupStatus
err = types.Decode(val, &status)
return &status, err
}
func getSupervisionNodeID(db dbm.KV, title string, id string) (*pt.ParaNodeIdStatus, error) { func getSupervisionNodeID(db dbm.KV, title string, id string) (*pt.ParaNodeIdStatus, error) {
id = calcParaSupervisionNodeIDKey(title, id) id = calcParaSupervisionNodeIDKey(title, id)
val, err := getDb(db, []byte(id)) val, err := getDb(db, []byte(id))
...@@ -148,20 +115,6 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type ...@@ -148,20 +115,6 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type
} }
} }
clog.Info("updateSupervisionNodeGroup delete", "addr", addr) clog.Info("updateSupervisionNodeGroup delete", "addr", addr)
// 如果全部退出 监督组也删除
if len(item.GetArr().Value) <= 0 {
nodeGroupStatus, err := getSupervisionNodeGroupStatus(a.db, title)
if err != nil && !isNotFound(err) {
return nil, errors.Wrapf(pt.ErrParaSupervisionNodeGroupNotSet, "nodegroup not exist:%s", title)
}
copyStat := *nodeGroupStatus
nodeGroupStatus.Status = pt.ParacrossNodeGroupQuit
nodeGroupStatus.Height = a.height
r := makeParaSupervisionNodeGroupStatusReceipt(title, a.fromaddr, &copyStat, nodeGroupStatus)
receipt = mergeReceipt(receipt, r)
}
} }
err = a.db.Set(key, types.Encode(&item)) err = a.db.Set(key, types.Encode(&item))
if err != nil { if err != nil {
...@@ -173,8 +126,9 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type ...@@ -173,8 +126,9 @@ func (a *action) updateSupervisionNodeGroup(title, addr string, add bool) (*type
} }
func (a *action) checkValidSupervisionNode(config *pt.ParaNodeAddrConfig) (bool, error) { func (a *action) checkValidSupervisionNode(config *pt.ParaNodeAddrConfig) (bool, error) {
nodes, _, err := getParacrossSupervisonNodes(a.db, config.Title) key := calcParaSupervisionNodeGroupAddrsKey(config.Title)
if err != nil && !isNotFound(err) { nodes, _, err := getNodes(a.db, key)
if err != nil && !(isNotFound(err) || errors.Cause(err) == pt.ErrTitleNotExist) {
return false, errors.Wrapf(err, "getNodes for title:%s", config.Title) return false, errors.Wrapf(err, "getNodes for title:%s", config.Title)
} }
...@@ -210,17 +164,17 @@ func (a *action) checkSupervisionNodeGroupExist(title string) (error, bool) { ...@@ -210,17 +164,17 @@ func (a *action) checkSupervisionNodeGroupExist(title string) (error, bool) {
return nil, false return nil, false
} }
func (a *action) supervisionNodeGroupCreate(status *pt.ParaNodeGroupStatus) (*types.Receipt, error) { func (a *action) supervisionNodeGroupCreate(title, targetAddrs string) (*types.Receipt, error) {
var item types.ConfigItem var item types.ConfigItem
key := calcParaSupervisionNodeGroupAddrsKey(status.Title) key := calcParaSupervisionNodeGroupAddrsKey(title)
item.Key = string(key) item.Key = string(key)
emptyValue := &types.ArrayConfig{Value: make([]string, 0)} emptyValue := &types.ArrayConfig{Value: make([]string, 0)}
arr := types.ConfigItem_Arr{Arr: emptyValue} arr := types.ConfigItem_Arr{Arr: emptyValue}
item.Value = &arr item.Value = &arr
item.GetArr().Value = append(item.GetArr().Value, status.TargetAddrs) item.GetArr().Value = append(item.GetArr().Value, targetAddrs)
item.Addr = a.fromaddr item.Addr = a.fromaddr
receipt := makeParaSupervisionNodeGroupReceipt(status.Title, nil, &item) receipt := makeParaSupervisionNodeGroupReceipt(title, nil, &item)
return receipt, nil return receipt, nil
} }
...@@ -304,17 +258,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec ...@@ -304,17 +258,6 @@ func (a *action) supervisionNodeApply(config *pt.ParaNodeAddrConfig) (*types.Rec
return nil, pt.ErrParaSupervisionNodeAddrExisted return nil, pt.ErrParaSupervisionNodeAddrExisted
} }
// 判断和监督组冻结金额是否一致
nodeGroupStatus, err := getSupervisionNodeGroupStatus(a.db, config.Title)
if err != nil && !isNotFound(err) {
return nil, errors.Wrapf(pt.ErrParaSupervisionNodeGroupNotSet, "nodegroup not exist:%s", config.Title)
}
if nodeGroupStatus != nil && config.CoinsFrozen < nodeGroupStatus.CoinsFrozen {
return nil, errors.Wrapf(pt.ErrParaNodeGroupFrozenCoinsNotEnough,
"coinFrozen not enough:%d,expected:%d", config.CoinsFrozen, nodeGroupStatus.CoinsFrozen)
}
// 在主链上冻结金额 // 在主链上冻结金额
receipt := &types.Receipt{Ty: types.ExecOk} receipt := &types.Receipt{Ty: types.ExecOk}
cfg := a.api.GetConfig() cfg := a.api.GetConfig()
...@@ -371,25 +314,11 @@ func (a *action) supervisionNodeApprove(config *pt.ParaNodeAddrConfig) (*types.R ...@@ -371,25 +314,11 @@ func (a *action) supervisionNodeApprove(config *pt.ParaNodeAddrConfig) (*types.R
return nil, errors.Wrapf(pt.ErrParaNodeGroupFrozenCoinsNotEnough, "id not enough coins apply:%d,config:%d", apply.CoinsFrozen, config.CoinsFrozen) return nil, errors.Wrapf(pt.ErrParaNodeGroupFrozenCoinsNotEnough, "id not enough coins apply:%d,config:%d", apply.CoinsFrozen, config.CoinsFrozen)
} }
statGroup := &pt.ParaNodeGroupStatus{ r, err := a.supervisionNodeGroupCreate(apply.Title, apply.TargetAddr)
Id: apply.Id,
Status: pt.ParacrossSupervisionNodeApprove,
Title: apply.Title,
TargetAddrs: apply.TargetAddr,
BlsPubKeys: apply.BlsPubKey,
CoinsFrozen: apply.CoinsFrozen,
FromAddr: a.fromaddr,
Height: a.height,
}
r, err := a.supervisionNodeGroupCreate(statGroup)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "nodegroup create:title:%s,addrs:%s", config.Title, apply.TargetAddr) return nil, errors.Wrapf(err, "nodegroup create:title:%s,addrs:%s", config.Title, apply.TargetAddr)
} }
receipt = mergeReceipt(receipt, r) receipt = mergeReceipt(receipt, r)
r = makeParaSupervisionNodeGroupStatusReceipt(config.Title, a.fromaddr, nil, statGroup)
receipt = mergeReceipt(receipt, r)
} else { } else {
// 监督账户组已经存在 // 监督账户组已经存在
r, err := a.updateSupervisionNodeGroup(config.Title, apply.TargetAddr, true) r, err := a.updateSupervisionNodeGroup(config.Title, apply.TargetAddr, true)
...@@ -517,7 +446,7 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re ...@@ -517,7 +446,7 @@ func (a *action) supervisionNodeCancel(config *pt.ParaNodeAddrConfig) (*types.Re
return receipt, nil return receipt, nil
} }
func (a *action) SupervisionNodeGroupConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) { func (a *action) SupervisionNodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) {
cfg := a.api.GetConfig() cfg := a.api.GetConfig()
if !validTitle(cfg, config.Title) { if !validTitle(cfg, config.Title) {
return nil, pt.ErrInvalidTitle return nil, pt.ErrInvalidTitle
......
...@@ -9,8 +9,8 @@ import ( ...@@ -9,8 +9,8 @@ import (
// createRawSupervisionNodeConfigTx create raw tx for node config // createRawSupervisionNodeConfigTx create raw tx for node config
func createRawSupervisionNodeConfigTx(config *pt.ParaNodeAddrConfig) *types.Transaction { func createRawSupervisionNodeConfigTx(config *pt.ParaNodeAddrConfig) *types.Transaction {
action := &pt.ParacrossAction{ action := &pt.ParacrossAction{
Ty: pt.ParacrossActionSupervisionNodeGroupConfig, Ty: pt.ParacrossActionSupervisionNodeConfig,
Value: &pt.ParacrossAction_SupervisionNodeGroupConfig{SupervisionNodeGroupConfig: config}, Value: &pt.ParacrossAction_SupervisionNodeConfig{SupervisionNodeConfig: config},
} }
tx := &types.Transaction{ tx := &types.Transaction{
Payload: types.Encode(action), Payload: types.Encode(action),
...@@ -86,7 +86,7 @@ func (suite *NodeManageTestSuite) testSupervisionNodeError() { ...@@ -86,7 +86,7 @@ func (suite *NodeManageTestSuite) testSupervisionNodeError() {
Addr: Account1M3, Addr: Account1M3,
} }
tx := createRawSupervisionNodeConfigTx(config) tx := createRawSupervisionNodeConfigTx(config)
tx, _ = signTx(suite.Suite, tx, PrivKey1Ku) tx, _ = signTx(suite.Suite, tx, PrivKey1M3)
_, err := suite.exec.Exec(tx, 0) _, err := suite.exec.Exec(tx, 0)
assert.Equal(suite.T(), err, pt.ErrParaSupervisionNodeAddrExisted) assert.Equal(suite.T(), err, pt.ErrParaSupervisionNodeAddrExisted)
...@@ -140,10 +140,4 @@ func (suite *NodeManageTestSuite) testSupervisionQuery() { ...@@ -140,10 +140,4 @@ func (suite *NodeManageTestSuite) testSupervisionQuery() {
resp2, ok := ret.(*pt.ParaNodeAddrIdStatus) resp2, ok := ret.(*pt.ParaNodeAddrIdStatus)
assert.Equal(suite.T(), ok, true) assert.Equal(suite.T(), ok, true)
assert.NotNil(suite.T(), resp2) assert.NotNil(suite.T(), resp2)
ret, err = suite.exec.Query_GetSupervisionNodeGroupStatus(&pt.ReqParacrossNodeInfo{Title: chain33TestCfg.GetTitle()})
suite.Nil(err)
resp3, ok := ret.(*pt.ParaNodeGroupStatus)
assert.Equal(suite.T(), ok, true)
assert.Equal(suite.T(), resp3.Status, int32(pt.ParacrossSupervisionNodeApprove))
} }
...@@ -349,7 +349,7 @@ message ParacrossAction { ...@@ -349,7 +349,7 @@ message ParacrossAction {
ParaStageConfig selfStageConfig = 11; ParaStageConfig selfStageConfig = 11;
CrossAssetTransfer crossAssetTransfer = 12; CrossAssetTransfer crossAssetTransfer = 12;
ParaBindMinerCmd paraBindMiner = 13; ParaBindMinerCmd paraBindMiner = 13;
ParaNodeAddrConfig supervisionNodeGroupConfig=14; ParaNodeAddrConfig supervisionNodeConfig = 14;
} }
int32 ty = 2; int32 ty = 2;
} }
......
...@@ -53,7 +53,6 @@ const ( ...@@ -53,7 +53,6 @@ const (
TyLogParaSupervisionNodeConfig = 680 TyLogParaSupervisionNodeConfig = 680
TyLogParaSupervisionNodeGroupAddrsUpdate = 681 TyLogParaSupervisionNodeGroupAddrsUpdate = 681
TyLogParaSupervisionNodeStatusUpdate = 682 TyLogParaSupervisionNodeStatusUpdate = 682
TyLogParaSupervisionNodeGroupStatusUpdate = 683
) )
// action type // action type
...@@ -90,8 +89,8 @@ const ( ...@@ -90,8 +89,8 @@ const (
ParacrossActionSelfStageConfig ParacrossActionSelfStageConfig
// ParacrossActionCrossAssetTransfer crossChain asset transfer key // ParacrossActionCrossAssetTransfer crossChain asset transfer key
ParacrossActionCrossAssetTransfer ParacrossActionCrossAssetTransfer
// ParacrossActionSupervisionNodeGroupConfig // ParacrossActionSupervisionNodeConfig
ParacrossActionSupervisionNodeGroupConfig ParacrossActionSupervisionNodeConfig
) )
//paracross asset porcess //paracross asset porcess
...@@ -327,8 +326,6 @@ func GetDappForkHeight(cfg *types.Chain33Config, forkKey string) int64 { ...@@ -327,8 +326,6 @@ func GetDappForkHeight(cfg *types.Chain33Config, forkKey string) int64 {
key = MainForkParacrossCommitTx key = MainForkParacrossCommitTx
case ForkLoopCheckCommitTxDone: case ForkLoopCheckCommitTxDone:
key = MainLoopCheckCommitTxDoneForkHeight key = MainLoopCheckCommitTxDoneForkHeight
//case ForkParaSupervision:
// key = MainForkParaSupervision
} }
forkHeight = types.Conf(cfg, ParaPrefixConsSubConf).GInt(key) forkHeight = types.Conf(cfg, ParaPrefixConsSubConf).GInt(key)
......
...@@ -6,13 +6,12 @@ package types ...@@ -6,13 +6,12 @@ package types
import ( import (
context "context" context "context"
fmt "fmt" fmt "fmt"
math "math"
types "github.com/33cn/chain33/types" types "github.com/33cn/chain33/types"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc" grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes" codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status" status "google.golang.org/grpc/status"
math "math"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -2934,7 +2933,7 @@ type ParacrossAction struct { ...@@ -2934,7 +2933,7 @@ type ParacrossAction struct {
// *ParacrossAction_SelfStageConfig // *ParacrossAction_SelfStageConfig
// *ParacrossAction_CrossAssetTransfer // *ParacrossAction_CrossAssetTransfer
// *ParacrossAction_ParaBindMiner // *ParacrossAction_ParaBindMiner
// *ParacrossAction_SupervisionNodeGroupConfig // *ParacrossAction_SupervisionNodeConfig
Value isParacrossAction_Value `protobuf_oneof:"value"` Value isParacrossAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,2,opt,name=ty,proto3" json:"ty,omitempty"` Ty int32 `protobuf:"varint,2,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
...@@ -3019,8 +3018,8 @@ type ParacrossAction_ParaBindMiner struct { ...@@ -3019,8 +3018,8 @@ type ParacrossAction_ParaBindMiner struct {
ParaBindMiner *ParaBindMinerCmd `protobuf:"bytes,13,opt,name=paraBindMiner,proto3,oneof"` ParaBindMiner *ParaBindMinerCmd `protobuf:"bytes,13,opt,name=paraBindMiner,proto3,oneof"`
} }
type ParacrossAction_SupervisionNodeGroupConfig struct { type ParacrossAction_SupervisionNodeConfig struct {
SupervisionNodeGroupConfig *ParaNodeAddrConfig `protobuf:"bytes,14,opt,name=supervisionNodeGroupConfig,proto3,oneof"` SupervisionNodeConfig *ParaNodeAddrConfig `protobuf:"bytes,14,opt,name=supervisionNodeConfig,proto3,oneof"`
} }
func (*ParacrossAction_Commit) isParacrossAction_Value() {} func (*ParacrossAction_Commit) isParacrossAction_Value() {}
...@@ -3047,7 +3046,7 @@ func (*ParacrossAction_CrossAssetTransfer) isParacrossAction_Value() {} ...@@ -3047,7 +3046,7 @@ func (*ParacrossAction_CrossAssetTransfer) isParacrossAction_Value() {}
func (*ParacrossAction_ParaBindMiner) isParacrossAction_Value() {} func (*ParacrossAction_ParaBindMiner) isParacrossAction_Value() {}
func (*ParacrossAction_SupervisionNodeGroupConfig) isParacrossAction_Value() {} func (*ParacrossAction_SupervisionNodeConfig) isParacrossAction_Value() {}
func (m *ParacrossAction) GetValue() isParacrossAction_Value { func (m *ParacrossAction) GetValue() isParacrossAction_Value {
if m != nil { if m != nil {
...@@ -3140,9 +3139,9 @@ func (m *ParacrossAction) GetParaBindMiner() *ParaBindMinerCmd { ...@@ -3140,9 +3139,9 @@ func (m *ParacrossAction) GetParaBindMiner() *ParaBindMinerCmd {
return nil return nil
} }
func (m *ParacrossAction) GetSupervisionNodeGroupConfig() *ParaNodeAddrConfig { func (m *ParacrossAction) GetSupervisionNodeConfig() *ParaNodeAddrConfig {
if x, ok := m.GetValue().(*ParacrossAction_SupervisionNodeGroupConfig); ok { if x, ok := m.GetValue().(*ParacrossAction_SupervisionNodeConfig); ok {
return x.SupervisionNodeGroupConfig return x.SupervisionNodeConfig
} }
return nil return nil
} }
...@@ -3169,7 +3168,7 @@ func (*ParacrossAction) XXX_OneofWrappers() []interface{} { ...@@ -3169,7 +3168,7 @@ func (*ParacrossAction) XXX_OneofWrappers() []interface{} {
(*ParacrossAction_SelfStageConfig)(nil), (*ParacrossAction_SelfStageConfig)(nil),
(*ParacrossAction_CrossAssetTransfer)(nil), (*ParacrossAction_CrossAssetTransfer)(nil),
(*ParacrossAction_ParaBindMiner)(nil), (*ParacrossAction_ParaBindMiner)(nil),
(*ParacrossAction_SupervisionNodeGroupConfig)(nil), (*ParacrossAction_SupervisionNodeConfig)(nil),
} }
} }
...@@ -4530,203 +4529,201 @@ func init() { ...@@ -4530,203 +4529,201 @@ func init() {
proto.RegisterType((*BlsPubKey)(nil), "types.BlsPubKey") proto.RegisterType((*BlsPubKey)(nil), "types.BlsPubKey")
} }
func init() { func init() { proto.RegisterFile("paracross.proto", fileDescriptor_6a397e38c9ea6747) }
proto.RegisterFile("paracross.proto", fileDescriptor_6a397e38c9ea6747)
}
var fileDescriptor_6a397e38c9ea6747 = []byte{ var fileDescriptor_6a397e38c9ea6747 = []byte{
// 3047 bytes of a gzipped FileDescriptorProto // 3049 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x1a, 0x4b, 0x6c, 0x24, 0x47, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x1a, 0x4d, 0x6f, 0x24, 0x47,
0xd5, 0x3d, 0x3f, 0xcf, 0x3c, 0x7b, 0xfc, 0xe9, 0xec, 0x3a, 0x13, 0x27, 0x59, 0x59, 0xad, 0x10, 0xd5, 0x3d, 0x5f, 0x9e, 0x79, 0xf6, 0xf8, 0xa3, 0xb3, 0xeb, 0x4c, 0x9c, 0x64, 0x65, 0xb5, 0x42,
0x19, 0xb2, 0xd9, 0xcd, 0x3a, 0x61, 0x51, 0x84, 0xf8, 0xc4, 0xde, 0x4d, 0x6c, 0x65, 0x1d, 0x36, 0x64, 0xc8, 0x66, 0x37, 0xeb, 0x84, 0x45, 0x11, 0xe2, 0x23, 0xf6, 0x6e, 0x62, 0x2b, 0xeb, 0xb0,
0x35, 0x0e, 0x20, 0x45, 0x20, 0xda, 0x33, 0x65, 0xbb, 0x95, 0x99, 0xee, 0xd9, 0xae, 0x9e, 0xac, 0xa9, 0x71, 0x00, 0x29, 0x02, 0xd1, 0x9e, 0x29, 0xdb, 0xad, 0xcc, 0x74, 0xcf, 0x76, 0xf5, 0x64,
0x8d, 0x90, 0x72, 0x01, 0x6e, 0x48, 0x5c, 0x90, 0xe0, 0xc2, 0x85, 0xdc, 0x90, 0x38, 0x71, 0xe6, 0x6d, 0x84, 0x94, 0x0b, 0x70, 0x43, 0xe2, 0x82, 0x04, 0x17, 0x2e, 0xe4, 0x86, 0xc4, 0x89, 0x33,
0x80, 0xc4, 0x25, 0xe2, 0x12, 0x8e, 0x9c, 0xe0, 0x88, 0x38, 0x72, 0xe3, 0x84, 0xde, 0xab, 0xaa, 0x07, 0x24, 0x2e, 0x11, 0x97, 0x70, 0xe4, 0x04, 0x47, 0xc4, 0x05, 0x89, 0x3f, 0x80, 0xde, 0xab,
0xee, 0xaa, 0xea, 0x9e, 0xb1, 0x93, 0xcd, 0x85, 0xdb, 0xbc, 0x57, 0xaf, 0xaa, 0xde, 0xbf, 0xde, 0xaa, 0xee, 0xaa, 0xea, 0x9e, 0xb1, 0x93, 0xcd, 0x85, 0xdb, 0xbc, 0x57, 0xaf, 0xaa, 0xde, 0x77,
0x7b, 0xd3, 0xb0, 0x3a, 0x09, 0xd3, 0x70, 0x90, 0x26, 0x42, 0xdc, 0x9a, 0xa4, 0x49, 0x96, 0xf8, 0xbd, 0xf7, 0xa6, 0x61, 0x75, 0x12, 0xa6, 0xe1, 0x20, 0x4d, 0x84, 0xb8, 0x35, 0x49, 0x93, 0x2c,
0xcd, 0xec, 0x62, 0xc2, 0xc5, 0xe6, 0x7a, 0x96, 0x86, 0xb1, 0x08, 0x07, 0x59, 0x94, 0xc4, 0x72, 0xf1, 0x9b, 0xd9, 0xc5, 0x84, 0x8b, 0xcd, 0xf5, 0x2c, 0x0d, 0x63, 0x11, 0x0e, 0xb2, 0x28, 0x89,
0x65, 0x73, 0x79, 0x90, 0x8c, 0xc7, 0x39, 0xb4, 0x76, 0x3c, 0x4a, 0x06, 0x1f, 0x0c, 0xce, 0xc2, 0xe5, 0xca, 0xe6, 0xf2, 0x20, 0x19, 0x8f, 0x73, 0x68, 0xed, 0x78, 0x94, 0x0c, 0x3e, 0x18, 0x9c,
0x48, 0x61, 0x82, 0x07, 0xb0, 0xf1, 0x50, 0x1f, 0xd6, 0xcf, 0xc2, 0x6c, 0x2a, 0xee, 0xf1, 0x2c, 0x85, 0x91, 0xc2, 0x04, 0x0f, 0x60, 0xe3, 0xa1, 0x3e, 0xac, 0x9f, 0x85, 0xd9, 0x54, 0xdc, 0xe3,
0x8c, 0x46, 0xc2, 0xbf, 0x06, 0xcd, 0x70, 0x38, 0x4c, 0x45, 0xcf, 0xdb, 0xaa, 0x6f, 0x77, 0x98, 0x59, 0x18, 0x8d, 0x84, 0x7f, 0x0d, 0x9a, 0xe1, 0x70, 0x98, 0x8a, 0x9e, 0xb7, 0x55, 0xdf, 0xee,
0x04, 0xfc, 0xe7, 0xa0, 0x43, 0x67, 0xec, 0x87, 0xe2, 0xac, 0x57, 0xdb, 0xaa, 0x6f, 0x2f, 0xb3, 0x30, 0x09, 0xf8, 0xcf, 0x41, 0x87, 0xce, 0xd8, 0x0f, 0xc5, 0x59, 0xaf, 0xb6, 0x55, 0xdf, 0x5e,
0x02, 0x11, 0xbc, 0x0f, 0xcf, 0x3a, 0xa7, 0xed, 0xe2, 0x9a, 0x3e, 0xf2, 0x06, 0x40, 0x4e, 0x2b, 0x66, 0x05, 0x22, 0x78, 0x1f, 0x9e, 0x75, 0x4e, 0xdb, 0xc5, 0x35, 0x7d, 0xe4, 0x0d, 0x80, 0x9c,
0xcf, 0x5d, 0x66, 0x06, 0x06, 0x0f, 0xcf, 0xce, 0x19, 0x17, 0xd3, 0x51, 0x26, 0xf4, 0xe1, 0x39, 0x56, 0x9e, 0xbb, 0xcc, 0x0c, 0x0c, 0x1e, 0x9e, 0x9d, 0x33, 0x2e, 0xa6, 0xa3, 0x4c, 0xe8, 0xc3,
0x22, 0xf8, 0x57, 0x0d, 0xae, 0xe7, 0xa7, 0xef, 0xf3, 0xe8, 0xf4, 0x2c, 0x93, 0x77, 0xf8, 0x1b, 0x73, 0x44, 0xf0, 0xaf, 0x1a, 0x5c, 0xcf, 0x4f, 0xdf, 0xe7, 0xd1, 0xe9, 0x59, 0x26, 0xef, 0xf0,
0xd0, 0x12, 0xf4, 0xab, 0xe7, 0x6d, 0x79, 0xdb, 0x4d, 0xa6, 0x20, 0x14, 0x21, 0x8b, 0xb2, 0x11, 0x37, 0xa0, 0x25, 0xe8, 0x57, 0xcf, 0xdb, 0xf2, 0xb6, 0x9b, 0x4c, 0x41, 0x28, 0x42, 0x16, 0x65,
0xef, 0xd5, 0xb6, 0x3c, 0x14, 0x81, 0x00, 0xa4, 0x3e, 0xa3, 0xdd, 0xbd, 0xfa, 0x96, 0xb7, 0x5d, 0x23, 0xde, 0xab, 0x6d, 0x79, 0x28, 0x02, 0x01, 0x48, 0x7d, 0x46, 0xbb, 0x7b, 0xf5, 0x2d, 0x6f,
0x67, 0x0a, 0xf2, 0xbf, 0x06, 0x8b, 0x43, 0xc9, 0x68, 0xaf, 0xb1, 0xe5, 0x6d, 0x2f, 0xed, 0x3c, 0xbb, 0xce, 0x14, 0xe4, 0x7f, 0x0d, 0x16, 0x87, 0x92, 0xd1, 0x5e, 0x63, 0xcb, 0xdb, 0x5e, 0xda,
0x7f, 0x8b, 0xd4, 0x7a, 0xab, 0x5a, 0x41, 0x4c, 0x53, 0xa3, 0x58, 0xe3, 0x30, 0x8a, 0x25, 0x4b, 0x79, 0xfe, 0x16, 0xa9, 0xf5, 0x56, 0xb5, 0x82, 0x98, 0xa6, 0x46, 0xb1, 0xc6, 0x61, 0x14, 0x4b,
0xbd, 0x26, 0x1d, 0x6a, 0x60, 0xfc, 0x4d, 0x68, 0x13, 0x84, 0x2a, 0x6b, 0x6d, 0x79, 0xdb, 0xcb, 0x96, 0x7a, 0x4d, 0x3a, 0xd4, 0xc0, 0xf8, 0x9b, 0xd0, 0x26, 0x08, 0x55, 0xd6, 0xda, 0xf2, 0xb6,
0x2c, 0x87, 0xfd, 0x37, 0x61, 0xf9, 0xd8, 0x50, 0x51, 0x6f, 0x91, 0x6e, 0x0e, 0xaa, 0x6f, 0x36, 0x97, 0x59, 0x0e, 0xfb, 0x6f, 0xc2, 0xf2, 0xb1, 0xa1, 0xa2, 0xde, 0x22, 0xdd, 0x1c, 0x54, 0xdf,
0x95, 0xc9, 0xac, 0x7d, 0xfe, 0x21, 0xf8, 0x62, 0x3a, 0xe1, 0xe9, 0x87, 0x91, 0x88, 0x92, 0x58, 0x6c, 0x2a, 0x93, 0x59, 0xfb, 0xfc, 0x43, 0xf0, 0xc5, 0x74, 0xc2, 0xd3, 0x0f, 0x23, 0x11, 0x25,
0x9f, 0xd6, 0xbe, 0x8a, 0x1c, 0x15, 0x1b, 0x83, 0x7f, 0xd4, 0xa0, 0x57, 0xa9, 0x6b, 0x26, 0x26, 0xb1, 0x3e, 0xad, 0x7d, 0x15, 0x39, 0x2a, 0x36, 0x06, 0xff, 0xa8, 0x41, 0xaf, 0x52, 0xd7, 0x4c,
0x5f, 0x90, 0xba, 0x6d, 0xad, 0x35, 0xe6, 0x6a, 0xad, 0x49, 0x07, 0x16, 0x5a, 0xdb, 0x82, 0x25, 0x4c, 0xbe, 0x20, 0x75, 0xdb, 0x5a, 0x6b, 0xcc, 0xd5, 0x5a, 0x93, 0x0e, 0x2c, 0xb4, 0xb6, 0x05,
0xf4, 0xeb, 0x28, 0x7b, 0x83, 0x3c, 0xb4, 0x45, 0x1e, 0x6a, 0xa2, 0xfc, 0x6d, 0x58, 0x95, 0xe0, 0x4b, 0xe8, 0xd7, 0x51, 0xf6, 0x06, 0x79, 0x68, 0x8b, 0x3c, 0xd4, 0x44, 0xf9, 0xdb, 0xb0, 0x2a,
0x6e, 0xee, 0xad, 0x8b, 0x44, 0xe5, 0xa2, 0xfd, 0xbb, 0xb0, 0x21, 0x51, 0xfd, 0x42, 0x0d, 0xf2, 0xc1, 0xdd, 0xdc, 0x5b, 0x17, 0x89, 0xca, 0x45, 0xfb, 0x77, 0x61, 0x43, 0xa2, 0xfa, 0x85, 0x1a,
0xd8, 0x36, 0x6d, 0x98, 0xb1, 0xea, 0x7f, 0x13, 0x36, 0x4b, 0x2b, 0xc5, 0x65, 0x1d, 0xda, 0x3b, 0xe4, 0xb1, 0x6d, 0xda, 0x30, 0x63, 0xd5, 0xff, 0x26, 0x6c, 0x96, 0x56, 0x8a, 0xcb, 0x3a, 0xb4,
0x87, 0x22, 0xf8, 0x8d, 0x07, 0xab, 0x8e, 0x45, 0x0a, 0x0d, 0x7a, 0xd5, 0x1a, 0xac, 0x59, 0x1a, 0x77, 0x0e, 0x45, 0xf0, 0x1b, 0x0f, 0x56, 0x1d, 0x8b, 0x14, 0x1a, 0xf4, 0xaa, 0x35, 0x58, 0xb3,
0xb4, 0x62, 0xb1, 0x4e, 0x8e, 0x55, 0x20, 0x3e, 0xb3, 0x7e, 0x0d, 0xaf, 0x0c, 0x3e, 0xf6, 0x0c, 0x34, 0x68, 0xc5, 0x62, 0x9d, 0x1c, 0xab, 0x40, 0x7c, 0x66, 0xfd, 0x1a, 0x5e, 0x19, 0x7c, 0xec,
0xf3, 0xef, 0x25, 0xb1, 0xe0, 0xb1, 0x98, 0xce, 0x67, 0x12, 0x4d, 0x72, 0x56, 0xdc, 0x27, 0x39, 0x19, 0xe6, 0xdf, 0x4b, 0x62, 0xc1, 0x63, 0x31, 0x9d, 0xcf, 0x24, 0x9a, 0xe4, 0xac, 0xb8, 0x4f,
0x35, 0x51, 0xfe, 0x0b, 0xd0, 0x1d, 0xc8, 0xa3, 0xf6, 0x4d, 0x7f, 0xb0, 0x91, 0xfe, 0x57, 0x60, 0x72, 0x6a, 0xa2, 0xfc, 0x17, 0xa0, 0x3b, 0x90, 0x47, 0xed, 0x9b, 0xfe, 0x60, 0x23, 0xfd, 0xaf,
0x4d, 0x21, 0x0a, 0x65, 0x36, 0xe8, 0xa2, 0x12, 0x3e, 0xf8, 0xa3, 0x07, 0x3e, 0xb2, 0xf9, 0x4e, 0xc0, 0x9a, 0x42, 0x14, 0xca, 0x6c, 0xd0, 0x45, 0x25, 0x7c, 0xf0, 0x47, 0x0f, 0x7c, 0x64, 0xf3,
0x32, 0xe4, 0x68, 0x94, 0xbd, 0x24, 0x3e, 0x89, 0x4e, 0x67, 0x30, 0xb8, 0x02, 0xb5, 0x64, 0x42, 0x9d, 0x64, 0xc8, 0xd1, 0x28, 0x7b, 0x49, 0x7c, 0x12, 0x9d, 0xce, 0x60, 0x70, 0x05, 0x6a, 0xc9,
0x7c, 0x75, 0x59, 0x2d, 0x99, 0x20, 0x1c, 0x0d, 0x89, 0x87, 0x0e, 0xab, 0x45, 0x43, 0xdf, 0x87, 0x84, 0xf8, 0xea, 0xb2, 0x5a, 0x32, 0x41, 0x38, 0x1a, 0x12, 0x0f, 0x1d, 0x56, 0x8b, 0x86, 0xbe,
0x06, 0xa6, 0x38, 0x75, 0x19, 0xfd, 0xc6, 0x93, 0x3e, 0x0c, 0x47, 0x53, 0x4e, 0x0a, 0xea, 0x32, 0x0f, 0x0d, 0x4c, 0x71, 0xea, 0x32, 0xfa, 0x8d, 0x27, 0x7d, 0x18, 0x8e, 0xa6, 0x9c, 0x14, 0xd4,
0x09, 0x48, 0xef, 0x8b, 0x62, 0xf1, 0x66, 0x9a, 0xfc, 0x98, 0xc7, 0x14, 0xd2, 0x28, 0x6a, 0x81, 0x65, 0x12, 0x90, 0xde, 0x17, 0xc5, 0xe2, 0xcd, 0x34, 0xf9, 0x31, 0x8f, 0x29, 0xa4, 0x51, 0xd4,
0x92, 0x96, 0x11, 0x0f, 0xa7, 0xc7, 0x6f, 0xf3, 0x0b, 0x0a, 0xe9, 0x0e, 0x2b, 0x10, 0xc1, 0xb7, 0x02, 0x25, 0x2d, 0x23, 0x1e, 0x4e, 0x8f, 0xdf, 0xe6, 0x17, 0x14, 0xd2, 0x1d, 0x56, 0x20, 0x82,
0x0b, 0xae, 0xbf, 0x9b, 0x64, 0x5c, 0xc6, 0xdc, 0x8c, 0x7c, 0x8b, 0x1c, 0x24, 0x19, 0x97, 0xe9, 0x6f, 0x17, 0x5c, 0x7f, 0x37, 0xc9, 0xb8, 0x8c, 0xb9, 0x19, 0xf9, 0x16, 0x39, 0x48, 0x32, 0x2e,
0xb0, 0xc3, 0x24, 0x10, 0xfc, 0xc1, 0x83, 0x6b, 0xa6, 0xe0, 0x07, 0x43, 0x65, 0x1b, 0x2d, 0x84, 0xd3, 0x61, 0x87, 0x49, 0x20, 0xf8, 0x83, 0x07, 0xd7, 0x4c, 0xc1, 0x0f, 0x86, 0xca, 0x36, 0x5a,
0x67, 0x08, 0x71, 0x03, 0x60, 0x92, 0x26, 0x93, 0x44, 0x84, 0xa3, 0x83, 0xa1, 0x8a, 0x4d, 0x03, 0x08, 0xcf, 0x10, 0xe2, 0x06, 0xc0, 0x24, 0x4d, 0x26, 0x89, 0x08, 0x47, 0x07, 0x43, 0x15, 0x9b,
0x83, 0xee, 0xf5, 0x68, 0x1a, 0x65, 0x07, 0x5a, 0x19, 0x0a, 0x32, 0xc2, 0xbc, 0x51, 0x1d, 0xe6, 0x06, 0x06, 0xdd, 0xeb, 0xd1, 0x34, 0xca, 0x0e, 0xb4, 0x32, 0x14, 0x64, 0x84, 0x79, 0xa3, 0x3a,
0x4d, 0x53, 0xbd, 0x96, 0xc8, 0x2d, 0x57, 0xe4, 0x5f, 0xd5, 0x60, 0x4d, 0x33, 0x9c, 0x33, 0x2b, 0xcc, 0x9b, 0xa6, 0x7a, 0x2d, 0x91, 0x5b, 0xae, 0xc8, 0xbf, 0xaa, 0xc1, 0x9a, 0x66, 0x38, 0x67,
0x2d, 0xe0, 0xe5, 0x16, 0x28, 0x2e, 0xac, 0x55, 0x5f, 0x58, 0x37, 0x2f, 0xbc, 0x01, 0x90, 0x85, 0x56, 0x5a, 0xc0, 0xcb, 0x2d, 0x50, 0x5c, 0x58, 0xab, 0xbe, 0xb0, 0x6e, 0x5e, 0x78, 0x03, 0x20,
0xe9, 0x29, 0xa7, 0x80, 0x57, 0x56, 0x33, 0x30, 0xae, 0x95, 0x9a, 0x65, 0x2b, 0xdd, 0xd6, 0xba, 0x0b, 0xd3, 0x53, 0x4e, 0x01, 0xaf, 0xac, 0x66, 0x60, 0x5c, 0x2b, 0x35, 0xcb, 0x56, 0xba, 0xad,
0x6d, 0x51, 0x9a, 0x7c, 0xc6, 0x48, 0x93, 0xb6, 0x6d, 0x94, 0xda, 0x31, 0x64, 0x4e, 0xd2, 0x64, 0x75, 0xdb, 0xa2, 0x34, 0xf9, 0x8c, 0x91, 0x26, 0x6d, 0xdb, 0x28, 0xb5, 0x63, 0xc8, 0x9c, 0xa4,
0x4c, 0x17, 0x4a, 0xab, 0xe6, 0xb0, 0x11, 0xa4, 0xed, 0x72, 0x90, 0x6a, 0xbd, 0x74, 0x5c, 0xbd, 0xc9, 0x98, 0x2e, 0x94, 0x56, 0xcd, 0x61, 0x23, 0x48, 0xdb, 0xe5, 0x20, 0xd5, 0x7a, 0xe9, 0xb8,
0xfc, 0xc9, 0x83, 0xeb, 0x8c, 0x0f, 0x78, 0x34, 0xc9, 0xf4, 0xb5, 0xca, 0x89, 0xab, 0x2c, 0x79, 0x7a, 0xf9, 0x93, 0x07, 0xd7, 0x19, 0x1f, 0xf0, 0x68, 0x92, 0xe9, 0x6b, 0x95, 0x13, 0x57, 0x59,
0x07, 0x5a, 0x03, 0x5a, 0x25, 0x05, 0x95, 0x39, 0x2e, 0x62, 0x80, 0x29, 0x42, 0xff, 0x25, 0x68, 0xf2, 0x0e, 0xb4, 0x06, 0xb4, 0x4a, 0x0a, 0x2a, 0x73, 0x5c, 0xc4, 0x00, 0x53, 0x84, 0xfe, 0x4b,
0x4c, 0x52, 0xfe, 0x21, 0xa9, 0x6e, 0x69, 0xe7, 0x69, 0x67, 0x83, 0x36, 0x05, 0x23, 0x22, 0xff, 0xd0, 0x98, 0xa4, 0xfc, 0x43, 0x52, 0xdd, 0xd2, 0xce, 0xd3, 0xce, 0x06, 0x6d, 0x0a, 0x46, 0x44,
0x0e, 0x2c, 0x0e, 0xa6, 0x69, 0xca, 0xe3, 0x4c, 0xbd, 0x80, 0x33, 0xe9, 0x35, 0x5d, 0xf0, 0x3b, 0xfe, 0x1d, 0x58, 0x1c, 0x4c, 0xd3, 0x94, 0xc7, 0x99, 0x7a, 0x01, 0x67, 0xd2, 0x6b, 0xba, 0xe0,
0x0f, 0x9e, 0x77, 0x04, 0x40, 0x2e, 0x90, 0xec, 0xbd, 0xc9, 0x30, 0xcc, 0xb8, 0xa5, 0x34, 0xcf, 0x77, 0x1e, 0x3c, 0xef, 0x08, 0x80, 0x5c, 0x20, 0xd9, 0x7b, 0x93, 0x61, 0x98, 0x71, 0x4b, 0x69,
0x51, 0xda, 0x6d, 0xc5, 0x9d, 0x14, 0xe7, 0xd9, 0x0a, 0x71, 0x1c, 0x0e, 0xbf, 0x5a, 0x70, 0x58, 0x9e, 0xa3, 0xb4, 0xdb, 0x8a, 0x3b, 0x29, 0xce, 0xb3, 0x15, 0xe2, 0x38, 0x1c, 0x7e, 0xb5, 0xe0,
0xbf, 0x7c, 0x4f, 0xce, 0xe5, 0x7f, 0x3c, 0x78, 0xda, 0xe1, 0x92, 0xac, 0x9b, 0xc4, 0xbc, 0xe4, 0xb0, 0x7e, 0xf9, 0x9e, 0x9c, 0xcb, 0xff, 0x7a, 0xf0, 0xb4, 0xc3, 0x25, 0x59, 0x37, 0x89, 0x79,
0x85, 0xd5, 0xaf, 0x98, 0xed, 0x6d, 0xf5, 0x92, 0xb7, 0xe1, 0x7a, 0x92, 0x85, 0x23, 0x3c, 0x5a, 0xc9, 0x0b, 0xab, 0x5f, 0x31, 0xdb, 0xdb, 0xea, 0x25, 0x6f, 0xc3, 0xf5, 0x24, 0x0b, 0x47, 0x78,
0x07, 0x8c, 0x81, 0xa1, 0xd2, 0x06, 0x21, 0xbc, 0x96, 0x7c, 0xb1, 0xc9, 0x0a, 0x04, 0xe5, 0xe2, 0xb4, 0x0e, 0x18, 0x03, 0x43, 0xa5, 0x0d, 0x42, 0x78, 0x2d, 0xf9, 0x62, 0x93, 0x15, 0x08, 0xca,
0x44, 0x64, 0xb4, 0xd8, 0xa2, 0xc5, 0x1c, 0xf6, 0x7b, 0xb0, 0x88, 0xde, 0xc7, 0x44, 0xa6, 0x7c, 0xc5, 0x89, 0xc8, 0x68, 0xb1, 0x45, 0x8b, 0x39, 0xec, 0xf7, 0x60, 0x11, 0xbd, 0x8f, 0x89, 0x4c,
0x4e, 0x83, 0x78, 0xe7, 0x30, 0x89, 0xb9, 0x14, 0x96, 0xdc, 0xae, 0xc9, 0x0c, 0x0c, 0xda, 0xe6, 0xf9, 0x9c, 0x06, 0xf1, 0xce, 0x61, 0x12, 0x73, 0x29, 0x2c, 0xb9, 0x5d, 0x93, 0x19, 0x18, 0xb4,
0x29, 0x2d, 0xee, 0x5b, 0x69, 0x32, 0x9d, 0x3c, 0x51, 0x7e, 0xcc, 0xf3, 0x93, 0x0c, 0x35, 0x95, 0xcd, 0x53, 0x5a, 0xdc, 0xb7, 0xd2, 0x64, 0x3a, 0x79, 0xa2, 0xfc, 0x98, 0xe7, 0x27, 0x19, 0x6a,
0x9f, 0x2e, 0x8f, 0x32, 0x2a, 0xfa, 0x94, 0xbf, 0x0b, 0x95, 0x19, 0x0c, 0x4c, 0xf0, 0x6f, 0x97, 0x2a, 0x3f, 0x5d, 0x1e, 0x65, 0x54, 0xf4, 0x29, 0x7f, 0x17, 0x2a, 0x33, 0x18, 0x98, 0xe0, 0xdf,
0xcb, 0x2f, 0x24, 0x3b, 0x6c, 0xc1, 0x52, 0x61, 0x1d, 0xcd, 0xb3, 0x89, 0xba, 0x02, 0xe7, 0xa6, 0x2e, 0x97, 0x5f, 0x48, 0x76, 0xd8, 0x82, 0xa5, 0xc2, 0x3a, 0x9a, 0x67, 0x13, 0x75, 0x05, 0xce,
0xe7, 0xb6, 0x66, 0x86, 0xfb, 0xa2, 0x5b, 0xd5, 0x18, 0xd2, 0xb6, 0x4b, 0xd2, 0x7e, 0xe2, 0xc1, 0x4d, 0xcf, 0x6d, 0xcd, 0x0c, 0xf7, 0x45, 0xb7, 0xaa, 0x31, 0xa4, 0x6d, 0x97, 0xa4, 0xfd, 0xc4,
0xa6, 0xe3, 0x89, 0xa6, 0x69, 0xaa, 0xa2, 0x7e, 0xc7, 0x89, 0xfa, 0x4d, 0xc7, 0xe5, 0x8d, 0xfd, 0x83, 0x4d, 0xc7, 0x13, 0x4d, 0xd3, 0x54, 0x45, 0xfd, 0x8e, 0x13, 0xf5, 0x9b, 0x8e, 0xcb, 0x1b,
0x79, 0xd8, 0xdf, 0xb2, 0xc2, 0xbe, 0x72, 0x87, 0x15, 0x57, 0xaf, 0xb9, 0x91, 0x3f, 0x6f, 0x4b, 0xfb, 0xf3, 0xb0, 0xbf, 0x65, 0x85, 0x7d, 0xe5, 0x0e, 0x2b, 0xae, 0x5e, 0x73, 0x23, 0x7f, 0xde,
0x1e, 0x56, 0x3f, 0xf7, 0xe0, 0x1a, 0xe3, 0x8f, 0xf2, 0x4a, 0x81, 0x52, 0x44, 0x7c, 0x92, 0xcc, 0x96, 0x3c, 0xac, 0x7e, 0xee, 0xc1, 0x35, 0xc6, 0x1f, 0xe5, 0x95, 0x02, 0xa5, 0x88, 0xf8, 0x24,
0xf6, 0xb0, 0x48, 0x3f, 0x40, 0xe6, 0x8b, 0x5b, 0x37, 0x84, 0x9d, 0xf5, 0xe8, 0x58, 0x69, 0xb4, 0x99, 0xed, 0x61, 0x91, 0x7e, 0x80, 0xcc, 0x17, 0xb7, 0x6e, 0x08, 0x3b, 0xeb, 0xd1, 0xb1, 0xd2,
0xe9, 0xa6, 0xd1, 0x3d, 0xd8, 0x60, 0x5c, 0x4c, 0x2c, 0x46, 0xa4, 0x95, 0xbf, 0x0c, 0xf5, 0x68, 0x68, 0xd3, 0x4d, 0xa3, 0x7b, 0xb0, 0xc1, 0xb8, 0x98, 0x58, 0x8c, 0x48, 0x2b, 0x7f, 0x19, 0xea,
0x28, 0xdf, 0xd4, 0x39, 0xe9, 0x0c, 0x69, 0x82, 0xb7, 0x30, 0x47, 0x38, 0x87, 0x90, 0xd8, 0xc2, 0xd1, 0x50, 0xbe, 0xa9, 0x73, 0xd2, 0x19, 0xd2, 0x04, 0x6f, 0x61, 0x8e, 0x70, 0x0e, 0x21, 0xb1,
0xbf, 0x69, 0x9e, 0x32, 0x4f, 0x35, 0x74, 0xd0, 0x44, 0xbe, 0x75, 0xbb, 0x51, 0x3c, 0x3c, 0x8c, 0x85, 0x7f, 0xd3, 0x3c, 0x65, 0x9e, 0x6a, 0xe8, 0xa0, 0x89, 0x7c, 0xeb, 0x76, 0xa3, 0x78, 0x78,
0x62, 0x9e, 0xee, 0x8d, 0x87, 0xe4, 0x17, 0x51, 0x3c, 0x7c, 0x83, 0x7a, 0x33, 0x55, 0x37, 0x1b, 0x18, 0xc5, 0x3c, 0xdd, 0x1b, 0x0f, 0xc9, 0x2f, 0xa2, 0x78, 0xf8, 0x06, 0xf5, 0x66, 0xaa, 0x6e,
0x18, 0x92, 0x2f, 0x8a, 0x87, 0x7b, 0xe8, 0x7e, 0xaa, 0x78, 0x2a, 0x10, 0x45, 0xf6, 0xc1, 0xfb, 0x36, 0x30, 0x24, 0x5f, 0x14, 0x0f, 0xf7, 0xd0, 0xfd, 0x54, 0xf1, 0x54, 0x20, 0x8a, 0xec, 0x83,
0xec, 0xec, 0x83, 0x98, 0xe0, 0x2f, 0x1e, 0xac, 0x5b, 0x57, 0x92, 0x15, 0x66, 0x14, 0x03, 0x78, 0xf7, 0xd9, 0xd9, 0x07, 0x31, 0xc1, 0x5f, 0x3c, 0x58, 0xb7, 0xae, 0x24, 0x2b, 0xcc, 0x28, 0x06,
0x6c, 0xdf, 0x8c, 0x24, 0x03, 0x63, 0xf3, 0x51, 0x9f, 0xcf, 0x47, 0xc3, 0xe5, 0x23, 0xaf, 0x48, 0xf0, 0xd8, 0xbe, 0x19, 0x49, 0x06, 0xc6, 0xe6, 0xa3, 0x3e, 0x9f, 0x8f, 0x86, 0xcb, 0x47, 0x5e,
0x8f, 0xa2, 0x31, 0x57, 0x11, 0x55, 0x20, 0x30, 0xe2, 0x64, 0x79, 0x2a, 0x03, 0x47, 0xd5, 0x4d, 0x91, 0x1e, 0x45, 0x63, 0xae, 0x22, 0xaa, 0x40, 0x60, 0xc4, 0xc9, 0xf2, 0x54, 0x06, 0x8e, 0xaa,
0x06, 0x2a, 0xf8, 0xa5, 0x07, 0x3d, 0x23, 0x3a, 0x2e, 0x17, 0xe7, 0xa6, 0xf5, 0x80, 0xf4, 0x0c, 0x9b, 0x0c, 0x54, 0xf0, 0x4b, 0x0f, 0x7a, 0x46, 0x74, 0x5c, 0x2e, 0xce, 0x4d, 0xeb, 0x01, 0xe9,
0xcb, 0x58, 0x7b, 0x95, 0x97, 0xef, 0xb8, 0xaf, 0xc7, 0xec, 0x0d, 0xb9, 0x8f, 0xdf, 0x97, 0x55, 0x19, 0x96, 0xb1, 0xf6, 0x2a, 0x2f, 0xdf, 0x71, 0x5f, 0x8f, 0xd9, 0x1b, 0x72, 0x1f, 0xbf, 0x2f,
0x3a, 0x8a, 0x87, 0x14, 0xdf, 0x89, 0x49, 0x4a, 0x6a, 0x99, 0x48, 0x09, 0x92, 0x9b, 0x02, 0x81, 0xab, 0x74, 0x14, 0x0f, 0x29, 0xbe, 0x13, 0x93, 0x94, 0xd4, 0x32, 0x91, 0x12, 0x24, 0x37, 0x05,
0xbe, 0x3f, 0xc6, 0x63, 0xf4, 0xfb, 0x41, 0x40, 0xf0, 0xfd, 0xa2, 0xfe, 0xc1, 0x63, 0x1e, 0x44, 0x02, 0x7d, 0x7f, 0x8c, 0xc7, 0xe8, 0xf7, 0x83, 0x80, 0xe0, 0xfb, 0x45, 0xfd, 0x83, 0xc7, 0x3c,
0x22, 0x9b, 0x11, 0x25, 0xb7, 0xa0, 0x45, 0x5b, 0x64, 0xc9, 0xb7, 0xb4, 0xb3, 0xe1, 0xb8, 0x9b, 0x88, 0x44, 0x36, 0x23, 0x4a, 0x6e, 0x41, 0x8b, 0xb6, 0xc8, 0x92, 0x6f, 0x69, 0x67, 0xc3, 0x71,
0xe2, 0x82, 0x29, 0xaa, 0xe0, 0xa3, 0xd2, 0x03, 0xac, 0x2f, 0x50, 0x0f, 0xb0, 0x2e, 0x01, 0xbc, 0x37, 0xc5, 0x05, 0x53, 0x54, 0xc1, 0x47, 0xa5, 0x07, 0x58, 0x5f, 0xa0, 0x1e, 0x60, 0x5d, 0x02,
0xca, 0x27, 0x5d, 0x13, 0x97, 0x4b, 0x80, 0xda, 0x7c, 0xfa, 0x5c, 0x43, 0x8f, 0x31, 0x09, 0xc8, 0x78, 0x95, 0x4f, 0xba, 0x26, 0x2e, 0x97, 0x00, 0xb5, 0xf9, 0xf4, 0xb9, 0x86, 0x1e, 0x63, 0x12,
0xb8, 0xb1, 0xc4, 0x7b, 0x09, 0x1a, 0xa3, 0x48, 0x64, 0x97, 0xde, 0x8b, 0x44, 0x68, 0x1a, 0xdd, 0x90, 0x71, 0x63, 0x89, 0xf7, 0x12, 0x34, 0x46, 0x91, 0xc8, 0x2e, 0xbd, 0x17, 0x89, 0xd0, 0x34,
0x7c, 0x4b, 0xb1, 0xe7, 0x98, 0x46, 0x11, 0x06, 0x3f, 0xd3, 0x5e, 0x8f, 0x1e, 0xb4, 0x73, 0x18, 0xba, 0xf9, 0x96, 0x62, 0xcf, 0x31, 0x8d, 0x22, 0x0c, 0x7e, 0xa6, 0xbd, 0x1e, 0x3d, 0x68, 0xe7,
0x46, 0xf1, 0x61, 0x38, 0x31, 0x32, 0xb3, 0x37, 0xbb, 0x5b, 0xaa, 0xe9, 0x0c, 0x52, 0xdd, 0x2d, 0x30, 0x8c, 0xe2, 0xc3, 0x70, 0x62, 0x64, 0x66, 0x6f, 0x76, 0xb7, 0x54, 0xd3, 0x19, 0xa4, 0xba,
0xd5, 0xe7, 0x76, 0x4b, 0x0d, 0xbb, 0x1b, 0x0d, 0xee, 0xc9, 0x7a, 0xbe, 0x60, 0x83, 0xdc, 0xf5, 0x5b, 0xaa, 0xcf, 0xed, 0x96, 0x1a, 0x76, 0x37, 0x1a, 0xdc, 0x93, 0xf5, 0x7c, 0xc1, 0x06, 0xb9,
0x16, 0x34, 0xa3, 0x8c, 0x8f, 0x75, 0xd6, 0xb0, 0xe4, 0x31, 0x19, 0x66, 0x92, 0x2c, 0xf8, 0x67, 0xeb, 0x2d, 0x68, 0x46, 0x19, 0x1f, 0xeb, 0xac, 0x61, 0xc9, 0x63, 0x32, 0xcc, 0x24, 0x59, 0xf0,
0x5d, 0xbe, 0x83, 0x79, 0xee, 0x51, 0x11, 0xf9, 0x02, 0x74, 0xf1, 0xa6, 0xa2, 0x1b, 0xf2, 0xa8, 0xcf, 0xba, 0x7c, 0x07, 0xf3, 0xdc, 0xa3, 0x22, 0xf2, 0x05, 0xe8, 0xe2, 0x4d, 0x45, 0x37, 0xe4,
0x59, 0xb3, 0x91, 0xd8, 0xef, 0x16, 0x08, 0xb3, 0x05, 0x73, 0xd1, 0x33, 0xde, 0xcb, 0x42, 0x6b, 0x51, 0xb3, 0x66, 0x23, 0xb1, 0xdf, 0x2d, 0x10, 0x66, 0x0b, 0xe6, 0xa2, 0x67, 0xbc, 0x97, 0x85,
0x0d, 0x4b, 0x6b, 0x01, 0x2c, 0x4f, 0x52, 0x5e, 0x5c, 0x2e, 0x3b, 0x45, 0x0b, 0x67, 0x6b, 0xb6, 0xd6, 0x1a, 0x96, 0xd6, 0x02, 0x58, 0x9e, 0xa4, 0xbc, 0xb8, 0x5c, 0x76, 0x8a, 0x16, 0xce, 0xd6,
0xe5, 0xf6, 0xa1, 0xf2, 0x04, 0x14, 0x86, 0xab, 0x36, 0x5c, 0x9f, 0x90, 0xe3, 0x28, 0xa2, 0x72, 0x6c, 0xcb, 0xed, 0x43, 0xe5, 0x09, 0x28, 0x0c, 0x57, 0x6d, 0xb8, 0x3e, 0x21, 0xc7, 0x51, 0x44,
0x82, 0xb6, 0x3c, 0x21, 0x47, 0xa0, 0xee, 0xb3, 0xf3, 0xbd, 0x64, 0x1a, 0x67, 0x82, 0x2a, 0xe8, 0xe5, 0x04, 0x6d, 0x79, 0x42, 0x8e, 0x40, 0xdd, 0x67, 0xe7, 0x7b, 0xc9, 0x34, 0xce, 0x04, 0x55,
0x2e, 0xcb, 0x61, 0xb9, 0x26, 0x27, 0x44, 0x3d, 0x90, 0x5d, 0xac, 0x86, 0xb1, 0x72, 0xca, 0xce, 0xd0, 0x5d, 0x96, 0xc3, 0x72, 0x4d, 0x4e, 0x88, 0x7a, 0x20, 0xbb, 0x58, 0x0d, 0x63, 0xe5, 0x94,
0xe5, 0xac, 0x69, 0x89, 0x86, 0x49, 0x1a, 0xa4, 0x56, 0x14, 0xd5, 0x7c, 0xa4, 0xb7, 0x2e, 0x4b, 0x9d, 0xcb, 0x59, 0xd3, 0x12, 0x0d, 0x93, 0x34, 0x48, 0xad, 0x28, 0xaa, 0xf9, 0x48, 0x6f, 0x5d,
0x9d, 0x5a, 0x48, 0xe4, 0x5c, 0x21, 0xe4, 0x21, 0x5d, 0x3a, 0xc4, 0xc2, 0xf9, 0x37, 0x61, 0x3d, 0x96, 0x3a, 0xb5, 0x90, 0xc8, 0xb9, 0x42, 0xc8, 0x43, 0xba, 0x74, 0x88, 0x85, 0xf3, 0x6f, 0xc2,
0x4e, 0xe2, 0x3d, 0x6a, 0xf3, 0x8f, 0x34, 0x93, 0x2b, 0xc4, 0x64, 0x79, 0x21, 0xd8, 0x85, 0xf5, 0x7a, 0x9c, 0xc4, 0x7b, 0xd4, 0xe6, 0x1f, 0x69, 0x26, 0x57, 0x88, 0xc9, 0xf2, 0x42, 0xb0, 0x0b,
0x3e, 0x1f, 0x9d, 0xa8, 0x8e, 0xba, 0x9f, 0x85, 0xa7, 0x5c, 0xf8, 0x2f, 0xdb, 0x8e, 0xa2, 0x03, 0xeb, 0x7d, 0x3e, 0x3a, 0x51, 0x1d, 0x75, 0x3f, 0x0b, 0x4f, 0xb9, 0xf0, 0x5f, 0xb6, 0x1d, 0x45,
0xc5, 0x25, 0xd4, 0x7e, 0xf2, 0x00, 0xd6, 0xdc, 0x25, 0xcc, 0xac, 0x22, 0x0b, 0xd3, 0x6c, 0xdf, 0x07, 0x8a, 0x4b, 0xa8, 0xfd, 0xe4, 0x01, 0xac, 0xb9, 0x4b, 0x98, 0x59, 0x45, 0x16, 0xa6, 0xd9,
0x74, 0x7c, 0x13, 0x85, 0xf6, 0xe5, 0x71, 0x78, 0xac, 0xca, 0xda, 0x2e, 0x53, 0x50, 0xf0, 0x77, 0xbe, 0xe9, 0xf8, 0x26, 0x0a, 0xed, 0xcb, 0xe3, 0xf0, 0x58, 0x95, 0xb5, 0x5d, 0xa6, 0xa0, 0xe0,
0x0f, 0xae, 0xb9, 0xc7, 0x91, 0xfb, 0xce, 0x2f, 0xbf, 0xba, 0xf9, 0xc3, 0xfc, 0x32, 0x34, 0x05, 0xef, 0x1e, 0x5c, 0x73, 0x8f, 0x23, 0xf7, 0x9d, 0x5f, 0x7e, 0x75, 0xf3, 0x87, 0xf9, 0x65, 0x68,
0x6e, 0x72, 0x3a, 0x8c, 0x32, 0xf7, 0x44, 0x65, 0xd5, 0x54, 0x0d, 0xa7, 0xa6, 0xba, 0x01, 0xc0, 0x0a, 0xdc, 0xe4, 0x74, 0x18, 0x65, 0xee, 0x89, 0xca, 0xaa, 0xa9, 0x1a, 0x4e, 0x4d, 0x75, 0x03,
0xcf, 0xf9, 0xc0, 0x9e, 0xa3, 0x15, 0x98, 0xcf, 0xdc, 0xaf, 0x05, 0x1c, 0x36, 0x1e, 0x24, 0x83, 0x80, 0x9f, 0xf3, 0x81, 0x3d, 0x47, 0x2b, 0x30, 0x9f, 0xb9, 0x5f, 0x0b, 0x38, 0x6c, 0x3c, 0x48,
0x70, 0xa4, 0x99, 0x29, 0xa4, 0xbb, 0xa3, 0xb9, 0xf6, 0xac, 0x2e, 0xa2, 0x4a, 0x13, 0x9a, 0x73, 0x06, 0xe1, 0x48, 0x33, 0x53, 0x48, 0x77, 0x47, 0x73, 0xed, 0x59, 0x5d, 0x44, 0x95, 0x26, 0x34,
0xf2, 0xa6, 0x83, 0x78, 0xc8, 0xcf, 0x55, 0xf6, 0xd0, 0x60, 0x70, 0x17, 0x56, 0x64, 0xf9, 0x85, 0xe7, 0xe4, 0x4d, 0x07, 0xf1, 0x90, 0x9f, 0xab, 0xec, 0xa1, 0xc1, 0xe0, 0x2e, 0xac, 0xc8, 0xf2,
0x1c, 0x54, 0x2a, 0x2f, 0x9f, 0x23, 0xd4, 0x8c, 0x39, 0x42, 0x10, 0xc0, 0x9a, 0xdc, 0xb7, 0x17, 0x0b, 0x39, 0xa8, 0x54, 0x5e, 0x3e, 0x47, 0xa8, 0x19, 0x73, 0x84, 0x20, 0x80, 0x35, 0xb9, 0x6f,
0xc6, 0x03, 0x3e, 0xaa, 0xda, 0x19, 0x7c, 0xaa, 0xa6, 0x44, 0xc4, 0xce, 0x65, 0xf5, 0x7b, 0x76, 0x2f, 0x8c, 0x07, 0x7c, 0x54, 0xb5, 0x33, 0xf8, 0x54, 0x4d, 0x89, 0x88, 0x9d, 0xcb, 0xea, 0xf7,
0xa1, 0xeb, 0xf7, 0xec, 0x02, 0xb5, 0x25, 0x45, 0x84, 0xb9, 0x86, 0xd9, 0x5f, 0xd0, 0x02, 0xbe, 0xec, 0x42, 0xd7, 0xef, 0xd9, 0x05, 0x6a, 0x4b, 0x8a, 0x08, 0x73, 0x0d, 0xb3, 0xbf, 0xa0, 0x05,
0x04, 0x0d, 0x54, 0x5b, 0x6f, 0x89, 0xe8, 0xaf, 0x2b, 0x7a, 0x5b, 0xb2, 0xfd, 0x05, 0x46, 0x44, 0x7c, 0x09, 0x1a, 0xa8, 0xb6, 0xde, 0x12, 0xd1, 0x5f, 0x57, 0xf4, 0xb6, 0x64, 0xfb, 0x0b, 0x8c,
0xd4, 0x8a, 0x12, 0xd7, 0x14, 0x3a, 0xc5, 0xf1, 0xae, 0x40, 0xfb, 0x0b, 0x4c, 0x11, 0xee, 0x2e, 0x88, 0xa8, 0x15, 0x25, 0xae, 0x29, 0x74, 0x8a, 0xe3, 0x5d, 0x81, 0xf6, 0x17, 0x98, 0x22, 0xdc,
0x2a, 0x25, 0x04, 0x3f, 0x2d, 0x6a, 0x60, 0xcb, 0x32, 0x4a, 0xbc, 0xdb, 0xd6, 0x7b, 0x35, 0xd7, 0x5d, 0x54, 0x4a, 0x08, 0x7e, 0x5a, 0xd4, 0xc0, 0x96, 0x65, 0x94, 0x78, 0xb7, 0xad, 0xf7, 0x6a,
0x34, 0xa5, 0xa6, 0xb0, 0x76, 0xf9, 0x9e, 0xfc, 0xdd, 0xfa, 0xd4, 0x83, 0xe7, 0xaa, 0xd8, 0x98, 0xae, 0x69, 0x4a, 0x4d, 0x61, 0xed, 0xf2, 0x3d, 0xf9, 0xbb, 0xf5, 0xa9, 0x07, 0xcf, 0x55, 0xb1,
0xd9, 0x19, 0xe6, 0xae, 0x5e, 0xbb, 0x92, 0xab, 0xdb, 0x2d, 0x61, 0x7d, 0x7e, 0x4b, 0xd8, 0x98, 0x31, 0xb3, 0x33, 0xcc, 0x5d, 0xbd, 0x76, 0x25, 0x57, 0xb7, 0x5b, 0xc2, 0xfa, 0xfc, 0x96, 0xb0,
0xd7, 0x12, 0x36, 0x67, 0xb7, 0x84, 0x2d, 0xab, 0x25, 0x0c, 0x3e, 0x82, 0x67, 0xab, 0x44, 0x12, 0x31, 0xaf, 0x25, 0x6c, 0xce, 0x6e, 0x09, 0x5b, 0x56, 0x4b, 0x18, 0x7c, 0x04, 0xcf, 0x56, 0x89,
0xaa, 0x14, 0xb8, 0x69, 0xa9, 0xb6, 0x37, 0x43, 0x00, 0x51, 0x2e, 0x97, 0x6a, 0x97, 0x6c, 0xc8, 0x24, 0x54, 0x29, 0x70, 0xd3, 0x52, 0x6d, 0x6f, 0x86, 0x00, 0xa2, 0x5c, 0x2e, 0xd5, 0x2e, 0xd9,
0x95, 0xfa, 0x5b, 0x0f, 0x7c, 0xc6, 0x1f, 0xbd, 0x3b, 0xe5, 0xe9, 0x05, 0x92, 0xa9, 0x1c, 0x67, 0x90, 0x2b, 0xf5, 0xb7, 0x1e, 0xf8, 0x8c, 0x3f, 0x7a, 0x77, 0xca, 0xd3, 0x0b, 0x24, 0x53, 0x39,
0x8f, 0x8c, 0x8b, 0xec, 0xe1, 0xb6, 0x04, 0xd7, 0xa0, 0x39, 0xc0, 0x54, 0xa9, 0xd4, 0x25, 0x01, 0xce, 0x1e, 0x19, 0x17, 0xd9, 0xc3, 0x6d, 0x09, 0xae, 0x41, 0x73, 0x80, 0xa9, 0x52, 0xa9, 0x4b,
0xd4, 0xd4, 0x30, 0x4a, 0xb9, 0xac, 0x9d, 0x95, 0xa6, 0x72, 0x84, 0xf1, 0x74, 0x35, 0xad, 0xa7, 0x02, 0xa8, 0xa9, 0x61, 0x94, 0x72, 0x59, 0x3b, 0x2b, 0x4d, 0xe5, 0x08, 0xe3, 0xe9, 0x6a, 0x5a,
0xeb, 0x1a, 0x34, 0x23, 0x0a, 0x57, 0xd9, 0x51, 0x4b, 0x20, 0x78, 0x17, 0xab, 0x95, 0xc9, 0xe8, 0x4f, 0xd7, 0x35, 0x68, 0x46, 0x14, 0xae, 0xb2, 0xa3, 0x96, 0x40, 0xf0, 0x2e, 0x56, 0x2b, 0x93,
0xc2, 0xe5, 0xf0, 0x75, 0x7a, 0x82, 0xa4, 0x8f, 0xa8, 0x4c, 0x3c, 0xd7, 0x8d, 0x0a, 0xea, 0xe0, 0xd1, 0x85, 0xcb, 0xe1, 0xeb, 0xf4, 0x04, 0x49, 0x1f, 0x51, 0x99, 0x78, 0xae, 0x1b, 0x15, 0xd4,
0x87, 0xc6, 0x7f, 0x28, 0x7b, 0x6a, 0xba, 0x2c, 0x74, 0xc9, 0x2a, 0xa2, 0xd3, 0x58, 0x3d, 0xd9, 0xc1, 0x0f, 0x8d, 0xff, 0x50, 0xf6, 0xd4, 0x74, 0x59, 0xe8, 0x92, 0x55, 0x44, 0xa7, 0xb1, 0x7a,
0xf4, 0x1b, 0x0d, 0x4b, 0xad, 0xf3, 0x61, 0x28, 0xbb, 0xed, 0x65, 0x96, 0xc3, 0x45, 0x8f, 0x5d, 0xb2, 0xe9, 0x37, 0x1a, 0x96, 0x5a, 0xe7, 0xc3, 0x50, 0x76, 0xdb, 0xcb, 0x2c, 0x87, 0x8b, 0x1e,
0x37, 0x66, 0x80, 0xc1, 0x4f, 0x8c, 0xff, 0x3d, 0xe4, 0xf9, 0xaa, 0x69, 0xd8, 0xb1, 0xb4, 0x6a, 0xbb, 0x6e, 0xcc, 0x00, 0x83, 0x9f, 0x18, 0xff, 0x7b, 0xc8, 0xf3, 0x55, 0xd3, 0xb0, 0x63, 0x69,
0x77, 0x26, 0x4e, 0x19, 0x91, 0x6b, 0xfc, 0x36, 0xd4, 0x8f, 0x47, 0x42, 0x19, 0xb4, 0xf4, 0xcf, 0xd5, 0xee, 0x4c, 0x9c, 0x32, 0x22, 0xd7, 0xf8, 0x6d, 0xa8, 0x1f, 0x8f, 0x84, 0x32, 0x68, 0xe9,
0x80, 0xc5, 0x3e, 0x43, 0xca, 0x20, 0x93, 0xa3, 0x46, 0x5a, 0xa6, 0x22, 0xec, 0x09, 0x2e, 0xdf, 0x9f, 0x01, 0x8b, 0x7d, 0x86, 0x94, 0x41, 0x26, 0x47, 0x8d, 0xb4, 0x4c, 0x45, 0xd8, 0x13, 0x5c,
0x86, 0xd5, 0x48, 0x18, 0xea, 0x54, 0xaf, 0x49, 0x9b, 0xb9, 0xe8, 0xe0, 0xd7, 0x1e, 0xf8, 0x7b, 0xbe, 0x0d, 0xab, 0x91, 0x30, 0xd4, 0xa9, 0x5e, 0x93, 0x36, 0x73, 0xd1, 0xc1, 0xaf, 0x3d, 0xf0,
0x78, 0xca, 0x1b, 0x42, 0xf0, 0xec, 0x28, 0x0d, 0x63, 0x71, 0xc2, 0x53, 0xf4, 0x84, 0x10, 0x11, 0xf7, 0xf0, 0x94, 0x37, 0x84, 0xe0, 0xd9, 0x51, 0x1a, 0xc6, 0xe2, 0x84, 0xa7, 0xe8, 0x09, 0x21,
0xf7, 0xcf, 0xf9, 0x40, 0x97, 0xde, 0x39, 0x02, 0x9f, 0x41, 0x02, 0xfa, 0x17, 0xe3, 0xe3, 0x64, 0x22, 0xee, 0x9f, 0xf3, 0x81, 0x2e, 0xbd, 0x73, 0x04, 0x3e, 0x83, 0x04, 0xf4, 0x2f, 0xc6, 0xc7,
0xa4, 0xdc, 0xca, 0x44, 0xa1, 0xaf, 0x84, 0xe3, 0xdc, 0xc1, 0xea, 0x4c, 0x41, 0x88, 0xcf, 0x12, 0xc9, 0x48, 0xb9, 0x95, 0x89, 0x42, 0x5f, 0x09, 0xc7, 0xb9, 0x83, 0xd5, 0x99, 0x82, 0x10, 0x9f,
0xe3, 0x51, 0x52, 0x10, 0x1a, 0x30, 0xd6, 0x11, 0xd8, 0x61, 0xf4, 0x3b, 0xf8, 0x6f, 0xcb, 0x18, 0x25, 0xc6, 0xa3, 0xa4, 0x20, 0x34, 0x60, 0xac, 0x23, 0xb0, 0xc3, 0xe8, 0x77, 0xf0, 0x9f, 0x96,
0xdc, 0x2b, 0x65, 0xdc, 0xc5, 0x1e, 0x1d, 0x55, 0xa7, 0x94, 0xf1, 0x5c, 0xb5, 0x62, 0x25, 0x35, 0x31, 0xb8, 0x57, 0xca, 0xb8, 0x8b, 0x3d, 0x3a, 0xaa, 0x4e, 0x29, 0xe3, 0xb9, 0x6a, 0xc5, 0x4a,
0xe5, 0x44, 0x82, 0xfd, 0x57, 0x75, 0xb3, 0x50, 0x9e, 0x66, 0xb9, 0x0a, 0xc7, 0x44, 0x4d, 0xb4, 0x6a, 0xca, 0x89, 0x04, 0xfb, 0xaf, 0xea, 0x66, 0xa1, 0x3c, 0xcd, 0x72, 0x15, 0x8e, 0x89, 0x9a,
0xfe, 0x37, 0xa0, 0x1b, 0x9a, 0x5a, 0x51, 0x2d, 0xbb, 0xce, 0xd8, 0xa4, 0x31, 0xa1, 0x17, 0xf7, 0x68, 0xfd, 0x6f, 0x40, 0x37, 0x34, 0xb5, 0xa2, 0x5a, 0x76, 0x9d, 0xb1, 0x49, 0x63, 0x42, 0x2f,
0x17, 0x98, 0x4d, 0x9d, 0x6f, 0xff, 0x5e, 0x94, 0x9d, 0x0d, 0xd3, 0xf0, 0x31, 0x09, 0xe7, 0x6e, 0xee, 0x2f, 0x30, 0x9b, 0x3a, 0xdf, 0xfe, 0xbd, 0x28, 0x3b, 0x1b, 0xa6, 0xe1, 0x63, 0x12, 0xce,
0xd7, 0x8b, 0xf9, 0x76, 0x8d, 0xf0, 0x5f, 0x85, 0x76, 0xa6, 0x2f, 0x6e, 0xcd, 0xbf, 0x38, 0x27, 0xdd, 0xae, 0x17, 0xf3, 0xed, 0x1a, 0xe1, 0xbf, 0x0a, 0xed, 0x4c, 0x5f, 0xdc, 0x9a, 0x7f, 0x71,
0xc4, 0x4d, 0x8f, 0xf5, 0x75, 0x8b, 0xf3, 0xaf, 0xcb, 0x09, 0xfd, 0xfb, 0xb0, 0xa2, 0x0f, 0x38, 0x4e, 0x88, 0x9b, 0x1e, 0xeb, 0xeb, 0x16, 0xe7, 0x5f, 0x97, 0x13, 0xfa, 0xf7, 0x61, 0x45, 0x1f,
0x4a, 0xc8, 0xe2, 0x6d, 0x4b, 0x4b, 0xf6, 0x7d, 0x92, 0x64, 0x7f, 0x81, 0x39, 0x9b, 0xfc, 0xaf, 0x70, 0x94, 0x90, 0xc5, 0xdb, 0x96, 0x96, 0xec, 0xfb, 0x24, 0xc9, 0xfe, 0x02, 0x73, 0x36, 0xf9,
0x03, 0xc4, 0xf9, 0x5c, 0x95, 0x0a, 0xc8, 0x79, 0x93, 0xd3, 0xfd, 0x05, 0x66, 0x90, 0xfb, 0x6f, 0x5f, 0x07, 0x88, 0xf3, 0xb9, 0x2a, 0x15, 0x90, 0xf3, 0x26, 0xa7, 0xfb, 0x0b, 0xcc, 0x20, 0xf7,
0xc2, 0x6a, 0x6c, 0xcf, 0x58, 0xd4, 0x7b, 0x3a, 0x67, 0x0a, 0xb3, 0xbf, 0xc0, 0xdc, 0x4d, 0xfe, 0xdf, 0x84, 0xd5, 0xd8, 0x9e, 0xb1, 0xa8, 0xf7, 0x74, 0xce, 0x14, 0x66, 0x7f, 0x81, 0xb9, 0x9b,
0x2e, 0xac, 0x0a, 0x9d, 0x6c, 0xd4, 0x39, 0xf2, 0x9d, 0x35, 0xdb, 0x3b, 0x63, 0x15, 0xcf, 0x70, 0xfc, 0x5d, 0x58, 0x15, 0x3a, 0xd9, 0xa8, 0x73, 0xe4, 0x3b, 0x6b, 0xb6, 0x77, 0xc6, 0x2a, 0x9e,
0x36, 0xf8, 0x6f, 0x83, 0x3f, 0x28, 0x85, 0x84, 0x7a, 0x7f, 0xb5, 0x40, 0xe5, 0x98, 0xd9, 0x5f, 0xe1, 0x6c, 0xf0, 0xdf, 0x06, 0x7f, 0x50, 0x0a, 0x09, 0xf5, 0xfe, 0x6a, 0x81, 0xca, 0x31, 0xb3,
0x60, 0x15, 0xdb, 0xfc, 0x6f, 0x41, 0x77, 0x62, 0xb6, 0x56, 0xbd, 0x6e, 0xa9, 0x4d, 0x33, 0x07, 0xbf, 0xc0, 0x2a, 0xb6, 0xf9, 0xdf, 0x82, 0xee, 0xc4, 0x6c, 0xad, 0x7a, 0xdd, 0x52, 0x9b, 0x66,
0x18, 0xe8, 0x07, 0x16, 0xbd, 0xff, 0x3e, 0x6c, 0x1a, 0x7f, 0x1c, 0x3a, 0x2a, 0xa0, 0x12, 0xf8, 0x0e, 0x30, 0xd0, 0x0f, 0x2c, 0x7a, 0xff, 0x5d, 0xb8, 0x6e, 0xfc, 0x71, 0x58, 0x4c, 0xae, 0xa9,
0x12, 0x35, 0xcf, 0xd9, 0x6e, 0x14, 0x33, 0x4d, 0x2c, 0x66, 0x8a, 0xda, 0xe1, 0x13, 0x0f, 0x36, 0xfa, 0xbd, 0x44, 0xc3, 0xd5, 0x3b, 0x8d, 0x12, 0xa6, 0x89, 0x25, 0x4c, 0x51, 0x31, 0x7c, 0xe2,
0x8c, 0x76, 0xd7, 0x88, 0xad, 0x59, 0xb3, 0x33, 0xa3, 0x6a, 0xbd, 0x5a, 0x92, 0x7a, 0xc5, 0x9a, 0xc1, 0x86, 0xd1, 0xe4, 0x1a, 0x11, 0x35, 0x6b, 0x62, 0x66, 0xd4, 0xaa, 0x57, 0x4b, 0x4d, 0xaf,
0x9d, 0x95, 0x22, 0xd9, 0xfa, 0x37, 0x54, 0x3e, 0x94, 0x77, 0xdd, 0xe9, 0xd9, 0xfc, 0x4d, 0xf9, 0x58, 0x13, 0xb3, 0x52, 0xfc, 0x5a, 0xff, 0x81, 0xca, 0xe7, 0xf1, 0xae, 0x3b, 0x33, 0x9b, 0xbf,
0x63, 0xf9, 0xb6, 0x35, 0xfc, 0x2f, 0x02, 0xfe, 0xf3, 0xe4, 0xd6, 0xe0, 0xe3, 0x26, 0xbe, 0x6c, 0x29, 0x7f, 0x22, 0xdf, 0xb6, 0x46, 0xfe, 0x45, 0x98, 0x7f, 0x9e, 0x8c, 0x1a, 0x7c, 0xdc, 0xc4,
0xf6, 0x69, 0x54, 0xc6, 0xd8, 0x75, 0x88, 0x57, 0xaa, 0x43, 0xb6, 0x60, 0x89, 0x20, 0xa9, 0x46, 0xf7, 0xcc, 0x3e, 0x8d, 0x8a, 0x17, 0xbb, 0xfa, 0xf0, 0x4a, 0xd5, 0xc7, 0x16, 0x2c, 0x11, 0x24,
0xa5, 0x74, 0x13, 0xe5, 0xbf, 0x08, 0x2b, 0x58, 0x7b, 0xf4, 0xc3, 0x31, 0x57, 0x44, 0xf2, 0x79, 0xd5, 0xa8, 0x94, 0x6e, 0xa2, 0xfc, 0x17, 0x61, 0x05, 0x2b, 0x8e, 0x7e, 0x38, 0xe6, 0x8a, 0x48,
0x76, 0xb0, 0x45, 0x61, 0xda, 0xa8, 0x6e, 0x2d, 0x9b, 0x6e, 0x43, 0x5e, 0x34, 0x7d, 0xad, 0x79, 0x3e, 0xca, 0x0e, 0xb6, 0x28, 0x47, 0x1b, 0xd5, 0x0d, 0x65, 0xd3, 0x6d, 0xc3, 0x8b, 0x56, 0xaf,
0x4d, 0xdf, 0xe2, 0x9c, 0xa6, 0xaf, 0xed, 0x34, 0x7d, 0x56, 0x33, 0xda, 0x71, 0x9b, 0x51, 0xa3, 0x35, 0xaf, 0xd5, 0x5b, 0x9c, 0xd3, 0xea, 0xb5, 0x9d, 0x56, 0xcf, 0x6a, 0x41, 0x3b, 0x6e, 0x0b,
0x25, 0x84, 0x4b, 0x5a, 0xc2, 0xa5, 0xab, 0xb4, 0x84, 0xcb, 0x15, 0x2d, 0x61, 0xa9, 0x61, 0xef, 0x6a, 0x34, 0x82, 0x70, 0x49, 0x23, 0xb8, 0x74, 0x95, 0x46, 0x70, 0xb9, 0xa2, 0x11, 0x2c, 0xb5,
0x5e, 0xb1, 0x61, 0x5f, 0xa9, 0x6e, 0xd8, 0xb7, 0x61, 0x95, 0xfe, 0x46, 0xbd, 0x5f, 0xf4, 0x46, 0xe9, 0xdd, 0x2b, 0xb6, 0xe9, 0x2b, 0xd5, 0x6d, 0xfa, 0x36, 0xac, 0xd2, 0x9f, 0xa7, 0xf7, 0x8b,
0xab, 0x92, 0xd2, 0x41, 0xfb, 0xaf, 0xc1, 0x75, 0x32, 0x5b, 0xdf, 0x0e, 0x2c, 0xd1, 0x5b, 0x23, 0x8e, 0x68, 0x55, 0x52, 0x3a, 0x68, 0xff, 0x35, 0xb8, 0x4e, 0x66, 0xeb, 0xdb, 0x31, 0x25, 0x7a,
0x73, 0x55, 0x2f, 0xfa, 0x77, 0x61, 0xc3, 0x5d, 0x50, 0x56, 0x5e, 0xa7, 0x6d, 0x33, 0x56, 0xf1, 0x6b, 0x64, 0xae, 0xea, 0x45, 0xff, 0x2e, 0x6c, 0xb8, 0x0b, 0xca, 0xca, 0xeb, 0xb4, 0x6d, 0xc6,
0x36, 0xb2, 0x7f, 0x69, 0x9b, 0x2f, 0x6f, 0xab, 0x5c, 0x0c, 0x7e, 0x54, 0x8e, 0x5f, 0xc6, 0x07, 0x2a, 0xde, 0x46, 0xf6, 0x2f, 0x6d, 0xf3, 0xe5, 0x6d, 0x95, 0x8b, 0xc1, 0x8f, 0xca, 0xf1, 0xcb,
0x49, 0x3a, 0xfc, 0xa2, 0xe2, 0x37, 0xf8, 0x12, 0x2c, 0xe5, 0xcb, 0x47, 0xe7, 0xf4, 0xb4, 0x9f, 0xf8, 0x20, 0x49, 0x87, 0x5f, 0x54, 0xfc, 0x06, 0x5f, 0x82, 0xa5, 0x7c, 0xf9, 0xe8, 0x9c, 0x1e,
0xe7, 0x83, 0x13, 0x7c, 0xda, 0x09, 0x92, 0xe3, 0xde, 0x62, 0x76, 0x7d, 0x84, 0xbe, 0xea, 0x8e, 0xf4, 0xf3, 0x7c, 0x5c, 0x82, 0x0f, 0x3a, 0x41, 0x72, 0xc8, 0x5b, 0x4c, 0xac, 0x8f, 0xd0, 0x57,
0x48, 0xae, 0xf2, 0x37, 0x7c, 0xf0, 0xfb, 0x1a, 0xac, 0x5b, 0x83, 0xe3, 0xff, 0xaf, 0xa8, 0xeb, 0xdd, 0xc1, 0xc8, 0x55, 0xfe, 0x7c, 0x0f, 0x7e, 0x5f, 0x83, 0x75, 0x6b, 0x5c, 0xfc, 0xff, 0x15,
0x7c, 0xde, 0xa8, 0xeb, 0x18, 0x51, 0x57, 0xe1, 0xa3, 0x9d, 0x4a, 0x1f, 0x0d, 0xde, 0x82, 0xa7, 0x75, 0x9d, 0xcf, 0x1b, 0x75, 0x1d, 0x23, 0xea, 0x2a, 0x7c, 0xb4, 0x53, 0xe9, 0xa3, 0xc1, 0x5b,
0x2c, 0x65, 0x91, 0xde, 0x31, 0xe9, 0xb6, 0x88, 0x6f, 0x77, 0x5c, 0x56, 0x52, 0x2c, 0x53, 0x74, 0xf0, 0x94, 0xa5, 0x2c, 0xd2, 0x3b, 0x26, 0xdd, 0x16, 0xf1, 0xed, 0x0e, 0xc9, 0x4a, 0x8a, 0x65,
0x32, 0x79, 0xba, 0xf6, 0x43, 0x19, 0xaa, 0xad, 0x57, 0x1a, 0xff, 0x59, 0x1f, 0x2e, 0xfd, 0xb5, 0x8a, 0x4e, 0x26, 0x4f, 0xd7, 0x7e, 0x28, 0x43, 0xb5, 0xf5, 0x4a, 0x43, 0x3f, 0xeb, 0x73, 0xa5,
0x06, 0x2b, 0x45, 0x4d, 0x87, 0x0f, 0x25, 0xba, 0xe3, 0x49, 0x9a, 0x8c, 0xb5, 0x3b, 0xe2, 0x6f, 0xbf, 0xd6, 0x60, 0xa5, 0xa8, 0xe4, 0xf0, 0x79, 0x44, 0x77, 0x3c, 0x49, 0x93, 0xb1, 0x76, 0x47,
0x7a, 0x96, 0x12, 0xdd, 0xae, 0x64, 0x09, 0x1a, 0x39, 0xca, 0x6b, 0x17, 0x32, 0x4f, 0x9b, 0x19, 0xfc, 0x4d, 0xcf, 0x52, 0xa2, 0x9b, 0x94, 0x2c, 0x41, 0x23, 0x47, 0x79, 0xc5, 0x42, 0xe6, 0x69,
0x18, 0xc3, 0xf7, 0x1a, 0xa6, 0xef, 0x19, 0x65, 0x68, 0xd3, 0x2a, 0x43, 0x7d, 0x68, 0x70, 0xac, 0x33, 0x03, 0x63, 0xf8, 0x5e, 0xc3, 0xf4, 0x3d, 0xa3, 0xf8, 0x6c, 0x5a, 0xc5, 0xa7, 0x0f, 0x0d,
0x73, 0xa4, 0x5d, 0xe8, 0x37, 0xb5, 0x4e, 0xb2, 0x9e, 0x95, 0x7f, 0xff, 0x29, 0x08, 0x05, 0x92, 0x8e, 0xd5, 0x8d, 0xb4, 0x0b, 0xfd, 0xa6, 0x86, 0x49, 0x56, 0xb1, 0xf2, 0x4f, 0x3f, 0x05, 0xa1,
0x82, 0x5f, 0x4c, 0x38, 0xd9, 0xa3, 0xcb, 0x0a, 0x84, 0x61, 0x7e, 0xb0, 0xcc, 0x4f, 0x9f, 0x57, 0x40, 0x52, 0xf0, 0x8b, 0x09, 0x27, 0x7b, 0x74, 0x59, 0x81, 0x30, 0xcc, 0x0f, 0x96, 0xf9, 0xe9,
0xa0, 0xdb, 0xa0, 0x2e, 0x95, 0xa5, 0xae, 0x13, 0x45, 0x09, 0x4f, 0x1f, 0x0e, 0x84, 0x69, 0xa8, 0xa3, 0x0a, 0x74, 0x1b, 0xd4, 0xa5, 0xb2, 0xd4, 0x75, 0xa2, 0x28, 0xe1, 0xe9, 0x73, 0x81, 0x30,
0xa8, 0x36, 0xe4, 0x3c, 0xa6, 0xc0, 0x60, 0x32, 0x15, 0xd3, 0xc1, 0x80, 0x0b, 0xd1, 0x7b, 0x9a, 0x0d, 0x15, 0xd5, 0x86, 0x9c, 0xc2, 0x14, 0x18, 0x4c, 0xa6, 0x62, 0x3a, 0x18, 0x70, 0x21, 0x7a,
0x44, 0xd7, 0x60, 0xf0, 0x37, 0x4f, 0x8e, 0xbb, 0x69, 0xfa, 0x72, 0xef, 0x98, 0xb2, 0xd9, 0xcc, 0x4f, 0x93, 0xe8, 0x1a, 0x0c, 0xfe, 0xe6, 0xc9, 0x21, 0x37, 0xcd, 0x5c, 0xee, 0x1d, 0x53, 0x36,
0xc1, 0xac, 0x39, 0x5a, 0xad, 0x39, 0x9f, 0x47, 0x5d, 0x36, 0x96, 0x7d, 0x11, 0x56, 0x26, 0x21, 0x9b, 0x39, 0x8e, 0x35, 0x07, 0xaa, 0x35, 0xe7, 0xa3, 0xa8, 0xcb, 0x86, 0xb1, 0x2f, 0xc2, 0xca,
0xbe, 0xa5, 0x87, 0xe6, 0x70, 0x76, 0x99, 0x39, 0xd8, 0x4b, 0xfe, 0x98, 0x78, 0x01, 0xea, 0xd9, 0x24, 0xc4, 0xb7, 0xf4, 0xd0, 0x1c, 0xc9, 0x2e, 0x33, 0x07, 0x7b, 0xc9, 0xdf, 0x11, 0x2f, 0x40,
0xb9, 0xfc, 0x8c, 0x68, 0x69, 0xc7, 0x57, 0x9e, 0x77, 0x54, 0x7c, 0x4b, 0xc7, 0x70, 0x39, 0xf8, 0x3d, 0x3b, 0x97, 0x1f, 0x0f, 0x2d, 0xed, 0xf8, 0xca, 0xf3, 0x8e, 0x8a, 0x2f, 0xe8, 0x18, 0x2e,
0xb3, 0xfa, 0xe8, 0xc2, 0x14, 0x8a, 0xba, 0xbc, 0xab, 0x0a, 0xd6, 0x79, 0x62, 0xc1, 0x3a, 0x9f, 0x07, 0x7f, 0x56, 0x9f, 0x5a, 0x98, 0x42, 0x51, 0x6f, 0x77, 0x55, 0xc1, 0x3a, 0x4f, 0x2c, 0x58,
0x51, 0xb0, 0xb5, 0x42, 0xb0, 0x8e, 0x14, 0x22, 0x91, 0xbd, 0xe4, 0xee, 0x48, 0xf4, 0xa3, 0xd3, 0xe7, 0x33, 0x0a, 0xb6, 0x56, 0x08, 0xd6, 0x91, 0x42, 0x24, 0xb2, 0x83, 0xdc, 0x1d, 0x89, 0x7e,
0xb8, 0x3f, 0x1d, 0xeb, 0x0f, 0xc8, 0x66, 0x09, 0x91, 0xb7, 0xa4, 0x35, 0xf3, 0xb3, 0x14, 0x1f, 0x74, 0x1a, 0xf7, 0xa7, 0x63, 0xfd, 0xd9, 0xd8, 0x2c, 0x21, 0xf2, 0x46, 0xb4, 0x66, 0x7e, 0x8c,
0x1a, 0x63, 0x71, 0x2a, 0xfb, 0xd4, 0x65, 0x46, 0xbf, 0x91, 0x12, 0x1b, 0x5c, 0xd1, 0x6b, 0x10, 0xe2, 0x43, 0x63, 0x2c, 0x4e, 0x65, 0x77, 0xba, 0xcc, 0xe8, 0x37, 0x52, 0x62, 0x5b, 0x2b, 0x7a,
0x52, 0x02, 0xc1, 0x0f, 0xe0, 0x99, 0xca, 0x0b, 0xfb, 0x67, 0xc9, 0xe3, 0x27, 0xb8, 0xb4, 0x23, 0x0d, 0x42, 0x4a, 0x20, 0xf8, 0x01, 0x3c, 0x53, 0x79, 0x61, 0xff, 0x2c, 0x79, 0xfc, 0x04, 0x97,
0x2f, 0x0d, 0x8e, 0xf5, 0xec, 0x5d, 0x1f, 0x4f, 0x16, 0x79, 0x0d, 0x1a, 0x51, 0xd1, 0xc7, 0x6f, 0x76, 0xe4, 0xa5, 0xc1, 0xb1, 0x9e, 0xb8, 0xeb, 0xe3, 0xc9, 0x22, 0xaf, 0x41, 0x23, 0x2a, 0xba,
0x59, 0xa3, 0xf7, 0x0a, 0x3e, 0x18, 0x51, 0xcb, 0x26, 0x70, 0x12, 0x0d, 0xf4, 0xb5, 0x0a, 0x0a, 0xf7, 0x2d, 0x6b, 0xe0, 0x5e, 0xc1, 0x07, 0x23, 0x6a, 0xd9, 0xfa, 0x4d, 0xa2, 0x81, 0xbe, 0x56,
0x18, 0xac, 0x3c, 0xe0, 0xe1, 0x90, 0xa7, 0xfd, 0x8b, 0x78, 0xa0, 0xa7, 0x74, 0x07, 0xf7, 0xf4, 0x41, 0x01, 0x83, 0x95, 0x07, 0x3c, 0x1c, 0xf2, 0xb4, 0x7f, 0x11, 0x0f, 0xf4, 0x6c, 0xee, 0xe0,
0x64, 0xe8, 0xe0, 0x1e, 0x46, 0xc2, 0x71, 0x28, 0xf8, 0xc1, 0xf0, 0x5c, 0x25, 0x72, 0x0d, 0xe2, 0x9e, 0x9e, 0x07, 0x1d, 0xdc, 0xc3, 0x48, 0x38, 0x0e, 0x05, 0x3f, 0x18, 0x9e, 0xab, 0x44, 0xae,
0x99, 0xc9, 0xc9, 0x89, 0xe0, 0x3a, 0x79, 0x2b, 0x28, 0xf8, 0x85, 0x07, 0x5d, 0xe4, 0xe7, 0xe1, 0x41, 0x3c, 0x33, 0x39, 0x39, 0x11, 0x5c, 0x27, 0x6f, 0x05, 0x05, 0xbf, 0xf0, 0xa0, 0x8b, 0xfc,
0xce, 0xc3, 0xfe, 0xf4, 0xf8, 0x50, 0xe8, 0x92, 0xd7, 0xd3, 0x25, 0xaf, 0xff, 0x0a, 0xb4, 0x07, 0x3c, 0xdc, 0x79, 0xd8, 0x9f, 0x1e, 0x1f, 0x0a, 0x5d, 0xf2, 0x7a, 0xba, 0xe4, 0xf5, 0x5f, 0x81,
0x6a, 0x7a, 0xac, 0x5a, 0x8e, 0x0a, 0xcf, 0xc4, 0x7e, 0x49, 0x53, 0xf9, 0x77, 0x60, 0x51, 0x5c, 0xf6, 0x40, 0xcd, 0x8c, 0x55, 0xa3, 0x51, 0xe1, 0x99, 0xd8, 0x25, 0x69, 0x2a, 0xff, 0x0e, 0x2c,
0xc4, 0x83, 0x43, 0x71, 0xea, 0xcc, 0xf0, 0x6c, 0xee, 0xf7, 0x17, 0x98, 0xa6, 0x2b, 0xea, 0xea, 0x8a, 0x8b, 0x78, 0x70, 0x28, 0x4e, 0x9d, 0xc9, 0x9d, 0xcd, 0xfd, 0xfe, 0x02, 0xd3, 0x74, 0x45,
0xf7, 0x61, 0xe5, 0xfe, 0x48, 0x0e, 0x54, 0xd4, 0xff, 0x0e, 0x9b, 0xd0, 0x8e, 0x84, 0xdc, 0x49, 0x5d, 0xfd, 0x3e, 0xac, 0xdc, 0x1f, 0xc9, 0x31, 0x8a, 0xfa, 0xb7, 0x61, 0x13, 0xda, 0x91, 0x90,
0x5c, 0xb5, 0x59, 0x0e, 0xfb, 0x2f, 0x43, 0x6b, 0x24, 0x57, 0x6a, 0x73, 0x2e, 0x62, 0x8a, 0x28, 0x3b, 0x89, 0xab, 0x36, 0xcb, 0x61, 0xff, 0x65, 0x68, 0x8d, 0xe4, 0x4a, 0x6d, 0xce, 0x45, 0x4c,
0x78, 0x1e, 0x3a, 0xbb, 0xfa, 0xbf, 0x5a, 0xf4, 0xc9, 0x0f, 0xf8, 0x85, 0x52, 0x1e, 0xfe, 0xdc, 0x11, 0x05, 0xcf, 0x43, 0x67, 0x57, 0xff, 0x43, 0x8b, 0x3e, 0xf9, 0x01, 0xbf, 0x50, 0xca, 0xc3,
0x79, 0x1d, 0x3a, 0xf9, 0x07, 0xad, 0xfe, 0x4d, 0x68, 0x1d, 0x08, 0x3c, 0xc1, 0xef, 0xe6, 0x4f, 0x9f, 0x3b, 0xaf, 0x43, 0x27, 0xff, 0x8c, 0xd5, 0xbf, 0x09, 0xad, 0x03, 0x81, 0x27, 0xf8, 0xdd,
0xc0, 0xa3, 0x77, 0xa2, 0xd1, 0xe6, 0xba, 0x02, 0x0f, 0xc4, 0x5e, 0x38, 0x3d, 0x3d, 0xcb, 0xde, 0xfc, 0x09, 0x78, 0xf4, 0x4e, 0x34, 0xda, 0x5c, 0x57, 0xe0, 0x81, 0xd8, 0x0b, 0xa7, 0xa7, 0x67,
0x9b, 0x04, 0x0b, 0xc7, 0x2d, 0xfa, 0x8a, 0xf5, 0xd5, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xd9, 0x7b, 0x93, 0x60, 0xe1, 0xb8, 0x45, 0xdf, 0xae, 0xbe, 0xfa, 0xbf, 0x00, 0x00, 0x00, 0xff,
0x8e, 0x2e, 0x5e, 0x12, 0x2b, 0x00, 0x00, 0xff, 0xcf, 0x19, 0xdd, 0x70, 0x08, 0x2b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
...@@ -119,7 +119,6 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo { ...@@ -119,7 +119,6 @@ func (p *ParacrossType) GetLogMap() map[int64]*types.LogInfo {
TyLogParaSupervisionNodeConfig: {Ty: reflect.TypeOf(ReceiptParaNodeConfig{}), Name: "LogParaSupervisionNodeConfig"}, TyLogParaSupervisionNodeConfig: {Ty: reflect.TypeOf(ReceiptParaNodeConfig{}), Name: "LogParaSupervisionNodeConfig"},
TyLogParaSupervisionNodeGroupAddrsUpdate: {Ty: reflect.TypeOf(types.ReceiptConfig{}), Name: "LogParaSupervisionNodeGroupAddrsUpdate"}, TyLogParaSupervisionNodeGroupAddrsUpdate: {Ty: reflect.TypeOf(types.ReceiptConfig{}), Name: "LogParaSupervisionNodeGroupAddrsUpdate"},
TyLogParaSupervisionNodeStatusUpdate: {Ty: reflect.TypeOf(ReceiptParaNodeAddrStatUpdate{}), Name: "LogParaSupervisionNodeStatusUpdate"}, TyLogParaSupervisionNodeStatusUpdate: {Ty: reflect.TypeOf(ReceiptParaNodeAddrStatUpdate{}), Name: "LogParaSupervisionNodeStatusUpdate"},
TyLogParaSupervisionNodeGroupStatusUpdate: {Ty: reflect.TypeOf(ReceiptParaNodeGroupConfig{}), Name: "LogParaSupervisionNodeGroupStatusUpdate"},
} }
} }
...@@ -138,7 +137,7 @@ func (p *ParacrossType) GetTypeMap() map[string]int32 { ...@@ -138,7 +137,7 @@ func (p *ParacrossType) GetTypeMap() map[string]int32 {
"NodeGroupConfig": ParacrossActionNodeGroupApply, "NodeGroupConfig": ParacrossActionNodeGroupApply,
"SelfStageConfig": ParacrossActionSelfStageConfig, "SelfStageConfig": ParacrossActionSelfStageConfig,
"ParaBindMiner": ParacrossActionParaBindMiner, "ParaBindMiner": ParacrossActionParaBindMiner,
"SupervisionNodeGroupConfig": ParacrossActionSupervisionNodeGroupConfig, "SupervisionNodeConfig": ParacrossActionSupervisionNodeConfig,
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment