diff --git a/aggregator/aggregator.go b/aggregator/aggregator.go index 6ca7ddd7..b52bc806 100644 --- a/aggregator/aggregator.go +++ b/aggregator/aggregator.go @@ -113,6 +113,7 @@ type Aggregator struct { rollupBroadcaster RollupBroadcasterer httpClient safeclient.SafeClient wsClient safeclient.SafeClient + messageHasher *messages.Hasher clock core.Clock // TODO(edwin): once rpc & rest decouple from aggregator fome it with them @@ -215,6 +216,14 @@ func NewAggregator( return nil, err } + messagingPrefix, err := avsReader.GetMessagingPrefix(ctx) + if err != nil { + logger.Error("Cannot get messaging prefix", "err", err) + return nil, err + } + + messageHasher := messages.NewHasher(messagingPrefix) + operatorPubkeysService := opinfoserv.NewOperatorsInfoServiceInMemory(ctx, avsRegistryChainSubscriber, avsReader, logger) avsRegistryService := avsregistry.NewAvsRegistryServiceChainCaller(avsReader, operatorPubkeysService, logger) taskBlsAggregationService := blsagg.NewBlsAggregatorService(avsRegistryService, logger) @@ -232,6 +241,7 @@ func NewAggregator( rollupBroadcaster: rollupBroadcaster, httpClient: ethHttpClient, wsClient: ethWsClient, + messageHasher: messageHasher, clock: core.SystemClock, taskBlsAggregationService: taskBlsAggregationService, stateRootUpdateBlsAggregationService: stateRootUpdateBlsAggregationService, @@ -523,7 +533,7 @@ func (agg *Aggregator) handleOperatorSetUpdateReachedQuorum(ctx context.Context, func (agg *Aggregator) ProcessSignedCheckpointTaskResponse(signedCheckpointTaskResponse *messages.SignedCheckpointTaskResponse) error { taskIndex := signedCheckpointTaskResponse.TaskResponse.ReferenceTaskIndex - taskResponseDigest, err := signedCheckpointTaskResponse.TaskResponse.Digest() + taskResponseDigest, err := agg.messageHasher.Hash(signedCheckpointTaskResponse.TaskResponse) if err != nil { agg.logger.Error("Failed to get task response digest", "err", err) return TaskResponseDigestError @@ -551,7 +561,7 @@ func (agg *Aggregator) ProcessSignedCheckpointTaskResponse(signedCheckpointTaskR // Rpc request handlers func (agg *Aggregator) ProcessSignedStateRootUpdateMessage(signedStateRootUpdateMessage *messages.SignedStateRootUpdateMessage) error { - messageDigest, err := signedStateRootUpdateMessage.Message.Digest() + messageDigest, err := agg.messageHasher.Hash(signedStateRootUpdateMessage.Message) if err != nil { agg.logger.Error("Failed to get message digest", "err", err) return DigestError @@ -588,7 +598,7 @@ func (agg *Aggregator) ProcessSignedStateRootUpdateMessage(signedStateRootUpdate } func (agg *Aggregator) ProcessSignedOperatorSetUpdateMessage(signedOperatorSetUpdateMessage *messages.SignedOperatorSetUpdateMessage) error { - messageDigest, err := signedOperatorSetUpdateMessage.Message.Digest() + messageDigest, err := agg.messageHasher.Hash(signedOperatorSetUpdateMessage.Message) if err != nil { agg.logger.Error("Failed to get message digest", "err", err) return DigestError diff --git a/aggregator/aggregator_test.go b/aggregator/aggregator_test.go index 78a53814..c7938a7e 100644 --- a/aggregator/aggregator_test.go +++ b/aggregator/aggregator_test.go @@ -55,7 +55,7 @@ func TestSendNewTask(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, mockAvsReaderer, mockAvsWriterer, mockTaskBlsAggService, _, _, _, _, mockClient, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, mockAvsReaderer, mockAvsWriterer, mockTaskBlsAggService, _, _, _, _, mockClient, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) var TASK_INDEX = uint32(0) @@ -92,11 +92,11 @@ func TestHandleStateRootUpdateAggregationReachedQuorum(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, _, _, mockMsgDb, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, _, _, mockMsgDb, _, _, hasher, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) msg := messages.StateRootUpdateMessage{} - msgDigest, err := msg.Digest() + msgDigest, err := hasher.Hash(msg) assert.Nil(t, err) blsAggServiceResp := types.MessageBlsAggregationServiceResponse{ @@ -122,11 +122,11 @@ func TestHandleOperatorSetUpdateAggregationReachedQuorum(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, _, _, mockMsgDb, mockRollupBroadcaster, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, _, _, mockMsgDb, mockRollupBroadcaster, _, hasher, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) msg := messages.OperatorSetUpdateMessage{} - msgDigest, err := msg.Digest() + msgDigest, err := hasher.Hash(msg) assert.Nil(t, err) blsAggServiceResp := types.MessageBlsAggregationServiceResponse{ @@ -158,7 +158,7 @@ func TestExpiredStateRootUpdateMessage(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, _, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, _, _, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.NoError(t, err) nowTimestamp := uint64(6000) @@ -178,7 +178,7 @@ func TestExpiredOperatorSetUpdate(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, _, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, _, _, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.NoError(t, err) nowTimestamp := uint64(8000) @@ -196,7 +196,7 @@ func TestExpiredOperatorSetUpdate(t *testing.T) { func createMockAggregator( mockCtrl *gomock.Controller, operatorPubkeyDict map[eigentypes.OperatorId]types.OperatorInfo, -) (*Aggregator, *chainiomocks.MockAvsReaderer, *chainiomocks.MockAvsWriterer, *blsaggservmock.MockBlsAggregationService, *aggmocks.MockMessageBlsAggregationService, *aggmocks.MockMessageBlsAggregationService, *dbmocks.MockDatabaser, *aggmocks.MockRollupBroadcasterer, *safeclientmocks.MockSafeClient, error) { +) (*Aggregator, *chainiomocks.MockAvsReaderer, *chainiomocks.MockAvsWriterer, *blsaggservmock.MockBlsAggregationService, *aggmocks.MockMessageBlsAggregationService, *aggmocks.MockMessageBlsAggregationService, *dbmocks.MockDatabaser, *aggmocks.MockRollupBroadcasterer, *safeclientmocks.MockSafeClient, *messages.Hasher, error) { logger := sdklogging.NewNoopLogger() mockAvsWriter := chainiomocks.NewMockAvsWriterer(mockCtrl) mockAvsReader := chainiomocks.NewMockAvsReaderer(mockCtrl) @@ -206,6 +206,7 @@ func createMockAggregator( mockMsgDb := dbmocks.NewMockDatabaser(mockCtrl) mockRollupBroadcaster := aggmocks.NewMockRollupBroadcasterer(mockCtrl) mockClient := safeclientmocks.NewMockSafeClient(mockCtrl) + messageHasher := messages.NewHasher([32]byte{}) aggregator := &Aggregator{ logger: logger, @@ -223,7 +224,8 @@ func createMockAggregator( httpClient: mockClient, wsClient: mockClient, aggregatorListener: &SelectiveAggregatorListener{}, + messageHasher: messageHasher, clock: core.SystemClock, } - return aggregator, mockAvsReader, mockAvsWriter, mockTaskBlsAggregationService, mockStateRootUpdateBlsAggregationService, mockOperatorSetUpdateBlsAggregationService, mockMsgDb, mockRollupBroadcaster, mockClient, nil + return aggregator, mockAvsReader, mockAvsWriter, mockTaskBlsAggregationService, mockStateRootUpdateBlsAggregationService, mockOperatorSetUpdateBlsAggregationService, mockMsgDb, mockRollupBroadcaster, mockClient, messageHasher, nil } diff --git a/aggregator/rest_server/server_test.go b/aggregator/rest_server/server_test.go index a512b84a..eab98276 100644 --- a/aggregator/rest_server/server_test.go +++ b/aggregator/rest_server/server_test.go @@ -3,13 +3,14 @@ package rest_server import ( "encoding/json" "fmt" + "net/http" + "net/http/httptest" + "testing" + sdklogging "github.com/Layr-Labs/eigensdk-go/logging" "github.com/NethermindEth/near-sffl/aggregator/mocks" "github.com/NethermindEth/near-sffl/core/types/messages" "github.com/NethermindEth/near-sffl/tests" - "net/http" - "net/http/httptest" - "testing" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" @@ -25,6 +26,8 @@ func TestGetStateRootUpdateAggregation(t *testing.T) { aggregator := mocks.NewMockRestAggregatorer(mockCtrl) restServer := NewRestServer("", aggregator, logger) + hasher := messages.NewHasher([32]byte{}) + msg := messages.StateRootUpdateMessage{ RollupId: 1, BlockHeight: 2, @@ -33,7 +36,7 @@ func TestGetStateRootUpdateAggregation(t *testing.T) { NearDaTransactionId: tests.Keccak256(5), StateRoot: tests.Keccak256(6), } - msgDigest, err := msg.Digest() + msgDigest, err := hasher.Hash(msg) assert.Nil(t, err) response := aggtypes.GetStateRootUpdateAggregationResponse{ @@ -69,11 +72,13 @@ func TestGetOperatorSetUpdateAggregation(t *testing.T) { aggregator := mocks.NewMockRestAggregatorer(mockCtrl) restServer := NewRestServer("", aggregator, logger) + hasher := messages.NewHasher([32]byte{}) + msg := messages.OperatorSetUpdateMessage{ Id: 1, Timestamp: 2, } - digest, err := msg.Digest() + digest, err := hasher.Hash(msg) assert.Nil(t, err) response := aggtypes.GetOperatorSetUpdateAggregationResponse{ @@ -110,12 +115,14 @@ func TestGetCheckpointMessages(t *testing.T) { aggregator := mocks.NewMockRestAggregatorer(mockCtrl) restServer := NewRestServer("", aggregator, logger) + hasher := messages.NewHasher([32]byte{}) + stateRootMessage := messages.StateRootUpdateMessage{ RollupId: 1, BlockHeight: 2, Timestamp: 3, } - stateRootDigest, err := stateRootMessage.Digest() + stateRootDigest, err := hasher.Hash(stateRootMessage) assert.Nil(t, err) stateRootAggregation := messages.MessageBlsAggregation{ MessageDigest: stateRootDigest, @@ -125,7 +132,7 @@ func TestGetCheckpointMessages(t *testing.T) { Id: 1, Timestamp: 2, } - operatorSetDigest, err := operatorSetMesssage.Digest() + operatorSetDigest, err := hasher.Hash(operatorSetMesssage) assert.Nil(t, err) operatorSetAggregation := messages.MessageBlsAggregation{ MessageDigest: operatorSetDigest, diff --git a/aggregator/rpc_server_test.go b/aggregator/rpc_server_test.go index a5e2e4b4..c16f9427 100644 --- a/aggregator/rpc_server_test.go +++ b/aggregator/rpc_server_test.go @@ -29,7 +29,7 @@ func TestProcessSignedCheckpointTaskResponse(t *testing.T) { var FROM_NEAR_BLOCK = uint64(3) var TO_NEAR_BLOCK = uint64(4) - aggregator, _, _, mockBlsAggServ, _, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, mockBlsAggServ, _, _, _, _, _, hasher, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) signedCheckpointTaskResponse, err := createMockSignedCheckpointTaskResponse(MockTask{ @@ -37,9 +37,9 @@ func TestProcessSignedCheckpointTaskResponse(t *testing.T) { BlockNumber: BLOCK_NUMBER, FromTimestamp: FROM_NEAR_BLOCK, ToTimestamp: TO_NEAR_BLOCK, - }, *MOCK_OPERATOR_KEYPAIR) + }, *MOCK_OPERATOR_KEYPAIR, hasher) assert.Nil(t, err) - signedCheckpointTaskResponseDigest, err := signedCheckpointTaskResponse.TaskResponse.Digest() + signedCheckpointTaskResponseDigest, err := hasher.Hash(signedCheckpointTaskResponse.TaskResponse) assert.Nil(t, err) // TODO(samlaf): is this the right way to test writing to external service? @@ -55,7 +55,7 @@ func TestProcessSignedStateRootUpdateMessage(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, mockMessageBlsAggServ, _, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, mockMessageBlsAggServ, _, _, _, _, hasher, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) aggregator.clock = core.Clock{Now: func() time.Time { return time.Unix(10_000, 0) }} @@ -68,9 +68,9 @@ func TestProcessSignedStateRootUpdateMessage(t *testing.T) { StateRoot: keccak256(6), } - signedMessage, err := createMockSignedStateRootUpdateMessage(message, *MOCK_OPERATOR_KEYPAIR) + signedMessage, err := createMockSignedStateRootUpdateMessage(message, *MOCK_OPERATOR_KEYPAIR, hasher) assert.Nil(t, err) - messageDigest, err := signedMessage.Message.Digest() + messageDigest, err := hasher.Hash(signedMessage.Message) assert.Nil(t, err) mockMessageBlsAggServ.EXPECT().ProcessNewSignature(context.Background(), messageDigest, &signedMessage.BlsSignature, signedMessage.OperatorId) @@ -83,7 +83,7 @@ func TestProcessOperatorSetUpdateMessage(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, mockAvsReader, _, _, _, mockMessageBlsAggServ, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, mockAvsReader, _, _, _, mockMessageBlsAggServ, _, _, _, hasher, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) aggregator.clock = core.Clock{Now: func() time.Time { return time.Unix(10_000, 0) }} @@ -95,9 +95,9 @@ func TestProcessOperatorSetUpdateMessage(t *testing.T) { }, } - signedMessage, err := createMockSignedOperatorSetUpdateMessage(message, *MOCK_OPERATOR_KEYPAIR) + signedMessage, err := createMockSignedOperatorSetUpdateMessage(message, *MOCK_OPERATOR_KEYPAIR, hasher) assert.Nil(t, err) - messageDigest, err := signedMessage.Message.Digest() + messageDigest, err := hasher.Hash(signedMessage.Message) assert.Nil(t, err) mockAvsReader.EXPECT().GetOperatorSetUpdateBlock(context.Background(), uint64(1)).Return(uint32(10), nil) @@ -113,7 +113,7 @@ func TestGetAggregatedCheckpointMessages(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - aggregator, _, _, _, _, _, mockDb, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) + aggregator, _, _, _, _, _, mockDb, _, _, _, err := createMockAggregator(mockCtrl, MOCK_OPERATOR_PUBKEY_DICT) assert.Nil(t, err) var checkpointMessages messages.CheckpointMessages @@ -131,13 +131,13 @@ func keccak256(num uint64) [32]byte { return hash } -func createMockSignedCheckpointTaskResponse(mockTask MockTask, keypair bls.KeyPair) (*messages.SignedCheckpointTaskResponse, error) { +func createMockSignedCheckpointTaskResponse(mockTask MockTask, keypair bls.KeyPair, messageHasher *messages.Hasher) (*messages.SignedCheckpointTaskResponse, error) { taskResponse := &messages.CheckpointTaskResponse{ ReferenceTaskIndex: mockTask.TaskNum, StateRootUpdatesRoot: keccak256(mockTask.FromTimestamp), OperatorSetUpdatesRoot: keccak256(mockTask.ToTimestamp), } - taskResponseHash, err := taskResponse.Digest() + taskResponseHash, err := messageHasher.Hash(taskResponse) if err != nil { return nil, err } @@ -150,8 +150,8 @@ func createMockSignedCheckpointTaskResponse(mockTask MockTask, keypair bls.KeyPa return signedCheckpointTaskResponse, nil } -func createMockSignedStateRootUpdateMessage(mockMessage messages.StateRootUpdateMessage, keypair bls.KeyPair) (*messages.SignedStateRootUpdateMessage, error) { - messageDigest, err := mockMessage.Digest() +func createMockSignedStateRootUpdateMessage(mockMessage messages.StateRootUpdateMessage, keypair bls.KeyPair, messageHasher *messages.Hasher) (*messages.SignedStateRootUpdateMessage, error) { + messageDigest, err := messageHasher.Hash(mockMessage) if err != nil { return nil, err } @@ -164,8 +164,8 @@ func createMockSignedStateRootUpdateMessage(mockMessage messages.StateRootUpdate return signedStateRootUpdateMessage, nil } -func createMockSignedOperatorSetUpdateMessage(mockMessage messages.OperatorSetUpdateMessage, keypair bls.KeyPair) (*messages.SignedOperatorSetUpdateMessage, error) { - messageDigest, err := mockMessage.Digest() +func createMockSignedOperatorSetUpdateMessage(mockMessage messages.OperatorSetUpdateMessage, keypair bls.KeyPair, messageHasher *messages.Hasher) (*messages.SignedOperatorSetUpdateMessage, error) { + messageDigest, err := messageHasher.Hash(mockMessage) if err != nil { return nil, err } diff --git a/contracts/bindings/SFFLOperatorSetUpdateRegistry/binding.go b/contracts/bindings/SFFLOperatorSetUpdateRegistry/binding.go index 5b413c8f..6f77ffc5 100644 --- a/contracts/bindings/SFFLOperatorSetUpdateRegistry/binding.go +++ b/contracts/bindings/SFFLOperatorSetUpdateRegistry/binding.go @@ -44,7 +44,7 @@ type RollupOperatorsOperator struct { // ContractSFFLOperatorSetUpdateRegistryMetaData contains all meta data concerning the ContractSFFLOperatorSetUpdateRegistry contract. var ContractSFFLOperatorSetUpdateRegistryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorSetUpdate\",\"inputs\":[{\"name\":\"operatorSetUpdateId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"previousOperatorSet\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"newOperatorSet\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetUpdateCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorWhitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetUpdateIdToBlockNumber\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordOperatorSetUpdate\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setOperatorWhitelisting\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isWhitelisted\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetUpdatedAtBlock\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorWhitelistingUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"isWhitelisted\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", - Bin: "0x60a060405234801561001057600080fd5b50604051610f17380380610f1783398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051610da06101776000396000818160e901528181610175015281816101fb0152818161028101528181610396015261057a0152610da06000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063046a0654146100725780630ca192c71461009c5780632e8da829146100b15780636d14a987146100e457806389a652ce14610123578063af99fa0e1461013e578063bfe1073814610166575b600080fd5b610085610080366004610a21565b61016e565b604051610093929190610aaa565b60405180910390f35b6100af6100aa366004610af0565b610394565b005b6100d46100bf366004610b2e565b60026020526000908152604090205460ff1681565b6040519015158152602001610093565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610093565b6001546040516001600160401b039091168152602001610093565b61015161014c366004610b4b565b610535565b60405163ffffffff9091168152602001610093565b6100af61056f565b60608060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610b64565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027b9190610b64565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190610b64565b90506001600160401b0386161561036b5761036860016103218189610b97565b6001600160401b03168154811061033a5761033a610bbf565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1684848461073a565b94505b61038a6001876001600160401b03168154811061033a5761033a610bbf565b9350505050915091565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610b64565b6001600160a01b0316336001600160a01b0316146104d65760405162461bcd60e51b815260206004820152606660248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c79436f6f7264696e61746f724f776e65723a2063616c6c6572206973206e6f60648201527f7420746865206f776e6572206f6620746865207265676973747279436f6f726460848201526534b730ba37b960d11b60a482015260c4015b60405180910390fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f2b83db0a8941bdf64ef44d95a1a397fdbcb6fd1b93ed421b73d00ddcecf5c793910160405180910390a25050565b6001818154811061054557600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106335760405162461bcd60e51b815260206004820152605d60248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c795265676973747279436f6f7264696e61746f723a2063616c6c657220697360648201527f206e6f742074686520726567697374727920636f6f7264696e61746f72000000608482015260a4016104cd565b6001546001600160401b0381161580159061069557504360016106568184610b97565b6001600160401b03168154811061066f5761066f610bbf565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16145b1561069d5750565b426001600160401b0316816001600160401b03167fc48e61b12810d368042f781cfb732d0abb725377d90b600f78e0cec7dbd0c28d60405160405180910390a3506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008820401805460079092166004026101000a63ffffffff818102199093164390931602919091179055565b604051638902624560e01b815260006004820181905263ffffffff861660248301526060916001600160a01b03851690638902624590604401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190610c1b565b9050600081516001600160401b038111156107d5576107d5610bd5565b60405190808252806020026020018201604052801561082957816020015b60408051608081018252600091810182815260608201839052815260208101919091528152602001906001900390816107f35790505b50905060005b8251811015610a1657600083828151811061084c5761084c610bbf565b602002602001015190506000866001600160a01b03166347b314e8836040518263ffffffff1660e01b815260040161088691815260200190565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610b64565b604051637ff81a8760e01b81526001600160a01b038083166004830152919250600091891690637ff81a8790602401606060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190610cc0565b5060405163fa28c62760e01b81526004810185905260006024820181905263ffffffff8e1660448301529192506001600160a01b038c169063fa28c62790606401602060405180830381865afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b99190610d26565b90506040518060400160405280838152602001826001600160601b03166001600160801b03168152508686815181106109f4576109f4610bbf565b6020026020010181905250505050508080610a0e90610d4f565b91505061082f565b509695505050505050565b600060208284031215610a3357600080fd5b81356001600160401b0381168114610a4a57600080fd5b9392505050565b600081518084526020808501945080840160005b83811015610a9f578151805180518952840151848901528301516001600160801b0316604088015260609096019590820190600101610a65565b509495945050505050565b604081526000610abd6040830185610a51565b8281036020840152610acf8185610a51565b95945050505050565b6001600160a01b0381168114610aed57600080fd5b50565b60008060408385031215610b0357600080fd5b8235610b0e81610ad8565b915060208301358015158114610b2357600080fd5b809150509250929050565b600060208284031215610b4057600080fd5b8135610a4a81610ad8565b600060208284031215610b5d57600080fd5b5035919050565b600060208284031215610b7657600080fd5b8151610a4a81610ad8565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0383811690831681811015610bb757610bb7610b81565b039392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610c1357610c13610bd5565b604052919050565b60006020808385031215610c2e57600080fd5b82516001600160401b0380821115610c4557600080fd5b818501915085601f830112610c5957600080fd5b815181811115610c6b57610c6b610bd5565b8060051b9150610c7c848301610beb565b8181529183018401918481019088841115610c9657600080fd5b938501935b83851015610cb457845182529385019390850190610c9b565b98975050505050505050565b6000808284036060811215610cd457600080fd5b6040811215610ce257600080fd5b50604051604081018181106001600160401b0382111715610d0557610d05610bd5565b60409081528451825260208086015190830152939093015192949293505050565b600060208284031215610d3857600080fd5b81516001600160601b0381168114610a4a57600080fd5b6000600019821415610d6357610d63610b81565b506001019056fea2646970667358221220c83f0a5dd73f6b3f404f29c9e8cf82d0c35e2eecbc2a5c48bee1657e98a06e1964736f6c634300080c0033", + Bin: "0x60a060405234801561001057600080fd5b50604051610f17380380610f1783398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051610da06101776000396000818160e901528181610175015281816101fb0152818161028101528181610396015261057a0152610da06000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063046a0654146100725780630ca192c71461009c5780632e8da829146100b15780636d14a987146100e457806389a652ce14610123578063af99fa0e1461013e578063bfe1073814610166575b600080fd5b610085610080366004610a21565b61016e565b604051610093929190610aaa565b60405180910390f35b6100af6100aa366004610af0565b610394565b005b6100d46100bf366004610b2e565b60026020526000908152604090205460ff1681565b6040519015158152602001610093565b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610093565b6001546040516001600160401b039091168152602001610093565b61015161014c366004610b4b565b610535565b60405163ffffffff9091168152602001610093565b6100af61056f565b60608060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610b64565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027b9190610b64565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190610b64565b90506001600160401b0386161561036b5761036860016103218189610b97565b6001600160401b03168154811061033a5761033a610bbf565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1684848461073a565b94505b61038a6001876001600160401b03168154811061033a5761033a610bbf565b9350505050915091565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610b64565b6001600160a01b0316336001600160a01b0316146104d65760405162461bcd60e51b815260206004820152606660248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c79436f6f7264696e61746f724f776e65723a2063616c6c6572206973206e6f60648201527f7420746865206f776e6572206f6620746865207265676973747279436f6f726460848201526534b730ba37b960d11b60a482015260c4015b60405180910390fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f2b83db0a8941bdf64ef44d95a1a397fdbcb6fd1b93ed421b73d00ddcecf5c793910160405180910390a25050565b6001818154811061054557600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106335760405162461bcd60e51b815260206004820152605d60248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c795265676973747279436f6f7264696e61746f723a2063616c6c657220697360648201527f206e6f742074686520726567697374727920636f6f7264696e61746f72000000608482015260a4016104cd565b6001546001600160401b0381161580159061069557504360016106568184610b97565b6001600160401b03168154811061066f5761066f610bbf565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16145b1561069d5750565b426001600160401b0316816001600160401b03167fc48e61b12810d368042f781cfb732d0abb725377d90b600f78e0cec7dbd0c28d60405160405180910390a3506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008820401805460079092166004026101000a63ffffffff818102199093164390931602919091179055565b604051638902624560e01b815260006004820181905263ffffffff861660248301526060916001600160a01b03851690638902624590604401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190610c1b565b9050600081516001600160401b038111156107d5576107d5610bd5565b60405190808252806020026020018201604052801561082957816020015b60408051608081018252600091810182815260608201839052815260208101919091528152602001906001900390816107f35790505b50905060005b8251811015610a1657600083828151811061084c5761084c610bbf565b602002602001015190506000866001600160a01b03166347b314e8836040518263ffffffff1660e01b815260040161088691815260200190565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610b64565b604051637ff81a8760e01b81526001600160a01b038083166004830152919250600091891690637ff81a8790602401606060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190610cc0565b5060405163fa28c62760e01b81526004810185905260006024820181905263ffffffff8e1660448301529192506001600160a01b038c169063fa28c62790606401602060405180830381865afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b99190610d26565b90506040518060400160405280838152602001826001600160601b03166001600160801b03168152508686815181106109f4576109f4610bbf565b6020026020010181905250505050508080610a0e90610d4f565b91505061082f565b509695505050505050565b600060208284031215610a3357600080fd5b81356001600160401b0381168114610a4a57600080fd5b9392505050565b600081518084526020808501945080840160005b83811015610a9f578151805180518952840151848901528301516001600160801b0316604088015260609096019590820190600101610a65565b509495945050505050565b604081526000610abd6040830185610a51565b8281036020840152610acf8185610a51565b95945050505050565b6001600160a01b0381168114610aed57600080fd5b50565b60008060408385031215610b0357600080fd5b8235610b0e81610ad8565b915060208301358015158114610b2357600080fd5b809150509250929050565b600060208284031215610b4057600080fd5b8135610a4a81610ad8565b600060208284031215610b5d57600080fd5b5035919050565b600060208284031215610b7657600080fd5b8151610a4a81610ad8565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0383811690831681811015610bb757610bb7610b81565b039392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610c1357610c13610bd5565b604052919050565b60006020808385031215610c2e57600080fd5b82516001600160401b0380821115610c4557600080fd5b818501915085601f830112610c5957600080fd5b815181811115610c6b57610c6b610bd5565b8060051b9150610c7c848301610beb565b8181529183018401918481019088841115610c9657600080fd5b938501935b83851015610cb457845182529385019390850190610c9b565b98975050505050505050565b6000808284036060811215610cd457600080fd5b6040811215610ce257600080fd5b50604051604081018181106001600160401b0382111715610d0557610d05610bd5565b60409081528451825260208086015190830152939093015192949293505050565b600060208284031215610d3857600080fd5b81516001600160601b0381168114610a4a57600080fd5b6000600019821415610d6357610d63610b81565b506001019056fea2646970667358221220ed3960e6d6612ee6161f2b60fcc879a3740ec41101030cf6ea177f6e8e11ef6b64736f6c634300080c0033", } // ContractSFFLOperatorSetUpdateRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/SFFLRegistryCoordinator/binding.go b/contracts/bindings/SFFLRegistryCoordinator/binding.go index d8da5a69..b663885c 100644 --- a/contracts/bindings/SFFLRegistryCoordinator/binding.go +++ b/contracts/bindings/SFFLRegistryCoordinator/binding.go @@ -90,7 +90,7 @@ type IStakeRegistryStrategyParams struct { // ContractSFFLRegistryCoordinatorMetaData contains all meta data concerning the ContractSFFLRegistryCoordinator contract. var ContractSFFLRegistryCoordinatorMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_serviceManager\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_blsApkRegistry\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"},{\"name\":\"_indexRegistry\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"},{\"name\":\"_operatorSetUpdateRegistry\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBKEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"inputs\":[{\"name\":\"registeringOperatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"churnApprover\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createQuorum\",\"inputs\":[{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejectOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentQuorumBitmap\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorInfo\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromId\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorStatus\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapAtBlockNumberByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapHistoryLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapUpdateByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBitmap\",\"type\":\"uint192\",\"internalType\":\"uint192\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"indexRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam[]\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"_minimumStakes\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[][]\",\"internalType\":\"structIStakeRegistry.StrategyParams[][]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isChurnApproverSaltUsed\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numRegistries\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetUpdateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumUpdateBlockNumber\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperatorWithChurn\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"churnApproverSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registries\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"serviceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setChurnApprover\",\"inputs\":[{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEjector\",\"inputs\":[{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperators\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorsForQuorum\",\"inputs\":[{\"name\":\"operatorsPerQuorum\",\"type\":\"address[][]\",\"internalType\":\"address[][]\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSocket\",\"inputs\":[{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChurnApproverUpdated\",\"inputs\":[{\"name\":\"prevChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EjectorUpdated\",\"inputs\":[{\"name\":\"prevEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetParamsUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSocketUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"socket\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumBlockNumberUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"blocknumber\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101e06040523480156200001257600080fd5b50604051620063dd380380620063dd83398101604081905262000035916200024e565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f7200000000000000000000602080830191825283518085018552600681526576302e302e3160d01b908201529151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b0380861661014052808516610180528084166101605282166101a052848484846200015762000173565b505050506001600160a01b03166101c05250620002ce92505050565b600054610100900460ff1615620001e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000233576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200024b57600080fd5b50565b600080600080600060a086880312156200026757600080fd5b8551620002748162000235565b6020870151909550620002878162000235565b60408701519094506200029a8162000235565b6060870151909350620002ad8162000235565b6080870151909250620002c08162000235565b809150509295509295909350565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051615ff5620003e86000396000818161043a015261171d01526000818161064b0152818161141a01528181611d7001528181612ace015281816134d50152613cd10152600081816105a3015281816113a501528181612a4d01528181612d900152818161345501528181613c280152613e7e01526000818161056901528181610d7d015281816113e301528181612b4a015281816133d701528181613563015281816135e20152613ba80152600081816104ad0152818161331a0152613af001526000612ec901526000612f1801526000612ef301526000612e4c01526000612e7601526000612ea00152615ff56000f3fe608060405234801561001057600080fd5b506004361061029f5760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f31461071c578063e65797ad1461072f578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf14610694578063c391425e146106a7578063ca0de882146106c7578063ca4f2d97146106ee578063d72d8dd614610701578063d75b4c881461070957600080fd5b8063886f119511610120578063886f1195146105f35780638da5cb5b1461060c5780639aa1653d146106145780639b5d177b146106335780639e9923c2146106465780639feab8591461066d57600080fd5b80635df45946146105645780636347c9001461058b578063683048351461059e5780636e3b17db146105c5578063715018a6146105d8578063871ef049146105e057600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104ef5780635865c60c14610502578063595c6a67146105225780635ac86ab71461052a5780635b0b829f146105495780635c975abb1461055c57600080fd5b806328f61b311461045c578063296bb0641461046f57806329d1e0c3146104825780632cdd1e86146104955780633998fdd3146104a85780633c2a7f4c146104cf57600080fd5b806313542a4e1161025d57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c4214610415578063268f06e01461043557600080fd5b8062cf2ab5146102a457806303fd3492146102b957806304ec6351146102ec578063054310e6146103175780630cf4b7671461033757806310d67a2f1461034a575b600080fd5b6102b76102b2366004614a0d565b610820565b005b6102d96102c7366004614a4e565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102ff6102fa366004614a79565b610836565b6040516001600160c01b0390911681526020016102e3565b609d5461032a906001600160a01b031681565b6040516102e39190614ab1565b6102b7610345366004614bac565b610a0d565b6102b7610358366004614c21565b610af5565b6102d961036b366004614c21565b6001600160a01b031660009081526099602052604090205490565b6102b7610394366004614a4e565b610ba8565b6103bc6103a7366004614a4e565b609a6020526000908152604090205460ff1681565b60405190151581526020016102e3565b6103df6103da366004614c3e565b610cd3565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102e3565b6102d9610423366004614c71565b609b6020526000908152604090205481565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b609e5461032a906001600160a01b031681565b61032a61047d366004614a4e565b610d64565b6102b7610490366004614c21565b610df0565b6102b76104a3366004614c21565b610e01565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6104e26104dd366004614c21565b610e12565b6040516102e39190614c8c565b6102b76104fd366004614ce4565b610e91565b610515610510366004614c21565b610eab565b6040516102e39190614d87565b6102b7610f1f565b6103bc610538366004614c71565b6001805460ff9092161b9081161490565b6102b7610557366004614e0c565b610fde565b6001546102d9565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b61032a610599366004614a4e565b61106f565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6102b76105d3366004614e40565b611099565b6102b76110ac565b6102ff6105ee366004614a4e565b6110c0565b60005461032a906201000090046001600160a01b031681565b61032a6110cb565b6096546106219060ff1681565b60405160ff90911681526020016102e3565b6102b7610641366004614f60565b6110e4565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6102d97f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102b76106a2366004615059565b611108565b6106ba6106b5366004615124565b611126565b6040516102e391906151ce565b6102d97f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102b76106fc366004615218565b6111df565b609c546102d9565b6102b76107173660046152fe565b6111f1565b6102b761072a3660046154b1565b611204565b61079e61073d366004614c71565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b6040516102e39190615585565b6102b76107b9366004614c21565b611507565b6102d96107cc3660046155f6565b61157d565b6102b76107df366004614a4e565b6115c4565b6108136107f2366004614c21565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102e391906156ab565b61082861171b565b610832828261178a565b5050565b6000838152609860205260408120805482919084908110610859576108596156b9565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156109465760405162461bcd60e51b81526020600482015260656024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c4015b60405180910390fd5b602081015163ffffffff16158061096c5750806020015163ffffffff168463ffffffff16105b610a015760405162461bcd60e51b81526020600482015260666024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c40161093d565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610a3657610a36614d4f565b14610aa95760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f74207265676973746572656400000000606482015260840161093d565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610aea90849061571c565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061572f565b6001600160a01b0316336001600160a01b031614610b9c5760405162461bcd60e51b815260040161093d9061574c565b610ba581611891565b50565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610bdd903390600401614ab1565b602060405180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190615796565b610c3a5760405162461bcd60e51b815260040161093d906157b8565b60015481811614610cae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b606482015260840161093d565b60018190556040518181523390600080516020615f2083398151915290602001610aea565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610d1057610d106156b9565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061572f565b610df8611997565b610ba5816119f6565b610e09611997565b610ba581611a5f565b6040805180820190915260008082526020820152610d5e610e8c7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610e719291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120611ac8565b611b16565b610e9961171b565b610ea584848484611ba6565b50505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff166002811115610f0557610f05614d4f565b6002811115610f1657610f16614d4f565b90525092915050565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610f54903390600401614ab1565b602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190615796565b610fb15760405162461bcd60e51b815260040161093d906157b8565b60001960018190556040519081523390600080516020615f208339815191529060200160405180910390a2565b610fe6611997565b609654829060ff908116908216106110605760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d4578697374736044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b606482015260840161093d565b61106a8383612130565b505050565b609c818154811061107f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6110a161171b565b61106a8383836121ce565b6110b4611997565b6110be600061228e565b565b6000610d5e826122e0565b60006110df6064546001600160a01b031690565b905090565b6110ec61171b565b6110fd898989898989898989612349565b505050505050505050565b61111061171b565b61111e868686868686612680565b505050505050565b6060600082516001600160401b0381111561114357611143614ac5565b60405190808252806020026020018201604052801561116c578160200160208202803683370190505b50905060005b83518110156111d75761119e85858381518110611191576111916156b9565b6020026020010151612804565b8282815181106111b0576111b06156b9565b63ffffffff90921660209283029190910190910152806111cf81615816565b915050611172565b509392505050565b6111e761171b565b610832828261292e565b6111f9611997565b61106a838383612995565b600054610100900460ff16158080156112245750600054600160ff909116105b8061123e5750303b15801561123e575060005460ff166001145b6112a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161093d565b6000805460ff1916600117905580156112c4576000805461ff0019166101001790555b825184511480156112d6575081518351145b6113405760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b606482015260840161093d565b6113498961228e565b6113538686612bac565b61135c886119f6565b61136587611a5f565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156114b6576114a4858281518110611463576114636156b9565b602002602001015185838151811061147d5761147d6156b9565b6020026020010151858481518110611497576114976156b9565b6020026020010151612995565b806114ae81615816565b915050611445565b5080156110fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b61150f611997565b6001600160a01b0381166115745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093d565b610ba58161228e565b60006115bb7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a86868686604051602001610e71959493929190615831565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061572f565b6001600160a01b0316336001600160a01b03161461166b5760405162461bcd60e51b815260040161093d9061574c565b6001541981196001541916146116e45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b606482015260840161093d565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610aea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bfe107386040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561177657600080fd5b505af1158015610ea5573d6000803e3d6000fd5b600154600290600490811614156117b35760405162461bcd60e51b815260040161093d906158a7565b60005b82811015610ea55760008484838181106117d2576117d26156b9565b90506020020160208101906117e79190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561183257611832614d4f565b600281111561184357611843614d4f565b90525080519091506000611856826122e0565b9050600061186c826001600160c01b0316612c86565b9050611879858583612d52565b5050505050808061188990615816565b9150506117b6565b6001600160a01b03811661191f5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161093d565b7f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6600060029054906101000a90046001600160a01b0316826040516119659291906158da565b60405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336119a06110cb565b6001600160a01b0316146110be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093d565b609d546040517f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c91611a35916001600160a01b039091169084906158da565b60405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546040517f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc991611a9e916001600160a01b039091169084906158da565b60405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d5e611ad5612e3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b604080518082019091526000808252602082015260008080611b46600080516020615f408339815191528661590a565b90505b611b5281612f66565b9093509150600080516020615f40833981519152828309831415611b8c576040805180820190915290815260208101919091529392505050565b600080516020615f40833981519152600182089050611b49565b60015460029060049081161415611bcf5760405162461bcd60e51b815260040161093d906158a7565b6000611c1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050611c2281613067565b611c925760405162461bcd60e51b81526020600482015260476024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a40161093d565b848314611d015760405162461bcd60e51b81526020600482015260436024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a40161093d565b60005b83811015612127576000858583818110611d2057611d206156b9565b919091013560f81c91503690506000898985818110611d4157611d416156b9565b9050602002810190611d53919061591e565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190615967565b63ffffffff168114611e7f5760405162461bcd60e51b81526020600482015260656024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c40161093d565b6000805b828110156120c6576000848483818110611e9f57611e9f6156b9565b9050602002016020810190611eb49190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff166002811115611eff57611eff614d4f565b6002811115611f1057611f10614d4f565b90525080519091506000611f23826122e0565b905060016001600160c01b03821660ff8b161c811614611fa75760405162461bcd60e51b815260206004820152604460248201819052600080516020615ee0833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a40161093d565b856001600160a01b0316846001600160a01b0316116120525760405162461bcd60e51b81526020600482015260676024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c40161093d565b506120b083838f8f8d908e60016120699190615984565b926120769392919061599c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5292505050565b509092506120bf905081615816565b9050611e83565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061212090615816565b9050611d04565b50505050505050565b60ff821660008181526097602090815260409182902084518154928601518487015161ffff908116600160301b0267ffff0000000000001991909216600160201b0265ffffffffffff1990951663ffffffff909316929092179390931716919091179055517f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac906121c2908490615585565b60405180910390a25050565b609e546001600160a01b0316331461224e5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f72000000000000606482015260840161093d565b61106a8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260986020526040812054806122fd5750600092915050565b60008381526098602052604090206123166001836159c6565b81548110612326576123266156b9565b600091825260209091200154600160401b90046001600160c01b03169392505050565b6001805460009190811614156123715760405162461bcd60e51b815260040161093d906158a7565b8389146123f45760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161093d565b60006124003388613549565b905061245f818787808060200260200160405190810160405280939291908181526020016000905b8282101561245457612445604083028601368190038101906159dd565b81526020019060010190612428565b50505050508661367b565b60006124a633838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b905060005b8b811015612671576000609760008f8f858181106124cb576124cb6156b9565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110612538576125386156b9565b602002602001015163ffffffff16111561265e576125d98e8e84818110612561576125616156b9565b9050013560f81c60f81b60f81c84604001518481518110612584576125846156b9565b602002602001015133866020015186815181106125a3576125a36156b9565b60200260200101518d8d888181106125bd576125bd6156b9565b9050604002018036038101906125d391906159dd565b86613d5f565b61265e8989848181106125ee576125ee6156b9565b90506040020160200160208101906126069190614c21565b8f8f85908660016126179190615984565b926126249392919061599c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b508061266981615816565b9150506124ab565b50505050505050505050505050565b6001805460009190811614156126a85760405162461bcd60e51b815260040161093d906158a7565b60006126b43385613549565b905060006126fd33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b51905060005b888110156127f85760008a8a8381811061271f5761271f6156b9565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110612755576127556156b9565b602002602001015163ffffffff1611156127e55760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a40161093d565b50806127f081615816565b915050612703565b50505050505050505050565b600081815260986020526040812054815b8181101561289657600161282982846159c6565b61283391906159c6565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110612866576128666156b9565b60009182526020909120015463ffffffff1611612884575050610d5e565b8061288e81615816565b915050612815565b5060405162461bcd60e51b815260206004820152606c6024820152600080516020615ec083398151915260448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c40161093d565b60018054600290811614156129555760405162461bcd60e51b815260040161093d906158a7565b61106a3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b60965460ff1660c08110612a095760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b606482015260840161093d565b612a148160016159f9565b6096805460ff191660ff9290921691909117905580612a338186612130565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790612a8690849088908890600401615a1e565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b9857600080fd5b505af11580156110fd573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015612bd357506001600160a01b03821615155b612c555760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161093d565b60018190556040518181523390600080516020615f208339815191529060200160405180910390a261083282611891565b6060600080612c9484614034565b61ffff166001600160401b03811115612caf57612caf614ac5565b6040519080825280601f01601f191660200182016040528015612cd9576020820181803683370190505b5090506000805b825182108015612cf1575061010081105b15612d48576001811b935085841615612d38578060f81b838381518110612d1a57612d1a6156b9565b60200101906001600160f81b031916908160001a9053508160010191505b612d4181615816565b9050612ce0565b5090949350505050565b600182602001516002811115612d6a57612d6a614d4f565b14612d7457505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe90612dc990889086908890600401615a97565b6020604051808303816000875af1158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0c9190615abe565b90506001600160c01b03811615612e3857612e3885612e33836001600160c01b0316612c86565b61309a565b5050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612e9857507f000000000000000000000000000000000000000000000000000000000000000046145b15612ec257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615f408339815191526003600080516020615f4083398151915286600080516020615f40833981519152888909090890506000612fdc827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f4083398151915261405f565b91959194509092505050565b600080612ff48461410e565b9050808360ff166001901b116130605760405162461bcd60e51b815260206004820152603f6024820152600080516020615fa083398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161093d565b9392505050565b60965460009081906130819060019060ff1681901b6159c6565b90506130606001600160c01b0384811690831681161490565b6001600160a01b0382166000908152609960205260409020805460018083015460ff1660028111156130ce576130ce614d4f565b1461313b5760405162461bcd60e51b81526020600482015260436024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a40161093d565b60965460009061314f90859060ff16612fe8565b9050600061315c836122e0565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603b6024820152600080516020615f6083398151915260448201527f70657261746f723a206269746d61702063616e6e6f7420626520300000000000606482015260840161093d565b6131d182613067565b61323c5760405162461bcd60e51b81526020600482015260426024820152600080516020615f6083398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a40161093d565b6132536001600160c01b0383811690831681161490565b6132d55760405162461bcd60e51b81526020600482015260596024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527872656420666f72207370656369666965642071756f72756d7360381b608482015260a40161093d565b6001600160c01b03828116198216166132ee8482614277565b6001600160c01b0381166133c05760018501805460ff191660021790556040516351b27a6d60e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a364f4da90613357908a90600401614ab1565b600060405180830381600087803b15801561337157600080fd5b505af1158015613385573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe59061340e908a908a90600401615ae7565b600060405180830381600087803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061348e9087908a90600401615b0b565b600060405180830381600087803b1580156134a857600080fd5b505af11580156134bc573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061350e9087908a90600401615b0b565b600060405180830381600087803b15801561352857600080fd5b505af115801561353c573d6000803e3d6000fd5b5050505050505050505050565b6040516309aa152760e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90613598908690600401614ab1565b602060405180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615b24565b905080610d5e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce58848461361a87610e12565b6040518463ffffffff1660e01b815260040161363893929190615b3d565b6020604051808303816000875af1158015613657573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130609190615b24565b6020808201516000908152609a909152604090205460ff16156137215760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a40161093d565b42816040015110156137b65760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a40161093d565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161106a926001600160a01b03909216916137fe918791879161157d565b8351614437565b61382960405180606001604052806060815260200160608152602001606081525090565b600061387186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050600061387e886122e0565b90506001600160c01b0382166138e65760405162461bcd60e51b81526020600482015260396024820152600080516020615f8083398151915260448201527807261746f723a206269746d61702063616e6e6f74206265203603c1b606482015260840161093d565b6138ef82613067565b613951576040805162461bcd60e51b8152602060048201526024810191909152600080516020615f8083398151915260448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f74206578697374606482015260840161093d565b8082166001600160c01b0316156139f55760405162461bcd60e51b81526020600482015260686024820152600080516020615f8083398151915260448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c40161093d565b6001600160c01b0381811690831617613a0e8982614277565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051613a3e919061571c565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff166002811115613a7857613a78614d4f565b14613b91576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff191690836002811115613ad357613ad3614d4f565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d90613b28908d908990600401615bbc565b600060405180830381600087803b158015613b4257600080fd5b505af1158015613b56573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb2795290613be1908d908c908c90600401615c30565b600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063255047779150613c65908d908d908d908d90600401615c55565b6000604051808303816000875af1158015613c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cac9190810190615ceb565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d90613d09908c908c908c90600401615d4e565b6000604051808303816000875af1158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d509190810190615d68565b84525050509695505050505050565b6020808301516001600160a01b038082166000818152609990945260409093205491929087161415613ddf5760405162461bcd60e51b81526020600482015260356024820152600080516020615f0083398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b606482015260840161093d565b8760ff16846000015160ff1614613e5c5760405162461bcd60e51b81526020600482015260476024820152600080516020615f0083398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a40161093d565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa158015613ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef19190615e01565b9050613efd81856145f1565b6001600160601b0316866001600160601b031611613f905760405162461bcd60e51b81526020600482015260566024820152600080516020615f0083398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a40161093d565b613f9a8885614615565b6001600160601b0316816001600160601b0316106110fd5760405162461bcd60e51b815260206004820152605c6024820152600080516020615f0083398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a40161093d565b6000805b8215610d5e576140496001846159c6565b909216918061405781615e1e565b915050614038565b60008061406a61498d565b6140726149ab565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156140b3576140b5565bfe5b50826141035760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161093d565b505195945050505050565b6000610100825111156141855760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161093d565b815161419357506000919050565b600080836000815181106141a9576141a96156b9565b0160200151600160f89190911c81901b92505b845181101561426e578481815181106141d7576141d76156b9565b0160200151600160f89190911c1b915082821161425a5760405162461bcd60e51b81526020600482015260476024820152600080516020615fa083398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161093d565b9181179161426781615816565b90506141bc565b50909392505050565b6000828152609860205260409020548061431c576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206143356001846159c6565b81548110614345576143456156b9565b600091825260209091200180549091504363ffffffff908116911614156143895780546001600160401b0316600160401b6001600160c01b03851602178155610ea5565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561455157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144779086908690600401615b0b565b602060405180830381865afa158015614494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b89190615e40565b6001600160e01b0319161461106a5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161093d565b826001600160a01b0316614565838361462f565b6001600160a01b03161461106a5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161093d565b60208101516000906127109061460b9061ffff1685615e6a565b6130609190615e99565b60408101516000906127109061460b9061ffff1685615e6a565b600080600061463e858561464b565b915091506111d7816146bb565b6000808251604114156146825760208301516040840151606085015160001a61467687828585614871565b945094505050506146b4565b8251604014156146ac57602083015160408401516146a1868383614954565b9350935050506146b4565b506000905060025b9250929050565b60008160048111156146cf576146cf614d4f565b14156146d85750565b60018160048111156146ec576146ec614d4f565b14156147355760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161093d565b600281600481111561474957614749614d4f565b14156147975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161093d565b60038160048111156147ab576147ab614d4f565b14156148045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161093d565b600481600481111561481857614818614d4f565b1415610ba55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161093d565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561489e575060009050600361494b565b8460ff16601b141580156148b657508460ff16601c14155b156148c7575060009050600461494b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561491b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166149445760006001925092505061494b565b9150600090505b94509492505050565b6000806001600160ff1b0383168161497160ff86901c601b615984565b905061497f87828885614871565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126149db57600080fd5b5081356001600160401b038111156149f257600080fd5b6020830191508360208260051b85010111156146b457600080fd5b60008060208385031215614a2057600080fd5b82356001600160401b03811115614a3657600080fd5b614a42858286016149c9565b90969095509350505050565b600060208284031215614a6057600080fd5b5035919050565b63ffffffff81168114610ba557600080fd5b600080600060608486031215614a8e57600080fd5b833592506020840135614aa081614a67565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614afd57614afd614ac5565b60405290565b604080519081016001600160401b0381118282101715614afd57614afd614ac5565b604051601f8201601f191681016001600160401b0381118282101715614b4d57614b4d614ac5565b604052919050565b60006001600160401b03831115614b6e57614b6e614ac5565b614b81601f8401601f1916602001614b25565b9050828152838383011115614b9557600080fd5b828260208301376000602084830101529392505050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b8201601f81018413614be557600080fd5b614bf484823560208401614b55565b949350505050565b6001600160a01b0381168114610ba557600080fd5b8035614c1c81614bfc565b919050565b600060208284031215614c3357600080fd5b813561306081614bfc565b60008060408385031215614c5157600080fd5b50508035926020909101359150565b803560ff81168114614c1c57600080fd5b600060208284031215614c8357600080fd5b61306082614c60565b815181526020808301519082015260408101610d5e565b60008083601f840112614cb557600080fd5b5081356001600160401b03811115614ccc57600080fd5b6020830191508360208285010111156146b457600080fd5b60008060008060408587031215614cfa57600080fd5b84356001600160401b0380821115614d1157600080fd5b614d1d888389016149c9565b90965094506020870135915080821115614d3657600080fd5b50614d4387828801614ca3565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614d8357634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614da290840182614d65565b5092915050565b803561ffff81168114614c1c57600080fd5b600060608284031215614dcd57600080fd5b614dd5614adb565b90508135614de281614a67565b8152614df060208301614da9565b6020820152614e0160408301614da9565b604082015292915050565b60008060808385031215614e1f57600080fd5b614e2883614c60565b9150614e378460208501614dbb565b90509250929050565b600080600060408486031215614e5557600080fd5b8335614e6081614bfc565b925060208401356001600160401b03811115614e7b57600080fd5b614e8786828701614ca3565b9497909650939450505050565b60006101008284031215614ea757600080fd5b50919050565b60008083601f840112614ebf57600080fd5b5081356001600160401b03811115614ed657600080fd5b6020830191508360208260061b85010111156146b457600080fd5b600060608284031215614f0357600080fd5b614f0b614adb565b905081356001600160401b03811115614f2357600080fd5b8201601f81018413614f3457600080fd5b614f4384823560208401614b55565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f7f57600080fd5b89356001600160401b0380821115614f9657600080fd5b614fa28d838e01614ca3565b909b50995060208c0135915080821115614fbb57600080fd5b614fc78d838e01614ca3565b9099509750879150614fdc8d60408e01614e94565b96506101408c0135915080821115614ff357600080fd5b614fff8d838e01614ead565b90965094506101608c013591508082111561501957600080fd5b6150258d838e01614ef1565b93506101808c013591508082111561503c57600080fd5b506150498c828d01614ef1565b9150509295985092959850929598565b600080600080600080610160878903121561507357600080fd5b86356001600160401b038082111561508a57600080fd5b6150968a838b01614ca3565b909850965060208901359150808211156150af57600080fd5b6150bb8a838b01614ca3565b90965094508491506150d08a60408b01614e94565b93506101408901359150808211156150e757600080fd5b506150f489828a01614ef1565b9150509295509295509295565b60006001600160401b0382111561511a5761511a614ac5565b5060051b60200190565b6000806040838503121561513757600080fd5b823561514281614a67565b91506020838101356001600160401b0381111561515e57600080fd5b8401601f8101861361516f57600080fd5b803561518261517d82615101565b614b25565b81815260059190911b820183019083810190888311156151a157600080fd5b928401925b828410156151bf578335825292840192908401906151a6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561520c57835163ffffffff16835292840192918401916001016151ea565b50909695505050505050565b6000806020838503121561522b57600080fd5b82356001600160401b0381111561524157600080fd5b614a4285828601614ca3565b6001600160601b0381168114610ba557600080fd5b600082601f83011261527357600080fd5b8135602061528361517d83615101565b82815260069290921b840181019181810190868411156152a257600080fd5b8286015b848110156152f357604081890312156152bf5760008081fd5b6152c7614b03565b81356152d281614bfc565b8152818501356152e18161524d565b818601528352918301916040016152a6565b509695505050505050565b600080600060a0848603121561531357600080fd5b61531d8585614dbb565b9250606084013561532d8161524d565b915060808401356001600160401b0381111561534857600080fd5b61535486828701615262565b9150509250925092565b600082601f83011261536f57600080fd5b8135602061537f61517d83615101565b8281526060928302850182019282820191908785111561539e57600080fd5b8387015b858110156153c1576153b48982614dbb565b84529284019281016153a2565b5090979650505050505050565b600082601f8301126153df57600080fd5b813560206153ef61517d83615101565b82815260059290921b8401810191818101908684111561540e57600080fd5b8286015b848110156152f35780356154258161524d565b8352918301918301615412565b600082601f83011261544357600080fd5b8135602061545361517d83615101565b82815260059290921b8401810191818101908684111561547257600080fd5b8286015b848110156152f35780356001600160401b038111156154955760008081fd5b6154a38986838b0101615262565b845250918301918301615476565b600080600080600080600080610100898b0312156154ce57600080fd5b6154d789614c11565b97506154e560208a01614c11565b96506154f360408a01614c11565b955061550160608a01614c11565b94506080890135935060a08901356001600160401b038082111561552457600080fd5b6155308c838d0161535e565b945060c08b013591508082111561554657600080fd5b6155528c838d016153ce565b935060e08b013591508082111561556857600080fd5b506155758b828c01615432565b9150509295985092959890939650565b815163ffffffff16815260208083015161ffff90811691830191909152604092830151169181019190915260600190565b6000604082840312156155c857600080fd5b6155d0614b03565b90506155db82614c60565b815260208201356155eb81614bfc565b602082015292915050565b6000806000806080858703121561560c57600080fd5b843593506020808601356001600160401b0381111561562a57600080fd5b8601601f8101881361563b57600080fd5b803561564961517d82615101565b81815260069190911b8201830190838101908a83111561566857600080fd5b928401925b828410156156915761567f8b856155b6565b8252848201915060408401935061566d565b979a97995050505060408601359560600135949350505050565b60208101610d5e8284614d65565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b818110156156f5576020818501810151868301820152016156d9565b81811115615707576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061306060208301846156cf565b60006020828403121561574157600080fd5b815161306081614bfc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156157a857600080fd5b8151801515811461306057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561582a5761582a615800565b5060010190565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b8181101561588e578551805160ff1684528501516001600160a01b031685840152948401949183019160010161585d565b5050606086019790975250505050608001529392505050565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601260045260246000fd5b600082615919576159196158f4565b500690565b6000808335601e1984360301811261593557600080fd5b8301803591506001600160401b0382111561594f57600080fd5b6020019150600581901b36038213156146b457600080fd5b60006020828403121561597957600080fd5b815161306081614a67565b6000821982111561599757615997615800565b500190565b600080858511156159ac57600080fd5b838611156159b957600080fd5b5050820193919092039150565b6000828210156159d8576159d8615800565b500390565b6000604082840312156159ef57600080fd5b61306083836155b6565b600060ff821660ff84168060ff03821115615a1657615a16615800565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615a8757865180516001600160a01b031684528601518516868401529585019591830191600101615a57565b50909a9950505050505050505050565b60018060a01b03841681528260208201526060604082015260006115bb60608301846156cf565b600060208284031215615ad057600080fd5b81516001600160c01b038116811461306057600080fd5b6001600160a01b0383168152604060208201819052600090614bf4908301846156cf565b828152604060208201526000614bf460408301846156cf565b600060208284031215615b3657600080fd5b5051919050565b6001600160a01b03841681526101608101615b65602083018580358252602090810135910152565b615b7f606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615be660a08401826156cf565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906115bb9083018486615c07565b60018060a01b0385168152836020820152606060408201526000615c7d606083018486615c07565b9695505050505050565b600082601f830112615c9857600080fd5b81516020615ca861517d83615101565b82815260059290921b84018101918181019086841115615cc757600080fd5b8286015b848110156152f3578051615cde8161524d565b8352918301918301615ccb565b60008060408385031215615cfe57600080fd5b82516001600160401b0380821115615d1557600080fd5b615d2186838701615c87565b93506020850151915080821115615d3757600080fd5b50615d4485828601615c87565b9150509250929050565b8381526040602082015260006115bb604083018486615c07565b60006020808385031215615d7b57600080fd5b82516001600160401b03811115615d9157600080fd5b8301601f81018513615da257600080fd5b8051615db061517d82615101565b81815260059190911b82018301908381019087831115615dcf57600080fd5b928401925b82841015615df6578351615de781614a67565b82529284019290840190615dd4565b979650505050505050565b600060208284031215615e1357600080fd5b81516130608161524d565b600061ffff80831681811415615e3657615e36615800565b6001019392505050565b600060208284031215615e5257600080fd5b81516001600160e01b03198116811461306057600080fd5b60006001600160601b0380831681851681830481118215151615615e9057615e90615800565b02949350505050565b60006001600160601b0380841680615eb357615eb36158f4565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e67657451756f72756d4269745265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c6964617465436875ab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724f5265676973747279436f6f7264696e61746f722e5f72656769737465724f70654269746d61705574696c732e6f72646572656442797465734172726179546f42a2646970667358221220c54efdc441b7ab5c292c79c0ba4c4250c55da2675b4df1faf620ffd38a6065c264736f6c634300080c0033", + Bin: "0x6101e06040523480156200001257600080fd5b50604051620063dd380380620063dd83398101604081905262000035916200024e565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f7200000000000000000000602080830191825283518085018552600681526576302e302e3160d01b908201529151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b0380861661014052808516610180528084166101605282166101a052848484846200015762000173565b505050506001600160a01b03166101c05250620002ce92505050565b600054610100900460ff1615620001e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000233576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200024b57600080fd5b50565b600080600080600060a086880312156200026757600080fd5b8551620002748162000235565b6020870151909550620002878162000235565b60408701519094506200029a8162000235565b6060870151909350620002ad8162000235565b6080870151909250620002c08162000235565b809150509295509295909350565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051615ff5620003e86000396000818161043a015261171d01526000818161064b0152818161141a01528181611d7001528181612ace015281816134d50152613cd10152600081816105a3015281816113a501528181612a4d01528181612d900152818161345501528181613c280152613e7e01526000818161056901528181610d7d015281816113e301528181612b4a015281816133d701528181613563015281816135e20152613ba80152600081816104ad0152818161331a0152613af001526000612ec901526000612f1801526000612ef301526000612e4c01526000612e7601526000612ea00152615ff56000f3fe608060405234801561001057600080fd5b506004361061029f5760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f31461071c578063e65797ad1461072f578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf14610694578063c391425e146106a7578063ca0de882146106c7578063ca4f2d97146106ee578063d72d8dd614610701578063d75b4c881461070957600080fd5b8063886f119511610120578063886f1195146105f35780638da5cb5b1461060c5780639aa1653d146106145780639b5d177b146106335780639e9923c2146106465780639feab8591461066d57600080fd5b80635df45946146105645780636347c9001461058b578063683048351461059e5780636e3b17db146105c5578063715018a6146105d8578063871ef049146105e057600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104ef5780635865c60c14610502578063595c6a67146105225780635ac86ab71461052a5780635b0b829f146105495780635c975abb1461055c57600080fd5b806328f61b311461045c578063296bb0641461046f57806329d1e0c3146104825780632cdd1e86146104955780633998fdd3146104a85780633c2a7f4c146104cf57600080fd5b806313542a4e1161025d57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c4214610415578063268f06e01461043557600080fd5b8062cf2ab5146102a457806303fd3492146102b957806304ec6351146102ec578063054310e6146103175780630cf4b7671461033757806310d67a2f1461034a575b600080fd5b6102b76102b2366004614a0d565b610820565b005b6102d96102c7366004614a4e565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102ff6102fa366004614a79565b610836565b6040516001600160c01b0390911681526020016102e3565b609d5461032a906001600160a01b031681565b6040516102e39190614ab1565b6102b7610345366004614bac565b610a0d565b6102b7610358366004614c21565b610af5565b6102d961036b366004614c21565b6001600160a01b031660009081526099602052604090205490565b6102b7610394366004614a4e565b610ba8565b6103bc6103a7366004614a4e565b609a6020526000908152604090205460ff1681565b60405190151581526020016102e3565b6103df6103da366004614c3e565b610cd3565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102e3565b6102d9610423366004614c71565b609b6020526000908152604090205481565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b609e5461032a906001600160a01b031681565b61032a61047d366004614a4e565b610d64565b6102b7610490366004614c21565b610df0565b6102b76104a3366004614c21565b610e01565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6104e26104dd366004614c21565b610e12565b6040516102e39190614c8c565b6102b76104fd366004614ce4565b610e91565b610515610510366004614c21565b610eab565b6040516102e39190614d87565b6102b7610f1f565b6103bc610538366004614c71565b6001805460ff9092161b9081161490565b6102b7610557366004614e0c565b610fde565b6001546102d9565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b61032a610599366004614a4e565b61106f565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6102b76105d3366004614e40565b611099565b6102b76110ac565b6102ff6105ee366004614a4e565b6110c0565b60005461032a906201000090046001600160a01b031681565b61032a6110cb565b6096546106219060ff1681565b60405160ff90911681526020016102e3565b6102b7610641366004614f60565b6110e4565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6102d97f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102b76106a2366004615059565b611108565b6106ba6106b5366004615124565b611126565b6040516102e391906151ce565b6102d97f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102b76106fc366004615218565b6111df565b609c546102d9565b6102b76107173660046152fe565b6111f1565b6102b761072a3660046154b1565b611204565b61079e61073d366004614c71565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b6040516102e39190615585565b6102b76107b9366004614c21565b611507565b6102d96107cc3660046155f6565b61157d565b6102b76107df366004614a4e565b6115c4565b6108136107f2366004614c21565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102e391906156ab565b61082861171b565b610832828261178a565b5050565b6000838152609860205260408120805482919084908110610859576108596156b9565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156109465760405162461bcd60e51b81526020600482015260656024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c4015b60405180910390fd5b602081015163ffffffff16158061096c5750806020015163ffffffff168463ffffffff16105b610a015760405162461bcd60e51b81526020600482015260666024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c40161093d565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610a3657610a36614d4f565b14610aa95760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f74207265676973746572656400000000606482015260840161093d565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610aea90849061571c565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061572f565b6001600160a01b0316336001600160a01b031614610b9c5760405162461bcd60e51b815260040161093d9061574c565b610ba581611891565b50565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610bdd903390600401614ab1565b602060405180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190615796565b610c3a5760405162461bcd60e51b815260040161093d906157b8565b60015481811614610cae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b606482015260840161093d565b60018190556040518181523390600080516020615f2083398151915290602001610aea565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610d1057610d106156b9565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061572f565b610df8611997565b610ba5816119f6565b610e09611997565b610ba581611a5f565b6040805180820190915260008082526020820152610d5e610e8c7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610e719291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120611ac8565b611b16565b610e9961171b565b610ea584848484611ba6565b50505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff166002811115610f0557610f05614d4f565b6002811115610f1657610f16614d4f565b90525092915050565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610f54903390600401614ab1565b602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190615796565b610fb15760405162461bcd60e51b815260040161093d906157b8565b60001960018190556040519081523390600080516020615f208339815191529060200160405180910390a2565b610fe6611997565b609654829060ff908116908216106110605760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d4578697374736044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b606482015260840161093d565b61106a8383612130565b505050565b609c818154811061107f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6110a161171b565b61106a8383836121ce565b6110b4611997565b6110be600061228e565b565b6000610d5e826122e0565b60006110df6064546001600160a01b031690565b905090565b6110ec61171b565b6110fd898989898989898989612349565b505050505050505050565b61111061171b565b61111e868686868686612680565b505050505050565b6060600082516001600160401b0381111561114357611143614ac5565b60405190808252806020026020018201604052801561116c578160200160208202803683370190505b50905060005b83518110156111d75761119e85858381518110611191576111916156b9565b6020026020010151612804565b8282815181106111b0576111b06156b9565b63ffffffff90921660209283029190910190910152806111cf81615816565b915050611172565b509392505050565b6111e761171b565b610832828261292e565b6111f9611997565b61106a838383612995565b600054610100900460ff16158080156112245750600054600160ff909116105b8061123e5750303b15801561123e575060005460ff166001145b6112a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161093d565b6000805460ff1916600117905580156112c4576000805461ff0019166101001790555b825184511480156112d6575081518351145b6113405760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b606482015260840161093d565b6113498961228e565b6113538686612bac565b61135c886119f6565b61136587611a5f565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156114b6576114a4858281518110611463576114636156b9565b602002602001015185838151811061147d5761147d6156b9565b6020026020010151858481518110611497576114976156b9565b6020026020010151612995565b806114ae81615816565b915050611445565b5080156110fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b61150f611997565b6001600160a01b0381166115745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093d565b610ba58161228e565b60006115bb7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a86868686604051602001610e71959493929190615831565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061572f565b6001600160a01b0316336001600160a01b03161461166b5760405162461bcd60e51b815260040161093d9061574c565b6001541981196001541916146116e45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b606482015260840161093d565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610aea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bfe107386040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561177657600080fd5b505af1158015610ea5573d6000803e3d6000fd5b600154600290600490811614156117b35760405162461bcd60e51b815260040161093d906158a7565b60005b82811015610ea55760008484838181106117d2576117d26156b9565b90506020020160208101906117e79190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561183257611832614d4f565b600281111561184357611843614d4f565b90525080519091506000611856826122e0565b9050600061186c826001600160c01b0316612c86565b9050611879858583612d52565b5050505050808061188990615816565b9150506117b6565b6001600160a01b03811661191f5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161093d565b7f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6600060029054906101000a90046001600160a01b0316826040516119659291906158da565b60405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336119a06110cb565b6001600160a01b0316146110be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093d565b609d546040517f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c91611a35916001600160a01b039091169084906158da565b60405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546040517f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc991611a9e916001600160a01b039091169084906158da565b60405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d5e611ad5612e3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b604080518082019091526000808252602082015260008080611b46600080516020615f408339815191528661590a565b90505b611b5281612f66565b9093509150600080516020615f40833981519152828309831415611b8c576040805180820190915290815260208101919091529392505050565b600080516020615f40833981519152600182089050611b49565b60015460029060049081161415611bcf5760405162461bcd60e51b815260040161093d906158a7565b6000611c1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050611c2281613067565b611c925760405162461bcd60e51b81526020600482015260476024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a40161093d565b848314611d015760405162461bcd60e51b81526020600482015260436024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a40161093d565b60005b83811015612127576000858583818110611d2057611d206156b9565b919091013560f81c91503690506000898985818110611d4157611d416156b9565b9050602002810190611d53919061591e565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190615967565b63ffffffff168114611e7f5760405162461bcd60e51b81526020600482015260656024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c40161093d565b6000805b828110156120c6576000848483818110611e9f57611e9f6156b9565b9050602002016020810190611eb49190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff166002811115611eff57611eff614d4f565b6002811115611f1057611f10614d4f565b90525080519091506000611f23826122e0565b905060016001600160c01b03821660ff8b161c811614611fa75760405162461bcd60e51b815260206004820152604460248201819052600080516020615ee0833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a40161093d565b856001600160a01b0316846001600160a01b0316116120525760405162461bcd60e51b81526020600482015260676024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c40161093d565b506120b083838f8f8d908e60016120699190615984565b926120769392919061599c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5292505050565b509092506120bf905081615816565b9050611e83565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061212090615816565b9050611d04565b50505050505050565b60ff821660008181526097602090815260409182902084518154928601518487015161ffff908116600160301b0267ffff0000000000001991909216600160201b0265ffffffffffff1990951663ffffffff909316929092179390931716919091179055517f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac906121c2908490615585565b60405180910390a25050565b609e546001600160a01b0316331461224e5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f72000000000000606482015260840161093d565b61106a8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260986020526040812054806122fd5750600092915050565b60008381526098602052604090206123166001836159c6565b81548110612326576123266156b9565b600091825260209091200154600160401b90046001600160c01b03169392505050565b6001805460009190811614156123715760405162461bcd60e51b815260040161093d906158a7565b8389146123f45760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161093d565b60006124003388613549565b905061245f818787808060200260200160405190810160405280939291908181526020016000905b8282101561245457612445604083028601368190038101906159dd565b81526020019060010190612428565b50505050508661367b565b60006124a633838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b905060005b8b811015612671576000609760008f8f858181106124cb576124cb6156b9565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110612538576125386156b9565b602002602001015163ffffffff16111561265e576125d98e8e84818110612561576125616156b9565b9050013560f81c60f81b60f81c84604001518481518110612584576125846156b9565b602002602001015133866020015186815181106125a3576125a36156b9565b60200260200101518d8d888181106125bd576125bd6156b9565b9050604002018036038101906125d391906159dd565b86613d5f565b61265e8989848181106125ee576125ee6156b9565b90506040020160200160208101906126069190614c21565b8f8f85908660016126179190615984565b926126249392919061599c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b508061266981615816565b9150506124ab565b50505050505050505050505050565b6001805460009190811614156126a85760405162461bcd60e51b815260040161093d906158a7565b60006126b43385613549565b905060006126fd33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b51905060005b888110156127f85760008a8a8381811061271f5761271f6156b9565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110612755576127556156b9565b602002602001015163ffffffff1611156127e55760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a40161093d565b50806127f081615816565b915050612703565b50505050505050505050565b600081815260986020526040812054815b8181101561289657600161282982846159c6565b61283391906159c6565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110612866576128666156b9565b60009182526020909120015463ffffffff1611612884575050610d5e565b8061288e81615816565b915050612815565b5060405162461bcd60e51b815260206004820152606c6024820152600080516020615ec083398151915260448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c40161093d565b60018054600290811614156129555760405162461bcd60e51b815260040161093d906158a7565b61106a3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b60965460ff1660c08110612a095760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b606482015260840161093d565b612a148160016159f9565b6096805460ff191660ff9290921691909117905580612a338186612130565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790612a8690849088908890600401615a1e565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b9857600080fd5b505af11580156110fd573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015612bd357506001600160a01b03821615155b612c555760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161093d565b60018190556040518181523390600080516020615f208339815191529060200160405180910390a261083282611891565b6060600080612c9484614034565b61ffff166001600160401b03811115612caf57612caf614ac5565b6040519080825280601f01601f191660200182016040528015612cd9576020820181803683370190505b5090506000805b825182108015612cf1575061010081105b15612d48576001811b935085841615612d38578060f81b838381518110612d1a57612d1a6156b9565b60200101906001600160f81b031916908160001a9053508160010191505b612d4181615816565b9050612ce0565b5090949350505050565b600182602001516002811115612d6a57612d6a614d4f565b14612d7457505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe90612dc990889086908890600401615a97565b6020604051808303816000875af1158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0c9190615abe565b90506001600160c01b03811615612e3857612e3885612e33836001600160c01b0316612c86565b61309a565b5050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612e9857507f000000000000000000000000000000000000000000000000000000000000000046145b15612ec257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615f408339815191526003600080516020615f4083398151915286600080516020615f40833981519152888909090890506000612fdc827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f4083398151915261405f565b91959194509092505050565b600080612ff48461410e565b9050808360ff166001901b116130605760405162461bcd60e51b815260206004820152603f6024820152600080516020615fa083398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161093d565b9392505050565b60965460009081906130819060019060ff1681901b6159c6565b90506130606001600160c01b0384811690831681161490565b6001600160a01b0382166000908152609960205260409020805460018083015460ff1660028111156130ce576130ce614d4f565b1461313b5760405162461bcd60e51b81526020600482015260436024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a40161093d565b60965460009061314f90859060ff16612fe8565b9050600061315c836122e0565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603b6024820152600080516020615f6083398151915260448201527f70657261746f723a206269746d61702063616e6e6f7420626520300000000000606482015260840161093d565b6131d182613067565b61323c5760405162461bcd60e51b81526020600482015260426024820152600080516020615f6083398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a40161093d565b6132536001600160c01b0383811690831681161490565b6132d55760405162461bcd60e51b81526020600482015260596024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527872656420666f72207370656369666965642071756f72756d7360381b608482015260a40161093d565b6001600160c01b03828116198216166132ee8482614277565b6001600160c01b0381166133c05760018501805460ff191660021790556040516351b27a6d60e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a364f4da90613357908a90600401614ab1565b600060405180830381600087803b15801561337157600080fd5b505af1158015613385573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe59061340e908a908a90600401615ae7565b600060405180830381600087803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061348e9087908a90600401615b0b565b600060405180830381600087803b1580156134a857600080fd5b505af11580156134bc573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061350e9087908a90600401615b0b565b600060405180830381600087803b15801561352857600080fd5b505af115801561353c573d6000803e3d6000fd5b5050505050505050505050565b6040516309aa152760e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90613598908690600401614ab1565b602060405180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615b24565b905080610d5e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce58848461361a87610e12565b6040518463ffffffff1660e01b815260040161363893929190615b3d565b6020604051808303816000875af1158015613657573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130609190615b24565b6020808201516000908152609a909152604090205460ff16156137215760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a40161093d565b42816040015110156137b65760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a40161093d565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161106a926001600160a01b03909216916137fe918791879161157d565b8351614437565b61382960405180606001604052806060815260200160608152602001606081525090565b600061387186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050600061387e886122e0565b90506001600160c01b0382166138e65760405162461bcd60e51b81526020600482015260396024820152600080516020615f8083398151915260448201527807261746f723a206269746d61702063616e6e6f74206265203603c1b606482015260840161093d565b6138ef82613067565b613951576040805162461bcd60e51b8152602060048201526024810191909152600080516020615f8083398151915260448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f74206578697374606482015260840161093d565b8082166001600160c01b0316156139f55760405162461bcd60e51b81526020600482015260686024820152600080516020615f8083398151915260448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c40161093d565b6001600160c01b0381811690831617613a0e8982614277565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051613a3e919061571c565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff166002811115613a7857613a78614d4f565b14613b91576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff191690836002811115613ad357613ad3614d4f565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d90613b28908d908990600401615bbc565b600060405180830381600087803b158015613b4257600080fd5b505af1158015613b56573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb2795290613be1908d908c908c90600401615c30565b600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063255047779150613c65908d908d908d908d90600401615c55565b6000604051808303816000875af1158015613c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cac9190810190615ceb565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d90613d09908c908c908c90600401615d4e565b6000604051808303816000875af1158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d509190810190615d68565b84525050509695505050505050565b6020808301516001600160a01b038082166000818152609990945260409093205491929087161415613ddf5760405162461bcd60e51b81526020600482015260356024820152600080516020615f0083398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b606482015260840161093d565b8760ff16846000015160ff1614613e5c5760405162461bcd60e51b81526020600482015260476024820152600080516020615f0083398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a40161093d565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa158015613ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef19190615e01565b9050613efd81856145f1565b6001600160601b0316866001600160601b031611613f905760405162461bcd60e51b81526020600482015260566024820152600080516020615f0083398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a40161093d565b613f9a8885614615565b6001600160601b0316816001600160601b0316106110fd5760405162461bcd60e51b815260206004820152605c6024820152600080516020615f0083398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a40161093d565b6000805b8215610d5e576140496001846159c6565b909216918061405781615e1e565b915050614038565b60008061406a61498d565b6140726149ab565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156140b3576140b5565bfe5b50826141035760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161093d565b505195945050505050565b6000610100825111156141855760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161093d565b815161419357506000919050565b600080836000815181106141a9576141a96156b9565b0160200151600160f89190911c81901b92505b845181101561426e578481815181106141d7576141d76156b9565b0160200151600160f89190911c1b915082821161425a5760405162461bcd60e51b81526020600482015260476024820152600080516020615fa083398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161093d565b9181179161426781615816565b90506141bc565b50909392505050565b6000828152609860205260409020548061431c576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206143356001846159c6565b81548110614345576143456156b9565b600091825260209091200180549091504363ffffffff908116911614156143895780546001600160401b0316600160401b6001600160c01b03851602178155610ea5565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561455157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144779086908690600401615b0b565b602060405180830381865afa158015614494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b89190615e40565b6001600160e01b0319161461106a5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161093d565b826001600160a01b0316614565838361462f565b6001600160a01b03161461106a5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161093d565b60208101516000906127109061460b9061ffff1685615e6a565b6130609190615e99565b60408101516000906127109061460b9061ffff1685615e6a565b600080600061463e858561464b565b915091506111d7816146bb565b6000808251604114156146825760208301516040840151606085015160001a61467687828585614871565b945094505050506146b4565b8251604014156146ac57602083015160408401516146a1868383614954565b9350935050506146b4565b506000905060025b9250929050565b60008160048111156146cf576146cf614d4f565b14156146d85750565b60018160048111156146ec576146ec614d4f565b14156147355760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161093d565b600281600481111561474957614749614d4f565b14156147975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161093d565b60038160048111156147ab576147ab614d4f565b14156148045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161093d565b600481600481111561481857614818614d4f565b1415610ba55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161093d565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561489e575060009050600361494b565b8460ff16601b141580156148b657508460ff16601c14155b156148c7575060009050600461494b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561491b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166149445760006001925092505061494b565b9150600090505b94509492505050565b6000806001600160ff1b0383168161497160ff86901c601b615984565b905061497f87828885614871565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126149db57600080fd5b5081356001600160401b038111156149f257600080fd5b6020830191508360208260051b85010111156146b457600080fd5b60008060208385031215614a2057600080fd5b82356001600160401b03811115614a3657600080fd5b614a42858286016149c9565b90969095509350505050565b600060208284031215614a6057600080fd5b5035919050565b63ffffffff81168114610ba557600080fd5b600080600060608486031215614a8e57600080fd5b833592506020840135614aa081614a67565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614afd57614afd614ac5565b60405290565b604080519081016001600160401b0381118282101715614afd57614afd614ac5565b604051601f8201601f191681016001600160401b0381118282101715614b4d57614b4d614ac5565b604052919050565b60006001600160401b03831115614b6e57614b6e614ac5565b614b81601f8401601f1916602001614b25565b9050828152838383011115614b9557600080fd5b828260208301376000602084830101529392505050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b8201601f81018413614be557600080fd5b614bf484823560208401614b55565b949350505050565b6001600160a01b0381168114610ba557600080fd5b8035614c1c81614bfc565b919050565b600060208284031215614c3357600080fd5b813561306081614bfc565b60008060408385031215614c5157600080fd5b50508035926020909101359150565b803560ff81168114614c1c57600080fd5b600060208284031215614c8357600080fd5b61306082614c60565b815181526020808301519082015260408101610d5e565b60008083601f840112614cb557600080fd5b5081356001600160401b03811115614ccc57600080fd5b6020830191508360208285010111156146b457600080fd5b60008060008060408587031215614cfa57600080fd5b84356001600160401b0380821115614d1157600080fd5b614d1d888389016149c9565b90965094506020870135915080821115614d3657600080fd5b50614d4387828801614ca3565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614d8357634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614da290840182614d65565b5092915050565b803561ffff81168114614c1c57600080fd5b600060608284031215614dcd57600080fd5b614dd5614adb565b90508135614de281614a67565b8152614df060208301614da9565b6020820152614e0160408301614da9565b604082015292915050565b60008060808385031215614e1f57600080fd5b614e2883614c60565b9150614e378460208501614dbb565b90509250929050565b600080600060408486031215614e5557600080fd5b8335614e6081614bfc565b925060208401356001600160401b03811115614e7b57600080fd5b614e8786828701614ca3565b9497909650939450505050565b60006101008284031215614ea757600080fd5b50919050565b60008083601f840112614ebf57600080fd5b5081356001600160401b03811115614ed657600080fd5b6020830191508360208260061b85010111156146b457600080fd5b600060608284031215614f0357600080fd5b614f0b614adb565b905081356001600160401b03811115614f2357600080fd5b8201601f81018413614f3457600080fd5b614f4384823560208401614b55565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f7f57600080fd5b89356001600160401b0380821115614f9657600080fd5b614fa28d838e01614ca3565b909b50995060208c0135915080821115614fbb57600080fd5b614fc78d838e01614ca3565b9099509750879150614fdc8d60408e01614e94565b96506101408c0135915080821115614ff357600080fd5b614fff8d838e01614ead565b90965094506101608c013591508082111561501957600080fd5b6150258d838e01614ef1565b93506101808c013591508082111561503c57600080fd5b506150498c828d01614ef1565b9150509295985092959850929598565b600080600080600080610160878903121561507357600080fd5b86356001600160401b038082111561508a57600080fd5b6150968a838b01614ca3565b909850965060208901359150808211156150af57600080fd5b6150bb8a838b01614ca3565b90965094508491506150d08a60408b01614e94565b93506101408901359150808211156150e757600080fd5b506150f489828a01614ef1565b9150509295509295509295565b60006001600160401b0382111561511a5761511a614ac5565b5060051b60200190565b6000806040838503121561513757600080fd5b823561514281614a67565b91506020838101356001600160401b0381111561515e57600080fd5b8401601f8101861361516f57600080fd5b803561518261517d82615101565b614b25565b81815260059190911b820183019083810190888311156151a157600080fd5b928401925b828410156151bf578335825292840192908401906151a6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561520c57835163ffffffff16835292840192918401916001016151ea565b50909695505050505050565b6000806020838503121561522b57600080fd5b82356001600160401b0381111561524157600080fd5b614a4285828601614ca3565b6001600160601b0381168114610ba557600080fd5b600082601f83011261527357600080fd5b8135602061528361517d83615101565b82815260069290921b840181019181810190868411156152a257600080fd5b8286015b848110156152f357604081890312156152bf5760008081fd5b6152c7614b03565b81356152d281614bfc565b8152818501356152e18161524d565b818601528352918301916040016152a6565b509695505050505050565b600080600060a0848603121561531357600080fd5b61531d8585614dbb565b9250606084013561532d8161524d565b915060808401356001600160401b0381111561534857600080fd5b61535486828701615262565b9150509250925092565b600082601f83011261536f57600080fd5b8135602061537f61517d83615101565b8281526060928302850182019282820191908785111561539e57600080fd5b8387015b858110156153c1576153b48982614dbb565b84529284019281016153a2565b5090979650505050505050565b600082601f8301126153df57600080fd5b813560206153ef61517d83615101565b82815260059290921b8401810191818101908684111561540e57600080fd5b8286015b848110156152f35780356154258161524d565b8352918301918301615412565b600082601f83011261544357600080fd5b8135602061545361517d83615101565b82815260059290921b8401810191818101908684111561547257600080fd5b8286015b848110156152f35780356001600160401b038111156154955760008081fd5b6154a38986838b0101615262565b845250918301918301615476565b600080600080600080600080610100898b0312156154ce57600080fd5b6154d789614c11565b97506154e560208a01614c11565b96506154f360408a01614c11565b955061550160608a01614c11565b94506080890135935060a08901356001600160401b038082111561552457600080fd5b6155308c838d0161535e565b945060c08b013591508082111561554657600080fd5b6155528c838d016153ce565b935060e08b013591508082111561556857600080fd5b506155758b828c01615432565b9150509295985092959890939650565b815163ffffffff16815260208083015161ffff90811691830191909152604092830151169181019190915260600190565b6000604082840312156155c857600080fd5b6155d0614b03565b90506155db82614c60565b815260208201356155eb81614bfc565b602082015292915050565b6000806000806080858703121561560c57600080fd5b843593506020808601356001600160401b0381111561562a57600080fd5b8601601f8101881361563b57600080fd5b803561564961517d82615101565b81815260069190911b8201830190838101908a83111561566857600080fd5b928401925b828410156156915761567f8b856155b6565b8252848201915060408401935061566d565b979a97995050505060408601359560600135949350505050565b60208101610d5e8284614d65565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b818110156156f5576020818501810151868301820152016156d9565b81811115615707576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061306060208301846156cf565b60006020828403121561574157600080fd5b815161306081614bfc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156157a857600080fd5b8151801515811461306057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561582a5761582a615800565b5060010190565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b8181101561588e578551805160ff1684528501516001600160a01b031685840152948401949183019160010161585d565b5050606086019790975250505050608001529392505050565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601260045260246000fd5b600082615919576159196158f4565b500690565b6000808335601e1984360301811261593557600080fd5b8301803591506001600160401b0382111561594f57600080fd5b6020019150600581901b36038213156146b457600080fd5b60006020828403121561597957600080fd5b815161306081614a67565b6000821982111561599757615997615800565b500190565b600080858511156159ac57600080fd5b838611156159b957600080fd5b5050820193919092039150565b6000828210156159d8576159d8615800565b500390565b6000604082840312156159ef57600080fd5b61306083836155b6565b600060ff821660ff84168060ff03821115615a1657615a16615800565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615a8757865180516001600160a01b031684528601518516868401529585019591830191600101615a57565b50909a9950505050505050505050565b60018060a01b03841681528260208201526060604082015260006115bb60608301846156cf565b600060208284031215615ad057600080fd5b81516001600160c01b038116811461306057600080fd5b6001600160a01b0383168152604060208201819052600090614bf4908301846156cf565b828152604060208201526000614bf460408301846156cf565b600060208284031215615b3657600080fd5b5051919050565b6001600160a01b03841681526101608101615b65602083018580358252602090810135910152565b615b7f606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615be660a08401826156cf565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906115bb9083018486615c07565b60018060a01b0385168152836020820152606060408201526000615c7d606083018486615c07565b9695505050505050565b600082601f830112615c9857600080fd5b81516020615ca861517d83615101565b82815260059290921b84018101918181019086841115615cc757600080fd5b8286015b848110156152f3578051615cde8161524d565b8352918301918301615ccb565b60008060408385031215615cfe57600080fd5b82516001600160401b0380821115615d1557600080fd5b615d2186838701615c87565b93506020850151915080821115615d3757600080fd5b50615d4485828601615c87565b9150509250929050565b8381526040602082015260006115bb604083018486615c07565b60006020808385031215615d7b57600080fd5b82516001600160401b03811115615d9157600080fd5b8301601f81018513615da257600080fd5b8051615db061517d82615101565b81815260059190911b82018301908381019087831115615dcf57600080fd5b928401925b82841015615df6578351615de781614a67565b82529284019290840190615dd4565b979650505050505050565b600060208284031215615e1357600080fd5b81516130608161524d565b600061ffff80831681811415615e3657615e36615800565b6001019392505050565b600060208284031215615e5257600080fd5b81516001600160e01b03198116811461306057600080fd5b60006001600160601b0380831681851681830481118215151615615e9057615e90615800565b02949350505050565b60006001600160601b0380841680615eb357615eb36158f4565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e67657451756f72756d4269745265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c6964617465436875ab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724f5265676973747279436f6f7264696e61746f722e5f72656769737465724f70654269746d61705574696c732e6f72646572656442797465734172726179546f42a2646970667358221220f0150ead1f6d72c2c2d0f94a09f99fdff47ac7b6053fffe101bf6167b129122264736f6c634300080c0033", } // ContractSFFLRegistryCoordinatorABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/SFFLRegistryRollup/binding.go b/contracts/bindings/SFFLRegistryRollup/binding.go index 2575e994..551316cc 100644 --- a/contracts/bindings/SFFLRegistryRollup/binding.go +++ b/contracts/bindings/SFFLRegistryRollup/binding.go @@ -81,8 +81,8 @@ type StateRootUpdateMessage struct { // ContractSFFLRegistryRollupMetaData contains all meta data concerning the ContractSFFLRegistryRollup contract. var ContractSFFLRegistryRollupMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceOperatorSetUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalWeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"quorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextOperatorUpdateId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitialOperatorSet\",\"inputs\":[{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setQuorumThreshold\",\"inputs\":[{\"name\":\"newQuorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorSet\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122088bae87d6bae274768571c4de75678f928a7db4743daddc1635592c48525276d64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"taskManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceOperatorSetUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalWeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"quorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messagingPrefix\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextOperatorUpdateId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitialOperatorSet\",\"inputs\":[{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setQuorumThreshold\",\"inputs\":[{\"name\":\"newQuorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorSet\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620047a9380380620047a98339810160408190526200003491620001da565b6200004c8383836200006260201b620010b91760201c565b60805262000059620000e5565b505050620002d4565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e6784805190602001208484604051602001620000c69493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090509392505050565b600054610100900460ff1615620001525760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620001a5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001d557600080fd5b919050565b600080600060608486031215620001f057600080fd5b83516001600160401b03808211156200020857600080fd5b818601915086601f8301126200021d57600080fd5b815181811115620002325762000232620001a7565b604051601f8201601f19908116603f011681019083821181831017156200025d576200025d620001a7565b816040528281526020935089848487010111156200027a57600080fd5b600091505b828210156200029e57848201840151818301850152908301906200027f565b82821115620002b05760008484830101525b9650620002c2915050868201620001bd565b93505050604084015190509250925092565b6080516144ab620002fe600039600081816103ef015281816107300152610a3c01526144ab6000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f89d18bf146103ea578063fabc1cbc1461041157600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e636600461382f565b610424565b005b6101eb6101fb36600461384c565b6104e0565b6101eb61020e36600461387d565b61060d565b6101eb6102213660046138d5565b6106fe565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa9190613923565b6101eb61025b36600461394e565b6107a8565b61027361026e36600461397b565b6107bb565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108da565b6102c46102af366004613a1e565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e4610994565b604080518251815260209283015192810192909252016101aa565b6101eb6109b7565b6101eb610315366004613a41565b6109cb565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a9a565b610b11565b6101eb61035f366004613be8565b610c61565b610273610372366004613cbc565b610d45565b610273610385366004613cef565b610d76565b6101c061039836600461384c565b610ecf565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd36600461382f565b610eec565b61019c600081565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b6101eb61041f36600461384c565b610f62565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049b9190613d33565b6001600160a01b0316336001600160a01b0316146104d45760405162461bcd60e51b81526004016104cb90613d50565b60405180910390fd5b6104dd8161113c565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610510903390600401613923565b602060405180830381865afa15801561052d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190613d9a565b61056d5760405162461bcd60e51b81526004016104cb90613dbc565b606654818116146105e15760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104cb565b60668190556040518181523390600080516020614436833981519152906020015b60405180910390a250565b610615611233565b60ce546001600160401b031661062e6020830183613e04565b6001600160401b0316146106545760405162461bcd60e51b81526004016104cb90613e1f565b6106616020820182613e04565b61066c906001613e5f565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104dd61069d6040830183613e8a565b808060200260200160405190810160405280939291908181526020016000905b828210156106e9576106da60608302860136819003810190613ed9565b815260200190600101906106bd565b505050505060ca61128d90919063ffffffff16565b606654600190600290811614156107275760405162461bcd60e51b81526004016104cb90613ef5565b61075d610754847f0000000000000000000000000000000000000000000000000000000000000000611496565b60ca90846114e9565b6107795760405162461bcd60e51b81526004016104cb90613f28565b6107a36107896020850185613f50565b6107996040860160208701613e04565b8560a001356118d1565b505050565b6107b0611233565b6104dd60ca82611937565b60006060850135158015906107d35750608085013515155b61081a5760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104cb565b600060978161082c6020890189613f50565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061085b9190613e04565b6001600160401b031681526020810191909152604001600020549050806108c657826108bb5760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104cb565b6108c68685856119f0565b6108d08686610d76565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e9061090a903390600401613923565b602060405180830381865afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b9190613d9a565b6109675760405162461bcd60e51b81526004016104cb90613dbc565b600019606681905560405190815233906000805160206144368339815191529060200160405180910390a2565b61099c613706565b506040805180820190915260cb54815260cc54602082015290565b6109bf611233565b6109c96000611a01565b565b606654600090600190811614156109f45760405162461bcd60e51b81526004016104cb90613ef5565b60ce546001600160401b0316610a0d6020850185613e04565b6001600160401b031614610a335760405162461bcd60e51b81526004016104cb90613e1f565b610a60610754847f0000000000000000000000000000000000000000000000000000000000000000611a53565b610a7c5760405162461bcd60e51b81526004016104cb90613f28565b610a896020840184613e04565b610a94906001613e5f565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556107a3610ac56040850185613e8a565b808060200260200160405190810160405280939291908181526020016000905b828210156106e957610b0260608302860136819003810190613ed9565b81526020019060010190610ae5565b600054610100900460ff1615808015610b315750600054600160ff909116105b80610b4b5750303b158015610b4b575060005460ff166001145b610bae5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104cb565b6000805460ff191660011790558015610bd1576000805461ff0019166101001790555b610bdc826000611a8b565b610be584611a01565b610bf060ca86611937565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c5a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610cbd5760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104cb565b60cd546001600160801b031615610d165760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104cb565b610d2160ca8361128d565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d896020870187613f50565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610db89190613e04565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610e285760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104cb565b610ec7610e38602085018561382f565b602085013583610e4b6040880188613f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8d925050506060890189613f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b6392505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d70565b610ef4611233565b6001600160a01b038116610f595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104cb565b6104dd81611a01565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190613d33565b6001600160a01b0316336001600160a01b0316146110095760405162461bcd60e51b81526004016104cb90613d50565b6066541981196066541916146110825760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104cb565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610602565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e678480519060200120848460405160200161111c9493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090505b9392505050565b6001600160a01b0381166111ca5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104cb565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104cb565b611295613720565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b845181101561145b578481815181106112dc576112dc613fb1565b6020026020010151935060006113078560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156113735760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104cb565b60208601516113828286613fc7565b61138c9190613fef565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166113d75785516113d0908690611c99565b9450611403565b60208601516001600160801b0316611403576114006113f98760000151611d30565b8690611c99565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061145390614011565b9150506112c1565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b6000611135827f5be74d2401e6272c0c4f738d300bc7889f303558d33f59348e9f0670655cc11d856040516020016114ce919061402c565b60405160208183030381529060405280519060200120611dbf565b6040805180820190915260008082526020820181905260038501549091906001600160801b03168061155d5760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104cb565b60006115698580614096565b90506001600160401b0381111561158257611582613af4565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b50905060005b6115bb8680614096565b90508110156117945761160e6115d18780614096565b838181106115e1576115e1613fb1565b9050604002018036038101906115f791906140df565b805160009081526020918201519091526040902090565b82828151811061162057611620613fb1565b602090810291909101015280156116b7578161163d6001836140fb565b8151811061164d5761164d613fb1565b602002602001015160001c82828151811061166a5761166a613fb1565b602002602001015160001c116116b75760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104cb565b60008860000160008484815181106116d1576116d1613fb1565b6020908102919091018101518252810191909152604001600020546001600160801b031690508061173f5760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104cb565b61177261174c8880614096565b8481811061175c5761175c613fb1565b9050604002018036038101906113f991906140df565b945061177e81856140fb565b935050808061178c90614011565b9150506115b1565b506117c26117a184611d30565b6040805180820190915260018a0154815260028a0154602082015290611c99565b92506000806117f588866117de368b90038b0160208c01614181565b6117f0368c90038c0160a08d016140df565b611de2565b91509150816118465760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104cb565b8061188a5760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104cb565b60038901546064906118ae906001600160801b03600160801b8204811691166141c0565b6118b89190614205565b6001600160801b03169093101598975050505050505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156119a35760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104cb565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b816119fb84826106fe565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611135827ff601a428e58ffe3787aad8575ebf5f9a62c2aa107e11634ff5596c97a875a524856040516020016114ce919061422b565b6065546001600160a01b0316158015611aac57506001600160a01b03821615155b611b2e5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104cb565b606681905560405181815233906000805160206144368339815191529060200160405180910390a2611b5f8261113c565b5050565b6040516001600160601b0319606087901b16602082015260009081908190611b9e906034016040516020818303038152906040528688611f41565b9150915081611be85760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104cb565b6000611bf382611f6a565b9050600080611c288a604051602001611c0e91815260200190565b604051602081830303815290604052888560400151611f41565b9150915081611c795760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104cb565b611c8a611c858261202e565b612041565b9b9a5050505050505050505050565b611ca1613706565b611ca9613740565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611ce857611cea565bfe5b5080611d285760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104cb565b505092915050565b611d38613706565b8151158015611d4957506020820151155b15611d67575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206144568339815191528460200151611d9a9190614303565b611db2906000805160206144568339815191526140fb565b905292915050565b919050565b60408051602081018590529081018390526060810182905260009060800161111c565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611e2a57611e2a613fb1565b60200201518951600160200201518a60200151600060028110611e4f57611e4f613fb1565b60200201518b60200151600160028110611e6b57611e6b613fb1565b602090810291909101518c518d830151604051611ec89a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611eeb9190614303565b9050611f33611efd6113f98884612070565b611f056120ec565b611f29611f1a85611f146121ac565b90612070565b611f238c6121cd565b90611c99565b886201d4c0612251565b909890975095505050505050565b600060606000611f5086612475565b9050611f5d8186866124a7565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f9783612582565b90506040518060800160405280611fc783600081518110611fba57611fba613fb1565b6020026020010151612595565b8152602001611fe283600181518110611fba57611fba613fb1565b815260200161200a83600281518110611ffd57611ffd613fb1565b602002602001015161259c565b815260200161202583600381518110611ffd57611ffd613fb1565b90529392505050565b6060610d7061203c8361263e565b61266b565b600080600060208451111561205757602061205a565b83515b60209485015194036008029390931c9392505050565b612078613706565b61208061375e565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611ce8575080611d285760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104cb565b6120f461377c565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6121b4613706565b5060408051808201909152600181526002602082015290565b6121d5613706565b600080806121f160008051602061445683398151915286614303565b90505b6121fd816126f6565b9093509150600080516020614456833981519152828309831415612237576040805180820190915290815260208101919091529392505050565b6000805160206144568339815191526001820890506121f4565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906122836137a1565b60005b600281101561244857600061229c826006614317565b90508482600281106122b0576122b0613fb1565b602002015151836122c2836000614336565b600c81106122d2576122d2613fb1565b60200201528482600281106122e9576122e9613fb1565b602002015160200151838260016123009190614336565b600c811061231057612310613fb1565b602002015283826002811061232757612327613fb1565b602002015151518361233a836002614336565b600c811061234a5761234a613fb1565b602002015283826002811061236157612361613fb1565b602002015151600160200201518361237a836003614336565b600c811061238a5761238a613fb1565b60200201528382600281106123a1576123a1613fb1565b6020020151602001516000600281106123bc576123bc613fb1565b6020020151836123cd836004614336565b600c81106123dd576123dd613fb1565b60200201528382600281106123f4576123f4613fb1565b60200201516020015160016002811061240f5761240f613fb1565b602002015183612420836005614336565b600c811061243057612430613fb1565b6020020152508061244081614011565b915050612286565b506124516137c0565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6060818051906020012060405160200161249191815260200190565b6040516020818303038152906040529050919050565b6000606060006124b685612778565b905060008060006124c8848a89612872565b815192955090935091501580806124dc5750815b6125285760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104cb565b6000816125445760405180602001604052806000815250612570565b612570866125536001886140fb565b8151811061256357612563613fb1565b6020026020010151612c96565b919b919a509098505050505050505050565b6060610d706125908361263e565b612cc0565b6000610d70825b60006021826000015111156125c35760405162461bcd60e51b81526004016104cb9061434e565b60008060006125d185612ea6565b9194509250905060008160018111156125ec576125ec614385565b146126095760405162461bcd60e51b81526004016104cb9061434e565b600083866020015161261b9190614336565b805190915060208410156108d05760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061267b85612ea6565b91945092509050600081600181111561269657612696614385565b146126de5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104cb565b6126ed856020015184846131dc565b95945050505050565b6000808060008051602061445683398151915260036000805160206144568339815191528660008051602061445683398151915288890909089050600061276c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206144568339815191526132ba565b91959194509092505050565b6060600061278583612582565b9050600081516001600160401b038111156127a2576127a2613af4565b6040519080825280602002602001820160405280156127e757816020015b60408051808201909152606080825260208201528152602001906001900390816127c05790505b50905060005b825181101561286a57600061281a84838151811061280d5761280d613fb1565b602002602001015161266b565b9050604051806040016040528082815260200161283683612582565b81525083838151811061284b5761284b613fb1565b602002602001018190525050808061286290614011565b9150506127ed565b509392505050565b6000606081808061288287613362565b905060008690506000806128a9604051806040016040528060608152602001606081525090565b60005b8c51811015612c6e578c81815181106128c7576128c7613fb1565b6020026020010151915082846128dd9190614336565b93506128ea600188614336565b9650836129425781518051602090910120851461293d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104cb565b6129ff565b8151516020116129a45781518051602090910120851461293d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104cb565b846129b2836000015161349c565b146129ff5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104cb565b612a0b60106001614336565b8260200151511415612a84578551841415612a2557612c6e565b6000868581518110612a3957612a39613fb1565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612a6457612a64613fb1565b60200260200101519050612a77816134c4565b9650600194505050612c5c565b60028260200151511415612c14576000612a9d836134fa565b9050600081600081518110612ab457612ab4613fb1565b016020015160f81c90506000612acb60028361439b565b612ad69060026143bd565b90506000612ae7848360ff1661351e565b90506000612af58b8a61351e565b90506000612b038383613554565b905060ff851660021480612b1a575060ff85166003145b15612b5457808351148015612b2f5750808251145b15612b4157612b3e818b614336565b99505b50600160ff1b9950612c6e945050505050565b60ff85161580612b67575060ff85166001145b15612bbd5782518114612b875750600160ff1b9950612c6e945050505050565b612bae8860200151600181518110612ba157612ba1613fb1565b60200260200101516134c4565b9a509750612c5c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104cb565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104cb565b80612c6681614011565b9150506128ac565b50600160ff1b841486612c81878661351e565b909e909d50909b509950505050505050505050565b60208101518051606091610d7091612cb0906001906140fb565b8151811061280d5761280d613fb1565b6060600080612cce84612ea6565b91935090915060019050816001811115612cea57612cea614385565b14612d315760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104cb565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612d4a5790505090506000835b8651811015612e9b5760208210612de35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104cb565b600080612e206040518060400160405280858c60000151612e0491906140fb565b8152602001858c60200151612e199190614336565b9052612ea6565b509150915060405180604001604052808383612e3c9190614336565b8152602001848b60200151612e519190614336565b815250858581518110612e6657612e66613fb1565b6020908102919091010152612e7c600185614336565b9350612e888183614336565b612e929084614336565b92505050612d77565b508152949350505050565b600080600080846000015111612ef95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104cb565b6020840151805160001a607f8111612f1e5760006001600094509450945050506131d5565b60b78111612f96576000612f336080836140fb565b905080876000015111612f845760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104cb565b600195509350600092506131d5915050565b60bf8111613080576000612fab60b7836140fb565b9050808760000151116130005760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104cb565b600183015160208290036101000a900461301a8183614336565b8851116130645760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104cb565b61306f826001614336565b96509450600093506131d592505050565b60f781116130f557600061309560c0836140fb565b9050808760000151116130e45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104cb565b6001955093508492506131d5915050565b600061310260f7836140fb565b9050808760000151116131575760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104cb565b600183015160208290036101000a90046131718183614336565b8851116131b95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104cb565b6131c4826001614336565b96509450600193506131d592505050565b9193909250565b60606000826001600160401b038111156131f8576131f8613af4565b6040519080825280601f01601f191660200182016040528015613222576020820181803683370190505b509050805160001415613236579050611135565b60006132428587614336565b90506020820160005b6132566020876143e0565b81101561328d578251825261326c602084614336565b9250613279602083614336565b91508061328581614011565b91505061324b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806132c56137c0565b6132cd6137de565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611ce85750826133575760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104cb565b505195945050505050565b60606000825160026133749190614317565b6001600160401b0381111561338b5761338b613af4565b6040519080825280601f01601f1916602001820160405280156133b5576020820181803683370190505b50905060005b83518110156134955760048482815181106133d8576133d8613fb1565b01602001516001600160f81b031916901c826133f5836002614317565b8151811061340557613405613fb1565b60200101906001600160f81b031916908160001a905350601084828151811061343057613430613fb1565b0160200151613442919060f81c61439b565b60f81b82613451836002614317565b61345c906001614336565b8151811061346c5761346c613fb1565b60200101906001600160f81b031916908160001a9053508061348d81614011565b9150506133bb565b5092915050565b60006020825110156134b057506020015190565b81806020019051810190610d7091906143f4565b600060606020836000015110156134e5576134de836135d0565b90506134f1565b6134ee8361266b565b90505b6111358161349c565b6060610d70613519836020015160008151811061280d5761280d613fb1565b613362565b60608251821061353d5750604080516020810190915260008152610d70565b611135838384865161354f91906140fb565b6135db565b6000805b8084511180156135685750808351115b80156135b9575082818151811061358157613581613fb1565b602001015160f81c60f81b6001600160f81b0319168482815181106135a8576135a8613fb1565b01602001516001600160f81b031916145b1561113557806135c881614011565b915050613558565b6060610d70826136f0565b6060816135e981601f614336565b10156136075760405162461bcd60e51b81526004016104cb9061440d565b826136128382614336565b10156136305760405162461bcd60e51b81526004016104cb9061440d565b61363a8284614336565b8451101561367e5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104cb565b60608215801561369d57604051915060008252602082016040526136e7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136d65780518352602092830192016136be565b5050858452601f01601f1916604052505b50949350505050565b6060610d708260200151600084600001516131dc565b604051806040016040528060008152602001600081525090565b6040518060400160405280613733613706565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b604051806040016040528061378f6137fc565b815260200161379c6137fc565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104dd57600080fd5b60006020828403121561384157600080fd5b81356111358161381a565b60006020828403121561385e57600080fd5b5035919050565b60006060828403121561387757600080fd5b50919050565b60006020828403121561388f57600080fd5b81356001600160401b038111156138a557600080fd5b610ec784828501613865565b600060c0828403121561387757600080fd5b600060e0828403121561387757600080fd5b60008060e083850312156138e857600080fd5b6138f284846138b1565b915060c08301356001600160401b0381111561390d57600080fd5b613919858286016138c3565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611dba57600080fd5b60006020828403121561396057600080fd5b61113582613937565b60006080828403121561387757600080fd5b600080600080610100858703121561399257600080fd5b61399c86866138b1565b935060c08501356001600160401b03808211156139b857600080fd5b6139c488838901613969565b945060e08701359150808211156139da57600080fd5b818701915087601f8301126139ee57600080fd5b8135818111156139fd57600080fd5b886020828501011115613a0f57600080fd5b95989497505060200194505050565b600060208284031215613a3057600080fd5b813560ff8116811461113557600080fd5b60008060408385031215613a5457600080fd5b82356001600160401b0380821115613a6b57600080fd5b613a7786838701613865565b93506020850135915080821115613a8d57600080fd5b50613919858286016138c3565b60008060008060808587031215613ab057600080fd5b613ab985613937565b93506020850135613ac98161381a565b92506040850135613ad98161381a565b91506060850135613ae98161381a565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613b2c57613b2c613af4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b5a57613b5a613af4565b604052919050565b600060408284031215613b7457600080fd5b613b7c613b0a565b9050813581526020820135602082015292915050565b600060608284031215613ba457600080fd5b613bac613b0a565b9050613bb88383613b62565b8152613bc660408301613937565b602082015292915050565b80356001600160401b0381168114611dba57600080fd5b60008060408385031215613bfb57600080fd5b82356001600160401b0380821115613c1257600080fd5b818501915085601f830112613c2657600080fd5b8135602082821115613c3a57613c3a613af4565b613c48818360051b01613b32565b82815281810193506060928302850182019289841115613c6757600080fd5b948201945b83861015613c8d57613c7e8a87613b92565b85529485019493820193613c6c565b509550613c9b878201613bd1565b9450505050509250929050565b803563ffffffff81168114611dba57600080fd5b60008060408385031215613ccf57600080fd5b613cd883613ca8565b9150613ce660208401613bd1565b90509250929050565b60008060e08385031215613d0257600080fd5b613d0c84846138b1565b915060c08301356001600160401b03811115613d2757600080fd5b61391985828601613969565b600060208284031215613d4557600080fd5b81516111358161381a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613dac57600080fd5b8151801515811461113557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613e1657600080fd5b61113582613bd1565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613e8157613e81613e49565b01949350505050565b6000808335601e19843603018112613ea157600080fd5b8301803591506001600160401b03821115613ebb57600080fd5b6020019150606081023603821315613ed257600080fd5b9250929050565b600060608284031215613eeb57600080fd5b6111358383613b92565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613f6257600080fd5b61113582613ca8565b6000808335601e19843603018112613f8257600080fd5b8301803591506001600160401b03821115613f9c57600080fd5b602001915036819003821315613ed257600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613fe757613fe7613e49565b039392505050565b60006001600160801b03828116848216808303821115613e8157613e81613e49565b600060001982141561402557614025613e49565b5060010190565b60c0810163ffffffff61403e84613ca8565b16825261404d60208401613bd1565b6001600160401b0380821660208501528061406a60408701613bd1565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e198436030181126140ad57600080fd5b8301803591506001600160401b038211156140c757600080fd5b6020019150600681901b3603821315613ed257600080fd5b6000604082840312156140f157600080fd5b6111358383613b62565b60008282101561410d5761410d613e49565b500390565b600082601f83011261412357600080fd5b604051604081018181106001600160401b038211171561414557614145613af4565b806040525080604084018581111561415c57600080fd5b845b8181101561417657803583526020928301920161415e565b509195945050505050565b60006080828403121561419357600080fd5b61419b613b0a565b6141a58484614112565b81526141b48460408501614112565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156141e6576141e6613e49565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061421f5761421f6141ef565b92169190910492915050565b60006020808352608083016001600160401b038061424887613bd1565b1683860152614258838701613bd1565b604082821681880152808801359150601e1988360301821261427957600080fd5b9087019081358381111561428c57600080fd5b6060935083810236038913156142a157600080fd5b87840184905293849052908401926000919060a088015b818410156142f6578535815286860135878201526001600160801b036142df848801613937565b1681840152948401946001939093019284016142b8565b9998505050505050505050565b600082614312576143126141ef565b500690565b600081600019048311821515161561433157614331613e49565b500290565b6000821982111561434957614349613e49565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806143ae576143ae6141ef565b8060ff84160691505092915050565b600060ff821660ff8416808210156143d7576143d7613e49565b90039392505050565b6000826143ef576143ef6141ef565b500490565b60006020828403121561440657600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220a70e3a5d1f6ffc0486dd4b413caaeb382220e97e769ba0a4196c3a0c2b7b0b8b64736f6c634300080c0033", } // ContractSFFLRegistryRollupABI is the input ABI used to generate the binding from. @@ -94,7 +94,7 @@ var ContractSFFLRegistryRollupABI = ContractSFFLRegistryRollupMetaData.ABI var ContractSFFLRegistryRollupBin = ContractSFFLRegistryRollupMetaData.Bin // DeployContractSFFLRegistryRollup deploys a new Ethereum contract, binding an instance of ContractSFFLRegistryRollup to it. -func DeployContractSFFLRegistryRollup(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ContractSFFLRegistryRollup, error) { +func DeployContractSFFLRegistryRollup(auth *bind.TransactOpts, backend bind.ContractBackend, version string, taskManager common.Address, chainId *big.Int) (common.Address, *types.Transaction, *ContractSFFLRegistryRollup, error) { parsed, err := ContractSFFLRegistryRollupMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -103,7 +103,7 @@ func DeployContractSFFLRegistryRollup(auth *bind.TransactOpts, backend bind.Cont return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractSFFLRegistryRollupBin), backend) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractSFFLRegistryRollupBin), backend, version, taskManager, chainId) if err != nil { return common.Address{}, nil, nil, err } @@ -562,6 +562,37 @@ func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupCallerSession) GetT return _ContractSFFLRegistryRollup.Contract.GetTotalWeight(&_ContractSFFLRegistryRollup.CallOpts) } +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupCaller) MessagingPrefix(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractSFFLRegistryRollup.contract.Call(opts, &out, "messagingPrefix") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupSession) MessagingPrefix() ([32]byte, error) { + return _ContractSFFLRegistryRollup.Contract.MessagingPrefix(&_ContractSFFLRegistryRollup.CallOpts) +} + +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupCallerSession) MessagingPrefix() ([32]byte, error) { + return _ContractSFFLRegistryRollup.Contract.MessagingPrefix(&_ContractSFFLRegistryRollup.CallOpts) +} + // NextOperatorUpdateId is a free data retrieval call binding the contract method 0xe0f5d9f0. // // Solidity: function nextOperatorUpdateId() view returns(uint64) diff --git a/contracts/bindings/SFFLServiceManager/binding.go b/contracts/bindings/SFFLServiceManager/binding.go index ea373c7e..05c1fe8b 100644 --- a/contracts/bindings/SFFLServiceManager/binding.go +++ b/contracts/bindings/SFFLServiceManager/binding.go @@ -81,7 +81,7 @@ type StateRootUpdateMessage struct { // ContractSFFLServiceManagerMetaData contains all meta data concerning the ContractSFFLServiceManager contract. var ContractSFFLServiceManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_taskManager\",\"type\":\"address\",\"internalType\":\"contractSFFLTaskManager\"},{\"name\":\"_operatorSetUpdateRegistry\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"freezeOperator\",\"inputs\":[{\"name\":\"operatorAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSetUpdateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"taskManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSFFLTaskManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620043ef380380620043ef833981016040819052620000359162000156565b6001600160a01b0380861660c052808516608052831660a0528484846200005b6200007b565b5050506001600160a01b0391821660e052166101005250620001d6915050565b603354610100900460ff1615620000e85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff90811610156200013b576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200015357600080fd5b50565b600080600080600060a086880312156200016f57600080fd5b85516200017c816200013d565b60208701519095506200018f816200013d565b6040870151909450620001a2816200013d565b6060870151909350620001b5816200013d565b6080870151909250620001c8816200013d565b809150509295509295909350565b60805160a05160c05160e0516101005161414f620002a0600039600081816101d20152610ee201526000818161032801528181610c71015281816118b901526118ff0152600081816102ad015281816110030152818161108c0152611e0001526000818161099101528181610aec01528181610b83015281816113e601528181611569015261160801526000818161079801528181610847015281816108c701528181610e8e01528181610faf01528181611324015281816114c40152611dac015261414f6000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a0366004613362565b6103c4565b005b6101a56101b53660046133cd565b610494565b6101a56101c83660046133ea565b610547565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516101899190613403565b61021461020f366004613429565b610674565b604051908152602001610189565b6102356102303660046133cd565b610792565b60405161018991906134cc565b6101a56102503660046133cd565b610c66565b6101a5610263366004613519565b610cde565b6101a5610db5565b61029361027e366004613556565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f00000000000000000000000000000000000000000000000000000000000000006101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b366004613626565b610e83565b6101a561031e3660046133cd565b610fa4565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6101a56103583660046136d0565b61106d565b61021461036b366004613746565b6110c1565b6101a561037e3660046133cd565b6110f0565b61021461039136600461377b565b6111c6565b61023561131e565b6101a56103ac3660046133cd565b6116e7565b6101a56103bf3660046133ea565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f61047560208501856137c9565b61048560408601602087016137e6565b8560a001356119f3565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190613801565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061381e565b61054481611a57565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613403565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190613878565b6105d45760405162461bcd60e51b815260040161041590613893565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233906000805160206140fa833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e460208901896137c9565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061071391906137e6565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4e565b61078886866111c6565b9695505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613403565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906138db565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906138f4565b90506001600160c01b038116158061094c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610947919061391d565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5f565b90506000805b8251811015610a56577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f58483815181106109d0576109d061393a565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906138db565b610a429083613966565b915080610a4e8161397e565b915050610986565b506000816001600160401b03811115610a7157610a71613573565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe61393a565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906138db565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190613999565b60000151868681518110610c0b57610c0b61393a565b6001600160a01b039092166020928302919091019091015284610c2d8161397e565b9550508080610c3b9061397e565b915050610b5c565b5050508080610c519061397e565b915050610aa1565b5090979650505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c21565b610d6b826000611c73565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613403565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613878565b610e425760405162461bcd60e51b815260040161041590613893565b60001960cb81905560405190815233906000805160206140fa8339815191529060200160405180910390a2565b610e77611d47565b610e816000611c21565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ecb5760405162461bcd60e51b815260040161041590613a56565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e8da82990610f17908590600401613403565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613878565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da1565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fec5760405162461bcd60e51b815260040161041590613a56565b6040516351b27a6d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90611038908490600401613403565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d47565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611038908490600401613b1b565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6d565b61117d600080611c73565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d860208701876137c9565b63ffffffff1663ffffffff168152602001908152602001600020600085602001602081019061120791906137e6565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b61131661128760208501856133cd565b60208501358361129a6040880188613b2e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613b2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed892505050565b949350505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a4919061391d565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906138db565b6114639083613966565b91508061146f8161397e565b9150506113c6565b506000816001600160401b0381111561149257611492613573565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061391d565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906138db565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190613999565b600001518585815181106116905761169061393a565b6001600160a01b0390921660209283029190910190910152836116b28161397e565b94505080806116c09061397e565b9150506115e1565b505080806116d59061397e565b9150506114c2565b5090949350505050565b6116ef611d47565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c21565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190613801565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061381e565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663292f7a4e6118ef86612015565b6118fa600143613b7b565b8660037f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613b92565b61198a906002613baf565b6119949190613bf1565b6040518563ffffffff1660e01b81526004016119b39493929190613da8565b6040805180830381865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190613f07565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5984826103c4565b50505050565b6060600080611b6d84612096565b61ffff166001600160401b03811115611b8857611b88613573565b6040519080825280601f01601f191660200182016040528015611bb2576020820181803683370190505b5090506000805b825182108015611bca575061010081105b156116dd576001811b935085841615611c11578060f81b838381518110611bf357611bf361393a565b60200101906001600160f81b031916908160001a9053508160010191505b611c1a8161397e565b9050611bb9565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9457506001600160a01b03821615155b611d165760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb81905560405181815233906000805160206140fa8339815191529060200160405180910390a2610fa082611a57565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611de95760405162461bcd60e51b815260040161041590613a56565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611e379085908590600401613f33565b600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f189060340160405160208183030381529060405286886120c1565b9150915081611f625760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6d826120ea565b9050600080611fa28a604051602001611f8891815260200190565b6040516020818303038152906040528885604001516120c1565b9150915081611ff35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612004611fff826121ae565b6121c1565b955050505050505b95945050505050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016120499190613f7e565b60405160208183030381529060405280519060200120604051602001612079929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000805b82156110ea576120ab600184613b7b565b90921691806120b981613fea565b91505061209a565b6000606060006120d0866121f0565b90506120dd818686612222565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290612117836122fd565b905060405180608001604052806121478360008151811061213a5761213a61393a565b6020026020010151612310565b81526020016121628360018151811061213a5761213a61393a565b815260200161218a8360028151811061217d5761217d61393a565b6020026020010151612317565b81526020016121a58360038151811061217d5761217d61393a565b90529392505050565b60606110ea6121bc836123b9565b6123e6565b60008060006020845111156121d75760206121da565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161220c91815260200190565b6040516020818303038152906040529050919050565b60006060600061223185612468565b90506000806000612243848a89612562565b815192955090935091501580806122575750815b6122a35760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b6000816122bf57604051806020016040528060008152506122eb565b6122eb866122ce600188613b7b565b815181106122de576122de61393a565b6020026020010151612986565b919b919a509098505050505050505050565b60606110ea61230b836123b9565b6129b0565b60006110ea825b600060218260000151111561233e5760405162461bcd60e51b81526004016104159061400c565b600080600061234c85612b96565b91945092509050600081600181111561236757612367614043565b146123845760405162461bcd60e51b81526004016104159061400c565b60008386602001516123969190613966565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006123f685612b96565b91945092509050600081600181111561241157612411614043565b146124595760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200c85602001518484612ecc565b60606000612475836122fd565b9050600081516001600160401b0381111561249257612492613573565b6040519080825280602002602001820160405280156124d757816020015b60408051808201909152606080825260208201528152602001906001900390816124b05790505b50905060005b825181101561255a57600061250a8483815181106124fd576124fd61393a565b60200260200101516123e6565b90506040518060400160405280828152602001612526836122fd565b81525083838151811061253b5761253b61393a565b60200260200101819052505080806125529061397e565b9150506124dd565b509392505050565b6000606081808061257287612fa7565b90506000869050600080612599604051806040016040528060608152602001606081525090565b60005b8c5181101561295e578c81815181106125b7576125b761393a565b6020026020010151915082846125cd9190613966565b93506125da600188613966565b9650836126325781518051602090910120851461262d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b6126ef565b8151516020116126945781518051602090910120851461262d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b846126a283600001516130e1565b146126ef5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b6126fb60106001613966565b82602001515114156127745785518414156127155761295e565b60008685815181106127295761272961393a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106127545761275461393a565b6020026020010151905061276781613109565b965060019450505061294c565b6002826020015151141561290457600061278d8361313f565b90506000816000815181106127a4576127a461393a565b016020015160f81c905060006127bb600283614059565b6127c690600261407b565b905060006127d7848360ff16613163565b905060006127e58b8a613163565b905060006127f38383613199565b905060ff85166002148061280a575060ff85166003145b156128445780835114801561281f5750808251145b156128315761282e818b613966565b99505b50600160ff1b995061295e945050505050565b60ff85161580612857575060ff85166001145b156128ad57825181146128775750600160ff1b995061295e945050505050565b61289e88602001516001815181106128915761289161393a565b6020026020010151613109565b9a50975061294c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806129568161397e565b91505061259c565b50600160ff1b8414866129718786613163565b909e909d50909b509950505050505050505050565b602081015180516060916110ea916129a090600190613b7b565b815181106124fd576124fd61393a565b60606000806129be84612b96565b919350909150600190508160018111156129da576129da614043565b14612a215760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612a3a5790505090506000835b8651811015612b8b5760208210612ad35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612b106040518060400160405280858c60000151612af49190613b7b565b8152602001858c60200151612b099190613966565b9052612b96565b509150915060405180604001604052808383612b2c9190613966565b8152602001848b60200151612b419190613966565b815250858581518110612b5657612b5661393a565b6020908102919091010152612b6c600185613966565b9350612b788183613966565b612b829084613966565b92505050612a67565b508152949350505050565b600080600080846000015111612be95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612c0e576000600160009450945094505050612ec5565b60b78111612c86576000612c23608083613b7b565b905080876000015111612c745760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612ec5915050565b60bf8111612d70576000612c9b60b783613b7b565b905080876000015111612cf05760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612d0a8183613966565b885111612d545760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612d5f826001613966565b9650945060009350612ec592505050565b60f78111612de5576000612d8560c083613b7b565b905080876000015111612dd45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612ec5915050565b6000612df260f783613b7b565b905080876000015111612e475760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612e618183613966565b885111612ea95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612eb4826001613966565b9650945060019350612ec592505050565b9193909250565b60606000826001600160401b03811115612ee857612ee8613573565b6040519080825280601f01601f191660200182016040528015612f12576020820181803683370190505b509050805160001415612f26579050612fa0565b6000612f328587613966565b90506020820160005b612f4660208761409e565b811015612f7d5782518252612f5c602084613966565b9250612f69602083613966565b915080612f758161397e565b915050612f3b565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6060600082516002612fb991906140b2565b6001600160401b03811115612fd057612fd0613573565b6040519080825280601f01601f191660200182016040528015612ffa576020820181803683370190505b50905060005b83518110156130da57600484828151811061301d5761301d61393a565b01602001516001600160f81b031916901c8261303a8360026140b2565b8151811061304a5761304a61393a565b60200101906001600160f81b031916908160001a90535060108482815181106130755761307561393a565b0160200151613087919060f81c614059565b60f81b826130968360026140b2565b6130a1906001613966565b815181106130b1576130b161393a565b60200101906001600160f81b031916908160001a905350806130d28161397e565b915050613000565b5092915050565b60006020825110156130f557506020015190565b818060200190518101906110ea91906138db565b6000606060208360000151101561312a5761312383613215565b9050613136565b613133836123e6565b90505b612fa0816130e1565b60606110ea61315e83602001516000815181106124fd576124fd61393a565b612fa7565b60608251821061318257506040805160208101909152600081526110ea565b612fa083838486516131949190613b7b565b613220565b6000805b8084511180156131ad5750808351115b80156131fe57508281815181106131c6576131c661393a565b602001015160f81c60f81b6001600160f81b0319168482815181106131ed576131ed61393a565b01602001516001600160f81b031916145b15612fa0578061320d8161397e565b91505061319d565b60606110ea82613334565b60608161322e81601f613966565b101561324c5760405162461bcd60e51b8152600401610415906140d1565b826132578382613966565b10156132755760405162461bcd60e51b8152600401610415906140d1565b61327f8284613966565b845110156132c35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b6060821580156132e25760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561331b578051835260209283019201613303565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612ecc565b600060c0828403121561335c57600080fd5b50919050565b60008060e0838503121561337557600080fd5b61337f848461334a565b915060c08301356001600160401b0381111561339a57600080fd5b830161018081860312156133ad57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b6000602082840312156133df57600080fd5b8135612fa0816133b8565b6000602082840312156133fc57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006080828403121561335c57600080fd5b600080600080610100858703121561344057600080fd5b61344a868661334a565b935060c08501356001600160401b038082111561346657600080fd5b61347288838901613417565b945060e087013591508082111561348857600080fd5b818701915087601f83011261349c57600080fd5b8135818111156134ab57600080fd5b8860208285010111156134bd57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561350d5783516001600160a01b0316835292840192918401916001016134e8565b50909695505050505050565b6000806040838503121561352c57600080fd5b8235613537816133b8565b915060208301356133ad816133b8565b60ff8116811461054457600080fd5b60006020828403121561356857600080fd5b8135612fa081613547565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156135ab576135ab613573565b60405290565b60006001600160401b03808411156135cb576135cb613573565b604051601f8501601f19908116603f011681019082821181831017156135f3576135f3613573565b8160405280935085815286868601111561360c57600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561363957600080fd5b8235613644816133b8565b915060208301356001600160401b038082111561366057600080fd5b908401906060828703121561367457600080fd5b61367c613589565b82358281111561368b57600080fd5b83019150601f8201871361369e57600080fd5b6136ad878335602085016135b1565b815260208301356020820152604083013560408201528093505050509250929050565b6000602082840312156136e257600080fd5b81356001600160401b038111156136f857600080fd5b8201601f8101841361370957600080fd5b611316848235602084016135b1565b63ffffffff8116811461054457600080fd5b80356001600160401b038116811461374157600080fd5b919050565b6000806040838503121561375957600080fd5b823561376481613718565b91506137726020840161372a565b90509250929050565b60008060e0838503121561378e57600080fd5b613798848461334a565b915060c08301356001600160401b038111156137b357600080fd5b6137bf85828601613417565b9150509250929050565b6000602082840312156137db57600080fd5b8135612fa081613718565b6000602082840312156137f857600080fd5b612fa08261372a565b60006020828403121561381357600080fd5b8151612fa0816133b8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b8051801515811461374157600080fd5b60006020828403121561388a57600080fd5b612fa082613868565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156138ed57600080fd5b5051919050565b60006020828403121561390657600080fd5b81516001600160c01b0381168114612fa057600080fd5b60006020828403121561392f57600080fd5b8151612fa081613547565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561397957613979613950565b500190565b600060001982141561399257613992613950565b5060010190565b6000604082840312156139ab57600080fd5b604051604081018181106001600160401b03821117156139cd576139cd613573565b60405282516139db816133b8565b815260208301516bffffffffffffffffffffffff811681146139fc57600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613af457602081850181015186830182015201613ad8565b81811115613b06576000602083870101525b50601f01601f19169290920160200192915050565b602081526000612fa06020830184613ace565b6000808335601e19843603018112613b4557600080fd5b8301803591506001600160401b03821115613b5f57600080fd5b602001915036819003821315613b7457600080fd5b9250929050565b600082821015613b8d57613b8d613950565b500390565b600060208284031215613ba457600080fd5b8151612fa081613718565b600063ffffffff80831681851681830481118215151615613bd257613bd2613950565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613c0857613c08613bdb565b92169190910492915050565b6000808335601e19843603018112613c2b57600080fd5b83016020810192503590506001600160401b03811115613c4a57600080fd5b8060051b3603831315613b7457600080fd5b8183526000602080850194508260005b85811015613c97578135613c7f81613718565b63ffffffff1687529582019590820190600101613c6c565b509495945050505050565b6000808335601e19843603018112613cb957600080fd5b83016020810192503590506001600160401b03811115613cd857600080fd5b8060061b3603831315613b7457600080fd5b81835260208301925060008160005b84811015613d2157813586526020808301359087015260409586019590910190600101613cf9565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d9b578284038952613d7c8288613c14565b613d87868284613c5c565b9a87019a9550505090840190600101613d65565b5091979650505050505050565b84815260a06020820152600160a0820152600060c082015263ffffffff8416604082015260e060608201526000613ddf8485613c14565b61018060e0850152613df661026085018284613c5c565b915050613e066020860186613ca2565b60df198086850301610100870152613e1f848385613cea565b9350613e2e6040890189613ca2565b93509150610120818786030181880152613e49858585613cea565b94506101409350613e5f84880160608b01613d2b565b60e08901356101c08801526101008901356101e0880152613e82818a018a613c14565b935090508187860301610200880152613e9c858483613c5c565b945050613eab83890189613c14565b935091508086850301610220870152613ec5848484613c5c565b9350613ed5610160890189613c14565b93509150808685030161024087015250613ef0838383613d4b565b935050505061200c608083018463ffffffff169052565b60008060408385031215613f1a57600080fd5b613f2383613868565b9150602083015190509250929050565b60018060a01b0383168152604060208201526000825160606040840152613f5d60a0840182613ace565b90506020840151606084015260408401516080840152809150509392505050565b60c081018235613f8d81613718565b63ffffffff168252613fa16020840161372a565b6001600160401b03808216602085015280613fbe6040870161372a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b600061ffff8083168181141561400257614002613950565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061406c5761406c613bdb565b8060ff84160691505092915050565b600060ff821660ff84168082101561409557614095613950565b90039392505050565b6000826140ad576140ad613bdb565b500490565b60008160001904831182151516156140cc576140cc613950565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da2646970667358221220ff7724f9d223ce2511df9d1e8490fb61186326e243b28f6bbd92b3a9e2d6d92b64736f6c634300080c0033", + Bin: "0x6101206040523480156200001257600080fd5b506040516200433438038062004334833981016040819052620000359162000156565b6001600160a01b0380861660c052808516608052831660a0528484846200005b6200007b565b5050506001600160a01b0391821660e052166101005250620001d6915050565b603354610100900460ff1615620000e85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff90811610156200013b576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200015357600080fd5b50565b600080600080600060a086880312156200016f57600080fd5b85516200017c816200013d565b60208701519095506200018f816200013d565b6040870151909450620001a2816200013d565b6060870151909350620001b5816200013d565b6080870151909250620001c8816200013d565b809150509295509295909350565b60805160a05160c05160e05161010051614094620002a0600039600081816101d20152610ee201526000818161032801528181610c71015281816118c001526118f60152600081816102ad015281816110030152818161108c0152611dff01526000818161099101528181610aec01528181610b83015281816113e601528181611569015261160801526000818161079801528181610847015281816108c701528181610e8e01528181610faf01528181611324015281816114c40152611dab01526140946000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a03660046132df565b6103c4565b005b6101a56101b536600461334a565b610494565b6101a56101c8366004613367565b610547565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516101899190613380565b61021461020f3660046133a6565b610674565b604051908152602001610189565b61023561023036600461334a565b610792565b6040516101899190613449565b6101a561025036600461334a565b610c66565b6101a5610263366004613496565b610cde565b6101a5610db5565b61029361027e3660046134d3565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f00000000000000000000000000000000000000000000000000000000000000006101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b3660046135a3565b610e83565b6101a561031e36600461334a565b610fa4565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6101a561035836600461364d565b61106d565b61021461036b3660046136c3565b6110c1565b6101a561037e36600461334a565b6110f0565b6102146103913660046136f8565b6111c6565b61023561131e565b6101a56103ac36600461334a565b6116e7565b6101a56103bf366004613367565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f6104756020850185613746565b6104856040860160208701613763565b8560a001356119f2565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b919061377e565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061379b565b61054481611a56565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613380565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b891906137e5565b6105d45760405162461bcd60e51b815260040161041590613807565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb819055604051818152339060008051602061403f833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e46020890189613746565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906107139190613763565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4d565b61078886866111c6565b9695505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613380565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610823919061384f565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b29190613868565b90506001600160c01b038116158061094c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109479190613891565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5e565b90506000805b8251811015610a56577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f58483815181106109d0576109d06138ae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a38919061384f565b610a4290836138da565b915080610a4e816138f2565b915050610986565b506000816001600160401b03811115610a7157610a716134f0565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe6138ae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b57919061384f565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf5919061390d565b60000151868681518110610c0b57610c0b6138ae565b6001600160a01b039092166020928302919091019091015284610c2d816138f2565b9550508080610c3b906138f2565b915050610b5c565b5050508080610c51906138f2565b915050610aa1565b5090979650505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b81526004016104159061397c565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c20565b610d6b826000611c72565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613380565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2691906137e5565b610e425760405162461bcd60e51b815260040161041590613807565b60001960cb819055604051908152339060008051602061403f8339815191529060200160405180910390a2565b610e77611d46565b610e816000611c20565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ecb5760405162461bcd60e51b8152600401610415906139ca565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e8da82990610f17908590600401613380565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5891906137e5565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da0565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fec5760405162461bcd60e51b8152600401610415906139ca565b6040516351b27a6d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90611038908490600401613380565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d46565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611038908490600401613a8f565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b81526004016104159061397c565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6c565b61117d600080611c72565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d86020870187613746565b63ffffffff1663ffffffff16815260200190815260200160002060008560200160208101906112079190613763565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b611316611287602085018561334a565b60208501358361129a6040880188613aa2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613aa2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed792505050565b949350505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613891565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611459919061384f565b61146390836138da565b91508061146f816138f2565b9150506113c6565b506000816001600160401b03811115611492576114926134f0565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190613891565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc919061384f565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a919061390d565b60000151858581518110611690576116906138ae565b6001600160a01b0390921660209283029190910190910152836116b2816138f2565b94505080806116c0906138f2565b9150506115e1565b505080806116d5906138f2565b9150506114c2565b5090949350505050565b6116ef611d46565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c20565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d4919061377e565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061379b565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5d2e81f846118f1600143613aef565b8560037f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119769190613b06565b611981906002613b23565b61198b9190613b65565b6040518563ffffffff1660e01b81526004016119aa9493929190613e29565b602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb91906137e5565b9392505050565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5884826103c4565b50505050565b6060600080611b6c84612014565b61ffff166001600160401b03811115611b8757611b876134f0565b6040519080825280601f01601f191660200182016040528015611bb1576020820181803683370190505b5090506000805b825182108015611bc9575061010081105b156116dd576001811b935085841615611c10578060f81b838381518110611bf257611bf26138ae565b60200101906001600160f81b031916908160001a9053508160010191505b611c19816138f2565b9050611bb8565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9357506001600160a01b03821615155b611d155760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb819055604051818152339060008051602061403f8339815191529060200160405180910390a2610fa082611a56565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611de85760405162461bcd60e51b8152600401610415906139ca565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611e369085908590600401613ee4565b600060405180830381600087803b158015611e5057600080fd5b505af1158015611e64573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f1790603401604051602081830303815290604052868861203f565b9150915081611f615760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6c82612068565b9050600080611fa18a604051602001611f8791815260200190565b60405160208183030381529060405288856040015161203f565b9150915081611ff25760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612003611ffe8261212c565b61213f565b955050505050505b95945050505050565b6000805b82156110ea57612029600184613aef565b909216918061203781613f2f565b915050612018565b60006060600061204e8661216e565b905061205b8186866121a0565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906120958361227b565b905060405180608001604052806120c5836000815181106120b8576120b86138ae565b602002602001015161228e565b81526020016120e0836001815181106120b8576120b86138ae565b8152602001612108836002815181106120fb576120fb6138ae565b6020026020010151612295565b8152602001612123836003815181106120fb576120fb6138ae565b90529392505050565b60606110ea61213a83612337565b612364565b6000806000602084511115612155576020612158565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161218a91815260200190565b6040516020818303038152906040529050919050565b6000606060006121af856123e6565b905060008060006121c1848a896124e0565b815192955090935091501580806121d55750815b6122215760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b60008161223d5760405180602001604052806000815250612269565b6122698661224c600188613aef565b8151811061225c5761225c6138ae565b6020026020010151612904565b919b919a509098505050505050505050565b60606110ea61228983612337565b61292e565b60006110ea825b60006021826000015111156122bc5760405162461bcd60e51b815260040161041590613f51565b60008060006122ca85612b14565b9194509250905060008160018111156122e5576122e5613f88565b146123025760405162461bcd60e51b815260040161041590613f51565b600083866020015161231491906138da565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061237485612b14565b91945092509050600081600181111561238f5761238f613f88565b146123d75760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200b85602001518484612e4a565b606060006123f38361227b565b9050600081516001600160401b03811115612410576124106134f0565b60405190808252806020026020018201604052801561245557816020015b604080518082019091526060808252602082015281526020019060019003908161242e5790505b50905060005b82518110156124d857600061248884838151811061247b5761247b6138ae565b6020026020010151612364565b905060405180604001604052808281526020016124a48361227b565b8152508383815181106124b9576124b96138ae565b60200260200101819052505080806124d0906138f2565b91505061245b565b509392505050565b600060608180806124f087612f24565b90506000869050600080612517604051806040016040528060608152602001606081525090565b60005b8c518110156128dc578c8181518110612535576125356138ae565b60200260200101519150828461254b91906138da565b93506125586001886138da565b9650836125b0578151805160209091012085146125ab5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b61266d565b815151602011612612578151805160209091012085146125ab5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b84612620836000015161305e565b1461266d5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b612679601060016138da565b82602001515114156126f2578551841415612693576128dc565b60008685815181106126a7576126a76138ae565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106126d2576126d26138ae565b602002602001015190506126e581613086565b96506001945050506128ca565b6002826020015151141561288257600061270b836130bc565b9050600081600081518110612722576127226138ae565b016020015160f81c90506000612739600283613f9e565b612744906002613fc0565b90506000612755848360ff166130e0565b905060006127638b8a6130e0565b905060006127718383613116565b905060ff851660021480612788575060ff85166003145b156127c25780835114801561279d5750808251145b156127af576127ac818b6138da565b99505b50600160ff1b99506128dc945050505050565b60ff851615806127d5575060ff85166001145b1561282b57825181146127f55750600160ff1b99506128dc945050505050565b61281c886020015160018151811061280f5761280f6138ae565b6020026020010151613086565b9a5097506128ca945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806128d4816138f2565b91505061251a565b50600160ff1b8414866128ef87866130e0565b909e909d50909b509950505050505050505050565b602081015180516060916110ea9161291e90600190613aef565b8151811061247b5761247b6138ae565b606060008061293c84612b14565b9193509091506001905081600181111561295857612958613f88565b1461299f5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129b85790505090506000835b8651811015612b095760208210612a515760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612a8e6040518060400160405280858c60000151612a729190613aef565b8152602001858c60200151612a8791906138da565b9052612b14565b509150915060405180604001604052808383612aaa91906138da565b8152602001848b60200151612abf91906138da565b815250858581518110612ad457612ad46138ae565b6020908102919091010152612aea6001856138da565b9350612af681836138da565b612b0090846138da565b925050506129e5565b508152949350505050565b600080600080846000015111612b675760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612b8c576000600160009450945094505050612e43565b60b78111612c04576000612ba1608083613aef565b905080876000015111612bf25760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612e43915050565b60bf8111612cee576000612c1960b783613aef565b905080876000015111612c6e5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612c8881836138da565b885111612cd25760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612cdd8260016138da565b9650945060009350612e4392505050565b60f78111612d63576000612d0360c083613aef565b905080876000015111612d525760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612e43915050565b6000612d7060f783613aef565b905080876000015111612dc55760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612ddf81836138da565b885111612e275760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612e328260016138da565b9650945060019350612e4392505050565b9193909250565b60606000826001600160401b03811115612e6657612e666134f0565b6040519080825280601f01601f191660200182016040528015612e90576020820181803683370190505b509050805160001415612ea45790506119eb565b6000612eb085876138da565b90506020820160005b612ec4602087613fe3565b811015612efb5782518252612eda6020846138da565b9250612ee76020836138da565b915080612ef3816138f2565b915050612eb9565b5080519151601f959095166020036101000a600019019182169119909416179092525092915050565b6060600082516002612f369190613ff7565b6001600160401b03811115612f4d57612f4d6134f0565b6040519080825280601f01601f191660200182016040528015612f77576020820181803683370190505b50905060005b8351811015613057576004848281518110612f9a57612f9a6138ae565b01602001516001600160f81b031916901c82612fb7836002613ff7565b81518110612fc757612fc76138ae565b60200101906001600160f81b031916908160001a9053506010848281518110612ff257612ff26138ae565b0160200151613004919060f81c613f9e565b60f81b82613013836002613ff7565b61301e9060016138da565b8151811061302e5761302e6138ae565b60200101906001600160f81b031916908160001a9053508061304f816138f2565b915050612f7d565b5092915050565b600060208251101561307257506020015190565b818060200190518101906110ea919061384f565b600060606020836000015110156130a7576130a083613192565b90506130b3565b6130b083612364565b90505b6119eb8161305e565b60606110ea6130db836020015160008151811061247b5761247b6138ae565b612f24565b6060825182106130ff57506040805160208101909152600081526110ea565b6119eb83838486516131119190613aef565b61319d565b6000805b80845111801561312a5750808351115b801561317b5750828181518110613143576131436138ae565b602001015160f81c60f81b6001600160f81b03191684828151811061316a5761316a6138ae565b01602001516001600160f81b031916145b156119eb578061318a816138f2565b91505061311a565b60606110ea826132b1565b6060816131ab81601f6138da565b10156131c95760405162461bcd60e51b815260040161041590614016565b826131d483826138da565b10156131f25760405162461bcd60e51b815260040161041590614016565b6131fc82846138da565b845110156132405760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b60608215801561325f5760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613298578051835260209283019201613280565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612e4a565b600060c082840312156132d957600080fd5b50919050565b60008060e083850312156132f257600080fd5b6132fc84846132c7565b915060c08301356001600160401b0381111561331757600080fd5b8301610180818603121561332a57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b60006020828403121561335c57600080fd5b81356119eb81613335565b60006020828403121561337957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000608082840312156132d957600080fd5b60008060008061010085870312156133bd57600080fd5b6133c786866132c7565b935060c08501356001600160401b03808211156133e357600080fd5b6133ef88838901613394565b945060e087013591508082111561340557600080fd5b818701915087601f83011261341957600080fd5b81358181111561342857600080fd5b88602082850101111561343a57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561348a5783516001600160a01b031683529284019291840191600101613465565b50909695505050505050565b600080604083850312156134a957600080fd5b82356134b481613335565b9150602083013561332a81613335565b60ff8116811461054457600080fd5b6000602082840312156134e557600080fd5b81356119eb816134c4565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613528576135286134f0565b60405290565b60006001600160401b0380841115613548576135486134f0565b604051601f8501601f19908116603f01168101908282118183101715613570576135706134f0565b8160405280935085815286868601111561358957600080fd5b858560208301376000602087830101525050509392505050565b600080604083850312156135b657600080fd5b82356135c181613335565b915060208301356001600160401b03808211156135dd57600080fd5b90840190606082870312156135f157600080fd5b6135f9613506565b82358281111561360857600080fd5b83019150601f8201871361361b57600080fd5b61362a8783356020850161352e565b815260208301356020820152604083013560408201528093505050509250929050565b60006020828403121561365f57600080fd5b81356001600160401b0381111561367557600080fd5b8201601f8101841361368657600080fd5b6113168482356020840161352e565b63ffffffff8116811461054457600080fd5b80356001600160401b03811681146136be57600080fd5b919050565b600080604083850312156136d657600080fd5b82356136e181613695565b91506136ef602084016136a7565b90509250929050565b60008060e0838503121561370b57600080fd5b61371584846132c7565b915060c08301356001600160401b0381111561373057600080fd5b61373c85828601613394565b9150509250929050565b60006020828403121561375857600080fd5b81356119eb81613695565b60006020828403121561377557600080fd5b6119eb826136a7565b60006020828403121561379057600080fd5b81516119eb81613335565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156137f757600080fd5b815180151581146119eb57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60006020828403121561386157600080fd5b5051919050565b60006020828403121561387a57600080fd5b81516001600160c01b03811681146119eb57600080fd5b6000602082840312156138a357600080fd5b81516119eb816134c4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156138ed576138ed6138c4565b500190565b6000600019821415613906576139066138c4565b5060010190565b60006040828403121561391f57600080fd5b604051604081018181106001600160401b0382111715613941576139416134f0565b604052825161394f81613335565b815260208301516bffffffffffffffffffffffff8116811461397057600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613a6857602081850181015186830182015201613a4c565b81811115613a7a576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119eb6020830184613a42565b6000808335601e19843603018112613ab957600080fd5b8301803591506001600160401b03821115613ad357600080fd5b602001915036819003821315613ae857600080fd5b9250929050565b600082821015613b0157613b016138c4565b500390565b600060208284031215613b1857600080fd5b81516119eb81613695565b600063ffffffff80831681851681830481118215151615613b4657613b466138c4565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613b7c57613b7c613b4f565b92169190910492915050565b6000808335601e19843603018112613b9f57600080fd5b83016020810192503590506001600160401b03811115613bbe57600080fd5b8060051b3603831315613ae857600080fd5b8183526000602080850194508260005b85811015613c0b578135613bf381613695565b63ffffffff1687529582019590820190600101613be0565b509495945050505050565b6000808335601e19843603018112613c2d57600080fd5b83016020810192503590506001600160401b03811115613c4c57600080fd5b8060061b3603831315613ae857600080fd5b81835260208301925060008160005b84811015613c9557813586526020808301359087015260409586019590910190600101613c6d565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d0f578284038952613cf08288613b88565b613cfb868284613bd0565b9a87019a9550505090840190600101613cd9565b5091979650505050505050565b6000610180613d2b8384613b88565b828652613d3b8387018284613bd0565b92505050613d4c6020840184613c16565b8583036020870152613d5f838284613c5e565b92505050613d706040840184613c16565b8583036040870152613d83838284613c5e565b92505050613d976060850160608501613c9f565b613db160e0850160e0850180358252602090810135910152565b610120613dc081850185613b88565b86840383880152613dd2848284613bd0565b9350505050610140613de681850185613b88565b86840383880152613df8848284613bd0565b9350505050610160613e0c81850185613b88565b86840383880152613e1e848284613cbf565b979650505050505050565b60006101408635613e3981613695565b63ffffffff168352613e4d602088016136a7565b6001600160401b03808216602086015280613e6a60408b016136a7565b1660408601525050606087013560608401526080870135608084015260a087013560a08401528060c0840152613ead818401600181526000602082015260400190565b63ffffffff871660e08501529050828103610100840152613ece8186613d1c565b91505061200b61012083018463ffffffff169052565b60018060a01b0383168152604060208201526000825160606040840152613f0e60a0840182613a42565b90506020840151606084015260408401516080840152809150509392505050565b600061ffff80831681811415613f4757613f476138c4565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff831680613fb157613fb1613b4f565b8060ff84160691505092915050565b600060ff821660ff841680821015613fda57613fda6138c4565b90039392505050565b600082613ff257613ff2613b4f565b500490565b6000816000190483118215151615614011576140116138c4565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da264697066735822122049822a855fe2dd87be7f744962a0a2eb26adee21bf12cf927354871824dec0c764736f6c634300080c0033", } // ContractSFFLServiceManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/SFFLTaskManager/binding.go b/contracts/bindings/SFFLTaskManager/binding.go index 3e09c3dd..4725c5ca 100644 --- a/contracts/bindings/SFFLTaskManager/binding.go +++ b/contracts/bindings/SFFLTaskManager/binding.go @@ -117,8 +117,8 @@ type StateRootUpdateMessage struct { // ContractSFFLTaskManagerMetaData contains all meta data concerning the ContractSFFLTaskManager contract. var ContractSFFLTaskManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"taskResponseWindowBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_CHALLENGE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_CREATE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_RESPOND_TO_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_CHALLENGE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_RESPONSE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskResponses\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkQuorum\",\"inputs\":[{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskSuccesfullyChallenged\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createCheckpointTask\",\"inputs\":[{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"generator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_generator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointToTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextCheckpointTaskNum\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"raiseAndResolveCheckpointChallenge\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"pubkeysOfNonSigningOperators\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToCheckpointTask\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedSuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedUnsuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskCreated\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"task\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskResponded\",\"inputs\":[{\"name\":\"taskResponse\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162004e2038038062004e208339810160408190526200003591620002c5565b81806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b591906200030c565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013391906200030c565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b391906200030c565b6001600160a01b031660e052506097805460ff1916600117905563ffffffff811661010052620001e2620001ea565b505062000333565b600054610100900460ff1615620002575760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002aa576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c257600080fd5b50565b60008060408385031215620002d957600080fd5b8251620002e681620002ac565b602084015190925063ffffffff811681146200030157600080fd5b809150509250929050565b6000602082840312156200031f57600080fd5b81516200032c81620002ac565b9392505050565b60805160a05160c05160e05161010051614a69620003b76000396000818161028e0152611e9301526000818161058b01526113dc01526000818161040801526115be01526000818161042f01528181611794015261195601526000818161045601528181610a43015281816110a70152818161123f01526114790152614a696000f3fe608060405234801561001057600080fd5b506004361061022d5760003560e01c80636fe9b41a1161013b578063b98fba4f116100b8578063efcf4edb1161007c578063efcf4edb146105b5578063f2fde38b146105c8578063f63c5bab146105ad578063f8c8765e146105db578063fabc1cbc146105ee57600080fd5b8063b98fba4f14610558578063cf4b17101461056b578063da16491f14610573578063df5cf72314610586578063ef024458146105ad57600080fd5b80638da5cb5b116100ff5780638da5cb5b146104ef57806395eebee614610500578063a168e3c014610523578063a35d2e0514610543578063b98d09081461054b57600080fd5b80636fe9b41a14610499578063715018a6146104ac5780637afa1eed146104b4578063886f1195146104ce5780638cbc379a146104e157600080fd5b8063416c7e5e116101c95780635c975abb1161018d5780635c975abb146103fb5780635df4594614610403578063683048351461042a5780636d14a987146104515780636efb46361461047857600080fd5b8063416c7e5e1461036c5780634f19ade71461037f578063595c6a67146103ad5780635ac86ab7146103b55780635ace2df7146103e857600080fd5b806310d67a2f14610232578063136439dd14610247578063171f1d5b1461025a5780631ad4318914610289578063245a7bfc146102c5578063292f7a4e146102e55780632e44b3491461030f57806332a8ad1e1461031f5780633df4c86614610339575b600080fd5b61024561024036600461378f565b610601565b005b6102456102553660046137ac565b6106bd565b61026d61026836600461392a565b6107ea565b6040805192151583529015156020830152015b60405180910390f35b6102b07f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610280565b60ca546102d8906001600160a01b031681565b604051610280919061397b565b6102f86102f3366004613c8d565b610974565b604080519215158352602083019190915201610280565b60c9546102b09063ffffffff1681565b610327600281565b60405160ff9091168152602001610280565b60c9546103549064010000000090046001600160401b031681565b6040516001600160401b039091168152602001610280565b61024561037a366004613d30565b610a41565b61039f61038d366004613d4d565b60cb6020526000908152604090205481565b604051908152602001610280565b610245610bb6565b6103d86103c3366004613d77565b606654600160ff9092169190911b9081161490565b6040519015158152602001610280565b6102456103f6366004613dbe565b610c70565b60665461039f565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b61048b610486366004613e4f565b610cfa565b604051610280929190613f19565b6103d86104a7366004613f74565b611c07565b610245611c77565b60c9546102d890600160601b90046001600160a01b031681565b6065546102d8906001600160a01b031681565b60c95463ffffffff166102b0565b6033546001600160a01b03166102d8565b6103d861050e366004613d4d565b60cd6020526000908152604090205460ff1681565b61039f610531366004613d4d565b60cc6020526000908152604090205481565b610327600181565b6097546103d89060ff1681565b6103d8610566366004613fe8565b611c8b565b610327600081565b610245610581366004614046565b611cea565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102b0606481565b6102456105c33660046140c7565b612015565b6102456105d636600461378f565b6123c6565b6102456105e936600461413c565b61243c565b6102456105fc3660046137ac565b61259b565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190614198565b6001600160a01b0316336001600160a01b0316146106b15760405162461bcd60e51b81526004016106a8906141b5565b60405180910390fd5b6106ba816126f2565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906106ed90339060040161397b565b602060405180830381865afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e91906141ff565b61074a5760405162461bcd60e51b81526004016106a89061421c565b606654818116146107be5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233906000805160206149b4833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061083257610832614264565b60200201518951600160200201518a6020015160006002811061085757610857614264565b60200201518b6020015160016002811061087357610873614264565b602090810291909101518c518d8301516040516108d09a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108f3919061427a565b905061096661090c61090588846127e9565b8690612880565b610914612914565b61095c61094d85610947604080518082018252600080825260209182015281518083019092526001825260029082015290565b906127e9565b6109568c6129d4565b90612880565b886201d4c0612a64565b909890975095505050505050565b6000806000806109878a8a8a8a8a610cfa565b9150915060005b88811015610a2d578563ffffffff16836020015182815181106109b3576109b3614264565b60200260200101516109c591906142b2565b6001600160601b0316606463ffffffff16846000015183815181106109ec576109ec614264565b60200260200101516109fe91906142b2565b6001600160601b03161015610a1b5750600093509150610a369050565b80610a25816142e1565b91505061098e565b50600193509150505b965096945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614198565b6001600160a01b0316336001600160a01b031614610b6f5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016106a8565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610be690339060040161397b565b602060405180830381865afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2791906141ff565b610c435760405162461bcd60e51b81526004016106a89061421c565b600019606681905560405190815233906000805160206149b48339815191529060200160405180910390a2565b60665460029060049081161415610c995760405162461bcd60e51b81526004016106a8906142fc565b6000610ca86020860186613d4d565b9050610cb48686612c88565b610cf157604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610cf3565b505b5050505050565b6040805180820190915260608082526020820152600084610d6b5760405162461bcd60e51b81526020600482015260376024820152600080516020614a148339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b60648201526084016106a8565b60408301515185148015610d83575060a08301515185145b8015610d93575060c08301515185145b8015610da3575060e08301515185145b610e0d5760405162461bcd60e51b81526020600482015260416024820152600080516020614a1483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016106a8565b82515160208401515114610e855760405162461bcd60e51b815260206004820152604460248201819052600080516020614a14833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016106a8565b4363ffffffff168463ffffffff1610610ef45760405162461bcd60e51b815260206004820152603c6024820152600080516020614a1483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016106a8565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610f3557610f356137c5565b604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b506020820152866001600160401b03811115610f7c57610f7c6137c5565b604051908082528060200260200182016040528015610fa5578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115610fd957610fd96137c5565b604051908082528060200260200182016040528015611002578160200160208202803683370190505b5081526020860151516001600160401b03811115611022576110226137c5565b60405190808252806020026020018201604052801561104b578160200160208202803683370190505b508160200181905250600061111d8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611118919061432f565b612c91565b905060005b8760200151518110156113b8576111678860200151828151811061114857611148614264565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061117d5761117d614264565b6020908102919091010152801561123d57602083015161119e60018361434c565b815181106111ae576111ae614264565b602002602001015160001c836020015182815181106111cf576111cf614264565b602002602001015160001c1161123d576040805162461bcd60e51b8152602060048201526024810191909152600080516020614a1483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016106a8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061128257611282614264565b60200260200101518b8b6000015185815181106112a1576112a1614264565b60200260200101516040518463ffffffff1660e01b81526004016112de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f9190614363565b6001600160c01b03168360000151828151811061133e5761133e614264565b6020026020010181815250506113a4610905611378848660000151858151811061136a5761136a614264565b602002602001015116612d09565b8a60200151848151811061138e5761138e614264565b6020026020010151612d3490919063ffffffff16565b9450806113b0816142e1565b915050611122565b50506113c383612e18565b60975490935060ff166000816113da57600061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c919061438c565b905060005b8a811015611ada5782156115bc578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f868181106114b8576114b8614264565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c919061438c565b61152691906143a5565b116115bc5760405162461bcd60e51b81526020600482015260666024820152600080516020614a1483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016106a8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d848181106115fd576115fd614264565b9050013560f81c60f81b60f81c8c8c60a00151858151811061162157611621614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa15801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a191906143bd565b6001600160401b0319166116c48a60400151838151811061114857611148614264565b67ffffffffffffffff1916146117605760405162461bcd60e51b81526020600482015260616024820152600080516020614a1483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016106a8565b6117908960400151828151811061177957611779614264565b60200260200101518761288090919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d848181106117d3576117d3614264565b9050013560f81c60f81b60f81c8c8c60c0015185815181106117f7576117f7614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187791906143e8565b8560200151828151811061188d5761188d614264565b6001600160601b039092166020928302919091018201528501518051829081106118b9576118b9614264565b6020026020010151856000015182815181106118d7576118d7614264565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611ac55761194f8660000151828151811061192157611921614264565b60200260200101518f8f8681811061193b5761193b614264565b600192013560f81c9290921c811614919050565b15611ab3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f8681811061199557611995614264565b9050013560f81c60f81b60f81c8e896020015185815181106119b9576119b9614264565b60200260200101518f60e0015188815181106119d7576119d7614264565b602002602001015187815181106119f0576119f0614264565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7891906143e8565b8751805185908110611a8c57611a8c614264565b60200260200101818151611aa09190614411565b6001600160601b03169052506001909101905b80611abd816142e1565b9150506118fb565b50508080611ad2906142e1565b915050611461565b505050600080611af48c868a606001518b608001516107ea565b9150915081611b655760405162461bcd60e51b81526020600482015260436024820152600080516020614a1483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016106a8565b80611bc25760405162461bcd60e51b81526020600482015260396024820152600080516020614a148339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b60648201526084016106a8565b50506000878260200151604051602001611bdd929190614439565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c1284612eb3565b823514611c315760405162461bcd60e51b81526004016106a890614481565b611c3f836040013583612ed1565b611c5b5760405162461bcd60e51b81526004016106a8906144ae565b6000611c6685612f51565b6020840135149150505b9392505050565b611c7f612fd2565b611c89600061302c565b565b6000611c968461307e565b823514611cb55760405162461bcd60e51b81526004016106a890614481565b611cc3836020013583612ed1565b611cdf5760405162461bcd60e51b81526004016106a8906144ae565b6000611c66856130b7565b60ca546001600160a01b03163314611d445760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c657200000060448201526064016106a8565b60665460019060029081161415611d6d5760405162461bcd60e51b81526004016106a8906142fc565b6000611d7c6020860186613d4d565b9050366000611d8e60808801886144d9565b90925090506000611da56080890160608a01613d4d565b905060cb6000611db860208a018a613d4d565b63ffffffff1663ffffffff16815260200190815260200160002054611ddc896130eb565b14611e1b5760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b60448201526064016106a8565b600060cc81611e2d60208b018b613d4d565b63ffffffff1663ffffffff1681526020019081526020016000205414611e8e5760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b60448201526064016106a8565b611eb87f00000000000000000000000000000000000000000000000000000000000000008561451f565b63ffffffff164363ffffffff161115611f0c5760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b60448201526064016106a8565b6000611f17886130fe565b9050600080611f2a8387878a8d89610974565b9150915081611f6c5760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b60448201526064016106a8565b6040805180820190915263ffffffff4316815260208101829052611f9f81611f99368e90038e018e614547565b90613132565b60cc6000611fb060208f018f613d4d565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b82604051611fff9291906145cd565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146120805760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b60648201526084016106a8565b606654600090600190811614156120a95760405162461bcd60e51b81526004016106a8906142fc565b606463ffffffff851611156121125760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016106a8565b856001600160401b0316856001600160401b031610156121835760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b60648201526084016106a8565b42856001600160401b031611156121ef5760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b60648201526084016106a8565b6001600160401b038616158061221b575060c9546001600160401b036401000000009091048116908716115b61228d5760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d7000000000000060648201526084016106a8565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061231381613165565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c33225906123679084906145f7565b60405180910390a260c9546123839063ffffffff16600161451f565b60c980546001600160401b03909816640100000000026bffffffffffffffffffffffff1990981663ffffffff929092169190911796909617909555505050505050565b6123ce612fd2565b6001600160a01b0381166124335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6106ba8161302c565b600054610100900460ff161580801561245c5750600054600160ff909116105b806124765750303b158015612476575060005460ff166001145b6124d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a8565b6000805460ff1916600117905580156124fc576000805461ff0019166101001790555b612507856000613178565b6125108461302c565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610cf3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126129190614198565b6001600160a01b0316336001600160a01b0316146126425760405162461bcd60e51b81526004016106a8906141b5565b6066541981196066541916146126bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107df565b6001600160a01b0381166127805760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a8565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526128056136a0565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156128385761283a565bfe5b50806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016106a8565b505092915050565b604080518082019091526000808252602082015261289c6136be565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156128385750806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016106a8565b61291c6136dc565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612a046000805160206149d48339815191528661427a565b90505b612a1081613250565b90935091506000805160206149d4833981519152828309831415612a4a576040805180820190915290815260208101919091529392505050565b6000805160206149d4833981519152600182089050612a07565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612a96613701565b60005b6002811015612c5b576000612aaf826006614695565b9050848260028110612ac357612ac3614264565b60200201515183612ad58360006143a5565b600c8110612ae557612ae5614264565b6020020152848260028110612afc57612afc614264565b60200201516020015183826001612b1391906143a5565b600c8110612b2357612b23614264565b6020020152838260028110612b3a57612b3a614264565b6020020151515183612b4d8360026143a5565b600c8110612b5d57612b5d614264565b6020020152838260028110612b7457612b74614264565b6020020151516001602002015183612b8d8360036143a5565b600c8110612b9d57612b9d614264565b6020020152838260028110612bb457612bb4614264565b602002015160200151600060028110612bcf57612bcf614264565b602002015183612be08360046143a5565b600c8110612bf057612bf0614264565b6020020152838260028110612c0757612c07614264565b602002015160200151600160028110612c2257612c22614264565b602002015183612c338360056143a5565b600c8110612c4357612c43614264565b60200201525080612c53816142e1565b915050612a99565b50612c64613720565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60005b92915050565b600080612c9d846132d2565b9050808360ff166001901b11611c705760405162461bcd60e51b815260206004820152603f60248201526000805160206149f483398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016106a8565b6000805b8215612c8b57612d1e60018461434c565b9092169180612d2c816146b4565b915050612d0d565b60408051808201909152600080825260208201526102008261ffff1610612d905760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016106a8565b8161ffff1660011415612da4575081612c8b565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612e0d57600161ffff871660ff83161c81161415612df057612ded8484612880565b93505b612dfa8384612880565b92506201fffe600192831b169101612dc0565b509195945050505050565b60408051808201909152600080825260208201528151158015612e3d57506020820151155b15612e5b575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206149d48339815191528460200151612e8e919061427a565b612ea6906000805160206149d483398151915261434c565b905292915050565b919050565b6000612ec260208301836146d6565b6001600160401b031692915050565b6000610100612ee360608401846146f1565b905011158015612ef95750610100826080013511155b612f3f5760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b60448201526064016106a8565b612f488261343b565b90921492915050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f82604051602001612f85919061473a565b60405160208183030381529060405280519060200120604051602001612fb5929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6033546001600160a01b03163314611c895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000604061308f6020840184613d4d565b63ffffffff16901b6130a760408401602085016146d6565b6001600160401b03161792915050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c582604051602001612f859190614818565b600081604051602001612fb591906148ab565b60007f5f7351501d0bdb4d74dd1448340c3ecab5ad96dfe2a69df6d6e199bd0dcc523982604051602001612f859190614966565b60008282604051602001613147929190614974565b60405160208183030381529060405280519060200120905092915050565b600081604051602001612fb591906145f7565b6065546001600160a01b031615801561319957506001600160a01b03821615155b61321b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a8565b606681905560405181815233906000805160206149b48339815191529060200160405180910390a261324c826126f2565b5050565b600080806000805160206149d483398151915260036000805160206149d4833981519152866000805160206149d48339815191528889090908905060006132c6827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206149d4833981519152613538565b91959194509092505050565b6000610100825111156133495760405162461bcd60e51b8152602060048201526044602482018190526000805160206149f4833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016106a8565b815161335757506000919050565b6000808360008151811061336d5761336d614264565b0160200151600160f89190911c81901b92505b84518110156134325784818151811061339b5761339b614264565b0160200151600160f89190911c1b915082821161341e5760405162461bcd60e51b815260206004820152604760248201526000805160206149f483398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016106a8565b9181179161342b816142e1565b9050613380565b50909392505050565b60006134456136a0565b60408051843560208201526000910160405160208183030381529060405280519060200120905060006134798383876135e0565b9050600061348d608087013561010061434c565b83901c90506000805b876080013581101561352c57600060408901356001831b166134e6576134bf60608a018a6146f1565b846134c9816142e1565b95508181106134da576134da614264565b905060200201356134e9565b60005b90506001821b8416613509576135028760018784613685565b9450613519565b6135168760018388613685565b94505b5080613524816142e1565b915050613496565b50919695505050505050565b600080613543613720565b61354b61373e565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156128385750826135d55760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016106a8565b505195945050505050565b6000602082013561366c5760a08201356135fc57506000611c70565b828260a0013514156136505760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c617465640060448201526064016106a8565b6136658460008460a001358560c00135613685565b9050611c70565b61367d846000858560200135613685565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806136ef61375c565b81526020016136fc61375c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146106ba57600080fd5b6000602082840312156137a157600080fd5b8135611c708161377a565b6000602082840312156137be57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156137fd576137fd6137c5565b60405290565b60405161010081016001600160401b03811182821017156137fd576137fd6137c5565b604051601f8201601f191681016001600160401b038111828210171561384e5761384e6137c5565b604052919050565b60006040828403121561386857600080fd5b6138706137db565b9050813581526020820135602082015292915050565b600082601f83011261389757600080fd5b604051604081018181106001600160401b03821117156138b9576138b96137c5565b80604052508060408401858111156138d057600080fd5b845b81811015612e0d5780358352602092830192016138d2565b6000608082840312156138fc57600080fd5b6139046137db565b90506139108383613886565b815261391f8360408401613886565b602082015292915050565b600080600080610120858703121561394157600080fd5b843593506139528660208701613856565b925061396186606087016138ea565b91506139708660e08701613856565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f8401126139a157600080fd5b5081356001600160401b038111156139b857600080fd5b6020830191508360208285010111156139d057600080fd5b9250929050565b803563ffffffff81168114612eae57600080fd5b60006001600160401b03821115613a0457613a046137c5565b5060051b60200190565b600082601f830112613a1f57600080fd5b81356020613a34613a2f836139eb565b613826565b82815260059290921b84018101918181019086841115613a5357600080fd5b8286015b84811015613a7557613a68816139d7565b8352918301918301613a57565b509695505050505050565b600082601f830112613a9157600080fd5b81356020613aa1613a2f836139eb565b82815260069290921b84018101918181019086841115613ac057600080fd5b8286015b84811015613a7557613ad68882613856565b835291830191604001613ac4565b600082601f830112613af557600080fd5b81356020613b05613a2f836139eb565b82815260059290921b84018101918181019086841115613b2457600080fd5b8286015b84811015613a755780356001600160401b03811115613b475760008081fd5b613b558986838b0101613a0e565b845250918301918301613b28565b60006101808284031215613b7657600080fd5b613b7e613803565b905081356001600160401b0380821115613b9757600080fd5b613ba385838601613a0e565b83526020840135915080821115613bb957600080fd5b613bc585838601613a80565b60208401526040840135915080821115613bde57600080fd5b613bea85838601613a80565b6040840152613bfc85606086016138ea565b6060840152613c0e8560e08601613856565b6080840152610120840135915080821115613c2857600080fd5b613c3485838601613a0e565b60a0840152610140840135915080821115613c4e57600080fd5b613c5a85838601613a0e565b60c0840152610160840135915080821115613c7457600080fd5b50613c8184828501613ae4565b60e08301525092915050565b60008060008060008060a08789031215613ca657600080fd5b8635955060208701356001600160401b0380821115613cc457600080fd5b613cd08a838b0161398f565b9097509550859150613ce460408a016139d7565b94506060890135915080821115613cfa57600080fd5b50613d0789828a01613b63565b925050613d16608088016139d7565b90509295509295509295565b80151581146106ba57600080fd5b600060208284031215613d4257600080fd5b8135611c7081613d22565b600060208284031215613d5f57600080fd5b611c70826139d7565b60ff811681146106ba57600080fd5b600060208284031215613d8957600080fd5b8135611c7081613d68565b600060a08284031215613da657600080fd5b50919050565b600060608284031215613da657600080fd5b60008060008084860360e0811215613dd557600080fd5b85356001600160401b0380821115613dec57600080fd5b613df889838a01613d94565b9650613e078960208a01613dac565b95506040607f1984011215613e1b57600080fd5b60808801945060c0880135925080831115613e3557600080fd5b5050613e4387828801613a80565b91505092959194509250565b600080600080600060808688031215613e6757600080fd5b8535945060208601356001600160401b0380821115613e8557600080fd5b613e9189838a0161398f565b9096509450849150613ea5604089016139d7565b93506060880135915080821115613ebb57600080fd5b50613ec888828901613b63565b9150509295509295909350565b600081518084526020808501945080840160005b83811015613f0e5781516001600160601b031687529582019590820190600101613ee9565b509495945050505050565b6040815260008351604080840152613f346080840182613ed5565b90506020850151603f19848303016060850152613f518282613ed5565b925050508260208301529392505050565b600060e08284031215613da657600080fd5b600080600060a08486031215613f8957600080fd5b83356001600160401b0380821115613fa057600080fd5b613fac87838801613dac565b9450613fbb8760208801613dac565b93506080860135915080821115613fd157600080fd5b50613fde86828701613f62565b9150509250925092565b6000806000838503610140811215613fff57600080fd5b60c081121561400d57600080fd5b5083925061401e8560c08601613dac565b91506101208401356001600160401b0381111561403a57600080fd5b613fde86828701613f62565b600080600060a0848603121561405b57600080fd5b83356001600160401b038082111561407257600080fd5b61407e87838801613d94565b945061408d8760208801613dac565b935060808601359150808211156140a357600080fd5b50613fde86828701613b63565b80356001600160401b0381168114612eae57600080fd5b6000806000806000608086880312156140df57600080fd5b6140e8866140b0565b94506140f6602087016140b0565b9350614104604087016139d7565b925060608601356001600160401b0381111561411f57600080fd5b61412b8882890161398f565b969995985093965092949392505050565b6000806000806080858703121561415257600080fd5b843561415d8161377a565b9350602085013561416d8161377a565b9250604085013561417d8161377a565b9150606085013561418d8161377a565b939692955090935050565b6000602082840312156141aa57600080fd5b8151611c708161377a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561421157600080fd5b8151611c7081613d22565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261429757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156142d8576142d861429c565b02949350505050565b60006000198214156142f5576142f561429c565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b60006020828403121561434157600080fd5b8151611c7081613d68565b60008282101561435e5761435e61429c565b500390565b60006020828403121561437557600080fd5b81516001600160c01b0381168114611c7057600080fd5b60006020828403121561439e57600080fd5b5051919050565b600082198211156143b8576143b861429c565b500190565b6000602082840312156143cf57600080fd5b815167ffffffffffffffff1981168114611c7057600080fd5b6000602082840312156143fa57600080fd5b81516001600160601b0381168114611c7057600080fd5b60006001600160601b03838116908316818110156144315761443161429c565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561447457815185529382019390820190600101614458565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e198436030181126144f057600080fd5b8301803591506001600160401b0382111561450a57600080fd5b6020019150368190038213156139d057600080fd5b600063ffffffff80831681851680830382111561453e5761453e61429c565b01949350505050565b60006060828403121561455957600080fd5b604051606081018181106001600160401b038211171561457b5761457b6137c5565b604052614587836139d7565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff6145b5826139d7565b16825260208181013590830152604090810135910152565b60a081016145db82856145a7565b825163ffffffff16606083015260208301516080830152611c70565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b8181101561466c5782810184015186820160e001528301614650565b8181111561467e57600060e083880101525b50601f01601f19169390930160e001949350505050565b60008160001904831182151516156146af576146af61429c565b500290565b600061ffff808316818114156146cc576146cc61429c565b6001019392505050565b6000602082840312156146e857600080fd5b611c70826140b0565b6000808335601e1984360301811261470857600080fd5b8301803591506001600160401b0382111561472257600080fd5b6020019150600581901b36038213156139d057600080fd5b60006020808352608083016001600160401b0380614757876140b0565b16838601526147678387016140b0565b604082821681880152808801359150601e1988360301821261478857600080fd5b9087019081358381111561479b57600080fd5b6060935083810236038913156147b057600080fd5b87840184905293849052908401926000919060a08801835b8281101561480a57863582528787013588830152838701356001600160801b0381168082146147f5578687fd5b838601525095850195908501906001016147c8565b509998505050505050505050565b60c0810163ffffffff61482a846139d7565b168252614839602084016140b0565b6001600160401b03808216602085015280614856604087016140b0565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff806148c0856139d7565b1660208401526148d2602085016140b0565b6001600160401b038082166040860152806148ef604088016140b0565b16606086015282614902606088016139d7565b16608086015260808601359250601e1986360301831261492157600080fd5b91850191823591508082111561493657600080fd5b5080360385131561494657600080fd5b60a08085015261495d60c085018260208501614882565b95945050505050565b60608101612c8b82846145a7565b825163ffffffff168152602080840151908201526040808401519082015260a08101611c706060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200ef0cc123a4a507d22d566dd8085f300baeea3c956db63c47e3f8313ce9951ba64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"taskResponseWindowBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proxyAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_CHALLENGE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_CREATE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_RESPOND_TO_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_CHALLENGE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_RESPONSE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskResponses\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkQuorum\",\"inputs\":[{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskSuccesfullyChallenged\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createCheckpointTask\",\"inputs\":[{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"generator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_generator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointToTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messagingPrefix\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextCheckpointTaskNum\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"raiseAndResolveCheckpointChallenge\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"pubkeysOfNonSigningOperators\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToCheckpointTask\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyOperatorSetUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyStateRootUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedSuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedUnsuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskCreated\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"task\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskResponded\",\"inputs\":[{\"name\":\"taskResponse\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101406040523480156200001257600080fd5b50604051620052c7380380620052c783398101604081905262000035916200037f565b83806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b59190620004a5565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620004a5565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b39190620004a5565b6001600160a01b031660e0525060978054600160ff1990911617905563ffffffff831661010052620001f38183466200020b602090811b6200284517901c565b61012052620002016200028e565b50505050620004cc565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e67848051906020012084846040516020016200026f9493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090509392505050565b600054610100900460ff1615620002fb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200034e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200036657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200039657600080fd5b8451620003a38162000350565b8094505060208086015163ffffffff81168114620003c057600080fd5b6040870151909450620003d38162000350565b60608701519093506001600160401b0380821115620003f157600080fd5b818801915088601f8301126200040657600080fd5b8151818111156200041b576200041b62000369565b604051601f8201601f19908116603f0116810190838211818310171562000446576200044662000369565b816040528281528b868487010111156200045f57600080fd5b600093505b8284101562000483578484018601518185018701529285019262000464565b82841115620004955760008684830101525b989b979a50959850505050505050565b600060208284031215620004b857600080fd5b8151620004c58162000350565b9392505050565b60805160a05160c05160e0516101005161012051614d496200057e6000396000818161062401528181611ce101528181611d8601528181611db60152818161201b01526126ca0152600081816102bf0152611f9a0152600081816105cf015261145a015260008181610439015261163c0152600081816104600152818161181201526119d401526000818161048701528181610ac101528181611125015281816112bd01526114f70152614d496000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637afa1eed11610146578063cf4b1710116100c3578063f2fde38b11610087578063f2fde38b1461060c578063f63c5bab146105f1578063f89d18bf1461061f578063f8c8765e14610646578063f9f4d7f814610659578063fabc1cbc1461066c57600080fd5b8063cf4b1710146105af578063da16491f146105b7578063df5cf723146105ca578063ef024458146105f1578063efcf4edb146105f957600080fd5b8063a168e3c01161010a578063a168e3c014610554578063a35d2e0514610574578063b98d09081461057c578063b98fba4f14610589578063c5d2e81f1461059c57600080fd5b80637afa1eed146104e5578063886f1195146104ff5780638cbc379a146105125780638da5cb5b1461052057806395eebee61461053157600080fd5b80634f19ade7116101df5780635df45946116101a35780635df4594614610434578063683048351461045b5780636d14a987146104825780636efb4636146104a95780636fe9b41a146104ca578063715018a6146104dd57600080fd5b80634f19ade7146103b0578063595c6a67146103de5780635ac86ab7146103e65780635ace2df7146104195780635c975abb1461042c57600080fd5b8063292f7a4e11610226578063292f7a4e146103165780632e44b3491461034057806332a8ad1e146103505780633df4c8661461036a578063416c7e5e1461039d57600080fd5b806310d67a2f14610263578063136439dd14610278578063171f1d5b1461028b5780631ad43189146102ba578063245a7bfc146102f6575b600080fd5b61027661027136600461397e565b61067f565b005b61027661028636600461399b565b61073b565b61029e610299366004613b19565b610868565b6040805192151583529015156020830152015b60405180910390f35b6102e17f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016102b1565b60ca54610309906001600160a01b031681565b6040516102b19190613b6a565b610329610324366004613e7c565b6109f2565b6040805192151583526020830191909152016102b1565b60c9546102e19063ffffffff1681565b610358600281565b60405160ff90911681526020016102b1565b60c9546103859064010000000090046001600160401b031681565b6040516001600160401b0390911681526020016102b1565b6102766103ab366004613f1f565b610abf565b6103d06103be366004613f3c565b60cb6020526000908152604090205481565b6040519081526020016102b1565b610276610c34565b6104096103f4366004613f66565b606654600160ff9092169190911b9081161490565b60405190151581526020016102b1565b610276610427366004613fad565b610cee565b6066546103d0565b6103097f000000000000000000000000000000000000000000000000000000000000000081565b6103097f000000000000000000000000000000000000000000000000000000000000000081565b6103097f000000000000000000000000000000000000000000000000000000000000000081565b6104bc6104b736600461403e565b610d78565b6040516102b1929190614108565b6104096104d8366004614163565b611c85565b610276611d16565b60c95461030990600160601b90046001600160a01b031681565b606554610309906001600160a01b031681565b60c95463ffffffff166102e1565b6033546001600160a01b0316610309565b61040961053f366004613f3c565b60cd6020526000908152604090205460ff1681565b6103d0610562366004613f3c565b60cc6020526000908152604090205481565b610358600181565b6097546104099060ff1681565b6104096105973660046141e9565b611d2a565b6104096105aa366004614240565b611daa565b610358600081565b6102766105c53660046142d4565b611df1565b6103097f000000000000000000000000000000000000000000000000000000000000000081565b6102e1606481565b610276610607366004614355565b61213d565b61027661061a36600461397e565b6124e9565b6103d07f000000000000000000000000000000000000000000000000000000000000000081565b6102766106543660046143ca565b61255f565b610409610667366004614426565b6126be565b61027661067a36600461399b565b6126ee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190614478565b6001600160a01b0316336001600160a01b03161461072f5760405162461bcd60e51b815260040161072690614495565b60405180910390fd5b610738816128c7565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e9061076b903390600401613b6a565b602060405180830381865afa158015610788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac91906144df565b6107c85760405162461bcd60e51b8152600401610726906144fc565b6066548181161461083c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610726565b60668190556040518181523390600080516020614c94833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106108b0576108b0614544565b60200201518951600160200201518a602001516000600281106108d5576108d5614544565b60200201518b602001516001600281106108f1576108f1614544565b602090810291909101518c518d83015160405161094e9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610971919061455a565b90506109e461098a61098388846129be565b8690612a55565b610992612ae9565b6109da6109cb856109c5604080518082018252600080825260209182015281518083019092526001825260029082015290565b906129be565b6109d48c612ba9565b90612a55565b886201d4c0612c39565b909890975095505050505050565b600080600080610a058a8a8a8a8a610d78565b9150915060005b88811015610aab578563ffffffff1683602001518281518110610a3157610a31614544565b6020026020010151610a439190614592565b6001600160601b0316606463ffffffff1684600001518381518110610a6a57610a6a614544565b6020026020010151610a7c9190614592565b6001600160601b03161015610a995750600093509150610ab49050565b80610aa3816145c1565b915050610a0c565b50600193509150505b965096945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190614478565b6001600160a01b0316336001600160a01b031614610bed5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610726565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610c64903390600401613b6a565b602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca591906144df565b610cc15760405162461bcd60e51b8152600401610726906144fc565b60001960668190556040519081523390600080516020614c948339815191529060200160405180910390a2565b60665460029060049081161415610d175760405162461bcd60e51b8152600401610726906145dc565b6000610d266020860186613f3c565b9050610d328686612e5d565b610d6f57604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610d71565b505b5050505050565b6040805180820190915260608082526020820152600084610de95760405162461bcd60e51b81526020600482015260376024820152600080516020614cf48339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b6064820152608401610726565b60408301515185148015610e01575060a08301515185145b8015610e11575060c08301515185145b8015610e21575060e08301515185145b610e8b5760405162461bcd60e51b81526020600482015260416024820152600080516020614cf483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610726565b82515160208401515114610f035760405162461bcd60e51b815260206004820152604460248201819052600080516020614cf4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610726565b4363ffffffff168463ffffffff1610610f725760405162461bcd60e51b815260206004820152603c6024820152600080516020614cf483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610726565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610fb357610fb36139b4565b604051908082528060200260200182016040528015610fdc578160200160208202803683370190505b506020820152866001600160401b03811115610ffa57610ffa6139b4565b604051908082528060200260200182016040528015611023578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115611057576110576139b4565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b5081526020860151516001600160401b038111156110a0576110a06139b4565b6040519080825280602002602001820160405280156110c9578160200160208202803683370190505b508160200181905250600061119b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611196919061460f565b612e66565b905060005b876020015151811015611436576111e5886020015182815181106111c6576111c6614544565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106111fb576111fb614544565b602090810291909101015280156112bb57602083015161121c60018361462c565b8151811061122c5761122c614544565b602002602001015160001c8360200151828151811061124d5761124d614544565b602002602001015160001c116112bb576040805162461bcd60e51b8152602060048201526024810191909152600080516020614cf483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610726565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061130057611300614544565b60200260200101518b8b60000151858151811061131f5761131f614544565b60200260200101516040518463ffffffff1660e01b815260040161135c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139d9190614643565b6001600160c01b0316836000015182815181106113bc576113bc614544565b6020026020010181815250506114226109836113f684866000015185815181106113e8576113e8614544565b602002602001015116612ede565b8a60200151848151811061140c5761140c614544565b6020026020010151612f0990919063ffffffff16565b94508061142e816145c1565b9150506111a0565b505061144183612fed565b60975490935060ff166000816114585760006114da565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da919061466c565b905060005b8a811015611b5857821561163a578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061153657611536614544565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a919061466c565b6115a49190614685565b1161163a5760405162461bcd60e51b81526020600482015260666024820152600080516020614cf483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610726565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061167b5761167b614544565b9050013560f81c60f81b60f81c8c8c60a00151858151811061169f5761169f614544565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156116fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171f919061469d565b6001600160401b0319166117428a6040015183815181106111c6576111c6614544565b67ffffffffffffffff1916146117de5760405162461bcd60e51b81526020600482015260616024820152600080516020614cf483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610726565b61180e896040015182815181106117f7576117f7614544565b602002602001015187612a5590919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d8481811061185157611851614544565b9050013560f81c60f81b60f81c8c8c60c00151858151811061187557611875614544565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f591906146c8565b8560200151828151811061190b5761190b614544565b6001600160601b0390921660209283029190910182015285015180518290811061193757611937614544565b60200260200101518560000151828151811061195557611955614544565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611b43576119cd8660000151828151811061199f5761199f614544565b60200260200101518f8f868181106119b9576119b9614544565b600192013560f81c9290921c811614919050565b15611b31577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611a1357611a13614544565b9050013560f81c60f81b60f81c8e89602001518581518110611a3757611a37614544565b60200260200101518f60e001518881518110611a5557611a55614544565b60200260200101518781518110611a6e57611a6e614544565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af691906146c8565b8751805185908110611b0a57611b0a614544565b60200260200101818151611b1e91906146f1565b6001600160601b03169052506001909101905b80611b3b816145c1565b915050611979565b50508080611b50906145c1565b9150506114df565b505050600080611b728c868a606001518b60800151610868565b9150915081611be35760405162461bcd60e51b81526020600482015260436024820152600080516020614cf483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610726565b80611c405760405162461bcd60e51b81526020600482015260396024820152600080516020614cf48339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b6064820152608401610726565b50506000878260200151604051602001611c5b929190614719565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c9084613088565b823514611caf5760405162461bcd60e51b815260040161072690614761565b611cbd8360400135836130a6565b611cd95760405162461bcd60e51b81526004016107269061478e565b6000611d05857f0000000000000000000000000000000000000000000000000000000000000000613126565b6020840135149150505b9392505050565b611d1e613179565b611d2860006131d3565b565b6000611d3584613225565b823514611d545760405162461bcd60e51b815260040161072690614761565b611d628360200135836130a6565b611d7e5760405162461bcd60e51b81526004016107269061478e565b6000611d05857f000000000000000000000000000000000000000000000000000000000000000061325e565b600080611de4611dda897f000000000000000000000000000000000000000000000000000000000000000061325e565b88888888886109f2565b5098975050505050505050565b60ca546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c65720000006044820152606401610726565b60665460019060029081161415611e745760405162461bcd60e51b8152600401610726906145dc565b6000611e836020860186613f3c565b9050366000611e9560808801886147b9565b90925090506000611eac6080890160608a01613f3c565b905060cb6000611ebf60208a018a613f3c565b63ffffffff1663ffffffff16815260200190815260200160002054611ee389613296565b14611f225760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b6044820152606401610726565b600060cc81611f3460208b018b613f3c565b63ffffffff1663ffffffff1681526020019081526020016000205414611f955760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b6044820152606401610726565b611fbf7f0000000000000000000000000000000000000000000000000000000000000000856147ff565b63ffffffff164363ffffffff1611156120135760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b6044820152606401610726565b600061203f887f00000000000000000000000000000000000000000000000000000000000000006132c6565b90506000806120528387878a8d896109f2565b91509150816120945760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610726565b6040805180820190915263ffffffff43168152602081018290526120c7816120c1368e90038e018e614827565b906132fe565b60cc60006120d860208f018f613f3c565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b826040516121279291906148ad565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146121a85760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b6064820152608401610726565b606654600090600190811614156121d15760405162461bcd60e51b8152600401610726906145dc565b606463ffffffff8516111561223a5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610726565b856001600160401b0316856001600160401b031610156122ab5760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b6064820152608401610726565b42856001600160401b031611156123175760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b6064820152608401610726565b6001600160401b0386161580612343575060c9546001600160401b036401000000009091048116908716115b6123b55760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d700000000000006064820152608401610726565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061243b81613331565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c332259061248f9084906148d7565b60405180910390a260c9546124ab9063ffffffff1660016147ff565b60c980546001600160401b03909816640100000000026001600160601b031990981663ffffffff929092169190911796909617909555505050505050565b6124f1613179565b6001600160a01b0381166125565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610726565b610738816131d3565b600054610100900460ff161580801561257f5750600054600160ff909116105b806125995750303b158015612599575060005460ff166001145b6125fc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610726565b6000805460ff19166001179055801561261f576000805461ff0019166101001790555b61262a856000613344565b612633846131d3565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610d71576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600080611de4611dda897f0000000000000000000000000000000000000000000000000000000000000000613126565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127659190614478565b6001600160a01b0316336001600160a01b0316146127955760405162461bcd60e51b815260040161072690614495565b60665419811960665419161461280e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610726565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161085d565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e67848051906020012084846040516020016128a89493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090509392505050565b6001600160a01b0381166129555760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610726565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526129da61388f565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612a0d57612a0f565bfe5b5080612a4d5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610726565b505092915050565b6040805180820190915260008082526020820152612a716138ad565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612a0d575080612a4d5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610726565b612af16138cb565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612bd9600080516020614cb48339815191528661455a565b90505b612be58161341c565b9093509150600080516020614cb4833981519152828309831415612c1f576040805180820190915290815260208101919091529392505050565b600080516020614cb4833981519152600182089050612bdc565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612c6b6138f0565b60005b6002811015612e30576000612c84826006614975565b9050848260028110612c9857612c98614544565b60200201515183612caa836000614685565b600c8110612cba57612cba614544565b6020020152848260028110612cd157612cd1614544565b60200201516020015183826001612ce89190614685565b600c8110612cf857612cf8614544565b6020020152838260028110612d0f57612d0f614544565b6020020151515183612d22836002614685565b600c8110612d3257612d32614544565b6020020152838260028110612d4957612d49614544565b6020020151516001602002015183612d62836003614685565b600c8110612d7257612d72614544565b6020020152838260028110612d8957612d89614544565b602002015160200151600060028110612da457612da4614544565b602002015183612db5836004614685565b600c8110612dc557612dc5614544565b6020020152838260028110612ddc57612ddc614544565b602002015160200151600160028110612df757612df7614544565b602002015183612e08836005614685565b600c8110612e1857612e18614544565b60200201525080612e28816145c1565b915050612c6e565b50612e3961390f565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60005b92915050565b600080612e728461349e565b9050808360ff166001901b11611d0f5760405162461bcd60e51b815260206004820152603f6024820152600080516020614cd483398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610726565b6000805b8215612e6057612ef360018461462c565b9092169180612f0181614994565b915050612ee2565b60408051808201909152600080825260208201526102008261ffff1610612f655760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610726565b8161ffff1660011415612f79575081612e60565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612fe257600161ffff871660ff83161c81161415612fc557612fc28484612a55565b93505b612fcf8384612a55565b92506201fffe600192831b169101612f95565b509195945050505050565b6040805180820190915260008082526020820152815115801561301257506020820151155b15613030575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614cb48339815191528460200151613063919061455a565b61307b90600080516020614cb483398151915261462c565b905292915050565b919050565b600061309760208301836149b6565b6001600160401b031692915050565b60006101006130b860608401846149d1565b9050111580156130ce5750610100826080013511155b6131145760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b6044820152606401610726565b61311d82613607565b90921492915050565b6000611d0f827ff601a428e58ffe3787aad8575ebf5f9a62c2aa107e11634ff5596c97a875a5248560405160200161315e9190614a1a565b60405160208183030381529060405280519060200120613704565b6033546001600160a01b03163314611d285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610726565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060406132366020840184613f3c565b63ffffffff16901b61324e60408401602085016149b6565b6001600160401b03161792915050565b6000611d0f827f5be74d2401e6272c0c4f738d300bc7889f303558d33f59348e9f0670655cc11d8560405160200161315e9190614af8565b6000816040516020016132a99190614b8b565b604051602081830303815290604052805190602001209050919050565b6000611d0f827f7828e0724a27909f1ad83e5f4129101ec0b3e0615db2258b814e764ffaf8c6c18560405160200161315e9190614c46565b60008282604051602001613313929190614c54565b60405160208183030381529060405280519060200120905092915050565b6000816040516020016132a991906148d7565b6065546001600160a01b031615801561336557506001600160a01b03821615155b6133e75760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610726565b60668190556040518181523390600080516020614c948339815191529060200160405180910390a2613418826128c7565b5050565b60008080600080516020614cb48339815191526003600080516020614cb483398151915286600080516020614cb4833981519152888909090890506000613492827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614cb4833981519152613727565b91959194509092505050565b6000610100825111156135155760405162461bcd60e51b815260206004820152604460248201819052600080516020614cd4833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610726565b815161352357506000919050565b6000808360008151811061353957613539614544565b0160200151600160f89190911c81901b92505b84518110156135fe5784818151811061356757613567614544565b0160200151600160f89190911c1b91508282116135ea5760405162461bcd60e51b81526020600482015260476024820152600080516020614cd483398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610726565b918117916135f7816145c1565b905061354c565b50909392505050565b600061361161388f565b60408051843560208201526000910160405160208183030381529060405280519060200120905060006136458383876137cf565b90506000613659608087013561010061462c565b83901c90506000805b87608001358110156136f857600060408901356001831b166136b25761368b60608a018a6149d1565b84613695816145c1565b95508181106136a6576136a6614544565b905060200201356136b5565b60005b90506001821b84166136d5576136ce8760018784613874565b94506136e5565b6136e28760018388613874565b94505b50806136f0816145c1565b915050613662565b50919695505050505050565b6040805160208101859052908101839052606081018290526000906080016128a8565b60008061373261390f565b61373a61392d565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612a0d5750826137c45760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610726565b505195945050505050565b6000602082013561385b5760a08201356137eb57506000611d0f565b828260a00135141561383f5760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c61746564006044820152606401610726565b6138548460008460a001358560c00135613874565b9050611d0f565b61386c846000858560200135613874565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806138de61394b565b81526020016138eb61394b565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461073857600080fd5b60006020828403121561399057600080fd5b8135611d0f81613969565b6000602082840312156139ad57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156139ec576139ec6139b4565b60405290565b60405161010081016001600160401b03811182821017156139ec576139ec6139b4565b604051601f8201601f191681016001600160401b0381118282101715613a3d57613a3d6139b4565b604052919050565b600060408284031215613a5757600080fd5b613a5f6139ca565b9050813581526020820135602082015292915050565b600082601f830112613a8657600080fd5b604051604081018181106001600160401b0382111715613aa857613aa86139b4565b8060405250806040840185811115613abf57600080fd5b845b81811015612fe2578035835260209283019201613ac1565b600060808284031215613aeb57600080fd5b613af36139ca565b9050613aff8383613a75565b8152613b0e8360408401613a75565b602082015292915050565b6000806000806101208587031215613b3057600080fd5b84359350613b418660208701613a45565b9250613b508660608701613ad9565b9150613b5f8660e08701613a45565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f840112613b9057600080fd5b5081356001600160401b03811115613ba757600080fd5b602083019150836020828501011115613bbf57600080fd5b9250929050565b803563ffffffff8116811461308357600080fd5b60006001600160401b03821115613bf357613bf36139b4565b5060051b60200190565b600082601f830112613c0e57600080fd5b81356020613c23613c1e83613bda565b613a15565b82815260059290921b84018101918181019086841115613c4257600080fd5b8286015b84811015613c6457613c5781613bc6565b8352918301918301613c46565b509695505050505050565b600082601f830112613c8057600080fd5b81356020613c90613c1e83613bda565b82815260069290921b84018101918181019086841115613caf57600080fd5b8286015b84811015613c6457613cc58882613a45565b835291830191604001613cb3565b600082601f830112613ce457600080fd5b81356020613cf4613c1e83613bda565b82815260059290921b84018101918181019086841115613d1357600080fd5b8286015b84811015613c645780356001600160401b03811115613d365760008081fd5b613d448986838b0101613bfd565b845250918301918301613d17565b60006101808284031215613d6557600080fd5b613d6d6139f2565b905081356001600160401b0380821115613d8657600080fd5b613d9285838601613bfd565b83526020840135915080821115613da857600080fd5b613db485838601613c6f565b60208401526040840135915080821115613dcd57600080fd5b613dd985838601613c6f565b6040840152613deb8560608601613ad9565b6060840152613dfd8560e08601613a45565b6080840152610120840135915080821115613e1757600080fd5b613e2385838601613bfd565b60a0840152610140840135915080821115613e3d57600080fd5b613e4985838601613bfd565b60c0840152610160840135915080821115613e6357600080fd5b50613e7084828501613cd3565b60e08301525092915050565b60008060008060008060a08789031215613e9557600080fd5b8635955060208701356001600160401b0380821115613eb357600080fd5b613ebf8a838b01613b7e565b9097509550859150613ed360408a01613bc6565b94506060890135915080821115613ee957600080fd5b50613ef689828a01613d52565b925050613f0560808801613bc6565b90509295509295509295565b801515811461073857600080fd5b600060208284031215613f3157600080fd5b8135611d0f81613f11565b600060208284031215613f4e57600080fd5b611d0f82613bc6565b60ff8116811461073857600080fd5b600060208284031215613f7857600080fd5b8135611d0f81613f57565b600060a08284031215613f9557600080fd5b50919050565b600060608284031215613f9557600080fd5b60008060008084860360e0811215613fc457600080fd5b85356001600160401b0380821115613fdb57600080fd5b613fe789838a01613f83565b9650613ff68960208a01613f9b565b95506040607f198401121561400a57600080fd5b60808801945060c088013592508083111561402457600080fd5b505061403287828801613c6f565b91505092959194509250565b60008060008060006080868803121561405657600080fd5b8535945060208601356001600160401b038082111561407457600080fd5b61408089838a01613b7e565b909650945084915061409460408901613bc6565b935060608801359150808211156140aa57600080fd5b506140b788828901613d52565b9150509295509295909350565b600081518084526020808501945080840160005b838110156140fd5781516001600160601b0316875295820195908201906001016140d8565b509495945050505050565b604081526000835160408084015261412360808401826140c4565b90506020850151603f1984830301606085015261414082826140c4565b925050508260208301529392505050565b600060e08284031215613f9557600080fd5b600080600060a0848603121561417857600080fd5b83356001600160401b038082111561418f57600080fd5b61419b87838801613f9b565b94506141aa8760208801613f9b565b935060808601359150808211156141c057600080fd5b506141cd86828701614151565b9150509250925092565b600060c08284031215613f9557600080fd5b600080600061014084860312156141ff57600080fd5b61420985856141d7565b92506142188560c08601613f9b565b91506101208401356001600160401b0381111561423457600080fd5b6141cd86828701614151565b600080600080600080610140878903121561425a57600080fd5b61426488886141d7565b955060c08701356001600160401b038082111561428057600080fd5b61428c8a838b01613b7e565b90975095508591506142a060e08a01613bc6565b94506101008901359150808211156142b757600080fd5b506142c489828a01613d52565b925050613f056101208801613bc6565b600080600060a084860312156142e957600080fd5b83356001600160401b038082111561430057600080fd5b61430c87838801613f83565b945061431b8760208801613f9b565b9350608086013591508082111561433157600080fd5b506141cd86828701613d52565b80356001600160401b038116811461308357600080fd5b60008060008060006080868803121561436d57600080fd5b6143768661433e565b94506143846020870161433e565b935061439260408701613bc6565b925060608601356001600160401b038111156143ad57600080fd5b6143b988828901613b7e565b969995985093965092949392505050565b600080600080608085870312156143e057600080fd5b84356143eb81613969565b935060208501356143fb81613969565b9250604085013561440b81613969565b9150606085013561441b81613969565b939692955090935050565b60008060008060008060a0878903121561443f57600080fd5b86356001600160401b038082111561445657600080fd5b6144628a838b01613f9b565b97506020890135915080821115613eb357600080fd5b60006020828403121561448a57600080fd5b8151611d0f81613969565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156144f157600080fd5b8151611d0f81613f11565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261457757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156145b8576145b861457c565b02949350505050565b60006000198214156145d5576145d561457c565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b60006020828403121561462157600080fd5b8151611d0f81613f57565b60008282101561463e5761463e61457c565b500390565b60006020828403121561465557600080fd5b81516001600160c01b0381168114611d0f57600080fd5b60006020828403121561467e57600080fd5b5051919050565b600082198211156146985761469861457c565b500190565b6000602082840312156146af57600080fd5b815167ffffffffffffffff1981168114611d0f57600080fd5b6000602082840312156146da57600080fd5b81516001600160601b0381168114611d0f57600080fd5b60006001600160601b03838116908316818110156147115761471161457c565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561475457815185529382019390820190600101614738565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e198436030181126147d057600080fd5b8301803591506001600160401b038211156147ea57600080fd5b602001915036819003821315613bbf57600080fd5b600063ffffffff80831681851680830382111561481e5761481e61457c565b01949350505050565b60006060828403121561483957600080fd5b604051606081018181106001600160401b038211171561485b5761485b6139b4565b60405261486783613bc6565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff61489582613bc6565b16825260208181013590830152604090810135910152565b60a081016148bb8285614887565b825163ffffffff16606083015260208301516080830152611d0f565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b8181101561494c5782810184015186820160e001528301614930565b8181111561495e57600060e083880101525b50601f01601f19169390930160e001949350505050565b600081600019048311821515161561498f5761498f61457c565b500290565b600061ffff808316818114156149ac576149ac61457c565b6001019392505050565b6000602082840312156149c857600080fd5b611d0f8261433e565b6000808335601e198436030181126149e857600080fd5b8301803591506001600160401b03821115614a0257600080fd5b6020019150600581901b3603821315613bbf57600080fd5b60006020808352608083016001600160401b0380614a378761433e565b1683860152614a4783870161433e565b604082821681880152808801359150601e19883603018212614a6857600080fd5b90870190813583811115614a7b57600080fd5b606093508381023603891315614a9057600080fd5b87840184905293849052908401926000919060a08801835b82811015614aea57863582528787013588830152838701356001600160801b038116808214614ad5578687fd5b83860152509585019590850190600101614aa8565b509998505050505050505050565b60c0810163ffffffff614b0a84613bc6565b168252614b196020840161433e565b6001600160401b03808216602085015280614b366040870161433e565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff80614ba085613bc6565b166020840152614bb26020850161433e565b6001600160401b03808216604086015280614bcf6040880161433e565b16606086015282614be260608801613bc6565b16608086015260808601359250601e19863603018312614c0157600080fd5b918501918235915080821115614c1657600080fd5b50803603851315614c2657600080fd5b60a080850152614c3d60c085018260208501614b62565b95945050505050565b60608101612e608284614887565b825163ffffffff168152602080840151908201526040808401519082015260a08101611d0f6060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220dfbb562a5d1df5f7c354243c191940e038937d5cedb034828e9f93ca983651ae64736f6c634300080c0033", } // ContractSFFLTaskManagerABI is the input ABI used to generate the binding from. @@ -130,7 +130,7 @@ var ContractSFFLTaskManagerABI = ContractSFFLTaskManagerMetaData.ABI var ContractSFFLTaskManagerBin = ContractSFFLTaskManagerMetaData.Bin // DeployContractSFFLTaskManager deploys a new Ethereum contract, binding an instance of ContractSFFLTaskManager to it. -func DeployContractSFFLTaskManager(auth *bind.TransactOpts, backend bind.ContractBackend, registryCoordinator common.Address, taskResponseWindowBlock uint32) (common.Address, *types.Transaction, *ContractSFFLTaskManager, error) { +func DeployContractSFFLTaskManager(auth *bind.TransactOpts, backend bind.ContractBackend, registryCoordinator common.Address, taskResponseWindowBlock uint32, proxyAddress common.Address, version string) (common.Address, *types.Transaction, *ContractSFFLTaskManager, error) { parsed, err := ContractSFFLTaskManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -139,7 +139,7 @@ func DeployContractSFFLTaskManager(auth *bind.TransactOpts, backend bind.Contrac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractSFFLTaskManagerBin), backend, registryCoordinator, taskResponseWindowBlock) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractSFFLTaskManagerBin), backend, registryCoordinator, taskResponseWindowBlock, proxyAddress, version) if err != nil { return common.Address{}, nil, nil, err } @@ -817,6 +817,37 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) LastCheckp return _ContractSFFLTaskManager.Contract.LastCheckpointToTimestamp(&_ContractSFFLTaskManager.CallOpts) } +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) MessagingPrefix(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractSFFLTaskManager.contract.Call(opts, &out, "messagingPrefix") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) MessagingPrefix() ([32]byte, error) { + return _ContractSFFLTaskManager.Contract.MessagingPrefix(&_ContractSFFLTaskManager.CallOpts) +} + +// MessagingPrefix is a free data retrieval call binding the contract method 0xf89d18bf. +// +// Solidity: function messagingPrefix() view returns(bytes32) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) MessagingPrefix() ([32]byte, error) { + return _ContractSFFLTaskManager.Contract.MessagingPrefix(&_ContractSFFLTaskManager.CallOpts) +} + // NextCheckpointTaskNum is a free data retrieval call binding the contract method 0x2e44b349. // // Solidity: function nextCheckpointTaskNum() view returns(uint32) @@ -1112,7 +1143,7 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) TrySignatu // VerifyMessageInclusionState is a free data retrieval call binding the contract method 0x6fe9b41a. // -// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyMessageInclusionState(opts *bind.CallOpts, message OperatorSetUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { var out []interface{} err := _ContractSFFLTaskManager.contract.Call(opts, &out, "verifyMessageInclusionState", message, taskResponse, proof) @@ -1129,21 +1160,21 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyMessageIncl // VerifyMessageInclusionState is a free data retrieval call binding the contract method 0x6fe9b41a. // -// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) VerifyMessageInclusionState(message OperatorSetUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { return _ContractSFFLTaskManager.Contract.VerifyMessageInclusionState(&_ContractSFFLTaskManager.CallOpts, message, taskResponse, proof) } // VerifyMessageInclusionState is a free data retrieval call binding the contract method 0x6fe9b41a. // -// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint64,uint64,((uint256,uint256),uint128)[]) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) VerifyMessageInclusionState(message OperatorSetUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { return _ContractSFFLTaskManager.Contract.VerifyMessageInclusionState(&_ContractSFFLTaskManager.CallOpts, message, taskResponse, proof) } // VerifyMessageInclusionState0 is a free data retrieval call binding the contract method 0xb98fba4f. // -// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyMessageInclusionState0(opts *bind.CallOpts, message StateRootUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { var out []interface{} err := _ContractSFFLTaskManager.contract.Call(opts, &out, "verifyMessageInclusionState0", message, taskResponse, proof) @@ -1160,18 +1191,80 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyMessageIncl // VerifyMessageInclusionState0 is a free data retrieval call binding the contract method 0xb98fba4f. // -// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) VerifyMessageInclusionState0(message StateRootUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { return _ContractSFFLTaskManager.Contract.VerifyMessageInclusionState0(&_ContractSFFLTaskManager.CallOpts, message, taskResponse, proof) } // VerifyMessageInclusionState0 is a free data retrieval call binding the contract method 0xb98fba4f. // -// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) pure returns(bool) +// Solidity: function verifyMessageInclusionState((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, (uint32,bytes32,bytes32) taskResponse, (bytes32,bytes32,uint256,bytes32[],uint256,bytes32,bytes32) proof) view returns(bool) func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) VerifyMessageInclusionState0(message StateRootUpdateMessage, taskResponse CheckpointTaskResponse, proof SparseMerkleTreeProof) (bool, error) { return _ContractSFFLTaskManager.Contract.VerifyMessageInclusionState0(&_ContractSFFLTaskManager.CallOpts, message, taskResponse, proof) } +// VerifyOperatorSetUpdate is a free data retrieval call binding the contract method 0xf9f4d7f8. +// +// Solidity: function verifyOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyOperatorSetUpdate(opts *bind.CallOpts, message OperatorSetUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + var out []interface{} + err := _ContractSFFLTaskManager.contract.Call(opts, &out, "verifyOperatorSetUpdate", message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VerifyOperatorSetUpdate is a free data retrieval call binding the contract method 0xf9f4d7f8. +// +// Solidity: function verifyOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) VerifyOperatorSetUpdate(message OperatorSetUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + return _ContractSFFLTaskManager.Contract.VerifyOperatorSetUpdate(&_ContractSFFLTaskManager.CallOpts, message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) +} + +// VerifyOperatorSetUpdate is a free data retrieval call binding the contract method 0xf9f4d7f8. +// +// Solidity: function verifyOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) VerifyOperatorSetUpdate(message OperatorSetUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + return _ContractSFFLTaskManager.Contract.VerifyOperatorSetUpdate(&_ContractSFFLTaskManager.CallOpts, message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) +} + +// VerifyStateRootUpdate is a free data retrieval call binding the contract method 0xc5d2e81f. +// +// Solidity: function verifyStateRootUpdate((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) VerifyStateRootUpdate(opts *bind.CallOpts, message StateRootUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + var out []interface{} + err := _ContractSFFLTaskManager.contract.Call(opts, &out, "verifyStateRootUpdate", message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VerifyStateRootUpdate is a free data retrieval call binding the contract method 0xc5d2e81f. +// +// Solidity: function verifyStateRootUpdate((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) VerifyStateRootUpdate(message StateRootUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + return _ContractSFFLTaskManager.Contract.VerifyStateRootUpdate(&_ContractSFFLTaskManager.CallOpts, message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) +} + +// VerifyStateRootUpdate is a free data retrieval call binding the contract method 0xc5d2e81f. +// +// Solidity: function verifyStateRootUpdate((uint32,uint64,uint64,bytes32,bytes32,bytes32) message, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature, uint32 quorumThreshold) view returns(bool) +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) VerifyStateRootUpdate(message StateRootUpdateMessage, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature, quorumThreshold uint32) (bool, error) { + return _ContractSFFLTaskManager.Contract.VerifyStateRootUpdate(&_ContractSFFLTaskManager.CallOpts, message, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature, quorumThreshold) +} + // CreateCheckpointTask is a paid mutator transaction binding the contract method 0xefcf4edb. // // Solidity: function createCheckpointTask(uint64 fromTimestamp, uint64 toTimestamp, uint32 quorumThreshold, bytes quorumNumbers) returns() diff --git a/contracts/evm/script/deploy/devnet/SFFLDeployer.s.sol b/contracts/evm/script/deploy/devnet/SFFLDeployer.s.sol index fee1bea1..d3dfbbf1 100644 --- a/contracts/evm/script/deploy/devnet/SFFLDeployer.s.sol +++ b/contracts/evm/script/deploy/devnet/SFFLDeployer.s.sol @@ -61,6 +61,8 @@ contract SFFLDeployer is Script, Utils { string public constant EIGENLAYER_DEPLOYMENT_FILE = "eigenlayer_deployment_output"; string public constant SFFL_DEPLOYMENT_FILE = "sffl_avs_deployment_output"; + string public constant PROTOCOL_VERSION = "v0.0.1-devnet"; + struct EigenlayerDeployedContracts { IStrategyManager strategyManager; IDelegationManager delegationManager; @@ -314,7 +316,8 @@ contract SFFLDeployer is Script, Utils { abi.encodeWithSignature("initialize(address,address)", sfflCommunityMultisig, sfflPauserReg) ); - sfflTaskManagerImpl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); + sfflTaskManagerImpl = + address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK, address(sfflTaskManager), PROTOCOL_VERSION)); _upgradeProxyAndCall( sfflProxyAdmin, diff --git a/contracts/evm/script/deploy/devnet/SFFLDeployerRollup.s.sol b/contracts/evm/script/deploy/devnet/SFFLDeployerRollup.s.sol index 48368706..03cf63a1 100644 --- a/contracts/evm/script/deploy/devnet/SFFLDeployerRollup.s.sol +++ b/contracts/evm/script/deploy/devnet/SFFLDeployerRollup.s.sol @@ -27,6 +27,10 @@ contract SFFLDeployerRollup is Script, Utils { string public constant SFFL_DEPLOYMENT_FILE = "sffl_rollup_deployment_output"; + string public constant PROTOCOL_VERSION = "v0.0.1-devnet"; + address public constant TASK_MANAGER_ADDR = 0x0E801D84Fa97b50751Dbf25036d067dCf18858bF; + uint256 public constant CHAIN_ID = 31337; + function run() external { address sfflCommunityMultisig = msg.sender; address sfflPauser = msg.sender; @@ -41,7 +45,7 @@ contract SFFLDeployerRollup is Script, Utils { sfflPauserReg = new PauserRegistry(pausers, sfflCommunityMultisig); - sfflRegistryRollupImpl = address(new SFFLRegistryRollup()); + sfflRegistryRollupImpl = address(new SFFLRegistryRollup(PROTOCOL_VERSION, TASK_MANAGER_ADDR, CHAIN_ID)); sfflRegistryRollupProxy = _deployProxy( sfflProxyAdmin, sfflRegistryRollupImpl, diff --git a/contracts/evm/script/deploy/holesky/SFFLDeployer.s.sol b/contracts/evm/script/deploy/holesky/SFFLDeployer.s.sol index 8383d8e4..9b4fe267 100644 --- a/contracts/evm/script/deploy/holesky/SFFLDeployer.s.sol +++ b/contracts/evm/script/deploy/holesky/SFFLDeployer.s.sol @@ -57,6 +57,8 @@ contract SFFLDeployer is Script, Utils { string public constant EIGENLAYER_DEPLOYMENT_FILE = "eigenlayer_deployment_output"; string public constant SFFL_DEPLOYMENT_FILE = "sffl_avs_deployment_output"; + string public constant PROTOCOL_VERSION = "v0.0.1-holesky"; + struct EigenlayerDeployedContracts { IStrategyManager strategyManager; IDelegationManager delegationManager; @@ -271,7 +273,8 @@ contract SFFLDeployer is Script, Utils { abi.encodeWithSignature("initialize(address,address)", sfflCommunityMultisig, sfflPauserReg) ); - sfflTaskManagerImpl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); + sfflTaskManagerImpl = + address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK, address(sfflTaskManager), PROTOCOL_VERSION)); _upgradeProxyAndCall( sfflProxyAdmin, diff --git a/contracts/evm/script/deploy/holesky/SFFLDeployerRollup.s.sol b/contracts/evm/script/deploy/holesky/SFFLDeployerRollup.s.sol index c455dc3b..ad4b9632 100644 --- a/contracts/evm/script/deploy/holesky/SFFLDeployerRollup.s.sol +++ b/contracts/evm/script/deploy/holesky/SFFLDeployerRollup.s.sol @@ -27,6 +27,10 @@ contract SFFLDeployerRollup is Script, Utils { string public constant SFFL_DEPLOYMENT_FILE = "sffl_rollup_deployment_output"; + string public constant PROTOCOL_VERSION = "v0.0.1-holesky"; + address public constant TASK_MANAGER_ADDR = 0x00ee5871e23c7f9C1b99D9eDd1Cf022772a604FD; + uint256 public constant CHAIN_ID = 17000; + function run() external { address sfflCommunityMultisig = msg.sender; address sfflPauser = msg.sender; @@ -41,7 +45,7 @@ contract SFFLDeployerRollup is Script, Utils { sfflPauserReg = new PauserRegistry(pausers, sfflCommunityMultisig); - sfflRegistryRollupImpl = address(new SFFLRegistryRollup()); + sfflRegistryRollupImpl = address(new SFFLRegistryRollup(PROTOCOL_VERSION, TASK_MANAGER_ADDR, CHAIN_ID)); sfflRegistryRollupProxy = _deployProxy( sfflProxyAdmin, sfflRegistryRollupImpl, diff --git a/contracts/evm/script/deploy/holesky/upgrades/SFFLRegistryRollupUpgrader.s.sol b/contracts/evm/script/deploy/holesky/upgrades/SFFLRegistryRollupUpgrader.s.sol index 8eba041d..d5edf8cb 100644 --- a/contracts/evm/script/deploy/holesky/upgrades/SFFLRegistryRollupUpgrader.s.sol +++ b/contracts/evm/script/deploy/holesky/upgrades/SFFLRegistryRollupUpgrader.s.sol @@ -22,12 +22,16 @@ contract SFFLRegistryRollupUpgrader is Script, Utils { string public constant SFFL_DEPLOYMENT_FILE = "sffl_rollup_deployment_output"; + string public constant PROTOCOL_VERSION = "v0.0.1-holesky"; + address public constant TASK_MANAGER_ADDR = 0x00ee5871e23c7f9C1b99D9eDd1Cf022772a604FD; + uint256 public constant CHAIN_ID = 17000; + function run() external { _readSFFLDeployedContracts(); vm.startBroadcast(); - sfflRegistryRollupImpl = address(new SFFLRegistryRollup()); + sfflRegistryRollupImpl = address(new SFFLRegistryRollup(PROTOCOL_VERSION, TASK_MANAGER_ADDR, CHAIN_ID)); sfflProxyAdmin.upgrade(sfflRegistryRollupProxy, sfflRegistryRollupImpl); vm.stopBroadcast(); diff --git a/contracts/evm/src/base/message/OperatorSetUpdate.sol b/contracts/evm/src/base/message/OperatorSetUpdate.sol index d8c77485..c2399cd2 100644 --- a/contracts/evm/src/base/message/OperatorSetUpdate.sol +++ b/contracts/evm/src/base/message/OperatorSetUpdate.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.12; import {RollupOperators} from "../utils/RollupOperators.sol"; +import {MessageHashing} from "../utils/MessageHashing.sol"; /** * @title SFFL operator set update message library @@ -18,24 +19,26 @@ library OperatorSetUpdate { RollupOperators.Operator[] operators; } - bytes32 internal constant OPERATOR_SET_UPDATE_HASH_PREFIX = keccak256("SFFL::OperatorSetUpdateMessage"); + bytes32 internal constant MESSAGE_NAME = keccak256("OperatorSetUpdateMessage"); /** * @notice Hashes an operator set update message * @param message Message structured data + * @param messagingPrefix Messaging prefix * @return Message hash */ - function hashCalldata(Message calldata message) internal pure returns (bytes32) { - return keccak256(abi.encode(OPERATOR_SET_UPDATE_HASH_PREFIX, keccak256(abi.encode(message)))); + function hashCalldata(Message calldata message, bytes32 messagingPrefix) internal pure returns (bytes32) { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(message))); } /** * @notice Hashes an operator set update message * @param message Message structured data + * @param messagingPrefix Messaging prefix * @return Message hash */ - function hash(Message memory message) internal pure returns (bytes32) { - return keccak256(abi.encode(OPERATOR_SET_UPDATE_HASH_PREFIX, keccak256(abi.encode(message)))); + function hash(Message memory message, bytes32 messagingPrefix) internal pure returns (bytes32) { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(message))); } /** diff --git a/contracts/evm/src/base/message/StateRootUpdate.sol b/contracts/evm/src/base/message/StateRootUpdate.sol index 907453d6..f5f20d87 100644 --- a/contracts/evm/src/base/message/StateRootUpdate.sol +++ b/contracts/evm/src/base/message/StateRootUpdate.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.12; +import {MessageHashing} from "../utils/MessageHashing.sol"; + /** * @title SFFL state root update message library * @notice Represents the message passed to update state roots in various @@ -23,24 +25,26 @@ library StateRootUpdate { bytes32 stateRoot; } - bytes32 internal constant STATE_ROOT_UPDATE_HASH_PREFIX = keccak256("SFFL::StateRootUpdateMessage"); + bytes32 internal constant MESSAGE_NAME = keccak256("StateRootUpdateMessage"); /** * @notice Hashes a state root update message * @param message Message structured data + * @param messagingPrefix Messaging prefix * @return Message hash */ - function hashCalldata(Message calldata message) internal pure returns (bytes32) { - return keccak256(abi.encode(STATE_ROOT_UPDATE_HASH_PREFIX, keccak256(abi.encode(message)))); + function hashCalldata(Message calldata message, bytes32 messagingPrefix) internal pure returns (bytes32) { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(message))); } /** * @notice Hashes a state root update message * @param message Message structured data + * @param messagingPrefix Messaging prefix * @return Message hash */ - function hash(Message memory message) internal pure returns (bytes32) { - return keccak256(abi.encode(STATE_ROOT_UPDATE_HASH_PREFIX, keccak256(abi.encode(message)))); + function hash(Message memory message, bytes32 messagingPrefix) internal pure returns (bytes32) { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(message))); } /** diff --git a/contracts/evm/src/base/utils/MessageHashing.sol b/contracts/evm/src/base/utils/MessageHashing.sol new file mode 100644 index 00000000..f278323d --- /dev/null +++ b/contracts/evm/src/base/utils/MessageHashing.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +/** + * @title Message hashing utilities + * @notice In SFFL, we define a message or task hash in a similar fashion to + * EIP712, though not the same. Since messages need to be passed around + * multiple rollups and possibly verified in different contracts, it + * wouldn't make sense to match a verifier contract or chain ID. + * Instead, we define a simpler prefix that can be used to hash a message + * while still allowing the specification of deployment-specific data. + */ +library MessageHashing { + bytes32 private constant TYPE_HASH = + keccak256("SFFLMessagingPrefix(string version,address taskManager,uint256 chainId)"); + + function buildMessagingPrefix(string memory version, address taskManager, uint256 chainId) + internal + pure + returns (bytes32) + { + return keccak256(abi.encodePacked(TYPE_HASH, keccak256(bytes(version)), taskManager, chainId)); + } + + function hashMessage(bytes32 messagingPrefix, bytes32 messageName, bytes32 messageHash) + internal + pure + returns (bytes32 value) + { + return keccak256(abi.encodePacked(messagingPrefix, messageName, messageHash)); + } +} diff --git a/contracts/evm/src/eth/SFFLServiceManager.sol b/contracts/evm/src/eth/SFFLServiceManager.sol index 4be5e58f..a7f29b54 100644 --- a/contracts/evm/src/eth/SFFLServiceManager.sol +++ b/contracts/evm/src/eth/SFFLServiceManager.sol @@ -135,14 +135,12 @@ contract SFFLServiceManager is SFFLRegistryBase, ServiceManagerBase, Pausable { StateRootUpdate.Message calldata message, IBLSSignatureChecker.NonSignerStakesAndSignature calldata nonSignerStakesAndSignature ) internal view returns (bool) { - (bool success,) = taskManager.checkQuorum( - message.hashCalldata(), + return taskManager.verifyStateRootUpdate( + message, hex"00", uint32(block.number - 1), nonSignerStakesAndSignature, 2 * taskManager.THRESHOLD_DENOMINATOR() / 3 ); - - return success; } } diff --git a/contracts/evm/src/eth/SFFLTaskManager.sol b/contracts/evm/src/eth/SFFLTaskManager.sol index 63f9d18f..a733d341 100644 --- a/contracts/evm/src/eth/SFFLTaskManager.sol +++ b/contracts/evm/src/eth/SFFLTaskManager.sol @@ -10,6 +10,7 @@ import {IPauserRegistry} from "@eigenlayer/contracts/interfaces/IPauserRegistry. import {IRegistryCoordinator} from "eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {BN254} from "eigenlayer-middleware/src/libraries/BN254.sol"; +import {MessageHashing} from "../base/utils/MessageHashing.sol"; import {StateRootUpdate} from "../base/message/StateRootUpdate.sol"; import {OperatorSetUpdate} from "../base/message/OperatorSetUpdate.sol"; import {SparseMerkleTree} from "./utils/SparseMerkleTree.sol"; @@ -56,6 +57,11 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign */ uint8 public constant PAUSED_CHALLENGE_CHECKPOINT_TASK = 2; + /** + * @notice Messaging prefix + */ + bytes32 public immutable messagingPrefix; + /** * @notice Next checkpoint task number */ @@ -123,10 +129,11 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign _; } - constructor(IRegistryCoordinator registryCoordinator, uint32 taskResponseWindowBlock) + constructor(IRegistryCoordinator registryCoordinator, uint32 taskResponseWindowBlock, address proxyAddress, string memory version) BLSSignatureChecker(registryCoordinator) { TASK_RESPONSE_WINDOW_BLOCK = taskResponseWindowBlock; + messagingPrefix = MessageHashing.buildMessagingPrefix(version, proxyAddress, block.chainid); _disableInitializers(); } @@ -206,7 +213,7 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign require(allCheckpointTaskResponses[taskResponse.referenceTaskIndex] == bytes32(0), "Task already responded"); require(uint32(block.number) <= taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, "Response time exceeded"); - bytes32 messageHash = taskResponse.hashCalldata(); + bytes32 messageHash = taskResponse.hashCalldata(messagingPrefix); (bool success, bytes32 hashOfNonSigners) = checkQuorum(messageHash, quorumNumbers, taskCreatedBlock, nonSignerStakesAndSignature, quorumThreshold); @@ -290,11 +297,11 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign StateRootUpdate.Message calldata message, Checkpoint.TaskResponse calldata taskResponse, SparseMerkleTree.Proof calldata proof - ) public pure returns (bool) { + ) public view returns (bool) { require(proof.key == message.indexCalldata(), "Wrong message index"); require(SparseMerkleTree.verifyProof(taskResponse.stateRootUpdatesRoot, proof), "Invalid SMT proof"); - bool isInclusionProof = proof.value == message.hashCalldata(); + bool isInclusionProof = proof.value == message.hashCalldata(messagingPrefix); return isInclusionProof; } @@ -312,11 +319,11 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign OperatorSetUpdate.Message calldata message, Checkpoint.TaskResponse calldata taskResponse, SparseMerkleTree.Proof calldata proof - ) public pure returns (bool) { + ) public view returns (bool) { require(proof.key == message.indexCalldata(), "Wrong message index"); require(SparseMerkleTree.verifyProof(taskResponse.operatorSetUpdatesRoot, proof), "Invalid SMT proof"); - bool isInclusionProof = proof.value == message.hashCalldata(); + bool isInclusionProof = proof.value == message.hashCalldata(messagingPrefix); return isInclusionProof; } @@ -353,6 +360,60 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign return (true, hashOfNonSigners); } + /** + * @notice Verifies whether the quorum for a state root update message was met + * @param message State root update message + * @param quorumNumbers Byte array of byte numbers + * @param referenceBlockNumber Reference block number for the operator set + * @param nonSignerStakesAndSignature Agreement signature info + * @param quorumThreshold Necessary quorum, based on THRESHOLD_DENOMINATOR + * @return Whether the voting passed quorum or not + */ + function verifyStateRootUpdate( + StateRootUpdate.Message calldata message, + bytes calldata quorumNumbers, + uint32 referenceBlockNumber, + NonSignerStakesAndSignature memory nonSignerStakesAndSignature, + uint32 quorumThreshold + ) public view returns (bool) { + (bool success,) = checkQuorum( + message.hashCalldata(messagingPrefix), + quorumNumbers, + referenceBlockNumber, + nonSignerStakesAndSignature, + quorumThreshold + ); + + return success; + } + + /** + * @notice Verifies whether the quorum for a state root update message was met + * @param message State root update message + * @param quorumNumbers Byte array of byte numbers + * @param referenceBlockNumber Reference block number for the operator set + * @param nonSignerStakesAndSignature Agreement signature info + * @param quorumThreshold Necessary quorum, based on THRESHOLD_DENOMINATOR + * @return Whether the voting passed quorum or not + */ + function verifyOperatorSetUpdate( + OperatorSetUpdate.Message calldata message, + bytes calldata quorumNumbers, + uint32 referenceBlockNumber, + NonSignerStakesAndSignature memory nonSignerStakesAndSignature, + uint32 quorumThreshold + ) public view returns (bool) { + (bool success,) = checkQuorum( + message.hashCalldata(messagingPrefix), + quorumNumbers, + referenceBlockNumber, + nonSignerStakesAndSignature, + quorumThreshold + ); + + return success; + } + function _validateChallenge( Checkpoint.Task calldata, /* task */ Checkpoint.TaskResponse calldata /* taskResponse */ diff --git a/contracts/evm/src/eth/task/Checkpoint.sol b/contracts/evm/src/eth/task/Checkpoint.sol index 63ce17fa..d574ef96 100644 --- a/contracts/evm/src/eth/task/Checkpoint.sol +++ b/contracts/evm/src/eth/task/Checkpoint.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.12; +import {MessageHashing} from "../../base/utils/MessageHashing.sol"; + /** * @title Checkpoint task librrary * @notice Represents checkpoint contents and related utilities @@ -31,7 +33,7 @@ library Checkpoint { bytes32 hashOfNonSigners; } - bytes32 internal constant TASK_RESPONSE_HASH_PREFIX = keccak256("SFFL::CheckpointTaskResponse"); + bytes32 internal constant MESSAGE_NAME = keccak256("CheckpointTaskResponse"); /** * @notice Hashes a checkpoint task (submission) @@ -54,19 +56,25 @@ library Checkpoint { /** * @notice Hashes a checkpoint task response * @param taskResponse Checkpoint task response structured data + * @param messagingPrefix Messaging prefix * @return Task response hash */ - function hash(TaskResponse memory taskResponse) internal pure returns (bytes32) { - return keccak256(abi.encode(TASK_RESPONSE_HASH_PREFIX, keccak256(abi.encode(taskResponse)))); + function hash(TaskResponse memory taskResponse, bytes32 messagingPrefix) internal pure returns (bytes32) { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(taskResponse))); } /** * @notice Hashes a checkpoint task response * @param taskResponse Checkpoint task response structured data + * @param messagingPrefix Messaging prefix * @return Task response hash */ - function hashCalldata(TaskResponse calldata taskResponse) internal pure returns (bytes32) { - return keccak256(abi.encode(TASK_RESPONSE_HASH_PREFIX, keccak256(abi.encode(taskResponse)))); + function hashCalldata(TaskResponse calldata taskResponse, bytes32 messagingPrefix) + internal + pure + returns (bytes32) + { + return MessageHashing.hashMessage(messagingPrefix, MESSAGE_NAME, keccak256(abi.encode(taskResponse))); } /** diff --git a/contracts/evm/src/external/RegistryCoordinator.sol b/contracts/evm/src/external/RegistryCoordinator.sol index 15d9f288..88dcd1b2 100644 --- a/contracts/evm/src/external/RegistryCoordinator.sol +++ b/contracts/evm/src/external/RegistryCoordinator.sol @@ -434,7 +434,6 @@ contract RegistryCoordinator is * INTERNAL FUNCTIONS * */ - struct RegisterResults { uint32[] numOperatorsPerQuorum; uint96[] operatorStakes; diff --git a/contracts/evm/src/rollup/SFFLRegistryRollup.sol b/contracts/evm/src/rollup/SFFLRegistryRollup.sol index cd9edea5..838b778d 100644 --- a/contracts/evm/src/rollup/SFFLRegistryRollup.sol +++ b/contracts/evm/src/rollup/SFFLRegistryRollup.sol @@ -12,6 +12,7 @@ import {SFFLRegistryBase} from "../base/SFFLRegistryBase.sol"; import {StateRootUpdate} from "../base/message/StateRootUpdate.sol"; import {OperatorSetUpdate} from "../base/message/OperatorSetUpdate.sol"; import {RollupOperators} from "../base/utils/RollupOperators.sol"; +import {MessageHashing} from "../base/utils/MessageHashing.sol"; /** * @title SFFL registry for rollups / external networks @@ -36,6 +37,11 @@ contract SFFLRegistryRollup is Initializable, OwnableUpgradeable, Pausable, SFFL */ uint8 public constant PAUSED_UPDATE_STATE_ROOT = 1; + /** + * @notice Messaging prefix + */ + bytes32 public immutable messagingPrefix; + /** * @dev Operator set used for agreements */ @@ -56,7 +62,9 @@ contract SFFLRegistryRollup is Initializable, OwnableUpgradeable, Pausable, SFFL _; } - constructor() { + constructor(string memory version, address taskManager, uint256 chainId) { + messagingPrefix = MessageHashing.buildMessagingPrefix(version, taskManager, chainId); + _disableInitializers(); } @@ -105,7 +113,7 @@ contract SFFLRegistryRollup is Initializable, OwnableUpgradeable, Pausable, SFFL RollupOperators.SignatureInfo calldata signatureInfo ) external onlyWhenNotPaused(PAUSED_UPDATE_OPERATOR_SET) { require(message.id == nextOperatorUpdateId, "Wrong message ID"); - require(_operatorSet.verifyCalldata(message.hashCalldata(), signatureInfo), "Quorum not met"); + require(_operatorSet.verifyCalldata(message.hashCalldata(messagingPrefix), signatureInfo), "Quorum not met"); nextOperatorUpdateId = message.id + 1; @@ -122,7 +130,7 @@ contract SFFLRegistryRollup is Initializable, OwnableUpgradeable, Pausable, SFFL StateRootUpdate.Message calldata message, RollupOperators.SignatureInfo calldata signatureInfo ) public onlyWhenNotPaused(PAUSED_UPDATE_STATE_ROOT) { - require(_operatorSet.verifyCalldata(message.hashCalldata(), signatureInfo), "Quorum not met"); + require(_operatorSet.verifyCalldata(message.hashCalldata(messagingPrefix), signatureInfo), "Quorum not met"); _pushStateRoot(message.rollupId, message.blockHeight, message.stateRoot); } diff --git a/contracts/evm/test/SFFLRegistryRollup.t.sol b/contracts/evm/test/SFFLRegistryRollup.t.sol index 74c8aa5f..12418c73 100644 --- a/contracts/evm/test/SFFLRegistryRollup.t.sol +++ b/contracts/evm/test/SFFLRegistryRollup.t.sol @@ -25,6 +25,11 @@ contract SFFLRegistryRollupTest is TestUtils { uint128 public constant DEFAULT_WEIGHT = 100; uint128 public QUORUM_THRESHOLD = 2 * uint128(100) / 3; + string public constant PROTOCOL_VERSION = "v0.0.1-test"; + address public constant TASK_MANAGER_ADDR = address(0); + uint256 public constant CHAIN_ID = 0; + bytes32 public messagingPrefix; + event StateRootUpdated(uint32 indexed rollupId, uint64 indexed blockHeight, bytes32 stateRoot); event OperatorUpdated(bytes32 indexed pubkeyHash, uint128 weight); event QuorumThresholdUpdated(uint128 indexed newQuorumThreshold); @@ -88,7 +93,7 @@ contract SFFLRegistryRollupTest is TestUtils { registry = SFFLRegistryRollup( deployProxy( - address(new SFFLRegistryRollup()), + address(new SFFLRegistryRollup(PROTOCOL_VERSION, TASK_MANAGER_ADDR, CHAIN_ID)), addr("proxyAdmin"), abi.encodeWithSelector( registry.initialize.selector, QUORUM_THRESHOLD, addr("owner"), addr("aggregator"), pauserRegistry @@ -98,6 +103,8 @@ contract SFFLRegistryRollupTest is TestUtils { vm.prank(addr("aggregator")); registry.setInitialOperatorSet(initialOperators, 1); + + messagingPrefix = registry.messagingPrefix(); } function test_setUp() public { @@ -137,7 +144,7 @@ contract SFFLRegistryRollupTest is TestUtils { 2630500117064331827715800222355515273572786883080373379723474133051328147838 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 6305737925830641523797682626723526790077499630761662964405387941160208990354 ) }); @@ -191,7 +198,7 @@ contract SFFLRegistryRollupTest is TestUtils { 19066719044691333956823624407701006018002836358629451345855468619321548553433 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 10871270083209376487778842013958292562863808577713565975978123572762179443915 ) }); @@ -227,7 +234,7 @@ contract SFFLRegistryRollupTest is TestUtils { 19066719044691333956823624407701006018002836358629451345855468619321548553433 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 10871270083209376487778842013958292562863808577713565975978123572762179443915 ) }); @@ -256,7 +263,7 @@ contract SFFLRegistryRollupTest is TestUtils { 2630500117064331827715800222355515273572786883080373379723474133051328147838 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 6305737925830641523797682626723526790077499630761662964405387941160208990354 ) }); @@ -291,7 +298,7 @@ contract SFFLRegistryRollupTest is TestUtils { 19066719044691333956823624407701006018002836358629451345855468619321548553433 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 10871270083209376487778842013958292562863808577713565975978123572762179443915 ) }); @@ -356,7 +363,7 @@ contract SFFLRegistryRollupTest is TestUtils { 2630500117064331827715800222355515273572786883080373379723474133051328147838 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 6305737925830641523797682626723526790077499630761662964405387941160208990354 ) }); @@ -390,7 +397,7 @@ contract SFFLRegistryRollupTest is TestUtils { 2630500117064331827715800222355515273572786883080373379723474133051328147838 ] ), - sigma: BN254.hashToG1(message.hash()).scalar_mul( + sigma: BN254.hashToG1(message.hash(messagingPrefix)).scalar_mul( 6305737925830641523797682626723526790077499630761662964405387941160208990354 ) }); diff --git a/contracts/evm/test/SFFLServiceManager.t.sol b/contracts/evm/test/SFFLServiceManager.t.sol index e9256801..4d0ec1d2 100644 --- a/contracts/evm/test/SFFLServiceManager.t.sol +++ b/contracts/evm/test/SFFLServiceManager.t.sol @@ -8,6 +8,7 @@ import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transpa import {BLSMockAVSDeployer} from "eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; import {BN254} from "eigenlayer-middleware/src/libraries/BN254.sol"; import {ServiceManagerBase} from "eigenlayer-middleware/src/ServiceManagerBase.sol"; +import {EmptyContract} from "@eigenlayer/test/mocks/EmptyContract.sol"; import {IRegistryCoordinator} from "eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {IBLSSignatureChecker} from "eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol"; import {IAVSDirectory} from "@eigenlayer/contracts/interfaces/IAVSDirectory.sol"; @@ -59,6 +60,9 @@ contract SFFLServiceManagerTest is TestUtils { address public serviceManagerOwner = address(uint160(uint256(keccak256("serviceManagerOwner")))); uint32 public constant TASK_RESPONSE_WINDOW_BLOCK = 30; + string public constant PROTOCOL_VERSION = "v0.0.1-test"; + bytes32 public messagingPrefix; + address public aggregator; address public generator; uint256 public thresholdDenominator; @@ -69,15 +73,22 @@ contract SFFLServiceManagerTest is TestUtils { aggregator = addr("aggregator"); generator = addr("generator"); - address impl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); - taskManager = SFFLTaskManager( deployProxy( - impl, + address(new EmptyContract()), address(proxyAdmin), - abi.encodeWithSelector( - taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator - ) + hex"" + ) + ); + + address impl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK, address(taskManager), PROTOCOL_VERSION)); + + vm.prank(proxyAdminOwner); + proxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(taskManager))), + impl, + abi.encodeWithSelector( + taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator ) ); @@ -109,6 +120,7 @@ contract SFFLServiceManagerTest is TestUtils { vm.label(address(serviceManager), "serviceManagerProxy"); thresholdDenominator = taskManager.THRESHOLD_DENOMINATOR(); + messagingPrefix = taskManager.messagingPrefix(); } function test_updateStateRoot() public { @@ -122,7 +134,7 @@ contract SFFLServiceManagerTest is TestUtils { }); (, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature) = - setUpOperators(message.hash(), 999, 1000, 100, 1); + setUpOperators(message.hash(messagingPrefix), 999, 1000, 100, 1); vm.expectEmit(true, true, false, true); emit StateRootUpdated(message.rollupId, message.blockHeight, message.stateRoot); @@ -146,7 +158,7 @@ contract SFFLServiceManagerTest is TestUtils { }); (, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature) = - setUpOperators(message.hash(), 999, 1000, 100, maxOperatorsToRegister / 2); + setUpOperators(message.hash(messagingPrefix), 999, 1000, 100, maxOperatorsToRegister / 2); vm.expectRevert("Quorum not met"); @@ -170,7 +182,7 @@ contract SFFLServiceManagerTest is TestUtils { }); (, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature) = - setUpOperators(message.hash(), 999, 1000, 100, 1); + setUpOperators(message.hash(messagingPrefix), 999, 1000, 100, 1); vm.expectRevert("Pausable: index is paused"); diff --git a/contracts/evm/test/SFFLTaskManager.t.sol b/contracts/evm/test/SFFLTaskManager.t.sol index 5a96f01e..ea955f2e 100644 --- a/contracts/evm/test/SFFLTaskManager.t.sol +++ b/contracts/evm/test/SFFLTaskManager.t.sol @@ -3,7 +3,10 @@ pragma solidity ^0.8.12; import {Test, console2} from "forge-std/Test.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + import {BLSMockAVSDeployer} from "eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; +import {EmptyContract} from "@eigenlayer/test/mocks/EmptyContract.sol"; import {BN254} from "eigenlayer-middleware/src/libraries/BN254.sol"; import {IRegistryCoordinator} from "eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {IBLSSignatureChecker} from "eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol"; @@ -17,8 +20,8 @@ import {OperatorSetUpdate, RollupOperators} from "../src/base/message/OperatorSe import {TestUtils} from "./utils/TestUtils.sol"; contract SFFLTaskManagerHarness is SFFLTaskManager { - constructor(IRegistryCoordinator registryCoordinator, uint32 taskResponseWindowBlock) - SFFLTaskManager(registryCoordinator, taskResponseWindowBlock) + constructor(IRegistryCoordinator registryCoordinator, uint32 taskResponseWindowBlock, address proxyAddress, string memory version) + SFFLTaskManager(registryCoordinator, taskResponseWindowBlock, proxyAddress, version) {} function setLastCheckpointToTimestamp(uint64 timestamp) public { @@ -40,6 +43,9 @@ contract SFFLTaskManagerTest is TestUtils { address public generator; uint32 public thresholdDenominator; + string public constant PROTOCOL_VERSION = "v0.0.1-test"; + bytes32 public messagingPrefix; + event CheckpointTaskCreated(uint32 indexed taskIndex, Checkpoint.Task task); event CheckpointTaskResponded( Checkpoint.TaskResponse taskResponse, Checkpoint.TaskResponseMetadata taskResponseMetadata @@ -53,15 +59,22 @@ contract SFFLTaskManagerTest is TestUtils { aggregator = addr("aggregator"); generator = addr("generator"); - address impl = address(new SFFLTaskManagerHarness(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); - taskManager = SFFLTaskManagerHarness( deployProxy( - impl, + address(new EmptyContract()), address(proxyAdmin), - abi.encodeWithSelector( - taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator - ) + hex"" + ) + ); + + address impl = address(new SFFLTaskManagerHarness(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK, address(taskManager), PROTOCOL_VERSION)); + + vm.prank(proxyAdminOwner); + proxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(taskManager))), + impl, + abi.encodeWithSelector( + taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator ) ); @@ -69,6 +82,7 @@ contract SFFLTaskManagerTest is TestUtils { vm.label(address(taskManager), "taskManagerProxy"); thresholdDenominator = taskManager.THRESHOLD_DENOMINATOR(); + messagingPrefix = taskManager.messagingPrefix(); } function test_createCheckpointTask_RevertWhen_CallerNotTaskGenerator() public { @@ -213,7 +227,7 @@ contract SFFLTaskManagerTest is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperators(taskResponse.hash(), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); + ) = setUpOperators(taskResponse.hash(messagingPrefix), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -282,7 +296,7 @@ contract SFFLTaskManagerTest is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperators(taskResponse.hash(), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); + ) = setUpOperators(taskResponse.hash(messagingPrefix), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -320,7 +334,7 @@ contract SFFLTaskManagerTest is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperators(taskResponse.hash(), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); + ) = setUpOperators(taskResponse.hash(messagingPrefix), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -361,7 +375,7 @@ contract SFFLTaskManagerTest is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperators(taskResponse.hash(), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); + ) = setUpOperators(taskResponse.hash(messagingPrefix), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK + 1, @@ -399,7 +413,7 @@ contract SFFLTaskManagerTest is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperators(taskResponse.hash(), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); + ) = setUpOperators(taskResponse.hash(messagingPrefix), task.taskCreatedBlock - 1, task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -445,29 +459,29 @@ contract SFFLTaskManagerTest is TestUtils { StateRootUpdate.Message memory message = StateRootUpdate.Message({ rollupId: 10000, blockHeight: 10001, - timestamp: 10002, + timestamp: 0, stateRoot: bytes32(0), nearDaTransactionId: bytes32(0), nearDaCommitment: bytes32(0) }); - bytes32[] memory sideNodes = new bytes32[](14); + bytes32[] memory sideNodes = new bytes32[](11); - sideNodes[0] = 0xa0286b7cb830ed21a1a2189ee78ba381f6873fe4ccc22d539ab255248edf693e; - sideNodes[1] = 0x7e3cd0e7384e5a7067756b7e28b7efa849e4aaf12a1bdcb24c0ca5cbcaad8cd9; - sideNodes[2] = 0x7630a1cb55f8f353927b18d3a753089c204bc99cef47e3c16d1b2cbaf7c2d036; - sideNodes[3] = 0x3858f0f8dcfd0d3129bcff66835a6fdbf8e24afc615e8f444f467bdc232643ec; - sideNodes[4] = 0xa0639833727ebd631b230b6ac1b1420358df10de7c080c142bc3f86281c4b5a9; - sideNodes[5] = 0x8dae5c1cba3b325a7a5c1469dbd1e0dfb61c73a7ed3800b0792abc95f6225795; - sideNodes[6] = 0x0e19b18097d957f6d96dfaf452417300fec1044004d00eeae251e5e53ba7898f; - sideNodes[7] = 0x77a64d95442ac067e77c91ba17cd5e7e56846eb7b82569d428b5fbbffdfffbc2; - sideNodes[8] = 0xe29c7de383621e49406c7072ea1a4278f557729e666e679169946272532d6b8c; - sideNodes[9] = 0xbc1812f22537be7471527f0521a68b83afefaff574e84791ac70a05eff31e579; - sideNodes[10] = 0x72abfb17637bf5469c09dc4ab46565d0152bebd10e2bcf37b336028613cfb33c; + sideNodes[0] = 0x41068c6e012a5b833354334a534d73323e6680e4d2948fe55a8484b902e3310f; + sideNodes[1] = 0x13bc269f62af981aa54128fdd74842598a211d274ba60aed85f86794a0447b7d; + sideNodes[2] = 0x31b639a213c85a53c9f34f81a591ebaaf3ec1eba88444474ec14211ac5646554; + sideNodes[3] = 0x6ee2441a440879cb27c8654d68fa8926f5dcdceef594f86c4a92d4f6ca0a5a13; + sideNodes[4] = 0x9082960ae9f30fc3deb0be52e07ccad20418b9e81e0eea3f103c4fc2e03a7972; + sideNodes[5] = 0xcecb15684184e64473d224f57a5a430f7c77e9db5853704eaa50fd88fb365392; + sideNodes[6] = 0xface2bc6282511b36e8efc853876715f2cb1c79061d2e1f1c3f8baebe04f42c6; + sideNodes[7] = 0x4aa837b278f90fc84c2dc3d84214b8bb1f2bea1f9fef73518f0b521a768e3acb; + sideNodes[8] = 0x81a2e875c910299d52ffc8373aa64c9ef5f74e465dcfb5c6cdfbf3a5f57538a4; + sideNodes[9] = 0x9ee0b767f08e95241b312935c4cb44f42dca7e254f3b7e7d7eb5bea26efaf12e; + sideNodes[10] = 0x8877ecc7348f7d7ea4d9888ff300565b00abc85736a2406501e9ce3fcbd40cb7; SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ key: message.index(), - value: message.hash(), + value: message.hash(messagingPrefix), bitMask: 12, sideNodes: sideNodes, numSideNodes: 13, @@ -477,7 +491,7 @@ contract SFFLTaskManagerTest is TestUtils { Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ referenceTaskIndex: 0, - stateRootUpdatesRoot: 0x60a11596701d4c4806d5585a092192f4773197ee4819f4b0fad16b071970e3c8, + stateRootUpdatesRoot: 0x704ac96a830d7d5a6e9de8bc5d5baa97a8920cae2e6b760cedf011a5894057a7, operatorSetUpdatesRoot: keccak256(hex"f00d") }); @@ -680,7 +694,7 @@ contract SFFLTaskManagerTest is TestUtils { sideNodes: sideNodes, numSideNodes: 13, nonMembershipLeafPath: keccak256(abi.encodePacked(message.index())), - nonMembershipLeafValue: message.hash() + nonMembershipLeafValue: message.hash(messagingPrefix) }); Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ @@ -696,25 +710,28 @@ contract SFFLTaskManagerTest is TestUtils { function test_verifyMessageInclusionState_operatorSetUpdate_Inclusion() public { RollupOperators.Operator[] memory operators = new RollupOperators.Operator[](0); OperatorSetUpdate.Message memory message = - OperatorSetUpdate.Message({id: 0, timestamp: 1, operators: operators}); - - bytes32[] memory sideNodes = new bytes32[](9); - sideNodes[0] = 0xfb6698c46f574262f6ebf78c364ee4062713b4736272dd4accdfd00062af13f1; - sideNodes[1] = 0x5592d260430874768f71103d707880731e6bc4856eb6cba7823dd42088814876; - sideNodes[2] = 0xebee5d31739018590231f08764a35919e9d434aa41ece6267999c608c925961c; - sideNodes[3] = 0x08dca9669f5189255649692a9049a77d362f611c937c05a94197aa653bd30908; - sideNodes[4] = 0x3e8bb9029380067c6df6824b876c67f1e490bf95372d0544a9bdcc790c0cba90; - sideNodes[5] = 0xc9bf81cc84cc3a173d45be52de08d757126c97535f290f84930cc42510e5d90e; - sideNodes[6] = 0xcc0dc57fdc5130c33bdd6779ec3ad71252863681510701b5544b05e822e509b2; - sideNodes[7] = 0xc02f223854592783e7b9b1a3f79fa14d29491a0d9a6783bcb1c9a3dac44c8906; - sideNodes[8] = 0xe290d048070c4c99c6d56638f5d002d3aa7a91655cae56dfbf046612f6301e55; + OperatorSetUpdate.Message({id: 10000, timestamp: 10001, operators: operators}); + + bytes32[] memory sideNodes = new bytes32[](12); + sideNodes[0] = 0xa4babef2607ae50f03fcb1c020667a441fa46fd4cf0567327080315b9a200e54; + sideNodes[1] = 0x0695c40bd576261ead04f4eacee9d7a7e2e39fccdb7467b6570d53b33222565b; + sideNodes[2] = 0x59401a7315bf6c4d9501a15fd2416ebbdef46fc9caa6d6c4aa24f12cc8dc0928; + sideNodes[3] = 0xe96b71d1ce264d029b01d8d70b1b2f3e0345b98408aa358f0bf10b354fcad12c; + sideNodes[4] = 0xbdda57e16bf62ac534733baef85cd558d954cf7f6405704b465e567dff6f4850; + sideNodes[5] = 0x9defe7a0ad0b15a564dfd4efb49cbbae0590e114fe84a43de9baec62b2f34891; + sideNodes[6] = 0xd7ce5c239568957864b8ed687a71328729842a95438cb0afd38400eb19ea45d3; + sideNodes[7] = 0x55d4ef1b3c9a6d9faa031d41a80338ff9d97d4b426354255790f05bd45e3a417; + sideNodes[8] = 0x450bbffc6246557a09cd2deee322b7f71e89dcf6829eb83cebb7a08be95c495c; + sideNodes[9] = 0x113345a715e96e5f407eb9f9e6c2aa3d0870e32a098f496cad2764b4afcc94a6; + sideNodes[10] = 0x96db72f9bd7d99a3d30292e25e70c25198782f76453a2e45c23fc348791f24ad; + sideNodes[11] = 0x67628528a35222ce74a12f45f5f20c3fba606d788f794d363169c6595bd2f047; SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ key: message.index(), - value: message.hash(), + value: message.hash(messagingPrefix), bitMask: 0, sideNodes: sideNodes, - numSideNodes: 9, + numSideNodes: 12, nonMembershipLeafPath: bytes32(0), nonMembershipLeafValue: bytes32(0) }); @@ -722,7 +739,7 @@ contract SFFLTaskManagerTest is TestUtils { Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ referenceTaskIndex: 0, stateRootUpdatesRoot: keccak256(hex"beef"), - operatorSetUpdatesRoot: 0x28d5b47b9e30188a9cb2ece12a42ce864e7f818775ef5ca62d2691411580d428 + operatorSetUpdatesRoot: 0x5bfa4261ea7f3d6af682cdf38038e917d66443ed573f62e1a556431c6545a543 }); assertTrue(taskManager.verifyMessageInclusionState(message, taskResponse, proof)); @@ -822,7 +839,7 @@ contract SFFLTaskManagerTest is TestUtils { SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ key: bytes32(0), - value: message.hash(), + value: message.hash(messagingPrefix), bitMask: 30, sideNodes: sideNodes, numSideNodes: 13, @@ -849,7 +866,7 @@ contract SFFLTaskManagerTest is TestUtils { SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ key: message.index(), - value: message.hash(), + value: message.hash(messagingPrefix), bitMask: 30, sideNodes: emptySideNodes, numSideNodes: 13, @@ -905,7 +922,7 @@ contract SFFLTaskManagerTest is TestUtils { sideNodes: sideNodes, numSideNodes: 13, nonMembershipLeafPath: keccak256(abi.encodePacked(message.index())), - nonMembershipLeafValue: message.hash() + nonMembershipLeafValue: message.hash(messagingPrefix) }); Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ diff --git a/contracts/evm/test/ffi/SFFLTaskManagerFFI.t.sol b/contracts/evm/test/ffi/SFFLTaskManagerFFI.t.sol index 76609c0d..25fd6a3b 100644 --- a/contracts/evm/test/ffi/SFFLTaskManagerFFI.t.sol +++ b/contracts/evm/test/ffi/SFFLTaskManagerFFI.t.sol @@ -3,7 +3,10 @@ pragma solidity ^0.8.12; import {Test, console2} from "forge-std/Test.sol"; +import {ProxyAdmin, TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + import {BLSMockAVSDeployer} from "eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; +import {EmptyContract} from "@eigenlayer/test/mocks/EmptyContract.sol"; import {BN254} from "eigenlayer-middleware/src/libraries/BN254.sol"; import {IRegistryCoordinator} from "eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; import {IBLSSignatureChecker} from "eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol"; @@ -20,6 +23,10 @@ contract SFFLTaskManagerTestFFI is TestUtils { SFFLTaskManager public taskManager; uint32 public constant TASK_RESPONSE_WINDOW_BLOCK = 30; + + string public constant PROTOCOL_VERSION = "v0.0.1-test"; + bytes32 public messagingPrefix; + address public aggregator; address public generator; uint32 public thresholdDenominator; @@ -37,15 +44,22 @@ contract SFFLTaskManagerTestFFI is TestUtils { aggregator = addr("aggregator"); generator = addr("generator"); - address impl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); - taskManager = SFFLTaskManager( deployProxy( - impl, + address(new EmptyContract()), address(proxyAdmin), - abi.encodeWithSelector( - taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator - ) + hex"" + ) + ); + + address impl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK, address(taskManager), PROTOCOL_VERSION)); + + vm.prank(proxyAdminOwner); + proxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(taskManager))), + impl, + abi.encodeWithSelector( + taskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator ) ); @@ -53,6 +67,7 @@ contract SFFLTaskManagerTestFFI is TestUtils { vm.label(address(taskManager), "taskManagerProxy"); thresholdDenominator = taskManager.THRESHOLD_DENOMINATOR(); + messagingPrefix = taskManager.messagingPrefix(); } /// forge-config: default.fuzz.runs = 50 @@ -74,7 +89,7 @@ contract SFFLTaskManagerTestFFI is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperatorsFFI(taskResponse.hash(), task.taskCreatedBlock, seed, 1); + ) = setUpOperatorsFFI(taskResponse.hash(messagingPrefix), task.taskCreatedBlock, seed, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -120,7 +135,7 @@ contract SFFLTaskManagerTestFFI is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperatorsFFI(taskResponse.hash(), task.taskCreatedBlock, seed, numNonSigners); + ) = setUpOperatorsFFI(taskResponse.hash(messagingPrefix), task.taskCreatedBlock, seed, numNonSigners); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -158,7 +173,7 @@ contract SFFLTaskManagerTestFFI is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperatorsFFI(taskResponse.hash(), task.taskCreatedBlock, 100, 1); + ) = setUpOperatorsFFI(taskResponse.hash(messagingPrefix), task.taskCreatedBlock, 100, 1); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, @@ -199,7 +214,7 @@ contract SFFLTaskManagerTestFFI is TestUtils { ( bytes32 signatoryRecordHash, IBLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) = setUpOperatorsFFI(taskResponse.hash(), task.taskCreatedBlock, 100, 2); + ) = setUpOperatorsFFI(taskResponse.hash(messagingPrefix), task.taskCreatedBlock, 100, 2); Checkpoint.TaskResponseMetadata memory taskResponseMetadata = Checkpoint.TaskResponseMetadata({ taskRespondedBlock: task.taskCreatedBlock + TASK_RESPONSE_WINDOW_BLOCK, diff --git a/core/chainio/avs_reader.go b/core/chainio/avs_reader.go index 46050ce5..3fc59b8a 100644 --- a/core/chainio/avs_reader.go +++ b/core/chainio/avs_reader.go @@ -34,6 +34,7 @@ type AvsReaderer interface { GetOperatorSetUpdateBlock(ctx context.Context, id uint64) (uint32, error) GetNextOperatorSetUpdateId(ctx context.Context) (uint64, error) GetLastCheckpointToTimestamp(ctx context.Context) (uint64, error) + GetMessagingPrefix(ctx context.Context) ([32]byte, error) } type AvsReader struct { @@ -174,3 +175,11 @@ func (r *AvsReader) GetLastCheckpointToTimestamp(ctx context.Context) (uint64, e } return lastCheckpointToTimestamp, nil } + +func (r *AvsReader) GetMessagingPrefix(ctx context.Context) ([32]byte, error) { + messagingPrefix, err := r.AvsServiceBindings.TaskManager.MessagingPrefix(&bind.CallOpts{}) + if err != nil { + return [32]byte{}, err + } + return messagingPrefix, nil +} diff --git a/core/chainio/mocks/avs_reader.go b/core/chainio/mocks/avs_reader.go index 0ff5beeb..1bdec490 100644 --- a/core/chainio/mocks/avs_reader.go +++ b/core/chainio/mocks/avs_reader.go @@ -289,6 +289,21 @@ func (mr *MockAvsReadererMockRecorder) GetOperatorsStakeInQuorumsOfOperatorAtCur return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock", reflect.TypeOf((*MockAvsReaderer)(nil).GetOperatorsStakeInQuorumsOfOperatorAtCurrentBlock), arg0, arg1) } +// GetMessagingPrefix mocks base method. +func (m *MockAvsReaderer) GetMessagingPrefix(arg0 context.Context) ([32]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMessagingPrefix", arg0) + ret0, _ := ret[0].([32]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMessagingPrefix indicates an expected call of GetMessagingPrefix. +func (mr *MockAvsReadererMockRecorder) GetMessagingPrefix(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMessagingPrefix", reflect.TypeOf((*MockAvsReaderer)(nil).GetMessagingPrefix), arg0) +} + // GetQuorumCount mocks base method. func (m *MockAvsReaderer) GetQuorumCount(arg0 *bind.CallOpts) (byte, error) { m.ctrl.T.Helper() diff --git a/core/config/config.go b/core/config/config.go index 83245507..872b052c 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -65,6 +65,7 @@ type SFFLDeploymentRaw struct { type SFFLContractsRaw struct { RegistryCoordinatorAddr string `json:"registryCoordinator"` OperatorStateRetrieverAddr string `json:"operatorStateRetriever"` + TaskManagerAddr string `json:"sfflTaskManager"` } type RollupInfo struct { diff --git a/core/smt/smt.go b/core/smt/smt.go index 29b19142..fdcf3bea 100644 --- a/core/smt/smt.go +++ b/core/smt/smt.go @@ -32,25 +32,8 @@ func NewSMT() *SMT { } } -type SmtMessage interface { - Digest() ([32]byte, error) - Key() [32]byte -} - -func (s *SMT) AddMessage(msg SmtMessage) error { - digest, err := msg.Digest() - if err != nil { - return err - } - - key := msg.Key() - - err = s.Update(key[:], digest[:]) - if err != nil { - return err - } - - return nil +func (s *SMT) Add(key [32]byte, value [32]byte) error { + return s.Update(key[:], value[:]) } func (s *SMT) ProveCompact(key []byte) (*smt.SparseCompactMerkleProof, error) { diff --git a/core/types/messages/checkpoint_task.go b/core/types/messages/checkpoint_task.go index 9bca55c5..77640741 100644 --- a/core/types/messages/checkpoint_task.go +++ b/core/types/messages/checkpoint_task.go @@ -44,12 +44,16 @@ type CheckpointMessages struct { OperatorSetUpdateMessageAggregations []MessageBlsAggregation } -func NewCheckpointTaskResponseFromMessages(taskIndex coretypes.TaskIndex, checkpointMessages *CheckpointMessages) (CheckpointTaskResponse, error) { +func NewCheckpointTaskResponseFromMessages(taskIndex coretypes.TaskIndex, checkpointMessages *CheckpointMessages, hasher *Hasher) (CheckpointTaskResponse, error) { stateRootUpdatesSmt := smt.NewSMT() operatorSetUpdatesSmt := smt.NewSMT() for _, msg := range checkpointMessages.StateRootUpdateMessages { - err := stateRootUpdatesSmt.AddMessage(msg) + digest, err := hasher.Hash(msg) + if err != nil { + return CheckpointTaskResponse{}, err + } + err = stateRootUpdatesSmt.Add(msg.Key(), digest) if err != nil { return CheckpointTaskResponse{}, err } @@ -61,7 +65,11 @@ func NewCheckpointTaskResponseFromMessages(taskIndex coretypes.TaskIndex, checkp } for _, msg := range checkpointMessages.OperatorSetUpdateMessages { - err := operatorSetUpdatesSmt.AddMessage(msg) + digest, err := hasher.Hash(msg) + if err != nil { + return CheckpointTaskResponse{}, err + } + err = operatorSetUpdatesSmt.Add(msg.Key(), digest) if err != nil { return CheckpointTaskResponse{}, err } @@ -113,10 +121,9 @@ func (msg CheckpointTaskResponse) Digest() ([32]byte, error) { return [32]byte{}, err } - digest, err := core.HashMessageWithPrefix([]byte("SFFL::CheckpointTaskResponse"), data) - if err != nil { - return [32]byte{}, err - } + return core.Keccak256(data), nil +} - return digest, nil +func (_ CheckpointTaskResponse) Name() string { + return "CheckpointTaskResponse" } diff --git a/core/types/messages/hashing.go b/core/types/messages/hashing.go new file mode 100644 index 00000000..37097c6f --- /dev/null +++ b/core/types/messages/hashing.go @@ -0,0 +1,43 @@ +package messages + +import ( + "github.com/NethermindEth/near-sffl/core" + "github.com/ethereum/go-ethereum/accounts/abi" +) + +type Hasher struct { + messagingPrefix [32]byte +} + +func NewHasher(messagingPrefix [32]byte) *Hasher { + return &Hasher{messagingPrefix: messagingPrefix} +} + +type HasherMessage interface { + Digest() ([32]byte, error) + Name() string +} + +func (h *Hasher) Hash(message HasherMessage) ([32]byte, error) { + messageName := message.Name() + digest, err := message.Digest() + if err != nil { + return [32]byte{}, err + } + + bytes32Ty, err := abi.NewType("bytes32", "", nil) + if err != nil { + return [32]byte{}, err + } + + data, err := abi.Arguments{ + {Type: bytes32Ty}, + {Type: bytes32Ty}, + {Type: bytes32Ty}, + }.Pack(h.messagingPrefix, core.Keccak256([]byte(messageName)), digest) + if err != nil { + return [32]byte{}, err + } + + return core.Keccak256(data), nil +} diff --git a/core/types/messages/operator_set_update.go b/core/types/messages/operator_set_update.go index a0b78f64..5c178605 100644 --- a/core/types/messages/operator_set_update.go +++ b/core/types/messages/operator_set_update.go @@ -120,12 +120,7 @@ func (msg OperatorSetUpdateMessage) Digest() ([32]byte, error) { return [32]byte{}, err } - digest, err := core.HashMessageWithPrefix([]byte("SFFL::OperatorSetUpdateMessage"), data) - if err != nil { - return [32]byte{}, err - } - - return digest, nil + return core.Keccak256(data), nil } func (msg OperatorSetUpdateMessage) Key() [32]byte { @@ -135,3 +130,7 @@ func (msg OperatorSetUpdateMessage) Key() [32]byte { return key } + +func (_ OperatorSetUpdateMessage) Name() string { + return "OperatorSetUpdateMessage" +} diff --git a/core/types/messages/state_root_update.go b/core/types/messages/state_root_update.go index 238cbd9f..448a4be2 100644 --- a/core/types/messages/state_root_update.go +++ b/core/types/messages/state_root_update.go @@ -78,12 +78,7 @@ func (msg StateRootUpdateMessage) Digest() ([32]byte, error) { return [32]byte{}, err } - digest, err := core.HashMessageWithPrefix([]byte("SFFL::StateRootUpdateMessage"), data) - if err != nil { - return [32]byte{}, err - } - - return digest, nil + return core.Keccak256(data), nil } func (msg StateRootUpdateMessage) Key() [32]byte { @@ -98,3 +93,7 @@ func (msg StateRootUpdateMessage) Key() [32]byte { func (msg StateRootUpdateMessage) HasNearDaCommitment() bool { return !bytes.Equal(msg.NearDaCommitment[:], make([]byte, 32)) && !bytes.Equal(msg.NearDaTransactionId[:], make([]byte, 32)) } + +func (_ StateRootUpdateMessage) Name() string { + return "StateRootUpdateMessage" +} diff --git a/core/utils.go b/core/utils.go index e51a918b..fbee55f6 100644 --- a/core/utils.go +++ b/core/utils.go @@ -21,25 +21,6 @@ func Keccak256(data []byte) [32]byte { return digest } -func HashMessageWithPrefix(prefix []byte, data []byte) ([32]byte, error) { - prefixHash := Keccak256(prefix) - dataHash := Keccak256(data) - - bytes32Ty, err := abi.NewType("bytes32", "", nil) - if err != nil { - return [32]byte{}, err - } - - arguments := abi.Arguments{{Type: bytes32Ty}, {Type: bytes32Ty}} - - bytes, err := arguments.Pack(prefixHash, dataHash) - if err != nil { - return [32]byte{}, err - } - - return Keccak256(bytes), nil -} - // BINDING UTILS - conversion from contract structs to golang structs // BN254.sol is a library, so bindings for G1 Points and G2 Points are only generated diff --git a/operator/attestor/attestor.go b/operator/attestor/attestor.go index 77e4c84c..f0f88d0c 100644 --- a/operator/attestor/attestor.go +++ b/operator/attestor/attestor.go @@ -55,6 +55,8 @@ type Attestor struct { blsKeypair *bls.KeyPair operatorId eigentypes.OperatorId + messageHasher *messages.Hasher + logger sdklogging.Logger listener EventListener // TODO(edwin): remove after https://github.com/Layr-Labs/eigensdk-go/pull/117 merged @@ -63,7 +65,7 @@ type Attestor struct { var _ core.Metricable = (*Attestor)(nil) -func NewAttestor(config *optypes.NodeConfig, blsKeypair *bls.KeyPair, operatorId eigentypes.OperatorId, registry *prometheus.Registry, logger sdklogging.Logger) (*Attestor, error) { +func NewAttestor(config *optypes.NodeConfig, messageHasher *messages.Hasher, blsKeypair *bls.KeyPair, operatorId eigentypes.OperatorId, registry *prometheus.Registry, logger sdklogging.Logger) (*Attestor, error) { consumer := consumer.NewConsumer(consumer.ConsumerConfig{ RollupIds: config.NearDaIndexerRollupIds, Id: hex.EncodeToString(operatorId[:]), @@ -82,6 +84,7 @@ func NewAttestor(config *optypes.NodeConfig, blsKeypair *bls.KeyPair, operatorId registry: registry, listener: &SelectiveEventListener{}, config: config, + messageHasher: messageHasher, } for rollupId, url := range config.RollupIdsToRpcUrls { @@ -289,7 +292,7 @@ loop: NearDaTransactionId: transactionId, NearDaCommitment: daCommitment, } - signature, err := SignStateRootUpdateMessage(attestor.blsKeypair, &message) + signature, err := attestor.SignStateRootUpdateMessage(&message) if err != nil { attestor.logger.Warn("StateRoot sign failed", "err", err) return @@ -304,13 +307,13 @@ loop: attestor.signedRootC <- signedStateRootUpdateMessage } -func SignStateRootUpdateMessage(blsKeypair *bls.KeyPair, stateRootUpdateMessage *messages.StateRootUpdateMessage) (*bls.Signature, error) { - messageDigest, err := stateRootUpdateMessage.Digest() +func (attestor *Attestor) SignStateRootUpdateMessage(stateRootUpdateMessage *messages.StateRootUpdateMessage) (*bls.Signature, error) { + messageDigest, err := attestor.messageHasher.Hash(stateRootUpdateMessage) if err != nil { return nil, err } - blsSignature := blsKeypair.SignMessage(messageDigest) + blsSignature := attestor.blsKeypair.SignMessage(messageDigest) return blsSignature, nil } diff --git a/operator/avs_manager.go b/operator/avs_manager.go index 5c905fc6..8e5e5a2e 100644 --- a/operator/avs_manager.go +++ b/operator/avs_manager.go @@ -306,3 +306,12 @@ func (avsManager *AvsManager) IsOperatorRegistered(options *bind.CallOpts, addre func (avsManager *AvsManager) GetOperatorId(options *bind.CallOpts, address common.Address) ([32]byte, error) { return avsManager.avsReader.GetOperatorId(options, address) } + +func (avsManager *AvsManager) GetMessagingPrefix() ([32]byte, error) { + messagingPrefix, err := avsManager.avsReader.GetMessagingPrefix(context.Background()) + if err != nil { + avsManager.logger.Error("Unable to get messaging prefix") + return [32]byte{}, err + } + return messagingPrefix, nil +} diff --git a/operator/mocks/attestor.go b/operator/mocks/attestor.go index fdd51947..30249d89 100644 --- a/operator/mocks/attestor.go +++ b/operator/mocks/attestor.go @@ -9,26 +9,27 @@ import ( "github.com/NethermindEth/near-sffl/core" messages "github.com/NethermindEth/near-sffl/core/types/messages" - "github.com/NethermindEth/near-sffl/operator/attestor" ) type MockAttestor struct { - consumer *MockConsumer - blsKeypair *bls.KeyPair - operatorId eigentypes.OperatorId + consumer *MockConsumer + messageHasher *messages.Hasher + blsKeypair *bls.KeyPair + operatorId eigentypes.OperatorId signedRootC chan messages.SignedStateRootUpdateMessage } var _ core.Metricable = (*MockAttestor)(nil) -func NewMockAttestor(blsKeypair *bls.KeyPair, operatorId eigentypes.OperatorId) *MockAttestor { +func NewMockAttestor(messageHasher *messages.Hasher, blsKeypair *bls.KeyPair, operatorId eigentypes.OperatorId) *MockAttestor { consumer := NewMockConsumer() return &MockAttestor{ - blsKeypair: blsKeypair, - operatorId: operatorId, - consumer: consumer, - signedRootC: make(chan messages.SignedStateRootUpdateMessage), + messageHasher: messageHasher, + blsKeypair: blsKeypair, + operatorId: operatorId, + consumer: consumer, + signedRootC: make(chan messages.SignedStateRootUpdateMessage), } } @@ -51,7 +52,7 @@ func (mockAttestor *MockAttestor) Start(ctx context.Context) error { NearDaTransactionId: [32]byte{1}, NearDaCommitment: [32]byte{2}, } - signature, err := attestor.SignStateRootUpdateMessage(mockAttestor.blsKeypair, &message) + signature, err := mockAttestor.SignStateRootUpdateMessage(&message) if err != nil { panic(err) } @@ -69,6 +70,16 @@ func (mockAttestor *MockAttestor) Start(ctx context.Context) error { return nil } +func (mockAttestor *MockAttestor) SignStateRootUpdateMessage(stateRootUpdateMessage *messages.StateRootUpdateMessage) (*bls.Signature, error) { + messageDigest, err := mockAttestor.messageHasher.Hash(stateRootUpdateMessage) + if err != nil { + return nil, err + } + + blsSignature := mockAttestor.blsKeypair.SignMessage(messageDigest) + return blsSignature, nil +} + func (mockAttestor *MockAttestor) Close() error { return mockAttestor.consumer.Close() } func (mockAttestor *MockAttestor) GetSignedRootC() <-chan messages.SignedStateRootUpdateMessage { diff --git a/operator/operator.go b/operator/operator.go index a3649ab1..6242e401 100644 --- a/operator/operator.go +++ b/operator/operator.go @@ -64,6 +64,8 @@ type Operator struct { registryCoordinatorAddr common.Address // NEAR DA indexer consumer attestor attestor.Attestorer + // Message hasher + messageHasher *messages.Hasher // Avs Manager avsManager *AvsManager } @@ -185,6 +187,14 @@ func NewOperatorFromConfig(c optypes.NodeConfig) (*Operator, error) { return nil, err } + messagingPrefix, err := avsManager.GetMessagingPrefix() + if err != nil { + logger.Error("Cannot get messaging prefix", "err", err) + return nil, err + } + + messageHasher := messages.NewHasher(messagingPrefix) + // We must register the economic metrics separately because they are exported metrics (from jsonrpc or subgraph calls) // and not instrumented metrics: see https://prometheus.io/docs/instrumenting/writing_clientlibs/#overall-structure quorumNames := map[eigentypes.QuorumNum]string{ @@ -223,6 +233,7 @@ func NewOperatorFromConfig(c optypes.NodeConfig) (*Operator, error) { registryCoordinatorAddr: registryCoordinatorAddress, operatorId: operatorId, taskResponseWait: time.Duration(c.TaskResponseWaitMs) * time.Millisecond, + messageHasher: messageHasher, } if c.RegisterOperatorOnStartup { @@ -244,7 +255,7 @@ func NewOperatorFromConfig(c optypes.NodeConfig) (*Operator, error) { "operatorG2Pubkey", operator.blsKeypair.GetPubKeyG2(), ) - attestor, err := attestor.NewAttestor(&c, blsKeyPair, operator.operatorId, reg, logger) + attestor, err := attestor.NewAttestor(&c, messageHasher, blsKeyPair, operator.operatorId, reg, logger) if err != nil { return nil, err } @@ -337,7 +348,7 @@ func (o *Operator) Start(ctx context.Context) error { return o.Close() } - signedOperatorSetUpdate, err := SignOperatorSetUpdate(operatorSetUpdate, o.blsKeypair, o.operatorId) + signedOperatorSetUpdate, err := o.SignOperatorSetUpdate(&operatorSetUpdate) if err != nil { o.logger.Error("Failed to sign operator set update", "signedOperatorSetUpdate", signedOperatorSetUpdate) continue @@ -360,7 +371,7 @@ func (o *Operator) Close() error { } func (o *Operator) SignTaskResponse(taskResponse *messages.CheckpointTaskResponse) (*messages.SignedCheckpointTaskResponse, error) { - taskResponseHash, err := taskResponse.Digest() + taskResponseHash, err := o.messageHasher.Hash(taskResponse) if err != nil { o.logger.Error("Error getting task response header hash. skipping task (this is not expected and should be investigated)", "err", err) return nil, err @@ -377,15 +388,15 @@ func (o *Operator) SignTaskResponse(taskResponse *messages.CheckpointTaskRespons return signedCheckpointTaskResponse, nil } -func SignOperatorSetUpdate(message messages.OperatorSetUpdateMessage, blsKeyPair *bls.KeyPair, operatorId eigentypes.OperatorId) (*messages.SignedOperatorSetUpdateMessage, error) { - messageHash, err := message.Digest() +func (o *Operator) SignOperatorSetUpdate(message *messages.OperatorSetUpdateMessage) (*messages.SignedOperatorSetUpdateMessage, error) { + messageHash, err := o.messageHasher.Hash(message) if err != nil { return nil, err } - signature := blsKeyPair.SignMessage(messageHash) + signature := o.blsKeypair.SignMessage(messageHash) signedOperatorSetUpdate := messages.SignedOperatorSetUpdateMessage{ - Message: message, - OperatorId: operatorId, + Message: *message, + OperatorId: o.operatorId, BlsSignature: *signature, } @@ -411,6 +422,7 @@ func (o *Operator) ProcessCheckpointTask(event *taskmanager.ContractSFFLTaskMana checkpointTaskResponse, err := messages.NewCheckpointTaskResponseFromMessages( event.TaskIndex, checkpointMessages, + o.messageHasher, ) if err != nil { o.logger.Error("Failed to get create checkpoint response", "err", err) diff --git a/operator/operator_test.go b/operator/operator_test.go index 3059a496..1a173fb6 100644 --- a/operator/operator_test.go +++ b/operator/operator_test.go @@ -59,16 +59,16 @@ func TestOperator(t *testing.T) { } fmt.Println("newTaskCreatedEvent", newTaskCreatedEvent) - X, ok := big.NewInt(0).SetString("14682076405452102073294678397007301219581403230466932828034308124846926767307", 10) + X, ok := big.NewInt(0).SetString("12613642297543744275326684415743486704748828415939688962790733558803545899833", 10) assert.True(t, ok) - Y, ok := big.NewInt(0).SetString("21795352068006341387944991363719316176428465837889238952393688260477242359304", 10) + Y, ok := big.NewInt(0).SetString("2616743449824847804950932714835613626562747429847717032048727881650184877373", 10) assert.True(t, ok) taskResponseSignature := bls.Signature{G1Point: bls.NewG1Point(X, Y)} - stateRootUpdatesRoot, err := hex.DecodeString("f4356e325f801b1c6acd597d8d32d2b65d28596622a33f9ec882314f41dd4411") + stateRootUpdatesRoot, err := hex.DecodeString("aa726e89a4b2dd6bc24b316f3d4bbccc3a3a63270014ca90c0da13d2a9f1b60f") assert.Nil(t, err) - operatorSetUpdatesRoot, err := hex.DecodeString("a5552192acf1e92adb86a881768349fb3408f56e68a31cd17dabdf1108f1ac93") + operatorSetUpdatesRoot, err := hex.DecodeString("9c3dbc1ca1dfb69ab8532e7fb43322862823f98b20338990713b0d3c9bc51ff0") assert.Nil(t, err) signedTaskResponse := &messages.SignedCheckpointTaskResponse{ @@ -84,9 +84,9 @@ func TestOperator(t *testing.T) { stateRoot, err := hex.DecodeString("04d855ea9fbfefca9069335296aaa5108fa16d36ecd200bf133a1f5b5a7f5fe2") assert.Nil(t, err) - X, ok = big.NewInt(0).SetString("14166665838505742237234466022950148109946898229040848081862518171991385270422", 10) + X, ok = big.NewInt(0).SetString("145684791764708762489294184098393889857442563975664490743890090895658937067", 10) assert.True(t, ok) - Y, ok = big.NewInt(0).SetString("4090516448351082424065118359663770590467802349609723171049485579272418302598", 10) + Y, ok = big.NewInt(0).SetString("6477528892499587132611856241434338218424427338721689922607925314585802617702", 10) assert.True(t, ok) stateRootUpdateMessageSignature := bls.Signature{G1Point: bls.NewG1Point(X, Y)} @@ -114,11 +114,11 @@ func TestOperator(t *testing.T) { Timestamp: block.Header().Time, Raw: types.Log{}, } - signedOperatorSetUpdateMessage, err := SignOperatorSetUpdate(messages.OperatorSetUpdateMessage{ + signedOperatorSetUpdateMessage, err := operator.SignOperatorSetUpdate(&messages.OperatorSetUpdateMessage{ Id: operatorSetUpdate.Id, Timestamp: operatorSetUpdate.Timestamp, Operators: make([]coretypes.RollupOperator, 0), - }, operator.blsKeypair, operator.operatorId) + }) assert.Nil(t, err) mockCtrl := gomock.NewController(t) @@ -189,7 +189,8 @@ func createMockOperator(mockCtrl *gomock.Controller) (*Operator, *AvsManager, *m } operatorKeypair := bls.NewKeyPair(blsPrivateKey) - mockAttestor := mocks.NewMockAttestor(operatorKeypair, MOCK_OPERATOR_ID) + hasher := messages.NewHasher([32]byte{}) + mockAttestor := mocks.NewMockAttestor(hasher, operatorKeypair, MOCK_OPERATOR_ID) avsManager := &AvsManager{ logger: logger, checkpointTaskCreatedChan: make(chan *taskmanager.ContractSFFLTaskManagerCheckpointTaskCreated), @@ -199,15 +200,16 @@ func createMockOperator(mockCtrl *gomock.Controller) (*Operator, *AvsManager, *m mockClient := safeclientmocks.NewMockSafeClient(mockCtrl) operator := &Operator{ - logger: logger, - blsKeypair: operatorKeypair, - metricsReg: reg, - metrics: noopMetrics, - operatorId: MOCK_OPERATOR_ID, - attestor: mockAttestor, - avsManager: avsManager, - listener: &SelectiveOperatorListener{}, - ethClient: mockClient, + logger: logger, + blsKeypair: operatorKeypair, + metricsReg: reg, + metrics: noopMetrics, + operatorId: MOCK_OPERATOR_ID, + attestor: mockAttestor, + avsManager: avsManager, + listener: &SelectiveOperatorListener{}, + ethClient: mockClient, + messageHasher: hasher, } return operator, avsManager, mockAttestor.MockGetConsumer(), mockClient, nil diff --git a/tests/anvil/data/avs-and-eigenlayer-deployed-anvil-state.json b/tests/anvil/data/avs-and-eigenlayer-deployed-anvil-state.json index 518db2aa..6a37df40 100644 --- a/tests/anvil/data/avs-and-eigenlayer-deployed-anvil-state.json +++ b/tests/anvil/data/avs-and-eigenlayer-deployed-anvil-state.json @@ -1 +1 @@ -{"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x289dc683474e000","code":"0x","storage":{}},"0x000000000000000000636f6e736f6c652e6c6f67":{"nonce":0,"balance":"0x0","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78881565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220f4142d31b19c8d9ca756fceb11e0a14c189743e7b456cda04629fad4f5e08cf164736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102275760003560e01c806394f649dd11610130578063c6656702116100b8578063df5cf7231161007c578063df5cf72314610596578063e7a050aa146105bd578063f2fde38b146105d0578063f698da25146105e3578063fabc1cbc146105eb57600080fd5b8063c665670214610520578063cbc2bd6214610533578063cd293f6f14610546578063cf756fdf14610570578063df5b35471461058357600080fd5b8063b43b514b116100ff578063b43b514b146104b1578063b5d8b5b8146104c4578063c3c6b3a9146104d7578063c4623ea1146104fa578063c608c7f31461050d57600080fd5b806394f649dd14610433578063967fc0d2146104545780639b4da03d14610467578063b13442711461048a57600080fd5b80635c975abb116101b35780637ecebe00116101825780637ecebe00146103b3578063886f1195146103d35780638b8aac3c146103e65780638c80d4e51461040f5780638da5cb5b1461042257600080fd5b80635c975abb14610355578063663c1de41461035d578063715018a6146103805780637a7e0d921461038857600080fd5b80634665bcda116101fa5780634665bcda146102a157806348825e94146102e05780634e5a426314610307578063595c6a671461031a5780635ac86ab71461032257600080fd5b806310d67a2f1461022c578063136439dd1461024157806320606b701461025457806332e89ace1461028e575b600080fd5b61023f61023a366004612b4a565b6105fe565b005b61023f61024f366004612b67565b6106ba565b61027b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027b61029c366004612c00565b6107f9565b6102c87f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b039091168152602001610285565b61027b7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61023f610315366004612ced565b610ae7565b61023f610b1f565b610345610330366004612d26565b609854600160ff9092169190911b9081161490565b6040519015158152602001610285565b60985461027b565b61034561036b366004612b4a565b60d16020526000908152604090205460ff1681565b61023f610be6565b61027b610396366004612d49565b60cd60209081526000928352604080842090915290825290205481565b61027b6103c1366004612b4a565b60ca6020526000908152604090205481565b6097546102c8906001600160a01b031681565b61027b6103f4366004612b4a565b6001600160a01b0316600090815260ce602052604090205490565b61023f61041d366004612d77565b610bfa565b6033546001600160a01b03166102c8565b610446610441366004612b4a565b610c53565b604051610285929190612e2c565b60cb546102c8906001600160a01b031681565b610345610475366004612b4a565b60d36020526000908152604090205460ff1681565b6102c87f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b61027b6104bf366004612fd5565b610dd3565b61023f6104d23660046130f0565b610e20565b6103456104e5366004612b67565b60cf6020526000908152604090205460ff1681565b61023f610508366004613132565b610f94565b61023f61051b366004613183565b610fe8565b61023f61052e366004612b4a565b6110a0565b6102c86105413660046131d6565b6110b1565b610559610554366004612fd5565b6110e9565b604080519215158352602083019190915201610285565b61023f61057e366004613132565b61117d565b61023f610591366004613202565b6112b1565b6102c87f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61027b6105cb366004612d77565b6114da565b61023f6105de366004612b4a565b6115a3565b61027b611619565b61023f6105f9366004612b67565b611657565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061326e565b6001600160a01b0316336001600160a01b0316146106ae5760405162461bcd60e51b81526004016106a59061328b565b60405180910390fd5b6106b7816117b3565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906132d5565b6107425760405162461bcd60e51b81526004016106a5906132f2565b609854818116146107bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108505760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156108a35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b60026065556001600160a01b038816600090815260d3602052604090205460ff161561094a5760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a4016106a5565b428410156109cc5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a4016106a5565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a84611619565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610ac78882886118aa565b610ad3888c8c8c611a69565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610b115760405162461bcd60e51b81526004016106a59061333a565b610b1b8282611c38565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b91906132d5565b610ba75760405162461bcd60e51b81526004016106a5906132f2565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610bee611ca6565b610bf86000611d00565b565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c425760405162461bcd60e51b81526004016106a5906133a4565b610c4d838383611d52565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c8b57610c8b612b90565b604051908082528060200260200182016040528015610cb4578160200160208202803683370190505b50905060005b82811015610d45576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610cf957610cf9613402565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d3257610d32613402565b6020908102919091010152600101610cba565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610dc157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da3575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e03979096959101613418565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016106a59061333a565b8060005b81811015610c4d5760d16000858584818110610e6c57610e6c613402565b9050602002016020810190610e819190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff1615610f8c57600060d16000868685818110610ebb57610ebb613402565b9050602002016020810190610ed09190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f2b57610f2b613402565b9050602002016020810190610f409190612b4a565b6040516001600160a01b03909116815260200160405180910390a1610f8c848483818110610f7057610f70613402565b9050602002016020810190610f859190612b4a565b6000611c38565b600101610e4e565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610fdc5760405162461bcd60e51b81526004016106a5906133a4565b610c4d84848484611eae565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146110305760405162461bcd60e51b81526004016106a5906133a4565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050505050565b6110a8611ca6565b6106b78161213b565b60ce60205281600052604060002081815481106110cd57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146111345760405162461bcd60e51b81526004016106a5906133a4565b600061113f84610dd3565b600081815260cf60205260408120549192509060ff16156111745750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff161580801561119d5750600054600160ff909116105b806111b75750303b1580156111b7575060005460ff166001145b61121a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a5565b6000805460ff19166001179055801561123d576000805461ff0019166101001790555b6112456121a4565b60c955611252838361223b565b61125b85611d00565b6112648461213b565b80156112aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146112db5760405162461bcd60e51b81526004016106a59061333a565b8281146113645760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a4016106a5565b8260005b818110156114d25760d1600087878481811061138657611386613402565b905060200201602081019061139b9190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff166114ca57600160d160008888858181106113d4576113d4613402565b90506020020160208101906113e99190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe86868381811061144457611444613402565b90506020020160208101906114599190612b4a565b6040516001600160a01b03909116815260200160405180910390a16114ca86868381811061148957611489613402565b905060200201602081019061149e9190612b4a565b8585848181106114b0576114b0613402565b90506020020160208101906114c59190613491565b611c38565b600101611368565b505050505050565b6098546000908190600190811614156115315760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b600260655561159533868686611a69565b600160655595945050505050565b6115ab611ca6565b6001600160a01b0381166116105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a5565b6106b781611d00565b60007f000000000000000000000000000000000000000000000000000000000000426846141561164a575060c95490565b6116526121a4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061326e565b6001600160a01b0316336001600160a01b0316146116fe5760405162461bcd60e51b81526004016106a59061328b565b60985419811960985419161461177c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107ee565b6001600160a01b0381166118415760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a5565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b156119c957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906118ea9086908690600401613506565b602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b919061351f565b6001600160e01b031916146119c45760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a4016106a5565b505050565b826001600160a01b03166119dd8383612321565b6001600160a01b0316146119c45760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a4016106a5565b6001600160a01b038316600090815260d16020526040812054849060ff16611b0f5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a4016106a5565b611b246001600160a01b038516338786612345565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190613549565b9150611ba586858785611eae565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916906328a573ae90606401600060405180830381600087803b158015611c1757600080fd5b505af1158015611c2b573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610bf85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611dc75760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f21000060648201526084016106a5565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e595760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b60648201526084016106a5565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611ea157611e97858561239f565b6001915050611ea7565b60009150505b9392505050565b6001600160a01b038416611f2a5760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f20616464726573730000000000000060648201526084016106a5565b80611f965760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b60648201526084016106a5565b6001600160a01b03808516600090815260cd60209081526040808320938616835292905220546120a7576001600160a01b038416600090815260ce6020908152604090912054106120685760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a4016106a5565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906120de908490613578565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b031615801561225c57506001600160a01b03821615155b6122de5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610b1b826117b3565b60008060006123308585612591565b9150915061233d81612601565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c4d9085906127bc565b6001600160a01b038216600090815260ce6020526040812054905b818110156124ba576001600160a01b03848116600090815260ce60205260409020805491851691839081106123f1576123f1613402565b6000918252602090912001546001600160a01b031614156124b2576001600160a01b038416600090815260ce60205260409020805461243290600190613590565b8154811061244257612442613402565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061247f5761247f613402565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506124ba565b6001016123ba565b818114156125425760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a4016106a5565b6001600160a01b038416600090815260ce60205260409020805480612569576125696135a7565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156125c85760208301516040840151606085015160001a6125bc8782858561288e565b945094505050506125fa565b8251604014156125f257602083015160408401516125e786838361297b565b9350935050506125fa565b506000905060025b9250929050565b6000816004811115612615576126156135bd565b141561261e5750565b6001816004811115612632576126326135bd565b14156126805760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a5565b6002816004811115612694576126946135bd565b14156126e25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a5565b60038160048111156126f6576126f66135bd565b141561274f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106a5565b6004816004811115612763576127636135bd565b14156106b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106a5565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129b49092919063ffffffff16565b8051909150156119c4578080602001905181019061282f91906132d5565b6119c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c55750600090506003612972565b8460ff16601b141580156128dd57508460ff16601c14155b156128ee5750600090506004612972565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612942573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661296b57600060019250925050612972565b9150600090505b94509492505050565b6000806001600160ff1b0383168161299860ff86901c601b613578565b90506129a68782888561288e565b935093505050935093915050565b60606129c384846000856129cb565b949350505050565b606082471015612a2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a5565b6001600160a01b0385163b612a835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a5565b600080866001600160a01b03168587604051612a9f91906135d3565b60006040518083038185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b5091509150612af1828286612afc565b979650505050505050565b60608315612b0b575081611ea7565b825115612b1b5782518084602001fd5b8160405162461bcd60e51b81526004016106a591906135ef565b6001600160a01b03811681146106b757600080fd5b600060208284031215612b5c57600080fd5b8135611ea781612b35565b600060208284031215612b7957600080fd5b5035919050565b8035612b8b81612b35565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612bc957612bc9612b90565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bf857612bf8612b90565b604052919050565b60008060008060008060c08789031215612c1957600080fd5b8635612c2481612b35565b9550602087810135612c3581612b35565b9550604088013594506060880135612c4c81612b35565b93506080880135925060a088013567ffffffffffffffff80821115612c7057600080fd5b818a0191508a601f830112612c8457600080fd5b813581811115612c9657612c96612b90565b612ca8601f8201601f19168501612bcf565b91508082528b84828501011115612cbe57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b80151581146106b757600080fd5b60008060408385031215612d0057600080fd5b8235612d0b81612b35565b91506020830135612d1b81612cdf565b809150509250929050565b600060208284031215612d3857600080fd5b813560ff81168114611ea757600080fd5b60008060408385031215612d5c57600080fd5b8235612d6781612b35565b91506020830135612d1b81612b35565b600080600060608486031215612d8c57600080fd5b8335612d9781612b35565b92506020840135612da781612b35565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015612df15781516001600160a01b031687529582019590820190600101612dcc565b509495945050505050565b600081518084526020808501945080840160005b83811015612df157815187529582019590820190600101612e10565b604081526000612e3f6040830185612db8565b8281036020840152612e518185612dfc565b95945050505050565b600067ffffffffffffffff821115612e7457612e74612b90565b5060051b60200190565b600082601f830112612e8f57600080fd5b81356020612ea4612e9f83612e5a565b612bcf565b82815260059290921b84018101918181019086841115612ec357600080fd5b8286015b84811015612ee7578035612eda81612b35565b8352918301918301612ec7565b509695505050505050565b600082601f830112612f0357600080fd5b81356020612f13612e9f83612e5a565b82815260059290921b84018101918181019086841115612f3257600080fd5b8286015b84811015612ee75780358352918301918301612f36565b600060408284031215612f5f57600080fd5b6040516040810181811067ffffffffffffffff82111715612f8257612f82612b90565b6040529050808235612f9381612b35565b815260208301356bffffffffffffffffffffffff81168114612fb457600080fd5b6020919091015292915050565b803563ffffffff81168114612b8b57600080fd5b600060208284031215612fe757600080fd5b813567ffffffffffffffff80821115612fff57600080fd5b9083019060e0828603121561301357600080fd5b61301b612ba6565b82358281111561302a57600080fd5b61303687828601612e7e565b82525060208301358281111561304b57600080fd5b61305787828601612ef2565b60208301525061306960408401612b80565b604082015261307b8660608501612f4d565b606082015261308c60a08401612fc1565b608082015261309d60c08401612b80565b60a082015295945050505050565b60008083601f8401126130bd57600080fd5b50813567ffffffffffffffff8111156130d557600080fd5b6020830191508360208260051b85010111156125fa57600080fd5b6000806020838503121561310357600080fd5b823567ffffffffffffffff81111561311a57600080fd5b613126858286016130ab565b90969095509350505050565b6000806000806080858703121561314857600080fd5b843561315381612b35565b9350602085013561316381612b35565b9250604085013561317381612b35565b9396929550929360600135925050565b6000806000806080858703121561319957600080fd5b84356131a481612b35565b935060208501356131b481612b35565b92506040850135915060608501356131cb81612b35565b939692955090935050565b600080604083850312156131e957600080fd5b82356131f481612b35565b946020939093013593505050565b6000806000806040858703121561321857600080fd5b843567ffffffffffffffff8082111561323057600080fd5b61323c888389016130ab565b9096509450602087013591508082111561325557600080fd5b50613262878288016130ab565b95989497509550505050565b60006020828403121561328057600080fd5b8151611ea781612b35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156132e757600080fd5b8151611ea781612cdf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60e08152600061342b60e0830189612db8565b828103602084015261343d8189612dfc565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b6000602082840312156134a357600080fd5b8135611ea781612cdf565b60005b838110156134c95781810151838201526020016134b1565b83811115610c4d5750506000910152565b600081518084526134f28160208601602086016134ae565b601f01601f19169290920160200192915050565b8281526040602082015260006129c360408301846134da565b60006020828403121561353157600080fd5b81516001600160e01b031981168114611ea757600080fd5b60006020828403121561355b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561358b5761358b613562565b500190565b6000828210156135a2576135a2613562565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516135e58184602087016134ae565b9190910192915050565b602081526000611ea760208301846134da56fea264697066735822122040c065692c9e8827dec1688569c977abcb17999af2e58d54d2ef89bc1ff6f5dc64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0e801d84fa97b50751dbf25036d067dcf18858bf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0x66":"0x0","0xc9":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720000000000000000000000000","0xca":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb0d4afd8879ed9f52b28595d31b441d079b2ca07","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x1291be112d480055dafd8a610b7d1e203891c274":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101a55760003560e01c80639f3ccf65116100ef578063c8294c5611610092578063c8294c561461048b578063d5eccc051461049e578063dd9846b9146104b1578063df5cf723146104d9578063f2be94ae14610500578063f851e19814610513578063fa28c62714610526578063ff694a771461053957600080fd5b80639f3ccf65146103a3578063ac6bfb03146103b6578063adc804da146103d6578063b6904b7814610416578063bc9a40c314610429578063bd29b8cd1461043c578063c46778a51461044f578063c601527d1461047857600080fd5b80634bd26e09116101575780634bd26e09146102a55780635401ed27146102d55780635e5a6775146102e85780635f1f2d77146102f757806366acfefe1461030a5780636d14a987146103355780637c1723471461036957806381c075021461038357600080fd5b80630491b41c146101aa57806308732461146101e05780631f9b74e01461020157806320b662981461022c57806325504777146102415780632cd95940146102625780633ca5a5f514610282575b600080fd5b6101cd6101b8366004612b78565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b6101f36101ee366004612b93565b61054c565b6040516101d7929190612bbd565b61021461020f366004612bf7565b610595565b6040516001600160601b0390911681526020016101d7565b61023f61023a366004612c72565b6105e5565b005b61025461024f366004612d33565b610900565b6040516101d7929190612dd2565b610275610270366004612df7565b610bcb565b6040516101d79190612e52565b6101cd610290366004612b78565b60ff1660009081526003602052604090205490565b6101cd6102b3366004612df7565b600091825260026020908152604080842060ff93909316845291905290205490565b6102146102e3366004612df7565b610c6a565b6101cd670de0b6b3a764000081565b61023f610305366004612f31565b610c83565b61031d610318366004612d33565b611095565b6040516001600160c01b0390911681526020016101d7565b61035c7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516101d79190612fd9565b610371602081565b60405160ff90911681526020016101d7565b610396610391366004613001565b6111ea565b6040516101d79190613053565b61035c6103b1366004612b93565b6114b4565b6103c96103c4366004613091565b6114ec565b6040516101d791906130c4565b6103e96103e4366004612b93565b611575565b6040805182516001600160a01b031681526020928301516001600160601b031692810192909252016101d7565b6103c9610424366004612b93565b6115ef565b61023f6104373660046130e9565b61166d565b61023f61044a366004613113565b611766565b61021461045d366004612b78565b6000602081905290815260409020546001600160601b031681565b61023f6104863660046131df565b61188d565b61021461049936600461322c565b611981565b6102146104ac366004612b78565b6119ff565b6104c46104bf366004613268565b611a52565b60405163ffffffff90911681526020016101d7565b61035c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61021461050e3660046132a4565b611a67565b6103c9610521366004612df7565b611afc565b610214610534366004613268565b611bc3565b61023f6105473660046132e6565b611c24565b6003602052816000526040600020818154811061056857600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff821660009081526001602052604081205483906105cf5760405162461bcd60e51b81526004016105c690613343565b60405180910390fd5b60006105db8585611d8f565b5095945050505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106679190613394565b6001600160a01b0316336001600160a01b0316146106975760405162461bcd60e51b81526004016105c6906133b1565b846106b38160ff16600090815260016020526040902054151590565b6106cf5760405162461bcd60e51b81526004016105c690613343565b8380610745576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f766964656460648201526084016105c6565b8281146107b65760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f646966795374726174656779506172616044820152780dae67440d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d603b1b60648201526084016105c6565b60ff87166000908152600360205260408120905b828110156108f5578585828181106107e4576107e461342d565b90506020020160208101906107f99190613443565b8289898481811061080c5761080c61342d565b90506020020135815481106108235761082361342d565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff1660008051602061375d833981519152838a8a8581811061087a5761087a61342d565b90506020020135815481106108915761089161342d565b6000918252602090912001546001600160a01b03168888858181106108b8576108b861342d565b90506020020160208101906108cd9190613443565b6040516108db929190612bbd565b60405180910390a2806108ed81613474565b9150506107ca565b505050505050505050565b606080336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf161461094b5760405162461bcd60e51b81526004016105c69061348f565b6000836001600160401b0381111561096557610965612ea0565b60405190808252806020026020018201604052801561098e578160200160208202803683370190505b5090506000846001600160401b038111156109ab576109ab612ea0565b6040519080825280602002602001820160405280156109d4578160200160208202803683370190505b50905060005b85811015610bbd5760008787838181106109f6576109f661342d565b919091013560f81c60008181526001602052604090205490925015159050610a7e5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b60648201526084016105c6565b600080610a8b838d611d8f565b9150915080610b285760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a4016105c6565b6000610b358c8585611f92565b905082878681518110610b4a57610b4a61342d565b60200260200101906001600160601b031690816001600160601b031681525050610b748482612212565b868681518110610b8657610b8661342d565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610bb590613474565b9150506109da565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610c5d576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c04565b5050505090505b92915050565b600080610c778484611afc565b60400151949350505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d059190613394565b6001600160a01b0316336001600160a01b031614610d355760405162461bcd60e51b81526004016105c6906133b1565b81610d518160ff16600090815260016020526040902054151590565b610d6d5760405162461bcd60e51b81526004016105c690613343565b815180610de25760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f766964656400000060648201526084016105c6565b60ff841660009081526003602090815260408083206004909252822090915b8381101561108c578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610e4157610e4161342d565b602002602001015181548110610e5957610e5961342d565b600091825260209091200154604051610e7b916001600160a01b031690612fd9565b60405180910390a28660ff1660008051602061375d83398151915284888481518110610ea957610ea961342d565b602002602001015181548110610ec157610ec161342d565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f0190600190613501565b81548110610f1157610f1161342d565b9060005260206000200183878381518110610f2e57610f2e61342d565b602002602001015181548110610f4657610f4661342d565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080610f9957610f99613518565b60008281526020812082016000199081019190915501905581548290610fc190600190613501565b81548110610fd157610fd161342d565b9060005260206000200160009054906101000a90046001600160a01b0316828783815181106110025761100261342d565b60200260200101518154811061101a5761101a61342d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508180548061105857611058613518565b600082815260209020810160001990810180546001600160a01b03191690550190558061108481613474565b915050610e01565b50505050505050565b6000336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146110df5760405162461bcd60e51b81526004016105c69061348f565b6000805b838110156105db5760008585838181106110ff576110ff61342d565b919091013560f81c6000818152600160205260409020549092501515905061118a5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b604482015277194e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd60421b60648201526084016105c6565b600080611197838b611d8f565b91509150806111b95760009150600160ff84161b6001600160c01b0386161794505b60006111c68a8585611f92565b90506111d28482612212565b505050505080806111e290613474565b9150506110e3565b60606000826001600160401b0381111561120657611206612ea0565b60405190808252806020026020018201604052801561122f578160200160208202803683370190505b50905060005b838110156114a95760008585838181106112515761125161342d565b919091013560f81c600081815260016020526040902054909250151590506112f05760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a4016105c6565b60ff81166000908152600160205260408120805463ffffffff8a1692906113195761131961342d565b60009182526020909120015463ffffffff1611156113c55760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a4016105c6565b60ff8116600090815260016020526040812054905b818110156114935760ff8316600090815260016020819052604090912063ffffffff8b16916114098486613501565b6114139190613501565b815481106114235761142361342d565b60009182526020909120015463ffffffff16116114815760016114468284613501565b6114509190613501565b8585815181106114625761146261342d565b602002602001019063ffffffff16908163ffffffff1681525050611493565b8061148b81613474565b9150506113da565b50505080806114a190613474565b915050611235565b5090505b9392505050565b600460205281600052604060002081815481106114d057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6114f4612b42565b600083815260026020908152604080832060ff8816845290915290208054839081106115225761152261342d565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff831660009081526003602052604090208054839081106115ad576115ad61342d565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b6115f7612b42565b60ff8316600090815260016020526040902080548390811061161b5761161b61342d565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ef9190613394565b6001600160a01b0316336001600160a01b03161461171f5760405162461bcd60e51b81526004016105c6906133b1565b8161173b8160ff16600090815260016020526040902054151590565b6117575760405162461bcd60e51b81526004016105c690613343565b611761838361238c565b505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146117ae5760405162461bcd60e51b81526004016105c69061348f565b60005b818110156118875760008383838181106117cd576117cd61342d565b919091013560f81c600081815260016020526040902054909250151590506118575760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f726044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b60648201526084016105c6565b600061186586836000611f92565b90506118718282612212565b505050808061187f90613474565b9150506117b1565b50505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f9190613394565b6001600160a01b0316336001600160a01b03161461193f5760405162461bcd60e51b81526004016105c6906133b1565b8161195b8160ff16600090815260016020526040902054151590565b6119775760405162461bcd60e51b81526004016105c690613343565b61176183836123f5565b60ff831660009081526001602052604081208054829190849081106119a8576119a861342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610c77818561281c565b60ff81166000908152600160208190526040822080549091611a2091613501565b81548110611a3057611a3061342d565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611a5f848484612996565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611a9857611a9861342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611aef818661281c565b6040015195945050505050565b611b04612b42565b600083815260026020908152604080832060ff86168452909152902054611b29612b42565b81611b37579150610c649050565b600085815260026020908152604080832060ff881684529091529020611b5e600184613501565b81548110611b6e57611b6e61342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610c64915050565b600083815260026020908152604080832060ff861684529091528120611bea858585612996565b63ffffffff1681548110611c0057611c0061342d565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614611c6c5760405162461bcd60e51b81526004016105c69061348f565b60ff831660009081526001602052604090205415611cea5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b60648201526084016105c6565b611cf483826123f5565b611cfe838361238c565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611dae8660ff1660009081526003602052604090205490565b9050611dca604080518082019091526000808252602082015290565b60ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91692639004134792611e28928c920161352e565b600060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e6d919081019061358d565b905060005b83811015611f5e5760ff89166000908152600360205260409020805482908110611e9e57611e9e61342d565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611eec57611eec61342d565b60200260200101511115611f4c57670de0b6b3a764000083602001516001600160601b0316838381518110611f2357611f2361342d565b6020026020010151611f35919061361d565b611f3f919061363c565b611f49908661365e565b94505b80611f5681613474565b915050611e72565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061205657600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556121b8565b600086815260026020908152604080832060ff89168452909152812061207d600184613501565b8154811061208d5761208d61342d565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156120c657600093505050506114ad565b80544363ffffffff90811691161415612100578054600160401b600160a01b031916600160401b6001600160601b038716021781556121b6565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122088285612afc565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122369084613501565b815481106122465761224661342d565b90600052602060002001905083600014156122755754600160401b90046001600160601b03169150610c649050565b805460009061229490600160401b90046001600160601b031686612b14565b82549091504363ffffffff908116911614156122d1578154600160401b600160a01b031916600160401b6001600160601b03831602178255612383565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b60008151116124555760405162461bcd60e51b8152602060048201526038602482015260008051602061373d8339815191526044820152770e881b9bc81cdd1c985d1959da595cc81c1c9bdd9a59195960421b60648201526084016105c6565b805160ff8316600090815260036020908152604090912054906124788383613689565b11156124e85760405162461bcd60e51b8152602060048201526045602482015260008051602061373d83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a4016105c6565b60005b828110156128155760005b6125008284613689565b8110156125e1578482815181106125195761251961342d565b6020026020010151600001516001600160a01b0316600360008860ff1660ff16815260200190815260200160002082815481106125585761255861342d565b6000918252602090912001546001600160a01b031614156125cf5760405162461bcd60e51b815260206004820152603d602482015260008051602061373d83398151915260448201527f3a2063616e6e6f74206164642073616d6520737472617465677920327800000060648201526084016105c6565b806125d981613474565b9150506124f6565b5060008482815181106125f6576125f661342d565b6020026020010151602001516001600160601b03161161267b5760405162461bcd60e51b8152602060048201526046602482015260008051602061373d83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a4016105c6565b60ff8516600090815260036020526040902084518590839081106126a1576126a161342d565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127065761270661342d565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f54049086908490811061277d5761277d61342d565b6020026020010151600001516040516127969190612fd9565b60405180910390a28460ff1660008051602061375d8339815191528583815181106127c3576127c361342d565b6020026020010151600001518684815181106127e1576127e161342d565b6020026020010151602001516040516127fb929190612bbd565b60405180910390a28061280d81613474565b9150506124eb565b5050505050565b816000015163ffffffff168163ffffffff1610156128c15760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a4016105c6565b602082015163ffffffff1615806128e75750816020015163ffffffff168163ffffffff16105b6129925760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c4016105c6565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612a3757600086815260026020908152604080832060ff89168452909152902063ffffffff8516906129ea600184613501565b815481106129fa576129fa61342d565b60009182526020909120015463ffffffff1611612a2557612a1c600182613501565b925050506114ad565b80612a2f816136a1565b9150506129b5565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e4016105c6565b60006114ad6001600160601b038085169084166136b8565b600080821215612b3857612b27826136f7565b612b319084613714565b9050610c64565b612b31828461365e565b604080516060810182526000808252602082018190529181019190915290565b803560ff81168114612b7357600080fd5b919050565b600060208284031215612b8a57600080fd5b6114ad82612b62565b60008060408385031215612ba657600080fd5b612baf83612b62565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612bf457600080fd5b50565b60008060408385031215612c0a57600080fd5b612c1383612b62565b91506020830135612c2381612bdf565b809150509250929050565b60008083601f840112612c4057600080fd5b5081356001600160401b03811115612c5757600080fd5b6020830191508360208260051b8501011115611f8b57600080fd5b600080600080600060608688031215612c8a57600080fd5b612c9386612b62565b945060208601356001600160401b0380821115612caf57600080fd5b612cbb89838a01612c2e565b90965094506040880135915080821115612cd457600080fd5b50612ce188828901612c2e565b969995985093965092949392505050565b60008083601f840112612d0457600080fd5b5081356001600160401b03811115612d1b57600080fd5b602083019150836020828501011115611f8b57600080fd5b60008060008060608587031215612d4957600080fd5b8435612d5481612bdf565b93506020850135925060408501356001600160401b03811115612d7657600080fd5b612d8287828801612cf2565b95989497509550505050565b600081518084526020808501945080840160005b83811015612dc75781516001600160601b031687529582019590820190600101612da2565b509495945050505050565b604081526000612de56040830185612d8e565b82810360208401526123838185612d8e565b60008060408385031215612e0a57600080fd5b82359150612e1a60208401612b62565b90509250929050565b63ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b6020808252825182820181905260009190848201906040850190845b81811015612e9457612e81838551612e23565b9284019260609290920191600101612e6e565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612ed857612ed8612ea0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612f0657612f06612ea0565b604052919050565b60006001600160401b03821115612f2757612f27612ea0565b5060051b60200190565b60008060408385031215612f4457600080fd5b612f4d83612b62565b91506020808401356001600160401b03811115612f6957600080fd5b8401601f81018613612f7a57600080fd5b8035612f8d612f8882612f0e565b612ede565b81815260059190911b82018301908381019088831115612fac57600080fd5b928401925b82841015612fca57833582529284019290840190612fb1565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b803563ffffffff81168114612b7357600080fd5b60008060006040848603121561301657600080fd5b61301f84612fed565b925060208401356001600160401b0381111561303a57600080fd5b61304686828701612cf2565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612e9457835163ffffffff168352928401929184019160010161306f565b6000806000606084860312156130a657600080fd5b6130af84612b62565b95602085013595506040909401359392505050565b60608101610c648284612e23565b80356001600160601b0381168114612b7357600080fd5b600080604083850312156130fc57600080fd5b61310583612b62565b9150612e1a602084016130d2565b60008060006040848603121561312857600080fd5b8335925060208401356001600160401b0381111561303a57600080fd5b600082601f83011261315657600080fd5b81356020613166612f8883612f0e565b82815260069290921b8401810191818101908684111561318557600080fd5b8286015b848110156131d457604081890312156131a25760008081fd5b6131aa612eb6565b81356131b581612bdf565b81526131c28286016130d2565b81860152835291830191604001613189565b509695505050505050565b600080604083850312156131f257600080fd5b6131fb83612b62565b915060208301356001600160401b0381111561321657600080fd5b61322285828601613145565b9150509250929050565b60008060006060848603121561324157600080fd5b61324a84612b62565b925061325860208501612fed565b9150604084013590509250925092565b60008060006060848603121561327d57600080fd5b8335925061328d60208501612b62565b915061329b60408501612fed565b90509250925092565b600080600080608085870312156132ba57600080fd5b6132c385612b62565b93506132d160208601612fed565b93969395505050506040820135916060013590565b6000806000606084860312156132fb57600080fd5b61330484612b62565b9250613312602085016130d2565b915060408401356001600160401b0381111561332d57600080fd5b61333986828701613145565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b6000602082840312156133a657600080fd5b81516114ad81612bdf565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561345557600080fd5b6114ad826130d2565b634e487b7160e01b600052601160045260246000fd5b60006000198214156134885761348861345e565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135135761351361345e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561357f578554851683526001958601959284019201613561565b509098975050505050505050565b600060208083850312156135a057600080fd5b82516001600160401b038111156135b657600080fd5b8301601f810185136135c757600080fd5b80516135d5612f8882612f0e565b81815260059190911b820183019083810190878311156135f457600080fd5b928401925b82841015613612578351825292840192908401906135f9565b979650505050505050565b60008160001904831182151516156136375761363761345e565b500290565b60008261365957634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b038083168185168083038211156136805761368061345e565b01949350505050565b6000821982111561369c5761369c61345e565b500190565b6000816136b0576136b061345e565b506000190190565b60008083128015600160ff1b8501841216156136d6576136d661345e565b6001600160ff1b03840183138116156136f1576136f161345e565b50500390565b6000600160ff1b82141561370d5761370d61345e565b5060000390565b60006001600160601b03838116908316818110156137345761373461345e565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d7311a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75a26469706673582212207e9a41b6d5ac3a5e50f0af34dafa95ef4729aea2fa853040a635f382b7887cb964736f6c634300080c0033","storage":{}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xc4e0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x322813fd9a801c5507c9de605d63cea4f2ce6c44":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a1366004611840565b6103ba565b005b6101a66101b636600461188a565b6104c1565b6101a66101c93660046118a7565b610574565b6101a66101dc3660046118c9565b610629565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61024160335481565b604051908152602001610208565b61024160645481565b6102416102663660046118e2565b61076d565b6101a661027936600461190e565b610911565b61024161028c36600461188a565b6109df565b6101a66109f3565b6102b86102a7366004611947565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e73660046118c9565b610abf565b6000546101f4906201000090046001600160a01b031681565b6102416103133660046118c9565b610b0a565b61024161032636600461188a565b610b15565b610333610b23565b604051610208919061199a565b61024161034e36600461188a565b610b43565b6101a66103613660046119cd565b610bd8565b60645460655460408051928352602083019190915201610208565b61024161038f3660046118c9565b610da1565b6102416103a23660046118c9565b610dda565b6101a66103b53660046118c9565b610de5565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611a0e565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b610460604051806040016040528060038152602001623c30b160e91b815250610f41565b61046a8585610f84565b6104748383611091565b80156104ba576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105389190611a5c565b6001600160a01b0316336001600160a01b0316146105685760405162461bcd60e51b815260040161041090611a79565b61057181611122565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb9190611a5c565b6001600160a01b0316336001600160a01b03161461061b5760405162461bcd60e51b815260040161041090611a79565b6106258282610f84565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190611ac3565b6106b65760405162461bcd60e51b815260040161041090611ae5565b6001548181161461072f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156107c25760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707161461083a5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b6108448484611227565b60335460006108556103e883611b43565b905060006103e8610864611309565b61086e9190611b43565b9050600061087c8783611b5b565b9050806108898489611b72565b6108939190611b91565b9550856108f95760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6109038685611b43565b603355505050505092915050565b600054610100900460ff16158080156109315750600054600160ff909116105b8061094b5750303b15801561094b575060005460ff166001145b6109675760405162461bcd60e51b815260040161041090611a0e565b6000805460ff19166001179055801561098a576000805461ff0019166101001790555b6109948383611091565b80156109da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109ed6102e783610b43565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190611ac3565b610a805760405162461bcd60e51b815260040161041090611ae5565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610ad29190611b43565b905060006103e8610ae1611309565b610aeb9190611b43565b905081610af88583611b72565b610b029190611b91565b949350505050565b60006109ed82610da1565b60006109ed6103a283610b43565b60606040518060800160405280604d8152602001611be9604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570790911690637a7e0d9290604401602060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ed9190611bb3565b6001805460029081161415610c2b5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071614610ca35760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610cae84848461137b565b60335480831115610d3d5760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d4b6103e883611b43565b905060006103e8610d5a611309565b610d649190611b43565b9050600082610d738784611b72565b610d7d9190611b91565b9050610d898685611b5b565b603355610d978888836113fe565b5050505050505050565b6000806103e8603354610db49190611b43565b905060006103e8610dc3611309565b610dcd9190611b43565b905080610af88386611b72565b60006109ed82610abf565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c9190611a5c565b6001600160a01b0316336001600160a01b031614610e8c5760405162461bcd60e51b815260040161041090611a79565b600154198119600154191614610f0a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610762565b61057181604051602401610f55919061199a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611412565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a1808211156110865760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110fc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610625816000611433565b6001600160a01b0381166111b05760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156112915760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b60655461129c611309565b11156112ff5760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b610625828261151f565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190611bb3565b905090565b6032546001600160a01b038381169116146109da5760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109da6001600160a01b038316848361159b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000546201000090046001600160a01b031615801561145a57506001600160a01b03821615155b6114dc5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261062582611122565b6032546001600160a01b038381169116146106255760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109da9286929160009161162b9185169084906116a8565b8051909150156109da57808060200190518101906116499190611ac3565b6109da5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606116b784846000856116c1565b90505b9392505050565b6060824710156117225760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6117795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516117959190611bcc565b60006040518083038185875af1925050503d80600081146117d2576040519150601f19603f3d011682016040523d82523d6000602084013e6117d7565b606091505b50915091506117e78282866117f2565b979650505050505050565b606083156118015750816116ba565b8251156118115782518084602001fd5b8160405162461bcd60e51b8152600401610410919061199a565b6001600160a01b038116811461057157600080fd5b6000806000806080858703121561185657600080fd5b8435935060208501359250604085013561186f8161182b565b9150606085013561187f8161182b565b939692955090935050565b60006020828403121561189c57600080fd5b81356116ba8161182b565b600080604083850312156118ba57600080fd5b50508035926020909101359150565b6000602082840312156118db57600080fd5b5035919050565b600080604083850312156118f557600080fd5b82356119008161182b565b946020939093013593505050565b6000806040838503121561192157600080fd5b823561192c8161182b565b9150602083013561193c8161182b565b809150509250929050565b60006020828403121561195957600080fd5b813560ff811681146116ba57600080fd5b60005b8381101561198557818101518382015260200161196d565b83811115611994576000848401525b50505050565b60208152600082518060208401526119b981604085016020870161196a565b601f01601f19169190910160400192915050565b6000806000606084860312156119e257600080fd5b83356119ed8161182b565b925060208401356119fd8161182b565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060208284031215611a6e57600080fd5b81516116ba8161182b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611ad557600080fd5b815180151581146116ba57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b5657611b56611b2d565b500190565b600082821015611b6d57611b6d611b2d565b500390565b6000816000190483118215151615611b8c57611b8c611b2d565b500290565b600082611bae57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611bc557600080fd5b5051919050565b60008251611bde81846020870161196a565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220a89cdda625de6600f138ef9c77378533a2536b7715b55abf2eebb15ea238933f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x36c02da8a0983159322a80ffe9f24b1acff8b570":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7969c5ed335650692bc04293b07f5bf2e7a673c0","0x3640069662c3880c0f70896f1ea7ab948dbe8edba5c22fb35137874584edfab7":"0x1","0x6fe317c46e5eb99b18a02254581a535777feba1137e4ab98748fd94c55e2f16f":"0x1","0x7d1c12449d2a49ce59962642fe4a8c74e48ad3f56a716a3bc12ada6bf75e155d":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xe02835104633dd65c916ccb9978ae220ed27db9f2ae0915bd6a5594cfbeedeb8":"0x1"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4826533b4897376654bb4d4ad88b7fafd0c98528":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212208a1326bc5b69f9ecf1c6c0d757e50103bb848a7d9d4383fa44ee54e7b71a39a464736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0x4c5859f0f772848b2d91f1d83e2fe57935348029":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80633563b0d1146100515780634f739f741461007a5780635c1556621461009a578063cefdc1d4146100ba575b600080fd5b61006461005f366004611172565b6100db565b60405161007191906112cd565b60405180910390f35b61008d610088366004611332565b610571565b6040516100719190611435565b6100ad6100a8366004611513565b610c9b565b60405161007191906115c4565b6100cd6100c8366004611608565b610e63565b60405161007192919061164a565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561011d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610141919061166b565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a7919061166b565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020d919061166b565b9050600086516001600160401b0381111561022a5761022a61110a565b60405190808252806020026020018201604052801561025d57816020015b60608152602001906001900390816102485790505b50905060005b875181101561056557600088828151811061028057610280611688565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa1580156102e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610309919081019061169e565b905080516001600160401b038111156103245761032461110a565b60405190808252806020026020018201604052801561036f57816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816103425790505b5084848151811061038257610382611688565b602002602001018190525060005b815181101561054f576040518060600160405280876001600160a01b03166347b314e88585815181106103c5576103c5611688565b60200260200101516040518263ffffffff1660e01b81526004016103eb91815260200190565b602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c919061166b565b6001600160a01b0316815260200183838151811061044c5761044c611688565b60200260200101518152602001896001600160a01b031663fa28c62785858151811061047a5761047a611688565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa1580156104d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fa919061172e565b6001600160601b031681525085858151811061051857610518611688565b6020026020010151828151811061053157610531611688565b602002602001018190525080806105479061176d565b915050610390565b505050808061055d9061176d565b915050610263565b50979650505050505050565b61059c6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610600919061166b565b905061062d6040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e9061065d908b9089908990600401611788565b600060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106a291908101906117d2565b81526040516340e03a8160e11b81526001600160a01b038316906381c07502906106d4908b908b908b90600401611889565b600060405180830381865afa1580156106f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071991908101906117d2565b6040820152856001600160401b038111156107365761073661110a565b60405190808252806020026020018201604052801561076957816020015b60608152602001906001900390816107545790505b50606082015260005b60ff8116871115610bac576000856001600160401b038111156107975761079761110a565b6040519080825280602002602001820160405280156107c0578160200160208202803683370190505b5083606001518360ff16815181106107da576107da611688565b602002602001018190525060005b86811015610aac5760008c6001600160a01b03166304ec63518a8a8581811061081357610813611688565b905060200201358e8860000151868151811061083157610831611688565b60200260200101516040518463ffffffff1660e01b815260040161086e9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af91906118b2565b90506001600160c01b0381166109575760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff1681811061096c5761096c611688565b6001600160c01b03841692013560f81c9190911c600190811614159050610a9957856001600160a01b031663dd9846b98a8a858181106109ae576109ae611688565b905060200201358d8d8860ff168181106109ca576109ca611688565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4491906118db565b85606001518560ff1681518110610a5d57610a5d611688565b60200260200101518481518110610a7657610a76611688565b63ffffffff9092166020928302919091019091015282610a958161176d565b9350505b5080610aa48161176d565b9150506107e8565b506000816001600160401b03811115610ac757610ac761110a565b604051908082528060200260200182016040528015610af0578160200160208202803683370190505b50905060005b82811015610b715784606001518460ff1681518110610b1757610b17611688565b60200260200101518181518110610b3057610b30611688565b6020026020010151828281518110610b4a57610b4a611688565b63ffffffff9092166020928302919091019091015280610b698161176d565b915050610af6565b508084606001518460ff1681518110610b8c57610b8c611688565b602002602001018190525050508080610ba4906118f8565b915050610772565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c11919061166b565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610c44908b908b908e90600401611918565b600060405180830381865afa158015610c61573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8991908101906117d2565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610ccd929190611942565b600060405180830381865afa158015610cea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d1291908101906117d2565b9050600084516001600160401b03811115610d2f57610d2f61110a565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50905060005b8551811015610e5957866001600160a01b03166304ec6351878381518110610d8857610d88611688565b602002602001015187868581518110610da357610da3611688565b60200260200101516040518463ffffffff1660e01b8152600401610de09392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2191906118b2565b6001600160c01b0316828281518110610e3c57610e3c611688565b602090810291909101015280610e518161176d565b915050610d5e565b5095945050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610e9e57610e9e611688565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e90610eda9088908690600401611942565b600060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f1f91908101906117d2565b600081518110610f3157610f31611688565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015610f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc191906118b2565b6001600160c01b031690506000610fd782610ff5565b905081610fe58a838a6100db565b9550955050505050935093915050565b6060600080611003846110c1565b61ffff166001600160401b0381111561101e5761101e61110a565b6040519080825280601f01601f191660200182016040528015611048576020820181803683370190505b5090506000805b825182108015611060575061010081105b156110b7576001811b9350858416156110a7578060f81b83838151811061108957611089611688565b60200101906001600160f81b031916908160001a9053508160010191505b6110b08161176d565b905061104f565b5090949350505050565b6000805b82156110ec576110d6600184611996565b90921691806110e4816119ad565b9150506110c5565b92915050565b6001600160a01b038116811461110757600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156111485761114861110a565b604052919050565b63ffffffff8116811461110757600080fd5b803561116d81611150565b919050565b60008060006060848603121561118757600080fd5b8335611192816110f2565b92506020848101356001600160401b03808211156111af57600080fd5b818701915087601f8301126111c357600080fd5b8135818111156111d5576111d561110a565b6111e7601f8201601f19168501611120565b915080825288848285010111156111fd57600080fd5b808484018584013760008482840101525080945050505061122060408501611162565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b868110156112bf578385038a52825180518087529087019087870190845b818110156112aa57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611266565b50509a87019a95505091850191600101611248565b509298975050505050505050565b6020815260006112e06020830184611229565b9392505050565b60008083601f8401126112f957600080fd5b5081356001600160401b0381111561131057600080fd5b6020830191508360208260051b850101111561132b57600080fd5b9250929050565b6000806000806000806080878903121561134b57600080fd5b8635611356816110f2565b9550602087013561136681611150565b945060408701356001600160401b038082111561138257600080fd5b818901915089601f83011261139657600080fd5b8135818111156113a557600080fd5b8a60208285010111156113b757600080fd5b6020830196508095505060608901359150808211156113d557600080fd5b506113e289828a016112e7565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b8381101561142a57815163ffffffff1687529582019590820190600101611408565b509495945050505050565b60006020808352835160808285015261145160a08501826113f4565b905081850151601f198086840301604087015261146e83836113f4565b9250604087015191508086840301606087015261148b83836113f4565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156114e257848783030184526114d08287516113f4565b958801959388019391506001016114b6565b509998505050505050505050565b60006001600160401b038211156115095761150961110a565b5060051b60200190565b60008060006060848603121561152857600080fd5b8335611533816110f2565b92506020848101356001600160401b0381111561154f57600080fd5b8501601f8101871361156057600080fd5b803561157361156e826114f0565b611120565b81815260059190911b8201830190838101908983111561159257600080fd5b928401925b828410156115b057833582529284019290840190611597565b809650505050505061122060408501611162565b6020808252825182820181905260009190848201906040850190845b818110156115fc578351835292840192918401916001016115e0565b50909695505050505050565b60008060006060848603121561161d57600080fd5b8335611628816110f2565b925060208401359150604084013561163f81611150565b809150509250925092565b8281526040602082015260006116636040830184611229565b949350505050565b60006020828403121561167d57600080fd5b81516112e0816110f2565b634e487b7160e01b600052603260045260246000fd5b600060208083850312156116b157600080fd5b82516001600160401b038111156116c757600080fd5b8301601f810185136116d857600080fd5b80516116e661156e826114f0565b81815260059190911b8201830190838101908783111561170557600080fd5b928401925b828410156117235783518252928401929084019061170a565b979650505050505050565b60006020828403121561174057600080fd5b81516001600160601b03811681146112e057600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561178157611781611757565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b038311156117b557600080fd5b8260051b8085606085013760009201606001918252509392505050565b600060208083850312156117e557600080fd5b82516001600160401b038111156117fb57600080fd5b8301601f8101851361180c57600080fd5b805161181a61156e826114f0565b81815260059190911b8201830190838101908783111561183957600080fd5b928401925b8284101561172357835161185181611150565b8252928401929084019061183e565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff841681526040602082015260006118a9604083018486611860565b95945050505050565b6000602082840312156118c457600080fd5b81516001600160c01b03811681146112e057600080fd5b6000602082840312156118ed57600080fd5b81516112e081611150565b600060ff821660ff81141561190f5761190f611757565b60010192915050565b60408152600061192c604083018587611860565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b818110156119895784518352938301939183019160010161196d565b5090979650505050505050565b6000828210156119a8576119a8611757565b500390565b600061ffff808316818114156119c5576119c5611757565b600101939250505056fea2646970667358221220989e57de351772a7f933bb7234d90ef2f41b46d0a8e8b45b21148630c71d925e64736f6c634300080c0033","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x82e01223d51eb87e16a03e24687edf0f294da6f1","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xa"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea264697066735822122054cc08528c85698c827d34c7e7f3bb44ba8e6884f2ac3e1af765d47dbde707b664736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0x8142bc69583e169802e72d5824b8ed949e78cca596c0561765426c8c058957fd","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x69f9147759798decd1797da71845df896876bd17efcd483aa8482ae4658bf0a0":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3","0xe6ed2999f13697c9ffb91df2afc9d713c528d12f30b6022f27ccddb8723728d2":"0x0"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea2646970667358221220a22223d3e2a2d861ad54e68b7bc44b4d82a5a12a0bcca5c3404502bb1b430c5c64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x8a791620dd6260079bf849dc5567adc3f2fdc318"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061006b5760003560e01c8063204e1c7a14610070578063715018a6146100a65780637eff275e146100bd5780638da5cb5b146100dd5780639623609d146100fb57806399a88ec41461010e578063f2fde38b1461012e578063f3b7dead1461014e575b600080fd5b34801561007c57600080fd5b5061009061008b366004610483565b61016e565b60405161009d91906104a7565b60405180910390f35b3480156100b257600080fd5b506100bb6101ff565b005b3480156100c957600080fd5b506100bb6100d83660046104bb565b610213565b3480156100e957600080fd5b506000546001600160a01b0316610090565b6100bb61010936600461050a565b61027d565b34801561011a57600080fd5b506100bb6101293660046104bb565b6102ec565b34801561013a57600080fd5b506100bb610149366004610483565b610320565b34801561015a57600080fd5b50610090610169366004610483565b61039e565b6000806000836001600160a01b031660405161019490635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101cf576040519150601f19603f3d011682016040523d82523d6000602084013e6101d4565b606091505b5091509150816101e357600080fd5b808060200190518101906101f791906105e0565b949350505050565b6102076103c4565b610211600061041e565b565b61021b6103c4565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102479084906004016104a7565b600060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050505050565b6102856103c4565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b590869086906004016105fd565b6000604051808303818588803b1580156102ce57600080fd5b505af11580156102e2573d6000803e3d6000fd5b5050505050505050565b6102f46103c4565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102479084906004016104a7565b6103286103c4565b6001600160a01b0381166103925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039b8161041e565b50565b6000806000836001600160a01b0316604051610194906303e1469160e61b815260040190565b6000546001600160a01b031633146102115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461039b57600080fd5b60006020828403121561049557600080fd5b81356104a08161046e565b9392505050565b6001600160a01b0391909116815260200190565b600080604083850312156104ce57600080fd5b82356104d98161046e565b915060208301356104e98161046e565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561051f57600080fd5b833561052a8161046e565b9250602084013561053a8161046e565b9150604084013567ffffffffffffffff8082111561055757600080fd5b818601915086601f83011261056b57600080fd5b81358181111561057d5761057d6104f4565b604051601f8201601f19908116603f011681019083821181831017156105a5576105a56104f4565b816040528281528960208487010111156105be57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f257600080fd5b81516104a08161046e565b60018060a01b038316815260006020604081840152835180604085015260005b818110156106395785810183015185820160600152820161061d565b8181111561064b576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200eedf560ba2321bf32a2a337105c715afa9340aaee48022babd6824214e3416964736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061006d5760003560e01c8063046a0654146100725780630ca192c71461009c5780632e8da829146100b15780636d14a987146100e457806389a652ce14610123578063af99fa0e1461013e578063bfe1073814610166575b600080fd5b610085610080366004610a21565b61016e565b604051610093929190610aaa565b60405180910390f35b6100af6100aa366004610af0565b610394565b005b6100d46100bf366004610b2e565b60026020526000908152604090205460ff1681565b6040519015158152602001610093565b61010b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516001600160a01b039091168152602001610093565b6001546040516001600160401b039091168152602001610093565b61015161014c366004610b4b565b610535565b60405163ffffffff9091168152602001610093565b6100af61056f565b60608060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610b64565b905060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027b9190610b64565b905060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190610b64565b90506001600160401b0386161561036b5761036860016103218189610b97565b6001600160401b03168154811061033a5761033a610bbf565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1684848461073a565b94505b61038a6001876001600160401b03168154811061033a5761033a610bbf565b9350505050915091565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610b64565b6001600160a01b0316336001600160a01b0316146104d65760405162461bcd60e51b815260206004820152606660248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c79436f6f7264696e61746f724f776e65723a2063616c6c6572206973206e6f60648201527f7420746865206f776e6572206f6620746865207265676973747279436f6f726460848201526534b730ba37b960d11b60a482015260c4015b60405180910390fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f2b83db0a8941bdf64ef44d95a1a397fdbcb6fd1b93ed421b73d00ddcecf5c793910160405180910390a25050565b6001818154811061054557600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146106335760405162461bcd60e51b815260206004820152605d60248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c795265676973747279436f6f7264696e61746f723a2063616c6c657220697360648201527f206e6f742074686520726567697374727920636f6f7264696e61746f72000000608482015260a4016104cd565b6001546001600160401b0381161580159061069557504360016106568184610b97565b6001600160401b03168154811061066f5761066f610bbf565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16145b1561069d5750565b426001600160401b0316816001600160401b03167fc48e61b12810d368042f781cfb732d0abb725377d90b600f78e0cec7dbd0c28d60405160405180910390a3506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008820401805460079092166004026101000a63ffffffff818102199093164390931602919091179055565b604051638902624560e01b815260006004820181905263ffffffff861660248301526060916001600160a01b03851690638902624590604401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190610c1b565b9050600081516001600160401b038111156107d5576107d5610bd5565b60405190808252806020026020018201604052801561082957816020015b60408051608081018252600091810182815260608201839052815260208101919091528152602001906001900390816107f35790505b50905060005b8251811015610a1657600083828151811061084c5761084c610bbf565b602002602001015190506000866001600160a01b03166347b314e8836040518263ffffffff1660e01b815260040161088691815260200190565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610b64565b604051637ff81a8760e01b81526001600160a01b038083166004830152919250600091891690637ff81a8790602401606060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190610cc0565b5060405163fa28c62760e01b81526004810185905260006024820181905263ffffffff8e1660448301529192506001600160a01b038c169063fa28c62790606401602060405180830381865afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b99190610d26565b90506040518060400160405280838152602001826001600160601b03166001600160801b03168152508686815181106109f4576109f4610bbf565b6020026020010181905250505050508080610a0e90610d4f565b91505061082f565b509695505050505050565b600060208284031215610a3357600080fd5b81356001600160401b0381168114610a4a57600080fd5b9392505050565b600081518084526020808501945080840160005b83811015610a9f578151805180518952840151848901528301516001600160801b0316604088015260609096019590820190600101610a65565b509495945050505050565b604081526000610abd6040830185610a51565b8281036020840152610acf8185610a51565b95945050505050565b6001600160a01b0381168114610aed57600080fd5b50565b60008060408385031215610b0357600080fd5b8235610b0e81610ad8565b915060208301358015158114610b2357600080fd5b809150509250929050565b600060208284031215610b4057600080fd5b8135610a4a81610ad8565b600060208284031215610b5d57600080fd5b5035919050565b600060208284031215610b7657600080fd5b8151610a4a81610ad8565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0383811690831681811015610bb757610bb7610b81565b039392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610c1357610c13610bd5565b604052919050565b60006020808385031215610c2e57600080fd5b82516001600160401b0380821115610c4557600080fd5b818501915085601f830112610c5957600080fd5b815181811115610c6b57610c6b610bd5565b8060051b9150610c7c848301610beb565b8181529183018401918481019088841115610c9657600080fd5b938501935b83851015610cb457845182529385019390850190610c9b565b98975050505050505050565b6000808284036060811215610cd457600080fd5b6040811215610ce257600080fd5b50604051604081018181106001600160401b0382111715610d0557610d05610bd5565b60409081528451825260208086015190830152939093015192949293505050565b600060208284031215610d3857600080fd5b81516001600160601b0381168114610a4a57600080fd5b6000600019821415610d6357610d63610b81565b506001019056fea2646970667358221220c83f0a5dd73f6b3f404f29c9e8cf82d0c35e2eecbc2a5c48bee1657e98a06e1964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x7322c24752f79c05ffd1e2a6fcb97020c1c264f1","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0xa","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x1291be112d480055dafd8a610b7d1e203891c274","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a764000095401dc811bb5740090279ba06cfa8fcf6113778"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea26469706673582212204ee73059b3b9231f5aa2b00ad155fdb9c8d95ffc311fc1a88b56d665dd79ce7764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220fd5e700a23418fb34398844556f26001a24356fb1d6fe8c5b0a6ddcc2940deb764736f6c634300080c0033","storage":{}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614b54565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000bc16d674ec80000081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614b91565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614c24565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561039b57600080fd5b506103af6103aa366004614d35565b610c05565b60405161020f9190614dae565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614dbc565b610c6a565b60405161020f9190614dd5565b34801561041557600080fd5b506103af610424366004614dbc565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614e1d565b610d17565b3480156104ba57600080fd5b5061022d6104c9366004614e90565b610ec4565b3480156104da57600080fd5b506103fc6104e9366004614d35565b611293565b3480156104fa57600080fd5b5061022d611386565b34801561050f57600080fd5b5061022d61051e366004614f3a565b6113f1565b34801561052f57600080fd5b5061022d61053e366004614f66565b61162e565b34801561054f57600080fd5b5061022d61055e366004615080565b611806565b34801561056f57600080fd5b5061022d61057e366004615151565b6119d9565b34801561058f57600080fd5b5061022d61059e366004614f3a565b611da4565b3480156105af57600080fd5b506102977f0000000000000000000000000000000000000000000000000000000065156ac081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061524c565b156106ad5760405162461bcd60e51b81526004016106a49061526e565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a490615313565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f87565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061524c565b156108375760405162461bcd60e51b81526004016106a49061526e565b60335489906001600160401b03600160a01b90910481169082161161086e5760405162461bcd60e51b81526004016106a490615362565b603454600160401b900460ff166108e65760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f457508483145b6109845760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099a613f486001600160401b038d16614b54565b1015610a235760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acc907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab891906153fd565b8a35610ac760208d018d615416565b611fbb565b6000805b88811015610b7057610b528c8c358c8c85818110610af057610af061545c565b9050602002016020810190610b059190615472565b8b8b86818110610b1757610b1761545c565b9050602002810190610b299190615416565b8b8b88818110610b3b57610b3b61545c565b9050602002810190610b4d9190615499565b612149565b610b5c9083614b54565b915080610b68816154e2565b915050610ad0565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8539091169063c2c51c4090604401600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c926040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfd57610cfd614d76565b6002811115610d0e57610d0e614d76565b90525092915050565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8531614610d5f5760405162461bcd60e51b81526004016106a4906154fd565b346801bc16d674ec80000014610deb5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610e2e6126fd565b8888886040518863ffffffff1660e01b8152600401610e52969594939291906155cf565b6000604051808303818588803b158015610e6b57600080fd5b505af1158015610e7f573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb592919061561e565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f50919061524c565b15610f6d5760405162461bcd60e51b81526004016106a49061526e565b8684148015610f7b57508382145b6110045760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101a613f486001600160401b038c16614b54565b101561109c5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611140907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906153fd565b8735610ac760208a018a615416565b6000805b888110156111e4576111c68b8b8b848181106111625761116261545c565b90506020020160208101906111779190615472565b8a358a8a8681811061118b5761118b61545c565b905060200281019061119d9190615416565b8a8a888181106111af576111af61545c565b90506020028101906111c19190615499565b612742565b6111d09083615632565b9150806111dc816154e2565b915050611144565b506033546001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169163c2c51c409116611229633b9aca0085615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126f57600080fd5b505af1158015611283573d6000803e3d6000fd5b5050505050505050505050505050565b6112bb6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112fe85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136b5761136b614d76565b600281111561137c5761137c614d76565b9052509392505050565b6033546001600160a01b031633146113b05760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156113da5760405162461bcd60e51b81526004016106a490615313565b6033546113ef906001600160a01b0316611f87565b565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316146114395760405162461bcd60e51b81526004016106a4906154fd565b611447633b9aca008261570e565b156114d15760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e1633b9aca0083615722565b6034549091506001600160401b03908116908216111561159a5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b89084906001600160401b0316615736565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161791815260200190565b60405180910390a26116298383612c20565b505050565b600054610100900460ff161580801561164e5750600054600160ff909116105b806116685750303b158015611668575060005460ff166001145b6116cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ee576000805461ff0019166101001790555b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611802576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118305760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc919061524c565b156118d95760405162461bcd60e51b81526004016106a49061526e565b82518451146119645760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d2576119c0838583815181106119865761198661545c565b60200260200101518784815181106119a0576119a061545c565b60200260200101516001600160a01b0316612c2a9092919063ffffffff16565b806119ca816154e2565b915050611967565b5050505050565b604051635ac86ab760e01b81526004808201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061524c565b15611a815760405162461bcd60e51b81526004016106a49061526e565b8386148015611a8f57508588145b8015611a9a57508782145b611b0e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb2907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba391906153fd565b8b35610ac760208e018e615416565b604080518082019091526000808252602082015260005b83811015611cb2576000611c6d8d358d8d85818110611bea57611bea61545c565b9050602002810190611bfc919061575e565b8c8c86818110611c0e57611c0e61545c565b9050602002810190611c209190615416565b8c8c88818110611c3257611c3261545c565b9050602002810190611c449190615499565b8c8c8a818110611c5657611c5661545c565b9050602002810190611c689190615499565b612c7c565b80518451919250908490611c82908390614b54565b9052506020808201519084018051611c9b908390615632565b905250819050611caa816154e2565b915050611bc9565b50805115611ce1576033548151611ce1916001600160a01b031690611cdc90633b9aca009061577f565b613167565b602081015115611d965760335460208201516001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169263c2c51c4092911690611d3790633b9aca0090615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dce5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a919061524c565b15611e775760405162461bcd60e51b81526004016106a49061526e565b603754821115611f285760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3a919061579e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116298383613167565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb88147613167565b50565b611fc76003602061577f565b81146120575760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150600390506131f5565b6121435760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f7576121f7614d76565b600281111561220857612208614d76565b905250905060008160600151600281111561222557612225614d76565b146122ce5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d66126fd565b6122df906157b5565b61231b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323192505050565b146123a25760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b90506123f08a87878b8b8e61326b565b60398054906000612400836154e2565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000bc16d674ec80000081169082161115612486576001600160401b037f000000000000000000000000000000000000000000000000bc16d674ec800000166020830152612496565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561253457612534614d76565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125cf9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125f4919061577f565b9b9a5050505050505050505050565b6000815160301461268c5760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b6040516002906126a39084906000906020016157d9565b60408051601f19818403018152908290526126bd91615808565b602060405180830381855afa1580156126da573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6491906153fd565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061278184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b905060006127c185858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561283057612830614d76565b600281111561284157612841614d76565b8152505090508a6001600160401b031681604001516001600160401b0316106128f85760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b60018160600151600281111561291057612910614d76565b146129785760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b6129818b6134c2565b6001600160401b03166129c68787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b031611612a69576000836001600160401b031611612a695760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a778987878b8b8f61326b565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000bc16d674ec80000081169086161115612ad957507f000000000000000000000000000000000000000000000000bc16d674ec800000612adc565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b8457612b84614d76565b0217905550905050816001600160401b0316816001600160401b031614612c10577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612bfb9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612c0d81836135c4565b95505b5050505050979650505050505050565b61180282826135e3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116299084906136fc565b6040805180820190915260008082526020820152612ca1612c9c89615889565b6137ce565b6033546001600160401b03600160a01b909104811690821611612cd65760405162461bcd60e51b81526004016106a490615362565b6000612ce4612c9c8b615889565b90506000612d2488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d5157612d51614d76565b1415612e085760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612ec75760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550612fa48c87878e7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9f91906159c5565b6137de565b6000612fe28787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141ff92505050565b9050612ff28d8a8a8e8e8661326b565b600061303088888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061421792505050565b905061306e8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b03166130886130838f615889565b61422f565b6001600160401b03161061314057603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261313593869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561311c5761311c614d76565b600281111561312d5761312d614d76565b905250614241565b95505050505061315a565b60335461313590839086906001600160a01b03168461447f565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c0db354c9083906044016000604051808303818588803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b50505050505050565b60008361320386858561455d565b1495945050505050565b6000816000815181106132225761322261545c565b60200260200101519050919050565b6000816001815181106132225761322261545c565b6000610c648260028151811061325e5761325e61545c565b60200260200101516146a9565b61327760036002615ac6565b84146133025760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561331060286001614b54565b61331a9190614b54565b61332590602061577f565b82146133a55760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166133bb60286001614b54565b600b901b179050600061340087878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b905061344685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508591508690506131f5565b6134b85760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f0000000000000000000000000000000000000000000000000000000065156ac06001600160401b0316826001600160401b0316101561356c5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b613578600c6020615ad2565b6135a27f0000000000000000000000000000000000000000000000000000000065156ac084615736565b610c649190615b01565b6000610c648260078151811061325e5761325e61545c565b60006135dc6001600160401b03808416908516615b27565b9392505050565b804710156136335760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b50509050806116295760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613751826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149bd9092919063ffffffff16565b805190915015611629578080602001905181019061376f919061524c565b6116295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c648261014001516146a9565b6137e9600280615ac6565b831461385d5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b613869600d6002615ac6565b61387960c0840160a08501615b66565b6001600160401b0316106138e35760405162461bcd60e51b815260206004820152603f6024820152600080516020615bd983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b6138ef60046002615ac6565b613900610100840160e08501615b66565b6001600160401b03161061396c576040805162461bcd60e51b8152602060048201526024810191909152600080516020615bd983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b61397860186002615ac6565b61398860e0840160c08501615b66565b6001600160401b031610613a025760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613a1a612c9c85615889565b6001600160401b031610613a2f576005613a32565b60045b9050613a3f600482614b54565b613a4a906001614b54565b613a5590602061577f565b613a5f8480615416565b905014613ad35760405162461bcd60e51b81526020600482015260486024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613adf60046003614b54565b613aea90602061577f565b613af76040850185615416565b905014613b715760405162461bcd60e51b815260206004820152604e6024820152600080516020615bd983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613b7d6003602061577f565b613b8a6020850185615416565b905014613bf85760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613c0381602061577f565b613c106060850185615416565b905014613c835760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613c9160186001614b54565b613c9c906005614b54565b613ca7906001614b54565b613cb19190614b54565b613cbc90602061577f565b613cc96080850185615416565b905014613d525760405162461bcd60e51b81526020600482015260586024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613d6460c0850160a08601615b66565b6001600160401b03166000613d7b600d6001614b54565b613d8b60e0880160c08901615b66565b6001600160401b0316901b600d613da460186001614b54565b613daf906001614b54565b613db99190614b54565b601b901b1717179050613e14613dd26080860186615416565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92505050610100870135846131f5565b613e875760405162461bcd60e51b815260206004820152604a6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613ede613e976020860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a0135925090506131f5565b613f3e5760405162461bcd60e51b815260206004820152603d6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613f96613f506040870187615416565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610100870135610160880135846131f5565b6140085760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506140606140196060860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016086013561014087013560096131f5565b6140cb5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b60006140de610100860160e08701615b66565b6001600160401b03166140f360046001614b54565b600e901b179050600061413888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b90506141886141478780615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016088013583856131f5565b6141f45760405162461bcd60e51b81526020600482015260436024820152600080516020615bd983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610c648260018151811061325e5761325e61545c565b6000610c648260038151811061325e5761325e61545c565b600060206135a28361012001516146a9565b604080518082019091526000808252602082015260007f000000000000000000000000000000000000000000000000bc16d674ec8000006001600160401b0316846001600160401b031611156142b857507f000000000000000000000000000000000000000000000000bc16d674ec8000006142bb565b50825b60408051808201909152600080825260208201526142d98286615736565b6001600160401b0390811682526034805484926000916142fb91859116615b83565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061432d8285602001516135c4565b602082015260028460600151600281111561434a5761434a614d76565b1461436c576039805490600061435f83615bae565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561441157614411614d76565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906145109084906001600160401b0316615b83565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561457c57506020845161457a919061570e565b155b61460b5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b8551811161469f5761462f60028561570e565b614662578151600052808601516020526020826040600060026107d05a03fa61465757600080fd5b60028404935061468d565b8086015160005281516020526020826040600060026107d05a03fa61468657600080fd5b6002840493505b614698602082614b54565b905061461c565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b600080600283516147219190615722565b90506000816001600160401b0381111561473d5761473d614f83565b604051908082528060200260200182016040528015614766578160200160208202803683370190505b50905060005b8281101561486d57600285614781838361577f565b815181106147915761479161545c565b6020026020010151868360026147a7919061577f565b6147b2906001614b54565b815181106147c2576147c261545c565b60200260200101516040516020016147e4929190918252602082015260400190565b60408051601f19818403018152908290526147fe91615808565b602060405180830381855afa15801561481b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061483e91906153fd565b8282815181106148505761485061545c565b602090810291909101015280614865816154e2565b91505061476c565b50614879600283615722565b91505b81156149995760005b828110156149865760028261489a838361577f565b815181106148aa576148aa61545c565b6020026020010151838360026148c0919061577f565b6148cb906001614b54565b815181106148db576148db61545c565b60200260200101516040516020016148fd929190918252602082015260400190565b60408051601f198184030181529082905261491791615808565b602060405180830381855afa158015614934573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061495791906153fd565b8282815181106149695761496961545c565b60209081029190910101528061497e816154e2565b915050614885565b50614992600283615722565b915061487c565b806000815181106149ac576149ac61545c565b602002602001015192505050919050565b60606149cc84846000856149d4565b949350505050565b606082471015614a355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614a8c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614aa89190615808565b60006040518083038185875af1925050503d8060008114614ae5576040519150601f19603f3d011682016040523d82523d6000602084013e614aea565b606091505b5091509150614afa828286614b05565b979650505050505050565b60608315614b145750816135dc565b825115614b245782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615bc5565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b6757614b67614b3e565b500190565b6001600160401b0381168114611fb857600080fd5b8035614b8c81614b6c565b919050565b60008060408385031215614ba457600080fd5b823591506020830135614bb681614b6c565b809150509250929050565b600060408284031215614bd357600080fd5b50919050565b60008083601f840112614beb57600080fd5b5081356001600160401b03811115614c0257600080fd5b6020830191508360208260051b8501011115614c1d57600080fd5b9250929050565b60008060008060008060008060a0898b031215614c4057600080fd5b8835614c4b81614b6c565b975060208901356001600160401b0380821115614c6757600080fd5b614c738c838d01614bc1565b985060408b0135915080821115614c8957600080fd5b614c958c838d01614bd9565b909850965060608b0135915080821115614cae57600080fd5b614cba8c838d01614bd9565b909650945060808b0135915080821115614cd357600080fd5b50614ce08b828c01614bd9565b999c989b5096995094979396929594505050565b60008083601f840112614d0657600080fd5b5081356001600160401b03811115614d1d57600080fd5b602083019150836020828501011115614c1d57600080fd5b60008060208385031215614d4857600080fd5b82356001600160401b03811115614d5e57600080fd5b614d6a85828601614cf4565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614daa57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c648284614d8c565b600060208284031215614dce57600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614e166060840182614d8c565b5092915050565b600080600080600060608688031215614e3557600080fd5b85356001600160401b0380821115614e4c57600080fd5b614e5889838a01614cf4565b90975095506020880135915080821115614e7157600080fd5b50614e7e88828901614cf4565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614eac57600080fd5b8835614eb781614b6c565b975060208901356001600160401b0380821115614ed357600080fd5b614edf8c838d01614bd9565b909950975060408b0135915080821115614ef857600080fd5b614f048c838d01614bc1565b965060608b0135915080821115614cae57600080fd5b6001600160a01b0381168114611fb857600080fd5b8035614b8c81614f1a565b60008060408385031215614f4d57600080fd5b8235614f5881614f1a565b946020939093013593505050565b600060208284031215614f7857600080fd5b81356135dc81614f1a565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614fbc57614fbc614f83565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fea57614fea614f83565b604052919050565b60006001600160401b0382111561500b5761500b614f83565b5060051b60200190565b600082601f83011261502657600080fd5b8135602061503b61503683614ff2565b614fc2565b82815260059290921b8401810191818101908684111561505a57600080fd5b8286015b84811015615075578035835291830191830161505e565b509695505050505050565b60008060006060848603121561509557600080fd5b83356001600160401b03808211156150ac57600080fd5b818601915086601f8301126150c057600080fd5b813560206150d061503683614ff2565b82815260059290921b8401810191818101908a8411156150ef57600080fd5b948201945b8386101561511657853561510781614f1a565b825294820194908201906150f4565b9750508701359250508082111561512c57600080fd5b5061513986828701615015565b92505061514860408501614f2f565b90509250925092565b60008060008060008060008060008060c08b8d03121561517057600080fd5b6151798b614b81565b995060208b01356001600160401b038082111561519557600080fd5b6151a18e838f01614bc1565b9a5060408d01359150808211156151b757600080fd5b6151c38e838f01614bd9565b909a50985060608d01359150808211156151dc57600080fd5b6151e88e838f01614bd9565b909850965060808d013591508082111561520157600080fd5b61520d8e838f01614bd9565b909650945060a08d013591508082111561522657600080fd5b506152338d828e01614bd9565b915080935050809150509295989b9194979a5092959850565b60006020828403121561525e57600080fd5b815180151581146135dc57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b60006020828403121561540f57600080fd5b5051919050565b6000808335601e1984360301811261542d57600080fd5b8301803591506001600160401b0382111561544757600080fd5b602001915036819003821315614c1d57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561548457600080fd5b813564ffffffffff811681146135dc57600080fd5b6000808335601e198436030181126154b057600080fd5b8301803591506001600160401b038211156154ca57600080fd5b6020019150600581901b3603821315614c1d57600080fd5b60006000198214156154f6576154f6614b3e565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561559257818101518382015260200161557a565b838111156121435750506000910152565b600081518084526155bb816020860160208601615577565b601f01601f19169290920160200192915050565b6080815260006155e360808301888a61554e565b82810360208401526155f581886155a3565b9050828103604084015261560a81868861554e565b915050826060830152979650505050505050565b6020815260006149cc60208301848661554e565b600080821280156001600160ff1b038490038513161561565457615654614b3e565b600160ff1b839003841281161561566d5761566d614b3e565b50500190565b60006001600160ff1b038184138284138082168684048611161561569957615699614b3e565b600160ff1b60008712828116878305891216156156b8576156b8614b3e565b600087129250878205871284841616156156d4576156d4614b3e565b878505871281841616156156ea576156ea614b3e565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b60008261571d5761571d6156f8565b500690565b600082615731576157316156f8565b500490565b60006001600160401b038381169083168181101561575657615756614b3e565b039392505050565b6000823561017e1983360301811261577557600080fd5b9190910192915050565b600081600019048311821515161561579957615799614b3e565b500290565b6000828210156157b0576157b0614b3e565b500390565b80516020808301519190811015614bd35760001960209190910360031b1b16919050565b600083516157eb818460208801615577565b6001600160801b0319939093169190920190815260100192915050565b60008251615775818460208701615577565b600082601f83011261582b57600080fd5b81356001600160401b0381111561584457615844614f83565b615857601f8201601f1916602001614fc2565b81815284602083860101111561586c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561589c57600080fd5b6158a4614f99565b82356001600160401b03808211156158bb57600080fd5b6158c73683870161581a565b835260208501359150808211156158dd57600080fd5b6158e93683870161581a565b6020840152604085013591508082111561590257600080fd5b61590e3683870161581a565b6040840152606085013591508082111561592757600080fd5b6159333683870161581a565b6060840152608085013591508082111561594c57600080fd5b506159593682860161581a565b60808301525061596b60a08401614b81565b60a082015261597c60c08401614b81565b60c082015261598d60e08401614b81565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b6000602082840312156159d757600080fd5b81516135dc81614b6c565b600181815b80851115615a1d578160001904821115615a0357615a03614b3e565b80851615615a1057918102915b93841c93908002906159e7565b509250929050565b600082615a3457506001610c64565b81615a4157506000610c64565b8160018114615a575760028114615a6157615a7d565b6001915050610c64565b60ff841115615a7257615a72614b3e565b50506001821b610c64565b5060208310610133831016604e8410600b8410161715615aa0575081810a610c64565b615aaa83836159e2565b8060001904821115615abe57615abe614b3e565b029392505050565b60006135dc8383615a25565b60006001600160401b0380831681851681830481118215151615615af857615af8614b3e565b02949350505050565b60006001600160401b0380841680615b1b57615b1b6156f8565b92169190910492915050565b60008083128015600160ff1b850184121615615b4557615b45614b3e565b6001600160ff1b0384018313811615615b6057615b60614b3e565b50500390565b600060208284031215615b7857600080fd5b81356135dc81614b6c565b60006001600160401b03808316818516808303821115615ba557615ba5614b3e565b01949350505050565b600081615bbd57615bbd614b3e565b506000190190565b6020815260006135dc60208301846155a356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220691dcd5f8d90539995d3bfd78ba8af9d2650b2da35d409dc1708e0da1fbdd66964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x4826533b4897376654bb4d4ad88b7fafd0c985280001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xc351628eb244ec633d5f21fbd6621e1a683b1181","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x643a9800002710","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x9d4454b023096f34b160d6b654540c56a1f81688","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0xf5059a5d33d5853360d16c683c16e67980206f36","0x64":"0xde0b6b3a7640000","0x65":"0x56bc75e2d63100000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220a7b0cb3cf71cdb5256fb15bfe475d018f2b85f6e5dc28544afc2cd784e4aa59c64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x33":"0x1","0x66":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0xca":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0xcb":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xcbeaf3bde82155f56486fb5a1072cb8baaf547cc","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220b9a0b1d8df8cd92b847388841ab1f1297b81cc8e649136efd63d722bd4db6bc364736f6c634300080c0033","storage":{}},"0x9d4454b023096f34b160d6b654540c56a1f81688":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xa000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7278a61aa25c888815afc32ad3cc52ff24fe575","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212209882247b872d905a05380b42c11d1716ad43e9b19643a0cf588a80c0958bf20d64736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":1,"balance":"0x21d8f1967a800e2e550","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x4c116bb629bff7a8373c2378bbd919f8349b8f25","0x9c":"0x65c36ac0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103785760003560e01c806360d7faed116101d3578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b01461097d578063f2fde38b14610990578063f698da25146109a3578063fabc1cbc146109ab57600080fd5b8063cf80873e14610936578063da8be86414610957578063eea9064b1461096a57600080fd5b8063c488375a116100de578063c488375a14610853578063c5e480db14610873578063c94b511114610919578063ca661c041461092c57600080fd5b8063b7f06ebe146107f9578063bb45fef21461081c578063c448feb81461084a57600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461078457806399be81c81461079f578063a1788484146107b2578063b1344271146107d257600080fd5b8063886f1195146107405780638da5cb5b14610753578063900413471461076457600080fd5b80636d70f7ae116101ad5780636d70f7ae146106e7578063715018a6146106fa578063778e55f3146107025780637f5480711461072d57600080fd5b806360d7faed14610698578063635bbd10146106ab57806365da1264146106be57600080fd5b806329c77d4f116102ad5780634fc40b611161024b5780635ac86ab7116102255780635ac86ab71461062e5780635c975abb146106515780635cfe8d2c146106595780635f966f141461066c57600080fd5b80634fc40b6114610609578063595c6a6714610613578063597b36da1461061b57600080fd5b80633cdeb5e0116102875780633cdeb5e0146105695780633e28391d1461059857806343377382146105bb5780634665bcda146105e257600080fd5b806329c77d4f146104f7578063334043961461051757806339b70e381461052a57600080fd5b8063136439dd1161031a5780631bbce091116102f45780631bbce0911461049757806320606b70146104aa57806322bf40e4146104d157806328a573ae146104e457600080fd5b8063136439dd146104385780631522bf021461044b578063169283651461045e57600080fd5b80630dd8dd02116103565780630dd8dd02146103dd5780630f589e59146103fd57806310d67a2f14610412578063132d49671461042557600080fd5b80630449ca391461037d57806304a4f979146103a35780630b9f487a146103ca575b600080fd5b61039061038b366004614adb565b6109be565b6040519081526020015b60405180910390f35b6103907f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103906103d8366004614b41565b610a43565b6103f06103eb366004614adb565b610b05565b60405161039a9190614b9c565b61041061040b366004614c39565b610e6e565b005b610410610420366004614c8c565b610fbe565b610410610433366004614cb0565b611071565b610410610446366004614cf1565b611128565b610410610459366004614d0a565b611267565b61039061046c366004614c8c565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103906104a5366004614cb0565b61127b565b6103907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104106104df366004614d75565b6112a9565b6104106104f2366004614cb0565b6113ed565b610390610505366004614c8c565b609b6020526000908152604090205481565b610410610525366004614e1c565b61149d565b6105517f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6040516001600160a01b03909116815260200161039a565b610551610577366004614c8c565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ab6105a6366004614c8c565b6115da565b604051901515815260200161039a565b6103907f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105517f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6103906213c68081565b6104106115fa565b61039061062936600461513b565b6116c1565b6105ab61063c366004615177565b606654600160ff9092169190911b9081161490565b606654610390565b6104106106673660046151ed565b6116f1565b61055161067a366004614c8c565b6001600160a01b039081166000908152609960205260409020541690565b6104106106a636600461534d565b61199c565b6104106106b9366004614cf1565b611a37565b6105516106cc366004614c8c565b609a602052600090815260409020546001600160a01b031681565b6105ab6106f5366004614c8c565b611a48565b610410611a68565b6103906107103660046153dc565b609860209081526000928352604080842090915290825290205481565b61041061073b3660046154bd565b611a7c565b606554610551906001600160a01b031681565b6033546001600160a01b0316610551565b61077761077236600461554d565b611b81565b60405161039a91906155d7565b61055173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104106107ad3660046155ea565b611c5b565b6103906107c0366004614c8c565b609f6020526000908152604090205481565b6105517f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6105ab610807366004614cf1565b609e6020526000908152604090205460ff1681565b6105ab61082a36600461561f565b609c60209081526000928352604080842090915290825290205460ff1681565b610390609d5481565b610390610861366004614c8c565b60a16020526000908152604090205481565b6108e3610881366004614c8c565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff169082015260600161039a565b61039061092736600461564b565b611d2d565b61039062034bc081565b610949610944366004614c8c565b611de6565b60405161039a9291906156cc565b6103f0610965366004614c8c565b61219e565b6104106109783660046156f1565b612662565b61041061098b366004615749565b61266e565b61041061099e366004614c8c565b6126ff565b610390612775565b6104106109b9366004614cf1565b6127b3565b609d54600090815b83811015610a3b57600060a160008787858181106109e6576109e6615765565b90506020020160208101906109fb9190614c8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610a2a578092505b50610a3481615791565b90506109c6565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ac1612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b3a5760405162461bcd60e51b8152600401610b31906157ac565b60405180910390fd5b6000836001600160401b03811115610b5457610b54614ebe565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e6357868682818110610bb857610bb8615765565b9050602002810190610bca91906157e3565b610bd8906020810190615803565b9050878783818110610bec57610bec615765565b9050602002810190610bfe91906157e3565b610c089080615803565b905014610c7d5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b31565b33878783818110610c9057610c90615765565b9050602002810190610ca291906157e3565b610cb3906060810190604001614c8c565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610b31565b610e343383898985818110610d4657610d46615765565b9050602002810190610d5891906157e3565b610d69906060810190604001614c8c565b8a8a86818110610d7b57610d7b615765565b9050602002810190610d8d91906157e3565b610d979080615803565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610ddd57610ddd615765565b9050602002810190610def91906157e3565b610dfd906020810190615803565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290f92505050565b838281518110610e4657610e46615765565b602090810291909101015280610e5b81615791565b915050610b9e565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610f085760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b31565b610f123384612ecf565b604080518082019091526060815260006020820152610f34338083600061316b565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f6d919061584c565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb092919061589e565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906158cd565b6001600160a01b0316336001600160a01b0316146110655760405162461bcd60e51b8152600401610b31906158ea565b61106e81613510565b50565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071614806110d05750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6110ec5760405162461bcd60e51b8152600401610b3190615934565b6110f5836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613607565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615991565b6111b05760405162461bcd60e51b8152600401610b31906159ae565b606654818116146112295760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b61126f613682565b611121848484846136dc565b6001600160a01b0383166000908152609b60205260408120546112a085828686611d2d565b95945050505050565b600054610100900460ff16158080156112c95750600054600160ff909116105b806112e35750303b1580156112e3575060005460ff166001145b6113465760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b31565b6000805460ff191660011790558015611369576000805461ff0019166101001790555b6113738888613902565b61137b6139e8565b60975561138789613a7f565b61139086613ad1565b61139c858585856136dc565b80156113e2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570716148061144c5750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6114685760405162461bcd60e51b8152600401610b3190615934565b611471836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613bcb565b606654600290600490811614156114c65760405162461bcd60e51b8152600401610b31906157ac565b600260c95414156115195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c95560005b888110156115c9576115b98a8a8381811061153e5761153e615765565b905060200281019061155091906159f6565b89898481811061156257611562615765565b90506020028101906115749190615803565b89898681811061158657611586615765565b9050602002013588888781811061159f5761159f615765565b90506020020160208101906115b49190615a0c565b613c46565b6115c281615791565b9050611521565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190615991565b6116825760405162461bcd60e51b8152600401610b31906159ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116d49190615a9d565b604051602081830303815290604052805190602001209050919050565b60005b815181101561199857600082828151811061171157611711615765565b602002602001015190506000807f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b031663cd293f6f846040518263ffffffff1660e01b815260040161176a9190615ab0565b60408051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac9190615b5c565b91509150811561198a576040808401516001600160a01b0381166000908152609f602052918220805491928291906117e383615791565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff16815260200187600001518152602001876020015181525090506000611863826116c1565b6000818152609e602052604090205490915060ff16156118f95760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b31565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906119449083908590615b8a565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116f4565b5050565b606654600290600490811614156119c55760405162461bcd60e51b8152600401610b31906157ac565b600260c9541415611a185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c955611a2a8686868686613c46565b5050600160c95550505050565b611a3f613682565b61106e81613ad1565b6001600160a01b0390811660009081526099602052604090205416151590565b611a70613682565b611a7a6000613a7f565b565b4283602001511015611b005760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b31565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611b3c8783888860200151611d2d565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b6c9088908390614430565b611b788787868661316b565b50505050505050565b6060600082516001600160401b03811115611b9e57611b9e614ebe565b604051908082528060200260200182016040528015611bc7578160200160208202803683370190505b50905060005b8351811015610a3b576001600160a01b03851660009081526098602052604081208551909190869084908110611c0557611c05615765565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611c4057611c40615765565b6020908102919091010152611c5481615791565b9050611bcd565b611c6433611a48565b611ce65760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b31565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611d2192919061589e565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611da3612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853909116906360f4062b90602401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190615ba3565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707909116906394f649dd90602401600060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f129190810190615c17565b9150915060008313611f2957909590945092505050565b606080835160001415611fe3576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611f9e57611f9e615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611fd257611fd2615765565b602002602001018181525050612191565b8351611ff0906001615cd1565b6001600160401b0381111561200757612007614ebe565b604051908082528060200260200182016040528015612030578160200160208202803683370190505b50915081516001600160401b0381111561204c5761204c614ebe565b604051908082528060200260200182016040528015612075578160200160208202803683370190505b50905060005b845181101561210f5784818151811061209657612096615765565b60200260200101518382815181106120b0576120b0615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106120e2576120e2615765565b60200260200101518282815181106120fc576120fc615765565b602090810291909101015260010161207b565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516121349190615ce9565b8151811061214457612144615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516121749190615ce9565b8151811061218457612184615765565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156121ca5760405162461bcd60e51b8152600401610b31906157ac565b6121d3836115da565b6122535760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b31565b61225c83611a48565b156122cf5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b31565b6001600160a01b03831661234b5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b31565b6001600160a01b038084166000818152609a60205260409020549091169033148061237e5750336001600160a01b038216145b806123a557506001600160a01b038181166000908152609960205260409020600101541633145b6124175760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b31565b60008061242386611de6565b9092509050336001600160a01b0387161461247957826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516124fb576040805160008152602081019091529450612659565b81516001600160401b0381111561251457612514614ebe565b60405190808252806020026020018201604052801561253d578160200160208202803683370190505b50945060005b8251811015612657576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106125a3576125a3615765565b6020026020010151826000815181106125be576125be615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106125f0576125f0615765565b60200260200101518160008151811061260b5761260b615765565b60200260200101818152505061262489878b858561290f565b88848151811061263657612636615765565b6020026020010181815250505050808061264f90615791565b915050612543565b505b50505050919050565b6111233384848461316b565b61267733611a48565b6126f55760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b31565b61106e3382612ecf565b612707613682565b6001600160a01b03811661276c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b31565b61106e81613a7f565b60007f00000000000000000000000000000000000000000000000000000000000042684614156127a6575060975490565b6127ae6139e8565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a91906158cd565b6001600160a01b0316336001600160a01b03161461285a5760405162461bcd60e51b8152600401610b31906158ea565b6066541981196066541916146128d85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161125c565b60006001600160a01b0386166129a65760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b31565b8251612a305760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b31565b60005b8351811015612ddd576001600160a01b03861615612a8957612a898688868481518110612a6257612a62615765565b6020026020010151868581518110612a7c57612a7c615765565b6020026020010151613607565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ab957612ab9615765565b60200260200101516001600160a01b03161415612b82577f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031663beffbb8988858481518110612b1257612b12615765565b60200260200101516040518363ffffffff1660e01b8152600401612b4b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b50505050612dd5565b846001600160a01b0316876001600160a01b03161480612c5457507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b0316639b4da03d858381518110612bde57612bde615765565b60200260200101516040518263ffffffff1660e01b8152600401612c1191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190615991565b155b612d205760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610b31565b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b0316638c80d4e588868481518110612d6257612d62615765565b6020026020010151868581518110612d7c57612d7c615765565b60200260200101516040518463ffffffff1660e01b8152600401612da293929190615d00565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050505b600101612a33565b506001600160a01b0386166000908152609f60205260408120805491829190612e0583615791565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612e6d826116c1565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612ebb9083908590615b8a565b60405180910390a198975050505050505050565b6000612ede6020830183614c8c565b6001600160a01b03161415612f785760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b31565b6213c680612f8c6060830160408401615d24565b63ffffffff1611156130415760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b31565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff169061307d9060608401908401615d24565b63ffffffff1610156131135760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b31565b6001600160a01b038216600090815260996020526040902081906131378282615d61565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611d2190849061584c565b606654600090600190811614156131945760405162461bcd60e51b8152600401610b31906157ac565b61319d856115da565b1561321a5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b31565b61322384611a48565b6132a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b31565b6001600160a01b038085166000908152609960205260409020600101541680158015906132d95750336001600160a01b03821614155b80156132ee5750336001600160a01b03861614155b1561345b57428460200151101561336d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156134075760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613448908890889085908890610a43565b905061345982828760000151614430565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806134ba88611de6565b9150915060005b82518110156113e257613508888a8584815181106134e1576134e1615765565b60200260200101518585815181106134fb576134fb615765565b6020026020010151613bcb565b6001016134c1565b6001600160a01b03811661359e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b31565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061363e908490615ce9565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb093929190615d00565b6033546001600160a01b03163314611a7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b31565b8281146137645760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b31565b8260005b818110156138fa57600086868381811061378457613784615765565b90506020020160208101906137999190614c8c565b6001600160a01b038116600090815260a160205260408120549192508686858181106137c7576137c7615765565b90506020020135905062034bc081111561388b5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610b31565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806138f390615791565b9050613768565b505050505050565b6065546001600160a01b031615801561392357506001600160a01b03821615155b6139a55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261199882613510565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613b8a5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610b31565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613c02908490615cd1565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb093929190615d00565b6000613c5461062987615dc4565b6000818152609e602052604090205490915060ff16613cd55760405162461bcd60e51b81526020600482015260436024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610b31565b609d544390613cea60a0890160808a01615d24565b63ffffffff16613cfa9190615cd1565b1115613d825760405162461bcd60e51b815260206004820152605f6024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610b31565b613d926060870160408801614c8c565b6001600160a01b0316336001600160a01b031614613e1f5760405162461bcd60e51b81526020600482015260506024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610b31565b8115613ea157613e3260a0870187615803565b85149050613ea15760405162461bcd60e51b81526020600482015260426024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610b31565b6000818152609e60205260409020805460ff1916905581156140065760005b613ecd60a0880188615803565b9050811015614000574360a16000613ee860a08b018b615803565b85818110613ef857613ef8615765565b9050602002016020810190613f0d9190614c8c565b6001600160a01b03168152602081019190915260400160002054613f3760a08a0160808b01615d24565b63ffffffff16613f479190615cd1565b1115613f655760405162461bcd60e51b8152600401610b3190615dd6565b613ff8613f756020890189614c8c565b33613f8360a08b018b615803565b85818110613f9357613f93615765565b9050602002016020810190613fa89190614c8c565b613fb560c08c018c615803565b86818110613fc557613fc5615765565b905060200201358a8a87818110613fde57613fde615765565b9050602002016020810190613ff39190614c8c565b6145ea565b600101613ec0565b506143f5565b336000908152609a60205260408120546001600160a01b0316905b61402e60a0890189615803565b90508110156143f2574360a1600061404960a08c018c615803565b8581811061405957614059615765565b905060200201602081019061406e9190614c8c565b6001600160a01b0316815260208101919091526040016000205461409860a08b0160808c01615d24565b63ffffffff166140a89190615cd1565b11156140c65760405162461bcd60e51b8152600401610b3190615dd6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06140e860a08a018a615803565b838181106140f8576140f8615765565b905060200201602081019061410d9190614c8c565b6001600160a01b0316141561425d57600061412b60208a018a614c8c565b905060006001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316630e81073c8361416c60c08e018e615803565b8781811061417c5761417c615765565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156141d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f49190615ba3565b6001600160a01b038084166000908152609a602052604090205491925016801561425557614255818461422a60a08f018f615803565b8881811061423a5761423a615765565b905060200201602081019061424f9190614c8c565b85613bcb565b5050506143ea565b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b031663c4623ea13389898581811061429f5761429f615765565b90506020020160208101906142b49190614c8c565b6142c160a08d018d615803565b868181106142d1576142d1615765565b90506020020160208101906142e69190614c8c565b6142f360c08e018e615803565b8781811061430357614303615765565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561436357600080fd5b505af1158015614377573d6000803e3d6000fd5b505050506001600160a01b038216156143ea576143ea823361439c60a08c018c615803565b858181106143ac576143ac615765565b90506020020160208101906143c19190614c8c565b6143ce60c08d018d615803565b868181106143de576143de615765565b90506020020135613bcb565b600101614021565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561454a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144709086908690600401615e5e565b602060405180830381865afa15801561448d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b19190615ebb565b6001600160e01b031916146111235760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b31565b826001600160a01b031661455e838361472a565b6001600160a01b0316146111235760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b31565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156146955760405162387b1360e81b81526001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063387b13009061465e90889088908790600401615d00565b600060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b50505050614723565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063c608c7f390608401600060405180830381600087803b15801561470f57600080fd5b505af11580156113e2573d6000803e3d6000fd5b5050505050565b60008060006147398585614746565b91509150610a3b816147b6565b60008082516041141561477d5760208301516040840151606085015160001a61477187828585614971565b945094505050506147af565b8251604014156147a7576020830151604084015161479c868383614a5e565b9350935050506147af565b506000905060025b9250929050565b60008160048111156147ca576147ca615ee5565b14156147d35750565b60018160048111156147e7576147e7615ee5565b14156148355760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b31565b600281600481111561484957614849615ee5565b14156148975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b31565b60038160048111156148ab576148ab615ee5565b14156149045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b31565b600481600481111561491857614918615ee5565b141561106e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b31565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149a85750600090506003614a55565b8460ff16601b141580156149c057508460ff16601c14155b156149d15750600090506004614a55565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4e57600060019250925050614a55565b9150600090505b94509492505050565b6000806001600160ff1b03831681614a7b60ff86901c601b615cd1565b9050614a8987828885614971565b935093505050935093915050565b60008083601f840112614aa957600080fd5b5081356001600160401b03811115614ac057600080fd5b6020830191508360208260051b85010111156147af57600080fd5b60008060208385031215614aee57600080fd5b82356001600160401b03811115614b0457600080fd5b614b1085828601614a97565b90969095509350505050565b6001600160a01b038116811461106e57600080fd5b8035614b3c81614b1c565b919050565b600080600080600060a08688031215614b5957600080fd5b8535614b6481614b1c565b94506020860135614b7481614b1c565b93506040860135614b8481614b1c565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614bd457835183529284019291840191600101614bb8565b50909695505050505050565b600060608284031215614bf257600080fd5b50919050565b60008083601f840112614c0a57600080fd5b5081356001600160401b03811115614c2157600080fd5b6020830191508360208285010111156147af57600080fd5b600080600060808486031215614c4e57600080fd5b614c588585614be0565b925060608401356001600160401b03811115614c7357600080fd5b614c7f86828701614bf8565b9497909650939450505050565b600060208284031215614c9e57600080fd5b8135614ca981614b1c565b9392505050565b600080600060608486031215614cc557600080fd5b8335614cd081614b1c565b92506020840135614ce081614b1c565b929592945050506040919091013590565b600060208284031215614d0357600080fd5b5035919050565b60008060008060408587031215614d2057600080fd5b84356001600160401b0380821115614d3757600080fd5b614d4388838901614a97565b90965094506020870135915080821115614d5c57600080fd5b50614d6987828801614a97565b95989497509550505050565b60008060008060008060008060c0898b031215614d9157600080fd5b8835614d9c81614b1c565b97506020890135614dac81614b1c565b9650604089013595506060890135945060808901356001600160401b0380821115614dd657600080fd5b614de28c838d01614a97565b909650945060a08b0135915080821115614dfb57600080fd5b50614e088b828c01614a97565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614e3857600080fd5b88356001600160401b0380821115614e4f57600080fd5b614e5b8c838d01614a97565b909a50985060208b0135915080821115614e7457600080fd5b614e808c838d01614a97565b909850965060408b0135915080821115614e9957600080fd5b614ea58c838d01614a97565b909650945060608b0135915080821115614dfb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614ef657614ef6614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef657614ef6614ebe565b60405160c081016001600160401b0381118282101715614ef657614ef6614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f6857614f68614ebe565b604052919050565b63ffffffff8116811461106e57600080fd5b8035614b3c81614f70565b60006001600160401b03821115614fa657614fa6614ebe565b5060051b60200190565b600082601f830112614fc157600080fd5b81356020614fd6614fd183614f8d565b614f40565b82815260059290921b84018101918181019086841115614ff557600080fd5b8286015b8481101561501957803561500c81614b1c565b8352918301918301614ff9565b509695505050505050565b600082601f83011261503557600080fd5b81356020615045614fd183614f8d565b82815260059290921b8401810191818101908684111561506457600080fd5b8286015b848110156150195780358352918301918301615068565b600060e0828403121561509157600080fd5b615099614ed4565b90506150a482614b31565b81526150b260208301614b31565b60208201526150c360408301614b31565b6040820152606082013560608201526150de60808301614f82565b608082015260a08201356001600160401b03808211156150fd57600080fd5b61510985838601614fb0565b60a084015260c084013591508082111561512257600080fd5b5061512f84828501615024565b60c08301525092915050565b60006020828403121561514d57600080fd5b81356001600160401b0381111561516357600080fd5b61516f8482850161507f565b949350505050565b60006020828403121561518957600080fd5b813560ff81168114614ca957600080fd5b6000604082840312156151ac57600080fd5b6151b4614efc565b905081356151c181614b1c565b815260208201356bffffffffffffffffffffffff811681146151e257600080fd5b602082015292915050565b6000602080838503121561520057600080fd5b82356001600160401b038082111561521757600080fd5b818501915085601f83011261522b57600080fd5b8135615239614fd182614f8d565b81815260059190911b8301840190848101908883111561525857600080fd5b8585015b83811015615332578035858111156152745760008081fd5b860160e0818c03601f190181131561528c5760008081fd5b615294614f1e565b89830135888111156152a65760008081fd5b6152b48e8c83870101614fb0565b825250604080840135898111156152cb5760008081fd5b6152d98f8d83880101615024565b8c8401525060606152eb818601614b31565b82840152608091506152ff8f83870161519a565b9083015261530f60c08501614f82565b9082015261531e838301614b31565b60a08201528552505091860191860161525c565b5098975050505050505050565b801515811461106e57600080fd5b60008060008060006080868803121561536557600080fd5b85356001600160401b038082111561537c57600080fd5b9087019060e0828a03121561539057600080fd5b909550602087013590808211156153a657600080fd5b506153b388828901614a97565b9095509350506040860135915060608601356153ce8161533f565b809150509295509295909350565b600080604083850312156153ef57600080fd5b82356153fa81614b1c565b9150602083013561540a81614b1c565b809150509250929050565b60006040828403121561542757600080fd5b61542f614efc565b905081356001600160401b038082111561544857600080fd5b818401915084601f83011261545c57600080fd5b813560208282111561547057615470614ebe565b615482601f8301601f19168201614f40565b9250818352868183860101111561549857600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156154d557600080fd5b85356154e081614b1c565b945060208601356154f081614b1c565b935060408601356001600160401b038082111561550c57600080fd5b61551889838a01615415565b9450606088013591508082111561552e57600080fd5b5061553b88828901615415565b95989497509295608001359392505050565b6000806040838503121561556057600080fd5b823561556b81614b1c565b915060208301356001600160401b0381111561558657600080fd5b61559285828601614fb0565b9150509250929050565b600081518084526020808501945080840160005b838110156155cc578151875295820195908201906001016155b0565b509495945050505050565b602081526000614ca9602083018461559c565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b614b1085828601614bf8565b6000806040838503121561563257600080fd5b823561563d81614b1c565b946020939093013593505050565b6000806000806080858703121561566157600080fd5b843561566c81614b1c565b935060208501359250604085013561568381614b1c565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155cc5781516001600160a01b0316875295820195908201906001016156a7565b6040815260006156df6040830185615693565b82810360208401526112a0818561559c565b60008060006060848603121561570657600080fd5b833561571181614b1c565b925060208401356001600160401b0381111561572c57600080fd5b61573886828701615415565b925050604084013590509250925092565b60006060828403121561575b57600080fd5b614ca98383614be0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157a5576157a561577b565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126157f957600080fd5b9190910192915050565b6000808335601e1984360301811261581a57600080fd5b8301803591506001600160401b0382111561583457600080fd5b6020019150600581901b36038213156147af57600080fd5b60608101823561585b81614b1c565b6001600160a01b03908116835260208401359061587782614b1c565b166020830152604083013561588b81614f70565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156158df57600080fd5b8151614ca981614b1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b6000602082840312156159a357600080fd5b8151614ca98161533f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126157f957600080fd5b600060208284031215615a1e57600080fd5b8135614ca98161533f565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152615a8460e0850182615693565b905060c083015184820360c08601526112a0828261559c565b602081526000614ca96020830184615a29565b602081526000825160e06020840152615acd610100840182615693565b90506020840151601f19848303016040850152615aea828261559c565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a0850152506080840151615b4260c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152610a3b565b60008060408385031215615b6f57600080fd5b8251615b7a8161533f565b6020939093015192949293505050565b82815260406020820152600061516f6040830184615a29565b600060208284031215615bb557600080fd5b5051919050565b600082601f830112615bcd57600080fd5b81516020615bdd614fd183614f8d565b82815260059290921b84018101918181019086841115615bfc57600080fd5b8286015b848110156150195780518352918301918301615c00565b60008060408385031215615c2a57600080fd5b82516001600160401b0380821115615c4157600080fd5b818501915085601f830112615c5557600080fd5b81516020615c65614fd183614f8d565b82815260059290921b84018101918181019089841115615c8457600080fd5b948201945b83861015615cab578551615c9c81614b1c565b82529482019490820190615c89565b91880151919650909350505080821115615cc457600080fd5b5061559285828601615bbc565b60008219821115615ce457615ce461577b565b500190565b600082821015615cfb57615cfb61577b565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d3657600080fd5b8135614ca981614f70565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615d6c81614b1c565b615d768183615d41565b50600181016020830135615d8981614b1c565b615d938183615d41565b506040830135615da281614f70565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615dd0368361507f565b92915050565b6020808252606e90820152600080516020615efc83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615e9257858101830151858201606001528201615e76565b81811115615ea4576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615ecd57600080fd5b81516001600160e01b031981168114614ca957600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a2646970667358221220d66f588615166c5a17b325e84a4667d637f2966626a1aabc3c0fecdfe833625064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa85233c63b9ee964add6f2cffe00fd84eb32338f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x3f1c547b21f65e10480de3ad8e19faac46c95034","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xb0d4afd8879ed9f52b28595d31b441d079b2ca07":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061022d5760003560e01c80636fe9b41a1161013b578063b98fba4f116100b8578063efcf4edb1161007c578063efcf4edb146105b5578063f2fde38b146105c8578063f63c5bab146105ad578063f8c8765e146105db578063fabc1cbc146105ee57600080fd5b8063b98fba4f14610558578063cf4b17101461056b578063da16491f14610573578063df5cf72314610586578063ef024458146105ad57600080fd5b80638da5cb5b116100ff5780638da5cb5b146104ef57806395eebee614610500578063a168e3c014610523578063a35d2e0514610543578063b98d09081461054b57600080fd5b80636fe9b41a14610499578063715018a6146104ac5780637afa1eed146104b4578063886f1195146104ce5780638cbc379a146104e157600080fd5b8063416c7e5e116101c95780635c975abb1161018d5780635c975abb146103fb5780635df4594614610403578063683048351461042a5780636d14a987146104515780636efb46361461047857600080fd5b8063416c7e5e1461036c5780634f19ade71461037f578063595c6a67146103ad5780635ac86ab7146103b55780635ace2df7146103e857600080fd5b806310d67a2f14610232578063136439dd14610247578063171f1d5b1461025a5780631ad4318914610289578063245a7bfc146102c5578063292f7a4e146102e55780632e44b3491461030f57806332a8ad1e1461031f5780633df4c86614610339575b600080fd5b61024561024036600461378f565b610601565b005b6102456102553660046137ac565b6106bd565b61026d61026836600461392a565b6107ea565b6040805192151583529015156020830152015b60405180910390f35b6102b07f000000000000000000000000000000000000000000000000000000000000001e81565b60405163ffffffff9091168152602001610280565b60ca546102d8906001600160a01b031681565b604051610280919061397b565b6102f86102f3366004613c8d565b610974565b604080519215158352602083019190915201610280565b60c9546102b09063ffffffff1681565b610327600281565b60405160ff9091168152602001610280565b60c9546103549064010000000090046001600160401b031681565b6040516001600160401b039091168152602001610280565b61024561037a366004613d30565b610a41565b61039f61038d366004613d4d565b60cb6020526000908152604090205481565b604051908152602001610280565b610245610bb6565b6103d86103c3366004613d77565b606654600160ff9092169190911b9081161490565b6040519015158152602001610280565b6102456103f6366004613dbe565b610c70565b60665461039f565b6102d87f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6102d87f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81565b6102d87f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b61048b610486366004613e4f565b610cfa565b604051610280929190613f19565b6103d86104a7366004613f74565b611c07565b610245611c77565b60c9546102d890600160601b90046001600160a01b031681565b6065546102d8906001600160a01b031681565b60c95463ffffffff166102b0565b6033546001600160a01b03166102d8565b6103d861050e366004613d4d565b60cd6020526000908152604090205460ff1681565b61039f610531366004613d4d565b60cc6020526000908152604090205481565b610327600181565b6097546103d89060ff1681565b6103d8610566366004613fe8565b611c8b565b610327600081565b610245610581366004614046565b611cea565b6102d87f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6102b0606481565b6102456105c33660046140c7565b612015565b6102456105d636600461378f565b6123c6565b6102456105e936600461413c565b61243c565b6102456105fc3660046137ac565b61259b565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190614198565b6001600160a01b0316336001600160a01b0316146106b15760405162461bcd60e51b81526004016106a8906141b5565b60405180910390fd5b6106ba816126f2565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906106ed90339060040161397b565b602060405180830381865afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e91906141ff565b61074a5760405162461bcd60e51b81526004016106a89061421c565b606654818116146107be5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233906000805160206149b4833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061083257610832614264565b60200201518951600160200201518a6020015160006002811061085757610857614264565b60200201518b6020015160016002811061087357610873614264565b602090810291909101518c518d8301516040516108d09a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108f3919061427a565b905061096661090c61090588846127e9565b8690612880565b610914612914565b61095c61094d85610947604080518082018252600080825260209182015281518083019092526001825260029082015290565b906127e9565b6109568c6129d4565b90612880565b886201d4c0612a64565b909890975095505050505050565b6000806000806109878a8a8a8a8a610cfa565b9150915060005b88811015610a2d578563ffffffff16836020015182815181106109b3576109b3614264565b60200260200101516109c591906142b2565b6001600160601b0316606463ffffffff16846000015183815181106109ec576109ec614264565b60200260200101516109fe91906142b2565b6001600160601b03161015610a1b5750600093509150610a369050565b80610a25816142e1565b91505061098e565b50600193509150505b965096945050505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614198565b6001600160a01b0316336001600160a01b031614610b6f5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016106a8565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610be690339060040161397b565b602060405180830381865afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2791906141ff565b610c435760405162461bcd60e51b81526004016106a89061421c565b600019606681905560405190815233906000805160206149b48339815191529060200160405180910390a2565b60665460029060049081161415610c995760405162461bcd60e51b81526004016106a8906142fc565b6000610ca86020860186613d4d565b9050610cb48686612c88565b610cf157604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610cf3565b505b5050505050565b6040805180820190915260608082526020820152600084610d6b5760405162461bcd60e51b81526020600482015260376024820152600080516020614a148339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b60648201526084016106a8565b60408301515185148015610d83575060a08301515185145b8015610d93575060c08301515185145b8015610da3575060e08301515185145b610e0d5760405162461bcd60e51b81526020600482015260416024820152600080516020614a1483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016106a8565b82515160208401515114610e855760405162461bcd60e51b815260206004820152604460248201819052600080516020614a14833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016106a8565b4363ffffffff168463ffffffff1610610ef45760405162461bcd60e51b815260206004820152603c6024820152600080516020614a1483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016106a8565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610f3557610f356137c5565b604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b506020820152866001600160401b03811115610f7c57610f7c6137c5565b604051908082528060200260200182016040528015610fa5578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115610fd957610fd96137c5565b604051908082528060200260200182016040528015611002578160200160208202803683370190505b5081526020860151516001600160401b03811115611022576110226137c5565b60405190808252806020026020018201604052801561104b578160200160208202803683370190505b508160200181905250600061111d8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf169350639aa1653d925060048083019260209291908290030181865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611118919061432f565b612c91565b905060005b8760200151518110156113b8576111678860200151828151811061114857611148614264565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061117d5761117d614264565b6020908102919091010152801561123d57602083015161119e60018361434c565b815181106111ae576111ae614264565b602002602001015160001c836020015182815181106111cf576111cf614264565b602002602001015160001c1161123d576040805162461bcd60e51b8152602060048201526024810191909152600080516020614a1483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016106a8565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b03166304ec63518460200151838151811061128257611282614264565b60200260200101518b8b6000015185815181106112a1576112a1614264565b60200260200101516040518463ffffffff1660e01b81526004016112de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f9190614363565b6001600160c01b03168360000151828151811061133e5761133e614264565b6020026020010181815250506113a4610905611378848660000151858151811061136a5761136a614264565b602002602001015116612d09565b8a60200151848151811061138e5761138e614264565b6020026020010151612d3490919063ffffffff16565b9450806113b0816142e1565b915050611122565b50506113c383612e18565b60975490935060ff166000816113da57600061145c565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c919061438c565b905060005b8a811015611ada5782156115bc578963ffffffff16827f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b031663249a0c428f8f868181106114b8576114b8614264565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c919061438c565b61152691906143a5565b116115bc5760405162461bcd60e51b81526020600482015260666024820152600080516020614a1483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016106a8565b7f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b03166368bccaac8d8d848181106115fd576115fd614264565b9050013560f81c60f81b60f81c8c8c60a00151858151811061162157611621614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa15801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a191906143bd565b6001600160401b0319166116c48a60400151838151811061114857611148614264565b67ffffffffffffffff1916146117605760405162461bcd60e51b81526020600482015260616024820152600080516020614a1483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016106a8565b6117908960400151828151811061177957611779614264565b60200260200101518761288090919063ffffffff16565b95507f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031663c8294c568d8d848181106117d3576117d3614264565b9050013560f81c60f81b60f81c8c8c60c0015185815181106117f7576117f7614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187791906143e8565b8560200151828151811061188d5761188d614264565b6001600160601b039092166020928302919091018201528501518051829081106118b9576118b9614264565b6020026020010151856000015182815181106118d7576118d7614264565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611ac55761194f8660000151828151811061192157611921614264565b60200260200101518f8f8681811061193b5761193b614264565b600192013560f81c9290921c811614919050565b15611ab3577f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031663f2be94ae8f8f8681811061199557611995614264565b9050013560f81c60f81b60f81c8e896020015185815181106119b9576119b9614264565b60200260200101518f60e0015188815181106119d7576119d7614264565b602002602001015187815181106119f0576119f0614264565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7891906143e8565b8751805185908110611a8c57611a8c614264565b60200260200101818151611aa09190614411565b6001600160601b03169052506001909101905b80611abd816142e1565b9150506118fb565b50508080611ad2906142e1565b915050611461565b505050600080611af48c868a606001518b608001516107ea565b9150915081611b655760405162461bcd60e51b81526020600482015260436024820152600080516020614a1483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016106a8565b80611bc25760405162461bcd60e51b81526020600482015260396024820152600080516020614a148339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b60648201526084016106a8565b50506000878260200151604051602001611bdd929190614439565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c1284612eb3565b823514611c315760405162461bcd60e51b81526004016106a890614481565b611c3f836040013583612ed1565b611c5b5760405162461bcd60e51b81526004016106a8906144ae565b6000611c6685612f51565b6020840135149150505b9392505050565b611c7f612fd2565b611c89600061302c565b565b6000611c968461307e565b823514611cb55760405162461bcd60e51b81526004016106a890614481565b611cc3836020013583612ed1565b611cdf5760405162461bcd60e51b81526004016106a8906144ae565b6000611c66856130b7565b60ca546001600160a01b03163314611d445760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c657200000060448201526064016106a8565b60665460019060029081161415611d6d5760405162461bcd60e51b81526004016106a8906142fc565b6000611d7c6020860186613d4d565b9050366000611d8e60808801886144d9565b90925090506000611da56080890160608a01613d4d565b905060cb6000611db860208a018a613d4d565b63ffffffff1663ffffffff16815260200190815260200160002054611ddc896130eb565b14611e1b5760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b60448201526064016106a8565b600060cc81611e2d60208b018b613d4d565b63ffffffff1663ffffffff1681526020019081526020016000205414611e8e5760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b60448201526064016106a8565b611eb87f000000000000000000000000000000000000000000000000000000000000001e8561451f565b63ffffffff164363ffffffff161115611f0c5760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b60448201526064016106a8565b6000611f17886130fe565b9050600080611f2a8387878a8d89610974565b9150915081611f6c5760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b60448201526064016106a8565b6040805180820190915263ffffffff4316815260208101829052611f9f81611f99368e90038e018e614547565b90613132565b60cc6000611fb060208f018f613d4d565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b82604051611fff9291906145cd565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146120805760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b60648201526084016106a8565b606654600090600190811614156120a95760405162461bcd60e51b81526004016106a8906142fc565b606463ffffffff851611156121125760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016106a8565b856001600160401b0316856001600160401b031610156121835760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b60648201526084016106a8565b42856001600160401b031611156121ef5760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b60648201526084016106a8565b6001600160401b038616158061221b575060c9546001600160401b036401000000009091048116908716115b61228d5760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d7000000000000060648201526084016106a8565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061231381613165565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c33225906123679084906145f7565b60405180910390a260c9546123839063ffffffff16600161451f565b60c980546001600160401b03909816640100000000026bffffffffffffffffffffffff1990981663ffffffff929092169190911796909617909555505050505050565b6123ce612fd2565b6001600160a01b0381166124335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6106ba8161302c565b600054610100900460ff161580801561245c5750600054600160ff909116105b806124765750303b158015612476575060005460ff166001145b6124d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a8565b6000805460ff1916600117905580156124fc576000805461ff0019166101001790555b612507856000613178565b6125108461302c565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610cf3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126129190614198565b6001600160a01b0316336001600160a01b0316146126425760405162461bcd60e51b81526004016106a8906141b5565b6066541981196066541916146126bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107df565b6001600160a01b0381166127805760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a8565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526128056136a0565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156128385761283a565bfe5b50806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016106a8565b505092915050565b604080518082019091526000808252602082015261289c6136be565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156128385750806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016106a8565b61291c6136dc565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612a046000805160206149d48339815191528661427a565b90505b612a1081613250565b90935091506000805160206149d4833981519152828309831415612a4a576040805180820190915290815260208101919091529392505050565b6000805160206149d4833981519152600182089050612a07565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612a96613701565b60005b6002811015612c5b576000612aaf826006614695565b9050848260028110612ac357612ac3614264565b60200201515183612ad58360006143a5565b600c8110612ae557612ae5614264565b6020020152848260028110612afc57612afc614264565b60200201516020015183826001612b1391906143a5565b600c8110612b2357612b23614264565b6020020152838260028110612b3a57612b3a614264565b6020020151515183612b4d8360026143a5565b600c8110612b5d57612b5d614264565b6020020152838260028110612b7457612b74614264565b6020020151516001602002015183612b8d8360036143a5565b600c8110612b9d57612b9d614264565b6020020152838260028110612bb457612bb4614264565b602002015160200151600060028110612bcf57612bcf614264565b602002015183612be08360046143a5565b600c8110612bf057612bf0614264565b6020020152838260028110612c0757612c07614264565b602002015160200151600160028110612c2257612c22614264565b602002015183612c338360056143a5565b600c8110612c4357612c43614264565b60200201525080612c53816142e1565b915050612a99565b50612c64613720565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60005b92915050565b600080612c9d846132d2565b9050808360ff166001901b11611c705760405162461bcd60e51b815260206004820152603f60248201526000805160206149f483398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016106a8565b6000805b8215612c8b57612d1e60018461434c565b9092169180612d2c816146b4565b915050612d0d565b60408051808201909152600080825260208201526102008261ffff1610612d905760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016106a8565b8161ffff1660011415612da4575081612c8b565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612e0d57600161ffff871660ff83161c81161415612df057612ded8484612880565b93505b612dfa8384612880565b92506201fffe600192831b169101612dc0565b509195945050505050565b60408051808201909152600080825260208201528151158015612e3d57506020820151155b15612e5b575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206149d48339815191528460200151612e8e919061427a565b612ea6906000805160206149d483398151915261434c565b905292915050565b919050565b6000612ec260208301836146d6565b6001600160401b031692915050565b6000610100612ee360608401846146f1565b905011158015612ef95750610100826080013511155b612f3f5760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b60448201526064016106a8565b612f488261343b565b90921492915050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f82604051602001612f85919061473a565b60405160208183030381529060405280519060200120604051602001612fb5929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6033546001600160a01b03163314611c895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000604061308f6020840184613d4d565b63ffffffff16901b6130a760408401602085016146d6565b6001600160401b03161792915050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c582604051602001612f859190614818565b600081604051602001612fb591906148ab565b60007f5f7351501d0bdb4d74dd1448340c3ecab5ad96dfe2a69df6d6e199bd0dcc523982604051602001612f859190614966565b60008282604051602001613147929190614974565b60405160208183030381529060405280519060200120905092915050565b600081604051602001612fb591906145f7565b6065546001600160a01b031615801561319957506001600160a01b03821615155b61321b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a8565b606681905560405181815233906000805160206149b48339815191529060200160405180910390a261324c826126f2565b5050565b600080806000805160206149d483398151915260036000805160206149d4833981519152866000805160206149d48339815191528889090908905060006132c6827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206149d4833981519152613538565b91959194509092505050565b6000610100825111156133495760405162461bcd60e51b8152602060048201526044602482018190526000805160206149f4833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016106a8565b815161335757506000919050565b6000808360008151811061336d5761336d614264565b0160200151600160f89190911c81901b92505b84518110156134325784818151811061339b5761339b614264565b0160200151600160f89190911c1b915082821161341e5760405162461bcd60e51b815260206004820152604760248201526000805160206149f483398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016106a8565b9181179161342b816142e1565b9050613380565b50909392505050565b60006134456136a0565b60408051843560208201526000910160405160208183030381529060405280519060200120905060006134798383876135e0565b9050600061348d608087013561010061434c565b83901c90506000805b876080013581101561352c57600060408901356001831b166134e6576134bf60608a018a6146f1565b846134c9816142e1565b95508181106134da576134da614264565b905060200201356134e9565b60005b90506001821b8416613509576135028760018784613685565b9450613519565b6135168760018388613685565b94505b5080613524816142e1565b915050613496565b50919695505050505050565b600080613543613720565b61354b61373e565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156128385750826135d55760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016106a8565b505195945050505050565b6000602082013561366c5760a08201356135fc57506000611c70565b828260a0013514156136505760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c617465640060448201526064016106a8565b6136658460008460a001358560c00135613685565b9050611c70565b61367d846000858560200135613685565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806136ef61375c565b81526020016136fc61375c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146106ba57600080fd5b6000602082840312156137a157600080fd5b8135611c708161377a565b6000602082840312156137be57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156137fd576137fd6137c5565b60405290565b60405161010081016001600160401b03811182821017156137fd576137fd6137c5565b604051601f8201601f191681016001600160401b038111828210171561384e5761384e6137c5565b604052919050565b60006040828403121561386857600080fd5b6138706137db565b9050813581526020820135602082015292915050565b600082601f83011261389757600080fd5b604051604081018181106001600160401b03821117156138b9576138b96137c5565b80604052508060408401858111156138d057600080fd5b845b81811015612e0d5780358352602092830192016138d2565b6000608082840312156138fc57600080fd5b6139046137db565b90506139108383613886565b815261391f8360408401613886565b602082015292915050565b600080600080610120858703121561394157600080fd5b843593506139528660208701613856565b925061396186606087016138ea565b91506139708660e08701613856565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f8401126139a157600080fd5b5081356001600160401b038111156139b857600080fd5b6020830191508360208285010111156139d057600080fd5b9250929050565b803563ffffffff81168114612eae57600080fd5b60006001600160401b03821115613a0457613a046137c5565b5060051b60200190565b600082601f830112613a1f57600080fd5b81356020613a34613a2f836139eb565b613826565b82815260059290921b84018101918181019086841115613a5357600080fd5b8286015b84811015613a7557613a68816139d7565b8352918301918301613a57565b509695505050505050565b600082601f830112613a9157600080fd5b81356020613aa1613a2f836139eb565b82815260069290921b84018101918181019086841115613ac057600080fd5b8286015b84811015613a7557613ad68882613856565b835291830191604001613ac4565b600082601f830112613af557600080fd5b81356020613b05613a2f836139eb565b82815260059290921b84018101918181019086841115613b2457600080fd5b8286015b84811015613a755780356001600160401b03811115613b475760008081fd5b613b558986838b0101613a0e565b845250918301918301613b28565b60006101808284031215613b7657600080fd5b613b7e613803565b905081356001600160401b0380821115613b9757600080fd5b613ba385838601613a0e565b83526020840135915080821115613bb957600080fd5b613bc585838601613a80565b60208401526040840135915080821115613bde57600080fd5b613bea85838601613a80565b6040840152613bfc85606086016138ea565b6060840152613c0e8560e08601613856565b6080840152610120840135915080821115613c2857600080fd5b613c3485838601613a0e565b60a0840152610140840135915080821115613c4e57600080fd5b613c5a85838601613a0e565b60c0840152610160840135915080821115613c7457600080fd5b50613c8184828501613ae4565b60e08301525092915050565b60008060008060008060a08789031215613ca657600080fd5b8635955060208701356001600160401b0380821115613cc457600080fd5b613cd08a838b0161398f565b9097509550859150613ce460408a016139d7565b94506060890135915080821115613cfa57600080fd5b50613d0789828a01613b63565b925050613d16608088016139d7565b90509295509295509295565b80151581146106ba57600080fd5b600060208284031215613d4257600080fd5b8135611c7081613d22565b600060208284031215613d5f57600080fd5b611c70826139d7565b60ff811681146106ba57600080fd5b600060208284031215613d8957600080fd5b8135611c7081613d68565b600060a08284031215613da657600080fd5b50919050565b600060608284031215613da657600080fd5b60008060008084860360e0811215613dd557600080fd5b85356001600160401b0380821115613dec57600080fd5b613df889838a01613d94565b9650613e078960208a01613dac565b95506040607f1984011215613e1b57600080fd5b60808801945060c0880135925080831115613e3557600080fd5b5050613e4387828801613a80565b91505092959194509250565b600080600080600060808688031215613e6757600080fd5b8535945060208601356001600160401b0380821115613e8557600080fd5b613e9189838a0161398f565b9096509450849150613ea5604089016139d7565b93506060880135915080821115613ebb57600080fd5b50613ec888828901613b63565b9150509295509295909350565b600081518084526020808501945080840160005b83811015613f0e5781516001600160601b031687529582019590820190600101613ee9565b509495945050505050565b6040815260008351604080840152613f346080840182613ed5565b90506020850151603f19848303016060850152613f518282613ed5565b925050508260208301529392505050565b600060e08284031215613da657600080fd5b600080600060a08486031215613f8957600080fd5b83356001600160401b0380821115613fa057600080fd5b613fac87838801613dac565b9450613fbb8760208801613dac565b93506080860135915080821115613fd157600080fd5b50613fde86828701613f62565b9150509250925092565b6000806000838503610140811215613fff57600080fd5b60c081121561400d57600080fd5b5083925061401e8560c08601613dac565b91506101208401356001600160401b0381111561403a57600080fd5b613fde86828701613f62565b600080600060a0848603121561405b57600080fd5b83356001600160401b038082111561407257600080fd5b61407e87838801613d94565b945061408d8760208801613dac565b935060808601359150808211156140a357600080fd5b50613fde86828701613b63565b80356001600160401b0381168114612eae57600080fd5b6000806000806000608086880312156140df57600080fd5b6140e8866140b0565b94506140f6602087016140b0565b9350614104604087016139d7565b925060608601356001600160401b0381111561411f57600080fd5b61412b8882890161398f565b969995985093965092949392505050565b6000806000806080858703121561415257600080fd5b843561415d8161377a565b9350602085013561416d8161377a565b9250604085013561417d8161377a565b9150606085013561418d8161377a565b939692955090935050565b6000602082840312156141aa57600080fd5b8151611c708161377a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561421157600080fd5b8151611c7081613d22565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261429757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156142d8576142d861429c565b02949350505050565b60006000198214156142f5576142f561429c565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b60006020828403121561434157600080fd5b8151611c7081613d68565b60008282101561435e5761435e61429c565b500390565b60006020828403121561437557600080fd5b81516001600160c01b0381168114611c7057600080fd5b60006020828403121561439e57600080fd5b5051919050565b600082198211156143b8576143b861429c565b500190565b6000602082840312156143cf57600080fd5b815167ffffffffffffffff1981168114611c7057600080fd5b6000602082840312156143fa57600080fd5b81516001600160601b0381168114611c7057600080fd5b60006001600160601b03838116908316818110156144315761443161429c565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561447457815185529382019390820190600101614458565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e198436030181126144f057600080fd5b8301803591506001600160401b0382111561450a57600080fd5b6020019150368190038213156139d057600080fd5b600063ffffffff80831681851680830382111561453e5761453e61429c565b01949350505050565b60006060828403121561455957600080fd5b604051606081018181106001600160401b038211171561457b5761457b6137c5565b604052614587836139d7565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff6145b5826139d7565b16825260208181013590830152604090810135910152565b60a081016145db82856145a7565b825163ffffffff16606083015260208301516080830152611c70565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b8181101561466c5782810184015186820160e001528301614650565b8181111561467e57600060e083880101525b50601f01601f19169390930160e001949350505050565b60008160001904831182151516156146af576146af61429c565b500290565b600061ffff808316818114156146cc576146cc61429c565b6001019392505050565b6000602082840312156146e857600080fd5b611c70826140b0565b6000808335601e1984360301811261470857600080fd5b8301803591506001600160401b0382111561472257600080fd5b6020019150600581901b36038213156139d057600080fd5b60006020808352608083016001600160401b0380614757876140b0565b16838601526147678387016140b0565b604082821681880152808801359150601e1988360301821261478857600080fd5b9087019081358381111561479b57600080fd5b6060935083810236038913156147b057600080fd5b87840184905293849052908401926000919060a08801835b8281101561480a57863582528787013588830152838701356001600160801b0381168082146147f5578687fd5b838601525095850195908501906001016147c8565b509998505050505050505050565b60c0810163ffffffff61482a846139d7565b168252614839602084016140b0565b6001600160401b03808216602085015280614856604087016140b0565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff806148c0856139d7565b1660208401526148d2602085016140b0565b6001600160401b038082166040860152806148ef604088016140b0565b16606086015282614902606088016139d7565b16608086015260808601359250601e1986360301831261492157600080fd5b91850191823591508082111561493657600080fd5b5080360385131561494657600080fd5b60a08085015261495d60c085018260208501614882565b95945050505050565b60608101612c8b82846145a7565b825163ffffffff168152602080840151908201526040808401519082015260a08101611c706060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200ef0cc123a4a507d22d566dd8085f300baeea3c956db63c47e3f8313ce9951ba64736f6c634300080c0033","storage":{"0x0":"0xff","0x97":"0x1"}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636d14a987116100925780636d14a987146102985780637916cea6146102bf5780637ff81a8714610300578063a3db80e214610333578063bf79ce581461035a578063d5254a8c1461036d578063de29fac01461038d578063e8bb9ae6146103ad578063f4e24fe5146103d657600080fd5b8062a1f4cb146100fa57806313542a4e1461013b57806326d941f21461015c578063377ed99d146101715780633fb27952146101a957806347b314e8146101bc5780635f61a884146101fd578063605747d51461021d57806368bccaac1461026b575b600080fd5b610121610108366004611891565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61014e610149366004611891565b6103e9565b604051908152602001610132565b61016f61016a3660046118c4565b610404565b005b61019461017f3660046118c4565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610132565b61016f6101b736600461194f565b61055d565b6101e56101ca3660046119f5565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610132565b61021061020b3660046118c4565b610605565b6040516101329190611a0e565b61023061022b366004611a25565b61063a565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610132565b61027e610279366004611a4f565b6106cd565b60405167ffffffffffffffff199091168152602001610132565b6101e57f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6102d26102cd366004611a25565b610868565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610132565b61031361030e366004611891565b6108b3565b604080518351815260209384015193810193909352820152606001610132565b6101216103413660046118c4565b6005602052600090815260409020805460019091015482565b61014e610368366004611a97565b610974565b61038061037b366004611af4565b610da4565b6040516101329190611b6c565b61014e61039b366004611891565b60016020526000908152604090205481565b6101e56103bb3660046119f5565b6002602052600090815260409020546001600160a01b031681565b61016f6103e436600461194f565b610fbe565b6001600160a01b031660009081526001602052604090205490565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146104555760405162461bcd60e51b815260040161044c90611bb6565b60405180910390fd5b60ff8116600090815260046020526040902054156104d45760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b606482015260840161044c565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146105a55760405162461bcd60e51b815260040161044c90611bb6565b60006105b0836108b3565b5090506105bd8282611051565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e836105e8856103e9565b846040516105f893929190611c2a565b60405180910390a1505050565b61060d6117a4565b5060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b604080516060810182526000808252602080830182905282840182905260ff86168252600490529190912080548390811061067757610677611c96565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff831660009081526004602052604081208054829190849081106106f4576106f4611c96565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107bb5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e740000606482015260840161044c565b604081015163ffffffff1615806107e15750806040015163ffffffff168463ffffffff16105b61085f5760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a40161044c565b51949350505050565b6004602052816000526040600020818154811061088457600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b6108bb6117a4565b6001600160a01b03821660008181526003602090815260408083208151808301835281548152600191820154818501529484529091528120549091908061096a5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f7420726567697374657265640000606482015260840161044c565b9094909350915050565b6000336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146109be5760405162461bcd60e51b815260040161044c90611bb6565b60006109ec6109d536869003860160408701611cac565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610a74576040805162461bcd60e51b8152602060048201526024810191909152600080516020611ec383398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b6579606482015260840161044c565b6001600160a01b03851660009081526001602052604090205415610afe5760405162461bcd60e51b81526020600482015260476024820152600080516020611ec383398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a40161044c565b6000818152600260205260409020546001600160a01b031615610b825760405162461bcd60e51b81526020600482015260426024820152600080516020611ec383398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a40161044c565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610bdb918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611cde565b6040516020818303038152906040528051906020012060001c610bfe9190611d29565b9050610c74610c37610c2283610c1c368a90038a0160408b01611cac565b90611290565b610c3136899003890189611cac565b9061131b565b610c3f6113a3565b610c5d610c4e85610c1c611463565b610c31368a90038a018a611cac565b610c6f368a90038a0160808b01611d9b565b611484565b610d0f5760405162461bcd60e51b815260206004820152606c6024820152600080516020611ec383398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c40161044c565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610d939160808a0190611df8565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610dc157610dc16118df565b604051908082528060200260200182016040528015610dea578160200160208202803683370190505b50905060005b84811015610fb5576000868683818110610e0c57610e0c611c96565b919091013560f81c6000818152600460205260409020549092509050801580610e6f575060ff821660009081526004602052604081208054909190610e5357610e53611c96565b600091825260209091200154600160c01b900463ffffffff1686105b15610efc5760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a40161044c565b805b8015610f9f5760ff831660009081526004602052604090208790610f23600184611e42565b81548110610f3357610f33611c96565b600091825260209091200154600160c01b900463ffffffff1611610f8d57610f5c600182611e42565b858581518110610f6e57610f6e611c96565b602002602001019063ffffffff16908163ffffffff1681525050610f9f565b80610f9781611e59565b915050610efe565b5050508080610fad90611e70565b915050610df0565b50949350505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146110065760405162461bcd60e51b815260040161044c90611bb6565b6000611011836108b3565b50905061102682611021836116f1565b611051565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e836105e8856103e9565b6110596117a4565b60005b835181101561128a57600084828151811061107957611079611c96565b0160209081015160f81c60008181526004909252604090912054909150806111095760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f74206578697374000000606482015260840161044c565b60ff8216600090815260056020908152604091829020825180840190935280548352600101549082015261113d908661131b565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916111869085611e42565b8154811061119657611196611c96565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156111d75780546001600160c01b031916604083901c178155611273565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061128290611e70565b91505061105c565b50505050565b6112986117a4565b6112a06117be565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156112d3576112d5565bfe5b50806113135760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161044c565b505092915050565b6113236117a4565b61132b6117dc565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156112d35750806113135760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161044c565b6113ab6117fa565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61146b6117a4565b5060408051808201909152600181526002602082015290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916114b361181f565b60005b60028110156116785760006114cc826006611e8b565b90508482600281106114e0576114e0611c96565b602002015151836114f2836000611eaa565b600c811061150257611502611c96565b602002015284826002811061151957611519611c96565b602002015160200151838260016115309190611eaa565b600c811061154057611540611c96565b602002015283826002811061155757611557611c96565b602002015151518361156a836002611eaa565b600c811061157a5761157a611c96565b602002015283826002811061159157611591611c96565b60200201515160016020020151836115aa836003611eaa565b600c81106115ba576115ba611c96565b60200201528382600281106115d1576115d1611c96565b6020020151602001516000600281106115ec576115ec611c96565b6020020151836115fd836004611eaa565b600c811061160d5761160d611c96565b602002015283826002811061162457611624611c96565b60200201516020015160016002811061163f5761163f611c96565b602002015183611650836005611eaa565b600c811061166057611660611c96565b6020020152508061167081611e70565b9150506114b6565b5061168161183e565b60006020826101808560086107d05a03fa90508080156112d35750806116e15760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b604482015260640161044c565b5051151598975050505050505050565b6116f96117a4565b815115801561170a57506020820151155b15611728575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47846020015161176d9190611d29565b611797907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611e42565b905292915050565b919050565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061180d61185c565b815260200161181a61185c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461179f57600080fd5b6000602082840312156118a357600080fd5b6118ac8261187a565b9392505050565b803560ff8116811461179f57600080fd5b6000602082840312156118d657600080fd5b6118ac826118b3565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611918576119186118df565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611947576119476118df565b604052919050565b6000806040838503121561196257600080fd5b61196b8361187a565b915060208084013567ffffffffffffffff8082111561198957600080fd5b818601915086601f83011261199d57600080fd5b8135818111156119af576119af6118df565b6119c1601f8201601f1916850161191e565b915080825287848285010111156119d757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a0757600080fd5b5035919050565b8151815260208083015190820152604081016106c7565b60008060408385031215611a3857600080fd5b611a41836118b3565b946020939093013593505050565b600080600060608486031215611a6457600080fd5b611a6d846118b3565b9250602084013563ffffffff81168114611a8657600080fd5b929592945050506040919091013590565b6000806000838503610160811215611aae57600080fd5b611ab78561187a565b9350610100601f1982011215611acc57600080fd5b602085019250604061011f1982011215611ae557600080fd5b50610120840190509250925092565b600080600060408486031215611b0957600080fd5b833567ffffffffffffffff80821115611b2157600080fd5b818601915086601f830112611b3557600080fd5b813581811115611b4457600080fd5b876020828501011115611b5657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611baa57835163ffffffff1683529284019291840191600101611b88565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611c6c57858101830151858201608001528201611c50565b81811115611c7e576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611cbe57600080fd5b611cc66118f5565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611d4657634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611d5c57600080fd5b611d646118f5565b806040840185811115611d7657600080fd5b845b81811015611d90578035845260209384019301611d78565b509095945050505050565b600060808284031215611dad57600080fd5b6040516040810181811067ffffffffffffffff82111715611dd057611dd06118df565b604052611ddd8484611d4b565b8152611dec8460408501611d4b565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611e5457611e54611e2c565b500390565b600081611e6857611e68611e2c565b506000190190565b6000600019821415611e8457611e84611e2c565b5060010190565b6000816000190483118215151615611ea557611ea5611e2c565b500290565b60008219821115611ebd57611ebd611e2c565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220ddede8559e28f5e5a06bdde4d1bac1435dc9017a2cffbdaed6846a95d536750064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000004268461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a2646970667358221220417e740b15991a84d5959cee174069515fd054ff2b9bf9b349bc13e72db8820064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc351628eb244ec633d5f21fbd6621e1a683b1181":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061029f5760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f31461071c578063e65797ad1461072f578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf14610694578063c391425e146106a7578063ca0de882146106c7578063ca4f2d97146106ee578063d72d8dd614610701578063d75b4c881461070957600080fd5b8063886f119511610120578063886f1195146105f35780638da5cb5b1461060c5780639aa1653d146106145780639b5d177b146106335780639e9923c2146106465780639feab8591461066d57600080fd5b80635df45946146105645780636347c9001461058b578063683048351461059e5780636e3b17db146105c5578063715018a6146105d8578063871ef049146105e057600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104ef5780635865c60c14610502578063595c6a67146105225780635ac86ab71461052a5780635b0b829f146105495780635c975abb1461055c57600080fd5b806328f61b311461045c578063296bb0641461046f57806329d1e0c3146104825780632cdd1e86146104955780633998fdd3146104a85780633c2a7f4c146104cf57600080fd5b806313542a4e1161025d57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c4214610415578063268f06e01461043557600080fd5b8062cf2ab5146102a457806303fd3492146102b957806304ec6351146102ec578063054310e6146103175780630cf4b7671461033757806310d67a2f1461034a575b600080fd5b6102b76102b2366004614a0d565b610820565b005b6102d96102c7366004614a4e565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102ff6102fa366004614a79565b610836565b6040516001600160c01b0390911681526020016102e3565b609d5461032a906001600160a01b031681565b6040516102e39190614ab1565b6102b7610345366004614bac565b610a0d565b6102b7610358366004614c21565b610af5565b6102d961036b366004614c21565b6001600160a01b031660009081526099602052604090205490565b6102b7610394366004614a4e565b610ba8565b6103bc6103a7366004614a4e565b609a6020526000908152604090205460ff1681565b60405190151581526020016102e3565b6103df6103da366004614c3e565b610cd3565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102e3565b6102d9610423366004614c71565b609b6020526000908152604090205481565b61032a7f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b57081565b609e5461032a906001600160a01b031681565b61032a61047d366004614a4e565b610d64565b6102b7610490366004614c21565b610df0565b6102b76104a3366004614c21565b610e01565b61032a7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b6104e26104dd366004614c21565b610e12565b6040516102e39190614c8c565b6102b76104fd366004614ce4565b610e91565b610515610510366004614c21565b610eab565b6040516102e39190614d87565b6102b7610f1f565b6103bc610538366004614c71565b6001805460ff9092161b9081161490565b6102b7610557366004614e0c565b610fde565b6001546102d9565b61032a7f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b61032a610599366004614a4e565b61106f565b61032a7f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81565b6102b76105d3366004614e40565b611099565b6102b76110ac565b6102ff6105ee366004614a4e565b6110c0565b60005461032a906201000090046001600160a01b031681565b61032a6110cb565b6096546106219060ff1681565b60405160ff90911681526020016102e3565b6102b7610641366004614f60565b6110e4565b61032a7f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0081565b6102d97f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102b76106a2366004615059565b611108565b6106ba6106b5366004615124565b611126565b6040516102e391906151ce565b6102d97f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102b76106fc366004615218565b6111df565b609c546102d9565b6102b76107173660046152fe565b6111f1565b6102b761072a3660046154b1565b611204565b61079e61073d366004614c71565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b6040516102e39190615585565b6102b76107b9366004614c21565b611507565b6102d96107cc3660046155f6565b61157d565b6102b76107df366004614a4e565b6115c4565b6108136107f2366004614c21565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102e391906156ab565b61082861171b565b610832828261178a565b5050565b6000838152609860205260408120805482919084908110610859576108596156b9565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156109465760405162461bcd60e51b81526020600482015260656024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c4015b60405180910390fd5b602081015163ffffffff16158061096c5750806020015163ffffffff168463ffffffff16105b610a015760405162461bcd60e51b81526020600482015260666024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c40161093d565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610a3657610a36614d4f565b14610aa95760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f74207265676973746572656400000000606482015260840161093d565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610aea90849061571c565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061572f565b6001600160a01b0316336001600160a01b031614610b9c5760405162461bcd60e51b815260040161093d9061574c565b610ba581611891565b50565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610bdd903390600401614ab1565b602060405180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190615796565b610c3a5760405162461bcd60e51b815260040161093d906157b8565b60015481811614610cae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b606482015260840161093d565b60018190556040518181523390600080516020615f2083398151915290602001610aea565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610d1057610d106156b9565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b0316906347b314e890602401602060405180830381865afa158015610dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061572f565b610df8611997565b610ba5816119f6565b610e09611997565b610ba581611a5f565b6040805180820190915260008082526020820152610d5e610e8c7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610e719291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120611ac8565b611b16565b610e9961171b565b610ea584848484611ba6565b50505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff166002811115610f0557610f05614d4f565b6002811115610f1657610f16614d4f565b90525092915050565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610f54903390600401614ab1565b602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190615796565b610fb15760405162461bcd60e51b815260040161093d906157b8565b60001960018190556040519081523390600080516020615f208339815191529060200160405180910390a2565b610fe6611997565b609654829060ff908116908216106110605760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d4578697374736044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b606482015260840161093d565b61106a8383612130565b505050565b609c818154811061107f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6110a161171b565b61106a8383836121ce565b6110b4611997565b6110be600061228e565b565b6000610d5e826122e0565b60006110df6064546001600160a01b031690565b905090565b6110ec61171b565b6110fd898989898989898989612349565b505050505050505050565b61111061171b565b61111e868686868686612680565b505050505050565b6060600082516001600160401b0381111561114357611143614ac5565b60405190808252806020026020018201604052801561116c578160200160208202803683370190505b50905060005b83518110156111d75761119e85858381518110611191576111916156b9565b6020026020010151612804565b8282815181106111b0576111b06156b9565b63ffffffff90921660209283029190910190910152806111cf81615816565b915050611172565b509392505050565b6111e761171b565b610832828261292e565b6111f9611997565b61106a838383612995565b600054610100900460ff16158080156112245750600054600160ff909116105b8061123e5750303b15801561123e575060005460ff166001145b6112a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161093d565b6000805460ff1916600117905580156112c4576000805461ff0019166101001790555b825184511480156112d6575081518351145b6113405760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b606482015260840161093d565b6113498961228e565b6113538686612bac565b61135c886119f6565b61136587611a5f565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688841690831617905585549384019095559190920180547f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0090921691909316179091555b84518110156114b6576114a4858281518110611463576114636156b9565b602002602001015185838151811061147d5761147d6156b9565b6020026020010151858481518110611497576114976156b9565b6020026020010151612995565b806114ae81615816565b915050611445565b5080156110fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b61150f611997565b6001600160a01b0381166115745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093d565b610ba58161228e565b60006115bb7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a86868686604051602001610e71959493929190615831565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061572f565b6001600160a01b0316336001600160a01b03161461166b5760405162461bcd60e51b815260040161093d9061574c565b6001541981196001541916146116e45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b606482015260840161093d565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610aea565b7f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b5706001600160a01b031663bfe107386040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561177657600080fd5b505af1158015610ea5573d6000803e3d6000fd5b600154600290600490811614156117b35760405162461bcd60e51b815260040161093d906158a7565b60005b82811015610ea55760008484838181106117d2576117d26156b9565b90506020020160208101906117e79190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561183257611832614d4f565b600281111561184357611843614d4f565b90525080519091506000611856826122e0565b9050600061186c826001600160c01b0316612c86565b9050611879858583612d52565b5050505050808061188990615816565b9150506117b6565b6001600160a01b03811661191f5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161093d565b7f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6600060029054906101000a90046001600160a01b0316826040516119659291906158da565b60405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336119a06110cb565b6001600160a01b0316146110be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093d565b609d546040517f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c91611a35916001600160a01b039091169084906158da565b60405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546040517f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc991611a9e916001600160a01b039091169084906158da565b60405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d5e611ad5612e3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b604080518082019091526000808252602082015260008080611b46600080516020615f408339815191528661590a565b90505b611b5281612f66565b9093509150600080516020615f40833981519152828309831415611b8c576040805180820190915290815260208101919091529392505050565b600080516020615f40833981519152600182089050611b49565b60015460029060049081161415611bcf5760405162461bcd60e51b815260040161093d906158a7565b6000611c1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050611c2281613067565b611c925760405162461bcd60e51b81526020600482015260476024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a40161093d565b848314611d015760405162461bcd60e51b81526020600482015260436024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a40161093d565b60005b83811015612127576000858583818110611d2057611d206156b9565b919091013560f81c91503690506000898985818110611d4157611d416156b9565b9050602002810190611d53919061591e565b6040516379a0849160e11b815260ff8616600482015291935091507f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd006001600160a01b03169063f341092290602401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190615967565b63ffffffff168114611e7f5760405162461bcd60e51b81526020600482015260656024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c40161093d565b6000805b828110156120c6576000848483818110611e9f57611e9f6156b9565b9050602002016020810190611eb49190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff166002811115611eff57611eff614d4f565b6002811115611f1057611f10614d4f565b90525080519091506000611f23826122e0565b905060016001600160c01b03821660ff8b161c811614611fa75760405162461bcd60e51b815260206004820152604460248201819052600080516020615ee0833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a40161093d565b856001600160a01b0316846001600160a01b0316116120525760405162461bcd60e51b81526020600482015260676024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c40161093d565b506120b083838f8f8d908e60016120699190615984565b926120769392919061599c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5292505050565b509092506120bf905081615816565b9050611e83565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061212090615816565b9050611d04565b50505050505050565b60ff821660008181526097602090815260409182902084518154928601518487015161ffff908116600160301b0267ffff0000000000001991909216600160201b0265ffffffffffff1990951663ffffffff909316929092179390931716919091179055517f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac906121c2908490615585565b60405180910390a25050565b609e546001600160a01b0316331461224e5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f72000000000000606482015260840161093d565b61106a8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260986020526040812054806122fd5750600092915050565b60008381526098602052604090206123166001836159c6565b81548110612326576123266156b9565b600091825260209091200154600160401b90046001600160c01b03169392505050565b6001805460009190811614156123715760405162461bcd60e51b815260040161093d906158a7565b8389146123f45760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161093d565b60006124003388613549565b905061245f818787808060200260200160405190810160405280939291908181526020016000905b8282101561245457612445604083028601368190038101906159dd565b81526020019060010190612428565b50505050508661367b565b60006124a633838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b905060005b8b811015612671576000609760008f8f858181106124cb576124cb6156b9565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110612538576125386156b9565b602002602001015163ffffffff16111561265e576125d98e8e84818110612561576125616156b9565b9050013560f81c60f81b60f81c84604001518481518110612584576125846156b9565b602002602001015133866020015186815181106125a3576125a36156b9565b60200260200101518d8d888181106125bd576125bd6156b9565b9050604002018036038101906125d391906159dd565b86613d5f565b61265e8989848181106125ee576125ee6156b9565b90506040020160200160208101906126069190614c21565b8f8f85908660016126179190615984565b926126249392919061599c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b508061266981615816565b9150506124ab565b50505050505050505050505050565b6001805460009190811614156126a85760405162461bcd60e51b815260040161093d906158a7565b60006126b43385613549565b905060006126fd33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b51905060005b888110156127f85760008a8a8381811061271f5761271f6156b9565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110612755576127556156b9565b602002602001015163ffffffff1611156127e55760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a40161093d565b50806127f081615816565b915050612703565b50505050505050505050565b600081815260986020526040812054815b8181101561289657600161282982846159c6565b61283391906159c6565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110612866576128666156b9565b60009182526020909120015463ffffffff1611612884575050610d5e565b8061288e81615816565b915050612815565b5060405162461bcd60e51b815260206004820152606c6024820152600080516020615ec083398151915260448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c40161093d565b60018054600290811614156129555760405162461bcd60e51b815260040161093d906158a7565b61106a3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b60965460ff1660c08110612a095760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b606482015260840161093d565b612a148160016159f9565b6096805460ff191660ff9290921691909117905580612a338186612130565b60405160016296b58960e01b031981526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d169063ff694a7790612a8690849088908890600401615a1e565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b9857600080fd5b505af11580156110fd573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015612bd357506001600160a01b03821615155b612c555760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161093d565b60018190556040518181523390600080516020615f208339815191529060200160405180910390a261083282611891565b6060600080612c9484614034565b61ffff166001600160401b03811115612caf57612caf614ac5565b6040519080825280601f01601f191660200182016040528015612cd9576020820181803683370190505b5090506000805b825182108015612cf1575061010081105b15612d48576001811b935085841615612d38578060f81b838381518110612d1a57612d1a6156b9565b60200101906001600160f81b031916908160001a9053508160010191505b612d4181615816565b9050612ce0565b5090949350505050565b600182602001516002811115612d6a57612d6a614d4f565b14612d7457505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16906366acfefe90612dc990889086908890600401615a97565b6020604051808303816000875af1158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0c9190615abe565b90506001600160c01b03811615612e3857612e3885612e33836001600160c01b0316612c86565b61309a565b5050505050565b6000306001600160a01b037f000000000000000000000000c351628eb244ec633d5f21fbd6621e1a683b118116148015612e9857507f0000000000000000000000000000000000000000000000000000000000007a6946145b15612ec257507f3c76dd3e3a11d13343807370b8cba2bef53120b6c35960fabeed299514350ed790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615f408339815191526003600080516020615f4083398151915286600080516020615f40833981519152888909090890506000612fdc827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f4083398151915261405f565b91959194509092505050565b600080612ff48461410e565b9050808360ff166001901b116130605760405162461bcd60e51b815260206004820152603f6024820152600080516020615fa083398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161093d565b9392505050565b60965460009081906130819060019060ff1681901b6159c6565b90506130606001600160c01b0384811690831681161490565b6001600160a01b0382166000908152609960205260409020805460018083015460ff1660028111156130ce576130ce614d4f565b1461313b5760405162461bcd60e51b81526020600482015260436024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a40161093d565b60965460009061314f90859060ff16612fe8565b9050600061315c836122e0565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603b6024820152600080516020615f6083398151915260448201527f70657261746f723a206269746d61702063616e6e6f7420626520300000000000606482015260840161093d565b6131d182613067565b61323c5760405162461bcd60e51b81526020600482015260426024820152600080516020615f6083398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a40161093d565b6132536001600160c01b0383811690831681161490565b6132d55760405162461bcd60e51b81526020600482015260596024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527872656420666f72207370656369666965642071756f72756d7360381b608482015260a40161093d565b6001600160c01b03828116198216166132ee8482614277565b6001600160c01b0381166133c05760018501805460ff191660021790556040516351b27a6d60e11b81527f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf6001600160a01b03169063a364f4da90613357908a90600401614ab1565b600060405180830381600087803b15801561337157600080fd5b505af1158015613385573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688169063f4e24fe59061340e908a908a90600401615ae7565b600060405180830381600087803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16925063bd29b8cd915061348e9087908a90600401615b0b565b600060405180830381600087803b1580156134a857600080fd5b505af11580156134bc573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0016925063bd29b8cd915061350e9087908a90600401615b0b565b600060405180830381600087803b15801561352857600080fd5b505af115801561353c573d6000803e3d6000fd5b5050505050505050505050565b6040516309aa152760e11b81526000906001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168816906313542a4e90613598908690600401614ab1565b602060405180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615b24565b905080610d5e577f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b031663bf79ce58848461361a87610e12565b6040518463ffffffff1660e01b815260040161363893929190615b3d565b6020604051808303816000875af1158015613657573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130609190615b24565b6020808201516000908152609a909152604090205460ff16156137215760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a40161093d565b42816040015110156137b65760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a40161093d565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161106a926001600160a01b03909216916137fe918791879161157d565b8351614437565b61382960405180606001604052806060815260200160608152602001606081525090565b600061387186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050600061387e886122e0565b90506001600160c01b0382166138e65760405162461bcd60e51b81526020600482015260396024820152600080516020615f8083398151915260448201527807261746f723a206269746d61702063616e6e6f74206265203603c1b606482015260840161093d565b6138ef82613067565b613951576040805162461bcd60e51b8152602060048201526024810191909152600080516020615f8083398151915260448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f74206578697374606482015260840161093d565b8082166001600160c01b0316156139f55760405162461bcd60e51b81526020600482015260686024820152600080516020615f8083398151915260448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c40161093d565b6001600160c01b0381811690831617613a0e8982614277565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051613a3e919061571c565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff166002811115613a7857613a78614d4f565b14613b91576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff191690836002811115613ad357613ad3614d4f565b021790555050604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf169150639926ee7d90613b28908d908990600401615bbc565b600060405180830381600087803b158015613b4257600080fd5b505af1158015613b56573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816881690633fb2795290613be1908d908c908c90600401615c30565b600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16925063255047779150613c65908d908d908d908d90600401615c55565b6000604051808303816000875af1158015613c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cac9190810190615ceb565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00169062bff04d90613d09908c908c908c90600401615d4e565b6000604051808303816000875af1158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d509190810190615d68565b84525050509695505050505050565b6020808301516001600160a01b038082166000818152609990945260409093205491929087161415613ddf5760405162461bcd60e51b81526020600482015260356024820152600080516020615f0083398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b606482015260840161093d565b8760ff16846000015160ff1614613e5c5760405162461bcd60e51b81526020600482015260476024820152600080516020615f0083398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a40161093d565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690635401ed2790604401602060405180830381865afa158015613ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef19190615e01565b9050613efd81856145f1565b6001600160601b0316866001600160601b031611613f905760405162461bcd60e51b81526020600482015260566024820152600080516020615f0083398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a40161093d565b613f9a8885614615565b6001600160601b0316816001600160601b0316106110fd5760405162461bcd60e51b815260206004820152605c6024820152600080516020615f0083398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a40161093d565b6000805b8215610d5e576140496001846159c6565b909216918061405781615e1e565b915050614038565b60008061406a61498d565b6140726149ab565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156140b3576140b5565bfe5b50826141035760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161093d565b505195945050505050565b6000610100825111156141855760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161093d565b815161419357506000919050565b600080836000815181106141a9576141a96156b9565b0160200151600160f89190911c81901b92505b845181101561426e578481815181106141d7576141d76156b9565b0160200151600160f89190911c1b915082821161425a5760405162461bcd60e51b81526020600482015260476024820152600080516020615fa083398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161093d565b9181179161426781615816565b90506141bc565b50909392505050565b6000828152609860205260409020548061431c576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206143356001846159c6565b81548110614345576143456156b9565b600091825260209091200180549091504363ffffffff908116911614156143895780546001600160401b0316600160401b6001600160c01b03851602178155610ea5565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561455157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144779086908690600401615b0b565b602060405180830381865afa158015614494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b89190615e40565b6001600160e01b0319161461106a5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161093d565b826001600160a01b0316614565838361462f565b6001600160a01b03161461106a5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161093d565b60208101516000906127109061460b9061ffff1685615e6a565b6130609190615e99565b60408101516000906127109061460b9061ffff1685615e6a565b600080600061463e858561464b565b915091506111d7816146bb565b6000808251604114156146825760208301516040840151606085015160001a61467687828585614871565b945094505050506146b4565b8251604014156146ac57602083015160408401516146a1868383614954565b9350935050506146b4565b506000905060025b9250929050565b60008160048111156146cf576146cf614d4f565b14156146d85750565b60018160048111156146ec576146ec614d4f565b14156147355760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161093d565b600281600481111561474957614749614d4f565b14156147975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161093d565b60038160048111156147ab576147ab614d4f565b14156148045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161093d565b600481600481111561481857614818614d4f565b1415610ba55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161093d565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561489e575060009050600361494b565b8460ff16601b141580156148b657508460ff16601c14155b156148c7575060009050600461494b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561491b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166149445760006001925092505061494b565b9150600090505b94509492505050565b6000806001600160ff1b0383168161497160ff86901c601b615984565b905061497f87828885614871565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126149db57600080fd5b5081356001600160401b038111156149f257600080fd5b6020830191508360208260051b85010111156146b457600080fd5b60008060208385031215614a2057600080fd5b82356001600160401b03811115614a3657600080fd5b614a42858286016149c9565b90969095509350505050565b600060208284031215614a6057600080fd5b5035919050565b63ffffffff81168114610ba557600080fd5b600080600060608486031215614a8e57600080fd5b833592506020840135614aa081614a67565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614afd57614afd614ac5565b60405290565b604080519081016001600160401b0381118282101715614afd57614afd614ac5565b604051601f8201601f191681016001600160401b0381118282101715614b4d57614b4d614ac5565b604052919050565b60006001600160401b03831115614b6e57614b6e614ac5565b614b81601f8401601f1916602001614b25565b9050828152838383011115614b9557600080fd5b828260208301376000602084830101529392505050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b8201601f81018413614be557600080fd5b614bf484823560208401614b55565b949350505050565b6001600160a01b0381168114610ba557600080fd5b8035614c1c81614bfc565b919050565b600060208284031215614c3357600080fd5b813561306081614bfc565b60008060408385031215614c5157600080fd5b50508035926020909101359150565b803560ff81168114614c1c57600080fd5b600060208284031215614c8357600080fd5b61306082614c60565b815181526020808301519082015260408101610d5e565b60008083601f840112614cb557600080fd5b5081356001600160401b03811115614ccc57600080fd5b6020830191508360208285010111156146b457600080fd5b60008060008060408587031215614cfa57600080fd5b84356001600160401b0380821115614d1157600080fd5b614d1d888389016149c9565b90965094506020870135915080821115614d3657600080fd5b50614d4387828801614ca3565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614d8357634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614da290840182614d65565b5092915050565b803561ffff81168114614c1c57600080fd5b600060608284031215614dcd57600080fd5b614dd5614adb565b90508135614de281614a67565b8152614df060208301614da9565b6020820152614e0160408301614da9565b604082015292915050565b60008060808385031215614e1f57600080fd5b614e2883614c60565b9150614e378460208501614dbb565b90509250929050565b600080600060408486031215614e5557600080fd5b8335614e6081614bfc565b925060208401356001600160401b03811115614e7b57600080fd5b614e8786828701614ca3565b9497909650939450505050565b60006101008284031215614ea757600080fd5b50919050565b60008083601f840112614ebf57600080fd5b5081356001600160401b03811115614ed657600080fd5b6020830191508360208260061b85010111156146b457600080fd5b600060608284031215614f0357600080fd5b614f0b614adb565b905081356001600160401b03811115614f2357600080fd5b8201601f81018413614f3457600080fd5b614f4384823560208401614b55565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f7f57600080fd5b89356001600160401b0380821115614f9657600080fd5b614fa28d838e01614ca3565b909b50995060208c0135915080821115614fbb57600080fd5b614fc78d838e01614ca3565b9099509750879150614fdc8d60408e01614e94565b96506101408c0135915080821115614ff357600080fd5b614fff8d838e01614ead565b90965094506101608c013591508082111561501957600080fd5b6150258d838e01614ef1565b93506101808c013591508082111561503c57600080fd5b506150498c828d01614ef1565b9150509295985092959850929598565b600080600080600080610160878903121561507357600080fd5b86356001600160401b038082111561508a57600080fd5b6150968a838b01614ca3565b909850965060208901359150808211156150af57600080fd5b6150bb8a838b01614ca3565b90965094508491506150d08a60408b01614e94565b93506101408901359150808211156150e757600080fd5b506150f489828a01614ef1565b9150509295509295509295565b60006001600160401b0382111561511a5761511a614ac5565b5060051b60200190565b6000806040838503121561513757600080fd5b823561514281614a67565b91506020838101356001600160401b0381111561515e57600080fd5b8401601f8101861361516f57600080fd5b803561518261517d82615101565b614b25565b81815260059190911b820183019083810190888311156151a157600080fd5b928401925b828410156151bf578335825292840192908401906151a6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561520c57835163ffffffff16835292840192918401916001016151ea565b50909695505050505050565b6000806020838503121561522b57600080fd5b82356001600160401b0381111561524157600080fd5b614a4285828601614ca3565b6001600160601b0381168114610ba557600080fd5b600082601f83011261527357600080fd5b8135602061528361517d83615101565b82815260069290921b840181019181810190868411156152a257600080fd5b8286015b848110156152f357604081890312156152bf5760008081fd5b6152c7614b03565b81356152d281614bfc565b8152818501356152e18161524d565b818601528352918301916040016152a6565b509695505050505050565b600080600060a0848603121561531357600080fd5b61531d8585614dbb565b9250606084013561532d8161524d565b915060808401356001600160401b0381111561534857600080fd5b61535486828701615262565b9150509250925092565b600082601f83011261536f57600080fd5b8135602061537f61517d83615101565b8281526060928302850182019282820191908785111561539e57600080fd5b8387015b858110156153c1576153b48982614dbb565b84529284019281016153a2565b5090979650505050505050565b600082601f8301126153df57600080fd5b813560206153ef61517d83615101565b82815260059290921b8401810191818101908684111561540e57600080fd5b8286015b848110156152f35780356154258161524d565b8352918301918301615412565b600082601f83011261544357600080fd5b8135602061545361517d83615101565b82815260059290921b8401810191818101908684111561547257600080fd5b8286015b848110156152f35780356001600160401b038111156154955760008081fd5b6154a38986838b0101615262565b845250918301918301615476565b600080600080600080600080610100898b0312156154ce57600080fd5b6154d789614c11565b97506154e560208a01614c11565b96506154f360408a01614c11565b955061550160608a01614c11565b94506080890135935060a08901356001600160401b038082111561552457600080fd5b6155308c838d0161535e565b945060c08b013591508082111561554657600080fd5b6155528c838d016153ce565b935060e08b013591508082111561556857600080fd5b506155758b828c01615432565b9150509295985092959890939650565b815163ffffffff16815260208083015161ffff90811691830191909152604092830151169181019190915260600190565b6000604082840312156155c857600080fd5b6155d0614b03565b90506155db82614c60565b815260208201356155eb81614bfc565b602082015292915050565b6000806000806080858703121561560c57600080fd5b843593506020808601356001600160401b0381111561562a57600080fd5b8601601f8101881361563b57600080fd5b803561564961517d82615101565b81815260069190911b8201830190838101908a83111561566857600080fd5b928401925b828410156156915761567f8b856155b6565b8252848201915060408401935061566d565b979a97995050505060408601359560600135949350505050565b60208101610d5e8284614d65565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b818110156156f5576020818501810151868301820152016156d9565b81811115615707576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061306060208301846156cf565b60006020828403121561574157600080fd5b815161306081614bfc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156157a857600080fd5b8151801515811461306057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561582a5761582a615800565b5060010190565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b8181101561588e578551805160ff1684528501516001600160a01b031685840152948401949183019160010161585d565b5050606086019790975250505050608001529392505050565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601260045260246000fd5b600082615919576159196158f4565b500690565b6000808335601e1984360301811261593557600080fd5b8301803591506001600160401b0382111561594f57600080fd5b6020019150600581901b36038213156146b457600080fd5b60006020828403121561597957600080fd5b815161306081614a67565b6000821982111561599757615997615800565b500190565b600080858511156159ac57600080fd5b838611156159b957600080fd5b5050820193919092039150565b6000828210156159d8576159d8615800565b500390565b6000604082840312156159ef57600080fd5b61306083836155b6565b600060ff821660ff84168060ff03821115615a1657615a16615800565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615a8757865180516001600160a01b031684528601518516868401529585019591830191600101615a57565b50909a9950505050505050505050565b60018060a01b03841681528260208201526060604082015260006115bb60608301846156cf565b600060208284031215615ad057600080fd5b81516001600160c01b038116811461306057600080fd5b6001600160a01b0383168152604060208201819052600090614bf4908301846156cf565b828152604060208201526000614bf460408301846156cf565b600060208284031215615b3657600080fd5b5051919050565b6001600160a01b03841681526101608101615b65602083018580358252602090810135910152565b615b7f606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615be660a08401826156cf565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906115bb9083018486615c07565b60018060a01b0385168152836020820152606060408201526000615c7d606083018486615c07565b9695505050505050565b600082601f830112615c9857600080fd5b81516020615ca861517d83615101565b82815260059290921b84018101918181019086841115615cc757600080fd5b8286015b848110156152f3578051615cde8161524d565b8352918301918301615ccb565b60008060408385031215615cfe57600080fd5b82516001600160401b0380821115615d1557600080fd5b615d2186838701615c87565b93506020850151915080821115615d3757600080fd5b50615d4485828601615c87565b9150509250929050565b8381526040602082015260006115bb604083018486615c07565b60006020808385031215615d7b57600080fd5b82516001600160401b03811115615d9157600080fd5b8301601f81018513615da257600080fd5b8051615db061517d82615101565b81815260059190911b82018301908381019087831115615dcf57600080fd5b928401925b82841015615df6578351615de781614a67565b82529284019290840190615dd4565b979650505050505050565b600060208284031215615e1357600080fd5b81516130608161524d565b600061ffff80831681811415615e3657615e36615800565b6001019392505050565b600060208284031215615e5257600080fd5b81516001600160e01b03198116811461306057600080fd5b60006001600160601b0380831681851681830481118215151615615e9057615e90615800565b02949350505050565b60006001600160601b0380841680615eb357615eb36158f4565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e67657451756f72756d4269745265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c6964617465436875ab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724f5265676973747279436f6f7264696e61746f722e5f72656769737465724f70654269746d61705574696c732e6f72646572656442797465734172726179546f42a2646970667358221220c54efdc441b7ab5c292c79c0ba4c4250c55da2675b4df1faf620ffd38a6065c264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x3f1c547b21f65e10480de3ad8e19faac46c95034","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcbeaf3bde82155f56486fb5a1072cb8baaf547cc":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a0366004613362565b6103c4565b005b6101a56101b53660046133cd565b610494565b6101a56101c83660046133ea565b610547565b6101f47f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b57081565b6040516101899190613403565b61021461020f366004613429565b610674565b604051908152602001610189565b6102356102303660046133cd565b610792565b60405161018991906134cc565b6101a56102503660046133cd565b610c66565b6101a5610263366004613519565b610cde565b6101a5610db5565b61029361027e366004613556565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b366004613626565b610e83565b6101a561031e3660046133cd565b610fa4565b6101f47f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6101a56103583660046136d0565b61106d565b61021461036b366004613746565b6110c1565b6101a561037e3660046133cd565b6110f0565b61021461039136600461377b565b6111c6565b61023561131e565b6101a56103ac3660046133cd565b6116e7565b6101a56103bf3660046133ea565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f61047560208501856137c9565b61048560408601602087016137e6565b8560a001356119f3565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190613801565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061381e565b61054481611a57565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613403565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190613878565b6105d45760405162461bcd60e51b815260040161041590613893565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233906000805160206140fa833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e460208901896137c9565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061071391906137e6565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4e565b61078886866111c6565b9695505050505050565b606060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613403565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906138db565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906138f4565b90506001600160c01b038116158061094c57507f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610947919061391d565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5f565b90506000805b8251811015610a56577f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b0316633ca5a5f58483815181106109d0576109d061393a565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906138db565b610a429083613966565b915080610a4e8161397e565b915050610986565b506000816001600160401b03811115610a7157610a71613573565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe61393a565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d1690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906138db565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190613999565b60000151868681518110610c0b57610c0b61393a565b6001600160a01b039092166020928302919091019091015284610c2d8161397e565b9550508080610c3b9061397e565b915050610b5c565b5050508080610c519061397e565b915050610aa1565b5090979650505050505050565b336001600160a01b037f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf16146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c21565b610d6b826000611c73565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613403565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613878565b610e425760405162461bcd60e51b815260040161041590613893565b60001960cb81905560405190815233906000805160206140fa8339815191529060200160405180910390a2565b610e77611d47565b610e816000611c21565b565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614610ecb5760405162461bcd60e51b815260040161041590613a56565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b5701690632e8da82990610f17908590600401613403565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613878565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da1565b5050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614610fec5760405162461bcd60e51b815260040161041590613a56565b6040516351b27a6d60e11b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a364f4da90611038908490600401613403565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d47565b60405163a98fb35560e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a98fb35590611038908490600401613b1b565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6d565b61117d600080611c73565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d860208701876137c9565b63ffffffff1663ffffffff168152602001908152602001600020600085602001602081019061120791906137e6565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b61131661128760208501856133cd565b60208501358361129a6040880188613b2e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613b2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed892505050565b949350505050565b606060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a4919061391d565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906138db565b6114639083613966565b91508061146f8161397e565b9150506113c6565b506000816001600160401b0381111561149257611492613573565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061391d565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906138db565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190613999565b600001518585815181106116905761169061393a565b6001600160a01b0390921660209283029190910190910152836116b28161397e565b94505080806116c09061397e565b9150506115e1565b505080806116d59061397e565b9150506114c2565b5090949350505050565b6116ef611d47565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c21565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190613801565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061381e565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b6000807f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf6001600160a01b031663292f7a4e6118ef86612015565b6118fa600143613b7b565b8660037f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf6001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613b92565b61198a906002613baf565b6119949190613bf1565b6040518563ffffffff1660e01b81526004016119b39493929190613da8565b6040805180830381865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190613f07565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5984826103c4565b50505050565b6060600080611b6d84612096565b61ffff166001600160401b03811115611b8857611b88613573565b6040519080825280601f01601f191660200182016040528015611bb2576020820181803683370190505b5090506000805b825182108015611bca575061010081105b156116dd576001811b935085841615611c11578060f81b838381518110611bf357611bf361393a565b60200101906001600160f81b031916908160001a9053508160010191505b611c1a8161397e565b9050611bb9565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9457506001600160a01b03821615155b611d165760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb81905560405181815233906000805160206140fa8339815191529060200160405180910390a2610fa082611a57565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614611de95760405162461bcd60e51b815260040161041590613a56565b604051639926ee7d60e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690639926ee7d90611e379085908590600401613f33565b600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f189060340160405160208183030381529060405286886120c1565b9150915081611f625760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6d826120ea565b9050600080611fa28a604051602001611f8891815260200190565b6040516020818303038152906040528885604001516120c1565b9150915081611ff35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612004611fff826121ae565b6121c1565b955050505050505b95945050505050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016120499190613f7e565b60405160208183030381529060405280519060200120604051602001612079929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000805b82156110ea576120ab600184613b7b565b90921691806120b981613fea565b91505061209a565b6000606060006120d0866121f0565b90506120dd818686612222565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290612117836122fd565b905060405180608001604052806121478360008151811061213a5761213a61393a565b6020026020010151612310565b81526020016121628360018151811061213a5761213a61393a565b815260200161218a8360028151811061217d5761217d61393a565b6020026020010151612317565b81526020016121a58360038151811061217d5761217d61393a565b90529392505050565b60606110ea6121bc836123b9565b6123e6565b60008060006020845111156121d75760206121da565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161220c91815260200190565b6040516020818303038152906040529050919050565b60006060600061223185612468565b90506000806000612243848a89612562565b815192955090935091501580806122575750815b6122a35760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b6000816122bf57604051806020016040528060008152506122eb565b6122eb866122ce600188613b7b565b815181106122de576122de61393a565b6020026020010151612986565b919b919a509098505050505050505050565b60606110ea61230b836123b9565b6129b0565b60006110ea825b600060218260000151111561233e5760405162461bcd60e51b81526004016104159061400c565b600080600061234c85612b96565b91945092509050600081600181111561236757612367614043565b146123845760405162461bcd60e51b81526004016104159061400c565b60008386602001516123969190613966565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006123f685612b96565b91945092509050600081600181111561241157612411614043565b146124595760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200c85602001518484612ecc565b60606000612475836122fd565b9050600081516001600160401b0381111561249257612492613573565b6040519080825280602002602001820160405280156124d757816020015b60408051808201909152606080825260208201528152602001906001900390816124b05790505b50905060005b825181101561255a57600061250a8483815181106124fd576124fd61393a565b60200260200101516123e6565b90506040518060400160405280828152602001612526836122fd565b81525083838151811061253b5761253b61393a565b60200260200101819052505080806125529061397e565b9150506124dd565b509392505050565b6000606081808061257287612fa7565b90506000869050600080612599604051806040016040528060608152602001606081525090565b60005b8c5181101561295e578c81815181106125b7576125b761393a565b6020026020010151915082846125cd9190613966565b93506125da600188613966565b9650836126325781518051602090910120851461262d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b6126ef565b8151516020116126945781518051602090910120851461262d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b846126a283600001516130e1565b146126ef5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b6126fb60106001613966565b82602001515114156127745785518414156127155761295e565b60008685815181106127295761272961393a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106127545761275461393a565b6020026020010151905061276781613109565b965060019450505061294c565b6002826020015151141561290457600061278d8361313f565b90506000816000815181106127a4576127a461393a565b016020015160f81c905060006127bb600283614059565b6127c690600261407b565b905060006127d7848360ff16613163565b905060006127e58b8a613163565b905060006127f38383613199565b905060ff85166002148061280a575060ff85166003145b156128445780835114801561281f5750808251145b156128315761282e818b613966565b99505b50600160ff1b995061295e945050505050565b60ff85161580612857575060ff85166001145b156128ad57825181146128775750600160ff1b995061295e945050505050565b61289e88602001516001815181106128915761289161393a565b6020026020010151613109565b9a50975061294c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806129568161397e565b91505061259c565b50600160ff1b8414866129718786613163565b909e909d50909b509950505050505050505050565b602081015180516060916110ea916129a090600190613b7b565b815181106124fd576124fd61393a565b60606000806129be84612b96565b919350909150600190508160018111156129da576129da614043565b14612a215760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612a3a5790505090506000835b8651811015612b8b5760208210612ad35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612b106040518060400160405280858c60000151612af49190613b7b565b8152602001858c60200151612b099190613966565b9052612b96565b509150915060405180604001604052808383612b2c9190613966565b8152602001848b60200151612b419190613966565b815250858581518110612b5657612b5661393a565b6020908102919091010152612b6c600185613966565b9350612b788183613966565b612b829084613966565b92505050612a67565b508152949350505050565b600080600080846000015111612be95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612c0e576000600160009450945094505050612ec5565b60b78111612c86576000612c23608083613b7b565b905080876000015111612c745760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612ec5915050565b60bf8111612d70576000612c9b60b783613b7b565b905080876000015111612cf05760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612d0a8183613966565b885111612d545760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612d5f826001613966565b9650945060009350612ec592505050565b60f78111612de5576000612d8560c083613b7b565b905080876000015111612dd45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612ec5915050565b6000612df260f783613b7b565b905080876000015111612e475760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612e618183613966565b885111612ea95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612eb4826001613966565b9650945060019350612ec592505050565b9193909250565b60606000826001600160401b03811115612ee857612ee8613573565b6040519080825280601f01601f191660200182016040528015612f12576020820181803683370190505b509050805160001415612f26579050612fa0565b6000612f328587613966565b90506020820160005b612f4660208761409e565b811015612f7d5782518252612f5c602084613966565b9250612f69602083613966565b915080612f758161397e565b915050612f3b565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6060600082516002612fb991906140b2565b6001600160401b03811115612fd057612fd0613573565b6040519080825280601f01601f191660200182016040528015612ffa576020820181803683370190505b50905060005b83518110156130da57600484828151811061301d5761301d61393a565b01602001516001600160f81b031916901c8261303a8360026140b2565b8151811061304a5761304a61393a565b60200101906001600160f81b031916908160001a90535060108482815181106130755761307561393a565b0160200151613087919060f81c614059565b60f81b826130968360026140b2565b6130a1906001613966565b815181106130b1576130b161393a565b60200101906001600160f81b031916908160001a905350806130d28161397e565b915050613000565b5092915050565b60006020825110156130f557506020015190565b818060200190518101906110ea91906138db565b6000606060208360000151101561312a5761312383613215565b9050613136565b613133836123e6565b90505b612fa0816130e1565b60606110ea61315e83602001516000815181106124fd576124fd61393a565b612fa7565b60608251821061318257506040805160208101909152600081526110ea565b612fa083838486516131949190613b7b565b613220565b6000805b8084511180156131ad5750808351115b80156131fe57508281815181106131c6576131c661393a565b602001015160f81c60f81b6001600160f81b0319168482815181106131ed576131ed61393a565b01602001516001600160f81b031916145b15612fa0578061320d8161397e565b91505061319d565b60606110ea82613334565b60608161322e81601f613966565b101561324c5760405162461bcd60e51b8152600401610415906140d1565b826132578382613966565b10156132755760405162461bcd60e51b8152600401610415906140d1565b61327f8284613966565b845110156132c35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b6060821580156132e25760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561331b578051835260209283019201613303565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612ecc565b600060c0828403121561335c57600080fd5b50919050565b60008060e0838503121561337557600080fd5b61337f848461334a565b915060c08301356001600160401b0381111561339a57600080fd5b830161018081860312156133ad57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b6000602082840312156133df57600080fd5b8135612fa0816133b8565b6000602082840312156133fc57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006080828403121561335c57600080fd5b600080600080610100858703121561344057600080fd5b61344a868661334a565b935060c08501356001600160401b038082111561346657600080fd5b61347288838901613417565b945060e087013591508082111561348857600080fd5b818701915087601f83011261349c57600080fd5b8135818111156134ab57600080fd5b8860208285010111156134bd57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561350d5783516001600160a01b0316835292840192918401916001016134e8565b50909695505050505050565b6000806040838503121561352c57600080fd5b8235613537816133b8565b915060208301356133ad816133b8565b60ff8116811461054457600080fd5b60006020828403121561356857600080fd5b8135612fa081613547565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156135ab576135ab613573565b60405290565b60006001600160401b03808411156135cb576135cb613573565b604051601f8501601f19908116603f011681019082821181831017156135f3576135f3613573565b8160405280935085815286868601111561360c57600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561363957600080fd5b8235613644816133b8565b915060208301356001600160401b038082111561366057600080fd5b908401906060828703121561367457600080fd5b61367c613589565b82358281111561368b57600080fd5b83019150601f8201871361369e57600080fd5b6136ad878335602085016135b1565b815260208301356020820152604083013560408201528093505050509250929050565b6000602082840312156136e257600080fd5b81356001600160401b038111156136f857600080fd5b8201601f8101841361370957600080fd5b611316848235602084016135b1565b63ffffffff8116811461054457600080fd5b80356001600160401b038116811461374157600080fd5b919050565b6000806040838503121561375957600080fd5b823561376481613718565b91506137726020840161372a565b90509250929050565b60008060e0838503121561378e57600080fd5b613798848461334a565b915060c08301356001600160401b038111156137b357600080fd5b6137bf85828601613417565b9150509250929050565b6000602082840312156137db57600080fd5b8135612fa081613718565b6000602082840312156137f857600080fd5b612fa08261372a565b60006020828403121561381357600080fd5b8151612fa0816133b8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b8051801515811461374157600080fd5b60006020828403121561388a57600080fd5b612fa082613868565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156138ed57600080fd5b5051919050565b60006020828403121561390657600080fd5b81516001600160c01b0381168114612fa057600080fd5b60006020828403121561392f57600080fd5b8151612fa081613547565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561397957613979613950565b500190565b600060001982141561399257613992613950565b5060010190565b6000604082840312156139ab57600080fd5b604051604081018181106001600160401b03821117156139cd576139cd613573565b60405282516139db816133b8565b815260208301516bffffffffffffffffffffffff811681146139fc57600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613af457602081850181015186830182015201613ad8565b81811115613b06576000602083870101525b50601f01601f19169290920160200192915050565b602081526000612fa06020830184613ace565b6000808335601e19843603018112613b4557600080fd5b8301803591506001600160401b03821115613b5f57600080fd5b602001915036819003821315613b7457600080fd5b9250929050565b600082821015613b8d57613b8d613950565b500390565b600060208284031215613ba457600080fd5b8151612fa081613718565b600063ffffffff80831681851681830481118215151615613bd257613bd2613950565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613c0857613c08613bdb565b92169190910492915050565b6000808335601e19843603018112613c2b57600080fd5b83016020810192503590506001600160401b03811115613c4a57600080fd5b8060051b3603831315613b7457600080fd5b8183526000602080850194508260005b85811015613c97578135613c7f81613718565b63ffffffff1687529582019590820190600101613c6c565b509495945050505050565b6000808335601e19843603018112613cb957600080fd5b83016020810192503590506001600160401b03811115613cd857600080fd5b8060061b3603831315613b7457600080fd5b81835260208301925060008160005b84811015613d2157813586526020808301359087015260409586019590910190600101613cf9565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d9b578284038952613d7c8288613c14565b613d87868284613c5c565b9a87019a9550505090840190600101613d65565b5091979650505050505050565b84815260a06020820152600160a0820152600060c082015263ffffffff8416604082015260e060608201526000613ddf8485613c14565b61018060e0850152613df661026085018284613c5c565b915050613e066020860186613ca2565b60df198086850301610100870152613e1f848385613cea565b9350613e2e6040890189613ca2565b93509150610120818786030181880152613e49858585613cea565b94506101409350613e5f84880160608b01613d2b565b60e08901356101c08801526101008901356101e0880152613e82818a018a613c14565b935090508187860301610200880152613e9c858483613c5c565b945050613eab83890189613c14565b935091508086850301610220870152613ec5848484613c5c565b9350613ed5610160890189613c14565b93509150808685030161024087015250613ef0838383613d4b565b935050505061200c608083018463ffffffff169052565b60008060408385031215613f1a57600080fd5b613f2383613868565b9150602083015190509250929050565b60018060a01b0383168152604060208201526000825160606040840152613f5d60a0840182613ace565b90506020840151606084015260408401516080840152809150509392505050565b60c081018235613f8d81613718565b63ffffffff168252613fa16020840161372a565b6001600160401b03808216602085015280613fbe6040870161372a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b600061ffff8083168181141561400257614002613950565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061406c5761406c613bdb565b8060ff84160691505092915050565b600060ff821660ff84168082101561409557614095613950565b90039392505050565b6000826140ad576140ad613bdb565b500490565b60008160001904831182151516156140cc576140cc613950565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da2646970667358221220ff7724f9d223ce2511df9d1e8490fb61186326e243b28f6bbd92b3a9e2d6d92b64736f6c634300080c0033","storage":{"0x33":"0xff"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x6356ca026caf21023cb7650068491a5cc11ee8f81fbeb8f52c6780c04b388516","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xd5a0359da7b310917d7760385516b2426e86ab7f":{"nonce":0,"balance":"0x8ac7230489e80000","code":"0x","storage":{}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5ebe2c12a42e721609d1498db50973aeaff9e3c64738181887c534f293093208","0x9d":"0xc4e0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe6e340d132b5f46d1e472debcd681b2abc16e57e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x7322c24752f79c05ffd1e2a6fcb97020c1c264f1","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220f71399fafd06d0e383b21957bcac3bf3986a6a0701bc4c5dc7ee118215f3652364736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":68,"balance":"0x21e16d1d8d696de5d17","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061006d5760003560e01c8063095ea7b31461007257806318160ddd1461009d57806323b872dd146100af57806340c10f19146100c257806370a08231146100d7578063a9059cbb14610100578063dd62ed3e14610113575b600080fd5b610088610080366004610400565b600192915050565b60405190151581526020015b60405180910390f35b6002545b604051908152602001610094565b6100886100bd36600461042a565b61014c565b6100d56100d0366004610400565b610163565b005b6100a16100e5366004610466565b6001600160a01b031660009081526020819052604090205490565b61008861010e366004610400565b610171565b6100a1610121366004610488565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061015984848461017b565b5060019392505050565b61016d8282610325565b5050565b6000336101598185855b6001600160a01b0383166101e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101db565b6001600160a01b0383166000908152602081905260409020548111156102bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101db565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661037b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101db565b806002600082825461038d91906104bb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b03811681146103fb57600080fd5b919050565b6000806040838503121561041357600080fd5b61041c836103e4565b946020939093013593505050565b60008060006060848603121561043f57600080fd5b610448846103e4565b9250610456602085016103e4565b9150604084013590509250925092565b60006020828403121561047857600080fd5b610481826103e4565b9392505050565b6000806040838503121561049b57600080fd5b6104a4836103e4565b91506104b2602084016103e4565b90509250929050565b600082198211156104dc57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7869d1b65a81f40da4e99688a39ee120b01ef93e81e865bb196d1a6f125866c64736f6c634300080c0033","storage":{}}}} \ No newline at end of file +{"block":{"number":"0x11","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x669ee711","gas_limit":"0x1c9c380","basefee":"0x93fd457","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x15417facb32f400","code":"0x","storage":{}},"0x000000000000000000636f6e736f6c652e6c6f67":{"nonce":0,"balance":"0x0","code":"0x","storage":{}},"0x0165878a594ca255338adfa4d48449f69242eb8f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x9a676e781a523b5d0c0e43731313a708cb607508","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x0b306bf915c4d645ff596e518faf3f9669b97016":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78881565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000424242424242424242424242424242424242424281565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220f4142d31b19c8d9ca756fceb11e0a14c189743e7b456cda04629fad4f5e08cf164736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0dcd1bf9a1b36ce34237eeafef220932846bcd82":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106102275760003560e01c806394f649dd11610130578063c6656702116100b8578063df5cf7231161007c578063df5cf72314610596578063e7a050aa146105bd578063f2fde38b146105d0578063f698da25146105e3578063fabc1cbc146105eb57600080fd5b8063c665670214610520578063cbc2bd6214610533578063cd293f6f14610546578063cf756fdf14610570578063df5b35471461058357600080fd5b8063b43b514b116100ff578063b43b514b146104b1578063b5d8b5b8146104c4578063c3c6b3a9146104d7578063c4623ea1146104fa578063c608c7f31461050d57600080fd5b806394f649dd14610433578063967fc0d2146104545780639b4da03d14610467578063b13442711461048a57600080fd5b80635c975abb116101b35780637ecebe00116101825780637ecebe00146103b3578063886f1195146103d35780638b8aac3c146103e65780638c80d4e51461040f5780638da5cb5b1461042257600080fd5b80635c975abb14610355578063663c1de41461035d578063715018a6146103805780637a7e0d921461038857600080fd5b80634665bcda116101fa5780634665bcda146102a157806348825e94146102e05780634e5a426314610307578063595c6a671461031a5780635ac86ab71461032257600080fd5b806310d67a2f1461022c578063136439dd1461024157806320606b701461025457806332e89ace1461028e575b600080fd5b61023f61023a366004612b4a565b6105fe565b005b61023f61024f366004612b67565b6106ba565b61027b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027b61029c366004612c00565b6107f9565b6102c87f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b039091168152602001610285565b61027b7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61023f610315366004612ced565b610ae7565b61023f610b1f565b610345610330366004612d26565b609854600160ff9092169190911b9081161490565b6040519015158152602001610285565b60985461027b565b61034561036b366004612b4a565b60d16020526000908152604090205460ff1681565b61023f610be6565b61027b610396366004612d49565b60cd60209081526000928352604080842090915290825290205481565b61027b6103c1366004612b4a565b60ca6020526000908152604090205481565b6097546102c8906001600160a01b031681565b61027b6103f4366004612b4a565b6001600160a01b0316600090815260ce602052604090205490565b61023f61041d366004612d77565b610bfa565b6033546001600160a01b03166102c8565b610446610441366004612b4a565b610c53565b604051610285929190612e2c565b60cb546102c8906001600160a01b031681565b610345610475366004612b4a565b60d36020526000908152604090205460ff1681565b6102c87f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b61027b6104bf366004612fd5565b610dd3565b61023f6104d23660046130f0565b610e20565b6103456104e5366004612b67565b60cf6020526000908152604090205460ff1681565b61023f610508366004613132565b610f94565b61023f61051b366004613183565b610fe8565b61023f61052e366004612b4a565b6110a0565b6102c86105413660046131d6565b6110b1565b610559610554366004612fd5565b6110e9565b604080519215158352602083019190915201610285565b61023f61057e366004613132565b61117d565b61023f610591366004613202565b6112b1565b6102c87f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61027b6105cb366004612d77565b6114da565b61023f6105de366004612b4a565b6115a3565b61027b611619565b61023f6105f9366004612b67565b611657565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061326e565b6001600160a01b0316336001600160a01b0316146106ae5760405162461bcd60e51b81526004016106a59061328b565b60405180910390fd5b6106b7816117b3565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906132d5565b6107425760405162461bcd60e51b81526004016106a5906132f2565b609854818116146107bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108505760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156108a35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b60026065556001600160a01b038816600090815260d3602052604090205460ff161561094a5760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a4016106a5565b428410156109cc5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a4016106a5565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a84611619565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610ac78882886118aa565b610ad3888c8c8c611a69565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610b115760405162461bcd60e51b81526004016106a59061333a565b610b1b8282611c38565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b91906132d5565b610ba75760405162461bcd60e51b81526004016106a5906132f2565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610bee611ca6565b610bf86000611d00565b565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610c425760405162461bcd60e51b81526004016106a5906133a4565b610c4d838383611d52565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c8b57610c8b612b90565b604051908082528060200260200182016040528015610cb4578160200160208202803683370190505b50905060005b82811015610d45576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610cf957610cf9613402565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d3257610d32613402565b6020908102919091010152600101610cba565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610dc157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da3575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e03979096959101613418565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016106a59061333a565b8060005b81811015610c4d5760d16000858584818110610e6c57610e6c613402565b9050602002016020810190610e819190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff1615610f8c57600060d16000868685818110610ebb57610ebb613402565b9050602002016020810190610ed09190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f2b57610f2b613402565b9050602002016020810190610f409190612b4a565b6040516001600160a01b03909116815260200160405180910390a1610f8c848483818110610f7057610f70613402565b9050602002016020810190610f859190612b4a565b6000611c38565b600101610e4e565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91614610fdc5760405162461bcd60e51b81526004016106a5906133a4565b610c4d84848484611eae565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146110305760405162461bcd60e51b81526004016106a5906133a4565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050505050565b6110a8611ca6565b6106b78161213b565b60ce60205281600052604060002081815481106110cd57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146111345760405162461bcd60e51b81526004016106a5906133a4565b600061113f84610dd3565b600081815260cf60205260408120549192509060ff16156111745750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff161580801561119d5750600054600160ff909116105b806111b75750303b1580156111b7575060005460ff166001145b61121a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a5565b6000805460ff19166001179055801561123d576000805461ff0019166101001790555b6112456121a4565b60c955611252838361223b565b61125b85611d00565b6112648461213b565b80156112aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146112db5760405162461bcd60e51b81526004016106a59061333a565b8281146113645760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a4016106a5565b8260005b818110156114d25760d1600087878481811061138657611386613402565b905060200201602081019061139b9190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff166114ca57600160d160008888858181106113d4576113d4613402565b90506020020160208101906113e99190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe86868381811061144457611444613402565b90506020020160208101906114599190612b4a565b6040516001600160a01b03909116815260200160405180910390a16114ca86868381811061148957611489613402565b905060200201602081019061149e9190612b4a565b8585848181106114b0576114b0613402565b90506020020160208101906114c59190613491565b611c38565b600101611368565b505050505050565b6098546000908190600190811614156115315760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b600260655561159533868686611a69565b600160655595945050505050565b6115ab611ca6565b6001600160a01b0381166116105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a5565b6106b781611d00565b60007f000000000000000000000000000000000000000000000000000000000000426846141561164a575060c95490565b6116526121a4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061326e565b6001600160a01b0316336001600160a01b0316146116fe5760405162461bcd60e51b81526004016106a59061328b565b60985419811960985419161461177c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107ee565b6001600160a01b0381166118415760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a5565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b156119c957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906118ea9086908690600401613506565b602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b919061351f565b6001600160e01b031916146119c45760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a4016106a5565b505050565b826001600160a01b03166119dd8383612321565b6001600160a01b0316146119c45760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a4016106a5565b6001600160a01b038316600090815260d16020526040812054849060ff16611b0f5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a4016106a5565b611b246001600160a01b038516338786612345565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190613549565b9150611ba586858785611eae565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916906328a573ae90606401600060405180830381600087803b158015611c1757600080fd5b505af1158015611c2b573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610bf85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611dc75760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f21000060648201526084016106a5565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e595760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b60648201526084016106a5565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611ea157611e97858561239f565b6001915050611ea7565b60009150505b9392505050565b6001600160a01b038416611f2a5760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f20616464726573730000000000000060648201526084016106a5565b80611f965760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b60648201526084016106a5565b6001600160a01b03808516600090815260cd60209081526040808320938616835292905220546120a7576001600160a01b038416600090815260ce6020908152604090912054106120685760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a4016106a5565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906120de908490613578565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b031615801561225c57506001600160a01b03821615155b6122de5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610b1b826117b3565b60008060006123308585612591565b9150915061233d81612601565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c4d9085906127bc565b6001600160a01b038216600090815260ce6020526040812054905b818110156124ba576001600160a01b03848116600090815260ce60205260409020805491851691839081106123f1576123f1613402565b6000918252602090912001546001600160a01b031614156124b2576001600160a01b038416600090815260ce60205260409020805461243290600190613590565b8154811061244257612442613402565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061247f5761247f613402565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506124ba565b6001016123ba565b818114156125425760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a4016106a5565b6001600160a01b038416600090815260ce60205260409020805480612569576125696135a7565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156125c85760208301516040840151606085015160001a6125bc8782858561288e565b945094505050506125fa565b8251604014156125f257602083015160408401516125e786838361297b565b9350935050506125fa565b506000905060025b9250929050565b6000816004811115612615576126156135bd565b141561261e5750565b6001816004811115612632576126326135bd565b14156126805760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a5565b6002816004811115612694576126946135bd565b14156126e25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a5565b60038160048111156126f6576126f66135bd565b141561274f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106a5565b6004816004811115612763576127636135bd565b14156106b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106a5565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129b49092919063ffffffff16565b8051909150156119c4578080602001905181019061282f91906132d5565b6119c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c55750600090506003612972565b8460ff16601b141580156128dd57508460ff16601c14155b156128ee5750600090506004612972565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612942573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661296b57600060019250925050612972565b9150600090505b94509492505050565b6000806001600160ff1b0383168161299860ff86901c601b613578565b90506129a68782888561288e565b935093505050935093915050565b60606129c384846000856129cb565b949350505050565b606082471015612a2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a5565b6001600160a01b0385163b612a835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a5565b600080866001600160a01b03168587604051612a9f91906135d3565b60006040518083038185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b5091509150612af1828286612afc565b979650505050505050565b60608315612b0b575081611ea7565b825115612b1b5782518084602001fd5b8160405162461bcd60e51b81526004016106a591906135ef565b6001600160a01b03811681146106b757600080fd5b600060208284031215612b5c57600080fd5b8135611ea781612b35565b600060208284031215612b7957600080fd5b5035919050565b8035612b8b81612b35565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612bc957612bc9612b90565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bf857612bf8612b90565b604052919050565b60008060008060008060c08789031215612c1957600080fd5b8635612c2481612b35565b9550602087810135612c3581612b35565b9550604088013594506060880135612c4c81612b35565b93506080880135925060a088013567ffffffffffffffff80821115612c7057600080fd5b818a0191508a601f830112612c8457600080fd5b813581811115612c9657612c96612b90565b612ca8601f8201601f19168501612bcf565b91508082528b84828501011115612cbe57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b80151581146106b757600080fd5b60008060408385031215612d0057600080fd5b8235612d0b81612b35565b91506020830135612d1b81612cdf565b809150509250929050565b600060208284031215612d3857600080fd5b813560ff81168114611ea757600080fd5b60008060408385031215612d5c57600080fd5b8235612d6781612b35565b91506020830135612d1b81612b35565b600080600060608486031215612d8c57600080fd5b8335612d9781612b35565b92506020840135612da781612b35565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015612df15781516001600160a01b031687529582019590820190600101612dcc565b509495945050505050565b600081518084526020808501945080840160005b83811015612df157815187529582019590820190600101612e10565b604081526000612e3f6040830185612db8565b8281036020840152612e518185612dfc565b95945050505050565b600067ffffffffffffffff821115612e7457612e74612b90565b5060051b60200190565b600082601f830112612e8f57600080fd5b81356020612ea4612e9f83612e5a565b612bcf565b82815260059290921b84018101918181019086841115612ec357600080fd5b8286015b84811015612ee7578035612eda81612b35565b8352918301918301612ec7565b509695505050505050565b600082601f830112612f0357600080fd5b81356020612f13612e9f83612e5a565b82815260059290921b84018101918181019086841115612f3257600080fd5b8286015b84811015612ee75780358352918301918301612f36565b600060408284031215612f5f57600080fd5b6040516040810181811067ffffffffffffffff82111715612f8257612f82612b90565b6040529050808235612f9381612b35565b815260208301356bffffffffffffffffffffffff81168114612fb457600080fd5b6020919091015292915050565b803563ffffffff81168114612b8b57600080fd5b600060208284031215612fe757600080fd5b813567ffffffffffffffff80821115612fff57600080fd5b9083019060e0828603121561301357600080fd5b61301b612ba6565b82358281111561302a57600080fd5b61303687828601612e7e565b82525060208301358281111561304b57600080fd5b61305787828601612ef2565b60208301525061306960408401612b80565b604082015261307b8660608501612f4d565b606082015261308c60a08401612fc1565b608082015261309d60c08401612b80565b60a082015295945050505050565b60008083601f8401126130bd57600080fd5b50813567ffffffffffffffff8111156130d557600080fd5b6020830191508360208260051b85010111156125fa57600080fd5b6000806020838503121561310357600080fd5b823567ffffffffffffffff81111561311a57600080fd5b613126858286016130ab565b90969095509350505050565b6000806000806080858703121561314857600080fd5b843561315381612b35565b9350602085013561316381612b35565b9250604085013561317381612b35565b9396929550929360600135925050565b6000806000806080858703121561319957600080fd5b84356131a481612b35565b935060208501356131b481612b35565b92506040850135915060608501356131cb81612b35565b939692955090935050565b600080604083850312156131e957600080fd5b82356131f481612b35565b946020939093013593505050565b6000806000806040858703121561321857600080fd5b843567ffffffffffffffff8082111561323057600080fd5b61323c888389016130ab565b9096509450602087013591508082111561325557600080fd5b50613262878288016130ab565b95989497509550505050565b60006020828403121561328057600080fd5b8151611ea781612b35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156132e757600080fd5b8151611ea781612cdf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60e08152600061342b60e0830189612db8565b828103602084015261343d8189612dfc565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b6000602082840312156134a357600080fd5b8135611ea781612cdf565b60005b838110156134c95781810151838201526020016134b1565b83811115610c4d5750506000910152565b600081518084526134f28160208601602086016134ae565b601f01601f19169290920160200192915050565b8281526040602082015260006129c360408301846134da565b60006020828403121561353157600080fd5b81516001600160e01b031981168114611ea757600080fd5b60006020828403121561355b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561358b5761358b613562565b500190565b6000828210156135a2576135a2613562565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516135e58184602087016134ae565b9190910192915050565b602081526000611ea760208301846134da56fea264697066735822122040c065692c9e8827dec1688569c977abcb17999af2e58d54d2ef89bc1ff6f5dc64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x0e801d84fa97b50751dbf25036d067dcf18858bf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0x66":"0x0","0xc9":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720000000000000000000000000","0xca":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb0d4afd8879ed9f52b28595d31b441d079b2ca07","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x1291be112d480055dafd8a610b7d1e203891c274":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101a55760003560e01c80639f3ccf65116100ef578063c8294c5611610092578063c8294c561461048b578063d5eccc051461049e578063dd9846b9146104b1578063df5cf723146104d9578063f2be94ae14610500578063f851e19814610513578063fa28c62714610526578063ff694a771461053957600080fd5b80639f3ccf65146103a3578063ac6bfb03146103b6578063adc804da146103d6578063b6904b7814610416578063bc9a40c314610429578063bd29b8cd1461043c578063c46778a51461044f578063c601527d1461047857600080fd5b80634bd26e09116101575780634bd26e09146102a55780635401ed27146102d55780635e5a6775146102e85780635f1f2d77146102f757806366acfefe1461030a5780636d14a987146103355780637c1723471461036957806381c075021461038357600080fd5b80630491b41c146101aa57806308732461146101e05780631f9b74e01461020157806320b662981461022c57806325504777146102415780632cd95940146102625780633ca5a5f514610282575b600080fd5b6101cd6101b8366004612b78565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b6101f36101ee366004612b93565b61054c565b6040516101d7929190612bbd565b61021461020f366004612bf7565b610595565b6040516001600160601b0390911681526020016101d7565b61023f61023a366004612c72565b6105e5565b005b61025461024f366004612d33565b610900565b6040516101d7929190612dd2565b610275610270366004612df7565b610bcb565b6040516101d79190612e52565b6101cd610290366004612b78565b60ff1660009081526003602052604090205490565b6101cd6102b3366004612df7565b600091825260026020908152604080842060ff93909316845291905290205490565b6102146102e3366004612df7565b610c6a565b6101cd670de0b6b3a764000081565b61023f610305366004612f31565b610c83565b61031d610318366004612d33565b611095565b6040516001600160c01b0390911681526020016101d7565b61035c7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516101d79190612fd9565b610371602081565b60405160ff90911681526020016101d7565b610396610391366004613001565b6111ea565b6040516101d79190613053565b61035c6103b1366004612b93565b6114b4565b6103c96103c4366004613091565b6114ec565b6040516101d791906130c4565b6103e96103e4366004612b93565b611575565b6040805182516001600160a01b031681526020928301516001600160601b031692810192909252016101d7565b6103c9610424366004612b93565b6115ef565b61023f6104373660046130e9565b61166d565b61023f61044a366004613113565b611766565b61021461045d366004612b78565b6000602081905290815260409020546001600160601b031681565b61023f6104863660046131df565b61188d565b61021461049936600461322c565b611981565b6102146104ac366004612b78565b6119ff565b6104c46104bf366004613268565b611a52565b60405163ffffffff90911681526020016101d7565b61035c7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61021461050e3660046132a4565b611a67565b6103c9610521366004612df7565b611afc565b610214610534366004613268565b611bc3565b61023f6105473660046132e6565b611c24565b6003602052816000526040600020818154811061056857600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff821660009081526001602052604081205483906105cf5760405162461bcd60e51b81526004016105c690613343565b60405180910390fd5b60006105db8585611d8f565b5095945050505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106679190613394565b6001600160a01b0316336001600160a01b0316146106975760405162461bcd60e51b81526004016105c6906133b1565b846106b38160ff16600090815260016020526040902054151590565b6106cf5760405162461bcd60e51b81526004016105c690613343565b8380610745576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f766964656460648201526084016105c6565b8281146107b65760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f646966795374726174656779506172616044820152780dae67440d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d603b1b60648201526084016105c6565b60ff87166000908152600360205260408120905b828110156108f5578585828181106107e4576107e461342d565b90506020020160208101906107f99190613443565b8289898481811061080c5761080c61342d565b90506020020135815481106108235761082361342d565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff1660008051602061375d833981519152838a8a8581811061087a5761087a61342d565b90506020020135815481106108915761089161342d565b6000918252602090912001546001600160a01b03168888858181106108b8576108b861342d565b90506020020160208101906108cd9190613443565b6040516108db929190612bbd565b60405180910390a2806108ed81613474565b9150506107ca565b505050505050505050565b606080336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf161461094b5760405162461bcd60e51b81526004016105c69061348f565b6000836001600160401b0381111561096557610965612ea0565b60405190808252806020026020018201604052801561098e578160200160208202803683370190505b5090506000846001600160401b038111156109ab576109ab612ea0565b6040519080825280602002602001820160405280156109d4578160200160208202803683370190505b50905060005b85811015610bbd5760008787838181106109f6576109f661342d565b919091013560f81c60008181526001602052604090205490925015159050610a7e5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b60648201526084016105c6565b600080610a8b838d611d8f565b9150915080610b285760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a4016105c6565b6000610b358c8585611f92565b905082878681518110610b4a57610b4a61342d565b60200260200101906001600160601b031690816001600160601b031681525050610b748482612212565b868681518110610b8657610b8661342d565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610bb590613474565b9150506109da565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610c5d576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c04565b5050505090505b92915050565b600080610c778484611afc565b60400151949350505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d059190613394565b6001600160a01b0316336001600160a01b031614610d355760405162461bcd60e51b81526004016105c6906133b1565b81610d518160ff16600090815260016020526040902054151590565b610d6d5760405162461bcd60e51b81526004016105c690613343565b815180610de25760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f766964656400000060648201526084016105c6565b60ff841660009081526003602090815260408083206004909252822090915b8381101561108c578660ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f784888481518110610e4157610e4161342d565b602002602001015181548110610e5957610e5961342d565b600091825260209091200154604051610e7b916001600160a01b031690612fd9565b60405180910390a28660ff1660008051602061375d83398151915284888481518110610ea957610ea961342d565b602002602001015181548110610ec157610ec161342d565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a282548390610f0190600190613501565b81548110610f1157610f1161342d565b9060005260206000200183878381518110610f2e57610f2e61342d565b602002602001015181548110610f4657610f4661342d565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558254839080610f9957610f99613518565b60008281526020812082016000199081019190915501905581548290610fc190600190613501565b81548110610fd157610fd161342d565b9060005260206000200160009054906101000a90046001600160a01b0316828783815181106110025761100261342d565b60200260200101518154811061101a5761101a61342d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508180548061105857611058613518565b600082815260209020810160001990810180546001600160a01b03191690550190558061108481613474565b915050610e01565b50505050505050565b6000336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146110df5760405162461bcd60e51b81526004016105c69061348f565b6000805b838110156105db5760008585838181106110ff576110ff61342d565b919091013560f81c6000818152600160205260409020549092501515905061118a5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b604482015277194e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd60421b60648201526084016105c6565b600080611197838b611d8f565b91509150806111b95760009150600160ff84161b6001600160c01b0386161794505b60006111c68a8585611f92565b90506111d28482612212565b505050505080806111e290613474565b9150506110e3565b60606000826001600160401b0381111561120657611206612ea0565b60405190808252806020026020018201604052801561122f578160200160208202803683370190505b50905060005b838110156114a95760008585838181106112515761125161342d565b919091013560f81c600081815260016020526040902054909250151590506112f05760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a4016105c6565b60ff81166000908152600160205260408120805463ffffffff8a1692906113195761131961342d565b60009182526020909120015463ffffffff1611156113c55760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a4016105c6565b60ff8116600090815260016020526040812054905b818110156114935760ff8316600090815260016020819052604090912063ffffffff8b16916114098486613501565b6114139190613501565b815481106114235761142361342d565b60009182526020909120015463ffffffff16116114815760016114468284613501565b6114509190613501565b8585815181106114625761146261342d565b602002602001019063ffffffff16908163ffffffff1681525050611493565b8061148b81613474565b9150506113da565b50505080806114a190613474565b915050611235565b5090505b9392505050565b600460205281600052604060002081815481106114d057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6114f4612b42565b600083815260026020908152604080832060ff8816845290915290208054839081106115225761152261342d565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff831660009081526003602052604090208054839081106115ad576115ad61342d565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b6115f7612b42565b60ff8316600090815260016020526040902080548390811061161b5761161b61342d565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ef9190613394565b6001600160a01b0316336001600160a01b03161461171f5760405162461bcd60e51b81526004016105c6906133b1565b8161173b8160ff16600090815260016020526040902054151590565b6117575760405162461bcd60e51b81526004016105c690613343565b611761838361238c565b505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146117ae5760405162461bcd60e51b81526004016105c69061348f565b60005b818110156118875760008383838181106117cd576117cd61342d565b919091013560f81c600081815260016020526040902054909250151590506118575760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f726044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b60648201526084016105c6565b600061186586836000611f92565b90506118718282612212565b505050808061187f90613474565b9150506117b1565b50505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f9190613394565b6001600160a01b0316336001600160a01b03161461193f5760405162461bcd60e51b81526004016105c6906133b1565b8161195b8160ff16600090815260016020526040902054151590565b6119775760405162461bcd60e51b81526004016105c690613343565b61176183836123f5565b60ff831660009081526001602052604081208054829190849081106119a8576119a861342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610c77818561281c565b60ff81166000908152600160208190526040822080549091611a2091613501565b81548110611a3057611a3061342d565b600091825260209091200154600160401b90046001600160601b031692915050565b6000611a5f848484612996565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611a9857611a9861342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611aef818661281c565b6040015195945050505050565b611b04612b42565b600083815260026020908152604080832060ff86168452909152902054611b29612b42565b81611b37579150610c649050565b600085815260026020908152604080832060ff881684529091529020611b5e600184613501565b81548110611b6e57611b6e61342d565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610c64915050565b600083815260026020908152604080832060ff861684529091528120611bea858585612996565b63ffffffff1681548110611c0057611c0061342d565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614611c6c5760405162461bcd60e51b81526004016105c69061348f565b60ff831660009081526001602052604090205415611cea5760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b60648201526084016105c6565b611cf483826123f5565b611cfe838361238c565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611dae8660ff1660009081526003602052604090205490565b9050611dca604080518082019091526000808252602082015290565b60ff871660009081526004602081905260408083209051639004134760e01b81526001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91692639004134792611e28928c920161352e565b600060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e6d919081019061358d565b905060005b83811015611f5e5760ff89166000908152600360205260409020805482908110611e9e57611e9e61342d565b60009182526020808320604080518082019091529201546001600160a01b0381168352600160a01b90046001600160601b0316908201528351909450839083908110611eec57611eec61342d565b60200260200101511115611f4c57670de0b6b3a764000083602001516001600160601b0316838381518110611f2357611f2361342d565b6020026020010151611f35919061361d565b611f3f919061363c565b611f49908661365e565b94505b80611f5681613474565b915050611e72565b50505060ff8616600090815260208190526040902054919350506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff8616845290915281205481908061205657600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556121b8565b600086815260026020908152604080832060ff89168452909152812061207d600184613501565b8154811061208d5761208d61342d565b600091825260209091200180546001600160601b03600160401b9091048116945090915085168314156120c657600093505050506114ad565b80544363ffffffff90811691161415612100578054600160401b600160a01b031916600160401b6001600160601b038716021781556121b6565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26122088285612afc565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906122369084613501565b815481106122465761224661342d565b90600052602060002001905083600014156122755754600160401b90046001600160601b03169150610c649050565b805460009061229490600160401b90046001600160601b031686612b14565b82549091504363ffffffff908116911614156122d1578154600160401b600160a01b031916600160401b6001600160601b03831602178255612383565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b60008151116124555760405162461bcd60e51b8152602060048201526038602482015260008051602061373d8339815191526044820152770e881b9bc81cdd1c985d1959da595cc81c1c9bdd9a59195960421b60648201526084016105c6565b805160ff8316600090815260036020908152604090912054906124788383613689565b11156124e85760405162461bcd60e51b8152602060048201526045602482015260008051602061373d83398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a4016105c6565b60005b828110156128155760005b6125008284613689565b8110156125e1578482815181106125195761251961342d565b6020026020010151600001516001600160a01b0316600360008860ff1660ff16815260200190815260200160002082815481106125585761255861342d565b6000918252602090912001546001600160a01b031614156125cf5760405162461bcd60e51b815260206004820152603d602482015260008051602061373d83398151915260448201527f3a2063616e6e6f74206164642073616d6520737472617465677920327800000060648201526084016105c6565b806125d981613474565b9150506124f6565b5060008482815181106125f6576125f661342d565b6020026020010151602001516001600160601b03161161267b5760405162461bcd60e51b8152602060048201526046602482015260008051602061373d83398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a4016105c6565b60ff8516600090815260036020526040902084518590839081106126a1576126a161342d565b602090810291909101810151825460018101845560009384528284208251928401516001600160601b0316600160a01b026001600160a01b039093169290921791015560ff87168252600490526040902084518590839081106127065761270661342d565b6020908102919091018101515182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f54049086908490811061277d5761277d61342d565b6020026020010151600001516040516127969190612fd9565b60405180910390a28460ff1660008051602061375d8339815191528583815181106127c3576127c361342d565b6020026020010151600001518684815181106127e1576127e161342d565b6020026020010151602001516040516127fb929190612bbd565b60405180910390a28061280d81613474565b9150506124eb565b5050505050565b816000015163ffffffff168163ffffffff1610156128c15760405162461bcd60e51b815260206004820152605660248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a207374616b6555706461746520697320606482015275333937b69030b33a32b910313637b1b5a73ab6b132b960511b608482015260a4016105c6565b602082015163ffffffff1615806128e75750816020015163ffffffff168163ffffffff16105b6129925760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e5f76616c69646174655374616b655570646160448201527f74654174426c6f636b4e756d6265723a2074686572652069732061206e65776560648201527f72207374616b6555706461746520617661696c61626c65206265666f726520626084820152693637b1b5a73ab6b132b960b11b60a482015260c4016105c6565b5050565b600083815260026020908152604080832060ff86168452909152812054805b8015612a3757600086815260026020908152604080832060ff89168452909152902063ffffffff8516906129ea600184613501565b815481106129fa576129fa61342d565b60009182526020909120015463ffffffff1611612a2557612a1c600182613501565b925050506114ad565b80612a2f816136a1565b9150506129b5565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e4016105c6565b60006114ad6001600160601b038085169084166136b8565b600080821215612b3857612b27826136f7565b612b319084613714565b9050610c64565b612b31828461365e565b604080516060810182526000808252602082018190529181019190915290565b803560ff81168114612b7357600080fd5b919050565b600060208284031215612b8a57600080fd5b6114ad82612b62565b60008060408385031215612ba657600080fd5b612baf83612b62565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612bf457600080fd5b50565b60008060408385031215612c0a57600080fd5b612c1383612b62565b91506020830135612c2381612bdf565b809150509250929050565b60008083601f840112612c4057600080fd5b5081356001600160401b03811115612c5757600080fd5b6020830191508360208260051b8501011115611f8b57600080fd5b600080600080600060608688031215612c8a57600080fd5b612c9386612b62565b945060208601356001600160401b0380821115612caf57600080fd5b612cbb89838a01612c2e565b90965094506040880135915080821115612cd457600080fd5b50612ce188828901612c2e565b969995985093965092949392505050565b60008083601f840112612d0457600080fd5b5081356001600160401b03811115612d1b57600080fd5b602083019150836020828501011115611f8b57600080fd5b60008060008060608587031215612d4957600080fd5b8435612d5481612bdf565b93506020850135925060408501356001600160401b03811115612d7657600080fd5b612d8287828801612cf2565b95989497509550505050565b600081518084526020808501945080840160005b83811015612dc75781516001600160601b031687529582019590820190600101612da2565b509495945050505050565b604081526000612de56040830185612d8e565b82810360208401526123838185612d8e565b60008060408385031215612e0a57600080fd5b82359150612e1a60208401612b62565b90509250929050565b63ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b6020808252825182820181905260009190848201906040850190845b81811015612e9457612e81838551612e23565b9284019260609290920191600101612e6e565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612ed857612ed8612ea0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612f0657612f06612ea0565b604052919050565b60006001600160401b03821115612f2757612f27612ea0565b5060051b60200190565b60008060408385031215612f4457600080fd5b612f4d83612b62565b91506020808401356001600160401b03811115612f6957600080fd5b8401601f81018613612f7a57600080fd5b8035612f8d612f8882612f0e565b612ede565b81815260059190911b82018301908381019088831115612fac57600080fd5b928401925b82841015612fca57833582529284019290840190612fb1565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b803563ffffffff81168114612b7357600080fd5b60008060006040848603121561301657600080fd5b61301f84612fed565b925060208401356001600160401b0381111561303a57600080fd5b61304686828701612cf2565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612e9457835163ffffffff168352928401929184019160010161306f565b6000806000606084860312156130a657600080fd5b6130af84612b62565b95602085013595506040909401359392505050565b60608101610c648284612e23565b80356001600160601b0381168114612b7357600080fd5b600080604083850312156130fc57600080fd5b61310583612b62565b9150612e1a602084016130d2565b60008060006040848603121561312857600080fd5b8335925060208401356001600160401b0381111561303a57600080fd5b600082601f83011261315657600080fd5b81356020613166612f8883612f0e565b82815260069290921b8401810191818101908684111561318557600080fd5b8286015b848110156131d457604081890312156131a25760008081fd5b6131aa612eb6565b81356131b581612bdf565b81526131c28286016130d2565b81860152835291830191604001613189565b509695505050505050565b600080604083850312156131f257600080fd5b6131fb83612b62565b915060208301356001600160401b0381111561321657600080fd5b61322285828601613145565b9150509250929050565b60008060006060848603121561324157600080fd5b61324a84612b62565b925061325860208501612fed565b9150604084013590509250925092565b60008060006060848603121561327d57600080fd5b8335925061328d60208501612b62565b915061329b60408501612fed565b90509250925092565b600080600080608085870312156132ba57600080fd5b6132c385612b62565b93506132d160208601612fed565b93969395505050506040820135916060013590565b6000806000606084860312156132fb57600080fd5b61330484612b62565b9250613312602085016130d2565b915060408401356001600160401b0381111561332d57600080fd5b61333986828701613145565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b6000602082840312156133a657600080fd5b81516114ad81612bdf565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561345557600080fd5b6114ad826130d2565b634e487b7160e01b600052601160045260246000fd5b60006000198214156134885761348861345e565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b6000828210156135135761351361345e565b500390565b634e487b7160e01b600052603160045260246000fd5b60006040820160018060a01b03808616845260206040818601528286548085526060870191508760005282600020945060005b8181101561357f578554851683526001958601959284019201613561565b509098975050505050505050565b600060208083850312156135a057600080fd5b82516001600160401b038111156135b657600080fd5b8301601f810185136135c757600080fd5b80516135d5612f8882612f0e565b81815260059190911b820183019083810190878311156135f457600080fd5b928401925b82841015613612578351825292840192908401906135f9565b979650505050505050565b60008160001904831182151516156136375761363761345e565b500290565b60008261365957634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b038083168185168083038211156136805761368061345e565b01949350505050565b6000821982111561369c5761369c61345e565b500190565b6000816136b0576136b061345e565b506000190190565b60008083128015600160ff1b8501841216156136d6576136d661345e565b6001600160ff1b03840183138116156136f1576136f161345e565b50500390565b6000600160ff1b82141561370d5761370d61345e565b5060000390565b60006001600160601b03838116908316818110156137345761373461345e565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d7311a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75a26469706673582212207e9a41b6d5ac3a5e50f0af34dafa95ef4729aea2fa853040a635f382b7887cb964736f6c634300080c0033","storage":{}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0xc4e0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x322813fd9a801c5507c9de605d63cea4f2ce6c44":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a1366004611840565b6103ba565b005b6101a66101b636600461188a565b6104c1565b6101a66101c93660046118a7565b610574565b6101a66101dc3660046118c9565b610629565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61024160335481565b604051908152602001610208565b61024160645481565b6102416102663660046118e2565b61076d565b6101a661027936600461190e565b610911565b61024161028c36600461188a565b6109df565b6101a66109f3565b6102b86102a7366004611947565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e73660046118c9565b610abf565b6000546101f4906201000090046001600160a01b031681565b6102416103133660046118c9565b610b0a565b61024161032636600461188a565b610b15565b610333610b23565b604051610208919061199a565b61024161034e36600461188a565b610b43565b6101a66103613660046119cd565b610bd8565b60645460655460408051928352602083019190915201610208565b61024161038f3660046118c9565b610da1565b6102416103a23660046118c9565b610dda565b6101a66103b53660046118c9565b610de5565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611a0e565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b610460604051806040016040528060038152602001623c30b160e91b815250610f41565b61046a8585610f84565b6104748383611091565b80156104ba576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105389190611a5c565b6001600160a01b0316336001600160a01b0316146105685760405162461bcd60e51b815260040161041090611a79565b61057181611122565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb9190611a5c565b6001600160a01b0316336001600160a01b03161461061b5760405162461bcd60e51b815260040161041090611a79565b6106258282610f84565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190611ac3565b6106b65760405162461bcd60e51b815260040161041090611ae5565b6001548181161461072f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156107c25760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707161461083a5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b6108448484611227565b60335460006108556103e883611b43565b905060006103e8610864611309565b61086e9190611b43565b9050600061087c8783611b5b565b9050806108898489611b72565b6108939190611b91565b9550856108f95760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6109038685611b43565b603355505050505092915050565b600054610100900460ff16158080156109315750600054600160ff909116105b8061094b5750303b15801561094b575060005460ff166001145b6109675760405162461bcd60e51b815260040161041090611a0e565b6000805460ff19166001179055801561098a576000805461ff0019166101001790555b6109948383611091565b80156109da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109ed6102e783610b43565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190611ac3565b610a805760405162461bcd60e51b815260040161041090611ae5565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610ad29190611b43565b905060006103e8610ae1611309565b610aeb9190611b43565b905081610af88583611b72565b610b029190611b91565b949350505050565b60006109ed82610da1565b60006109ed6103a283610b43565b60606040518060800160405280604d8152602001611be9604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570790911690637a7e0d9290604401602060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ed9190611bb3565b6001805460029081161415610c2b5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071614610ca35760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610cae84848461137b565b60335480831115610d3d5760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d4b6103e883611b43565b905060006103e8610d5a611309565b610d649190611b43565b9050600082610d738784611b72565b610d7d9190611b91565b9050610d898685611b5b565b603355610d978888836113fe565b5050505050505050565b6000806103e8603354610db49190611b43565b905060006103e8610dc3611309565b610dcd9190611b43565b905080610af88386611b72565b60006109ed82610abf565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5c9190611a5c565b6001600160a01b0316336001600160a01b031614610e8c5760405162461bcd60e51b815260040161041090611a79565b600154198119600154191614610f0a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610762565b61057181604051602401610f55919061199a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611412565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a1808211156110865760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110fc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610625816000611433565b6001600160a01b0381166111b05760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156112915760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b60655461129c611309565b11156112ff5760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b610625828261151f565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190611bb3565b905090565b6032546001600160a01b038381169116146109da5760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109da6001600160a01b038316848361159b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000546201000090046001600160a01b031615801561145a57506001600160a01b03821615155b6114dc5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261062582611122565b6032546001600160a01b038381169116146106255760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109da9286929160009161162b9185169084906116a8565b8051909150156109da57808060200190518101906116499190611ac3565b6109da5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606116b784846000856116c1565b90505b9392505050565b6060824710156117225760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6117795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516117959190611bcc565b60006040518083038185875af1925050503d80600081146117d2576040519150601f19603f3d011682016040523d82523d6000602084013e6117d7565b606091505b50915091506117e78282866117f2565b979650505050505050565b606083156118015750816116ba565b8251156118115782518084602001fd5b8160405162461bcd60e51b8152600401610410919061199a565b6001600160a01b038116811461057157600080fd5b6000806000806080858703121561185657600080fd5b8435935060208501359250604085013561186f8161182b565b9150606085013561187f8161182b565b939692955090935050565b60006020828403121561189c57600080fd5b81356116ba8161182b565b600080604083850312156118ba57600080fd5b50508035926020909101359150565b6000602082840312156118db57600080fd5b5035919050565b600080604083850312156118f557600080fd5b82356119008161182b565b946020939093013593505050565b6000806040838503121561192157600080fd5b823561192c8161182b565b9150602083013561193c8161182b565b809150509250929050565b60006020828403121561195957600080fd5b813560ff811681146116ba57600080fd5b60005b8381101561198557818101518382015260200161196d565b83811115611994576000848401525b50505050565b60208152600082518060208401526119b981604085016020870161196a565b601f01601f19169190910160400192915050565b6000806000606084860312156119e257600080fd5b83356119ed8161182b565b925060208401356119fd8161182b565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060208284031215611a6e57600080fd5b81516116ba8161182b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611ad557600080fd5b815180151581146116ba57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611b5657611b56611b2d565b500190565b600082821015611b6d57611b6d611b2d565b500390565b6000816000190483118215151615611b8c57611b8c611b2d565b500290565b600082611bae57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611bc557600080fd5b5051919050565b60008251611bde81846020870161196a565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220a89cdda625de6600f138ef9c77378533a2536b7715b55abf2eebb15ea238933f64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x36c02da8a0983159322a80ffe9f24b1acff8b570":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x7969c5ed335650692bc04293b07f5bf2e7a673c0","0x3640069662c3880c0f70896f1ea7ab948dbe8edba5c22fb35137874584edfab7":"0x1","0x6fe317c46e5eb99b18a02254581a535777feba1137e4ab98748fd94c55e2f16f":"0x1","0x7d1c12449d2a49ce59962642fe4a8c74e48ad3f56a716a3bc12ada6bf75e155d":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xe02835104633dd65c916ccb9978ae220ed27db9f2ae0915bd6a5594cfbeedeb8":"0x1"}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4826533b4897376654bb4d4ad88b7fafd0c98528":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212208a1326bc5b69f9ecf1c6c0d757e50103bb848a7d9d4383fa44ee54e7b71a39a464736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0x4c5859f0f772848b2d91f1d83e2fe57935348029":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80633563b0d1146100515780634f739f741461007a5780635c1556621461009a578063cefdc1d4146100ba575b600080fd5b61006461005f366004611172565b6100db565b60405161007191906112cd565b60405180910390f35b61008d610088366004611332565b610571565b6040516100719190611435565b6100ad6100a8366004611513565b610c9b565b60405161007191906115c4565b6100cd6100c8366004611608565b610e63565b60405161007192919061164a565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561011d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610141919061166b565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a7919061166b565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020d919061166b565b9050600086516001600160401b0381111561022a5761022a61110a565b60405190808252806020026020018201604052801561025d57816020015b60608152602001906001900390816102485790505b50905060005b875181101561056557600088828151811061028057610280611688565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa1580156102e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610309919081019061169e565b905080516001600160401b038111156103245761032461110a565b60405190808252806020026020018201604052801561036f57816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816103425790505b5084848151811061038257610382611688565b602002602001018190525060005b815181101561054f576040518060600160405280876001600160a01b03166347b314e88585815181106103c5576103c5611688565b60200260200101516040518263ffffffff1660e01b81526004016103eb91815260200190565b602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c919061166b565b6001600160a01b0316815260200183838151811061044c5761044c611688565b60200260200101518152602001896001600160a01b031663fa28c62785858151811061047a5761047a611688565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa1580156104d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fa919061172e565b6001600160601b031681525085858151811061051857610518611688565b6020026020010151828151811061053157610531611688565b602002602001018190525080806105479061176d565b915050610390565b505050808061055d9061176d565b915050610263565b50979650505050505050565b61059c6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610600919061166b565b905061062d6040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e9061065d908b9089908990600401611788565b600060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106a291908101906117d2565b81526040516340e03a8160e11b81526001600160a01b038316906381c07502906106d4908b908b908b90600401611889565b600060405180830381865afa1580156106f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071991908101906117d2565b6040820152856001600160401b038111156107365761073661110a565b60405190808252806020026020018201604052801561076957816020015b60608152602001906001900390816107545790505b50606082015260005b60ff8116871115610bac576000856001600160401b038111156107975761079761110a565b6040519080825280602002602001820160405280156107c0578160200160208202803683370190505b5083606001518360ff16815181106107da576107da611688565b602002602001018190525060005b86811015610aac5760008c6001600160a01b03166304ec63518a8a8581811061081357610813611688565b905060200201358e8860000151868151811061083157610831611688565b60200260200101516040518463ffffffff1660e01b815260040161086e9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af91906118b2565b90506001600160c01b0381166109575760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff1681811061096c5761096c611688565b6001600160c01b03841692013560f81c9190911c600190811614159050610a9957856001600160a01b031663dd9846b98a8a858181106109ae576109ae611688565b905060200201358d8d8860ff168181106109ca576109ca611688565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4491906118db565b85606001518560ff1681518110610a5d57610a5d611688565b60200260200101518481518110610a7657610a76611688565b63ffffffff9092166020928302919091019091015282610a958161176d565b9350505b5080610aa48161176d565b9150506107e8565b506000816001600160401b03811115610ac757610ac761110a565b604051908082528060200260200182016040528015610af0578160200160208202803683370190505b50905060005b82811015610b715784606001518460ff1681518110610b1757610b17611688565b60200260200101518181518110610b3057610b30611688565b6020026020010151828281518110610b4a57610b4a611688565b63ffffffff9092166020928302919091019091015280610b698161176d565b915050610af6565b508084606001518460ff1681518110610b8c57610b8c611688565b602002602001018190525050508080610ba4906118f8565b915050610772565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c11919061166b565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610c44908b908b908e90600401611918565b600060405180830381865afa158015610c61573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8991908101906117d2565b60208301525098975050505050505050565b60606000846001600160a01b031663c391425e84866040518363ffffffff1660e01b8152600401610ccd929190611942565b600060405180830381865afa158015610cea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d1291908101906117d2565b9050600084516001600160401b03811115610d2f57610d2f61110a565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50905060005b8551811015610e5957866001600160a01b03166304ec6351878381518110610d8857610d88611688565b602002602001015187868581518110610da357610da3611688565b60200260200101516040518463ffffffff1660e01b8152600401610de09392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2191906118b2565b6001600160c01b0316828281518110610e3c57610e3c611688565b602090810291909101015280610e518161176d565b915050610d5e565b5095945050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610e9e57610e9e611688565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e90610eda9088908690600401611942565b600060405180830381865afa158015610ef7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f1f91908101906117d2565b600081518110610f3157610f31611688565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015610f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc191906118b2565b6001600160c01b031690506000610fd782610ff5565b905081610fe58a838a6100db565b9550955050505050935093915050565b6060600080611003846110c1565b61ffff166001600160401b0381111561101e5761101e61110a565b6040519080825280601f01601f191660200182016040528015611048576020820181803683370190505b5090506000805b825182108015611060575061010081105b156110b7576001811b9350858416156110a7578060f81b83838151811061108957611089611688565b60200101906001600160f81b031916908160001a9053508160010191505b6110b08161176d565b905061104f565b5090949350505050565b6000805b82156110ec576110d6600184611996565b90921691806110e4816119ad565b9150506110c5565b92915050565b6001600160a01b038116811461110757600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156111485761114861110a565b604052919050565b63ffffffff8116811461110757600080fd5b803561116d81611150565b919050565b60008060006060848603121561118757600080fd5b8335611192816110f2565b92506020848101356001600160401b03808211156111af57600080fd5b818701915087601f8301126111c357600080fd5b8135818111156111d5576111d561110a565b6111e7601f8201601f19168501611120565b915080825288848285010111156111fd57600080fd5b808484018584013760008482840101525080945050505061122060408501611162565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b868110156112bf578385038a52825180518087529087019087870190845b818110156112aa57835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611266565b50509a87019a95505091850191600101611248565b509298975050505050505050565b6020815260006112e06020830184611229565b9392505050565b60008083601f8401126112f957600080fd5b5081356001600160401b0381111561131057600080fd5b6020830191508360208260051b850101111561132b57600080fd5b9250929050565b6000806000806000806080878903121561134b57600080fd5b8635611356816110f2565b9550602087013561136681611150565b945060408701356001600160401b038082111561138257600080fd5b818901915089601f83011261139657600080fd5b8135818111156113a557600080fd5b8a60208285010111156113b757600080fd5b6020830196508095505060608901359150808211156113d557600080fd5b506113e289828a016112e7565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b8381101561142a57815163ffffffff1687529582019590820190600101611408565b509495945050505050565b60006020808352835160808285015261145160a08501826113f4565b905081850151601f198086840301604087015261146e83836113f4565b9250604087015191508086840301606087015261148b83836113f4565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156114e257848783030184526114d08287516113f4565b958801959388019391506001016114b6565b509998505050505050505050565b60006001600160401b038211156115095761150961110a565b5060051b60200190565b60008060006060848603121561152857600080fd5b8335611533816110f2565b92506020848101356001600160401b0381111561154f57600080fd5b8501601f8101871361156057600080fd5b803561157361156e826114f0565b611120565b81815260059190911b8201830190838101908983111561159257600080fd5b928401925b828410156115b057833582529284019290840190611597565b809650505050505061122060408501611162565b6020808252825182820181905260009190848201906040850190845b818110156115fc578351835292840192918401916001016115e0565b50909695505050505050565b60008060006060848603121561161d57600080fd5b8335611628816110f2565b925060208401359150604084013561163f81611150565b809150509250925092565b8281526040602082015260006116636040830184611229565b949350505050565b60006020828403121561167d57600080fd5b81516112e0816110f2565b634e487b7160e01b600052603260045260246000fd5b600060208083850312156116b157600080fd5b82516001600160401b038111156116c757600080fd5b8301601f810185136116d857600080fd5b80516116e661156e826114f0565b81815260059190911b8201830190838101908783111561170557600080fd5b928401925b828410156117235783518252928401929084019061170a565b979650505050505050565b60006020828403121561174057600080fd5b81516001600160601b03811681146112e057600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561178157611781611757565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b038311156117b557600080fd5b8260051b8085606085013760009201606001918252509392505050565b600060208083850312156117e557600080fd5b82516001600160401b038111156117fb57600080fd5b8301601f8101851361180c57600080fd5b805161181a61156e826114f0565b81815260059190911b8201830190838101908783111561183957600080fd5b928401925b8284101561172357835161185181611150565b8252928401929084019061183e565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff841681526040602082015260006118a9604083018486611860565b95945050505050565b6000602082840312156118c457600080fd5b81516001600160c01b03811681146112e057600080fd5b6000602082840312156118ed57600080fd5b81516112e081611150565b600060ff821660ff81141561190f5761190f611757565b60010192915050565b60408152600061192c604083018587611860565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b818110156119895784518352938301939183019160010161196d565b5090979650505050505050565b6000828210156119a8576119a8611757565b500390565b600061ffff808316818114156119c5576119c5611757565b600101939250505056fea2646970667358221220989e57de351772a7f933bb7234d90ef2f41b46d0a8e8b45b21148630c71d925e64736f6c634300080c0033","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x82e01223d51eb87e16a03e24687edf0f294da6f1","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xb"}},"0x5fbdb2315678afecb367f032d93f642f64180aa3":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea264697066735822122054cc08528c85698c827d34c7e7f3bb44ba8e6884f2ac3e1af765d47dbde707b664736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x97":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x98":"0x0","0xc9":"0x8142bc69583e169802e72d5824b8ed949e78cca596c0561765426c8c058957fd","0xcb":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xdcd1bf9a1b36ce34237eeafef220932846bcd82","0x69f9147759798decd1797da71845df896876bd17efcd483aa8482ae4658bf0a0":"0x1","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3","0xe6ed2999f13697c9ffb91df2afc9d713c528d12f30b6022f27ccddb8723728d2":"0x0"}},"0x610178da211fef7d417bc0e6fed39f05609ad788":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a3660046102ee565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f61010e565b6000546001600160a01b031661007e565b61006f6100c13660046102ee565b610122565b6100ce6101af565b6100d781610209565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101166101af565b610120600061029e565b565b61012a6101af565b6001600160a01b0381166101945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019d8161029e565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018b565b6001600160a01b0381163b61027c5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b606482015260840161018b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561030057600080fd5b81356001600160a01b038116811461031757600080fd5b939250505056fea2646970667358221220a22223d3e2a2d861ad54e68b7bc44b4d82a5a12a0bcca5c3404502bb1b430c5c64736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x1":"0x8a791620dd6260079bf849dc5567adc3f2fdc318"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x70e0ba845a1a0f2da3359c97e0285013525ffc49":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061006b5760003560e01c8063204e1c7a14610070578063715018a6146100a65780637eff275e146100bd5780638da5cb5b146100dd5780639623609d146100fb57806399a88ec41461010e578063f2fde38b1461012e578063f3b7dead1461014e575b600080fd5b34801561007c57600080fd5b5061009061008b366004610483565b61016e565b60405161009d91906104a7565b60405180910390f35b3480156100b257600080fd5b506100bb6101ff565b005b3480156100c957600080fd5b506100bb6100d83660046104bb565b610213565b3480156100e957600080fd5b506000546001600160a01b0316610090565b6100bb61010936600461050a565b61027d565b34801561011a57600080fd5b506100bb6101293660046104bb565b6102ec565b34801561013a57600080fd5b506100bb610149366004610483565b610320565b34801561015a57600080fd5b50610090610169366004610483565b61039e565b6000806000836001600160a01b031660405161019490635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101cf576040519150601f19603f3d011682016040523d82523d6000602084013e6101d4565b606091505b5091509150816101e357600080fd5b808060200190518101906101f791906105e0565b949350505050565b6102076103c4565b610211600061041e565b565b61021b6103c4565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102479084906004016104a7565b600060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050505050565b6102856103c4565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b590869086906004016105fd565b6000604051808303818588803b1580156102ce57600080fd5b505af11580156102e2573d6000803e3d6000fd5b5050505050505050565b6102f46103c4565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102479084906004016104a7565b6103286103c4565b6001600160a01b0381166103925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039b8161041e565b50565b6000806000836001600160a01b0316604051610194906303e1469160e61b815260040190565b6000546001600160a01b031633146102115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461039b57600080fd5b60006020828403121561049557600080fd5b81356104a08161046e565b9392505050565b6001600160a01b0391909116815260200190565b600080604083850312156104ce57600080fd5b82356104d98161046e565b915060208301356104e98161046e565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561051f57600080fd5b833561052a8161046e565b9250602084013561053a8161046e565b9150604084013567ffffffffffffffff8082111561055757600080fd5b818601915086601f83011261056b57600080fd5b81358181111561057d5761057d6104f4565b604051601f8201601f19908116603f011681019083821181831017156105a5576105a56104f4565b816040528281528960208487010111156105be57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f257600080fd5b81516104a08161046e565b60018060a01b038316815260006020604081840152835180604085015260005b818110156106395785810183015185820160600152820161061d565b8181111561064b576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200eedf560ba2321bf32a2a337105c715afa9340aaee48022babd6824214e3416964736f6c634300080c0033","storage":{"0x0":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"}},"0x7969c5ed335650692bc04293b07f5bf2e7a673c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061006d5760003560e01c8063046a0654146100725780630ca192c71461009c5780632e8da829146100b15780636d14a987146100e457806389a652ce14610123578063af99fa0e1461013e578063bfe1073814610166575b600080fd5b610085610080366004610a21565b61016e565b604051610093929190610aaa565b60405180910390f35b6100af6100aa366004610af0565b610394565b005b6100d46100bf366004610b2e565b60026020526000908152604090205460ff1681565b6040519015158152602001610093565b61010b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516001600160a01b039091168152602001610093565b6001546040516001600160401b039091168152602001610093565b61015161014c366004610b4b565b610535565b60405163ffffffff9091168152602001610093565b6100af61056f565b60608060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610b64565b905060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027b9190610b64565b905060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190610b64565b90506001600160401b0386161561036b5761036860016103218189610b97565b6001600160401b03168154811061033a5761033a610bbf565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1684848461073a565b94505b61038a6001876001600160401b03168154811061033a5761033a610bbf565b9350505050915091565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610b64565b6001600160a01b0316336001600160a01b0316146104d65760405162461bcd60e51b815260206004820152606660248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c79436f6f7264696e61746f724f776e65723a2063616c6c6572206973206e6f60648201527f7420746865206f776e6572206f6620746865207265676973747279436f6f726460848201526534b730ba37b960d11b60a482015260c4015b60405180910390fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527f2b83db0a8941bdf64ef44d95a1a397fdbcb6fd1b93ed421b73d00ddcecf5c793910160405180910390a25050565b6001818154811061054557600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146106335760405162461bcd60e51b815260206004820152605d60248201527f5346464c4f70657261746f7253657455706461746552656769737472792e6f6e60448201527f6c795265676973747279436f6f7264696e61746f723a2063616c6c657220697360648201527f206e6f742074686520726567697374727920636f6f7264696e61746f72000000608482015260a4016104cd565b6001546001600160401b0381161580159061069557504360016106568184610b97565b6001600160401b03168154811061066f5761066f610bbf565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16145b1561069d5750565b426001600160401b0316816001600160401b03167fc48e61b12810d368042f781cfb732d0abb725377d90b600f78e0cec7dbd0c28d60405160405180910390a3506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008820401805460079092166004026101000a63ffffffff818102199093164390931602919091179055565b604051638902624560e01b815260006004820181905263ffffffff861660248301526060916001600160a01b03851690638902624590604401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b89190810190610c1b565b9050600081516001600160401b038111156107d5576107d5610bd5565b60405190808252806020026020018201604052801561082957816020015b60408051608081018252600091810182815260608201839052815260208101919091528152602001906001900390816107f35790505b50905060005b8251811015610a1657600083828151811061084c5761084c610bbf565b602002602001015190506000866001600160a01b03166347b314e8836040518263ffffffff1660e01b815260040161088691815260200190565b602060405180830381865afa1580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610b64565b604051637ff81a8760e01b81526001600160a01b038083166004830152919250600091891690637ff81a8790602401606060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109379190610cc0565b5060405163fa28c62760e01b81526004810185905260006024820181905263ffffffff8e1660448301529192506001600160a01b038c169063fa28c62790606401602060405180830381865afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b99190610d26565b90506040518060400160405280838152602001826001600160601b03166001600160801b03168152508686815181106109f4576109f4610bbf565b6020026020010181905250505050508080610a0e90610d4f565b91505061082f565b509695505050505050565b600060208284031215610a3357600080fd5b81356001600160401b0381168114610a4a57600080fd5b9392505050565b600081518084526020808501945080840160005b83811015610a9f578151805180518952840151848901528301516001600160801b0316604088015260609096019590820190600101610a65565b509495945050505050565b604081526000610abd6040830185610a51565b8281036020840152610acf8185610a51565b95945050505050565b6001600160a01b0381168114610aed57600080fd5b50565b60008060408385031215610b0357600080fd5b8235610b0e81610ad8565b915060208301358015158114610b2357600080fd5b809150509250929050565b600060208284031215610b4057600080fd5b8135610a4a81610ad8565b600060208284031215610b5d57600080fd5b5035919050565b600060208284031215610b7657600080fd5b8151610a4a81610ad8565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0383811690831681811015610bb757610bb7610b81565b039392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610c1357610c13610bd5565b604052919050565b60006020808385031215610c2e57600080fd5b82516001600160401b0380821115610c4557600080fd5b818501915085601f830112610c5957600080fd5b815181811115610c6b57610c6b610bd5565b8060051b9150610c7c848301610beb565b8181529183018401918481019088841115610c9657600080fd5b938501935b83851015610cb457845182529385019390850190610c9b565b98975050505050505050565b6000808284036060811215610cd457600080fd5b6040811215610ce257600080fd5b50604051604081018181106001600160401b0382111715610d0557610d05610bd5565b60409081528451825260208086015190830152939093015192949293505050565b600060208284031215610d3857600080fd5b81516001600160601b0381168114610a4a57600080fd5b6000600019821415610d6357610d63610b81565b506001019056fea2646970667358221220ed3960e6d6612ee6161f2b60fcc879a3740ec41101030cf6ea177f6e8e11ef6b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x7a2088a1bfc9d81c55368ae168c2c02570cb814f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x7322c24752f79c05ffd1e2a6fcb97020c1c264f1","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x809d550fca64d94bd9f66e60752a544199cfac3d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0xeb5be412f275a18f6e4d622aee4ff40b21467c926224771b782d4c095d1444b":"0xb","0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0x95401dc811bb5740090279ba06cfa8fcf6113778","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x1291be112d480055dafd8a610b7d1e203891c274","0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff":"0x1","0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49":"0x1","0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5":"0x0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49","0xcfb339bd1c51c488f6134f4ac63d1594afad827b3401c3fc51ed1da74a8ca14e":"0xde0b6b3a764000095401dc811bb5740090279ba06cfa8fcf6113778"}},"0x82e01223d51eb87e16a03e24687edf0f294da6f1":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610ec7565b610268565b6040516100d89190610f43565b60405180910390f35b6100f46100ef366004610fb7565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004610fea565b610410565b005b6100f4610138366004611005565b610534565b6101647f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004610fea565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c1366004610fb7565b610601565b6040516100d89190611048565b61018f6101e1366004610fb7565b61076b565b6101286101f4366004610ec7565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611080565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004610fea565b6108f0565b6060336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146102bb5760405162461bcd60e51b81526004016102b2906110aa565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d661111d565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf57600085858381811061032157610321611133565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b290611149565b60006103658361090f565b905061037c89846103776001856111b4565b610a08565b8085858151811061038f5761038f611133565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b7906111d9565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146104585760405162461bcd60e51b81526004016102b2906110aa565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff8088168552925290912080549091841690811061058157610581611133565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff8111156106325761063261111d565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610c61565b82828151811061068c5761068c611133565b6020026020010181815250506000801b8282815181106106ae576106ae611133565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a816111d9565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a9611133565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf161461082a5760405162461bcd60e51b81526004016102b2906110aa565b60005b818110156108ea57600083838381811061084957610849611133565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b290611149565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610d38565b905060006108be8583610d72565b90508089146108d2576108d2818685610a08565b505050505080806108e2906111d9565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff1660016111f4565b9050610948848383610d9c565b60ff84166000908152600260205260408120906109666001846111b4565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f6001846111b4565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610e3c565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac360018361121c565b81548110610ad357610ad3611133565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a60018361121c565b81548110610b1a57610b1a611133565b90600052602060002001915050919050565b60ff8216600090815260036020526040812054805b8015610bd45760ff85166000908152600360205260408120610b6460018461121c565b81548110610b7457610b74611133565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090861610610bc15760200151925061040a915050565b5080610bcc81611233565b915050610b41565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054805b8015610d2c5760ff8616600090815260026020908152604080832063ffffffff891684529091528120610cbb60018461121c565b81548110610ccb57610ccb611133565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090861610610d19576020015192506103c3915050565b5080610d2481611233565b915050610c87565b50600095945050505050565b600080610d4483610aea565b8054909150600090610d6590600190600160201b900463ffffffff166111b4565b90506103c3848383610d9c565b600080610d7f8484610a92565b6001810154909150610d948585846000610e3c565b949350505050565b81544363ffffffff90811691161415610dd357815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610e5b57600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610edc57600080fd5b83359250602084013567ffffffffffffffff80821115610efb57600080fd5b818601915086601f830112610f0f57600080fd5b813581811115610f1e57600080fd5b876020828501011115610f3057600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835163ffffffff1683529284019291840191600101610f5f565b50909695505050505050565b803560ff81168114610f9e57600080fd5b919050565b803563ffffffff81168114610f9e57600080fd5b60008060408385031215610fca57600080fd5b610fd383610f8d565b9150610fe160208401610fa3565b90509250929050565b600060208284031215610ffc57600080fd5b6103c382610f8d565b60008060006060848603121561101a57600080fd5b61102384610f8d565b925061103160208501610fa3565b915061103f60408501610fa3565b90509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f8157835183529284019291840191600101611064565b6000806040838503121561109357600080fd5b61109c83610f8d565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff838116908316818110156111d1576111d161119e565b039392505050565b60006000198214156111ed576111ed61119e565b5060010190565b600063ffffffff8083168185168083038211156112135761121361119e565b01949350505050565b60008282101561122e5761122e61119e565b500390565b6000816112425761124261119e565b50600019019056fea26469706673582212204ee73059b3b9231f5aa2b00ad155fdb9c8d95ffc311fc1a88b56d665dd79ce7764736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x851356ae760d987e095750cceb3bc6014560891c":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea2646970667358221220fd5e700a23418fb34398844556f26001a24356fb1d6fe8c5b0a6ddcc2940deb764736f6c634300080c0033","storage":{}},"0x8a791620dd6260079bf849dc5567adc3f2fdc318":{"nonce":1,"balance":"0x0","code":"0x6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614b54565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe681565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000bc16d674ec80000081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614b91565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614c24565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b34801561039b57600080fd5b506103af6103aa366004614d35565b610c05565b60405161020f9190614dae565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614dbc565b610c6a565b60405161020f9190614dd5565b34801561041557600080fd5b506103af610424366004614dbc565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000424242424242424242424242424242424242424281565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614e1d565b610d17565b3480156104ba57600080fd5b5061022d6104c9366004614e90565b610ec4565b3480156104da57600080fd5b506103fc6104e9366004614d35565b611293565b3480156104fa57600080fd5b5061022d611386565b34801561050f57600080fd5b5061022d61051e366004614f3a565b6113f1565b34801561052f57600080fd5b5061022d61053e366004614f66565b61162e565b34801561054f57600080fd5b5061022d61055e366004615080565b611806565b34801561056f57600080fd5b5061022d61057e366004615151565b6119d9565b34801561058f57600080fd5b5061022d61059e366004614f3a565b611da4565b3480156105af57600080fd5b506102977f0000000000000000000000000000000000000000000000000000000065156ac081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061524c565b156106ad5760405162461bcd60e51b81526004016106a49061526e565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a490615313565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f87565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061524c565b156108375760405162461bcd60e51b81526004016106a49061526e565b60335489906001600160401b03600160a01b90910481169082161161086e5760405162461bcd60e51b81526004016106a490615362565b603454600160401b900460ff166108e65760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f457508483145b6109845760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099a613f486001600160401b038d16614b54565b1015610a235760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acc907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab891906153fd565b8a35610ac760208d018d615416565b611fbb565b6000805b88811015610b7057610b528c8c358c8c85818110610af057610af061545c565b9050602002016020810190610b059190615472565b8b8b86818110610b1757610b1761545c565b9050602002810190610b299190615416565b8b8b88818110610b3b57610b3b61545c565b9050602002810190610b4d9190615499565b612149565b610b5c9083614b54565b915080610b68816154e2565b915050610ad0565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8539091169063c2c51c4090604401600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c926040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfd57610cfd614d76565b6002811115610d0e57610d0e614d76565b90525092915050565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8531614610d5f5760405162461bcd60e51b81526004016106a4906154fd565b346801bc16d674ec80000014610deb5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663228951186801bc16d674ec8000008787610e2e6126fd565b8888886040518863ffffffff1660e01b8152600401610e52969594939291906155cf565b6000604051808303818588803b158015610e6b57600080fd5b505af1158015610e7f573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb592919061561e565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f50919061524c565b15610f6d5760405162461bcd60e51b81526004016106a49061526e565b8684148015610f7b57508382145b6110045760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101a613f486001600160401b038c16614b54565b101561109c5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611140907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906153fd565b8735610ac760208a018a615416565b6000805b888110156111e4576111c68b8b8b848181106111625761116261545c565b90506020020160208101906111779190615472565b8a358a8a8681811061118b5761118b61545c565b905060200281019061119d9190615416565b8a8a888181106111af576111af61545c565b90506020028101906111c19190615499565b612742565b6111d09083615632565b9150806111dc816154e2565b915050611144565b506033546001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169163c2c51c409116611229633b9aca0085615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561126f57600080fd5b505af1158015611283573d6000803e3d6000fd5b5050505050505050505050505050565b6112bb6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112fe85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260392505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136b5761136b614d76565b600281111561137c5761137c614d76565b9052509392505050565b6033546001600160a01b031633146113b05760405162461bcd60e51b81526004016106a4906152cb565b603454600160401b900460ff16156113da5760405162461bcd60e51b81526004016106a490615313565b6033546113ef906001600160a01b0316611f87565b565b336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316146114395760405162461bcd60e51b81526004016106a4906154fd565b611447633b9aca008261570e565b156114d15760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e1633b9aca0083615722565b6034549091506001600160401b03908116908216111561159a5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b89084906001600160401b0316615736565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161791815260200190565b60405180910390a26116298383612c20565b505050565b600054610100900460ff161580801561164e5750600054600160ff909116105b806116685750303b158015611668575060005460ff166001145b6116cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ee576000805461ff0019166101001790555b6001600160a01b0382166117615760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611802576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118305760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc919061524c565b156118d95760405162461bcd60e51b81526004016106a49061526e565b82518451146119645760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d2576119c0838583815181106119865761198661545c565b60200260200101518784815181106119a0576119a061545c565b60200260200101516001600160a01b0316612c2a9092919063ffffffff16565b806119ca816154e2565b915050611967565b5050505050565b604051635ac86ab760e01b81526004808201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061524c565b15611a815760405162461bcd60e51b81526004016106a49061526e565b8386148015611a8f57508588145b8015611a9a57508782145b611b0e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb2907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba391906153fd565b8b35610ac760208e018e615416565b604080518082019091526000808252602082015260005b83811015611cb2576000611c6d8d358d8d85818110611bea57611bea61545c565b9050602002810190611bfc919061575e565b8c8c86818110611c0e57611c0e61545c565b9050602002810190611c209190615416565b8c8c88818110611c3257611c3261545c565b9050602002810190611c449190615499565b8c8c8a818110611c5657611c5661545c565b9050602002810190611c689190615499565b612c7c565b80518451919250908490611c82908390614b54565b9052506020808201519084018051611c9b908390615632565b905250819050611caa816154e2565b915050611bc9565b50805115611ce1576033548151611ce1916001600160a01b031690611cdc90633b9aca009061577f565b613167565b602081015115611d965760335460208201516001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381169263c2c51c4092911690611d3790633b9aca0090615673565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dce5760405162461bcd60e51b81526004016106a4906152cb565b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a919061524c565b15611e775760405162461bcd60e51b81526004016106a49061526e565b603754821115611f285760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3a919061579e565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116298383613167565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb88147613167565b50565b611fc76003602061577f565b81146120575760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150600390506131f5565b6121435760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f7576121f7614d76565b600281111561220857612208614d76565b905250905060008160600151600281111561222557612225614d76565b146122ce5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d66126fd565b6122df906157b5565b61231b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323192505050565b146123a25760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e086868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b90506123f08a87878b8b8e61326b565b60398054906000612400836154e2565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000bc16d674ec80000081169082161115612486576001600160401b037f000000000000000000000000000000000000000000000000bc16d674ec800000166020830152612496565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561253457612534614d76565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125cf9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125f4919061577f565b9b9a5050505050505050505050565b6000815160301461268c5760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b6040516002906126a39084906000906020016157d9565b60408051601f19818403018152908290526126bd91615808565b602060405180830381855afa1580156126da573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6491906153fd565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061278184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324692505050565b905060006127c185858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561283057612830614d76565b600281111561284157612841614d76565b8152505090508a6001600160401b031681604001516001600160401b0316106128f85760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b60018160600151600281111561291057612910614d76565b146129785760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b6129818b6134c2565b6001600160401b03166129c68787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b031611612a69576000836001600160401b031611612a695760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a778987878b8b8f61326b565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000bc16d674ec80000081169086161115612ad957507f000000000000000000000000000000000000000000000000bc16d674ec800000612adc565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b8457612b84614d76565b0217905550905050816001600160401b0316816001600160401b031614612c10577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612bfb9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612c0d81836135c4565b95505b5050505050979650505050505050565b61180282826135e3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116299084906136fc565b6040805180820190915260008082526020820152612ca1612c9c89615889565b6137ce565b6033546001600160401b03600160a01b909104811690821611612cd65760405162461bcd60e51b81526004016106a490615362565b6000612ce4612c9c8b615889565b90506000612d2488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320d92505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d5157612d51614d76565b1415612e085760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612ec75760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550612fa48c87878e7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9f91906159c5565b6137de565b6000612fe28787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141ff92505050565b9050612ff28d8a8a8e8e8661326b565b600061303088888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061421792505050565b905061306e8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ac92505050565b6001600160401b03166130886130838f615889565b61422f565b6001600160401b03161061314057603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261313593869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561311c5761311c614d76565b600281111561312d5761312d614d76565b905250614241565b95505050505061315a565b60335461313590839086906001600160a01b03168461447f565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe69091169063c0db354c9083906044016000604051808303818588803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b50505050505050565b60008361320386858561455d565b1495945050505050565b6000816000815181106132225761322261545c565b60200260200101519050919050565b6000816001815181106132225761322261545c565b6000610c648260028151811061325e5761325e61545c565b60200260200101516146a9565b61327760036002615ac6565b84146133025760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561331060286001614b54565b61331a9190614b54565b61332590602061577f565b82146133a55760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166133bb60286001614b54565b600b901b179050600061340087878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b905061344685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508591508690506131f5565b6134b85760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f0000000000000000000000000000000000000000000000000000000065156ac06001600160401b0316826001600160401b0316101561356c5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b613578600c6020615ad2565b6135a27f0000000000000000000000000000000000000000000000000000000065156ac084615736565b610c649190615b01565b6000610c648260078151811061325e5761325e61545c565b60006135dc6001600160401b03808416908516615b27565b9392505050565b804710156136335760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b50509050806116295760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613751826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149bd9092919063ffffffff16565b805190915015611629578080602001905181019061376f919061524c565b6116295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c648261014001516146a9565b6137e9600280615ac6565b831461385d5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b613869600d6002615ac6565b61387960c0840160a08501615b66565b6001600160401b0316106138e35760405162461bcd60e51b815260206004820152603f6024820152600080516020615bd983398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b6138ef60046002615ac6565b613900610100840160e08501615b66565b6001600160401b03161061396c576040805162461bcd60e51b8152602060048201526024810191909152600080516020615bd983398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b61397860186002615ac6565b61398860e0840160c08501615b66565b6001600160401b031610613a025760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613a1a612c9c85615889565b6001600160401b031610613a2f576005613a32565b60045b9050613a3f600482614b54565b613a4a906001614b54565b613a5590602061577f565b613a5f8480615416565b905014613ad35760405162461bcd60e51b81526020600482015260486024820152600080516020615bd983398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613adf60046003614b54565b613aea90602061577f565b613af76040850185615416565b905014613b715760405162461bcd60e51b815260206004820152604e6024820152600080516020615bd983398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613b7d6003602061577f565b613b8a6020850185615416565b905014613bf85760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613c0381602061577f565b613c106060850185615416565b905014613c835760405162461bcd60e51b81526020600482015260476024820152600080516020615bd983398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613c9160186001614b54565b613c9c906005614b54565b613ca7906001614b54565b613cb19190614b54565b613cbc90602061577f565b613cc96080850185615416565b905014613d525760405162461bcd60e51b81526020600482015260586024820152600080516020615bd983398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613d6460c0850160a08601615b66565b6001600160401b03166000613d7b600d6001614b54565b613d8b60e0880160c08901615b66565b6001600160401b0316901b600d613da460186001614b54565b613daf906001614b54565b613db99190614b54565b601b901b1717179050613e14613dd26080860186615416565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92505050610100870135846131f5565b613e875760405162461bcd60e51b815260206004820152604a6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613ede613e976020860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a0135925090506131f5565b613f3e5760405162461bcd60e51b815260206004820152603d6024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613f96613f506040870187615416565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610100870135610160880135846131f5565b6140085760405162461bcd60e51b81526020600482015260496024820152600080516020615bd983398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b506140606140196060860186615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016086013561014087013560096131f5565b6140cb5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd983398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b60006140de610100860160e08701615b66565b6001600160401b03166140f360046001614b54565b600e901b179050600061413888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471092505050565b90506141886141478780615416565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016088013583856131f5565b6141f45760405162461bcd60e51b81526020600482015260436024820152600080516020615bd983398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610c648260018151811061325e5761325e61545c565b6000610c648260038151811061325e5761325e61545c565b600060206135a28361012001516146a9565b604080518082019091526000808252602082015260007f000000000000000000000000000000000000000000000000bc16d674ec8000006001600160401b0316846001600160401b031611156142b857507f000000000000000000000000000000000000000000000000bc16d674ec8000006142bb565b50825b60408051808201909152600080825260208201526142d98286615736565b6001600160401b0390811682526034805484926000916142fb91859116615b83565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061432d8285602001516135c4565b602082015260028460600151600281111561434a5761434a614d76565b1461436c576039805490600061435f83615bae565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561441157614411614d76565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906145109084906001600160401b0316615b83565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561457c57506020845161457a919061570e565b155b61460b5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b8551811161469f5761462f60028561570e565b614662578151600052808601516020526020826040600060026107d05a03fa61465757600080fd5b60028404935061468d565b8086015160005281516020526020826040600060026107d05a03fa61468657600080fd5b6002840493505b614698602082614b54565b905061461c565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b600080600283516147219190615722565b90506000816001600160401b0381111561473d5761473d614f83565b604051908082528060200260200182016040528015614766578160200160208202803683370190505b50905060005b8281101561486d57600285614781838361577f565b815181106147915761479161545c565b6020026020010151868360026147a7919061577f565b6147b2906001614b54565b815181106147c2576147c261545c565b60200260200101516040516020016147e4929190918252602082015260400190565b60408051601f19818403018152908290526147fe91615808565b602060405180830381855afa15801561481b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061483e91906153fd565b8282815181106148505761485061545c565b602090810291909101015280614865816154e2565b91505061476c565b50614879600283615722565b91505b81156149995760005b828110156149865760028261489a838361577f565b815181106148aa576148aa61545c565b6020026020010151838360026148c0919061577f565b6148cb906001614b54565b815181106148db576148db61545c565b60200260200101516040516020016148fd929190918252602082015260400190565b60408051601f198184030181529082905261491791615808565b602060405180830381855afa158015614934573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061495791906153fd565b8282815181106149695761496961545c565b60209081029190910101528061497e816154e2565b915050614885565b50614992600283615722565b915061487c565b806000815181106149ac576149ac61545c565b602002602001015192505050919050565b60606149cc84846000856149d4565b949350505050565b606082471015614a355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614a8c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614aa89190615808565b60006040518083038185875af1925050503d8060008114614ae5576040519150601f19603f3d011682016040523d82523d6000602084013e614aea565b606091505b5091509150614afa828286614b05565b979650505050505050565b60608315614b145750816135dc565b825115614b245782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615bc5565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b6757614b67614b3e565b500190565b6001600160401b0381168114611fb857600080fd5b8035614b8c81614b6c565b919050565b60008060408385031215614ba457600080fd5b823591506020830135614bb681614b6c565b809150509250929050565b600060408284031215614bd357600080fd5b50919050565b60008083601f840112614beb57600080fd5b5081356001600160401b03811115614c0257600080fd5b6020830191508360208260051b8501011115614c1d57600080fd5b9250929050565b60008060008060008060008060a0898b031215614c4057600080fd5b8835614c4b81614b6c565b975060208901356001600160401b0380821115614c6757600080fd5b614c738c838d01614bc1565b985060408b0135915080821115614c8957600080fd5b614c958c838d01614bd9565b909850965060608b0135915080821115614cae57600080fd5b614cba8c838d01614bd9565b909650945060808b0135915080821115614cd357600080fd5b50614ce08b828c01614bd9565b999c989b5096995094979396929594505050565b60008083601f840112614d0657600080fd5b5081356001600160401b03811115614d1d57600080fd5b602083019150836020828501011115614c1d57600080fd5b60008060208385031215614d4857600080fd5b82356001600160401b03811115614d5e57600080fd5b614d6a85828601614cf4565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614daa57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c648284614d8c565b600060208284031215614dce57600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614e166060840182614d8c565b5092915050565b600080600080600060608688031215614e3557600080fd5b85356001600160401b0380821115614e4c57600080fd5b614e5889838a01614cf4565b90975095506020880135915080821115614e7157600080fd5b50614e7e88828901614cf4565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614eac57600080fd5b8835614eb781614b6c565b975060208901356001600160401b0380821115614ed357600080fd5b614edf8c838d01614bd9565b909950975060408b0135915080821115614ef857600080fd5b614f048c838d01614bc1565b965060608b0135915080821115614cae57600080fd5b6001600160a01b0381168114611fb857600080fd5b8035614b8c81614f1a565b60008060408385031215614f4d57600080fd5b8235614f5881614f1a565b946020939093013593505050565b600060208284031215614f7857600080fd5b81356135dc81614f1a565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614fbc57614fbc614f83565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fea57614fea614f83565b604052919050565b60006001600160401b0382111561500b5761500b614f83565b5060051b60200190565b600082601f83011261502657600080fd5b8135602061503b61503683614ff2565b614fc2565b82815260059290921b8401810191818101908684111561505a57600080fd5b8286015b84811015615075578035835291830191830161505e565b509695505050505050565b60008060006060848603121561509557600080fd5b83356001600160401b03808211156150ac57600080fd5b818601915086601f8301126150c057600080fd5b813560206150d061503683614ff2565b82815260059290921b8401810191818101908a8411156150ef57600080fd5b948201945b8386101561511657853561510781614f1a565b825294820194908201906150f4565b9750508701359250508082111561512c57600080fd5b5061513986828701615015565b92505061514860408501614f2f565b90509250925092565b60008060008060008060008060008060c08b8d03121561517057600080fd5b6151798b614b81565b995060208b01356001600160401b038082111561519557600080fd5b6151a18e838f01614bc1565b9a5060408d01359150808211156151b757600080fd5b6151c38e838f01614bd9565b909a50985060608d01359150808211156151dc57600080fd5b6151e88e838f01614bd9565b909850965060808d013591508082111561520157600080fd5b61520d8e838f01614bd9565b909650945060a08d013591508082111561522657600080fd5b506152338d828e01614bd9565b915080935050809150509295989b9194979a5092959850565b60006020828403121561525e57600080fd5b815180151581146135dc57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b60006020828403121561540f57600080fd5b5051919050565b6000808335601e1984360301811261542d57600080fd5b8301803591506001600160401b0382111561544757600080fd5b602001915036819003821315614c1d57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561548457600080fd5b813564ffffffffff811681146135dc57600080fd5b6000808335601e198436030181126154b057600080fd5b8301803591506001600160401b038211156154ca57600080fd5b6020019150600581901b3603821315614c1d57600080fd5b60006000198214156154f6576154f6614b3e565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561559257818101518382015260200161557a565b838111156121435750506000910152565b600081518084526155bb816020860160208601615577565b601f01601f19169290920160200192915050565b6080815260006155e360808301888a61554e565b82810360208401526155f581886155a3565b9050828103604084015261560a81868861554e565b915050826060830152979650505050505050565b6020815260006149cc60208301848661554e565b600080821280156001600160ff1b038490038513161561565457615654614b3e565b600160ff1b839003841281161561566d5761566d614b3e565b50500190565b60006001600160ff1b038184138284138082168684048611161561569957615699614b3e565b600160ff1b60008712828116878305891216156156b8576156b8614b3e565b600087129250878205871284841616156156d4576156d4614b3e565b878505871281841616156156ea576156ea614b3e565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b60008261571d5761571d6156f8565b500690565b600082615731576157316156f8565b500490565b60006001600160401b038381169083168181101561575657615756614b3e565b039392505050565b6000823561017e1983360301811261577557600080fd5b9190910192915050565b600081600019048311821515161561579957615799614b3e565b500290565b6000828210156157b0576157b0614b3e565b500390565b80516020808301519190811015614bd35760001960209190910360031b1b16919050565b600083516157eb818460208801615577565b6001600160801b0319939093169190920190815260100192915050565b60008251615775818460208701615577565b600082601f83011261582b57600080fd5b81356001600160401b0381111561584457615844614f83565b615857601f8201601f1916602001614fc2565b81815284602083860101111561586c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561589c57600080fd5b6158a4614f99565b82356001600160401b03808211156158bb57600080fd5b6158c73683870161581a565b835260208501359150808211156158dd57600080fd5b6158e93683870161581a565b6020840152604085013591508082111561590257600080fd5b61590e3683870161581a565b6040840152606085013591508082111561592757600080fd5b6159333683870161581a565b6060840152608085013591508082111561594c57600080fd5b506159593682860161581a565b60808301525061596b60a08401614b81565b60a082015261597c60c08401614b81565b60c082015261598d60e08401614b81565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b6000602082840312156159d757600080fd5b81516135dc81614b6c565b600181815b80851115615a1d578160001904821115615a0357615a03614b3e565b80851615615a1057918102915b93841c93908002906159e7565b509250929050565b600082615a3457506001610c64565b81615a4157506000610c64565b8160018114615a575760028114615a6157615a7d565b6001915050610c64565b60ff841115615a7257615a72614b3e565b50506001821b610c64565b5060208310610133831016604e8410600b8410161715615aa0575081810a610c64565b615aaa83836159e2565b8060001904821115615abe57615abe614b3e565b029392505050565b60006135dc8383615a25565b60006001600160401b0380831681851681830481118215151615615af857615af8614b3e565b02949350505050565b60006001600160401b0380841680615b1b57615b1b6156f8565b92169190910492915050565b60008083128015600160ff1b850184121615615b4557615b45614b3e565b6001600160ff1b0384018313811615615b6057615b60614b3e565b50500390565b600060208284031215615b7857600080fd5b81356135dc81614b6c565b60006001600160401b03808316818516808303821115615ba557615ba5614b3e565b01949350505050565b600081615bbd57615bbd614b3e565b506000190190565b6020815260006135dc60208301846155a356fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220691dcd5f8d90539995d3bfd78ba8af9d2650b2da35d409dc1708e0da1fbdd66964736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x8f86403a4de0bb5791fa46b8e795c547942fe4cf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x4826533b4897376654bb4d4ad88b7fafd0c985280001","0x1":"0x0","0x64":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x96":"0x1","0x9c":"0x3","0x9d":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x9e":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xc351628eb244ec633d5f21fbd6621e1a683b1181","0x683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c7":"0x643a9800002710","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c":"0x809d550fca64d94bd9f66e60752a544199cfac3d","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d":"0x9d4454b023096f34b160d6b654540c56a1f81688","0xaf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539e":"0x5eb3bc0a489c5a8288765d2336659ebca68fcd00","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x95401dc811bb5740090279ba06cfa8fcf6113778":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0xf5059a5d33d5853360d16c683c16e67980206f36","0x64":"0xde0b6b3a7640000","0x65":"0x56bc75e2d63100000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0x959922be3caee4b8cd9a407cc3ac1c251c2007b1":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea2646970667358221220a7b0cb3cf71cdb5256fb15bfe475d018f2b85f6e5dc28544afc2cd784e4aa59c64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x99bba657f2bbc93c02d617f8ba121cb8fc104acf":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x33":"0x1","0x66":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0xca":"0x4826533b4897376654bb4d4ad88b7fafd0c98528","0xcb":"0x0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xcbeaf3bde82155f56486fb5a1072cb8baaf547cc","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x9a676e781a523b5d0c0e43731313a708cb607508":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220b9a0b1d8df8cd92b847388841ab1f1297b81cc8e649136efd63d722bd4db6bc364736f6c634300080c0033","storage":{}},"0x9d4454b023096f34b160d6b654540c56a1f81688":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec":"0x1","0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f":"0xb000000000000000000000000000000000000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7278a61aa25c888815afc32ad3cc52ff24fe575","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x70e0ba845a1a0f2da3359c97e0285013525ffc49"}},"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0":{"nonce":1,"balance":"0x0","code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063c298557814602d575b600080fd5b600060405190815260200160405180910390f3fea26469706673582212209882247b872d905a05380b42c11d1716ad43e9b19643a0cf588a80c0958bf20d64736f6c634300080c0033","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":1,"balance":"0x21d8f19a3bf6c557f48","code":"0x","storage":{}},"0xa513e6e4b8f2a923d98304ec87f64353c4d5c853":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x4c116bb629bff7a8373c2378bbd919f8349b8f25","0x9c":"0x65c36ac0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb306bf915c4d645ff596e518faf3f9669b97016","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106103785760003560e01c806360d7faed116101d3578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b01461097d578063f2fde38b14610990578063f698da25146109a3578063fabc1cbc146109ab57600080fd5b8063cf80873e14610936578063da8be86414610957578063eea9064b1461096a57600080fd5b8063c488375a116100de578063c488375a14610853578063c5e480db14610873578063c94b511114610919578063ca661c041461092c57600080fd5b8063b7f06ebe146107f9578063bb45fef21461081c578063c448feb81461084a57600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461078457806399be81c81461079f578063a1788484146107b2578063b1344271146107d257600080fd5b8063886f1195146107405780638da5cb5b14610753578063900413471461076457600080fd5b80636d70f7ae116101ad5780636d70f7ae146106e7578063715018a6146106fa578063778e55f3146107025780637f5480711461072d57600080fd5b806360d7faed14610698578063635bbd10146106ab57806365da1264146106be57600080fd5b806329c77d4f116102ad5780634fc40b611161024b5780635ac86ab7116102255780635ac86ab71461062e5780635c975abb146106515780635cfe8d2c146106595780635f966f141461066c57600080fd5b80634fc40b6114610609578063595c6a6714610613578063597b36da1461061b57600080fd5b80633cdeb5e0116102875780633cdeb5e0146105695780633e28391d1461059857806343377382146105bb5780634665bcda146105e257600080fd5b806329c77d4f146104f7578063334043961461051757806339b70e381461052a57600080fd5b8063136439dd1161031a5780631bbce091116102f45780631bbce0911461049757806320606b70146104aa57806322bf40e4146104d157806328a573ae146104e457600080fd5b8063136439dd146104385780631522bf021461044b578063169283651461045e57600080fd5b80630dd8dd02116103565780630dd8dd02146103dd5780630f589e59146103fd57806310d67a2f14610412578063132d49671461042557600080fd5b80630449ca391461037d57806304a4f979146103a35780630b9f487a146103ca575b600080fd5b61039061038b366004614adb565b6109be565b6040519081526020015b60405180910390f35b6103907f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103906103d8366004614b41565b610a43565b6103f06103eb366004614adb565b610b05565b60405161039a9190614b9c565b61041061040b366004614c39565b610e6e565b005b610410610420366004614c8c565b610fbe565b610410610433366004614cb0565b611071565b610410610446366004614cf1565b611128565b610410610459366004614d0a565b611267565b61039061046c366004614c8c565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103906104a5366004614cb0565b61127b565b6103907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104106104df366004614d75565b6112a9565b6104106104f2366004614cb0565b6113ed565b610390610505366004614c8c565b609b6020526000908152604090205481565b610410610525366004614e1c565b61149d565b6105517f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6040516001600160a01b03909116815260200161039a565b610551610577366004614c8c565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ab6105a6366004614c8c565b6115da565b604051901515815260200161039a565b6103907f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105517f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85381565b6103906213c68081565b6104106115fa565b61039061062936600461513b565b6116c1565b6105ab61063c366004615177565b606654600160ff9092169190911b9081161490565b606654610390565b6104106106673660046151ed565b6116f1565b61055161067a366004614c8c565b6001600160a01b039081166000908152609960205260409020541690565b6104106106a636600461534d565b61199c565b6104106106b9366004614cf1565b611a37565b6105516106cc366004614c8c565b609a602052600090815260409020546001600160a01b031681565b6105ab6106f5366004614c8c565b611a48565b610410611a68565b6103906107103660046153dc565b609860209081526000928352604080842090915290825290205481565b61041061073b3660046154bd565b611a7c565b606554610551906001600160a01b031681565b6033546001600160a01b0316610551565b61077761077236600461554d565b611b81565b60405161039a91906155d7565b61055173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104106107ad3660046155ea565b611c5b565b6103906107c0366004614c8c565b609f6020526000908152604090205481565b6105517f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b6105ab610807366004614cf1565b609e6020526000908152604090205460ff1681565b6105ab61082a36600461561f565b609c60209081526000928352604080842090915290825290205460ff1681565b610390609d5481565b610390610861366004614c8c565b60a16020526000908152604090205481565b6108e3610881366004614c8c565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff169082015260600161039a565b61039061092736600461564b565b611d2d565b61039062034bc081565b610949610944366004614c8c565b611de6565b60405161039a9291906156cc565b6103f0610965366004614c8c565b61219e565b6104106109783660046156f1565b612662565b61041061098b366004615749565b61266e565b61041061099e366004614c8c565b6126ff565b610390612775565b6104106109b9366004614cf1565b6127b3565b609d54600090815b83811015610a3b57600060a160008787858181106109e6576109e6615765565b90506020020160208101906109fb9190614c8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610a2a578092505b50610a3481615791565b90506109c6565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ac1612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b3a5760405162461bcd60e51b8152600401610b31906157ac565b60405180910390fd5b6000836001600160401b03811115610b5457610b54614ebe565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e6357868682818110610bb857610bb8615765565b9050602002810190610bca91906157e3565b610bd8906020810190615803565b9050878783818110610bec57610bec615765565b9050602002810190610bfe91906157e3565b610c089080615803565b905014610c7d5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b31565b33878783818110610c9057610c90615765565b9050602002810190610ca291906157e3565b610cb3906060810190604001614c8c565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610b31565b610e343383898985818110610d4657610d46615765565b9050602002810190610d5891906157e3565b610d69906060810190604001614c8c565b8a8a86818110610d7b57610d7b615765565b9050602002810190610d8d91906157e3565b610d979080615803565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610ddd57610ddd615765565b9050602002810190610def91906157e3565b610dfd906020810190615803565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290f92505050565b838281518110610e4657610e46615765565b602090810291909101015280610e5b81615791565b915050610b9e565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610f085760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b31565b610f123384612ecf565b604080518082019091526060815260006020820152610f34338083600061316b565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f6d919061584c565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb092919061589e565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906158cd565b6001600160a01b0316336001600160a01b0316146110655760405162461bcd60e51b8152600401610b31906158ea565b61106e81613510565b50565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071614806110d05750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6110ec5760405162461bcd60e51b8152600401610b3190615934565b6110f5836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613607565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615991565b6111b05760405162461bcd60e51b8152600401610b31906159ae565b606654818116146112295760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b61126f613682565b611121848484846136dc565b6001600160a01b0383166000908152609b60205260408120546112a085828686611d2d565b95945050505050565b600054610100900460ff16158080156112c95750600054600160ff909116105b806112e35750303b1580156112e3575060005460ff166001145b6113465760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b31565b6000805460ff191660011790558015611369576000805461ff0019166101001790555b6113738888613902565b61137b6139e8565b60975561138789613a7f565b61139086613ad1565b61139c858585856136dc565b80156113e2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570716148061144c5750336001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316145b6114685760405162461bcd60e51b8152600401610b3190615934565b611471836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613bcb565b606654600290600490811614156114c65760405162461bcd60e51b8152600401610b31906157ac565b600260c95414156115195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c95560005b888110156115c9576115b98a8a8381811061153e5761153e615765565b905060200281019061155091906159f6565b89898481811061156257611562615765565b90506020028101906115749190615803565b89898681811061158657611586615765565b9050602002013588888781811061159f5761159f615765565b90506020020160208101906115b49190615a0c565b613c46565b6115c281615791565b9050611521565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190615991565b6116825760405162461bcd60e51b8152600401610b31906159ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116d49190615a9d565b604051602081830303815290604052805190602001209050919050565b60005b815181101561199857600082828151811061171157611711615765565b602002602001015190506000807f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b031663cd293f6f846040518263ffffffff1660e01b815260040161176a9190615ab0565b60408051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac9190615b5c565b91509150811561198a576040808401516001600160a01b0381166000908152609f602052918220805491928291906117e383615791565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff16815260200187600001518152602001876020015181525090506000611863826116c1565b6000818152609e602052604090205490915060ff16156118f95760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b31565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906119449083908590615b8a565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116f4565b5050565b606654600290600490811614156119c55760405162461bcd60e51b8152600401610b31906157ac565b600260c9541415611a185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c955611a2a8686868686613c46565b5050600160c95550505050565b611a3f613682565b61106e81613ad1565b6001600160a01b0390811660009081526099602052604090205416151590565b611a70613682565b611a7a6000613a7f565b565b4283602001511015611b005760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b31565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611b3c8783888860200151611d2d565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b6c9088908390614430565b611b788787868661316b565b50505050505050565b6060600082516001600160401b03811115611b9e57611b9e614ebe565b604051908082528060200260200182016040528015611bc7578160200160208202803683370190505b50905060005b8351811015610a3b576001600160a01b03851660009081526098602052604081208551909190869084908110611c0557611c05615765565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611c4057611c40615765565b6020908102919091010152611c5481615791565b9050611bcd565b611c6433611a48565b611ce65760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b31565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611d2192919061589e565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611da3612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853909116906360f4062b90602401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190615ba3565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707909116906394f649dd90602401600060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f129190810190615c17565b9150915060008313611f2957909590945092505050565b606080835160001415611fe3576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611f9e57611f9e615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611fd257611fd2615765565b602002602001018181525050612191565b8351611ff0906001615cd1565b6001600160401b0381111561200757612007614ebe565b604051908082528060200260200182016040528015612030578160200160208202803683370190505b50915081516001600160401b0381111561204c5761204c614ebe565b604051908082528060200260200182016040528015612075578160200160208202803683370190505b50905060005b845181101561210f5784818151811061209657612096615765565b60200260200101518382815181106120b0576120b0615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106120e2576120e2615765565b60200260200101518282815181106120fc576120fc615765565b602090810291909101015260010161207b565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516121349190615ce9565b8151811061214457612144615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516121749190615ce9565b8151811061218457612184615765565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156121ca5760405162461bcd60e51b8152600401610b31906157ac565b6121d3836115da565b6122535760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b31565b61225c83611a48565b156122cf5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b31565b6001600160a01b03831661234b5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b31565b6001600160a01b038084166000818152609a60205260409020549091169033148061237e5750336001600160a01b038216145b806123a557506001600160a01b038181166000908152609960205260409020600101541633145b6124175760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b31565b60008061242386611de6565b9092509050336001600160a01b0387161461247957826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516124fb576040805160008152602081019091529450612659565b81516001600160401b0381111561251457612514614ebe565b60405190808252806020026020018201604052801561253d578160200160208202803683370190505b50945060005b8251811015612657576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106125a3576125a3615765565b6020026020010151826000815181106125be576125be615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106125f0576125f0615765565b60200260200101518160008151811061260b5761260b615765565b60200260200101818152505061262489878b858561290f565b88848151811061263657612636615765565b6020026020010181815250505050808061264f90615791565b915050612543565b505b50505050919050565b6111233384848461316b565b61267733611a48565b6126f55760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b31565b61106e3382612ecf565b612707613682565b6001600160a01b03811661276c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b31565b61106e81613a7f565b60007f00000000000000000000000000000000000000000000000000000000000042684614156127a6575060975490565b6127ae6139e8565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a91906158cd565b6001600160a01b0316336001600160a01b03161461285a5760405162461bcd60e51b8152600401610b31906158ea565b6066541981196066541916146128d85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161125c565b60006001600160a01b0386166129a65760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b31565b8251612a305760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b31565b60005b8351811015612ddd576001600160a01b03861615612a8957612a898688868481518110612a6257612a62615765565b6020026020010151868581518110612a7c57612a7c615765565b6020026020010151613607565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ab957612ab9615765565b60200260200101516001600160a01b03161415612b82577f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8536001600160a01b031663beffbb8988858481518110612b1257612b12615765565b60200260200101516040518363ffffffff1660e01b8152600401612b4b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b50505050612dd5565b846001600160a01b0316876001600160a01b03161480612c5457507f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b0316639b4da03d858381518110612bde57612bde615765565b60200260200101516040518263ffffffff1660e01b8152600401612c1191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190615991565b155b612d205760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610b31565b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b0316638c80d4e588868481518110612d6257612d62615765565b6020026020010151868581518110612d7c57612d7c615765565b60200260200101516040518463ffffffff1660e01b8152600401612da293929190615d00565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050505b600101612a33565b506001600160a01b0386166000908152609f60205260408120805491829190612e0583615791565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612e6d826116c1565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612ebb9083908590615b8a565b60405180910390a198975050505050505050565b6000612ede6020830183614c8c565b6001600160a01b03161415612f785760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b31565b6213c680612f8c6060830160408401615d24565b63ffffffff1611156130415760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b31565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff169061307d9060608401908401615d24565b63ffffffff1610156131135760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b31565b6001600160a01b038216600090815260996020526040902081906131378282615d61565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611d2190849061584c565b606654600090600190811614156131945760405162461bcd60e51b8152600401610b31906157ac565b61319d856115da565b1561321a5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b31565b61322384611a48565b6132a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b31565b6001600160a01b038085166000908152609960205260409020600101541680158015906132d95750336001600160a01b03821614155b80156132ee5750336001600160a01b03861614155b1561345b57428460200151101561336d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156134075760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613448908890889085908890610a43565b905061345982828760000151614430565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806134ba88611de6565b9150915060005b82518110156113e257613508888a8584815181106134e1576134e1615765565b60200260200101518585815181106134fb576134fb615765565b6020026020010151613bcb565b6001016134c1565b6001600160a01b03811661359e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b31565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061363e908490615ce9565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb093929190615d00565b6033546001600160a01b03163314611a7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b31565b8281146137645760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b31565b8260005b818110156138fa57600086868381811061378457613784615765565b90506020020160208101906137999190614c8c565b6001600160a01b038116600090815260a160205260408120549192508686858181106137c7576137c7615765565b90506020020135905062034bc081111561388b5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610b31565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806138f390615791565b9050613768565b505050505050565b6065546001600160a01b031615801561392357506001600160a01b03821615155b6139a55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261199882613510565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613b8a5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610b31565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613c02908490615cd1565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb093929190615d00565b6000613c5461062987615dc4565b6000818152609e602052604090205490915060ff16613cd55760405162461bcd60e51b81526020600482015260436024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610b31565b609d544390613cea60a0890160808a01615d24565b63ffffffff16613cfa9190615cd1565b1115613d825760405162461bcd60e51b815260206004820152605f6024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610b31565b613d926060870160408801614c8c565b6001600160a01b0316336001600160a01b031614613e1f5760405162461bcd60e51b81526020600482015260506024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610b31565b8115613ea157613e3260a0870187615803565b85149050613ea15760405162461bcd60e51b81526020600482015260426024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610b31565b6000818152609e60205260409020805460ff1916905581156140065760005b613ecd60a0880188615803565b9050811015614000574360a16000613ee860a08b018b615803565b85818110613ef857613ef8615765565b9050602002016020810190613f0d9190614c8c565b6001600160a01b03168152602081019190915260400160002054613f3760a08a0160808b01615d24565b63ffffffff16613f479190615cd1565b1115613f655760405162461bcd60e51b8152600401610b3190615dd6565b613ff8613f756020890189614c8c565b33613f8360a08b018b615803565b85818110613f9357613f93615765565b9050602002016020810190613fa89190614c8c565b613fb560c08c018c615803565b86818110613fc557613fc5615765565b905060200201358a8a87818110613fde57613fde615765565b9050602002016020810190613ff39190614c8c565b6145ea565b600101613ec0565b506143f5565b336000908152609a60205260408120546001600160a01b0316905b61402e60a0890189615803565b90508110156143f2574360a1600061404960a08c018c615803565b8581811061405957614059615765565b905060200201602081019061406e9190614c8c565b6001600160a01b0316815260208101919091526040016000205461409860a08b0160808c01615d24565b63ffffffff166140a89190615cd1565b11156140c65760405162461bcd60e51b8152600401610b3190615dd6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06140e860a08a018a615803565b838181106140f8576140f8615765565b905060200201602081019061410d9190614c8c565b6001600160a01b0316141561425d57600061412b60208a018a614c8c565b905060006001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c85316630e81073c8361416c60c08e018e615803565b8781811061417c5761417c615765565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156141d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f49190615ba3565b6001600160a01b038084166000908152609a602052604090205491925016801561425557614255818461422a60a08f018f615803565b8881811061423a5761423a615765565b905060200201602081019061424f9190614c8c565b85613bcb565b5050506143ea565b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757076001600160a01b031663c4623ea13389898581811061429f5761429f615765565b90506020020160208101906142b49190614c8c565b6142c160a08d018d615803565b868181106142d1576142d1615765565b90506020020160208101906142e69190614c8c565b6142f360c08e018e615803565b8781811061430357614303615765565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561436357600080fd5b505af1158015614377573d6000803e3d6000fd5b505050506001600160a01b038216156143ea576143ea823361439c60a08c018c615803565b858181106143ac576143ac615765565b90506020020160208101906143c19190614c8c565b6143ce60c08d018d615803565b868181106143de576143de615765565b90506020020135613bcb565b600101614021565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561454a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144709086908690600401615e5e565b602060405180830381865afa15801561448d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b19190615ebb565b6001600160e01b031916146111235760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b31565b826001600160a01b031661455e838361472a565b6001600160a01b0316146111235760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b31565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156146955760405162387b1360e81b81526001600160a01b037f000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853169063387b13009061465e90889088908790600401615d00565b600060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b50505050614723565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169063c608c7f390608401600060405180830381600087803b15801561470f57600080fd5b505af11580156113e2573d6000803e3d6000fd5b5050505050565b60008060006147398585614746565b91509150610a3b816147b6565b60008082516041141561477d5760208301516040840151606085015160001a61477187828585614971565b945094505050506147af565b8251604014156147a7576020830151604084015161479c868383614a5e565b9350935050506147af565b506000905060025b9250929050565b60008160048111156147ca576147ca615ee5565b14156147d35750565b60018160048111156147e7576147e7615ee5565b14156148355760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b31565b600281600481111561484957614849615ee5565b14156148975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b31565b60038160048111156148ab576148ab615ee5565b14156149045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b31565b600481600481111561491857614918615ee5565b141561106e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b31565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149a85750600090506003614a55565b8460ff16601b141580156149c057508460ff16601c14155b156149d15750600090506004614a55565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4e57600060019250925050614a55565b9150600090505b94509492505050565b6000806001600160ff1b03831681614a7b60ff86901c601b615cd1565b9050614a8987828885614971565b935093505050935093915050565b60008083601f840112614aa957600080fd5b5081356001600160401b03811115614ac057600080fd5b6020830191508360208260051b85010111156147af57600080fd5b60008060208385031215614aee57600080fd5b82356001600160401b03811115614b0457600080fd5b614b1085828601614a97565b90969095509350505050565b6001600160a01b038116811461106e57600080fd5b8035614b3c81614b1c565b919050565b600080600080600060a08688031215614b5957600080fd5b8535614b6481614b1c565b94506020860135614b7481614b1c565b93506040860135614b8481614b1c565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614bd457835183529284019291840191600101614bb8565b50909695505050505050565b600060608284031215614bf257600080fd5b50919050565b60008083601f840112614c0a57600080fd5b5081356001600160401b03811115614c2157600080fd5b6020830191508360208285010111156147af57600080fd5b600080600060808486031215614c4e57600080fd5b614c588585614be0565b925060608401356001600160401b03811115614c7357600080fd5b614c7f86828701614bf8565b9497909650939450505050565b600060208284031215614c9e57600080fd5b8135614ca981614b1c565b9392505050565b600080600060608486031215614cc557600080fd5b8335614cd081614b1c565b92506020840135614ce081614b1c565b929592945050506040919091013590565b600060208284031215614d0357600080fd5b5035919050565b60008060008060408587031215614d2057600080fd5b84356001600160401b0380821115614d3757600080fd5b614d4388838901614a97565b90965094506020870135915080821115614d5c57600080fd5b50614d6987828801614a97565b95989497509550505050565b60008060008060008060008060c0898b031215614d9157600080fd5b8835614d9c81614b1c565b97506020890135614dac81614b1c565b9650604089013595506060890135945060808901356001600160401b0380821115614dd657600080fd5b614de28c838d01614a97565b909650945060a08b0135915080821115614dfb57600080fd5b50614e088b828c01614a97565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614e3857600080fd5b88356001600160401b0380821115614e4f57600080fd5b614e5b8c838d01614a97565b909a50985060208b0135915080821115614e7457600080fd5b614e808c838d01614a97565b909850965060408b0135915080821115614e9957600080fd5b614ea58c838d01614a97565b909650945060608b0135915080821115614dfb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614ef657614ef6614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef657614ef6614ebe565b60405160c081016001600160401b0381118282101715614ef657614ef6614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f6857614f68614ebe565b604052919050565b63ffffffff8116811461106e57600080fd5b8035614b3c81614f70565b60006001600160401b03821115614fa657614fa6614ebe565b5060051b60200190565b600082601f830112614fc157600080fd5b81356020614fd6614fd183614f8d565b614f40565b82815260059290921b84018101918181019086841115614ff557600080fd5b8286015b8481101561501957803561500c81614b1c565b8352918301918301614ff9565b509695505050505050565b600082601f83011261503557600080fd5b81356020615045614fd183614f8d565b82815260059290921b8401810191818101908684111561506457600080fd5b8286015b848110156150195780358352918301918301615068565b600060e0828403121561509157600080fd5b615099614ed4565b90506150a482614b31565b81526150b260208301614b31565b60208201526150c360408301614b31565b6040820152606082013560608201526150de60808301614f82565b608082015260a08201356001600160401b03808211156150fd57600080fd5b61510985838601614fb0565b60a084015260c084013591508082111561512257600080fd5b5061512f84828501615024565b60c08301525092915050565b60006020828403121561514d57600080fd5b81356001600160401b0381111561516357600080fd5b61516f8482850161507f565b949350505050565b60006020828403121561518957600080fd5b813560ff81168114614ca957600080fd5b6000604082840312156151ac57600080fd5b6151b4614efc565b905081356151c181614b1c565b815260208201356bffffffffffffffffffffffff811681146151e257600080fd5b602082015292915050565b6000602080838503121561520057600080fd5b82356001600160401b038082111561521757600080fd5b818501915085601f83011261522b57600080fd5b8135615239614fd182614f8d565b81815260059190911b8301840190848101908883111561525857600080fd5b8585015b83811015615332578035858111156152745760008081fd5b860160e0818c03601f190181131561528c5760008081fd5b615294614f1e565b89830135888111156152a65760008081fd5b6152b48e8c83870101614fb0565b825250604080840135898111156152cb5760008081fd5b6152d98f8d83880101615024565b8c8401525060606152eb818601614b31565b82840152608091506152ff8f83870161519a565b9083015261530f60c08501614f82565b9082015261531e838301614b31565b60a08201528552505091860191860161525c565b5098975050505050505050565b801515811461106e57600080fd5b60008060008060006080868803121561536557600080fd5b85356001600160401b038082111561537c57600080fd5b9087019060e0828a03121561539057600080fd5b909550602087013590808211156153a657600080fd5b506153b388828901614a97565b9095509350506040860135915060608601356153ce8161533f565b809150509295509295909350565b600080604083850312156153ef57600080fd5b82356153fa81614b1c565b9150602083013561540a81614b1c565b809150509250929050565b60006040828403121561542757600080fd5b61542f614efc565b905081356001600160401b038082111561544857600080fd5b818401915084601f83011261545c57600080fd5b813560208282111561547057615470614ebe565b615482601f8301601f19168201614f40565b9250818352868183860101111561549857600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156154d557600080fd5b85356154e081614b1c565b945060208601356154f081614b1c565b935060408601356001600160401b038082111561550c57600080fd5b61551889838a01615415565b9450606088013591508082111561552e57600080fd5b5061553b88828901615415565b95989497509295608001359392505050565b6000806040838503121561556057600080fd5b823561556b81614b1c565b915060208301356001600160401b0381111561558657600080fd5b61559285828601614fb0565b9150509250929050565b600081518084526020808501945080840160005b838110156155cc578151875295820195908201906001016155b0565b509495945050505050565b602081526000614ca9602083018461559c565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b614b1085828601614bf8565b6000806040838503121561563257600080fd5b823561563d81614b1c565b946020939093013593505050565b6000806000806080858703121561566157600080fd5b843561566c81614b1c565b935060208501359250604085013561568381614b1c565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155cc5781516001600160a01b0316875295820195908201906001016156a7565b6040815260006156df6040830185615693565b82810360208401526112a0818561559c565b60008060006060848603121561570657600080fd5b833561571181614b1c565b925060208401356001600160401b0381111561572c57600080fd5b61573886828701615415565b925050604084013590509250925092565b60006060828403121561575b57600080fd5b614ca98383614be0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157a5576157a561577b565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126157f957600080fd5b9190910192915050565b6000808335601e1984360301811261581a57600080fd5b8301803591506001600160401b0382111561583457600080fd5b6020019150600581901b36038213156147af57600080fd5b60608101823561585b81614b1c565b6001600160a01b03908116835260208401359061587782614b1c565b166020830152604083013561588b81614f70565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156158df57600080fd5b8151614ca981614b1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b6000602082840312156159a357600080fd5b8151614ca98161533f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126157f957600080fd5b600060208284031215615a1e57600080fd5b8135614ca98161533f565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152615a8460e0850182615693565b905060c083015184820360c08601526112a0828261559c565b602081526000614ca96020830184615a29565b602081526000825160e06020840152615acd610100840182615693565b90506020840151601f19848303016040850152615aea828261559c565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a0850152506080840151615b4260c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152610a3b565b60008060408385031215615b6f57600080fd5b8251615b7a8161533f565b6020939093015192949293505050565b82815260406020820152600061516f6040830184615a29565b600060208284031215615bb557600080fd5b5051919050565b600082601f830112615bcd57600080fd5b81516020615bdd614fd183614f8d565b82815260059290921b84018101918181019086841115615bfc57600080fd5b8286015b848110156150195780518352918301918301615c00565b60008060408385031215615c2a57600080fd5b82516001600160401b0380821115615c4157600080fd5b818501915085601f830112615c5557600080fd5b81516020615c65614fd183614f8d565b82815260059290921b84018101918181019089841115615c8457600080fd5b948201945b83861015615cab578551615c9c81614b1c565b82529482019490820190615c89565b91880151919650909350505080821115615cc457600080fd5b5061559285828601615bbc565b60008219821115615ce457615ce461577b565b500190565b600082821015615cfb57615cfb61577b565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d3657600080fd5b8135614ca981614f70565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615d6c81614b1c565b615d768183615d41565b50600181016020830135615d8981614b1c565b615d938183615d41565b506040830135615da281614f70565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615dd0368361507f565b92915050565b6020808252606e90820152600080516020615efc83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615e9257858101830151858201606001528201615e76565b81811115615ea4576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615ecd57600080fd5b81516001600160e01b031981168114614ca957600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a2646970667358221220d66f588615166c5a17b325e84a4667d637f2966626a1aabc3c0fecdfe833625064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xa85233c63b9ee964add6f2cffe00fd84eb32338f":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x3f1c547b21f65e10480de3ad8e19faac46c95034","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xb0d4afd8879ed9f52b28595d31b441d079b2ca07":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80637afa1eed11610146578063cf4b1710116100c3578063f2fde38b11610087578063f2fde38b1461060c578063f63c5bab146105f1578063f89d18bf1461061f578063f8c8765e14610646578063f9f4d7f814610659578063fabc1cbc1461066c57600080fd5b8063cf4b1710146105af578063da16491f146105b7578063df5cf723146105ca578063ef024458146105f1578063efcf4edb146105f957600080fd5b8063a168e3c01161010a578063a168e3c014610554578063a35d2e0514610574578063b98d09081461057c578063b98fba4f14610589578063c5d2e81f1461059c57600080fd5b80637afa1eed146104e5578063886f1195146104ff5780638cbc379a146105125780638da5cb5b1461052057806395eebee61461053157600080fd5b80634f19ade7116101df5780635df45946116101a35780635df4594614610434578063683048351461045b5780636d14a987146104825780636efb4636146104a95780636fe9b41a146104ca578063715018a6146104dd57600080fd5b80634f19ade7146103b0578063595c6a67146103de5780635ac86ab7146103e65780635ace2df7146104195780635c975abb1461042c57600080fd5b8063292f7a4e11610226578063292f7a4e146103165780632e44b3491461034057806332a8ad1e146103505780633df4c8661461036a578063416c7e5e1461039d57600080fd5b806310d67a2f14610263578063136439dd14610278578063171f1d5b1461028b5780631ad43189146102ba578063245a7bfc146102f6575b600080fd5b61027661027136600461397e565b61067f565b005b61027661028636600461399b565b61073b565b61029e610299366004613b19565b610868565b6040805192151583529015156020830152015b60405180910390f35b6102e17f000000000000000000000000000000000000000000000000000000000000001e81565b60405163ffffffff90911681526020016102b1565b60ca54610309906001600160a01b031681565b6040516102b19190613b6a565b610329610324366004613e7c565b6109f2565b6040805192151583526020830191909152016102b1565b60c9546102e19063ffffffff1681565b610358600281565b60405160ff90911681526020016102b1565b60c9546103859064010000000090046001600160401b031681565b6040516001600160401b0390911681526020016102b1565b6102766103ab366004613f1f565b610abf565b6103d06103be366004613f3c565b60cb6020526000908152604090205481565b6040519081526020016102b1565b610276610c34565b6104096103f4366004613f66565b606654600160ff9092169190911b9081161490565b60405190151581526020016102b1565b610276610427366004613fad565b610cee565b6066546103d0565b6103097f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6103097f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81565b6103097f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6104bc6104b736600461403e565b610d78565b6040516102b1929190614108565b6104096104d8366004614163565b611c85565b610276611d16565b60c95461030990600160601b90046001600160a01b031681565b606554610309906001600160a01b031681565b60c95463ffffffff166102e1565b6033546001600160a01b0316610309565b61040961053f366004613f3c565b60cd6020526000908152604090205460ff1681565b6103d0610562366004613f3c565b60cc6020526000908152604090205481565b610358600181565b6097546104099060ff1681565b6104096105973660046141e9565b611d2a565b6104096105aa366004614240565b611daa565b610358600081565b6102766105c53660046142d4565b611df1565b6103097f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6102e1606481565b610276610607366004614355565b61213d565b61027661061a36600461397e565b6124e9565b6103d07f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb81565b6102766106543660046143ca565b61255f565b610409610667366004614426565b6126be565b61027661067a36600461399b565b6126ee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190614478565b6001600160a01b0316336001600160a01b03161461072f5760405162461bcd60e51b815260040161072690614495565b60405180910390fd5b610738816128c7565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e9061076b903390600401613b6a565b602060405180830381865afa158015610788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac91906144df565b6107c85760405162461bcd60e51b8152600401610726906144fc565b6066548181161461083c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610726565b60668190556040518181523390600080516020614c94833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106108b0576108b0614544565b60200201518951600160200201518a602001516000600281106108d5576108d5614544565b60200201518b602001516001600281106108f1576108f1614544565b602090810291909101518c518d83015160405161094e9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610971919061455a565b90506109e461098a61098388846129be565b8690612a55565b610992612ae9565b6109da6109cb856109c5604080518082018252600080825260209182015281518083019092526001825260029082015290565b906129be565b6109d48c612ba9565b90612a55565b886201d4c0612c39565b909890975095505050505050565b600080600080610a058a8a8a8a8a610d78565b9150915060005b88811015610aab578563ffffffff1683602001518281518110610a3157610a31614544565b6020026020010151610a439190614592565b6001600160601b0316606463ffffffff1684600001518381518110610a6a57610a6a614544565b6020026020010151610a7c9190614592565b6001600160601b03161015610a995750600093509150610ab49050565b80610aa3816145c1565b915050610a0c565b50600193509150505b965096945050505050565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190614478565b6001600160a01b0316336001600160a01b031614610bed5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610726565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610c64903390600401613b6a565b602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca591906144df565b610cc15760405162461bcd60e51b8152600401610726906144fc565b60001960668190556040519081523390600080516020614c948339815191529060200160405180910390a2565b60665460029060049081161415610d175760405162461bcd60e51b8152600401610726906145dc565b6000610d266020860186613f3c565b9050610d328686612e5d565b610d6f57604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610d71565b505b5050505050565b6040805180820190915260608082526020820152600084610de95760405162461bcd60e51b81526020600482015260376024820152600080516020614cf48339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b6064820152608401610726565b60408301515185148015610e01575060a08301515185145b8015610e11575060c08301515185145b8015610e21575060e08301515185145b610e8b5760405162461bcd60e51b81526020600482015260416024820152600080516020614cf483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610726565b82515160208401515114610f035760405162461bcd60e51b815260206004820152604460248201819052600080516020614cf4833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610726565b4363ffffffff168463ffffffff1610610f725760405162461bcd60e51b815260206004820152603c6024820152600080516020614cf483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610726565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610fb357610fb36139b4565b604051908082528060200260200182016040528015610fdc578160200160208202803683370190505b506020820152866001600160401b03811115610ffa57610ffa6139b4565b604051908082528060200260200182016040528015611023578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115611057576110576139b4565b604051908082528060200260200182016040528015611080578160200160208202803683370190505b5081526020860151516001600160401b038111156110a0576110a06139b4565b6040519080825280602002602001820160405280156110c9578160200160208202803683370190505b508160200181905250600061119b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf169350639aa1653d925060048083019260209291908290030181865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611196919061460f565b612e66565b905060005b876020015151811015611436576111e5886020015182815181106111c6576111c6614544565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106111fb576111fb614544565b602090810291909101015280156112bb57602083015161121c60018361462c565b8151811061122c5761122c614544565b602002602001015160001c8360200151828151811061124d5761124d614544565b602002602001015160001c116112bb576040805162461bcd60e51b8152602060048201526024810191909152600080516020614cf483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610726565b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b03166304ec63518460200151838151811061130057611300614544565b60200260200101518b8b60000151858151811061131f5761131f614544565b60200260200101516040518463ffffffff1660e01b815260040161135c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139d9190614643565b6001600160c01b0316836000015182815181106113bc576113bc614544565b6020026020010181815250506114226109836113f684866000015185815181106113e8576113e8614544565b602002602001015116612ede565b8a60200151848151811061140c5761140c614544565b6020026020010151612f0990919063ffffffff16565b94508061142e816145c1565b9150506111a0565b505061144183612fed565b60975490935060ff166000816114585760006114da565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da919061466c565b905060005b8a811015611b5857821561163a578963ffffffff16827f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b031663249a0c428f8f8681811061153657611536614544565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a919061466c565b6115a49190614685565b1161163a5760405162461bcd60e51b81526020600482015260666024820152600080516020614cf483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610726565b7f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b03166368bccaac8d8d8481811061167b5761167b614544565b9050013560f81c60f81b60f81c8c8c60a00151858151811061169f5761169f614544565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156116fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171f919061469d565b6001600160401b0319166117428a6040015183815181106111c6576111c6614544565b67ffffffffffffffff1916146117de5760405162461bcd60e51b81526020600482015260616024820152600080516020614cf483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610726565b61180e896040015182815181106117f7576117f7614544565b602002602001015187612a5590919063ffffffff16565b95507f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031663c8294c568d8d8481811061185157611851614544565b9050013560f81c60f81b60f81c8c8c60c00151858151811061187557611875614544565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f591906146c8565b8560200151828151811061190b5761190b614544565b6001600160601b0390921660209283029190910182015285015180518290811061193757611937614544565b60200260200101518560000151828151811061195557611955614544565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611b43576119cd8660000151828151811061199f5761199f614544565b60200260200101518f8f868181106119b9576119b9614544565b600192013560f81c9290921c811614919050565b15611b31577f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031663f2be94ae8f8f86818110611a1357611a13614544565b9050013560f81c60f81b60f81c8e89602001518581518110611a3757611a37614544565b60200260200101518f60e001518881518110611a5557611a55614544565b60200260200101518781518110611a6e57611a6e614544565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af691906146c8565b8751805185908110611b0a57611b0a614544565b60200260200101818151611b1e91906146f1565b6001600160601b03169052506001909101905b80611b3b816145c1565b915050611979565b50508080611b50906145c1565b9150506114df565b505050600080611b728c868a606001518b60800151610868565b9150915081611be35760405162461bcd60e51b81526020600482015260436024820152600080516020614cf483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610726565b80611c405760405162461bcd60e51b81526020600482015260396024820152600080516020614cf48339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b6064820152608401610726565b50506000878260200151604051602001611c5b929190614719565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c9084613088565b823514611caf5760405162461bcd60e51b815260040161072690614761565b611cbd8360400135836130a6565b611cd95760405162461bcd60e51b81526004016107269061478e565b6000611d05857f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb613126565b6020840135149150505b9392505050565b611d1e613179565b611d2860006131d3565b565b6000611d3584613225565b823514611d545760405162461bcd60e51b815260040161072690614761565b611d628360200135836130a6565b611d7e5760405162461bcd60e51b81526004016107269061478e565b6000611d05857f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb61325e565b600080611de4611dda897f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb61325e565b88888888886109f2565b5098975050505050505050565b60ca546001600160a01b03163314611e4b5760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c65720000006044820152606401610726565b60665460019060029081161415611e745760405162461bcd60e51b8152600401610726906145dc565b6000611e836020860186613f3c565b9050366000611e9560808801886147b9565b90925090506000611eac6080890160608a01613f3c565b905060cb6000611ebf60208a018a613f3c565b63ffffffff1663ffffffff16815260200190815260200160002054611ee389613296565b14611f225760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b6044820152606401610726565b600060cc81611f3460208b018b613f3c565b63ffffffff1663ffffffff1681526020019081526020016000205414611f955760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b6044820152606401610726565b611fbf7f000000000000000000000000000000000000000000000000000000000000001e856147ff565b63ffffffff164363ffffffff1611156120135760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b6044820152606401610726565b600061203f887f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb6132c6565b90506000806120528387878a8d896109f2565b91509150816120945760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610726565b6040805180820190915263ffffffff43168152602081018290526120c7816120c1368e90038e018e614827565b906132fe565b60cc60006120d860208f018f613f3c565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b826040516121279291906148ad565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146121a85760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b6064820152608401610726565b606654600090600190811614156121d15760405162461bcd60e51b8152600401610726906145dc565b606463ffffffff8516111561223a5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610726565b856001600160401b0316856001600160401b031610156122ab5760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b6064820152608401610726565b42856001600160401b031611156123175760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b6064820152608401610726565b6001600160401b0386161580612343575060c9546001600160401b036401000000009091048116908716115b6123b55760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d700000000000006064820152608401610726565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061243b81613331565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c332259061248f9084906148d7565b60405180910390a260c9546124ab9063ffffffff1660016147ff565b60c980546001600160401b03909816640100000000026001600160601b031990981663ffffffff929092169190911796909617909555505050505050565b6124f1613179565b6001600160a01b0381166125565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610726565b610738816131d3565b600054610100900460ff161580801561257f5750600054600160ff909116105b806125995750303b158015612599575060005460ff166001145b6125fc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610726565b6000805460ff19166001179055801561261f576000805461ff0019166101001790555b61262a856000613344565b612633846131d3565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610d71576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600080611de4611dda897f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb613126565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127659190614478565b6001600160a01b0316336001600160a01b0316146127955760405162461bcd60e51b815260040161072690614495565b60665419811960665419161461280e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610726565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161085d565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e67848051906020012084846040516020016128a89493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090509392505050565b6001600160a01b0381166129555760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610726565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526129da61388f565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612a0d57612a0f565bfe5b5080612a4d5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610726565b505092915050565b6040805180820190915260008082526020820152612a716138ad565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612a0d575080612a4d5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610726565b612af16138cb565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612bd9600080516020614cb48339815191528661455a565b90505b612be58161341c565b9093509150600080516020614cb4833981519152828309831415612c1f576040805180820190915290815260208101919091529392505050565b600080516020614cb4833981519152600182089050612bdc565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612c6b6138f0565b60005b6002811015612e30576000612c84826006614975565b9050848260028110612c9857612c98614544565b60200201515183612caa836000614685565b600c8110612cba57612cba614544565b6020020152848260028110612cd157612cd1614544565b60200201516020015183826001612ce89190614685565b600c8110612cf857612cf8614544565b6020020152838260028110612d0f57612d0f614544565b6020020151515183612d22836002614685565b600c8110612d3257612d32614544565b6020020152838260028110612d4957612d49614544565b6020020151516001602002015183612d62836003614685565b600c8110612d7257612d72614544565b6020020152838260028110612d8957612d89614544565b602002015160200151600060028110612da457612da4614544565b602002015183612db5836004614685565b600c8110612dc557612dc5614544565b6020020152838260028110612ddc57612ddc614544565b602002015160200151600160028110612df757612df7614544565b602002015183612e08836005614685565b600c8110612e1857612e18614544565b60200201525080612e28816145c1565b915050612c6e565b50612e3961390f565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60005b92915050565b600080612e728461349e565b9050808360ff166001901b11611d0f5760405162461bcd60e51b815260206004820152603f6024820152600080516020614cd483398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610726565b6000805b8215612e6057612ef360018461462c565b9092169180612f0181614994565b915050612ee2565b60408051808201909152600080825260208201526102008261ffff1610612f655760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610726565b8161ffff1660011415612f79575081612e60565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612fe257600161ffff871660ff83161c81161415612fc557612fc28484612a55565b93505b612fcf8384612a55565b92506201fffe600192831b169101612f95565b509195945050505050565b6040805180820190915260008082526020820152815115801561301257506020820151155b15613030575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614cb48339815191528460200151613063919061455a565b61307b90600080516020614cb483398151915261462c565b905292915050565b919050565b600061309760208301836149b6565b6001600160401b031692915050565b60006101006130b860608401846149d1565b9050111580156130ce5750610100826080013511155b6131145760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b6044820152606401610726565b61311d82613607565b90921492915050565b6000611d0f827ff601a428e58ffe3787aad8575ebf5f9a62c2aa107e11634ff5596c97a875a5248560405160200161315e9190614a1a565b60405160208183030381529060405280519060200120613704565b6033546001600160a01b03163314611d285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610726565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060406132366020840184613f3c565b63ffffffff16901b61324e60408401602085016149b6565b6001600160401b03161792915050565b6000611d0f827f5be74d2401e6272c0c4f738d300bc7889f303558d33f59348e9f0670655cc11d8560405160200161315e9190614af8565b6000816040516020016132a99190614b8b565b604051602081830303815290604052805190602001209050919050565b6000611d0f827f7828e0724a27909f1ad83e5f4129101ec0b3e0615db2258b814e764ffaf8c6c18560405160200161315e9190614c46565b60008282604051602001613313929190614c54565b60405160208183030381529060405280519060200120905092915050565b6000816040516020016132a991906148d7565b6065546001600160a01b031615801561336557506001600160a01b03821615155b6133e75760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610726565b60668190556040518181523390600080516020614c948339815191529060200160405180910390a2613418826128c7565b5050565b60008080600080516020614cb48339815191526003600080516020614cb483398151915286600080516020614cb4833981519152888909090890506000613492827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614cb4833981519152613727565b91959194509092505050565b6000610100825111156135155760405162461bcd60e51b815260206004820152604460248201819052600080516020614cd4833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610726565b815161352357506000919050565b6000808360008151811061353957613539614544565b0160200151600160f89190911c81901b92505b84518110156135fe5784818151811061356757613567614544565b0160200151600160f89190911c1b91508282116135ea5760405162461bcd60e51b81526020600482015260476024820152600080516020614cd483398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610726565b918117916135f7816145c1565b905061354c565b50909392505050565b600061361161388f565b60408051843560208201526000910160405160208183030381529060405280519060200120905060006136458383876137cf565b90506000613659608087013561010061462c565b83901c90506000805b87608001358110156136f857600060408901356001831b166136b25761368b60608a018a6149d1565b84613695816145c1565b95508181106136a6576136a6614544565b905060200201356136b5565b60005b90506001821b84166136d5576136ce8760018784613874565b94506136e5565b6136e28760018388613874565b94505b50806136f0816145c1565b915050613662565b50919695505050505050565b6040805160208101859052908101839052606081018290526000906080016128a8565b60008061373261390f565b61373a61392d565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612a0d5750826137c45760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610726565b505195945050505050565b6000602082013561385b5760a08201356137eb57506000611d0f565b828260a00135141561383f5760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c61746564006044820152606401610726565b6138548460008460a001358560c00135613874565b9050611d0f565b61386c846000858560200135613874565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806138de61394b565b81526020016138eb61394b565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461073857600080fd5b60006020828403121561399057600080fd5b8135611d0f81613969565b6000602082840312156139ad57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156139ec576139ec6139b4565b60405290565b60405161010081016001600160401b03811182821017156139ec576139ec6139b4565b604051601f8201601f191681016001600160401b0381118282101715613a3d57613a3d6139b4565b604052919050565b600060408284031215613a5757600080fd5b613a5f6139ca565b9050813581526020820135602082015292915050565b600082601f830112613a8657600080fd5b604051604081018181106001600160401b0382111715613aa857613aa86139b4565b8060405250806040840185811115613abf57600080fd5b845b81811015612fe2578035835260209283019201613ac1565b600060808284031215613aeb57600080fd5b613af36139ca565b9050613aff8383613a75565b8152613b0e8360408401613a75565b602082015292915050565b6000806000806101208587031215613b3057600080fd5b84359350613b418660208701613a45565b9250613b508660608701613ad9565b9150613b5f8660e08701613a45565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f840112613b9057600080fd5b5081356001600160401b03811115613ba757600080fd5b602083019150836020828501011115613bbf57600080fd5b9250929050565b803563ffffffff8116811461308357600080fd5b60006001600160401b03821115613bf357613bf36139b4565b5060051b60200190565b600082601f830112613c0e57600080fd5b81356020613c23613c1e83613bda565b613a15565b82815260059290921b84018101918181019086841115613c4257600080fd5b8286015b84811015613c6457613c5781613bc6565b8352918301918301613c46565b509695505050505050565b600082601f830112613c8057600080fd5b81356020613c90613c1e83613bda565b82815260069290921b84018101918181019086841115613caf57600080fd5b8286015b84811015613c6457613cc58882613a45565b835291830191604001613cb3565b600082601f830112613ce457600080fd5b81356020613cf4613c1e83613bda565b82815260059290921b84018101918181019086841115613d1357600080fd5b8286015b84811015613c645780356001600160401b03811115613d365760008081fd5b613d448986838b0101613bfd565b845250918301918301613d17565b60006101808284031215613d6557600080fd5b613d6d6139f2565b905081356001600160401b0380821115613d8657600080fd5b613d9285838601613bfd565b83526020840135915080821115613da857600080fd5b613db485838601613c6f565b60208401526040840135915080821115613dcd57600080fd5b613dd985838601613c6f565b6040840152613deb8560608601613ad9565b6060840152613dfd8560e08601613a45565b6080840152610120840135915080821115613e1757600080fd5b613e2385838601613bfd565b60a0840152610140840135915080821115613e3d57600080fd5b613e4985838601613bfd565b60c0840152610160840135915080821115613e6357600080fd5b50613e7084828501613cd3565b60e08301525092915050565b60008060008060008060a08789031215613e9557600080fd5b8635955060208701356001600160401b0380821115613eb357600080fd5b613ebf8a838b01613b7e565b9097509550859150613ed360408a01613bc6565b94506060890135915080821115613ee957600080fd5b50613ef689828a01613d52565b925050613f0560808801613bc6565b90509295509295509295565b801515811461073857600080fd5b600060208284031215613f3157600080fd5b8135611d0f81613f11565b600060208284031215613f4e57600080fd5b611d0f82613bc6565b60ff8116811461073857600080fd5b600060208284031215613f7857600080fd5b8135611d0f81613f57565b600060a08284031215613f9557600080fd5b50919050565b600060608284031215613f9557600080fd5b60008060008084860360e0811215613fc457600080fd5b85356001600160401b0380821115613fdb57600080fd5b613fe789838a01613f83565b9650613ff68960208a01613f9b565b95506040607f198401121561400a57600080fd5b60808801945060c088013592508083111561402457600080fd5b505061403287828801613c6f565b91505092959194509250565b60008060008060006080868803121561405657600080fd5b8535945060208601356001600160401b038082111561407457600080fd5b61408089838a01613b7e565b909650945084915061409460408901613bc6565b935060608801359150808211156140aa57600080fd5b506140b788828901613d52565b9150509295509295909350565b600081518084526020808501945080840160005b838110156140fd5781516001600160601b0316875295820195908201906001016140d8565b509495945050505050565b604081526000835160408084015261412360808401826140c4565b90506020850151603f1984830301606085015261414082826140c4565b925050508260208301529392505050565b600060e08284031215613f9557600080fd5b600080600060a0848603121561417857600080fd5b83356001600160401b038082111561418f57600080fd5b61419b87838801613f9b565b94506141aa8760208801613f9b565b935060808601359150808211156141c057600080fd5b506141cd86828701614151565b9150509250925092565b600060c08284031215613f9557600080fd5b600080600061014084860312156141ff57600080fd5b61420985856141d7565b92506142188560c08601613f9b565b91506101208401356001600160401b0381111561423457600080fd5b6141cd86828701614151565b600080600080600080610140878903121561425a57600080fd5b61426488886141d7565b955060c08701356001600160401b038082111561428057600080fd5b61428c8a838b01613b7e565b90975095508591506142a060e08a01613bc6565b94506101008901359150808211156142b757600080fd5b506142c489828a01613d52565b925050613f056101208801613bc6565b600080600060a084860312156142e957600080fd5b83356001600160401b038082111561430057600080fd5b61430c87838801613f83565b945061431b8760208801613f9b565b9350608086013591508082111561433157600080fd5b506141cd86828701613d52565b80356001600160401b038116811461308357600080fd5b60008060008060006080868803121561436d57600080fd5b6143768661433e565b94506143846020870161433e565b935061439260408701613bc6565b925060608601356001600160401b038111156143ad57600080fd5b6143b988828901613b7e565b969995985093965092949392505050565b600080600080608085870312156143e057600080fd5b84356143eb81613969565b935060208501356143fb81613969565b9250604085013561440b81613969565b9150606085013561441b81613969565b939692955090935050565b60008060008060008060a0878903121561443f57600080fd5b86356001600160401b038082111561445657600080fd5b6144628a838b01613f9b565b97506020890135915080821115613eb357600080fd5b60006020828403121561448a57600080fd5b8151611d0f81613969565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156144f157600080fd5b8151611d0f81613f11565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261457757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156145b8576145b861457c565b02949350505050565b60006000198214156145d5576145d561457c565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b60006020828403121561462157600080fd5b8151611d0f81613f57565b60008282101561463e5761463e61457c565b500390565b60006020828403121561465557600080fd5b81516001600160c01b0381168114611d0f57600080fd5b60006020828403121561467e57600080fd5b5051919050565b600082198211156146985761469861457c565b500190565b6000602082840312156146af57600080fd5b815167ffffffffffffffff1981168114611d0f57600080fd5b6000602082840312156146da57600080fd5b81516001600160601b0381168114611d0f57600080fd5b60006001600160601b03838116908316818110156147115761471161457c565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561475457815185529382019390820190600101614738565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e198436030181126147d057600080fd5b8301803591506001600160401b038211156147ea57600080fd5b602001915036819003821315613bbf57600080fd5b600063ffffffff80831681851680830382111561481e5761481e61457c565b01949350505050565b60006060828403121561483957600080fd5b604051606081018181106001600160401b038211171561485b5761485b6139b4565b60405261486783613bc6565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff61489582613bc6565b16825260208181013590830152604090810135910152565b60a081016148bb8285614887565b825163ffffffff16606083015260208301516080830152611d0f565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b8181101561494c5782810184015186820160e001528301614930565b8181111561495e57600060e083880101525b50601f01601f19169390930160e001949350505050565b600081600019048311821515161561498f5761498f61457c565b500290565b600061ffff808316818114156149ac576149ac61457c565b6001019392505050565b6000602082840312156149c857600080fd5b611d0f8261433e565b6000808335601e198436030181126149e857600080fd5b8301803591506001600160401b03821115614a0257600080fd5b6020019150600581901b3603821315613bbf57600080fd5b60006020808352608083016001600160401b0380614a378761433e565b1683860152614a4783870161433e565b604082821681880152808801359150601e19883603018212614a6857600080fd5b90870190813583811115614a7b57600080fd5b606093508381023603891315614a9057600080fd5b87840184905293849052908401926000919060a08801835b82811015614aea57863582528787013588830152838701356001600160801b038116808214614ad5578687fd5b83860152509585019590850190600101614aa8565b509998505050505050505050565b60c0810163ffffffff614b0a84613bc6565b168252614b196020840161433e565b6001600160401b03808216602085015280614b366040870161433e565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff80614ba085613bc6565b166020840152614bb26020850161433e565b6001600160401b03808216604086015280614bcf6040880161433e565b16606086015282614be260608801613bc6565b16608086015260808601359250601e19863603018312614c0157600080fd5b918501918235915080821115614c1657600080fd5b50803603851315614c2657600080fd5b60a080850152614c3d60c085018260208501614b62565b95945050505050565b60608101612e608284614887565b825163ffffffff168152602080840151908201526040808401519082015260a08101611d0f6060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220dfbb562a5d1df5f7c354243c191940e038937d5cedb034828e9f93ca983651ae64736f6c634300080c0033","storage":{"0x0":"0xff","0x97":"0x1"}},"0xb7278a61aa25c888815afc32ad3cc52ff24fe575":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636d14a987116100925780636d14a987146102985780637916cea6146102bf5780637ff81a8714610300578063a3db80e214610333578063bf79ce581461035a578063d5254a8c1461036d578063de29fac01461038d578063e8bb9ae6146103ad578063f4e24fe5146103d657600080fd5b8062a1f4cb146100fa57806313542a4e1461013b57806326d941f21461015c578063377ed99d146101715780633fb27952146101a957806347b314e8146101bc5780635f61a884146101fd578063605747d51461021d57806368bccaac1461026b575b600080fd5b610121610108366004611891565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61014e610149366004611891565b6103e9565b604051908152602001610132565b61016f61016a3660046118c4565b610404565b005b61019461017f3660046118c4565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610132565b61016f6101b736600461194f565b61055d565b6101e56101ca3660046119f5565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610132565b61021061020b3660046118c4565b610605565b6040516101329190611a0e565b61023061022b366004611a25565b61063a565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610132565b61027e610279366004611a4f565b6106cd565b60405167ffffffffffffffff199091168152602001610132565b6101e57f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf81565b6102d26102cd366004611a25565b610868565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610132565b61031361030e366004611891565b6108b3565b604080518351815260209384015193810193909352820152606001610132565b6101216103413660046118c4565b6005602052600090815260409020805460019091015482565b61014e610368366004611a97565b610974565b61038061037b366004611af4565b610da4565b6040516101329190611b6c565b61014e61039b366004611891565b60016020526000908152604090205481565b6101e56103bb3660046119f5565b6002602052600090815260409020546001600160a01b031681565b61016f6103e436600461194f565b610fbe565b6001600160a01b031660009081526001602052604090205490565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146104555760405162461bcd60e51b815260040161044c90611bb6565b60405180910390fd5b60ff8116600090815260046020526040902054156104d45760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b606482015260840161044c565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146105a55760405162461bcd60e51b815260040161044c90611bb6565b60006105b0836108b3565b5090506105bd8282611051565b7f73a2b7fb844724b971802ae9b15db094d4b7192df9d7350e14eb466b9b22eb4e836105e8856103e9565b846040516105f893929190611c2a565b60405180910390a1505050565b61060d6117a4565b5060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b604080516060810182526000808252602080830182905282840182905260ff86168252600490529190912080548390811061067757610677611c96565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff831660009081526004602052604081208054829190849081106106f4576106f4611c96565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107bb5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e740000606482015260840161044c565b604081015163ffffffff1615806107e15750806040015163ffffffff168463ffffffff16105b61085f5760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a40161044c565b51949350505050565b6004602052816000526040600020818154811061088457600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b6108bb6117a4565b6001600160a01b03821660008181526003602090815260408083208151808301835281548152600191820154818501529484529091528120549091908061096a5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f7420726567697374657265640000606482015260840161044c565b9094909350915050565b6000336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146109be5760405162461bcd60e51b815260040161044c90611bb6565b60006109ec6109d536869003860160408701611cac565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610a74576040805162461bcd60e51b8152602060048201526024810191909152600080516020611ec383398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b6579606482015260840161044c565b6001600160a01b03851660009081526001602052604090205415610afe5760405162461bcd60e51b81526020600482015260476024820152600080516020611ec383398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a40161044c565b6000818152600260205260409020546001600160a01b031615610b825760405162461bcd60e51b81526020600482015260426024820152600080516020611ec383398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a40161044c565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610bdb918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611cde565b6040516020818303038152906040528051906020012060001c610bfe9190611d29565b9050610c74610c37610c2283610c1c368a90038a0160408b01611cac565b90611290565b610c3136899003890189611cac565b9061131b565b610c3f6113a3565b610c5d610c4e85610c1c611463565b610c31368a90038a018a611cac565b610c6f368a90038a0160808b01611d9b565b611484565b610d0f5760405162461bcd60e51b815260206004820152606c6024820152600080516020611ec383398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c40161044c565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610d939160808a0190611df8565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610dc157610dc16118df565b604051908082528060200260200182016040528015610dea578160200160208202803683370190505b50905060005b84811015610fb5576000868683818110610e0c57610e0c611c96565b919091013560f81c6000818152600460205260409020549092509050801580610e6f575060ff821660009081526004602052604081208054909190610e5357610e53611c96565b600091825260209091200154600160c01b900463ffffffff1686105b15610efc5760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a40161044c565b805b8015610f9f5760ff831660009081526004602052604090208790610f23600184611e42565b81548110610f3357610f33611c96565b600091825260209091200154600160c01b900463ffffffff1611610f8d57610f5c600182611e42565b858581518110610f6e57610f6e611c96565b602002602001019063ffffffff16908163ffffffff1681525050610f9f565b80610f9781611e59565b915050610efe565b5050508080610fad90611e70565b915050610df0565b50949350505050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf16146110065760405162461bcd60e51b815260040161044c90611bb6565b6000611011836108b3565b50905061102682611021836116f1565b611051565b7ff843ecd53a563675e62107be1494fdde4a3d49aeedaf8d88c616d85346e3500e836105e8856103e9565b6110596117a4565b60005b835181101561128a57600084828151811061107957611079611c96565b0160209081015160f81c60008181526004909252604090912054909150806111095760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f74206578697374000000606482015260840161044c565b60ff8216600090815260056020908152604091829020825180840190935280548352600101549082015261113d908661131b565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916111869085611e42565b8154811061119657611196611c96565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156111d75780546001600160c01b031916604083901c178155611273565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061128290611e70565b91505061105c565b50505050565b6112986117a4565b6112a06117be565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156112d3576112d5565bfe5b50806113135760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161044c565b505092915050565b6113236117a4565b61132b6117dc565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156112d35750806113135760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161044c565b6113ab6117fa565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61146b6117a4565b5060408051808201909152600181526002602082015290565b6040805180820182528581526020808201859052825180840190935285835282018390526000916114b361181f565b60005b60028110156116785760006114cc826006611e8b565b90508482600281106114e0576114e0611c96565b602002015151836114f2836000611eaa565b600c811061150257611502611c96565b602002015284826002811061151957611519611c96565b602002015160200151838260016115309190611eaa565b600c811061154057611540611c96565b602002015283826002811061155757611557611c96565b602002015151518361156a836002611eaa565b600c811061157a5761157a611c96565b602002015283826002811061159157611591611c96565b60200201515160016020020151836115aa836003611eaa565b600c81106115ba576115ba611c96565b60200201528382600281106115d1576115d1611c96565b6020020151602001516000600281106115ec576115ec611c96565b6020020151836115fd836004611eaa565b600c811061160d5761160d611c96565b602002015283826002811061162457611624611c96565b60200201516020015160016002811061163f5761163f611c96565b602002015183611650836005611eaa565b600c811061166057611660611c96565b6020020152508061167081611e70565b9150506114b6565b5061168161183e565b60006020826101808560086107d05a03fa90508080156112d35750806116e15760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b604482015260640161044c565b5051151598975050505050505050565b6116f96117a4565b815115801561170a57506020820151155b15611728575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47846020015161176d9190611d29565b611797907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611e42565b905292915050565b919050565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061180d61185c565b815260200161181a61185c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461179f57600080fd5b6000602082840312156118a357600080fd5b6118ac8261187a565b9392505050565b803560ff8116811461179f57600080fd5b6000602082840312156118d657600080fd5b6118ac826118b3565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611918576119186118df565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611947576119476118df565b604052919050565b6000806040838503121561196257600080fd5b61196b8361187a565b915060208084013567ffffffffffffffff8082111561198957600080fd5b818601915086601f83011261199d57600080fd5b8135818111156119af576119af6118df565b6119c1601f8201601f1916850161191e565b915080825287848285010111156119d757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a0757600080fd5b5035919050565b8151815260208083015190820152604081016106c7565b60008060408385031215611a3857600080fd5b611a41836118b3565b946020939093013593505050565b600080600060608486031215611a6457600080fd5b611a6d846118b3565b9250602084013563ffffffff81168114611a8657600080fd5b929592945050506040919091013590565b6000806000838503610160811215611aae57600080fd5b611ab78561187a565b9350610100601f1982011215611acc57600080fd5b602085019250604061011f1982011215611ae557600080fd5b50610120840190509250925092565b600080600060408486031215611b0957600080fd5b833567ffffffffffffffff80821115611b2157600080fd5b818601915086601f830112611b3557600080fd5b813581811115611b4457600080fd5b876020828501011115611b5657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611baa57835163ffffffff1683529284019291840191600101611b88565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611c6c57858101830151858201608001528201611c50565b81811115611c7e576000608083870101525b50601f01601f19169290920160800195945050505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611cbe57600080fd5b611cc66118f5565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611d4657634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611d5c57600080fd5b611d646118f5565b806040840185811115611d7657600080fd5b845b81811015611d90578035845260209384019301611d78565b509095945050505050565b600060808284031215611dad57600080fd5b6040516040810181811067ffffffffffffffff82111715611dd057611dd06118df565b604052611ddd8484611d4b565b8152611dec8460408501611d4b565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611e5457611e54611e2c565b500390565b600081611e6857611e68611e2c565b506000190190565b6000600019821415611e8457611e84611e2c565b5060010190565b6000816000190483118215151615611ea557611ea5611e2c565b500290565b60008219821115611ebd57611ebd611e2c565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a2646970667358221220ddede8559e28f5e5a06bdde4d1bac1435dc9017a2cffbdaed6846a95d536750064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000004268461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a2646970667358221220417e740b15991a84d5959cee174069515fd054ff2b9bf9b349bc13e72db8820064736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc351628eb244ec633d5f21fbd6621e1a683b1181":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061029f5760003560e01c80635df4594611610167578063a50857bf116100ce578063dd8283f311610087578063dd8283f31461071c578063e65797ad1461072f578063f2fde38b146107ab578063f8581191146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b8063a50857bf14610694578063c391425e146106a7578063ca0de882146106c7578063ca4f2d97146106ee578063d72d8dd614610701578063d75b4c881461070957600080fd5b8063886f119511610120578063886f1195146105f35780638da5cb5b1461060c5780639aa1653d146106145780639b5d177b146106335780639e9923c2146106465780639feab8591461066d57600080fd5b80635df45946146105645780636347c9001461058b578063683048351461059e5780636e3b17db146105c5578063715018a6146105d8578063871ef049146105e057600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104ef5780635865c60c14610502578063595c6a67146105225780635ac86ab71461052a5780635b0b829f146105495780635c975abb1461055c57600080fd5b806328f61b311461045c578063296bb0641461046f57806329d1e0c3146104825780632cdd1e86146104955780633998fdd3146104a85780633c2a7f4c146104cf57600080fd5b806313542a4e1161025d57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c4214610415578063268f06e01461043557600080fd5b8062cf2ab5146102a457806303fd3492146102b957806304ec6351146102ec578063054310e6146103175780630cf4b7671461033757806310d67a2f1461034a575b600080fd5b6102b76102b2366004614a0d565b610820565b005b6102d96102c7366004614a4e565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102ff6102fa366004614a79565b610836565b6040516001600160c01b0390911681526020016102e3565b609d5461032a906001600160a01b031681565b6040516102e39190614ab1565b6102b7610345366004614bac565b610a0d565b6102b7610358366004614c21565b610af5565b6102d961036b366004614c21565b6001600160a01b031660009081526099602052604090205490565b6102b7610394366004614a4e565b610ba8565b6103bc6103a7366004614a4e565b609a6020526000908152604090205460ff1681565b60405190151581526020016102e3565b6103df6103da366004614c3e565b610cd3565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102e3565b6102d9610423366004614c71565b609b6020526000908152604090205481565b61032a7f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b57081565b609e5461032a906001600160a01b031681565b61032a61047d366004614a4e565b610d64565b6102b7610490366004614c21565b610df0565b6102b76104a3366004614c21565b610e01565b61032a7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b6104e26104dd366004614c21565b610e12565b6040516102e39190614c8c565b6102b76104fd366004614ce4565b610e91565b610515610510366004614c21565b610eab565b6040516102e39190614d87565b6102b7610f1f565b6103bc610538366004614c71565b6001805460ff9092161b9081161490565b6102b7610557366004614e0c565b610fde565b6001546102d9565b61032a7f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b61032a610599366004614a4e565b61106f565b61032a7f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81565b6102b76105d3366004614e40565b611099565b6102b76110ac565b6102ff6105ee366004614a4e565b6110c0565b60005461032a906201000090046001600160a01b031681565b61032a6110cb565b6096546106219060ff1681565b60405160ff90911681526020016102e3565b6102b7610641366004614f60565b6110e4565b61032a7f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0081565b6102d97f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102b76106a2366004615059565b611108565b6106ba6106b5366004615124565b611126565b6040516102e391906151ce565b6102d97f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a81565b6102b76106fc366004615218565b6111df565b609c546102d9565b6102b76107173660046152fe565b6111f1565b6102b761072a3660046154b1565b611204565b61079e61073d366004614c71565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b6040516102e39190615585565b6102b76107b9366004614c21565b611507565b6102d96107cc3660046155f6565b61157d565b6102b76107df366004614a4e565b6115c4565b6108136107f2366004614c21565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102e391906156ab565b61082861171b565b610832828261178a565b5050565b6000838152609860205260408120805482919084908110610859576108596156b9565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156109465760405162461bcd60e51b81526020600482015260656024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c4015b60405180910390fd5b602081015163ffffffff16158061096c5750806020015163ffffffff168463ffffffff16105b610a015760405162461bcd60e51b81526020600482015260666024820152600080516020615ec083398151915260448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c40161093d565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610a3657610a36614d4f565b14610aa95760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f74207265676973746572656400000000606482015260840161093d565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610aea90849061571c565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061572f565b6001600160a01b0316336001600160a01b031614610b9c5760405162461bcd60e51b815260040161093d9061574c565b610ba581611891565b50565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610bdd903390600401614ab1565b602060405180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e9190615796565b610c3a5760405162461bcd60e51b815260040161093d906157b8565b60015481811614610cae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b606482015260840161093d565b60018190556040518181523390600080516020615f2083398151915290602001610aea565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610d1057610d106156b9565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b0316906347b314e890602401602060405180830381865afa158015610dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061572f565b610df8611997565b610ba5816119f6565b610e09611997565b610ba581611a5f565b6040805180820190915260008082526020820152610d5e610e8c7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610e719291909182526001600160a01b0316602082015260400190565b60405160208183030381529060405280519060200120611ac8565b611b16565b610e9961171b565b610ea584848484611ba6565b50505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff166002811115610f0557610f05614d4f565b6002811115610f1657610f16614d4f565b90525092915050565b60005460405163237dfb4760e11b8152620100009091046001600160a01b0316906346fbf68e90610f54903390600401614ab1565b602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190615796565b610fb15760405162461bcd60e51b815260040161093d906157b8565b60001960018190556040519081523390600080516020615f208339815191529060200160405180910390a2565b610fe6611997565b609654829060ff908116908216106110605760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d4578697374736044820152760e881c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd604a1b606482015260840161093d565b61106a8383612130565b505050565b609c818154811061107f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6110a161171b565b61106a8383836121ce565b6110b4611997565b6110be600061228e565b565b6000610d5e826122e0565b60006110df6064546001600160a01b031690565b905090565b6110ec61171b565b6110fd898989898989898989612349565b505050505050505050565b61111061171b565b61111e868686868686612680565b505050505050565b6060600082516001600160401b0381111561114357611143614ac5565b60405190808252806020026020018201604052801561116c578160200160208202803683370190505b50905060005b83518110156111d75761119e85858381518110611191576111916156b9565b6020026020010151612804565b8282815181106111b0576111b06156b9565b63ffffffff90921660209283029190910190910152806111cf81615816565b915050611172565b509392505050565b6111e761171b565b610832828261292e565b6111f9611997565b61106a838383612995565b600054610100900460ff16158080156112245750600054600160ff909116105b8061123e5750303b15801561123e575060005460ff166001145b6112a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161093d565b6000805460ff1916600117905580156112c4576000805461ff0019166101001790555b825184511480156112d6575081518351145b6113405760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b606482015260840161093d565b6113498961228e565b6113538686612bac565b61135c886119f6565b61136587611a5f565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688841690831617905585549384019095559190920180547f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0090921691909316179091555b84518110156114b6576114a4858281518110611463576114636156b9565b602002602001015185838151811061147d5761147d6156b9565b6020026020010151858481518110611497576114976156b9565b6020026020010151612995565b806114ae81615816565b915050611445565b5080156110fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b61150f611997565b6001600160a01b0381166115745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093d565b610ba58161228e565b60006115bb7f4d404e3276e7ac2163d8ee476afa6a41d1f68fb71f2d8b6546b24e55ce01b72a86868686604051602001610e71959493929190615831565b95945050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061572f565b6001600160a01b0316336001600160a01b03161461166b5760405162461bcd60e51b815260040161093d9061574c565b6001541981196001541916146116e45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b606482015260840161093d565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610aea565b7f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b5706001600160a01b031663bfe107386040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561177657600080fd5b505af1158015610ea5573d6000803e3d6000fd5b600154600290600490811614156117b35760405162461bcd60e51b815260040161093d906158a7565b60005b82811015610ea55760008484838181106117d2576117d26156b9565b90506020020160208101906117e79190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561183257611832614d4f565b600281111561184357611843614d4f565b90525080519091506000611856826122e0565b9050600061186c826001600160c01b0316612c86565b9050611879858583612d52565b5050505050808061188990615816565b9150506117b6565b6001600160a01b03811661191f5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161093d565b7f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6600060029054906101000a90046001600160a01b0316826040516119659291906158da565b60405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336119a06110cb565b6001600160a01b0316146110be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093d565b609d546040517f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c91611a35916001600160a01b039091169084906158da565b60405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546040517f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc991611a9e916001600160a01b039091169084906158da565b60405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d5e611ad5612e3f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b604080518082019091526000808252602082015260008080611b46600080516020615f408339815191528661590a565b90505b611b5281612f66565b9093509150600080516020615f40833981519152828309831415611b8c576040805180820190915290815260208101919091529392505050565b600080516020615f40833981519152600182089050611b49565b60015460029060049081161415611bcf5760405162461bcd60e51b815260040161093d906158a7565b6000611c1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050611c2281613067565b611c925760405162461bcd60e51b81526020600482015260476024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a40161093d565b848314611d015760405162461bcd60e51b81526020600482015260436024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a40161093d565b60005b83811015612127576000858583818110611d2057611d206156b9565b919091013560f81c91503690506000898985818110611d4157611d416156b9565b9050602002810190611d53919061591e565b6040516379a0849160e11b815260ff8616600482015291935091507f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd006001600160a01b03169063f341092290602401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190615967565b63ffffffff168114611e7f5760405162461bcd60e51b81526020600482015260656024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c40161093d565b6000805b828110156120c6576000848483818110611e9f57611e9f6156b9565b9050602002016020810190611eb49190614c21565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff166002811115611eff57611eff614d4f565b6002811115611f1057611f10614d4f565b90525080519091506000611f23826122e0565b905060016001600160c01b03821660ff8b161c811614611fa75760405162461bcd60e51b815260206004820152604460248201819052600080516020615ee0833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a40161093d565b856001600160a01b0316846001600160a01b0316116120525760405162461bcd60e51b81526020600482015260676024820152600080516020615ee083398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c40161093d565b506120b083838f8f8d908e60016120699190615984565b926120769392919061599c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5292505050565b509092506120bf905081615816565b9050611e83565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061212090615816565b9050611d04565b50505050505050565b60ff821660008181526097602090815260409182902084518154928601518487015161ffff908116600160301b0267ffff0000000000001991909216600160201b0265ffffffffffff1990951663ffffffff909316929092179390931716919091179055517f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac906121c2908490615585565b60405180910390a25050565b609e546001600160a01b0316331461224e5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f72000000000000606482015260840161093d565b61106a8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260986020526040812054806122fd5750600092915050565b60008381526098602052604090206123166001836159c6565b81548110612326576123266156b9565b600091825260209091200154600160401b90046001600160c01b03169392505050565b6001805460009190811614156123715760405162461bcd60e51b815260040161093d906158a7565b8389146123f45760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161093d565b60006124003388613549565b905061245f818787808060200260200160405190810160405280939291908181526020016000905b8282101561245457612445604083028601368190038101906159dd565b81526020019060010190612428565b50505050508661367b565b60006124a633838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b905060005b8b811015612671576000609760008f8f858181106124cb576124cb6156b9565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110612538576125386156b9565b602002602001015163ffffffff16111561265e576125d98e8e84818110612561576125616156b9565b9050013560f81c60f81b60f81c84604001518481518110612584576125846156b9565b602002602001015133866020015186815181106125a3576125a36156b9565b60200260200101518d8d888181106125bd576125bd6156b9565b9050604002018036038101906125d391906159dd565b86613d5f565b61265e8989848181106125ee576125ee6156b9565b90506040020160200160208101906126069190614c21565b8f8f85908660016126179190615984565b926126249392919061599c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b508061266981615816565b9150506124ab565b50505050505050505050505050565b6001805460009190811614156126a85760405162461bcd60e51b815260040161093d906158a7565b60006126b43385613549565b905060006126fd33838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250613805915050565b51905060005b888110156127f85760008a8a8381811061271f5761271f6156b9565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110612755576127556156b9565b602002602001015163ffffffff1611156127e55760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a40161093d565b50806127f081615816565b915050612703565b50505050505050505050565b600081815260986020526040812054815b8181101561289657600161282982846159c6565b61283391906159c6565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110612866576128666156b9565b60009182526020909120015463ffffffff1611612884575050610d5e565b8061288e81615816565b915050612815565b5060405162461bcd60e51b815260206004820152606c6024820152600080516020615ec083398151915260448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c40161093d565b60018054600290811614156129555760405162461bcd60e51b815260040161093d906158a7565b61106a3384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061309a92505050565b60965460ff1660c08110612a095760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b606482015260840161093d565b612a148160016159f9565b6096805460ff191660ff9290921691909117905580612a338186612130565b60405160016296b58960e01b031981526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d169063ff694a7790612a8690849088908890600401615a1e565b600060405180830381600087803b158015612aa057600080fd5b505af1158015612ab4573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b1c57600080fd5b505af1158015612b30573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b031692506326d941f29150602401600060405180830381600087803b158015612b9857600080fd5b505af11580156110fd573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015612bd357506001600160a01b03821615155b612c555760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161093d565b60018190556040518181523390600080516020615f208339815191529060200160405180910390a261083282611891565b6060600080612c9484614034565b61ffff166001600160401b03811115612caf57612caf614ac5565b6040519080825280601f01601f191660200182016040528015612cd9576020820181803683370190505b5090506000805b825182108015612cf1575061010081105b15612d48576001811b935085841615612d38578060f81b838381518110612d1a57612d1a6156b9565b60200101906001600160f81b031916908160001a9053508160010191505b612d4181615816565b9050612ce0565b5090949350505050565b600182602001516002811115612d6a57612d6a614d4f565b14612d7457505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16906366acfefe90612dc990889086908890600401615a97565b6020604051808303816000875af1158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0c9190615abe565b90506001600160c01b03811615612e3857612e3885612e33836001600160c01b0316612c86565b61309a565b5050505050565b6000306001600160a01b037f000000000000000000000000c351628eb244ec633d5f21fbd6621e1a683b118116148015612e9857507f0000000000000000000000000000000000000000000000000000000000007a6946145b15612ec257507f3c76dd3e3a11d13343807370b8cba2bef53120b6c35960fabeed299514350ed790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6ec8a99f0e7f9ebde7354a446dcb9423f3af9c58f386a53c59c5b384f9e82d11828401527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a9960608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615f408339815191526003600080516020615f4083398151915286600080516020615f40833981519152888909090890506000612fdc827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615f4083398151915261405f565b91959194509092505050565b600080612ff48461410e565b9050808360ff166001901b116130605760405162461bcd60e51b815260206004820152603f6024820152600080516020615fa083398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161093d565b9392505050565b60965460009081906130819060019060ff1681901b6159c6565b90506130606001600160c01b0384811690831681161490565b6001600160a01b0382166000908152609960205260409020805460018083015460ff1660028111156130ce576130ce614d4f565b1461313b5760405162461bcd60e51b81526020600482015260436024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a40161093d565b60965460009061314f90859060ff16612fe8565b9050600061315c836122e0565b90506001600160c01b0382166131c85760405162461bcd60e51b815260206004820152603b6024820152600080516020615f6083398151915260448201527f70657261746f723a206269746d61702063616e6e6f7420626520300000000000606482015260840161093d565b6131d182613067565b61323c5760405162461bcd60e51b81526020600482015260426024820152600080516020615f6083398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a40161093d565b6132536001600160c01b0383811690831681161490565b6132d55760405162461bcd60e51b81526020600482015260596024820152600080516020615f6083398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527872656420666f72207370656369666965642071756f72756d7360381b608482015260a40161093d565b6001600160c01b03828116198216166132ee8482614277565b6001600160c01b0381166133c05760018501805460ff191660021790556040516351b27a6d60e11b81527f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf6001600160a01b03169063a364f4da90613357908a90600401614ab1565b600060405180830381600087803b15801561337157600080fd5b505af1158015613385573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688169063f4e24fe59061340e908a908a90600401615ae7565b600060405180830381600087803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16925063bd29b8cd915061348e9087908a90600401615b0b565b600060405180830381600087803b1580156134a857600080fd5b505af11580156134bc573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd0016925063bd29b8cd915061350e9087908a90600401615b0b565b600060405180830381600087803b15801561352857600080fd5b505af115801561353c573d6000803e3d6000fd5b5050505050505050505050565b6040516309aa152760e11b81526000906001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168816906313542a4e90613598908690600401614ab1565b602060405180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615b24565b905080610d5e577f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816886001600160a01b031663bf79ce58848461361a87610e12565b6040518463ffffffff1660e01b815260040161363893929190615b3d565b6020604051808303816000875af1158015613657573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130609190615b24565b6020808201516000908152609a909152604090205460ff16156137215760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a40161093d565b42816040015110156137b65760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a40161093d565b602080820180516000908152609a909252604091829020805460ff19166001179055609d5490519183015161106a926001600160a01b03909216916137fe918791879161157d565b8351614437565b61382960405180606001604052806060815260200160608152602001606081525090565b600061387186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff169150612fe89050565b9050600061387e886122e0565b90506001600160c01b0382166138e65760405162461bcd60e51b81526020600482015260396024820152600080516020615f8083398151915260448201527807261746f723a206269746d61702063616e6e6f74206265203603c1b606482015260840161093d565b6138ef82613067565b613951576040805162461bcd60e51b8152602060048201526024810191909152600080516020615f8083398151915260448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f74206578697374606482015260840161093d565b8082166001600160c01b0316156139f55760405162461bcd60e51b81526020600482015260686024820152600080516020615f8083398151915260448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c40161093d565b6001600160c01b0381811690831617613a0e8982614277565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa87604051613a3e919061571c565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff166002811115613a7857613a78614d4f565b14613b91576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff191690836002811115613ad357613ad3614d4f565b021790555050604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf169150639926ee7d90613b28908d908990600401615bbc565b600060405180830381600087803b158015613b4257600080fd5b505af1158015613b56573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f816881690633fb2795290613be1908d908c908c90600401615c30565b600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d16925063255047779150613c65908d908d908d908d90600401615c55565b6000604051808303816000875af1158015613c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cac9190810190615ceb565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000005eb3bc0a489c5a8288765d2336659ebca68fcd00169062bff04d90613d09908c908c908c90600401615d4e565b6000604051808303816000875af1158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d509190810190615d68565b84525050509695505050505050565b6020808301516001600160a01b038082166000818152609990945260409093205491929087161415613ddf5760405162461bcd60e51b81526020600482015260356024820152600080516020615f0083398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b606482015260840161093d565b8760ff16846000015160ff1614613e5c5760405162461bcd60e51b81526020600482015260476024820152600080516020615f0083398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a40161093d565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690635401ed2790604401602060405180830381865afa158015613ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef19190615e01565b9050613efd81856145f1565b6001600160601b0316866001600160601b031611613f905760405162461bcd60e51b81526020600482015260566024820152600080516020615f0083398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a40161093d565b613f9a8885614615565b6001600160601b0316816001600160601b0316106110fd5760405162461bcd60e51b815260206004820152605c6024820152600080516020615f0083398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a40161093d565b6000805b8215610d5e576140496001846159c6565b909216918061405781615e1e565b915050614038565b60008061406a61498d565b6140726149ab565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156140b3576140b5565bfe5b50826141035760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161093d565b505195945050505050565b6000610100825111156141855760405162461bcd60e51b815260206004820152604460248201819052600080516020615fa0833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161093d565b815161419357506000919050565b600080836000815181106141a9576141a96156b9565b0160200151600160f89190911c81901b92505b845181101561426e578481815181106141d7576141d76156b9565b0160200151600160f89190911c1b915082821161425a5760405162461bcd60e51b81526020600482015260476024820152600080516020615fa083398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161093d565b9181179161426781615816565b90506141bc565b50909392505050565b6000828152609860205260409020548061431c576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206143356001846159c6565b81548110614345576143456156b9565b600091825260209091200180549091504363ffffffff908116911614156143895780546001600160401b0316600160401b6001600160c01b03851602178155610ea5565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b1561455157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144779086908690600401615b0b565b602060405180830381865afa158015614494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b89190615e40565b6001600160e01b0319161461106a5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161093d565b826001600160a01b0316614565838361462f565b6001600160a01b03161461106a5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161093d565b60208101516000906127109061460b9061ffff1685615e6a565b6130609190615e99565b60408101516000906127109061460b9061ffff1685615e6a565b600080600061463e858561464b565b915091506111d7816146bb565b6000808251604114156146825760208301516040840151606085015160001a61467687828585614871565b945094505050506146b4565b8251604014156146ac57602083015160408401516146a1868383614954565b9350935050506146b4565b506000905060025b9250929050565b60008160048111156146cf576146cf614d4f565b14156146d85750565b60018160048111156146ec576146ec614d4f565b14156147355760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161093d565b600281600481111561474957614749614d4f565b14156147975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161093d565b60038160048111156147ab576147ab614d4f565b14156148045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161093d565b600481600481111561481857614818614d4f565b1415610ba55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161093d565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b0383111561489e575060009050600361494b565b8460ff16601b141580156148b657508460ff16601c14155b156148c7575060009050600461494b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561491b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166149445760006001925092505061494b565b9150600090505b94509492505050565b6000806001600160ff1b0383168161497160ff86901c601b615984565b905061497f87828885614871565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f8401126149db57600080fd5b5081356001600160401b038111156149f257600080fd5b6020830191508360208260051b85010111156146b457600080fd5b60008060208385031215614a2057600080fd5b82356001600160401b03811115614a3657600080fd5b614a42858286016149c9565b90969095509350505050565b600060208284031215614a6057600080fd5b5035919050565b63ffffffff81168114610ba557600080fd5b600080600060608486031215614a8e57600080fd5b833592506020840135614aa081614a67565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614afd57614afd614ac5565b60405290565b604080519081016001600160401b0381118282101715614afd57614afd614ac5565b604051601f8201601f191681016001600160401b0381118282101715614b4d57614b4d614ac5565b604052919050565b60006001600160401b03831115614b6e57614b6e614ac5565b614b81601f8401601f1916602001614b25565b9050828152838383011115614b9557600080fd5b828260208301376000602084830101529392505050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b8201601f81018413614be557600080fd5b614bf484823560208401614b55565b949350505050565b6001600160a01b0381168114610ba557600080fd5b8035614c1c81614bfc565b919050565b600060208284031215614c3357600080fd5b813561306081614bfc565b60008060408385031215614c5157600080fd5b50508035926020909101359150565b803560ff81168114614c1c57600080fd5b600060208284031215614c8357600080fd5b61306082614c60565b815181526020808301519082015260408101610d5e565b60008083601f840112614cb557600080fd5b5081356001600160401b03811115614ccc57600080fd5b6020830191508360208285010111156146b457600080fd5b60008060008060408587031215614cfa57600080fd5b84356001600160401b0380821115614d1157600080fd5b614d1d888389016149c9565b90965094506020870135915080821115614d3657600080fd5b50614d4387828801614ca3565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614d8357634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614da290840182614d65565b5092915050565b803561ffff81168114614c1c57600080fd5b600060608284031215614dcd57600080fd5b614dd5614adb565b90508135614de281614a67565b8152614df060208301614da9565b6020820152614e0160408301614da9565b604082015292915050565b60008060808385031215614e1f57600080fd5b614e2883614c60565b9150614e378460208501614dbb565b90509250929050565b600080600060408486031215614e5557600080fd5b8335614e6081614bfc565b925060208401356001600160401b03811115614e7b57600080fd5b614e8786828701614ca3565b9497909650939450505050565b60006101008284031215614ea757600080fd5b50919050565b60008083601f840112614ebf57600080fd5b5081356001600160401b03811115614ed657600080fd5b6020830191508360208260061b85010111156146b457600080fd5b600060608284031215614f0357600080fd5b614f0b614adb565b905081356001600160401b03811115614f2357600080fd5b8201601f81018413614f3457600080fd5b614f4384823560208401614b55565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c031215614f7f57600080fd5b89356001600160401b0380821115614f9657600080fd5b614fa28d838e01614ca3565b909b50995060208c0135915080821115614fbb57600080fd5b614fc78d838e01614ca3565b9099509750879150614fdc8d60408e01614e94565b96506101408c0135915080821115614ff357600080fd5b614fff8d838e01614ead565b90965094506101608c013591508082111561501957600080fd5b6150258d838e01614ef1565b93506101808c013591508082111561503c57600080fd5b506150498c828d01614ef1565b9150509295985092959850929598565b600080600080600080610160878903121561507357600080fd5b86356001600160401b038082111561508a57600080fd5b6150968a838b01614ca3565b909850965060208901359150808211156150af57600080fd5b6150bb8a838b01614ca3565b90965094508491506150d08a60408b01614e94565b93506101408901359150808211156150e757600080fd5b506150f489828a01614ef1565b9150509295509295509295565b60006001600160401b0382111561511a5761511a614ac5565b5060051b60200190565b6000806040838503121561513757600080fd5b823561514281614a67565b91506020838101356001600160401b0381111561515e57600080fd5b8401601f8101861361516f57600080fd5b803561518261517d82615101565b614b25565b81815260059190911b820183019083810190888311156151a157600080fd5b928401925b828410156151bf578335825292840192908401906151a6565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561520c57835163ffffffff16835292840192918401916001016151ea565b50909695505050505050565b6000806020838503121561522b57600080fd5b82356001600160401b0381111561524157600080fd5b614a4285828601614ca3565b6001600160601b0381168114610ba557600080fd5b600082601f83011261527357600080fd5b8135602061528361517d83615101565b82815260069290921b840181019181810190868411156152a257600080fd5b8286015b848110156152f357604081890312156152bf5760008081fd5b6152c7614b03565b81356152d281614bfc565b8152818501356152e18161524d565b818601528352918301916040016152a6565b509695505050505050565b600080600060a0848603121561531357600080fd5b61531d8585614dbb565b9250606084013561532d8161524d565b915060808401356001600160401b0381111561534857600080fd5b61535486828701615262565b9150509250925092565b600082601f83011261536f57600080fd5b8135602061537f61517d83615101565b8281526060928302850182019282820191908785111561539e57600080fd5b8387015b858110156153c1576153b48982614dbb565b84529284019281016153a2565b5090979650505050505050565b600082601f8301126153df57600080fd5b813560206153ef61517d83615101565b82815260059290921b8401810191818101908684111561540e57600080fd5b8286015b848110156152f35780356154258161524d565b8352918301918301615412565b600082601f83011261544357600080fd5b8135602061545361517d83615101565b82815260059290921b8401810191818101908684111561547257600080fd5b8286015b848110156152f35780356001600160401b038111156154955760008081fd5b6154a38986838b0101615262565b845250918301918301615476565b600080600080600080600080610100898b0312156154ce57600080fd5b6154d789614c11565b97506154e560208a01614c11565b96506154f360408a01614c11565b955061550160608a01614c11565b94506080890135935060a08901356001600160401b038082111561552457600080fd5b6155308c838d0161535e565b945060c08b013591508082111561554657600080fd5b6155528c838d016153ce565b935060e08b013591508082111561556857600080fd5b506155758b828c01615432565b9150509295985092959890939650565b815163ffffffff16815260208083015161ffff90811691830191909152604092830151169181019190915260600190565b6000604082840312156155c857600080fd5b6155d0614b03565b90506155db82614c60565b815260208201356155eb81614bfc565b602082015292915050565b6000806000806080858703121561560c57600080fd5b843593506020808601356001600160401b0381111561562a57600080fd5b8601601f8101881361563b57600080fd5b803561564961517d82615101565b81815260069190911b8201830190838101908a83111561566857600080fd5b928401925b828410156156915761567f8b856155b6565b8252848201915060408401935061566d565b979a97995050505060408601359560600135949350505050565b60208101610d5e8284614d65565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b818110156156f5576020818501810151868301820152016156d9565b81811115615707576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061306060208301846156cf565b60006020828403121561574157600080fd5b815161306081614bfc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156157a857600080fd5b8151801515811461306057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060001982141561582a5761582a615800565b5060010190565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b8181101561588e578551805160ff1684528501516001600160a01b031685840152948401949183019160010161585d565b5050606086019790975250505050608001529392505050565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601260045260246000fd5b600082615919576159196158f4565b500690565b6000808335601e1984360301811261593557600080fd5b8301803591506001600160401b0382111561594f57600080fd5b6020019150600581901b36038213156146b457600080fd5b60006020828403121561597957600080fd5b815161306081614a67565b6000821982111561599757615997615800565b500190565b600080858511156159ac57600080fd5b838611156159b957600080fd5b5050820193919092039150565b6000828210156159d8576159d8615800565b500390565b6000604082840312156159ef57600080fd5b61306083836155b6565b600060ff821660ff84168060ff03821115615a1657615a16615800565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615a8757865180516001600160a01b031684528601518516868401529585019591830191600101615a57565b50909a9950505050505050505050565b60018060a01b03841681528260208201526060604082015260006115bb60608301846156cf565b600060208284031215615ad057600080fd5b81516001600160c01b038116811461306057600080fd5b6001600160a01b0383168152604060208201819052600090614bf4908301846156cf565b828152604060208201526000614bf460408301846156cf565b600060208284031215615b3657600080fd5b5051919050565b6001600160a01b03841681526101608101615b65602083018580358252602090810135910152565b615b7f606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615be660a08401826156cf565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906115bb9083018486615c07565b60018060a01b0385168152836020820152606060408201526000615c7d606083018486615c07565b9695505050505050565b600082601f830112615c9857600080fd5b81516020615ca861517d83615101565b82815260059290921b84018101918181019086841115615cc757600080fd5b8286015b848110156152f3578051615cde8161524d565b8352918301918301615ccb565b60008060408385031215615cfe57600080fd5b82516001600160401b0380821115615d1557600080fd5b615d2186838701615c87565b93506020850151915080821115615d3757600080fd5b50615d4485828601615c87565b9150509250929050565b8381526040602082015260006115bb604083018486615c07565b60006020808385031215615d7b57600080fd5b82516001600160401b03811115615d9157600080fd5b8301601f81018513615da257600080fd5b8051615db061517d82615101565b81815260059190911b82018301908381019087831115615dcf57600080fd5b928401925b82841015615df6578351615de781614a67565b82529284019290840190615dd4565b979650505050505050565b600060208284031215615e1357600080fd5b81516130608161524d565b600061ffff80831681811415615e3657615e36615800565b6001019392505050565b600060208284031215615e5257600080fd5b81516001600160e01b03198116811461306057600080fd5b60006001600160601b0380831681851681830481118215151615615e9057615e90615800565b02949350505050565b60006001600160601b0380841680615eb357615eb36158f4565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e67657451756f72756d4269745265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c6964617465436875ab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724f5265676973747279436f6f7264696e61746f722e5f72656769737465724f70654269746d61705574696c732e6f72646572656442797465734172726179546f42a2646970667358221220f0150ead1f6d72c2c2d0f94a09f99fdff47ac7b6053fffe101bf6167b129122264736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xc5a5c42992decbae36851359345fe25997f5c42d":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x3f1c547b21f65e10480de3ad8e19faac46c95034","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xcbeaf3bde82155f56486fb5a1072cb8baaf547cc":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a03660046132df565b6103c4565b005b6101a56101b536600461334a565b610494565b6101a56101c8366004613367565b610547565b6101f47f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b57081565b6040516101899190613380565b61021461020f3660046133a6565b610674565b604051908152602001610189565b61023561023036600461334a565b610792565b6040516101899190613449565b6101a561025036600461334a565b610c66565b6101a5610263366004613496565b610cde565b6101a5610db5565b61029361027e3660046134d3565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc96101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b3660046135a3565b610e83565b6101a561031e36600461334a565b610fa4565b6101f47f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6101a561035836600461364d565b61106d565b61021461036b3660046136c3565b6110c1565b6101a561037e36600461334a565b6110f0565b6102146103913660046136f8565b6111c6565b61023561131e565b6101a56103ac36600461334a565b6116e7565b6101a56103bf366004613367565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f6104756020850185613746565b6104856040860160208701613763565b8560a001356119f2565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b919061377e565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061379b565b61054481611a56565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613380565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b891906137e5565b6105d45760405162461bcd60e51b815260040161041590613807565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb819055604051818152339060008051602061403f833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e46020890189613746565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906107139190613763565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4d565b61078886866111c6565b9695505050505050565b606060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613380565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610823919061384f565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b29190613868565b90506001600160c01b038116158061094c57507f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109479190613891565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5e565b90506000805b8251811015610a56577f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b0316633ca5a5f58483815181106109d0576109d06138ae565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a38919061384f565b610a4290836138da565b915080610a4e816138f2565b915050610986565b506000816001600160401b03811115610a7157610a716134f0565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe6138ae565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d1690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b57919061384f565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf5919061390d565b60000151868681518110610c0b57610c0b6138ae565b6001600160a01b039092166020928302919091019091015284610c2d816138f2565b9550508080610c3b906138f2565b915050610b5c565b5050508080610c51906138f2565b915050610aa1565b5090979650505050505050565b336001600160a01b037f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf16146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b81526004016104159061397c565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c20565b610d6b826000611c72565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613380565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2691906137e5565b610e425760405162461bcd60e51b815260040161041590613807565b60001960cb819055604051908152339060008051602061403f8339815191529060200160405180910390a2565b610e77611d46565b610e816000611c20565b565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614610ecb5760405162461bcd60e51b8152600401610415906139ca565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b5701690632e8da82990610f17908590600401613380565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5891906137e5565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da0565b5050565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614610fec5760405162461bcd60e51b8152600401610415906139ca565b6040516351b27a6d60e11b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a364f4da90611038908490600401613380565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d46565b60405163a98fb35560e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9169063a98fb35590611038908490600401613a8f565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b81526004016104159061397c565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6c565b61117d600080611c72565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d86020870187613746565b63ffffffff1663ffffffff16815260200190815260200160002060008560200160208101906112079190613763565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b611316611287602085018561334a565b60208501358361129a6040880188613aa2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613aa2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed792505050565b949350505050565b606060007f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190613891565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611459919061384f565b61146390836138da565b91508061146f816138f2565b9150506113c6565b506000816001600160401b03811115611492576114926134f0565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf6001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190613891565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc919061384f565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d6001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a919061390d565b60000151858581518110611690576116906138ae565b6001600160a01b0390921660209283029190910190910152836116b2816138f2565b94505080806116c0906138f2565b9150506115e1565b505080806116d5906138f2565b9150506114c2565b5090949350505050565b6116ef611d46565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c20565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d4919061377e565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061379b565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b60006001600160a01b037f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf1663c5d2e81f846118f1600143613aef565b8560037f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf6001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119769190613b06565b611981906002613b23565b61198b9190613b65565b6040518563ffffffff1660e01b81526004016119aa9493929190613e29565b602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb91906137e5565b9392505050565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5884826103c4565b50505050565b6060600080611b6c84612014565b61ffff166001600160401b03811115611b8757611b876134f0565b6040519080825280601f01601f191660200182016040528015611bb1576020820181803683370190505b5090506000805b825182108015611bc9575061010081105b156116dd576001811b935085841615611c10578060f81b838381518110611bf257611bf26138ae565b60200101906001600160f81b031916908160001a9053508160010191505b611c19816138f2565b9050611bb8565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9357506001600160a01b03821615155b611d155760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb819055604051818152339060008051602061403f8339815191529060200160405180910390a2610fa082611a56565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf1614611de85760405162461bcd60e51b8152600401610415906139ca565b604051639926ee7d60e01b81526001600160a01b037f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91690639926ee7d90611e369085908590600401613ee4565b600060405180830381600087803b158015611e5057600080fd5b505af1158015611e64573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f1790603401604051602081830303815290604052868861203f565b9150915081611f615760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6c82612068565b9050600080611fa18a604051602001611f8791815260200190565b60405160208183030381529060405288856040015161203f565b9150915081611ff25760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612003611ffe8261212c565b61213f565b955050505050505b95945050505050565b6000805b82156110ea57612029600184613aef565b909216918061203781613f2f565b915050612018565b60006060600061204e8661216e565b905061205b8186866121a0565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906120958361227b565b905060405180608001604052806120c5836000815181106120b8576120b86138ae565b602002602001015161228e565b81526020016120e0836001815181106120b8576120b86138ae565b8152602001612108836002815181106120fb576120fb6138ae565b6020026020010151612295565b8152602001612123836003815181106120fb576120fb6138ae565b90529392505050565b60606110ea61213a83612337565b612364565b6000806000602084511115612155576020612158565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161218a91815260200190565b6040516020818303038152906040529050919050565b6000606060006121af856123e6565b905060008060006121c1848a896124e0565b815192955090935091501580806121d55750815b6122215760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b60008161223d5760405180602001604052806000815250612269565b6122698661224c600188613aef565b8151811061225c5761225c6138ae565b6020026020010151612904565b919b919a509098505050505050505050565b60606110ea61228983612337565b61292e565b60006110ea825b60006021826000015111156122bc5760405162461bcd60e51b815260040161041590613f51565b60008060006122ca85612b14565b9194509250905060008160018111156122e5576122e5613f88565b146123025760405162461bcd60e51b815260040161041590613f51565b600083866020015161231491906138da565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061237485612b14565b91945092509050600081600181111561238f5761238f613f88565b146123d75760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200b85602001518484612e4a565b606060006123f38361227b565b9050600081516001600160401b03811115612410576124106134f0565b60405190808252806020026020018201604052801561245557816020015b604080518082019091526060808252602082015281526020019060019003908161242e5790505b50905060005b82518110156124d857600061248884838151811061247b5761247b6138ae565b6020026020010151612364565b905060405180604001604052808281526020016124a48361227b565b8152508383815181106124b9576124b96138ae565b60200260200101819052505080806124d0906138f2565b91505061245b565b509392505050565b600060608180806124f087612f24565b90506000869050600080612517604051806040016040528060608152602001606081525090565b60005b8c518110156128dc578c8181518110612535576125356138ae565b60200260200101519150828461254b91906138da565b93506125586001886138da565b9650836125b0578151805160209091012085146125ab5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b61266d565b815151602011612612578151805160209091012085146125ab5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b84612620836000015161305e565b1461266d5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b612679601060016138da565b82602001515114156126f2578551841415612693576128dc565b60008685815181106126a7576126a76138ae565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106126d2576126d26138ae565b602002602001015190506126e581613086565b96506001945050506128ca565b6002826020015151141561288257600061270b836130bc565b9050600081600081518110612722576127226138ae565b016020015160f81c90506000612739600283613f9e565b612744906002613fc0565b90506000612755848360ff166130e0565b905060006127638b8a6130e0565b905060006127718383613116565b905060ff851660021480612788575060ff85166003145b156127c25780835114801561279d5750808251145b156127af576127ac818b6138da565b99505b50600160ff1b99506128dc945050505050565b60ff851615806127d5575060ff85166001145b1561282b57825181146127f55750600160ff1b99506128dc945050505050565b61281c886020015160018151811061280f5761280f6138ae565b6020026020010151613086565b9a5097506128ca945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806128d4816138f2565b91505061251a565b50600160ff1b8414866128ef87866130e0565b909e909d50909b509950505050505050505050565b602081015180516060916110ea9161291e90600190613aef565b8151811061247b5761247b6138ae565b606060008061293c84612b14565b9193509091506001905081600181111561295857612958613f88565b1461299f5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129b85790505090506000835b8651811015612b095760208210612a515760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612a8e6040518060400160405280858c60000151612a729190613aef565b8152602001858c60200151612a8791906138da565b9052612b14565b509150915060405180604001604052808383612aaa91906138da565b8152602001848b60200151612abf91906138da565b815250858581518110612ad457612ad46138ae565b6020908102919091010152612aea6001856138da565b9350612af681836138da565b612b0090846138da565b925050506129e5565b508152949350505050565b600080600080846000015111612b675760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612b8c576000600160009450945094505050612e43565b60b78111612c04576000612ba1608083613aef565b905080876000015111612bf25760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612e43915050565b60bf8111612cee576000612c1960b783613aef565b905080876000015111612c6e5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612c8881836138da565b885111612cd25760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612cdd8260016138da565b9650945060009350612e4392505050565b60f78111612d63576000612d0360c083613aef565b905080876000015111612d525760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612e43915050565b6000612d7060f783613aef565b905080876000015111612dc55760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612ddf81836138da565b885111612e275760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612e328260016138da565b9650945060019350612e4392505050565b9193909250565b60606000826001600160401b03811115612e6657612e666134f0565b6040519080825280601f01601f191660200182016040528015612e90576020820181803683370190505b509050805160001415612ea45790506119eb565b6000612eb085876138da565b90506020820160005b612ec4602087613fe3565b811015612efb5782518252612eda6020846138da565b9250612ee76020836138da565b915080612ef3816138f2565b915050612eb9565b5080519151601f959095166020036101000a600019019182169119909416179092525092915050565b6060600082516002612f369190613ff7565b6001600160401b03811115612f4d57612f4d6134f0565b6040519080825280601f01601f191660200182016040528015612f77576020820181803683370190505b50905060005b8351811015613057576004848281518110612f9a57612f9a6138ae565b01602001516001600160f81b031916901c82612fb7836002613ff7565b81518110612fc757612fc76138ae565b60200101906001600160f81b031916908160001a9053506010848281518110612ff257612ff26138ae565b0160200151613004919060f81c613f9e565b60f81b82613013836002613ff7565b61301e9060016138da565b8151811061302e5761302e6138ae565b60200101906001600160f81b031916908160001a9053508061304f816138f2565b915050612f7d565b5092915050565b600060208251101561307257506020015190565b818060200190518101906110ea919061384f565b600060606020836000015110156130a7576130a083613192565b90506130b3565b6130b083612364565b90505b6119eb8161305e565b60606110ea6130db836020015160008151811061247b5761247b6138ae565b612f24565b6060825182106130ff57506040805160208101909152600081526110ea565b6119eb83838486516131119190613aef565b61319d565b6000805b80845111801561312a5750808351115b801561317b5750828181518110613143576131436138ae565b602001015160f81c60f81b6001600160f81b03191684828151811061316a5761316a6138ae565b01602001516001600160f81b031916145b156119eb578061318a816138f2565b91505061311a565b60606110ea826132b1565b6060816131ab81601f6138da565b10156131c95760405162461bcd60e51b815260040161041590614016565b826131d483826138da565b10156131f25760405162461bcd60e51b815260040161041590614016565b6131fc82846138da565b845110156132405760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b60608215801561325f5760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613298578051835260209283019201613280565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612e4a565b600060c082840312156132d957600080fd5b50919050565b60008060e083850312156132f257600080fd5b6132fc84846132c7565b915060c08301356001600160401b0381111561331757600080fd5b8301610180818603121561332a57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b60006020828403121561335c57600080fd5b81356119eb81613335565b60006020828403121561337957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000608082840312156132d957600080fd5b60008060008061010085870312156133bd57600080fd5b6133c786866132c7565b935060c08501356001600160401b03808211156133e357600080fd5b6133ef88838901613394565b945060e087013591508082111561340557600080fd5b818701915087601f83011261341957600080fd5b81358181111561342857600080fd5b88602082850101111561343a57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561348a5783516001600160a01b031683529284019291840191600101613465565b50909695505050505050565b600080604083850312156134a957600080fd5b82356134b481613335565b9150602083013561332a81613335565b60ff8116811461054457600080fd5b6000602082840312156134e557600080fd5b81356119eb816134c4565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613528576135286134f0565b60405290565b60006001600160401b0380841115613548576135486134f0565b604051601f8501601f19908116603f01168101908282118183101715613570576135706134f0565b8160405280935085815286868601111561358957600080fd5b858560208301376000602087830101525050509392505050565b600080604083850312156135b657600080fd5b82356135c181613335565b915060208301356001600160401b03808211156135dd57600080fd5b90840190606082870312156135f157600080fd5b6135f9613506565b82358281111561360857600080fd5b83019150601f8201871361361b57600080fd5b61362a8783356020850161352e565b815260208301356020820152604083013560408201528093505050509250929050565b60006020828403121561365f57600080fd5b81356001600160401b0381111561367557600080fd5b8201601f8101841361368657600080fd5b6113168482356020840161352e565b63ffffffff8116811461054457600080fd5b80356001600160401b03811681146136be57600080fd5b919050565b600080604083850312156136d657600080fd5b82356136e181613695565b91506136ef602084016136a7565b90509250929050565b60008060e0838503121561370b57600080fd5b61371584846132c7565b915060c08301356001600160401b0381111561373057600080fd5b61373c85828601613394565b9150509250929050565b60006020828403121561375857600080fd5b81356119eb81613695565b60006020828403121561377557600080fd5b6119eb826136a7565b60006020828403121561379057600080fd5b81516119eb81613335565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156137f757600080fd5b815180151581146119eb57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60006020828403121561386157600080fd5b5051919050565b60006020828403121561387a57600080fd5b81516001600160c01b03811681146119eb57600080fd5b6000602082840312156138a357600080fd5b81516119eb816134c4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156138ed576138ed6138c4565b500190565b6000600019821415613906576139066138c4565b5060010190565b60006040828403121561391f57600080fd5b604051604081018181106001600160401b0382111715613941576139416134f0565b604052825161394f81613335565b815260208301516bffffffffffffffffffffffff8116811461397057600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613a6857602081850181015186830182015201613a4c565b81811115613a7a576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119eb6020830184613a42565b6000808335601e19843603018112613ab957600080fd5b8301803591506001600160401b03821115613ad357600080fd5b602001915036819003821315613ae857600080fd5b9250929050565b600082821015613b0157613b016138c4565b500390565b600060208284031215613b1857600080fd5b81516119eb81613695565b600063ffffffff80831681851681830481118215151615613b4657613b466138c4565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613b7c57613b7c613b4f565b92169190910492915050565b6000808335601e19843603018112613b9f57600080fd5b83016020810192503590506001600160401b03811115613bbe57600080fd5b8060051b3603831315613ae857600080fd5b8183526000602080850194508260005b85811015613c0b578135613bf381613695565b63ffffffff1687529582019590820190600101613be0565b509495945050505050565b6000808335601e19843603018112613c2d57600080fd5b83016020810192503590506001600160401b03811115613c4c57600080fd5b8060061b3603831315613ae857600080fd5b81835260208301925060008160005b84811015613c9557813586526020808301359087015260409586019590910190600101613c6d565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d0f578284038952613cf08288613b88565b613cfb868284613bd0565b9a87019a9550505090840190600101613cd9565b5091979650505050505050565b6000610180613d2b8384613b88565b828652613d3b8387018284613bd0565b92505050613d4c6020840184613c16565b8583036020870152613d5f838284613c5e565b92505050613d706040840184613c16565b8583036040870152613d83838284613c5e565b92505050613d976060850160608501613c9f565b613db160e0850160e0850180358252602090810135910152565b610120613dc081850185613b88565b86840383880152613dd2848284613bd0565b9350505050610140613de681850185613b88565b86840383880152613df8848284613bd0565b9350505050610160613e0c81850185613b88565b86840383880152613e1e848284613cbf565b979650505050505050565b60006101408635613e3981613695565b63ffffffff168352613e4d602088016136a7565b6001600160401b03808216602086015280613e6a60408b016136a7565b1660408601525050606087013560608401526080870135608084015260a087013560a08401528060c0840152613ead818401600181526000602082015260400190565b63ffffffff871660e08501529050828103610100840152613ece8186613d1c565b91505061200b61012083018463ffffffff169052565b60018060a01b0383168152604060208201526000825160606040840152613f0e60a0840182613a42565b90506020840151606084015260408401516080840152809150509392505050565b600061ffff80831681811415613f4757613f476138c4565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff831680613fb157613fb1613b4f565b8060ff84160691505092915050565b600060ff821660ff841680821015613fda57613fda6138c4565b90039392505050565b600082613ff257613ff2613b4f565b500490565b6000816000190483118215151615614011576140116138c4565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da264697066735822122049822a855fe2dd87be7f744962a0a2eb26adee21bf12cf927354871824dec0c764736f6c634300080c0033","storage":{"0x33":"0xff"}},"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x6356ca026caf21023cb7650068491a5cc11ee8f81fbeb8f52c6780c04b388516","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb7f8bc63bbcad18155201308c8f3540b07f84f5e","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xd5a0359da7b310917d7760385516b2426e86ab7f":{"nonce":0,"balance":"0x8ac7230489e80000","code":"0x","storage":{}},"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x65":"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512","0x66":"0x0","0x97":"0x5ebe2c12a42e721609d1498db50973aeaff9e3c64738181887c534f293093208","0x9d":"0xc4e0","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe6e340d132b5f46d1e472debcd681b2abc16e57e":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b61008036600461083c565b610118565b61005b610093366004610857565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e436600461083c565b61020b565b3480156100f557600080fd5b506100ad610235565b610106610323565b6101166101116103c2565b6103cc565b565b6101206103f0565b6001600160a01b0316336001600160a01b031614156101575761015481604051806020016040528060008152506000610423565b50565b6101546100fe565b6101676103f0565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610423915050565b505050565b6101c36100fe565b60006101da6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103c2565b905090565b6102086100fe565b90565b6102136103f0565b6001600160a01b0316336001600160a01b0316141561015757610154816104f0565b600061023f6103f0565b6001600160a01b0316336001600160a01b03161415610200576101fb6103f0565b61015481604051602401610274919061090a565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052610544565b610154816040516024016102b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052610544565b606061030d838360405180606001604052806027815260200161095a60279139610565565b9392505050565b6001600160a01b03163b151590565b61032b6103f0565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610642565b3660008037600080366000845af43d6000803e8080156103eb573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610448604051806040016040528060048152602001637861623160e01b815250610260565b6104518361066a565b610476604051806040016040528060048152602001633c30b11960e11b815250610260565b6000825111806104835750805b156101c3576104ad604051806040016040528060048152602001637861623360e01b815250610260565b6104c0836001600160a01b03163b6102a3565b6104ca83836102e8565b506101c3604051806040016040528060048152602001631e18588d60e21b815250610260565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105196103f0565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816106aa565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606001600160a01b0384163b6105cd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016103b9565b600080856001600160a01b0316856040516105e8919061093d565b600060405180830381855af49150503d8060008114610623576040519150601f19603f3d011682016040523d82523d6000602084013e610628565b606091505b5091509150610638828286610753565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610414565b6106738161078c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661070f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561076257508161030d565b8251156107725782518084602001fd5b8160405162461bcd60e51b81526004016103b9919061090a565b6001600160a01b0381163b6107f95760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103b9565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610732565b80356001600160a01b038116811461083757600080fd5b919050565b60006020828403121561084e57600080fd5b61030d82610820565b60008060006040848603121561086c57600080fd5b61087584610820565b9250602084013567ffffffffffffffff8082111561089257600080fd5b818601915086601f8301126108a657600080fd5b8135818111156108b557600080fd5b8760208285010111156108c757600080fd5b6020830194508093505050509250925092565b60005b838110156108f55781810151838201526020016108dd565b83811115610904576000848401525b50505050565b60208152600082518060208401526109298160408501602087016108da565b601f01601f19169190910160400192915050565b6000825161094f8184602087016108da565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201db1e2dd48c9fdc5f7cb2488684a94ebe91f6de7e67134bed3c67063bc96705b64736f6c634300080c0033","storage":{"0x0":"0xe7f1725e7734ce288f8367e1bb143e90bb3f05120001","0x1":"0x0","0x32":"0x7322c24752f79c05ffd1e2a6fcb97020c1c264f1","0x64":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x65":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0x322813fd9a801c5507c9de605d63cea4f2ce6c44","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x5fbdb2315678afecb367f032d93f642f64180aa3"}},"0xe7f1725e7734ce288f8367e1bb143e90bb3f0512":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea2646970667358221220f71399fafd06d0e383b21957bcac3bf3986a6a0701bc4c5dc7ee118215f3652364736f6c634300080c0033","storage":{"0x1":"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266","0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722":"0x1"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":68,"balance":"0x21e1809054fa67f07ed","code":"0x","storage":{}},"0xf5059a5d33d5853360d16c683c16e67980206f36":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061006d5760003560e01c8063095ea7b31461007257806318160ddd1461009d57806323b872dd146100af57806340c10f19146100c257806370a08231146100d7578063a9059cbb14610100578063dd62ed3e14610113575b600080fd5b610088610080366004610400565b600192915050565b60405190151581526020015b60405180910390f35b6002545b604051908152602001610094565b6100886100bd36600461042a565b61014c565b6100d56100d0366004610400565b610163565b005b6100a16100e5366004610466565b6001600160a01b031660009081526020819052604090205490565b61008861010e366004610400565b610171565b6100a1610121366004610488565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061015984848461017b565b5060019392505050565b61016d8282610325565b5050565b6000336101598185855b6001600160a01b0383166101e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084015b60405180910390fd5b6001600160a01b0382166102465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016101db565b6001600160a01b0383166000908152602081905260409020548111156102bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016101db565b6001600160a01b038381166000818152602081815260408083208054879003905593861680835291849020805486019055925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03821661037b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101db565b806002600082825461038d91906104bb565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80356001600160a01b03811681146103fb57600080fd5b919050565b6000806040838503121561041357600080fd5b61041c836103e4565b946020939093013593505050565b60008060006060848603121561043f57600080fd5b610448846103e4565b9250610456602085016103e4565b9150604084013590509250925092565b60006020828403121561047857600080fd5b610481826103e4565b9392505050565b6000806040838503121561049b57600080fd5b6104a4836103e4565b91506104b2602084016103e4565b90509250929050565b600082198211156104dc57634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7869d1b65a81f40da4e99688a39ee120b01ef93e81e865bb196d1a6f125866c64736f6c634300080c0033","storage":{}}},"best_block_number":"0x11"} \ No newline at end of file diff --git a/tests/anvil/data/genesis.json b/tests/anvil/data/genesis.json index eb9ccc16..43e9d586 100644 --- a/tests/anvil/data/genesis.json +++ b/tests/anvil/data/genesis.json @@ -26,7 +26,7 @@ } } }, - "number": "11", + "number": "16", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "config": { diff --git a/tests/anvil/data/rollup-avs-deployed-anvil-state.json b/tests/anvil/data/rollup-avs-deployed-anvil-state.json index 88e807e0..816e79ed 100644 --- a/tests/anvil/data/rollup-avs-deployed-anvil-state.json +++ b/tests/anvil/data/rollup-avs-deployed-anvil-state.json @@ -1 +1 @@ -{"block":{"number":"0x3","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x665776d9","gas_limit":"0x1c9c380","basefee":"0x2df96867","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x0","code":"0x","storage":{}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x700b6a60ce7eaaea56f065753d8dcb9653dbad35":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061006b5760003560e01c8063204e1c7a14610070578063715018a6146100a65780637eff275e146100bd5780638da5cb5b146100dd5780639623609d146100fb57806399a88ec41461010e578063f2fde38b1461012e578063f3b7dead1461014e575b600080fd5b34801561007c57600080fd5b5061009061008b366004610483565b61016e565b60405161009d91906104a7565b60405180910390f35b3480156100b257600080fd5b506100bb6101ff565b005b3480156100c957600080fd5b506100bb6100d83660046104bb565b610213565b3480156100e957600080fd5b506000546001600160a01b0316610090565b6100bb61010936600461050a565b61027d565b34801561011a57600080fd5b506100bb6101293660046104bb565b6102ec565b34801561013a57600080fd5b506100bb610149366004610483565b610320565b34801561015a57600080fd5b50610090610169366004610483565b61039e565b6000806000836001600160a01b031660405161019490635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101cf576040519150601f19603f3d011682016040523d82523d6000602084013e6101d4565b606091505b5091509150816101e357600080fd5b808060200190518101906101f791906105e0565b949350505050565b6102076103c4565b610211600061041e565b565b61021b6103c4565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102479084906004016104a7565b600060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050505050565b6102856103c4565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b590869086906004016105fd565b6000604051808303818588803b1580156102ce57600080fd5b505af11580156102e2573d6000803e3d6000fd5b5050505050505050565b6102f46103c4565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102479084906004016104a7565b6103286103c4565b6001600160a01b0381166103925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039b8161041e565b50565b6000806000836001600160a01b0316604051610194906303e1469160e61b815260040190565b6000546001600160a01b031633146102115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461039b57600080fd5b60006020828403121561049557600080fd5b81356104a08161046e565b9392505050565b6001600160a01b0391909116815260200190565b600080604083850312156104ce57600080fd5b82356104d98161046e565b915060208301356104e98161046e565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561051f57600080fd5b833561052a8161046e565b9250602084013561053a8161046e565b9150604084013567ffffffffffffffff8082111561055757600080fd5b818601915086601f83011261056b57600080fd5b81358181111561057d5761057d6104f4565b604051601f8201601f19908116603f011681019083821181831017156105a5576105a56104f4565b816040528281528960208487010111156105be57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f257600080fd5b81516104a08161046e565b60018060a01b038316815260006020604081840152835180604085015260005b818110156106395785810183015185820160600152820161061d565b8181111561064b576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200eedf560ba2321bf32a2a337105c715afa9340aaee48022babd6824214e3416964736f6c634300080c0033","storage":{"0x0":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x8ce361602b935680e8dec218b820ff5056beb7af":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x65":"0xa15bb66138824a1c7167f5e85b957d04dd34e468","0x66":"0x0","0xcd":"0x4200000000000000000000000000000000","0xce":"0xa0ee7a142d267c1f36714e4a8f75612f20a797200000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb19b36b1456e65e3a6d514d3f715f204bd59f431","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x700b6a60ce7eaaea56f065753d8dcb9653dbad35"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":4,"balance":"0x21e19d1b6434383cd99","code":"0x","storage":{}},"0xa15bb66138824a1c7167f5e85b957d04dd34e468":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212208a1326bc5b69f9ecf1c6c0d757e50103bb848a7d9d4383fa44ee54e7b71a39a464736f6c634300080c0033","storage":{"0x1":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0xa1d47ef1a6916dfbe65888f77739da164feb3a9a6afc95ee57e8b3e85ea5e955":"0x1"}},"0xb19b36b1456e65e3a6d514d3f715f204bd59f431":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122088bae87d6bae274768571c4de75678f928a7db4743daddc1635592c48525276d64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}}},"best_block_number":"0x3"} \ No newline at end of file +{"block":{"number":"0x2","coinbase":"0x0000000000000000000000000000000000000000","timestamp":"0x669edfbf","gas_limit":"0x1c9c380","basefee":"0x345fc10f","difficulty":"0x0","prevrandao":"0x0000000000000000000000000000000000000000000000000000000000000000","blob_excess_gas_and_price":{"excess_blob_gas":0,"blob_gasprice":1}},"accounts":{"0x0000000000000000000000000000000000000000":{"nonce":0,"balance":"0x0","code":"0x","storage":{}},"0x14dc79964da2c08b23698b3d3cc7ca32193d9955":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x4e59b44847b379578588920ca78fbf26c0b4956c":{"nonce":0,"balance":"0x0","code":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3","storage":{}},"0x700b6a60ce7eaaea56f065753d8dcb9653dbad35":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061006b5760003560e01c8063204e1c7a14610070578063715018a6146100a65780637eff275e146100bd5780638da5cb5b146100dd5780639623609d146100fb57806399a88ec41461010e578063f2fde38b1461012e578063f3b7dead1461014e575b600080fd5b34801561007c57600080fd5b5061009061008b366004610483565b61016e565b60405161009d91906104a7565b60405180910390f35b3480156100b257600080fd5b506100bb6101ff565b005b3480156100c957600080fd5b506100bb6100d83660046104bb565b610213565b3480156100e957600080fd5b506000546001600160a01b0316610090565b6100bb61010936600461050a565b61027d565b34801561011a57600080fd5b506100bb6101293660046104bb565b6102ec565b34801561013a57600080fd5b506100bb610149366004610483565b610320565b34801561015a57600080fd5b50610090610169366004610483565b61039e565b6000806000836001600160a01b031660405161019490635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101cf576040519150601f19603f3d011682016040523d82523d6000602084013e6101d4565b606091505b5091509150816101e357600080fd5b808060200190518101906101f791906105e0565b949350505050565b6102076103c4565b610211600061041e565b565b61021b6103c4565b6040516308f2839760e41b81526001600160a01b03831690638f283970906102479084906004016104a7565b600060405180830381600087803b15801561026157600080fd5b505af1158015610275573d6000803e3d6000fd5b505050505050565b6102856103c4565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b590869086906004016105fd565b6000604051808303818588803b1580156102ce57600080fd5b505af11580156102e2573d6000803e3d6000fd5b5050505050505050565b6102f46103c4565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe6906102479084906004016104a7565b6103286103c4565b6001600160a01b0381166103925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039b8161041e565b50565b6000806000836001600160a01b0316604051610194906303e1469160e61b815260040190565b6000546001600160a01b031633146102115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461039b57600080fd5b60006020828403121561049557600080fd5b81356104a08161046e565b9392505050565b6001600160a01b0391909116815260200190565b600080604083850312156104ce57600080fd5b82356104d98161046e565b915060208301356104e98161046e565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561051f57600080fd5b833561052a8161046e565b9250602084013561053a8161046e565b9150604084013567ffffffffffffffff8082111561055757600080fd5b818601915086601f83011261056b57600080fd5b81358181111561057d5761057d6104f4565b604051601f8201601f19908116603f011681019083821181831017156105a5576105a56104f4565b816040528281528960208487010111156105be57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f257600080fd5b81516104a08161046e565b60018060a01b038316815260006020604081840152835180604085015260005b818110156106395785810183015185820160600152820161061d565b8181111561064b576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212200eedf560ba2321bf32a2a337105c715afa9340aaee48022babd6824214e3416964736f6c634300080c0033","storage":{"0x0":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720"}},"0x70997970c51812dc3a010c7d01b50e0d17dc79c8":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x8ce361602b935680e8dec218b820ff5056beb7af":{"nonce":1,"balance":"0x0","code":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106ed565b610118565b61005b610093366004610708565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106ed565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108076027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb6104f5565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a48361051d565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a16101548161055d565b60606104258461028c565b6104805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610331565b600080856001600160a01b03168560405161049b91906107b7565b600060405180830381855af49150503d80600081146104d6576040519150601f19603f3d011682016040523d82523d6000602084013e6104db565b606091505b50915091506104eb828286610606565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6105268161063f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105c25760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60608315610615575081610285565b8251156106255782518084602001fd5b8160405162461bcd60e51b815260040161033191906107d3565b6106488161028c565b6106aa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105e5565b80356001600160a01b03811681146106e857600080fd5b919050565b6000602082840312156106ff57600080fd5b610285826106d1565b60008060006040848603121561071d57600080fd5b610726846106d1565b9250602084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b87602082850101111561077857600080fd5b6020830194508093505050509250925092565b60005b838110156107a657818101518382015260200161078e565b838111156103c05750506000910152565b600082516107c981846020870161078b565b9190910192915050565b60208152600082518060208401526107f281604085016020870161078b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ab35762b4d1f75b1e263a7d35551d76364ebe42ec4dea28ea9653eb442534bbd64736f6c634300080c0033","storage":{"0x0":"0x1","0x33":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0x65":"0xa15bb66138824a1c7167f5e85b957d04dd34e468","0x66":"0x0","0xcd":"0x4200000000000000000000000000000000","0xce":"0xa0ee7a142d267c1f36714e4a8f75612f20a797200000000000000000","0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc":"0xb19b36b1456e65e3a6d514d3f715f204bd59f431","0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103":"0x700b6a60ce7eaaea56f065753d8dcb9653dbad35"}},"0x90f79bf6eb2c4f870365e785982e1f101e93b906":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x976ea74026e726554db657fa54763abd0c3a0aa9":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}},"0xa0ee7a142d267c1f36714e4a8f75612f20a79720":{"nonce":4,"balance":"0x21e19cfcb135bdd6849","code":"0x","storage":{}},"0xa15bb66138824a1c7167f5e85b957d04dd34e468":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212208a1326bc5b69f9ecf1c6c0d757e50103bb848a7d9d4383fa44ee54e7b71a39a464736f6c634300080c0033","storage":{"0x1":"0xa0ee7a142d267c1f36714e4a8f75612f20a79720","0xa1d47ef1a6916dfbe65888f77739da164feb3a9a6afc95ee57e8b3e85ea5e955":"0x1"}},"0xb19b36b1456e65e3a6d514d3f715f204bd59f431":{"nonce":1,"balance":"0x0","code":"0x608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f89d18bf146103ea578063fabc1cbc1461041157600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e636600461382f565b610424565b005b6101eb6101fb36600461384c565b6104e0565b6101eb61020e36600461387d565b61060d565b6101eb6102213660046138d5565b6106fe565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa9190613923565b6101eb61025b36600461394e565b6107a8565b61027361026e36600461397b565b6107bb565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108da565b6102c46102af366004613a1e565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e4610994565b604080518251815260209283015192810192909252016101aa565b6101eb6109b7565b6101eb610315366004613a41565b6109cb565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a9a565b610b11565b6101eb61035f366004613be8565b610c61565b610273610372366004613cbc565b610d45565b610273610385366004613cef565b610d76565b6101c061039836600461384c565b610ecf565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd36600461382f565b610eec565b61019c600081565b6102737f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb81565b6101eb61041f36600461384c565b610f62565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049b9190613d33565b6001600160a01b0316336001600160a01b0316146104d45760405162461bcd60e51b81526004016104cb90613d50565b60405180910390fd5b6104dd8161113c565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610510903390600401613923565b602060405180830381865afa15801561052d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190613d9a565b61056d5760405162461bcd60e51b81526004016104cb90613dbc565b606654818116146105e15760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104cb565b60668190556040518181523390600080516020614436833981519152906020015b60405180910390a250565b610615611233565b60ce546001600160401b031661062e6020830183613e04565b6001600160401b0316146106545760405162461bcd60e51b81526004016104cb90613e1f565b6106616020820182613e04565b61066c906001613e5f565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104dd61069d6040830183613e8a565b808060200260200160405190810160405280939291908181526020016000905b828210156106e9576106da60608302860136819003810190613ed9565b815260200190600101906106bd565b505050505060ca61128d90919063ffffffff16565b606654600190600290811614156107275760405162461bcd60e51b81526004016104cb90613ef5565b61075d610754847f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb611496565b60ca90846114e9565b6107795760405162461bcd60e51b81526004016104cb90613f28565b6107a36107896020850185613f50565b6107996040860160208701613e04565b8560a001356118d1565b505050565b6107b0611233565b6104dd60ca82611937565b60006060850135158015906107d35750608085013515155b61081a5760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104cb565b600060978161082c6020890189613f50565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061085b9190613e04565b6001600160401b031681526020810191909152604001600020549050806108c657826108bb5760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104cb565b6108c68685856119f0565b6108d08686610d76565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e9061090a903390600401613923565b602060405180830381865afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b9190613d9a565b6109675760405162461bcd60e51b81526004016104cb90613dbc565b600019606681905560405190815233906000805160206144368339815191529060200160405180910390a2565b61099c613706565b506040805180820190915260cb54815260cc54602082015290565b6109bf611233565b6109c96000611a01565b565b606654600090600190811614156109f45760405162461bcd60e51b81526004016104cb90613ef5565b60ce546001600160401b0316610a0d6020850185613e04565b6001600160401b031614610a335760405162461bcd60e51b81526004016104cb90613e1f565b610a60610754847f781d9e1d554bbbce73f8c30a48d3bef8859ed7769bb706516cb032c15fd1bfeb611a53565b610a7c5760405162461bcd60e51b81526004016104cb90613f28565b610a896020840184613e04565b610a94906001613e5f565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556107a3610ac56040850185613e8a565b808060200260200160405190810160405280939291908181526020016000905b828210156106e957610b0260608302860136819003810190613ed9565b81526020019060010190610ae5565b600054610100900460ff1615808015610b315750600054600160ff909116105b80610b4b5750303b158015610b4b575060005460ff166001145b610bae5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104cb565b6000805460ff191660011790558015610bd1576000805461ff0019166101001790555b610bdc826000611a8b565b610be584611a01565b610bf060ca86611937565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c5a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610cbd5760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104cb565b60cd546001600160801b031615610d165760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104cb565b610d2160ca8361128d565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d896020870187613f50565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610db89190613e04565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610e285760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104cb565b610ec7610e38602085018561382f565b602085013583610e4b6040880188613f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8d925050506060890189613f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b6392505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d70565b610ef4611233565b6001600160a01b038116610f595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104cb565b6104dd81611a01565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190613d33565b6001600160a01b0316336001600160a01b0316146110095760405162461bcd60e51b81526004016104cb90613d50565b6066541981196066541916146110825760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104cb565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610602565b60007f39f5bd282c4492d44b1f1259abf4568422868c99b5a7f3e434702b453ab83e678480519060200120848460405160200161111c9493929190938452602084019290925260601b6001600160601b0319166040830152605482015260740190565b6040516020818303038152906040528051906020012090505b9392505050565b6001600160a01b0381166111ca5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104cb565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104cb565b611295613720565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b845181101561145b578481815181106112dc576112dc613fb1565b6020026020010151935060006113078560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156113735760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104cb565b60208601516113828286613fc7565b61138c9190613fef565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166113d75785516113d0908690611c99565b9450611403565b60208601516001600160801b0316611403576114006113f98760000151611d30565b8690611c99565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061145390614011565b9150506112c1565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b6000611135827f5be74d2401e6272c0c4f738d300bc7889f303558d33f59348e9f0670655cc11d856040516020016114ce919061402c565b60405160208183030381529060405280519060200120611dbf565b6040805180820190915260008082526020820181905260038501549091906001600160801b03168061155d5760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104cb565b60006115698580614096565b90506001600160401b0381111561158257611582613af4565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b50905060005b6115bb8680614096565b90508110156117945761160e6115d18780614096565b838181106115e1576115e1613fb1565b9050604002018036038101906115f791906140df565b805160009081526020918201519091526040902090565b82828151811061162057611620613fb1565b602090810291909101015280156116b7578161163d6001836140fb565b8151811061164d5761164d613fb1565b602002602001015160001c82828151811061166a5761166a613fb1565b602002602001015160001c116116b75760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104cb565b60008860000160008484815181106116d1576116d1613fb1565b6020908102919091018101518252810191909152604001600020546001600160801b031690508061173f5760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104cb565b61177261174c8880614096565b8481811061175c5761175c613fb1565b9050604002018036038101906113f991906140df565b945061177e81856140fb565b935050808061178c90614011565b9150506115b1565b506117c26117a184611d30565b6040805180820190915260018a0154815260028a0154602082015290611c99565b92506000806117f588866117de368b90038b0160208c01614181565b6117f0368c90038c0160a08d016140df565b611de2565b91509150816118465760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104cb565b8061188a5760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104cb565b60038901546064906118ae906001600160801b03600160801b8204811691166141c0565b6118b89190614205565b6001600160801b03169093101598975050505050505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156119a35760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104cb565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b816119fb84826106fe565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611135827ff601a428e58ffe3787aad8575ebf5f9a62c2aa107e11634ff5596c97a875a524856040516020016114ce919061422b565b6065546001600160a01b0316158015611aac57506001600160a01b03821615155b611b2e5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104cb565b606681905560405181815233906000805160206144368339815191529060200160405180910390a2611b5f8261113c565b5050565b6040516001600160601b0319606087901b16602082015260009081908190611b9e906034016040516020818303038152906040528688611f41565b9150915081611be85760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104cb565b6000611bf382611f6a565b9050600080611c288a604051602001611c0e91815260200190565b604051602081830303815290604052888560400151611f41565b9150915081611c795760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104cb565b611c8a611c858261202e565b612041565b9b9a5050505050505050505050565b611ca1613706565b611ca9613740565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611ce857611cea565bfe5b5080611d285760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104cb565b505092915050565b611d38613706565b8151158015611d4957506020820151155b15611d67575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206144568339815191528460200151611d9a9190614303565b611db2906000805160206144568339815191526140fb565b905292915050565b919050565b60408051602081018590529081018390526060810182905260009060800161111c565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611e2a57611e2a613fb1565b60200201518951600160200201518a60200151600060028110611e4f57611e4f613fb1565b60200201518b60200151600160028110611e6b57611e6b613fb1565b602090810291909101518c518d830151604051611ec89a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611eeb9190614303565b9050611f33611efd6113f98884612070565b611f056120ec565b611f29611f1a85611f146121ac565b90612070565b611f238c6121cd565b90611c99565b886201d4c0612251565b909890975095505050505050565b600060606000611f5086612475565b9050611f5d8186866124a7565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f9783612582565b90506040518060800160405280611fc783600081518110611fba57611fba613fb1565b6020026020010151612595565b8152602001611fe283600181518110611fba57611fba613fb1565b815260200161200a83600281518110611ffd57611ffd613fb1565b602002602001015161259c565b815260200161202583600381518110611ffd57611ffd613fb1565b90529392505050565b6060610d7061203c8361263e565b61266b565b600080600060208451111561205757602061205a565b83515b60209485015194036008029390931c9392505050565b612078613706565b61208061375e565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611ce8575080611d285760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104cb565b6120f461377c565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6121b4613706565b5060408051808201909152600181526002602082015290565b6121d5613706565b600080806121f160008051602061445683398151915286614303565b90505b6121fd816126f6565b9093509150600080516020614456833981519152828309831415612237576040805180820190915290815260208101919091529392505050565b6000805160206144568339815191526001820890506121f4565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906122836137a1565b60005b600281101561244857600061229c826006614317565b90508482600281106122b0576122b0613fb1565b602002015151836122c2836000614336565b600c81106122d2576122d2613fb1565b60200201528482600281106122e9576122e9613fb1565b602002015160200151838260016123009190614336565b600c811061231057612310613fb1565b602002015283826002811061232757612327613fb1565b602002015151518361233a836002614336565b600c811061234a5761234a613fb1565b602002015283826002811061236157612361613fb1565b602002015151600160200201518361237a836003614336565b600c811061238a5761238a613fb1565b60200201528382600281106123a1576123a1613fb1565b6020020151602001516000600281106123bc576123bc613fb1565b6020020151836123cd836004614336565b600c81106123dd576123dd613fb1565b60200201528382600281106123f4576123f4613fb1565b60200201516020015160016002811061240f5761240f613fb1565b602002015183612420836005614336565b600c811061243057612430613fb1565b6020020152508061244081614011565b915050612286565b506124516137c0565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6060818051906020012060405160200161249191815260200190565b6040516020818303038152906040529050919050565b6000606060006124b685612778565b905060008060006124c8848a89612872565b815192955090935091501580806124dc5750815b6125285760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104cb565b6000816125445760405180602001604052806000815250612570565b612570866125536001886140fb565b8151811061256357612563613fb1565b6020026020010151612c96565b919b919a509098505050505050505050565b6060610d706125908361263e565b612cc0565b6000610d70825b60006021826000015111156125c35760405162461bcd60e51b81526004016104cb9061434e565b60008060006125d185612ea6565b9194509250905060008160018111156125ec576125ec614385565b146126095760405162461bcd60e51b81526004016104cb9061434e565b600083866020015161261b9190614336565b805190915060208410156108d05760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061267b85612ea6565b91945092509050600081600181111561269657612696614385565b146126de5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104cb565b6126ed856020015184846131dc565b95945050505050565b6000808060008051602061445683398151915260036000805160206144568339815191528660008051602061445683398151915288890909089050600061276c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206144568339815191526132ba565b91959194509092505050565b6060600061278583612582565b9050600081516001600160401b038111156127a2576127a2613af4565b6040519080825280602002602001820160405280156127e757816020015b60408051808201909152606080825260208201528152602001906001900390816127c05790505b50905060005b825181101561286a57600061281a84838151811061280d5761280d613fb1565b602002602001015161266b565b9050604051806040016040528082815260200161283683612582565b81525083838151811061284b5761284b613fb1565b602002602001018190525050808061286290614011565b9150506127ed565b509392505050565b6000606081808061288287613362565b905060008690506000806128a9604051806040016040528060608152602001606081525090565b60005b8c51811015612c6e578c81815181106128c7576128c7613fb1565b6020026020010151915082846128dd9190614336565b93506128ea600188614336565b9650836129425781518051602090910120851461293d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104cb565b6129ff565b8151516020116129a45781518051602090910120851461293d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104cb565b846129b2836000015161349c565b146129ff5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104cb565b612a0b60106001614336565b8260200151511415612a84578551841415612a2557612c6e565b6000868581518110612a3957612a39613fb1565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612a6457612a64613fb1565b60200260200101519050612a77816134c4565b9650600194505050612c5c565b60028260200151511415612c14576000612a9d836134fa565b9050600081600081518110612ab457612ab4613fb1565b016020015160f81c90506000612acb60028361439b565b612ad69060026143bd565b90506000612ae7848360ff1661351e565b90506000612af58b8a61351e565b90506000612b038383613554565b905060ff851660021480612b1a575060ff85166003145b15612b5457808351148015612b2f5750808251145b15612b4157612b3e818b614336565b99505b50600160ff1b9950612c6e945050505050565b60ff85161580612b67575060ff85166001145b15612bbd5782518114612b875750600160ff1b9950612c6e945050505050565b612bae8860200151600181518110612ba157612ba1613fb1565b60200260200101516134c4565b9a509750612c5c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104cb565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104cb565b80612c6681614011565b9150506128ac565b50600160ff1b841486612c81878661351e565b909e909d50909b509950505050505050505050565b60208101518051606091610d7091612cb0906001906140fb565b8151811061280d5761280d613fb1565b6060600080612cce84612ea6565b91935090915060019050816001811115612cea57612cea614385565b14612d315760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104cb565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612d4a5790505090506000835b8651811015612e9b5760208210612de35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104cb565b600080612e206040518060400160405280858c60000151612e0491906140fb565b8152602001858c60200151612e199190614336565b9052612ea6565b509150915060405180604001604052808383612e3c9190614336565b8152602001848b60200151612e519190614336565b815250858581518110612e6657612e66613fb1565b6020908102919091010152612e7c600185614336565b9350612e888183614336565b612e929084614336565b92505050612d77565b508152949350505050565b600080600080846000015111612ef95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104cb565b6020840151805160001a607f8111612f1e5760006001600094509450945050506131d5565b60b78111612f96576000612f336080836140fb565b905080876000015111612f845760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104cb565b600195509350600092506131d5915050565b60bf8111613080576000612fab60b7836140fb565b9050808760000151116130005760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104cb565b600183015160208290036101000a900461301a8183614336565b8851116130645760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104cb565b61306f826001614336565b96509450600093506131d592505050565b60f781116130f557600061309560c0836140fb565b9050808760000151116130e45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104cb565b6001955093508492506131d5915050565b600061310260f7836140fb565b9050808760000151116131575760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104cb565b600183015160208290036101000a90046131718183614336565b8851116131b95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104cb565b6131c4826001614336565b96509450600193506131d592505050565b9193909250565b60606000826001600160401b038111156131f8576131f8613af4565b6040519080825280601f01601f191660200182016040528015613222576020820181803683370190505b509050805160001415613236579050611135565b60006132428587614336565b90506020820160005b6132566020876143e0565b81101561328d578251825261326c602084614336565b9250613279602083614336565b91508061328581614011565b91505061324b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806132c56137c0565b6132cd6137de565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611ce85750826133575760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104cb565b505195945050505050565b60606000825160026133749190614317565b6001600160401b0381111561338b5761338b613af4565b6040519080825280601f01601f1916602001820160405280156133b5576020820181803683370190505b50905060005b83518110156134955760048482815181106133d8576133d8613fb1565b01602001516001600160f81b031916901c826133f5836002614317565b8151811061340557613405613fb1565b60200101906001600160f81b031916908160001a905350601084828151811061343057613430613fb1565b0160200151613442919060f81c61439b565b60f81b82613451836002614317565b61345c906001614336565b8151811061346c5761346c613fb1565b60200101906001600160f81b031916908160001a9053508061348d81614011565b9150506133bb565b5092915050565b60006020825110156134b057506020015190565b81806020019051810190610d7091906143f4565b600060606020836000015110156134e5576134de836135d0565b90506134f1565b6134ee8361266b565b90505b6111358161349c565b6060610d70613519836020015160008151811061280d5761280d613fb1565b613362565b60608251821061353d5750604080516020810190915260008152610d70565b611135838384865161354f91906140fb565b6135db565b6000805b8084511180156135685750808351115b80156135b9575082818151811061358157613581613fb1565b602001015160f81c60f81b6001600160f81b0319168482815181106135a8576135a8613fb1565b01602001516001600160f81b031916145b1561113557806135c881614011565b915050613558565b6060610d70826136f0565b6060816135e981601f614336565b10156136075760405162461bcd60e51b81526004016104cb9061440d565b826136128382614336565b10156136305760405162461bcd60e51b81526004016104cb9061440d565b61363a8284614336565b8451101561367e5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104cb565b60608215801561369d57604051915060008252602082016040526136e7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136d65780518352602092830192016136be565b5050858452601f01601f1916604052505b50949350505050565b6060610d708260200151600084600001516131dc565b604051806040016040528060008152602001600081525090565b6040518060400160405280613733613706565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b604051806040016040528061378f6137fc565b815260200161379c6137fc565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104dd57600080fd5b60006020828403121561384157600080fd5b81356111358161381a565b60006020828403121561385e57600080fd5b5035919050565b60006060828403121561387757600080fd5b50919050565b60006020828403121561388f57600080fd5b81356001600160401b038111156138a557600080fd5b610ec784828501613865565b600060c0828403121561387757600080fd5b600060e0828403121561387757600080fd5b60008060e083850312156138e857600080fd5b6138f284846138b1565b915060c08301356001600160401b0381111561390d57600080fd5b613919858286016138c3565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611dba57600080fd5b60006020828403121561396057600080fd5b61113582613937565b60006080828403121561387757600080fd5b600080600080610100858703121561399257600080fd5b61399c86866138b1565b935060c08501356001600160401b03808211156139b857600080fd5b6139c488838901613969565b945060e08701359150808211156139da57600080fd5b818701915087601f8301126139ee57600080fd5b8135818111156139fd57600080fd5b886020828501011115613a0f57600080fd5b95989497505060200194505050565b600060208284031215613a3057600080fd5b813560ff8116811461113557600080fd5b60008060408385031215613a5457600080fd5b82356001600160401b0380821115613a6b57600080fd5b613a7786838701613865565b93506020850135915080821115613a8d57600080fd5b50613919858286016138c3565b60008060008060808587031215613ab057600080fd5b613ab985613937565b93506020850135613ac98161381a565b92506040850135613ad98161381a565b91506060850135613ae98161381a565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613b2c57613b2c613af4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b5a57613b5a613af4565b604052919050565b600060408284031215613b7457600080fd5b613b7c613b0a565b9050813581526020820135602082015292915050565b600060608284031215613ba457600080fd5b613bac613b0a565b9050613bb88383613b62565b8152613bc660408301613937565b602082015292915050565b80356001600160401b0381168114611dba57600080fd5b60008060408385031215613bfb57600080fd5b82356001600160401b0380821115613c1257600080fd5b818501915085601f830112613c2657600080fd5b8135602082821115613c3a57613c3a613af4565b613c48818360051b01613b32565b82815281810193506060928302850182019289841115613c6757600080fd5b948201945b83861015613c8d57613c7e8a87613b92565b85529485019493820193613c6c565b509550613c9b878201613bd1565b9450505050509250929050565b803563ffffffff81168114611dba57600080fd5b60008060408385031215613ccf57600080fd5b613cd883613ca8565b9150613ce660208401613bd1565b90509250929050565b60008060e08385031215613d0257600080fd5b613d0c84846138b1565b915060c08301356001600160401b03811115613d2757600080fd5b61391985828601613969565b600060208284031215613d4557600080fd5b81516111358161381a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613dac57600080fd5b8151801515811461113557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613e1657600080fd5b61113582613bd1565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613e8157613e81613e49565b01949350505050565b6000808335601e19843603018112613ea157600080fd5b8301803591506001600160401b03821115613ebb57600080fd5b6020019150606081023603821315613ed257600080fd5b9250929050565b600060608284031215613eeb57600080fd5b6111358383613b92565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613f6257600080fd5b61113582613ca8565b6000808335601e19843603018112613f8257600080fd5b8301803591506001600160401b03821115613f9c57600080fd5b602001915036819003821315613ed257600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613fe757613fe7613e49565b039392505050565b60006001600160801b03828116848216808303821115613e8157613e81613e49565b600060001982141561402557614025613e49565b5060010190565b60c0810163ffffffff61403e84613ca8565b16825261404d60208401613bd1565b6001600160401b0380821660208501528061406a60408701613bd1565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e198436030181126140ad57600080fd5b8301803591506001600160401b038211156140c757600080fd5b6020019150600681901b3603821315613ed257600080fd5b6000604082840312156140f157600080fd5b6111358383613b62565b60008282101561410d5761410d613e49565b500390565b600082601f83011261412357600080fd5b604051604081018181106001600160401b038211171561414557614145613af4565b806040525080604084018581111561415c57600080fd5b845b8181101561417657803583526020928301920161415e565b509195945050505050565b60006080828403121561419357600080fd5b61419b613b0a565b6141a58484614112565b81526141b48460408501614112565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156141e6576141e6613e49565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061421f5761421f6141ef565b92169190910492915050565b60006020808352608083016001600160401b038061424887613bd1565b1683860152614258838701613bd1565b604082821681880152808801359150601e1988360301821261427957600080fd5b9087019081358381111561428c57600080fd5b6060935083810236038913156142a157600080fd5b87840184905293849052908401926000919060a088015b818410156142f6578535815286860135878201526001600160801b036142df848801613937565b1681840152948401946001939093019284016142b8565b9998505050505050505050565b600082614312576143126141ef565b500690565b600081600019048311821515161561433157614331613e49565b500290565b6000821982111561434957614349613e49565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806143ae576143ae6141ef565b8060ff84160691505092915050565b600060ff821660ff8416808210156143d7576143d7613e49565b90039392505050565b6000826143ef576143ef6141ef565b500490565b60006020828403121561440657600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220a70e3a5d1f6ffc0486dd4b413caaeb382220e97e769ba0a4196c3a0c2b7b0b8b64736f6c634300080c0033","storage":{"0x0":"0xff"}},"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266":{"nonce":0,"balance":"0x21e19e0c9bab2400000","code":"0x","storage":{}}},"best_block_number":"0x2"} \ No newline at end of file diff --git a/tests/anvil/deploy-avs-rollup-save-anvil-state.sh b/tests/anvil/deploy-avs-rollup-save-anvil-state.sh new file mode 100755 index 00000000..2fc2c452 --- /dev/null +++ b/tests/anvil/deploy-avs-rollup-save-anvil-state.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +RPC_URL=http://localhost:8545 +PRIVATE_KEY=0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 + +# cd to the directory of this script so that this can be run from anywhere +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) +cd "$parent_path" + +anvil --dump-state data/rollup-avs-deployed-anvil-state.json & +cd ../../contracts/evm +forge script script/deploy/devnet/SFFLDeployerRollup.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -v + +pkill anvil diff --git a/tests/integration/integration_test.go b/tests/integration/integration_test.go index 8d7d49b9..4a938f65 100644 --- a/tests/integration/integration_test.go +++ b/tests/integration/integration_test.go @@ -197,7 +197,7 @@ func setupTestEnv(t *testing.T, ctx context.Context) *testEnv { rollup1AnvilContainerName := "rollup1-anvil" rmqContainerName := "rmq" - mainnetAnvil := utils.StartAnvilTestContainer(t, containersCtx, mainnetAnvilContainerName, "8545", "1", true, networkName) + mainnetAnvil := utils.StartAnvilTestContainer(t, containersCtx, mainnetAnvilContainerName, "8545", "31337", true, networkName) rollupAnvils := []*utils.AnvilInstance{ utils.StartAnvilTestContainer(t, containersCtx, rollup0AnvilContainerName, "8546", "2", false, networkName), utils.StartAnvilTestContainer(t, containersCtx, rollup1AnvilContainerName, "8547", "3", false, networkName), @@ -215,7 +215,7 @@ func setupTestEnv(t *testing.T, ctx context.Context) *testEnv { nodeConfig, _, _ := genOperatorConfig(t, ctx, "3", mainnetAnvil, rollupAnvils, rabbitMq) - addresses, registryRollups, registryRollupAuths, _ := deployRegistryRollups(t, rollupAnvils) + addresses, registryRollups, registryRollupAuths, _ := deployRegistryRollups(t, common.HexToAddress(sfflDeploymentRaw.Addresses.TaskManagerAddr), mainnetAnvil, rollupAnvils) operator := startOperator(t, ctx, nodeConfig) config := buildConfig(t, sfflDeploymentRaw, addresses, rollupAnvils, configRaw) @@ -487,14 +487,14 @@ func buildConfig(t *testing.T, sfflDeploymentRaw config.SFFLDeploymentRaw, addre } } -func deployRegistryRollups(t *testing.T, anvils []*utils.AnvilInstance) ([]common.Address, []*registryrollup.ContractSFFLRegistryRollup, []*bind.TransactOpts, []*bind.TransactOpts) { +func deployRegistryRollups(t *testing.T, taskManagerAddr common.Address, mainnetAnvil *utils.AnvilInstance, anvils []*utils.AnvilInstance) ([]common.Address, []*registryrollup.ContractSFFLRegistryRollup, []*bind.TransactOpts, []*bind.TransactOpts) { var registryRollups []*registryrollup.ContractSFFLRegistryRollup var ownerAuths []*bind.TransactOpts var proxyAdminAuths []*bind.TransactOpts var addresses []common.Address for _, anvil := range anvils { - addr, registryRollup, ownerAuth, proxyAdminAuth := deployRegistryRollup(t, anvil) + addr, registryRollup, ownerAuth, proxyAdminAuth := deployRegistryRollup(t, taskManagerAddr, mainnetAnvil, anvil) addresses = append(addresses, addr) registryRollups = append(registryRollups, registryRollup) @@ -505,8 +505,10 @@ func deployRegistryRollups(t *testing.T, anvils []*utils.AnvilInstance) ([]commo return addresses, registryRollups, ownerAuths, proxyAdminAuths } -func deployRegistryRollup(t *testing.T, anvil *utils.AnvilInstance) (common.Address, *registryrollup.ContractSFFLRegistryRollup, *bind.TransactOpts, *bind.TransactOpts) { +func deployRegistryRollup(t *testing.T, taskManagerAddr common.Address, mainnetAnvil, anvil *utils.AnvilInstance) (common.Address, *registryrollup.ContractSFFLRegistryRollup, *bind.TransactOpts, *bind.TransactOpts) { t.Logf("Deploying RegistryRollup to chain %s", anvil.ChainID.String()) + t.Logf("TaskManager address: %s", taskManagerAddr.Hex()) + t.Logf("MainnetAnvil Chain ID: %s", mainnetAnvil.ChainID.String()) ownerPrivateKeyString := "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" ownerKeyPair, err := crypto.HexToECDSA(ownerPrivateKeyString) @@ -522,7 +524,7 @@ func deployRegistryRollup(t *testing.T, anvil *utils.AnvilInstance) (common.Addr t.Fatalf("Error generating transactor: %s", err.Error()) } - implAddr, _, _, err := registryrollup.DeployContractSFFLRegistryRollup(ownerAuth, anvil.WsClient) + implAddr, _, _, err := registryrollup.DeployContractSFFLRegistryRollup(ownerAuth, anvil.WsClient, "v0.0.1-devnet", taskManagerAddr, big.NewInt(mainnetAnvil.ChainID.Int64())) if err != nil { t.Fatalf("Error deploying RegistryRollup: %s", err.Error()) }