@agoric/cosmos 0.35.0-u21.0 → 0.35.0-u22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +11 -187
  2. package/Makefile +2 -2
  3. package/ante/ante.go +2 -2
  4. package/ante/inbound.go +1 -2
  5. package/ante/inbound_test.go +3 -1
  6. package/ante/vm_admission.go +1 -2
  7. package/app/app.go +255 -174
  8. package/app/encoding.go +6 -3
  9. package/app/export.go +50 -21
  10. package/app/genesis.go +7 -5
  11. package/app/params/encoding.go +1 -1
  12. package/app/params/proto.go +6 -4
  13. package/app/sim_test.go +11 -13
  14. package/app/txconfig/tx_config.go +169 -0
  15. package/app/upgrade.go +52 -97
  16. package/app/upgrade_test.go +1 -1
  17. package/cmd/agd/agvm.go +1 -1
  18. package/cmd/agd/main.go +1 -1
  19. package/cmd/libdaemon/main.go +2 -2
  20. package/daemon/cmd/root.go +99 -30
  21. package/daemon/cmd/root_test.go +12 -27
  22. package/daemon/main.go +2 -9
  23. package/git-revision.txt +1 -1
  24. package/go.mod +129 -109
  25. package/go.sum +228 -469
  26. package/package.json +2 -2
  27. package/proto/agoric/swingset/msgs.proto +46 -9
  28. package/proto/agoric/swingset/swingset.proto +7 -2
  29. package/proto/agoric/vbank/vbank.proto +1 -1
  30. package/proto/agoric/vibc/msgs.proto +4 -0
  31. package/tests/e2e/vbank/vbank_test.go +172 -0
  32. package/tests/integrations/types/aminojson_test.go +214 -0
  33. package/tests/integrations/vbank/vbank_test.go +348 -0
  34. package/third_party/proto/amino/amino.proto +6 -1
  35. package/third_party/proto/cosmos/base/v1beta1/coin.proto +18 -5
  36. package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +4 -8
  37. package/third_party/proto/ibc/core/channel/v1/channel.proto +42 -17
  38. package/third_party/proto/ibc/core/client/v1/client.proto +48 -40
  39. package/types/address_hooks.go +2 -2
  40. package/types/address_hooks_test.go +3 -3
  41. package/types/ibc_packet.go +3 -3
  42. package/types/ibc_packet_test.go +3 -3
  43. package/types/kv_entry_helpers.go +3 -3
  44. package/types/kv_entry_helpers_test.go +2 -2
  45. package/types/legacy_address_encoder.go +58 -0
  46. package/vm/proto_json_test.go +1 -1
  47. package/vm/server.go +2 -1
  48. package/x/swingset/abci.go +2 -2
  49. package/x/swingset/client/cli/tx.go +16 -14
  50. package/x/swingset/config.go +1 -1
  51. package/x/swingset/genesis.go +2 -1
  52. package/x/swingset/handler.go +2 -1
  53. package/x/swingset/keeper/extension_snapshotter.go +14 -5
  54. package/x/swingset/keeper/extension_snapshotter_test.go +1 -1
  55. package/x/swingset/keeper/keeper.go +21 -17
  56. package/x/swingset/keeper/keeper_test.go +10 -7
  57. package/x/swingset/keeper/msg_server.go +26 -5
  58. package/x/swingset/keeper/swing_store_exports_handler.go +1 -1
  59. package/x/swingset/keeper/swing_store_exports_handler_test.go +1 -1
  60. package/x/swingset/module.go +20 -22
  61. package/x/swingset/types/codec.go +10 -5
  62. package/x/swingset/types/default-params.go +13 -12
  63. package/x/swingset/types/expected_keepers.go +5 -4
  64. package/x/swingset/types/msgs.go +50 -36
  65. package/x/swingset/types/msgs.pb.go +60 -51
  66. package/x/swingset/types/params_test.go +21 -20
  67. package/x/swingset/types/swingset.pb.go +67 -61
  68. package/x/vbank/genesis.go +12 -8
  69. package/x/vbank/handler.go +2 -1
  70. package/x/vbank/keeper/grpc_query.go +4 -1
  71. package/x/vbank/keeper/keeper.go +108 -23
  72. package/x/vbank/keeper/querier.go +4 -1
  73. package/x/vbank/keeper/rewards.go +6 -2
  74. package/x/vbank/module.go +47 -75
  75. package/x/vbank/types/expected_keepers.go +15 -10
  76. package/x/vbank/types/key.go +3 -0
  77. package/x/vbank/types/params.go +4 -3
  78. package/x/vbank/types/vbank.pb.go +41 -40
  79. package/x/vbank/vbank.go +25 -10
  80. package/x/vbank/vbank_test.go +213 -154
  81. package/x/vibc/handler.go +2 -1
  82. package/x/vibc/keeper/keeper.go +10 -10
  83. package/x/vibc/keeper/migrations.go +1 -1
  84. package/x/vibc/keeper/triggers.go +1 -1
  85. package/x/vibc/module.go +5 -22
  86. package/x/vibc/types/codec.go +2 -1
  87. package/x/vibc/types/expected_keepers.go +7 -5
  88. package/x/vibc/types/ibc_module.go +5 -5
  89. package/x/vibc/types/msgs.go +30 -7
  90. package/x/vibc/types/msgs.pb.go +29 -25
  91. package/x/vibc/types/receiver.go +2 -2
  92. package/x/vlocalchain/handler.go +2 -1
  93. package/x/vlocalchain/keeper/keeper.go +17 -5
  94. package/x/vlocalchain/keeper/keeper_test.go +3 -2
  95. package/x/vlocalchain/types/expected_keepers.go +7 -4
  96. package/x/vlocalchain/vlocalchain_test.go +38 -26
  97. package/x/vstorage/genesis.go +10 -10
  98. package/x/vstorage/handler.go +2 -1
  99. package/x/vstorage/keeper/keeper.go +68 -46
  100. package/x/vstorage/keeper/keeper_test.go +35 -19
  101. package/x/vstorage/module.go +27 -13
  102. package/x/vstorage/testing/queue.go +5 -3
  103. package/x/vstorage/vstorage.go +2 -1
  104. package/x/vstorage/vstorage_test.go +21 -17
  105. package/x/vtransfer/genesis.go +1 -3
  106. package/x/vtransfer/handler.go +3 -2
  107. package/x/vtransfer/ibc_middleware.go +5 -5
  108. package/x/vtransfer/ibc_middleware_test.go +43 -29
  109. package/x/vtransfer/keeper/keeper.go +35 -33
  110. package/x/vtransfer/module.go +8 -11
  111. package/x/vtransfer/types/expected_keepers.go +3 -3
  112. package/x/vtransfer/utils_test.go +26 -11
  113. package/daemon/cmd/testnet.go +0 -539
