From 3c04363f75d3db7d370562f3d413e4f573561838 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Wed, 21 Dec 2022 22:03:29 +0900 Subject: [PATCH 1/3] Improved UpdateHistories library --- contracts/lib/UpdateHistories.sol | 77 +++++++++++++++++++------------ test/StakeManager.spec.ts | 2 +- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/contracts/lib/UpdateHistories.sol b/contracts/lib/UpdateHistories.sol index c92e325..a099b60 100644 --- a/contracts/lib/UpdateHistories.sol +++ b/contracts/lib/UpdateHistories.sol @@ -4,44 +4,41 @@ pragma solidity 0.8.12; import { IEnvironment } from "../IEnvironment.sol"; +error PastEpoch(); + /** * @title UpdateHistories */ library UpdateHistories { - function set( - uint256[] storage epochs, - uint256[] storage values, - uint256 nextEpoch, - uint256 value - ) internal { - extend(epochs, values, nextEpoch); - values[epochs.length - 1] = value; - } - function add( uint256[] storage epochs, uint256[] storage values, - uint256 nextEpoch, + uint256 epoch, uint256 value ) internal { - extend(epochs, values, nextEpoch); - values[epochs.length - 1] += value; + uint256 length = epochs.length; + if (length > 1 && epoch < epochs[length - 1] && epoch < epochs[length - 2]) revert PastEpoch(); + + uint256 pos = extend(epochs, values, epoch); + length = epochs.length; + for (; pos < length; pos++) { + values[pos] += value; + } } function sub( uint256[] storage epochs, uint256[] storage values, - uint256 nextEpoch, + uint256 epoch, uint256 value ) internal returns (uint256) { - extend(epochs, values, nextEpoch); - uint256 length = epochs.length; - uint256 balance = values[length - 1]; + if (length == 0 || epoch < epochs[length - 1]) revert PastEpoch(); + + uint256 pos = extend(epochs, values, epoch); + uint256 balance = values[pos]; value = value <= balance ? value : balance; - if (value > 0) { - values[length - 1] -= value; - } + if (value > 0) values[pos] -= value; return value; } @@ -53,6 +50,7 @@ library UpdateHistories { uint256 length = epochs.length; if (length == 0 || epochs[0] > epoch) return 0; if (epochs[length - 1] <= epoch) return values[length - 1]; + if (length > 1 && epochs[length - 2] <= epoch) return values[length - 2]; uint256 idx = sBinarySearch(epochs, epoch, 0, length); return values[idx]; } @@ -64,6 +62,7 @@ library UpdateHistories { ) internal pure returns (IEnvironment.EnvironmentValue memory) { uint256 length = epochs.length; if (epochs[length - 1] <= epoch) return values[length - 1]; + if (length > 1 && epochs[length - 2] <= epoch) return values[length - 2]; uint256 idx = mBinarySearch(epochs, epoch, 0, length); return values[idx]; } @@ -71,19 +70,39 @@ library UpdateHistories { function extend( uint256[] storage epochs, uint256[] storage values, - uint256 nextEpoch - ) internal { + uint256 epoch + ) internal returns (uint256 pos) { uint256 length = epochs.length; + + // first time if (length == 0) { - epochs.push(nextEpoch); - values.push(); - return; + epochs.push(epoch); + values.push(0); + return 0; + } + + uint256 lastPos = length - 1; + uint256 lastEpoch = epochs[lastPos]; + + // same as last epoch + if (epoch == lastEpoch) return lastPos; + + // future epoch + if (epoch > lastEpoch) { + epochs.push(epoch); + values.push(values[lastPos]); + return lastPos + 1; } - uint256 lastEpoch = epochs[length - 1]; - if (lastEpoch != nextEpoch) { - epochs.push(nextEpoch); - values.push(values[length - 1]); + // previous epoch + if (lastPos > 0 && epoch == epochs[lastPos - 1]) { + return lastPos - 1; + } else { + epochs.push(epochs[lastPos]); + values.push(values[lastPos]); + epochs[lastPos] = epoch; + values[lastPos] = lastPos == 0 ? 0 : values[lastPos - 1]; + return lastPos; } } diff --git a/test/StakeManager.spec.ts b/test/StakeManager.spec.ts index d72066e..7276614 100644 --- a/test/StakeManager.spec.ts +++ b/test/StakeManager.spec.ts @@ -936,7 +936,6 @@ describe('StakeManager', () => { const tx2 = await staker1.unstakeV2(Token.wOAS, validator1, '2.5') await expect(tx1).to.emit(stakeManager, 'UnstakedV2').withArgs(staker1.address, validator1.owner.address, 0) await expect(tx2).to.emit(stakeManager, 'UnstakedV2').withArgs(staker1.address, validator1.owner.address, 1) - await expect(staker1.unstakeV2(Token.sOAS, validator1, '1')).to.revertedWith('NoAmount') await expectBalance(stakeManager, '515', '5', '10') await expectBalance(staker1.signer, '7985', '995', '990') @@ -1005,6 +1004,7 @@ describe('StakeManager', () => { await staker1.unstakeV2(Token.wOAS, validator1, '9999') await staker1.unstakeV2(Token.OAS, validator2, '5') await staker1.unstakeV2(Token.sOAS, validator2, '5') + await expect(staker1.unstakeV2(Token.wOAS, validator1, '1')).to.revertedWith('NoAmount') expect(await staker1.getLockedUnstakeCount()).to.equal(10) From 4aff95e5563682b1c9dfe7244984f3d53b10d7c4 Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Thu, 22 Dec 2022 04:05:03 +0900 Subject: [PATCH 2/3] Added low-gas methods for VerseVerifier --- contracts/IStakeManager.sol | 16 ++++++++++++++++ contracts/StakeManager.sol | 19 +++++++++++++++++++ test/StakeManager.spec.ts | 37 ++++++++++++++++++++++++++++++++++++- test/helpers.ts | 2 +- 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/contracts/IStakeManager.sol b/contracts/IStakeManager.sol index 66a2bfe..a9ce470 100644 --- a/contracts/IStakeManager.sol +++ b/contracts/IStakeManager.sol @@ -415,6 +415,22 @@ interface IStakeManager { */ function getTotalRewards(address[] memory validators, uint256 epochs) external view returns (uint256 rewards); + /** + * Returns the staked amount of the validator. + * @param validator Validator address. + * @param epoch Target epoch number. + * @return stakes Staked amounts. + */ + function getValidatorStakes(address validator, uint256 epoch) external view returns (uint256 stakes); + + /** + * Returns the staked amount of the operator. + * @param operator Operator address. + * @param epoch Target epoch number. + * @return stakes Staked amounts. + */ + function getOperatorStakes(address operator, uint256 epoch) external view returns (uint256 stakes); + /** * Returns a list of stakers and amounts to the validator. * @param validator Validator address. diff --git a/contracts/StakeManager.sol b/contracts/StakeManager.sol index 140dda3..d154901 100644 --- a/contracts/StakeManager.sol +++ b/contracts/StakeManager.sol @@ -598,6 +598,25 @@ contract StakeManager is IStakeManager, System { return rewards; } + /** + * @inheritdoc IStakeManager + */ + function getValidatorStakes(address validator, uint256 epoch) external view returns (uint256 stakes) { + epoch = epoch > 0 ? epoch : environment.epoch(); + return validators[validator].getTotalStake(epoch); + } + + /** + * @inheritdoc IStakeManager + */ + function getOperatorStakes(address operator, uint256 epoch) external view returns (uint256 stakes) { + Validator storage validator = validators[operatorToOwner[operator]]; + if (validator.operator != operator) return 0; + + epoch = epoch > 0 ? epoch : environment.epoch(); + return validator.getTotalStake(epoch); + } + /** * @inheritdoc IStakeManager */ diff --git a/test/StakeManager.spec.ts b/test/StakeManager.spec.ts index 7276614..2fec90d 100644 --- a/test/StakeManager.spec.ts +++ b/test/StakeManager.spec.ts @@ -2027,7 +2027,7 @@ describe('StakeManager', () => { expect(actual1.unlockTimes).to.satisfy((times: BigNumber[]) => times.every((x) => x.toNumber() == 0)) }) - it('getValidatorStakes()', async () => { + it('getValidatorStakes(address,uint256,uint256,uint256)', async () => { await staker1.stake(Token.OAS, validator1, '10') await toNextEpoch() @@ -2105,6 +2105,41 @@ describe('StakeManager', () => { ) }) + it('getValidatorStakes(address,uint256) and getOperatorStakes()', async () => { + const check = async (validator: Validator, epoch: number, exp: string) => { + const actual1 = await stakeManager['getValidatorStakes(address,uint256)'](validator.owner.address, epoch) + const actual2 = await stakeManager.getOperatorStakes(validator.operator.address, epoch) + expect(actual1.toString()).to.equal(toWei(exp)) + expect(actual2.toString()).to.equal(toWei(exp)) + } + + await staker1.stake(Token.OAS, validator1, '10') + await toNextEpoch() + + await staker2.stake(Token.OAS, validator1, '20') + await toNextEpoch() + + await staker1.stake(Token.OAS, validator1, '30') + await staker3.stake(Token.OAS, validator1, '30') + await toNextEpoch() + + await staker4.stake(Token.OAS, validator1, '40') + await staker5.stake(Token.OAS, validator1, '50') + await staker6.stake(Token.OAS, validator1, '60') + await toNextEpoch() + + await staker2.unstakeV2(Token.OAS, validator1, '20') + await toNextEpoch() + + await check(validator1, 1, '0') + await check(validator1, 2, '10') + await check(validator1, 3, '30') + await check(validator1, 4, '90') + await check(validator1, 5, '240') + await check(validator1, 6, '220') + await check(validator1, 0, '220') + }) + it('getStakerStakes()', async () => { await staker1.stake(Token.OAS, validator1, '5') await staker1.stake(Token.OAS, validator1, '5') diff --git a/test/helpers.ts b/test/helpers.ts index 08f964f..63a4e02 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -97,7 +97,7 @@ class Validator { howMany = 100, expectNewCursor?: number, ) { - const { _stakers, stakes, newCursor } = await this._contract.getValidatorStakes( + const { _stakers, stakes, newCursor } = await this._contract['getValidatorStakes(address,uint256,uint256,uint256)']( this.owner.address, epoch, cursor, From 10c3d4f70bcdf76ba165cb6aae5d668f67a32f9f Mon Sep 17 00:00:00 2001 From: ironbeer <7997273+ironbeer@users.noreply.github.com> Date: Tue, 27 Dec 2022 18:54:18 +0900 Subject: [PATCH 3/3] Updated artifacts --- .../Environment.sol/Environment.json | 4 +- .../IStakeManager.sol/IStakeManager.json | 48 ++++++++++++++++ .../StakeManager.sol/StakeManager.json | 57 ++++++++++++++++++- .../contracts/lib/Staker.sol/Staker.json | 4 +- .../UpdateHistories.sol/UpdateHistories.json | 4 +- .../lib/Validator.sol/Validator.json | 4 +- 6 files changed, 111 insertions(+), 10 deletions(-) diff --git a/artifacts/contracts/Environment.sol/Environment.json b/artifacts/contracts/Environment.sol/Environment.json index 8710f12..2994f2c 100644 --- a/artifacts/contracts/Environment.sol/Environment.json +++ b/artifacts/contracts/Environment.sol/Environment.json @@ -471,8 +471,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50611048806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610ec6565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d061031a565b610175610170366004610f41565b610338565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610396565b6040519081526020016100dc565b6101c16101dd366004610f41565b6103d7565b6100c16101f0366004610ec6565b6103f8565b6100ed6104b9565b6100d061059b565b6100ed610213366004610f41565b6105be565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b816106df565b50565b610286610e42565b60006102906109a8565b905061029e81439054111590565b6102af576102aa6109e6565b6102b1565b805b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b600061032461027e565b606001516103329043610f70565b15919050565b6002818154811061034857600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6000806103a16109a8565b90506103af81439054111590565b6103c8576103c36103be6109e6565b610a39565b6103d1565b6103d181610a39565b91505090565b600181815481106103e757600080fd5b600091825260209091200154905081565b33411461041857604051631cf4735960e01b815260040160405180910390fd5b61042061059b565b1561043e57604051631e59ccd960e01b815260040160405180910390fd5b610446610396565b81602001511161046957604051630eae4c9760e01b815260040160405180910390fd5b60006104736109a8565b905061048181439054111590565b15610497576104908183610a67565b82526104ac565b6104a9826104a36109e6565b90610a67565b82525b6104b5826106df565b5050565b6104c1610e42565b60006104cb61027e565b905060006104d76109a8565b90506000826060015183602001516104ed610396565b6104f79190610f9a565b610502906001610fb1565b61050c9190610fc9565b83516105189190610fb1565b905061052682829054111590565b6105305782610593565b604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201525b935050505090565b60006105a561027e565b606001516105b4436001610fb1565b6103329190610f70565b6105c6610e42565b6106d96002805480602002602001604051908101604052809291908181526020016000905b828210156106785783829060005260206000209060090201604051806101200160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481525050815260200190600101906105eb565b5050600180546040805160208084028201810190925282815289955093508301828280156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050610a9f9092919063ffffffff16565b92915050565b6106e881610b35565b6001548015806107305750610730436002610704600185610f9a565b8154811061071457610714610fe8565b90600052602060002090600902016109df90919063ffffffff16565b156108ed57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108fe8184610f9a565b8154811061090e5761090e610fe8565b600091825260209091200155816002610928600184610f9a565b8154811061093857610938610fe8565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b60028054600091906109bc90600190610f9a565b815481106109cc576109cc610fe8565b9060005260206000209060090201905090565b9054111590565b6002546000906001811415610a1d576002600081548110610a0957610a09610fe8565b906000526020600020906009020191505090565b6002610a298183610f9a565b81548110610a0957610a09610fe8565b6003810154815460009190610a4e9043610f9a565b610a589190610ffe565b82600101546106d99190610fb1565b6000826003015483600101548360200151610a829190610f9a565b610a8c9190610fc9565b8354610a989190610fb1565b9392505050565b610aa7610e42565b83518285610ab6600184610f9a565b81518110610ac657610ac6610fe8565b602002602001015111610aff5783610adf600183610f9a565b81518110610aef57610aef610fe8565b6020026020010151915050610a98565b6000610b0e8685600085610d95565b9050848181518110610b2257610b22610fe8565b6020026020010151925050509392505050565b600181604001511015610b905760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610be65760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b87565b606481608001511115610c3c5760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b87565b60648160a001511115610c925760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b87565b60018160c001511015610ce85760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b87565b60018160e001511015610d3e5760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b87565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b87565b600081831415610db157610daa600183610f9a565b9050610e3a565b60006002610dbf8486610fb1565b610dc99190610ffe565b905084868281518110610dde57610dde610fe8565b60200260200101511115610e0057610df886868684610d95565b915050610e3a565b84868281518110610e1357610e13610fe8565b60200260200101511015610e3757610df88686610e31846001610fb1565b86610d95565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610ec057634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610ed957600080fd5b610ee1610e8e565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f5357600080fd5b5035919050565b634e487b7160e01b600052601260045260246000fd5b600082610f7f57610f7f610f5a565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015610fac57610fac610f84565b500390565b60008219821115610fc457610fc4610f84565b500190565b6000816000190483118215151615610fe357610fe3610f84565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261100d5761100d610f5a565b50049056fea26469706673582212206732433a35efc4cfa12fb88d25bcb8e7433ee5f49e858c5318248d7aeb57aa6464736f6c634300080c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610ec6565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d061031a565b610175610170366004610f41565b610338565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610396565b6040519081526020016100dc565b6101c16101dd366004610f41565b6103d7565b6100c16101f0366004610ec6565b6103f8565b6100ed6104b9565b6100d061059b565b6100ed610213366004610f41565b6105be565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b816106df565b50565b610286610e42565b60006102906109a8565b905061029e81439054111590565b6102af576102aa6109e6565b6102b1565b805b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b600061032461027e565b606001516103329043610f70565b15919050565b6002818154811061034857600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6000806103a16109a8565b90506103af81439054111590565b6103c8576103c36103be6109e6565b610a39565b6103d1565b6103d181610a39565b91505090565b600181815481106103e757600080fd5b600091825260209091200154905081565b33411461041857604051631cf4735960e01b815260040160405180910390fd5b61042061059b565b1561043e57604051631e59ccd960e01b815260040160405180910390fd5b610446610396565b81602001511161046957604051630eae4c9760e01b815260040160405180910390fd5b60006104736109a8565b905061048181439054111590565b15610497576104908183610a67565b82526104ac565b6104a9826104a36109e6565b90610a67565b82525b6104b5826106df565b5050565b6104c1610e42565b60006104cb61027e565b905060006104d76109a8565b90506000826060015183602001516104ed610396565b6104f79190610f9a565b610502906001610fb1565b61050c9190610fc9565b83516105189190610fb1565b905061052682829054111590565b6105305782610593565b604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201525b935050505090565b60006105a561027e565b606001516105b4436001610fb1565b6103329190610f70565b6105c6610e42565b6106d96002805480602002602001604051908101604052809291908181526020016000905b828210156106785783829060005260206000209060090201604051806101200160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481525050815260200190600101906105eb565b5050600180546040805160208084028201810190925282815289955093508301828280156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050610a9f9092919063ffffffff16565b92915050565b6106e881610b35565b6001548015806107305750610730436002610704600185610f9a565b8154811061071457610714610fe8565b90600052602060002090600902016109df90919063ffffffff16565b156108ed57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108fe8184610f9a565b8154811061090e5761090e610fe8565b600091825260209091200155816002610928600184610f9a565b8154811061093857610938610fe8565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b60028054600091906109bc90600190610f9a565b815481106109cc576109cc610fe8565b9060005260206000209060090201905090565b9054111590565b6002546000906001811415610a1d576002600081548110610a0957610a09610fe8565b906000526020600020906009020191505090565b6002610a298183610f9a565b81548110610a0957610a09610fe8565b6003810154815460009190610a4e9043610f9a565b610a589190610ffe565b82600101546106d99190610fb1565b6000826003015483600101548360200151610a829190610f9a565b610a8c9190610fc9565b8354610a989190610fb1565b9392505050565b610aa7610e42565b83518285610ab6600184610f9a565b81518110610ac657610ac6610fe8565b602002602001015111610aff5783610adf600183610f9a565b81518110610aef57610aef610fe8565b6020026020010151915050610a98565b6000610b0e8685600085610d95565b9050848181518110610b2257610b22610fe8565b6020026020010151925050509392505050565b600181604001511015610b905760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610be65760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610b87565b606481608001511115610c3c5760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610b87565b60648160a001511115610c925760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610b87565b60018160c001511015610ce85760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610b87565b60018160e001511015610d3e5760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610b87565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610b87565b600081831415610db157610daa600183610f9a565b9050610e3a565b60006002610dbf8486610fb1565b610dc99190610ffe565b905084868281518110610dde57610dde610fe8565b60200260200101511115610e0057610df886868684610d95565b915050610e3a565b84868281518110610e1357610e13610fe8565b60200260200101511015610e3757610df88686610e31846001610fb1565b86610d95565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610ec057634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610ed957600080fd5b610ee1610e8e565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f5357600080fd5b5035919050565b634e487b7160e01b600052601260045260246000fd5b600082610f7f57610f7f610f5a565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015610fac57610fac610f84565b500390565b60008219821115610fc457610fc4610f84565b500190565b6000816000190483118215151615610fe357610fe3610f84565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261100d5761100d610f5a565b50049056fea26469706673582212206732433a35efc4cfa12fb88d25bcb8e7433ee5f49e858c5318248d7aeb57aa6464736f6c634300080c0033", + "bytecode": "0x608060405234801561001057600080fd5b5061108c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610f0a565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d061031a565b610175610170366004610f85565b610338565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610396565b6040519081526020016100dc565b6101c16101dd366004610f85565b6103d7565b6100c16101f0366004610f0a565b6103f8565b6100ed6104b9565b6100d061059b565b6100ed610213366004610f85565b6105be565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b816106df565b50565b610286610e86565b60006102906109a8565b905061029e81439054111590565b6102af576102aa6109e6565b6102b1565b805b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b600061032461027e565b606001516103329043610fb4565b15919050565b6002818154811061034857600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6000806103a16109a8565b90506103af81439054111590565b6103c8576103c36103be6109e6565b610a39565b6103d1565b6103d181610a39565b91505090565b600181815481106103e757600080fd5b600091825260209091200154905081565b33411461041857604051631cf4735960e01b815260040160405180910390fd5b61042061059b565b1561043e57604051631e59ccd960e01b815260040160405180910390fd5b610446610396565b81602001511161046957604051630eae4c9760e01b815260040160405180910390fd5b60006104736109a8565b905061048181439054111590565b15610497576104908183610a67565b82526104ac565b6104a9826104a36109e6565b90610a67565b82525b6104b5826106df565b5050565b6104c1610e86565b60006104cb61027e565b905060006104d76109a8565b90506000826060015183602001516104ed610396565b6104f79190610fde565b610502906001610ff5565b61050c919061100d565b83516105189190610ff5565b905061052682829054111590565b6105305782610593565b604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201525b935050505090565b60006105a561027e565b606001516105b4436001610ff5565b6103329190610fb4565b6105c6610e86565b6106d96002805480602002602001604051908101604052809291908181526020016000905b828210156106785783829060005260206000209060090201604051806101200160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481525050815260200190600101906105eb565b5050600180546040805160208084028201810190925282815289955093508301828280156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050610a9f9092919063ffffffff16565b92915050565b6106e881610b79565b6001548015806107305750610730436002610704600185610fde565b815481106107145761071461102c565b90600052602060002090600902016109df90919063ffffffff16565b156108ed57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108fe8184610fde565b8154811061090e5761090e61102c565b600091825260209091200155816002610928600184610fde565b815481106109385761093861102c565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b60028054600091906109bc90600190610fde565b815481106109cc576109cc61102c565b9060005260206000209060090201905090565b9054111590565b6002546000906001811415610a1d576002600081548110610a0957610a0961102c565b906000526020600020906009020191505090565b6002610a298183610fde565b81548110610a0957610a0961102c565b6003810154815460009190610a4e9043610fde565b610a589190611042565b82600101546106d99190610ff5565b6000826003015483600101548360200151610a829190610fde565b610a8c919061100d565b8354610a989190610ff5565b9392505050565b610aa7610e86565b83518285610ab6600184610fde565b81518110610ac657610ac661102c565b602002602001015111610aff5783610adf600183610fde565b81518110610aef57610aef61102c565b6020026020010151915050610a98565b600181118015610b3257508285610b17600284610fde565b81518110610b2757610b2761102c565b602002602001015111155b15610b435783610adf600283610fde565b6000610b528685600085610dd9565b9050848181518110610b6657610b6661102c565b6020026020010151925050509392505050565b600181604001511015610bd45760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610c2a5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610bcb565b606481608001511115610c805760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610bcb565b60648160a001511115610cd65760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610bcb565b60018160c001511015610d2c5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610bcb565b60018160e001511015610d825760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610bcb565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610bcb565b600081831415610df557610dee600183610fde565b9050610e7e565b60006002610e038486610ff5565b610e0d9190611042565b905084868281518110610e2257610e2261102c565b60200260200101511115610e4457610e3c86868684610dd9565b915050610e7e565b84868281518110610e5757610e5761102c565b60200260200101511015610e7b57610e3c8686610e75846001610ff5565b86610dd9565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610f0457634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610f1d57600080fd5b610f25610ed2565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f9757600080fd5b5035919050565b634e487b7160e01b600052601260045260246000fd5b600082610fc357610fc3610f9e565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015610ff057610ff0610fc8565b500390565b6000821982111561100857611008610fc8565b500190565b600081600019048311821515161561102757611027610fc8565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261105157611051610f9e565b50049056fea264697066735822122064526d5c022db31314cd4cb2f3cdb76bbdd8e181cb9fa867ee2c7f3f1646cdce64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063900cf0cf11610071578063900cf0cf146101b9578063b4c2f727146101cf578063bd4eff19146101e2578063ccfb9935146101f5578063d4a53686146101fd578063fcbb371b1461020557600080fd5b806308a54356146100ae578063158ef93e146100c35780633fa4f245146100e55780634ba7ed391461015a5780635e383d2114610162575b600080fd5b6100c16100bc366004610f0a565b610218565b005b6000546100d09060ff1681565b60405190151581526020015b60405180910390f35b6100ed61027e565b6040516100dc9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6100d061031a565b610175610170366004610f85565b610338565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e0830152610100820152610120016100dc565b6101c1610396565b6040519081526020016100dc565b6101c16101dd366004610f85565b6103d7565b6100c16101f0366004610f0a565b6103f8565b6100ed6104b9565b6100d061059b565b6100ed610213366004610f85565b6105be565b33411461023857604051631cf4735960e01b815260040160405180910390fd5b60005460ff161561025b5760405162dc149f60e41b815260040160405180910390fd5b6000805460ff191660019081178255908252602082015261027b816106df565b50565b610286610e86565b60006102906109a8565b905061029e81439054111590565b6102af576102aa6109e6565b6102b1565b805b604080516101208101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260089091015461010082015292915050565b600061032461027e565b606001516103329043610fb4565b15919050565b6002818154811061034857600080fd5b90600052602060002090600902016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6000806103a16109a8565b90506103af81439054111590565b6103c8576103c36103be6109e6565b610a39565b6103d1565b6103d181610a39565b91505090565b600181815481106103e757600080fd5b600091825260209091200154905081565b33411461041857604051631cf4735960e01b815260040160405180910390fd5b61042061059b565b1561043e57604051631e59ccd960e01b815260040160405180910390fd5b610446610396565b81602001511161046957604051630eae4c9760e01b815260040160405180910390fd5b60006104736109a8565b905061048181439054111590565b15610497576104908183610a67565b82526104ac565b6104a9826104a36109e6565b90610a67565b82525b6104b5826106df565b5050565b6104c1610e86565b60006104cb61027e565b905060006104d76109a8565b90506000826060015183602001516104ed610396565b6104f79190610fde565b610502906001610ff5565b61050c919061100d565b83516105189190610ff5565b905061052682829054111590565b6105305782610593565b604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201525b935050505090565b60006105a561027e565b606001516105b4436001610ff5565b6103329190610fb4565b6105c6610e86565b6106d96002805480602002602001604051908101604052809291908181526020016000905b828210156106785783829060005260206000209060090201604051806101200160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481525050815260200190600101906105eb565b5050600180546040805160208084028201810190925282815289955093508301828280156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050610a9f9092919063ffffffff16565b92915050565b6106e881610b79565b6001548015806107305750610730436002610704600185610fde565b815481106107145761071461102c565b90600052602060002090600902016109df90919063ffffffff16565b156108ed57506020810180516001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6019190915560028054918201815560005282517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60099092029182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015560a08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad382015560c08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad482015560e08201517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad5820155610100909101517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad690910155565b602082015160016108fe8184610fde565b8154811061090e5761090e61102c565b600091825260209091200155816002610928600184610fde565b815481106109385761093861102c565b9060005260206000209060090201600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050505050565b60028054600091906109bc90600190610fde565b815481106109cc576109cc61102c565b9060005260206000209060090201905090565b9054111590565b6002546000906001811415610a1d576002600081548110610a0957610a0961102c565b906000526020600020906009020191505090565b6002610a298183610fde565b81548110610a0957610a0961102c565b6003810154815460009190610a4e9043610fde565b610a589190611042565b82600101546106d99190610ff5565b6000826003015483600101548360200151610a829190610fde565b610a8c919061100d565b8354610a989190610ff5565b9392505050565b610aa7610e86565b83518285610ab6600184610fde565b81518110610ac657610ac661102c565b602002602001015111610aff5783610adf600183610fde565b81518110610aef57610aef61102c565b6020026020010151915050610a98565b600181118015610b3257508285610b17600284610fde565b81518110610b2757610b2761102c565b602002602001015111155b15610b435783610adf600283610fde565b6000610b528685600085610dd9565b9050848181518110610b6657610b6661102c565b6020026020010151925050509392505050565b600181604001511015610bd45760405163a1b63ceb60e01b815260206004820152601960248201527f626c6f636b506572696f6420697320746f6f20736d616c6c2e0000000000000060448201526064015b60405180910390fd5b600381606001511015610c2a5760405163a1b63ceb60e01b815260206004820152601960248201527f65706f6368506572696f6420697320746f6f20736d616c6c2e000000000000006044820152606401610bcb565b606481608001511115610c805760405163a1b63ceb60e01b815260206004820152601860248201527f7265776172645261746520697320746f6f206c617267652e00000000000000006044820152606401610bcb565b60648160a001511115610cd65760405163a1b63ceb60e01b815260206004820152601c60248201527f636f6d6d697373696f6e5261746520697320746f6f206c617267652e000000006044820152606401610bcb565b60018160c001511015610d2c5760405163a1b63ceb60e01b815260206004820181905260248201527f76616c696461746f725468726573686f6c6420697320746f6f20736d616c6c2e6044820152606401610bcb565b60018160e001511015610d825760405163a1b63ceb60e01b815260206004820152601b60248201527f6a61696c5468726573686f6c6420697320746f6f20736d616c6c2e00000000006044820152606401610bcb565b6001816101000151101561027b5760405163a1b63ceb60e01b815260206004820152601860248201527f6a61696c506572696f6420697320746f6f20736d616c6c2e00000000000000006044820152606401610bcb565b600081831415610df557610dee600183610fde565b9050610e7e565b60006002610e038486610ff5565b610e0d9190611042565b905084868281518110610e2257610e2261102c565b60200260200101511115610e4457610e3c86868684610dd9565b915050610e7e565b84868281518110610e5757610e5761102c565b60200260200101511015610e7b57610e3c8686610e75846001610ff5565b86610dd9565b90505b949350505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051610120810167ffffffffffffffff81118282101715610f0457634e487b7160e01b600052604160045260246000fd5b60405290565b60006101208284031215610f1d57600080fd5b610f25610ed2565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152508091505092915050565b600060208284031215610f9757600080fd5b5035919050565b634e487b7160e01b600052601260045260246000fd5b600082610fc357610fc3610f9e565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015610ff057610ff0610fc8565b500390565b6000821982111561100857611008610fc8565b500190565b600081600019048311821515161561102757611027610fc8565b500290565b634e487b7160e01b600052603260045260246000fd5b60008261105157611051610f9e565b50049056fea264697066735822122064526d5c022db31314cd4cb2f3cdb76bbdd8e181cb9fa867ee2c7f3f1646cdce64736f6c634300080c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/IStakeManager.sol/IStakeManager.json b/artifacts/contracts/IStakeManager.sol/IStakeManager.json index 507bb94..4069903 100644 --- a/artifacts/contracts/IStakeManager.sol/IStakeManager.json +++ b/artifacts/contracts/IStakeManager.sol/IStakeManager.json @@ -569,6 +569,30 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + } + ], + "name": "getOperatorStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "stakes", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -826,6 +850,30 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + } + ], + "name": "getValidatorStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "stakes", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/artifacts/contracts/StakeManager.sol/StakeManager.json b/artifacts/contracts/StakeManager.sol/StakeManager.json index 0848c2d..a35ddd0 100644 --- a/artifacts/contracts/StakeManager.sol/StakeManager.json +++ b/artifacts/contracts/StakeManager.sol/StakeManager.json @@ -58,6 +58,11 @@ "name": "OnlyNotLastBlock", "type": "error" }, + { + "inputs": [], + "name": "PastEpoch", + "type": "error" + }, { "inputs": [], "name": "SameAsOwner", @@ -691,6 +696,30 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + } + ], + "name": "getOperatorStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "stakes", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -948,6 +977,30 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + } + ], + "name": "getValidatorStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "stakes", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1360,8 +1413,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506153ca806100206000396000f3fe6080604052600436106102465760003560e01c80637243199111610139578063cf5c13db116100b6578063e1aca3411161007a578063e1aca341146107cf578063f3621e43146107ef578063f65a5ed21461080f578063f8d6b1ab1461082f578063fa52c7d81461084f578063ff3d3f60146108be57600080fd5b8063cf5c13db146106cd578063d0051adf146106ed578063d1f18ee11461071e578063dbd61d8714610776578063df93c8421461079657600080fd5b80639043150b116100fd5780639043150b1461062f5780639168ae7214610637578063ac7475ed1461066d578063ad71bd361461068d578063cbc0fac6146106ad57600080fd5b8063724319911461055557806374e2b63c146105865780637b520aa8146105ab5780637befa74f146105e157806388325234146105f457600080fd5b80632b47da52116101c7578063485cc9551161018b578063485cc955146104a55780635c4fc4c5146104c55780635d94ccf6146104f55780635efc766e146105155780636b2b33691461053557600080fd5b80632b47da52146103de57806333f32d7814610416578063428e85621461043657806345367f231461045657806346dfce7b1461047657600080fd5b8063195afea11161020e578063195afea11461030a5780631c1b4f3a1461032a5780632168e8b41461034a57806322226367146103785780632b42ed8c146103ad57600080fd5b806302fb4d851461024b5780630ddda63c1461026d578063158ef93e1461028d5780631903cf16146102bc578063190b9257146102dc575b600080fd5b34801561025757600080fd5b5061026b610266366004614acc565b6108de565b005b34801561027957600080fd5b5061026b610288366004614af8565b610ae4565b34801561029957600080fd5b506000546102a79060ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b5061026b6102d7366004614ba3565b610cef565b3480156102e857600080fd5b506102fc6102f7366004614af8565b610ee8565b6040519081526020016102b3565b34801561031657600080fd5b506102fc610325366004614acc565b610f09565b34801561033657600080fd5b506102fc610345366004614af8565b610f40565b34801561035657600080fd5b5061036a610365366004614c4d565b610f50565b6040516102b3929190614cb3565b34801561038457600080fd5b50610398610393366004614acc565b611036565b604080519283526020830191909152016102b3565b3480156103b957600080fd5b506103cd6103c8366004614cd5565b611104565b6040516102b3959493929190614d40565b3480156103ea57600080fd5b506001546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561042257600080fd5b506102fc610431366004614da0565b611451565b34801561044257600080fd5b5061026b610451366004614ba3565b611610565b34801561046257600080fd5b506102fc610471366004614af8565b611809565b34801561048257600080fd5b50610496610491366004614cd5565b61189f565b6040516102b393929190614e3f565b3480156104b157600080fd5b5061026b6104c0366004614e75565b611afc565b3480156104d157600080fd5b506104e56104e0366004614acc565b611b7b565b6040516102b39493929190614ee6565b34801561050157600080fd5b5061026b610510366004614af8565b611c47565b34801561052157600080fd5b506103fe610530366004614af8565b611d51565b34801561054157600080fd5b5061026b610550366004614f11565b611d7b565b34801561056157600080fd5b50610575610570366004614f2e565b611ec3565b6040516102b3959493929190614f8c565b34801561059257600080fd5b506000546103fe9061010090046001600160a01b031681565b3480156105b757600080fd5b506103fe6105c6366004614f11565b6006602052600090815260409020546001600160a01b031681565b61026b6105ef366004614fd9565b61227f565b34801561060057600080fd5b5061061461060f366004614f11565b61244a565b604080519384526020840192909252908201526060016102b3565b61026b6124ca565b34801561064357600080fd5b506103fe610652366004614f11565b6007602052600090815260409020546001600160a01b031681565b34801561067957600080fd5b5061026b610688366004614f11565b6124ff565b34801561069957600080fd5b5061036a6106a8366004614c4d565b6125c6565b3480156106b957600080fd5b5061026b6106c8366004614acc565b6126a4565b3480156106d957600080fd5b5061026b6106e8366004614acc565b61274c565b3480156106f957600080fd5b5061070d61070836600461501e565b61294b565b6040516102b3959493929190615053565b34801561072a57600080fd5b5061073e610739366004614acc565b612c03565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102b3565b34801561078257600080fd5b506102fc6107913660046150bc565b612d93565b3480156107a257600080fd5b506102fc6107b1366004614f11565b6001600160a01b031660009081526007602052604090206006015490565b3480156107db57600080fd5b5061026b6107ea366004614fd9565b612ddb565b3480156107fb57600080fd5b5061026b61080a3660046150bc565b612df4565b34801561081b57600080fd5b506103fe61082a366004614af8565b612f00565b34801561083b57600080fd5b5061026b61084a366004614f11565b612f10565b34801561085b57600080fd5b5061089861086a366004614f11565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102b3565b3480156108ca57600080fd5b5061026b6108d9366004614fd9565b612f72565b6001600160a01b038083166000908152600660209081526040808320548416808452600490925290912054909116610929576040516372898ae960e11b815260040160405180910390fd5b33411461094957604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610a5c946101009092041692633fa4f2459281830192610120928290030181865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906150ec565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190615167565b84919087613253565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610add5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b1a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610b505760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190615180565b15610be557604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c0d9161010090046001600160a01b03168661333b565b905080610c2d57604051637bc90c0560e11b815260040160405180910390fd5b610cb13333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190615167565b60008561335b565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d29575060018101546001600160a01b03163314155b15610d4757604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610d81576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190615180565b15610e1657604051631e59ccd960e01b815260040160405180910390fd5b610eaf600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190615167565b6001600160a01b03871660009081526004602052604090209086613409565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610ad491906151a2565b60028181548110610ef857600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f36929091610100909104168461341b565b5090505b92915050565b60038181548110610ef857600080fd5b60606000610f6484846005805490506135ae565b9093509050826001600160401b03811115610f8157610f81614b11565b604051908082528060200260200182016040528015610faa578160200160208202803683370190505b50915060005b8381101561102e576005610fc482876151cb565b81548110610fd457610fd46151e3565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611004576110046151e3565b6001600160a01b039092166020928302919091019091015280611026816151f9565b915050610fb0565b509250929050565b6000806110f9600084116110c057600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190615167565b6110c2565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111a657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190615167565b6111a8565b885b98506111ba88886005805490506135ae565b9097509150866001600160401b038111156111d7576111d7614b11565b604051908082528060200260200182016040528015611200578160200160208202803683370190505b509550866001600160401b0381111561121b5761121b614b11565b604051908082528060200260200182016040528015611244578160200160208202803683370190505b509450866001600160401b0381111561125f5761125f614b11565b604051908082528060200260200182016040528015611288578160200160208202803683370190505b509350866001600160401b038111156112a3576112a3614b11565b6040519080825280602002602001820160405280156112cc578160200160208202803683370190505b50925060005b878110156114445760056112e6828b6151cb565b815481106112f6576112f66151e3565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110611326576113266151e3565b60200260200101906001600160a01b031690816001600160a01b03168152505061137787828151811061135b5761135b6151e3565b602002602001015160008c856135e5909392919063ffffffff16565b868281518110611389576113896151e3565b6020026020010181815250506113c68782815181106113aa576113aa6151e3565b602002602001015160018c856135e5909392919063ffffffff16565b8582815181106113d8576113d86151e3565b6020026020010181815250506114158782815181106113f9576113f96151e3565b602002602001015160028c856135e5909392919063ffffffff16565b848281518110611427576114276151e3565b60209081029190910101528061143c816151f9565b9150506112d2565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190615167565b6114d89190615214565b6114e29190615214565b845190915060005b84811015611607576114fd6001846151cb565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157591906150ec565b905060005b838110156115f2576115d48286600460008c868151811061159d5761159d6151e3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136a69092919063ffffffff16565b6115de90876151cb565b9550806115ea816151f9565b91505061157a565b505080806115ff906151f9565b9150506114ea565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061164a575060018101546001600160a01b03163314155b1561166857604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166116a2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615180565b1561173757604051631e59ccd960e01b815260040160405180910390fd5b6117d0600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190615167565b6001600160a01b03871660009081526004602052604090209086613813565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610ad491906151a2565b600080821161188e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118899190615167565b611890565b815b9150610f3a6002600384613820565b6001600160a01b038416600090815260046020526040812060609182918661193d57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190615167565b61193f565b865b9650611953868683600701805490506135ae565b9095509150846001600160401b0381111561197057611970614b11565b604051908082528060200260200182016040528015611999578160200160208202803683370190505b509350846001600160401b038111156119b4576119b4614b11565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50925060005b85811015611af05760006007818482016119fd858c6151cb565b81548110611a0d57611a0d6151e3565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611a5357611a536151e3565b6001600160a01b0392831660209182029290920101528354611a7a9183911660028c6135e5565b8354611a939083906001600160a01b031660018d6135e5565b8454611aac9084906001600160a01b031660008e6135e5565b611ab691906151cb565b611ac091906151cb565b858381518110611ad257611ad26151e3565b60209081029190910101525080611ae8816151f9565b9150506119e3565b50509450945094915050565b334114611b1c57604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611b3f5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611bb057611bb06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611be357611be3614eae565b6002811115611bf457611bf4614eae565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611c36575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611c7d5760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ca157611ca16151e3565b9060005260206000209060030201905060008160020154905080421015611cdb576040516303cb96db60e21b815260040160405180910390fd5b80611cf957604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611d4b9160ff169033906138f2565b50505050565b60058181548110611d6157600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de89190615180565b611e055760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611e279083613a11565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f439190615167565b905060008911611f535780611f55565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd91906150ec565b9050611fdf89896005805490506135ae565b9098509250876001600160401b03811115611ffc57611ffc614b11565b604051908082528060200260200182016040528015612025578160200160208202803683370190505b509650876001600160401b0381111561204057612040614b11565b604051908082528060200260200182016040528015612069578160200160208202803683370190505b509550876001600160401b0381111561208457612084614b11565b6040519080825280602002602001820160405280156120ad578160200160208202803683370190505b509450876001600160401b038111156120c8576120c8614b11565b6040519080825280602002602001820160405280156120f1578160200160208202803683370190505b50935060005b888110156122715760006004816005612110858f6151cb565b81548110612120576121206151e3565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110612166576121666151e3565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110612198576121986151e3565b6001600160a01b03909216602092830291909101909101526121ba818d613a53565b8783815181106121cc576121cc6151e3565b60209081029190910101526121f5818d6000908152600291909101602052604090205460ff1690565b158015612213575060008c815260038201602052604090205460ff16155b801561223c57508260c00151878381518110612231576122316151e3565b602002602001015110155b86838151811061224e5761224e6151e3565b911515602092830291909101909101525080612269816151f9565b9150506120f7565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166122b9576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615180565b1561234e57604051631e59ccd960e01b815260040160405180910390fd5b8161236c57604051637bc90c0560e11b815260040160405180910390fd5b612377833384613a66565b6124053385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190615167565b6123fe9060016151cb565b868661335b565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610ce192919061522b565b6001600160a01b03808216600090815260076020526040812081549192839283929161247f9183916101009091041684613b07565b6000549094506124a090829061010090046001600160a01b03166001613b07565b6000549093506124c190829061010090046001600160a01b03166002613b07565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b0316612535576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b031661255c8286613d2d565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610ad4565b606060006125da84846008805490506135ae565b9093509050826001600160401b038111156125f7576125f7614b11565b604051908082528060200260200182016040528015612620578160200160208202803683370190505b50915060005b8381101561102e57600861263a82876151cb565b8154811061264a5761264a6151e3565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061267a5761267a6151e3565b6001600160a01b03909216602092830291909101909101528061269c816151f9565b915050612626565b336000818152600460205260409020546001600160a01b03166126da576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206127029161010090046001600160a01b03168561333b565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611d4b57611d4b600033836138f2565b6001600160a01b03808316600090815260046020526040902054839116612786576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166127bc5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190615180565b1561285157604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085203386526007909252842061288c939092610100909104169087613da7565b9050806128ac57604051637bc90c0560e11b815260040160405180910390fd5b6129043386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061298090899089906135ae565b9097509150866001600160401b0381111561299d5761299d614b11565b6040519080825280602002602001820160405280156129c6578160200160208202803683370190505b509550866001600160401b038111156129e1576129e1614b11565b604051908082528060200260200182016040528015612a0a578160200160208202803683370190505b509450866001600160401b03811115612a2557612a25614b11565b604051908082528060200260200182016040528015612a4e578160200160208202803683370190505b509350866001600160401b03811115612a6957612a69614b11565b604051908082528060200260200182016040528015612a92578160200160208202803683370190505b50925060005b87811015612bf657600060068301612ab0838c6151cb565b81548110612ac057612ac06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612af357612af3614eae565b6002811115612b0457612b04614eae565b81526020016001820154815260200160028201548152505090508060000151888381518110612b3557612b356151e3565b60200260200101906002811115612b4e57612b4e614eae565b90816002811115612b6157612b61614eae565b815250508060200151878381518110612b7c57612b7c6151e3565b6020026020010181815250508060400151868381518110612b9f57612b9f6151e3565b6020908102919091010152604081015115801590612bc1575080604001514210155b858381518110612bd357612bd36151e3565b911515602092830291909101909101525080612bee816151f9565b915050612a98565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c839190615167565b905060008711612c935780612c95565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d91906150ec565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612d57818a613a53565b9350868015612d64575085155b8015612d7457508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612dd0939092610100909104169085613de0565b5090505b9392505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612e2e576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612e645760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612e9f939092610100909104169087613da7565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612ef857612ef8600033836138f2565b505050505050565b60088181548110611d6157600080fd5b336000818152600760205260409020546001600160a01b0316612f465760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612f6e9161010090046001600160a01b0316613fea565b5050565b6001600160a01b03808416600090815260046020526040902054849116612fac576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612fe25760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130599190615180565b1561307757604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a811686526004909452919093206130b592849261010090041690888861400e565b9350836130d557604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156130f6576130f6614eae565b81526020810187905260400161310f42620d2f006151cb565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561314d5761314d614eae565b0217905550602082015181600101556040820151816002015550506131f96003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e49190615167565b6131ef9060016151cb565b6002919087614150565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061323a90600190615214565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461327c57600083815260098601602052604090208290555b6000838152600a860160205260408120546132989060016151cb565b6000858152600a88016020526040902081905560e086015190915081108015906132e457506003860160006132ce8660016151cb565b815260208101919091526040016000205460ff16155b15613332576101008501516132f990856151cb565b91505b81841015613332578361330e816151f9565b60008181526003890160205260409020805460ff1916600117905594506132fc9050565b50949350505050565b600080600061334b86868661341b565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166133d45780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206133fb908290869086866141e9565b612ef86002600386856142b1565b6134168383836000614302565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b9190615167565b6134959190615214565b90508315806134ac5750806134aa83866151cb565b115b156134be576134bb8282615214565b93505b60005b848110156135a4576134d46001846151cb565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015613520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354491906150ec565b905060006135538983876136a6565b905080613561575050613592565b60a0820151613571575050613592565b613583818360a0015160646019614388565b61358d90876151cb565b955050505b8061359c816151f9565b9150506134c1565b5050935093915050565b600080826135bc85876151cb565b106135ce576135cb8584615214565b93505b836135d981876151cb565b91509150935093915050565b600061369b85600201600085600281111561360257613602614eae565b600281111561361357613613614eae565b81526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208387600101600087600281111561365d5761365d614eae565b600281111561366e5761366e614eae565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613820565b90505b949350505050565b600081815260028401602052604081205460ff16806136d55750600082815260038501602052604090205460ff165b156136e257506000612dd4565b60006136ee8584613a53565b90506049831061372f578360c0015181101561370e576000915050612dd4565b6298968061371e82610a34615246565b6137289190615265565b91506137c8565b8061373e576000915050612dd4565b61374a6019600a615363565b61375b8560800151606460196143b4565b6137659083615246565b61376f9190615265565b915081613780576000915050612dd4565b6137a3846060015185604001516137979190615246565b6301e1338060196143b4565b6137ad9083615246565b91506137bb6019600a615363565b6137c59083615265565b91505b6000838152600a86016020526040902054801561380a576000848152600987016020526040902054613806846137fe8484615214565b836019614388565b9350505b50509392505050565b6134168383836001614302565b825460009080158061384e57508285600081548110613841576138416151e3565b9060005260206000200154115b1561385d576000915050612dd4565b828561386a600184615214565b8154811061387a5761387a6151e3565b9060005260206000200154116138b95783613896600183615214565b815481106138a6576138a66151e3565b9060005260206000200154915050612dd4565b60006138c886856000856143fa565b90508481815481106138dc576138dc6151e3565b9060005260206000200154925050509392505050565b60008084600281111561390757613907614eae565b1415613966576040516001600160a01b038416908390600081818185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b5050809150506139e8565b61396f846144a2565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615180565b90505b80611d4b5783604051630db5347560e11b8152600401613a08919061536f565b60405180910390fd5b81546001600160a01b031615613a3957604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612f6e8282613d2d565b6000612dd4600484016005850184613820565b6000836002811115613a7a57613a7a614eae565b1415613aa05780341461341657604051630fe5b06560e11b815260040160405180910390fd5b3415613abf5760405163a745ac8560e01b815260040160405180910390fd5b6000613aca846144a2565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064016139a2565b600080846003016000846002811115613b2257613b22614eae565b6002811115613b3357613b33614eae565b8152602081019190915260400160002054905080613b55576000915050612dd4565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb99190615167565b90506000613bc8600184615214565b9050600081118015613c2b575081876003016000876002811115613bee57613bee614eae565b6002811115613bff57613bff614eae565b81526020019081526020016000208281548110613c1e57613c1e6151e3565b9060005260206000200154115b15613c3e5780613c3a8161537d565b9150505b81876003016000876002811115613c5757613c57614eae565b6002811115613c6857613c68614eae565b81526020019081526020016000208281548110613c8757613c876151e3565b90600052602060002001541115613ca45760009350505050612dd4565b6000805b828111613d2157886004016000886002811115613cc757613cc7614eae565b6002811115613cd857613cd8614eae565b81526020019081526020016000208181548110613cf757613cf76151e3565b906000526020600020015482613d0d91906151cb565b915080613d19816151f9565b915050613ca8565b50979650505050505050565b6001600160a01b038116613d5457604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d825760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613db887878787613de0565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615167565b613e709190615214565b9050831580613e87575080613e8583866151cb565b115b15613e9957613e968282615214565b93505b60005b84811015613fdf57613eaf6001846151cb565b8654909350600090613ece908a906001600160a01b03166002876135e5565b8754613ee7908b906001600160a01b03166001886135e5565b8854613f00908c906001600160a01b03166000896135e5565b613f0a91906151cb565b613f1491906151cb565b905080613f215750613fcd565b60405163fcbb371b60e01b815260048101859052600090613f9a906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9291906150ec565b89908761450d565b905080613fa8575050613fcd565b613fbe8183613fb78b89613a53565b6019614388565b613fc890876151cb565b955050505b80613fd7816151f9565b915050613e9c565b505094509492505050565b613ff682826001614558565b61400282826002614558565b612f6e82826000614558565b600061412a86600201600085600281111561402b5761402b614eae565b600281111561403c5761403c614eae565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156140a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c69190615167565b6140d19060016151cb565b848960010160008860028111156140ea576140ea614eae565b60028111156140fb576140fb614eae565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614150565b91508161413957506000614147565b61414484868461487e565b50805b95945050505050565b600061415d8585856148fe565b845460008561416d600184615214565b8154811061417d5761417d6151e3565b9060005260206000200154905080841115614198578061419a565b835b935083156141de5783866141af600185615214565b815481106141bf576141bf6151e3565b9060005260206000200160008282546141d89190615214565b90915550505b509195945050505050565b61429885600201600084600281111561420457614204614eae565b600281111561421557614215614eae565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425857614258614eae565b600281111561426957614269614eae565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b1565b8454610add90849086906001600160a01b0316846149b6565b6142bc8484846148fe565b8354819084906142ce90600190615214565b815481106142de576142de6151e3565b9060005260206000200160008282546142f791906151cb565b909155505050505050565b815160005b81811015612ef8576000848281518110614323576143236151e3565b6020026020010151905085811180156143535750600081815260028801602052604090205460ff16151584151514155b156143755760008181526002880160205260409020805460ff19168515151790555b5080614380816151f9565b915050614307565b600061439582600a615363565b6143a08585856143b4565b6143aa9087615246565b61369b9190615265565b6000806143c28360016151cb565b6143cd90600a615363565b6143d79086615246565b9050600a6143e58583615265565b6143f09060056151cb565b6141479190615265565b6000818314156144165761440f600183615214565b905061369e565b6000600261442484866151cb565b61442e9190615265565b905084868281548110614443576144436151e3565b9060005260206000200154111561446857614460868686846143fa565b91505061369e565b8486828154811061447b5761447b6151e3565b9060005260206000200154101561369b57614460868661449c8460016151cb565b866143fa565b600060018260028111156144b8576144b8614eae565b14156144cc57506001602960991b01919050565b60028260028111156144e0576144e0614eae565b14156144f457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b60008061451b8585856136a6565b90508061452c576000915050612dd4565b60a084015161453c579050612dd4565b61454e818560a0015160646019614388565b6141479082615214565b6000614565848484613b07565b9050806145725750505050565b600084600301600084600281111561458c5761458c614eae565b600281111561459d5761459d614eae565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146139190615167565b85600301600085600281111561462b5761462b614eae565b600281111561463c5761463c614eae565b81526020019081526020016000206001836146579190615214565b81548110614667576146676151e3565b9060005260206000200154116147025784600301600084600281111561468f5761468f614eae565b60028111156146a0576146a0614eae565b815260200190815260200160002060006146ba9190614a36565b8460040160008460028111156146d2576146d2614eae565b60028111156146e3576146e3614eae565b815260200190815260200160002060006146fd9190614a36565b614867565b604051806020016040528086600301600086600281111561472557614725614eae565b600281111561473657614736614eae565b81526020019081526020016000206001846147519190615214565b81548110614761576147616151e3565b906000526020600020015481525085600301600085600281111561478757614787614eae565b600281111561479857614798614eae565b815260208101919091526040016000206147b3916001614a57565b5060405180602001604052808660040160008660028111156147d7576147d7614eae565b60028111156147e8576147e8614eae565b81526020019081526020016000206001846148039190615214565b81548110614813576148136151e3565b906000526020600020015481525085600401600085600281111561483957614839614eae565b600281111561484a5761484a614eae565b81526020810191909152604001600020614865916001614a57565b505b8454610add9084906001600160a01b0316846138f2565b611d4b83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e79190615167565b6148f29060016151cb565b60048601919084614150565b82548061492857508254600181810185556000948552602085209091019190915581540181559052565b600084614936600184615214565b81548110614946576149466151e3565b90600052602060002001549050828114610add57845460018181018755600087815260209020909101849055849081906149809085615214565b81548110614990576149906151e3565b600091825260208083209091015483546001810185559383529120909101555050505050565b6001600160a01b038216600090815260088501602052604090205460ff16614a24576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611d4b600485016005860185846142b1565b5080546000825590600052602060002090810190614a549190614aa2565b50565b828054828255906000526020600020908101928215614a92579160200282015b82811115614a92578251825591602001919060010190614a77565b50614a9e929150614aa2565b5090565b5b80821115614a9e5760008155600101614aa3565b6001600160a01b0381168114614a5457600080fd5b60008060408385031215614adf57600080fd5b8235614aea81614ab7565b946020939093013593505050565b600060208284031215614b0a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614b4a57614b4a614b11565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b7857614b78614b11565b604052919050565b60006001600160401b03821115614b9957614b99614b11565b5060051b60200190565b60008060408385031215614bb657600080fd5b8235614bc181614ab7565b91506020838101356001600160401b03811115614bdd57600080fd5b8401601f81018613614bee57600080fd5b8035614c01614bfc82614b80565b614b50565b81815260059190911b82018301908381019088831115614c2057600080fd5b928401925b82841015614c3e57833582529284019290840190614c25565b80955050505050509250929050565b60008060408385031215614c6057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ca85781516001600160a01b031687529582019590820190600101614c83565b509495945050505050565b604081526000614cc66040830185614c6f565b90508260208301529392505050565b60008060008060808587031215614ceb57600080fd5b8435614cf681614ab7565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ca857815187529582019590820190600101614d24565b60a081526000614d5360a0830188614c6f565b8281036020840152614d658188614d10565b90508281036040840152614d798187614d10565b90508281036060840152614d8d8186614d10565b9150508260808301529695505050505050565b60008060408385031215614db357600080fd5b82356001600160401b03811115614dc957600080fd5b8301601f81018513614dda57600080fd5b80356020614dea614bfc83614b80565b82815260059290921b83018101918181019088841115614e0957600080fd5b938201935b83851015614e30578435614e2181614ab7565b82529382019390820190614e0e565b98969091013596505050505050565b606081526000614e526060830186614c6f565b8281036020840152614e648186614d10565b915050826040830152949350505050565b60008060408385031215614e8857600080fd5b8235614e9381614ab7565b91506020830135614ea381614ab7565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110614ee257634e487b7160e01b600052602160045260246000fd5b9052565b60808101614ef48287614ec4565b846020830152836040830152821515606083015295945050505050565b600060208284031215614f2357600080fd5b8135612dd481614ab7565b600080600060608486031215614f4357600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ca8578151151587529582019590820190600101614f6e565b60a081526000614f9f60a0830188614c6f565b8281036020840152614fb18188614c6f565b90508281036040840152614fc58187614d10565b90508281036060840152614d8d8186614f5a565b600080600060608486031215614fee57600080fd5b8335614ff981614ab7565b925060208401356003811061500d57600080fd5b929592945050506040919091013590565b60008060006060848603121561503357600080fd5b833561503e81614ab7565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561509357615083848351614ec4565b9284019290840190600101615070565b505050838103828501526150a78189614d10565b9150508281036040840152614fc58187614d10565b6000806000606084860312156150d157600080fd5b83356150dc81614ab7565b9250602084013561500d81614ab7565b600061012082840312156150ff57600080fd5b615107614b27565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561517957600080fd5b5051919050565b60006020828403121561519257600080fd5b81518015158114612dd457600080fd5b602081526000612dd46020830184614d10565b634e487b7160e01b600052601160045260246000fd5b600082198211156151de576151de6151b5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561520d5761520d6151b5565b5060010190565b600082821015615226576152266151b5565b500390565b604081016152398285614ec4565b8260208301529392505050565b6000816000190483118215151615615260576152606151b5565b500290565b60008261528257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102e5781600019048211156152a8576152a86151b5565b808516156152b557918102915b93841c939080029061528c565b6000826152d157506001610f3a565b816152de57506000610f3a565b81600181146152f457600281146152fe5761531a565b6001915050610f3a565b60ff84111561530f5761530f6151b5565b50506001821b610f3a565b5060208310610133831016604e8410600b841016171561533d575081810a610f3a565b6153478383615287565b806000190482111561535b5761535b6151b5565b029392505050565b6000612dd483836152c2565b60208101610f3a8284614ec4565b60008161538c5761538c6151b5565b50600019019056fea26469706673582212205e56660e794cf6ac8fef932c6bc6ddc03d16240bf42c38f16cc5710cdd39fbf664736f6c634300080c0033", - "deployedBytecode": "0x6080604052600436106102465760003560e01c80637243199111610139578063cf5c13db116100b6578063e1aca3411161007a578063e1aca341146107cf578063f3621e43146107ef578063f65a5ed21461080f578063f8d6b1ab1461082f578063fa52c7d81461084f578063ff3d3f60146108be57600080fd5b8063cf5c13db146106cd578063d0051adf146106ed578063d1f18ee11461071e578063dbd61d8714610776578063df93c8421461079657600080fd5b80639043150b116100fd5780639043150b1461062f5780639168ae7214610637578063ac7475ed1461066d578063ad71bd361461068d578063cbc0fac6146106ad57600080fd5b8063724319911461055557806374e2b63c146105865780637b520aa8146105ab5780637befa74f146105e157806388325234146105f457600080fd5b80632b47da52116101c7578063485cc9551161018b578063485cc955146104a55780635c4fc4c5146104c55780635d94ccf6146104f55780635efc766e146105155780636b2b33691461053557600080fd5b80632b47da52146103de57806333f32d7814610416578063428e85621461043657806345367f231461045657806346dfce7b1461047657600080fd5b8063195afea11161020e578063195afea11461030a5780631c1b4f3a1461032a5780632168e8b41461034a57806322226367146103785780632b42ed8c146103ad57600080fd5b806302fb4d851461024b5780630ddda63c1461026d578063158ef93e1461028d5780631903cf16146102bc578063190b9257146102dc575b600080fd5b34801561025757600080fd5b5061026b610266366004614acc565b6108de565b005b34801561027957600080fd5b5061026b610288366004614af8565b610ae4565b34801561029957600080fd5b506000546102a79060ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b5061026b6102d7366004614ba3565b610cef565b3480156102e857600080fd5b506102fc6102f7366004614af8565b610ee8565b6040519081526020016102b3565b34801561031657600080fd5b506102fc610325366004614acc565b610f09565b34801561033657600080fd5b506102fc610345366004614af8565b610f40565b34801561035657600080fd5b5061036a610365366004614c4d565b610f50565b6040516102b3929190614cb3565b34801561038457600080fd5b50610398610393366004614acc565b611036565b604080519283526020830191909152016102b3565b3480156103b957600080fd5b506103cd6103c8366004614cd5565b611104565b6040516102b3959493929190614d40565b3480156103ea57600080fd5b506001546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561042257600080fd5b506102fc610431366004614da0565b611451565b34801561044257600080fd5b5061026b610451366004614ba3565b611610565b34801561046257600080fd5b506102fc610471366004614af8565b611809565b34801561048257600080fd5b50610496610491366004614cd5565b61189f565b6040516102b393929190614e3f565b3480156104b157600080fd5b5061026b6104c0366004614e75565b611afc565b3480156104d157600080fd5b506104e56104e0366004614acc565b611b7b565b6040516102b39493929190614ee6565b34801561050157600080fd5b5061026b610510366004614af8565b611c47565b34801561052157600080fd5b506103fe610530366004614af8565b611d51565b34801561054157600080fd5b5061026b610550366004614f11565b611d7b565b34801561056157600080fd5b50610575610570366004614f2e565b611ec3565b6040516102b3959493929190614f8c565b34801561059257600080fd5b506000546103fe9061010090046001600160a01b031681565b3480156105b757600080fd5b506103fe6105c6366004614f11565b6006602052600090815260409020546001600160a01b031681565b61026b6105ef366004614fd9565b61227f565b34801561060057600080fd5b5061061461060f366004614f11565b61244a565b604080519384526020840192909252908201526060016102b3565b61026b6124ca565b34801561064357600080fd5b506103fe610652366004614f11565b6007602052600090815260409020546001600160a01b031681565b34801561067957600080fd5b5061026b610688366004614f11565b6124ff565b34801561069957600080fd5b5061036a6106a8366004614c4d565b6125c6565b3480156106b957600080fd5b5061026b6106c8366004614acc565b6126a4565b3480156106d957600080fd5b5061026b6106e8366004614acc565b61274c565b3480156106f957600080fd5b5061070d61070836600461501e565b61294b565b6040516102b3959493929190615053565b34801561072a57600080fd5b5061073e610739366004614acc565b612c03565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102b3565b34801561078257600080fd5b506102fc6107913660046150bc565b612d93565b3480156107a257600080fd5b506102fc6107b1366004614f11565b6001600160a01b031660009081526007602052604090206006015490565b3480156107db57600080fd5b5061026b6107ea366004614fd9565b612ddb565b3480156107fb57600080fd5b5061026b61080a3660046150bc565b612df4565b34801561081b57600080fd5b506103fe61082a366004614af8565b612f00565b34801561083b57600080fd5b5061026b61084a366004614f11565b612f10565b34801561085b57600080fd5b5061089861086a366004614f11565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102b3565b3480156108ca57600080fd5b5061026b6108d9366004614fd9565b612f72565b6001600160a01b038083166000908152600660209081526040808320548416808452600490925290912054909116610929576040516372898ae960e11b815260040160405180910390fd5b33411461094957604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610a5c946101009092041692633fa4f2459281830192610120928290030181865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906150ec565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190615167565b84919087613253565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610add5781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b1a576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610b505760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190615180565b15610be557604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c0d9161010090046001600160a01b03168661333b565b905080610c2d57604051637bc90c0560e11b815260040160405180910390fd5b610cb13333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190615167565b60008561335b565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d29575060018101546001600160a01b03163314155b15610d4757604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610d81576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190615180565b15610e1657604051631e59ccd960e01b815260040160405180910390fd5b610eaf600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190615167565b6001600160a01b03871660009081526004602052604090209086613409565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610ad491906151a2565b60028181548110610ef857600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f36929091610100909104168461341b565b5090505b92915050565b60038181548110610ef857600080fd5b60606000610f6484846005805490506135ae565b9093509050826001600160401b03811115610f8157610f81614b11565b604051908082528060200260200182016040528015610faa578160200160208202803683370190505b50915060005b8381101561102e576005610fc482876151cb565b81548110610fd457610fd46151e3565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611004576110046151e3565b6001600160a01b039092166020928302919091019091015280611026816151f9565b915050610fb0565b509250929050565b6000806110f9600084116110c057600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190615167565b6110c2565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111a657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190615167565b6111a8565b885b98506111ba88886005805490506135ae565b9097509150866001600160401b038111156111d7576111d7614b11565b604051908082528060200260200182016040528015611200578160200160208202803683370190505b509550866001600160401b0381111561121b5761121b614b11565b604051908082528060200260200182016040528015611244578160200160208202803683370190505b509450866001600160401b0381111561125f5761125f614b11565b604051908082528060200260200182016040528015611288578160200160208202803683370190505b509350866001600160401b038111156112a3576112a3614b11565b6040519080825280602002602001820160405280156112cc578160200160208202803683370190505b50925060005b878110156114445760056112e6828b6151cb565b815481106112f6576112f66151e3565b9060005260206000200160009054906101000a90046001600160a01b0316878281518110611326576113266151e3565b60200260200101906001600160a01b031690816001600160a01b03168152505061137787828151811061135b5761135b6151e3565b602002602001015160008c856135e5909392919063ffffffff16565b868281518110611389576113896151e3565b6020026020010181815250506113c68782815181106113aa576113aa6151e3565b602002602001015160018c856135e5909392919063ffffffff16565b8582815181106113d8576113d86151e3565b6020026020010181815250506114158782815181106113f9576113f96151e3565b602002602001015160028c856135e5909392919063ffffffff16565b848281518110611427576114276151e3565b60209081029190910101528061143c816151f9565b9150506112d2565b5050945094509450945094565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190615167565b6114d89190615214565b6114e29190615214565b845190915060005b84811015611607576114fd6001846151cb565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157591906150ec565b905060005b838110156115f2576115d48286600460008c868151811061159d5761159d6151e3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206136a69092919063ffffffff16565b6115de90876151cb565b9550806115ea816151f9565b91505061157a565b505080806115ff906151f9565b9150506114ea565b50505092915050565b6001600160a01b0382811660009081526004602052604090208054849216331480159061164a575060018101546001600160a01b03163314155b1561166857604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166116a2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615180565b1561173757604051631e59ccd960e01b815260040160405180910390fd5b6117d0600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190615167565b6001600160a01b03871660009081526004602052604090209086613813565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610ad491906151a2565b600080821161188e57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118899190615167565b611890565b815b9150610f3a6002600384613820565b6001600160a01b038416600090815260046020526040812060609182918661193d57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190615167565b61193f565b865b9650611953868683600701805490506135ae565b9095509150846001600160401b0381111561197057611970614b11565b604051908082528060200260200182016040528015611999578160200160208202803683370190505b509350846001600160401b038111156119b4576119b4614b11565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50925060005b85811015611af05760006007818482016119fd858c6151cb565b81548110611a0d57611a0d6151e3565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611a5357611a536151e3565b6001600160a01b0392831660209182029290920101528354611a7a9183911660028c6135e5565b8354611a939083906001600160a01b031660018d6135e5565b8454611aac9084906001600160a01b031660008e6135e5565b611ab691906151cb565b611ac091906151cb565b858381518110611ad257611ad26151e3565b60209081029190910101525080611ae8816151f9565b9150506119e3565b50509450945094915050565b334114611b1c57604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611b3f5760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611bb057611bb06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611be357611be3614eae565b6002811115611bf457611bf4614eae565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611c36575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611c7d5760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611ca157611ca16151e3565b9060005260206000209060030201905060008160020154905080421015611cdb576040516303cb96db60e21b815260040160405180910390fd5b80611cf957604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611d4b9160ff169033906138f2565b50505050565b60058181548110611d6157600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de89190615180565b611e055760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611e279083613a11565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f439190615167565b905060008911611f535780611f55565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015611fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcd91906150ec565b9050611fdf89896005805490506135ae565b9098509250876001600160401b03811115611ffc57611ffc614b11565b604051908082528060200260200182016040528015612025578160200160208202803683370190505b509650876001600160401b0381111561204057612040614b11565b604051908082528060200260200182016040528015612069578160200160208202803683370190505b509550876001600160401b0381111561208457612084614b11565b6040519080825280602002602001820160405280156120ad578160200160208202803683370190505b509450876001600160401b038111156120c8576120c8614b11565b6040519080825280602002602001820160405280156120f1578160200160208202803683370190505b50935060005b888110156122715760006004816005612110858f6151cb565b81548110612120576121206151e3565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a9084908110612166576121666151e3565b6001600160a01b03928316602091820292909201015260018201548951911690899084908110612198576121986151e3565b6001600160a01b03909216602092830291909101909101526121ba818d613a53565b8783815181106121cc576121cc6151e3565b60209081029190910101526121f5818d6000908152600291909101602052604090205460ff1690565b158015612213575060008c815260038201602052604090205460ff16155b801561223c57508260c00151878381518110612231576122316151e3565b602002602001015110155b86838151811061224e5761224e6151e3565b911515602092830291909101909101525080612269816151f9565b9150506120f7565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166122b9576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615180565b1561234e57604051631e59ccd960e01b815260040160405180910390fd5b8161236c57604051637bc90c0560e11b815260040160405180910390fd5b612377833384613a66565b6124053385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190615167565b6123fe9060016151cb565b868661335b565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610ce192919061522b565b6001600160a01b03808216600090815260076020526040812081549192839283929161247f9183916101009091041684613b07565b6000549094506124a090829061010090046001600160a01b03166001613b07565b6000549093506124c190829061010090046001600160a01b03166002613b07565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b336000818152600460205260409020546001600160a01b0316612535576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b031661255c8286613d2d565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610ad4565b606060006125da84846008805490506135ae565b9093509050826001600160401b038111156125f7576125f7614b11565b604051908082528060200260200182016040528015612620578160200160208202803683370190505b50915060005b8381101561102e57600861263a82876151cb565b8154811061264a5761264a6151e3565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061267a5761267a6151e3565b6001600160a01b03909216602092830291909101909101528061269c816151f9565b915050612626565b336000818152600460205260409020546001600160a01b03166126da576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206127029161010090046001600160a01b03168561333b565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611d4b57611d4b600033836138f2565b6001600160a01b03808316600090815260046020526040902054839116612786576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166127bc5760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190615180565b1561285157604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b0386811683526004602090815260408085203386526007909252842061288c939092610100909104169087613da7565b9050806128ac57604051637bc90c0560e11b815260040160405180910390fd5b6129043386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c85573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b03831660009081526007602052604081206006810154606092839283928392919061298090899089906135ae565b9097509150866001600160401b0381111561299d5761299d614b11565b6040519080825280602002602001820160405280156129c6578160200160208202803683370190505b509550866001600160401b038111156129e1576129e1614b11565b604051908082528060200260200182016040528015612a0a578160200160208202803683370190505b509450866001600160401b03811115612a2557612a25614b11565b604051908082528060200260200182016040528015612a4e578160200160208202803683370190505b509350866001600160401b03811115612a6957612a69614b11565b604051908082528060200260200182016040528015612a92578160200160208202803683370190505b50925060005b87811015612bf657600060068301612ab0838c6151cb565b81548110612ac057612ac06151e3565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612af357612af3614eae565b6002811115612b0457612b04614eae565b81526020016001820154815260200160028201548152505090508060000151888381518110612b3557612b356151e3565b60200260200101906002811115612b4e57612b4e614eae565b90816002811115612b6157612b61614eae565b815250508060200151878381518110612b7c57612b7c6151e3565b6020026020010181815250508060400151868381518110612b9f57612b9f6151e3565b6020908102919091010152604081015115801590612bc1575080604001514210155b858381518110612bd357612bd36151e3565b911515602092830291909101909101525080612bee816151f9565b915050612a98565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c839190615167565b905060008711612c935780612c95565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d91906150ec565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612d57818a613a53565b9350868015612d64575085155b8015612d7457508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612dd0939092610100909104169085613de0565b5090505b9392505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116612e2e576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612e645760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612e9f939092610100909104169087613da7565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a28015612ef857612ef8600033836138f2565b505050505050565b60088181548110611d6157600080fd5b336000818152600760205260409020546001600160a01b0316612f465760405163cf83d93d60e01b815260040160405180910390fd5b6000805433825260076020526040909120612f6e9161010090046001600160a01b0316613fea565b5050565b6001600160a01b03808416600090815260046020526040902054849116612fac576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316612fe25760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130599190615180565b1561307757604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a811686526004909452919093206130b592849261010090041690888861400e565b9350836130d557604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156130f6576130f6614eae565b81526020810187905260400161310f42620d2f006151cb565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff199091169083600281111561314d5761314d614eae565b0217905550602082015181600101556040820151816002015550506131f96003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e49190615167565b6131ef9060016151cb565b6002919087614150565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061323a90600190615214565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461327c57600083815260098601602052604090208290555b6000838152600a860160205260408120546132989060016151cb565b6000858152600a88016020526040902081905560e086015190915081108015906132e457506003860160006132ce8660016151cb565b815260208101919091526040016000205460ff16155b15613332576101008501516132f990856151cb565b91505b81841015613332578361330e816151f9565b60008181526003890160205260409020805460ff1916600117905594506132fc9050565b50949350505050565b600080600061334b86868661341b565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166133d45780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206133fb908290869086866141e9565b612ef86002600386856142b1565b6134168383836000614302565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b9190615167565b6134959190615214565b90508315806134ac5750806134aa83866151cb565b115b156134be576134bb8282615214565b93505b60005b848110156135a4576134d46001846151cb565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa158015613520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061354491906150ec565b905060006135538983876136a6565b905080613561575050613592565b60a0820151613571575050613592565b613583818360a0015160646019614388565b61358d90876151cb565b955050505b8061359c816151f9565b9150506134c1565b5050935093915050565b600080826135bc85876151cb565b106135ce576135cb8584615214565b93505b836135d981876151cb565b91509150935093915050565b600061369b85600201600085600281111561360257613602614eae565b600281111561361357613613614eae565b81526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000208387600101600087600281111561365d5761365d614eae565b600281111561366e5761366e614eae565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613820565b90505b949350505050565b600081815260028401602052604081205460ff16806136d55750600082815260038501602052604090205460ff165b156136e257506000612dd4565b60006136ee8584613a53565b90506049831061372f578360c0015181101561370e576000915050612dd4565b6298968061371e82610a34615246565b6137289190615265565b91506137c8565b8061373e576000915050612dd4565b61374a6019600a615363565b61375b8560800151606460196143b4565b6137659083615246565b61376f9190615265565b915081613780576000915050612dd4565b6137a3846060015185604001516137979190615246565b6301e1338060196143b4565b6137ad9083615246565b91506137bb6019600a615363565b6137c59083615265565b91505b6000838152600a86016020526040902054801561380a576000848152600987016020526040902054613806846137fe8484615214565b836019614388565b9350505b50509392505050565b6134168383836001614302565b825460009080158061384e57508285600081548110613841576138416151e3565b9060005260206000200154115b1561385d576000915050612dd4565b828561386a600184615214565b8154811061387a5761387a6151e3565b9060005260206000200154116138b95783613896600183615214565b815481106138a6576138a66151e3565b9060005260206000200154915050612dd4565b60006138c886856000856143fa565b90508481815481106138dc576138dc6151e3565b9060005260206000200154925050509392505050565b60008084600281111561390757613907614eae565b1415613966576040516001600160a01b038416908390600081818185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b5050809150506139e8565b61396f846144a2565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af11580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615180565b90505b80611d4b5783604051630db5347560e11b8152600401613a08919061536f565b60405180910390fd5b81546001600160a01b031615613a3957604051621d934160e11b815260040160405180910390fd5b81546001600160a01b03191633178255612f6e8282613d2d565b6000612dd4600484016005850184613820565b6000836002811115613a7a57613a7a614eae565b1415613aa05780341461341657604051630fe5b06560e11b815260040160405180910390fd5b3415613abf5760405163a745ac8560e01b815260040160405180910390fd5b6000613aca846144a2565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd906064016139a2565b600080846003016000846002811115613b2257613b22614eae565b6002811115613b3357613b33614eae565b8152602081019190915260400160002054905080613b55576000915050612dd4565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb99190615167565b90506000613bc8600184615214565b9050600081118015613c2b575081876003016000876002811115613bee57613bee614eae565b6002811115613bff57613bff614eae565b81526020019081526020016000208281548110613c1e57613c1e6151e3565b9060005260206000200154115b15613c3e5780613c3a8161537d565b9150505b81876003016000876002811115613c5757613c57614eae565b6002811115613c6857613c68614eae565b81526020019081526020016000208281548110613c8757613c876151e3565b90600052602060002001541115613ca45760009350505050612dd4565b6000805b828111613d2157886004016000886002811115613cc757613cc7614eae565b6002811115613cd857613cd8614eae565b81526020019081526020016000208181548110613cf757613cf76151e3565b906000526020600020015482613d0d91906151cb565b915080613d19816151f9565b915050613ca8565b50979650505050505050565b6001600160a01b038116613d5457604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613d825760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613db887878787613de0565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e669190615167565b613e709190615214565b9050831580613e87575080613e8583866151cb565b115b15613e9957613e968282615214565b93505b60005b84811015613fdf57613eaf6001846151cb565b8654909350600090613ece908a906001600160a01b03166002876135e5565b8754613ee7908b906001600160a01b03166001886135e5565b8854613f00908c906001600160a01b03166000896135e5565b613f0a91906151cb565b613f1491906151cb565b905080613f215750613fcd565b60405163fcbb371b60e01b815260048101859052600090613f9a906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa158015613f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9291906150ec565b89908761450d565b905080613fa8575050613fcd565b613fbe8183613fb78b89613a53565b6019614388565b613fc890876151cb565b955050505b80613fd7816151f9565b915050613e9c565b505094509492505050565b613ff682826001614558565b61400282826002614558565b612f6e82826000614558565b600061412a86600201600085600281111561402b5761402b614eae565b600281111561403c5761403c614eae565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156140a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c69190615167565b6140d19060016151cb565b848960010160008860028111156140ea576140ea614eae565b60028111156140fb576140fb614eae565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614150565b91508161413957506000614147565b61414484868461487e565b50805b95945050505050565b600061415d8585856148fe565b845460008561416d600184615214565b8154811061417d5761417d6151e3565b9060005260206000200154905080841115614198578061419a565b835b935083156141de5783866141af600185615214565b815481106141bf576141bf6151e3565b9060005260206000200160008282546141d89190615214565b90915550505b509195945050505050565b61429885600201600084600281111561420457614204614eae565b600281111561421557614215614eae565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a019087600281111561425857614258614eae565b600281111561426957614269614eae565b8152602080820192909252604090810160009081208a546001600160a01b0316825290925290209291906142b1565b8454610add90849086906001600160a01b0316846149b6565b6142bc8484846148fe565b8354819084906142ce90600190615214565b815481106142de576142de6151e3565b9060005260206000200160008282546142f791906151cb565b909155505050505050565b815160005b81811015612ef8576000848281518110614323576143236151e3565b6020026020010151905085811180156143535750600081815260028801602052604090205460ff16151584151514155b156143755760008181526002880160205260409020805460ff19168515151790555b5080614380816151f9565b915050614307565b600061439582600a615363565b6143a08585856143b4565b6143aa9087615246565b61369b9190615265565b6000806143c28360016151cb565b6143cd90600a615363565b6143d79086615246565b9050600a6143e58583615265565b6143f09060056151cb565b6141479190615265565b6000818314156144165761440f600183615214565b905061369e565b6000600261442484866151cb565b61442e9190615265565b905084868281548110614443576144436151e3565b9060005260206000200154111561446857614460868686846143fa565b91505061369e565b8486828154811061447b5761447b6151e3565b9060005260206000200154101561369b57614460868661449c8460016151cb565b866143fa565b600060018260028111156144b8576144b8614eae565b14156144cc57506001602960991b01919050565b60028260028111156144e0576144e0614eae565b14156144f457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b60008061451b8585856136a6565b90508061452c576000915050612dd4565b60a084015161453c579050612dd4565b61454e818560a0015160646019614388565b6141479082615214565b6000614565848484613b07565b9050806145725750505050565b600084600301600084600281111561458c5761458c614eae565b600281111561459d5761459d614eae565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146139190615167565b85600301600085600281111561462b5761462b614eae565b600281111561463c5761463c614eae565b81526020019081526020016000206001836146579190615214565b81548110614667576146676151e3565b9060005260206000200154116147025784600301600084600281111561468f5761468f614eae565b60028111156146a0576146a0614eae565b815260200190815260200160002060006146ba9190614a36565b8460040160008460028111156146d2576146d2614eae565b60028111156146e3576146e3614eae565b815260200190815260200160002060006146fd9190614a36565b614867565b604051806020016040528086600301600086600281111561472557614725614eae565b600281111561473657614736614eae565b81526020019081526020016000206001846147519190615214565b81548110614761576147616151e3565b906000526020600020015481525085600301600085600281111561478757614787614eae565b600281111561479857614798614eae565b815260208101919091526040016000206147b3916001614a57565b5060405180602001604052808660040160008660028111156147d7576147d7614eae565b60028111156147e8576147e8614eae565b81526020019081526020016000206001846148039190615214565b81548110614813576148136151e3565b906000526020600020015481525085600401600085600281111561483957614839614eae565b600281111561484a5761484a614eae565b81526020810191909152604001600020614865916001614a57565b505b8454610add9084906001600160a01b0316846138f2565b611d4b83600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148e79190615167565b6148f29060016151cb565b60048601919084614150565b82548061492857508254600181810185556000948552602085209091019190915581540181559052565b600084614936600184615214565b81548110614946576149466151e3565b90600052602060002001549050828114610add57845460018181018755600087815260209020909101849055849081906149809085615214565b81548110614990576149906151e3565b600091825260208083209091015483546001810185559383529120909101555050505050565b6001600160a01b038216600090815260088501602052604090205460ff16614a24576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611d4b600485016005860185846142b1565b5080546000825590600052602060002090810190614a549190614aa2565b50565b828054828255906000526020600020908101928215614a92579160200282015b82811115614a92578251825591602001919060010190614a77565b50614a9e929150614aa2565b5090565b5b80821115614a9e5760008155600101614aa3565b6001600160a01b0381168114614a5457600080fd5b60008060408385031215614adf57600080fd5b8235614aea81614ab7565b946020939093013593505050565b600060208284031215614b0a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614b4a57614b4a614b11565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b7857614b78614b11565b604052919050565b60006001600160401b03821115614b9957614b99614b11565b5060051b60200190565b60008060408385031215614bb657600080fd5b8235614bc181614ab7565b91506020838101356001600160401b03811115614bdd57600080fd5b8401601f81018613614bee57600080fd5b8035614c01614bfc82614b80565b614b50565b81815260059190911b82018301908381019088831115614c2057600080fd5b928401925b82841015614c3e57833582529284019290840190614c25565b80955050505050509250929050565b60008060408385031215614c6057600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015614ca85781516001600160a01b031687529582019590820190600101614c83565b509495945050505050565b604081526000614cc66040830185614c6f565b90508260208301529392505050565b60008060008060808587031215614ceb57600080fd5b8435614cf681614ab7565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b83811015614ca857815187529582019590820190600101614d24565b60a081526000614d5360a0830188614c6f565b8281036020840152614d658188614d10565b90508281036040840152614d798187614d10565b90508281036060840152614d8d8186614d10565b9150508260808301529695505050505050565b60008060408385031215614db357600080fd5b82356001600160401b03811115614dc957600080fd5b8301601f81018513614dda57600080fd5b80356020614dea614bfc83614b80565b82815260059290921b83018101918181019088841115614e0957600080fd5b938201935b83851015614e30578435614e2181614ab7565b82529382019390820190614e0e565b98969091013596505050505050565b606081526000614e526060830186614c6f565b8281036020840152614e648186614d10565b915050826040830152949350505050565b60008060408385031215614e8857600080fd5b8235614e9381614ab7565b91506020830135614ea381614ab7565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110614ee257634e487b7160e01b600052602160045260246000fd5b9052565b60808101614ef48287614ec4565b846020830152836040830152821515606083015295945050505050565b600060208284031215614f2357600080fd5b8135612dd481614ab7565b600080600060608486031215614f4357600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015614ca8578151151587529582019590820190600101614f6e565b60a081526000614f9f60a0830188614c6f565b8281036020840152614fb18188614c6f565b90508281036040840152614fc58187614d10565b90508281036060840152614d8d8186614f5a565b600080600060608486031215614fee57600080fd5b8335614ff981614ab7565b925060208401356003811061500d57600080fd5b929592945050506040919091013590565b60008060006060848603121561503357600080fd5b833561503e81614ab7565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561509357615083848351614ec4565b9284019290840190600101615070565b505050838103828501526150a78189614d10565b9150508281036040840152614fc58187614d10565b6000806000606084860312156150d157600080fd5b83356150dc81614ab7565b9250602084013561500d81614ab7565b600061012082840312156150ff57600080fd5b615107614b27565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b60006020828403121561517957600080fd5b5051919050565b60006020828403121561519257600080fd5b81518015158114612dd457600080fd5b602081526000612dd46020830184614d10565b634e487b7160e01b600052601160045260246000fd5b600082198211156151de576151de6151b5565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561520d5761520d6151b5565b5060010190565b600082821015615226576152266151b5565b500390565b604081016152398285614ec4565b8260208301529392505050565b6000816000190483118215151615615260576152606151b5565b500290565b60008261528257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561102e5781600019048211156152a8576152a86151b5565b808516156152b557918102915b93841c939080029061528c565b6000826152d157506001610f3a565b816152de57506000610f3a565b81600181146152f457600281146152fe5761531a565b6001915050610f3a565b60ff84111561530f5761530f6151b5565b50506001821b610f3a565b5060208310610133831016604e8410600b841016171561533d575081810a610f3a565b6153478383615287565b806000190482111561535b5761535b6151b5565b029392505050565b6000612dd483836152c2565b60208101610f3a8284614ec4565b60008161538c5761538c6151b5565b50600019019056fea26469706673582212205e56660e794cf6ac8fef932c6bc6ddc03d16240bf42c38f16cc5710cdd39fbf664736f6c634300080c0033", + "bytecode": "0x608060405234801561001057600080fd5b5061580280620000216000396000f3fe60806040526004361061025c5760003560e01c80637243199111610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610825578063f3621e4314610845578063f65a5ed214610865578063f8d6b1ab14610885578063fa52c7d8146108a5578063ff3d3f601461091457600080fd5b8063cf5c13db14610723578063d0051adf14610743578063d1f18ee114610774578063dbd61d87146107cc578063df93c842146107ec57600080fd5b80639043150b116101085780639043150b146106655780639168ae721461066d5780639c508219146106a3578063ac7475ed146106c3578063ad71bd36146106e3578063cbc0fac61461070357600080fd5b8063724319911461058b57806374e2b63c146105bc5780637b520aa8146105e15780637befa74f14610617578063883252341461062a57600080fd5b80632b47da52116101dd57806346dfce7b116101a157806346dfce7b146104ac578063485cc955146104db5780635c4fc4c5146104fb5780635d94ccf61461052b5780635efc766e1461054b5780636b2b33691461056b57600080fd5b80632b47da52146103f45780632ee462b31461042c57806333f32d781461044c578063428e85621461046c57806345367f231461048c57600080fd5b8063195afea111610224578063195afea1146103205780631c1b4f3a146103405780632168e8b414610360578063222263671461038e5780632b42ed8c146103c357600080fd5b806302fb4d85146102615780630ddda63c14610283578063158ef93e146102a35780631903cf16146102d2578063190b9257146102f2575b600080fd5b34801561026d57600080fd5b5061028161027c366004614f04565b610934565b005b34801561028f57600080fd5b5061028161029e366004614f30565b610b3a565b3480156102af57600080fd5b506000546102bd9060ff1681565b60405190151581526020015b60405180910390f35b3480156102de57600080fd5b506102816102ed366004614fdb565b610d45565b3480156102fe57600080fd5b5061031261030d366004614f30565b610f3e565b6040519081526020016102c9565b34801561032c57600080fd5b5061031261033b366004614f04565b610f5f565b34801561034c57600080fd5b5061031261035b366004614f30565b610f96565b34801561036c57600080fd5b5061038061037b366004615085565b610fa6565b6040516102c99291906150eb565b34801561039a57600080fd5b506103ae6103a9366004614f04565b61108c565b604080519283526020830191909152016102c9565b3480156103cf57600080fd5b506103e36103de36600461510d565b61115a565b6040516102c9959493929190615178565b34801561040057600080fd5b50600154610414906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561043857600080fd5b50610312610447366004614f04565b6114a7565b34801561045857600080fd5b506103126104673660046151d8565b61155a565b34801561047857600080fd5b50610281610487366004614fdb565b611719565b34801561049857600080fd5b506103126104a7366004614f30565b611912565b3480156104b857600080fd5b506104cc6104c736600461510d565b6119a8565b6040516102c993929190615277565b3480156104e757600080fd5b506102816104f63660046152ad565b611c05565b34801561050757600080fd5b5061051b610516366004614f04565b611c84565b6040516102c9949392919061531e565b34801561053757600080fd5b50610281610546366004614f30565b611d50565b34801561055757600080fd5b50610414610566366004614f30565b611e5a565b34801561057757600080fd5b50610281610586366004615349565b611e84565b34801561059757600080fd5b506105ab6105a6366004615366565b611fcc565b6040516102c99594939291906153c4565b3480156105c857600080fd5b506000546104149061010090046001600160a01b031681565b3480156105ed57600080fd5b506104146105fc366004615349565b6006602052600090815260409020546001600160a01b031681565b610281610625366004615411565b612388565b34801561063657600080fd5b5061064a610645366004615349565b612553565b604080519384526020840192909252908201526060016102c9565b6102816125d3565b34801561067957600080fd5b50610414610688366004615349565b6007602052600090815260409020546001600160a01b031681565b3480156106af57600080fd5b506103126106be366004614f04565b612608565b3480156106cf57600080fd5b506102816106de366004615349565b6126e4565b3480156106ef57600080fd5b506103806106fe366004615085565b6127ab565b34801561070f57600080fd5b5061028161071e366004614f04565b612889565b34801561072f57600080fd5b5061028161073e366004614f04565b612931565b34801561074f57600080fd5b5061076361075e366004615456565b612b30565b6040516102c995949392919061548b565b34801561078057600080fd5b5061079461078f366004614f04565b612de8565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102c9565b3480156107d857600080fd5b506103126107e73660046154f4565b612f78565b3480156107f857600080fd5b50610312610807366004615349565b6001600160a01b031660009081526007602052604090206006015490565b34801561083157600080fd5b50610281610840366004615411565b612fbe565b34801561085157600080fd5b506102816108603660046154f4565b612fd7565b34801561087157600080fd5b50610414610880366004614f30565b6130e3565b34801561089157600080fd5b506102816108a0366004615349565b6130f3565b3480156108b157600080fd5b506108ee6108c0366004615349565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102c9565b34801561092057600080fd5b5061028161092f366004615411565b613155565b6001600160a01b03808316600090815260066020908152604080832054841680845260049092529091205490911661097f576040516372898ae960e11b815260040160405180910390fd5b33411461099f57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610ab2946101009092041692633fa4f2459281830192610120928290030181865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190615524565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061559f565b84919087613436565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b335781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b70576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610ba65760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d91906155b8565b15610c3b57604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c639161010090046001600160a01b031686613515565b905080610c8357604051637bc90c0560e11b815260040160405180910390fd5b610d073333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff919061559f565b600085613535565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d7f575060018101546001600160a01b03163314155b15610d9d57604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610dd7576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906155b8565b15610e6c57604051631e59ccd960e01b815260040160405180910390fd5b610f05600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061559f565b6001600160a01b038716600090815260046020526040902090866135e3565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b2a91906155da565b60028181548110610f4e57600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f8c92909161010090910416846135f5565b5090505b92915050565b60038181548110610f4e57600080fd5b60606000610fba8484600580549050613788565b9093509050826001600160401b03811115610fd757610fd7614f49565b604051908082528060200260200182016040528015611000578160200160208202803683370190505b50915060005b8381101561108457600561101a8287615603565b8154811061102a5761102a61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061105a5761105a61561b565b6001600160a01b03909216602092830291909101909101528061107c81615631565b915050611006565b509250929050565b60008061114f6000841161111657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061559f565b611118565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111fc57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f7919061559f565b6111fe565b885b98506112108888600580549050613788565b9097509150866001600160401b0381111561122d5761122d614f49565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b509550866001600160401b0381111561127157611271614f49565b60405190808252806020026020018201604052801561129a578160200160208202803683370190505b509450866001600160401b038111156112b5576112b5614f49565b6040519080825280602002602001820160405280156112de578160200160208202803683370190505b509350866001600160401b038111156112f9576112f9614f49565b604051908082528060200260200182016040528015611322578160200160208202803683370190505b50925060005b8781101561149a57600561133c828b615603565b8154811061134c5761134c61561b565b9060005260206000200160009054906101000a90046001600160a01b031687828151811061137c5761137c61561b565b60200260200101906001600160a01b031690816001600160a01b0316815250506113cd8782815181106113b1576113b161561b565b602002602001015160008c856137bf909392919063ffffffff16565b8682815181106113df576113df61561b565b60200260200101818152505061141c8782815181106114005761140061561b565b602002602001015160018c856137bf909392919063ffffffff16565b85828151811061142e5761142e61561b565b60200260200101818152505061146b87828151811061144f5761144f61561b565b602002602001015160028c856137bf909392919063ffffffff16565b84828151811061147d5761147d61561b565b60209081029190910101528061149281615631565b915050611328565b5050945094509450945094565b600080821161152c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611527919061559f565b61152e565b815b6001600160a01b0384166000908152600460205260409020909250611553908361387e565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d7919061559f565b6115e1919061564c565b6115eb919061564c565b845190915060005b8481101561171057611606600184615603565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190615524565b905060005b838110156116fb576116dd8286600460008c86815181106116a6576116a661561b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206138919092919063ffffffff16565b6116e79087615603565b9550806116f381615631565b915050611683565b5050808061170890615631565b9150506115f3565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611753575060018101546001600160a01b03163314155b1561177157604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117ab576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906155b8565b1561184057604051631e59ccd960e01b815260040160405180910390fd5b6118d9600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba919061559f565b6001600160a01b038716600090815260046020526040902090866139fe565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b2a91906155da565b600080821161199757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611992919061559f565b611999565b815b9150610f906002600384613a0b565b6001600160a01b0384166000908152600460205260408120606091829186611a4657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a41919061559f565b611a48565b865b9650611a5c86868360070180549050613788565b9095509150846001600160401b03811115611a7957611a79614f49565b604051908082528060200260200182016040528015611aa2578160200160208202803683370190505b509350846001600160401b03811115611abd57611abd614f49565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50925060005b85811015611bf9576000600781848201611b06858c615603565b81548110611b1657611b1661561b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b5c57611b5c61561b565b6001600160a01b0392831660209182029290920101528354611b839183911660028c6137bf565b8354611b9c9083906001600160a01b031660018d6137bf565b8454611bb59084906001600160a01b031660008e6137bf565b611bbf9190615603565b611bc99190615603565b858381518110611bdb57611bdb61561b565b60209081029190910101525080611bf181615631565b915050611aec565b50509450945094915050565b334114611c2557604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c485760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611cb957611cb961561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611cec57611cec6152e6565b6002811115611cfd57611cfd6152e6565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d3f575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611d865760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611daa57611daa61561b565b9060005260206000209060030201905060008160020154905080421015611de4576040516303cb96db60e21b815260040160405180910390fd5b80611e0257604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e549160ff16903390613b24565b50505050565b60058181548110611e6a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906155b8565b611f0e5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f309083613c43565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c919061559f565b90506000891161205c578061205e565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190615524565b90506120e88989600580549050613788565b9098509250876001600160401b0381111561210557612105614f49565b60405190808252806020026020018201604052801561212e578160200160208202803683370190505b509650876001600160401b0381111561214957612149614f49565b604051908082528060200260200182016040528015612172578160200160208202803683370190505b509550876001600160401b0381111561218d5761218d614f49565b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b509450876001600160401b038111156121d1576121d1614f49565b6040519080825280602002602001820160405280156121fa578160200160208202803683370190505b50935060005b8881101561237a5760006004816005612219858f615603565b815481106122295761222961561b565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a908490811061226f5761226f61561b565b6001600160a01b039283166020918202929092010152600182015489519116908990849081106122a1576122a161561b565b6001600160a01b03909216602092830291909101909101526122c3818d61387e565b8783815181106122d5576122d561561b565b60209081029190910101526122fe818d6000908152600291909101602052604090205460ff1690565b15801561231c575060008c815260038201602052604090205460ff16155b801561234557508260c0015187838151811061233a5761233a61561b565b602002602001015110155b8683815181106123575761235761561b565b91151560209283029190910190910152508061237281615631565b915050612200565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166123c2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243991906155b8565b1561245757604051631e59ccd960e01b815260040160405180910390fd5b8161247557604051637bc90c0560e11b815260040160405180910390fd5b612480833384613c85565b61250e3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc919061559f565b612507906001615603565b8686613535565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d37929190615663565b6001600160a01b0380821660009081526007602052604081208154919283928392916125889183916101009091041684613d26565b6000549094506125a990829061010090046001600160a01b03166001613d26565b6000549093506125ca90829061010090046001600160a01b03166002613d26565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461264a576000915050610f90565b600083116126ce57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c9919061559f565b6126d0565b825b92506126dc818461387e565b949350505050565b336000818152600460205260409020546001600160a01b031661271a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166127418286613f4c565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b2a565b606060006127bf8484600880549050613788565b9093509050826001600160401b038111156127dc576127dc614f49565b604051908082528060200260200182016040528015612805578160200160208202803683370190505b50915060005b8381101561108457600861281f8287615603565b8154811061282f5761282f61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061285f5761285f61561b565b6001600160a01b03909216602092830291909101909101528061288181615631565b91505061280b565b336000818152600460205260409020546001600160a01b03166128bf576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206128e79161010090046001600160a01b031685613515565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e5457611e5460003383613b24565b6001600160a01b0380831660009081526004602052604090205483911661296b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166129a15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1891906155b8565b15612a3657604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612a71939092610100909104169087613fc6565b905080612a9157604051637bc90c0560e11b815260040160405180910390fd5b612ae93386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b038316600090815260076020526040812060068101546060928392839283929190612b659089908990613788565b9097509150866001600160401b03811115612b8257612b82614f49565b604051908082528060200260200182016040528015612bab578160200160208202803683370190505b509550866001600160401b03811115612bc657612bc6614f49565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b509450866001600160401b03811115612c0a57612c0a614f49565b604051908082528060200260200182016040528015612c33578160200160208202803683370190505b509350866001600160401b03811115612c4e57612c4e614f49565b604051908082528060200260200182016040528015612c77578160200160208202803683370190505b50925060005b87811015612ddb57600060068301612c95838c615603565b81548110612ca557612ca561561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612cd857612cd86152e6565b6002811115612ce957612ce96152e6565b81526020016001820154815260200160028201548152505090508060000151888381518110612d1a57612d1a61561b565b60200260200101906002811115612d3357612d336152e6565b90816002811115612d4657612d466152e6565b815250508060200151878381518110612d6157612d6161561b565b6020026020010181815250508060400151868381518110612d8457612d8461561b565b6020908102919091010152604081015115801590612da6575080604001514210155b858381518110612db857612db861561b565b911515602092830291909101909101525080612dd381615631565b915050612c7d565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061559f565b905060008711612e785780612e7a565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef29190615524565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612f3c818a61387e565b9350868015612f49575085155b8015612f5957508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612fb5939092610100909104169085613fff565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116613011576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166130475760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420613082939092610100909104169087613fc6565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a280156130db576130db60003383613b24565b505050505050565b60088181548110611e6a57600080fd5b336000818152600760205260409020546001600160a01b03166131295760405163cf83d93d60e01b815260040160405180910390fd5b60008054338252600760205260409091206131519161010090046001600160a01b0316614209565b5050565b6001600160a01b0380841660009081526004602052604090205484911661318f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166131c55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323c91906155b8565b1561325a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a8116865260049094529190932061329892849261010090041690888861422d565b9350836132b857604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156132d9576132d96152e6565b8152602081018790526040016132f242620d2f00615603565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613330576133306152e6565b0217905550602082015181600101556040820151816002015550506133dc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c7919061559f565b6133d2906001615603565b6002919087614363565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061341d9060019061564c565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461345f57600083815260098601602052604090208290555b6000838152600a8601602052604081205461347b906001615603565b6000858152600a88016020526040902081905560e086015190915081108015906134c757506003860160006134b1866001615603565b815260208101919091526040016000205460ff16155b15612fb5576101008501516134dc9085615603565b91505b81841015612fb557836134f181615631565b60008181526003890160205260409020805460ff1916600117905594506134df9050565b60008060006135258686866135f5565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166135ae5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206135d59082908690868661443e565b6130db600260038685614506565b6135f083838360006145ec565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613665919061559f565b61366f919061564c565b90508315806136865750806136848386615603565b115b1561369857613695828261564c565b93505b60005b8481101561377e576136ae600184615603565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156136fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371e9190615524565b9050600061372d898387613891565b90508061373b57505061376c565b60a082015161374b57505061376c565b61375d818360a0015160646019614672565b6137679087615603565b955050505b8061377681615631565b91505061369b565b5050935093915050565b600080826137968587615603565b106137a8576137a5858461564c565b93505b836137b38187615603565b91509150935093915050565b60006138758560020160008560028111156137dc576137dc6152e6565b60028111156137ed576137ed6152e6565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115613837576138376152e6565b6002811115613848576138486152e6565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613a0b565b95945050505050565b6000611553600484016005850184613a0b565b600081815260028401602052604081205460ff16806138c05750600082815260038501602052604090205460ff165b156138cd57506000611553565b60006138d9858461387e565b90506049831061391a578360c001518110156138f9576000915050611553565b6298968061390982610a3461567e565b613913919061569d565b91506139b3565b80613929576000915050611553565b6139356019600a61579b565b61394685608001516064601961469e565b613950908361567e565b61395a919061569d565b91508161396b576000915050611553565b61398e84606001518560400151613982919061567e565b6301e13380601961469e565b613998908361567e565b91506139a66019600a61579b565b6139b0908361569d565b91505b6000838152600a8601602052604090205480156139f55760008481526009870160205260409020546139f1846139e9848461564c565b836019614672565b9350505b50509392505050565b6135f083838360016145ec565b8254600090801580613a3957508285600081548110613a2c57613a2c61561b565b9060005260206000200154115b15613a48576000915050611553565b8285613a5560018461564c565b81548110613a6557613a6561561b565b906000526020600020015411613aa45783613a8160018361564c565b81548110613a9157613a9161561b565b9060005260206000200154915050611553565b600181118015613ada57508285613abc60028461564c565b81548110613acc57613acc61561b565b906000526020600020015411155b15613aeb5783613a8160028361564c565b6000613afa86856000856146da565b9050848181548110613b0e57613b0e61561b565b9060005260206000200154925050509392505050565b600080846002811115613b3957613b396152e6565b1415613b98576040516001600160a01b038416908390600081818185875af1925050503d8060008114613b88576040519150601f19603f3d011682016040523d82523d6000602084013e613b8d565b606091505b505080915050613c1a565b613ba184614782565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af1158015613bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1791906155b8565b90505b80611e545783604051630db5347560e11b8152600401613c3a91906157a7565b60405180910390fd5b81546001600160a01b031615613c6b57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b031916331782556131518282613f4c565b6000836002811115613c9957613c996152e6565b1415613cbf578034146135f057604051630fe5b06560e11b815260040160405180910390fd5b3415613cde5760405163a745ac8560e01b815260040160405180910390fd5b6000613ce984614782565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613bd4565b600080846003016000846002811115613d4157613d416152e6565b6002811115613d5257613d526152e6565b8152602081019190915260400160002054905080613d74576000915050611553565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd8919061559f565b90506000613de760018461564c565b9050600081118015613e4a575081876003016000876002811115613e0d57613e0d6152e6565b6002811115613e1e57613e1e6152e6565b81526020019081526020016000208281548110613e3d57613e3d61561b565b9060005260206000200154115b15613e5d5780613e59816157b5565b9150505b81876003016000876002811115613e7657613e766152e6565b6002811115613e8757613e876152e6565b81526020019081526020016000208281548110613ea657613ea661561b565b90600052602060002001541115613ec35760009350505050611553565b6000805b828111613f4057886004016000886002811115613ee657613ee66152e6565b6002811115613ef757613ef76152e6565b81526020019081526020016000208181548110613f1657613f1661561b565b906000526020600020015482613f2c9190615603565b915080613f3881615631565b915050613ec7565b50979650505050505050565b6001600160a01b038116613f7357604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613fa15760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613fd787878787613fff565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015614061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614085919061559f565b61408f919061564c565b90508315806140a65750806140a48386615603565b115b156140b8576140b5828261564c565b93505b60005b848110156141fe576140ce600184615603565b86549093506000906140ed908a906001600160a01b03166002876137bf565b8754614106908b906001600160a01b03166001886137bf565b885461411f908c906001600160a01b03166000896137bf565b6141299190615603565b6141339190615603565b90508061414057506141ec565b60405163fcbb371b60e01b8152600481018590526000906141b9906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa15801561418d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141b19190615524565b8990876147ed565b9050806141c75750506141ec565b6141dd81836141d68b8961387e565b6019614672565b6141e79087615603565b955050505b806141f681615631565b9150506140bb565b505094509492505050565b61421582826001614838565b61422182826002614838565b61315182826000614838565b600061434986600201600085600281111561424a5761424a6152e6565b600281111561425b5761425b6152e6565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156142c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e5919061559f565b6142f0906001615603565b84896001016000886002811115614309576143096152e6565b600281111561431a5761431a6152e6565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614363565b91508161435857506000613875565b612fb5848684614b5e565b835460009080158061439a57508561437c60018361564c565b8154811061438c5761438c61561b565b906000526020600020015484105b156143b857604051630eae4c9760e01b815260040160405180910390fd5b60006143c5878787614bde565b905060008682815481106143db576143db61561b565b90600052602060002001549050808511156143f657806143f8565b845b9450841561443257848783815481106144135761441361561b565b90600052602060002001600082825461442c919061564c565b90915550505b50929695505050505050565b6144ed856002016000846002811115614459576144596152e6565b600281111561446a5761446a6152e6565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a01908760028111156144ad576144ad6152e6565b60028111156144be576144be6152e6565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190614506565b8454610b3390849086906001600160a01b031684614dee565b835460018111801561453d57508461451f60018361564c565b8154811061452f5761452f61561b565b906000526020600020015483105b801561456e57508461455060028361564c565b815481106145605761456061561b565b906000526020600020015483105b1561458c57604051630eae4c9760e01b815260040160405180910390fd5b6000614599868686614bde565b8654925090505b818110156130db57828582815481106145bb576145bb61561b565b9060005260206000200160008282546145d49190615603565b909155508190506145e481615631565b9150506145a0565b815160005b818110156130db57600084828151811061460d5761460d61561b565b60200260200101519050858111801561463d5750600081815260028801602052604090205460ff16151584151514155b1561465f5760008181526002880160205260409020805460ff19168515151790555b508061466a81615631565b9150506145f1565b600061467f82600a61579b565b61468a85858561469e565b614694908761567e565b613875919061569d565b6000806146ac836001615603565b6146b790600a61579b565b6146c1908661567e565b9050600a6146cf858361569d565b614694906005615603565b6000818314156146f6576146ef60018361564c565b90506126dc565b600060026147048486615603565b61470e919061569d565b9050848682815481106147235761472361561b565b9060005260206000200154111561474857614740868686846146da565b9150506126dc565b8486828154811061475b5761475b61561b565b9060005260206000200154101561387557614740868661477c846001615603565b866146da565b60006001826002811115614798576147986152e6565b14156147ac57506001602960991b01919050565b60028260028111156147c0576147c06152e6565b14156147d457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806147fb858585613891565b90508061480c576000915050611553565b60a084015161481c579050611553565b61482e818560a0015160646019614672565b613875908261564c565b6000614845848484613d26565b9050806148525750505050565b600084600301600084600281111561486c5761486c6152e6565b600281111561487d5761487d6152e6565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f3919061559f565b85600301600085600281111561490b5761490b6152e6565b600281111561491c5761491c6152e6565b8152602001908152602001600020600183614937919061564c565b815481106149475761494761561b565b9060005260206000200154116149e25784600301600084600281111561496f5761496f6152e6565b6002811115614980576149806152e6565b8152602001908152602001600020600061499a9190614e6e565b8460040160008460028111156149b2576149b26152e6565b60028111156149c3576149c36152e6565b815260200190815260200160002060006149dd9190614e6e565b614b47565b6040518060200160405280866003016000866002811115614a0557614a056152e6565b6002811115614a1657614a166152e6565b8152602001908152602001600020600184614a31919061564c565b81548110614a4157614a4161561b565b9060005260206000200154815250856003016000856002811115614a6757614a676152e6565b6002811115614a7857614a786152e6565b81526020810191909152604001600020614a93916001614e8f565b506040518060200160405280866004016000866002811115614ab757614ab76152e6565b6002811115614ac857614ac86152e6565b8152602001908152602001600020600184614ae3919061564c565b81548110614af357614af361561b565b9060005260206000200154815250856004016000856002811115614b1957614b196152e6565b6002811115614b2a57614b2a6152e6565b81526020810191909152604001600020614b45916001614e8f565b505b8454610b339084906001600160a01b031684613b24565b611e5483600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061559f565b614bd2906001615603565b60048601919084614363565b825460009080614c19575050825460018181018555600085815260208082209093018490558454918201855584815291822001819055611553565b6000614c2660018361564c565b90506000868281548110614c3c57614c3c61561b565b9060005260206000200154905080851415614c5b575091506115539050565b80851115614cc35786546001810188556000888152602090200185905585548690819084908110614c8e57614c8e61561b565b6000918252602080832090910154835460018181018655948452919092200155614cb9908390615603565b9350505050611553565b600082118015614cf8575086614cda60018461564c565b81548110614cea57614cea61561b565b906000526020600020015485145b15614d0857614cb960018361564c565b86878381548110614d1b57614d1b61561b565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614d5057614d5061561b565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614d8557614d8561561b565b6000918252602090912001558115614dc35785614da360018461564c565b81548110614db357614db361561b565b9060005260206000200154614dc6565b60005b868381548110614dd857614dd861561b565b6000918252602090912001555091506115539050565b6001600160a01b038216600090815260088501602052604090205460ff16614e5c576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e5460048501600586018584614506565b5080546000825590600052602060002090810190614e8c9190614eda565b50565b828054828255906000526020600020908101928215614eca579160200282015b82811115614eca578251825591602001919060010190614eaf565b50614ed6929150614eda565b5090565b5b80821115614ed65760008155600101614edb565b6001600160a01b0381168114614e8c57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614f8257614f82614f49565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fb057614fb0614f49565b604052919050565b60006001600160401b03821115614fd157614fd1614f49565b5060051b60200190565b60008060408385031215614fee57600080fd5b8235614ff981614eef565b91506020838101356001600160401b0381111561501557600080fd5b8401601f8101861361502657600080fd5b803561503961503482614fb8565b614f88565b81815260059190911b8201830190838101908883111561505857600080fd5b928401925b828410156150765783358252928401929084019061505d565b80955050505050509250929050565b6000806040838503121561509857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156150e05781516001600160a01b0316875295820195908201906001016150bb565b509495945050505050565b6040815260006150fe60408301856150a7565b90508260208301529392505050565b6000806000806080858703121561512357600080fd5b843561512e81614eef565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156150e05781518752958201959082019060010161515c565b60a08152600061518b60a08301886150a7565b828103602084015261519d8188615148565b905082810360408401526151b18187615148565b905082810360608401526151c58186615148565b9150508260808301529695505050505050565b600080604083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b8301601f8101851361521257600080fd5b8035602061522261503483614fb8565b82815260059290921b8301810191818101908884111561524157600080fd5b938201935b8385101561526857843561525981614eef565b82529382019390820190615246565b98969091013596505050505050565b60608152600061528a60608301866150a7565b828103602084015261529c8186615148565b915050826040830152949350505050565b600080604083850312156152c057600080fd5b82356152cb81614eef565b915060208301356152db81614eef565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061531a57634e487b7160e01b600052602160045260246000fd5b9052565b6080810161532c82876152fc565b846020830152836040830152821515606083015295945050505050565b60006020828403121561535b57600080fd5b813561155381614eef565b60008060006060848603121561537b57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b838110156150e05781511515875295820195908201906001016153a6565b60a0815260006153d760a08301886150a7565b82810360208401526153e981886150a7565b905082810360408401526153fd8187615148565b905082810360608401526151c58186615392565b60008060006060848603121561542657600080fd5b833561543181614eef565b925060208401356003811061544557600080fd5b929592945050506040919091013590565b60008060006060848603121561546b57600080fd5b833561547681614eef565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156154cb576154bb8483516152fc565b92840192908401906001016154a8565b505050838103828501526154df8189615148565b91505082810360408401526153fd8187615148565b60008060006060848603121561550957600080fd5b833561551481614eef565b9250602084013561544581614eef565b6000610120828403121561553757600080fd5b61553f614f5f565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156155b157600080fd5b5051919050565b6000602082840312156155ca57600080fd5b8151801515811461155357600080fd5b6020815260006115536020830184615148565b634e487b7160e01b600052601160045260246000fd5b60008219821115615616576156166155ed565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615645576156456155ed565b5060010190565b60008282101561565e5761565e6155ed565b500390565b6040810161567182856152fc565b8260208301529392505050565b6000816000190483118215151615615698576156986155ed565b500290565b6000826156ba57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110845781600019048211156156e0576156e06155ed565b808516156156ed57918102915b93841c93908002906156c4565b60008261570957506001610f90565b8161571657506000610f90565b816001811461572c576002811461573657615752565b6001915050610f90565b60ff841115615747576157476155ed565b50506001821b610f90565b5060208310610133831016604e8410600b8410161715615775575081810a610f90565b61577f83836156bf565b8060001904821115615793576157936155ed565b029392505050565b600061155383836156fa565b60208101610f9082846152fc565b6000816157c4576157c46155ed565b50600019019056fea26469706673582212200a3bb40da327dc2414c15b981a7b902457121dd4bc3e8627caf9d791841ae51864736f6c634300080c0033", + "deployedBytecode": "0x60806040526004361061025c5760003560e01c80637243199111610144578063cf5c13db116100b6578063e1aca3411161007a578063e1aca34114610825578063f3621e4314610845578063f65a5ed214610865578063f8d6b1ab14610885578063fa52c7d8146108a5578063ff3d3f601461091457600080fd5b8063cf5c13db14610723578063d0051adf14610743578063d1f18ee114610774578063dbd61d87146107cc578063df93c842146107ec57600080fd5b80639043150b116101085780639043150b146106655780639168ae721461066d5780639c508219146106a3578063ac7475ed146106c3578063ad71bd36146106e3578063cbc0fac61461070357600080fd5b8063724319911461058b57806374e2b63c146105bc5780637b520aa8146105e15780637befa74f14610617578063883252341461062a57600080fd5b80632b47da52116101dd57806346dfce7b116101a157806346dfce7b146104ac578063485cc955146104db5780635c4fc4c5146104fb5780635d94ccf61461052b5780635efc766e1461054b5780636b2b33691461056b57600080fd5b80632b47da52146103f45780632ee462b31461042c57806333f32d781461044c578063428e85621461046c57806345367f231461048c57600080fd5b8063195afea111610224578063195afea1146103205780631c1b4f3a146103405780632168e8b414610360578063222263671461038e5780632b42ed8c146103c357600080fd5b806302fb4d85146102615780630ddda63c14610283578063158ef93e146102a35780631903cf16146102d2578063190b9257146102f2575b600080fd5b34801561026d57600080fd5b5061028161027c366004614f04565b610934565b005b34801561028f57600080fd5b5061028161029e366004614f30565b610b3a565b3480156102af57600080fd5b506000546102bd9060ff1681565b60405190151581526020015b60405180910390f35b3480156102de57600080fd5b506102816102ed366004614fdb565b610d45565b3480156102fe57600080fd5b5061031261030d366004614f30565b610f3e565b6040519081526020016102c9565b34801561032c57600080fd5b5061031261033b366004614f04565b610f5f565b34801561034c57600080fd5b5061031261035b366004614f30565b610f96565b34801561036c57600080fd5b5061038061037b366004615085565b610fa6565b6040516102c99291906150eb565b34801561039a57600080fd5b506103ae6103a9366004614f04565b61108c565b604080519283526020830191909152016102c9565b3480156103cf57600080fd5b506103e36103de36600461510d565b61115a565b6040516102c9959493929190615178565b34801561040057600080fd5b50600154610414906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b34801561043857600080fd5b50610312610447366004614f04565b6114a7565b34801561045857600080fd5b506103126104673660046151d8565b61155a565b34801561047857600080fd5b50610281610487366004614fdb565b611719565b34801561049857600080fd5b506103126104a7366004614f30565b611912565b3480156104b857600080fd5b506104cc6104c736600461510d565b6119a8565b6040516102c993929190615277565b3480156104e757600080fd5b506102816104f63660046152ad565b611c05565b34801561050757600080fd5b5061051b610516366004614f04565b611c84565b6040516102c9949392919061531e565b34801561053757600080fd5b50610281610546366004614f30565b611d50565b34801561055757600080fd5b50610414610566366004614f30565b611e5a565b34801561057757600080fd5b50610281610586366004615349565b611e84565b34801561059757600080fd5b506105ab6105a6366004615366565b611fcc565b6040516102c99594939291906153c4565b3480156105c857600080fd5b506000546104149061010090046001600160a01b031681565b3480156105ed57600080fd5b506104146105fc366004615349565b6006602052600090815260409020546001600160a01b031681565b610281610625366004615411565b612388565b34801561063657600080fd5b5061064a610645366004615349565b612553565b604080519384526020840192909252908201526060016102c9565b6102816125d3565b34801561067957600080fd5b50610414610688366004615349565b6007602052600090815260409020546001600160a01b031681565b3480156106af57600080fd5b506103126106be366004614f04565b612608565b3480156106cf57600080fd5b506102816106de366004615349565b6126e4565b3480156106ef57600080fd5b506103806106fe366004615085565b6127ab565b34801561070f57600080fd5b5061028161071e366004614f04565b612889565b34801561072f57600080fd5b5061028161073e366004614f04565b612931565b34801561074f57600080fd5b5061076361075e366004615456565b612b30565b6040516102c995949392919061548b565b34801561078057600080fd5b5061079461078f366004614f04565b612de8565b604080516001600160a01b0390961686529315156020860152911515928401929092529015156060830152608082015260a0016102c9565b3480156107d857600080fd5b506103126107e73660046154f4565b612f78565b3480156107f857600080fd5b50610312610807366004615349565b6001600160a01b031660009081526007602052604090206006015490565b34801561083157600080fd5b50610281610840366004615411565b612fbe565b34801561085157600080fd5b506102816108603660046154f4565b612fd7565b34801561087157600080fd5b50610414610880366004614f30565b6130e3565b34801561089157600080fd5b506102816108a0366004615349565b6130f3565b3480156108b157600080fd5b506108ee6108c0366004615349565b6004602052600090815260409020805460018201546006909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016102c9565b34801561092057600080fd5b5061028161092f366004615411565b613155565b6001600160a01b03808316600090815260066020908152604080832054841680845260049092529091205490911661097f576040516372898ae960e11b815260040160405180910390fd5b33411461099f57604051631cf4735960e01b815260040160405180910390fd5b6001600160a01b038084166000908152600660209081526040808320548416835260049182905280832083548251633fa4f24560e01b815292519195610ab2946101009092041692633fa4f2459281830192610120928290030181865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190615524565b600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061559f565b84919087613436565b82546040519192506001600160a01b0316907f1647efd0ce9727dc31dc201c9d8d35ac687f7370adcacbd454afc6485ddabfda90600090a28015610b335781546040518281526001600160a01b03909116907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e95825802906020015b60405180910390a25b5050505050565b336000818152600460205260409020546001600160a01b0316610b70576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b0316610ba65760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d91906155b8565b15610c3b57604051631e59ccd960e01b815260040160405180910390fd5b60008054338252600460205260408220610c639161010090046001600160a01b031686613515565b905080610c8357604051637bc90c0560e11b815260040160405180910390fd5b610d073333600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff919061559f565b600085613535565b604051818152339081907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba1043836906020015b60405180910390a350505050565b6001600160a01b03828116600090815260046020526040902080548492163314801590610d7f575060018101546001600160a01b03163314155b15610d9d57604051630101292160e31b815260040160405180910390fd5b6001600160a01b03808516600090815260046020526040902054859116610dd7576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906155b8565b15610e6c57604051631e59ccd960e01b815260040160405180910390fd5b610f05600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee6919061559f565b6001600160a01b038716600090815260046020526040902090866135e3565b846001600160a01b03167fc11dfc9c24621433bb10587dc4bbae26a33a4aff53914e0d4c9fddf224a8cb7d85604051610b2a91906155da565b60028181548110610f4e57600080fd5b600091825260209091200154905081565b600080546001600160a01b038481168352600460205260408320610f8c92909161010090910416846135f5565b5090505b92915050565b60038181548110610f4e57600080fd5b60606000610fba8484600580549050613788565b9093509050826001600160401b03811115610fd757610fd7614f49565b604051908082528060200260200182016040528015611000578160200160208202803683370190505b50915060005b8381101561108457600561101a8287615603565b8154811061102a5761102a61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061105a5761105a61561b565b6001600160a01b03909216602092830291909101909101528061107c81615631565b915050611006565b509250929050565b60008061114f6000841161111657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061559f565b611118565b835b6001600160a01b038616600090815260046020908152604080832093835260098401825280832054600a9094019091529020549091565b909590945092505050565b6001600160a01b0384166000908152600760205260408120606091829182918291886111fc57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f7919061559f565b6111fe565b885b98506112108888600580549050613788565b9097509150866001600160401b0381111561122d5761122d614f49565b604051908082528060200260200182016040528015611256578160200160208202803683370190505b509550866001600160401b0381111561127157611271614f49565b60405190808252806020026020018201604052801561129a578160200160208202803683370190505b509450866001600160401b038111156112b5576112b5614f49565b6040519080825280602002602001820160405280156112de578160200160208202803683370190505b509350866001600160401b038111156112f9576112f9614f49565b604051908082528060200260200182016040528015611322578160200160208202803683370190505b50925060005b8781101561149a57600561133c828b615603565b8154811061134c5761134c61561b565b9060005260206000200160009054906101000a90046001600160a01b031687828151811061137c5761137c61561b565b60200260200101906001600160a01b031690816001600160a01b0316815250506113cd8782815181106113b1576113b161561b565b602002602001015160008c856137bf909392919063ffffffff16565b8682815181106113df576113df61561b565b60200260200101818152505061141c8782815181106114005761140061561b565b602002602001015160018c856137bf909392919063ffffffff16565b85828151811061142e5761142e61561b565b60200260200101818152505061146b87828151811061144f5761144f61561b565b602002602001015160028c856137bf909392919063ffffffff16565b84828151811061147d5761147d61561b565b60209081029190910101528061149281615631565b915050611328565b5050945094509450945094565b600080821161152c57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611527919061559f565b61152e565b815b6001600160a01b0384166000908152600460205260409020909250611553908361387e565b9392505050565b600080600183600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d7919061559f565b6115e1919061564c565b6115eb919061564c565b845190915060005b8481101561171057611606600184615603565b6000805460405163fcbb371b60e01b81526004810184905292955090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190615524565b905060005b838110156116fb576116dd8286600460008c86815181106116a6576116a661561b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206138919092919063ffffffff16565b6116e79087615603565b9550806116f381615631565b915050611683565b5050808061170890615631565b9150506115f3565b50505092915050565b6001600160a01b03828116600090815260046020526040902080548492163314801590611753575060018101546001600160a01b03163314155b1561177157604051630101292160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600460205260409020548591166117ab576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906155b8565b1561184057604051631e59ccd960e01b815260040160405180910390fd5b6118d9600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba919061559f565b6001600160a01b038716600090815260046020526040902090866139fe565b846001600160a01b03167f0ad9bf1b8c026a174a2f30954417002a6ea00c9b08c1b8846c7951c687be809585604051610b2a91906155da565b600080821161199757600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611992919061559f565b611999565b815b9150610f906002600384613a0b565b6001600160a01b0384166000908152600460205260408120606091829186611a4657600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a41919061559f565b611a48565b865b9650611a5c86868360070180549050613788565b9095509150846001600160401b03811115611a7957611a79614f49565b604051908082528060200260200182016040528015611aa2578160200160208202803683370190505b509350846001600160401b03811115611abd57611abd614f49565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50925060005b85811015611bf9576000600781848201611b06858c615603565b81548110611b1657611b1661561b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190208054885191935090911690879084908110611b5c57611b5c61561b565b6001600160a01b0392831660209182029290920101528354611b839183911660028c6137bf565b8354611b9c9083906001600160a01b031660018d6137bf565b8454611bb59084906001600160a01b031660008e6137bf565b611bbf9190615603565b611bc99190615603565b858381518110611bdb57611bdb61561b565b60209081029190910101525080611bf181615631565b915050611aec565b50509450945094915050565b334114611c2557604051631cf4735960e01b815260040160405180910390fd5b60005460ff1615611c485760405162dc149f60e41b815260040160405180910390fd5b6000805460016001600160a81b03199091166101006001600160a01b039586160217811790915580546001600160a01b03191691909216179055565b6001600160a01b03821660009081526007602052604081206006018054829182918291829187908110611cb957611cb961561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115611cec57611cec6152e6565b6002811115611cfd57611cfd6152e6565b81526020016001820154815260200160028201548152505090508060000151816020015182604001518360400151600014158015611d3f575083604001514210155b929a91995097509095509350505050565b336000818152600760205260409020546001600160a01b0316611d865760405163cf83d93d60e01b815260040160405180910390fd5b336000908152600760205260408120600601805484908110611daa57611daa61561b565b9060005260206000209060030201905060008160020154905080421015611de4576040516303cb96db60e21b815260040160405180910390fd5b80611e0257604051630c8d9eab60e31b815260040160405180910390fd5b6000600283015560405184815233907fbf5f92dc2b945251eadf78c2ca629ae64053d979bfbc43a7b17a463707906bf99060200160405180910390a281546001830154611e549160ff16903390613b24565b50505050565b60058181548110611e6a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60015460405163322433e360e01b81523360048201819052916001600160a01b03169063322433e390602401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906155b8565b611f0e5760405163423057c560e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020611f309083613c43565b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038381166001600160a01b03199283168117909355841660009081526006602090815260409182902080549093168417909255519182527fd5828184f48f65962d10eac907318df85953d4e3542a0f09b5932ee3fe398bdd910160405180910390a15050565b606080606080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c919061559f565b90506000891161205c578061205e565b885b6000805460405163fcbb371b60e01b815260048101849052929b5090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190615524565b90506120e88989600580549050613788565b9098509250876001600160401b0381111561210557612105614f49565b60405190808252806020026020018201604052801561212e578160200160208202803683370190505b509650876001600160401b0381111561214957612149614f49565b604051908082528060200260200182016040528015612172578160200160208202803683370190505b509550876001600160401b0381111561218d5761218d614f49565b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b509450876001600160401b038111156121d1576121d1614f49565b6040519080825280602002602001820160405280156121fa578160200160208202803683370190505b50935060005b8881101561237a5760006004816005612219858f615603565b815481106122295761222961561b565b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902080548b51919350909116908a908490811061226f5761226f61561b565b6001600160a01b039283166020918202929092010152600182015489519116908990849081106122a1576122a161561b565b6001600160a01b03909216602092830291909101909101526122c3818d61387e565b8783815181106122d5576122d561561b565b60209081029190910101526122fe818d6000908152600291909101602052604090205460ff1690565b15801561231c575060008c815260038201602052604090205460ff16155b801561234557508260c0015187838151811061233a5761233a61561b565b602002602001015110155b8683815181106123575761235761561b565b91151560209283029190910190910152508061237281615631565b915050612200565b505050939792965093509350565b6001600160a01b038084166000908152600460205260409020548491166123c2576040516372898ae960e11b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243991906155b8565b1561245757604051631e59ccd960e01b815260040160405180910390fd5b8161247557604051637bc90c0560e11b815260040160405180910390fd5b612480833384613c85565b61250e3385600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc919061559f565b612507906001615603565b8686613535565b836001600160a01b0316336001600160a01b03167f8fc656e319452025372383dc27d933046d412b8253de50a10739eeaa59862be68585604051610d37929190615663565b6001600160a01b0380821660009081526007602052604081208154919283928392916125889183916101009091041684613d26565b6000549094506125a990829061010090046001600160a01b03166001613d26565b6000549093506125ca90829061010090046001600160a01b03166002613d26565b93959294505050565b6040513481527f1de49774d094a85fc1bbbd16e8d09a865fb848218f41e2da4369f528c42ee42e9060200160405180910390a1565b6001600160a01b03808316600081815260066020908152604080832054851683526004909152812060018101549193909291161461264a576000915050610f90565b600083116126ce57600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c9919061559f565b6126d0565b825b92506126dc818461387e565b949350505050565b336000818152600460205260409020546001600160a01b031661271a576040516372898ae960e11b815260040160405180910390fd5b33600081815260046020526040902060018101546001600160a01b03166127418286613f4c565b6001600160a01b0385811660008181526006602090815260409182902080546001600160a01b031916888616908117909155825194861685529084019290925290917f758820d0b14a01c1fa60b8d2bbef25ed1b6a5af4802e5dec3f08679255ba8bf39101610b2a565b606060006127bf8484600880549050613788565b9093509050826001600160401b038111156127dc576127dc614f49565b604051908082528060200260200182016040528015612805578160200160208202803683370190505b50915060005b8381101561108457600861281f8287615603565b8154811061282f5761282f61561b565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061285f5761285f61561b565b6001600160a01b03909216602092830291909101909101528061288181615631565b91505061280b565b336000818152600460205260409020546001600160a01b03166128bf576040516372898ae960e11b815260040160405180910390fd5b600080543382526004602052604082206128e79161010090046001600160a01b031685613515565b60405181815290915033907f882d5671e5b36af50883197c33d48ba56ce337589958e871ba82fb0a54adf3e89060200160405180910390a28015611e5457611e5460003383613b24565b6001600160a01b0380831660009081526004602052604090205483911661296b576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166129a15760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1891906155b8565b15612a3657604051631e59ccd960e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420612a71939092610100909104169087613fc6565b905080612a9157604051637bc90c0560e11b815260040160405180910390fd5b612ae93386600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b6040518181526001600160a01b0386169033907fddd8e3ffe5c76cd1a7cca4b98662cb0a4e3da53ee24a873da632d28ba10438369060200160405180910390a35050505050565b6001600160a01b038316600090815260076020526040812060068101546060928392839283929190612b659089908990613788565b9097509150866001600160401b03811115612b8257612b82614f49565b604051908082528060200260200182016040528015612bab578160200160208202803683370190505b509550866001600160401b03811115612bc657612bc6614f49565b604051908082528060200260200182016040528015612bef578160200160208202803683370190505b509450866001600160401b03811115612c0a57612c0a614f49565b604051908082528060200260200182016040528015612c33578160200160208202803683370190505b509350866001600160401b03811115612c4e57612c4e614f49565b604051908082528060200260200182016040528015612c77578160200160208202803683370190505b50925060005b87811015612ddb57600060068301612c95838c615603565b81548110612ca557612ca561561b565b6000918252602090912060408051606081019091526003909202018054829060ff166002811115612cd857612cd86152e6565b6002811115612ce957612ce96152e6565b81526020016001820154815260200160028201548152505090508060000151888381518110612d1a57612d1a61561b565b60200260200101906002811115612d3357612d336152e6565b90816002811115612d4657612d466152e6565b815250508060200151878381518110612d6157612d6161561b565b6020026020010181815250508060400151868381518110612d8457612d8461561b565b6020908102919091010152604081015115801590612da6575080604001514210155b858381518110612db857612db861561b565b911515602092830291909101909101525080612dd381615631565b915050612c7d565b5050939792965093509350565b600080600080600080600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061559f565b905060008711612e785780612e7a565b865b6000805460405163fcbb371b60e01b81526004810184905292995090916101009091046001600160a01b03169063fcbb371b9060240161012060405180830381865afa158015612ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef29190615524565b6001600160a01b038a1660009081526004602090815260408083208c8452600281018352818420546003820190935292205460ff918216159950169650909150612f3c818a61387e565b9350868015612f49575085155b8015612f5957508160c001518410155b6001909101546001600160a01b03169750935050509295509295909350565b600080546001600160a01b038481168352600460209081526040808520888416865260079092528420612fb5939092610100909104169085613fff565b50949350505050565b604051634ee5a1b960e01b815260040160405180910390fd5b6001600160a01b03808316600090815260046020526040902054839116613011576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166130475760405163cf83d93d60e01b815260040160405180910390fd5b600080546001600160a01b03868116835260046020908152604080852033865260079092528420613082939092610100909104169087613fc6565b604080516001600160a01b03881681526020810183905291925033917f2ef606d064225d24c1514dc94907c134faee1237445c2f63f410cce0852b2054910160405180910390a280156130db576130db60003383613b24565b505050505050565b60088181548110611e6a57600080fd5b336000818152600760205260409020546001600160a01b03166131295760405163cf83d93d60e01b815260040160405180910390fd5b60008054338252600760205260409091206131519161010090046001600160a01b0316614209565b5050565b6001600160a01b0380841660009081526004602052604090205484911661318f576040516372898ae960e11b815260040160405180910390fd5b336000818152600760205260409020546001600160a01b03166131c55760405163cf83d93d60e01b815260040160405180910390fd5b600060019054906101000a90046001600160a01b03166001600160a01b031663d4a536866040518163ffffffff1660e01b8152600401602060405180830381865afa158015613218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323c91906155b8565b1561325a57604051631e59ccd960e01b815260040160405180910390fd5b33600090815260076020908152604080832083546001600160a01b038a8116865260049094529190932061329892849261010090041690888861422d565b9350836132b857604051637bc90c0560e11b815260040160405180910390fd5b8060060160405180606001604052808760028111156132d9576132d96152e6565b8152602081018790526040016132f242620d2f00615603565b9052815460018181018455600093845260209093208251600390920201805492939092839160ff1990911690836002811115613330576133306152e6565b0217905550602082015181600101556040820151816002015550506133dc6003600060019054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c7919061559f565b6133d2906001615603565b6002919087614363565b5060068101546001600160a01b0387169033907fb649014faa7a0e23357e091fb8a67a128c33dc9480f846f7e41cb3a6c9d806109061341d9060019061564c565b60405190815260200160405180910390a3505050505050565b600082815260098501602052604081205461345f57600083815260098601602052604090208290555b6000838152600a8601602052604081205461347b906001615603565b6000858152600a88016020526040902081905560e086015190915081108015906134c757506003860160006134b1866001615603565b815260208101919091526040016000205460ff16155b15612fb5576101008501516134dc9085615603565b91505b81841015612fb557836134f181615631565b60008181526003890160205260409020805460ff1916600117905594506134df9050565b60008060006135258686866135f5565b6006880155925050509392505050565b6001600160a01b03808616600090815260076020526040902080549091166135ae5780546001600160a01b0387166001600160a01b031991821681178355600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549092161790555b6001600160a01b03851660009081526004602052604090206135d59082908690868661443e565b6130db600260038685614506565b6135f083838360006145ec565b505050565b6000808460060154905060006001856001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613641573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613665919061559f565b61366f919061564c565b90508315806136865750806136848386615603565b115b1561369857613695828261564c565b93505b60005b8481101561377e576136ae600184615603565b60405163fcbb371b60e01b8152600481018290529093506000906001600160a01b0388169063fcbb371b9060240161012060405180830381865afa1580156136fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061371e9190615524565b9050600061372d898387613891565b90508061373b57505061376c565b60a082015161374b57505061376c565b61375d818360a0015160646019614672565b6137679087615603565b955050505b8061377681615631565b91505061369b565b5050935093915050565b600080826137968587615603565b106137a8576137a5858461564c565b93505b836137b38187615603565b91509150935093915050565b60006138758560020160008560028111156137dc576137dc6152e6565b60028111156137ed576137ed6152e6565b81526020019081526020016000206000866001600160a01b03166001600160a01b0316815260200190815260200160002083876001016000876002811115613837576138376152e6565b6002811115613848576138486152e6565b8152602080820192909252604090810160009081206001600160a01b038b16825290925290209190613a0b565b95945050505050565b6000611553600484016005850184613a0b565b600081815260028401602052604081205460ff16806138c05750600082815260038501602052604090205460ff165b156138cd57506000611553565b60006138d9858461387e565b90506049831061391a578360c001518110156138f9576000915050611553565b6298968061390982610a3461567e565b613913919061569d565b91506139b3565b80613929576000915050611553565b6139356019600a61579b565b61394685608001516064601961469e565b613950908361567e565b61395a919061569d565b91508161396b576000915050611553565b61398e84606001518560400151613982919061567e565b6301e13380601961469e565b613998908361567e565b91506139a66019600a61579b565b6139b0908361569d565b91505b6000838152600a8601602052604090205480156139f55760008481526009870160205260409020546139f1846139e9848461564c565b836019614672565b9350505b50509392505050565b6135f083838360016145ec565b8254600090801580613a3957508285600081548110613a2c57613a2c61561b565b9060005260206000200154115b15613a48576000915050611553565b8285613a5560018461564c565b81548110613a6557613a6561561b565b906000526020600020015411613aa45783613a8160018361564c565b81548110613a9157613a9161561b565b9060005260206000200154915050611553565b600181118015613ada57508285613abc60028461564c565b81548110613acc57613acc61561b565b906000526020600020015411155b15613aeb5783613a8160028361564c565b6000613afa86856000856146da565b9050848181548110613b0e57613b0e61561b565b9060005260206000200154925050509392505050565b600080846002811115613b3957613b396152e6565b1415613b98576040516001600160a01b038416908390600081818185875af1925050503d8060008114613b88576040519150601f19603f3d011682016040523d82523d6000602084013e613b8d565b606091505b505080915050613c1a565b613ba184614782565b60405163a9059cbb60e01b81526001600160a01b03858116600483015260248201859052919091169063a9059cbb906044015b6020604051808303816000875af1158015613bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1791906155b8565b90505b80611e545783604051630db5347560e11b8152600401613c3a91906157a7565b60405180910390fd5b81546001600160a01b031615613c6b57604051621d934160e11b815260040160405180910390fd5b81546001600160a01b031916331782556131518282613f4c565b6000836002811115613c9957613c996152e6565b1415613cbf578034146135f057604051630fe5b06560e11b815260040160405180910390fd5b3415613cde5760405163a745ac8560e01b815260040160405180910390fd5b6000613ce984614782565b6040516323b872dd60e01b81526001600160a01b0385811660048301523060248301526044820185905291909116906323b872dd90606401613bd4565b600080846003016000846002811115613d4157613d416152e6565b6002811115613d5257613d526152e6565b8152602081019190915260400160002054905080613d74576000915050611553565b6000846001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd8919061559f565b90506000613de760018461564c565b9050600081118015613e4a575081876003016000876002811115613e0d57613e0d6152e6565b6002811115613e1e57613e1e6152e6565b81526020019081526020016000208281548110613e3d57613e3d61561b565b9060005260206000200154115b15613e5d5780613e59816157b5565b9150505b81876003016000876002811115613e7657613e766152e6565b6002811115613e8757613e876152e6565b81526020019081526020016000208281548110613ea657613ea661561b565b90600052602060002001541115613ec35760009350505050611553565b6000805b828111613f4057886004016000886002811115613ee657613ee66152e6565b6002811115613ef757613ef76152e6565b81526020019081526020016000208181548110613f1657613f1661561b565b906000526020600020015482613f2c9190615603565b915080613f3881615631565b915050613ec7565b50979650505050505050565b6001600160a01b038116613f7357604051637138356f60e01b815260040160405180910390fd5b81546001600160a01b0382811691161415613fa15760405163e037058f60e01b815260040160405180910390fd5b60019190910180546001600160a01b0319166001600160a01b03909216919091179055565b6000806000613fd787878787613fff565b86546001600160a01b0316600090815260058a01602052604090205592505050949350505050565b81546001600160a01b039081166000908152600586016020908152604080832054815163900cf0cf60e01b81529151939490938593600193928a169263900cf0cf92600480830193928290030181865afa158015614061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614085919061559f565b61408f919061564c565b90508315806140a65750806140a48386615603565b115b156140b8576140b5828261564c565b93505b60005b848110156141fe576140ce600184615603565b86549093506000906140ed908a906001600160a01b03166002876137bf565b8754614106908b906001600160a01b03166001886137bf565b885461411f908c906001600160a01b03166000896137bf565b6141299190615603565b6141339190615603565b90508061414057506141ec565b60405163fcbb371b60e01b8152600481018590526000906141b9906001600160a01b038b169063fcbb371b9060240161012060405180830381865afa15801561418d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141b19190615524565b8990876147ed565b9050806141c75750506141ec565b6141dd81836141d68b8961387e565b6019614672565b6141e79087615603565b955050505b806141f681615631565b9150506140bb565b505094509492505050565b61421582826001614838565b61422182826002614838565b61315182826000614838565b600061434986600201600085600281111561424a5761424a6152e6565b600281111561425b5761425b6152e6565b81526020808201929092526040908101600090812088546001600160a01b03908116835290845290829020825163900cf0cf60e01b815292519093918a169263900cf0cf9260048083019391928290030181865afa1580156142c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e5919061559f565b6142f0906001615603565b84896001016000886002811115614309576143096152e6565b600281111561431a5761431a6152e6565b8152602080820192909252604090810160009081208b546001600160a01b031682529092529020929190614363565b91508161435857506000613875565b612fb5848684614b5e565b835460009080158061439a57508561437c60018361564c565b8154811061438c5761438c61561b565b906000526020600020015484105b156143b857604051630eae4c9760e01b815260040160405180910390fd5b60006143c5878787614bde565b905060008682815481106143db576143db61561b565b90600052602060002001549050808511156143f657806143f8565b845b9450841561443257848783815481106144135761441361561b565b90600052602060002001600082825461442c919061564c565b90915550505b50929695505050505050565b6144ed856002016000846002811115614459576144596152e6565b600281111561446a5761446a6152e6565b81526020808201929092526040908101600090812087546001600160a01b031682529092528120908690849060018a01908760028111156144ad576144ad6152e6565b60028111156144be576144be6152e6565b8152602080820192909252604090810160009081208a546001600160a01b031682529092529020929190614506565b8454610b3390849086906001600160a01b031684614dee565b835460018111801561453d57508461451f60018361564c565b8154811061452f5761452f61561b565b906000526020600020015483105b801561456e57508461455060028361564c565b815481106145605761456061561b565b906000526020600020015483105b1561458c57604051630eae4c9760e01b815260040160405180910390fd5b6000614599868686614bde565b8654925090505b818110156130db57828582815481106145bb576145bb61561b565b9060005260206000200160008282546145d49190615603565b909155508190506145e481615631565b9150506145a0565b815160005b818110156130db57600084828151811061460d5761460d61561b565b60200260200101519050858111801561463d5750600081815260028801602052604090205460ff16151584151514155b1561465f5760008181526002880160205260409020805460ff19168515151790555b508061466a81615631565b9150506145f1565b600061467f82600a61579b565b61468a85858561469e565b614694908761567e565b613875919061569d565b6000806146ac836001615603565b6146b790600a61579b565b6146c1908661567e565b9050600a6146cf858361569d565b614694906005615603565b6000818314156146f6576146ef60018361564c565b90506126dc565b600060026147048486615603565b61470e919061569d565b9050848682815481106147235761472361561b565b9060005260206000200154111561474857614740868686846146da565b9150506126dc565b8486828154811061475b5761475b61561b565b9060005260206000200154101561387557614740868661477c846001615603565b866146da565b60006001826002811115614798576147986152e6565b14156147ac57506001602960991b01919050565b60028260028111156147c0576147c06152e6565b14156147d457506002602960991b01919050565b604051638698bf3760e01b815260040160405180910390fd5b6000806147fb858585613891565b90508061480c576000915050611553565b60a084015161481c579050611553565b61482e818560a0015160646019614672565b613875908261564c565b6000614845848484613d26565b9050806148525750505050565b600084600301600084600281111561486c5761486c6152e6565b600281111561487d5761487d6152e6565b8152602001908152602001600020805490509050836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f3919061559f565b85600301600085600281111561490b5761490b6152e6565b600281111561491c5761491c6152e6565b8152602001908152602001600020600183614937919061564c565b815481106149475761494761561b565b9060005260206000200154116149e25784600301600084600281111561496f5761496f6152e6565b6002811115614980576149806152e6565b8152602001908152602001600020600061499a9190614e6e565b8460040160008460028111156149b2576149b26152e6565b60028111156149c3576149c36152e6565b815260200190815260200160002060006149dd9190614e6e565b614b47565b6040518060200160405280866003016000866002811115614a0557614a056152e6565b6002811115614a1657614a166152e6565b8152602001908152602001600020600184614a31919061564c565b81548110614a4157614a4161561b565b9060005260206000200154815250856003016000856002811115614a6757614a676152e6565b6002811115614a7857614a786152e6565b81526020810191909152604001600020614a93916001614e8f565b506040518060200160405280866004016000866002811115614ab757614ab76152e6565b6002811115614ac857614ac86152e6565b8152602001908152602001600020600184614ae3919061564c565b81548110614af357614af361561b565b9060005260206000200154815250856004016000856002811115614b1957614b196152e6565b6002811115614b2a57614b2a6152e6565b81526020810191909152604001600020614b45916001614e8f565b505b8454610b339084906001600160a01b031684613b24565b611e5483600501836001600160a01b031663900cf0cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc7919061559f565b614bd2906001615603565b60048601919084614363565b825460009080614c19575050825460018181018555600085815260208082209093018490558454918201855584815291822001819055611553565b6000614c2660018361564c565b90506000868281548110614c3c57614c3c61561b565b9060005260206000200154905080851415614c5b575091506115539050565b80851115614cc35786546001810188556000888152602090200185905585548690819084908110614c8e57614c8e61561b565b6000918252602080832090910154835460018181018655948452919092200155614cb9908390615603565b9350505050611553565b600082118015614cf8575086614cda60018461564c565b81548110614cea57614cea61561b565b906000526020600020015485145b15614d0857614cb960018361564c565b86878381548110614d1b57614d1b61561b565b6000918252602080832090910154835460018101855593835291209091015585548690819084908110614d5057614d5061561b565b6000918252602080832090910154835460018101855593835291209091015586548590889084908110614d8557614d8561561b565b6000918252602090912001558115614dc35785614da360018461564c565b81548110614db357614db361561b565b9060005260206000200154614dc6565b60005b868381548110614dd857614dd861561b565b6000918252602090912001555091506115539050565b6001600160a01b038216600090815260088501602052604090205460ff16614e5c576001600160a01b038216600081815260088601602090815260408220805460ff191660019081179091556007880180549182018155835291200180546001600160a01b03191690911790555b611e5460048501600586018584614506565b5080546000825590600052602060002090810190614e8c9190614eda565b50565b828054828255906000526020600020908101928215614eca579160200282015b82811115614eca578251825591602001919060010190614eaf565b50614ed6929150614eda565b5090565b5b80821115614ed65760008155600101614edb565b6001600160a01b0381168114614e8c57600080fd5b60008060408385031215614f1757600080fd5b8235614f2281614eef565b946020939093013593505050565b600060208284031215614f4257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614f8257614f82614f49565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fb057614fb0614f49565b604052919050565b60006001600160401b03821115614fd157614fd1614f49565b5060051b60200190565b60008060408385031215614fee57600080fd5b8235614ff981614eef565b91506020838101356001600160401b0381111561501557600080fd5b8401601f8101861361502657600080fd5b803561503961503482614fb8565b614f88565b81815260059190911b8201830190838101908883111561505857600080fd5b928401925b828410156150765783358252928401929084019061505d565b80955050505050509250929050565b6000806040838503121561509857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156150e05781516001600160a01b0316875295820195908201906001016150bb565b509495945050505050565b6040815260006150fe60408301856150a7565b90508260208301529392505050565b6000806000806080858703121561512357600080fd5b843561512e81614eef565b966020860135965060408601359560600135945092505050565b600081518084526020808501945080840160005b838110156150e05781518752958201959082019060010161515c565b60a08152600061518b60a08301886150a7565b828103602084015261519d8188615148565b905082810360408401526151b18187615148565b905082810360608401526151c58186615148565b9150508260808301529695505050505050565b600080604083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b8301601f8101851361521257600080fd5b8035602061522261503483614fb8565b82815260059290921b8301810191818101908884111561524157600080fd5b938201935b8385101561526857843561525981614eef565b82529382019390820190615246565b98969091013596505050505050565b60608152600061528a60608301866150a7565b828103602084015261529c8186615148565b915050826040830152949350505050565b600080604083850312156152c057600080fd5b82356152cb81614eef565b915060208301356152db81614eef565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b6003811061531a57634e487b7160e01b600052602160045260246000fd5b9052565b6080810161532c82876152fc565b846020830152836040830152821515606083015295945050505050565b60006020828403121561535b57600080fd5b813561155381614eef565b60008060006060848603121561537b57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b838110156150e05781511515875295820195908201906001016153a6565b60a0815260006153d760a08301886150a7565b82810360208401526153e981886150a7565b905082810360408401526153fd8187615148565b905082810360608401526151c58186615392565b60008060006060848603121561542657600080fd5b833561543181614eef565b925060208401356003811061544557600080fd5b929592945050506040919091013590565b60008060006060848603121561546b57600080fd5b833561547681614eef565b95602085013595506040909401359392505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156154cb576154bb8483516152fc565b92840192908401906001016154a8565b505050838103828501526154df8189615148565b91505082810360408401526153fd8187615148565b60008060006060848603121561550957600080fd5b833561551481614eef565b9250602084013561544581614eef565b6000610120828403121561553757600080fd5b61553f614f5f565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b6000602082840312156155b157600080fd5b5051919050565b6000602082840312156155ca57600080fd5b8151801515811461155357600080fd5b6020815260006115536020830184615148565b634e487b7160e01b600052601160045260246000fd5b60008219821115615616576156166155ed565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615645576156456155ed565b5060010190565b60008282101561565e5761565e6155ed565b500390565b6040810161567182856152fc565b8260208301529392505050565b6000816000190483118215151615615698576156986155ed565b500290565b6000826156ba57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156110845781600019048211156156e0576156e06155ed565b808516156156ed57918102915b93841c93908002906156c4565b60008261570957506001610f90565b8161571657506000610f90565b816001811461572c576002811461573657615752565b6001915050610f90565b60ff841115615747576157476155ed565b50506001821b610f90565b5060208310610133831016604e8410600b8410161715615775575081810a610f90565b61577f83836156bf565b8060001904821115615793576157936155ed565b029392505050565b600061155383836156fa565b60208101610f9082846152fc565b6000816157c4576157c46155ed565b50600019019056fea26469706673582212200a3bb40da327dc2414c15b981a7b902457121dd4bc3e8627caf9d791841ae51864736f6c634300080c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/lib/Staker.sol/Staker.json b/artifacts/contracts/lib/Staker.sol/Staker.json index 6f879b4..3fa35db 100644 --- a/artifacts/contracts/lib/Staker.sol/Staker.json +++ b/artifacts/contracts/lib/Staker.sol/Staker.json @@ -3,8 +3,8 @@ "contractName": "Staker", "sourceName": "contracts/lib/Staker.sol", "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c6fa6bac2ecf6631f4c5c7dca20535543f581cd779ec191ec568f2e78b8cfe364736f6c634300080c0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c6fa6bac2ecf6631f4c5c7dca20535543f581cd779ec191ec568f2e78b8cfe364736f6c634300080c0033", + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200f3bac20a38e01aacdba1a01a41432c5ce7f540617da36891c84398f717583a364736f6c634300080c0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200f3bac20a38e01aacdba1a01a41432c5ce7f540617da36891c84398f717583a364736f6c634300080c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/lib/UpdateHistories.sol/UpdateHistories.json b/artifacts/contracts/lib/UpdateHistories.sol/UpdateHistories.json index fd60515..eb65749 100644 --- a/artifacts/contracts/lib/UpdateHistories.sol/UpdateHistories.json +++ b/artifacts/contracts/lib/UpdateHistories.sol/UpdateHistories.json @@ -3,8 +3,8 @@ "contractName": "UpdateHistories", "sourceName": "contracts/lib/UpdateHistories.sol", "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202b744cfab2a7a569afb6960a5ab8446276c4ee6a7851fc3536ab3cf2ed90acb864736f6c634300080c0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202b744cfab2a7a569afb6960a5ab8446276c4ee6a7851fc3536ab3cf2ed90acb864736f6c634300080c0033", + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cb48adcdcf81ee643372b876cd2daf34d46162f4f6841e9ec6bff76c021bf43264736f6c634300080c0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cb48adcdcf81ee643372b876cd2daf34d46162f4f6841e9ec6bff76c021bf43264736f6c634300080c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/lib/Validator.sol/Validator.json b/artifacts/contracts/lib/Validator.sol/Validator.json index 503c279..ea40404 100644 --- a/artifacts/contracts/lib/Validator.sol/Validator.json +++ b/artifacts/contracts/lib/Validator.sol/Validator.json @@ -3,8 +3,8 @@ "contractName": "Validator", "sourceName": "contracts/lib/Validator.sol", "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200cc340d21f7dde406399ac5436fdc12a8d3a6d01c4d9afafce0644ac37b9eeac64736f6c634300080c0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200cc340d21f7dde406399ac5436fdc12a8d3a6d01c4d9afafce0644ac37b9eeac64736f6c634300080c0033", + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122079571585221c2a7b77b78d0173a52c0ca98df07da7010ab7ed591235c9f82d6064736f6c634300080c0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122079571585221c2a7b77b78d0173a52c0ca98df07da7010ab7ed591235c9f82d6064736f6c634300080c0033", "linkReferences": {}, "deployedLinkReferences": {} }