diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md index 4da3e3dd3..7a2f00ef8 100644 --- a/docs/core/proto-docs.md +++ b/docs/core/proto-docs.md @@ -5901,6 +5901,7 @@ Params defines the parameters for the staking module. | `max_entries` | [uint32](#uint32) | | max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). | | `historical_entries` | [uint32](#uint32) | | historical_entries is the number of historical entries to persist. | | `bond_denom` | [string](#string) | | bond_denom defines the bondable coin denomination. | +| `power_reduction` | [string](#string) | | power_reduction is the amount of staking tokens required for 1 unit of consensus-engine power | diff --git a/x/ibc/core/02-client/keeper/keeper_test.go b/x/ibc/core/02-client/keeper/keeper_test.go deleted file mode 100644 index 364a505c5..000000000 --- a/x/ibc/core/02-client/keeper/keeper_test.go +++ /dev/null @@ -1,389 +0,0 @@ -package keeper_test - -import ( - "math/rand" - "testing" - "time" - - "github.com/stretchr/testify/suite" - tmbytes "github.com/tendermint/tendermint/libs/bytes" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/codec" - cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" - "github.com/cosmos/cosmos-sdk/simapp" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/keeper" - "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" - "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" - ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" - localhosttypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/09-localhost/types" - ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" - ibctestingmock "github.com/cosmos/cosmos-sdk/x/ibc/testing/mock" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" -) - -const ( - testChainID = "gaiahub-0" - testChainIDRevision1 = "gaiahub-1" - - testClientID = "tendermint-0" - testClientID2 = "tendermint-1" - testClientID3 = "tendermint-2" - - height = 5 - - trustingPeriod time.Duration = time.Hour * 24 * 7 * 2 - ubdPeriod time.Duration = time.Hour * 24 * 7 * 3 - maxClockDrift time.Duration = time.Second * 10 -) - -var ( - testClientHeight = types.NewHeight(0, 5) - testClientHeightRevision1 = types.NewHeight(1, 5) - newClientHeight = types.NewHeight(1, 1) -) - -type KeeperTestSuite struct { - suite.Suite - - coordinator *ibctesting.Coordinator - - chainA *ibctesting.TestChain - chainB *ibctesting.TestChain - - cdc codec.Marshaler - ctx sdk.Context - keeper *keeper.Keeper - consensusState *ibctmtypes.ConsensusState - header *ibctmtypes.Header - valSet *tmtypes.ValidatorSet - valSetHash tmbytes.HexBytes - privVal tmtypes.PrivValidator - now time.Time - past time.Time - - queryClient types.QueryClient -} - -func (suite *KeeperTestSuite) SetupTest() { - suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) - - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) - suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) - - isCheckTx := false - suite.now = time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC) - suite.past = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC) - now2 := suite.now.Add(time.Hour) - app := simapp.Setup(isCheckTx) - - suite.cdc = app.AppCodec() - suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: height, ChainID: testClientID, Time: now2}) - suite.keeper = &app.IBCKeeper.ClientKeeper - suite.privVal = ibctestingmock.NewPV() - - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - - testClientHeightMinus1 := types.NewHeight(0, height-1) - - validator := tmtypes.NewValidator(pubKey, 1) - suite.valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) - suite.valSetHash = suite.valSet.Hash() - suite.header = suite.chainA.CreateTMClientHeader(testChainID, int64(testClientHeight.RevisionHeight), testClientHeightMinus1, now2, suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal}) - suite.consensusState = ibctmtypes.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot([]byte("hash")), suite.valSetHash) - - var validators stakingtypes.Validators - for i := 1; i < 11; i++ { - privVal := ibctestingmock.NewPV() - tmPk, err := privVal.GetPubKey() - suite.Require().NoError(err) - pk, err := cryptocodec.FromTmPubKeyInterface(tmPk) - suite.Require().NoError(err) - val, err := stakingtypes.NewValidator(sdk.ValAddress(pk.Address()), pk, stakingtypes.Description{}) - suite.Require().NoError(err) - - val.Status = stakingtypes.Bonded - val.Tokens = sdk.NewInt(rand.Int63()) - validators = append(validators, val) - - hi := stakingtypes.NewHistoricalInfo(suite.ctx.BlockHeader(), validators, app.StakingKeeper.PowerReduction(suite.ctx)) - app.StakingKeeper.SetHistoricalInfo(suite.ctx, int64(i), &hi) - } - - // add localhost client - revision := types.ParseChainID(suite.chainA.ChainID) - localHostClient := localhosttypes.NewClientState( - suite.chainA.ChainID, types.NewHeight(revision, uint64(suite.chainA.GetContext().BlockHeight())), - ) - suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), exported.Localhost, localHostClient) - - queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, app.InterfaceRegistry()) - types.RegisterQueryServer(queryHelper, app.IBCKeeper.ClientKeeper) - suite.queryClient = types.NewQueryClient(queryHelper) -} - -func TestKeeperTestSuite(t *testing.T) { - suite.Run(t, new(KeeperTestSuite)) -} - -func (suite *KeeperTestSuite) TestSetClientState() { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) - suite.keeper.SetClientState(suite.ctx, testClientID, clientState) - - retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID) - suite.Require().True(found, "GetClientState failed") - suite.Require().Equal(clientState, retrievedState, "Client states are not equal") -} - -func (suite *KeeperTestSuite) TestSetClientConsensusState() { - suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight, suite.consensusState) - - retrievedConsState, found := suite.keeper.GetClientConsensusState(suite.ctx, testClientID, testClientHeight) - suite.Require().True(found, "GetConsensusState failed") - - tmConsState, ok := retrievedConsState.(*ibctmtypes.ConsensusState) - suite.Require().True(ok) - suite.Require().Equal(suite.consensusState, tmConsState, "ConsensusState not stored correctly") -} - -func (suite *KeeperTestSuite) TestValidateSelfClient() { - testClientHeight := types.NewHeight(0, uint64(suite.chainA.GetContext().BlockHeight()-1)) - - testCases := []struct { - name string - clientState exported.ClientState - expPass bool - }{ - { - "success", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - true, - }, - { - "success with nil UpgradePath", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), nil, false, false), - true, - }, - { - "invalid client type", - localhosttypes.NewClientState(suite.chainA.ChainID, testClientHeight), - false, - }, - { - "frozen client", - &ibctmtypes.ClientState{suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false}, - false, - }, - { - "incorrect chainID", - ibctmtypes.NewClientState("gaiatestnet", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid client height", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.NewHeight(0, uint64(suite.chainA.GetContext().BlockHeight())), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid client revision", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeightRevision1, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid proof specs", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, nil, ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid trust level", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.Fraction{0, 1}, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid unbonding period", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+10, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid trusting period", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ubdPeriod+10, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "invalid upgrade path", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), []string{"bad", "upgrade", "path"}, false, false), - false, - }, - } - - for _, tc := range testCases { - err := suite.chainA.App.IBCKeeper.ClientKeeper.ValidateSelfClient(suite.chainA.GetContext(), tc.clientState) - if tc.expPass { - suite.Require().NoError(err, "expected valid client for case: %s", tc.name) - } else { - suite.Require().Error(err, "expected invalid client for case: %s", tc.name) - } - } -} - -func (suite KeeperTestSuite) TestGetAllGenesisClients() { - clientIDs := []string{ - testClientID2, testClientID3, testClientID, - } - expClients := []exported.ClientState{ - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - } - - expGenClients := make(types.IdentifiedClientStates, len(expClients)) - - for i := range expClients { - suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientIDs[i], expClients[i]) - expGenClients[i] = types.NewIdentifiedClientState(clientIDs[i], expClients[i]) - } - - // add localhost client - localHostClient, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState(suite.chainA.GetContext(), exported.Localhost) - suite.Require().True(found) - expGenClients = append(expGenClients, types.NewIdentifiedClientState(exported.Localhost, localHostClient)) - - genClients := suite.chainA.App.IBCKeeper.ClientKeeper.GetAllGenesisClients(suite.chainA.GetContext()) - - suite.Require().Equal(expGenClients.Sort(), genClients) -} - -func (suite KeeperTestSuite) TestGetAllGenesisMetadata() { - expectedGenMetadata := []types.IdentifiedGenesisMetadata{ - types.NewIdentifiedGenesisMetadata( - "clientA", - []types.GenesisMetadata{ - types.NewGenesisMetadata(ibctmtypes.ProcessedTimeKey(types.NewHeight(0, 1)), []byte("foo")), - types.NewGenesisMetadata(ibctmtypes.ProcessedTimeKey(types.NewHeight(0, 2)), []byte("bar")), - types.NewGenesisMetadata(ibctmtypes.ProcessedTimeKey(types.NewHeight(0, 3)), []byte("baz")), - }, - ), - types.NewIdentifiedGenesisMetadata( - "clientB", - []types.GenesisMetadata{ - types.NewGenesisMetadata(ibctmtypes.ProcessedTimeKey(types.NewHeight(1, 100)), []byte("val1")), - types.NewGenesisMetadata(ibctmtypes.ProcessedTimeKey(types.NewHeight(2, 300)), []byte("val2")), - }, - ), - } - - genClients := []types.IdentifiedClientState{ - types.NewIdentifiedClientState("clientA", &ibctmtypes.ClientState{}), types.NewIdentifiedClientState("clientB", &ibctmtypes.ClientState{}), - types.NewIdentifiedClientState("clientC", &ibctmtypes.ClientState{}), types.NewIdentifiedClientState("clientD", &localhosttypes.ClientState{}), - } - - suite.chainA.App.IBCKeeper.ClientKeeper.SetAllClientMetadata(suite.chainA.GetContext(), expectedGenMetadata) - - actualGenMetadata, err := suite.chainA.App.IBCKeeper.ClientKeeper.GetAllClientMetadata(suite.chainA.GetContext(), genClients) - suite.Require().NoError(err, "get client metadata returned error unexpectedly") - suite.Require().Equal(expectedGenMetadata, actualGenMetadata, "retrieved metadata is unexpected") -} - -func (suite KeeperTestSuite) TestGetConsensusState() { - suite.ctx = suite.ctx.WithBlockHeight(10) - cases := []struct { - name string - height types.Height - expPass bool - }{ - {"zero height", types.ZeroHeight(), false}, - {"height > latest height", types.NewHeight(0, uint64(suite.ctx.BlockHeight())+1), false}, - {"latest height - 1", types.NewHeight(0, uint64(suite.ctx.BlockHeight())-1), true}, - {"latest height", types.GetSelfHeight(suite.ctx), true}, - } - - for i, tc := range cases { - tc := tc - cs, found := suite.keeper.GetSelfConsensusState(suite.ctx, tc.height) - if tc.expPass { - suite.Require().True(found, "Case %d should have passed: %s", i, tc.name) - suite.Require().NotNil(cs, "Case %d should have passed: %s", i, tc.name) - } else { - suite.Require().False(found, "Case %d should have failed: %s", i, tc.name) - suite.Require().Nil(cs, "Case %d should have failed: %s", i, tc.name) - } - } -} - -func (suite KeeperTestSuite) TestConsensusStateHelpers() { - // initial setup - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) - - suite.keeper.SetClientState(suite.ctx, testClientID, clientState) - suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight, suite.consensusState) - - nextState := ibctmtypes.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot([]byte("next")), suite.valSetHash) - - testClientHeightPlus5 := types.NewHeight(0, height+5) - - header := suite.chainA.CreateTMClientHeader(testClientID, int64(testClientHeightPlus5.RevisionHeight), testClientHeight, suite.header.Header.Time.Add(time.Minute), - suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal}) - - // mock update functionality - clientState.LatestHeight = header.GetHeight().(types.Height) - suite.keeper.SetClientConsensusState(suite.ctx, testClientID, header.GetHeight(), nextState) - suite.keeper.SetClientState(suite.ctx, testClientID, clientState) - - latest, ok := suite.keeper.GetLatestClientConsensusState(suite.ctx, testClientID) - suite.Require().True(ok) - suite.Require().Equal(nextState, latest, "Latest client not returned correctly") -} - -// 2 clients in total are created on chainA. The first client is updated so it contains an initial consensus state -// and a consensus state at the update height. -func (suite KeeperTestSuite) TestGetAllConsensusStates() { - clientA, _ := suite.coordinator.SetupClients(suite.chainA, suite.chainB, exported.Tendermint) - - clientState := suite.chainA.GetClientState(clientA) - expConsensusHeight0 := clientState.GetLatestHeight() - consensusState0, ok := suite.chainA.GetConsensusState(clientA, expConsensusHeight0) - suite.Require().True(ok) - - // update client to create a second consensus state - err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, exported.Tendermint) - suite.Require().NoError(err) - - clientState = suite.chainA.GetClientState(clientA) - expConsensusHeight1 := clientState.GetLatestHeight() - suite.Require().True(expConsensusHeight1.GT(expConsensusHeight0)) - consensusState1, ok := suite.chainA.GetConsensusState(clientA, expConsensusHeight1) - suite.Require().True(ok) - - expConsensus := []exported.ConsensusState{ - consensusState0, - consensusState1, - } - - // create second client on chainA - clientA2, _ := suite.coordinator.SetupClients(suite.chainA, suite.chainB, exported.Tendermint) - clientState = suite.chainA.GetClientState(clientA2) - - expConsensusHeight2 := clientState.GetLatestHeight() - consensusState2, ok := suite.chainA.GetConsensusState(clientA2, expConsensusHeight2) - suite.Require().True(ok) - - expConsensus2 := []exported.ConsensusState{consensusState2} - - expConsensusStates := types.ClientsConsensusStates{ - types.NewClientConsensusStates(clientA, []types.ConsensusStateWithHeight{ - types.NewConsensusStateWithHeight(expConsensusHeight0.(types.Height), expConsensus[0]), - types.NewConsensusStateWithHeight(expConsensusHeight1.(types.Height), expConsensus[1]), - }), - types.NewClientConsensusStates(clientA2, []types.ConsensusStateWithHeight{ - types.NewConsensusStateWithHeight(expConsensusHeight2.(types.Height), expConsensus2[0]), - }), - }.Sort() - - consStates := suite.chainA.App.IBCKeeper.ClientKeeper.GetAllConsensusStates(suite.chainA.GetContext()) - suite.Require().Equal(expConsensusStates, consStates, "%s \n\n%s", expConsensusStates, consStates) -} diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go deleted file mode 100644 index edf77a7f2..000000000 --- a/x/ibc/testing/chain.go +++ /dev/null @@ -1,910 +0,0 @@ -package ibctesting - -import ( - "bytes" - "fmt" - "strconv" - "testing" - "time" - - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/tmhash" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" - tmtypes "github.com/tendermint/tendermint/types" - tmversion "github.com/tendermint/tendermint/version" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/simapp" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" - clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types" - channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" - host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" - "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" - "github.com/cosmos/cosmos-sdk/x/ibc/core/types" - ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" - "github.com/cosmos/cosmos-sdk/x/ibc/testing/mock" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" -) - -const ( - // Default params constants used to create a TM client - TrustingPeriod time.Duration = time.Hour * 24 * 7 * 2 - UnbondingPeriod time.Duration = time.Hour * 24 * 7 * 3 - MaxClockDrift time.Duration = time.Second * 10 - DefaultDelayPeriod uint64 = 0 - - DefaultChannelVersion = ibctransfertypes.Version - InvalidID = "IDisInvalid" - - ConnectionIDPrefix = "conn" - ChannelIDPrefix = "chan" - - TransferPort = ibctransfertypes.ModuleName - MockPort = mock.ModuleName - - // used for testing UpdateClientProposal - Title = "title" - Description = "description" -) - -var ( - DefaultOpenInitVersion *connectiontypes.Version - - // Default params variables used to create a TM client - DefaultTrustLevel ibctmtypes.Fraction = ibctmtypes.DefaultTrustLevel - TestHash = tmhash.Sum([]byte("TESTING HASH")) - TestCoin = sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)) - - UpgradePath = []string{"upgrade", "upgradedIBCState"} - - ConnectionVersion = connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())[0] - - MockAcknowledgement = mock.MockAcknowledgement - MockCommitment = mock.MockCommitment -) - -// TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI -// header and the validators of the TestChain. It also contains a field called ChainID. This -// is the clientID that *other* chains use to refer to this TestChain. The SenderAccount -// is used for delivering transactions through the application state. -// NOTE: the actual application uses an empty chain-id for ease of testing. -type TestChain struct { - t *testing.T - - App *simapp.SimApp - ChainID string - LastHeader *ibctmtypes.Header // header for last block height committed - CurrentHeader tmproto.Header // header for current block height - QueryServer types.QueryServer - TxConfig client.TxConfig - Codec codec.BinaryMarshaler - - Vals *tmtypes.ValidatorSet - Signers []tmtypes.PrivValidator - - senderPrivKey cryptotypes.PrivKey - SenderAccount authtypes.AccountI - - // IBC specific helpers - ClientIDs []string // ClientID's used on this chain - Connections []*TestConnection // track connectionID's created for this chain -} - -// NewTestChain initializes a new TestChain instance with a single validator set using a -// generated private key. It also creates a sender account to be used for delivering transactions. -// -// The first block height is committed to state in order to allow for client creations on -// counterparty chains. The TestChain will return with a block height starting at 2. -// -// Time management is handled by the Coordinator in order to ensure synchrony between chains. -// Each update of any chain increments the block header time for all chains by 5 seconds. -func NewTestChain(t *testing.T, chainID string) *TestChain { - // generate validator private/public key - privVal := mock.NewPV() - pubKey, err := privVal.GetPubKey() - require.NoError(t, err) - - // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) - signers := []tmtypes.PrivValidator{privVal} - - // generate genesis account - senderPrivKey := secp256k1.GenPrivKey() - acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) - balance := banktypes.Balance{ - Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), - } - - app := simapp.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, balance) - - // create current header and call begin block - header := tmproto.Header{ - ChainID: chainID, - Height: 1, - Time: globalStartTime, - } - - txConfig := simapp.MakeTestEncodingConfig().TxConfig - - // create an account to send transactions from - chain := &TestChain{ - t: t, - ChainID: chainID, - App: app, - CurrentHeader: header, - QueryServer: app.IBCKeeper, - TxConfig: txConfig, - Codec: app.AppCodec(), - Vals: valSet, - Signers: signers, - senderPrivKey: senderPrivKey, - SenderAccount: acc, - ClientIDs: make([]string, 0), - Connections: make([]*TestConnection, 0), - } - - cap := chain.App.IBCKeeper.PortKeeper.BindPort(chain.GetContext(), MockPort) - err = chain.App.ScopedIBCMockKeeper.ClaimCapability(chain.GetContext(), cap, host.PortPath(MockPort)) - require.NoError(t, err) - - chain.NextBlock() - - return chain -} - -// GetContext returns the current context for the application. -func (chain *TestChain) GetContext() sdk.Context { - return chain.App.BaseApp.NewContext(false, chain.CurrentHeader) -} - -// QueryProof performs an abci query with the given key and returns the proto encoded merkle proof -// for the query and the height at which the proof will succeed on a tendermint verifier. -func (chain *TestChain) QueryProof(key []byte) ([]byte, clienttypes.Height) { - res := chain.App.Query(abci.RequestQuery{ - Path: fmt.Sprintf("store/%s/key", host.StoreKey), - Height: chain.App.LastBlockHeight() - 1, - Data: key, - Prove: true, - }) - - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) - require.NoError(chain.t, err) - - proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) - require.NoError(chain.t, err) - - revision := clienttypes.ParseChainID(chain.ChainID) - - // proof height + 1 is returned as the proof created corresponds to the height the proof - // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it - // have heights 1 above the IAVL tree. Thus we return proof height + 1 - return proof, clienttypes.NewHeight(revision, uint64(res.Height)+1) -} - -// QueryUpgradeProof performs an abci query with the given key and returns the proto encoded merkle proof -// for the query and the height at which the proof will succeed on a tendermint verifier. -func (chain *TestChain) QueryUpgradeProof(key []byte, height uint64) ([]byte, clienttypes.Height) { - res := chain.App.Query(abci.RequestQuery{ - Path: "store/upgrade/key", - Height: int64(height - 1), - Data: key, - Prove: true, - }) - - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) - require.NoError(chain.t, err) - - proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) - require.NoError(chain.t, err) - - revision := clienttypes.ParseChainID(chain.ChainID) - - // proof height + 1 is returned as the proof created corresponds to the height the proof - // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it - // have heights 1 above the IAVL tree. Thus we return proof height + 1 - return proof, clienttypes.NewHeight(revision, uint64(res.Height+1)) -} - -// QueryClientStateProof performs and abci query for a client state -// stored with a given clientID and returns the ClientState along with the proof -func (chain *TestChain) QueryClientStateProof(clientID string) (exported.ClientState, []byte) { - // retrieve client state to provide proof for - clientState, found := chain.App.IBCKeeper.ClientKeeper.GetClientState(chain.GetContext(), clientID) - require.True(chain.t, found) - - clientKey := host.FullClientStateKey(clientID) - proofClient, _ := chain.QueryProof(clientKey) - - return clientState, proofClient -} - -// QueryConsensusStateProof performs an abci query for a consensus state -// stored on the given clientID. The proof and consensusHeight are returned. -func (chain *TestChain) QueryConsensusStateProof(clientID string) ([]byte, clienttypes.Height) { - clientState := chain.GetClientState(clientID) - - consensusHeight := clientState.GetLatestHeight().(clienttypes.Height) - consensusKey := host.FullConsensusStateKey(clientID, consensusHeight) - proofConsensus, _ := chain.QueryProof(consensusKey) - - return proofConsensus, consensusHeight -} - -// NextBlock sets the last header to the current header and increments the current header to be -// at the next block height. It does not update the time as that is handled by the Coordinator. -// -// CONTRACT: this function must only be called after app.Commit() occurs -func (chain *TestChain) NextBlock() { - // set the last header to the current header - // use nil trusted fields - chain.LastHeader = chain.CurrentTMClientHeader() - - // increment the current header - chain.CurrentHeader = tmproto.Header{ - ChainID: chain.ChainID, - Height: chain.App.LastBlockHeight() + 1, - AppHash: chain.App.LastCommitID().Hash, - // NOTE: the time is increased by the coordinator to maintain time synchrony amongst - // chains. - Time: chain.CurrentHeader.Time, - ValidatorsHash: chain.Vals.Hash(), - NextValidatorsHash: chain.Vals.Hash(), - } - - chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) - -} - -// sendMsgs delivers a transaction through the application without returning the result. -func (chain *TestChain) sendMsgs(msgs ...sdk.Msg) error { - _, err := chain.SendMsgs(msgs...) - return err -} - -// SendMsgs delivers a transaction through the application. It updates the senders sequence -// number and updates the TestChain's headers. It returns the result and error if one -// occurred. -func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { - _, r, err := simapp.SignCheckDeliver( - chain.t, - chain.TxConfig, - chain.App.BaseApp, - chain.GetContext().BlockHeader(), - msgs, - chain.ChainID, - []uint64{chain.SenderAccount.GetAccountNumber()}, - []uint64{chain.SenderAccount.GetSequence()}, - true, true, chain.senderPrivKey, - ) - if err != nil { - return nil, err - } - - // SignCheckDeliver calls app.Commit() - chain.NextBlock() - - // increment sequence for successful transaction execution - chain.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) - - return r, nil -} - -// GetClientState retrieves the client state for the provided clientID. The client is -// expected to exist otherwise testing will fail. -func (chain *TestChain) GetClientState(clientID string) exported.ClientState { - clientState, found := chain.App.IBCKeeper.ClientKeeper.GetClientState(chain.GetContext(), clientID) - require.True(chain.t, found) - - return clientState -} - -// GetConsensusState retrieves the consensus state for the provided clientID and height. -// It will return a success boolean depending on if consensus state exists or not. -func (chain *TestChain) GetConsensusState(clientID string, height exported.Height) (exported.ConsensusState, bool) { - return chain.App.IBCKeeper.ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) -} - -// GetValsAtHeight will return the validator set of the chain at a given height. It will return -// a success boolean depending on if the validator set exists or not at that height. -func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bool) { - histInfo, ok := chain.App.StakingKeeper.GetHistoricalInfo(chain.GetContext(), height) - if !ok { - return nil, false - } - - valSet := stakingtypes.Validators(histInfo.Valset) - - tmValidators, err := teststaking.ToTmValidators(valSet, sdk.DefaultPowerReduction) - if err != nil { - panic(err) - } - return tmtypes.NewValidatorSet(tmValidators), true -} - -// GetConnection retrieves an IBC Connection for the provided TestConnection. The -// connection is expected to exist otherwise testing will fail. -func (chain *TestChain) GetConnection(testConnection *TestConnection) connectiontypes.ConnectionEnd { - connection, found := chain.App.IBCKeeper.ConnectionKeeper.GetConnection(chain.GetContext(), testConnection.ID) - require.True(chain.t, found) - - return connection -} - -// GetChannel retrieves an IBC Channel for the provided TestChannel. The channel -// is expected to exist otherwise testing will fail. -func (chain *TestChain) GetChannel(testChannel TestChannel) channeltypes.Channel { - channel, found := chain.App.IBCKeeper.ChannelKeeper.GetChannel(chain.GetContext(), testChannel.PortID, testChannel.ID) - require.True(chain.t, found) - - return channel -} - -// GetAcknowledgement retrieves an acknowledgement for the provided packet. If the -// acknowledgement does not exist then testing will fail. -func (chain *TestChain) GetAcknowledgement(packet exported.PacketI) []byte { - ack, found := chain.App.IBCKeeper.ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) - require.True(chain.t, found) - - return ack -} - -// GetPrefix returns the prefix for used by a chain in connection creation -func (chain *TestChain) GetPrefix() commitmenttypes.MerklePrefix { - return commitmenttypes.NewMerklePrefix(chain.App.IBCKeeper.ConnectionKeeper.GetCommitmentPrefix().Bytes()) -} - -// NewClientID appends a new clientID string in the format: -// ClientFor -func (chain *TestChain) NewClientID(clientType string) string { - clientID := fmt.Sprintf("%s-%s", clientType, strconv.Itoa(len(chain.ClientIDs))) - chain.ClientIDs = append(chain.ClientIDs, clientID) - return clientID -} - -// AddTestConnection appends a new TestConnection which contains references -// to the connection id, client id and counterparty client id. -func (chain *TestChain) AddTestConnection(clientID, counterpartyClientID string) *TestConnection { - conn := chain.ConstructNextTestConnection(clientID, counterpartyClientID) - - chain.Connections = append(chain.Connections, conn) - return conn -} - -// ConstructNextTestConnection constructs the next test connection to be -// created given a clientID and counterparty clientID. The connection id -// format: -conn -func (chain *TestChain) ConstructNextTestConnection(clientID, counterpartyClientID string) *TestConnection { - connectionID := connectiontypes.FormatConnectionIdentifier(uint64(len(chain.Connections))) - return &TestConnection{ - ID: connectionID, - ClientID: clientID, - NextChannelVersion: DefaultChannelVersion, - CounterpartyClientID: counterpartyClientID, - } -} - -// GetFirstTestConnection returns the first test connection for a given clientID. -// The connection may or may not exist in the chain state. -func (chain *TestChain) GetFirstTestConnection(clientID, counterpartyClientID string) *TestConnection { - if len(chain.Connections) > 0 { - return chain.Connections[0] - } - - return chain.ConstructNextTestConnection(clientID, counterpartyClientID) -} - -// AddTestChannel appends a new TestChannel which contains references to the port and channel ID -// used for channel creation and interaction. See 'NextTestChannel' for channel ID naming format. -func (chain *TestChain) AddTestChannel(conn *TestConnection, portID string) TestChannel { - channel := chain.NextTestChannel(conn, portID) - conn.Channels = append(conn.Channels, channel) - return channel -} - -// NextTestChannel returns the next test channel to be created on this connection, but does not -// add it to the list of created channels. This function is expected to be used when the caller -// has not created the associated channel in app state, but would still like to refer to the -// non-existent channel usually to test for its non-existence. -// -// channel ID format: -chan -// -// The port is passed in by the caller. -func (chain *TestChain) NextTestChannel(conn *TestConnection, portID string) TestChannel { - nextChanSeq := chain.App.IBCKeeper.ChannelKeeper.GetNextChannelSequence(chain.GetContext()) - channelID := channeltypes.FormatChannelIdentifier(nextChanSeq) - return TestChannel{ - PortID: portID, - ID: channelID, - ClientID: conn.ClientID, - CounterpartyClientID: conn.CounterpartyClientID, - Version: conn.NextChannelVersion, - } -} - -// ConstructMsgCreateClient constructs a message to create a new client state (tendermint or solomachine). -// NOTE: a solo machine client will be created with an empty diversifier. -func (chain *TestChain) ConstructMsgCreateClient(counterparty *TestChain, clientID string, clientType string) *clienttypes.MsgCreateClient { - var ( - clientState exported.ClientState - consensusState exported.ConsensusState - ) - - switch clientType { - case exported.Tendermint: - height := counterparty.LastHeader.GetHeight().(clienttypes.Height) - clientState = ibctmtypes.NewClientState( - counterparty.ChainID, DefaultTrustLevel, TrustingPeriod, UnbondingPeriod, MaxClockDrift, - height, commitmenttypes.GetSDKSpecs(), UpgradePath, false, false, - ) - consensusState = counterparty.LastHeader.ConsensusState() - case exported.Solomachine: - solo := NewSolomachine(chain.t, chain.Codec, clientID, "", 1) - clientState = solo.ClientState() - consensusState = solo.ConsensusState() - default: - chain.t.Fatalf("unsupported client state type %s", clientType) - } - - msg, err := clienttypes.NewMsgCreateClient( - clientState, consensusState, chain.SenderAccount.GetAddress(), - ) - require.NoError(chain.t, err) - return msg -} - -// CreateTMClient will construct and execute a 07-tendermint MsgCreateClient. A counterparty -// client will be created on the (target) chain. -func (chain *TestChain) CreateTMClient(counterparty *TestChain, clientID string) error { - // construct MsgCreateClient using counterparty - msg := chain.ConstructMsgCreateClient(counterparty, clientID, exported.Tendermint) - return chain.sendMsgs(msg) -} - -// UpdateTMClient will construct and execute a 07-tendermint MsgUpdateClient. The counterparty -// client will be updated on the (target) chain. UpdateTMClient mocks the relayer flow -// necessary for updating a Tendermint client. -func (chain *TestChain) UpdateTMClient(counterparty *TestChain, clientID string) error { - header, err := chain.ConstructUpdateTMClientHeader(counterparty, clientID) - require.NoError(chain.t, err) - - msg, err := clienttypes.NewMsgUpdateClient( - clientID, header, - chain.SenderAccount.GetAddress(), - ) - require.NoError(chain.t, err) - - return chain.sendMsgs(msg) -} - -// ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the -// light client on the source chain. -func (chain *TestChain) ConstructUpdateTMClientHeader(counterparty *TestChain, clientID string) (*ibctmtypes.Header, error) { - header := counterparty.LastHeader - // Relayer must query for LatestHeight on client to get TrustedHeight - trustedHeight := chain.GetClientState(clientID).GetLatestHeight().(clienttypes.Height) - var ( - tmTrustedVals *tmtypes.ValidatorSet - ok bool - ) - // Once we get TrustedHeight from client, we must query the validators from the counterparty chain - // If the LatestHeight == LastHeader.Height, then TrustedValidators are current validators - // If LatestHeight < LastHeader.Height, we can query the historical validator set from HistoricalInfo - if trustedHeight == counterparty.LastHeader.GetHeight() { - tmTrustedVals = counterparty.Vals - } else { - // NOTE: We need to get validators from counterparty at height: trustedHeight+1 - // since the last trusted validators for a header at height h - // is the NextValidators at h+1 committed to in header h by - // NextValidatorsHash - tmTrustedVals, ok = counterparty.GetValsAtHeight(int64(trustedHeight.RevisionHeight + 1)) - if !ok { - return nil, sdkerrors.Wrapf(ibctmtypes.ErrInvalidHeaderHeight, "could not retrieve trusted validators at trustedHeight: %d", trustedHeight) - } - } - // inject trusted fields into last header - // for now assume revision number is 0 - header.TrustedHeight = trustedHeight - - trustedVals, err := tmTrustedVals.ToProto() - if err != nil { - return nil, err - } - header.TrustedValidators = trustedVals - - return header, nil - -} - -// ExpireClient fast forwards the chain's block time by the provided amount of time which will -// expire any clients with a trusting period less than or equal to this amount of time. -func (chain *TestChain) ExpireClient(amount time.Duration) { - chain.CurrentHeader.Time = chain.CurrentHeader.Time.Add(amount) -} - -// CurrentTMClientHeader creates a TM header using the current header parameters -// on the chain. The trusted fields in the header are set to nil. -func (chain *TestChain) CurrentTMClientHeader() *ibctmtypes.Header { - return chain.CreateTMClientHeader(chain.ChainID, chain.CurrentHeader.Height, clienttypes.Height{}, chain.CurrentHeader.Time, chain.Vals, nil, chain.Signers) -} - -// CreateTMClientHeader creates a TM header to update the TM client. Args are passed in to allow -// caller flexibility to use params that differ from the chain. -func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, trustedHeight clienttypes.Height, timestamp time.Time, tmValSet, tmTrustedVals *tmtypes.ValidatorSet, signers []tmtypes.PrivValidator) *ibctmtypes.Header { - var ( - valSet *tmproto.ValidatorSet - trustedVals *tmproto.ValidatorSet - ) - require.NotNil(chain.t, tmValSet) - - vsetHash := tmValSet.Hash() - - tmHeader := tmtypes.Header{ - Version: tmprotoversion.Consensus{Block: tmversion.BlockProtocol, App: 2}, - ChainID: chainID, - Height: blockHeight, - Time: timestamp, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), - LastCommitHash: chain.App.LastCommitID().Hash, - DataHash: tmhash.Sum([]byte("data_hash")), - ValidatorsHash: vsetHash, - NextValidatorsHash: vsetHash, - ConsensusHash: tmhash.Sum([]byte("consensus_hash")), - AppHash: chain.CurrentHeader.AppHash, - LastResultsHash: tmhash.Sum([]byte("last_results_hash")), - EvidenceHash: tmhash.Sum([]byte("evidence_hash")), - ProposerAddress: tmValSet.Proposer.Address, //nolint:staticcheck - } - hhash := tmHeader.Hash() - blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chainID, blockHeight, 1, tmproto.PrecommitType, tmValSet) - - commit, err := tmtypes.MakeCommit(blockID, blockHeight, 1, voteSet, signers, timestamp) - require.NoError(chain.t, err) - - signedHeader := &tmproto.SignedHeader{ - Header: tmHeader.ToProto(), - Commit: commit.ToProto(), - } - - if tmValSet != nil { - valSet, err = tmValSet.ToProto() - if err != nil { - panic(err) - } - } - - if tmTrustedVals != nil { - trustedVals, err = tmTrustedVals.ToProto() - if err != nil { - panic(err) - } - } - - // The trusted fields may be nil. They may be filled before relaying messages to a client. - // The relayer is responsible for querying client and injecting appropriate trusted fields. - return &ibctmtypes.Header{ - SignedHeader: signedHeader, - ValidatorSet: valSet, - TrustedHeight: trustedHeight, - TrustedValidators: trustedVals, - } -} - -// MakeBlockID copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { - return tmtypes.BlockID{ - Hash: hash, - PartSetHeader: tmtypes.PartSetHeader{ - Total: partSetSize, - Hash: partSetHash, - }, - } -} - -// CreateSortedSignerArray takes two PrivValidators, and the corresponding Validator structs -// (including voting power). It returns a signer array of PrivValidators that matches the -// sorting of ValidatorSet. -// The sorting is first by .VotingPower (descending), with secondary index of .Address (ascending). -func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, - altVal, suiteVal *tmtypes.Validator) []tmtypes.PrivValidator { - - switch { - case altVal.VotingPower > suiteVal.VotingPower: - return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} - case altVal.VotingPower < suiteVal.VotingPower: - return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} - default: - if bytes.Compare(altVal.Address, suiteVal.Address) == -1 { - return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} - } - return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} - } -} - -// ConnectionOpenInit will construct and execute a MsgConnectionOpenInit. -func (chain *TestChain) ConnectionOpenInit( - counterparty *TestChain, - connection, counterpartyConnection *TestConnection, -) error { - msg := connectiontypes.NewMsgConnectionOpenInit( - connection.ClientID, - connection.CounterpartyClientID, - counterparty.GetPrefix(), DefaultOpenInitVersion, DefaultDelayPeriod, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ConnectionOpenTry will construct and execute a MsgConnectionOpenTry. -func (chain *TestChain) ConnectionOpenTry( - counterparty *TestChain, - connection, counterpartyConnection *TestConnection, -) error { - counterpartyClient, proofClient := counterparty.QueryClientStateProof(counterpartyConnection.ClientID) - - connectionKey := host.ConnectionKey(counterpartyConnection.ID) - proofInit, proofHeight := counterparty.QueryProof(connectionKey) - - proofConsensus, consensusHeight := counterparty.QueryConsensusStateProof(counterpartyConnection.ClientID) - - msg := connectiontypes.NewMsgConnectionOpenTry( - "", connection.ClientID, // does not support handshake continuation - counterpartyConnection.ID, counterpartyConnection.ClientID, - counterpartyClient, counterparty.GetPrefix(), []*connectiontypes.Version{ConnectionVersion}, DefaultDelayPeriod, - proofInit, proofClient, proofConsensus, - proofHeight, consensusHeight, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ConnectionOpenAck will construct and execute a MsgConnectionOpenAck. -func (chain *TestChain) ConnectionOpenAck( - counterparty *TestChain, - connection, counterpartyConnection *TestConnection, -) error { - counterpartyClient, proofClient := counterparty.QueryClientStateProof(counterpartyConnection.ClientID) - - connectionKey := host.ConnectionKey(counterpartyConnection.ID) - proofTry, proofHeight := counterparty.QueryProof(connectionKey) - - proofConsensus, consensusHeight := counterparty.QueryConsensusStateProof(counterpartyConnection.ClientID) - - msg := connectiontypes.NewMsgConnectionOpenAck( - connection.ID, counterpartyConnection.ID, counterpartyClient, // testing doesn't use flexible selection - proofTry, proofClient, proofConsensus, - proofHeight, consensusHeight, - ConnectionVersion, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ConnectionOpenConfirm will construct and execute a MsgConnectionOpenConfirm. -func (chain *TestChain) ConnectionOpenConfirm( - counterparty *TestChain, - connection, counterpartyConnection *TestConnection, -) error { - connectionKey := host.ConnectionKey(counterpartyConnection.ID) - proof, height := counterparty.QueryProof(connectionKey) - - msg := connectiontypes.NewMsgConnectionOpenConfirm( - connection.ID, - proof, height, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// CreatePortCapability binds and claims a capability for the given portID if it does not -// already exist. This function will fail testing on any resulting error. -// NOTE: only creation of a capbility for a transfer or mock port is supported -// Other applications must bind to the port in InitGenesis or modify this code. -func (chain *TestChain) CreatePortCapability(portID string) { - // check if the portId is already binded, if not bind it - _, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.PortPath(portID)) - if !ok { - // create capability using the IBC capability keeper - cap, err := chain.App.ScopedIBCKeeper.NewCapability(chain.GetContext(), host.PortPath(portID)) - require.NoError(chain.t, err) - - switch portID { - case MockPort: - // claim capability using the mock capability keeper - err = chain.App.ScopedIBCMockKeeper.ClaimCapability(chain.GetContext(), cap, host.PortPath(portID)) - require.NoError(chain.t, err) - case TransferPort: - // claim capability using the transfer capability keeper - err = chain.App.ScopedTransferKeeper.ClaimCapability(chain.GetContext(), cap, host.PortPath(portID)) - require.NoError(chain.t, err) - default: - panic(fmt.Sprintf("unsupported ibc testing package port ID %s", portID)) - } - } - - chain.App.Commit() - - chain.NextBlock() -} - -// GetPortCapability returns the port capability for the given portID. The capability must -// exist, otherwise testing will fail. -func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capability { - cap, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.PortPath(portID)) - require.True(chain.t, ok) - - return cap -} - -// CreateChannelCapability binds and claims a capability for the given portID and channelID -// if it does not already exist. This function will fail testing on any resulting error. -func (chain *TestChain) CreateChannelCapability(portID, channelID string) { - capName := host.ChannelCapabilityPath(portID, channelID) - // check if the portId is already binded, if not bind it - _, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), capName) - if !ok { - cap, err := chain.App.ScopedIBCKeeper.NewCapability(chain.GetContext(), capName) - require.NoError(chain.t, err) - err = chain.App.ScopedTransferKeeper.ClaimCapability(chain.GetContext(), cap, capName) - require.NoError(chain.t, err) - } - - chain.App.Commit() - - chain.NextBlock() -} - -// GetChannelCapability returns the channel capability for the given portID and channelID. -// The capability must exist, otherwise testing will fail. -func (chain *TestChain) GetChannelCapability(portID, channelID string) *capabilitytypes.Capability { - cap, ok := chain.App.ScopedIBCKeeper.GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) - require.True(chain.t, ok) - - return cap -} - -// ChanOpenInit will construct and execute a MsgChannelOpenInit. -func (chain *TestChain) ChanOpenInit( - ch, counterparty TestChannel, - order channeltypes.Order, - connectionID string, -) error { - msg := channeltypes.NewMsgChannelOpenInit( - ch.PortID, - ch.Version, order, []string{connectionID}, - counterparty.PortID, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ChanOpenTry will construct and execute a MsgChannelOpenTry. -func (chain *TestChain) ChanOpenTry( - counterparty *TestChain, - ch, counterpartyCh TestChannel, - order channeltypes.Order, - connectionID string, -) error { - proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) - - msg := channeltypes.NewMsgChannelOpenTry( - ch.PortID, "", // does not support handshake continuation - ch.Version, order, []string{connectionID}, - counterpartyCh.PortID, counterpartyCh.ID, counterpartyCh.Version, - proof, height, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ChanOpenAck will construct and execute a MsgChannelOpenAck. -func (chain *TestChain) ChanOpenAck( - counterparty *TestChain, - ch, counterpartyCh TestChannel, -) error { - proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) - - msg := channeltypes.NewMsgChannelOpenAck( - ch.PortID, ch.ID, - counterpartyCh.ID, counterpartyCh.Version, // testing doesn't use flexible selection - proof, height, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ChanOpenConfirm will construct and execute a MsgChannelOpenConfirm. -func (chain *TestChain) ChanOpenConfirm( - counterparty *TestChain, - ch, counterpartyCh TestChannel, -) error { - proof, height := counterparty.QueryProof(host.ChannelKey(counterpartyCh.PortID, counterpartyCh.ID)) - - msg := channeltypes.NewMsgChannelOpenConfirm( - ch.PortID, ch.ID, - proof, height, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// ChanCloseInit will construct and execute a MsgChannelCloseInit. -// -// NOTE: does not work with ibc-transfer module -func (chain *TestChain) ChanCloseInit( - counterparty *TestChain, - channel TestChannel, -) error { - msg := channeltypes.NewMsgChannelCloseInit( - channel.PortID, channel.ID, - chain.SenderAccount.GetAddress(), - ) - return chain.sendMsgs(msg) -} - -// GetPacketData returns a ibc-transfer marshalled packet to be used for -// callback testing. -func (chain *TestChain) GetPacketData(counterparty *TestChain) []byte { - packet := ibctransfertypes.FungibleTokenPacketData{ - Denom: TestCoin.Denom, - Amount: TestCoin.Amount.Uint64(), - Sender: chain.SenderAccount.GetAddress().String(), - Receiver: counterparty.SenderAccount.GetAddress().String(), - } - - return packet.GetBytes() -} - -// SendPacket simulates sending a packet through the channel keeper. No message needs to be -// passed since this call is made from a module. -func (chain *TestChain) SendPacket( - packet exported.PacketI, -) error { - channelCap := chain.GetChannelCapability(packet.GetSourcePort(), packet.GetSourceChannel()) - - // no need to send message, acting as a module - err := chain.App.IBCKeeper.ChannelKeeper.SendPacket(chain.GetContext(), channelCap, packet) - if err != nil { - return err - } - - // commit changes - chain.App.Commit() - chain.NextBlock() - - return nil -} - -// WriteAcknowledgement simulates writing an acknowledgement to the chain. -func (chain *TestChain) WriteAcknowledgement( - packet exported.PacketI, -) error { - channelCap := chain.GetChannelCapability(packet.GetDestPort(), packet.GetDestChannel()) - - // no need to send message, acting as a handler - err := chain.App.IBCKeeper.ChannelKeeper.WriteAcknowledgement(chain.GetContext(), channelCap, packet, TestHash) - if err != nil { - return err - } - - // commit changes - chain.App.Commit() - chain.NextBlock() - - return nil -} diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index 0d48777dc..46635cacb 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -345,11 +345,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, delegation) val0AccAddr := sdk.AccAddress(addrVals[0].Bytes()) -<<<<<<< HEAD - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], app.StakingKeeper.TokensFromConsensusPower(ctx, 6).ToDec()) -======= - _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.TokensFromConsensusPower(6).ToDec()) ->>>>>>> upstream/master + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], app.StakingKeeper.TokensFromConsensusPower(ctx, 6).ToDec()) require.NoError(t, err) // end block diff --git a/x/staking/legacy/v040/commission.go b/x/staking/legacy/v040/commission.go deleted file mode 100644 index c7d4044a2..000000000 --- a/x/staking/legacy/v040/commission.go +++ /dev/null @@ -1,17 +0,0 @@ -package v040 - -import ( - yaml "gopkg.in/yaml.v2" -) - -// String implements the Stringer interface for a Commission object. -func (c Commission) String() string { - out, _ := yaml.Marshal(c) - return string(out) -} - -// String implements the Stringer interface for a CommissionRates object. -func (cr CommissionRates) String() string { - out, _ := yaml.Marshal(cr) - return string(out) -} diff --git a/x/staking/legacy/v040/delegation.go b/x/staking/legacy/v040/delegation.go deleted file mode 100644 index 8c3f99874..000000000 --- a/x/staking/legacy/v040/delegation.go +++ /dev/null @@ -1,100 +0,0 @@ -package v040 - -import ( - "fmt" - "strings" - - yaml "gopkg.in/yaml.v2" -) - -// String returns a human readable string representation of a Delegation. -func (d Delegation) String() string { - out, _ := yaml.Marshal(d) - return string(out) -} - -// Delegations is a collection of delegations -type Delegations []Delegation - -func (d Delegations) String() (out string) { - for _, del := range d { - out += del.String() + "\n" - } - - return strings.TrimSpace(out) -} - -// String implements the stringer interface for a UnbondingDelegationEntry. -func (e UnbondingDelegationEntry) String() string { - out, _ := yaml.Marshal(e) - return string(out) -} - -// String returns a human readable string representation of an UnbondingDelegation. -func (ubd UnbondingDelegation) String() string { - out := fmt.Sprintf(`Unbonding Delegations between: - Delegator: %s - Validator: %s - Entries:`, ubd.DelegatorAddress, ubd.ValidatorAddress) - for i, entry := range ubd.Entries { - out += fmt.Sprintf(` Unbonding Delegation %d: - Creation Height: %v - Min time to unbond (unix): %v - Expected balance: %s`, i, entry.CreationHeight, - entry.CompletionTime, entry.Balance) - } - - return out -} - -// UnbondingDelegations is a collection of UnbondingDelegation -type UnbondingDelegations []UnbondingDelegation - -func (ubds UnbondingDelegations) String() (out string) { - for _, u := range ubds { - out += u.String() + "\n" - } - - return strings.TrimSpace(out) -} - -// String implements the Stringer interface for a RedelegationEntry object. -func (e RedelegationEntry) String() string { - out, _ := yaml.Marshal(e) - return string(out) -} - -// String returns a human readable string representation of a Redelegation. -func (red Redelegation) String() string { - out := fmt.Sprintf(`Redelegations between: - Delegator: %s - Source Validator: %s - Destination Validator: %s - Entries: -`, - red.DelegatorAddress, red.ValidatorSrcAddress, red.ValidatorDstAddress, - ) - - for i, entry := range red.Entries { - out += fmt.Sprintf(` Redelegation Entry #%d: - Creation height: %v - Min time to unbond (unix): %v - Dest Shares: %s -`, - i, entry.CreationHeight, entry.CompletionTime, entry.SharesDst, - ) - } - - return strings.TrimRight(out, "\n") -} - -// Redelegations are a collection of Redelegation -type Redelegations []Redelegation - -func (d Redelegations) String() (out string) { - for _, red := range d { - out += red.String() + "\n" - } - - return strings.TrimSpace(out) -} diff --git a/x/staking/legacy/v040/genesis.pb.go b/x/staking/legacy/v040/genesis.pb.go deleted file mode 100644 index 2e21644f1..000000000 --- a/x/staking/legacy/v040/genesis.pb.go +++ /dev/null @@ -1,774 +0,0 @@ -package v040 - -import ( - fmt "fmt" - io "io" - math_bits "math/bits" - - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - proto "github.com/gogo/protobuf/proto" -) - -// GenesisState defines the staking module's genesis state. -type GenesisState struct { - // params defines all the parameters of related to deposit. - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - // last_total_power tracks the total amounts of bonded tokens recorded during - // the previous end block. - LastTotalPower github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=last_total_power,json=lastTotalPower,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"last_total_power" yaml:"last_total_power"` - // last_validator_powers is a special index that provides a historical list - // of the last-block's bonded validators. - LastValidatorPowers []LastValidatorPower `protobuf:"bytes,3,rep,name=last_validator_powers,json=lastValidatorPowers,proto3" json:"last_validator_powers" yaml:"last_validator_powers"` - // delegations defines the validator set at genesis. - Validators []Validator `protobuf:"bytes,4,rep,name=validators,proto3" json:"validators"` - // delegations defines the delegations active at genesis. - Delegations []Delegation `protobuf:"bytes,5,rep,name=delegations,proto3" json:"delegations"` - // unbonding_delegations defines the unbonding delegations active at genesis. - UnbondingDelegations []UnbondingDelegation `protobuf:"bytes,6,rep,name=unbonding_delegations,json=unbondingDelegations,proto3" json:"unbonding_delegations" yaml:"unbonding_delegations"` - // redelegations defines the redelegations active at genesis. - Redelegations []Redelegation `protobuf:"bytes,7,rep,name=redelegations,proto3" json:"redelegations"` - Exported bool `protobuf:"varint,8,opt,name=exported,proto3" json:"exported,omitempty"` -} - -func (m *GenesisState) Reset() { *m = GenesisState{} } -func (m *GenesisState) String() string { return proto.CompactTextString(m) } -func (*GenesisState) ProtoMessage() {} - -// LastValidatorPower required for validator set update logic. -type LastValidatorPower struct { - // address is the address of the validator. - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // power defines the power of the validator. - Power int64 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"` -} - -func (m *LastValidatorPower) Reset() { *m = LastValidatorPower{} } -func (m *LastValidatorPower) String() string { return proto.CompactTextString(m) } -func (*LastValidatorPower) ProtoMessage() {} - -func (m *GenesisState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Exported { - i-- - if m.Exported { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x40 - } - if len(m.Redelegations) > 0 { - for iNdEx := len(m.Redelegations) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Redelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - } - } - if len(m.UnbondingDelegations) > 0 { - for iNdEx := len(m.UnbondingDelegations) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.UnbondingDelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - } - if len(m.Delegations) > 0 { - for iNdEx := len(m.Delegations) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Delegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if len(m.Validators) > 0 { - for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.LastValidatorPowers) > 0 { - for iNdEx := len(m.LastValidatorPowers) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.LastValidatorPowers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - { - size := m.LastTotalPower.Size() - i -= size - if _, err := m.LastTotalPower.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *LastValidatorPower) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LastValidatorPower) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LastValidatorPower) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Power != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.Power)) - i-- - dAtA[i] = 0x10 - } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { - offset -= sovGenesis(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) - l = m.LastTotalPower.Size() - n += 1 + l + sovGenesis(uint64(l)) - if len(m.LastValidatorPowers) > 0 { - for _, e := range m.LastValidatorPowers { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.Validators) > 0 { - for _, e := range m.Validators { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.Delegations) > 0 { - for _, e := range m.Delegations { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.UnbondingDelegations) > 0 { - for _, e := range m.UnbondingDelegations { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.Redelegations) > 0 { - for _, e := range m.Redelegations { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if m.Exported { - n += 2 - } - return n -} - -func (m *LastValidatorPower) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - if m.Power != 0 { - n += 1 + sovGenesis(uint64(m.Power)) - } - return n -} - -func sovGenesis(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} - -func (m *GenesisState) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastTotalPower", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.LastTotalPower.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastValidatorPowers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LastValidatorPowers = append(m.LastValidatorPowers, LastValidatorPower{}) - if err := m.LastValidatorPowers[len(m.LastValidatorPowers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Validators = append(m.Validators, Validator{}) - if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Delegations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Delegations = append(m.Delegations, Delegation{}) - if err := m.Delegations[len(m.Delegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingDelegations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UnbondingDelegations = append(m.UnbondingDelegations, UnbondingDelegation{}) - if err := m.UnbondingDelegations[len(m.UnbondingDelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Redelegations", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Redelegations = append(m.Redelegations, Redelegation{}) - if err := m.Redelegations[len(m.Redelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Exported", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Exported = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LastValidatorPower) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LastValidatorPower: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LastValidatorPower: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Power", wireType) - } - m.Power = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Power |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenesis(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenesis - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGenesis - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenesis - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenesis - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/staking/legacy/v040/keys.go b/x/staking/legacy/v040/keys.go index 6ad280e27..c01c41a41 100644 --- a/x/staking/legacy/v040/keys.go +++ b/x/staking/legacy/v040/keys.go @@ -1,5 +1,330 @@ +// Package v040 is copy-pasted from: +// https://github.com/cosmos/cosmos-sdk/blob/v0.41.0/x/staking/types/keys.go package v040 -const ( - ModuleName = "staking" +import ( + "bytes" + "encoding/binary" + "fmt" + "strconv" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + v040auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v040" + "github.com/cosmos/cosmos-sdk/x/staking/types" ) + +const ( + // ModuleName is the name of the staking module + ModuleName = "staking" + + // StoreKey is the string store representation + StoreKey = ModuleName + + // QuerierRoute is the querier route for the staking module + QuerierRoute = ModuleName + + // RouterKey is the msg router key for the staking module + RouterKey = ModuleName +) + +var ( + // Keys for store prefixes + // Last* values are constant during a block. + LastValidatorPowerKey = []byte{0x11} // prefix for each key to a validator index, for bonded validators + LastTotalPowerKey = []byte{0x12} // prefix for the total power + + ValidatorsKey = []byte{0x21} // prefix for each key to a validator + ValidatorsByConsAddrKey = []byte{0x22} // prefix for each key to a validator index, by pubkey + ValidatorsByPowerIndexKey = []byte{0x23} // prefix for each key to a validator index, sorted by power + + DelegationKey = []byte{0x31} // key for a delegation + UnbondingDelegationKey = []byte{0x32} // key for an unbonding-delegation + UnbondingDelegationByValIndexKey = []byte{0x33} // prefix for each key for an unbonding-delegation, by validator operator + RedelegationKey = []byte{0x34} // key for a redelegation + RedelegationByValSrcIndexKey = []byte{0x35} // prefix for each key for an redelegation, by source validator operator + RedelegationByValDstIndexKey = []byte{0x36} // prefix for each key for an redelegation, by destination validator operator + + UnbondingQueueKey = []byte{0x41} // prefix for the timestamps in unbonding queue + RedelegationQueueKey = []byte{0x42} // prefix for the timestamps in redelegations queue + ValidatorQueueKey = []byte{0x43} // prefix for the timestamps in validator queue + + HistoricalInfoKey = []byte{0x50} // prefix for the historical info +) + +// gets the key for the validator with address +// VALUE: staking/Validator +func GetValidatorKey(operatorAddr sdk.ValAddress) []byte { + return append(ValidatorsKey, operatorAddr.Bytes()...) +} + +// gets the key for the validator with pubkey +// VALUE: validator operator address ([]byte) +func GetValidatorByConsAddrKey(addr sdk.ConsAddress) []byte { + return append(ValidatorsByConsAddrKey, addr.Bytes()...) +} + +// Get the validator operator address from LastValidatorPowerKey +func AddressFromLastValidatorPowerKey(key []byte) []byte { + return key[1:] // remove prefix bytes +} + +// get the validator by power index. +// Power index is the key used in the power-store, and represents the relative +// power ranking of the validator. +// VALUE: validator operator address ([]byte) +func GetValidatorsByPowerIndexKey(validator types.Validator) []byte { + // NOTE the address doesn't need to be stored because counter bytes must always be different + // NOTE the larger values are of higher value + + consensusPower := sdk.TokensToConsensusPower(validator.Tokens, sdk.DefaultPowerReduction) + consensusPowerBytes := make([]byte, 8) + binary.BigEndian.PutUint64(consensusPowerBytes, uint64(consensusPower)) + + powerBytes := consensusPowerBytes + powerBytesLen := len(powerBytes) // 8 + + // key is of format prefix || powerbytes || addrBytes + key := make([]byte, 1+powerBytesLen+v040auth.AddrLen) + + key[0] = ValidatorsByPowerIndexKey[0] + copy(key[1:powerBytesLen+1], powerBytes) + addr, err := sdk.ValAddressFromBech32(validator.OperatorAddress) + if err != nil { + panic(err) + } + operAddrInvr := sdk.CopyBytes(addr) + + for i, b := range operAddrInvr { + operAddrInvr[i] = ^b + } + + copy(key[powerBytesLen+1:], operAddrInvr) + + return key +} + +// get the bonded validator index key for an operator address +func GetLastValidatorPowerKey(operator sdk.ValAddress) []byte { + return append(LastValidatorPowerKey, operator...) +} + +// parse the validators operator address from power rank key +func ParseValidatorPowerRankKey(key []byte) (operAddr []byte) { + powerBytesLen := 8 + if len(key) != 1+powerBytesLen+v040auth.AddrLen { + panic("Invalid validator power rank key length") + } + + operAddr = sdk.CopyBytes(key[powerBytesLen+1:]) + + for i, b := range operAddr { + operAddr[i] = ^b + } + + return operAddr +} + +// GetValidatorQueueKey returns the prefix key used for getting a set of unbonding +// validators whose unbonding completion occurs at the given time and height. +func GetValidatorQueueKey(timestamp time.Time, height int64) []byte { + heightBz := sdk.Uint64ToBigEndian(uint64(height)) + timeBz := sdk.FormatTimeBytes(timestamp) + timeBzL := len(timeBz) + prefixL := len(ValidatorQueueKey) + + bz := make([]byte, prefixL+8+timeBzL+8) + + // copy the prefix + copy(bz[:prefixL], ValidatorQueueKey) + + // copy the encoded time bytes length + copy(bz[prefixL:prefixL+8], sdk.Uint64ToBigEndian(uint64(timeBzL))) + + // copy the encoded time bytes + copy(bz[prefixL+8:prefixL+8+timeBzL], timeBz) + + // copy the encoded height + copy(bz[prefixL+8+timeBzL:], heightBz) + + return bz +} + +// ParseValidatorQueueKey returns the encoded time and height from a key created +// from GetValidatorQueueKey. +func ParseValidatorQueueKey(bz []byte) (time.Time, int64, error) { + prefixL := len(ValidatorQueueKey) + if prefix := bz[:prefixL]; !bytes.Equal(prefix, ValidatorQueueKey) { + return time.Time{}, 0, fmt.Errorf("invalid prefix; expected: %X, got: %X", ValidatorQueueKey, prefix) + } + + timeBzL := sdk.BigEndianToUint64(bz[prefixL : prefixL+8]) + ts, err := sdk.ParseTimeBytes(bz[prefixL+8 : prefixL+8+int(timeBzL)]) + if err != nil { + return time.Time{}, 0, err + } + + height := sdk.BigEndianToUint64(bz[prefixL+8+int(timeBzL):]) + + return ts, int64(height), nil +} + +// gets the key for delegator bond with validator +// VALUE: staking/Delegation +func GetDelegationKey(delAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { + return append(GetDelegationsKey(delAddr), valAddr.Bytes()...) +} + +// gets the prefix for a delegator for all validators +func GetDelegationsKey(delAddr sdk.AccAddress) []byte { + return append(DelegationKey, delAddr.Bytes()...) +} + +// gets the key for an unbonding delegation by delegator and validator addr +// VALUE: staking/UnbondingDelegation +func GetUBDKey(delAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { + return append( + GetUBDsKey(delAddr.Bytes()), + valAddr.Bytes()...) +} + +// gets the index-key for an unbonding delegation, stored by validator-index +// VALUE: none (key rearrangement used) +func GetUBDByValIndexKey(delAddr sdk.AccAddress, valAddr sdk.ValAddress) []byte { + return append(GetUBDsByValIndexKey(valAddr), delAddr.Bytes()...) +} + +// rearranges the ValIndexKey to get the UBDKey +func GetUBDKeyFromValIndexKey(indexKey []byte) []byte { + addrs := indexKey[1:] // remove prefix bytes + if len(addrs) != 2*v040auth.AddrLen { + panic("unexpected key length") + } + + valAddr := addrs[:v040auth.AddrLen] + delAddr := addrs[v040auth.AddrLen:] + + return GetUBDKey(delAddr, valAddr) +} + +// gets the prefix for all unbonding delegations from a delegator +func GetUBDsKey(delAddr sdk.AccAddress) []byte { + return append(UnbondingDelegationKey, delAddr.Bytes()...) +} + +// gets the prefix keyspace for the indexes of unbonding delegations for a validator +func GetUBDsByValIndexKey(valAddr sdk.ValAddress) []byte { + return append(UnbondingDelegationByValIndexKey, valAddr.Bytes()...) +} + +// gets the prefix for all unbonding delegations from a delegator +func GetUnbondingDelegationTimeKey(timestamp time.Time) []byte { + bz := sdk.FormatTimeBytes(timestamp) + return append(UnbondingQueueKey, bz...) +} + +// GetREDKey returns a key prefix for indexing a redelegation from a delegator +// and source validator to a destination validator. +func GetREDKey(delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress) []byte { + key := make([]byte, 1+v040auth.AddrLen*3) + + copy(key[0:v040auth.AddrLen+1], GetREDsKey(delAddr.Bytes())) + copy(key[v040auth.AddrLen+1:2*v040auth.AddrLen+1], valSrcAddr.Bytes()) + copy(key[2*v040auth.AddrLen+1:3*v040auth.AddrLen+1], valDstAddr.Bytes()) + + return key +} + +// gets the index-key for a redelegation, stored by source-validator-index +// VALUE: none (key rearrangement used) +func GetREDByValSrcIndexKey(delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress) []byte { + REDSFromValsSrcKey := GetREDsFromValSrcIndexKey(valSrcAddr) + offset := len(REDSFromValsSrcKey) + + // key is of the form REDSFromValsSrcKey || delAddr || valDstAddr + key := make([]byte, len(REDSFromValsSrcKey)+2*v040auth.AddrLen) + copy(key[0:offset], REDSFromValsSrcKey) + copy(key[offset:offset+v040auth.AddrLen], delAddr.Bytes()) + copy(key[offset+v040auth.AddrLen:offset+2*v040auth.AddrLen], valDstAddr.Bytes()) + + return key +} + +// gets the index-key for a redelegation, stored by destination-validator-index +// VALUE: none (key rearrangement used) +func GetREDByValDstIndexKey(delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress) []byte { + REDSToValsDstKey := GetREDsToValDstIndexKey(valDstAddr) + offset := len(REDSToValsDstKey) + + // key is of the form REDSToValsDstKey || delAddr || valSrcAddr + key := make([]byte, len(REDSToValsDstKey)+2*v040auth.AddrLen) + copy(key[0:offset], REDSToValsDstKey) + copy(key[offset:offset+v040auth.AddrLen], delAddr.Bytes()) + copy(key[offset+v040auth.AddrLen:offset+2*v040auth.AddrLen], valSrcAddr.Bytes()) + + return key +} + +// GetREDKeyFromValSrcIndexKey rearranges the ValSrcIndexKey to get the REDKey +func GetREDKeyFromValSrcIndexKey(indexKey []byte) []byte { + // note that first byte is prefix byte + if len(indexKey) != 3*v040auth.AddrLen+1 { + panic("unexpected key length") + } + + valSrcAddr := indexKey[1 : v040auth.AddrLen+1] + delAddr := indexKey[v040auth.AddrLen+1 : 2*v040auth.AddrLen+1] + valDstAddr := indexKey[2*v040auth.AddrLen+1 : 3*v040auth.AddrLen+1] + + return GetREDKey(delAddr, valSrcAddr, valDstAddr) +} + +// GetREDKeyFromValDstIndexKey rearranges the ValDstIndexKey to get the REDKey +func GetREDKeyFromValDstIndexKey(indexKey []byte) []byte { + // note that first byte is prefix byte + if len(indexKey) != 3*v040auth.AddrLen+1 { + panic("unexpected key length") + } + + valDstAddr := indexKey[1 : v040auth.AddrLen+1] + delAddr := indexKey[v040auth.AddrLen+1 : 2*v040auth.AddrLen+1] + valSrcAddr := indexKey[2*v040auth.AddrLen+1 : 3*v040auth.AddrLen+1] + + return GetREDKey(delAddr, valSrcAddr, valDstAddr) +} + +// GetRedelegationTimeKey returns a key prefix for indexing an unbonding +// redelegation based on a completion time. +func GetRedelegationTimeKey(timestamp time.Time) []byte { + bz := sdk.FormatTimeBytes(timestamp) + return append(RedelegationQueueKey, bz...) +} + +// GetREDsKey returns a key prefix for indexing a redelegation from a delegator +// address. +func GetREDsKey(delAddr sdk.AccAddress) []byte { + return append(RedelegationKey, delAddr.Bytes()...) +} + +// GetREDsFromValSrcIndexKey returns a key prefix for indexing a redelegation to +// a source validator. +func GetREDsFromValSrcIndexKey(valSrcAddr sdk.ValAddress) []byte { + return append(RedelegationByValSrcIndexKey, valSrcAddr.Bytes()...) +} + +// GetREDsToValDstIndexKey returns a key prefix for indexing a redelegation to a +// destination (target) validator. +func GetREDsToValDstIndexKey(valDstAddr sdk.ValAddress) []byte { + return append(RedelegationByValDstIndexKey, valDstAddr.Bytes()...) +} + +// GetREDsByDelToValDstIndexKey returns a key prefix for indexing a redelegation +// from an address to a source validator. +func GetREDsByDelToValDstIndexKey(delAddr sdk.AccAddress, valDstAddr sdk.ValAddress) []byte { + return append(GetREDsToValDstIndexKey(valDstAddr), delAddr.Bytes()...) +} + +// GetHistoricalInfoKey returns a key prefix for indexing HistoricalInfo objects. +func GetHistoricalInfoKey(height int64) []byte { + return append(HistoricalInfoKey, []byte(strconv.FormatInt(height, 10))...) +} diff --git a/x/staking/legacy/v040/migrate.go b/x/staking/legacy/v040/migrate.go index a0d9b4c90..b0746fa36 100644 --- a/x/staking/legacy/v040/migrate.go +++ b/x/staking/legacy/v040/migrate.go @@ -6,18 +6,19 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" v034staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v034" v038staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v038" + v040staking "github.com/cosmos/cosmos-sdk/x/staking/types" ) -func migrateBondStatus(oldStatus v034staking.BondStatus) BondStatus { +func migrateBondStatus(oldStatus v034staking.BondStatus) v040staking.BondStatus { switch oldStatus { case v034staking.Unbonded: - return Unbonded + return v040staking.Unbonded case v034staking.Unbonding: - return Unbonding + return v040staking.Unbonding case v034staking.Bonded: - return Bonded + return v040staking.Bonded default: panic(fmt.Errorf("invalid bond status %d", oldStatus)) @@ -30,29 +31,29 @@ func migrateBondStatus(oldStatus v034staking.BondStatus) BondStatus { // - Convert addresses from bytes to bech32 strings. // - Update BondStatus staking constants. // - Re-encode in v0.40 GenesisState. -func Migrate(stakingState v038staking.GenesisState) *GenesisState { - newLastValidatorPowers := make([]LastValidatorPower, len(stakingState.LastValidatorPowers)) +func Migrate(stakingState v038staking.GenesisState) *v040staking.GenesisState { + newLastValidatorPowers := make([]v040staking.LastValidatorPower, len(stakingState.LastValidatorPowers)) for i, oldLastValidatorPower := range stakingState.LastValidatorPowers { - newLastValidatorPowers[i] = LastValidatorPower{ + newLastValidatorPowers[i] = v040staking.LastValidatorPower{ Address: oldLastValidatorPower.Address.String(), Power: oldLastValidatorPower.Power, } } - newValidators := make([]Validator, len(stakingState.Validators)) + newValidators := make([]v040staking.Validator, len(stakingState.Validators)) for i, oldValidator := range stakingState.Validators { pkAny, err := codectypes.NewAnyWithValue(oldValidator.ConsPubKey) if err != nil { panic(fmt.Sprintf("Can't pack validator consensus PK as Any: %s", err)) } - newValidators[i] = Validator{ + newValidators[i] = v040staking.Validator{ OperatorAddress: oldValidator.OperatorAddress.String(), ConsensusPubkey: pkAny, Jailed: oldValidator.Jailed, Status: migrateBondStatus(oldValidator.Status), Tokens: oldValidator.Tokens, DelegatorShares: oldValidator.DelegatorShares, - Description: Description{ + Description: v040staking.Description{ Moniker: oldValidator.Description.Moniker, Identity: oldValidator.Description.Identity, Website: oldValidator.Description.Website, @@ -61,8 +62,8 @@ func Migrate(stakingState v038staking.GenesisState) *GenesisState { }, UnbondingHeight: oldValidator.UnbondingHeight, UnbondingTime: oldValidator.UnbondingCompletionTime, - Commission: Commission{ - CommissionRates: CommissionRates{ + Commission: v040staking.Commission{ + CommissionRates: v040staking.CommissionRates{ Rate: oldValidator.Commission.Rate, MaxRate: oldValidator.Commission.MaxRate, MaxChangeRate: oldValidator.Commission.MaxChangeRate, @@ -73,20 +74,20 @@ func Migrate(stakingState v038staking.GenesisState) *GenesisState { } } - newDelegations := make([]Delegation, len(stakingState.Delegations)) + newDelegations := make([]v040staking.Delegation, len(stakingState.Delegations)) for i, oldDelegation := range stakingState.Delegations { - newDelegations[i] = Delegation{ + newDelegations[i] = v040staking.Delegation{ DelegatorAddress: oldDelegation.DelegatorAddress.String(), ValidatorAddress: oldDelegation.ValidatorAddress.String(), Shares: oldDelegation.Shares, } } - newUnbondingDelegations := make([]UnbondingDelegation, len(stakingState.UnbondingDelegations)) + newUnbondingDelegations := make([]v040staking.UnbondingDelegation, len(stakingState.UnbondingDelegations)) for i, oldUnbondingDelegation := range stakingState.UnbondingDelegations { - newEntries := make([]UnbondingDelegationEntry, len(oldUnbondingDelegation.Entries)) + newEntries := make([]v040staking.UnbondingDelegationEntry, len(oldUnbondingDelegation.Entries)) for j, oldEntry := range oldUnbondingDelegation.Entries { - newEntries[j] = UnbondingDelegationEntry{ + newEntries[j] = v040staking.UnbondingDelegationEntry{ CreationHeight: oldEntry.CreationHeight, CompletionTime: oldEntry.CompletionTime, InitialBalance: oldEntry.InitialBalance, @@ -94,18 +95,18 @@ func Migrate(stakingState v038staking.GenesisState) *GenesisState { } } - newUnbondingDelegations[i] = UnbondingDelegation{ + newUnbondingDelegations[i] = v040staking.UnbondingDelegation{ DelegatorAddress: oldUnbondingDelegation.DelegatorAddress.String(), ValidatorAddress: oldUnbondingDelegation.ValidatorAddress.String(), Entries: newEntries, } } - newRedelegations := make([]Redelegation, len(stakingState.Redelegations)) + newRedelegations := make([]v040staking.Redelegation, len(stakingState.Redelegations)) for i, oldRedelegation := range stakingState.Redelegations { - newEntries := make([]RedelegationEntry, len(oldRedelegation.Entries)) + newEntries := make([]v040staking.RedelegationEntry, len(oldRedelegation.Entries)) for j, oldEntry := range oldRedelegation.Entries { - newEntries[j] = RedelegationEntry{ + newEntries[j] = v040staking.RedelegationEntry{ CreationHeight: oldEntry.CreationHeight, CompletionTime: oldEntry.CompletionTime, InitialBalance: oldEntry.InitialBalance, @@ -113,7 +114,7 @@ func Migrate(stakingState v038staking.GenesisState) *GenesisState { } } - newRedelegations[i] = Redelegation{ + newRedelegations[i] = v040staking.Redelegation{ DelegatorAddress: oldRedelegation.DelegatorAddress.String(), ValidatorSrcAddress: oldRedelegation.ValidatorSrcAddress.String(), ValidatorDstAddress: oldRedelegation.ValidatorDstAddress.String(), @@ -121,8 +122,8 @@ func Migrate(stakingState v038staking.GenesisState) *GenesisState { } } - return &GenesisState{ - Params: Params{ + return &v040staking.GenesisState{ + Params: v040staking.Params{ UnbondingTime: stakingState.Params.UnbondingTime, MaxValidators: uint32(stakingState.Params.MaxValidators), MaxEntries: uint32(stakingState.Params.MaxEntries), diff --git a/x/staking/legacy/v040/params.go b/x/staking/legacy/v040/params.go deleted file mode 100644 index 32ad0c72e..000000000 --- a/x/staking/legacy/v040/params.go +++ /dev/null @@ -1,11 +0,0 @@ -package v040 - -import ( - yaml "gopkg.in/yaml.v2" -) - -// String returns a human readable string representation of the parameters. -func (p Params) String() string { - out, _ := yaml.Marshal(p) - return string(out) -} diff --git a/x/staking/legacy/v040/staking.pb.go b/x/staking/legacy/v040/staking.pb.go deleted file mode 100644 index 0146313d6..000000000 --- a/x/staking/legacy/v040/staking.pb.go +++ /dev/null @@ -1,3121 +0,0 @@ -package v040 - -import ( - fmt "fmt" - io "io" - math_bits "math/bits" - time "time" - - types1 "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" -) - -// BondStatus is the status of a validator. -type BondStatus int32 - -const ( - // UNSPECIFIED defines an invalid validator status. - Unspecified BondStatus = 0 - // UNBONDED defines a validator that is not bonded. - Unbonded BondStatus = 1 - // UNBONDING defines a validator that is unbonding. - Unbonding BondStatus = 2 - // BONDED defines a validator that is bonded. - Bonded BondStatus = 3 -) - -var BondStatusName = map[int32]string{ - 0: "BOND_STATUS_UNSPECIFIED", - 1: "BOND_STATUS_UNBONDED", - 2: "BOND_STATUS_UNBONDING", - 3: "BOND_STATUS_BONDED", -} - -func (x BondStatus) String() string { - return proto.EnumName(BondStatusName, int32(x)) -} - -// CommissionRates defines the initial commission rates to be used for creating -// a validator. -type CommissionRates struct { - Rate sdk.Dec `protobuf:"bytes,1,opt,name=rate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"rate"` - MaxRate sdk.Dec `protobuf:"bytes,2,opt,name=max_rate,json=maxRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_rate" yaml:"max_rate"` - MaxChangeRate sdk.Dec `protobuf:"bytes,3,opt,name=max_change_rate,json=maxChangeRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_change_rate" yaml:"max_change_rate"` -} - -func (m *CommissionRates) Reset() { *m = CommissionRates{} } -func (*CommissionRates) ProtoMessage() {} - -// Commission defines commission parameters for a given validator. -type Commission struct { - CommissionRates `protobuf:"bytes,1,opt,name=commission_rates,json=commissionRates,proto3,embedded=commission_rates" json:"commission_rates"` - UpdateTime time.Time `protobuf:"bytes,2,opt,name=update_time,json=updateTime,proto3,stdtime" json:"update_time" yaml:"update_time"` -} - -func (m *Commission) Reset() { *m = Commission{} } -func (*Commission) ProtoMessage() {} - -// Description defines a validator description. -type Description struct { - Moniker string `protobuf:"bytes,1,opt,name=moniker,proto3" json:"moniker,omitempty"` - Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` - Website string `protobuf:"bytes,3,opt,name=website,proto3" json:"website,omitempty"` - SecurityContact string `protobuf:"bytes,4,opt,name=security_contact,json=securityContact,proto3" json:"security_contact,omitempty" yaml:"security_contact"` - Details string `protobuf:"bytes,5,opt,name=details,proto3" json:"details,omitempty"` -} - -func (m *Description) Reset() { *m = Description{} } -func (*Description) ProtoMessage() {} - -// Validator defines a validator, together with the total amount of the -// Validator's bond shares and their exchange rate to coins. Slashing results in -// a decrease in the exchange rate, allowing correct calculation of future -// undelegations without iterating over delegators. When coins are delegated to -// this validator, the validator is credited with a delegation whose number of -// bond shares is based on the amount of coins delegated divided by the current -// exchange rate. Voting power can be calculated as total bonded shares -// multiplied by exchange rate. -type Validator struct { - OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty" yaml:"operator_address"` - ConsensusPubkey *types1.Any `protobuf:"bytes,2,opt,name=consensus_pubkey,json=consensusPubkey,proto3" json:"consensus_pubkey,omitempty" yaml:"consensus_pubkey"` - Jailed bool `protobuf:"varint,3,opt,name=jailed,proto3" json:"jailed,omitempty"` - Status BondStatus `protobuf:"varint,4,opt,name=status,proto3,enum=cosmos.staking.v1beta1.BondStatus" json:"status,omitempty"` - Tokens sdk.Int `protobuf:"bytes,5,opt,name=tokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"tokens"` - DelegatorShares sdk.Dec `protobuf:"bytes,6,opt,name=delegator_shares,json=delegatorShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"delegator_shares" yaml:"delegator_shares"` - Description Description `protobuf:"bytes,7,opt,name=description,proto3" json:"description"` - UnbondingHeight int64 `protobuf:"varint,8,opt,name=unbonding_height,json=unbondingHeight,proto3" json:"unbonding_height,omitempty" yaml:"unbonding_height"` - UnbondingTime time.Time `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3,stdtime" json:"unbonding_time" yaml:"unbonding_time"` - Commission Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission"` - MinSelfDelegation sdk.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation" yaml:"min_self_delegation"` -} - -func (m *Validator) Reset() { *m = Validator{} } -func (*Validator) ProtoMessage() {} - -// Delegation represents the bond with tokens held by an account. It is -// owned by one delegator, and is associated with the voting power of one -// validator. -type Delegation struct { - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` - Shares sdk.Dec `protobuf:"bytes,3,opt,name=shares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares"` -} - -func (m *Delegation) Reset() { *m = Delegation{} } -func (*Delegation) ProtoMessage() {} - -// UnbondingDelegation stores all of a single delegator's unbonding bonds -// for a single validator in an time-ordered list. -type UnbondingDelegation struct { - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"` - Entries []UnbondingDelegationEntry `protobuf:"bytes,3,rep,name=entries,proto3" json:"entries"` -} - -func (m *UnbondingDelegation) Reset() { *m = UnbondingDelegation{} } -func (*UnbondingDelegation) ProtoMessage() {} - -// UnbondingDelegationEntry defines an unbonding object with relevant metadata. -type UnbondingDelegationEntry struct { - CreationHeight int64 `protobuf:"varint,1,opt,name=creation_height,json=creationHeight,proto3" json:"creation_height,omitempty" yaml:"creation_height"` - CompletionTime time.Time `protobuf:"bytes,2,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time" yaml:"completion_time"` - InitialBalance sdk.Int `protobuf:"bytes,3,opt,name=initial_balance,json=initialBalance,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"initial_balance" yaml:"initial_balance"` - Balance sdk.Int `protobuf:"bytes,4,opt,name=balance,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"balance"` -} - -func (m *UnbondingDelegationEntry) Reset() { *m = UnbondingDelegationEntry{} } -func (*UnbondingDelegationEntry) ProtoMessage() {} - -// RedelegationEntry defines a redelegation object with relevant metadata. -type RedelegationEntry struct { - CreationHeight int64 `protobuf:"varint,1,opt,name=creation_height,json=creationHeight,proto3" json:"creation_height,omitempty" yaml:"creation_height"` - CompletionTime time.Time `protobuf:"bytes,2,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time" yaml:"completion_time"` - InitialBalance sdk.Int `protobuf:"bytes,3,opt,name=initial_balance,json=initialBalance,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"initial_balance" yaml:"initial_balance"` - SharesDst sdk.Dec `protobuf:"bytes,4,opt,name=shares_dst,json=sharesDst,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares_dst"` -} - -func (m *RedelegationEntry) Reset() { *m = RedelegationEntry{} } -func (*RedelegationEntry) ProtoMessage() {} - -// Redelegation contains the list of a particular delegator's redelegating bonds -// from a particular source validator to a particular destination validator. -type Redelegation struct { - DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` - ValidatorSrcAddress string `protobuf:"bytes,2,opt,name=validator_src_address,json=validatorSrcAddress,proto3" json:"validator_src_address,omitempty" yaml:"validator_src_address"` - ValidatorDstAddress string `protobuf:"bytes,3,opt,name=validator_dst_address,json=validatorDstAddress,proto3" json:"validator_dst_address,omitempty" yaml:"validator_dst_address"` - Entries []RedelegationEntry `protobuf:"bytes,4,rep,name=entries,proto3" json:"entries"` -} - -func (m *Redelegation) Reset() { *m = Redelegation{} } -func (*Redelegation) ProtoMessage() {} - -// Params defines the parameters for the staking module. -type Params struct { - UnbondingTime time.Duration `protobuf:"bytes,1,opt,name=unbonding_time,json=unbondingTime,proto3,stdduration" json:"unbonding_time" yaml:"unbonding_time"` - MaxValidators uint32 `protobuf:"varint,2,opt,name=max_validators,json=maxValidators,proto3" json:"max_validators,omitempty" yaml:"max_validators"` - MaxEntries uint32 `protobuf:"varint,3,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty" yaml:"max_entries"` - HistoricalEntries uint32 `protobuf:"varint,4,opt,name=historical_entries,json=historicalEntries,proto3" json:"historical_entries,omitempty" yaml:"historical_entries"` - BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty" yaml:"bond_denom"` -} - -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} - -// DelegationResponse is equivalent to Delegation except that it contains a -// balance in addition to shares which is more suitable for client responses. -type DelegationResponse struct { - Delegation Delegation `protobuf:"bytes,1,opt,name=delegation,proto3" json:"delegation"` - Balance sdk.Coin `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance"` -} - -// Pool is used for tracking bonded and not-bonded token supply of the bond -// denomination. -type Pool struct { - NotBondedTokens sdk.Int `protobuf:"bytes,1,opt,name=not_bonded_tokens,json=notBondedTokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"not_bonded_tokens"` - BondedTokens sdk.Int `protobuf:"bytes,2,opt,name=bonded_tokens,json=bondedTokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"bonded_tokens" yaml:"bonded_tokens"` -} - -func (m *Pool) Reset() { *m = Pool{} } -func (m *Pool) String() string { return proto.CompactTextString(m) } -func (*Pool) ProtoMessage() {} - -func (m *CommissionRates) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CommissionRates) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *CommissionRates) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.MaxChangeRate.Size() - i -= size - if _, err := m.MaxChangeRate.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size := m.MaxRate.Size() - i -= size - if _, err := m.MaxRate.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.Rate.Size() - i -= size - if _, err := m.Rate.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Commission) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Commission) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Commission) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime):]) - if err2 != nil { - return 0, err2 - } - i -= n2 - i = encodeVarintStaking(dAtA, i, uint64(n2)) - i-- - dAtA[i] = 0x12 - { - size, err := m.CommissionRates.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Description) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Description) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Description) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Details) > 0 { - i -= len(m.Details) - copy(dAtA[i:], m.Details) - i = encodeVarintStaking(dAtA, i, uint64(len(m.Details))) - i-- - dAtA[i] = 0x2a - } - if len(m.SecurityContact) > 0 { - i -= len(m.SecurityContact) - copy(dAtA[i:], m.SecurityContact) - i = encodeVarintStaking(dAtA, i, uint64(len(m.SecurityContact))) - i-- - dAtA[i] = 0x22 - } - if len(m.Website) > 0 { - i -= len(m.Website) - copy(dAtA[i:], m.Website) - i = encodeVarintStaking(dAtA, i, uint64(len(m.Website))) - i-- - dAtA[i] = 0x1a - } - if len(m.Identity) > 0 { - i -= len(m.Identity) - copy(dAtA[i:], m.Identity) - i = encodeVarintStaking(dAtA, i, uint64(len(m.Identity))) - i-- - dAtA[i] = 0x12 - } - if len(m.Moniker) > 0 { - i -= len(m.Moniker) - copy(dAtA[i:], m.Moniker) - i = encodeVarintStaking(dAtA, i, uint64(len(m.Moniker))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Validator) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Validator) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.MinSelfDelegation.Size() - i -= size - if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - { - size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime):]) - if err5 != nil { - return 0, err5 - } - i -= n5 - i = encodeVarintStaking(dAtA, i, uint64(n5)) - i-- - dAtA[i] = 0x4a - if m.UnbondingHeight != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.UnbondingHeight)) - i-- - dAtA[i] = 0x40 - } - { - size, err := m.Description.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - { - size := m.DelegatorShares.Size() - i -= size - if _, err := m.DelegatorShares.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - { - size := m.Tokens.Size() - i -= size - if _, err := m.Tokens.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.Status != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.Status)) - i-- - dAtA[i] = 0x20 - } - if m.Jailed { - i-- - if m.Jailed { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if m.ConsensusPubkey != nil { - { - size, err := m.ConsensusPubkey.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.OperatorAddress) > 0 { - i -= len(m.OperatorAddress) - copy(dAtA[i:], m.OperatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.OperatorAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Delegation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Delegation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Delegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.Shares.Size() - i -= size - if _, err := m.Shares.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UnbondingDelegation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UnbondingDelegation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UnbondingDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Entries) > 0 { - for iNdEx := len(m.Entries) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Entries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if len(m.ValidatorAddress) > 0 { - i -= len(m.ValidatorAddress) - copy(dAtA[i:], m.ValidatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *UnbondingDelegationEntry) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UnbondingDelegationEntry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UnbondingDelegationEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.Balance.Size() - i -= size - if _, err := m.Balance.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size := m.InitialBalance.Size() - i -= size - if _, err := m.InitialBalance.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) - if err8 != nil { - return 0, err8 - } - i -= n8 - i = encodeVarintStaking(dAtA, i, uint64(n8)) - i-- - dAtA[i] = 0x12 - if m.CreationHeight != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.CreationHeight)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *RedelegationEntry) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RedelegationEntry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RedelegationEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.SharesDst.Size() - i -= size - if _, err := m.SharesDst.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size := m.InitialBalance.Size() - i -= size - if _, err := m.InitialBalance.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) - if err9 != nil { - return 0, err9 - } - i -= n9 - i = encodeVarintStaking(dAtA, i, uint64(n9)) - i-- - dAtA[i] = 0x12 - if m.CreationHeight != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.CreationHeight)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *Redelegation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Redelegation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Redelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Entries) > 0 { - for iNdEx := len(m.Entries) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Entries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.ValidatorDstAddress) > 0 { - i -= len(m.ValidatorDstAddress) - copy(dAtA[i:], m.ValidatorDstAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorDstAddress))) - i-- - dAtA[i] = 0x1a - } - if len(m.ValidatorSrcAddress) > 0 { - i -= len(m.ValidatorSrcAddress) - copy(dAtA[i:], m.ValidatorSrcAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.ValidatorSrcAddress))) - i-- - dAtA[i] = 0x12 - } - if len(m.DelegatorAddress) > 0 { - i -= len(m.DelegatorAddress) - copy(dAtA[i:], m.DelegatorAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.DelegatorAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Params) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - dAtA[i] = 0x32 - if len(m.BondDenom) > 0 { - i -= len(m.BondDenom) - copy(dAtA[i:], m.BondDenom) - i = encodeVarintStaking(dAtA, i, uint64(len(m.BondDenom))) - i-- - dAtA[i] = 0x2a - } - if m.HistoricalEntries != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.HistoricalEntries)) - i-- - dAtA[i] = 0x20 - } - if m.MaxEntries != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.MaxEntries)) - i-- - dAtA[i] = 0x18 - } - if m.MaxValidators != 0 { - i = encodeVarintStaking(dAtA, i, uint64(m.MaxValidators)) - i-- - dAtA[i] = 0x10 - } - n10, err10 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) - if err10 != nil { - return 0, err10 - } - i -= n10 - i = encodeVarintStaking(dAtA, i, uint64(n10)) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Pool) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Pool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Pool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.BondedTokens.Size() - i -= size - if _, err := m.BondedTokens.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.NotBondedTokens.Size() - i -= size - if _, err := m.NotBondedTokens.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintStaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintStaking(dAtA []byte, offset int, v uint64) int { - offset -= sovStaking(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} - -func (m *CommissionRates) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Rate.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.MaxRate.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.MaxChangeRate.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *Commission) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.CommissionRates.Size() - n += 1 + l + sovStaking(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime) - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *Description) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Moniker) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.Identity) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.Website) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.SecurityContact) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.Details) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - return n -} - -func (m *Validator) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.OperatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - if m.ConsensusPubkey != nil { - l = m.ConsensusPubkey.Size() - n += 1 + l + sovStaking(uint64(l)) - } - if m.Jailed { - n += 2 - } - if m.Status != 0 { - n += 1 + sovStaking(uint64(m.Status)) - } - l = m.Tokens.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.DelegatorShares.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.Description.Size() - n += 1 + l + sovStaking(uint64(l)) - if m.UnbondingHeight != 0 { - n += 1 + sovStaking(uint64(m.UnbondingHeight)) - } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime) - n += 1 + l + sovStaking(uint64(l)) - l = m.Commission.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.MinSelfDelegation.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *Delegation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = m.Shares.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *UnbondingDelegation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.ValidatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - if len(m.Entries) > 0 { - for _, e := range m.Entries { - l = e.Size() - n += 1 + l + sovStaking(uint64(l)) - } - } - return n -} - -func (m *UnbondingDelegationEntry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CreationHeight != 0 { - n += 1 + sovStaking(uint64(m.CreationHeight)) - } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime) - n += 1 + l + sovStaking(uint64(l)) - l = m.InitialBalance.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.Balance.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *RedelegationEntry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CreationHeight != 0 { - n += 1 + sovStaking(uint64(m.CreationHeight)) - } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime) - n += 1 + l + sovStaking(uint64(l)) - l = m.InitialBalance.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.SharesDst.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *Redelegation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DelegatorAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.ValidatorSrcAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - l = len(m.ValidatorDstAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - if len(m.Entries) > 0 { - for _, e := range m.Entries { - l = e.Size() - n += 1 + l + sovStaking(uint64(l)) - } - } - return n -} - -func (m *Params) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime) - n += 1 + l + sovStaking(uint64(l)) - if m.MaxValidators != 0 { - n += 1 + sovStaking(uint64(m.MaxValidators)) - } - if m.MaxEntries != 0 { - n += 1 + sovStaking(uint64(m.MaxEntries)) - } - if m.HistoricalEntries != 0 { - n += 1 + sovStaking(uint64(m.HistoricalEntries)) - } - l = len(m.BondDenom) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func (m *Pool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.NotBondedTokens.Size() - n += 1 + l + sovStaking(uint64(l)) - l = m.BondedTokens.Size() - n += 1 + l + sovStaking(uint64(l)) - return n -} - -func sovStaking(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} - -func (m *CommissionRates) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CommissionRates: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CommissionRates: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rate", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Rate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRate", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.MaxRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxChangeRate", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.MaxChangeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Commission) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Commission: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Commission: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommissionRates", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.CommissionRates.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpdateTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UpdateTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Description) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Description: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Description: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Moniker", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Moniker = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Identity = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Website", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Website = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecurityContact", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecurityContact = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Details = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Validator) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Validator: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.OperatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusPubkey", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConsensusPubkey == nil { - m.ConsensusPubkey = &types1.Any{} - } - if err := m.ConsensusPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Jailed", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Jailed = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - m.Status = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Status |= BondStatus(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Tokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorShares", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.DelegatorShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingHeight", wireType) - } - m.UnbondingHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.UnbondingHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} - -func (m *Delegation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Delegation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Delegation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Shares", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Shares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UnbondingDelegation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UnbondingDelegation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UnbondingDelegation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Entries = append(m.Entries, UnbondingDelegationEntry{}) - if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UnbondingDelegationEntry) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UnbondingDelegationEntry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UnbondingDelegationEntry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreationHeight", wireType) - } - m.CreationHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CreationHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialBalance", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.InitialBalance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Balance", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Balance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RedelegationEntry) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RedelegationEntry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RedelegationEntry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreationHeight", wireType) - } - m.CreationHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CreationHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialBalance", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.InitialBalance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SharesDst", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SharesDst.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Redelegation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Redelegation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Redelegation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSrcAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ValidatorSrcAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidatorDstAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ValidatorDstAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Entries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Entries = append(m.Entries, RedelegationEntry{}) - if err := m.Entries[len(m.Entries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Params) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.UnbondingTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxValidators", wireType) - } - m.MaxValidators = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxValidators |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxEntries", wireType) - } - m.MaxEntries = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MaxEntries |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HistoricalEntries", wireType) - } - m.HistoricalEntries = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HistoricalEntries |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BondDenom", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.BondDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Pool) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Pool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Pool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NotBondedTokens", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.NotBondedTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BondedTokens", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.BondedTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipStaking(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStaking - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipStaking(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStaking - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStaking - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStaking - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthStaking - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupStaking - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthStaking - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthStaking = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowStaking = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupStaking = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/staking/legacy/v040/validator.go b/x/staking/legacy/v040/validator.go deleted file mode 100644 index 9b4d569e8..000000000 --- a/x/staking/legacy/v040/validator.go +++ /dev/null @@ -1,43 +0,0 @@ -package v040 - -import ( - "strings" - - "gopkg.in/yaml.v2" -) - -var ( - BondStatusUnspecified = BondStatusName[int32(Unspecified)] - BondStatusUnbonded = BondStatusName[int32(Unbonded)] - BondStatusUnbonding = BondStatusName[int32(Unbonding)] - BondStatusBonded = BondStatusName[int32(Bonded)] -) - -// String implements the Stringer interface for a Validator object. -func (v Validator) String() string { - out, _ := yaml.Marshal(v) - return string(out) -} - -// Validators is a collection of Validator -type Validators []Validator - -func (v Validators) String() (out string) { - for _, val := range v { - out += val.String() + "\n" - } - - return strings.TrimSpace(out) -} - -// ValidatorsByVotingPower implements sort.Interface for []Validator based on -// the VotingPower and Address fields. -// The validators are sorted first by their voting power (descending). Secondary index - Address (ascending). -// Copied from tendermint/types/validator_set.go -type ValidatorsByVotingPower []Validator - -// String implements the Stringer interface for a Description object. -func (d Description) String() string { - out, _ := yaml.Marshal(d) - return string(out) -} diff --git a/x/staking/legacy/v042/migrate.go b/x/staking/legacy/v042/migrate.go deleted file mode 100644 index 8e3a0eacc..000000000 --- a/x/staking/legacy/v042/migrate.go +++ /dev/null @@ -1,117 +0,0 @@ -package v042 - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - v040staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v040" - v042staking "github.com/cosmos/cosmos-sdk/x/staking/types" -) - -// Migrate accepts exported v0.40 x/staking genesis state and migrates it to -// v0.42 x/staking genesis state. The migration includes: -// -// - Adding power reduction on-chain param -func Migrate(stakingState v040staking.GenesisState) *v042staking.GenesisState { - newLastValidatorPowers := make([]v042staking.LastValidatorPower, len(stakingState.LastValidatorPowers)) - for i, oldLastValidatorPower := range stakingState.LastValidatorPowers { - newLastValidatorPowers[i] = v042staking.LastValidatorPower{ - Address: oldLastValidatorPower.Address, - Power: oldLastValidatorPower.Power, - } - } - - newValidators := make([]v042staking.Validator, len(stakingState.Validators)) - for i, oldValidator := range stakingState.Validators { - newValidators[i] = v042staking.Validator{ - OperatorAddress: oldValidator.OperatorAddress, - ConsensusPubkey: oldValidator.ConsensusPubkey, - Jailed: oldValidator.Jailed, - Status: v042staking.BondStatus(oldValidator.Status), - Tokens: oldValidator.Tokens, - DelegatorShares: oldValidator.DelegatorShares, - Description: v042staking.Description{ - Moniker: oldValidator.Description.Moniker, - Identity: oldValidator.Description.Identity, - Website: oldValidator.Description.Website, - SecurityContact: oldValidator.Description.SecurityContact, - Details: oldValidator.Description.Details, - }, - UnbondingHeight: oldValidator.UnbondingHeight, - UnbondingTime: oldValidator.UnbondingTime, - Commission: v042staking.Commission{ - CommissionRates: v042staking.CommissionRates{ - Rate: oldValidator.Commission.Rate, - MaxRate: oldValidator.Commission.MaxRate, - MaxChangeRate: oldValidator.Commission.MaxChangeRate, - }, - UpdateTime: oldValidator.Commission.UpdateTime, - }, - MinSelfDelegation: oldValidator.MinSelfDelegation, - } - } - - newDelegations := make([]v042staking.Delegation, len(stakingState.Delegations)) - for i, oldDelegation := range stakingState.Delegations { - newDelegations[i] = v042staking.Delegation{ - DelegatorAddress: oldDelegation.DelegatorAddress, - ValidatorAddress: oldDelegation.ValidatorAddress, - Shares: oldDelegation.Shares, - } - } - - newUnbondingDelegations := make([]v042staking.UnbondingDelegation, len(stakingState.UnbondingDelegations)) - for i, oldUnbondingDelegation := range stakingState.UnbondingDelegations { - newEntries := make([]v042staking.UnbondingDelegationEntry, len(oldUnbondingDelegation.Entries)) - for j, oldEntry := range oldUnbondingDelegation.Entries { - newEntries[j] = v042staking.UnbondingDelegationEntry{ - CreationHeight: oldEntry.CreationHeight, - CompletionTime: oldEntry.CompletionTime, - InitialBalance: oldEntry.InitialBalance, - Balance: oldEntry.Balance, - } - } - - newUnbondingDelegations[i] = v042staking.UnbondingDelegation{ - DelegatorAddress: oldUnbondingDelegation.DelegatorAddress, - ValidatorAddress: oldUnbondingDelegation.ValidatorAddress, - Entries: newEntries, - } - } - - newRedelegations := make([]v042staking.Redelegation, len(stakingState.Redelegations)) - for i, oldRedelegation := range stakingState.Redelegations { - newEntries := make([]v042staking.RedelegationEntry, len(oldRedelegation.Entries)) - for j, oldEntry := range oldRedelegation.Entries { - newEntries[j] = v042staking.RedelegationEntry{ - CreationHeight: oldEntry.CreationHeight, - CompletionTime: oldEntry.CompletionTime, - InitialBalance: oldEntry.InitialBalance, - SharesDst: oldEntry.SharesDst, - } - } - - newRedelegations[i] = v042staking.Redelegation{ - DelegatorAddress: oldRedelegation.DelegatorAddress, - ValidatorSrcAddress: oldRedelegation.ValidatorSrcAddress, - ValidatorDstAddress: oldRedelegation.ValidatorDstAddress, - Entries: newEntries, - } - } - - return &v042staking.GenesisState{ - Params: v042staking.Params{ - UnbondingTime: stakingState.Params.UnbondingTime, - MaxValidators: stakingState.Params.MaxValidators, - MaxEntries: stakingState.Params.MaxEntries, - HistoricalEntries: stakingState.Params.HistoricalEntries, - BondDenom: stakingState.Params.BondDenom, - PowerReduction: sdk.DefaultPowerReduction, - }, - LastTotalPower: stakingState.LastTotalPower, - LastValidatorPowers: newLastValidatorPowers, - Validators: newValidators, - Delegations: newDelegations, - UnbondingDelegations: newUnbondingDelegations, - Redelegations: newRedelegations, - Exported: stakingState.Exported, - } -} diff --git a/x/staking/legacy/v042/migrate_test.go b/x/staking/legacy/v042/migrate_test.go deleted file mode 100644 index 8bd00fd4d..000000000 --- a/x/staking/legacy/v042/migrate_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package v042_test - -import ( - "encoding/json" - "fmt" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/cosmos/cosmos-sdk/client" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" - "github.com/cosmos/cosmos-sdk/simapp" - v040staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v040" - v042staking "github.com/cosmos/cosmos-sdk/x/staking/legacy/v042" -) - -func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeTestEncodingConfig() - clientCtx := client.Context{}. - WithInterfaceRegistry(encodingConfig.InterfaceRegistry). - WithTxConfig(encodingConfig.TxConfig). - WithLegacyAmino(encodingConfig.Amino). - WithJSONMarshaler(encodingConfig.Marshaler) - - consPubKey := ed25519.GenPrivKeyFromSecret([]byte("val0")).PubKey() - pkAny, err := codectypes.NewAnyWithValue(consPubKey) - if err != nil { - panic(fmt.Sprintf("Can't pack validator consensus PK as Any: %s", err)) - } - stakingGenState := v040staking.GenesisState{ - Validators: v040staking.Validators{v040staking.Validator{ - ConsensusPubkey: pkAny, - Status: v040staking.Unbonded, - }}, - } - - migrated := v042staking.Migrate(stakingGenState) - bz, err := clientCtx.JSONMarshaler.MarshalJSON(migrated) - require.NoError(t, err) - - // Indent the JSON bz correctly. - var jsonObj map[string]interface{} - err = json.Unmarshal(bz, &jsonObj) - require.NoError(t, err) - indentedBz, err := json.MarshalIndent(jsonObj, "", " ") - require.NoError(t, err) - - // Make sure about: - // - consensus_pubkey: should be an any - // - validator's status should be 1 (new unbonded) - expected := `{ - "delegations": [], - "exported": false, - "last_total_power": "0", - "last_validator_powers": [], - "params": { - "bond_denom": "", - "historical_entries": 0, - "max_entries": 0, - "max_validators": 0, - "power_reduction": "1000000", - "unbonding_time": "0s" - }, - "redelegations": [], - "unbonding_delegations": [], - "validators": [ - { - "commission": { - "commission_rates": { - "max_change_rate": "0", - "max_rate": "0", - "rate": "0" - }, - "update_time": "0001-01-01T00:00:00Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "KTeVrjP7NJIufvgMJsQRxZjfFyD+Exda6O7x+oxIvmA=" - }, - "delegator_shares": "0", - "description": { - "details": "", - "identity": "", - "moniker": "", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "0", - "operator_address": "", - "status": "BOND_STATUS_UNBONDED", - "tokens": "0", - "unbonding_height": "0", - "unbonding_time": "0001-01-01T00:00:00Z" - } - ] -}` - - require.Equal(t, expected, string(indentedBz)) -} diff --git a/x/staking/legacy/v042/types.go b/x/staking/legacy/v042/types.go deleted file mode 100644 index 0a7df2a32..000000000 --- a/x/staking/legacy/v042/types.go +++ /dev/null @@ -1,5 +0,0 @@ -package v042 - -const ( - ModuleName = "staking" -) diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 387dadf2e..f8d7bf9da 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1263,1226 +1263,623 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ -<<<<<<< HEAD - // 9630 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x5c, 0xd7, - 0x75, 0x18, 0xdf, 0xee, 0x02, 0xd8, 0x3d, 0x58, 0x00, 0x8b, 0x0b, 0x90, 0x5c, 0xae, 0x28, 0x00, - 0x7a, 0xfa, 0xa2, 0x28, 0x09, 0x94, 0x28, 0x91, 0x92, 0x96, 0xb6, 0x64, 0x2c, 0xb0, 0x04, 0x21, - 0xe2, 0x4b, 0x0f, 0x00, 0x25, 0x7f, 0xa4, 0x3b, 0x0f, 0x6f, 0x2f, 0x16, 0x4f, 0xd8, 0x7d, 0xef, - 0xe9, 0xbd, 0xb7, 0x24, 0x21, 0xdb, 0x33, 0x8a, 0xed, 0xba, 0x36, 0xd3, 0xd4, 0x76, 0x9d, 0x49, - 0x6d, 0xc5, 0x74, 0xed, 0x38, 0xad, 0x53, 0xc7, 0x6d, 0x3e, 0xec, 0xba, 0x4d, 0xdb, 0x99, 0xda, - 0x6d, 0xd3, 0xd8, 0xee, 0x34, 0x63, 0x4f, 0x33, 0x6d, 0x9a, 0x69, 0x99, 0x54, 0xf6, 0xb8, 0x8a, - 0xeb, 0x36, 0x0e, 0xeb, 0x4c, 0xd3, 0xf1, 0x74, 0xda, 0xb9, 0x5f, 0xef, 0x6b, 0x3f, 0xde, 0x2e, - 0x4c, 0x5a, 0x4e, 0x93, 0x5f, 0xd8, 0x7b, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0x9c, - 0xfb, 0xf5, 0x00, 0xff, 0xf2, 0x1c, 0xcc, 0xd4, 0x4c, 0xb3, 0x56, 0xc7, 0xa7, 0x2c, 0xdb, 0x74, - 0xcd, 0xed, 0xe6, 0xce, 0xa9, 0x2a, 0x76, 0x34, 0x5b, 0xb7, 0x5c, 0xd3, 0x9e, 0xa5, 0x30, 0x34, - 0xc6, 0x30, 0x66, 0x05, 0x86, 0xbc, 0x02, 0xe3, 0xe7, 0xf5, 0x3a, 0x5e, 0xf0, 0x10, 0x37, 0xb0, - 0x8b, 0x9e, 0x84, 0xd4, 0x8e, 0x5e, 0xc7, 0x79, 0x69, 0x26, 0x79, 0x62, 0xf8, 0xf4, 0x3d, 0xb3, - 0x11, 0xa2, 0xd9, 0x30, 0xc5, 0x3a, 0x01, 0x2b, 0x94, 0x42, 0xfe, 0x76, 0x0a, 0x26, 0xda, 0xd4, - 0x22, 0x04, 0x29, 0x43, 0x6d, 0x10, 0x8e, 0xd2, 0x89, 0x8c, 0x42, 0x7f, 0xa3, 0x3c, 0x0c, 0x59, - 0xaa, 0xb6, 0xa7, 0xd6, 0x70, 0x3e, 0x41, 0xc1, 0xa2, 0x88, 0xa6, 0x00, 0xaa, 0xd8, 0xc2, 0x46, - 0x15, 0x1b, 0xda, 0x7e, 0x3e, 0x39, 0x93, 0x3c, 0x91, 0x51, 0x02, 0x10, 0xf4, 0x20, 0x8c, 0x5b, - 0xcd, 0xed, 0xba, 0xae, 0x55, 0x02, 0x68, 0x30, 0x93, 0x3c, 0x31, 0xa0, 0xe4, 0x58, 0xc5, 0x82, - 0x8f, 0x7c, 0x3f, 0x8c, 0x5d, 0xc1, 0xea, 0x5e, 0x10, 0x75, 0x98, 0xa2, 0x8e, 0x12, 0x70, 0x00, - 0x71, 0x1e, 0xb2, 0x0d, 0xec, 0x38, 0x6a, 0x0d, 0x57, 0xdc, 0x7d, 0x0b, 0xe7, 0x53, 0xb4, 0xf7, - 0x33, 0x2d, 0xbd, 0x8f, 0xf6, 0x7c, 0x98, 0x53, 0x6d, 0xee, 0x5b, 0x18, 0xcd, 0x41, 0x06, 0x1b, - 0xcd, 0x06, 0xe3, 0x30, 0xd0, 0x41, 0x7f, 0x65, 0xa3, 0xd9, 0x88, 0x72, 0x49, 0x13, 0x32, 0xce, - 0x62, 0xc8, 0xc1, 0xf6, 0x65, 0x5d, 0xc3, 0xf9, 0x41, 0xca, 0xe0, 0xfe, 0x16, 0x06, 0x1b, 0xac, - 0x3e, 0xca, 0x43, 0xd0, 0xa1, 0x79, 0xc8, 0xe0, 0xab, 0x2e, 0x36, 0x1c, 0xdd, 0x34, 0xf2, 0x43, - 0x94, 0xc9, 0xbd, 0x6d, 0x46, 0x11, 0xd7, 0xab, 0x51, 0x16, 0x3e, 0x1d, 0x3a, 0x0b, 0x43, 0xa6, - 0xe5, 0xea, 0xa6, 0xe1, 0xe4, 0xd3, 0x33, 0xd2, 0x89, 0xe1, 0xd3, 0xc7, 0xdb, 0x1a, 0xc2, 0x1a, - 0xc3, 0x51, 0x04, 0x32, 0x5a, 0x82, 0x9c, 0x63, 0x36, 0x6d, 0x0d, 0x57, 0x34, 0xb3, 0x8a, 0x2b, - 0xba, 0xb1, 0x63, 0xe6, 0x33, 0x94, 0xc1, 0x74, 0x6b, 0x47, 0x28, 0xe2, 0xbc, 0x59, 0xc5, 0x4b, - 0xc6, 0x8e, 0xa9, 0x8c, 0x3a, 0xa1, 0x32, 0x3a, 0x02, 0x83, 0xce, 0xbe, 0xe1, 0xaa, 0x57, 0xf3, - 0x59, 0x6a, 0x21, 0xbc, 0x24, 0xff, 0xe6, 0x20, 0x8c, 0xf5, 0x62, 0x62, 0xe7, 0x60, 0x60, 0x87, - 0xf4, 0x32, 0x9f, 0xe8, 0x47, 0x07, 0x8c, 0x26, 0xac, 0xc4, 0xc1, 0x03, 0x2a, 0x71, 0x0e, 0x86, - 0x0d, 0xec, 0xb8, 0xb8, 0xca, 0x2c, 0x22, 0xd9, 0xa3, 0x4d, 0x01, 0x23, 0x6a, 0x35, 0xa9, 0xd4, - 0x81, 0x4c, 0xea, 0x05, 0x18, 0xf3, 0x44, 0xaa, 0xd8, 0xaa, 0x51, 0x13, 0xb6, 0x79, 0x2a, 0x4e, - 0x92, 0xd9, 0xb2, 0xa0, 0x53, 0x08, 0x99, 0x32, 0x8a, 0x43, 0x65, 0xb4, 0x00, 0x60, 0x1a, 0xd8, - 0xdc, 0xa9, 0x54, 0xb1, 0x56, 0xcf, 0xa7, 0x3b, 0x68, 0x69, 0x8d, 0xa0, 0xb4, 0x68, 0xc9, 0x64, - 0x50, 0xad, 0x8e, 0x9e, 0xf2, 0x4d, 0x6d, 0xa8, 0x83, 0xa5, 0xac, 0xb0, 0x49, 0xd6, 0x62, 0x6d, - 0x5b, 0x30, 0x6a, 0x63, 0x62, 0xf7, 0xb8, 0xca, 0x7b, 0x96, 0xa1, 0x42, 0xcc, 0xc6, 0xf6, 0x4c, - 0xe1, 0x64, 0xac, 0x63, 0x23, 0x76, 0xb0, 0x88, 0xee, 0x06, 0x0f, 0x50, 0xa1, 0x66, 0x05, 0xd4, - 0x0b, 0x65, 0x05, 0x70, 0x55, 0x6d, 0xe0, 0xc2, 0xcb, 0x30, 0x1a, 0x56, 0x0f, 0x9a, 0x84, 0x01, - 0xc7, 0x55, 0x6d, 0x97, 0x5a, 0xe1, 0x80, 0xc2, 0x0a, 0x28, 0x07, 0x49, 0x6c, 0x54, 0xa9, 0x97, - 0x1b, 0x50, 0xc8, 0x4f, 0xf4, 0x16, 0xbf, 0xc3, 0x49, 0xda, 0xe1, 0xfb, 0x5a, 0x47, 0x34, 0xc4, - 0x39, 0xda, 0xef, 0xc2, 0x13, 0x30, 0x12, 0xea, 0x40, 0xaf, 0x4d, 0xcb, 0xef, 0x82, 0xc3, 0x6d, - 0x59, 0xa3, 0x17, 0x60, 0xb2, 0x69, 0xe8, 0x86, 0x8b, 0x6d, 0xcb, 0xc6, 0xc4, 0x62, 0x59, 0x53, - 0xf9, 0xff, 0x3a, 0xd4, 0xc1, 0xe6, 0xb6, 0x82, 0xd8, 0x8c, 0x8b, 0x32, 0xd1, 0x6c, 0x05, 0x9e, - 0xcc, 0xa4, 0x5f, 0x1f, 0xca, 0xbd, 0xf2, 0xca, 0x2b, 0xaf, 0x24, 0xe4, 0xaf, 0x0c, 0xc2, 0x64, - 0xbb, 0x39, 0xd3, 0x76, 0xfa, 0x1e, 0x81, 0x41, 0xa3, 0xd9, 0xd8, 0xc6, 0x36, 0x55, 0xd2, 0x80, - 0xc2, 0x4b, 0x68, 0x0e, 0x06, 0xea, 0xea, 0x36, 0xae, 0xe7, 0x53, 0x33, 0xd2, 0x89, 0xd1, 0xd3, - 0x0f, 0xf6, 0x34, 0x2b, 0x67, 0x97, 0x09, 0x89, 0xc2, 0x28, 0xd1, 0xd3, 0x90, 0xe2, 0x2e, 0x9a, - 0x70, 0x38, 0xd9, 0x1b, 0x07, 0x32, 0x97, 0x14, 0x4a, 0x87, 0xee, 0x80, 0x0c, 0xf9, 0xcb, 0x6c, - 0x63, 0x90, 0xca, 0x9c, 0x26, 0x00, 0x62, 0x17, 0xa8, 0x00, 0x69, 0x3a, 0x4d, 0xaa, 0x58, 0x84, - 0x36, 0xaf, 0x4c, 0x0c, 0xab, 0x8a, 0x77, 0xd4, 0x66, 0xdd, 0xad, 0x5c, 0x56, 0xeb, 0x4d, 0x4c, - 0x0d, 0x3e, 0xa3, 0x64, 0x39, 0xf0, 0x12, 0x81, 0xa1, 0x69, 0x18, 0x66, 0xb3, 0x4a, 0x37, 0xaa, - 0xf8, 0x2a, 0xf5, 0x9e, 0x03, 0x0a, 0x9b, 0x68, 0x4b, 0x04, 0x42, 0x9a, 0x7f, 0xd1, 0x31, 0x0d, - 0x61, 0x9a, 0xb4, 0x09, 0x02, 0xa0, 0xcd, 0x3f, 0x11, 0x75, 0xdc, 0x77, 0xb6, 0xef, 0x5e, 0xcb, - 0x5c, 0xba, 0x1f, 0xc6, 0x28, 0xc6, 0x63, 0x7c, 0xe8, 0xd5, 0x7a, 0x7e, 0x7c, 0x46, 0x3a, 0x91, - 0x56, 0x46, 0x19, 0x78, 0x8d, 0x43, 0xe5, 0x2f, 0x25, 0x20, 0x45, 0x1d, 0xcb, 0x18, 0x0c, 0x6f, - 0xbe, 0x75, 0xbd, 0x5c, 0x59, 0x58, 0xdb, 0x2a, 0x2d, 0x97, 0x73, 0x12, 0x1a, 0x05, 0xa0, 0x80, - 0xf3, 0xcb, 0x6b, 0x73, 0x9b, 0xb9, 0x84, 0x57, 0x5e, 0x5a, 0xdd, 0x3c, 0xfb, 0x78, 0x2e, 0xe9, - 0x11, 0x6c, 0x31, 0x40, 0x2a, 0x88, 0xf0, 0xd8, 0xe9, 0xdc, 0x00, 0xca, 0x41, 0x96, 0x31, 0x58, - 0x7a, 0xa1, 0xbc, 0x70, 0xf6, 0xf1, 0xdc, 0x60, 0x18, 0xf2, 0xd8, 0xe9, 0xdc, 0x10, 0x1a, 0x81, - 0x0c, 0x85, 0x94, 0xd6, 0xd6, 0x96, 0x73, 0x69, 0x8f, 0xe7, 0xc6, 0xa6, 0xb2, 0xb4, 0xba, 0x98, - 0xcb, 0x78, 0x3c, 0x17, 0x95, 0xb5, 0xad, 0xf5, 0x1c, 0x78, 0x1c, 0x56, 0xca, 0x1b, 0x1b, 0x73, - 0x8b, 0xe5, 0xdc, 0xb0, 0x87, 0x51, 0x7a, 0xeb, 0x66, 0x79, 0x23, 0x97, 0x0d, 0x89, 0xf5, 0xd8, - 0xe9, 0xdc, 0x88, 0xd7, 0x44, 0x79, 0x75, 0x6b, 0x25, 0x37, 0x8a, 0xc6, 0x61, 0x84, 0x35, 0x21, - 0x84, 0x18, 0x8b, 0x80, 0xce, 0x3e, 0x9e, 0xcb, 0xf9, 0x82, 0x30, 0x2e, 0xe3, 0x21, 0xc0, 0xd9, - 0xc7, 0x73, 0x48, 0x9e, 0x87, 0x01, 0x6a, 0x86, 0x08, 0xc1, 0xe8, 0xf2, 0x5c, 0xa9, 0xbc, 0x5c, - 0x59, 0x5b, 0xdf, 0x5c, 0x5a, 0x5b, 0x9d, 0x5b, 0xce, 0x49, 0x3e, 0x4c, 0x29, 0x3f, 0xb7, 0xb5, - 0xa4, 0x94, 0x17, 0x72, 0x89, 0x20, 0x6c, 0xbd, 0x3c, 0xb7, 0x59, 0x5e, 0xc8, 0x25, 0x65, 0x0d, - 0x26, 0xdb, 0x39, 0xd4, 0xb6, 0x53, 0x28, 0x60, 0x0b, 0x89, 0x0e, 0xb6, 0x40, 0x79, 0x45, 0x6d, - 0x41, 0xfe, 0x56, 0x02, 0x26, 0xda, 0x04, 0x95, 0xb6, 0x8d, 0x3c, 0x03, 0x03, 0xcc, 0x96, 0x59, - 0x98, 0x7d, 0xa0, 0x6d, 0x74, 0xa2, 0x96, 0xdd, 0x12, 0x6a, 0x29, 0x5d, 0x30, 0xd5, 0x48, 0x76, - 0x48, 0x35, 0x08, 0x8b, 0x16, 0x83, 0xfd, 0xa9, 0x16, 0xe7, 0xcf, 0xe2, 0xe3, 0xd9, 0x5e, 0xe2, - 0x23, 0x85, 0xf5, 0x17, 0x04, 0x06, 0xda, 0x04, 0x81, 0x73, 0x30, 0xde, 0xc2, 0xa8, 0x67, 0x67, - 0xfc, 0x5e, 0x09, 0xf2, 0x9d, 0x94, 0x13, 0xe3, 0x12, 0x13, 0x21, 0x97, 0x78, 0x2e, 0xaa, 0xc1, - 0xbb, 0x3a, 0x0f, 0x42, 0xcb, 0x58, 0x7f, 0x56, 0x82, 0x23, 0xed, 0x53, 0xca, 0xb6, 0x32, 0x3c, - 0x0d, 0x83, 0x0d, 0xec, 0xee, 0x9a, 0x22, 0xad, 0xba, 0xaf, 0x4d, 0xb0, 0x26, 0xd5, 0xd1, 0xc1, - 0xe6, 0x54, 0xc1, 0x68, 0x9f, 0xec, 0x94, 0x17, 0x32, 0x69, 0x5a, 0x24, 0xfd, 0x60, 0x02, 0x0e, - 0xb7, 0x65, 0xde, 0x56, 0xd0, 0x3b, 0x01, 0x74, 0xc3, 0x6a, 0xba, 0x2c, 0x75, 0x62, 0x9e, 0x38, - 0x43, 0x21, 0xd4, 0x79, 0x11, 0x2f, 0xdb, 0x74, 0xbd, 0xfa, 0x24, 0xad, 0x07, 0x06, 0xa2, 0x08, - 0x4f, 0xfa, 0x82, 0xa6, 0xa8, 0xa0, 0x53, 0x1d, 0x7a, 0xda, 0x62, 0x98, 0x8f, 0x40, 0x4e, 0xab, - 0xeb, 0xd8, 0x70, 0x2b, 0x8e, 0x6b, 0x63, 0xb5, 0xa1, 0x1b, 0x35, 0x1a, 0x6a, 0xd2, 0xc5, 0x81, - 0x1d, 0xb5, 0xee, 0x60, 0x65, 0x8c, 0x55, 0x6f, 0x88, 0x5a, 0x42, 0x41, 0x0d, 0xc8, 0x0e, 0x50, - 0x0c, 0x86, 0x28, 0x58, 0xb5, 0x47, 0x21, 0x7f, 0x24, 0x03, 0xc3, 0x81, 0x04, 0x1c, 0xdd, 0x05, - 0xd9, 0x17, 0xd5, 0xcb, 0x6a, 0x45, 0x2c, 0xaa, 0x98, 0x26, 0x86, 0x09, 0x6c, 0x9d, 0x2f, 0xac, - 0x1e, 0x81, 0x49, 0x8a, 0x62, 0x36, 0x5d, 0x6c, 0x57, 0xb4, 0xba, 0xea, 0x38, 0x54, 0x69, 0x69, - 0x8a, 0x8a, 0x48, 0xdd, 0x1a, 0xa9, 0x9a, 0x17, 0x35, 0xe8, 0x0c, 0x4c, 0x50, 0x8a, 0x46, 0xb3, - 0xee, 0xea, 0x56, 0x1d, 0x57, 0xc8, 0x32, 0xcf, 0xa1, 0x21, 0xc7, 0x93, 0x6c, 0x9c, 0x60, 0xac, - 0x70, 0x04, 0x22, 0x91, 0x83, 0x16, 0xe0, 0x4e, 0x4a, 0x56, 0xc3, 0x06, 0xb6, 0x55, 0x17, 0x57, - 0xf0, 0x4b, 0x4d, 0xb5, 0xee, 0x54, 0x54, 0xa3, 0x5a, 0xd9, 0x55, 0x9d, 0xdd, 0xfc, 0x24, 0x61, - 0x50, 0x4a, 0xe4, 0x25, 0xe5, 0x18, 0x41, 0x5c, 0xe4, 0x78, 0x65, 0x8a, 0x36, 0x67, 0x54, 0x2f, - 0xa8, 0xce, 0x2e, 0x2a, 0xc2, 0x11, 0xca, 0xc5, 0x71, 0x6d, 0xdd, 0xa8, 0x55, 0xb4, 0x5d, 0xac, - 0xed, 0x55, 0x9a, 0xee, 0xce, 0x93, 0xf9, 0x3b, 0x82, 0xed, 0x53, 0x09, 0x37, 0x28, 0xce, 0x3c, - 0x41, 0xd9, 0x72, 0x77, 0x9e, 0x44, 0x1b, 0x90, 0x25, 0x83, 0xd1, 0xd0, 0x5f, 0xc6, 0x95, 0x1d, - 0xd3, 0xa6, 0x31, 0x74, 0xb4, 0x8d, 0x6b, 0x0a, 0x68, 0x70, 0x76, 0x8d, 0x13, 0xac, 0x98, 0x55, - 0x5c, 0x1c, 0xd8, 0x58, 0x2f, 0x97, 0x17, 0x94, 0x61, 0xc1, 0xe5, 0xbc, 0x69, 0x13, 0x83, 0xaa, - 0x99, 0x9e, 0x82, 0x87, 0x99, 0x41, 0xd5, 0x4c, 0xa1, 0xde, 0x33, 0x30, 0xa1, 0x69, 0xac, 0xcf, - 0xba, 0x56, 0xe1, 0x8b, 0x31, 0x27, 0x9f, 0x0b, 0x29, 0x4b, 0xd3, 0x16, 0x19, 0x02, 0xb7, 0x71, - 0x07, 0x3d, 0x05, 0x87, 0x7d, 0x65, 0x05, 0x09, 0xc7, 0x5b, 0x7a, 0x19, 0x25, 0x3d, 0x03, 0x13, - 0xd6, 0x7e, 0x2b, 0x21, 0x0a, 0xb5, 0x68, 0xed, 0x47, 0xc9, 0x9e, 0x80, 0x49, 0x6b, 0xd7, 0x6a, - 0xa5, 0x3b, 0x19, 0xa4, 0x43, 0xd6, 0xae, 0x15, 0x25, 0xbc, 0x97, 0xae, 0xcc, 0x6d, 0xac, 0xa9, - 0x2e, 0xae, 0xe6, 0x8f, 0x06, 0xd1, 0x03, 0x15, 0x68, 0x16, 0x72, 0x9a, 0x56, 0xc1, 0x86, 0xba, - 0x5d, 0xc7, 0x15, 0xd5, 0xc6, 0x86, 0xea, 0xe4, 0xa7, 0x29, 0x72, 0xca, 0xb5, 0x9b, 0x58, 0x19, - 0xd5, 0xb4, 0x32, 0xad, 0x9c, 0xa3, 0x75, 0xe8, 0x24, 0x8c, 0x9b, 0xdb, 0x2f, 0x6a, 0xcc, 0x22, - 0x2b, 0x96, 0x8d, 0x77, 0xf4, 0xab, 0xf9, 0x7b, 0xa8, 0x7a, 0xc7, 0x48, 0x05, 0xb5, 0xc7, 0x75, - 0x0a, 0x46, 0x0f, 0x40, 0x4e, 0x73, 0x76, 0x55, 0xdb, 0xa2, 0x2e, 0xd9, 0xb1, 0x54, 0x0d, 0xe7, - 0xef, 0x65, 0xa8, 0x0c, 0xbe, 0x2a, 0xc0, 0x64, 0x46, 0x38, 0x57, 0xf4, 0x1d, 0x57, 0x70, 0xbc, - 0x9f, 0xcd, 0x08, 0x0a, 0xe3, 0xdc, 0x4e, 0x40, 0x8e, 0x68, 0x22, 0xd4, 0xf0, 0x09, 0x8a, 0x36, - 0x6a, 0xed, 0x5a, 0xc1, 0x76, 0xef, 0x86, 0x11, 0x82, 0xe9, 0x37, 0xfa, 0x00, 0x4b, 0xdc, 0xac, - 0xdd, 0x40, 0x8b, 0x8f, 0xc3, 0x11, 0x82, 0xd4, 0xc0, 0xae, 0x5a, 0x55, 0x5d, 0x35, 0x80, 0xfd, - 0x10, 0xc5, 0x26, 0x6a, 0x5f, 0xe1, 0x95, 0x21, 0x39, 0xed, 0xe6, 0xf6, 0xbe, 0x67, 0x58, 0x0f, - 0x33, 0x39, 0x09, 0x4c, 0x98, 0xd6, 0x6d, 0x4b, 0xce, 0xe5, 0x22, 0x64, 0x83, 0x76, 0x8f, 0x32, - 0xc0, 0x2c, 0x3f, 0x27, 0x91, 0x24, 0x68, 0x7e, 0x6d, 0x81, 0xa4, 0x2f, 0x6f, 0x2b, 0xe7, 0x12, - 0x24, 0x8d, 0x5a, 0x5e, 0xda, 0x2c, 0x57, 0x94, 0xad, 0xd5, 0xcd, 0xa5, 0x95, 0x72, 0x2e, 0x19, - 0x48, 0xec, 0x9f, 0x4d, 0xa5, 0xef, 0xcb, 0xdd, 0x2f, 0x7f, 0x33, 0x01, 0xa3, 0xe1, 0x95, 0x1a, - 0x7a, 0x13, 0x1c, 0x15, 0xdb, 0x2a, 0x0e, 0x76, 0x2b, 0x57, 0x74, 0x9b, 0x4e, 0xc8, 0x86, 0xca, - 0x82, 0xa3, 0x67, 0x3f, 0x93, 0x1c, 0x6b, 0x03, 0xbb, 0xcf, 0xeb, 0x36, 0x99, 0x6e, 0x0d, 0xd5, - 0x45, 0xcb, 0x30, 0x6d, 0x98, 0x15, 0xc7, 0x55, 0x8d, 0xaa, 0x6a, 0x57, 0x2b, 0xfe, 0x86, 0x56, - 0x45, 0xd5, 0x34, 0xec, 0x38, 0x26, 0x0b, 0x84, 0x1e, 0x97, 0xe3, 0x86, 0xb9, 0xc1, 0x91, 0xfd, - 0x08, 0x31, 0xc7, 0x51, 0x23, 0xe6, 0x9b, 0xec, 0x64, 0xbe, 0x77, 0x40, 0xa6, 0xa1, 0x5a, 0x15, - 0x6c, 0xb8, 0xf6, 0x3e, 0xcd, 0xcf, 0xd3, 0x4a, 0xba, 0xa1, 0x5a, 0x65, 0x52, 0xfe, 0xb1, 0x2c, - 0x93, 0x9e, 0x4d, 0xa5, 0xd3, 0xb9, 0xcc, 0xb3, 0xa9, 0x74, 0x26, 0x07, 0xf2, 0x6b, 0x49, 0xc8, - 0x06, 0xf3, 0x75, 0xb2, 0xfc, 0xd1, 0x68, 0xc4, 0x92, 0xa8, 0x4f, 0xbb, 0xbb, 0x6b, 0x76, 0x3f, - 0x3b, 0x4f, 0x42, 0x59, 0x71, 0x90, 0x25, 0xc7, 0x0a, 0xa3, 0x24, 0x69, 0x04, 0x31, 0x36, 0xcc, - 0x92, 0x91, 0xb4, 0xc2, 0x4b, 0x68, 0x11, 0x06, 0x5f, 0x74, 0x28, 0xef, 0x41, 0xca, 0xfb, 0x9e, - 0xee, 0xbc, 0x9f, 0xdd, 0xa0, 0xcc, 0x33, 0xcf, 0x6e, 0x54, 0x56, 0xd7, 0x94, 0x95, 0xb9, 0x65, - 0x85, 0x93, 0xa3, 0x63, 0x90, 0xaa, 0xab, 0x2f, 0xef, 0x87, 0x83, 0x1e, 0x05, 0xf5, 0x3a, 0x08, - 0xc7, 0x20, 0x75, 0x05, 0xab, 0x7b, 0xe1, 0x50, 0x43, 0x41, 0xb7, 0x71, 0x32, 0x9c, 0x82, 0x01, - 0xaa, 0x2f, 0x04, 0xc0, 0x35, 0x96, 0x3b, 0x84, 0xd2, 0x90, 0x9a, 0x5f, 0x53, 0xc8, 0x84, 0xc8, - 0x41, 0x96, 0x41, 0x2b, 0xeb, 0x4b, 0xe5, 0xf9, 0x72, 0x2e, 0x21, 0x9f, 0x81, 0x41, 0xa6, 0x04, - 0x32, 0x59, 0x3c, 0x35, 0xe4, 0x0e, 0xf1, 0x22, 0xe7, 0x21, 0x89, 0xda, 0xad, 0x95, 0x52, 0x59, - 0xc9, 0x25, 0xc2, 0x43, 0x9d, 0xca, 0x0d, 0xc8, 0x0e, 0x64, 0x83, 0x79, 0xf8, 0x8f, 0x67, 0x31, - 0xfe, 0x65, 0x09, 0x86, 0x03, 0x79, 0x35, 0x49, 0x88, 0xd4, 0x7a, 0xdd, 0xbc, 0x52, 0x51, 0xeb, - 0xba, 0xea, 0x70, 0xd3, 0x00, 0x0a, 0x9a, 0x23, 0x90, 0x5e, 0x87, 0xee, 0xc7, 0x34, 0x45, 0x06, - 0x72, 0x83, 0xf2, 0x27, 0x25, 0xc8, 0x45, 0x13, 0xdb, 0x88, 0x98, 0xd2, 0x1b, 0x29, 0xa6, 0xfc, - 0x09, 0x09, 0x46, 0xc3, 0xd9, 0x6c, 0x44, 0xbc, 0xbb, 0xde, 0x50, 0xf1, 0xfe, 0x30, 0x01, 0x23, - 0xa1, 0x1c, 0xb6, 0x57, 0xe9, 0x5e, 0x82, 0x71, 0xbd, 0x8a, 0x1b, 0x96, 0xe9, 0x62, 0x43, 0xdb, - 0xaf, 0xd4, 0xf1, 0x65, 0x5c, 0xcf, 0xcb, 0xd4, 0x69, 0x9c, 0xea, 0x9e, 0x25, 0xcf, 0x2e, 0xf9, - 0x74, 0xcb, 0x84, 0xac, 0x38, 0xb1, 0xb4, 0x50, 0x5e, 0x59, 0x5f, 0xdb, 0x2c, 0xaf, 0xce, 0xbf, - 0xb5, 0xb2, 0xb5, 0x7a, 0x71, 0x75, 0xed, 0xf9, 0x55, 0x25, 0xa7, 0x47, 0xd0, 0x6e, 0xe3, 0xb4, - 0x5f, 0x87, 0x5c, 0x54, 0x28, 0x74, 0x14, 0xda, 0x89, 0x95, 0x3b, 0x84, 0x26, 0x60, 0x6c, 0x75, - 0xad, 0xb2, 0xb1, 0xb4, 0x50, 0xae, 0x94, 0xcf, 0x9f, 0x2f, 0xcf, 0x6f, 0x6e, 0xb0, 0x7d, 0x0f, - 0x0f, 0x7b, 0x33, 0x34, 0xc1, 0xe5, 0x57, 0x93, 0x30, 0xd1, 0x46, 0x12, 0x34, 0xc7, 0x57, 0x2c, - 0x6c, 0x11, 0xf5, 0x70, 0x2f, 0xd2, 0xcf, 0x92, 0x9c, 0x61, 0x5d, 0xb5, 0x5d, 0xbe, 0xc0, 0x79, - 0x00, 0x88, 0x96, 0x0c, 0x57, 0xdf, 0xd1, 0xb1, 0xcd, 0xf7, 0x93, 0xd8, 0x32, 0x66, 0xcc, 0x87, - 0xb3, 0x2d, 0xa5, 0x87, 0x00, 0x59, 0xa6, 0xa3, 0xbb, 0xfa, 0x65, 0x5c, 0xd1, 0x0d, 0xb1, 0xf9, - 0x44, 0x96, 0x35, 0x29, 0x25, 0x27, 0x6a, 0x96, 0x0c, 0xd7, 0xc3, 0x36, 0x70, 0x4d, 0x8d, 0x60, - 0x13, 0x67, 0x9e, 0x54, 0x72, 0xa2, 0xc6, 0xc3, 0xbe, 0x0b, 0xb2, 0x55, 0xb3, 0x49, 0x72, 0x3d, - 0x86, 0x47, 0x62, 0x87, 0xa4, 0x0c, 0x33, 0x98, 0x87, 0xc2, 0xb3, 0x78, 0x7f, 0xd7, 0x2b, 0xab, - 0x0c, 0x33, 0x18, 0x43, 0xb9, 0x1f, 0xc6, 0xd4, 0x5a, 0xcd, 0x26, 0xcc, 0x05, 0x23, 0xb6, 0x2e, - 0x19, 0xf5, 0xc0, 0x14, 0xb1, 0xf0, 0x2c, 0xa4, 0x85, 0x1e, 0x48, 0xa8, 0x26, 0x9a, 0xa8, 0x58, - 0x6c, 0xb1, 0x9d, 0x38, 0x91, 0x51, 0xd2, 0x86, 0xa8, 0xbc, 0x0b, 0xb2, 0xba, 0x53, 0xf1, 0x37, - 0xf1, 0x13, 0x33, 0x89, 0x13, 0x69, 0x65, 0x58, 0x77, 0xbc, 0x0d, 0x50, 0xf9, 0xb3, 0x09, 0x18, - 0x0d, 0x1f, 0x42, 0xa0, 0x05, 0x48, 0xd7, 0x4d, 0x4d, 0xa5, 0xa6, 0xc5, 0x4e, 0xc0, 0x4e, 0xc4, - 0x9c, 0x5b, 0xcc, 0x2e, 0x73, 0x7c, 0xc5, 0xa3, 0x2c, 0xfc, 0x8e, 0x04, 0x69, 0x01, 0x46, 0x47, - 0x20, 0x65, 0xa9, 0xee, 0x2e, 0x65, 0x37, 0x50, 0x4a, 0xe4, 0x24, 0x85, 0x96, 0x09, 0xdc, 0xb1, - 0x54, 0x83, 0x9a, 0x00, 0x87, 0x93, 0x32, 0x19, 0xd7, 0x3a, 0x56, 0xab, 0x74, 0xd1, 0x63, 0x36, - 0x1a, 0xd8, 0x70, 0x1d, 0x31, 0xae, 0x1c, 0x3e, 0xcf, 0xc1, 0xe8, 0x41, 0x18, 0x77, 0x6d, 0x55, - 0xaf, 0x87, 0x70, 0x53, 0x14, 0x37, 0x27, 0x2a, 0x3c, 0xe4, 0x22, 0x1c, 0x13, 0x7c, 0xab, 0xd8, - 0x55, 0xb5, 0x5d, 0x5c, 0xf5, 0x89, 0x06, 0xe9, 0xe6, 0xc6, 0x51, 0x8e, 0xb0, 0xc0, 0xeb, 0x05, - 0xad, 0xfc, 0x4d, 0x09, 0xc6, 0xc5, 0x32, 0xad, 0xea, 0x29, 0x6b, 0x05, 0x40, 0x35, 0x0c, 0xd3, - 0x0d, 0xaa, 0xab, 0xd5, 0x94, 0x5b, 0xe8, 0x66, 0xe7, 0x3c, 0x22, 0x25, 0xc0, 0xa0, 0xd0, 0x00, - 0xf0, 0x6b, 0x3a, 0xaa, 0x6d, 0x1a, 0x86, 0xf9, 0x09, 0x13, 0x3d, 0xa6, 0x64, 0x0b, 0x7b, 0x60, - 0x20, 0xb2, 0x9e, 0x43, 0x93, 0x30, 0xb0, 0x8d, 0x6b, 0xba, 0xc1, 0xf7, 0x8d, 0x59, 0x41, 0x6c, - 0xbf, 0xa4, 0xbc, 0xed, 0x97, 0xd2, 0x87, 0x24, 0x98, 0xd0, 0xcc, 0x46, 0x54, 0xde, 0x52, 0x2e, - 0xb2, 0xbb, 0xe0, 0x5c, 0x90, 0xde, 0xf6, 0x74, 0x4d, 0x77, 0x77, 0x9b, 0xdb, 0xb3, 0x9a, 0xd9, - 0x38, 0x55, 0x33, 0xeb, 0xaa, 0x51, 0xf3, 0xcf, 0x59, 0xe9, 0x0f, 0xed, 0xe1, 0x1a, 0x36, 0x1e, - 0xae, 0x99, 0x81, 0x53, 0xd7, 0x73, 0xfe, 0xcf, 0x3f, 0x93, 0xa4, 0x5f, 0x4c, 0x24, 0x17, 0xd7, - 0x4b, 0x9f, 0x4b, 0x14, 0x16, 0x59, 0x73, 0xeb, 0x42, 0x3d, 0x0a, 0xde, 0xa9, 0x63, 0x8d, 0x74, - 0x19, 0xbe, 0xfb, 0x20, 0x4c, 0xd6, 0xcc, 0x9a, 0x49, 0x39, 0x9e, 0x22, 0xbf, 0xf8, 0xc9, 0x6d, - 0xc6, 0x83, 0x16, 0x62, 0x8f, 0x79, 0x8b, 0xab, 0x30, 0xc1, 0x91, 0x2b, 0xf4, 0xe8, 0x88, 0x2d, - 0x6c, 0x50, 0xd7, 0x5d, 0xb5, 0xfc, 0xaf, 0x7f, 0x9b, 0x06, 0x74, 0x65, 0x9c, 0x93, 0x92, 0x3a, - 0xb6, 0xf6, 0x29, 0x2a, 0x70, 0x38, 0xc4, 0x8f, 0x4d, 0x5b, 0x6c, 0xc7, 0x70, 0xfc, 0x2d, 0xce, - 0x71, 0x22, 0xc0, 0x71, 0x83, 0x93, 0x16, 0xe7, 0x61, 0xa4, 0x1f, 0x5e, 0xff, 0x9a, 0xf3, 0xca, - 0xe2, 0x20, 0x93, 0x45, 0x18, 0xa3, 0x4c, 0xb4, 0xa6, 0xe3, 0x9a, 0x0d, 0xea, 0x13, 0xbb, 0xb3, - 0xf9, 0xed, 0x6f, 0xb3, 0x79, 0x34, 0x4a, 0xc8, 0xe6, 0x3d, 0xaa, 0x62, 0x11, 0xe8, 0x69, 0x59, - 0x15, 0x6b, 0xf5, 0x18, 0x0e, 0x5f, 0xe5, 0x82, 0x78, 0xf8, 0xc5, 0x4b, 0x30, 0x49, 0x7e, 0x53, - 0x97, 0x15, 0x94, 0x24, 0x7e, 0x0b, 0x2e, 0xff, 0xcd, 0xf7, 0xb2, 0xa9, 0x3a, 0xe1, 0x31, 0x08, - 0xc8, 0x14, 0x18, 0xc5, 0x1a, 0x76, 0x5d, 0x6c, 0x3b, 0x15, 0xb5, 0xde, 0x4e, 0xbc, 0xc0, 0x1e, - 0x46, 0xfe, 0xe3, 0xdf, 0x0b, 0x8f, 0xe2, 0x22, 0xa3, 0x9c, 0xab, 0xd7, 0x8b, 0x5b, 0x70, 0xb4, - 0x8d, 0x55, 0xf4, 0xc0, 0xf3, 0x55, 0xce, 0x73, 0xb2, 0xc5, 0x32, 0x08, 0xdb, 0x75, 0x10, 0x70, - 0x6f, 0x2c, 0x7b, 0xe0, 0xf9, 0x0b, 0x9c, 0x27, 0xe2, 0xb4, 0x62, 0x48, 0x09, 0xc7, 0x67, 0x61, - 0xfc, 0x32, 0xb6, 0xb7, 0x4d, 0x87, 0xef, 0x1b, 0xf5, 0xc0, 0xee, 0x13, 0x9c, 0xdd, 0x18, 0x27, - 0xa4, 0x1b, 0x49, 0x84, 0xd7, 0x53, 0x90, 0xde, 0x51, 0x35, 0xdc, 0x03, 0x8b, 0xeb, 0x9c, 0xc5, - 0x10, 0xc1, 0x27, 0xa4, 0x73, 0x90, 0xad, 0x99, 0x3c, 0x6a, 0xc5, 0x93, 0x7f, 0x92, 0x93, 0x0f, - 0x0b, 0x1a, 0xce, 0xc2, 0x32, 0xad, 0x66, 0x9d, 0x84, 0xb4, 0x78, 0x16, 0x7f, 0x5b, 0xb0, 0x10, - 0x34, 0x9c, 0x45, 0x1f, 0x6a, 0xfd, 0x94, 0x60, 0xe1, 0x04, 0xf4, 0xf9, 0x0c, 0x0c, 0x9b, 0x46, - 0x7d, 0xdf, 0x34, 0x7a, 0x11, 0xe2, 0xd3, 0x9c, 0x03, 0x70, 0x12, 0xc2, 0xe0, 0x1c, 0x64, 0x7a, - 0x1d, 0x88, 0xbf, 0xf3, 0x3d, 0x31, 0x3d, 0xc4, 0x08, 0x2c, 0xc2, 0x98, 0x70, 0x50, 0xba, 0x69, - 0xf4, 0xc0, 0xe2, 0xef, 0x72, 0x16, 0xa3, 0x01, 0x32, 0xde, 0x0d, 0x17, 0x3b, 0x6e, 0x0d, 0xf7, - 0xc2, 0xe4, 0xb3, 0xa2, 0x1b, 0x9c, 0x84, 0xab, 0x72, 0x1b, 0x1b, 0xda, 0x6e, 0x6f, 0x1c, 0x7e, - 0x59, 0xa8, 0x52, 0xd0, 0x10, 0x16, 0xf3, 0x30, 0xd2, 0x50, 0x6d, 0x67, 0x57, 0xad, 0xf7, 0x34, - 0x1c, 0x7f, 0x8f, 0xf3, 0xc8, 0x7a, 0x44, 0x5c, 0x23, 0x4d, 0xa3, 0x1f, 0x36, 0x9f, 0x13, 0x1a, - 0x09, 0x90, 0xf1, 0xa9, 0xe7, 0xb8, 0x74, 0x93, 0xad, 0x1f, 0x6e, 0xbf, 0x22, 0xa6, 0x1e, 0xa3, - 0x5d, 0x09, 0x72, 0x3c, 0x07, 0x19, 0x47, 0x7f, 0xb9, 0x27, 0x36, 0x9f, 0x17, 0x23, 0x4d, 0x09, - 0x08, 0xf1, 0x5b, 0xe1, 0x58, 0xdb, 0x30, 0xd1, 0x03, 0xb3, 0xbf, 0xcf, 0x99, 0x1d, 0x69, 0x13, - 0x2a, 0xb8, 0x4b, 0xe8, 0x97, 0xe5, 0x3f, 0x10, 0x2e, 0x01, 0x47, 0x78, 0xad, 0x93, 0x75, 0x84, - 0xa3, 0xee, 0xf4, 0xa7, 0xb5, 0x5f, 0x15, 0x5a, 0x63, 0xb4, 0x21, 0xad, 0x6d, 0xc2, 0x11, 0xce, - 0xb1, 0xbf, 0x71, 0xfd, 0x35, 0xe1, 0x58, 0x19, 0xf5, 0x56, 0x78, 0x74, 0xdf, 0x0e, 0x05, 0x4f, - 0x9d, 0x22, 0x61, 0x75, 0x2a, 0x0d, 0xd5, 0xea, 0x81, 0xf3, 0xaf, 0x73, 0xce, 0xc2, 0xe3, 0x7b, - 0x19, 0xaf, 0xb3, 0xa2, 0x5a, 0x84, 0xf9, 0x0b, 0x90, 0x17, 0xcc, 0x9b, 0x86, 0x8d, 0x35, 0xb3, - 0x66, 0xe8, 0x2f, 0xe3, 0x6a, 0x0f, 0xac, 0x7f, 0x23, 0x32, 0x54, 0x5b, 0x01, 0x72, 0xc2, 0x79, - 0x09, 0x72, 0x5e, 0xae, 0x52, 0xd1, 0x1b, 0x96, 0x69, 0xbb, 0x31, 0x1c, 0xbf, 0x20, 0x46, 0xca, - 0xa3, 0x5b, 0xa2, 0x64, 0xc5, 0x32, 0xb0, 0x93, 0xe7, 0x5e, 0x4d, 0xf2, 0x8b, 0x9c, 0xd1, 0x88, - 0x4f, 0xc5, 0x1d, 0x87, 0x66, 0x36, 0x2c, 0xd5, 0xee, 0xc5, 0xff, 0xfd, 0x43, 0xe1, 0x38, 0x38, - 0x09, 0x77, 0x1c, 0xee, 0xbe, 0x85, 0x49, 0xb4, 0xef, 0x81, 0xc3, 0x97, 0x84, 0xe3, 0x10, 0x34, - 0x9c, 0x85, 0x48, 0x18, 0x7a, 0x60, 0xf1, 0x8f, 0x04, 0x0b, 0x41, 0x43, 0x58, 0x3c, 0xe7, 0x07, - 0x5a, 0x1b, 0xd7, 0x74, 0xc7, 0xb5, 0x59, 0x9a, 0xdc, 0x9d, 0xd5, 0x3f, 0xfe, 0x5e, 0x38, 0x09, - 0x53, 0x02, 0xa4, 0xc4, 0x13, 0xf1, 0x6d, 0x57, 0xba, 0x8a, 0x8a, 0x17, 0xec, 0x37, 0x85, 0x27, - 0x0a, 0x90, 0x11, 0xd9, 0x02, 0x19, 0x22, 0x51, 0xbb, 0x46, 0xd6, 0x0e, 0x3d, 0xb0, 0xfb, 0x27, - 0x11, 0xe1, 0x36, 0x04, 0x2d, 0xe1, 0x19, 0xc8, 0x7f, 0x9a, 0xc6, 0x1e, 0xde, 0xef, 0xc9, 0x3a, - 0xff, 0x69, 0x24, 0xff, 0xd9, 0x62, 0x94, 0xcc, 0x87, 0x8c, 0x45, 0xf2, 0x29, 0x14, 0x77, 0xcf, - 0x28, 0xff, 0xd3, 0x3f, 0xe0, 0xfd, 0x0d, 0xa7, 0x53, 0xc5, 0x65, 0x62, 0xe4, 0xe1, 0xa4, 0x27, - 0x9e, 0xd9, 0x7b, 0x7f, 0xe0, 0xd9, 0x79, 0x28, 0xe7, 0x29, 0x9e, 0x87, 0x91, 0x50, 0xc2, 0x13, - 0xcf, 0xea, 0x7d, 0x9c, 0x55, 0x36, 0x98, 0xef, 0x14, 0xcf, 0x40, 0x8a, 0x24, 0x2f, 0xf1, 0xe4, - 0x7f, 0x95, 0x93, 0x53, 0xf4, 0xe2, 0x9b, 0x21, 0x2d, 0x92, 0x96, 0x78, 0xd2, 0xf7, 0x73, 0x52, - 0x8f, 0x84, 0x90, 0x8b, 0x84, 0x25, 0x9e, 0xfc, 0xaf, 0x09, 0x72, 0x41, 0x42, 0xc8, 0x7b, 0x57, - 0xe1, 0x97, 0x7f, 0x26, 0xc5, 0x83, 0x8e, 0xd0, 0xdd, 0x39, 0x18, 0xe2, 0x99, 0x4a, 0x3c, 0xf5, - 0x07, 0x79, 0xe3, 0x82, 0xa2, 0xf8, 0x04, 0x0c, 0xf4, 0xa8, 0xf0, 0x9f, 0xe5, 0xa4, 0x0c, 0xbf, - 0x38, 0x0f, 0xc3, 0x81, 0xec, 0x24, 0x9e, 0xfc, 0x6f, 0x70, 0xf2, 0x20, 0x15, 0x11, 0x9d, 0x67, - 0x27, 0xf1, 0x0c, 0x3e, 0x24, 0x44, 0xe7, 0x14, 0x44, 0x6d, 0x22, 0x31, 0x89, 0xa7, 0xfe, 0xb0, - 0xd0, 0xba, 0x20, 0x29, 0x3e, 0x03, 0x19, 0x2f, 0xd8, 0xc4, 0xd3, 0x7f, 0x84, 0xd3, 0xfb, 0x34, - 0x44, 0x03, 0x81, 0x60, 0x17, 0xcf, 0xe2, 0x6f, 0x0a, 0x0d, 0x04, 0xa8, 0xc8, 0x34, 0x8a, 0x26, - 0x30, 0xf1, 0x9c, 0x3e, 0x2a, 0xa6, 0x51, 0x24, 0x7f, 0x21, 0xa3, 0x49, 0x7d, 0x7e, 0x3c, 0x8b, - 0x9f, 0x13, 0xa3, 0x49, 0xf1, 0x89, 0x18, 0xd1, 0x8c, 0x20, 0x9e, 0xc7, 0xdf, 0x12, 0x62, 0x44, - 0x12, 0x82, 0xe2, 0x3a, 0xa0, 0xd6, 0x6c, 0x20, 0x9e, 0xdf, 0xc7, 0x38, 0xbf, 0xf1, 0x96, 0x64, - 0xa0, 0xf8, 0x3c, 0x1c, 0x69, 0x9f, 0x09, 0xc4, 0x73, 0xfd, 0xf8, 0x0f, 0x22, 0x6b, 0xb7, 0x60, - 0x22, 0x50, 0xdc, 0xf4, 0x43, 0x4a, 0x30, 0x0b, 0x88, 0x67, 0xfb, 0xea, 0x0f, 0xc2, 0x8e, 0x3b, - 0x98, 0x04, 0x14, 0xe7, 0x00, 0xfc, 0x00, 0x1c, 0xcf, 0xeb, 0x13, 0x9c, 0x57, 0x80, 0x88, 0x4c, - 0x0d, 0x1e, 0x7f, 0xe3, 0xe9, 0xaf, 0x8b, 0xa9, 0xc1, 0x29, 0xc8, 0xd4, 0x10, 0xa1, 0x37, 0x9e, - 0xfa, 0x93, 0x62, 0x6a, 0x08, 0x12, 0x62, 0xd9, 0x81, 0xe8, 0x16, 0xcf, 0xe1, 0xd3, 0xc2, 0xb2, - 0x03, 0x54, 0xc5, 0x55, 0x18, 0x6f, 0x09, 0x88, 0xf1, 0xac, 0x7e, 0x91, 0xb3, 0xca, 0x45, 0xe3, - 0x61, 0x30, 0x78, 0xf1, 0x60, 0x18, 0xcf, 0xed, 0x33, 0x91, 0xe0, 0xc5, 0x63, 0x61, 0xf1, 0x1c, - 0xa4, 0x8d, 0x66, 0xbd, 0x4e, 0x26, 0x0f, 0xea, 0x7e, 0x37, 0x30, 0xff, 0x47, 0x3f, 0xe4, 0xda, - 0x11, 0x04, 0xc5, 0x33, 0x30, 0x80, 0x1b, 0xdb, 0xb8, 0x1a, 0x47, 0xf9, 0xdd, 0x1f, 0x0a, 0x87, - 0x49, 0xb0, 0x8b, 0xcf, 0x00, 0xb0, 0xad, 0x11, 0x7a, 0x3c, 0x18, 0x43, 0xfb, 0xdf, 0x7e, 0xc8, - 0x2f, 0xe3, 0xf8, 0x24, 0x3e, 0x03, 0x76, 0xb5, 0xa7, 0x3b, 0x83, 0xef, 0x85, 0x19, 0xd0, 0x11, - 0x79, 0x0a, 0x86, 0x5e, 0x74, 0x4c, 0xc3, 0x55, 0x6b, 0x71, 0xd4, 0xff, 0x9d, 0x53, 0x0b, 0x7c, - 0xa2, 0xb0, 0x86, 0x69, 0x63, 0x57, 0xad, 0x39, 0x71, 0xb4, 0xff, 0x83, 0xd3, 0x7a, 0x04, 0x84, - 0x58, 0x53, 0x1d, 0xb7, 0x97, 0x7e, 0xff, 0xb1, 0x20, 0x16, 0x04, 0x44, 0x68, 0xf2, 0x7b, 0x0f, - 0xef, 0xc7, 0xd1, 0x7e, 0x5f, 0x08, 0xcd, 0xf1, 0x8b, 0x6f, 0x86, 0x0c, 0xf9, 0xc9, 0x6e, 0xd8, - 0xc5, 0x10, 0xff, 0x09, 0x27, 0xf6, 0x29, 0x48, 0xcb, 0x8e, 0x5b, 0x75, 0xf5, 0x78, 0x65, 0xdf, - 0xe4, 0x23, 0x2d, 0xf0, 0x8b, 0x73, 0x30, 0xec, 0xb8, 0xd5, 0x6a, 0x93, 0xe7, 0xa7, 0x31, 0xe4, - 0xff, 0xf3, 0x87, 0xde, 0x96, 0x85, 0x47, 0x43, 0x46, 0xfb, 0xca, 0x9e, 0x6b, 0x99, 0xf4, 0x08, - 0x24, 0x8e, 0xc3, 0x0f, 0x38, 0x87, 0x00, 0x49, 0x71, 0x1e, 0xb2, 0xa4, 0x2f, 0x36, 0xb6, 0x30, - 0x3d, 0xaf, 0x8a, 0x61, 0xf1, 0xa7, 0x5c, 0x01, 0x21, 0xa2, 0xd2, 0x4f, 0x7d, 0xf5, 0xb5, 0x29, - 0xe9, 0x1b, 0xaf, 0x4d, 0x49, 0x7f, 0xf8, 0xda, 0x94, 0xf4, 0xe1, 0x6f, 0x4d, 0x1d, 0xfa, 0xc6, - 0xb7, 0xa6, 0x0e, 0xfd, 0xde, 0xb7, 0xa6, 0x0e, 0xb5, 0xdf, 0x36, 0x86, 0x45, 0x73, 0xd1, 0x64, - 0x1b, 0xc6, 0x6f, 0x93, 0x43, 0xdb, 0xc5, 0x35, 0xd3, 0xdf, 0xad, 0xf5, 0x16, 0x39, 0xf0, 0xa7, - 0x12, 0x59, 0x30, 0x87, 0xf7, 0x72, 0x55, 0x63, 0xbf, 0xc3, 0x5b, 0x9d, 0x42, 0xdb, 0x8d, 0x61, - 0xf9, 0x4d, 0x90, 0x9c, 0x33, 0xf6, 0xd1, 0x31, 0xe6, 0xf3, 0x2a, 0x4d, 0xbb, 0xce, 0x6f, 0x7e, - 0x0d, 0x91, 0xf2, 0x96, 0x5d, 0x47, 0x93, 0xfe, 0xf5, 0x4c, 0xe9, 0x44, 0x96, 0xdf, 0xb9, 0x2c, - 0xa6, 0xbe, 0xff, 0xe9, 0xe9, 0x43, 0xa5, 0xbd, 0x68, 0x0f, 0xbf, 0x1c, 0xdb, 0xcb, 0xf4, 0x9c, - 0xb1, 0x4f, 0x3b, 0xb9, 0x2e, 0xbd, 0x6d, 0x80, 0xb4, 0xe1, 0x88, 0x8d, 0xed, 0xa9, 0xe8, 0xc6, - 0xf6, 0xf3, 0xb8, 0x5e, 0xbf, 0x68, 0x98, 0x57, 0x8c, 0x4d, 0x82, 0xb6, 0x3d, 0xc8, 0xae, 0x11, - 0xc3, 0x5f, 0x4f, 0xc0, 0x54, 0xcb, 0x1e, 0x36, 0x1f, 0xf9, 0x4e, 0x0f, 0x95, 0x8a, 0x90, 0x5e, - 0x10, 0x06, 0x95, 0x87, 0x21, 0x07, 0x6b, 0xa6, 0x51, 0x75, 0x68, 0x57, 0x93, 0x8a, 0x28, 0x92, - 0xae, 0x1a, 0xaa, 0x61, 0x3a, 0xfc, 0x76, 0x24, 0x2b, 0x94, 0x7e, 0x4e, 0xea, 0x6f, 0x1c, 0x47, - 0x44, 0x4b, 0xa2, 0x9b, 0x27, 0xbb, 0xed, 0xfd, 0x53, 0x15, 0x78, 0xf2, 0x07, 0xf6, 0xf9, 0x7b, - 0x55, 0xc7, 0x87, 0x13, 0x30, 0x1d, 0x55, 0x07, 0x99, 0x47, 0x8e, 0xab, 0x36, 0xac, 0x4e, 0xfa, - 0x38, 0x07, 0x99, 0x4d, 0x81, 0xd3, 0xb7, 0x42, 0x7e, 0xbe, 0x4f, 0x85, 0x8c, 0x7a, 0x4d, 0x09, - 0x8d, 0x3c, 0x18, 0xaf, 0x11, 0xaf, 0x0b, 0x07, 0x50, 0xc9, 0x7b, 0x92, 0x70, 0x4c, 0x33, 0x9d, - 0x86, 0xe9, 0x54, 0x98, 0xc1, 0xb3, 0x02, 0x57, 0x46, 0x36, 0x58, 0xd5, 0xc3, 0x71, 0xc8, 0x05, - 0x18, 0xa5, 0x4e, 0x81, 0x6e, 0x04, 0x53, 0x3f, 0x1c, 0x1b, 0x3a, 0xbf, 0xf6, 0xef, 0x07, 0xe8, - 0x24, 0x1a, 0xf1, 0x08, 0xe9, 0x4d, 0x97, 0x4d, 0x98, 0xd4, 0x1b, 0x56, 0x1d, 0xd3, 0x23, 0xb1, - 0x8a, 0x57, 0x17, 0xcf, 0xef, 0xeb, 0x9c, 0xdf, 0x84, 0x4f, 0xbe, 0x24, 0xa8, 0x8b, 0xcb, 0x30, - 0xae, 0x6a, 0x1a, 0xb6, 0x42, 0x2c, 0x63, 0x1c, 0x96, 0x10, 0x30, 0xc7, 0x29, 0x3d, 0x6e, 0xa5, - 0x67, 0x3a, 0x8d, 0xed, 0xdb, 0xee, 0x0d, 0x0c, 0x9a, 0x8d, 0x6b, 0xd8, 0x78, 0xd8, 0xc0, 0xee, - 0x15, 0xd3, 0xde, 0xe3, 0xea, 0x7d, 0x98, 0x35, 0x25, 0x06, 0xe1, 0x7d, 0x49, 0x98, 0x62, 0x15, - 0xa7, 0xb6, 0x55, 0x07, 0x9f, 0xba, 0xfc, 0xe8, 0x36, 0x76, 0xd5, 0x47, 0x4f, 0x69, 0xa6, 0x2e, - 0xa6, 0xe9, 0x04, 0x1f, 0x17, 0x52, 0x3f, 0xcb, 0xeb, 0x3b, 0xf8, 0xa9, 0x45, 0x48, 0xcd, 0x9b, - 0xba, 0x41, 0x2c, 0xb2, 0x8a, 0x0d, 0xb3, 0xc1, 0xbd, 0x14, 0x2b, 0xa0, 0xbb, 0x61, 0x50, 0x6d, - 0x98, 0x4d, 0xc3, 0x65, 0xa7, 0x79, 0xa5, 0xe1, 0xaf, 0xde, 0x98, 0x3e, 0xf4, 0xfb, 0x37, 0xa6, - 0x93, 0x4b, 0x86, 0xab, 0xf0, 0xaa, 0x62, 0xea, 0xf5, 0x4f, 0x4d, 0x4b, 0xf2, 0xb3, 0x30, 0xb4, - 0x80, 0xb5, 0x83, 0xf0, 0x5a, 0xc0, 0x5a, 0x84, 0xd7, 0x03, 0x90, 0x5e, 0x32, 0x5c, 0x76, 0x83, - 0xf8, 0x4e, 0x48, 0xea, 0x06, 0xbb, 0x94, 0x16, 0x69, 0x9f, 0xc0, 0x09, 0xea, 0x02, 0xd6, 0x3c, - 0xd4, 0x2a, 0xd6, 0xa2, 0xa8, 0x84, 0x3d, 0x81, 0x97, 0x16, 0x7e, 0xef, 0xbf, 0x4c, 0x1d, 0x7a, - 0xe5, 0xb5, 0xa9, 0x43, 0x1d, 0x47, 0x22, 0x18, 0x1d, 0xb8, 0x8a, 0xf9, 0x10, 0x38, 0xd5, 0xbd, - 0x53, 0x6e, 0x68, 0x2e, 0x7c, 0x2e, 0x05, 0x77, 0xd2, 0xc7, 0x23, 0x76, 0x43, 0x37, 0xdc, 0x53, - 0x9a, 0xbd, 0x6f, 0xb9, 0x34, 0x9c, 0x98, 0x3b, 0x7c, 0x14, 0xc6, 0xfd, 0xea, 0x59, 0x56, 0xdd, - 0x61, 0x0c, 0x76, 0x60, 0x60, 0x9d, 0xd0, 0x11, 0xc5, 0xb9, 0xa6, 0xab, 0xd6, 0xb9, 0xbb, 0x60, - 0x05, 0x02, 0x65, 0x0f, 0x4e, 0x12, 0x0c, 0xaa, 0x8b, 0xb7, 0x26, 0x75, 0xac, 0xee, 0xb0, 0x7b, - 0xbb, 0x49, 0x1a, 0x42, 0xd2, 0x04, 0x40, 0xaf, 0xe8, 0x4e, 0xc2, 0x80, 0xda, 0x64, 0x47, 0xce, - 0x49, 0x12, 0x5b, 0x68, 0x41, 0xbe, 0x08, 0x43, 0xfc, 0x98, 0x0b, 0xe5, 0x20, 0xb9, 0x87, 0xf7, - 0x69, 0x3b, 0x59, 0x85, 0xfc, 0x44, 0xb3, 0x30, 0x40, 0x85, 0xe7, 0x0f, 0x12, 0xf2, 0xb3, 0x2d, - 0xd2, 0xcf, 0x52, 0x21, 0x15, 0x86, 0x26, 0x3f, 0x0b, 0xe9, 0x05, 0xb3, 0xa1, 0x1b, 0x66, 0x98, - 0x5b, 0x86, 0x71, 0xa3, 0x32, 0x5b, 0x4d, 0x3e, 0xd6, 0x0a, 0x2b, 0xa0, 0x23, 0x30, 0xc8, 0xee, - 0x71, 0xf3, 0x63, 0x73, 0x5e, 0x92, 0xe7, 0x61, 0x88, 0xf2, 0x5e, 0xb3, 0x10, 0xe2, 0x2f, 0x80, - 0xf8, 0x85, 0x71, 0xea, 0x16, 0x38, 0xfb, 0x84, 0x2f, 0x2c, 0x82, 0x54, 0x55, 0x75, 0x55, 0xde, - 0x6f, 0xfa, 0x5b, 0x7e, 0x1a, 0xd2, 0x9c, 0x89, 0x83, 0x4e, 0x43, 0xd2, 0xb4, 0x1c, 0x7e, 0xf0, - 0x5d, 0xe8, 0xd4, 0x95, 0x35, 0xab, 0x94, 0x22, 0x56, 0xa2, 0x10, 0xe4, 0x92, 0xd2, 0xd1, 0x2c, - 0x9e, 0x0c, 0x98, 0x45, 0x60, 0xc8, 0x03, 0x3f, 0xd9, 0x90, 0xb6, 0x98, 0x83, 0x67, 0x2c, 0x9f, - 0x4e, 0xc0, 0x54, 0xa0, 0xf6, 0x32, 0xb6, 0xc9, 0x5a, 0x8f, 0x59, 0x14, 0xb7, 0x16, 0x14, 0x10, - 0x92, 0xd7, 0x77, 0x30, 0x97, 0x37, 0x43, 0x72, 0xce, 0xb2, 0x50, 0x01, 0xd2, 0xec, 0x80, 0xdb, - 0x64, 0xf6, 0x92, 0x52, 0xbc, 0x32, 0xa9, 0x73, 0xcc, 0x1d, 0xf7, 0x8a, 0x6a, 0x7b, 0x4f, 0x9d, - 0x44, 0x59, 0x7e, 0x0a, 0x32, 0xf3, 0xa6, 0xe1, 0x60, 0xc3, 0x69, 0xd2, 0x40, 0xb4, 0x5d, 0x37, - 0xb5, 0x3d, 0xce, 0x81, 0x15, 0x88, 0xc2, 0x55, 0xcb, 0xa2, 0x94, 0x29, 0x85, 0xfc, 0x64, 0xf3, - 0xb2, 0xb4, 0xd1, 0x51, 0x45, 0x4f, 0xf5, 0xaf, 0x22, 0xde, 0x49, 0x4f, 0x47, 0xff, 0x47, 0x82, - 0xe3, 0xad, 0x13, 0x6a, 0x0f, 0xef, 0x3b, 0xfd, 0xce, 0xa7, 0x17, 0x20, 0xb3, 0x4e, 0xdf, 0x1b, - 0x5f, 0xc4, 0xfb, 0xa8, 0x00, 0x43, 0xb8, 0x7a, 0xfa, 0xcc, 0x99, 0x47, 0x9f, 0x62, 0xd6, 0x7e, - 0xe1, 0x90, 0x22, 0x00, 0x68, 0x0a, 0x32, 0x0e, 0xd6, 0xac, 0xd3, 0x67, 0xce, 0xee, 0x3d, 0xca, - 0xcc, 0xeb, 0xc2, 0x21, 0xc5, 0x07, 0x15, 0xd3, 0xa4, 0xd7, 0xaf, 0x7f, 0x7a, 0x5a, 0x2a, 0x0d, - 0x40, 0xd2, 0x69, 0x36, 0x6e, 0xab, 0x8d, 0xbc, 0x3a, 0x00, 0x33, 0x41, 0x4a, 0x1a, 0xad, 0x2f, - 0xab, 0x75, 0xbd, 0xaa, 0xfa, 0x2f, 0xc5, 0x73, 0x01, 0x1d, 0x50, 0x8c, 0xf6, 0x2a, 0x28, 0x74, - 0xd5, 0xa4, 0xfc, 0x1b, 0x12, 0x64, 0x2f, 0x09, 0xce, 0x1b, 0xd8, 0x45, 0xe7, 0x00, 0xbc, 0x96, - 0xc4, 0xb4, 0xb9, 0x63, 0x36, 0xda, 0xd6, 0xac, 0x47, 0xa3, 0x04, 0xd0, 0xd1, 0x13, 0xd4, 0x10, - 0x2d, 0xd3, 0xe1, 0xcf, 0x5f, 0x62, 0x48, 0x3d, 0x64, 0xf4, 0x10, 0x20, 0xea, 0xe1, 0x2a, 0x97, - 0x4d, 0x57, 0x37, 0x6a, 0x15, 0xcb, 0xbc, 0xc2, 0x1f, 0x15, 0x26, 0x95, 0x1c, 0xad, 0xb9, 0x44, - 0x2b, 0xd6, 0x09, 0x9c, 0x08, 0x9d, 0xf1, 0xb8, 0x90, 0xdc, 0x4a, 0xad, 0x56, 0x6d, 0xec, 0x38, - 0xdc, 0x89, 0x89, 0x22, 0x3a, 0x07, 0x43, 0x56, 0x73, 0xbb, 0x22, 0x3c, 0xc6, 0xf0, 0xe9, 0xe3, - 0xed, 0xe6, 0xbf, 0xb0, 0x0f, 0xee, 0x01, 0x06, 0xad, 0xe6, 0x36, 0xb1, 0x96, 0xbb, 0x20, 0xdb, - 0x46, 0x98, 0xe1, 0xcb, 0xbe, 0x1c, 0xf4, 0x99, 0x3b, 0xef, 0x41, 0xc5, 0xb2, 0x75, 0xd3, 0xd6, - 0xdd, 0x7d, 0x7a, 0x7b, 0x25, 0xa9, 0xe4, 0x44, 0xc5, 0x3a, 0x87, 0xcb, 0x7b, 0x30, 0xb6, 0x41, - 0x73, 0x0b, 0x5f, 0xf2, 0x33, 0xbe, 0x7c, 0x52, 0xbc, 0x7c, 0x1d, 0x25, 0x4b, 0xb4, 0x48, 0x56, - 0x7a, 0xae, 0xa3, 0x75, 0x3e, 0xd1, 0xbf, 0x75, 0x86, 0xa3, 0xdd, 0x1f, 0x1f, 0x0b, 0x4d, 0x4e, - 0x9e, 0x4a, 0x06, 0xdc, 0x57, 0xaf, 0x86, 0x19, 0x97, 0x52, 0x17, 0xba, 0x07, 0xd5, 0x42, 0x8c, - 0x1b, 0x2d, 0xc4, 0x4e, 0x21, 0xf9, 0x29, 0x18, 0x59, 0x57, 0x6d, 0x77, 0x03, 0xbb, 0x17, 0xb0, - 0x5a, 0xc5, 0x76, 0x38, 0xea, 0x8e, 0x88, 0xa8, 0x8b, 0x20, 0x45, 0x43, 0x2b, 0x8b, 0x3a, 0xf4, - 0xb7, 0xbc, 0x0b, 0x29, 0x7a, 0x83, 0xcd, 0x8b, 0xc8, 0x9c, 0x82, 0x45, 0x64, 0xe2, 0x4b, 0xf7, - 0x5d, 0xec, 0x88, 0x05, 0x1d, 0x2d, 0xa0, 0xc7, 0x45, 0x5c, 0x4d, 0x76, 0x8f, 0xab, 0xdc, 0x10, - 0x79, 0x74, 0xad, 0xc3, 0x50, 0x89, 0xb8, 0xe2, 0xa5, 0x05, 0x4f, 0x10, 0xc9, 0x17, 0x04, 0xad, - 0xc0, 0x98, 0xa5, 0xda, 0x2e, 0xbd, 0xba, 0xbf, 0x4b, 0x7b, 0xc1, 0x6d, 0x7d, 0xba, 0x75, 0xe6, - 0x85, 0x3a, 0xcb, 0x5b, 0x19, 0xb1, 0x82, 0x40, 0xf9, 0x3b, 0x29, 0x18, 0xe4, 0xca, 0x78, 0x33, - 0x0c, 0x71, 0xb5, 0x72, 0xeb, 0xbc, 0x73, 0xb6, 0x35, 0x30, 0xcd, 0x7a, 0x01, 0x84, 0xf3, 0x13, - 0x34, 0xe8, 0x3e, 0x48, 0x6b, 0xbb, 0xaa, 0x6e, 0x54, 0xf4, 0xaa, 0x48, 0xf3, 0x5e, 0xbb, 0x31, - 0x3d, 0x34, 0x4f, 0x60, 0x4b, 0x0b, 0xca, 0x10, 0xad, 0x5c, 0xaa, 0x92, 0x4c, 0x60, 0x17, 0xeb, - 0xb5, 0x5d, 0x97, 0xcf, 0x30, 0x5e, 0x42, 0x4f, 0x42, 0x8a, 0x18, 0x04, 0x7f, 0xd8, 0x55, 0x68, - 0x49, 0xb6, 0xbd, 0x15, 0x4f, 0x29, 0x4d, 0x1a, 0xfe, 0xf0, 0x1f, 0x4c, 0x4b, 0x0a, 0xa5, 0x40, - 0xf3, 0x30, 0x52, 0x57, 0x1d, 0xb7, 0x42, 0x23, 0x18, 0x69, 0x7e, 0x80, 0xb2, 0x38, 0xd6, 0xaa, - 0x10, 0xae, 0x58, 0x2e, 0xfa, 0x30, 0xa1, 0x62, 0xa0, 0x2a, 0x3a, 0x01, 0x39, 0xca, 0x44, 0x33, - 0x1b, 0x0d, 0xdd, 0x65, 0xb9, 0xd5, 0x20, 0xd5, 0xfb, 0x28, 0x81, 0xcf, 0x53, 0x30, 0xcd, 0xb0, - 0xee, 0x80, 0x0c, 0x7d, 0x4a, 0x42, 0x51, 0xd8, 0xb5, 0xc9, 0x34, 0x01, 0xd0, 0xca, 0xfb, 0x61, - 0xcc, 0xf7, 0x8f, 0x0c, 0x25, 0xcd, 0xb8, 0xf8, 0x60, 0x8a, 0xf8, 0x08, 0x4c, 0x1a, 0xf8, 0x2a, - 0xbd, 0xc8, 0x19, 0xc2, 0xce, 0x50, 0x6c, 0x44, 0xea, 0x2e, 0x85, 0x29, 0xee, 0x85, 0x51, 0x4d, - 0x28, 0x9f, 0xe1, 0x02, 0xc5, 0x1d, 0xf1, 0xa0, 0x14, 0xed, 0x18, 0xa4, 0x55, 0xcb, 0x62, 0x08, - 0xc3, 0xdc, 0x3f, 0x5a, 0x16, 0xad, 0x3a, 0x09, 0xe3, 0xb4, 0x8f, 0x36, 0x76, 0x9a, 0x75, 0x97, - 0x33, 0xc9, 0x52, 0x9c, 0x31, 0x52, 0xa1, 0x30, 0x38, 0xc5, 0xbd, 0x1b, 0x46, 0xf0, 0x65, 0xbd, - 0x8a, 0x0d, 0x0d, 0x33, 0xbc, 0x11, 0x8a, 0x97, 0x15, 0x40, 0x8a, 0xf4, 0x00, 0x78, 0x7e, 0xaf, - 0x22, 0x7c, 0xf2, 0x28, 0xe3, 0x27, 0xe0, 0x73, 0x0c, 0x2c, 0xe7, 0x21, 0xb5, 0xa0, 0xba, 0x2a, - 0x49, 0x30, 0xdc, 0xab, 0x2c, 0xd0, 0x64, 0x15, 0xf2, 0x53, 0x7e, 0x3d, 0x01, 0xa9, 0x4b, 0xa6, - 0x8b, 0xd1, 0x63, 0x81, 0x04, 0x70, 0xb4, 0x9d, 0x3d, 0x6f, 0xe8, 0x35, 0x03, 0x57, 0x57, 0x9c, - 0x5a, 0xe0, 0xdd, 0xb7, 0x6f, 0x4e, 0x89, 0x90, 0x39, 0x4d, 0xc2, 0x80, 0x6d, 0x36, 0x8d, 0xaa, - 0xb8, 0x71, 0x48, 0x0b, 0xa8, 0x0c, 0x69, 0xcf, 0x4a, 0x52, 0x71, 0x56, 0x32, 0x46, 0xac, 0x84, - 0xd8, 0x30, 0x07, 0x28, 0x43, 0xdb, 0xdc, 0x58, 0x4a, 0x90, 0xf1, 0x9c, 0x17, 0xb7, 0xb6, 0xde, - 0x0c, 0xd6, 0x27, 0x23, 0xc1, 0xc4, 0x1b, 0x7b, 0x4f, 0x79, 0xcc, 0xe2, 0x72, 0x5e, 0x05, 0xd7, - 0x5e, 0xc8, 0xac, 0xf8, 0x1b, 0xf4, 0x21, 0xda, 0x2f, 0xdf, 0xac, 0xd8, 0x3b, 0xf4, 0xe3, 0x90, - 0x71, 0xf4, 0x9a, 0xa1, 0xba, 0x4d, 0x1b, 0x73, 0xcb, 0xf3, 0x01, 0xf2, 0x97, 0x25, 0x18, 0x64, - 0x96, 0x1c, 0xd0, 0x9b, 0xd4, 0x5e, 0x6f, 0x89, 0x4e, 0x7a, 0x4b, 0x1e, 0x5c, 0x6f, 0x73, 0x00, - 0x9e, 0x30, 0x0e, 0x7f, 0x1a, 0xdc, 0x26, 0x63, 0x60, 0x22, 0x6e, 0xe8, 0x35, 0x3e, 0x51, 0x03, - 0x44, 0xf2, 0x7f, 0x96, 0x48, 0x12, 0xcb, 0xeb, 0xd1, 0x1c, 0x8c, 0x08, 0xb9, 0x2a, 0x3b, 0x75, - 0xb5, 0xc6, 0x6d, 0xe7, 0xce, 0x8e, 0xc2, 0x9d, 0xaf, 0xab, 0x35, 0x65, 0x98, 0xcb, 0x43, 0x0a, - 0xed, 0xc7, 0x21, 0xd1, 0x61, 0x1c, 0x42, 0x03, 0x9f, 0x3c, 0xd8, 0xc0, 0x87, 0x86, 0x28, 0x15, - 0x1d, 0xa2, 0x2f, 0x24, 0xe8, 0x62, 0xc6, 0x32, 0x1d, 0xb5, 0xfe, 0xe3, 0x98, 0x11, 0x77, 0x40, - 0xc6, 0x32, 0xeb, 0x15, 0x56, 0xc3, 0x6e, 0xe2, 0xa6, 0x2d, 0xb3, 0xae, 0xb4, 0x0c, 0xfb, 0xc0, - 0x2d, 0x9a, 0x2e, 0x83, 0xb7, 0x40, 0x6b, 0x43, 0x51, 0xad, 0xd9, 0x90, 0x65, 0xaa, 0xe0, 0xb1, - 0xec, 0x11, 0xa2, 0x03, 0x1a, 0x1c, 0xa5, 0xd6, 0xd8, 0xcb, 0xc4, 0x66, 0x98, 0x0a, 0xc7, 0x23, - 0x14, 0xcc, 0xf5, 0xb7, 0x5b, 0x05, 0x07, 0xcd, 0x52, 0xe1, 0x78, 0xf2, 0xcf, 0x4b, 0x00, 0xcb, - 0x44, 0xb3, 0xb4, 0xbf, 0x24, 0x0a, 0x39, 0x54, 0x84, 0x4a, 0xa8, 0xe5, 0xa9, 0x4e, 0x83, 0xc6, - 0xdb, 0xcf, 0x3a, 0x41, 0xb9, 0xe7, 0x61, 0xc4, 0x37, 0x46, 0x07, 0x0b, 0x61, 0xa6, 0xba, 0x64, - 0xd5, 0x1b, 0xd8, 0x55, 0xb2, 0x97, 0x03, 0x25, 0xf9, 0x5f, 0x48, 0x90, 0xa1, 0x32, 0xad, 0x60, - 0x57, 0x0d, 0x8d, 0xa1, 0x74, 0xf0, 0x31, 0xbc, 0x13, 0x80, 0xb1, 0x71, 0xf4, 0x97, 0x31, 0xb7, - 0xac, 0x0c, 0x85, 0x6c, 0xe8, 0x2f, 0x63, 0x74, 0xd6, 0x53, 0x78, 0xb2, 0xbb, 0xc2, 0x45, 0xd6, - 0xcd, 0xd5, 0x7e, 0x14, 0x86, 0xe8, 0xa7, 0x74, 0xae, 0x3a, 0x3c, 0x91, 0x1e, 0x34, 0x9a, 0x8d, - 0xcd, 0xab, 0x8e, 0xfc, 0x22, 0x0c, 0x6d, 0x5e, 0x65, 0x7b, 0x23, 0x77, 0x40, 0xc6, 0x36, 0x4d, - 0x1e, 0x93, 0x59, 0x2e, 0x94, 0x26, 0x00, 0x1a, 0x82, 0xc4, 0x7e, 0x40, 0xc2, 0xdf, 0x0f, 0xf0, - 0x37, 0x34, 0x92, 0x3d, 0x6d, 0x68, 0x9c, 0xfc, 0x0f, 0x12, 0x0c, 0x07, 0xfc, 0x03, 0x7a, 0x14, - 0x0e, 0x97, 0x96, 0xd7, 0xe6, 0x2f, 0x56, 0x96, 0x16, 0x2a, 0xe7, 0x97, 0xe7, 0x16, 0xfd, 0xb7, - 0x26, 0x85, 0x23, 0xd7, 0xae, 0xcf, 0xa0, 0x00, 0xee, 0x96, 0xb1, 0x67, 0x98, 0x57, 0x0c, 0x74, - 0x0a, 0x26, 0xc3, 0x24, 0x73, 0xa5, 0x8d, 0xf2, 0xea, 0x66, 0x4e, 0x2a, 0x1c, 0xbe, 0x76, 0x7d, - 0x66, 0x3c, 0x40, 0x31, 0xb7, 0xed, 0x60, 0xc3, 0x6d, 0x25, 0x98, 0x5f, 0x5b, 0x59, 0x59, 0xda, - 0xcc, 0x25, 0x5a, 0x08, 0xb8, 0xc3, 0x7e, 0x00, 0xc6, 0xc3, 0x04, 0xab, 0x4b, 0xcb, 0xb9, 0x64, - 0x01, 0x5d, 0xbb, 0x3e, 0x33, 0x1a, 0xc0, 0x5e, 0xd5, 0xeb, 0x85, 0xf4, 0x07, 0x3e, 0x33, 0x75, - 0xe8, 0x97, 0x7f, 0x69, 0x4a, 0x22, 0x3d, 0x1b, 0x09, 0xf9, 0x08, 0xf4, 0x10, 0x1c, 0xdd, 0x58, - 0x5a, 0x5c, 0x2d, 0x2f, 0x54, 0x56, 0x36, 0x16, 0x2b, 0xec, 0x1b, 0x1b, 0x5e, 0xef, 0xc6, 0xae, - 0x5d, 0x9f, 0x19, 0xe6, 0x5d, 0xea, 0x84, 0xbd, 0xae, 0x94, 0x2f, 0xad, 0x6d, 0x96, 0x73, 0x12, - 0xc3, 0x5e, 0xb7, 0xf1, 0x65, 0xd3, 0x65, 0xdf, 0xda, 0x7a, 0x04, 0x8e, 0xb5, 0xc1, 0xf6, 0x3a, - 0x36, 0x7e, 0xed, 0xfa, 0xcc, 0xc8, 0xba, 0x8d, 0xd9, 0xfc, 0xa1, 0x14, 0xb3, 0x90, 0x6f, 0xa5, - 0x58, 0x5b, 0x5f, 0xdb, 0x98, 0x5b, 0xce, 0xcd, 0x14, 0x72, 0xd7, 0xae, 0xcf, 0x64, 0x85, 0x33, - 0x24, 0xf8, 0x7e, 0xcf, 0x6e, 0xe7, 0x8a, 0xe7, 0x3b, 0xb3, 0x70, 0x0f, 0xdf, 0x03, 0x74, 0x5c, - 0x75, 0x4f, 0x37, 0x6a, 0xde, 0x4e, 0x2b, 0x2f, 0xf3, 0x95, 0xcf, 0x11, 0xbe, 0xd9, 0x2a, 0xa0, - 0x5d, 0xf7, 0x5b, 0x0b, 0x9d, 0x4f, 0x96, 0x0a, 0x31, 0x87, 0x2f, 0xf1, 0x4b, 0xa7, 0xce, 0x7b, - 0xf3, 0x85, 0x98, 0x1d, 0xe3, 0x42, 0xd7, 0xc5, 0x9d, 0xfc, 0x41, 0x09, 0x46, 0x2f, 0xe8, 0x8e, - 0x6b, 0xda, 0xba, 0xa6, 0xd6, 0xe9, 0x0b, 0x93, 0xb3, 0xbd, 0xfa, 0xd6, 0xc8, 0x54, 0x7f, 0x06, - 0x06, 0x2f, 0xab, 0x75, 0xe6, 0xd4, 0x92, 0xf4, 0x83, 0x18, 0xed, 0xd5, 0xe7, 0xbb, 0x36, 0xc1, - 0x80, 0x91, 0xc9, 0xbf, 0x9a, 0x80, 0x31, 0x3a, 0x19, 0x1c, 0xf6, 0xa9, 0x24, 0xb2, 0xc6, 0x2a, - 0x41, 0xca, 0x56, 0x5d, 0xbe, 0x69, 0x58, 0x9a, 0xe5, 0x3b, 0xbf, 0xf7, 0xc5, 0xef, 0xe6, 0xce, - 0x2e, 0x60, 0x4d, 0xa1, 0xb4, 0xe8, 0x1d, 0x90, 0x6e, 0xa8, 0x57, 0x2b, 0x94, 0x0f, 0x5b, 0xb9, - 0xcc, 0xf5, 0xc7, 0xe7, 0xe6, 0x8d, 0xe9, 0xb1, 0x7d, 0xb5, 0x51, 0x2f, 0xca, 0x82, 0x8f, 0xac, - 0x0c, 0x35, 0xd4, 0xab, 0x44, 0x44, 0x64, 0xc1, 0x18, 0x81, 0x6a, 0xbb, 0xaa, 0x51, 0xc3, 0xac, - 0x11, 0xba, 0x05, 0x5a, 0xba, 0xd0, 0x77, 0x23, 0x47, 0xfc, 0x46, 0x02, 0xec, 0x64, 0x65, 0xa4, - 0xa1, 0x5e, 0x9d, 0xa7, 0x00, 0xd2, 0x62, 0x31, 0xfd, 0xb1, 0x4f, 0x4d, 0x1f, 0xa2, 0xbb, 0xe9, - 0xdf, 0x94, 0x00, 0x7c, 0x8d, 0xa1, 0x77, 0x40, 0x4e, 0xf3, 0x4a, 0x94, 0xd6, 0xe1, 0x63, 0x78, - 0x7f, 0xa7, 0xb1, 0x88, 0xe8, 0x9b, 0xc5, 0xe6, 0x6f, 0xdc, 0x98, 0x96, 0x94, 0x31, 0x2d, 0x32, - 0x14, 0x6f, 0x87, 0xe1, 0xa6, 0x55, 0x55, 0x5d, 0x5c, 0xa1, 0xeb, 0xb8, 0x44, 0x6c, 0x9c, 0x9f, - 0x22, 0xbc, 0x6e, 0xde, 0x98, 0x46, 0xac, 0x5b, 0x01, 0x62, 0x99, 0x46, 0x7f, 0x60, 0x10, 0x42, - 0x10, 0xe8, 0xd3, 0xd7, 0x24, 0x18, 0x5e, 0x08, 0xdc, 0xf4, 0xca, 0xc3, 0x50, 0xc3, 0x34, 0xf4, - 0x3d, 0x6e, 0x8f, 0x19, 0x45, 0x14, 0x51, 0x01, 0xd2, 0xec, 0xd1, 0x9d, 0xbb, 0x2f, 0xb6, 0x42, - 0x45, 0x99, 0x50, 0x5d, 0xc1, 0xdb, 0x8e, 0x2e, 0x46, 0x43, 0x11, 0x45, 0x74, 0x1e, 0x72, 0x0e, - 0xd6, 0x9a, 0xb6, 0xee, 0xee, 0x57, 0x34, 0xd3, 0x70, 0x55, 0xcd, 0x65, 0xcf, 0xb7, 0x4a, 0x77, - 0xdc, 0xbc, 0x31, 0x7d, 0x94, 0xc9, 0x1a, 0xc5, 0x90, 0x95, 0x31, 0x01, 0x9a, 0x67, 0x10, 0xd2, - 0x42, 0x15, 0xbb, 0xaa, 0x5e, 0x77, 0xf2, 0xec, 0x60, 0x48, 0x14, 0x03, 0x7d, 0xf9, 0xfc, 0x50, - 0x70, 0x63, 0xeb, 0x3c, 0xe4, 0x4c, 0x0b, 0xdb, 0xa1, 0x44, 0x54, 0x8a, 0xb6, 0x1c, 0xc5, 0x90, - 0x95, 0x31, 0x01, 0x12, 0x49, 0xaa, 0x4b, 0x86, 0x59, 0x2c, 0x14, 0xad, 0xe6, 0xb6, 0xbf, 0x1f, - 0x36, 0xd9, 0x32, 0x1a, 0x73, 0xc6, 0x7e, 0xe9, 0x31, 0x9f, 0x7b, 0x94, 0x4e, 0xfe, 0xfa, 0x17, - 0x1f, 0x9e, 0xe4, 0xa6, 0xe1, 0xef, 0x4f, 0x5d, 0xc4, 0xfb, 0x64, 0xf8, 0x39, 0xea, 0x3a, 0xc5, - 0x24, 0x69, 0xe7, 0x8b, 0xaa, 0x5e, 0x17, 0xcf, 0x90, 0x15, 0x5e, 0x42, 0x45, 0x18, 0x74, 0x5c, - 0xd5, 0x6d, 0x3a, 0xfc, 0xe3, 0x60, 0x72, 0x27, 0x53, 0x2b, 0x99, 0x46, 0x75, 0x83, 0x62, 0x2a, - 0x9c, 0x02, 0x9d, 0x87, 0x41, 0xd7, 0xdc, 0xc3, 0x06, 0x57, 0x61, 0x5f, 0xf3, 0x9b, 0x9e, 0x53, - 0x31, 0x6a, 0xa2, 0x91, 0x2a, 0xae, 0xe3, 0x1a, 0x4b, 0xab, 0x76, 0x55, 0xb2, 0xfa, 0xa0, 0xdf, - 0x08, 0x2b, 0x2d, 0xf5, 0x3d, 0x09, 0xb9, 0xa6, 0xa2, 0xfc, 0x64, 0x65, 0xcc, 0x03, 0x6d, 0x50, - 0x08, 0xba, 0x18, 0xba, 0x92, 0xc8, 0x3f, 0xa4, 0x77, 0x77, 0xa7, 0xee, 0x07, 0x6c, 0x5a, 0xec, - 0x4f, 0x04, 0x2f, 0x34, 0x9e, 0x87, 0x5c, 0xd3, 0xd8, 0x36, 0x0d, 0xfa, 0x56, 0x90, 0xe7, 0xf7, - 0x64, 0x7d, 0x97, 0x0c, 0x1a, 0x47, 0x14, 0x43, 0x56, 0xc6, 0x3c, 0xd0, 0x05, 0xb6, 0x0a, 0xa8, - 0xc2, 0xa8, 0x8f, 0x45, 0x27, 0x6a, 0x26, 0x76, 0xa2, 0xde, 0xc5, 0x27, 0xea, 0xe1, 0x68, 0x2b, - 0xfe, 0x5c, 0x1d, 0xf1, 0x80, 0x84, 0x0c, 0x5d, 0x00, 0xf0, 0xdd, 0x03, 0xdd, 0xa7, 0x18, 0xee, - 0x3c, 0xf0, 0xbe, 0x8f, 0x11, 0xeb, 0x3d, 0x9f, 0x16, 0xbd, 0x0b, 0x26, 0x1a, 0xba, 0x51, 0x71, - 0x70, 0x7d, 0xa7, 0xc2, 0x15, 0x4c, 0x58, 0xd2, 0x4f, 0xbd, 0x94, 0x96, 0xfb, 0xb3, 0x87, 0x9b, - 0x37, 0xa6, 0x0b, 0xdc, 0x85, 0xb6, 0xb2, 0x94, 0x95, 0xf1, 0x86, 0x6e, 0x6c, 0xe0, 0xfa, 0xce, - 0x82, 0x07, 0x2b, 0x66, 0x3f, 0xf0, 0xa9, 0xe9, 0x43, 0x7c, 0xba, 0x1e, 0x92, 0xcf, 0xd2, 0xbd, - 0x73, 0x3e, 0xcd, 0xb0, 0x43, 0xd6, 0x24, 0xaa, 0x28, 0xd0, 0x1d, 0x8d, 0x8c, 0xe2, 0x03, 0xd8, - 0x34, 0x7f, 0xe5, 0x3f, 0xcd, 0x48, 0xf2, 0xe7, 0x25, 0x18, 0x5c, 0xb8, 0xb4, 0xae, 0xea, 0x36, - 0x5a, 0x82, 0x71, 0xdf, 0x72, 0xc2, 0x93, 0xfc, 0xf8, 0xcd, 0x1b, 0xd3, 0xf9, 0xa8, 0x71, 0x79, - 0xb3, 0xdc, 0x37, 0x60, 0x31, 0xcd, 0x97, 0x3a, 0x2d, 0x5c, 0x43, 0xac, 0x5a, 0x50, 0xe4, 0xd6, - 0x65, 0x6d, 0xa4, 0x9b, 0x65, 0x18, 0x62, 0xd2, 0x3a, 0xa8, 0x08, 0x03, 0x16, 0xf9, 0xc1, 0x0f, - 0x06, 0xa6, 0x3a, 0x1a, 0x2f, 0xc5, 0xf7, 0x36, 0x32, 0x09, 0x89, 0xfc, 0x91, 0x04, 0xc0, 0xc2, - 0xa5, 0x4b, 0x9b, 0xb6, 0x6e, 0xd5, 0xb1, 0x7b, 0x2b, 0x7b, 0xbe, 0x09, 0x87, 0x03, 0xab, 0x24, - 0x5b, 0x8b, 0xf4, 0x7e, 0xe6, 0xe6, 0x8d, 0xe9, 0xe3, 0xd1, 0xde, 0x07, 0xd0, 0x64, 0x65, 0xc2, - 0x5f, 0x2f, 0xd9, 0x5a, 0x5b, 0xae, 0x55, 0xc7, 0xf5, 0xb8, 0x26, 0x3b, 0x73, 0x0d, 0xa0, 0x05, - 0xb9, 0x2e, 0x38, 0x6e, 0x7b, 0xd5, 0x6e, 0xc0, 0xb0, 0xaf, 0x12, 0x07, 0x2d, 0x40, 0xda, 0xe5, - 0xbf, 0xb9, 0x86, 0xe5, 0xce, 0x1a, 0x16, 0x64, 0x5c, 0xcb, 0x1e, 0xa5, 0xfc, 0x67, 0x12, 0x80, - 0x6f, 0xb3, 0x3f, 0x99, 0x26, 0x46, 0x5c, 0x39, 0x77, 0xbc, 0xc9, 0x03, 0xa5, 0x6a, 0x9c, 0x3a, - 0xa2, 0xcf, 0x9f, 0x49, 0xc0, 0xc4, 0x96, 0xf0, 0x3c, 0x3f, 0xf1, 0x3a, 0x58, 0x87, 0x21, 0x6c, - 0xb8, 0xb6, 0x4e, 0x95, 0x40, 0x46, 0xfb, 0x91, 0x4e, 0xa3, 0xdd, 0xa6, 0x4f, 0xf4, 0x63, 0x37, - 0x62, 0xd3, 0x9d, 0xb3, 0x89, 0x68, 0xe3, 0x43, 0x49, 0xc8, 0x77, 0xa2, 0x44, 0xf3, 0x30, 0xa6, - 0xd9, 0x98, 0x02, 0x2a, 0xc1, 0x9d, 0xbf, 0x52, 0xc1, 0xcf, 0x2c, 0x23, 0x08, 0xb2, 0x32, 0x2a, - 0x20, 0x3c, 0x7a, 0xd4, 0x80, 0xa4, 0x7d, 0xc4, 0xec, 0x08, 0x56, 0x8f, 0x79, 0x9e, 0xcc, 0xc3, - 0x87, 0x68, 0x24, 0xcc, 0x80, 0xc5, 0x8f, 0x51, 0x1f, 0x4a, 0x03, 0xc8, 0x4b, 0x30, 0xa6, 0x1b, - 0xba, 0xab, 0xab, 0xf5, 0xca, 0xb6, 0x5a, 0x57, 0x0d, 0xed, 0x20, 0x59, 0x33, 0x73, 0xf9, 0xbc, - 0xd9, 0x08, 0x3b, 0x59, 0x19, 0xe5, 0x90, 0x12, 0x03, 0xa0, 0x0b, 0x30, 0x24, 0x9a, 0x4a, 0x1d, - 0x28, 0xdb, 0x10, 0xe4, 0x81, 0x04, 0xef, 0x67, 0x93, 0x30, 0xae, 0xe0, 0xea, 0x5f, 0x0e, 0x45, - 0x7f, 0x43, 0xb1, 0x02, 0xc0, 0xa6, 0x3b, 0x71, 0xb0, 0x07, 0x18, 0x0d, 0xe2, 0x30, 0x32, 0x8c, - 0xc3, 0x82, 0xe3, 0x06, 0xc6, 0xe3, 0x46, 0x02, 0xb2, 0xc1, 0xf1, 0xf8, 0x0b, 0x1a, 0x95, 0xd0, - 0x92, 0xef, 0x89, 0x52, 0xfc, 0x13, 0xa1, 0x1d, 0x3c, 0x51, 0x8b, 0xf5, 0x76, 0x77, 0x41, 0x7f, - 0x94, 0x84, 0xc1, 0x75, 0xd5, 0x56, 0x1b, 0x0e, 0xd2, 0x5a, 0x32, 0x4d, 0xb1, 0xfd, 0xd8, 0xf2, - 0x21, 0x68, 0xbe, 0xdb, 0x11, 0x93, 0x68, 0x7e, 0xac, 0x4d, 0xa2, 0xf9, 0x16, 0x18, 0x25, 0xcb, - 0xe1, 0xc0, 0x15, 0x06, 0xa2, 0xed, 0x91, 0xd2, 0x31, 0x9f, 0x4b, 0xb8, 0x9e, 0xad, 0x96, 0x2f, - 0x05, 0xef, 0x30, 0x0c, 0x13, 0x0c, 0xdf, 0x31, 0x13, 0xf2, 0x23, 0xfe, 0xb2, 0x34, 0x50, 0x29, - 0x2b, 0xd0, 0x50, 0xaf, 0x96, 0x59, 0x01, 0x2d, 0x03, 0xda, 0xf5, 0x76, 0x46, 0x2a, 0xbe, 0x3a, - 0x09, 0xfd, 0x9d, 0x37, 0x6f, 0x4c, 0x1f, 0x63, 0xf4, 0xad, 0x38, 0xb2, 0x32, 0xee, 0x03, 0x05, - 0xb7, 0xc7, 0x01, 0x48, 0xbf, 0x2a, 0xec, 0xfa, 0x1c, 0x5b, 0xee, 0x1c, 0xbe, 0x79, 0x63, 0x7a, - 0x9c, 0x71, 0xf1, 0xeb, 0x64, 0x25, 0x43, 0x0a, 0x0b, 0xf4, 0x66, 0xdd, 0x4b, 0x30, 0x46, 0xef, - 0x04, 0x54, 0x6c, 0x5c, 0x6d, 0xd2, 0x0f, 0x56, 0xf0, 0x75, 0xcd, 0x81, 0xe7, 0x66, 0x84, 0x9d, - 0xac, 0x8c, 0x52, 0x88, 0x22, 0x00, 0x81, 0xc9, 0xf4, 0x19, 0x09, 0x90, 0x1f, 0x65, 0x14, 0xec, - 0x58, 0x64, 0x49, 0x48, 0x72, 0xff, 0x40, 0xa2, 0x2e, 0x75, 0xcf, 0xfd, 0x7d, 0x7a, 0x91, 0xfb, - 0x07, 0x26, 0xe7, 0x53, 0xbe, 0x47, 0x4e, 0x70, 0xd3, 0x69, 0x73, 0xbd, 0x71, 0x76, 0xde, 0xd4, - 0x05, 0x75, 0x8b, 0x0b, 0x3e, 0x24, 0xff, 0x1b, 0x09, 0x8e, 0xb5, 0x18, 0xb1, 0x27, 0xec, 0x5f, - 0x01, 0x64, 0x07, 0x2a, 0xf9, 0x27, 0xe6, 0x98, 0xd0, 0x7d, 0xcf, 0x89, 0x71, 0xbb, 0xc5, 0xd5, - 0xdf, 0xba, 0xa0, 0xc2, 0xee, 0x47, 0xfe, 0x73, 0x09, 0x26, 0x83, 0xcd, 0x7b, 0x1d, 0x59, 0x85, - 0x6c, 0xb0, 0x75, 0xde, 0x85, 0x7b, 0x7a, 0xe9, 0x02, 0x97, 0x3e, 0x44, 0x8f, 0x9e, 0xf3, 0x3d, - 0x04, 0xdb, 0xae, 0x7b, 0xb4, 0x67, 0x6d, 0x08, 0x99, 0xa2, 0x9e, 0x22, 0x45, 0xc7, 0xe3, 0xff, - 0x4a, 0x90, 0x5a, 0x37, 0xcd, 0x3a, 0x32, 0x61, 0xdc, 0x30, 0xdd, 0x0a, 0x31, 0x66, 0x5c, 0xad, - 0xf0, 0x75, 0x3e, 0x73, 0xbd, 0xf3, 0xfd, 0x29, 0xe9, 0xbb, 0x37, 0xa6, 0x5b, 0x59, 0x29, 0x63, - 0x86, 0xe9, 0x96, 0x28, 0x64, 0x93, 0xed, 0x02, 0xbc, 0x0b, 0x46, 0xc2, 0x8d, 0x31, 0xc7, 0xfc, - 0x7c, 0xdf, 0x8d, 0x85, 0xd9, 0xdc, 0xbc, 0x31, 0x3d, 0xe9, 0x4f, 0x52, 0x0f, 0x2c, 0x2b, 0xd9, - 0xed, 0x40, 0xeb, 0xec, 0x46, 0xd9, 0xf7, 0x3f, 0x35, 0x2d, 0x9d, 0xfc, 0x92, 0x04, 0xe0, 0x6f, - 0x76, 0xa0, 0x87, 0xe0, 0x68, 0x69, 0x6d, 0x75, 0xa1, 0xb2, 0xb1, 0x39, 0xb7, 0xb9, 0xb5, 0x51, - 0xd9, 0x5a, 0xdd, 0x58, 0x2f, 0xcf, 0x2f, 0x9d, 0x5f, 0x2a, 0x2f, 0xf8, 0x3b, 0xf2, 0x8e, 0x85, - 0x35, 0x7d, 0x47, 0xc7, 0x55, 0x74, 0x1f, 0x4c, 0x86, 0xb1, 0x49, 0xa9, 0xbc, 0x90, 0x93, 0x0a, - 0xd9, 0x6b, 0xd7, 0x67, 0xd2, 0x2c, 0xfd, 0xc3, 0x55, 0x74, 0x02, 0x0e, 0xb7, 0xe2, 0x2d, 0xad, - 0x2e, 0xe6, 0x12, 0x85, 0x91, 0x6b, 0xd7, 0x67, 0x32, 0x5e, 0x9e, 0x88, 0x64, 0x40, 0x41, 0x4c, - 0xce, 0x2f, 0x59, 0x80, 0x6b, 0xd7, 0x67, 0x06, 0x99, 0x02, 0x0b, 0xa9, 0x0f, 0x7c, 0x66, 0xea, - 0x50, 0xe9, 0x7c, 0xc7, 0x3d, 0xf7, 0x87, 0xba, 0xea, 0xee, 0xaa, 0xb7, 0x8f, 0x1e, 0xde, 0x68, - 0xff, 0x93, 0xa1, 0x8e, 0x1b, 0xed, 0x35, 0x6c, 0x60, 0x47, 0x77, 0x0e, 0xb4, 0xd1, 0xde, 0xd3, - 0xe6, 0xbd, 0xfc, 0xbb, 0x03, 0x90, 0x5d, 0x64, 0xad, 0x90, 0x81, 0xc0, 0xe8, 0x4d, 0x30, 0x68, - 0xd1, 0xc8, 0xe5, 0x9d, 0xdc, 0x75, 0x30, 0x78, 0x16, 0xdf, 0xbc, 0xeb, 0x63, 0x2c, 0xda, 0x39, - 0xfc, 0xfe, 0x08, 0xbb, 0xd6, 0xe6, 0x5f, 0xd4, 0xca, 0xf6, 0xb5, 0xc5, 0xc4, 0x5c, 0x31, 0xdf, - 0xcd, 0x89, 0xf2, 0x93, 0xd9, 0x55, 0x94, 0x4d, 0x02, 0x61, 0x17, 0xd2, 0xde, 0x27, 0xc1, 0x61, - 0x8a, 0xe5, 0xc7, 0x7e, 0x8a, 0x29, 0xd6, 0x17, 0x27, 0x3b, 0x75, 0x61, 0x59, 0x75, 0xfc, 0xeb, - 0x25, 0xec, 0x0a, 0xd9, 0x3d, 0x3c, 0xf6, 0x1e, 0x0f, 0x34, 0x1e, 0x65, 0x2b, 0x2b, 0x13, 0xf5, - 0x16, 0x4a, 0x07, 0x2d, 0x86, 0xee, 0x10, 0xa6, 0xfa, 0xdb, 0xdd, 0x0f, 0xde, 0x27, 0x7c, 0x16, - 0x86, 0x7d, 0x5f, 0xe2, 0xf0, 0x7f, 0x89, 0xd1, 0x7b, 0xec, 0x08, 0x12, 0xa3, 0xf7, 0x4b, 0x70, - 0xd8, 0x4f, 0x20, 0x82, 0x6c, 0xd9, 0xbf, 0x0e, 0x79, 0xb0, 0x8f, 0xb5, 0x57, 0x54, 0x39, 0x6d, - 0xf9, 0xca, 0xca, 0x64, 0xb3, 0x95, 0x94, 0xac, 0xfa, 0x46, 0x82, 0x9e, 0xd5, 0xc9, 0x8b, 0xaf, - 0xe3, 0xf5, 0xee, 0x9a, 0xc3, 0x0c, 0xd8, 0xbf, 0x33, 0xb0, 0x4c, 0xdb, 0xc5, 0x55, 0xba, 0x07, - 0x98, 0x56, 0xbc, 0xb2, 0xbc, 0x0a, 0xa8, 0x75, 0x70, 0xa3, 0x77, 0x26, 0x33, 0xfe, 0x9d, 0xc9, - 0x49, 0x18, 0x08, 0xde, 0x2a, 0x64, 0x85, 0x62, 0xfa, 0x03, 0x3c, 0x7c, 0xde, 0xf2, 0x39, 0xff, - 0xaf, 0x12, 0x70, 0x32, 0x78, 0x22, 0xf5, 0x52, 0x13, 0xdb, 0xfb, 0xde, 0x14, 0xb5, 0xd4, 0x9a, - 0x6e, 0x04, 0x9f, 0x1d, 0x1d, 0x0b, 0x06, 0x7c, 0x8a, 0x2b, 0xf4, 0x24, 0x1b, 0x30, 0xbc, 0xae, - 0xd6, 0xb0, 0x82, 0x5f, 0x6a, 0x62, 0xc7, 0x6d, 0x73, 0xaf, 0xfd, 0x08, 0x0c, 0x9a, 0x3b, 0x3b, - 0xe2, 0x14, 0x3d, 0xa5, 0xf0, 0x12, 0xe9, 0x72, 0x5d, 0x6f, 0xe8, 0xec, 0x02, 0x5a, 0x4a, 0x61, - 0x05, 0x34, 0x0d, 0xc3, 0x9a, 0xd9, 0x34, 0xf8, 0x8c, 0xcb, 0xa7, 0xc4, 0x37, 0x27, 0x9a, 0x06, - 0x9b, 0x71, 0xf2, 0x33, 0x90, 0x65, 0xed, 0xf1, 0x88, 0x7b, 0x0c, 0xd2, 0xf4, 0x06, 0x97, 0xdf, - 0xea, 0x10, 0x29, 0x5f, 0x64, 0x77, 0xe0, 0x19, 0x17, 0xd6, 0x30, 0x2b, 0x94, 0x4a, 0x1d, 0x55, - 0x79, 0x22, 0xde, 0x35, 0x30, 0x45, 0x79, 0x6a, 0xfc, 0xad, 0x01, 0x38, 0xcc, 0x0f, 0x05, 0x55, - 0x4b, 0x3f, 0xb5, 0xeb, 0xba, 0xe2, 0x61, 0x12, 0xf0, 0xec, 0x5a, 0xb5, 0x74, 0x79, 0x1f, 0x52, - 0x17, 0x5c, 0xd7, 0x42, 0x27, 0x61, 0xc0, 0x6e, 0xd6, 0xb1, 0xd8, 0x64, 0xf2, 0x8e, 0x01, 0x54, - 0x4b, 0x9f, 0x25, 0x08, 0x4a, 0xb3, 0x8e, 0x15, 0x86, 0x82, 0xca, 0x30, 0xbd, 0xd3, 0xac, 0xd7, - 0xf7, 0x2b, 0x55, 0x4c, 0xff, 0x5d, 0x90, 0xf7, 0xc1, 0x7d, 0x7c, 0xd5, 0x52, 0xc5, 0x67, 0xfb, - 0x88, 0x6e, 0x8e, 0x53, 0xb4, 0x05, 0x8a, 0x25, 0x3e, 0xb6, 0x5f, 0x16, 0x38, 0xf2, 0xef, 0x27, - 0x20, 0x2d, 0x58, 0xd3, 0x4b, 0xe9, 0xb8, 0x8e, 0x35, 0xd7, 0x14, 0x87, 0x34, 0x5e, 0x19, 0x21, - 0x48, 0xd6, 0xf8, 0x10, 0x65, 0x2e, 0x1c, 0x52, 0x48, 0x81, 0xc0, 0xbc, 0xa7, 0x02, 0x04, 0x66, - 0x35, 0xc9, 0xa8, 0xa5, 0x2c, 0x53, 0xac, 0x06, 0x2f, 0x1c, 0x52, 0x68, 0x09, 0xe5, 0x61, 0x90, - 0xcc, 0x0c, 0x97, 0x7d, 0x0b, 0x91, 0xc0, 0x79, 0x19, 0x1d, 0x81, 0x01, 0x4b, 0x75, 0x35, 0x76, - 0x8b, 0x8f, 0x54, 0xb0, 0x22, 0x7a, 0x02, 0x06, 0xd9, 0x1b, 0xd4, 0xe8, 0xff, 0xe2, 0x20, 0xca, - 0x60, 0x1f, 0xfb, 0x22, 0x72, 0xaf, 0xab, 0xae, 0x8b, 0x6d, 0x83, 0x30, 0x64, 0xe8, 0x08, 0x41, - 0x6a, 0xdb, 0xac, 0xee, 0xf3, 0xff, 0x0f, 0x42, 0x7f, 0xf3, 0x7f, 0x48, 0x40, 0xed, 0xa1, 0x42, - 0x2b, 0xd9, 0xbf, 0x45, 0xca, 0x0a, 0x60, 0x89, 0x20, 0x95, 0x61, 0x42, 0xad, 0x56, 0x75, 0xf6, - 0xaf, 0x3a, 0x2a, 0xdb, 0x3a, 0xf5, 0x10, 0x0e, 0xfd, 0xa7, 0x57, 0x9d, 0xc6, 0x02, 0xf9, 0x04, - 0x25, 0x8e, 0x5f, 0xca, 0xc0, 0x90, 0xc5, 0x84, 0x92, 0xcf, 0xc1, 0x78, 0x8b, 0xa4, 0x44, 0xbe, - 0x3d, 0xdd, 0xa8, 0x8a, 0xf7, 0x13, 0xe4, 0x37, 0x81, 0xd1, 0x0f, 0xf6, 0xb1, 0xe3, 0x2f, 0xfa, - 0xbb, 0xf4, 0x9e, 0xce, 0x6f, 0xcd, 0x46, 0x03, 0x6f, 0xcd, 0x54, 0x4b, 0x2f, 0x65, 0x28, 0x7f, - 0xfe, 0xc2, 0x6c, 0x8e, 0x57, 0xb0, 0xd7, 0x65, 0xb3, 0xa6, 0x5d, 0x23, 0x51, 0x5a, 0x44, 0x5f, - 0x52, 0xa5, 0x5a, 0xba, 0x43, 0xcd, 0xd1, 0xff, 0x80, 0xa0, 0x73, 0x2e, 0xf0, 0x9b, 0xbe, 0x3b, - 0x4b, 0x2d, 0xce, 0xad, 0x2f, 0x79, 0x76, 0xfc, 0x95, 0x04, 0x1c, 0x0f, 0xd8, 0x71, 0x00, 0xb9, - 0xd5, 0x9c, 0x0b, 0xed, 0x2d, 0xbe, 0x87, 0xf7, 0x66, 0x17, 0x21, 0x45, 0xf0, 0x51, 0xcc, 0xbf, - 0x0b, 0xc8, 0xff, 0xda, 0xd7, 0xff, 0x99, 0x1c, 0x3e, 0x28, 0x0b, 0x8d, 0x0a, 0x65, 0x52, 0x7a, - 0x7f, 0xef, 0xfa, 0xcb, 0xf9, 0xdf, 0x4e, 0x74, 0x6e, 0x9d, 0x1a, 0xa3, 0x3a, 0xfc, 0xf6, 0x19, - 0x90, 0x3b, 0xa4, 0x3c, 0xcc, 0x63, 0x76, 0x4f, 0xa2, 0xfa, 0x70, 0xc7, 0x9d, 0x9e, 0x1c, 0x74, - 0x1b, 0xc1, 0x1e, 0xd3, 0xb1, 0xab, 0x70, 0xe4, 0x39, 0xd2, 0xb6, 0xbf, 0x32, 0x17, 0x8e, 0xfd, - 0x88, 0x77, 0x80, 0x28, 0xf1, 0xff, 0x39, 0x26, 0x0e, 0x07, 0xc1, 0x97, 0x8f, 0x2f, 0x10, 0xef, - 0x9b, 0xed, 0x18, 0x2f, 0x66, 0x03, 0xc1, 0x42, 0x09, 0x50, 0xca, 0xbf, 0x22, 0xc1, 0xd1, 0x96, - 0xa6, 0xb9, 0x8f, 0x5f, 0x6c, 0xf3, 0x3a, 0xe2, 0x40, 0x99, 0xcd, 0x62, 0x1b, 0x61, 0xef, 0x8f, - 0x15, 0x96, 0x49, 0x11, 0x92, 0xf6, 0x69, 0x38, 0x1c, 0x16, 0x56, 0xa8, 0xe9, 0x5e, 0x18, 0x0d, - 0x6f, 0x42, 0x73, 0x75, 0x8d, 0x84, 0xb6, 0xa1, 0xe5, 0x4a, 0x54, 0xcf, 0x5e, 0x5f, 0xcb, 0x90, - 0xf1, 0x50, 0x79, 0x0a, 0xdc, 0x73, 0x57, 0x7d, 0x4a, 0xf9, 0x23, 0x12, 0xcc, 0x84, 0x5b, 0x08, - 0x24, 0x43, 0xfd, 0x09, 0x7b, 0xcb, 0x86, 0xf8, 0x75, 0x09, 0xee, 0xea, 0x22, 0x13, 0x57, 0xc0, - 0xcb, 0x30, 0x19, 0xd8, 0x09, 0x10, 0x2e, 0x5c, 0x0c, 0xfb, 0xc9, 0xf8, 0x34, 0xd4, 0x5b, 0xf8, - 0xde, 0x41, 0x94, 0xf2, 0xb9, 0x3f, 0x98, 0x9e, 0x68, 0xad, 0x73, 0x94, 0x89, 0xd6, 0xd5, 0xfb, - 0x2d, 0xb4, 0x8f, 0x57, 0x25, 0x78, 0x20, 0xdc, 0xd5, 0x36, 0xf9, 0xec, 0x1b, 0x35, 0x0e, 0xff, - 0x51, 0x82, 0x93, 0xbd, 0x08, 0xc7, 0x07, 0x64, 0x1b, 0x26, 0xfc, 0x4c, 0x3b, 0x3a, 0x1e, 0x7d, - 0xe5, 0xef, 0xcc, 0x4a, 0x91, 0xc7, 0xed, 0x36, 0x28, 0xde, 0xe2, 0x13, 0x2b, 0x38, 0xe4, 0x9e, - 0x92, 0xc3, 0x1b, 0xc8, 0x42, 0xc9, 0xa1, 0x2d, 0xe4, 0x36, 0x63, 0x91, 0x68, 0x33, 0x16, 0x7e, - 0x6a, 0x2e, 0x5f, 0xe6, 0x7e, 0xab, 0xcd, 0x1e, 0xdc, 0xdb, 0x61, 0xa2, 0x8d, 0x29, 0xf3, 0x59, - 0xdd, 0x87, 0x25, 0x2b, 0xa8, 0xd5, 0x58, 0xe5, 0x7d, 0x98, 0xa6, 0xed, 0xb6, 0x51, 0xf4, 0xed, - 0xee, 0x72, 0x83, 0xfb, 0x96, 0xb6, 0x4d, 0xf3, 0xbe, 0x2f, 0xc1, 0x20, 0x1b, 0x67, 0xde, 0xdd, - 0x03, 0x18, 0x0a, 0x67, 0x20, 0xff, 0x82, 0xf0, 0x65, 0x0b, 0x42, 0xec, 0xf6, 0x73, 0xa8, 0x97, - 0xbe, 0xde, 0xa2, 0x39, 0x14, 0x50, 0xc6, 0x37, 0x85, 0x57, 0x6b, 0x2f, 0x1d, 0x57, 0x87, 0x76, - 0xcb, 0xbc, 0x1a, 0xd3, 0xcd, 0xed, 0x75, 0x5f, 0xbf, 0x24, 0xdc, 0x97, 0xd7, 0xa7, 0x18, 0xf7, - 0xf5, 0xc6, 0xa8, 0xde, 0x73, 0x64, 0x31, 0x62, 0xfe, 0x79, 0x74, 0x64, 0xdf, 0x97, 0xe0, 0x18, - 0xed, 0x5b, 0x70, 0x23, 0xa2, 0x5f, 0x95, 0x3f, 0x04, 0xc8, 0xb1, 0xb5, 0x4a, 0xdb, 0xd9, 0x9d, - 0x73, 0x6c, 0xed, 0x52, 0x28, 0xbe, 0x3c, 0x04, 0xa8, 0x1a, 0xda, 0x6e, 0xa2, 0xd8, 0xec, 0x62, - 0x5e, 0xae, 0x1a, 0xd8, 0xcd, 0x68, 0x33, 0x9c, 0xa9, 0x5b, 0x30, 0x9c, 0xdf, 0x90, 0xa0, 0xd0, - 0xae, 0xcb, 0x7c, 0xf8, 0x74, 0x38, 0x12, 0x3a, 0x24, 0x88, 0x8e, 0xe0, 0x43, 0xbd, 0x6c, 0xe5, - 0x44, 0xa6, 0xd1, 0x61, 0x1b, 0xdf, 0xee, 0x3c, 0x60, 0x3a, 0x6c, 0xa1, 0xad, 0x99, 0xf5, 0x1b, - 0x36, 0x7d, 0xbe, 0xd8, 0xe2, 0x57, 0xff, 0x5c, 0xe4, 0xde, 0x57, 0x61, 0xaa, 0x83, 0xd4, 0xb7, - 0x3b, 0xee, 0xed, 0x76, 0x1c, 0xcc, 0x5b, 0x9d, 0xbe, 0x3f, 0xce, 0x67, 0x42, 0xf8, 0xd2, 0x77, - 0x60, 0x2d, 0xd6, 0xee, 0xd5, 0x98, 0xfc, 0x56, 0xb8, 0xa3, 0x2d, 0x15, 0x97, 0xad, 0x08, 0xa9, - 0x5d, 0xdd, 0x71, 0xb9, 0x58, 0xf7, 0x75, 0x12, 0x2b, 0x42, 0x4d, 0x69, 0x64, 0x04, 0x39, 0xca, - 0x7a, 0xdd, 0x34, 0xeb, 0x5c, 0x0c, 0xf9, 0x22, 0x8c, 0x07, 0x60, 0xbc, 0x91, 0xb3, 0x90, 0xb2, - 0x4c, 0xfe, 0x45, 0x84, 0xe1, 0xd3, 0xc7, 0x3b, 0xee, 0xde, 0x9b, 0x66, 0x9d, 0x77, 0x9b, 0xe2, - 0xcb, 0x93, 0x80, 0x18, 0x33, 0xba, 0x91, 0x2f, 0x9a, 0xd8, 0x80, 0x89, 0x10, 0x94, 0x37, 0xf2, - 0x23, 0x1d, 0x12, 0x9c, 0xfe, 0xee, 0x61, 0x18, 0xa0, 0x5c, 0xd1, 0xc7, 0x25, 0x80, 0xc0, 0x21, - 0xf4, 0x6c, 0x27, 0x36, 0xed, 0xd7, 0xc4, 0x85, 0x53, 0x3d, 0xe3, 0xf3, 0x9c, 0xed, 0xe4, 0x7b, - 0xfe, 0xdd, 0xb7, 0x3f, 0x9a, 0xb8, 0x07, 0xc9, 0xa7, 0x3a, 0xac, 0xc6, 0x03, 0xf3, 0xe5, 0xb3, - 0xa1, 0xe7, 0xf6, 0x0f, 0xf7, 0xd6, 0x94, 0x90, 0x6c, 0xb6, 0x57, 0x74, 0x2e, 0xd8, 0x39, 0x2a, - 0xd8, 0x19, 0xf4, 0x58, 0xbc, 0x60, 0xa7, 0xde, 0x19, 0x9e, 0x34, 0xef, 0x46, 0xbf, 0x2b, 0xc1, - 0x64, 0xbb, 0x25, 0x1d, 0x7a, 0xb2, 0x37, 0x29, 0x5a, 0x53, 0x8a, 0xc2, 0x53, 0x07, 0xa0, 0xe4, - 0x5d, 0x59, 0xa4, 0x5d, 0x99, 0x43, 0xcf, 0x1c, 0xa0, 0x2b, 0xa7, 0x82, 0xfb, 0xfb, 0xff, 0x5b, - 0x82, 0x3b, 0xbb, 0xae, 0x90, 0xd0, 0x5c, 0x6f, 0x52, 0x76, 0xc9, 0x9d, 0x0a, 0xa5, 0x1f, 0x85, - 0x05, 0xef, 0xf1, 0x73, 0xb4, 0xc7, 0x17, 0xd1, 0xd2, 0x41, 0x7a, 0xdc, 0xf6, 0x10, 0x05, 0xfd, - 0x76, 0xf8, 0x32, 0x63, 0x77, 0x73, 0x6a, 0x59, 0x78, 0xc4, 0x4c, 0x8c, 0xd6, 0xa4, 0x56, 0x7e, - 0x81, 0x76, 0x41, 0x41, 0xeb, 0x3f, 0xe2, 0xa0, 0x9d, 0x7a, 0x67, 0xd8, 0xf1, 0xbf, 0x1b, 0xfd, - 0x2f, 0xa9, 0xfd, 0xdd, 0xc4, 0x27, 0xba, 0x8a, 0xd8, 0x79, 0x51, 0x55, 0x78, 0xb2, 0x7f, 0x42, - 0xde, 0xc9, 0x06, 0xed, 0x64, 0x0d, 0xe1, 0x5b, 0xdd, 0xc9, 0xb6, 0x83, 0x88, 0xbe, 0x26, 0xc1, - 0x64, 0xbb, 0x35, 0x49, 0xcc, 0xb4, 0xec, 0xb2, 0xc8, 0x8a, 0x99, 0x96, 0xdd, 0x16, 0x40, 0xf2, - 0x9b, 0x68, 0xe7, 0xcf, 0xa2, 0xc7, 0x3b, 0x75, 0xbe, 0xeb, 0x28, 0x92, 0xb9, 0xd8, 0x35, 0xc9, - 0x8f, 0x99, 0x8b, 0xbd, 0xac, 0x63, 0x62, 0xe6, 0x62, 0x4f, 0x6b, 0x8c, 0xf8, 0xb9, 0xe8, 0xf5, - 0xac, 0xc7, 0x61, 0x74, 0xd0, 0x57, 0x24, 0x18, 0x09, 0x65, 0xc4, 0xe8, 0xd1, 0xae, 0x82, 0xb6, - 0x5b, 0x30, 0x14, 0x4e, 0xf7, 0x43, 0xc2, 0xfb, 0xb2, 0x44, 0xfb, 0x32, 0x8f, 0xe6, 0x0e, 0xd2, - 0x97, 0xf0, 0x59, 0xe9, 0x37, 0x24, 0x98, 0x68, 0x93, 0x65, 0xc6, 0xcc, 0xc2, 0xce, 0x49, 0x73, - 0xe1, 0xc9, 0xfe, 0x09, 0x79, 0xaf, 0xce, 0xd3, 0x5e, 0xbd, 0x05, 0x3d, 0x7d, 0x90, 0x5e, 0x05, - 0xe2, 0xf3, 0x0d, 0xff, 0xde, 0x55, 0xa0, 0x1d, 0x74, 0xb6, 0x4f, 0xc1, 0x44, 0x87, 0x9e, 0xe8, - 0x9b, 0x8e, 0xf7, 0xe7, 0x79, 0xda, 0x9f, 0xe7, 0xd0, 0xda, 0x8f, 0xd6, 0x9f, 0xd6, 0xb0, 0xfe, - 0x85, 0xd6, 0x47, 0x87, 0xdd, 0xad, 0xa8, 0x6d, 0xb2, 0x5a, 0x78, 0xac, 0x2f, 0x1a, 0xde, 0xa9, - 0x27, 0x69, 0xa7, 0x4e, 0xa3, 0x47, 0x3a, 0x75, 0x2a, 0x70, 0x9f, 0x4f, 0x37, 0x76, 0xcc, 0x53, - 0xef, 0x64, 0x29, 0xf0, 0xbb, 0xd1, 0x4f, 0x8b, 0x8b, 0x4d, 0x27, 0xba, 0xb6, 0x1b, 0xc8, 0x63, - 0x0b, 0x0f, 0xf4, 0x80, 0xc9, 0xe5, 0xba, 0x87, 0xca, 0x35, 0x85, 0x8e, 0x77, 0x92, 0x8b, 0xe4, - 0xb2, 0xe8, 0x83, 0x92, 0x77, 0xfd, 0xf2, 0x64, 0x77, 0xde, 0xc1, 0x64, 0xb7, 0xf0, 0x60, 0x4f, - 0xb8, 0x5c, 0x92, 0xfb, 0xa8, 0x24, 0x33, 0x68, 0xaa, 0xa3, 0x24, 0x2c, 0xf5, 0xbd, 0xd5, 0x37, - 0x07, 0xae, 0x1d, 0x85, 0xe9, 0x0e, 0x2d, 0xba, 0x57, 0x63, 0xce, 0xb8, 0xba, 0xbc, 0xbd, 0x8d, - 0x7d, 0x5b, 0xdb, 0xe1, 0x35, 0xef, 0xc1, 0x5f, 0xdc, 0xf6, 0x76, 0x20, 0xf6, 0x6f, 0x53, 0x80, - 0x56, 0x9c, 0xda, 0xbc, 0x8d, 0xd9, 0xff, 0xd9, 0xe3, 0xb3, 0x3c, 0xf2, 0xa8, 0x4c, 0xfa, 0x91, - 0x1e, 0x95, 0xad, 0x84, 0x9e, 0x69, 0x25, 0xfa, 0x7b, 0x0a, 0xda, 0xf3, 0x5b, 0xad, 0xe4, 0x8f, - 0xe5, 0xad, 0x56, 0xfb, 0xab, 0xdc, 0xa9, 0x5b, 0xf7, 0xe6, 0x63, 0xe0, 0xa0, 0xef, 0x5e, 0xf8, - 0x13, 0xcc, 0xc1, 0x2e, 0x4f, 0x30, 0xf3, 0x1d, 0xdf, 0x59, 0x72, 0x6a, 0x74, 0x46, 0x7c, 0x33, - 0x78, 0xa8, 0xb7, 0x9b, 0xb0, 0xfc, 0xa3, 0xc2, 0xfe, 0x16, 0xc2, 0x71, 0x28, 0xb4, 0x9a, 0x93, - 0x37, 0xa9, 0x3f, 0x9a, 0x84, 0xdc, 0x8a, 0x53, 0x2b, 0x57, 0x75, 0xf7, 0x36, 0xd9, 0xda, 0x33, - 0x9d, 0xdf, 0xd1, 0xa0, 0x9b, 0x37, 0xa6, 0x47, 0x99, 0x4e, 0xbb, 0x68, 0xb2, 0x01, 0x63, 0x91, - 0xd7, 0xcb, 0xdc, 0xb2, 0x16, 0x0e, 0xf2, 0x88, 0x3a, 0xc2, 0x4a, 0xa6, 0xcf, 0x1e, 0x02, 0xf6, - 0x8d, 0xae, 0xb6, 0x37, 0x66, 0x66, 0x50, 0x17, 0x6e, 0xe7, 0xa3, 0x43, 0x7f, 0xcc, 0x0a, 0x90, - 0x8f, 0x0e, 0x8a, 0x37, 0x62, 0xdf, 0x91, 0x60, 0x78, 0xc5, 0x11, 0xa9, 0x20, 0xfe, 0x09, 0x7d, - 0xf2, 0xf4, 0x84, 0xf7, 0xe9, 0xd7, 0x64, 0x6f, 0x76, 0x2b, 0x3e, 0x07, 0xeb, 0x2b, 0xe1, 0x30, - 0x4c, 0x04, 0xfa, 0xe9, 0xf5, 0xff, 0x77, 0x12, 0xd4, 0x3f, 0x96, 0x70, 0x4d, 0x37, 0xbc, 0x2c, - 0x12, 0xff, 0x45, 0x7d, 0xd0, 0xe1, 0xeb, 0x39, 0x75, 0x50, 0x3d, 0xef, 0x51, 0x07, 0x11, 0xd1, - 0xa7, 0xb7, 0xf1, 0xb5, 0xd2, 0xfa, 0xdc, 0x48, 0xea, 0xe3, 0x4b, 0x3e, 0x91, 0x47, 0x45, 0xf2, - 0xeb, 0x12, 0x8c, 0xac, 0x38, 0xb5, 0x2d, 0xa3, 0xfa, 0xff, 0xbd, 0xfd, 0xee, 0xc0, 0xe1, 0x50, - 0x4f, 0x6f, 0x93, 0x4a, 0x4f, 0xbf, 0x9a, 0x82, 0xe4, 0x8a, 0x53, 0x43, 0x2f, 0xc1, 0x58, 0x34, - 0x69, 0xe8, 0x98, 0x0b, 0xb6, 0x46, 0x84, 0xce, 0xeb, 0xb5, 0xce, 0xd1, 0x03, 0xed, 0xc1, 0x48, - 0x38, 0x72, 0x9c, 0xe8, 0xc2, 0x24, 0x84, 0x59, 0x78, 0xa4, 0x57, 0x4c, 0xaf, 0xb1, 0x77, 0x40, - 0xda, 0x73, 0x7a, 0x77, 0x77, 0xa1, 0x16, 0x48, 0x9d, 0xb3, 0xdb, 0x36, 0x6e, 0x85, 0x68, 0x2f, - 0xea, 0x52, 0xba, 0x69, 0x2f, 0x82, 0xdb, 0x55, 0x7b, 0x9d, 0xa6, 0xd6, 0x36, 0x40, 0x60, 0x1e, - 0xdc, 0xdb, 0x85, 0x83, 0x8f, 0x56, 0x78, 0xb8, 0x27, 0x34, 0xef, 0xd0, 0xe9, 0x16, 0x27, 0xe3, - 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x2a, 0x2c, 0x38, 0xdd, 0x94, 0x00, 0x00, -======= - // 9808 bytes of a gzipped FileDescriptorSet + // 9849 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x5c, 0xd7, 0x75, 0x18, 0xde, 0x7e, 0x00, 0xbb, 0x07, 0x0b, 0x60, 0x71, 0x01, 0x92, 0xcb, 0x25, 0x09, 0x40, 0x4f, 0x5f, 0x14, 0x25, 0x81, 0x12, 0x25, 0x52, 0xd2, 0xd2, 0xb6, 0xbc, 0x8b, 0x5d, 0x82, 0x10, 0xf1, 0xa5, 0x07, 0x80, 0x92, 0x65, 0xa7, 0x3b, 0x0f, 0xbb, 0x17, 0x8b, 0x27, 0xec, 0xbe, 0xf7, - 0xf4, 0xde, 0x5b, 0x12, 0xa0, 0xed, 0x8e, 0x62, 0xbb, 0xae, 0xcd, 0x4c, 0x1a, 0xbb, 0xee, 0x34, - 0xb6, 0x6c, 0xba, 0x76, 0x9c, 0xd6, 0xa9, 0xe3, 0x36, 0x71, 0xec, 0xba, 0x4d, 0xdb, 0x99, 0xda, - 0x9d, 0xa6, 0xb1, 0xdd, 0x26, 0x63, 0xb7, 0x99, 0x36, 0xcd, 0xb4, 0x74, 0x2a, 0x7b, 0x52, 0xd5, - 0x75, 0x1b, 0x87, 0x71, 0xda, 0x74, 0x3c, 0x9d, 0x76, 0xee, 0xd7, 0xfb, 0xda, 0x4f, 0x40, 0xa4, - 0xe5, 0x34, 0xf9, 0x85, 0xbd, 0xe7, 0x9e, 0x73, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0x5f, - 0x0f, 0xf0, 0x85, 0xf3, 0x30, 0x53, 0x33, 0x8c, 0x5a, 0x1d, 0x9f, 0x36, 0x2d, 0xc3, 0x31, 0x36, + 0xf4, 0xde, 0x5b, 0x12, 0x90, 0xed, 0x8e, 0xfc, 0x51, 0xd7, 0x66, 0x26, 0x8d, 0x5d, 0x77, 0x1a, + 0x5b, 0x36, 0x5d, 0x39, 0x4e, 0xeb, 0xd4, 0x71, 0x1b, 0x3b, 0x76, 0xdd, 0xa6, 0xed, 0x4c, 0xed, + 0x4e, 0xd3, 0xd8, 0x6e, 0x93, 0xb1, 0xdb, 0x4c, 0x9b, 0x66, 0x52, 0x3a, 0x95, 0x3d, 0xae, 0xe2, + 0xba, 0x8d, 0xc3, 0xba, 0xd3, 0x74, 0x3c, 0x9d, 0x76, 0xee, 0xd7, 0xfb, 0xda, 0x4f, 0x40, 0xa4, + 0xe5, 0x34, 0xfd, 0x85, 0xbd, 0xe7, 0x9e, 0x73, 0xee, 0xb9, 0xe7, 0x9e, 0x73, 0xee, 0xb9, 0x5f, + 0x0f, 0xf0, 0xc5, 0xf3, 0x30, 0x53, 0x33, 0x8c, 0x5a, 0x1d, 0x9f, 0x36, 0x2d, 0xc3, 0x31, 0x36, 0x9b, 0x5b, 0xa7, 0xab, 0xd8, 0xae, 0x58, 0x9a, 0xe9, 0x18, 0xd6, 0x2c, 0x85, 0xa1, 0x31, 0x86, 0x31, 0x2b, 0x30, 0xe4, 0x25, 0x18, 0xbf, 0xa0, 0xd5, 0x71, 0xd1, 0x45, 0x5c, 0xc3, 0x0e, 0x7a, - 0x12, 0x62, 0x5b, 0x5a, 0x1d, 0x67, 0xa4, 0x99, 0xe8, 0xc9, 0xe1, 0x33, 0xf7, 0xcc, 0x86, 0x88, - 0x66, 0x83, 0x14, 0xab, 0x04, 0xac, 0x50, 0x0a, 0xf9, 0xbb, 0x31, 0x98, 0x68, 0x53, 0x8b, 0x10, + 0x1c, 0x62, 0x5b, 0x5a, 0x1d, 0x67, 0xa4, 0x99, 0xe8, 0xc9, 0xe1, 0x33, 0x77, 0xcd, 0x86, 0x88, + 0x66, 0x83, 0x14, 0xab, 0x04, 0xac, 0x50, 0x0a, 0xf9, 0x7b, 0x31, 0x98, 0x68, 0x53, 0x8b, 0x10, 0xc4, 0x74, 0xb5, 0x41, 0x38, 0x4a, 0x27, 0x93, 0x0a, 0xfd, 0x8d, 0x32, 0x30, 0x64, 0xaa, 0x95, 0x1d, 0xb5, 0x86, 0x33, 0x11, 0x0a, 0x16, 0x45, 0x34, 0x05, 0x50, 0xc5, 0x26, 0xd6, 0xab, 0x58, - 0xaf, 0xec, 0x65, 0xa2, 0x33, 0xd1, 0x93, 0x49, 0xc5, 0x07, 0x41, 0x0f, 0xc2, 0xb8, 0xd9, 0xdc, + 0xaf, 0xec, 0x65, 0xa2, 0x33, 0xd1, 0x93, 0x49, 0xc5, 0x07, 0x41, 0xf7, 0xc3, 0xb8, 0xd9, 0xdc, 0xac, 0x6b, 0x95, 0xb2, 0x0f, 0x0d, 0x66, 0xa2, 0x27, 0xe3, 0x4a, 0x9a, 0x55, 0x14, 0x3d, 0xe4, - 0xfb, 0x61, 0xec, 0x2a, 0x56, 0x77, 0xfc, 0xa8, 0xc3, 0x14, 0x75, 0x94, 0x80, 0x7d, 0x88, 0x73, - 0x90, 0x6a, 0x60, 0xdb, 0x56, 0x6b, 0xb8, 0xec, 0xec, 0x99, 0x38, 0x13, 0xa3, 0xda, 0xcf, 0xb4, - 0x68, 0x1f, 0xd6, 0x7c, 0x98, 0x53, 0xad, 0xef, 0x99, 0x18, 0xe5, 0x21, 0x89, 0xf5, 0x66, 0x83, - 0x71, 0x88, 0x77, 0xb0, 0x5f, 0x49, 0x6f, 0x36, 0xc2, 0x5c, 0x12, 0x84, 0x8c, 0xb3, 0x18, 0xb2, - 0xb1, 0x75, 0x45, 0xab, 0xe0, 0xcc, 0x20, 0x65, 0x70, 0x7f, 0x0b, 0x83, 0x35, 0x56, 0x1f, 0xe6, - 0x21, 0xe8, 0xd0, 0x1c, 0x24, 0xf1, 0xae, 0x83, 0x75, 0x5b, 0x33, 0xf4, 0xcc, 0x10, 0x65, 0x72, - 0x6f, 0x9b, 0x5e, 0xc4, 0xf5, 0x6a, 0x98, 0x85, 0x47, 0x87, 0xce, 0xc1, 0x90, 0x61, 0x3a, 0x9a, - 0xa1, 0xdb, 0x99, 0xc4, 0x8c, 0x74, 0x72, 0xf8, 0xcc, 0xf1, 0xb6, 0x8e, 0xb0, 0xc2, 0x70, 0x14, - 0x81, 0x8c, 0x16, 0x20, 0x6d, 0x1b, 0x4d, 0xab, 0x82, 0xcb, 0x15, 0xa3, 0x8a, 0xcb, 0x9a, 0xbe, - 0x65, 0x64, 0x92, 0x94, 0xc1, 0x74, 0xab, 0x22, 0x14, 0x71, 0xce, 0xa8, 0xe2, 0x05, 0x7d, 0xcb, - 0x50, 0x46, 0xed, 0x40, 0x19, 0x1d, 0x86, 0x41, 0x7b, 0x4f, 0x77, 0xd4, 0xdd, 0x4c, 0x8a, 0x7a, - 0x08, 0x2f, 0xc9, 0xbf, 0x3e, 0x08, 0x63, 0xfd, 0xb8, 0xd8, 0x79, 0x88, 0x6f, 0x11, 0x2d, 0x33, - 0x91, 0xfd, 0xd8, 0x80, 0xd1, 0x04, 0x8d, 0x38, 0x78, 0x40, 0x23, 0xe6, 0x61, 0x58, 0xc7, 0xb6, - 0x83, 0xab, 0xcc, 0x23, 0xa2, 0x7d, 0xfa, 0x14, 0x30, 0xa2, 0x56, 0x97, 0x8a, 0x1d, 0xc8, 0xa5, - 0x9e, 0x87, 0x31, 0x57, 0xa4, 0xb2, 0xa5, 0xea, 0x35, 0xe1, 0x9b, 0xa7, 0x7b, 0x49, 0x32, 0x5b, - 0x12, 0x74, 0x0a, 0x21, 0x53, 0x46, 0x71, 0xa0, 0x8c, 0x8a, 0x00, 0x86, 0x8e, 0x8d, 0xad, 0x72, - 0x15, 0x57, 0xea, 0x99, 0x44, 0x07, 0x2b, 0xad, 0x10, 0x94, 0x16, 0x2b, 0x19, 0x0c, 0x5a, 0xa9, - 0xa3, 0xa7, 0x3c, 0x57, 0x1b, 0xea, 0xe0, 0x29, 0x4b, 0x6c, 0x90, 0xb5, 0x78, 0xdb, 0x06, 0x8c, - 0x5a, 0x98, 0xf8, 0x3d, 0xae, 0x72, 0xcd, 0x92, 0x54, 0x88, 0xd9, 0x9e, 0x9a, 0x29, 0x9c, 0x8c, - 0x29, 0x36, 0x62, 0xf9, 0x8b, 0xe8, 0x6e, 0x70, 0x01, 0x65, 0xea, 0x56, 0x40, 0xa3, 0x50, 0x4a, - 0x00, 0x97, 0xd5, 0x06, 0xce, 0x5e, 0x83, 0xd1, 0xa0, 0x79, 0xd0, 0x24, 0xc4, 0x6d, 0x47, 0xb5, - 0x1c, 0xea, 0x85, 0x71, 0x85, 0x15, 0x50, 0x1a, 0xa2, 0x58, 0xaf, 0xd2, 0x28, 0x17, 0x57, 0xc8, - 0x4f, 0xf4, 0x56, 0x4f, 0xe1, 0x28, 0x55, 0xf8, 0xbe, 0xd6, 0x1e, 0x0d, 0x70, 0x0e, 0xeb, 0x9d, - 0x7d, 0x02, 0x46, 0x02, 0x0a, 0xf4, 0xdb, 0xb4, 0xfc, 0x2e, 0x38, 0xd4, 0x96, 0x35, 0x7a, 0x1e, - 0x26, 0x9b, 0xba, 0xa6, 0x3b, 0xd8, 0x32, 0x2d, 0x4c, 0x3c, 0x96, 0x35, 0x95, 0xf9, 0x2f, 0x43, - 0x1d, 0x7c, 0x6e, 0xc3, 0x8f, 0xcd, 0xb8, 0x28, 0x13, 0xcd, 0x56, 0xe0, 0xa9, 0x64, 0xe2, 0xb5, - 0xa1, 0xf4, 0xcb, 0x2f, 0xbf, 0xfc, 0x72, 0x44, 0xfe, 0xea, 0x20, 0x4c, 0xb6, 0x1b, 0x33, 0x6d, - 0x87, 0xef, 0x61, 0x18, 0xd4, 0x9b, 0x8d, 0x4d, 0x6c, 0x51, 0x23, 0xc5, 0x15, 0x5e, 0x42, 0x79, - 0x88, 0xd7, 0xd5, 0x4d, 0x5c, 0xcf, 0xc4, 0x66, 0xa4, 0x93, 0xa3, 0x67, 0x1e, 0xec, 0x6b, 0x54, - 0xce, 0x2e, 0x12, 0x12, 0x85, 0x51, 0xa2, 0xb7, 0x40, 0x8c, 0x87, 0x68, 0xc2, 0xe1, 0x54, 0x7f, - 0x1c, 0xc8, 0x58, 0x52, 0x28, 0x1d, 0x3a, 0x06, 0x49, 0xf2, 0x97, 0xf9, 0xc6, 0x20, 0x95, 0x39, - 0x41, 0x00, 0xc4, 0x2f, 0x50, 0x16, 0x12, 0x74, 0x98, 0x54, 0xb1, 0x98, 0xda, 0xdc, 0x32, 0x71, - 0xac, 0x2a, 0xde, 0x52, 0x9b, 0x75, 0xa7, 0x7c, 0x45, 0xad, 0x37, 0x31, 0x75, 0xf8, 0xa4, 0x92, - 0xe2, 0xc0, 0xcb, 0x04, 0x86, 0xa6, 0x61, 0x98, 0x8d, 0x2a, 0x4d, 0xaf, 0xe2, 0x5d, 0x1a, 0x3d, - 0xe3, 0x0a, 0x1b, 0x68, 0x0b, 0x04, 0x42, 0x9a, 0x7f, 0xd1, 0x36, 0x74, 0xe1, 0x9a, 0xb4, 0x09, - 0x02, 0xa0, 0xcd, 0x3f, 0x11, 0x0e, 0xdc, 0x27, 0xda, 0xab, 0xd7, 0x32, 0x96, 0xee, 0x87, 0x31, - 0x8a, 0xf1, 0x18, 0xef, 0x7a, 0xb5, 0x9e, 0x19, 0x9f, 0x91, 0x4e, 0x26, 0x94, 0x51, 0x06, 0x5e, - 0xe1, 0x50, 0xf9, 0xcb, 0x11, 0x88, 0xd1, 0xc0, 0x32, 0x06, 0xc3, 0xeb, 0x6f, 0x5b, 0x2d, 0x95, - 0x8b, 0x2b, 0x1b, 0x85, 0xc5, 0x52, 0x5a, 0x42, 0xa3, 0x00, 0x14, 0x70, 0x61, 0x71, 0x25, 0xbf, - 0x9e, 0x8e, 0xb8, 0xe5, 0x85, 0xe5, 0xf5, 0x73, 0x8f, 0xa7, 0xa3, 0x2e, 0xc1, 0x06, 0x03, 0xc4, - 0xfc, 0x08, 0x8f, 0x9d, 0x49, 0xc7, 0x51, 0x1a, 0x52, 0x8c, 0xc1, 0xc2, 0xf3, 0xa5, 0xe2, 0xb9, - 0xc7, 0xd3, 0x83, 0x41, 0xc8, 0x63, 0x67, 0xd2, 0x43, 0x68, 0x04, 0x92, 0x14, 0x52, 0x58, 0x59, - 0x59, 0x4c, 0x27, 0x5c, 0x9e, 0x6b, 0xeb, 0xca, 0xc2, 0xf2, 0x7c, 0x3a, 0xe9, 0xf2, 0x9c, 0x57, - 0x56, 0x36, 0x56, 0xd3, 0xe0, 0x72, 0x58, 0x2a, 0xad, 0xad, 0xe5, 0xe7, 0x4b, 0xe9, 0x61, 0x17, - 0xa3, 0xf0, 0xb6, 0xf5, 0xd2, 0x5a, 0x3a, 0x15, 0x10, 0xeb, 0xb1, 0x33, 0xe9, 0x11, 0xb7, 0x89, - 0xd2, 0xf2, 0xc6, 0x52, 0x7a, 0x14, 0x8d, 0xc3, 0x08, 0x6b, 0x42, 0x08, 0x31, 0x16, 0x02, 0x9d, - 0x7b, 0x3c, 0x9d, 0xf6, 0x04, 0x61, 0x5c, 0xc6, 0x03, 0x80, 0x73, 0x8f, 0xa7, 0x91, 0x3c, 0x07, - 0x71, 0xea, 0x86, 0x08, 0xc1, 0xe8, 0x62, 0xbe, 0x50, 0x5a, 0x2c, 0xaf, 0xac, 0xae, 0x2f, 0xac, - 0x2c, 0xe7, 0x17, 0xd3, 0x92, 0x07, 0x53, 0x4a, 0xcf, 0x6e, 0x2c, 0x28, 0xa5, 0x62, 0x3a, 0xe2, - 0x87, 0xad, 0x96, 0xf2, 0xeb, 0xa5, 0x62, 0x3a, 0x2a, 0x57, 0x60, 0xb2, 0x5d, 0x40, 0x6d, 0x3b, - 0x84, 0x7c, 0xbe, 0x10, 0xe9, 0xe0, 0x0b, 0x94, 0x57, 0xd8, 0x17, 0xe4, 0xef, 0x44, 0x60, 0xa2, - 0xcd, 0xa4, 0xd2, 0xb6, 0x91, 0xa7, 0x21, 0xce, 0x7c, 0x99, 0x4d, 0xb3, 0x0f, 0xb4, 0x9d, 0x9d, - 0xa8, 0x67, 0xb7, 0x4c, 0xb5, 0x94, 0xce, 0x9f, 0x6a, 0x44, 0x3b, 0xa4, 0x1a, 0x84, 0x45, 0x8b, - 0xc3, 0xfe, 0x54, 0x4b, 0xf0, 0x67, 0xf3, 0xe3, 0xb9, 0x7e, 0xe6, 0x47, 0x0a, 0xdb, 0xdf, 0x24, - 0x10, 0x6f, 0x33, 0x09, 0x9c, 0x87, 0xf1, 0x16, 0x46, 0x7d, 0x07, 0xe3, 0xf7, 0x4a, 0x90, 0xe9, - 0x64, 0x9c, 0x1e, 0x21, 0x31, 0x12, 0x08, 0x89, 0xe7, 0xc3, 0x16, 0xbc, 0xab, 0x73, 0x27, 0xb4, - 0xf4, 0xf5, 0x67, 0x25, 0x38, 0xdc, 0x3e, 0xa5, 0x6c, 0x2b, 0xc3, 0x5b, 0x60, 0xb0, 0x81, 0x9d, - 0x6d, 0x43, 0xa4, 0x55, 0xf7, 0xb5, 0x99, 0xac, 0x49, 0x75, 0xb8, 0xb3, 0x39, 0x95, 0x7f, 0xb6, - 0x8f, 0x76, 0xca, 0x0b, 0x99, 0x34, 0x2d, 0x92, 0x7e, 0x30, 0x02, 0x87, 0xda, 0x32, 0x6f, 0x2b, - 0xe8, 0x09, 0x00, 0x4d, 0x37, 0x9b, 0x0e, 0x4b, 0x9d, 0x58, 0x24, 0x4e, 0x52, 0x08, 0x0d, 0x5e, - 0x24, 0xca, 0x36, 0x1d, 0xb7, 0x3e, 0x4a, 0xeb, 0x81, 0x81, 0x28, 0xc2, 0x93, 0x9e, 0xa0, 0x31, - 0x2a, 0xe8, 0x54, 0x07, 0x4d, 0x5b, 0x1c, 0xf3, 0x11, 0x48, 0x57, 0xea, 0x1a, 0xd6, 0x9d, 0xb2, - 0xed, 0x58, 0x58, 0x6d, 0x68, 0x7a, 0x8d, 0x4e, 0x35, 0x89, 0x5c, 0x7c, 0x4b, 0xad, 0xdb, 0x58, - 0x19, 0x63, 0xd5, 0x6b, 0xa2, 0x96, 0x50, 0x50, 0x07, 0xb2, 0x7c, 0x14, 0x83, 0x01, 0x0a, 0x56, - 0xed, 0x52, 0xc8, 0x1f, 0x4e, 0xc2, 0xb0, 0x2f, 0x01, 0x47, 0x77, 0x41, 0xea, 0x45, 0xf5, 0x8a, - 0x5a, 0x16, 0x8b, 0x2a, 0x66, 0x89, 0x61, 0x02, 0x5b, 0xe5, 0x0b, 0xab, 0x47, 0x60, 0x92, 0xa2, - 0x18, 0x4d, 0x07, 0x5b, 0xe5, 0x4a, 0x5d, 0xb5, 0x6d, 0x6a, 0xb4, 0x04, 0x45, 0x45, 0xa4, 0x6e, - 0x85, 0x54, 0xcd, 0x89, 0x1a, 0x74, 0x16, 0x26, 0x28, 0x45, 0xa3, 0x59, 0x77, 0x34, 0xb3, 0x8e, - 0xcb, 0x64, 0x99, 0x67, 0xd3, 0x29, 0xc7, 0x95, 0x6c, 0x9c, 0x60, 0x2c, 0x71, 0x04, 0x22, 0x91, - 0x8d, 0x8a, 0x70, 0x82, 0x92, 0xd5, 0xb0, 0x8e, 0x2d, 0xd5, 0xc1, 0x65, 0xfc, 0x52, 0x53, 0xad, - 0xdb, 0x65, 0x55, 0xaf, 0x96, 0xb7, 0x55, 0x7b, 0x3b, 0x33, 0x49, 0x18, 0x14, 0x22, 0x19, 0x49, - 0x39, 0x4a, 0x10, 0xe7, 0x39, 0x5e, 0x89, 0xa2, 0xe5, 0xf5, 0xea, 0x45, 0xd5, 0xde, 0x46, 0x39, - 0x38, 0x4c, 0xb9, 0xd8, 0x8e, 0xa5, 0xe9, 0xb5, 0x72, 0x65, 0x1b, 0x57, 0x76, 0xca, 0x4d, 0x67, - 0xeb, 0xc9, 0xcc, 0x31, 0x7f, 0xfb, 0x54, 0xc2, 0x35, 0x8a, 0x33, 0x47, 0x50, 0x36, 0x9c, 0xad, - 0x27, 0xd1, 0x1a, 0xa4, 0x48, 0x67, 0x34, 0xb4, 0x6b, 0xb8, 0xbc, 0x65, 0x58, 0x74, 0x0e, 0x1d, - 0x6d, 0x13, 0x9a, 0x7c, 0x16, 0x9c, 0x5d, 0xe1, 0x04, 0x4b, 0x46, 0x15, 0xe7, 0xe2, 0x6b, 0xab, - 0xa5, 0x52, 0x51, 0x19, 0x16, 0x5c, 0x2e, 0x18, 0x16, 0x71, 0xa8, 0x9a, 0xe1, 0x1a, 0x78, 0x98, - 0x39, 0x54, 0xcd, 0x10, 0xe6, 0x3d, 0x0b, 0x13, 0x95, 0x0a, 0xd3, 0x59, 0xab, 0x94, 0xf9, 0x62, - 0xcc, 0xce, 0xa4, 0x03, 0xc6, 0xaa, 0x54, 0xe6, 0x19, 0x02, 0xf7, 0x71, 0x1b, 0x3d, 0x05, 0x87, - 0x3c, 0x63, 0xf9, 0x09, 0xc7, 0x5b, 0xb4, 0x0c, 0x93, 0x9e, 0x85, 0x09, 0x73, 0xaf, 0x95, 0x10, - 0x05, 0x5a, 0x34, 0xf7, 0xc2, 0x64, 0x4f, 0xc0, 0xa4, 0xb9, 0x6d, 0xb6, 0xd2, 0x9d, 0xf2, 0xd3, - 0x21, 0x73, 0xdb, 0x0c, 0x13, 0xde, 0x4b, 0x57, 0xe6, 0x16, 0xae, 0xa8, 0x0e, 0xae, 0x66, 0x8e, - 0xf8, 0xd1, 0x7d, 0x15, 0x68, 0x16, 0xd2, 0x95, 0x4a, 0x19, 0xeb, 0xea, 0x66, 0x1d, 0x97, 0x55, - 0x0b, 0xeb, 0xaa, 0x9d, 0x99, 0xa6, 0xc8, 0x31, 0xc7, 0x6a, 0x62, 0x65, 0xb4, 0x52, 0x29, 0xd1, - 0xca, 0x3c, 0xad, 0x43, 0xa7, 0x60, 0xdc, 0xd8, 0x7c, 0xb1, 0xc2, 0x3c, 0xb2, 0x6c, 0x5a, 0x78, - 0x4b, 0xdb, 0xcd, 0xdc, 0x43, 0xcd, 0x3b, 0x46, 0x2a, 0xa8, 0x3f, 0xae, 0x52, 0x30, 0x7a, 0x00, - 0xd2, 0x15, 0x7b, 0x5b, 0xb5, 0x4c, 0x1a, 0x92, 0x6d, 0x53, 0xad, 0xe0, 0xcc, 0xbd, 0x0c, 0x95, - 0xc1, 0x97, 0x05, 0x98, 0x8c, 0x08, 0xfb, 0xaa, 0xb6, 0xe5, 0x08, 0x8e, 0xf7, 0xb3, 0x11, 0x41, - 0x61, 0x9c, 0xdb, 0x49, 0x48, 0x13, 0x4b, 0x04, 0x1a, 0x3e, 0x49, 0xd1, 0x46, 0xcd, 0x6d, 0xd3, - 0xdf, 0xee, 0xdd, 0x30, 0x42, 0x30, 0xbd, 0x46, 0x1f, 0x60, 0x89, 0x9b, 0xb9, 0xed, 0x6b, 0xf1, - 0x71, 0x38, 0x4c, 0x90, 0x1a, 0xd8, 0x51, 0xab, 0xaa, 0xa3, 0xfa, 0xb0, 0x1f, 0xa2, 0xd8, 0xc4, - 0xec, 0x4b, 0xbc, 0x32, 0x20, 0xa7, 0xd5, 0xdc, 0xdc, 0x73, 0x1d, 0xeb, 0x61, 0x26, 0x27, 0x81, - 0x09, 0xd7, 0xba, 0x63, 0xc9, 0xb9, 0x9c, 0x83, 0x94, 0xdf, 0xef, 0x51, 0x12, 0x98, 0xe7, 0xa7, - 0x25, 0x92, 0x04, 0xcd, 0xad, 0x14, 0x49, 0xfa, 0xf2, 0x42, 0x29, 0x1d, 0x21, 0x69, 0xd4, 0xe2, - 0xc2, 0x7a, 0xa9, 0xac, 0x6c, 0x2c, 0xaf, 0x2f, 0x2c, 0x95, 0xd2, 0x51, 0x5f, 0x62, 0xff, 0x4c, - 0x2c, 0x71, 0x5f, 0xfa, 0x7e, 0xf9, 0x5b, 0x11, 0x18, 0x0d, 0xae, 0xd4, 0xd0, 0x9b, 0xe0, 0x88, - 0xd8, 0x56, 0xb1, 0xb1, 0x53, 0xbe, 0xaa, 0x59, 0x74, 0x40, 0x36, 0x54, 0x36, 0x39, 0xba, 0xfe, - 0x33, 0xc9, 0xb1, 0xd6, 0xb0, 0xf3, 0x9c, 0x66, 0x91, 0xe1, 0xd6, 0x50, 0x1d, 0xb4, 0x08, 0xd3, - 0xba, 0x51, 0xb6, 0x1d, 0x55, 0xaf, 0xaa, 0x56, 0xb5, 0xec, 0x6d, 0x68, 0x95, 0xd5, 0x4a, 0x05, - 0xdb, 0xb6, 0xc1, 0x26, 0x42, 0x97, 0xcb, 0x71, 0xdd, 0x58, 0xe3, 0xc8, 0xde, 0x0c, 0x91, 0xe7, - 0xa8, 0x21, 0xf7, 0x8d, 0x76, 0x72, 0xdf, 0x63, 0x90, 0x6c, 0xa8, 0x66, 0x19, 0xeb, 0x8e, 0xb5, - 0x47, 0xf3, 0xf3, 0x84, 0x92, 0x68, 0xa8, 0x66, 0x89, 0x94, 0x7f, 0x2c, 0xcb, 0xa4, 0x67, 0x62, - 0x89, 0x44, 0x3a, 0xf9, 0x4c, 0x2c, 0x91, 0x4c, 0x83, 0xfc, 0x6a, 0x14, 0x52, 0xfe, 0x7c, 0x9d, - 0x2c, 0x7f, 0x2a, 0x74, 0xc6, 0x92, 0x68, 0x4c, 0xbb, 0xbb, 0x6b, 0x76, 0x3f, 0x3b, 0x47, 0xa6, - 0xb2, 0xdc, 0x20, 0x4b, 0x8e, 0x15, 0x46, 0x49, 0xd2, 0x08, 0xe2, 0x6c, 0x98, 0x25, 0x23, 0x09, - 0x85, 0x97, 0xd0, 0x3c, 0x0c, 0xbe, 0x68, 0x53, 0xde, 0x83, 0x94, 0xf7, 0x3d, 0xdd, 0x79, 0x3f, - 0xb3, 0x46, 0x99, 0x27, 0x9f, 0x59, 0x2b, 0x2f, 0xaf, 0x28, 0x4b, 0xf9, 0x45, 0x85, 0x93, 0xa3, - 0xa3, 0x10, 0xab, 0xab, 0xd7, 0xf6, 0x82, 0x93, 0x1e, 0x05, 0xf5, 0xdb, 0x09, 0x47, 0x21, 0x76, - 0x15, 0xab, 0x3b, 0xc1, 0xa9, 0x86, 0x82, 0xee, 0xe0, 0x60, 0x38, 0x0d, 0x71, 0x6a, 0x2f, 0x04, - 0xc0, 0x2d, 0x96, 0x1e, 0x40, 0x09, 0x88, 0xcd, 0xad, 0x28, 0x64, 0x40, 0xa4, 0x21, 0xc5, 0xa0, - 0xe5, 0xd5, 0x85, 0xd2, 0x5c, 0x29, 0x1d, 0x91, 0xcf, 0xc2, 0x20, 0x33, 0x02, 0x19, 0x2c, 0xae, - 0x19, 0xd2, 0x03, 0xbc, 0xc8, 0x79, 0x48, 0xa2, 0x76, 0x63, 0xa9, 0x50, 0x52, 0xd2, 0x91, 0x60, - 0x57, 0xc7, 0xd2, 0x71, 0xd9, 0x86, 0x94, 0x3f, 0x0f, 0xff, 0xf1, 0x2c, 0xc6, 0xbf, 0x22, 0xc1, - 0xb0, 0x2f, 0xaf, 0x26, 0x09, 0x91, 0x5a, 0xaf, 0x1b, 0x57, 0xcb, 0x6a, 0x5d, 0x53, 0x6d, 0xee, - 0x1a, 0x40, 0x41, 0x79, 0x02, 0xe9, 0xb7, 0xeb, 0x7e, 0x4c, 0x43, 0x24, 0x9e, 0x1e, 0x94, 0x3f, - 0x29, 0x41, 0x3a, 0x9c, 0xd8, 0x86, 0xc4, 0x94, 0xde, 0x48, 0x31, 0xe5, 0x4f, 0x48, 0x30, 0x1a, - 0xcc, 0x66, 0x43, 0xe2, 0xdd, 0xf5, 0x86, 0x8a, 0xf7, 0xfb, 0x11, 0x18, 0x09, 0xe4, 0xb0, 0xfd, - 0x4a, 0xf7, 0x12, 0x8c, 0x6b, 0x55, 0xdc, 0x30, 0x0d, 0x07, 0xeb, 0x95, 0xbd, 0x72, 0x1d, 0x5f, - 0xc1, 0xf5, 0x8c, 0x4c, 0x83, 0xc6, 0xe9, 0xee, 0x59, 0xf2, 0xec, 0x82, 0x47, 0xb7, 0x48, 0xc8, - 0x72, 0x13, 0x0b, 0xc5, 0xd2, 0xd2, 0xea, 0xca, 0x7a, 0x69, 0x79, 0xee, 0x6d, 0xe5, 0x8d, 0xe5, - 0x4b, 0xcb, 0x2b, 0xcf, 0x2d, 0x2b, 0x69, 0x2d, 0x84, 0x76, 0x07, 0x87, 0xfd, 0x2a, 0xa4, 0xc3, + 0x7b, 0x61, 0xec, 0x2a, 0x56, 0x77, 0xfc, 0xa8, 0xc3, 0x14, 0x75, 0x94, 0x80, 0x7d, 0x88, 0x73, + 0x90, 0x6a, 0x60, 0xdb, 0x56, 0x6b, 0xb8, 0xec, 0xec, 0x99, 0x38, 0x13, 0xa3, 0xbd, 0x9f, 0x69, + 0xe9, 0x7d, 0xb8, 0xe7, 0xc3, 0x9c, 0x6a, 0x7d, 0xcf, 0xc4, 0x28, 0x0f, 0x49, 0xac, 0x37, 0x1b, + 0x8c, 0x43, 0xbc, 0x83, 0xfe, 0x4a, 0x7a, 0xb3, 0x11, 0xe6, 0x92, 0x20, 0x64, 0x9c, 0xc5, 0x90, + 0x8d, 0xad, 0x2b, 0x5a, 0x05, 0x67, 0x06, 0x29, 0x83, 0x7b, 0x5b, 0x18, 0xac, 0xb1, 0xfa, 0x30, + 0x0f, 0x41, 0x87, 0xe6, 0x20, 0x89, 0x77, 0x1d, 0xac, 0xdb, 0x9a, 0xa1, 0x67, 0x86, 0x28, 0x93, + 0xbb, 0xdb, 0x8c, 0x22, 0xae, 0x57, 0xc3, 0x2c, 0x3c, 0x3a, 0x74, 0x0e, 0x86, 0x0c, 0xd3, 0xd1, + 0x0c, 0xdd, 0xce, 0x24, 0x66, 0xa4, 0x93, 0xc3, 0x67, 0x8e, 0xb7, 0x35, 0x84, 0x15, 0x86, 0xa3, + 0x08, 0x64, 0xb4, 0x00, 0x69, 0xdb, 0x68, 0x5a, 0x15, 0x5c, 0xae, 0x18, 0x55, 0x5c, 0xd6, 0xf4, + 0x2d, 0x23, 0x93, 0xa4, 0x0c, 0xa6, 0x5b, 0x3b, 0x42, 0x11, 0xe7, 0x8c, 0x2a, 0x5e, 0xd0, 0xb7, + 0x0c, 0x65, 0xd4, 0x0e, 0x94, 0xd1, 0x61, 0x18, 0xb4, 0xf7, 0x74, 0x47, 0xdd, 0xcd, 0xa4, 0xa8, + 0x85, 0xf0, 0x92, 0xfc, 0x9b, 0x83, 0x30, 0xd6, 0x8f, 0x89, 0x9d, 0x87, 0xf8, 0x16, 0xe9, 0x65, + 0x26, 0xb2, 0x1f, 0x1d, 0x30, 0x9a, 0xa0, 0x12, 0x07, 0x0f, 0xa8, 0xc4, 0x3c, 0x0c, 0xeb, 0xd8, + 0x76, 0x70, 0x95, 0x59, 0x44, 0xb4, 0x4f, 0x9b, 0x02, 0x46, 0xd4, 0x6a, 0x52, 0xb1, 0x03, 0x99, + 0xd4, 0xb3, 0x30, 0xe6, 0x8a, 0x54, 0xb6, 0x54, 0xbd, 0x26, 0x6c, 0xf3, 0x74, 0x2f, 0x49, 0x66, + 0x4b, 0x82, 0x4e, 0x21, 0x64, 0xca, 0x28, 0x0e, 0x94, 0x51, 0x11, 0xc0, 0xd0, 0xb1, 0xb1, 0x55, + 0xae, 0xe2, 0x4a, 0x3d, 0x93, 0xe8, 0xa0, 0xa5, 0x15, 0x82, 0xd2, 0xa2, 0x25, 0x83, 0x41, 0x2b, + 0x75, 0xf4, 0x84, 0x67, 0x6a, 0x43, 0x1d, 0x2c, 0x65, 0x89, 0x39, 0x59, 0x8b, 0xb5, 0x6d, 0xc0, + 0xa8, 0x85, 0x89, 0xdd, 0xe3, 0x2a, 0xef, 0x59, 0x92, 0x0a, 0x31, 0xdb, 0xb3, 0x67, 0x0a, 0x27, + 0x63, 0x1d, 0x1b, 0xb1, 0xfc, 0x45, 0x74, 0x27, 0xb8, 0x80, 0x32, 0x35, 0x2b, 0xa0, 0x51, 0x28, + 0x25, 0x80, 0xcb, 0x6a, 0x03, 0x67, 0x5f, 0x84, 0xd1, 0xa0, 0x7a, 0xd0, 0x24, 0xc4, 0x6d, 0x47, + 0xb5, 0x1c, 0x6a, 0x85, 0x71, 0x85, 0x15, 0x50, 0x1a, 0xa2, 0x58, 0xaf, 0xd2, 0x28, 0x17, 0x57, + 0xc8, 0x4f, 0xf4, 0x56, 0xaf, 0xc3, 0x51, 0xda, 0xe1, 0x7b, 0x5a, 0x47, 0x34, 0xc0, 0x39, 0xdc, + 0xef, 0xec, 0x63, 0x30, 0x12, 0xe8, 0x40, 0xbf, 0x4d, 0xcb, 0xef, 0x82, 0x43, 0x6d, 0x59, 0xa3, + 0x67, 0x61, 0xb2, 0xa9, 0x6b, 0xba, 0x83, 0x2d, 0xd3, 0xc2, 0xc4, 0x62, 0x59, 0x53, 0x99, 0xff, + 0x3c, 0xd4, 0xc1, 0xe6, 0x36, 0xfc, 0xd8, 0x8c, 0x8b, 0x32, 0xd1, 0x6c, 0x05, 0x9e, 0x4a, 0x26, + 0x5e, 0x1b, 0x4a, 0xbf, 0xf4, 0xd2, 0x4b, 0x2f, 0x45, 0xe4, 0xaf, 0x0d, 0xc2, 0x64, 0x3b, 0x9f, + 0x69, 0xeb, 0xbe, 0x87, 0x61, 0x50, 0x6f, 0x36, 0x36, 0xb1, 0x45, 0x95, 0x14, 0x57, 0x78, 0x09, + 0xe5, 0x21, 0x5e, 0x57, 0x37, 0x71, 0x3d, 0x13, 0x9b, 0x91, 0x4e, 0x8e, 0x9e, 0xb9, 0xbf, 0x2f, + 0xaf, 0x9c, 0x5d, 0x24, 0x24, 0x0a, 0xa3, 0x44, 0x6f, 0x81, 0x18, 0x0f, 0xd1, 0x84, 0xc3, 0xa9, + 0xfe, 0x38, 0x10, 0x5f, 0x52, 0x28, 0x1d, 0x3a, 0x06, 0x49, 0xf2, 0x97, 0xd9, 0xc6, 0x20, 0x95, + 0x39, 0x41, 0x00, 0xc4, 0x2e, 0x50, 0x16, 0x12, 0xd4, 0x4d, 0xaa, 0x58, 0x4c, 0x6d, 0x6e, 0x99, + 0x18, 0x56, 0x15, 0x6f, 0xa9, 0xcd, 0xba, 0x53, 0xbe, 0xa2, 0xd6, 0x9b, 0x98, 0x1a, 0x7c, 0x52, + 0x49, 0x71, 0xe0, 0x65, 0x02, 0x43, 0xd3, 0x30, 0xcc, 0xbc, 0x4a, 0xd3, 0xab, 0x78, 0x97, 0x46, + 0xcf, 0xb8, 0xc2, 0x1c, 0x6d, 0x81, 0x40, 0x48, 0xf3, 0xcf, 0xdb, 0x86, 0x2e, 0x4c, 0x93, 0x36, + 0x41, 0x00, 0xb4, 0xf9, 0xc7, 0xc2, 0x81, 0xfb, 0x44, 0xfb, 0xee, 0xb5, 0xf8, 0xd2, 0xbd, 0x30, + 0x46, 0x31, 0x1e, 0xe1, 0x43, 0xaf, 0xd6, 0x33, 0xe3, 0x33, 0xd2, 0xc9, 0x84, 0x32, 0xca, 0xc0, + 0x2b, 0x1c, 0x2a, 0x7f, 0x25, 0x02, 0x31, 0x1a, 0x58, 0xc6, 0x60, 0x78, 0xfd, 0x6d, 0xab, 0xa5, + 0x72, 0x71, 0x65, 0xa3, 0xb0, 0x58, 0x4a, 0x4b, 0x68, 0x14, 0x80, 0x02, 0x2e, 0x2c, 0xae, 0xe4, + 0xd7, 0xd3, 0x11, 0xb7, 0xbc, 0xb0, 0xbc, 0x7e, 0xee, 0xd1, 0x74, 0xd4, 0x25, 0xd8, 0x60, 0x80, + 0x98, 0x1f, 0xe1, 0x91, 0x33, 0xe9, 0x38, 0x4a, 0x43, 0x8a, 0x31, 0x58, 0x78, 0xb6, 0x54, 0x3c, + 0xf7, 0x68, 0x7a, 0x30, 0x08, 0x79, 0xe4, 0x4c, 0x7a, 0x08, 0x8d, 0x40, 0x92, 0x42, 0x0a, 0x2b, + 0x2b, 0x8b, 0xe9, 0x84, 0xcb, 0x73, 0x6d, 0x5d, 0x59, 0x58, 0x9e, 0x4f, 0x27, 0x5d, 0x9e, 0xf3, + 0xca, 0xca, 0xc6, 0x6a, 0x1a, 0x5c, 0x0e, 0x4b, 0xa5, 0xb5, 0xb5, 0xfc, 0x7c, 0x29, 0x3d, 0xec, + 0x62, 0x14, 0xde, 0xb6, 0x5e, 0x5a, 0x4b, 0xa7, 0x02, 0x62, 0x3d, 0x72, 0x26, 0x3d, 0xe2, 0x36, + 0x51, 0x5a, 0xde, 0x58, 0x4a, 0x8f, 0xa2, 0x71, 0x18, 0x61, 0x4d, 0x08, 0x21, 0xc6, 0x42, 0xa0, + 0x73, 0x8f, 0xa6, 0xd3, 0x9e, 0x20, 0x8c, 0xcb, 0x78, 0x00, 0x70, 0xee, 0xd1, 0x34, 0x92, 0xe7, + 0x20, 0x4e, 0xcd, 0x10, 0x21, 0x18, 0x5d, 0xcc, 0x17, 0x4a, 0x8b, 0xe5, 0x95, 0xd5, 0xf5, 0x85, + 0x95, 0xe5, 0xfc, 0x62, 0x5a, 0xf2, 0x60, 0x4a, 0xe9, 0xe9, 0x8d, 0x05, 0xa5, 0x54, 0x4c, 0x47, + 0xfc, 0xb0, 0xd5, 0x52, 0x7e, 0xbd, 0x54, 0x4c, 0x47, 0xe5, 0x0a, 0x4c, 0xb6, 0x0b, 0xa8, 0x6d, + 0x5d, 0xc8, 0x67, 0x0b, 0x91, 0x0e, 0xb6, 0x40, 0x79, 0x85, 0x6d, 0x41, 0xfe, 0x6e, 0x04, 0x26, + 0xda, 0x4c, 0x2a, 0x6d, 0x1b, 0x79, 0x12, 0xe2, 0xcc, 0x96, 0xd9, 0x34, 0x7b, 0x5f, 0xdb, 0xd9, + 0x89, 0x5a, 0x76, 0xcb, 0x54, 0x4b, 0xe9, 0xfc, 0xa9, 0x46, 0xb4, 0x43, 0xaa, 0x41, 0x58, 0xb4, + 0x18, 0xec, 0xcf, 0xb5, 0x04, 0x7f, 0x36, 0x3f, 0x9e, 0xeb, 0x67, 0x7e, 0xa4, 0xb0, 0xfd, 0x4d, + 0x02, 0xf1, 0x36, 0x93, 0xc0, 0x79, 0x18, 0x6f, 0x61, 0xd4, 0x77, 0x30, 0x7e, 0x9f, 0x04, 0x99, + 0x4e, 0xca, 0xe9, 0x11, 0x12, 0x23, 0x81, 0x90, 0x78, 0x3e, 0xac, 0xc1, 0x3b, 0x3a, 0x0f, 0x42, + 0xcb, 0x58, 0x7f, 0x56, 0x82, 0xc3, 0xed, 0x53, 0xca, 0xb6, 0x32, 0xbc, 0x05, 0x06, 0x1b, 0xd8, + 0xd9, 0x36, 0x44, 0x5a, 0x75, 0x4f, 0x9b, 0xc9, 0x9a, 0x54, 0x87, 0x07, 0x9b, 0x53, 0xf9, 0x67, + 0xfb, 0x68, 0xa7, 0xbc, 0x90, 0x49, 0xd3, 0x22, 0xe9, 0x87, 0x22, 0x70, 0xa8, 0x2d, 0xf3, 0xb6, + 0x82, 0x9e, 0x00, 0xd0, 0x74, 0xb3, 0xe9, 0xb0, 0xd4, 0x89, 0x45, 0xe2, 0x24, 0x85, 0xd0, 0xe0, + 0x45, 0xa2, 0x6c, 0xd3, 0x71, 0xeb, 0xa3, 0xb4, 0x1e, 0x18, 0x88, 0x22, 0x3c, 0xee, 0x09, 0x1a, + 0xa3, 0x82, 0x4e, 0x75, 0xe8, 0x69, 0x8b, 0x61, 0x3e, 0x04, 0xe9, 0x4a, 0x5d, 0xc3, 0xba, 0x53, + 0xb6, 0x1d, 0x0b, 0xab, 0x0d, 0x4d, 0xaf, 0xd1, 0xa9, 0x26, 0x91, 0x8b, 0x6f, 0xa9, 0x75, 0x1b, + 0x2b, 0x63, 0xac, 0x7a, 0x4d, 0xd4, 0x12, 0x0a, 0x6a, 0x40, 0x96, 0x8f, 0x62, 0x30, 0x40, 0xc1, + 0xaa, 0x5d, 0x0a, 0xf9, 0x23, 0x49, 0x18, 0xf6, 0x25, 0xe0, 0xe8, 0x0e, 0x48, 0x3d, 0xaf, 0x5e, + 0x51, 0xcb, 0x62, 0x51, 0xc5, 0x34, 0x31, 0x4c, 0x60, 0xab, 0x7c, 0x61, 0xf5, 0x10, 0x4c, 0x52, + 0x14, 0xa3, 0xe9, 0x60, 0xab, 0x5c, 0xa9, 0xab, 0xb6, 0x4d, 0x95, 0x96, 0xa0, 0xa8, 0x88, 0xd4, + 0xad, 0x90, 0xaa, 0x39, 0x51, 0x83, 0xce, 0xc2, 0x04, 0xa5, 0x68, 0x34, 0xeb, 0x8e, 0x66, 0xd6, + 0x71, 0x99, 0x2c, 0xf3, 0x6c, 0x3a, 0xe5, 0xb8, 0x92, 0x8d, 0x13, 0x8c, 0x25, 0x8e, 0x40, 0x24, + 0xb2, 0x51, 0x11, 0x4e, 0x50, 0xb2, 0x1a, 0xd6, 0xb1, 0xa5, 0x3a, 0xb8, 0x8c, 0x5f, 0x68, 0xaa, + 0x75, 0xbb, 0xac, 0xea, 0xd5, 0xf2, 0xb6, 0x6a, 0x6f, 0x67, 0x26, 0x09, 0x83, 0x42, 0x24, 0x23, + 0x29, 0x47, 0x09, 0xe2, 0x3c, 0xc7, 0x2b, 0x51, 0xb4, 0xbc, 0x5e, 0xbd, 0xa8, 0xda, 0xdb, 0x28, + 0x07, 0x87, 0x29, 0x17, 0xdb, 0xb1, 0x34, 0xbd, 0x56, 0xae, 0x6c, 0xe3, 0xca, 0x4e, 0xb9, 0xe9, + 0x6c, 0x3d, 0x9e, 0x39, 0xe6, 0x6f, 0x9f, 0x4a, 0xb8, 0x46, 0x71, 0xe6, 0x08, 0xca, 0x86, 0xb3, + 0xf5, 0x38, 0x5a, 0x83, 0x14, 0x19, 0x8c, 0x86, 0xf6, 0x22, 0x2e, 0x6f, 0x19, 0x16, 0x9d, 0x43, + 0x47, 0xdb, 0x84, 0x26, 0x9f, 0x06, 0x67, 0x57, 0x38, 0xc1, 0x92, 0x51, 0xc5, 0xb9, 0xf8, 0xda, + 0x6a, 0xa9, 0x54, 0x54, 0x86, 0x05, 0x97, 0x0b, 0x86, 0x45, 0x0c, 0xaa, 0x66, 0xb8, 0x0a, 0x1e, + 0x66, 0x06, 0x55, 0x33, 0x84, 0x7a, 0xcf, 0xc2, 0x44, 0xa5, 0xc2, 0xfa, 0xac, 0x55, 0xca, 0x7c, + 0x31, 0x66, 0x67, 0xd2, 0x01, 0x65, 0x55, 0x2a, 0xf3, 0x0c, 0x81, 0xdb, 0xb8, 0x8d, 0x9e, 0x80, + 0x43, 0x9e, 0xb2, 0xfc, 0x84, 0xe3, 0x2d, 0xbd, 0x0c, 0x93, 0x9e, 0x85, 0x09, 0x73, 0xaf, 0x95, + 0x10, 0x05, 0x5a, 0x34, 0xf7, 0xc2, 0x64, 0x8f, 0xc1, 0xa4, 0xb9, 0x6d, 0xb6, 0xd2, 0x9d, 0xf2, + 0xd3, 0x21, 0x73, 0xdb, 0x0c, 0x13, 0xde, 0x4d, 0x57, 0xe6, 0x16, 0xae, 0xa8, 0x0e, 0xae, 0x66, + 0x8e, 0xf8, 0xd1, 0x7d, 0x15, 0x68, 0x16, 0xd2, 0x95, 0x4a, 0x19, 0xeb, 0xea, 0x66, 0x1d, 0x97, + 0x55, 0x0b, 0xeb, 0xaa, 0x9d, 0x99, 0xa6, 0xc8, 0x31, 0xc7, 0x6a, 0x62, 0x65, 0xb4, 0x52, 0x29, + 0xd1, 0xca, 0x3c, 0xad, 0x43, 0xa7, 0x60, 0xdc, 0xd8, 0x7c, 0xbe, 0xc2, 0x2c, 0xb2, 0x6c, 0x5a, + 0x78, 0x4b, 0xdb, 0xcd, 0xdc, 0x45, 0xd5, 0x3b, 0x46, 0x2a, 0xa8, 0x3d, 0xae, 0x52, 0x30, 0xba, + 0x0f, 0xd2, 0x15, 0x7b, 0x5b, 0xb5, 0x4c, 0x1a, 0x92, 0x6d, 0x53, 0xad, 0xe0, 0xcc, 0xdd, 0x0c, + 0x95, 0xc1, 0x97, 0x05, 0x98, 0x78, 0x84, 0x7d, 0x55, 0xdb, 0x72, 0x04, 0xc7, 0x7b, 0x99, 0x47, + 0x50, 0x18, 0xe7, 0x76, 0x12, 0xd2, 0x44, 0x13, 0x81, 0x86, 0x4f, 0x52, 0xb4, 0x51, 0x73, 0xdb, + 0xf4, 0xb7, 0x7b, 0x27, 0x8c, 0x10, 0x4c, 0xaf, 0xd1, 0xfb, 0x58, 0xe2, 0x66, 0x6e, 0xfb, 0x5a, + 0x7c, 0x14, 0x0e, 0x13, 0xa4, 0x06, 0x76, 0xd4, 0xaa, 0xea, 0xa8, 0x3e, 0xec, 0x07, 0x28, 0x36, + 0x51, 0xfb, 0x12, 0xaf, 0x0c, 0xc8, 0x69, 0x35, 0x37, 0xf7, 0x5c, 0xc3, 0x7a, 0x90, 0xc9, 0x49, + 0x60, 0xc2, 0xb4, 0x6e, 0x5b, 0x72, 0x2e, 0xe7, 0x20, 0xe5, 0xb7, 0x7b, 0x94, 0x04, 0x66, 0xf9, + 0x69, 0x89, 0x24, 0x41, 0x73, 0x2b, 0x45, 0x92, 0xbe, 0x3c, 0x57, 0x4a, 0x47, 0x48, 0x1a, 0xb5, + 0xb8, 0xb0, 0x5e, 0x2a, 0x2b, 0x1b, 0xcb, 0xeb, 0x0b, 0x4b, 0xa5, 0x74, 0xd4, 0x97, 0xd8, 0x3f, + 0x15, 0x4b, 0xdc, 0x93, 0xbe, 0x57, 0xfe, 0x76, 0x04, 0x46, 0x83, 0x2b, 0x35, 0xf4, 0x26, 0x38, + 0x22, 0xb6, 0x55, 0x6c, 0xec, 0x94, 0xaf, 0x6a, 0x16, 0x75, 0xc8, 0x86, 0xca, 0x26, 0x47, 0xd7, + 0x7e, 0x26, 0x39, 0xd6, 0x1a, 0x76, 0x9e, 0xd1, 0x2c, 0xe2, 0x6e, 0x0d, 0xd5, 0x41, 0x8b, 0x30, + 0xad, 0x1b, 0x65, 0xdb, 0x51, 0xf5, 0xaa, 0x6a, 0x55, 0xcb, 0xde, 0x86, 0x56, 0x59, 0xad, 0x54, + 0xb0, 0x6d, 0x1b, 0x6c, 0x22, 0x74, 0xb9, 0x1c, 0xd7, 0x8d, 0x35, 0x8e, 0xec, 0xcd, 0x10, 0x79, + 0x8e, 0x1a, 0x32, 0xdf, 0x68, 0x27, 0xf3, 0x3d, 0x06, 0xc9, 0x86, 0x6a, 0x96, 0xb1, 0xee, 0x58, + 0x7b, 0x34, 0x3f, 0x4f, 0x28, 0x89, 0x86, 0x6a, 0x96, 0x48, 0xf9, 0xa7, 0xb2, 0x4c, 0x7a, 0x2a, + 0x96, 0x48, 0xa4, 0x93, 0x4f, 0xc5, 0x12, 0xc9, 0x34, 0xc8, 0xaf, 0x46, 0x21, 0xe5, 0xcf, 0xd7, + 0xc9, 0xf2, 0xa7, 0x42, 0x67, 0x2c, 0x89, 0xc6, 0xb4, 0x3b, 0xbb, 0x66, 0xf7, 0xb3, 0x73, 0x64, + 0x2a, 0xcb, 0x0d, 0xb2, 0xe4, 0x58, 0x61, 0x94, 0x24, 0x8d, 0x20, 0xc6, 0x86, 0x59, 0x32, 0x92, + 0x50, 0x78, 0x09, 0xcd, 0xc3, 0xe0, 0xf3, 0x36, 0xe5, 0x3d, 0x48, 0x79, 0xdf, 0xd5, 0x9d, 0xf7, + 0x53, 0x6b, 0x94, 0x79, 0xf2, 0xa9, 0xb5, 0xf2, 0xf2, 0x8a, 0xb2, 0x94, 0x5f, 0x54, 0x38, 0x39, + 0x3a, 0x0a, 0xb1, 0xba, 0xfa, 0xe2, 0x5e, 0x70, 0xd2, 0xa3, 0xa0, 0x7e, 0x07, 0xe1, 0x28, 0xc4, + 0xae, 0x62, 0x75, 0x27, 0x38, 0xd5, 0x50, 0xd0, 0x6d, 0x74, 0x86, 0xd3, 0x10, 0xa7, 0xfa, 0x42, + 0x00, 0x5c, 0x63, 0xe9, 0x01, 0x94, 0x80, 0xd8, 0xdc, 0x8a, 0x42, 0x1c, 0x22, 0x0d, 0x29, 0x06, + 0x2d, 0xaf, 0x2e, 0x94, 0xe6, 0x4a, 0xe9, 0x88, 0x7c, 0x16, 0x06, 0x99, 0x12, 0x88, 0xb3, 0xb8, + 0x6a, 0x48, 0x0f, 0xf0, 0x22, 0xe7, 0x21, 0x89, 0xda, 0x8d, 0xa5, 0x42, 0x49, 0x49, 0x47, 0x82, + 0x43, 0x1d, 0x4b, 0xc7, 0x65, 0x1b, 0x52, 0xfe, 0x3c, 0xfc, 0xa7, 0xb3, 0x18, 0xff, 0xaa, 0x04, + 0xc3, 0xbe, 0xbc, 0x9a, 0x24, 0x44, 0x6a, 0xbd, 0x6e, 0x5c, 0x2d, 0xab, 0x75, 0x4d, 0xb5, 0xb9, + 0x69, 0x00, 0x05, 0xe5, 0x09, 0xa4, 0xdf, 0xa1, 0xfb, 0x29, 0xb9, 0x48, 0x3c, 0x3d, 0x28, 0x7f, + 0x4a, 0x82, 0x74, 0x38, 0xb1, 0x0d, 0x89, 0x29, 0xbd, 0x91, 0x62, 0xca, 0x9f, 0x94, 0x60, 0x34, + 0x98, 0xcd, 0x86, 0xc4, 0xbb, 0xe3, 0x0d, 0x15, 0xef, 0x8f, 0x22, 0x30, 0x12, 0xc8, 0x61, 0xfb, + 0x95, 0xee, 0x05, 0x18, 0xd7, 0xaa, 0xb8, 0x61, 0x1a, 0x0e, 0xd6, 0x2b, 0x7b, 0xe5, 0x3a, 0xbe, + 0x82, 0xeb, 0x19, 0x99, 0x06, 0x8d, 0xd3, 0xdd, 0xb3, 0xe4, 0xd9, 0x05, 0x8f, 0x6e, 0x91, 0x90, + 0xe5, 0x26, 0x16, 0x8a, 0xa5, 0xa5, 0xd5, 0x95, 0xf5, 0xd2, 0xf2, 0xdc, 0xdb, 0xca, 0x1b, 0xcb, + 0x97, 0x96, 0x57, 0x9e, 0x59, 0x56, 0xd2, 0x5a, 0x08, 0xed, 0x36, 0xba, 0xfd, 0x2a, 0xa4, 0xc3, 0x42, 0xa1, 0x23, 0xd0, 0x4e, 0xac, 0xf4, 0x00, 0x9a, 0x80, 0xb1, 0xe5, 0x95, 0xf2, 0xda, 0x42, - 0xb1, 0x54, 0x2e, 0x5d, 0xb8, 0x50, 0x9a, 0x5b, 0x5f, 0x63, 0xfb, 0x1e, 0x2e, 0xf6, 0x7a, 0x60, - 0x80, 0xcb, 0xaf, 0x44, 0x61, 0xa2, 0x8d, 0x24, 0x28, 0xcf, 0x57, 0x2c, 0x6c, 0x11, 0xf5, 0x70, - 0x3f, 0xd2, 0xcf, 0x92, 0x9c, 0x61, 0x55, 0xb5, 0x1c, 0xbe, 0xc0, 0x79, 0x00, 0x88, 0x95, 0x74, - 0x47, 0xdb, 0xd2, 0xb0, 0xc5, 0xf7, 0x93, 0xd8, 0x32, 0x66, 0xcc, 0x83, 0xb3, 0x2d, 0xa5, 0x87, - 0x00, 0x99, 0x86, 0xad, 0x39, 0xda, 0x15, 0x5c, 0xd6, 0x74, 0xb1, 0xf9, 0x44, 0x96, 0x35, 0x31, - 0x25, 0x2d, 0x6a, 0x16, 0x74, 0xc7, 0xc5, 0xd6, 0x71, 0x4d, 0x0d, 0x61, 0x93, 0x60, 0x1e, 0x55, - 0xd2, 0xa2, 0xc6, 0xc5, 0xbe, 0x0b, 0x52, 0x55, 0xa3, 0x49, 0x72, 0x3d, 0x86, 0x47, 0xe6, 0x0e, - 0x49, 0x19, 0x66, 0x30, 0x17, 0x85, 0x67, 0xf1, 0xde, 0xae, 0x57, 0x4a, 0x19, 0x66, 0x30, 0x86, - 0x72, 0x3f, 0x8c, 0xa9, 0xb5, 0x9a, 0x45, 0x98, 0x0b, 0x46, 0x6c, 0x5d, 0x32, 0xea, 0x82, 0x29, - 0x62, 0xf6, 0x19, 0x48, 0x08, 0x3b, 0x90, 0xa9, 0x9a, 0x58, 0xa2, 0x6c, 0xb2, 0xc5, 0x76, 0xe4, - 0x64, 0x52, 0x49, 0xe8, 0xa2, 0xf2, 0x2e, 0x48, 0x69, 0x76, 0xd9, 0xdb, 0xc4, 0x8f, 0xcc, 0x44, - 0x4e, 0x26, 0x94, 0x61, 0xcd, 0x76, 0x37, 0x40, 0xe5, 0xcf, 0x46, 0x60, 0x34, 0x78, 0x08, 0x81, - 0x8a, 0x90, 0xa8, 0x1b, 0x15, 0x95, 0xba, 0x16, 0x3b, 0x01, 0x3b, 0xd9, 0xe3, 0xdc, 0x62, 0x76, - 0x91, 0xe3, 0x2b, 0x2e, 0x65, 0xf6, 0xb7, 0x25, 0x48, 0x08, 0x30, 0x3a, 0x0c, 0x31, 0x53, 0x75, - 0xb6, 0x29, 0xbb, 0x78, 0x21, 0x92, 0x96, 0x14, 0x5a, 0x26, 0x70, 0xdb, 0x54, 0x75, 0xea, 0x02, - 0x1c, 0x4e, 0xca, 0xa4, 0x5f, 0xeb, 0x58, 0xad, 0xd2, 0x45, 0x8f, 0xd1, 0x68, 0x60, 0xdd, 0xb1, - 0x45, 0xbf, 0x72, 0xf8, 0x1c, 0x07, 0xa3, 0x07, 0x61, 0xdc, 0xb1, 0x54, 0xad, 0x1e, 0xc0, 0x8d, - 0x51, 0xdc, 0xb4, 0xa8, 0x70, 0x91, 0x73, 0x70, 0x54, 0xf0, 0xad, 0x62, 0x47, 0xad, 0x6c, 0xe3, - 0xaa, 0x47, 0x34, 0x48, 0x37, 0x37, 0x8e, 0x70, 0x84, 0x22, 0xaf, 0x17, 0xb4, 0xf2, 0xb7, 0x24, - 0x18, 0x17, 0xcb, 0xb4, 0xaa, 0x6b, 0xac, 0x25, 0x00, 0x55, 0xd7, 0x0d, 0xc7, 0x6f, 0xae, 0x56, - 0x57, 0x6e, 0xa1, 0x9b, 0xcd, 0xbb, 0x44, 0x8a, 0x8f, 0x41, 0xb6, 0x01, 0xe0, 0xd5, 0x74, 0x34, - 0xdb, 0x34, 0x0c, 0xf3, 0x13, 0x26, 0x7a, 0x4c, 0xc9, 0x16, 0xf6, 0xc0, 0x40, 0x64, 0x3d, 0x87, - 0x26, 0x21, 0xbe, 0x89, 0x6b, 0x9a, 0xce, 0xf7, 0x8d, 0x59, 0x41, 0x6c, 0xbf, 0xc4, 0xdc, 0xed, - 0x97, 0xc2, 0x5f, 0x86, 0x89, 0x8a, 0xd1, 0x08, 0x8b, 0x5b, 0x48, 0x87, 0x36, 0x17, 0xec, 0x8b, - 0xd2, 0x0b, 0x0f, 0x73, 0xa4, 0x9a, 0x51, 0x57, 0xf5, 0xda, 0xac, 0x61, 0xd5, 0xbc, 0x63, 0x56, - 0x92, 0xf1, 0xd8, 0xbe, 0xc3, 0x56, 0x73, 0xf3, 0x4f, 0x25, 0xe9, 0x17, 0x22, 0xd1, 0xf9, 0xd5, - 0xc2, 0xe7, 0x22, 0xd9, 0x79, 0x46, 0xb8, 0x2a, 0x8c, 0xa1, 0xe0, 0xad, 0x3a, 0xae, 0x10, 0x05, - 0xe1, 0x7b, 0x0f, 0xc2, 0x64, 0xcd, 0xa8, 0x19, 0x94, 0xd3, 0x69, 0xf2, 0x8b, 0x9f, 0xd3, 0x26, + 0xb1, 0x54, 0x2e, 0x5d, 0xb8, 0x50, 0x9a, 0x5b, 0x5f, 0x63, 0xfb, 0x1e, 0x2e, 0xf6, 0x7a, 0xc0, + 0xc1, 0xe5, 0x97, 0xa3, 0x30, 0xd1, 0x46, 0x12, 0x94, 0xe7, 0x2b, 0x16, 0xb6, 0x88, 0x7a, 0xb0, + 0x1f, 0xe9, 0x67, 0x49, 0xce, 0xb0, 0xaa, 0x5a, 0x0e, 0x5f, 0xe0, 0xdc, 0x07, 0x44, 0x4b, 0xba, + 0xa3, 0x6d, 0x69, 0xd8, 0xe2, 0xfb, 0x49, 0x6c, 0x19, 0x33, 0xe6, 0xc1, 0xd9, 0x96, 0xd2, 0x03, + 0x80, 0x4c, 0xc3, 0xd6, 0x1c, 0xed, 0x0a, 0x2e, 0x6b, 0xba, 0xd8, 0x7c, 0x22, 0xcb, 0x9a, 0x98, + 0x92, 0x16, 0x35, 0x0b, 0xba, 0xe3, 0x62, 0xeb, 0xb8, 0xa6, 0x86, 0xb0, 0x49, 0x30, 0x8f, 0x2a, + 0x69, 0x51, 0xe3, 0x62, 0xdf, 0x01, 0xa9, 0xaa, 0xd1, 0x24, 0xb9, 0x1e, 0xc3, 0x23, 0x73, 0x87, + 0xa4, 0x0c, 0x33, 0x98, 0x8b, 0xc2, 0xb3, 0x78, 0x6f, 0xd7, 0x2b, 0xa5, 0x0c, 0x33, 0x18, 0x43, + 0xb9, 0x17, 0xc6, 0xd4, 0x5a, 0xcd, 0x22, 0xcc, 0x05, 0x23, 0xb6, 0x2e, 0x19, 0x75, 0xc1, 0x14, + 0x31, 0xfb, 0x14, 0x24, 0x84, 0x1e, 0xc8, 0x54, 0x4d, 0x34, 0x51, 0x36, 0xd9, 0x62, 0x3b, 0x72, + 0x32, 0xa9, 0x24, 0x74, 0x51, 0x79, 0x07, 0xa4, 0x34, 0xbb, 0xec, 0x6d, 0xe2, 0x47, 0x66, 0x22, + 0x27, 0x13, 0xca, 0xb0, 0x66, 0xbb, 0x1b, 0xa0, 0xf2, 0x67, 0x23, 0x30, 0x1a, 0x3c, 0x84, 0x40, + 0x45, 0x48, 0xd4, 0x8d, 0x8a, 0x4a, 0x4d, 0x8b, 0x9d, 0x80, 0x9d, 0xec, 0x71, 0x6e, 0x31, 0xbb, + 0xc8, 0xf1, 0x15, 0x97, 0x32, 0xfb, 0xbb, 0x12, 0x24, 0x04, 0x18, 0x1d, 0x86, 0x98, 0xa9, 0x3a, + 0xdb, 0x94, 0x5d, 0xbc, 0x10, 0x49, 0x4b, 0x0a, 0x2d, 0x13, 0xb8, 0x6d, 0xaa, 0x3a, 0x35, 0x01, + 0x0e, 0x27, 0x65, 0x32, 0xae, 0x75, 0xac, 0x56, 0xe9, 0xa2, 0xc7, 0x68, 0x34, 0xb0, 0xee, 0xd8, + 0x62, 0x5c, 0x39, 0x7c, 0x8e, 0x83, 0xd1, 0xfd, 0x30, 0xee, 0x58, 0xaa, 0x56, 0x0f, 0xe0, 0xc6, + 0x28, 0x6e, 0x5a, 0x54, 0xb8, 0xc8, 0x39, 0x38, 0x2a, 0xf8, 0x56, 0xb1, 0xa3, 0x56, 0xb6, 0x71, + 0xd5, 0x23, 0x1a, 0xa4, 0x9b, 0x1b, 0x47, 0x38, 0x42, 0x91, 0xd7, 0x0b, 0x5a, 0xf9, 0xdb, 0x12, + 0x8c, 0x8b, 0x65, 0x5a, 0xd5, 0x55, 0xd6, 0x12, 0x80, 0xaa, 0xeb, 0x86, 0xe3, 0x57, 0x57, 0xab, + 0x29, 0xb7, 0xd0, 0xcd, 0xe6, 0x5d, 0x22, 0xc5, 0xc7, 0x20, 0xdb, 0x00, 0xf0, 0x6a, 0x3a, 0xaa, + 0x6d, 0x1a, 0x86, 0xf9, 0x09, 0x13, 0x3d, 0xa6, 0x64, 0x0b, 0x7b, 0x60, 0x20, 0xb2, 0x9e, 0x43, + 0x93, 0x10, 0xdf, 0xc4, 0x35, 0x4d, 0xe7, 0xfb, 0xc6, 0xac, 0x20, 0xb6, 0x5f, 0x62, 0xee, 0xf6, + 0x4b, 0xe1, 0x2f, 0xc3, 0x44, 0xc5, 0x68, 0x84, 0xc5, 0x2d, 0xa4, 0x43, 0x9b, 0x0b, 0xf6, 0x45, + 0xe9, 0xb9, 0x07, 0x39, 0x52, 0xcd, 0xa8, 0xab, 0x7a, 0x6d, 0xd6, 0xb0, 0x6a, 0xde, 0x31, 0x2b, + 0xc9, 0x78, 0x6c, 0xdf, 0x61, 0xab, 0xb9, 0xf9, 0x67, 0x92, 0xf4, 0xcb, 0x91, 0xe8, 0xfc, 0x6a, + 0xe1, 0x73, 0x91, 0xec, 0x3c, 0x23, 0x5c, 0x15, 0xca, 0x50, 0xf0, 0x56, 0x1d, 0x57, 0x48, 0x07, + 0xe1, 0x07, 0xf7, 0xc3, 0x64, 0xcd, 0xa8, 0x19, 0x94, 0xd3, 0x69, 0xf2, 0x8b, 0x9f, 0xd3, 0x26, 0x5d, 0x68, 0xb6, 0xe7, 0xa1, 0x6e, 0x6e, 0x19, 0x26, 0x38, 0x72, 0x99, 0x1e, 0x14, 0xb1, 0x65, - 0x0c, 0xea, 0xba, 0x87, 0x96, 0xf9, 0xc2, 0x77, 0xe9, 0xf4, 0xad, 0x8c, 0x73, 0x52, 0x52, 0xc7, - 0x56, 0x3a, 0x39, 0x05, 0x0e, 0x05, 0xf8, 0xb1, 0x41, 0x8a, 0xad, 0x1e, 0x1c, 0x7f, 0x83, 0x73, - 0x9c, 0xf0, 0x71, 0x5c, 0xe3, 0xa4, 0xb9, 0x39, 0x18, 0xd9, 0x0f, 0xaf, 0x7f, 0xc9, 0x79, 0xa5, - 0xb0, 0x9f, 0xc9, 0x3c, 0x8c, 0x51, 0x26, 0x95, 0xa6, 0xed, 0x18, 0x0d, 0x1a, 0x01, 0xbb, 0xb3, - 0xf9, 0xcd, 0xef, 0xb2, 0x51, 0x33, 0x4a, 0xc8, 0xe6, 0x5c, 0xaa, 0x5c, 0x0e, 0xe8, 0xd9, 0x58, - 0x15, 0x57, 0xea, 0x3d, 0x38, 0x7c, 0x8d, 0x0b, 0xe2, 0xe2, 0xe7, 0x2e, 0xc3, 0x24, 0xf9, 0x4d, - 0x03, 0x94, 0x5f, 0x92, 0xde, 0x1b, 0x6e, 0x99, 0x6f, 0xbd, 0x97, 0x0d, 0xcc, 0x09, 0x97, 0x81, - 0x4f, 0x26, 0x5f, 0x2f, 0xd6, 0xb0, 0xe3, 0x60, 0xcb, 0x2e, 0xab, 0xf5, 0x76, 0xe2, 0xf9, 0x76, - 0x2c, 0x32, 0x1f, 0xfb, 0x7e, 0xb0, 0x17, 0xe7, 0x19, 0x65, 0xbe, 0x5e, 0xcf, 0x6d, 0xc0, 0x91, - 0x36, 0x5e, 0xd1, 0x07, 0xcf, 0x57, 0x38, 0xcf, 0xc9, 0x16, 0xcf, 0x20, 0x6c, 0x57, 0x41, 0xc0, - 0xdd, 0xbe, 0xec, 0x83, 0xe7, 0xc7, 0x39, 0x4f, 0xc4, 0x69, 0x45, 0x97, 0x12, 0x8e, 0xcf, 0xc0, - 0xf8, 0x15, 0x6c, 0x6d, 0x1a, 0x36, 0xdf, 0x25, 0xea, 0x83, 0xdd, 0x27, 0x38, 0xbb, 0x31, 0x4e, - 0x48, 0xb7, 0x8d, 0x08, 0xaf, 0xa7, 0x20, 0xb1, 0xa5, 0x56, 0x70, 0x1f, 0x2c, 0x6e, 0x70, 0x16, - 0x43, 0x04, 0x9f, 0x90, 0xe6, 0x21, 0x55, 0x33, 0xf8, 0x1c, 0xd5, 0x9b, 0xfc, 0x93, 0x9c, 0x7c, - 0x58, 0xd0, 0x70, 0x16, 0xa6, 0x61, 0x36, 0xeb, 0x64, 0x02, 0xeb, 0xcd, 0xe2, 0x6f, 0x09, 0x16, - 0x82, 0x86, 0xb3, 0xd8, 0x87, 0x59, 0x3f, 0x25, 0x58, 0xd8, 0x3e, 0x7b, 0x3e, 0x0d, 0xc3, 0x86, - 0x5e, 0xdf, 0x33, 0xf4, 0x7e, 0x84, 0xf8, 0x34, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xc9, - 0x7e, 0x3b, 0xe2, 0x6f, 0x7f, 0x5f, 0x0c, 0x0f, 0xd1, 0x03, 0xf3, 0x30, 0x26, 0x02, 0x94, 0x66, - 0xe8, 0x7d, 0xb0, 0xf8, 0x3b, 0x9c, 0xc5, 0xa8, 0x8f, 0x8c, 0xab, 0xe1, 0x60, 0xdb, 0xa9, 0xe1, - 0x7e, 0x98, 0x7c, 0x56, 0xa8, 0xc1, 0x49, 0xb8, 0x29, 0x37, 0xb1, 0x5e, 0xd9, 0xee, 0x8f, 0xc3, - 0x2f, 0x09, 0x53, 0x0a, 0x1a, 0xc2, 0x62, 0x0e, 0x46, 0x1a, 0xaa, 0x65, 0x6f, 0xab, 0xf5, 0xbe, - 0xba, 0xe3, 0xef, 0x72, 0x1e, 0x29, 0x97, 0x88, 0x5b, 0xa4, 0xa9, 0xef, 0x87, 0xcd, 0xe7, 0x84, - 0x45, 0x7c, 0x64, 0x7c, 0xe8, 0xd9, 0x0e, 0xdd, 0x52, 0xdb, 0x0f, 0xb7, 0x5f, 0x16, 0x43, 0x8f, - 0xd1, 0x2e, 0xf9, 0x39, 0x9e, 0x87, 0xa4, 0xad, 0x5d, 0xeb, 0x8b, 0xcd, 0xe7, 0x45, 0x4f, 0x53, - 0x02, 0x42, 0xfc, 0x36, 0x38, 0xda, 0x76, 0x9a, 0xe8, 0x83, 0xd9, 0xdf, 0xe3, 0xcc, 0x0e, 0xb7, - 0x99, 0x2a, 0x78, 0x48, 0xd8, 0x2f, 0xcb, 0xbf, 0x2f, 0x42, 0x02, 0x0e, 0xf1, 0x5a, 0x25, 0xab, - 0x06, 0x5b, 0xdd, 0xda, 0x9f, 0xd5, 0x7e, 0x45, 0x58, 0x8d, 0xd1, 0x06, 0xac, 0xb6, 0x0e, 0x87, - 0x39, 0xc7, 0xfd, 0xf5, 0xeb, 0xaf, 0x8a, 0xc0, 0xca, 0xa8, 0x37, 0x82, 0xbd, 0xfb, 0x76, 0xc8, - 0xba, 0xe6, 0x14, 0xe9, 0xa9, 0x5d, 0x6e, 0xa8, 0x66, 0x1f, 0x9c, 0xbf, 0xc0, 0x39, 0x8b, 0x88, - 0xef, 0xe6, 0xb7, 0xf6, 0x92, 0x6a, 0x12, 0xe6, 0xcf, 0x43, 0x46, 0x30, 0x6f, 0xea, 0x16, 0xae, - 0x18, 0x35, 0x5d, 0xbb, 0x86, 0xab, 0x7d, 0xb0, 0xfe, 0xb5, 0x50, 0x57, 0x6d, 0xf8, 0xc8, 0x09, - 0xe7, 0x05, 0x48, 0xbb, 0xb9, 0x4a, 0x59, 0x6b, 0x98, 0x86, 0xe5, 0xf4, 0xe0, 0xf8, 0x45, 0xd1, - 0x53, 0x2e, 0xdd, 0x02, 0x25, 0xcb, 0x95, 0x80, 0x9d, 0x33, 0xf7, 0xeb, 0x92, 0x5f, 0xe2, 0x8c, - 0x46, 0x3c, 0x2a, 0x1e, 0x38, 0x2a, 0x46, 0xc3, 0x54, 0xad, 0x7e, 0xe2, 0xdf, 0x3f, 0x10, 0x81, - 0x83, 0x93, 0xf0, 0xc0, 0x41, 0x32, 0x3a, 0x32, 0xdb, 0xf7, 0xc1, 0xe1, 0xcb, 0x22, 0x70, 0x08, - 0x1a, 0xce, 0x42, 0x24, 0x0c, 0x7d, 0xb0, 0xf8, 0x87, 0x82, 0x85, 0xa0, 0x21, 0x2c, 0x9e, 0xf5, - 0x26, 0x5a, 0x0b, 0xd7, 0x34, 0xdb, 0xb1, 0x58, 0x52, 0xdc, 0x9d, 0xd5, 0x3f, 0xfa, 0x7e, 0x30, - 0x09, 0x53, 0x7c, 0xa4, 0x24, 0x12, 0xf1, 0x4d, 0x56, 0xba, 0x66, 0xea, 0x2d, 0xd8, 0xaf, 0x8b, - 0x48, 0xe4, 0x23, 0x23, 0xb2, 0xf9, 0x32, 0x44, 0x62, 0xf6, 0x0a, 0x59, 0x29, 0xf4, 0xc1, 0xee, - 0x1f, 0x87, 0x84, 0x5b, 0x13, 0xb4, 0x84, 0xa7, 0x2f, 0xff, 0x69, 0xea, 0x3b, 0x78, 0xaf, 0x2f, - 0xef, 0xfc, 0x27, 0xa1, 0xfc, 0x67, 0x83, 0x51, 0xb2, 0x18, 0x32, 0x16, 0xca, 0xa7, 0x50, 0xaf, - 0x5b, 0x45, 0x99, 0x9f, 0xfe, 0x21, 0xd7, 0x37, 0x98, 0x4e, 0xe5, 0x16, 0x89, 0x93, 0x07, 0x93, - 0x9e, 0xde, 0xcc, 0xde, 0xfb, 0x43, 0xd7, 0xcf, 0x03, 0x39, 0x4f, 0xee, 0x02, 0x8c, 0x04, 0x12, - 0x9e, 0xde, 0xac, 0xde, 0xc7, 0x59, 0xa5, 0xfc, 0xf9, 0x4e, 0xee, 0x2c, 0xc4, 0x48, 0xf2, 0xd2, - 0x9b, 0xfc, 0xaf, 0x70, 0x72, 0x8a, 0x9e, 0x7b, 0x33, 0x24, 0x44, 0xd2, 0xd2, 0x9b, 0xf4, 0xfd, - 0x9c, 0xd4, 0x25, 0x21, 0xe4, 0x22, 0x61, 0xe9, 0x4d, 0xfe, 0x57, 0x05, 0xb9, 0x20, 0x21, 0xe4, - 0xfd, 0x9b, 0xf0, 0x2b, 0x3f, 0x13, 0xe3, 0x93, 0x8e, 0xb0, 0xdd, 0x79, 0x18, 0xe2, 0x99, 0x4a, - 0x6f, 0xea, 0x0f, 0xf2, 0xc6, 0x05, 0x45, 0xee, 0x09, 0x88, 0xf7, 0x69, 0xf0, 0x9f, 0xe5, 0xa4, - 0x0c, 0x3f, 0x37, 0x07, 0xc3, 0xbe, 0xec, 0xa4, 0x37, 0xf9, 0x5f, 0xe3, 0xe4, 0x7e, 0x2a, 0x22, - 0x3a, 0xcf, 0x4e, 0x7a, 0x33, 0xf8, 0x39, 0x21, 0x3a, 0xa7, 0x20, 0x66, 0x13, 0x89, 0x49, 0x6f, - 0xea, 0x0f, 0x09, 0xab, 0x0b, 0x92, 0xdc, 0xd3, 0x90, 0x74, 0x27, 0x9b, 0xde, 0xf4, 0x1f, 0xe6, - 0xf4, 0x1e, 0x0d, 0xb1, 0x80, 0x6f, 0xb2, 0xeb, 0xcd, 0xe2, 0xaf, 0x0b, 0x0b, 0xf8, 0xa8, 0xc8, - 0x30, 0x0a, 0x27, 0x30, 0xbd, 0x39, 0x7d, 0x44, 0x0c, 0xa3, 0x50, 0xfe, 0x42, 0x7a, 0x93, 0xc6, - 0xfc, 0xde, 0x2c, 0xfe, 0x86, 0xe8, 0x4d, 0x8a, 0x4f, 0xc4, 0x08, 0x67, 0x04, 0xbd, 0x79, 0xfc, - 0xbc, 0x10, 0x23, 0x94, 0x10, 0xe4, 0x56, 0x01, 0xb5, 0x66, 0x03, 0xbd, 0xf9, 0x7d, 0x94, 0xf3, - 0x1b, 0x6f, 0x49, 0x06, 0x72, 0xcf, 0xc1, 0xe1, 0xf6, 0x99, 0x40, 0x6f, 0xae, 0x1f, 0xfb, 0x61, - 0x68, 0xed, 0xe6, 0x4f, 0x04, 0x72, 0xeb, 0xde, 0x94, 0xe2, 0xcf, 0x02, 0x7a, 0xb3, 0x7d, 0xe5, - 0x87, 0xc1, 0xc0, 0xed, 0x4f, 0x02, 0x72, 0x79, 0x00, 0x6f, 0x02, 0xee, 0xcd, 0xeb, 0x13, 0x9c, - 0x97, 0x8f, 0x88, 0x0c, 0x0d, 0x3e, 0xff, 0xf6, 0xa6, 0xbf, 0x21, 0x86, 0x06, 0xa7, 0x20, 0x43, - 0x43, 0x4c, 0xbd, 0xbd, 0xa9, 0x3f, 0x29, 0x86, 0x86, 0x20, 0x21, 0x9e, 0xed, 0x9b, 0xdd, 0x7a, - 0x73, 0xf8, 0xb4, 0xf0, 0x6c, 0x1f, 0x55, 0x6e, 0x19, 0xc6, 0x5b, 0x26, 0xc4, 0xde, 0xac, 0x7e, - 0x81, 0xb3, 0x4a, 0x87, 0xe7, 0x43, 0xff, 0xe4, 0xc5, 0x27, 0xc3, 0xde, 0xdc, 0x3e, 0x13, 0x9a, - 0xbc, 0xf8, 0x5c, 0x98, 0x3b, 0x0f, 0x09, 0xbd, 0x59, 0xaf, 0x93, 0xc1, 0x83, 0xba, 0xdf, 0x04, - 0xcc, 0xfc, 0xd7, 0x1f, 0x71, 0xeb, 0x08, 0x82, 0xdc, 0x59, 0x88, 0xe3, 0xc6, 0x26, 0xae, 0xf6, - 0xa2, 0xfc, 0xde, 0x8f, 0x44, 0xc0, 0x24, 0xd8, 0xb9, 0xa7, 0x01, 0xd8, 0xd6, 0x08, 0x3d, 0x0c, - 0xec, 0x41, 0xfb, 0xdf, 0x7e, 0xc4, 0xaf, 0xde, 0x78, 0x24, 0x1e, 0x03, 0x76, 0x91, 0xa7, 0x3b, - 0x83, 0xef, 0x07, 0x19, 0xd0, 0x1e, 0x79, 0x0a, 0x86, 0x5e, 0xb4, 0x0d, 0xdd, 0x51, 0x6b, 0xbd, - 0xa8, 0xff, 0x3b, 0xa7, 0x16, 0xf8, 0xc4, 0x60, 0x0d, 0xc3, 0xc2, 0x8e, 0x5a, 0xb3, 0x7b, 0xd1, - 0xfe, 0x0f, 0x4e, 0xeb, 0x12, 0x10, 0xe2, 0x8a, 0x6a, 0x3b, 0xfd, 0xe8, 0xfd, 0x87, 0x82, 0x58, - 0x10, 0x10, 0xa1, 0xc9, 0xef, 0x1d, 0xbc, 0xd7, 0x8b, 0xf6, 0x07, 0x42, 0x68, 0x8e, 0x9f, 0x7b, - 0x33, 0x24, 0xc9, 0x4f, 0x76, 0x9f, 0xae, 0x07, 0xf1, 0x1f, 0x71, 0x62, 0x8f, 0x82, 0xb4, 0x6c, - 0x3b, 0x55, 0x47, 0xeb, 0x6d, 0xec, 0x5b, 0xbc, 0xa7, 0x05, 0x7e, 0x2e, 0x0f, 0xc3, 0xb6, 0x53, - 0xad, 0x36, 0x79, 0x7e, 0xda, 0x83, 0xfc, 0x8f, 0x7f, 0xe4, 0x6e, 0x59, 0xb8, 0x34, 0xa4, 0xb7, - 0xaf, 0xee, 0x38, 0xa6, 0x41, 0x0f, 0x3c, 0x7a, 0x71, 0xf8, 0x21, 0xe7, 0xe0, 0x23, 0xc9, 0xcd, - 0x41, 0x8a, 0xe8, 0x62, 0x61, 0x13, 0xd3, 0xd3, 0xa9, 0x1e, 0x2c, 0xfe, 0x84, 0x1b, 0x20, 0x40, - 0x54, 0xf8, 0xa9, 0xaf, 0xbd, 0x3a, 0x25, 0x7d, 0xf3, 0xd5, 0x29, 0xe9, 0xf7, 0x5f, 0x9d, 0x92, - 0x3e, 0xf4, 0x9d, 0xa9, 0x81, 0x6f, 0x7e, 0x67, 0x6a, 0xe0, 0x77, 0xbf, 0x33, 0x35, 0xd0, 0x7e, - 0x97, 0x18, 0xe6, 0x8d, 0x79, 0x83, 0xed, 0x0f, 0xbf, 0x20, 0xd7, 0x34, 0x67, 0xbb, 0xb9, 0x39, - 0x5b, 0x31, 0x1a, 0x74, 0x1b, 0xd7, 0xdb, 0xad, 0x75, 0x17, 0x39, 0xf0, 0x9e, 0x28, 0x1c, 0xad, - 0x18, 0x76, 0xc3, 0xb0, 0xcb, 0x6c, 0xbf, 0x97, 0x15, 0xf8, 0x8e, 0x6f, 0xca, 0x5f, 0xd5, 0xc7, - 0xa6, 0xef, 0x45, 0x18, 0xa5, 0xaa, 0xd3, 0xed, 0x2e, 0xea, 0x6d, 0x3d, 0x03, 0xc4, 0xd7, 0xff, - 0x5d, 0x9c, 0x6a, 0x3d, 0xe2, 0x12, 0xd2, 0xd3, 0xfb, 0x75, 0x98, 0xd4, 0x1a, 0x66, 0x1d, 0xd3, - 0x6d, 0xfe, 0xb2, 0x5b, 0xd7, 0x9b, 0xdf, 0x37, 0x38, 0xbf, 0x09, 0x8f, 0x7c, 0x41, 0x50, 0xe7, - 0x16, 0x61, 0x5c, 0xad, 0x54, 0xb0, 0x19, 0x60, 0xd9, 0xa3, 0x5b, 0x84, 0x80, 0x69, 0x4e, 0xe9, - 0x72, 0x2b, 0x3c, 0xdd, 0xa9, 0x6b, 0x5e, 0xb8, 0xd7, 0x67, 0x79, 0x0b, 0xd7, 0xb0, 0xfe, 0xb0, - 0x8e, 0x9d, 0xab, 0x86, 0xb5, 0xc3, 0xcd, 0xfb, 0x30, 0x6b, 0x6a, 0x90, 0xdd, 0x60, 0x86, 0xf7, - 0x45, 0x61, 0x8a, 0x55, 0x9c, 0xde, 0x54, 0x6d, 0x7c, 0xfa, 0xca, 0xa3, 0x9b, 0xd8, 0x51, 0x1f, - 0x3d, 0x5d, 0x31, 0x34, 0x9d, 0xf7, 0xc4, 0x04, 0xef, 0x17, 0x52, 0x3f, 0xcb, 0xeb, 0xb3, 0x6d, - 0xb7, 0xe9, 0xe5, 0x79, 0x88, 0xcd, 0x19, 0x9a, 0x8e, 0x26, 0x21, 0x5e, 0xc5, 0xba, 0xd1, 0xe0, - 0x77, 0xee, 0x58, 0x01, 0xdd, 0x0d, 0x83, 0x6a, 0xc3, 0x68, 0xea, 0x0e, 0x3b, 0xa1, 0x28, 0x0c, - 0x7f, 0xed, 0xe6, 0xf4, 0xc0, 0xef, 0xdd, 0x9c, 0x8e, 0x2e, 0xe8, 0x8e, 0xc2, 0xab, 0x72, 0xb1, - 0xd7, 0x3e, 0x35, 0x2d, 0xc9, 0xcf, 0xc0, 0x50, 0x11, 0x57, 0x0e, 0xc2, 0xab, 0x88, 0x2b, 0x21, - 0x5e, 0x0f, 0x40, 0x62, 0x41, 0x77, 0xd8, 0xad, 0xc8, 0x13, 0x10, 0xd5, 0x74, 0x76, 0xd1, 0x26, - 0xd4, 0x3e, 0x81, 0x13, 0xd4, 0x22, 0xae, 0xb8, 0xa8, 0x55, 0x5c, 0x09, 0xa3, 0x12, 0xf6, 0x04, - 0x5e, 0x28, 0xfe, 0xee, 0x7f, 0x9e, 0x1a, 0x78, 0xf9, 0xd5, 0xa9, 0x81, 0x8e, 0x3d, 0xe1, 0x1f, - 0x03, 0xdc, 0xc4, 0xbc, 0x0b, 0xec, 0xea, 0x0e, 0x3b, 0x23, 0x71, 0xbb, 0xe1, 0xb7, 0x06, 0x41, - 0xe6, 0x38, 0xb6, 0xa3, 0xee, 0x68, 0x7a, 0xcd, 0xed, 0x09, 0xb5, 0xe9, 0x6c, 0x5f, 0xe3, 0x5d, - 0x71, 0x98, 0x77, 0x05, 0xc7, 0xe9, 0xde, 0x1b, 0xd9, 0xce, 0xa3, 0x2b, 0xdb, 0xa3, 0xcf, 0xe5, - 0x7f, 0x1d, 0x05, 0xb4, 0xe6, 0xa8, 0x3b, 0x38, 0xdf, 0x74, 0xb6, 0x0d, 0x4b, 0xbb, 0xc6, 0x62, - 0x19, 0x06, 0x68, 0xa8, 0xbb, 0x65, 0xc7, 0xd8, 0xc1, 0xba, 0x4d, 0x4d, 0x33, 0x7c, 0xe6, 0xe8, - 0x6c, 0x1b, 0xff, 0x98, 0x25, 0x5d, 0x57, 0x78, 0xf0, 0x73, 0xdf, 0x9e, 0xbe, 0xbf, 0xb7, 0x15, - 0x28, 0x32, 0x49, 0xae, 0x77, 0xd7, 0x29, 0x63, 0x74, 0x19, 0xd8, 0x25, 0x8b, 0x72, 0x5d, 0xb3, - 0x1d, 0x7e, 0x4f, 0xfb, 0xec, 0x6c, 0x7b, 0xdd, 0x67, 0x5b, 0xc5, 0x9c, 0xbd, 0xac, 0xd6, 0xb5, - 0xaa, 0xea, 0x18, 0x96, 0x7d, 0x71, 0x40, 0x49, 0x52, 0x56, 0x8b, 0x9a, 0xed, 0xa0, 0x75, 0x48, - 0x56, 0xb1, 0xbe, 0xc7, 0xd8, 0x46, 0x5f, 0x1f, 0xdb, 0x04, 0xe1, 0x44, 0xb9, 0x3e, 0x0f, 0x48, - 0xf5, 0xe3, 0x89, 0x87, 0x49, 0xec, 0x7e, 0x65, 0x07, 0xf6, 0x01, 0xce, 0xf4, 0x1d, 0xc5, 0xb8, - 0x1a, 0x06, 0x65, 0xef, 0x03, 0xf0, 0xda, 0x44, 0x19, 0x18, 0x52, 0xab, 0x55, 0x0b, 0xdb, 0x36, - 0x3d, 0x00, 0x4c, 0x2a, 0xa2, 0x98, 0x1b, 0xff, 0x37, 0x5f, 0x7a, 0x78, 0x24, 0xc0, 0xb1, 0x90, - 0x02, 0xb8, 0xe2, 0x92, 0x9e, 0xfa, 0xa4, 0x04, 0xe3, 0x2d, 0x2d, 0x22, 0x19, 0xa6, 0xf2, 0x1b, - 0xeb, 0x17, 0x57, 0x94, 0x85, 0x17, 0xf2, 0xeb, 0x0b, 0x2b, 0xcb, 0x65, 0x76, 0xe5, 0x7f, 0x79, - 0x6d, 0xb5, 0x34, 0xb7, 0x70, 0x61, 0xa1, 0x54, 0x4c, 0x0f, 0xa0, 0x69, 0x38, 0xd6, 0x06, 0xa7, - 0x58, 0x5a, 0x2c, 0xcd, 0xe7, 0xd7, 0x4b, 0x69, 0x09, 0xdd, 0x05, 0x27, 0xda, 0x32, 0x71, 0x51, - 0x22, 0x1d, 0x50, 0x94, 0x92, 0x8b, 0x12, 0x2d, 0x5c, 0xe8, 0x38, 0x8a, 0x1e, 0xea, 0xea, 0x3f, - 0xbb, 0xee, 0x70, 0x09, 0x8e, 0xa7, 0x3f, 0x91, 0xe0, 0x68, 0x78, 0xca, 0x50, 0xf5, 0xbd, 0x0e, - 0xaf, 0x3e, 0x3b, 0x44, 0xb3, 0x37, 0x41, 0x34, 0xaf, 0xef, 0xa1, 0xa3, 0x2c, 0x9f, 0x2e, 0x37, - 0xad, 0x3a, 0x8f, 0x41, 0x43, 0xa4, 0xbc, 0x61, 0xd5, 0x49, 0x6c, 0x12, 0x17, 0xfd, 0xa5, 0x93, - 0x29, 0x7e, 0x7b, 0x3f, 0x17, 0xfb, 0xc1, 0xa7, 0xa7, 0x07, 0x0a, 0x3b, 0x61, 0x95, 0xbe, 0xd2, - 0x73, 0x06, 0x4d, 0xe4, 0xf5, 0x3d, 0x1a, 0x7c, 0x56, 0xa5, 0x17, 0xe2, 0x54, 0x21, 0x71, 0x68, - 0x3a, 0x15, 0x3e, 0x34, 0x7d, 0x0e, 0xd7, 0xeb, 0x97, 0x74, 0xe3, 0x2a, 0xed, 0x49, 0x4f, 0xef, - 0x8f, 0x44, 0x60, 0xaa, 0x65, 0xaa, 0xe4, 0x59, 0x45, 0xa7, 0x27, 0xaf, 0x39, 0x48, 0x14, 0x45, - 0xb2, 0x92, 0x81, 0x21, 0x1b, 0x57, 0x0c, 0xbd, 0xca, 0x46, 0x77, 0x54, 0x11, 0x45, 0xa2, 0xaa, - 0xae, 0xea, 0x86, 0xcd, 0xef, 0xd9, 0xb3, 0x42, 0xe1, 0xe3, 0xd2, 0xfe, 0x72, 0x84, 0x11, 0xd1, - 0x92, 0x50, 0xf3, 0xd1, 0x9e, 0xc7, 0xc8, 0x3b, 0x44, 0x4b, 0x57, 0x89, 0xc0, 0x51, 0x72, 0xbf, - 0x56, 0xf9, 0xf9, 0x08, 0x4c, 0x87, 0xad, 0x42, 0x52, 0x35, 0xdb, 0x51, 0x1b, 0x66, 0x27, 0xb3, - 0x9c, 0x87, 0xe4, 0xba, 0xc0, 0xd9, 0xb7, 0x5d, 0x6e, 0xec, 0xd3, 0x2e, 0xa3, 0x6e, 0x53, 0xc2, - 0x30, 0x67, 0xfa, 0x34, 0x8c, 0xab, 0xc7, 0x81, 0x2c, 0xf3, 0xb9, 0x18, 0x9c, 0xa0, 0x0f, 0xb1, - 0xac, 0x86, 0xa6, 0x3b, 0xa7, 0x2b, 0xd6, 0x9e, 0xe9, 0xd0, 0x64, 0xcd, 0xd8, 0xe2, 0x76, 0x19, - 0xf7, 0xaa, 0x67, 0x59, 0x75, 0x87, 0xd1, 0xb2, 0x05, 0xf1, 0x55, 0x42, 0x47, 0x2c, 0xe2, 0x18, - 0x8e, 0x5a, 0xe7, 0x96, 0x62, 0x05, 0x02, 0x65, 0x8f, 0xb7, 0x22, 0x0c, 0xaa, 0x89, 0x77, 0x5b, - 0x75, 0xac, 0x6e, 0xb1, 0x3b, 0xf0, 0x51, 0x3a, 0x88, 0x12, 0x04, 0x40, 0xaf, 0xbb, 0x4f, 0x42, - 0x5c, 0x6d, 0xb2, 0xeb, 0x1b, 0x51, 0x32, 0xba, 0x68, 0x41, 0xbe, 0x04, 0x43, 0xfc, 0x10, 0x19, - 0xa5, 0x21, 0xba, 0x83, 0xf7, 0x68, 0x3b, 0x29, 0x85, 0xfc, 0x44, 0xb3, 0x10, 0xa7, 0xc2, 0xf3, - 0x49, 0x23, 0x33, 0xdb, 0x22, 0xfd, 0x2c, 0x15, 0x52, 0x61, 0x68, 0xf2, 0x33, 0x90, 0x28, 0x1a, - 0x0d, 0x4d, 0x37, 0x82, 0xdc, 0x92, 0x8c, 0x1b, 0x95, 0xd9, 0x6c, 0xf2, 0x1c, 0x43, 0x61, 0x05, - 0x74, 0x18, 0x06, 0xd9, 0x9b, 0x08, 0x7e, 0x05, 0x85, 0x97, 0xe4, 0x39, 0x18, 0xa2, 0xbc, 0x57, - 0x4c, 0x84, 0xf8, 0x6b, 0x3a, 0xfe, 0xf8, 0x82, 0xa6, 0xa3, 0x9c, 0x7d, 0xc4, 0x13, 0x16, 0x41, - 0xac, 0xaa, 0x3a, 0x2a, 0xd7, 0x9b, 0xfe, 0x96, 0xdf, 0x02, 0x09, 0xce, 0xc4, 0x46, 0x67, 0x20, - 0x6a, 0x98, 0x36, 0xbf, 0x44, 0x92, 0xed, 0xa4, 0xca, 0x8a, 0x59, 0x88, 0x91, 0xec, 0x44, 0x21, - 0xc8, 0x05, 0xa5, 0x63, 0x20, 0x7d, 0xd2, 0x17, 0x48, 0x7d, 0x5d, 0xee, 0xfb, 0xc9, 0xba, 0xb4, - 0xc5, 0x1d, 0x5c, 0x67, 0xf9, 0x74, 0x04, 0xa6, 0x7c, 0xb5, 0x57, 0xb0, 0x65, 0x6b, 0x86, 0xce, - 0xe7, 0x70, 0xe6, 0x2d, 0xc8, 0x27, 0x24, 0xaf, 0xef, 0xe0, 0x2e, 0x6f, 0x86, 0x68, 0xde, 0x34, - 0x51, 0x16, 0x12, 0xb4, 0x5c, 0x31, 0x98, 0xbf, 0xc4, 0x14, 0xb7, 0x4c, 0xea, 0x6c, 0x63, 0xcb, - 0xb9, 0xaa, 0x5a, 0xee, 0xb3, 0x41, 0x51, 0x96, 0x9f, 0x82, 0xe4, 0x9c, 0xa1, 0xdb, 0x58, 0xb7, - 0x9b, 0x74, 0x0c, 0x6e, 0xd6, 0x8d, 0xca, 0x0e, 0xe7, 0xc0, 0x0a, 0xc4, 0xe0, 0xaa, 0x69, 0x52, - 0xca, 0x98, 0x42, 0x7e, 0xb2, 0x7c, 0xb0, 0xb0, 0xd6, 0xd1, 0x44, 0x4f, 0xed, 0xdf, 0x44, 0x5c, - 0x49, 0xd7, 0x46, 0xff, 0x47, 0x82, 0xe3, 0xad, 0x03, 0x6a, 0x07, 0xef, 0xd9, 0xfb, 0x1d, 0x4f, - 0xcf, 0x43, 0x72, 0x95, 0xbe, 0xdd, 0xbf, 0x84, 0xf7, 0x50, 0x16, 0x86, 0x70, 0xf5, 0xcc, 0xd9, - 0xb3, 0x8f, 0x3e, 0xc5, 0xbc, 0xfd, 0xe2, 0x80, 0x22, 0x00, 0x68, 0x0a, 0x92, 0x36, 0xae, 0x98, - 0x67, 0xce, 0x9e, 0xdb, 0x79, 0x94, 0xb9, 0x17, 0xc9, 0x7a, 0x5c, 0x50, 0x2e, 0x41, 0xb4, 0x7e, - 0xed, 0xd3, 0xd3, 0x52, 0x21, 0x0e, 0x51, 0xbb, 0xd9, 0xb8, 0xa3, 0x3e, 0xf2, 0x4a, 0x1c, 0x66, - 0xfc, 0x94, 0x34, 0x52, 0xb9, 0x99, 0x08, 0xb7, 0x41, 0xda, 0x67, 0x03, 0x8a, 0xd1, 0x21, 0x81, - 0xed, 0x6a, 0x49, 0xf9, 0xd7, 0x24, 0x48, 0xb9, 0xe9, 0xd1, 0x1a, 0x76, 0xd0, 0x79, 0x7f, 0xce, - 0xc3, 0x87, 0xcd, 0xb1, 0xd9, 0x70, 0x5b, 0x5e, 0x1a, 0xa7, 0xf8, 0xd0, 0xd1, 0x13, 0xd4, 0x11, - 0x4d, 0xc3, 0xe6, 0x4f, 0xc9, 0x7a, 0x90, 0xba, 0xc8, 0xe8, 0x21, 0x40, 0x34, 0xc2, 0x95, 0xaf, - 0x18, 0x8e, 0xa6, 0xd7, 0xca, 0xa6, 0x71, 0x95, 0x3f, 0xd0, 0x8d, 0x2a, 0x69, 0x5a, 0x73, 0x99, - 0x56, 0xac, 0x12, 0x38, 0x11, 0x3a, 0xe9, 0x72, 0x09, 0xa6, 0x74, 0x24, 0x08, 0x88, 0x22, 0x3a, - 0x0f, 0x43, 0x66, 0x73, 0xb3, 0x2c, 0x22, 0xc6, 0xf0, 0x99, 0xe3, 0xed, 0xc6, 0xbf, 0xf0, 0x0f, - 0x1e, 0x01, 0x06, 0xcd, 0xe6, 0x26, 0xf1, 0x96, 0xbb, 0x20, 0xd5, 0x46, 0x98, 0xe1, 0x2b, 0x9e, - 0x1c, 0xf4, 0x93, 0x11, 0x5c, 0x83, 0xb2, 0x69, 0x69, 0x86, 0xa5, 0x39, 0x7b, 0x34, 0x67, 0x8d, - 0x2a, 0x69, 0x51, 0xb1, 0xca, 0xe1, 0xf2, 0x0e, 0x8c, 0xad, 0xd1, 0x35, 0xad, 0x27, 0xf9, 0x59, - 0x4f, 0x3e, 0xa9, 0xb7, 0x7c, 0x1d, 0x25, 0x8b, 0xb4, 0x48, 0x56, 0x78, 0xb6, 0xa3, 0x77, 0x3e, - 0xb1, 0x7f, 0xef, 0x0c, 0x66, 0x85, 0x7f, 0x78, 0x34, 0x30, 0x38, 0x99, 0x73, 0xfa, 0xc3, 0x57, - 0xbf, 0x8e, 0xd9, 0x2b, 0x9b, 0xc8, 0x76, 0x9f, 0x54, 0xb3, 0x3d, 0xc2, 0x68, 0xb6, 0xe7, 0x10, - 0x92, 0x9f, 0x82, 0x91, 0x55, 0xd5, 0x72, 0xd6, 0xb0, 0x73, 0x11, 0xab, 0x55, 0x6c, 0x05, 0x67, - 0xdd, 0x11, 0x31, 0xeb, 0x22, 0x88, 0xd1, 0xa9, 0x95, 0xcd, 0x3a, 0xf4, 0xb7, 0xbc, 0x0d, 0x31, - 0x7a, 0x1b, 0xd4, 0x9d, 0x91, 0x39, 0x05, 0x9b, 0x91, 0x49, 0x2c, 0xdd, 0x73, 0xb0, 0x2d, 0x52, - 0x5a, 0x5a, 0x40, 0x8f, 0x8b, 0x79, 0x35, 0xda, 0x7d, 0x5e, 0xe5, 0x8e, 0xc8, 0x67, 0xd7, 0x3a, - 0x0c, 0x15, 0x48, 0x28, 0x5e, 0x28, 0xba, 0x82, 0x48, 0x9e, 0x20, 0x68, 0x09, 0xc6, 0x4c, 0xd5, - 0x72, 0xe8, 0x33, 0x98, 0x6d, 0xaa, 0x05, 0xf7, 0xf5, 0xe9, 0xd6, 0x91, 0x17, 0x50, 0x96, 0xb7, - 0x32, 0x62, 0xfa, 0x81, 0xf2, 0x1f, 0xc4, 0x60, 0x90, 0x1b, 0xe3, 0xcd, 0x30, 0xc4, 0xcd, 0xca, - 0xbd, 0xf3, 0xc4, 0x6c, 0xeb, 0xc4, 0x34, 0xeb, 0x4e, 0x20, 0x9c, 0x9f, 0xa0, 0x41, 0xf7, 0x41, - 0xa2, 0xb2, 0xad, 0x6a, 0x7a, 0x59, 0xab, 0x8a, 0xed, 0x85, 0x57, 0x6f, 0x4e, 0x0f, 0xcd, 0x11, - 0xd8, 0x42, 0x51, 0x19, 0xa2, 0x95, 0x0b, 0x55, 0x92, 0x09, 0x6c, 0x63, 0xad, 0xb6, 0xed, 0xf0, - 0x11, 0xc6, 0x4b, 0xe8, 0x49, 0x88, 0x11, 0x87, 0xe0, 0x8f, 0x24, 0xb3, 0x2d, 0x9b, 0x3c, 0x6e, - 0xb2, 0x57, 0x48, 0x90, 0x86, 0x3f, 0xf4, 0xed, 0x69, 0x49, 0xa1, 0x14, 0x68, 0x0e, 0x46, 0xea, - 0xaa, 0xed, 0x94, 0xe9, 0x0c, 0x46, 0x9a, 0x8f, 0xf3, 0x35, 0x76, 0x8b, 0x41, 0xb8, 0x61, 0xb9, - 0xe8, 0xc3, 0x84, 0x8a, 0x81, 0xaa, 0xe8, 0x24, 0xa4, 0x29, 0x93, 0x8a, 0xd1, 0x68, 0x68, 0x0e, - 0xcb, 0xad, 0x06, 0xa9, 0xdd, 0x47, 0x09, 0x7c, 0x8e, 0x82, 0x69, 0x86, 0x75, 0x0c, 0x92, 0xf4, - 0x59, 0x16, 0x45, 0x61, 0x57, 0x90, 0x13, 0x04, 0x40, 0x2b, 0xef, 0x87, 0x31, 0x2f, 0x3e, 0x32, - 0x94, 0x04, 0xe3, 0xe2, 0x81, 0x29, 0xe2, 0x23, 0x30, 0xa9, 0xe3, 0x5d, 0x7a, 0x29, 0x3a, 0x80, - 0x9d, 0xa4, 0xd8, 0x88, 0xd4, 0x5d, 0x0e, 0x52, 0xdc, 0x0b, 0xa3, 0x15, 0x61, 0x7c, 0x86, 0x0b, - 0x14, 0x77, 0xc4, 0x85, 0x52, 0xb4, 0xa3, 0x90, 0x50, 0x4d, 0x93, 0x21, 0x0c, 0xf3, 0xf8, 0x68, - 0x9a, 0xb4, 0xea, 0x14, 0x8c, 0x53, 0x1d, 0x2d, 0x6c, 0x37, 0xeb, 0x0e, 0x67, 0x92, 0xa2, 0x38, - 0x63, 0xa4, 0x42, 0x61, 0x70, 0x8a, 0x7b, 0x37, 0x8c, 0xe0, 0x2b, 0x5a, 0x15, 0xeb, 0x15, 0xcc, - 0xf0, 0x46, 0x28, 0x5e, 0x4a, 0x00, 0x29, 0xd2, 0x03, 0xe0, 0xc6, 0xbd, 0xb2, 0x88, 0xc9, 0xa3, - 0x8c, 0x9f, 0x80, 0xe7, 0x19, 0x58, 0xce, 0x40, 0xac, 0xa8, 0x3a, 0x2a, 0x49, 0x30, 0x9c, 0x5d, - 0x36, 0xd1, 0xa4, 0x14, 0xf2, 0x53, 0x7e, 0x2d, 0x02, 0xb1, 0xcb, 0x86, 0x83, 0xd1, 0x63, 0xbe, - 0x04, 0x70, 0xb4, 0x9d, 0x3f, 0xaf, 0x69, 0x35, 0x1d, 0x57, 0x97, 0xec, 0x9a, 0xef, 0x1b, 0x0a, - 0x9e, 0x3b, 0x45, 0x02, 0xee, 0x34, 0x09, 0x71, 0xcb, 0x68, 0xea, 0x55, 0x71, 0x7b, 0x97, 0x16, - 0x50, 0x09, 0x12, 0xae, 0x97, 0xc4, 0x7a, 0x79, 0xc9, 0x18, 0xf1, 0x12, 0xe2, 0xc3, 0x1c, 0xa0, - 0x0c, 0x6d, 0x72, 0x67, 0x29, 0x40, 0xd2, 0x0d, 0x5e, 0xdc, 0xdb, 0xfa, 0x73, 0x58, 0x8f, 0x8c, - 0x4c, 0x26, 0x6e, 0xdf, 0xbb, 0xc6, 0x63, 0x1e, 0x97, 0x76, 0x2b, 0xb8, 0xf5, 0x02, 0x6e, 0xc5, - 0xbf, 0xe7, 0x30, 0x44, 0xf5, 0xf2, 0xdc, 0x8a, 0x7d, 0xd3, 0xe1, 0x38, 0x24, 0x6d, 0xad, 0xa6, - 0xab, 0x4e, 0xd3, 0xc2, 0xdc, 0xf3, 0x3c, 0x80, 0xfc, 0x15, 0x09, 0x06, 0x99, 0x27, 0xfb, 0xec, - 0x26, 0xb5, 0xb7, 0x5b, 0xa4, 0x93, 0xdd, 0xa2, 0x07, 0xb7, 0x5b, 0x1e, 0xc0, 0x15, 0xc6, 0xe6, - 0xcf, 0xec, 0xdb, 0x64, 0x0c, 0x4c, 0xc4, 0x35, 0xad, 0xc6, 0x07, 0xaa, 0x8f, 0x48, 0xfe, 0x4f, - 0x12, 0x49, 0x62, 0x79, 0x3d, 0xca, 0xc3, 0x88, 0x90, 0xab, 0xbc, 0x55, 0x57, 0x6b, 0xdc, 0x77, - 0x4e, 0x74, 0x14, 0xee, 0x42, 0x5d, 0xad, 0x29, 0xc3, 0x5c, 0x1e, 0x52, 0x68, 0xdf, 0x0f, 0x91, - 0x0e, 0xfd, 0x10, 0xe8, 0xf8, 0xe8, 0xc1, 0x3a, 0x3e, 0xd0, 0x45, 0xb1, 0x70, 0x17, 0x7d, 0x31, - 0x42, 0x17, 0x33, 0xa6, 0x61, 0xab, 0xf5, 0x1f, 0xc7, 0x88, 0x38, 0x06, 0x49, 0xd3, 0xa8, 0x97, - 0x59, 0x0d, 0xbb, 0xd5, 0x9e, 0x30, 0x8d, 0xba, 0xd2, 0xd2, 0xed, 0xf1, 0xdb, 0x34, 0x5c, 0x06, - 0x6f, 0x83, 0xd5, 0x86, 0xc2, 0x56, 0xb3, 0x20, 0xc5, 0x4c, 0xc1, 0xe7, 0xb2, 0x47, 0x88, 0x0d, - 0xe8, 0xe4, 0x28, 0xb5, 0xce, 0xbd, 0x4c, 0x6c, 0x86, 0xa9, 0x70, 0x3c, 0x42, 0xc1, 0x42, 0x7f, - 0xbb, 0x55, 0xb0, 0xdf, 0x2d, 0x15, 0x8e, 0x27, 0xff, 0x4d, 0x09, 0x60, 0x91, 0x58, 0x96, 0xea, - 0x4b, 0x66, 0x21, 0x9b, 0x8a, 0x50, 0x0e, 0xb4, 0x3c, 0xd5, 0xa9, 0xd3, 0x78, 0xfb, 0x29, 0xdb, - 0x2f, 0xf7, 0x1c, 0x8c, 0x78, 0xce, 0x68, 0x63, 0x21, 0xcc, 0x54, 0x97, 0xac, 0x7a, 0x0d, 0x3b, - 0x4a, 0xea, 0x8a, 0xaf, 0x24, 0xff, 0x73, 0x09, 0x92, 0x54, 0xa6, 0x25, 0xec, 0xa8, 0x81, 0x3e, - 0x94, 0x0e, 0xde, 0x87, 0x27, 0x00, 0x18, 0x1b, 0x5b, 0xbb, 0x86, 0xb9, 0x67, 0x25, 0x29, 0x64, - 0x4d, 0xbb, 0x86, 0xd1, 0x39, 0xd7, 0xe0, 0xd1, 0xee, 0x06, 0x17, 0x59, 0x37, 0x37, 0xfb, 0x11, - 0x18, 0xa2, 0x9f, 0xa5, 0xda, 0xb5, 0x79, 0x22, 0x3d, 0xa8, 0x37, 0x1b, 0xeb, 0xbb, 0xb6, 0xfc, - 0x22, 0x0c, 0xad, 0xef, 0xb2, 0xbd, 0x91, 0x63, 0x90, 0xb4, 0x0c, 0x83, 0xcf, 0xc9, 0x2c, 0x17, - 0x4a, 0x10, 0x00, 0x9d, 0x82, 0xc4, 0x7e, 0x40, 0xc4, 0xdb, 0x0f, 0xf0, 0x36, 0x34, 0xa2, 0x7d, - 0x6d, 0x68, 0x9c, 0xfa, 0xf7, 0x12, 0x0c, 0xfb, 0xe2, 0x03, 0x7a, 0x14, 0x0e, 0x15, 0x16, 0x57, - 0xe6, 0x2e, 0x95, 0x17, 0x8a, 0xe5, 0x0b, 0x8b, 0xf9, 0x79, 0xef, 0xdd, 0x56, 0xf6, 0xf0, 0xf5, - 0x1b, 0x33, 0xc8, 0x87, 0xbb, 0xa1, 0xd3, 0x1d, 0x25, 0x74, 0x1a, 0x26, 0x83, 0x24, 0xf9, 0xc2, - 0x5a, 0x69, 0x79, 0x3d, 0x2d, 0x65, 0x0f, 0x5d, 0xbf, 0x31, 0x33, 0xee, 0xa3, 0xc8, 0x6f, 0xda, - 0x58, 0x77, 0x5a, 0x09, 0xe6, 0x56, 0x96, 0x96, 0x16, 0xd6, 0xd3, 0x91, 0x16, 0x02, 0x1e, 0xb0, - 0x1f, 0x80, 0xf1, 0x20, 0xc1, 0xf2, 0xc2, 0x62, 0x3a, 0x9a, 0x45, 0xd7, 0x6f, 0xcc, 0x8c, 0xfa, - 0xb0, 0x97, 0xb5, 0x7a, 0x36, 0xf1, 0x81, 0xcf, 0x4c, 0x0d, 0xfc, 0xd2, 0x2f, 0x4e, 0x49, 0x44, - 0xb3, 0x91, 0x40, 0x8c, 0x40, 0x0f, 0xc1, 0x91, 0xb5, 0x85, 0xf9, 0xe5, 0x52, 0xb1, 0xbc, 0xb4, - 0x36, 0x2f, 0xf6, 0x9d, 0x85, 0x76, 0x63, 0xd7, 0x6f, 0xcc, 0x0c, 0x73, 0x95, 0x3a, 0x61, 0xaf, - 0x2a, 0xa5, 0xcb, 0x2b, 0xeb, 0xa5, 0xb4, 0xc4, 0xb0, 0x57, 0x2d, 0x7c, 0xc5, 0x70, 0xd8, 0x77, - 0xeb, 0x1e, 0x81, 0xa3, 0x6d, 0xb0, 0x5d, 0xc5, 0xc6, 0xaf, 0xdf, 0x98, 0x19, 0x59, 0xb5, 0x30, - 0x1b, 0x3f, 0x94, 0x62, 0x16, 0x32, 0xad, 0x14, 0x2b, 0xab, 0x2b, 0x6b, 0xf9, 0xc5, 0xf4, 0x4c, - 0x36, 0x7d, 0xfd, 0xc6, 0x4c, 0x4a, 0x04, 0x43, 0xba, 0xb9, 0xef, 0x6a, 0x76, 0x27, 0x57, 0x3c, - 0x7f, 0xfc, 0x30, 0xdc, 0xd3, 0xe1, 0x5c, 0x49, 0x9c, 0x48, 0x1c, 0xe8, 0x64, 0xa9, 0xe3, 0xde, - 0x7a, 0xb6, 0xc7, 0xf6, 0x73, 0xef, 0xa5, 0xd3, 0xc1, 0x4f, 0xad, 0xb2, 0x5d, 0x17, 0x77, 0xf2, - 0x07, 0x25, 0x18, 0xbd, 0xa8, 0xd9, 0x8e, 0x61, 0x69, 0x15, 0xb5, 0x4e, 0x5f, 0x6b, 0x9d, 0xeb, - 0x37, 0xb6, 0x86, 0x86, 0xfa, 0xd3, 0x30, 0x78, 0x45, 0xad, 0xb3, 0xa0, 0x16, 0xa5, 0x1f, 0x97, - 0xe9, 0x70, 0xcc, 0xe3, 0x86, 0x36, 0xc1, 0x80, 0x91, 0xc9, 0xbf, 0x12, 0x81, 0x31, 0x3a, 0x18, - 0x6c, 0xf6, 0xd9, 0x31, 0xb2, 0xc6, 0x2a, 0x40, 0xcc, 0x52, 0x1d, 0xbe, 0x69, 0x58, 0x98, 0xe5, - 0x27, 0x8e, 0xf7, 0xf5, 0x71, 0x7e, 0x56, 0xc4, 0x15, 0x85, 0xd2, 0xa2, 0x77, 0x40, 0xa2, 0xa1, - 0xee, 0x96, 0x29, 0x1f, 0xb6, 0x72, 0xc9, 0xef, 0x8f, 0xcf, 0xad, 0x9b, 0xd3, 0x63, 0x7b, 0x6a, - 0xa3, 0x9e, 0x93, 0x05, 0x1f, 0x59, 0x19, 0x6a, 0xa8, 0xbb, 0x44, 0x44, 0x64, 0xc2, 0x18, 0x81, - 0x56, 0xb6, 0x55, 0xbd, 0x86, 0x59, 0x23, 0x74, 0x0b, 0xb4, 0x70, 0x71, 0xdf, 0x8d, 0x1c, 0xf6, - 0x1a, 0xf1, 0xb1, 0x93, 0x95, 0x91, 0x86, 0xba, 0x3b, 0x47, 0x01, 0xa4, 0xc5, 0x5c, 0xe2, 0xa3, - 0x9f, 0x9a, 0x1e, 0xa0, 0xa7, 0xb8, 0xdf, 0x92, 0x00, 0x3c, 0x8b, 0xa1, 0x77, 0x40, 0xba, 0xe2, - 0x96, 0x28, 0xad, 0x38, 0x8f, 0xbc, 0xbf, 0x53, 0x5f, 0x84, 0xec, 0xcd, 0xe6, 0xe6, 0x6f, 0xde, - 0x9c, 0x96, 0x94, 0xb1, 0x4a, 0xa8, 0x2b, 0xde, 0x0e, 0xc3, 0x4d, 0xb3, 0xaa, 0x3a, 0xb8, 0x4c, - 0xd7, 0x71, 0x91, 0x9e, 0xf3, 0xfc, 0x14, 0xe1, 0x75, 0xeb, 0xe6, 0x34, 0x62, 0x6a, 0xf9, 0x88, - 0x65, 0x3a, 0xfb, 0x03, 0x83, 0x10, 0x02, 0x9f, 0x4e, 0x5f, 0x97, 0x60, 0xb8, 0xe8, 0xbb, 0x47, - 0x99, 0x81, 0xa1, 0x86, 0xa1, 0x6b, 0x3b, 0xdc, 0x1f, 0x93, 0x8a, 0x28, 0xa2, 0x2c, 0x24, 0xd8, - 0x03, 0x56, 0x67, 0x4f, 0x6c, 0x85, 0x8a, 0x32, 0xa1, 0xba, 0x8a, 0x37, 0x6d, 0x4d, 0xf4, 0x86, - 0x22, 0x8a, 0xe8, 0x02, 0xa4, 0x6d, 0x5c, 0x69, 0x5a, 0x9a, 0xb3, 0x57, 0xae, 0x18, 0xba, 0xa3, - 0x56, 0x1c, 0xf6, 0x14, 0xb2, 0x70, 0xec, 0xd6, 0xcd, 0xe9, 0x23, 0x4c, 0xd6, 0x30, 0x86, 0xac, - 0x8c, 0x09, 0xd0, 0x1c, 0x83, 0x90, 0x16, 0xaa, 0xd8, 0x51, 0xb5, 0xba, 0x9d, 0x61, 0x17, 0x12, - 0x44, 0xd1, 0xa7, 0xcb, 0xe7, 0x87, 0xfc, 0x1b, 0x5b, 0x17, 0x20, 0x6d, 0x98, 0xd8, 0x0a, 0x24, - 0xa2, 0x52, 0xb8, 0xe5, 0x30, 0x86, 0xac, 0x8c, 0x09, 0x90, 0x48, 0x52, 0x1d, 0xd2, 0xcd, 0x62, - 0xa1, 0x68, 0x36, 0x37, 0xbd, 0xfd, 0xb0, 0xc9, 0x96, 0xde, 0xc8, 0xeb, 0x7b, 0x85, 0xc7, 0x3c, - 0xee, 0x61, 0x3a, 0xf9, 0x1b, 0x5f, 0x7a, 0x78, 0x92, 0xbb, 0x86, 0xb7, 0x3f, 0x75, 0x09, 0xef, - 0x91, 0xee, 0xe7, 0xa8, 0xab, 0x14, 0x93, 0xa4, 0x9d, 0x2f, 0xaa, 0x5a, 0x5d, 0x3c, 0xe9, 0x57, - 0x78, 0x09, 0xe5, 0x60, 0xd0, 0x76, 0x54, 0xa7, 0x69, 0xf3, 0xd3, 0x5d, 0xb9, 0x93, 0xab, 0x15, - 0x0c, 0xbd, 0xba, 0x46, 0x31, 0x15, 0x4e, 0x81, 0x2e, 0xc0, 0x20, 0x3f, 0x36, 0x8f, 0xef, 0x7b, - 0x7c, 0xd3, 0xfb, 0x11, 0x8c, 0x9a, 0x58, 0xa4, 0x8a, 0xeb, 0xb8, 0xc6, 0xd2, 0xaa, 0x6d, 0x95, - 0xac, 0x3e, 0xe8, 0xf7, 0xf6, 0x0a, 0x0b, 0xfb, 0x1e, 0x84, 0xdc, 0x52, 0x61, 0x7e, 0xb2, 0x32, - 0xe6, 0x82, 0xd6, 0x28, 0x04, 0x5d, 0x0a, 0x5c, 0xf8, 0xe5, 0x1f, 0xa5, 0xbc, 0xbb, 0x93, 0xfa, - 0x3e, 0x9f, 0x16, 0xfb, 0x13, 0xfe, 0xeb, 0xc2, 0x17, 0x20, 0xdd, 0xd4, 0x37, 0x0d, 0x9d, 0xbe, - 0xbb, 0xe5, 0xf9, 0x3d, 0x59, 0xdf, 0x45, 0xfd, 0xce, 0x11, 0xc6, 0x90, 0x95, 0x31, 0x17, 0x74, - 0x91, 0xad, 0x02, 0xaa, 0x30, 0xea, 0x61, 0xd1, 0x81, 0x9a, 0xec, 0x39, 0x50, 0xef, 0xe2, 0x03, - 0xf5, 0x50, 0xb8, 0x15, 0x6f, 0xac, 0x8e, 0xb8, 0x40, 0x42, 0x86, 0x2e, 0x02, 0x78, 0xe1, 0x81, - 0xee, 0x53, 0x0c, 0x77, 0xee, 0x78, 0x2f, 0xc6, 0x88, 0xf5, 0x9e, 0x47, 0x8b, 0xde, 0x05, 0x13, - 0x0d, 0x4d, 0x2f, 0xdb, 0xb8, 0xbe, 0x55, 0xe6, 0x06, 0x26, 0x2c, 0xe9, 0x67, 0x93, 0x0a, 0x8b, - 0xfb, 0xf3, 0x87, 0x5b, 0x37, 0xa7, 0xb3, 0x3c, 0x84, 0xb6, 0xb2, 0x94, 0x95, 0xf1, 0x86, 0xa6, - 0xaf, 0xe1, 0xfa, 0x56, 0xd1, 0x85, 0xe5, 0x52, 0x1f, 0xf8, 0xd4, 0xf4, 0x00, 0x1f, 0xae, 0x03, - 0xf2, 0x39, 0xba, 0x77, 0xce, 0x87, 0x19, 0xb6, 0xc9, 0x9a, 0x44, 0x15, 0x05, 0x7e, 0xbd, 0xc0, - 0x03, 0xb0, 0x61, 0xfe, 0xf2, 0x7f, 0x9c, 0x91, 0xe4, 0xcf, 0x4b, 0x30, 0x58, 0xbc, 0xbc, 0xaa, - 0x6a, 0x16, 0x5a, 0x80, 0x71, 0xcf, 0x73, 0x82, 0x83, 0xfc, 0xf8, 0xad, 0x9b, 0xd3, 0x99, 0xb0, - 0x73, 0xb9, 0xa3, 0xdc, 0x73, 0x60, 0x31, 0xcc, 0x17, 0x3a, 0x2d, 0x5c, 0x03, 0xac, 0x5a, 0x50, - 0xe4, 0xd6, 0x65, 0x6d, 0x48, 0xcd, 0x12, 0x0c, 0x31, 0x69, 0x6d, 0x94, 0x83, 0xb8, 0x49, 0x7e, - 0xf0, 0x83, 0x81, 0xa9, 0x8e, 0xce, 0x4b, 0xf1, 0xdd, 0x8d, 0x4c, 0x42, 0x22, 0x7f, 0x38, 0x02, - 0x50, 0xbc, 0x7c, 0x79, 0xdd, 0xd2, 0xcc, 0x3a, 0x76, 0x6e, 0xa7, 0xe6, 0xeb, 0x70, 0xc8, 0xb7, - 0x4a, 0xb2, 0x2a, 0x21, 0xed, 0x67, 0x6e, 0xdd, 0x9c, 0x3e, 0x1e, 0xd6, 0xde, 0x87, 0x26, 0x2b, - 0x13, 0xde, 0x7a, 0xc9, 0xaa, 0xb4, 0xe5, 0x5a, 0xb5, 0x1d, 0x97, 0x6b, 0xb4, 0x33, 0x57, 0x1f, - 0x9a, 0x9f, 0x6b, 0xd1, 0x76, 0xda, 0x9b, 0x76, 0x0d, 0x86, 0x3d, 0x93, 0xd8, 0xa8, 0x08, 0x09, - 0x87, 0xff, 0xe6, 0x16, 0x96, 0x3b, 0x5b, 0x58, 0x90, 0x71, 0x2b, 0xbb, 0x94, 0xf2, 0x9f, 0x4a, - 0x00, 0x9e, 0xcf, 0xfe, 0x64, 0xba, 0x18, 0x09, 0xe5, 0x3c, 0xf0, 0x46, 0x0f, 0x94, 0xaa, 0x71, - 0xea, 0x90, 0x3d, 0x7f, 0x26, 0x02, 0x13, 0x1b, 0x22, 0xf2, 0xfc, 0xc4, 0xdb, 0x60, 0x15, 0x86, - 0xb0, 0xee, 0x58, 0x1a, 0x35, 0x02, 0xe9, 0xed, 0x47, 0x3a, 0xf5, 0x76, 0x1b, 0x9d, 0xe8, 0x87, - 0xa3, 0xc4, 0xa6, 0x3b, 0x67, 0x13, 0xb2, 0xc6, 0xcf, 0x45, 0x21, 0xd3, 0x89, 0x12, 0xcd, 0xc1, - 0x58, 0xc5, 0xc2, 0xec, 0xb2, 0x95, 0x7f, 0xe7, 0xaf, 0x90, 0xf5, 0x32, 0xcb, 0x10, 0x82, 0xac, - 0x8c, 0x0a, 0x08, 0x9f, 0x3d, 0x6a, 0x40, 0xd2, 0x3e, 0xe2, 0x76, 0xf4, 0xce, 0x56, 0x7f, 0x79, - 0x9e, 0xcc, 0xa7, 0x0f, 0xd1, 0x48, 0x90, 0x01, 0x9b, 0x3f, 0x46, 0x3d, 0x28, 0x9d, 0x40, 0x5e, - 0x82, 0x31, 0x4d, 0xd7, 0x1c, 0x4d, 0xad, 0x97, 0x37, 0xd5, 0xba, 0xaa, 0x57, 0x0e, 0x92, 0x35, - 0xb3, 0x90, 0xcf, 0x9b, 0x0d, 0xb1, 0x93, 0x95, 0x51, 0x0e, 0x29, 0x30, 0x00, 0xba, 0x08, 0x43, - 0xa2, 0xa9, 0xd8, 0x81, 0xb2, 0x0d, 0x41, 0xee, 0x4b, 0xf0, 0x7e, 0x36, 0x0a, 0xe3, 0x0a, 0xae, - 0xfe, 0x45, 0x57, 0xec, 0xaf, 0x2b, 0x96, 0x00, 0xd8, 0x70, 0x27, 0x01, 0xf6, 0x00, 0xbd, 0x41, - 0x02, 0x46, 0x92, 0x71, 0x28, 0xda, 0x8e, 0xaf, 0x3f, 0x6e, 0x46, 0x20, 0xe5, 0xef, 0x8f, 0x3f, - 0xa7, 0xb3, 0x12, 0x5a, 0xf0, 0x22, 0x51, 0x8c, 0x7f, 0x6e, 0xb7, 0x43, 0x24, 0x6a, 0xf1, 0xde, - 0xee, 0x21, 0xe8, 0x7f, 0x46, 0x60, 0x70, 0x55, 0xb5, 0xd4, 0x86, 0x8d, 0x2a, 0x2d, 0x99, 0xa6, - 0xd8, 0x7e, 0x6c, 0xf9, 0xa8, 0x3a, 0xdf, 0xed, 0xe8, 0x91, 0x68, 0x7e, 0xb4, 0x4d, 0xa2, 0xf9, - 0x56, 0x18, 0x25, 0xcb, 0x61, 0xdf, 0x15, 0x06, 0x62, 0xed, 0x91, 0xc2, 0x51, 0x8f, 0x4b, 0xb0, - 0x9e, 0xad, 0x96, 0x2f, 0xfb, 0xef, 0x30, 0x0c, 0x13, 0x0c, 0x2f, 0x30, 0x13, 0xf2, 0xc3, 0xde, - 0xb2, 0xd4, 0x57, 0x29, 0x2b, 0xd0, 0x50, 0x77, 0x4b, 0xac, 0x80, 0x16, 0x01, 0x6d, 0xbb, 0x3b, - 0x23, 0x65, 0xcf, 0x9c, 0x84, 0xfe, 0xc4, 0xad, 0x9b, 0xd3, 0x47, 0x19, 0x7d, 0x2b, 0x8e, 0xac, - 0x8c, 0x7b, 0x40, 0xc1, 0xed, 0x71, 0x00, 0xa2, 0x57, 0x99, 0x5d, 0xdb, 0x66, 0xcb, 0x9d, 0x43, - 0xb7, 0x6e, 0x4e, 0x8f, 0x33, 0x2e, 0x5e, 0x9d, 0xac, 0x24, 0x49, 0xa1, 0x48, 0x7e, 0xfb, 0x3c, - 0xfb, 0x33, 0x12, 0x20, 0x2f, 0xe4, 0x2b, 0xd8, 0x36, 0xc9, 0xfa, 0x8c, 0x24, 0xe2, 0xbe, 0xac, - 0x59, 0xea, 0x9e, 0x88, 0x7b, 0xf4, 0x22, 0x11, 0xf7, 0x8d, 0x94, 0xa7, 0xbc, 0xf0, 0x18, 0xe9, - 0x75, 0x87, 0x99, 0xbb, 0x48, 0x38, 0x1e, 0x0e, 0xc8, 0xff, 0x4a, 0x82, 0xa3, 0x2d, 0x1e, 0xe5, - 0x0a, 0xfb, 0x97, 0x00, 0x59, 0xbe, 0x4a, 0xfe, 0xed, 0x44, 0x26, 0xf4, 0xbe, 0x1d, 0x74, 0xdc, - 0x6a, 0x89, 0xbb, 0xb7, 0x2f, 0xc2, 0xb3, 0x4b, 0xf2, 0xff, 0x4c, 0x82, 0x49, 0x7f, 0xf3, 0xae, - 0x22, 0xcb, 0x90, 0xf2, 0xb7, 0xce, 0x55, 0xb8, 0xa7, 0x1f, 0x15, 0xb8, 0xf4, 0x01, 0x7a, 0xf4, - 0xac, 0x37, 0x5c, 0xd9, 0xde, 0xd9, 0xa3, 0x7d, 0x5b, 0x43, 0xc8, 0x14, 0x1e, 0xb6, 0x31, 0xda, - 0x1f, 0xff, 0x57, 0x82, 0xd8, 0xaa, 0x61, 0xd4, 0x91, 0x01, 0xe3, 0xba, 0xe1, 0x94, 0x89, 0x67, - 0xe1, 0xaa, 0xff, 0xae, 0x7a, 0xb2, 0x30, 0xb7, 0x3f, 0x23, 0x7d, 0xef, 0xe6, 0x74, 0x2b, 0x2b, - 0x65, 0x4c, 0x37, 0x9c, 0x02, 0x85, 0xf0, 0xeb, 0xea, 0xef, 0x82, 0x91, 0x60, 0x63, 0x2c, 0x4a, - 0x3e, 0xb7, 0xef, 0xc6, 0x82, 0x6c, 0x6e, 0xdd, 0x9c, 0x9e, 0xf4, 0x46, 0x8c, 0x0b, 0x96, 0x95, - 0xd4, 0xa6, 0xaf, 0x75, 0x76, 0xbd, 0xeb, 0x07, 0x9f, 0x9a, 0x96, 0x4e, 0x7d, 0x59, 0x02, 0xf0, - 0x76, 0x1e, 0xd0, 0x43, 0x70, 0xa4, 0xb0, 0xb2, 0x5c, 0x2c, 0xaf, 0xad, 0xe7, 0xd7, 0x37, 0xd6, - 0x82, 0xf7, 0xba, 0xc5, 0xf6, 0xb8, 0x6d, 0xe2, 0x8a, 0xb6, 0xa5, 0xe1, 0x2a, 0xba, 0x0f, 0x26, - 0x83, 0xd8, 0xa4, 0x54, 0x2a, 0xa6, 0xa5, 0x6c, 0xea, 0xfa, 0x8d, 0x99, 0x04, 0xcb, 0xc5, 0x70, - 0x15, 0x9d, 0x84, 0x43, 0xad, 0x78, 0x0b, 0xcb, 0xf3, 0xe9, 0x48, 0x76, 0xe4, 0xfa, 0x8d, 0x99, - 0xa4, 0x9b, 0xb4, 0x21, 0x19, 0x90, 0x1f, 0x93, 0xf3, 0x8b, 0x66, 0xe1, 0xfa, 0x8d, 0x99, 0x41, - 0x66, 0xc0, 0x6c, 0xec, 0x03, 0x9f, 0x99, 0x1a, 0xb8, 0xed, 0xb7, 0xbf, 0xff, 0x68, 0xa8, 0xe3, - 0xae, 0x77, 0x0d, 0xeb, 0xd8, 0xd6, 0xec, 0x03, 0xed, 0x7a, 0xf7, 0xb5, 0x93, 0x2e, 0xff, 0x4e, - 0x1c, 0x52, 0xf3, 0xac, 0x15, 0xd2, 0x11, 0x18, 0xbd, 0x09, 0x06, 0x4d, 0x3a, 0x8d, 0xb8, 0xc7, - 0x68, 0x1d, 0x1c, 0x9e, 0x4d, 0x36, 0xee, 0x5d, 0x2e, 0x36, 0xf5, 0xd8, 0xfc, 0x32, 0x07, 0xbb, - 0x63, 0xe6, 0xdd, 0x9a, 0x4a, 0xed, 0x6b, 0xbf, 0x87, 0xe5, 0x2c, 0x7c, 0x6b, 0x25, 0xcc, 0x4f, - 0x66, 0xf7, 0x42, 0xd6, 0x09, 0x84, 0xdd, 0x0e, 0x7b, 0x9f, 0x04, 0x87, 0x28, 0x96, 0x37, 0x11, - 0x53, 0x4c, 0x91, 0xec, 0x9f, 0xea, 0xa4, 0xc2, 0xa2, 0x6a, 0x7b, 0x77, 0x3d, 0xd8, 0x7d, 0xae, - 0x7b, 0xf8, 0x44, 0x78, 0xdc, 0xd7, 0x78, 0x98, 0xad, 0xac, 0x4c, 0xd4, 0x5b, 0x28, 0x6d, 0x34, - 0x1f, 0xb8, 0xd0, 0x17, 0xdb, 0xdf, 0x56, 0xbb, 0xff, 0x72, 0xdf, 0x33, 0x30, 0xec, 0xc5, 0x12, - 0x9b, 0xff, 0xaf, 0x97, 0xfe, 0xe7, 0x0e, 0x3f, 0x31, 0x7a, 0xbf, 0x04, 0x87, 0xbc, 0xd9, 0xdc, - 0xcf, 0x96, 0xfd, 0x4f, 0x9c, 0x07, 0xf7, 0xb1, 0x10, 0x0a, 0x1b, 0xa7, 0x2d, 0x5f, 0x59, 0x99, - 0x6c, 0xb6, 0x92, 0x92, 0x25, 0xd8, 0x88, 0x3f, 0xb2, 0xda, 0x19, 0xf1, 0xd9, 0xc7, 0xfe, 0x43, - 0x73, 0x90, 0x01, 0xfb, 0x3f, 0x1d, 0xa6, 0x61, 0x39, 0xb8, 0x4a, 0x37, 0xe4, 0x12, 0x8a, 0x5b, - 0x96, 0x97, 0x01, 0xb5, 0x76, 0x6e, 0xf8, 0x02, 0xa3, 0xf7, 0x26, 0x05, 0x4d, 0x42, 0xdc, 0x7f, - 0xc5, 0x8f, 0x15, 0x72, 0x89, 0x0f, 0xf0, 0xe9, 0xf3, 0xb6, 0x8f, 0xf9, 0x7f, 0x11, 0x81, 0x53, - 0xfe, 0xe3, 0xa1, 0x97, 0x9a, 0xd8, 0xda, 0x73, 0x87, 0xa8, 0xa9, 0xd6, 0x34, 0xdd, 0xff, 0x0a, - 0xe2, 0xa8, 0x7f, 0xc2, 0xa7, 0xb8, 0xc2, 0x4e, 0xb2, 0x0e, 0xc3, 0xab, 0x6a, 0x0d, 0x2b, 0xf8, - 0xa5, 0x26, 0xb6, 0x9d, 0x36, 0x97, 0xcc, 0x0f, 0xc3, 0xa0, 0xb1, 0xb5, 0x25, 0x8e, 0xb4, 0x63, - 0x0a, 0x2f, 0x11, 0x95, 0xeb, 0x5a, 0x43, 0x63, 0xb7, 0xc1, 0x62, 0x0a, 0x2b, 0xa0, 0x69, 0x18, - 0xae, 0x18, 0x4d, 0x9d, 0x8f, 0xb8, 0x4c, 0x4c, 0x7c, 0x5e, 0xa5, 0xa9, 0xb3, 0x11, 0x27, 0x3f, - 0x0d, 0x29, 0xd6, 0x1e, 0x9f, 0x71, 0x8f, 0x42, 0x82, 0x5e, 0xa7, 0xf2, 0x5a, 0x1d, 0x22, 0xe5, - 0x4b, 0xec, 0x42, 0x3a, 0xe3, 0xc2, 0x1a, 0x66, 0x85, 0x42, 0xa1, 0xa3, 0x29, 0x4f, 0xf6, 0x0e, - 0x0d, 0xcc, 0x50, 0xae, 0x19, 0x7f, 0x23, 0x0e, 0x87, 0xf8, 0x09, 0x9d, 0x6a, 0x6a, 0xa7, 0xb7, - 0x1d, 0x47, 0x3c, 0x90, 0x00, 0x9e, 0xea, 0xaa, 0xa6, 0x26, 0xef, 0x41, 0xec, 0xa2, 0xe3, 0x98, - 0xe8, 0x14, 0xc4, 0xad, 0x66, 0x1d, 0x8b, 0x1d, 0x1f, 0x77, 0x4f, 0x5e, 0x35, 0xb5, 0x59, 0x82, - 0xa0, 0x34, 0xeb, 0x58, 0x61, 0x28, 0xa8, 0x04, 0xd3, 0x5b, 0xcd, 0x7a, 0x7d, 0xaf, 0x5c, 0xc5, - 0xf4, 0xff, 0x60, 0xb9, 0xff, 0x49, 0x02, 0xef, 0x9a, 0xaa, 0xf8, 0x1e, 0x25, 0xb1, 0xcd, 0x71, - 0x8a, 0x56, 0xa4, 0x58, 0xe2, 0xbf, 0x48, 0x94, 0x04, 0x8e, 0xfc, 0x7b, 0x11, 0x48, 0x08, 0xd6, - 0xf4, 0x86, 0x38, 0xae, 0xe3, 0x8a, 0x63, 0x88, 0x13, 0x13, 0xb7, 0x8c, 0x10, 0x44, 0x6b, 0xbc, - 0x8b, 0x92, 0x17, 0x07, 0x14, 0x52, 0x20, 0x30, 0xf7, 0xde, 0x3e, 0x81, 0x99, 0x4d, 0xd2, 0x6b, - 0x31, 0xd3, 0x10, 0x4b, 0xb3, 0x8b, 0x03, 0x0a, 0x2d, 0xa1, 0x0c, 0x0c, 0x92, 0x91, 0xe1, 0xb0, - 0x8f, 0x7c, 0x12, 0x38, 0x2f, 0xa3, 0xc3, 0x10, 0x37, 0x55, 0xa7, 0xc2, 0xae, 0xd4, 0x91, 0x0a, - 0x56, 0x44, 0x4f, 0xc0, 0x20, 0x7b, 0x6e, 0x1d, 0xfe, 0x27, 0x33, 0xc4, 0x18, 0xec, 0xbb, 0x76, - 0x44, 0xee, 0x55, 0xd5, 0x71, 0xb0, 0xa5, 0x13, 0x86, 0x0c, 0x1d, 0x21, 0x88, 0x6d, 0x1a, 0xd5, - 0x3d, 0xfe, 0x8f, 0x6f, 0xe8, 0x6f, 0xfe, 0x9f, 0x36, 0xa8, 0x3f, 0x94, 0x69, 0x25, 0xfb, 0x7f, - 0x5f, 0x29, 0x01, 0x2c, 0x10, 0xa4, 0x12, 0x4c, 0xa8, 0xd5, 0xaa, 0xc6, 0xfe, 0x07, 0x4d, 0x79, - 0x53, 0xa3, 0x11, 0xc2, 0xa6, 0xff, 0xcd, 0xad, 0x53, 0x5f, 0x20, 0x8f, 0xa0, 0xc0, 0xf1, 0x0b, - 0x49, 0x18, 0x32, 0x99, 0x50, 0xf2, 0x79, 0x18, 0x6f, 0x91, 0x94, 0xc8, 0xb7, 0xa3, 0xe9, 0x55, - 0xf1, 0x98, 0x81, 0xfc, 0x26, 0x30, 0xfa, 0x25, 0x4a, 0x76, 0x16, 0x45, 0x7f, 0x17, 0xde, 0xd3, - 0xf9, 0xcd, 0xcb, 0xa8, 0xef, 0xcd, 0x8b, 0x6a, 0x6a, 0x85, 0x24, 0xe5, 0xcf, 0x5f, 0xba, 0xe4, - 0x5b, 0x5f, 0xba, 0xd4, 0xb0, 0x2e, 0x66, 0x5f, 0x52, 0xa5, 0x9a, 0x9a, 0x4d, 0xdd, 0xd1, 0xfb, - 0x32, 0xa6, 0x7d, 0xde, 0xf7, 0x9b, 0x3e, 0x7c, 0x89, 0xcd, 0xe7, 0x57, 0x17, 0x5c, 0x3f, 0xfe, - 0x6a, 0x04, 0x8e, 0xfb, 0xfc, 0xd8, 0x87, 0xdc, 0xea, 0xce, 0xd9, 0xf6, 0x1e, 0xdf, 0xc7, 0xa3, - 0xe3, 0x4b, 0x10, 0x23, 0xf8, 0xa8, 0xc7, 0xff, 0xc1, 0xc8, 0xfc, 0xea, 0x37, 0xfe, 0xa9, 0x1c, - 0x3c, 0xb5, 0x0a, 0xf4, 0x0a, 0x65, 0x52, 0x78, 0x7f, 0xff, 0xf6, 0x4b, 0x7b, 0x1f, 0x05, 0xb5, - 0x6f, 0x9f, 0x19, 0xc3, 0x36, 0xfc, 0xee, 0xd9, 0x8e, 0x8f, 0x52, 0x59, 0xc4, 0xec, 0x9e, 0x44, - 0xed, 0x23, 0x1c, 0x77, 0xba, 0xff, 0xdf, 0xad, 0x07, 0xfb, 0x4c, 0xc7, 0x76, 0xe1, 0xf0, 0xb3, - 0xa4, 0x6d, 0x6f, 0x99, 0x2c, 0x02, 0xfb, 0x61, 0xf7, 0x34, 0x4f, 0xe2, 0xff, 0x4c, 0x4f, 0x9c, - 0xd4, 0x81, 0x27, 0x1f, 0x5f, 0x20, 0xde, 0x37, 0xdb, 0x71, 0xbe, 0x98, 0xf5, 0x4d, 0x16, 0x8a, - 0x8f, 0x52, 0xfe, 0x65, 0x09, 0x8e, 0xb4, 0x34, 0xcd, 0x63, 0xfc, 0x7c, 0x9b, 0xa7, 0x0a, 0x07, - 0xca, 0x6c, 0xe6, 0xdb, 0x08, 0x7b, 0x7f, 0x4f, 0x61, 0x99, 0x14, 0x01, 0x69, 0xdf, 0x02, 0x87, - 0x82, 0xc2, 0x0a, 0x33, 0xdd, 0x0b, 0xa3, 0xc1, 0x1d, 0x61, 0x6e, 0xae, 0x91, 0xc0, 0x9e, 0xb0, - 0x5c, 0x0e, 0xdb, 0xd9, 0xd5, 0xb5, 0x04, 0x49, 0x17, 0x95, 0xa7, 0xc0, 0x7d, 0xab, 0xea, 0x51, - 0xca, 0x1f, 0x96, 0x60, 0x26, 0xd8, 0x82, 0x2f, 0x19, 0xda, 0x9f, 0xb0, 0xb7, 0xad, 0x8b, 0x5f, - 0x93, 0xe0, 0xae, 0x2e, 0x32, 0x71, 0x03, 0x5c, 0x83, 0x49, 0xdf, 0x4e, 0x80, 0x08, 0xe1, 0xa2, - 0xdb, 0x4f, 0xf5, 0x4e, 0x43, 0xdd, 0x85, 0xef, 0x31, 0x62, 0x94, 0xcf, 0x7d, 0x7b, 0x7a, 0xa2, - 0xb5, 0xce, 0x56, 0x26, 0x5a, 0x57, 0xef, 0xb7, 0xd1, 0x3f, 0x5e, 0x91, 0xe0, 0x81, 0xa0, 0xaa, - 0x6d, 0xf2, 0xd9, 0x37, 0xaa, 0x1f, 0xfe, 0x83, 0x04, 0xa7, 0xfa, 0x11, 0x8e, 0x77, 0xc8, 0x26, - 0x4c, 0x78, 0x99, 0x76, 0xb8, 0x3f, 0xf6, 0x95, 0xbf, 0x33, 0x2f, 0x45, 0x2e, 0xb7, 0x3b, 0x60, - 0x78, 0x93, 0x0f, 0x2c, 0x7f, 0x97, 0xbb, 0x46, 0x0e, 0xee, 0xe6, 0x0a, 0x23, 0x07, 0xf6, 0x73, - 0xdb, 0xf4, 0x45, 0xa4, 0x4d, 0x5f, 0x78, 0xa9, 0xb9, 0x7c, 0x85, 0xc7, 0xad, 0x36, 0x7b, 0x70, - 0x6f, 0x87, 0x89, 0x36, 0xae, 0xcc, 0x47, 0xf5, 0x3e, 0x3c, 0x59, 0x41, 0xad, 0xce, 0x2a, 0xef, - 0xc1, 0x34, 0x6d, 0xb7, 0x8d, 0xa1, 0xef, 0xb4, 0xca, 0x0d, 0x1e, 0x5b, 0xda, 0x36, 0xcd, 0x75, - 0x5f, 0x80, 0x41, 0xd6, 0xcf, 0x5c, 0xdd, 0x03, 0x38, 0x0a, 0x67, 0x20, 0x7f, 0x5c, 0xc4, 0xb2, - 0xa2, 0x10, 0xbb, 0xfd, 0x18, 0xea, 0x47, 0xd7, 0xdb, 0x34, 0x86, 0x7c, 0xc6, 0xf8, 0x96, 0x88, - 0x6a, 0xed, 0xa5, 0xe3, 0xe6, 0xa8, 0xdc, 0xb6, 0xa8, 0xc6, 0x6c, 0x73, 0x67, 0xc3, 0xd7, 0x2f, - 0x8a, 0xf0, 0xe5, 0xea, 0xd4, 0x23, 0x7c, 0xbd, 0x31, 0xa6, 0x77, 0x03, 0x59, 0x0f, 0x31, 0xff, - 0x2c, 0x06, 0xb2, 0x1f, 0x48, 0x70, 0x94, 0xea, 0xe6, 0xdf, 0x88, 0xd8, 0xaf, 0xc9, 0x1f, 0x02, - 0x64, 0x5b, 0x95, 0x72, 0xdb, 0xd1, 0x9d, 0xb6, 0xad, 0xca, 0xe5, 0xc0, 0xfc, 0xf2, 0x10, 0xa0, - 0x6a, 0x60, 0xbb, 0x89, 0x62, 0xb3, 0x5b, 0x72, 0xe9, 0xaa, 0x6f, 0x37, 0xa3, 0x4d, 0x77, 0xc6, - 0x6e, 0x43, 0x77, 0x7e, 0x53, 0x82, 0x6c, 0x3b, 0x95, 0x79, 0xf7, 0x69, 0x70, 0x38, 0x70, 0x48, - 0x10, 0xee, 0xc1, 0x87, 0xfa, 0xd9, 0xca, 0x09, 0x0d, 0xa3, 0x43, 0x16, 0xbe, 0xd3, 0x79, 0xc0, - 0x74, 0xd0, 0x43, 0x5b, 0x33, 0xeb, 0x37, 0x6c, 0xf8, 0x7c, 0xa9, 0x25, 0xae, 0xfe, 0x99, 0xc8, - 0xbd, 0x77, 0x61, 0xaa, 0x83, 0xd4, 0x77, 0x7a, 0xde, 0xdb, 0xee, 0xd8, 0x99, 0xb7, 0x3b, 0x7d, - 0x7f, 0x9c, 0x8f, 0x84, 0xe0, 0x0d, 0x6c, 0xdf, 0x5a, 0xac, 0xdd, 0x13, 0x2e, 0xf9, 0x6d, 0x70, - 0xac, 0x2d, 0x15, 0x97, 0x2d, 0x07, 0xb1, 0x6d, 0xcd, 0x76, 0xb8, 0x58, 0xf7, 0x75, 0x12, 0x2b, - 0x44, 0x4d, 0x69, 0x64, 0x04, 0x69, 0xca, 0x7a, 0xd5, 0x30, 0xea, 0x5c, 0x0c, 0xf9, 0x12, 0x8c, - 0xfb, 0x60, 0xbc, 0x91, 0x73, 0x10, 0x33, 0x0d, 0xfe, 0x79, 0x82, 0xe1, 0x33, 0xc7, 0x3b, 0xee, - 0xde, 0x1b, 0x46, 0x9d, 0xab, 0x4d, 0xf1, 0xe5, 0x49, 0x40, 0x8c, 0x19, 0xdd, 0xc8, 0x17, 0x4d, - 0xac, 0xc1, 0x44, 0x00, 0xca, 0x1b, 0x79, 0x5d, 0x87, 0x04, 0x67, 0xbe, 0x77, 0x08, 0xe2, 0x94, - 0x2b, 0xfa, 0x98, 0x14, 0xf8, 0x66, 0xd0, 0x6c, 0x27, 0x36, 0xed, 0xd7, 0xc4, 0xd9, 0xd3, 0x7d, - 0xe3, 0xf3, 0x9c, 0xed, 0xd4, 0x7b, 0xfe, 0xed, 0x77, 0x3f, 0x12, 0xb9, 0x07, 0xc9, 0xa7, 0x3b, - 0xac, 0xc6, 0x7d, 0xe3, 0xe5, 0xb3, 0x81, 0xb7, 0xef, 0x0f, 0xf7, 0xd7, 0x94, 0x90, 0x6c, 0xb6, - 0x5f, 0x74, 0x2e, 0xd8, 0x79, 0x2a, 0xd8, 0x59, 0xf4, 0x58, 0x6f, 0xc1, 0x4e, 0xbf, 0x33, 0x38, - 0x68, 0xde, 0x8d, 0x7e, 0x47, 0x82, 0xc9, 0x76, 0x4b, 0x3a, 0xf4, 0x64, 0x7f, 0x52, 0xb4, 0xa6, - 0x14, 0xd9, 0xa7, 0x0e, 0x40, 0xc9, 0x55, 0x99, 0xa7, 0xaa, 0xe4, 0xd1, 0xd3, 0x07, 0x50, 0xe5, - 0xb4, 0x7f, 0x7f, 0xff, 0x7f, 0x4b, 0x70, 0xa2, 0xeb, 0x0a, 0x09, 0xe5, 0xfb, 0x93, 0xb2, 0x4b, - 0xee, 0x94, 0x2d, 0xbc, 0x1e, 0x16, 0x5c, 0xe3, 0x67, 0xa9, 0xc6, 0x97, 0xd0, 0xc2, 0x41, 0x34, - 0x6e, 0x7b, 0x88, 0x82, 0x7e, 0x33, 0x78, 0xb3, 0xb0, 0xbb, 0x3b, 0xb5, 0x2c, 0x3c, 0x7a, 0x0c, - 0x8c, 0xd6, 0xa4, 0x56, 0x7e, 0x9e, 0xaa, 0xa0, 0xa0, 0xd5, 0xd7, 0xd9, 0x69, 0xa7, 0xdf, 0x19, - 0x0c, 0xfc, 0xef, 0x46, 0xff, 0x4b, 0x6a, 0x7f, 0x51, 0xf0, 0x89, 0xae, 0x22, 0x76, 0x5e, 0x54, - 0x65, 0x9f, 0xdc, 0x3f, 0x21, 0x57, 0xb2, 0x41, 0x95, 0xac, 0x21, 0x7c, 0xbb, 0x95, 0x6c, 0xdb, - 0x89, 0xe8, 0xeb, 0x12, 0x4c, 0xb6, 0x5b, 0x93, 0xf4, 0x18, 0x96, 0x5d, 0x16, 0x59, 0x3d, 0x86, - 0x65, 0xb7, 0x05, 0x90, 0xfc, 0x26, 0xaa, 0xfc, 0x39, 0xf4, 0x78, 0x27, 0xe5, 0xbb, 0xf6, 0x22, - 0x19, 0x8b, 0x5d, 0x93, 0xfc, 0x1e, 0x63, 0xb1, 0x9f, 0x75, 0x4c, 0x8f, 0xb1, 0xd8, 0xd7, 0x1a, - 0xa3, 0xf7, 0x58, 0x74, 0x35, 0xeb, 0xb3, 0x1b, 0x6d, 0xf4, 0x55, 0x09, 0x46, 0x02, 0x19, 0x31, - 0x7a, 0xb4, 0xab, 0xa0, 0xed, 0x16, 0x0c, 0xd9, 0x33, 0xfb, 0x21, 0xe1, 0xba, 0x2c, 0x50, 0x5d, - 0xe6, 0x50, 0xfe, 0x20, 0xba, 0x04, 0xcf, 0x4a, 0xbf, 0x29, 0xc1, 0x44, 0x9b, 0x2c, 0xb3, 0xc7, - 0x28, 0xec, 0x9c, 0x34, 0x67, 0x9f, 0xdc, 0x3f, 0x21, 0xd7, 0xea, 0x02, 0xd5, 0xea, 0xad, 0xe8, - 0x2d, 0x07, 0xd1, 0xca, 0x37, 0x3f, 0xdf, 0xf4, 0xee, 0x5d, 0xf9, 0xda, 0x41, 0xe7, 0xf6, 0x29, - 0x98, 0x50, 0xe8, 0x89, 0x7d, 0xd3, 0x71, 0x7d, 0x9e, 0xa3, 0xfa, 0x3c, 0x8b, 0x56, 0x5e, 0x9f, - 0x3e, 0xad, 0xd3, 0xfa, 0x17, 0x5b, 0x5f, 0x00, 0x76, 0xf7, 0xa2, 0xb6, 0xc9, 0x6a, 0xf6, 0xb1, - 0x7d, 0xd1, 0x70, 0xa5, 0x9e, 0xa4, 0x4a, 0x9d, 0x41, 0x8f, 0x74, 0x52, 0xca, 0x77, 0xb9, 0x4e, - 0xd3, 0xb7, 0x8c, 0xd3, 0xef, 0x64, 0x29, 0xf0, 0xbb, 0xd1, 0x4f, 0x8b, 0x8b, 0x4d, 0x27, 0xbb, - 0xb6, 0xeb, 0xcb, 0x63, 0xb3, 0x0f, 0xf4, 0x81, 0xc9, 0xe5, 0xba, 0x87, 0xca, 0x35, 0x85, 0x8e, - 0x77, 0x92, 0x8b, 0xe4, 0xb2, 0xe8, 0x83, 0x92, 0x7b, 0x17, 0xf2, 0x54, 0x77, 0xde, 0xfe, 0x64, - 0x37, 0xfb, 0x60, 0x5f, 0xb8, 0x5c, 0x92, 0xfb, 0xa8, 0x24, 0x33, 0x68, 0xaa, 0xa3, 0x24, 0x2c, - 0xf5, 0xbd, 0xdd, 0x37, 0x07, 0xae, 0x1f, 0x81, 0xe9, 0x0e, 0x2d, 0x3a, 0xbb, 0x3d, 0xce, 0xb8, - 0xba, 0x3c, 0x84, 0xed, 0xf9, 0xd0, 0xf5, 0x76, 0x7f, 0xb4, 0xb5, 0xcf, 0x03, 0xb1, 0xdf, 0x8a, - 0x01, 0x5a, 0xb2, 0x6b, 0x73, 0x16, 0x66, 0xff, 0x40, 0x92, 0x8f, 0xf2, 0xd0, 0x0b, 0x2f, 0xe9, - 0x75, 0xbd, 0xf0, 0x5a, 0x0a, 0xbc, 0x99, 0x8a, 0xec, 0xef, 0x5d, 0x66, 0xdf, 0x0f, 0xa7, 0xa2, - 0x3f, 0x96, 0x87, 0x53, 0xed, 0xef, 0x55, 0xc7, 0x6e, 0xdf, 0x03, 0x8c, 0xf8, 0x41, 0x1f, 0xa1, - 0xf0, 0xf7, 0x90, 0x83, 0x5d, 0xde, 0x43, 0x66, 0x3a, 0x3e, 0x7a, 0xe4, 0xd4, 0xe8, 0xac, 0xf8, - 0x84, 0xe9, 0x50, 0x7f, 0x37, 0x61, 0xf9, 0x37, 0x4e, 0xbd, 0x2d, 0x84, 0xe3, 0x90, 0x6d, 0x75, - 0x27, 0x77, 0x50, 0x7f, 0x24, 0x0a, 0xe9, 0x25, 0xbb, 0x56, 0xaa, 0x6a, 0xce, 0x1d, 0xf2, 0xb5, - 0xa7, 0x3b, 0x3f, 0x6a, 0x41, 0xb7, 0x6e, 0x4e, 0x8f, 0x32, 0x9b, 0x76, 0xb1, 0x64, 0x03, 0xc6, - 0x42, 0x4f, 0x89, 0xb9, 0x67, 0x15, 0x0f, 0xf2, 0xa2, 0x39, 0xc4, 0x4a, 0xa6, 0x6f, 0x10, 0x7c, - 0xfe, 0x8d, 0x76, 0xdb, 0x3b, 0x33, 0x73, 0xa8, 0x8b, 0x77, 0xf2, 0x05, 0xa0, 0xd7, 0x67, 0x59, - 0xc8, 0x84, 0x3b, 0xc5, 0xed, 0xb1, 0x3f, 0x90, 0x60, 0x78, 0xc9, 0x16, 0xa9, 0x20, 0xfe, 0x09, - 0x7d, 0x7f, 0xf4, 0x84, 0xfb, 0xfd, 0xef, 0x68, 0x7f, 0x7e, 0x2b, 0xbe, 0x09, 0xee, 0x19, 0xe1, - 0x10, 0x4c, 0xf8, 0xf4, 0x74, 0xf5, 0xff, 0xed, 0x08, 0x8d, 0x8f, 0x05, 0x5c, 0xd3, 0x74, 0x37, - 0x8b, 0xc4, 0x7f, 0x5e, 0x5f, 0x57, 0x78, 0x76, 0x8e, 0x1d, 0xd4, 0xce, 0x3b, 0x34, 0x40, 0x84, - 0xec, 0xe9, 0x6e, 0x7c, 0x2d, 0xb5, 0xbe, 0xfd, 0x91, 0xf6, 0xf1, 0x59, 0x9d, 0xd0, 0x0b, 0x1f, - 0xf9, 0x35, 0x09, 0x46, 0x96, 0xec, 0xda, 0x86, 0x5e, 0xfd, 0xff, 0xde, 0x7f, 0xb7, 0xe0, 0x50, - 0x40, 0xd3, 0x3b, 0x64, 0xd2, 0x33, 0xaf, 0xc4, 0x20, 0xba, 0x64, 0xd7, 0xd0, 0x4b, 0x30, 0x16, - 0x4e, 0x1a, 0x3a, 0xe6, 0x82, 0xad, 0x33, 0x42, 0xe7, 0xf5, 0x5a, 0xe7, 0xd9, 0x03, 0xed, 0xc0, - 0x48, 0x70, 0xe6, 0x38, 0xd9, 0x85, 0x49, 0x00, 0x33, 0xfb, 0x48, 0xbf, 0x98, 0x6e, 0x63, 0xef, - 0x80, 0x84, 0x1b, 0xf4, 0xee, 0xee, 0x42, 0x2d, 0x90, 0x3a, 0x67, 0xb7, 0x6d, 0xc2, 0x0a, 0xb1, - 0x5e, 0x38, 0xa4, 0x74, 0xb3, 0x5e, 0x08, 0xb7, 0xab, 0xf5, 0x3a, 0x0d, 0xad, 0x4d, 0x00, 0xdf, - 0x38, 0xb8, 0xb7, 0x0b, 0x07, 0x0f, 0x2d, 0xfb, 0x70, 0x5f, 0x68, 0xee, 0xa1, 0xd3, 0x6d, 0x4e, - 0xc6, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x8f, 0xbc, 0xb2, 0xb6, 0x97, 0x00, 0x00, ->>>>>>> upstream/master + 0x0c, 0xea, 0xba, 0x87, 0x96, 0xf9, 0xe2, 0xf7, 0xe8, 0xf4, 0xad, 0x8c, 0x73, 0x52, 0x52, 0xc7, + 0x56, 0x3a, 0x39, 0x05, 0x0e, 0x05, 0xf8, 0x31, 0x27, 0xc5, 0x56, 0x0f, 0x8e, 0xbf, 0xc5, 0x39, + 0x4e, 0xf8, 0x38, 0xae, 0x71, 0xd2, 0xdc, 0x1c, 0x8c, 0xec, 0x87, 0xd7, 0xbf, 0xe4, 0xbc, 0x52, + 0xd8, 0xcf, 0x64, 0x1e, 0xc6, 0x28, 0x93, 0x4a, 0xd3, 0x76, 0x8c, 0x06, 0x8d, 0x80, 0xdd, 0xd9, + 0xfc, 0xf6, 0xf7, 0x98, 0xd7, 0x8c, 0x12, 0xb2, 0x39, 0x97, 0x2a, 0x97, 0x03, 0x7a, 0x36, 0x56, + 0xc5, 0x95, 0x7a, 0x0f, 0x0e, 0x5f, 0xe7, 0x82, 0xb8, 0xf8, 0xb9, 0xcb, 0x30, 0x49, 0x7e, 0xd3, + 0x00, 0xe5, 0x97, 0xa4, 0xf7, 0x86, 0x5b, 0xe6, 0xdb, 0xef, 0x63, 0x8e, 0x39, 0xe1, 0x32, 0xf0, + 0xc9, 0xe4, 0x1b, 0xc5, 0x1a, 0x76, 0x1c, 0x6c, 0xd9, 0x65, 0xb5, 0xde, 0x4e, 0x3c, 0xdf, 0x8e, + 0x45, 0xe6, 0xe3, 0x3f, 0x0c, 0x8e, 0xe2, 0x3c, 0xa3, 0xcc, 0xd7, 0xeb, 0xb9, 0x0d, 0x38, 0xd2, + 0xc6, 0x2a, 0xfa, 0xe0, 0xf9, 0x32, 0xe7, 0x39, 0xd9, 0x62, 0x19, 0x84, 0xed, 0x2a, 0x08, 0xb8, + 0x3b, 0x96, 0x7d, 0xf0, 0xfc, 0x04, 0xe7, 0x89, 0x38, 0xad, 0x18, 0x52, 0xc2, 0xf1, 0x29, 0x18, + 0xbf, 0x82, 0xad, 0x4d, 0xc3, 0xe6, 0xbb, 0x44, 0x7d, 0xb0, 0xfb, 0x24, 0x67, 0x37, 0xc6, 0x09, + 0xe9, 0xb6, 0x11, 0xe1, 0xf5, 0x04, 0x24, 0xb6, 0xd4, 0x0a, 0xee, 0x83, 0xc5, 0x75, 0xce, 0x62, + 0x88, 0xe0, 0x13, 0xd2, 0x3c, 0xa4, 0x6a, 0x06, 0x9f, 0xa3, 0x7a, 0x93, 0x7f, 0x8a, 0x93, 0x0f, + 0x0b, 0x1a, 0xce, 0xc2, 0x34, 0xcc, 0x66, 0x9d, 0x4c, 0x60, 0xbd, 0x59, 0xfc, 0x2d, 0xc1, 0x42, + 0xd0, 0x70, 0x16, 0xfb, 0x50, 0xeb, 0x2b, 0x82, 0x85, 0xed, 0xd3, 0xe7, 0x93, 0x30, 0x6c, 0xe8, + 0xf5, 0x3d, 0x43, 0xef, 0x47, 0x88, 0x4f, 0x73, 0x0e, 0xc0, 0x49, 0x08, 0x83, 0xf3, 0x90, 0xec, + 0x77, 0x20, 0xfe, 0xf6, 0x0f, 0x85, 0x7b, 0x88, 0x11, 0x98, 0x87, 0x31, 0x11, 0xa0, 0x34, 0x43, + 0xef, 0x83, 0xc5, 0xdf, 0xe1, 0x2c, 0x46, 0x7d, 0x64, 0xbc, 0x1b, 0x0e, 0xb6, 0x9d, 0x1a, 0xee, + 0x87, 0xc9, 0x67, 0x45, 0x37, 0x38, 0x09, 0x57, 0xe5, 0x26, 0xd6, 0x2b, 0xdb, 0xfd, 0x71, 0xf8, + 0x55, 0xa1, 0x4a, 0x41, 0x43, 0x58, 0xcc, 0xc1, 0x48, 0x43, 0xb5, 0xec, 0x6d, 0xb5, 0xde, 0xd7, + 0x70, 0xfc, 0x5d, 0xce, 0x23, 0xe5, 0x12, 0x71, 0x8d, 0x34, 0xf5, 0xfd, 0xb0, 0xf9, 0x9c, 0xd0, + 0x88, 0x8f, 0x8c, 0xbb, 0x9e, 0xed, 0xd0, 0x2d, 0xb5, 0xfd, 0x70, 0xfb, 0x35, 0xe1, 0x7a, 0x8c, + 0x76, 0xc9, 0xcf, 0xf1, 0x3c, 0x24, 0x6d, 0xed, 0xc5, 0xbe, 0xd8, 0x7c, 0x5e, 0x8c, 0x34, 0x25, + 0x20, 0xc4, 0x6f, 0x83, 0xa3, 0x6d, 0xa7, 0x89, 0x3e, 0x98, 0xfd, 0x3d, 0xce, 0xec, 0x70, 0x9b, + 0xa9, 0x82, 0x87, 0x84, 0xfd, 0xb2, 0xfc, 0xfb, 0x22, 0x24, 0xe0, 0x10, 0xaf, 0x55, 0xb2, 0x6a, + 0xb0, 0xd5, 0xad, 0xfd, 0x69, 0xed, 0xd7, 0x85, 0xd6, 0x18, 0x6d, 0x40, 0x6b, 0xeb, 0x70, 0x98, + 0x73, 0xdc, 0xdf, 0xb8, 0x7e, 0x41, 0x04, 0x56, 0x46, 0xbd, 0x11, 0x1c, 0xdd, 0xb7, 0x43, 0xd6, + 0x55, 0xa7, 0x48, 0x4f, 0xed, 0x72, 0x43, 0x35, 0xfb, 0xe0, 0xfc, 0x45, 0xce, 0x59, 0x44, 0x7c, + 0x37, 0xbf, 0xb5, 0x97, 0x54, 0x93, 0x30, 0x7f, 0x16, 0x32, 0x82, 0x79, 0x53, 0xb7, 0x70, 0xc5, + 0xa8, 0xe9, 0xda, 0x8b, 0xb8, 0xda, 0x07, 0xeb, 0xdf, 0x08, 0x0d, 0xd5, 0x86, 0x8f, 0x9c, 0x70, + 0x5e, 0x80, 0xb4, 0x9b, 0xab, 0x94, 0xb5, 0x86, 0x69, 0x58, 0x4e, 0x0f, 0x8e, 0x5f, 0x12, 0x23, + 0xe5, 0xd2, 0x2d, 0x50, 0xb2, 0x5c, 0x09, 0xd8, 0x39, 0x73, 0xbf, 0x26, 0xf9, 0x65, 0xce, 0x68, + 0xc4, 0xa3, 0xe2, 0x81, 0xa3, 0x62, 0x34, 0x4c, 0xd5, 0xea, 0x27, 0xfe, 0xfd, 0x03, 0x11, 0x38, + 0x38, 0x09, 0x0f, 0x1c, 0x24, 0xa3, 0x23, 0xb3, 0x7d, 0x1f, 0x1c, 0xbe, 0x22, 0x02, 0x87, 0xa0, + 0xe1, 0x2c, 0x44, 0xc2, 0xd0, 0x07, 0x8b, 0x7f, 0x28, 0x58, 0x08, 0x1a, 0xc2, 0xe2, 0x69, 0x6f, + 0xa2, 0xb5, 0x70, 0x4d, 0xb3, 0x1d, 0x8b, 0x25, 0xc5, 0xdd, 0x59, 0xfd, 0xa3, 0x1f, 0x06, 0x93, + 0x30, 0xc5, 0x47, 0x4a, 0x22, 0x11, 0xdf, 0x64, 0xa5, 0x6b, 0xa6, 0xde, 0x82, 0xfd, 0xa6, 0x88, + 0x44, 0x3e, 0x32, 0x22, 0x9b, 0x2f, 0x43, 0x24, 0x6a, 0xaf, 0x90, 0x95, 0x42, 0x1f, 0xec, 0xfe, + 0x71, 0x48, 0xb8, 0x35, 0x41, 0x4b, 0x78, 0xfa, 0xf2, 0x9f, 0xa6, 0xbe, 0x83, 0xf7, 0xfa, 0xb2, + 0xce, 0x7f, 0x12, 0xca, 0x7f, 0x36, 0x18, 0x25, 0x8b, 0x21, 0x63, 0xa1, 0x7c, 0x0a, 0xf5, 0xba, + 0x55, 0x94, 0x79, 0xcf, 0x8f, 0x79, 0x7f, 0x83, 0xe9, 0x54, 0x6e, 0x91, 0x18, 0x79, 0x30, 0xe9, + 0xe9, 0xcd, 0xec, 0x7d, 0x3f, 0x76, 0xed, 0x3c, 0x90, 0xf3, 0xe4, 0x2e, 0xc0, 0x48, 0x20, 0xe1, + 0xe9, 0xcd, 0xea, 0xfd, 0x9c, 0x55, 0xca, 0x9f, 0xef, 0xe4, 0xce, 0x42, 0x8c, 0x24, 0x2f, 0xbd, + 0xc9, 0xff, 0x0a, 0x27, 0xa7, 0xe8, 0xb9, 0x37, 0x43, 0x42, 0x24, 0x2d, 0xbd, 0x49, 0x3f, 0xc0, + 0x49, 0x5d, 0x12, 0x42, 0x2e, 0x12, 0x96, 0xde, 0xe4, 0x7f, 0x55, 0x90, 0x0b, 0x12, 0x42, 0xde, + 0xbf, 0x0a, 0xbf, 0xfa, 0xf3, 0x31, 0x3e, 0xe9, 0x08, 0xdd, 0x9d, 0x87, 0x21, 0x9e, 0xa9, 0xf4, + 0xa6, 0xfe, 0x10, 0x6f, 0x5c, 0x50, 0xe4, 0x1e, 0x83, 0x78, 0x9f, 0x0a, 0xff, 0x05, 0x4e, 0xca, + 0xf0, 0x73, 0x73, 0x30, 0xec, 0xcb, 0x4e, 0x7a, 0x93, 0xff, 0x35, 0x4e, 0xee, 0xa7, 0x22, 0xa2, + 0xf3, 0xec, 0xa4, 0x37, 0x83, 0x5f, 0x14, 0xa2, 0x73, 0x0a, 0xa2, 0x36, 0x91, 0x98, 0xf4, 0xa6, + 0xfe, 0xb0, 0xd0, 0xba, 0x20, 0xc9, 0x3d, 0x09, 0x49, 0x77, 0xb2, 0xe9, 0x4d, 0xff, 0x11, 0x4e, + 0xef, 0xd1, 0x10, 0x0d, 0xf8, 0x26, 0xbb, 0xde, 0x2c, 0xfe, 0xba, 0xd0, 0x80, 0x8f, 0x8a, 0xb8, + 0x51, 0x38, 0x81, 0xe9, 0xcd, 0xe9, 0xa3, 0xc2, 0x8d, 0x42, 0xf9, 0x0b, 0x19, 0x4d, 0x1a, 0xf3, + 0x7b, 0xb3, 0xf8, 0x1b, 0x62, 0x34, 0x29, 0x3e, 0x11, 0x23, 0x9c, 0x11, 0xf4, 0xe6, 0xf1, 0x4b, + 0x42, 0x8c, 0x50, 0x42, 0x90, 0x5b, 0x05, 0xd4, 0x9a, 0x0d, 0xf4, 0xe6, 0xf7, 0x31, 0xce, 0x6f, + 0xbc, 0x25, 0x19, 0xc8, 0x3d, 0x03, 0x87, 0xdb, 0x67, 0x02, 0xbd, 0xb9, 0x7e, 0xfc, 0xc7, 0xa1, + 0xb5, 0x9b, 0x3f, 0x11, 0xc8, 0xad, 0x7b, 0x53, 0x8a, 0x3f, 0x0b, 0xe8, 0xcd, 0xf6, 0xe5, 0x1f, + 0x07, 0x03, 0xb7, 0x3f, 0x09, 0xc8, 0xe5, 0x01, 0xbc, 0x09, 0xb8, 0x37, 0xaf, 0x4f, 0x72, 0x5e, + 0x3e, 0x22, 0xe2, 0x1a, 0x7c, 0xfe, 0xed, 0x4d, 0x7f, 0x5d, 0xb8, 0x06, 0xa7, 0x20, 0xae, 0x21, + 0xa6, 0xde, 0xde, 0xd4, 0x9f, 0x12, 0xae, 0x21, 0x48, 0x88, 0x65, 0xfb, 0x66, 0xb7, 0xde, 0x1c, + 0x3e, 0x2d, 0x2c, 0xdb, 0x47, 0x95, 0x5b, 0x86, 0xf1, 0x96, 0x09, 0xb1, 0x37, 0xab, 0x5f, 0xe6, + 0xac, 0xd2, 0xe1, 0xf9, 0xd0, 0x3f, 0x79, 0xf1, 0xc9, 0xb0, 0x37, 0xb7, 0xcf, 0x84, 0x26, 0x2f, + 0x3e, 0x17, 0xe6, 0xce, 0x43, 0x42, 0x6f, 0xd6, 0xeb, 0xc4, 0x79, 0x50, 0xf7, 0x9b, 0x80, 0x99, + 0x3f, 0xfe, 0x09, 0xd7, 0x8e, 0x20, 0xc8, 0x9d, 0x85, 0x38, 0x6e, 0x6c, 0xe2, 0x6a, 0x2f, 0xca, + 0x1f, 0xfc, 0x44, 0x04, 0x4c, 0x82, 0x9d, 0x7b, 0x12, 0x80, 0x6d, 0x8d, 0xd0, 0xc3, 0xc0, 0x1e, + 0xb4, 0xff, 0xe5, 0x27, 0xfc, 0xea, 0x8d, 0x47, 0xe2, 0x31, 0x60, 0x17, 0x79, 0xba, 0x33, 0xf8, + 0x61, 0x90, 0x01, 0x1d, 0x91, 0x27, 0x60, 0xe8, 0x79, 0xdb, 0xd0, 0x1d, 0xb5, 0xd6, 0x8b, 0xfa, + 0xbf, 0x72, 0x6a, 0x81, 0x4f, 0x14, 0xd6, 0x30, 0x2c, 0xec, 0xa8, 0x35, 0xbb, 0x17, 0xed, 0x7f, + 0xe3, 0xb4, 0x2e, 0x01, 0x21, 0xae, 0xa8, 0xb6, 0xd3, 0x4f, 0xbf, 0xff, 0x44, 0x10, 0x0b, 0x02, + 0x22, 0x34, 0xf9, 0xbd, 0x83, 0xf7, 0x7a, 0xd1, 0xfe, 0x48, 0x08, 0xcd, 0xf1, 0x73, 0x6f, 0x86, + 0x24, 0xf9, 0xc9, 0xee, 0xd3, 0xf5, 0x20, 0xfe, 0x53, 0x4e, 0xec, 0x51, 0x90, 0x96, 0x6d, 0xa7, + 0xea, 0x68, 0xbd, 0x95, 0x7d, 0x93, 0x8f, 0xb4, 0xc0, 0xcf, 0xe5, 0x61, 0xd8, 0x76, 0xaa, 0xd5, + 0x26, 0xcf, 0x4f, 0x7b, 0x90, 0xff, 0xf7, 0x9f, 0xb8, 0x5b, 0x16, 0x2e, 0x0d, 0x19, 0xed, 0xab, + 0x3b, 0x8e, 0x69, 0xd0, 0x03, 0x8f, 0x5e, 0x1c, 0x7e, 0xcc, 0x39, 0xf8, 0x48, 0x72, 0x73, 0x90, + 0x22, 0x7d, 0xb1, 0xb0, 0x89, 0xe9, 0xe9, 0x54, 0x0f, 0x16, 0xff, 0x83, 0x2b, 0x20, 0x40, 0x54, + 0xf8, 0xb9, 0xaf, 0xbf, 0x3a, 0x25, 0x7d, 0xeb, 0xd5, 0x29, 0xe9, 0x8f, 0x5e, 0x9d, 0x92, 0x3e, + 0xfc, 0xdd, 0xa9, 0x81, 0x6f, 0x7d, 0x77, 0x6a, 0xe0, 0xf7, 0xbf, 0x3b, 0x35, 0xd0, 0x7e, 0x97, + 0x18, 0xe6, 0x8d, 0x79, 0x83, 0xed, 0x0f, 0x3f, 0x27, 0xd7, 0x34, 0x67, 0xbb, 0xb9, 0x39, 0x5b, + 0x31, 0x1a, 0x74, 0x1b, 0xd7, 0xdb, 0xad, 0x75, 0x17, 0x39, 0xf0, 0xde, 0x28, 0x1c, 0xad, 0x18, + 0x76, 0xc3, 0xb0, 0xcb, 0x6c, 0xbf, 0x97, 0x15, 0xf8, 0x8e, 0x6f, 0xca, 0x5f, 0xd5, 0xc7, 0xa6, + 0xef, 0x45, 0x18, 0xa5, 0x5d, 0xa7, 0xdb, 0x5d, 0xd4, 0xda, 0x7a, 0x06, 0x88, 0x6f, 0xfc, 0xbb, + 0x38, 0xed, 0xf5, 0x88, 0x4b, 0x48, 0x4f, 0xef, 0xd7, 0x61, 0x52, 0x6b, 0x98, 0x75, 0x4c, 0xb7, + 0xf9, 0xcb, 0x6e, 0x5d, 0x6f, 0x7e, 0xdf, 0xe4, 0xfc, 0x26, 0x3c, 0xf2, 0x05, 0x41, 0x9d, 0x5b, + 0x84, 0x71, 0xb5, 0x52, 0xc1, 0x66, 0x80, 0x65, 0x8f, 0x61, 0x11, 0x02, 0xa6, 0x39, 0xa5, 0xcb, + 0xad, 0xf0, 0x64, 0xa7, 0xa1, 0x79, 0xee, 0x6e, 0x9f, 0xe6, 0x2d, 0x5c, 0xc3, 0xfa, 0x83, 0x3a, + 0x76, 0xae, 0x1a, 0xd6, 0x0e, 0x57, 0xef, 0x83, 0xac, 0xa9, 0x41, 0x76, 0x83, 0x19, 0xde, 0x1f, + 0x85, 0x29, 0x56, 0x71, 0x7a, 0x53, 0xb5, 0xf1, 0xe9, 0x2b, 0x0f, 0x6f, 0x62, 0x47, 0x7d, 0xf8, + 0x74, 0xc5, 0xd0, 0x74, 0x3e, 0x12, 0x13, 0x7c, 0x5c, 0x48, 0xfd, 0x2c, 0xaf, 0xcf, 0xb6, 0xdd, + 0xa6, 0x97, 0xe7, 0x21, 0x36, 0x67, 0x68, 0x3a, 0x9a, 0x84, 0x78, 0x15, 0xeb, 0x46, 0x83, 0xdf, + 0xb9, 0x63, 0x05, 0x74, 0x27, 0x0c, 0xaa, 0x0d, 0xa3, 0xa9, 0x3b, 0xec, 0x84, 0xa2, 0x30, 0xfc, + 0xf5, 0x1b, 0xd3, 0x03, 0x7f, 0x70, 0x63, 0x3a, 0xba, 0xa0, 0x3b, 0x0a, 0xaf, 0xca, 0xc5, 0x5e, + 0x7b, 0x65, 0x5a, 0x92, 0x9f, 0x82, 0xa1, 0x22, 0xae, 0x1c, 0x84, 0x57, 0x11, 0x57, 0x42, 0xbc, + 0xee, 0x83, 0xc4, 0x82, 0xee, 0xb0, 0x5b, 0x91, 0x27, 0x20, 0xaa, 0xe9, 0xec, 0xa2, 0x4d, 0xa8, + 0x7d, 0x02, 0x27, 0xa8, 0x45, 0x5c, 0x71, 0x51, 0xab, 0xb8, 0x12, 0x46, 0x25, 0xec, 0x09, 0xbc, + 0x50, 0xfc, 0xfd, 0xff, 0x34, 0x35, 0xf0, 0xd2, 0xab, 0x53, 0x03, 0x1d, 0x47, 0xc2, 0xef, 0x03, + 0x5c, 0xc5, 0x7c, 0x08, 0xec, 0xea, 0x0e, 0x3b, 0x23, 0x71, 0x87, 0xe1, 0x77, 0x06, 0x41, 0xe6, + 0x38, 0xb6, 0xa3, 0xee, 0x68, 0x7a, 0xcd, 0x1d, 0x09, 0xb5, 0xe9, 0x6c, 0xbf, 0xc8, 0x87, 0xe2, + 0x30, 0x1f, 0x0a, 0x8e, 0xd3, 0x7d, 0x34, 0xb2, 0x9d, 0xbd, 0x2b, 0xdb, 0x63, 0xcc, 0xe5, 0x7f, + 0x1d, 0x05, 0xb4, 0xe6, 0xa8, 0x3b, 0x38, 0xdf, 0x74, 0xb6, 0x0d, 0x4b, 0x7b, 0x91, 0xc5, 0x32, + 0x0c, 0xd0, 0x50, 0x77, 0xcb, 0x8e, 0xb1, 0x83, 0x75, 0x9b, 0xaa, 0x66, 0xf8, 0xcc, 0xd1, 0xd9, + 0x36, 0xf6, 0x31, 0x4b, 0x86, 0xae, 0x70, 0xff, 0xe7, 0xbe, 0x33, 0x7d, 0x6f, 0x6f, 0x2d, 0x50, + 0x64, 0x92, 0x5c, 0xef, 0xae, 0x53, 0xc6, 0xe8, 0x32, 0xb0, 0x4b, 0x16, 0xe5, 0xba, 0x66, 0x3b, + 0xfc, 0x9e, 0xf6, 0xd9, 0xd9, 0xf6, 0x7d, 0x9f, 0x6d, 0x15, 0x73, 0xf6, 0xb2, 0x5a, 0xd7, 0xaa, + 0xaa, 0x63, 0x58, 0xf6, 0xc5, 0x01, 0x25, 0x49, 0x59, 0x2d, 0x6a, 0xb6, 0x83, 0xd6, 0x21, 0x59, + 0xc5, 0xfa, 0x1e, 0x63, 0x1b, 0x7d, 0x7d, 0x6c, 0x13, 0x84, 0x13, 0xe5, 0xfa, 0x2c, 0x20, 0xd5, + 0x8f, 0x27, 0x1e, 0x26, 0xb1, 0xfb, 0x95, 0x1d, 0xd8, 0x07, 0x38, 0xd3, 0x77, 0x14, 0xe3, 0x6a, + 0x18, 0x94, 0xbd, 0x07, 0xc0, 0x6b, 0x13, 0x65, 0x60, 0x48, 0xad, 0x56, 0x2d, 0x6c, 0xdb, 0xf4, + 0x00, 0x30, 0xa9, 0x88, 0x62, 0x6e, 0xfc, 0xdf, 0x7c, 0xf9, 0xc1, 0x91, 0x00, 0xc7, 0x42, 0x0a, + 0xe0, 0x8a, 0x4b, 0x7a, 0xea, 0x53, 0x12, 0x8c, 0xb7, 0xb4, 0x88, 0x64, 0x98, 0xca, 0x6f, 0xac, + 0x5f, 0x5c, 0x51, 0x16, 0x9e, 0xcb, 0xaf, 0x2f, 0xac, 0x2c, 0x97, 0xd9, 0x95, 0xff, 0xe5, 0xb5, + 0xd5, 0xd2, 0xdc, 0xc2, 0x85, 0x85, 0x52, 0x31, 0x3d, 0x80, 0xa6, 0xe1, 0x58, 0x1b, 0x9c, 0x62, + 0x69, 0xb1, 0x34, 0x9f, 0x5f, 0x2f, 0xa5, 0x25, 0x74, 0x07, 0x9c, 0x68, 0xcb, 0xc4, 0x45, 0x89, + 0x74, 0x40, 0x51, 0x4a, 0x2e, 0x4a, 0xb4, 0x70, 0xa1, 0xa3, 0x17, 0x3d, 0xd0, 0xd5, 0x7e, 0x76, + 0x5d, 0x77, 0x09, 0xfa, 0xd3, 0x7b, 0x22, 0x70, 0x34, 0x3c, 0x65, 0xa8, 0xfa, 0x5e, 0x87, 0x57, + 0x9f, 0x1d, 0xa2, 0xd9, 0x45, 0x88, 0xe6, 0xf5, 0x3d, 0x74, 0x94, 0xe5, 0xd3, 0xe5, 0xa6, 0x55, + 0xe7, 0x31, 0x68, 0x88, 0x94, 0x37, 0xac, 0x3a, 0x89, 0x4d, 0xe2, 0xa2, 0xbf, 0x74, 0x32, 0xc5, + 0x6f, 0xef, 0xe7, 0xd2, 0x1f, 0x7b, 0x65, 0x7a, 0xe0, 0x0b, 0xaf, 0x4c, 0x0f, 0xfc, 0xe8, 0xd3, + 0xd3, 0x03, 0x2f, 0xfd, 0xe1, 0xcc, 0x40, 0x61, 0x27, 0xdc, 0xbd, 0xaf, 0xf6, 0x9c, 0x4d, 0x13, + 0x79, 0x7d, 0x8f, 0x06, 0xa2, 0x55, 0xe9, 0xb9, 0x38, 0xed, 0x9c, 0x38, 0x40, 0x9d, 0x0a, 0x1f, + 0xa0, 0x3e, 0x83, 0xeb, 0xf5, 0x4b, 0xba, 0x71, 0x95, 0x8e, 0xaa, 0xa7, 0x83, 0x8f, 0x46, 0x60, + 0xaa, 0x65, 0xda, 0xe4, 0x19, 0x46, 0xa7, 0xe7, 0xaf, 0x39, 0x48, 0x14, 0x45, 0xe2, 0x92, 0x81, + 0x21, 0x1b, 0x57, 0x0c, 0xbd, 0xca, 0x3c, 0x3d, 0xaa, 0x88, 0x22, 0xe9, 0xb6, 0xae, 0xea, 0x86, + 0xcd, 0xef, 0xdc, 0xb3, 0x42, 0xe1, 0x13, 0xd2, 0xfe, 0xf2, 0x85, 0x11, 0xd1, 0x92, 0xe8, 0xe6, + 0xc3, 0x3d, 0x8f, 0x94, 0x77, 0x48, 0x2f, 0xdd, 0x4e, 0x04, 0x8e, 0x95, 0xfb, 0xd5, 0xca, 0x2f, + 0x45, 0x60, 0x3a, 0xac, 0x15, 0x92, 0xb6, 0xd9, 0x8e, 0xda, 0x30, 0x3b, 0xa9, 0xe5, 0x3c, 0x24, + 0xd7, 0x05, 0xce, 0xbe, 0xf5, 0x72, 0x7d, 0x9f, 0x7a, 0x19, 0x75, 0x9b, 0x12, 0x8a, 0x39, 0xd3, + 0xa7, 0x62, 0xdc, 0x7e, 0x1c, 0x48, 0x33, 0x9f, 0x8b, 0xc1, 0x09, 0xfa, 0x28, 0xcb, 0x6a, 0x68, + 0xba, 0x73, 0xba, 0x62, 0xed, 0x99, 0x0e, 0x4d, 0xdc, 0x8c, 0x2d, 0xae, 0x97, 0x71, 0xaf, 0x7a, + 0x96, 0x55, 0x77, 0xf0, 0x9c, 0x2d, 0x88, 0xaf, 0x12, 0x3a, 0xa2, 0x11, 0xc7, 0x70, 0xd4, 0x3a, + 0xd7, 0x14, 0x2b, 0x10, 0x28, 0x7b, 0xc8, 0x15, 0x61, 0x50, 0x4d, 0xbc, 0xe1, 0xaa, 0x63, 0x75, + 0x8b, 0xdd, 0x87, 0x8f, 0x52, 0x87, 0x4a, 0x10, 0x00, 0xbd, 0xfa, 0x3e, 0x09, 0x71, 0xb5, 0xc9, + 0xae, 0x72, 0x44, 0x89, 0xa7, 0xd1, 0x82, 0x7c, 0x09, 0x86, 0xf8, 0x81, 0x32, 0x4a, 0x43, 0x74, + 0x07, 0xef, 0xd1, 0x76, 0x52, 0x0a, 0xf9, 0x89, 0x66, 0x21, 0x4e, 0x85, 0xe7, 0x13, 0x48, 0x66, + 0xb6, 0x45, 0xfa, 0x59, 0x2a, 0xa4, 0xc2, 0xd0, 0xe4, 0xa7, 0x20, 0x51, 0x34, 0x1a, 0x9a, 0x6e, + 0x04, 0xb9, 0x25, 0x19, 0x37, 0x2a, 0xb3, 0xd9, 0xe4, 0xf9, 0x86, 0xc2, 0x0a, 0xe8, 0x30, 0x0c, + 0xb2, 0xf7, 0x11, 0xfc, 0x3a, 0x0a, 0x2f, 0xc9, 0x73, 0x30, 0x44, 0x79, 0xaf, 0x98, 0x08, 0xf1, + 0x97, 0x75, 0xfc, 0x21, 0x06, 0x4d, 0x4d, 0x39, 0xfb, 0x88, 0x27, 0x2c, 0x82, 0x58, 0x55, 0x75, + 0x54, 0xde, 0x6f, 0xfa, 0x5b, 0x7e, 0x0b, 0x24, 0x38, 0x13, 0x1b, 0x9d, 0x81, 0xa8, 0x61, 0xda, + 0xfc, 0x42, 0x49, 0xb6, 0x53, 0x57, 0x56, 0xcc, 0x42, 0x8c, 0x64, 0x2a, 0x0a, 0x41, 0x2e, 0x28, + 0x1d, 0x83, 0xea, 0xe3, 0xbe, 0xa0, 0xea, 0x1b, 0x72, 0xdf, 0x4f, 0x36, 0xa4, 0x2d, 0xe6, 0xe0, + 0x1a, 0xcb, 0xa7, 0x23, 0x30, 0xe5, 0xab, 0xbd, 0x82, 0x2d, 0x5b, 0x33, 0x74, 0x3e, 0x9f, 0x33, + 0x6b, 0x41, 0x3e, 0x21, 0x79, 0x7d, 0x07, 0x73, 0x79, 0x33, 0x44, 0xf3, 0xa6, 0x89, 0xb2, 0x90, + 0xa0, 0xe5, 0x8a, 0xc1, 0xec, 0x25, 0xa6, 0xb8, 0x65, 0x52, 0x67, 0x1b, 0x5b, 0xce, 0x55, 0xd5, + 0x72, 0x9f, 0x10, 0x8a, 0xb2, 0xfc, 0x04, 0x24, 0xe7, 0x0c, 0xdd, 0xc6, 0xba, 0xdd, 0xa4, 0x3e, + 0xb8, 0x59, 0x37, 0x2a, 0x3b, 0x9c, 0x03, 0x2b, 0x10, 0x85, 0xab, 0xa6, 0x49, 0x29, 0x63, 0x0a, + 0xf9, 0xc9, 0x72, 0xc3, 0xc2, 0x5a, 0x47, 0x15, 0x3d, 0xb1, 0x7f, 0x15, 0xf1, 0x4e, 0xba, 0x3a, + 0xfa, 0xdf, 0x12, 0x1c, 0x6f, 0x75, 0xa8, 0x1d, 0xbc, 0x67, 0xef, 0xd7, 0x9f, 0x9e, 0x85, 0xe4, + 0x2a, 0x7d, 0xc7, 0x7f, 0x09, 0xef, 0xa1, 0x2c, 0x0c, 0xe1, 0xea, 0x99, 0xb3, 0x67, 0x1f, 0x7e, + 0x82, 0x59, 0xfb, 0xc5, 0x01, 0x45, 0x00, 0xd0, 0x14, 0x24, 0x6d, 0x5c, 0x31, 0xcf, 0x9c, 0x3d, + 0xb7, 0xf3, 0x30, 0x33, 0x2f, 0x92, 0x01, 0xb9, 0xa0, 0x5c, 0x82, 0xf4, 0xfa, 0xb5, 0x4f, 0x4f, + 0x4b, 0x85, 0x38, 0x44, 0xed, 0x66, 0xe3, 0xb6, 0xda, 0xc8, 0xcb, 0x71, 0x98, 0xf1, 0x53, 0xd2, + 0x48, 0xe5, 0x66, 0x25, 0x5c, 0x07, 0x69, 0x9f, 0x0e, 0x28, 0x46, 0x87, 0x64, 0xb6, 0xab, 0x26, + 0xe5, 0xdf, 0x90, 0x20, 0xe5, 0xa6, 0x4a, 0x6b, 0xd8, 0x41, 0xe7, 0xfd, 0xf9, 0x0f, 0x77, 0x9b, + 0x63, 0xb3, 0xe1, 0xb6, 0xbc, 0x94, 0x4e, 0xf1, 0xa1, 0xa3, 0xc7, 0xa8, 0x21, 0x9a, 0x86, 0xcd, + 0x9f, 0x95, 0xf5, 0x20, 0x75, 0x91, 0xd1, 0x03, 0x80, 0x68, 0x84, 0x2b, 0x5f, 0x31, 0x1c, 0x4d, + 0xaf, 0x95, 0x4d, 0xe3, 0x2a, 0x7f, 0xac, 0x1b, 0x55, 0xd2, 0xb4, 0xe6, 0x32, 0xad, 0x58, 0x25, + 0x70, 0x22, 0x74, 0xd2, 0xe5, 0x12, 0x4c, 0xef, 0x48, 0x10, 0x10, 0x45, 0x74, 0x1e, 0x86, 0xcc, + 0xe6, 0x66, 0x59, 0x44, 0x8c, 0xe1, 0x33, 0xc7, 0xdb, 0xf9, 0xbf, 0xb0, 0x0f, 0x1e, 0x01, 0x06, + 0xcd, 0xe6, 0x26, 0xb1, 0x96, 0x3b, 0x20, 0xd5, 0x46, 0x98, 0xe1, 0x2b, 0x9e, 0x1c, 0xf4, 0xf3, + 0x11, 0xbc, 0x07, 0x65, 0xd3, 0xd2, 0x0c, 0x4b, 0x73, 0xf6, 0x68, 0xfe, 0x1a, 0x55, 0xd2, 0xa2, + 0x62, 0x95, 0xc3, 0xe5, 0x1d, 0x18, 0x5b, 0xa3, 0xeb, 0x5b, 0x4f, 0xf2, 0xb3, 0x9e, 0x7c, 0x52, + 0x6f, 0xf9, 0x3a, 0x4a, 0x16, 0x69, 0x91, 0xac, 0xf0, 0x74, 0x47, 0xeb, 0x7c, 0x6c, 0xff, 0xd6, + 0x19, 0xcc, 0x10, 0xff, 0xe4, 0x68, 0xc0, 0x39, 0x99, 0x71, 0xfa, 0xc3, 0x57, 0xbf, 0x86, 0xd9, + 0x2b, 0x9b, 0xc8, 0x76, 0x9f, 0x54, 0xb3, 0x3d, 0xc2, 0x68, 0xb6, 0xa7, 0x0b, 0xc9, 0x4f, 0xc0, + 0xc8, 0xaa, 0x6a, 0x39, 0x6b, 0xd8, 0xb9, 0x88, 0xd5, 0x2a, 0xb6, 0x82, 0xb3, 0xee, 0x88, 0x98, + 0x75, 0x11, 0xc4, 0xe8, 0xd4, 0xca, 0x66, 0x1d, 0xfa, 0x5b, 0xde, 0x86, 0x18, 0xbd, 0x19, 0xea, + 0xce, 0xc8, 0x9c, 0x82, 0xcd, 0xc8, 0x24, 0x96, 0xee, 0x39, 0xd8, 0x16, 0xe9, 0x2d, 0x2d, 0xa0, + 0x47, 0xc5, 0xbc, 0x1a, 0xed, 0x3e, 0xaf, 0x72, 0x43, 0xe4, 0xb3, 0x6b, 0x1d, 0x86, 0x0a, 0x24, + 0x14, 0x2f, 0x14, 0x5d, 0x41, 0x24, 0x4f, 0x10, 0xb4, 0x04, 0x63, 0xa6, 0x6a, 0x39, 0xf4, 0x49, + 0xcc, 0x36, 0xed, 0x05, 0xb7, 0xf5, 0xe9, 0x56, 0xcf, 0x0b, 0x74, 0x96, 0xb7, 0x32, 0x62, 0xfa, + 0x81, 0xf2, 0xf7, 0x63, 0x30, 0xc8, 0x95, 0xf1, 0x66, 0x18, 0xe2, 0x6a, 0xe5, 0xd6, 0x79, 0x62, + 0xb6, 0x75, 0x62, 0x9a, 0x75, 0x27, 0x10, 0xce, 0x4f, 0xd0, 0xa0, 0x7b, 0x20, 0x51, 0xd9, 0x56, + 0x35, 0xbd, 0xac, 0x55, 0xc5, 0x56, 0xc3, 0xab, 0x37, 0xa6, 0x87, 0xe6, 0x08, 0x6c, 0xa1, 0xa8, + 0x0c, 0xd1, 0xca, 0x85, 0x2a, 0xc9, 0x04, 0xb6, 0xb1, 0x56, 0xdb, 0x76, 0xb8, 0x87, 0xf1, 0x12, + 0x7a, 0x1c, 0x62, 0xc4, 0x20, 0xf8, 0x83, 0xc9, 0x6c, 0xcb, 0x86, 0x8f, 0x9b, 0xec, 0x15, 0x12, + 0xa4, 0xe1, 0x0f, 0x7f, 0x67, 0x5a, 0x52, 0x28, 0x05, 0x9a, 0x83, 0x91, 0xba, 0x6a, 0x3b, 0x65, + 0x3a, 0x83, 0x91, 0xe6, 0xe3, 0x7c, 0xbd, 0xdd, 0xa2, 0x10, 0xae, 0x58, 0x2e, 0xfa, 0x30, 0xa1, + 0x62, 0xa0, 0x2a, 0x3a, 0x09, 0x69, 0xca, 0xa4, 0x62, 0x34, 0x1a, 0x9a, 0xc3, 0x72, 0xab, 0x41, + 0xaa, 0xf7, 0x51, 0x02, 0x9f, 0xa3, 0x60, 0x9a, 0x61, 0x1d, 0x83, 0x24, 0x7d, 0xa2, 0x45, 0x51, + 0xd8, 0x75, 0xe4, 0x04, 0x01, 0xd0, 0xca, 0x7b, 0x61, 0xcc, 0x8b, 0x8f, 0x0c, 0x25, 0xc1, 0xb8, + 0x78, 0x60, 0x8a, 0xf8, 0x10, 0x4c, 0xea, 0x78, 0x97, 0x5e, 0x90, 0x0e, 0x60, 0x27, 0x29, 0x36, + 0x22, 0x75, 0x97, 0x83, 0x14, 0x77, 0xc3, 0x68, 0x45, 0x28, 0x9f, 0xe1, 0x02, 0xc5, 0x1d, 0x71, + 0xa1, 0x14, 0xed, 0x28, 0x24, 0x54, 0xd3, 0x64, 0x08, 0xc3, 0x3c, 0x3e, 0x9a, 0x26, 0xad, 0x3a, + 0x05, 0xe3, 0xb4, 0x8f, 0x16, 0xb6, 0x9b, 0x75, 0x87, 0x33, 0x49, 0x51, 0x9c, 0x31, 0x52, 0xa1, + 0x30, 0x38, 0xc5, 0xbd, 0x13, 0x46, 0xf0, 0x15, 0xad, 0x8a, 0xf5, 0x0a, 0x66, 0x78, 0x23, 0x14, + 0x2f, 0x25, 0x80, 0x14, 0xe9, 0x3e, 0x70, 0xe3, 0x5e, 0x59, 0xc4, 0xe4, 0x51, 0xc6, 0x4f, 0xc0, + 0xf3, 0x0c, 0x2c, 0x67, 0x20, 0x56, 0x54, 0x1d, 0x95, 0x24, 0x18, 0xce, 0x2e, 0x9b, 0x68, 0x52, + 0x0a, 0xf9, 0x29, 0xbf, 0x16, 0x81, 0xd8, 0x65, 0xc3, 0xc1, 0xe8, 0x11, 0x5f, 0x02, 0x38, 0xda, + 0xce, 0x9e, 0xd7, 0xb4, 0x9a, 0x8e, 0xab, 0x4b, 0x76, 0xcd, 0xf7, 0x3d, 0x05, 0xcf, 0x9c, 0x22, + 0x01, 0x73, 0x9a, 0x84, 0xb8, 0x65, 0x34, 0xf5, 0xaa, 0xb8, 0xc9, 0x4b, 0x0b, 0xa8, 0x04, 0x09, + 0xd7, 0x4a, 0x62, 0xbd, 0xac, 0x64, 0x8c, 0x58, 0x09, 0xb1, 0x61, 0x0e, 0x50, 0x86, 0x36, 0xb9, + 0xb1, 0x14, 0x20, 0xe9, 0x06, 0x2f, 0x6e, 0x6d, 0xfd, 0x19, 0xac, 0x47, 0x46, 0x26, 0x13, 0x77, + 0xec, 0x5d, 0xe5, 0x31, 0x8b, 0x4b, 0xbb, 0x15, 0x5c, 0x7b, 0x01, 0xb3, 0xe2, 0xdf, 0x76, 0x18, + 0xa2, 0xfd, 0xf2, 0xcc, 0x8a, 0x7d, 0xdf, 0xe1, 0x38, 0x24, 0x6d, 0xad, 0xa6, 0xab, 0x4e, 0xd3, + 0xc2, 0xdc, 0xf2, 0x3c, 0x80, 0xfc, 0x55, 0x09, 0x06, 0x99, 0x25, 0xfb, 0xf4, 0x26, 0xb5, 0xd7, + 0x5b, 0xa4, 0x93, 0xde, 0xa2, 0x07, 0xd7, 0x5b, 0x1e, 0xc0, 0x15, 0xc6, 0xe6, 0x4f, 0xee, 0xdb, + 0x64, 0x0c, 0x4c, 0xc4, 0x35, 0xad, 0xc6, 0x1d, 0xd5, 0x47, 0x24, 0xff, 0x47, 0x89, 0x24, 0xb1, + 0xbc, 0x1e, 0xe5, 0x61, 0x44, 0xc8, 0x55, 0xde, 0xaa, 0xab, 0x35, 0x6e, 0x3b, 0x27, 0x3a, 0x0a, + 0x77, 0xa1, 0xae, 0xd6, 0x94, 0x61, 0x2e, 0x0f, 0x29, 0xb4, 0x1f, 0x87, 0x48, 0x87, 0x71, 0x08, + 0x0c, 0x7c, 0xf4, 0x60, 0x03, 0x1f, 0x18, 0xa2, 0x58, 0x78, 0x88, 0xbe, 0x14, 0xa1, 0x8b, 0x19, + 0xd3, 0xb0, 0xd5, 0xfa, 0x4f, 0xc3, 0x23, 0x8e, 0x41, 0xd2, 0x34, 0xea, 0x65, 0x56, 0xc3, 0x6e, + 0xb8, 0x27, 0x4c, 0xa3, 0xae, 0xb4, 0x0c, 0x7b, 0xfc, 0x16, 0xb9, 0xcb, 0xe0, 0x2d, 0xd0, 0xda, + 0x50, 0x58, 0x6b, 0x16, 0xa4, 0x98, 0x2a, 0xf8, 0x5c, 0xf6, 0x10, 0xd1, 0x01, 0x9d, 0x1c, 0xa5, + 0xd6, 0xb9, 0x97, 0x89, 0xcd, 0x30, 0x15, 0x8e, 0x47, 0x28, 0x58, 0xe8, 0x6f, 0xb7, 0x0a, 0xf6, + 0x9b, 0xa5, 0xc2, 0xf1, 0xe4, 0xbf, 0x29, 0x01, 0x2c, 0x12, 0xcd, 0xd2, 0xfe, 0x92, 0x59, 0xc8, + 0xa6, 0x22, 0x94, 0x03, 0x2d, 0x4f, 0x75, 0x1a, 0x34, 0xde, 0x7e, 0xca, 0xf6, 0xcb, 0x3d, 0x07, + 0x23, 0x9e, 0x31, 0xda, 0x58, 0x08, 0x33, 0xd5, 0x25, 0xab, 0x5e, 0xc3, 0x8e, 0x92, 0xba, 0xe2, + 0x2b, 0xc9, 0xff, 0x5c, 0x82, 0x24, 0x95, 0x69, 0x09, 0x3b, 0x6a, 0x60, 0x0c, 0xa5, 0x83, 0x8f, + 0xe1, 0x09, 0x00, 0xc6, 0xc6, 0xd6, 0x5e, 0xc4, 0xdc, 0xb2, 0x92, 0x14, 0xb2, 0xa6, 0xbd, 0x88, + 0xd1, 0x39, 0x57, 0xe1, 0xd1, 0xee, 0x0a, 0x17, 0x59, 0x37, 0x57, 0xfb, 0x11, 0x18, 0xa2, 0x9f, + 0xa8, 0xda, 0xb5, 0x79, 0x22, 0x3d, 0xa8, 0x37, 0x1b, 0xeb, 0xbb, 0xb6, 0xfc, 0x3c, 0x0c, 0xad, + 0xef, 0xb2, 0xbd, 0x91, 0x63, 0x90, 0xb4, 0x0c, 0x83, 0xcf, 0xc9, 0x2c, 0x17, 0x4a, 0x10, 0x00, + 0x9d, 0x82, 0xc4, 0x7e, 0x40, 0xc4, 0xdb, 0x0f, 0xf0, 0x36, 0x34, 0xa2, 0x7d, 0x6d, 0x68, 0x9c, + 0xfa, 0xf7, 0x12, 0x0c, 0xfb, 0xe2, 0x03, 0x7a, 0x18, 0x0e, 0x15, 0x16, 0x57, 0xe6, 0x2e, 0x95, + 0x17, 0x8a, 0xe5, 0x0b, 0x8b, 0xf9, 0x79, 0xef, 0x0d, 0x57, 0xf6, 0xf0, 0xb5, 0xeb, 0x33, 0xc8, + 0x87, 0xbb, 0xa1, 0xd3, 0x1d, 0x25, 0x74, 0x1a, 0x26, 0x83, 0x24, 0xf9, 0xc2, 0x5a, 0x69, 0x79, + 0x3d, 0x2d, 0x65, 0x0f, 0x5d, 0xbb, 0x3e, 0x33, 0xee, 0xa3, 0xc8, 0x6f, 0xda, 0x58, 0x77, 0x5a, + 0x09, 0xe6, 0x56, 0x96, 0x96, 0x16, 0xd6, 0xd3, 0x91, 0x16, 0x02, 0x1e, 0xb0, 0xef, 0x83, 0xf1, + 0x20, 0xc1, 0xf2, 0xc2, 0x62, 0x3a, 0x9a, 0x45, 0xd7, 0xae, 0xcf, 0x8c, 0xfa, 0xb0, 0x97, 0xb5, + 0x7a, 0x36, 0xf1, 0xc1, 0xcf, 0x4c, 0x0d, 0xfc, 0xea, 0xaf, 0x4c, 0x49, 0xa4, 0x67, 0x23, 0x81, + 0x18, 0x81, 0x1e, 0x80, 0x23, 0x6b, 0x0b, 0xf3, 0xcb, 0xa5, 0x62, 0x79, 0x69, 0x6d, 0x5e, 0xec, + 0x41, 0x8b, 0xde, 0x8d, 0x5d, 0xbb, 0x3e, 0x33, 0xcc, 0xbb, 0xd4, 0x09, 0x7b, 0x55, 0x29, 0x5d, + 0x5e, 0x59, 0x2f, 0xa5, 0x25, 0x86, 0xbd, 0x6a, 0xe1, 0x2b, 0x86, 0xc3, 0xbe, 0x61, 0xf7, 0x10, + 0x1c, 0x6d, 0x83, 0xed, 0x76, 0x6c, 0xfc, 0xda, 0xf5, 0x99, 0x91, 0x55, 0x0b, 0x33, 0xff, 0xa1, + 0x14, 0xb3, 0x90, 0x69, 0xa5, 0x58, 0x59, 0x5d, 0x59, 0xcb, 0x2f, 0xa6, 0x67, 0xb2, 0xe9, 0x6b, + 0xd7, 0x67, 0x52, 0x22, 0x18, 0xd2, 0x8d, 0x7e, 0xb7, 0x67, 0xb7, 0x73, 0xc5, 0xf3, 0xfd, 0x59, + 0xb8, 0xab, 0xc3, 0x19, 0x93, 0x38, 0x9d, 0x38, 0xd0, 0x29, 0x53, 0xc7, 0x7d, 0xf6, 0x6c, 0x8f, + 0xed, 0xe7, 0xde, 0x4b, 0xa7, 0x83, 0x9f, 0x60, 0x65, 0xbb, 0x2e, 0xee, 0xe4, 0x0f, 0x49, 0x30, + 0x7a, 0x51, 0xb3, 0x1d, 0xc3, 0xd2, 0x2a, 0x6a, 0x9d, 0xbe, 0xdc, 0x3a, 0xd7, 0x6f, 0x6c, 0x0d, + 0xb9, 0xfa, 0x93, 0x30, 0x78, 0x45, 0xad, 0xb3, 0xa0, 0x16, 0xa5, 0x1f, 0x9a, 0xe9, 0x70, 0xe4, + 0xe3, 0x86, 0x36, 0xc1, 0x80, 0x91, 0xc9, 0xbf, 0x1e, 0x81, 0x31, 0xea, 0x0c, 0x36, 0xfb, 0x04, + 0x19, 0x59, 0x63, 0x15, 0x20, 0x66, 0xa9, 0x0e, 0xdf, 0x34, 0x2c, 0xcc, 0xf2, 0xd3, 0xc7, 0x7b, + 0xfa, 0x38, 0x4b, 0x2b, 0xe2, 0x8a, 0x42, 0x69, 0xd1, 0x3b, 0x20, 0xd1, 0x50, 0x77, 0xcb, 0x94, + 0x0f, 0x5b, 0xb9, 0xe4, 0xf7, 0xc7, 0xe7, 0xe6, 0x8d, 0xe9, 0xb1, 0x3d, 0xb5, 0x51, 0xcf, 0xc9, + 0x82, 0x8f, 0xac, 0x0c, 0x35, 0xd4, 0x5d, 0x22, 0x22, 0x32, 0x61, 0x8c, 0x40, 0x2b, 0xdb, 0xaa, + 0x5e, 0xc3, 0xac, 0x11, 0xba, 0x05, 0x5a, 0xb8, 0xb8, 0xef, 0x46, 0x0e, 0x7b, 0x8d, 0xf8, 0xd8, + 0xc9, 0xca, 0x48, 0x43, 0xdd, 0x9d, 0xa3, 0x00, 0xd2, 0x62, 0x2e, 0xf1, 0xb1, 0x57, 0xa6, 0x07, + 0xe8, 0x89, 0xee, 0xb7, 0x25, 0x00, 0x4f, 0x63, 0xe8, 0x1d, 0x90, 0xae, 0xb8, 0x25, 0x4a, 0x2b, + 0xce, 0x26, 0xef, 0xed, 0x34, 0x16, 0x21, 0x7d, 0xb3, 0xb9, 0xf9, 0x5b, 0x37, 0xa6, 0x25, 0x65, + 0xac, 0x12, 0x1a, 0x8a, 0xb7, 0xc3, 0x70, 0xd3, 0xac, 0xaa, 0x0e, 0x2e, 0xd3, 0x75, 0x5c, 0xa4, + 0xe7, 0x3c, 0x3f, 0x45, 0x78, 0xdd, 0xbc, 0x31, 0x8d, 0x58, 0xb7, 0x7c, 0xc4, 0x32, 0x9d, 0xfd, + 0x81, 0x41, 0x08, 0x81, 0xaf, 0x4f, 0xdf, 0x90, 0x60, 0xb8, 0xe8, 0xbb, 0x53, 0x99, 0x81, 0xa1, + 0x86, 0xa1, 0x6b, 0x3b, 0xdc, 0x1e, 0x93, 0x8a, 0x28, 0xa2, 0x2c, 0x24, 0xd8, 0x63, 0x56, 0x67, + 0x4f, 0x6c, 0x85, 0x8a, 0x32, 0xa1, 0xba, 0x8a, 0x37, 0x6d, 0x4d, 0x8c, 0x86, 0x22, 0x8a, 0xe8, + 0x02, 0xa4, 0x6d, 0x5c, 0x69, 0x5a, 0x9a, 0xb3, 0x57, 0xae, 0x18, 0xba, 0xa3, 0x56, 0x1c, 0xf6, + 0x2c, 0xb2, 0x70, 0xec, 0xe6, 0x8d, 0xe9, 0x23, 0x4c, 0xd6, 0x30, 0x86, 0xac, 0x8c, 0x09, 0xd0, + 0x1c, 0x83, 0x90, 0x16, 0xaa, 0xd8, 0x51, 0xb5, 0xba, 0x9d, 0x61, 0x97, 0x13, 0x44, 0xd1, 0xd7, + 0x97, 0xcf, 0x0f, 0xf9, 0x37, 0xb6, 0x2e, 0x40, 0xda, 0x30, 0xb1, 0x15, 0x48, 0x44, 0xa5, 0x70, + 0xcb, 0x61, 0x0c, 0x59, 0x19, 0x13, 0x20, 0x91, 0xa4, 0x3a, 0x64, 0x98, 0xc5, 0x42, 0xd1, 0x6c, + 0x6e, 0x7a, 0xfb, 0x61, 0x93, 0x2d, 0xa3, 0x91, 0xd7, 0xf7, 0x0a, 0x8f, 0x78, 0xdc, 0xc3, 0x74, + 0xf2, 0x37, 0xbf, 0xfc, 0xe0, 0x24, 0x37, 0x0d, 0x6f, 0x7f, 0xea, 0x12, 0xde, 0x23, 0xc3, 0xcf, + 0x51, 0x57, 0x29, 0x26, 0x49, 0x3b, 0x9f, 0x57, 0xb5, 0xba, 0x78, 0xde, 0xaf, 0xf0, 0x12, 0xca, + 0xc1, 0xa0, 0xed, 0xa8, 0x4e, 0xd3, 0xe6, 0x27, 0xbd, 0x72, 0x27, 0x53, 0x2b, 0x18, 0x7a, 0x75, + 0x8d, 0x62, 0x2a, 0x9c, 0x02, 0x5d, 0x80, 0x41, 0x7e, 0x84, 0x1e, 0xdf, 0xb7, 0x7f, 0xd3, 0xbb, + 0x12, 0x8c, 0x9a, 0x68, 0xa4, 0x8a, 0xeb, 0xb8, 0xc6, 0xd2, 0xaa, 0x6d, 0x95, 0xac, 0x3e, 0xe8, + 0xb7, 0xf7, 0x0a, 0x0b, 0xfb, 0x76, 0x42, 0xae, 0xa9, 0x30, 0x3f, 0x59, 0x19, 0x73, 0x41, 0x6b, + 0x14, 0x82, 0x2e, 0x05, 0x2e, 0xff, 0xf2, 0x0f, 0x54, 0xde, 0xd9, 0xa9, 0xfb, 0x3e, 0x9b, 0x16, + 0xfb, 0x13, 0xfe, 0xab, 0xc3, 0x17, 0x20, 0xdd, 0xd4, 0x37, 0x0d, 0x9d, 0xbe, 0xc1, 0xe5, 0xf9, + 0x3d, 0x59, 0xdf, 0x45, 0xfd, 0xc6, 0x11, 0xc6, 0x90, 0x95, 0x31, 0x17, 0x74, 0x91, 0xad, 0x02, + 0xaa, 0x30, 0xea, 0x61, 0x51, 0x47, 0x4d, 0xf6, 0x74, 0xd4, 0x3b, 0xb8, 0xa3, 0x1e, 0x0a, 0xb7, + 0xe2, 0xf9, 0xea, 0x88, 0x0b, 0x24, 0x64, 0xe8, 0x22, 0x80, 0x17, 0x1e, 0xe8, 0x3e, 0xc5, 0x70, + 0xe7, 0x81, 0xf7, 0x62, 0x8c, 0x58, 0xef, 0x79, 0xb4, 0xe8, 0x5d, 0x30, 0xd1, 0xd0, 0xf4, 0xb2, + 0x8d, 0xeb, 0x5b, 0x65, 0xae, 0x60, 0xc2, 0x92, 0x7e, 0x42, 0xa9, 0xb0, 0xb8, 0x3f, 0x7b, 0xb8, + 0x79, 0x63, 0x3a, 0xcb, 0x43, 0x68, 0x2b, 0x4b, 0x59, 0x19, 0x6f, 0x68, 0xfa, 0x1a, 0xae, 0x6f, + 0x15, 0x5d, 0x58, 0x2e, 0xf5, 0xc1, 0x57, 0xa6, 0x07, 0xb8, 0xbb, 0x0e, 0xc8, 0xe7, 0xe8, 0xde, + 0x39, 0x77, 0x33, 0x6c, 0x93, 0x35, 0x89, 0x2a, 0x0a, 0xfc, 0xaa, 0x81, 0x07, 0x60, 0x6e, 0xfe, + 0xd2, 0x1f, 0xce, 0x48, 0xf2, 0xe7, 0x25, 0x18, 0x2c, 0x5e, 0x5e, 0x55, 0x35, 0x0b, 0x2d, 0xc0, + 0xb8, 0x67, 0x39, 0x41, 0x27, 0x3f, 0x7e, 0xf3, 0xc6, 0x74, 0x26, 0x6c, 0x5c, 0xae, 0x97, 0x7b, + 0x06, 0x2c, 0xdc, 0x7c, 0xa1, 0xd3, 0xc2, 0x35, 0xc0, 0xaa, 0x05, 0x45, 0x6e, 0x5d, 0xd6, 0x86, + 0xba, 0x59, 0x82, 0x21, 0x26, 0xad, 0x8d, 0x72, 0x10, 0x37, 0xc9, 0x0f, 0x7e, 0x30, 0x30, 0xd5, + 0xd1, 0x78, 0x29, 0xbe, 0xbb, 0x91, 0x49, 0x48, 0xe4, 0x8f, 0x44, 0x00, 0x8a, 0x97, 0x2f, 0xaf, + 0x5b, 0x9a, 0x59, 0xc7, 0xce, 0xad, 0xec, 0xf9, 0x3a, 0x1c, 0xf2, 0xad, 0x92, 0xac, 0x4a, 0xa8, + 0xf7, 0x33, 0x37, 0x6f, 0x4c, 0x1f, 0x0f, 0xf7, 0xde, 0x87, 0x26, 0x2b, 0x13, 0xde, 0x7a, 0xc9, + 0xaa, 0xb4, 0xe5, 0x5a, 0xb5, 0x1d, 0x97, 0x6b, 0xb4, 0x33, 0x57, 0x1f, 0x9a, 0x9f, 0x6b, 0xd1, + 0x76, 0xda, 0xab, 0x76, 0x0d, 0x86, 0x3d, 0x95, 0xd8, 0xa8, 0x08, 0x09, 0x87, 0xff, 0xe6, 0x1a, + 0x96, 0x3b, 0x6b, 0x58, 0x90, 0x71, 0x2d, 0xbb, 0x94, 0xf2, 0x9f, 0x49, 0x00, 0x9e, 0xcd, 0xfe, + 0x6c, 0x9a, 0x18, 0x09, 0xe5, 0x3c, 0xf0, 0x46, 0x0f, 0x94, 0xaa, 0x71, 0xea, 0x90, 0x3e, 0x7f, + 0x3e, 0x02, 0x13, 0x1b, 0x22, 0xf2, 0xfc, 0xcc, 0xeb, 0x60, 0x15, 0x86, 0xb0, 0xee, 0x58, 0x1a, + 0x55, 0x02, 0x19, 0xed, 0x87, 0x3a, 0x8d, 0x76, 0x9b, 0x3e, 0xd1, 0x8f, 0x48, 0x89, 0x4d, 0x77, + 0xce, 0x26, 0xa4, 0x8d, 0x5f, 0x8c, 0x42, 0xa6, 0x13, 0x25, 0x9a, 0x83, 0xb1, 0x8a, 0x85, 0xd9, + 0xc5, 0x2b, 0xff, 0xce, 0x5f, 0x21, 0xeb, 0x65, 0x96, 0x21, 0x04, 0x59, 0x19, 0x15, 0x10, 0x3e, + 0x7b, 0xd4, 0x80, 0xa4, 0x7d, 0xc4, 0xec, 0xe8, 0xfd, 0xad, 0xfe, 0xf2, 0x3c, 0x99, 0x4f, 0x1f, + 0xa2, 0x91, 0x20, 0x03, 0x36, 0x7f, 0x8c, 0x7a, 0x50, 0x3a, 0x81, 0xbc, 0x00, 0x63, 0x9a, 0xae, + 0x39, 0x9a, 0x5a, 0x2f, 0x6f, 0xaa, 0x75, 0x55, 0xaf, 0x1c, 0x24, 0x6b, 0x66, 0x21, 0x9f, 0x37, + 0x1b, 0x62, 0x27, 0x2b, 0xa3, 0x1c, 0x52, 0x60, 0x00, 0x74, 0x11, 0x86, 0x44, 0x53, 0xb1, 0x03, + 0x65, 0x1b, 0x82, 0xdc, 0x97, 0xe0, 0xfd, 0x42, 0x14, 0xc6, 0x15, 0x5c, 0xfd, 0xff, 0x43, 0xb1, + 0xbf, 0xa1, 0x58, 0x02, 0x60, 0xee, 0x4e, 0x02, 0xec, 0x01, 0x46, 0x83, 0x04, 0x8c, 0x24, 0xe3, + 0x50, 0xb4, 0x1d, 0xdf, 0x78, 0xdc, 0x88, 0x40, 0xca, 0x3f, 0x1e, 0x7f, 0x41, 0x67, 0x25, 0xb4, + 0xe0, 0x45, 0xa2, 0x18, 0xff, 0xf4, 0x6e, 0x87, 0x48, 0xd4, 0x62, 0xbd, 0xdd, 0x43, 0xd0, 0x1f, + 0x47, 0x61, 0x70, 0x55, 0xb5, 0xd4, 0x86, 0x8d, 0x2a, 0x2d, 0x99, 0xa6, 0xd8, 0x7e, 0x6c, 0xf9, + 0xc0, 0x3a, 0xdf, 0xed, 0xe8, 0x91, 0x68, 0x7e, 0xac, 0x4d, 0xa2, 0xf9, 0x56, 0x18, 0x25, 0xcb, + 0x61, 0xdf, 0x15, 0x06, 0xa2, 0xed, 0x91, 0xc2, 0x51, 0x8f, 0x4b, 0xb0, 0x9e, 0xad, 0x96, 0x2f, + 0xfb, 0xef, 0x30, 0x0c, 0x13, 0x0c, 0x2f, 0x30, 0x13, 0xf2, 0xc3, 0xde, 0xb2, 0xd4, 0x57, 0x29, + 0x2b, 0xd0, 0x50, 0x77, 0x4b, 0xac, 0x80, 0x16, 0x01, 0x6d, 0xbb, 0x3b, 0x23, 0x65, 0x4f, 0x9d, + 0x84, 0xfe, 0xc4, 0xcd, 0x1b, 0xd3, 0x47, 0x19, 0x7d, 0x2b, 0x8e, 0xac, 0x8c, 0x7b, 0x40, 0xc1, + 0xed, 0x51, 0x00, 0xd2, 0xaf, 0x32, 0xbb, 0xc2, 0xcd, 0x96, 0x3b, 0x87, 0x6e, 0xde, 0x98, 0x1e, + 0x67, 0x5c, 0xbc, 0x3a, 0x59, 0x49, 0x92, 0x42, 0x91, 0xde, 0xee, 0x7e, 0x01, 0xc6, 0xe8, 0x9d, + 0x80, 0xb2, 0x85, 0xab, 0x4d, 0xfa, 0x69, 0x18, 0xbe, 0xae, 0x39, 0xb0, 0x6f, 0x86, 0xd8, 0xc9, + 0xca, 0x28, 0x85, 0x28, 0x02, 0xe0, 0x73, 0xa6, 0xcf, 0x48, 0x80, 0xbc, 0x59, 0x46, 0xc1, 0xb6, + 0x49, 0x96, 0x84, 0x24, 0xf7, 0xf7, 0x25, 0xea, 0x52, 0xf7, 0xdc, 0xdf, 0xa3, 0x17, 0xb9, 0xbf, + 0xcf, 0x39, 0x9f, 0xf0, 0x22, 0x72, 0xa4, 0xd7, 0x15, 0x6a, 0x6e, 0x95, 0xe1, 0x10, 0x3c, 0x20, + 0xff, 0x2b, 0x09, 0x8e, 0xb6, 0x18, 0xb1, 0x2b, 0xec, 0x5f, 0x02, 0x64, 0xf9, 0x2a, 0xf9, 0xa7, + 0x1b, 0x99, 0xd0, 0xfb, 0xf6, 0x89, 0x71, 0xab, 0x25, 0xd4, 0xdf, 0xba, 0x49, 0x85, 0xdd, 0xd1, + 0xff, 0x67, 0x12, 0x4c, 0xfa, 0x9b, 0x77, 0x3b, 0xb2, 0x0c, 0x29, 0x7f, 0xeb, 0xbc, 0x0b, 0x77, + 0xf5, 0xd3, 0x05, 0x2e, 0x7d, 0x80, 0x1e, 0x3d, 0xed, 0x45, 0x08, 0xb6, 0x5d, 0xf7, 0x70, 0xdf, + 0xda, 0x10, 0x32, 0x85, 0x23, 0x45, 0x8c, 0x8e, 0xc7, 0xff, 0x91, 0x20, 0xb6, 0x6a, 0x18, 0x75, + 0x64, 0xc0, 0xb8, 0x6e, 0x38, 0x65, 0x62, 0xcc, 0xb8, 0xea, 0xbf, 0x2a, 0x9f, 0x2c, 0xcc, 0xed, + 0x4f, 0x49, 0x3f, 0xb8, 0x31, 0xdd, 0xca, 0x4a, 0x19, 0xd3, 0x0d, 0xa7, 0x40, 0x21, 0xfc, 0xb6, + 0xfc, 0xbb, 0x60, 0x24, 0xd8, 0x18, 0x0b, 0xcc, 0xcf, 0xec, 0xbb, 0xb1, 0x20, 0x9b, 0x9b, 0x37, + 0xa6, 0x27, 0x3d, 0x27, 0x75, 0xc1, 0xb2, 0x92, 0xda, 0xf4, 0xb5, 0xce, 0x6e, 0x94, 0xfd, 0xe8, + 0x95, 0x69, 0xe9, 0xd4, 0x57, 0x24, 0x00, 0x6f, 0xb3, 0x03, 0x3d, 0x00, 0x47, 0x0a, 0x2b, 0xcb, + 0xc5, 0xf2, 0xda, 0x7a, 0x7e, 0x7d, 0x63, 0x2d, 0x78, 0xad, 0x5c, 0xec, 0xc8, 0xdb, 0x26, 0xae, + 0x68, 0x5b, 0x1a, 0xae, 0xa2, 0x7b, 0x60, 0x32, 0x88, 0x4d, 0x4a, 0xa5, 0x62, 0x5a, 0xca, 0xa6, + 0xae, 0x5d, 0x9f, 0x49, 0xb0, 0xf4, 0x0f, 0x57, 0xd1, 0x49, 0x38, 0xd4, 0x8a, 0xb7, 0xb0, 0x3c, + 0x9f, 0x8e, 0x64, 0x47, 0xae, 0x5d, 0x9f, 0x49, 0xba, 0x79, 0x22, 0x92, 0x01, 0xf9, 0x31, 0x39, + 0xbf, 0x68, 0x16, 0xae, 0x5d, 0x9f, 0x19, 0x64, 0x0a, 0xcc, 0xc6, 0x3e, 0xf8, 0x99, 0xa9, 0x81, + 0x5b, 0x7e, 0xf9, 0xfc, 0x4f, 0x87, 0x3a, 0x6e, 0xb4, 0xd7, 0xb0, 0x8e, 0x6d, 0xcd, 0x3e, 0xd0, + 0x46, 0x7b, 0x5f, 0x9b, 0xf7, 0xf2, 0xef, 0xc5, 0x21, 0x35, 0xcf, 0x5a, 0x21, 0x03, 0x81, 0xd1, + 0x9b, 0x60, 0xd0, 0xa4, 0x33, 0x97, 0x7b, 0x72, 0xd7, 0xc1, 0xe0, 0xd9, 0xfc, 0xe6, 0x5e, 0x1f, + 0x63, 0xb3, 0x9d, 0xcd, 0xef, 0x8f, 0xb0, 0x6b, 0x6d, 0xde, 0x45, 0xad, 0xd4, 0xbe, 0xb6, 0x98, + 0x58, 0x28, 0xe6, 0xbb, 0x39, 0x61, 0x7e, 0x32, 0xbb, 0x8a, 0xb2, 0x4e, 0x20, 0xec, 0x42, 0xda, + 0xfb, 0x25, 0x38, 0x44, 0xb1, 0xbc, 0xb9, 0x9f, 0x62, 0x8a, 0xf5, 0xc5, 0xa9, 0x4e, 0x5d, 0x58, + 0x54, 0x6d, 0xef, 0x7a, 0x09, 0xbb, 0x42, 0x76, 0x17, 0x9f, 0x7b, 0x8f, 0xfb, 0x1a, 0x0f, 0xb3, + 0x95, 0x95, 0x89, 0x7a, 0x0b, 0xa5, 0x8d, 0xe6, 0x03, 0x77, 0x08, 0x63, 0xfb, 0xdb, 0xdd, 0xf7, + 0xdf, 0x27, 0x7c, 0x0a, 0x86, 0xbd, 0x58, 0x62, 0xf3, 0x7f, 0x35, 0xd3, 0xff, 0xdc, 0xe1, 0x27, + 0x46, 0x1f, 0x90, 0xe0, 0x90, 0x97, 0x40, 0xf8, 0xd9, 0xb2, 0x7f, 0xc9, 0x73, 0xff, 0x3e, 0xd6, + 0x5e, 0x61, 0xe5, 0xb4, 0xe5, 0x2b, 0x2b, 0x93, 0xcd, 0x56, 0x52, 0xb2, 0xea, 0x1b, 0xf1, 0x47, + 0x56, 0x3b, 0x23, 0xbe, 0x3a, 0xd9, 0x7f, 0x68, 0x0e, 0x32, 0x60, 0xff, 0x26, 0xc4, 0x34, 0x2c, + 0x07, 0x57, 0xe9, 0x1e, 0x60, 0x42, 0x71, 0xcb, 0xf2, 0x32, 0xa0, 0xd6, 0xc1, 0x0d, 0xdf, 0x99, + 0xf4, 0x9e, 0xc4, 0xa0, 0x49, 0x88, 0xfb, 0x6f, 0x15, 0xb2, 0x42, 0x2e, 0xf1, 0x41, 0x3e, 0x7d, + 0xde, 0x72, 0x9f, 0xff, 0x17, 0x11, 0x38, 0xe5, 0x3f, 0x91, 0x7a, 0xa1, 0x89, 0xad, 0x3d, 0xd7, + 0x45, 0x4d, 0xb5, 0xa6, 0xe9, 0xfe, 0x87, 0x17, 0x47, 0xfd, 0x13, 0x3e, 0xc5, 0x15, 0x7a, 0x92, + 0x75, 0x18, 0x5e, 0x55, 0x6b, 0x58, 0xc1, 0x2f, 0x34, 0xb1, 0xed, 0xb4, 0xb9, 0xd7, 0x7e, 0x18, + 0x06, 0x8d, 0xad, 0x2d, 0x71, 0x8a, 0x1e, 0x53, 0x78, 0x89, 0x74, 0xb9, 0xae, 0x35, 0x34, 0x76, + 0x01, 0x2d, 0xa6, 0xb0, 0x02, 0x9a, 0x86, 0xe1, 0x8a, 0xd1, 0xd4, 0xb9, 0xc7, 0x65, 0x62, 0xe2, + 0xeb, 0x2e, 0x4d, 0x9d, 0x79, 0x9c, 0xfc, 0x24, 0xa4, 0x58, 0x7b, 0x7c, 0xc6, 0x3d, 0x0a, 0x09, + 0x7a, 0x83, 0xcb, 0x6b, 0x75, 0x88, 0x94, 0x2f, 0xb1, 0x3b, 0xf0, 0x8c, 0x0b, 0x6b, 0x98, 0x15, + 0x0a, 0x85, 0x8e, 0xaa, 0x3c, 0xd9, 0x3b, 0x34, 0x30, 0x45, 0xb9, 0x6a, 0xfc, 0xad, 0x38, 0x1c, + 0xe2, 0x87, 0x82, 0xaa, 0xa9, 0x9d, 0xde, 0x76, 0x1c, 0xf1, 0x26, 0x03, 0x78, 0x76, 0xad, 0x9a, + 0x9a, 0xbc, 0x07, 0xb1, 0x8b, 0x8e, 0x63, 0xa2, 0x53, 0x10, 0xb7, 0x9a, 0x75, 0x2c, 0x36, 0x99, + 0xdc, 0x63, 0x00, 0xd5, 0xd4, 0x66, 0x09, 0x82, 0xd2, 0xac, 0x63, 0x85, 0xa1, 0xa0, 0x12, 0x4c, + 0x6f, 0x35, 0xeb, 0xf5, 0xbd, 0x72, 0x15, 0xd3, 0x7f, 0xc3, 0xe5, 0xfe, 0x23, 0x0b, 0xbc, 0x6b, + 0xaa, 0xe2, 0x73, 0x98, 0x44, 0x37, 0xc7, 0x29, 0x5a, 0x91, 0x62, 0x89, 0x7f, 0x62, 0x51, 0x12, + 0x38, 0xf2, 0x1f, 0x44, 0x20, 0x21, 0x58, 0xd3, 0x4b, 0xe9, 0xb8, 0x8e, 0x2b, 0x8e, 0x21, 0x0e, + 0x69, 0xdc, 0x32, 0x42, 0x10, 0xad, 0xf1, 0x21, 0x4a, 0x5e, 0x1c, 0x50, 0x48, 0x81, 0xc0, 0xdc, + 0xa7, 0x02, 0x04, 0x66, 0x36, 0xc9, 0xa8, 0xc5, 0x4c, 0x43, 0xac, 0x06, 0x2f, 0x0e, 0x28, 0xb4, + 0x84, 0x32, 0x30, 0x48, 0x3c, 0xc3, 0x61, 0xdf, 0x18, 0x25, 0x70, 0x5e, 0x46, 0x87, 0x21, 0x6e, + 0xaa, 0x4e, 0x85, 0xdd, 0xe2, 0x23, 0x15, 0xac, 0x88, 0x1e, 0x83, 0x41, 0xf6, 0xda, 0x3b, 0xfc, + 0x3f, 0x6e, 0x88, 0x32, 0xd8, 0x67, 0xf5, 0x88, 0xdc, 0xab, 0xaa, 0xe3, 0x60, 0x4b, 0x27, 0x0c, + 0x19, 0x3a, 0x42, 0x10, 0xdb, 0x34, 0xaa, 0x7b, 0xfc, 0xff, 0xee, 0xd0, 0xdf, 0xfc, 0x1f, 0x7d, + 0x50, 0x7b, 0x28, 0xd3, 0x4a, 0xf6, 0xef, 0xc6, 0x52, 0x02, 0x58, 0x20, 0x48, 0x25, 0x98, 0x50, + 0xab, 0x55, 0x8d, 0xfd, 0x0b, 0x9c, 0xf2, 0xa6, 0x46, 0x23, 0x84, 0x4d, 0xff, 0x99, 0x5c, 0xa7, + 0xb1, 0x40, 0x1e, 0x41, 0x81, 0xe3, 0x17, 0x92, 0x30, 0x64, 0x32, 0xa1, 0xe4, 0xf3, 0x30, 0xde, + 0x22, 0x29, 0x91, 0x6f, 0x47, 0xd3, 0xab, 0xe2, 0xfd, 0x04, 0xf9, 0x4d, 0x60, 0xf4, 0x43, 0x98, + 0xec, 0xf8, 0x8b, 0xfe, 0x2e, 0xbc, 0xb7, 0xf3, 0x33, 0x9b, 0x51, 0xdf, 0x33, 0x1b, 0xd5, 0xd4, + 0x0a, 0x49, 0xca, 0x9f, 0x3f, 0xae, 0xc9, 0xb7, 0x3e, 0xae, 0xa9, 0x61, 0x5d, 0xcc, 0xbe, 0xa4, + 0x4a, 0x35, 0x35, 0x9b, 0x9a, 0xa3, 0xf7, 0x61, 0x4e, 0xfb, 0xbc, 0xef, 0x37, 0x7d, 0x6b, 0x13, + 0x9b, 0xcf, 0xaf, 0x2e, 0xb8, 0x76, 0xfc, 0xb5, 0x08, 0x1c, 0xf7, 0xd9, 0xb1, 0x0f, 0xb9, 0xd5, + 0x9c, 0xb3, 0xed, 0x2d, 0xbe, 0x8f, 0x37, 0xcf, 0x97, 0x20, 0x46, 0xf0, 0x51, 0x8f, 0x7f, 0xc3, + 0x91, 0xf9, 0xc2, 0x37, 0xff, 0xa9, 0x1c, 0x3c, 0x28, 0x0b, 0x8c, 0x0a, 0x65, 0x52, 0xf8, 0x40, + 0xff, 0xfa, 0x4b, 0x7b, 0xdf, 0x24, 0xb5, 0x6f, 0x9d, 0x1a, 0xc3, 0x3a, 0xfc, 0xde, 0xd9, 0x8e, + 0x6f, 0x62, 0x59, 0xc4, 0xec, 0x9e, 0x44, 0xed, 0x23, 0x1c, 0x77, 0x7a, 0x72, 0xd0, 0x6d, 0x04, + 0xfb, 0x4c, 0xc7, 0x76, 0xe1, 0xf0, 0xd3, 0xa4, 0x6d, 0x6f, 0x65, 0x2e, 0x02, 0xfb, 0x61, 0xf7, + 0x00, 0x51, 0xe2, 0xff, 0xcb, 0x4f, 0x1c, 0x0e, 0x82, 0x27, 0x1f, 0x5f, 0x20, 0xde, 0x33, 0xdb, + 0x71, 0xbe, 0x98, 0xf5, 0x4d, 0x16, 0x8a, 0x8f, 0x52, 0xfe, 0x35, 0x09, 0x8e, 0xb4, 0x34, 0xcd, + 0x63, 0xfc, 0x7c, 0x9b, 0xd7, 0x11, 0x07, 0xca, 0x6c, 0xe6, 0xdb, 0x08, 0x7b, 0x6f, 0x4f, 0x61, + 0x99, 0x14, 0x01, 0x69, 0xdf, 0x02, 0x87, 0x82, 0xc2, 0x0a, 0x35, 0xdd, 0x0d, 0xa3, 0xc1, 0x4d, + 0x68, 0xae, 0xae, 0x91, 0xc0, 0x36, 0xb4, 0x5c, 0x0e, 0xeb, 0xd9, 0xed, 0x6b, 0x09, 0x92, 0x2e, + 0x2a, 0x4f, 0x81, 0xfb, 0xee, 0xaa, 0x47, 0x29, 0x7f, 0x44, 0x82, 0x99, 0x60, 0x0b, 0xbe, 0x64, + 0x68, 0x7f, 0xc2, 0xde, 0xb2, 0x21, 0x7e, 0x4d, 0x82, 0x3b, 0xba, 0xc8, 0xc4, 0x15, 0xf0, 0x22, + 0x4c, 0xfa, 0x76, 0x02, 0x44, 0x08, 0x17, 0xc3, 0x7e, 0xaa, 0x77, 0x1a, 0xea, 0x2e, 0x7c, 0x8f, + 0x11, 0xa5, 0x7c, 0xee, 0x3b, 0xd3, 0x13, 0xad, 0x75, 0xb6, 0x32, 0xd1, 0xba, 0x7a, 0xbf, 0x85, + 0xf6, 0xf1, 0xb2, 0x04, 0xf7, 0x05, 0xbb, 0xda, 0x26, 0x9f, 0x7d, 0xa3, 0xc6, 0xe1, 0x3f, 0x48, + 0x70, 0xaa, 0x1f, 0xe1, 0xf8, 0x80, 0x6c, 0xc2, 0x84, 0x97, 0x69, 0x87, 0xc7, 0x63, 0x5f, 0xf9, + 0x3b, 0xb3, 0x52, 0xe4, 0x72, 0xbb, 0x0d, 0x8a, 0x37, 0xb9, 0x63, 0xf9, 0x87, 0xdc, 0x55, 0x72, + 0x70, 0x03, 0x59, 0x28, 0x39, 0xb0, 0x85, 0xdc, 0x66, 0x2c, 0x22, 0x6d, 0xc6, 0xc2, 0x4b, 0xcd, + 0xe5, 0x2b, 0x3c, 0x6e, 0xb5, 0xd9, 0x83, 0x7b, 0x3b, 0x4c, 0xb4, 0x31, 0x65, 0xee, 0xd5, 0xfb, + 0xb0, 0x64, 0x05, 0xb5, 0x1a, 0xab, 0xbc, 0x07, 0xd3, 0xb4, 0xdd, 0x36, 0x8a, 0xbe, 0xdd, 0x5d, + 0x6e, 0xf0, 0xd8, 0xd2, 0xb6, 0x69, 0xde, 0xf7, 0x05, 0x18, 0x64, 0xe3, 0xcc, 0xbb, 0x7b, 0x00, + 0x43, 0xe1, 0x0c, 0xe4, 0x4f, 0x88, 0x58, 0x56, 0x14, 0x62, 0xb7, 0xf7, 0xa1, 0x7e, 0xfa, 0x7a, + 0x8b, 0x7c, 0xc8, 0xa7, 0x8c, 0x6f, 0x8b, 0xa8, 0xd6, 0x5e, 0x3a, 0xae, 0x8e, 0xca, 0x2d, 0x8b, + 0x6a, 0x4c, 0x37, 0xb7, 0x37, 0x7c, 0xfd, 0x8a, 0x08, 0x5f, 0x6e, 0x9f, 0x7a, 0x84, 0xaf, 0x37, + 0x46, 0xf5, 0x6e, 0x20, 0xeb, 0x21, 0xe6, 0x9f, 0xc7, 0x40, 0xf6, 0x23, 0x09, 0x8e, 0xd2, 0xbe, + 0xf9, 0x37, 0x22, 0xf6, 0xab, 0xf2, 0x07, 0x00, 0xd9, 0x56, 0xa5, 0xdc, 0xd6, 0xbb, 0xd3, 0xb6, + 0x55, 0xb9, 0x1c, 0x98, 0x5f, 0x1e, 0x00, 0x54, 0x0d, 0x6c, 0x37, 0x51, 0x6c, 0x76, 0x31, 0x2f, + 0x5d, 0xf5, 0xed, 0x66, 0xb4, 0x19, 0xce, 0xd8, 0x2d, 0x18, 0xce, 0x6f, 0x49, 0x90, 0x6d, 0xd7, + 0x65, 0x3e, 0x7c, 0x1a, 0x1c, 0x0e, 0x1c, 0x12, 0x84, 0x47, 0xf0, 0x81, 0x7e, 0xb6, 0x72, 0x42, + 0x6e, 0x74, 0xc8, 0xc2, 0xb7, 0x3b, 0x0f, 0x98, 0x0e, 0x5a, 0x68, 0x6b, 0x66, 0xfd, 0x86, 0xb9, + 0xcf, 0x97, 0x5b, 0xe2, 0xea, 0x9f, 0x8b, 0xdc, 0x7b, 0x17, 0xa6, 0x3a, 0x48, 0x7d, 0xbb, 0xe7, + 0xbd, 0xed, 0x8e, 0x83, 0x79, 0xab, 0xd3, 0xf7, 0x47, 0xb9, 0x27, 0x04, 0x2f, 0x7d, 0xfb, 0xd6, + 0x62, 0xed, 0x5e, 0x8d, 0xc9, 0x6f, 0x83, 0x63, 0x6d, 0xa9, 0xb8, 0x6c, 0x39, 0x88, 0x6d, 0x6b, + 0xb6, 0xc3, 0xc5, 0xba, 0xa7, 0x93, 0x58, 0x21, 0x6a, 0x4a, 0x23, 0x23, 0x48, 0x53, 0xd6, 0xab, + 0x86, 0x51, 0xe7, 0x62, 0xc8, 0x97, 0x60, 0xdc, 0x07, 0xe3, 0x8d, 0x9c, 0x83, 0x98, 0x69, 0xf0, + 0x2f, 0x22, 0x0c, 0x9f, 0x39, 0xde, 0x71, 0xf7, 0xde, 0x30, 0xea, 0xbc, 0xdb, 0x14, 0x5f, 0x9e, + 0x04, 0xc4, 0x98, 0xd1, 0x8d, 0x7c, 0xd1, 0xc4, 0x1a, 0x4c, 0x04, 0xa0, 0xbc, 0x91, 0xd7, 0x75, + 0x48, 0x70, 0xe6, 0x07, 0x87, 0x20, 0x4e, 0xb9, 0xa2, 0x8f, 0x4b, 0x81, 0x4f, 0x16, 0xcd, 0x76, + 0x62, 0xd3, 0x7e, 0x4d, 0x9c, 0x3d, 0xdd, 0x37, 0x3e, 0xcf, 0xd9, 0x4e, 0xbd, 0xf7, 0xdf, 0x7e, + 0xef, 0xa3, 0x91, 0xbb, 0x90, 0x7c, 0xba, 0xc3, 0x6a, 0xdc, 0xe7, 0x2f, 0x9f, 0x0d, 0x3c, 0xb7, + 0x7f, 0xb0, 0xbf, 0xa6, 0x84, 0x64, 0xb3, 0xfd, 0xa2, 0x73, 0xc1, 0xce, 0x53, 0xc1, 0xce, 0xa2, + 0x47, 0x7a, 0x0b, 0x76, 0xfa, 0x9d, 0x41, 0xa7, 0x79, 0x37, 0xfa, 0x3d, 0x09, 0x26, 0xdb, 0x2d, + 0xe9, 0xd0, 0xe3, 0xfd, 0x49, 0xd1, 0x9a, 0x52, 0x64, 0x9f, 0x38, 0x00, 0x25, 0xef, 0xca, 0x3c, + 0xed, 0x4a, 0x1e, 0x3d, 0x79, 0x80, 0xae, 0x9c, 0xf6, 0xef, 0xef, 0xff, 0x2f, 0x09, 0x4e, 0x74, + 0x5d, 0x21, 0xa1, 0x7c, 0x7f, 0x52, 0x76, 0xc9, 0x9d, 0xb2, 0x85, 0xd7, 0xc3, 0x82, 0xf7, 0xf8, + 0x69, 0xda, 0xe3, 0x4b, 0x68, 0xe1, 0x20, 0x3d, 0x6e, 0x7b, 0x88, 0x82, 0x7e, 0x3b, 0x78, 0x99, + 0xb1, 0xbb, 0x39, 0xb5, 0x2c, 0x3c, 0x7a, 0x38, 0x46, 0x6b, 0x52, 0x2b, 0x3f, 0x4b, 0xbb, 0xa0, + 0xa0, 0xd5, 0xd7, 0x39, 0x68, 0xa7, 0xdf, 0x19, 0x0c, 0xfc, 0xef, 0x46, 0xff, 0x53, 0x6a, 0x7f, + 0x37, 0xf1, 0xb1, 0xae, 0x22, 0x76, 0x5e, 0x54, 0x65, 0x1f, 0xdf, 0x3f, 0x21, 0xef, 0x64, 0x83, + 0x76, 0xb2, 0x86, 0xf0, 0xad, 0xee, 0x64, 0xdb, 0x41, 0x44, 0xdf, 0x90, 0x60, 0xb2, 0xdd, 0x9a, + 0xa4, 0x87, 0x5b, 0x76, 0x59, 0x64, 0xf5, 0x70, 0xcb, 0x6e, 0x0b, 0x20, 0xf9, 0x4d, 0xb4, 0xf3, + 0xe7, 0xd0, 0xa3, 0x9d, 0x3a, 0xdf, 0x75, 0x14, 0x89, 0x2f, 0x76, 0x4d, 0xf2, 0x7b, 0xf8, 0x62, + 0x3f, 0xeb, 0x98, 0x1e, 0xbe, 0xd8, 0xd7, 0x1a, 0xa3, 0xb7, 0x2f, 0xba, 0x3d, 0xeb, 0x73, 0x18, + 0x6d, 0xf4, 0x35, 0x09, 0x46, 0x02, 0x19, 0x31, 0x7a, 0xb8, 0xab, 0xa0, 0xed, 0x16, 0x0c, 0xd9, + 0x33, 0xfb, 0x21, 0xe1, 0x7d, 0x59, 0xa0, 0x7d, 0x99, 0x43, 0xf9, 0x83, 0xf4, 0x25, 0x78, 0x56, + 0xfa, 0x2d, 0x09, 0x26, 0xda, 0x64, 0x99, 0x3d, 0xbc, 0xb0, 0x73, 0xd2, 0x9c, 0x7d, 0x7c, 0xff, + 0x84, 0xbc, 0x57, 0x17, 0x68, 0xaf, 0xde, 0x8a, 0xde, 0x72, 0x90, 0x5e, 0xf9, 0xe6, 0xe7, 0x1b, + 0xde, 0xbd, 0x2b, 0x5f, 0x3b, 0xe8, 0xdc, 0x3e, 0x05, 0x13, 0x1d, 0x7a, 0x6c, 0xdf, 0x74, 0xbc, + 0x3f, 0xcf, 0xd0, 0xfe, 0x3c, 0x8d, 0x56, 0x5e, 0x5f, 0x7f, 0x5a, 0xa7, 0xf5, 0x2f, 0xb5, 0x3e, + 0x3a, 0xec, 0x6e, 0x45, 0x6d, 0x93, 0xd5, 0xec, 0x23, 0xfb, 0xa2, 0xe1, 0x9d, 0x7a, 0x9c, 0x76, + 0xea, 0x0c, 0x7a, 0xa8, 0x53, 0xa7, 0x7c, 0xf7, 0xf9, 0x34, 0x7d, 0xcb, 0x38, 0xfd, 0x4e, 0x96, + 0x02, 0xbf, 0x1b, 0xbd, 0x47, 0x5c, 0x6c, 0x3a, 0xd9, 0xb5, 0x5d, 0x5f, 0x1e, 0x9b, 0xbd, 0xaf, + 0x0f, 0x4c, 0x2e, 0xd7, 0x5d, 0x54, 0xae, 0x29, 0x74, 0xbc, 0x93, 0x5c, 0x24, 0x97, 0x45, 0x1f, + 0x92, 0xdc, 0xeb, 0x97, 0xa7, 0xba, 0xf3, 0xf6, 0x27, 0xbb, 0xd9, 0xfb, 0xfb, 0xc2, 0xe5, 0x92, + 0xdc, 0x43, 0x25, 0x99, 0x41, 0x53, 0x1d, 0x25, 0x61, 0xa9, 0xef, 0xad, 0xbe, 0x39, 0x70, 0xed, + 0x08, 0x4c, 0x77, 0x68, 0xd1, 0xd9, 0xed, 0x71, 0xc6, 0xd5, 0xe5, 0xed, 0x6d, 0xcf, 0xb7, 0xb5, + 0xb7, 0xfa, 0x9b, 0xb1, 0x7d, 0x1e, 0x88, 0xfd, 0x4e, 0x0c, 0xd0, 0x92, 0x5d, 0x9b, 0xb3, 0x30, + 0xfb, 0xff, 0x95, 0xdc, 0xcb, 0x43, 0x8f, 0xca, 0xa4, 0xd7, 0xf5, 0xa8, 0x6c, 0x29, 0xf0, 0x4c, + 0x2b, 0xb2, 0xbf, 0xa7, 0xa0, 0x7d, 0xbf, 0xd5, 0x8a, 0xfe, 0x54, 0xde, 0x6a, 0xb5, 0xbf, 0xca, + 0x1d, 0xbb, 0x75, 0x6f, 0x3e, 0xe2, 0x07, 0x7d, 0xf7, 0xc2, 0x9f, 0x60, 0x0e, 0x76, 0x79, 0x82, + 0x99, 0xe9, 0xf8, 0xce, 0x92, 0x53, 0xa3, 0xb3, 0xe2, 0x0b, 0xaa, 0x43, 0xfd, 0xdd, 0x84, 0xe5, + 0x9f, 0x58, 0xf5, 0xb6, 0x10, 0x8e, 0x43, 0xb6, 0xd5, 0x9c, 0x5c, 0xa7, 0xfe, 0x68, 0x14, 0xd2, + 0x4b, 0x76, 0xad, 0x54, 0xd5, 0x9c, 0xdb, 0x64, 0x6b, 0x4f, 0x76, 0x7e, 0x47, 0x83, 0x6e, 0xde, + 0x98, 0x1e, 0x65, 0x3a, 0xed, 0xa2, 0xc9, 0x06, 0x8c, 0x85, 0x5e, 0x2f, 0x73, 0xcb, 0x2a, 0x1e, + 0xe4, 0x11, 0x75, 0x88, 0x95, 0x4c, 0x9f, 0x3d, 0xf8, 0xec, 0x1b, 0xed, 0xb6, 0x37, 0x66, 0x66, + 0x50, 0x17, 0x6f, 0xe7, 0xa3, 0x43, 0x6f, 0xcc, 0xb2, 0x90, 0x09, 0x0f, 0x8a, 0x3b, 0x62, 0xdf, + 0x97, 0x60, 0x78, 0xc9, 0x16, 0xa9, 0x20, 0xfe, 0x19, 0x7d, 0xf2, 0xf4, 0x98, 0xfb, 0xf9, 0xf1, + 0x68, 0x7f, 0x76, 0x2b, 0x3e, 0x49, 0xee, 0x29, 0xe1, 0x10, 0x4c, 0xf8, 0xfa, 0xe9, 0xf6, 0xff, + 0x77, 0x23, 0x34, 0x3e, 0x16, 0x70, 0x4d, 0xd3, 0xdd, 0x2c, 0x12, 0xff, 0x45, 0x7d, 0xd0, 0xe1, + 0xe9, 0x39, 0x76, 0x50, 0x3d, 0xef, 0xd0, 0x00, 0x11, 0xd2, 0xa7, 0xbb, 0xf1, 0xb5, 0xd4, 0xfa, + 0xdc, 0x48, 0xda, 0xc7, 0x97, 0x7c, 0x42, 0x8f, 0x8a, 0xe4, 0xd7, 0x24, 0x18, 0x59, 0xb2, 0x6b, + 0x1b, 0x7a, 0xf5, 0xff, 0x79, 0xfb, 0xdd, 0x82, 0x43, 0x81, 0x9e, 0xde, 0x26, 0x95, 0x9e, 0x79, + 0x39, 0x06, 0xd1, 0x25, 0xbb, 0x86, 0x5e, 0x80, 0xb1, 0x70, 0xd2, 0xd0, 0x31, 0x17, 0x6c, 0x9d, + 0x11, 0x3a, 0xaf, 0xd7, 0x3a, 0xcf, 0x1e, 0x68, 0x07, 0x46, 0x82, 0x33, 0xc7, 0xc9, 0x2e, 0x4c, + 0x02, 0x98, 0xd9, 0x87, 0xfa, 0xc5, 0x74, 0x1b, 0x7b, 0x07, 0x24, 0xdc, 0xa0, 0x77, 0x67, 0x17, + 0x6a, 0x81, 0xd4, 0x39, 0xbb, 0x6d, 0x13, 0x56, 0x88, 0xf6, 0xc2, 0x21, 0xa5, 0x9b, 0xf6, 0x42, + 0xb8, 0x5d, 0xb5, 0xd7, 0xc9, 0xb5, 0x36, 0x01, 0x7c, 0x7e, 0x70, 0x77, 0x17, 0x0e, 0x1e, 0x5a, + 0xf6, 0xc1, 0xbe, 0xd0, 0xdc, 0x43, 0xa7, 0x5b, 0x9c, 0x8c, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xb5, 0x95, 0x49, 0x9c, 0x35, 0x98, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)