@@ -3,6 +3,9 @@ package keeper
3
3
  import (
4
4
  "context"
5
5
 
6
+ sdkioerrors "cosmossdk.io/errors"
7
+ sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
8
+
6
9
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
7
10
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
8
11
  sdk "github.com/cosmos/cosmos-sdk/types"
@@ -43,6 +46,18 @@ func (keeper msgServer) routeAction(ctx sdk.Context, msg vm.ControllerAdmissionM
43
46
  func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeliverInbound) (*types.MsgDeliverInboundResponse, error) {
44
47
  ctx := sdk.UnwrapSDKContext(goCtx)
45
48
 
49
+ if msg.Submitter.Empty() {
50
+ return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidAddress, "Submitter address cannot be empty")
51
+ }
52
+ if len(msg.Messages) != len(msg.Nums) {
53
+ return nil, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages and Nums must be the same length")
54
+ }
55
+ for _, m := range msg.Messages {
56
+ if len(m) == 0 {
57
+ return nil, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages cannot be empty")
58
+ }
59
+ }
60
+
46
61
  // msg.Nums and msg.Messages must be zipped into an array of [num, message] pairs.
47
62
  messages := make([][]interface{}, len(msg.Messages))
48
63
  for i, message := range msg.Messages {
@@ -190,18 +205,24 @@ type installBundleAction struct {
190
205
 
191
206
  func (keeper msgServer) InstallBundle(goCtx context.Context, msg *types.MsgInstallBundle) (*types.MsgInstallBundleResponse, error) {
192
207
  ctx := sdk.UnwrapSDKContext(goCtx)
208
+ if err := msg.ValidateBasic(); err != nil {
209
+ return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
210
+ }
193
211
 
194
- err := msg.Uncompress()
195
- if err != nil {
212
+ if err := msg.Uncompress(); err != nil {
196
213
  return nil, err
197
214
  }
215
+
216
+ if err := msg.ValidateBasic(); err != nil {
217
+ return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
218
+ }
219
+
198
220
  action := installBundleAction{
199
221
  MsgInstallBundle: msg,
200
222
  }
201
223
 
202
- err = keeper.routeAction(ctx, msg, action)
203
- // fmt.Fprintln(os.Stderr, "Returned from SwingSet", out, err)
204
- if err != nil {
224
+ if err := keeper.routeAction(ctx, msg, action); err != nil {
225
+ // fmt.Fprintln(os.Stderr, "Returned from SwingSet", out, err)
205
226
  return nil, err
206
227
  }
207
228
 
@@ -10,10 +10,10 @@ import (
10
10
  "regexp"
11
11
 
12
12
  sdkioerrors "cosmossdk.io/errors"
13
+ "cosmossdk.io/log"
13
14
  agoric "github.com/Agoric/agoric-sdk/golang/cosmos/types"
14
15
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
15
16
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
16
- "github.com/cometbft/cometbft/libs/log"
17
17
  )
18
18
 
19
19
  // This module abstracts the generation and handling of swing-store exports,
@@ -5,8 +5,8 @@ import (
5
5
  "io"
6
6
  "testing"
7
7
 
8
+ "cosmossdk.io/log"
8
9
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
9
- "github.com/cometbft/cometbft/libs/log"
10
10
  )
11
11
 
12
12
  func newTestSwingStoreExportsHandler() *SwingStoreExportsHandler {
@@ -3,8 +3,8 @@ package swingset
3
3
  import (
4
4
  "context"
5
5
  "encoding/json"
6
- "fmt"
7
6
 
7
+ "cosmossdk.io/core/appmodule"
8
8
  "github.com/grpc-ecosystem/grpc-gateway/runtime"
9
9
  "github.com/spf13/cobra"
10
10
 
@@ -16,20 +16,28 @@ import (
16
16
  cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
17
17
  "github.com/cosmos/cosmos-sdk/types/module"
18
18
 
19
- abci "github.com/cometbft/cometbft/abci/types"
20
19
  sdk "github.com/cosmos/cosmos-sdk/types"
21
20
  )
22
21
 
23
22
  // type check to ensure the interface is properly implemented
24
23
  var (
25
- _ module.AppModule = AppModule{}
26
- _ module.AppModuleBasic = AppModuleBasic{}
24
+ _ module.AppModule = AppModule{}
25
+ _ module.AppModuleBasic = AppModuleBasic{}
26
+ _ appmodule.HasBeginBlocker = AppModule{}
27
+ _ appmodule.HasEndBlocker = AppModule{}
28
+ _ module.HasGenesis = AppModule{}
27
29
  )
28
30
 
29
31
  // app module Basics object
30
32
  type AppModuleBasic struct {
31
33
  }
32
34
 
35
+ // IsAppModule implements the appmodule.AppModule interface.
36
+ func (am AppModule) IsAppModule() {}
37
+
38
+ // IsOnePerModuleType is a marker function just indicates that this is a one-per-module type.
39
+ func (am AppModule) IsOnePerModuleType() {}
40
+
33
41
  func (AppModuleBasic) Name() string {
34
42
  return ModuleName
35
43
  }
@@ -128,26 +136,17 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
128
136
 
129
137
  func (AppModule) ConsensusVersion() uint64 { return 2 }
130
138
 
131
- func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {
139
+ func (am AppModule) BeginBlock(goCtx context.Context) error {
140
+ ctx := sdk.UnwrapSDKContext(goCtx)
132
141
  am.ensureControllerInited(ctx)
133
142
 
134
- err := BeginBlock(ctx, req, am.keeper)
135
- if err != nil {
136
- fmt.Println("BeginBlock error:", err)
137
- }
143
+ return BeginBlock(ctx, am.keeper)
138
144
  }
139
145
 
140
- func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate {
141
- valUpdate, err := EndBlock(ctx, req, am.keeper)
142
- if err != nil {
143
- fmt.Println("EndBlock error:", err)
144
- }
145
- if valUpdate != nil {
146
- return valUpdate
147
- }
148
-
149
- // Prevent Cosmos SDK internal errors.
150
- return []abci.ValidatorUpdate{}
146
+ func (am AppModule) EndBlock(goCtx context.Context) error {
147
+ ctx := sdk.UnwrapSDKContext(goCtx)
148
+ _, err := EndBlock(ctx, am.keeper)
149
+ return err
151
150
  }
152
151
 
153
152
  func (am *AppModule) checkSwingStoreExportSetup() {
@@ -156,7 +155,7 @@ func (am *AppModule) checkSwingStoreExportSetup() {
156
155
  }
157
156
  }
158
157
 
159
- func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate {
158
+ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) {
160
159
  var genesisState types.GenesisState
161
160
  cdc.MustUnmarshalJSON(data, &genesisState)
162
161
  am.checkSwingStoreExportSetup()
@@ -164,7 +163,6 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.
164
163
  if bootstrapNeeded {
165
164
  am.setBootstrapNeeded()
166
165
  }
167
- return []abci.ValidatorUpdate{}
168
166
  }
169
167
 
170
168
  func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
@@ -2,6 +2,7 @@ package types
2
2
 
3
3
  import (
4
4
  "github.com/cosmos/cosmos-sdk/codec"
5
+ "github.com/cosmos/cosmos-sdk/codec/legacy"
5
6
  cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
6
7
  cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
7
8
  sdk "github.com/cosmos/cosmos-sdk/types"
@@ -29,10 +30,12 @@ func init() {
29
30
 
30
31
  // RegisterCodec registers concrete types on the Amino codec
31
32
  func RegisterCodec(cdc *codec.LegacyAmino) {
32
- cdc.RegisterConcrete(&MsgDeliverInbound{}, ModuleName+"/DeliverInbound", nil)
33
- cdc.RegisterConcrete(&MsgProvision{}, ModuleName+"/Provision", nil)
34
- cdc.RegisterConcrete(&MsgWalletAction{}, ModuleName+"/WalletAction", nil)
35
- cdc.RegisterConcrete(&MsgWalletSpendAction{}, ModuleName+"/WalletSpendAction", nil)
33
+ legacy.RegisterAminoMsg(cdc, &MsgDeliverInbound{}, ModuleName+"/DeliverInbound")
34
+ legacy.RegisterAminoMsg(cdc, &MsgProvision{}, ModuleName+"/Provision")
35
+ legacy.RegisterAminoMsg(cdc, &MsgWalletAction{}, ModuleName+"/WalletAction")
36
+ legacy.RegisterAminoMsg(cdc, &MsgWalletSpendAction{}, ModuleName+"/WalletSpendAction")
37
+ legacy.RegisterAminoMsg(cdc, &MsgInstallBundle{}, ModuleName+"/InstallBundle")
38
+ cdc.RegisterConcrete(&CoreEvalProposal{}, ModuleName+"/CoreEvalProposal", nil)
36
39
  }
37
40
 
38
41
  // RegisterInterfaces registers the x/swingset interfaces types with the interface registry
@@ -42,8 +45,10 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) {
42
45
  &MsgProvision{},
43
46
  &MsgWalletAction{},
44
47
  &MsgWalletSpendAction{},
48
+ &MsgInstallBundle{},
45
49
  )
46
- registry.RegisterImplementations(
50
+ registry.RegisterInterface(
51
+ "cosmos.gov.v1beta1.Content",
47
52
  (*govv1beta1.Content)(nil),
48
53
  &CoreEvalProposal{},
49
54
  )
@@ -1,6 +1,7 @@
1
1
  package types
2
2
 
3
3
  import (
4
+ sdkmath "cosmossdk.io/math"
4
5
  sdk "github.com/cosmos/cosmos-sdk/types"
5
6
  )
6
7
 
@@ -43,15 +44,15 @@ const (
43
44
  )
44
45
 
45
46
  var (
46
- DefaultBeansPerXsnapComputron = sdk.NewUint(100)
47
+ DefaultBeansPerXsnapComputron = sdkmath.NewUint(100)
47
48
 
48
49
  // DefaultBeansPerBlockComputeLimit is how many computron beans we allow
49
50
  // before starting a new block. Some analysis (#3459) suggests this leads to
50
51
  // about 2/3rds utilization, based on 5 sec voting time and up to 10 sec of
51
52
  // computation.
52
- DefaultBeansPerBlockComputeLimit = sdk.NewUint(8000000).Mul(DefaultBeansPerXsnapComputron)
53
+ DefaultBeansPerBlockComputeLimit = sdkmath.NewUint(8000000).Mul(DefaultBeansPerXsnapComputron)
53
54
  // observed: 0.385 sec
54
- DefaultBeansPerVatCreation = sdk.NewUint(300000).Mul(DefaultBeansPerXsnapComputron)
55
+ DefaultBeansPerVatCreation = sdkmath.NewUint(300000).Mul(DefaultBeansPerXsnapComputron)
55
56
 
56
57
  // Fees are represented as integer "beans", where each bean is a uniform
57
58
  // fraction of this `fee_unit_price` as controlled by the below
@@ -63,14 +64,14 @@ var (
63
64
  // Larger numbers make for smaller beans, and we expect values to be rather
64
65
  // large for representing fees precisely in beans that each approximate
65
66
  // a "picoUSD"--one trillionth of a USD.
66
- DefaultBeansPerFeeUnit = sdk.NewUint(1_000_000_000_000) // 1e12 (assumes $1 per BLD)
67
+ DefaultBeansPerFeeUnit = sdkmath.NewUint(1_000_000_000_000) // 1e12 (assumes $1 per BLD)
67
68
 
68
- DefaultBeansPerInboundTx = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(100)) // 10e09, ~$0.01
69
- DefaultBeansPerMessage = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(1_000)) // 1e09, ~$0.001
70
- DefaultBeansPerMessageByte = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(50_000)) // 20e06, ~$0.00002
71
- DefaultBeansPerMinFeeDebit = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(5)) // 200e09, ~$0.2
72
- DefaultBeansPerStorageByte = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(500)) // 2e09, ~$0.002
73
- DefaultBeansPerSmartWalletProvision = DefaultBeansPerFeeUnit // 1e12, ~$1
69
+ DefaultBeansPerInboundTx = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(100)) // 10e09, ~$0.01
70
+ DefaultBeansPerMessage = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(1_000)) // 1e09, ~$0.001
71
+ DefaultBeansPerMessageByte = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(50_000)) // 20e06, ~$0.00002
72
+ DefaultBeansPerMinFeeDebit = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(5)) // 200e09, ~$0.2
73
+ DefaultBeansPerStorageByte = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(500)) // 2e09, ~$0.002
74
+ DefaultBeansPerSmartWalletProvision = DefaultBeansPerFeeUnit // 1e12, ~$1
74
75
 
75
76
  DefaultBootstrapVatConfig = "@agoric/vm-config/decentral-core-config.json"
76
77
 
@@ -83,11 +84,11 @@ var (
83
84
  NewQueueSize(QueueInbound, DefaultInboundQueueMax),
84
85
  }
85
86
 
86
- DefaultVatCleanupDefault = sdk.NewUint(5)
87
+ DefaultVatCleanupDefault = sdkmath.NewUint(5)
87
88
  // DefaultVatCleanupExports = DefaultVatCleanupDefault
88
89
  // DefaultVatCleanupImports = DefaultVatCleanupDefault
89
90
  // DefaultVatCleanupPromises = DefaultVatCleanupDefault
90
- DefaultVatCleanupKv = sdk.NewUint(50)
91
+ DefaultVatCleanupKv = sdkmath.NewUint(50)
91
92
  // DefaultVatCleanupSnapshots = DefaultVatCleanupDefault
92
93
  // DefaultVatCleanupTranscripts = DefaultVatCleanupDefault
93
94
  DefaultVatCleanupBudget = []UintMapEntry{
@@ -1,9 +1,10 @@
1
1
  package types
2
2
 
3
3
  import (
4
+ context "context"
5
+
4
6
  sdkmath "cosmossdk.io/math"
5
7
  sdk "github.com/cosmos/cosmos-sdk/types"
6
- authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
7
8
  )
8
9
 
9
10
  type SmartWalletState uint8
@@ -16,9 +17,9 @@ const (
16
17
  )
17
18
 
18
19
  type AccountKeeper interface {
19
- GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI
20
- NewAccountWithAddress(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI
21
- SetAccount(ctx sdk.Context, acc authtypes.AccountI)
20
+ GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
21
+ NewAccountWithAddress(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
22
+ SetAccount(ctx context.Context, acc sdk.AccountI)
22
23
  }
23
24
 
24
25
  type SwingSetKeeper interface {
@@ -9,11 +9,16 @@ import (
9
9
 
10
10
  sdkioerrors "cosmossdk.io/errors"
11
11
  sdkmath "cosmossdk.io/math"
12
+ "cosmossdk.io/x/tx/signing"
12
13
 
13
14
  sdk "github.com/cosmos/cosmos-sdk/types"
14
15
  sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
15
16
 
16
17
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
18
+
19
+ "google.golang.org/protobuf/proto"
20
+ "google.golang.org/protobuf/protoadapt"
21
+ "google.golang.org/protobuf/reflect/protoreflect"
17
22
  )
18
23
 
19
24
  const RouterKey = ModuleName // this was defined in your key.go file
@@ -32,6 +37,42 @@ var (
32
37
  _ vm.ControllerAdmissionMsg = &MsgWalletSpendAction{}
33
38
  )
34
39
 
40
+ // Replacing msg.GetSigners() but before we can adopt AddressString.
41
+ // https://github.com/cosmos/cosmos-sdk/issues/20077#issuecomment-2062601533
42
+ func createSignerFieldFunc(fieldName protoreflect.Name) signing.GetSignersFunc {
43
+ return func(msgIn proto.Message) ([][]byte, error) {
44
+ msg := msgIn.ProtoReflect()
45
+ if !msg.Has(msg.Descriptor().Fields().ByName(fieldName)) {
46
+ return nil, sdkioerrors.Wrapf(sdkerrors.ErrInvalidRequest, "message %T does not have field %s", msgIn, fieldName)
47
+ }
48
+ addr := msg.Get(msg.Descriptor().Fields().ByName(fieldName)).Interface().([]byte)
49
+ return [][]byte{addr}, nil
50
+ }
51
+ }
52
+
53
+ func DefineCustomGetSigners(options *signing.Options) {
54
+ options.DefineCustomGetSigners(
55
+ proto.MessageName(protoadapt.MessageV2Of(&MsgDeliverInbound{})),
56
+ createSignerFieldFunc("submitter"),
57
+ )
58
+ options.DefineCustomGetSigners(
59
+ proto.MessageName(protoadapt.MessageV2Of(&MsgProvision{})),
60
+ createSignerFieldFunc("submitter"),
61
+ )
62
+ options.DefineCustomGetSigners(
63
+ proto.MessageName(protoadapt.MessageV2Of(&MsgInstallBundle{})),
64
+ createSignerFieldFunc("submitter"),
65
+ )
66
+ options.DefineCustomGetSigners(
67
+ proto.MessageName(protoadapt.MessageV2Of(&MsgWalletAction{})),
68
+ createSignerFieldFunc("owner"),
69
+ )
70
+ options.DefineCustomGetSigners(
71
+ proto.MessageName(protoadapt.MessageV2Of(&MsgWalletSpendAction{})),
72
+ createSignerFieldFunc("owner"),
73
+ )
74
+ }
75
+
35
76
  // Contextual information about the message source of an action on an inbound queue.
36
77
  // This context should be unique per inboundQueueRecord.
37
78
  type ActionContext struct {
@@ -46,6 +87,7 @@ type ActionContext struct {
46
87
  // actionContext unique. (for example a counter per block and source module).
47
88
  MsgIdx int `json:"msgIdx"`
48
89
  }
90
+
49
91
  type InboundQueueRecord struct {
50
92
  Action vm.Jsonable `json:"action"`
51
93
  Context ActionContext `json:"context"`
@@ -172,18 +214,6 @@ func (msg MsgDeliverInbound) ValidateBasic() error {
172
214
  return nil
173
215
  }
174
216
 
175
- // GetSignBytes encodes the message for signing
176
- func (msg MsgDeliverInbound) GetSignBytes() []byte {
177
- // FIXME: This compensates for Amino maybe returning nil instead of empty slices.
178
- if msg.Messages == nil {
179
- msg.Messages = []string{}
180
- }
181
- if msg.Nums == nil {
182
- msg.Nums = []uint64{}
183
- }
184
- return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
185
- }
186
-
187
217
  // GetSigners defines whose signature is required
188
218
  func (msg MsgDeliverInbound) GetSigners() []sdk.AccAddress {
189
219
  return []sdk.AccAddress{msg.Submitter}
@@ -222,32 +252,17 @@ func (msg MsgWalletAction) IsHighPriority(ctx sdk.Context, data interface{}) (bo
222
252
  return false, nil
223
253
  }
224
254
 
255
+ // GetSigners defines whose signature is required
225
256
  func (msg MsgWalletAction) GetSigners() []sdk.AccAddress {
226
257
  return []sdk.AccAddress{msg.Owner}
227
258
  }
228
259
 
229
- // GetSignBytes encodes the message for signing
230
- func (msg MsgWalletAction) GetSignBytes() []byte {
231
- return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
232
- }
233
-
234
260
  // Route should return the name of the module
235
261
  func (msg MsgWalletAction) Route() string { return RouterKey }
236
262
 
237
263
  // Type should return the action
238
264
  func (msg MsgWalletAction) Type() string { return "wallet_action" }
239
265
 
240
- // Route should return the name of the module
241
- func (msg MsgWalletSpendAction) Route() string { return RouterKey }
242
-
243
- // Type should return the action
244
- func (msg MsgWalletSpendAction) Type() string { return "wallet_spend_action" }
245
-
246
- // GetSignBytes encodes the message for signing
247
- func (msg MsgWalletSpendAction) GetSignBytes() []byte {
248
- return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
249
- }
250
-
251
266
  // ValidateBasic runs stateless checks on the message
252
267
  func (msg MsgWalletAction) ValidateBasic() error {
253
268
  if msg.Owner.Empty() {
@@ -300,10 +315,17 @@ func (msg MsgWalletSpendAction) IsHighPriority(ctx sdk.Context, data interface{}
300
315
  return keeper.IsHighPriorityAddress(ctx, msg.Owner)
301
316
  }
302
317
 
318
+ // GetSigners defines whose signature is required
303
319
  func (msg MsgWalletSpendAction) GetSigners() []sdk.AccAddress {
304
320
  return []sdk.AccAddress{msg.Owner}
305
321
  }
306
322
 
323
+ // Route should return the name of the module
324
+ func (msg MsgWalletSpendAction) Route() string { return RouterKey }
325
+
326
+ // Type should return the action
327
+ func (msg MsgWalletSpendAction) Type() string { return "wallet_spend_action" }
328
+
307
329
  // ValidateBasic runs stateless checks on the message
308
330
  func (msg MsgWalletSpendAction) ValidateBasic() error {
309
331
  if msg.Owner.Empty() {
@@ -368,14 +390,6 @@ func (msg MsgProvision) IsHighPriority(ctx sdk.Context, data interface{}) (bool,
368
390
  return false, nil
369
391
  }
370
392
 
371
- // GetSignBytes encodes the message for signing
372
- func (msg MsgProvision) GetSignBytes() []byte {
373
- if msg.PowerFlags == nil {
374
- msg.PowerFlags = []string{}
375
- }
376
- return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
377
- }
378
-
379
393
  // GetSigners defines whose signature is required
380
394
  func (msg MsgProvision) GetSigners() []sdk.AccAddress {
381
395
  return []sdk.AccAddress{msg.Submitter}
@@ -7,6 +7,7 @@ import (
7
7
  context "context"
8
8
  fmt "fmt"
9
9
  github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
10
+ _ "github.com/cosmos/cosmos-sdk/types/tx/amino"
10
11
  _ "github.com/cosmos/gogoproto/gogoproto"
11
12
  grpc1 "github.com/cosmos/gogoproto/grpc"
12
13
  proto "github.com/cosmos/gogoproto/proto"
@@ -553,57 +554,65 @@ func init() {
553
554
  func init() { proto.RegisterFile("agoric/swingset/msgs.proto", fileDescriptor_788baa062b181a57) }
554
555
 
555
556
  var fileDescriptor_788baa062b181a57 = []byte{
556
- // 788 bytes of a gzipped FileDescriptorProto
557
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcf, 0x6f, 0xe3, 0x44,
558
- 0x14, 0x8e, 0xe3, 0x50, 0x36, 0xaf, 0xd9, 0x6d, 0x63, 0x95, 0xad, 0xd7, 0x0b, 0x99, 0xac, 0xa5,
559
- 0x15, 0x01, 0xd4, 0x44, 0xb0, 0xb7, 0xed, 0x29, 0x16, 0x42, 0x5a, 0xa4, 0xa0, 0xc5, 0x2b, 0x84,
560
- 0x54, 0x81, 0x5a, 0xc7, 0x19, 0x5c, 0x2b, 0xb6, 0xc7, 0xf2, 0x38, 0x2d, 0xed, 0x8d, 0xff, 0x00,
561
- 0xfe, 0x01, 0x04, 0xff, 0x0d, 0xc7, 0x1e, 0x11, 0x87, 0x51, 0x95, 0x5e, 0x90, 0x8f, 0x3e, 0x72,
562
- 0x42, 0x9e, 0xf1, 0x8f, 0xfc, 0x82, 0xa2, 0x1e, 0xca, 0x29, 0x79, 0xdf, 0xf7, 0xbd, 0xf7, 0xbe,
563
- 0x99, 0x79, 0x63, 0x1b, 0x34, 0xcb, 0x21, 0x91, 0x6b, 0x0f, 0xe8, 0xb9, 0x1b, 0x38, 0x14, 0xc7,
564
- 0x03, 0x9f, 0x3a, 0xb4, 0x1f, 0x46, 0x24, 0x26, 0xca, 0x8e, 0xe0, 0xfa, 0x05, 0xa7, 0xed, 0x39,
565
- 0xc4, 0x21, 0x9c, 0x1b, 0x64, 0xff, 0x84, 0x4c, 0xff, 0xb9, 0x0e, 0xed, 0x11, 0x75, 0x3e, 0xc5,
566
- 0x9e, 0x7b, 0x86, 0xa3, 0x57, 0xc1, 0x98, 0xcc, 0x82, 0x89, 0x72, 0x08, 0x0f, 0x7c, 0x4c, 0xa9,
567
- 0xe5, 0x60, 0xaa, 0x4a, 0x5d, 0xb9, 0xd7, 0x34, 0x50, 0xc2, 0x50, 0x89, 0xa5, 0x0c, 0xed, 0x5c,
568
- 0x58, 0xbe, 0xf7, 0x52, 0x2f, 0x10, 0xdd, 0x2c, 0x49, 0xe5, 0x23, 0x68, 0x04, 0x33, 0x9f, 0xaa,
569
- 0xf5, 0xae, 0xdc, 0x6b, 0x18, 0xfb, 0x09, 0x43, 0x3c, 0x4e, 0x19, 0xda, 0x16, 0x49, 0x59, 0xa4,
570
- 0x9b, 0x1c, 0x54, 0xde, 0x07, 0xd9, 0xb2, 0xa7, 0xaa, 0xdc, 0x95, 0x7a, 0x0d, 0xe3, 0x9d, 0x84,
571
- 0xa1, 0x2c, 0x4c, 0x19, 0x02, 0x21, 0xb5, 0xec, 0xa9, 0x6e, 0x66, 0x90, 0x12, 0x42, 0x93, 0xce,
572
- 0xc6, 0xbe, 0x1b, 0xc7, 0x38, 0x52, 0x1b, 0x5d, 0xa9, 0xd7, 0x32, 0xcc, 0x84, 0xa1, 0x0a, 0x4c,
573
- 0x19, 0xda, 0x15, 0x49, 0x25, 0xa4, 0xff, 0xc5, 0xd0, 0x81, 0xe3, 0xc6, 0xa7, 0xb3, 0x71, 0xdf,
574
- 0x26, 0xfe, 0xc0, 0x26, 0xd4, 0x27, 0x34, 0xff, 0x39, 0xa0, 0x93, 0xe9, 0x20, 0xbe, 0x08, 0x31,
575
- 0xed, 0x0f, 0x6d, 0x7b, 0x38, 0x99, 0x44, 0x98, 0x52, 0xb3, 0xaa, 0xf7, 0xb2, 0xf1, 0xe7, 0x2f,
576
- 0xa8, 0xa6, 0x3f, 0x85, 0x27, 0x6b, 0xfb, 0x63, 0x62, 0x1a, 0x92, 0x80, 0x62, 0xfd, 0x27, 0x09,
577
- 0x76, 0x46, 0xd4, 0xf9, 0xda, 0xf2, 0x3c, 0x1c, 0x0f, 0xed, 0xd8, 0x25, 0x81, 0x72, 0x02, 0x6f,
578
- 0x91, 0xf3, 0x00, 0x47, 0xaa, 0xc4, 0x4d, 0x7e, 0x9e, 0x30, 0x24, 0x80, 0x94, 0xa1, 0x96, 0x30,
579
- 0xc8, 0xc3, 0x3b, 0x98, 0x13, 0x75, 0x94, 0xc7, 0xb0, 0x65, 0xf1, 0x5e, 0x6a, 0xbd, 0x2b, 0xf5,
580
- 0x9a, 0x66, 0x1e, 0xe5, 0x86, 0x9f, 0xc0, 0xfe, 0x8a, 0xa5, 0xd2, 0xee, 0xaf, 0x12, 0xec, 0x95,
581
- 0xdc, 0x9b, 0x10, 0x07, 0x93, 0x7b, 0xf3, 0xfc, 0x0c, 0x5a, 0x34, 0x6b, 0x78, 0xbc, 0xe4, 0x7c,
582
- 0x9b, 0x56, 0x26, 0x72, 0xfb, 0x1d, 0x78, 0x77, 0x93, 0xc5, 0x72, 0x0d, 0x3f, 0xc8, 0xd0, 0x1a,
583
- 0x51, 0xe7, 0x75, 0x44, 0xce, 0x5c, 0x9a, 0x79, 0x3f, 0x84, 0x07, 0x81, 0x6b, 0x4f, 0x03, 0xcb,
584
- 0xc7, 0xdc, 0x7e, 0x3e, 0xab, 0x05, 0x56, 0xcd, 0x6a, 0x81, 0xe8, 0x66, 0x49, 0x2a, 0xa7, 0xf0,
585
- 0xb6, 0x25, 0x8c, 0x72, 0x47, 0x2d, 0xe3, 0x8b, 0x84, 0xa1, 0x02, 0x4a, 0x19, 0x7a, 0x94, 0x8f,
586
- 0xa1, 0x00, 0xee, 0xb0, 0xfc, 0xa2, 0x96, 0x62, 0xc2, 0x76, 0x48, 0xce, 0x71, 0x74, 0xfc, 0x9d,
587
- 0x67, 0x39, 0x54, 0x95, 0xf9, 0xad, 0xfa, 0x78, 0xce, 0x10, 0xbc, 0xce, 0xe0, 0xcf, 0x32, 0x34,
588
- 0x61, 0x08, 0xc2, 0x32, 0x4a, 0x19, 0x6a, 0x8b, 0xf6, 0x15, 0xa6, 0x9b, 0x0b, 0x82, 0xff, 0xed,
589
- 0x4e, 0x3c, 0xe6, 0x63, 0x54, 0x1e, 0x41, 0x79, 0x36, 0x7f, 0xd4, 0x61, 0x77, 0x44, 0x9d, 0x57,
590
- 0x01, 0x8d, 0x2d, 0xcf, 0x33, 0x66, 0xc1, 0xc4, 0xc3, 0xca, 0x0b, 0xd8, 0x1a, 0xf3, 0x7f, 0xf9,
591
- 0xe9, 0x3c, 0x4d, 0x18, 0xca, 0x91, 0x94, 0xa1, 0x87, 0xc2, 0x9e, 0x88, 0x75, 0x33, 0x27, 0x96,
592
- 0x57, 0x56, 0xbf, 0x87, 0x95, 0x29, 0xdf, 0x40, 0xdb, 0x26, 0x7e, 0x98, 0xc1, 0x78, 0x72, 0x9c,
593
- 0x3b, 0x96, 0x79, 0xe7, 0x41, 0xc2, 0xd0, 0x6e, 0x45, 0x1a, 0x85, 0xf7, 0x7d, 0x61, 0x60, 0x95,
594
- 0xd1, 0xcd, 0x35, 0xb1, 0x32, 0x84, 0xf6, 0x2c, 0x58, 0xa8, 0x4f, 0xdd, 0x4b, 0xcc, 0x4f, 0x4c,
595
- 0x36, 0xf6, 0xb2, 0xea, 0x8b, 0xe4, 0x1b, 0xf7, 0x12, 0x9b, 0x6b, 0x88, 0xae, 0x81, 0xba, 0xba,
596
- 0xb7, 0xc5, 0xc6, 0x7f, 0x72, 0x2d, 0x83, 0x3c, 0xa2, 0x8e, 0xf2, 0x2d, 0x3c, 0x5c, 0xde, 0xfc,
597
- 0x67, 0xfd, 0x95, 0xd7, 0x40, 0x7f, 0xb5, 0x86, 0xf6, 0xc1, 0xad, 0x92, 0xa2, 0x8d, 0x72, 0x02,
598
- 0x8f, 0x56, 0x5e, 0x14, 0xfa, 0xa6, 0xe4, 0x65, 0x8d, 0xf6, 0xe1, 0xed, 0x9a, 0xb2, 0xc3, 0x11,
599
- 0xb4, 0x96, 0x1e, 0xa6, 0xdd, 0x4d, 0xb9, 0x8b, 0x0a, 0xad, 0x77, 0x9b, 0xa2, 0xac, 0xed, 0x42,
600
- 0x7b, 0xfd, 0xc9, 0xf7, 0xfc, 0x9f, 0xd3, 0x17, 0x64, 0xda, 0xc1, 0x7f, 0x92, 0x95, 0xad, 0xbe,
601
- 0x84, 0x66, 0xf5, 0x80, 0x7a, 0x6f, 0x53, 0x6e, 0x49, 0x6b, 0xcf, 0xff, 0x95, 0x2e, 0x4a, 0x1a,
602
- 0x5f, 0xfd, 0x36, 0xef, 0x48, 0x57, 0xf3, 0x8e, 0x74, 0x3d, 0xef, 0x48, 0x3f, 0xde, 0x74, 0x6a,
603
- 0x57, 0x37, 0x9d, 0xda, 0xef, 0x37, 0x9d, 0xda, 0xd1, 0xe1, 0xc2, 0xcc, 0x0f, 0xc5, 0x07, 0x81,
604
- 0xa8, 0xc8, 0x67, 0xde, 0x21, 0x9e, 0x15, 0x38, 0xc5, 0x65, 0xf8, 0xbe, 0xfa, 0x56, 0xe0, 0x97,
605
- 0x61, 0xbc, 0xc5, 0x3f, 0x03, 0x5e, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x51, 0x66, 0x1b, 0xd5,
606
- 0x4b, 0x08, 0x00, 0x00,
557
+ // 915 bytes of a gzipped FileDescriptorProto
558
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x6f, 0xe3, 0x44,
559
+ 0x14, 0xae, 0xeb, 0x52, 0x36, 0xaf, 0xd9, 0xb6, 0x31, 0x4b, 0x9b, 0x75, 0x21, 0x93, 0x35, 0x5a,
560
+ 0x29, 0x44, 0x34, 0x91, 0x80, 0x03, 0xca, 0x72, 0xa9, 0x85, 0x10, 0x3d, 0x44, 0x5a, 0xb2, 0x42,
561
+ 0xa0, 0x45, 0x55, 0x70, 0x9c, 0xc1, 0x58, 0xb5, 0x67, 0xa2, 0x8c, 0xd3, 0xd2, 0x45, 0xe2, 0xc2,
562
+ 0x0d, 0x09, 0x89, 0x33, 0x27, 0xc4, 0x89, 0x63, 0xff, 0x02, 0x4e, 0x1c, 0x38, 0xae, 0xc4, 0x85,
563
+ 0xd3, 0x68, 0xd5, 0x1e, 0x8a, 0xcc, 0x2d, 0x47, 0x4e, 0xc8, 0x33, 0xf6, 0xd8, 0x71, 0xbb, 0x94,
564
+ 0xc3, 0x4a, 0xcb, 0x25, 0xf1, 0xfb, 0xde, 0xcf, 0x6f, 0xde, 0x7b, 0x63, 0x83, 0xe9, 0x78, 0x74,
565
+ 0xea, 0xbb, 0x5d, 0x76, 0xec, 0x13, 0x8f, 0xe1, 0xa8, 0x1b, 0x32, 0x8f, 0x75, 0x26, 0x53, 0x1a,
566
+ 0x51, 0x63, 0x43, 0xea, 0x3a, 0x99, 0xce, 0xac, 0x39, 0xa1, 0x4f, 0x68, 0x57, 0xfc, 0x4a, 0x1b,
567
+ 0xf3, 0x96, 0x47, 0x3d, 0x2a, 0x1e, 0xbb, 0xc9, 0x93, 0x44, 0xad, 0xef, 0x74, 0xa8, 0xf5, 0x99,
568
+ 0xf7, 0x1e, 0x0e, 0xfc, 0x23, 0x3c, 0xdd, 0x27, 0x23, 0x3a, 0x23, 0x63, 0xe3, 0x13, 0xb8, 0x11,
569
+ 0x62, 0xc6, 0x1c, 0x0f, 0xb3, 0xba, 0xd6, 0xd4, 0x5b, 0x15, 0xfb, 0xdd, 0x98, 0x23, 0x85, 0xcd,
570
+ 0x39, 0xda, 0x38, 0x71, 0xc2, 0xa0, 0x67, 0x65, 0x88, 0xf5, 0xc3, 0xc5, 0x69, 0xfb, 0x25, 0x32,
571
+ 0x0b, 0x82, 0x21, 0x0b, 0x7c, 0x17, 0x0f, 0x1d, 0x36, 0xc4, 0xe1, 0x24, 0x3a, 0xf9, 0xf9, 0xe2,
572
+ 0xb4, 0xad, 0x0d, 0x94, 0xa7, 0xf1, 0x01, 0xac, 0x90, 0x59, 0xc8, 0xea, 0xcb, 0x4d, 0xbd, 0xb5,
573
+ 0x62, 0xbf, 0x1d, 0x73, 0x24, 0xe4, 0x39, 0x47, 0x6b, 0x32, 0x62, 0x22, 0x5d, 0x13, 0x4d, 0x78,
574
+ 0x18, 0x6f, 0x80, 0xee, 0xb8, 0x87, 0x75, 0xbd, 0xa9, 0xb5, 0x56, 0x6c, 0x33, 0xe6, 0x28, 0x11,
575
+ 0xe7, 0x1c, 0x81, 0x8c, 0xe3, 0xb8, 0x87, 0x96, 0x34, 0x4f, 0x70, 0xe3, 0x1b, 0x0d, 0x2a, 0x6c,
576
+ 0x36, 0x0a, 0xfd, 0x28, 0xc2, 0xd3, 0xfa, 0x4a, 0x53, 0x6b, 0x55, 0x6d, 0x1c, 0x73, 0x94, 0x83,
577
+ 0x73, 0x8e, 0x36, 0xa5, 0xab, 0x82, 0xac, 0xbf, 0x39, 0xda, 0xf5, 0xfc, 0xe8, 0x8b, 0xd9, 0xa8,
578
+ 0xe3, 0xd2, 0xb0, 0xeb, 0x52, 0x16, 0x52, 0x96, 0xfe, 0xed, 0xb2, 0xf1, 0x61, 0x37, 0x3a, 0x99,
579
+ 0x60, 0xd6, 0xd9, 0x73, 0xdd, 0xbd, 0xf1, 0x78, 0x8a, 0x19, 0x4b, 0x0a, 0x5f, 0x0f, 0xb0, 0xe7,
580
+ 0xb8, 0x27, 0x43, 0x47, 0x42, 0x83, 0x3c, 0x45, 0xaf, 0xf9, 0xe7, 0x8f, 0x68, 0xe9, 0xdb, 0x8b,
581
+ 0xd3, 0xf6, 0xb6, 0xea, 0xe2, 0xe2, 0xc9, 0x5b, 0x3b, 0x70, 0xfb, 0x52, 0x3b, 0x06, 0x98, 0x4d,
582
+ 0x28, 0x61, 0xd8, 0xfa, 0x45, 0x83, 0x8d, 0x3e, 0xf3, 0x3e, 0x76, 0x82, 0x00, 0x47, 0x7b, 0x6e,
583
+ 0xe4, 0x53, 0x62, 0x30, 0x78, 0x81, 0x1e, 0x13, 0x3c, 0xad, 0x6b, 0x82, 0xd3, 0x41, 0xcc, 0x91,
584
+ 0x04, 0xe6, 0x1c, 0x55, 0x25, 0x1f, 0x21, 0x3e, 0x1b, 0x2e, 0x32, 0xb4, 0xb1, 0x05, 0xab, 0x8e,
585
+ 0x48, 0x5f, 0x5f, 0x6e, 0x6a, 0xad, 0xca, 0x20, 0x95, 0x7a, 0x8d, 0x8c, 0xdf, 0xcb, 0x8a, 0x5f,
586
+ 0xb1, 0x58, 0xeb, 0x36, 0x6c, 0x97, 0xea, 0x57, 0xdc, 0x7e, 0xd7, 0xe0, 0x96, 0xd2, 0x3d, 0x98,
587
+ 0x60, 0x32, 0x7e, 0x9e, 0x04, 0xef, 0x40, 0x95, 0x25, 0x35, 0x0c, 0x17, 0x68, 0xae, 0xb1, 0xbc,
588
+ 0xae, 0xde, 0x6b, 0x19, 0x57, 0xb3, 0xc4, 0xb5, 0x50, 0xbc, 0xd5, 0x80, 0x57, 0xae, 0x22, 0xa5,
589
+ 0x58, 0xff, 0xa5, 0x43, 0xb5, 0xcf, 0xbc, 0xfb, 0x53, 0x7a, 0xe4, 0xb3, 0x84, 0xed, 0x3d, 0xb8,
590
+ 0x41, 0x7c, 0xf7, 0x90, 0x38, 0x21, 0x16, 0x84, 0x2b, 0x36, 0x4a, 0x36, 0x2f, 0xc3, 0xf2, 0xcd,
591
+ 0xcb, 0x10, 0x6b, 0xa0, 0x94, 0xc6, 0x57, 0xf0, 0x62, 0xca, 0x43, 0x14, 0x5c, 0xb5, 0x9d, 0x98,
592
+ 0xa3, 0x0c, 0x9a, 0x73, 0xb4, 0x9e, 0xae, 0x86, 0x04, 0x9e, 0xcd, 0x81, 0x65, 0xe1, 0x8d, 0xaf,
593
+ 0x61, 0x6d, 0x42, 0x8f, 0xf1, 0x74, 0xf8, 0x79, 0xe0, 0x78, 0xac, 0xae, 0x8b, 0x6b, 0xe3, 0xe0,
594
+ 0x8c, 0x23, 0xb8, 0x9f, 0xc0, 0xef, 0x27, 0x68, 0xcc, 0x11, 0x4c, 0x94, 0x34, 0xe7, 0xa8, 0x26,
595
+ 0x2b, 0xca, 0xb1, 0xa7, 0xae, 0xfe, 0x4f, 0x17, 0xa7, 0xed, 0x82, 0xaf, 0x5c, 0xed, 0x02, 0xf0,
596
+ 0x3f, 0xd9, 0xf0, 0x9d, 0x6c, 0x2a, 0x0c, 0x35, 0x15, 0xaa, 0xb9, 0xd6, 0x96, 0x18, 0x71, 0x25,
597
+ 0xab, 0x29, 0xf8, 0x55, 0x87, 0xcd, 0x3e, 0xf3, 0xf6, 0x09, 0x8b, 0x9c, 0x20, 0xb0, 0x67, 0x64,
598
+ 0x1c, 0x60, 0xe3, 0x1d, 0x58, 0x1d, 0x89, 0xa7, 0x74, 0x0e, 0x9a, 0x31, 0x47, 0x29, 0x32, 0xe7,
599
+ 0xe8, 0xa6, 0x24, 0x22, 0xe5, 0xf4, 0xa2, 0x4b, 0xb5, 0xa5, 0x93, 0x58, 0x7e, 0x3e, 0x27, 0x61,
600
+ 0x1c, 0x41, 0xcd, 0xa5, 0xe1, 0x24, 0x81, 0xf1, 0x78, 0x98, 0x52, 0xd1, 0x45, 0x31, 0xfb, 0x31,
601
+ 0x47, 0x9b, 0xb9, 0xd2, 0xce, 0x48, 0x6d, 0xcb, 0x9a, 0xca, 0x1a, 0x2b, 0xe9, 0xfd, 0x25, 0x7b,
602
+ 0xc9, 0xf9, 0x12, 0x6c, 0x7c, 0x0a, 0xb5, 0x19, 0x29, 0x64, 0x66, 0xfe, 0x23, 0x2c, 0xc6, 0x41,
603
+ 0xb7, 0x3b, 0x49, 0xde, 0xa2, 0xf2, 0x81, 0xff, 0x08, 0x8b, 0xe0, 0x65, 0x30, 0x0d, 0x5e, 0x86,
604
+ 0x7b, 0x3b, 0x49, 0x6b, 0xb7, 0x54, 0x6b, 0x17, 0x3a, 0x66, 0x99, 0x50, 0x2f, 0x77, 0x31, 0x6b,
605
+ 0xf1, 0x9b, 0x4f, 0x74, 0xd0, 0xfb, 0xcc, 0x33, 0x0e, 0xe0, 0xe6, 0x62, 0x9b, 0xef, 0x74, 0x4a,
606
+ 0xef, 0xee, 0x4e, 0x39, 0x86, 0xf9, 0xfa, 0xb5, 0x26, 0x59, 0x1a, 0xe3, 0x33, 0x58, 0x2f, 0xbd,
607
+ 0xca, 0xad, 0xab, 0x9c, 0x17, 0x6d, 0xcc, 0xf6, 0xf5, 0x36, 0x2a, 0xc3, 0x43, 0xa8, 0x2e, 0xbc,
608
+ 0x7f, 0x9a, 0x57, 0xf9, 0x16, 0x2d, 0xcc, 0xd6, 0x75, 0x16, 0x2a, 0xb6, 0x0f, 0xb5, 0xcb, 0xf7,
609
+ 0xff, 0xdd, 0xa7, 0xbb, 0x17, 0xcc, 0xcc, 0xdd, 0xff, 0x64, 0xa6, 0x52, 0x7d, 0x08, 0x95, 0xfc,
610
+ 0xd2, 0x7d, 0xf5, 0x2a, 0x5f, 0xa5, 0x36, 0xef, 0xfe, 0xab, 0x3a, 0x0b, 0x69, 0x7f, 0xf4, 0xdb,
611
+ 0x59, 0x43, 0x7b, 0x7c, 0xd6, 0xd0, 0x9e, 0x9c, 0x35, 0xb4, 0xef, 0xcf, 0x1b, 0x4b, 0x8f, 0xcf,
612
+ 0x1b, 0x4b, 0x7f, 0x9c, 0x37, 0x96, 0x1e, 0xde, 0x2b, 0xec, 0xd5, 0x9e, 0xfc, 0x8a, 0x93, 0x11,
613
+ 0xc5, 0x5e, 0x79, 0x34, 0x70, 0x88, 0x97, 0x2d, 0xdc, 0x97, 0xf9, 0x07, 0x9e, 0x58, 0xb8, 0xd1,
614
+ 0xaa, 0xf8, 0x50, 0x7b, 0xeb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0xfc, 0xce, 0xd6, 0x00,
615
+ 0x0a, 0x00, 0x00,
607
616
  }
608
617
 
609
618
  // Reference imports to suppress errors if they are not otherwise used.